@codecademy/gamut
68.2.268.2.3-alpha.f19d29.0
dist/DatePicker/DatePickerInput/Segment/segmentUtils.d.ts+
dist/DatePicker/DatePickerInput/Segment/segmentUtils.d.tsNew file+50
Index: package/dist/DatePicker/DatePickerInput/Segment/segmentUtils.d.ts
===================================================================
--- package/dist/DatePicker/DatePickerInput/Segment/segmentUtils.d.ts
+++ package/dist/DatePicker/DatePickerInput/Segment/segmentUtils.d.ts
@@ -0,0 +1,50 @@
+import type { DateFormatLayoutItem, DatePartKind } from '../utils';
+export type SegmentValues = {
+ month: string;
+ day: string;
+ year: string;
+};
+export declare const getDateSegmentsFromDate: (date: Date | null) => SegmentValues;
+/**
+ * Build a calendar date from segment strings. Requires a 4-digit year and non-empty month/day.
+ */
+export declare const parseSegmentsToDate: (segments: SegmentValues) => Date | null;
+/** Digits-only slices used when checking for a fully typed date (2 / 2 / 4). */
+export declare const getStrictSegmentDigits: (segments: SegmentValues) => {
+ month: string;
+ day: string;
+ year: string;
+};
+/** User finished all three fields (2-digit month, 2-digit day, 4-digit year). */
+export declare const isStrictlyCompleteDateEntry: (strictSegments: SegmentValues) => boolean;
+/**
+ * Normalize segment strings after blur (digits only).
+ * When the user has fully typed 2 / 2 / 4 digits, validates the calendar date without
+ * clamping invalid days/months — if invalid, returns empty segments (caller clears selection).
+ * Otherwise pads/clamps partial input as before.
+ */
+export declare const normalizeSegmentValues: (segments: SegmentValues) => SegmentValues;
+export declare const segmentPlaceholder: (field: DatePartKind) => "YYYY" | "MM" | "DD";
+/** Digit capacity per field (typing / spinbutton editing). */
+export declare const segmentMaxLength: (field: DatePartKind) => number;
+/**
+ * Min/max for spinbutton `aria-*` and ArrowUp/ArrowDown stepping (month/day/year).
+ * Day max uses month/year when available so February etc. behave correctly.
+ */
+export declare const getSegmentSpinBounds: (field: DatePartKind, segments: SegmentValues) => {
+ min: number;
+ max: number;
+};
+/** Numeric value of a segment string (digits only), or null if empty. */
+export declare const parseSegmentNumericString: (str: string) => number | null;
+export declare const padSegmentNumber: (field: DatePartKind, numericValue: number) => string;
+/** Append one digit to a segment string (max length enforced). */
+export declare const appendSegmentDigit: (field: DatePartKind, prev: string, digit: string) => string;
+/**
+ * Step a segment up/down (ArrowUp / ArrowDown). Empty year steps from the current calendar year.
+ */
+export declare const spinSegment: (field: DatePartKind, segments: SegmentValues, delta: 1 | -1) => string;
+/** Build the visible date string from segment state in locale layout order (includes literal separators). */
+export declare const buildCombinedFromSegments: (segments: SegmentValues, layout: DateFormatLayoutItem[]) => string;
+/** Map a digit-only string into segment fields following locale field order (2 / 2 / 4). */
+export declare const digitsToSegments: (digits: string, fieldOrder: DatePartKind[]) => SegmentValues;