@codecademy/gamut
68.2.268.2.3-alpha.93a7da.0
dist/DatePicker/DatePickerInput/Segment/utils.d.ts+
dist/DatePicker/DatePickerInput/Segment/utils.d.tsNew file+70
Index: package/dist/DatePicker/DatePickerInput/Segment/utils.d.ts
===================================================================
--- package/dist/DatePicker/DatePickerInput/Segment/utils.d.ts
+++ package/dist/DatePicker/DatePickerInput/Segment/utils.d.ts
@@ -0,0 +1,70 @@
+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 getSegmentPlaceholder: (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, segments, }: {
+ 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, numericValue, }: {
+ field: DatePartKind;
+ numericValue: number;
+}) => string;
+/** Append one digit to a segment string (max length enforced). */
+export declare const appendSegmentDigit: ({ field, prev, digit, }: {
+ 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, segments, delta, }: {
+ 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, layout, }: {
+ 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, fieldOrder, }: {
+ digits: string;
+ fieldOrder: DatePartKind[];
+}) => SegmentValues;