@codecademy/gamut

68.6.268.6.3-alpha.92d8ae.0
dist/DatePicker/DatePickerInput/Segment/utils.js
~dist/DatePicker/DatePickerInput/Segment/utils.jsModified
+71
Index: package/dist/DatePicker/DatePickerInput/Segment/utils.js
===================================================================
--- package/dist/DatePicker/DatePickerInput/Segment/utils.js
+++ package/dist/DatePicker/DatePickerInput/Segment/utils.js
@@ -41,8 +41,23 @@
     year
   } = strictSegments;
   return year.length === 4 && month.length === 2 && day.length === 2;
 };
+
+/** Year is full length and both month and day have digits (e.g. 2/30/2026). */
+export const isCompleteDateEntryAttempt = strictSegments => {
+  const {
+    month,
+    day,
+    year
+  } = strictSegments;
+  return year.length === 4 && month.length > 0 && day.length > 0;
+};
+export const padSegmentDigitsForParse = strictSegments => ({
+  month: strictSegments.month.padStart(2, '0'),
+  day: strictSegments.day.padStart(2, '0'),
+  year: strictSegments.year
+});
 export const normalizeSegmentValues = segments => {
   const strictSegments = getStrictSegmentDigits(segments);
   if (isStrictlyCompleteDateEntry(strictSegments)) {
     const parsed = parseSegmentsToDate(strictSegments);
@@ -77,8 +92,64 @@
     day,
     year
   };
 };
+export const getSegmentValidationState = segments => {
+  const strictSegments = getStrictSegmentDigits(segments);
+  if (isStrictlyCompleteDateEntry(strictSegments)) {
+    const parsed = parseSegmentsToDate(strictSegments);
+    return {
+      isInvalid: parsed === null,
+      parsedDate: parsed,
+      segments: parsed ? getDateSegmentsFromDate(parsed) : strictSegments
+    };
+  }
+  if (isCompleteDateEntryAttempt(strictSegments)) {
+    const paddedSegments = padSegmentDigitsForParse(strictSegments);
+    const parsed = parseSegmentsToDate(paddedSegments);
+    return {
+      isInvalid: parsed === null,
+      parsedDate: parsed,
+      segments: parsed ? getDateSegmentsFromDate(parsed) : paddedSegments
+    };
+  }
+  return null;
+};
+export const resolveSegmentsOnBlur = (segments, boundDate) => {
+  const validation = getSegmentValidationState(segments);
+  if (validation) {
+    return {
+      isInvalid: validation.isInvalid,
+      parsedDate: validation.parsedDate,
+      segments: validation.segments,
+      shouldClear: false
+    };
+  }
+  const normalized = normalizeSegmentValues(segments);
+  const parsed = parseSegmentsToDate(normalized);
+  if (parsed) {
+    return {
+      isInvalid: false,
+      parsedDate: parsed,
+      segments: normalized,
+      shouldClear: false
+    };
+  }
+  if (!normalized.month && !normalized.day && !normalized.year) {
+    return {
+      isInvalid: false,
+      parsedDate: null,
+      segments: getDateSegmentsFromDate(null),
+      shouldClear: true
+    };
+  }
+  return {
+    isInvalid: false,
+    parsedDate: null,
+    segments: getDateSegmentsFromDate(boundDate),
+    shouldClear: false
+  };
+};
 export const getSegmentPlaceholder = field => field === 'year' ? 'YYYY' : field === 'month' ? 'MM' : 'DD';
 export const segmentMaxLength = field => field === 'year' ? 4 : 2;
 export const getSegmentSpinBounds = ({
   field,