@cdx-ui/primitives 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/lib/commonjs/calendar/CalendarRoot.js +3 -1
  2. package/lib/commonjs/calendar/CalendarRoot.js.map +1 -1
  3. package/lib/commonjs/calendar/context.js.map +1 -1
  4. package/lib/commonjs/date-field/DateFieldRoot.js +5 -1
  5. package/lib/commonjs/date-field/DateFieldRoot.js.map +1 -1
  6. package/lib/commonjs/date-field/DateFieldSegment.js +7 -1
  7. package/lib/commonjs/date-field/DateFieldSegment.js.map +1 -1
  8. package/lib/commonjs/date-field/context.js.map +1 -1
  9. package/lib/commonjs/date-picker/DatePickerRoot.js +59 -13
  10. package/lib/commonjs/date-picker/DatePickerRoot.js.map +1 -1
  11. package/lib/commonjs/date-picker/context.js.map +1 -1
  12. package/lib/module/calendar/CalendarRoot.js +3 -1
  13. package/lib/module/calendar/CalendarRoot.js.map +1 -1
  14. package/lib/module/calendar/context.js.map +1 -1
  15. package/lib/module/date-field/DateFieldRoot.js +6 -2
  16. package/lib/module/date-field/DateFieldRoot.js.map +1 -1
  17. package/lib/module/date-field/DateFieldSegment.js +7 -1
  18. package/lib/module/date-field/DateFieldSegment.js.map +1 -1
  19. package/lib/module/date-field/context.js.map +1 -1
  20. package/lib/module/date-picker/DatePickerRoot.js +62 -16
  21. package/lib/module/date-picker/DatePickerRoot.js.map +1 -1
  22. package/lib/module/date-picker/context.js.map +1 -1
  23. package/lib/typescript/calendar/CalendarRoot.d.ts.map +1 -1
  24. package/lib/typescript/calendar/context.d.ts +1 -0
  25. package/lib/typescript/calendar/context.d.ts.map +1 -1
  26. package/lib/typescript/calendar/types.d.ts +7 -0
  27. package/lib/typescript/calendar/types.d.ts.map +1 -1
  28. package/lib/typescript/date-field/DateFieldRoot.d.ts.map +1 -1
  29. package/lib/typescript/date-field/DateFieldSegment.d.ts.map +1 -1
  30. package/lib/typescript/date-field/context.d.ts +2 -0
  31. package/lib/typescript/date-field/context.d.ts.map +1 -1
  32. package/lib/typescript/date-picker/DatePickerRoot.d.ts +29 -3
  33. package/lib/typescript/date-picker/DatePickerRoot.d.ts.map +1 -1
  34. package/lib/typescript/date-picker/context.d.ts +1 -0
  35. package/lib/typescript/date-picker/context.d.ts.map +1 -1
  36. package/package.json +3 -3
  37. package/src/calendar/CalendarRoot.tsx +3 -0
  38. package/src/calendar/context.tsx +1 -0
  39. package/src/calendar/types.ts +7 -0
  40. package/src/date-field/DateFieldRoot.tsx +4 -1
  41. package/src/date-field/DateFieldSegment.tsx +19 -3
  42. package/src/date-field/context.tsx +2 -0
  43. package/src/date-picker/DatePickerRoot.tsx +127 -18
  44. package/src/date-picker/context.tsx +1 -0
@@ -24,6 +24,7 @@ const CalendarRoot = exports.CalendarRoot = /*#__PURE__*/(0, _react.forwardRef)(
24
24
  onMonthIdChange,
25
25
  minValue,
26
26
  maxValue,
27
+ isDateUnavailable,
27
28
  disabled = false,
28
29
  locale = 'en-US',
29
30
  labels: labelsProp,
@@ -70,12 +71,13 @@ const CalendarRoot = exports.CalendarRoot = /*#__PURE__*/(0, _react.forwardRef)(
70
71
  onMonthIdChange: setMonthId,
71
72
  minValue,
72
73
  maxValue,
74
+ isDateUnavailable,
73
75
  disabled,
74
76
  locale,
75
77
  labels,
76
78
  view,
77
79
  setView
78
- }), [value, setValue, monthId, setMonthId, minValue, maxValue, disabled, locale, labels, view, setView]);
80
+ }), [value, setValue, monthId, setMonthId, minValue, maxValue, isDateUnavailable, disabled, locale, labels, view, setView]);
79
81
  const Comp = asChild ? _slot.Slot : _reactNative.View;
80
82
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_context.CalendarContext.Provider, {
81
83
  value: contextValue,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_reactNative","_formatters","_utils","_slot","_accessibleLabel","_dataAttributes","_context","_jsxRuntime","CalendarRoot","exports","forwardRef","asChild","children","value","valueProp","defaultValue","onValueChange","monthId","monthIdProp","defaultMonthId","onMonthIdChange","minValue","maxValue","disabled","locale","labels","labelsProp","accessibilityLabel","accessibilityLabelProp","ariaLabelProp","props","ref","useMemo","resolveDateComponentLabels","resolveAccessibleLabel","setValue","useControllableState","prop","defaultProp","onChange","setMonthId","toMonthId","todayMonthId","prevValueRef","useRef","useEffect","undefined","current","view","setViewState","useState","setView","useCallback","next","contextValue","Comp","Slot","View","jsx","CalendarContext","Provider","accessibilityRole","mergeDataAttributes","dataAttributes","accessibleLabelAttributes","displayName"],"sourceRoot":"../../../src","sources":["calendar/CalendarRoot.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_reactNative","_formatters","_utils","_slot","_accessibleLabel","_dataAttributes","_context","_jsxRuntime","CalendarRoot","exports","forwardRef","asChild","children","value","valueProp","defaultValue","onValueChange","monthId","monthIdProp","defaultMonthId","onMonthIdChange","minValue","maxValue","isDateUnavailable","disabled","locale","labels","labelsProp","accessibilityLabel","accessibilityLabelProp","ariaLabelProp","props","ref","useMemo","resolveDateComponentLabels","resolveAccessibleLabel","setValue","useControllableState","prop","defaultProp","onChange","setMonthId","toMonthId","todayMonthId","prevValueRef","useRef","useEffect","undefined","current","view","setViewState","useState","setView","useCallback","next","contextValue","Comp","Slot","View","jsx","CalendarContext","Provider","accessibilityRole","mergeDataAttributes","dataAttributes","accessibleLabelAttributes","displayName"],"sourceRoot":"../../../src","sources":["calendar/CalendarRoot.tsx"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","CalendarContext","exports","createContext","useCalendarContext","ctx","useContext","Error"],"sourceRoot":"../../../src","sources":["calendar/context.tsx"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAmBO,MAAMC,eAAe,GAAAC,OAAA,CAAAD,eAAA,gBAAG,IAAAE,oBAAa,EAA8B,IAAI,CAAC;AAExE,SAASC,kBAAkBA,CAAA,EAAyB;EACzD,MAAMC,GAAG,GAAG,IAAAC,iBAAU,EAACL,eAAe,CAAC;EACvC,IAAI,CAACI,GAAG,EAAE;IACR,MAAM,IAAIE,KAAK,CAAC,+DAA+D,CAAC;EAClF;EACA,OAAOF,GAAG;AACZ","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","CalendarContext","exports","createContext","useCalendarContext","ctx","useContext","Error"],"sourceRoot":"../../../src","sources":["calendar/context.tsx"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAoBO,MAAMC,eAAe,GAAAC,OAAA,CAAAD,eAAA,gBAAG,IAAAE,oBAAa,EAA8B,IAAI,CAAC;AAExE,SAASC,kBAAkBA,CAAA,EAAyB;EACzD,MAAMC,GAAG,GAAG,IAAAC,iBAAU,EAACL,eAAe,CAAC;EACvC,IAAI,CAACI,GAAG,EAAE;IACR,MAAM,IAAIE,KAAK,CAAC,+DAA+D,CAAC;EAClF;EACA,OAAOF,GAAG;AACZ","ignoreList":[]}
@@ -34,6 +34,9 @@ const DateFieldRoot = exports.DateFieldRoot = /*#__PURE__*/(0, _react.forwardRef
34
34
  isInvalid,
35
35
  isRequired
36
36
  });
37
+ const {
38
+ errorMessage
39
+ } = (0, _utils.useFormControlContext)();
37
40
  const [value, setValue] = (0, _utils.useControllableState)({
38
41
  prop: valueProp,
39
42
  defaultProp: defaultValue,
@@ -64,8 +67,9 @@ const DateFieldRoot = exports.DateFieldRoot = /*#__PURE__*/(0, _react.forwardRef
64
67
  disabled: !!formControl.disabled,
65
68
  readOnly: !!formControl.readOnly,
66
69
  invalid: !!formControl['aria-invalid'],
70
+ errorMessage,
67
71
  ...segmentState
68
- }), [value, setValue, mode, locale, labels, segments, formControl.disabled, formControl.readOnly, formControl['aria-invalid'], segmentState]);
72
+ }), [value, setValue, mode, locale, labels, segments, formControl.disabled, formControl.readOnly, formControl['aria-invalid'], errorMessage, segmentState]);
69
73
  const Comp = asChild ? _slot.Slot : _reactNative.View;
70
74
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_context.DateFieldContext.Provider, {
71
75
  value: contextValue,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_reactNative","_formatters","_utils","_slot","_dataAttributes","_context","_useDateFieldSegmentState","_jsxRuntime","DateFieldRoot","exports","forwardRef","asChild","children","value","valueProp","defaultValue","onValueChange","mode","locale","labels","labelsProp","isDisabled","isReadOnly","isInvalid","isRequired","props","ref","formControl","useFormControl","setValue","useControllableState","prop","defaultProp","onChange","next","useMemo","resolveDateComponentLabels","segments","getDateFieldSegments","segmentState","useDateFieldSegmentState","disabled","readOnly","contextValue","invalid","Comp","Slot","View","jsx","DateFieldContext","Provider","mergeDataAttributes","dataAttributes","readonly","displayName"],"sourceRoot":"../../../src","sources":["date-field/DateFieldRoot.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_reactNative","_formatters","_utils","_slot","_dataAttributes","_context","_useDateFieldSegmentState","_jsxRuntime","DateFieldRoot","exports","forwardRef","asChild","children","value","valueProp","defaultValue","onValueChange","mode","locale","labels","labelsProp","isDisabled","isReadOnly","isInvalid","isRequired","props","ref","formControl","useFormControl","errorMessage","useFormControlContext","setValue","useControllableState","prop","defaultProp","onChange","next","useMemo","resolveDateComponentLabels","segments","getDateFieldSegments","segmentState","useDateFieldSegmentState","disabled","readOnly","contextValue","invalid","Comp","Slot","View","jsx","DateFieldContext","Provider","mergeDataAttributes","dataAttributes","readonly","displayName"],"sourceRoot":"../../../src","sources":["date-field/DateFieldRoot.tsx"],"mappings":"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","ignoreList":[]}
@@ -24,6 +24,8 @@ const DateFieldSegment = exports.DateFieldSegment = /*#__PURE__*/(0, _react.forw
24
24
  const {
25
25
  disabled,
26
26
  readOnly,
27
+ invalid,
28
+ errorMessage,
27
29
  focusedSegmentIndex,
28
30
  focusSegment,
29
31
  getSegmentDisplayText,
@@ -50,13 +52,17 @@ const DateFieldSegment = exports.DateFieldSegment = /*#__PURE__*/(0, _react.forw
50
52
  placeholder: segment.text === displayText && !segment.value
51
53
  }));
52
54
  if (segment.isEditable && !asChild) {
55
+ // `aria-invalid` only reaches web screen readers; native ones need it in the name and hint.
56
+ const announceInvalid = invalid && _reactNative.Platform.OS !== 'web';
53
57
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Pressable, {
54
58
  accessibilityRole: "spinbutton",
55
- accessibilityLabel: (0, _formatters.getDateSegmentAccessibilityLabel)(segment.type, labels),
59
+ accessibilityLabel: (0, _formatters.getDateSegmentAccessibilityLabel)(segment.type, labels, announceInvalid),
60
+ accessibilityHint: announceInvalid ? errorMessage : undefined,
56
61
  accessibilityState: {
57
62
  disabled,
58
63
  selected: isFocused
59
64
  },
65
+ "aria-invalid": invalid || undefined,
60
66
  disabled: disabled || readOnly,
61
67
  onPress: handlePress,
62
68
  onPressIn: preventWebFocusSteal
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_reactNative","_formatters","_slot","_dataAttributes","_context","_segmentIndex","_jsxRuntime","DateFieldSegment","exports","forwardRef","asChild","segment","segmentIndex","segmentIndexProp","style","props","ref","contextSegmentIndex","useDateFieldSegmentIndex","disabled","readOnly","focusedSegmentIndex","focusSegment","getSegmentDisplayText","labels","useDateFieldContext","isFocused","displayText","handlePress","useCallback","preventWebFocusSteal","event","Platform","OS","maybeDom","preventDefault","dataProps","mergeDataAttributes","dataAttributes","slot","focus","placeholder","text","value","isEditable","jsx","Pressable","accessibilityRole","accessibilityLabel","getDateSegmentAccessibilityLabel","type","accessibilityState","selected","onPress","onPressIn","zIndex","onMouseDown","e","children","Text","Comp","Slot","importantForAccessibility","displayName"],"sourceRoot":"../../../src","sources":["date-field/DateFieldSegment.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_reactNative","_formatters","_slot","_dataAttributes","_context","_segmentIndex","_jsxRuntime","DateFieldSegment","exports","forwardRef","asChild","segment","segmentIndex","segmentIndexProp","style","props","ref","contextSegmentIndex","useDateFieldSegmentIndex","disabled","readOnly","invalid","errorMessage","focusedSegmentIndex","focusSegment","getSegmentDisplayText","labels","useDateFieldContext","isFocused","displayText","handlePress","useCallback","preventWebFocusSteal","event","Platform","OS","maybeDom","preventDefault","dataProps","mergeDataAttributes","dataAttributes","slot","focus","placeholder","text","value","isEditable","announceInvalid","jsx","Pressable","accessibilityRole","accessibilityLabel","getDateSegmentAccessibilityLabel","type","accessibilityHint","undefined","accessibilityState","selected","onPress","onPressIn","zIndex","onMouseDown","e","children","Text","Comp","Slot","importantForAccessibility","displayName"],"sourceRoot":"../../../src","sources":["date-field/DateFieldSegment.tsx"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","DateFieldContext","exports","createContext","useDateFieldContext","ctx","useContext","Error"],"sourceRoot":"../../../src","sources":["date-field/context.tsx"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AASA;;AA8BO,MAAMC,gBAAgB,GAAAC,OAAA,CAAAD,gBAAA,gBAAG,IAAAE,oBAAa,EAA+B,IAAI,CAAC;AAE1E,SAASC,mBAAmBA,CAAA,EAA0B;EAC3D,MAAMC,GAAG,GAAG,IAAAC,iBAAU,EAACL,gBAAgB,CAAC;EACxC,IAAI,CAACI,GAAG,EAAE;IACR,MAAM,IAAIE,KAAK,CAAC,iEAAiE,CAAC;EACpF;EACA,OAAOF,GAAG;AACZ","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","DateFieldContext","exports","createContext","useDateFieldContext","ctx","useContext","Error"],"sourceRoot":"../../../src","sources":["date-field/context.tsx"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AASA;;AAgCO,MAAMC,gBAAgB,GAAAC,OAAA,CAAAD,gBAAA,gBAAG,IAAAE,oBAAa,EAA+B,IAAI,CAAC;AAE1E,SAASC,mBAAmBA,CAAA,EAA0B;EAC3D,MAAMC,GAAG,GAAG,IAAAC,iBAAU,EAACL,gBAAgB,CAAC;EACxC,IAAI,CAACI,GAAG,EAAE;IACR,MAAM,IAAIE,KAAK,CAAC,iEAAiE,CAAC;EACpF;EACA,OAAOF,GAAG;AACZ","ignoreList":[]}
@@ -28,6 +28,8 @@ const DatePickerRoot = exports.DatePickerRoot = /*#__PURE__*/(0, _react.forwardR
28
28
  isRequired,
29
29
  minValue,
30
30
  maxValue,
31
+ isDateUnavailable,
32
+ onValidationChange,
31
33
  locale = 'en-US',
32
34
  labels: labelsProp,
33
35
  ...props
@@ -49,6 +51,45 @@ const DatePickerRoot = exports.DatePickerRoot = /*#__PURE__*/(0, _react.forwardR
49
51
  prop: undefined,
50
52
  defaultProp: value
51
53
  });
54
+ const validationReason = (0, _react.useMemo)(() => value === undefined ? undefined : (0, _formatters.getDateValidationReason)(value, {
55
+ minValue,
56
+ maxValue,
57
+ isDateUnavailable
58
+ }), [isDateUnavailable, maxValue, minValue, value]);
59
+ const resolvedInvalid = !!isInvalid || validationReason !== undefined;
60
+ const validationMessage = (0, _react.useMemo)(() => validationReason === undefined ? undefined : (0, _formatters.formatDateValidationMessage)(labels, validationReason, {
61
+ minValue,
62
+ maxValue
63
+ }, {
64
+ locale
65
+ }), [labels, locale, maxValue, minValue, validationReason]);
66
+ const onValidationChangeRef = (0, _react.useRef)(onValidationChange);
67
+ onValidationChangeRef.current = onValidationChange;
68
+ const reportedValidationRef = (0, _react.useRef)({
69
+ reason: undefined,
70
+ message: undefined
71
+ });
72
+ (0, _react.useLayoutEffect)(() => {
73
+ const reported = reportedValidationRef.current;
74
+ if (reported.reason === validationReason && reported.message === validationMessage) {
75
+ return;
76
+ }
77
+ reportedValidationRef.current = {
78
+ reason: validationReason,
79
+ message: validationMessage
80
+ };
81
+ onValidationChangeRef.current?.(validationReason, validationMessage);
82
+ }, [validationMessage, validationReason]);
83
+ const reportsToField = (0, _utils.useReportFormControlValidation)(resolvedInvalid, validationMessage);
84
+
85
+ // Without an enclosing `Field` there is nothing to report to, so provide the picker's
86
+ // validation to its own children (`Field.Error`, `Field.Helper`, the input group).
87
+ const parentFormControl = (0, _utils.useFormControlContext)();
88
+ const standaloneFormControl = (0, _react.useMemo)(() => reportsToField ? undefined : {
89
+ ...parentFormControl,
90
+ isInvalid: !!parentFormControl.isInvalid || resolvedInvalid,
91
+ errorMessage: validationMessage
92
+ }, [parentFormControl, reportsToField, resolvedInvalid, validationMessage]);
52
93
  const surfacesRef = (0, _react.useRef)(new Set());
53
94
  const anchorRef = (0, _react.useRef)(null);
54
95
  const triggerRef = (0, _react.useRef)(null);
@@ -88,13 +129,26 @@ const DatePickerRoot = exports.DatePickerRoot = /*#__PURE__*/(0, _react.forwardR
88
129
  disabled,
89
130
  minValue,
90
131
  maxValue,
132
+ isDateUnavailable,
91
133
  locale,
92
134
  labels,
93
135
  registerSurface,
94
136
  anchorRef,
95
137
  triggerRef
96
- }), [value, setValue, draftValue, setDraftValue, open, setOpen, disabled, minValue, maxValue, locale, labels, registerSurface]);
138
+ }), [value, setValue, draftValue, setDraftValue, open, setOpen, disabled, minValue, maxValue, isDateUnavailable, locale, labels, registerSurface]);
97
139
  const Comp = asChild ? _slot.Slot : _reactNative.View;
140
+ const field = /*#__PURE__*/(0, _jsxRuntime.jsx)(_DateFieldRoot.DateFieldRoot, {
141
+ value: value,
142
+ onValueChange: next => setValue(next),
143
+ mode: "date",
144
+ locale: locale,
145
+ labels: labelsProp,
146
+ isDisabled: disabled,
147
+ isReadOnly: isReadOnly,
148
+ isInvalid: resolvedInvalid,
149
+ isRequired: isRequired,
150
+ children: children
151
+ });
98
152
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_context.DatePickerContext.Provider, {
99
153
  value: contextValue,
100
154
  children: /*#__PURE__*/(0, _jsxRuntime.jsx)(Comp, {
@@ -104,18 +158,10 @@ const DatePickerRoot = exports.DatePickerRoot = /*#__PURE__*/(0, _react.forwardR
104
158
  disabled,
105
159
  open
106
160
  })),
107
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_DateFieldRoot.DateFieldRoot, {
108
- value: value,
109
- onValueChange: next => setValue(next),
110
- mode: "date",
111
- locale: locale,
112
- labels: labelsProp,
113
- isDisabled: disabled,
114
- isReadOnly: isReadOnly,
115
- isInvalid: isInvalid,
116
- isRequired: isRequired,
117
- children: children
118
- })
161
+ children: standaloneFormControl ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_utils.FormControlContext.Provider, {
162
+ value: standaloneFormControl,
163
+ children: field
164
+ }) : field
119
165
  })
120
166
  });
121
167
  });
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_reactNative","_formatters","_utils","_DateFieldRoot","_slot","_dataAttributes","_context","_jsxRuntime","DatePickerRoot","exports","forwardRef","asChild","children","value","valueProp","defaultValue","onValueChange","isOpen","openProp","defaultOpen","onOpenChange","isDisabled","disabled","isReadOnly","isInvalid","isRequired","minValue","maxValue","locale","labels","labelsProp","props","ref","useMemo","resolveDateComponentLabels","setValue","useControllableState","prop","defaultProp","onChange","next","open","setOpenState","draftValue","setDraftValue","undefined","surfacesRef","useRef","Set","anchorRef","triggerRef","setOpen","useCallback","registerSurface","type","current","has","add","size","console","warn","useEffect","clear","contextValue","Comp","Slot","View","jsx","DatePickerContext","Provider","mergeRefs","mergeDataAttributes","dataAttributes","DateFieldRoot","mode","displayName"],"sourceRoot":"../../../src","sources":["date-picker/DatePickerRoot.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_reactNative","_formatters","_utils","_DateFieldRoot","_slot","_dataAttributes","_context","_jsxRuntime","DatePickerRoot","exports","forwardRef","asChild","children","value","valueProp","defaultValue","onValueChange","isOpen","openProp","defaultOpen","onOpenChange","isDisabled","disabled","isReadOnly","isInvalid","isRequired","minValue","maxValue","isDateUnavailable","onValidationChange","locale","labels","labelsProp","props","ref","useMemo","resolveDateComponentLabels","setValue","useControllableState","prop","defaultProp","onChange","next","open","setOpenState","draftValue","setDraftValue","undefined","validationReason","getDateValidationReason","resolvedInvalid","validationMessage","formatDateValidationMessage","onValidationChangeRef","useRef","current","reportedValidationRef","reason","message","useLayoutEffect","reported","reportsToField","useReportFormControlValidation","parentFormControl","useFormControlContext","standaloneFormControl","errorMessage","surfacesRef","Set","anchorRef","triggerRef","setOpen","useCallback","registerSurface","type","has","add","size","console","warn","useEffect","clear","contextValue","Comp","Slot","View","field","jsx","DateFieldRoot","mode","DatePickerContext","Provider","mergeRefs","mergeDataAttributes","dataAttributes","FormControlContext","displayName"],"sourceRoot":"../../../src","sources":["date-picker/DatePickerRoot.tsx"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","DatePickerContext","exports","createContext","useDatePickerContext","ctx","useContext","Error"],"sourceRoot":"../../../src","sources":["date-picker/context.tsx"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAyBO,MAAMC,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,gBAAG,IAAAE,oBAAa,EAAgC,IAAI,CAAC;AAE5E,SAASC,oBAAoBA,CAAA,EAA2B;EAC7D,MAAMC,GAAG,GAAG,IAAAC,iBAAU,EAACL,iBAAiB,CAAC;EACzC,IAAI,CAACI,GAAG,EAAE;IACR,MAAM,IAAIE,KAAK,CAAC,mEAAmE,CAAC;EACtF;EACA,OAAOF,GAAG;AACZ","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","DatePickerContext","exports","createContext","useDatePickerContext","ctx","useContext","Error"],"sourceRoot":"../../../src","sources":["date-picker/context.tsx"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AA0BO,MAAMC,iBAAiB,GAAAC,OAAA,CAAAD,iBAAA,gBAAG,IAAAE,oBAAa,EAAgC,IAAI,CAAC;AAE5E,SAASC,oBAAoBA,CAAA,EAA2B;EAC7D,MAAMC,GAAG,GAAG,IAAAC,iBAAU,EAACL,iBAAiB,CAAC;EACzC,IAAI,CAACI,GAAG,EAAE;IACR,MAAM,IAAIE,KAAK,CAAC,mEAAmE,CAAC;EACtF;EACA,OAAOF,GAAG;AACZ","ignoreList":[]}
@@ -20,6 +20,7 @@ export const CalendarRoot = /*#__PURE__*/forwardRef(({
20
20
  onMonthIdChange,
21
21
  minValue,
22
22
  maxValue,
23
+ isDateUnavailable,
23
24
  disabled = false,
24
25
  locale = 'en-US',
25
26
  labels: labelsProp,
@@ -66,12 +67,13 @@ export const CalendarRoot = /*#__PURE__*/forwardRef(({
66
67
  onMonthIdChange: setMonthId,
67
68
  minValue,
68
69
  maxValue,
70
+ isDateUnavailable,
69
71
  disabled,
70
72
  locale,
71
73
  labels,
72
74
  view,
73
75
  setView
74
- }), [value, setValue, monthId, setMonthId, minValue, maxValue, disabled, locale, labels, view, setView]);
76
+ }), [value, setValue, monthId, setMonthId, minValue, maxValue, isDateUnavailable, disabled, locale, labels, view, setView]);
75
77
  const Comp = asChild ? Slot : View;
76
78
  return /*#__PURE__*/_jsx(CalendarContext.Provider, {
77
79
  value: contextValue,
@@ -1 +1 @@
1
- {"version":3,"names":["forwardRef","useCallback","useEffect","useMemo","useRef","useState","View","todayMonthId","toMonthId","resolveDateComponentLabels","useControllableState","Slot","accessibleLabelAttributes","resolveAccessibleLabel","dataAttributes","mergeDataAttributes","CalendarContext","jsx","_jsx","CalendarRoot","asChild","children","value","valueProp","defaultValue","onValueChange","monthId","monthIdProp","defaultMonthId","onMonthIdChange","minValue","maxValue","disabled","locale","labels","labelsProp","accessibilityLabel","accessibilityLabelProp","ariaLabelProp","props","ref","setValue","prop","defaultProp","onChange","setMonthId","prevValueRef","undefined","current","view","setViewState","setView","next","contextValue","Comp","Provider","accessibilityRole","displayName"],"sourceRoot":"../../../src","sources":["calendar/CalendarRoot.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["forwardRef","useCallback","useEffect","useMemo","useRef","useState","View","todayMonthId","toMonthId","resolveDateComponentLabels","useControllableState","Slot","accessibleLabelAttributes","resolveAccessibleLabel","dataAttributes","mergeDataAttributes","CalendarContext","jsx","_jsx","CalendarRoot","asChild","children","value","valueProp","defaultValue","onValueChange","monthId","monthIdProp","defaultMonthId","onMonthIdChange","minValue","maxValue","isDateUnavailable","disabled","locale","labels","labelsProp","accessibilityLabel","accessibilityLabelProp","ariaLabelProp","props","ref","setValue","prop","defaultProp","onChange","setMonthId","prevValueRef","undefined","current","view","setViewState","setView","next","contextValue","Comp","Provider","accessibilityRole","displayName"],"sourceRoot":"../../../src","sources":["calendar/CalendarRoot.tsx"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["createContext","useContext","CalendarContext","useCalendarContext","ctx","Error"],"sourceRoot":"../../../src","sources":["calendar/context.tsx"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;AAmBjD,OAAO,MAAMC,eAAe,gBAAGF,aAAa,CAA8B,IAAI,CAAC;AAE/E,OAAO,SAASG,kBAAkBA,CAAA,EAAyB;EACzD,MAAMC,GAAG,GAAGH,UAAU,CAACC,eAAe,CAAC;EACvC,IAAI,CAACE,GAAG,EAAE;IACR,MAAM,IAAIC,KAAK,CAAC,+DAA+D,CAAC;EAClF;EACA,OAAOD,GAAG;AACZ","ignoreList":[]}
1
+ {"version":3,"names":["createContext","useContext","CalendarContext","useCalendarContext","ctx","Error"],"sourceRoot":"../../../src","sources":["calendar/context.tsx"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;AAoBjD,OAAO,MAAMC,eAAe,gBAAGF,aAAa,CAA8B,IAAI,CAAC;AAE/E,OAAO,SAASG,kBAAkBA,CAAA,EAAyB;EACzD,MAAMC,GAAG,GAAGH,UAAU,CAACC,eAAe,CAAC;EACvC,IAAI,CAACE,GAAG,EAAE;IACR,MAAM,IAAIC,KAAK,CAAC,+DAA+D,CAAC;EAClF;EACA,OAAOD,GAAG;AACZ","ignoreList":[]}
@@ -3,7 +3,7 @@
3
3
  import { forwardRef, useMemo } from 'react';
4
4
  import { View } from 'react-native';
5
5
  import { getDateFieldSegments, resolveDateComponentLabels } from '@cdx-ui/formatters';
6
- import { useControllableState, useFormControl } from '@cdx-ui/utils';
6
+ import { useControllableState, useFormControl, useFormControlContext } from '@cdx-ui/utils';
7
7
  import { Slot } from '../slot';
8
8
  import { dataAttributes, mergeDataAttributes } from '../utils/dataAttributes';
9
9
  import { DateFieldContext } from './context';
@@ -30,6 +30,9 @@ export const DateFieldRoot = /*#__PURE__*/forwardRef(({
30
30
  isInvalid,
31
31
  isRequired
32
32
  });
33
+ const {
34
+ errorMessage
35
+ } = useFormControlContext();
33
36
  const [value, setValue] = useControllableState({
34
37
  prop: valueProp,
35
38
  defaultProp: defaultValue,
@@ -60,8 +63,9 @@ export const DateFieldRoot = /*#__PURE__*/forwardRef(({
60
63
  disabled: !!formControl.disabled,
61
64
  readOnly: !!formControl.readOnly,
62
65
  invalid: !!formControl['aria-invalid'],
66
+ errorMessage,
63
67
  ...segmentState
64
- }), [value, setValue, mode, locale, labels, segments, formControl.disabled, formControl.readOnly, formControl['aria-invalid'], segmentState]);
68
+ }), [value, setValue, mode, locale, labels, segments, formControl.disabled, formControl.readOnly, formControl['aria-invalid'], errorMessage, segmentState]);
65
69
  const Comp = asChild ? Slot : View;
66
70
  return /*#__PURE__*/_jsx(DateFieldContext.Provider, {
67
71
  value: contextValue,
@@ -1 +1 @@
1
- {"version":3,"names":["forwardRef","useMemo","View","getDateFieldSegments","resolveDateComponentLabels","useControllableState","useFormControl","Slot","dataAttributes","mergeDataAttributes","DateFieldContext","useDateFieldSegmentState","jsx","_jsx","DateFieldRoot","asChild","children","value","valueProp","defaultValue","onValueChange","mode","locale","labels","labelsProp","isDisabled","isReadOnly","isInvalid","isRequired","props","ref","formControl","setValue","prop","defaultProp","onChange","next","segments","segmentState","disabled","readOnly","contextValue","invalid","Comp","Provider","readonly","displayName"],"sourceRoot":"../../../src","sources":["date-field/DateFieldRoot.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["forwardRef","useMemo","View","getDateFieldSegments","resolveDateComponentLabels","useControllableState","useFormControl","useFormControlContext","Slot","dataAttributes","mergeDataAttributes","DateFieldContext","useDateFieldSegmentState","jsx","_jsx","DateFieldRoot","asChild","children","value","valueProp","defaultValue","onValueChange","mode","locale","labels","labelsProp","isDisabled","isReadOnly","isInvalid","isRequired","props","ref","formControl","errorMessage","setValue","prop","defaultProp","onChange","next","segments","segmentState","disabled","readOnly","contextValue","invalid","Comp","Provider","readonly","displayName"],"sourceRoot":"../../../src","sources":["date-field/DateFieldRoot.tsx"],"mappings":"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","ignoreList":[]}
@@ -20,6 +20,8 @@ export const DateFieldSegment = /*#__PURE__*/forwardRef(({
20
20
  const {
21
21
  disabled,
22
22
  readOnly,
23
+ invalid,
24
+ errorMessage,
23
25
  focusedSegmentIndex,
24
26
  focusSegment,
25
27
  getSegmentDisplayText,
@@ -46,13 +48,17 @@ export const DateFieldSegment = /*#__PURE__*/forwardRef(({
46
48
  placeholder: segment.text === displayText && !segment.value
47
49
  }));
48
50
  if (segment.isEditable && !asChild) {
51
+ // `aria-invalid` only reaches web screen readers; native ones need it in the name and hint.
52
+ const announceInvalid = invalid && Platform.OS !== 'web';
49
53
  return /*#__PURE__*/_jsx(Pressable, {
50
54
  accessibilityRole: "spinbutton",
51
- accessibilityLabel: getDateSegmentAccessibilityLabel(segment.type, labels),
55
+ accessibilityLabel: getDateSegmentAccessibilityLabel(segment.type, labels, announceInvalid),
56
+ accessibilityHint: announceInvalid ? errorMessage : undefined,
52
57
  accessibilityState: {
53
58
  disabled,
54
59
  selected: isFocused
55
60
  },
61
+ "aria-invalid": invalid || undefined,
56
62
  disabled: disabled || readOnly,
57
63
  onPress: handlePress,
58
64
  onPressIn: preventWebFocusSteal
@@ -1 +1 @@
1
- {"version":3,"names":["forwardRef","useCallback","Platform","Pressable","Text","getDateSegmentAccessibilityLabel","Slot","dataAttributes","mergeDataAttributes","useDateFieldContext","useDateFieldSegmentIndex","jsx","_jsx","DateFieldSegment","asChild","segment","segmentIndex","segmentIndexProp","style","props","ref","contextSegmentIndex","disabled","readOnly","focusedSegmentIndex","focusSegment","getSegmentDisplayText","labels","isFocused","displayText","handlePress","preventWebFocusSteal","event","OS","maybeDom","preventDefault","dataProps","slot","focus","placeholder","text","value","isEditable","accessibilityRole","accessibilityLabel","type","accessibilityState","selected","onPress","onPressIn","zIndex","onMouseDown","e","children","Comp","importantForAccessibility","displayName"],"sourceRoot":"../../../src","sources":["date-field/DateFieldSegment.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["forwardRef","useCallback","Platform","Pressable","Text","getDateSegmentAccessibilityLabel","Slot","dataAttributes","mergeDataAttributes","useDateFieldContext","useDateFieldSegmentIndex","jsx","_jsx","DateFieldSegment","asChild","segment","segmentIndex","segmentIndexProp","style","props","ref","contextSegmentIndex","disabled","readOnly","invalid","errorMessage","focusedSegmentIndex","focusSegment","getSegmentDisplayText","labels","isFocused","displayText","handlePress","preventWebFocusSteal","event","OS","maybeDom","preventDefault","dataProps","slot","focus","placeholder","text","value","isEditable","announceInvalid","accessibilityRole","accessibilityLabel","type","accessibilityHint","undefined","accessibilityState","selected","onPress","onPressIn","zIndex","onMouseDown","e","children","Comp","importantForAccessibility","displayName"],"sourceRoot":"../../../src","sources":["date-field/DateFieldSegment.tsx"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["createContext","useContext","DateFieldContext","useDateFieldContext","ctx","Error"],"sourceRoot":"../../../src","sources":["date-field/context.tsx"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,UAAU,QAA4C,OAAO;;AASrF;;AA8BA,OAAO,MAAMC,gBAAgB,gBAAGF,aAAa,CAA+B,IAAI,CAAC;AAEjF,OAAO,SAASG,mBAAmBA,CAAA,EAA0B;EAC3D,MAAMC,GAAG,GAAGH,UAAU,CAACC,gBAAgB,CAAC;EACxC,IAAI,CAACE,GAAG,EAAE;IACR,MAAM,IAAIC,KAAK,CAAC,iEAAiE,CAAC;EACpF;EACA,OAAOD,GAAG;AACZ","ignoreList":[]}
1
+ {"version":3,"names":["createContext","useContext","DateFieldContext","useDateFieldContext","ctx","Error"],"sourceRoot":"../../../src","sources":["date-field/context.tsx"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,UAAU,QAA4C,OAAO;;AASrF;;AAgCA,OAAO,MAAMC,gBAAgB,gBAAGF,aAAa,CAA+B,IAAI,CAAC;AAEjF,OAAO,SAASG,mBAAmBA,CAAA,EAA0B;EAC3D,MAAMC,GAAG,GAAGH,UAAU,CAACC,gBAAgB,CAAC;EACxC,IAAI,CAACE,GAAG,EAAE;IACR,MAAM,IAAIC,KAAK,CAAC,iEAAiE,CAAC;EACpF;EACA,OAAOD,GAAG;AACZ","ignoreList":[]}
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
 
3
- import { forwardRef, useCallback, useEffect, useMemo, useRef } from 'react';
3
+ import { forwardRef, useCallback, useEffect, useLayoutEffect, useMemo, useRef } from 'react';
4
4
  import { View } from 'react-native';
5
- import { resolveDateComponentLabels } from '@cdx-ui/formatters';
6
- import { mergeRefs, useControllableState } from '@cdx-ui/utils';
5
+ import { formatDateValidationMessage, getDateValidationReason, resolveDateComponentLabels } from '@cdx-ui/formatters';
6
+ import { FormControlContext, mergeRefs, useControllableState, useFormControlContext, useReportFormControlValidation } from '@cdx-ui/utils';
7
7
  import { DateFieldRoot } from '../date-field/DateFieldRoot';
8
8
  import { Slot } from '../slot';
9
9
  import { dataAttributes, mergeDataAttributes } from '../utils/dataAttributes';
@@ -24,6 +24,8 @@ export const DatePickerRoot = /*#__PURE__*/forwardRef(({
24
24
  isRequired,
25
25
  minValue,
26
26
  maxValue,
27
+ isDateUnavailable,
28
+ onValidationChange,
27
29
  locale = 'en-US',
28
30
  labels: labelsProp,
29
31
  ...props
@@ -45,6 +47,45 @@ export const DatePickerRoot = /*#__PURE__*/forwardRef(({
45
47
  prop: undefined,
46
48
  defaultProp: value
47
49
  });
50
+ const validationReason = useMemo(() => value === undefined ? undefined : getDateValidationReason(value, {
51
+ minValue,
52
+ maxValue,
53
+ isDateUnavailable
54
+ }), [isDateUnavailable, maxValue, minValue, value]);
55
+ const resolvedInvalid = !!isInvalid || validationReason !== undefined;
56
+ const validationMessage = useMemo(() => validationReason === undefined ? undefined : formatDateValidationMessage(labels, validationReason, {
57
+ minValue,
58
+ maxValue
59
+ }, {
60
+ locale
61
+ }), [labels, locale, maxValue, minValue, validationReason]);
62
+ const onValidationChangeRef = useRef(onValidationChange);
63
+ onValidationChangeRef.current = onValidationChange;
64
+ const reportedValidationRef = useRef({
65
+ reason: undefined,
66
+ message: undefined
67
+ });
68
+ useLayoutEffect(() => {
69
+ const reported = reportedValidationRef.current;
70
+ if (reported.reason === validationReason && reported.message === validationMessage) {
71
+ return;
72
+ }
73
+ reportedValidationRef.current = {
74
+ reason: validationReason,
75
+ message: validationMessage
76
+ };
77
+ onValidationChangeRef.current?.(validationReason, validationMessage);
78
+ }, [validationMessage, validationReason]);
79
+ const reportsToField = useReportFormControlValidation(resolvedInvalid, validationMessage);
80
+
81
+ // Without an enclosing `Field` there is nothing to report to, so provide the picker's
82
+ // validation to its own children (`Field.Error`, `Field.Helper`, the input group).
83
+ const parentFormControl = useFormControlContext();
84
+ const standaloneFormControl = useMemo(() => reportsToField ? undefined : {
85
+ ...parentFormControl,
86
+ isInvalid: !!parentFormControl.isInvalid || resolvedInvalid,
87
+ errorMessage: validationMessage
88
+ }, [parentFormControl, reportsToField, resolvedInvalid, validationMessage]);
48
89
  const surfacesRef = useRef(new Set());
49
90
  const anchorRef = useRef(null);
50
91
  const triggerRef = useRef(null);
@@ -84,13 +125,26 @@ export const DatePickerRoot = /*#__PURE__*/forwardRef(({
84
125
  disabled,
85
126
  minValue,
86
127
  maxValue,
128
+ isDateUnavailable,
87
129
  locale,
88
130
  labels,
89
131
  registerSurface,
90
132
  anchorRef,
91
133
  triggerRef
92
- }), [value, setValue, draftValue, setDraftValue, open, setOpen, disabled, minValue, maxValue, locale, labels, registerSurface]);
134
+ }), [value, setValue, draftValue, setDraftValue, open, setOpen, disabled, minValue, maxValue, isDateUnavailable, locale, labels, registerSurface]);
93
135
  const Comp = asChild ? Slot : View;
136
+ const field = /*#__PURE__*/_jsx(DateFieldRoot, {
137
+ value: value,
138
+ onValueChange: next => setValue(next),
139
+ mode: "date",
140
+ locale: locale,
141
+ labels: labelsProp,
142
+ isDisabled: disabled,
143
+ isReadOnly: isReadOnly,
144
+ isInvalid: resolvedInvalid,
145
+ isRequired: isRequired,
146
+ children: children
147
+ });
94
148
  return /*#__PURE__*/_jsx(DatePickerContext.Provider, {
95
149
  value: contextValue,
96
150
  children: /*#__PURE__*/_jsx(Comp, {
@@ -100,18 +154,10 @@ export const DatePickerRoot = /*#__PURE__*/forwardRef(({
100
154
  disabled,
101
155
  open
102
156
  })),
103
- children: /*#__PURE__*/_jsx(DateFieldRoot, {
104
- value: value,
105
- onValueChange: next => setValue(next),
106
- mode: "date",
107
- locale: locale,
108
- labels: labelsProp,
109
- isDisabled: disabled,
110
- isReadOnly: isReadOnly,
111
- isInvalid: isInvalid,
112
- isRequired: isRequired,
113
- children: children
114
- })
157
+ children: standaloneFormControl ? /*#__PURE__*/_jsx(FormControlContext.Provider, {
158
+ value: standaloneFormControl,
159
+ children: field
160
+ }) : field
115
161
  })
116
162
  });
117
163
  });
@@ -1 +1 @@
1
- {"version":3,"names":["forwardRef","useCallback","useEffect","useMemo","useRef","View","resolveDateComponentLabels","mergeRefs","useControllableState","DateFieldRoot","Slot","dataAttributes","mergeDataAttributes","DatePickerContext","jsx","_jsx","DatePickerRoot","asChild","children","value","valueProp","defaultValue","onValueChange","isOpen","openProp","defaultOpen","onOpenChange","isDisabled","disabled","isReadOnly","isInvalid","isRequired","minValue","maxValue","locale","labels","labelsProp","props","ref","setValue","prop","defaultProp","onChange","next","open","setOpenState","draftValue","setDraftValue","undefined","surfacesRef","Set","anchorRef","triggerRef","setOpen","registerSurface","type","current","has","add","size","console","warn","clear","contextValue","Comp","Provider","mode","displayName"],"sourceRoot":"../../../src","sources":["date-picker/DatePickerRoot.tsx"],"mappings":";;AAAA,SACEA,UAAU,EACVC,WAAW,EACXC,SAAS,EACTC,OAAO,EACPC,MAAM,QAGD,OAAO;AACd,SAASC,IAAI,QAAwB,cAAc;AAEnD,SAASC,0BAA0B,QAAQ,oBAAoB;AAC/D,SAASC,SAAS,EAAEC,oBAAoB,QAAQ,eAAe;AAC/D,SAASC,aAAa,QAAQ,6BAA6B;AAC3D,SAASC,IAAI,QAAQ,SAAS;AAC9B,SAASC,cAAc,EAAEC,mBAAmB,QAAQ,yBAAyB;AAC7E,SAASC,iBAAiB,QAAgC,WAAW;AAAC,SAAAC,GAAA,IAAAC,IAAA;AA0BtE,OAAO,MAAMC,cAAc,gBAAGhB,UAAU,CACtC,CACE;EACEiB,OAAO;EACPC,QAAQ;EACRC,KAAK,EAAEC,SAAS;EAChBC,YAAY;EACZC,aAAa;EACbC,MAAM,EAAEC,QAAQ;EAChBC,WAAW,GAAG,KAAK;EACnBC,YAAY;EACZC,UAAU,EAAEC,QAAQ,GAAG,KAAK;EAC5BC,UAAU;EACVC,SAAS;EACTC,UAAU;EACVC,QAAQ;EACRC,QAAQ;EACRC,MAAM,GAAG,OAAO;EAChBC,MAAM,EAAEC,UAAU;EAClB,GAAGC;AACL,CAAC,EACDC,GAAG,KACA;EACH,MAAMH,MAAM,GAAGhC,OAAO,CAAC,MAAMG,0BAA0B,CAAC8B,UAAU,CAAC,EAAE,CAACA,UAAU,CAAC,CAAC;EAClF,MAAM,CAACjB,KAAK,EAAEoB,QAAQ,CAAC,GAAG/B,oBAAoB,CAAqB;IACjEgC,IAAI,EAAEpB,SAAS;IACfqB,WAAW,EAAEpB,YAAY;IACzBqB,QAAQ,EAAGC,IAAI,IAAK;MAClBrB,aAAa,GAAGqB,IAAI,CAAC;IACvB;EACF,CAAC,CAAC;EAEF,MAAM,CAACC,IAAI,EAAEC,YAAY,CAAC,GAAGrC,oBAAoB,CAAU;IACzDgC,IAAI,EAAEhB,QAAQ;IACdiB,WAAW,EAAEhB,WAAW;IACxBiB,QAAQ,EAAEhB;EACZ,CAAC,CAAC;EAEF,MAAM,CAACoB,UAAU,EAAEC,aAAa,CAAC,GAAGvC,oBAAoB,CAAqB;IAC3EgC,IAAI,EAAEQ,SAAS;IACfP,WAAW,EAAEtB;EACf,CAAC,CAAC;EAEF,MAAM8B,WAAW,GAAG7C,MAAM,CAAyB,IAAI8C,GAAG,CAAC,CAAC,CAAC;EAC7D,MAAMC,SAAS,GAAG/C,MAAM,CAA4B,IAAI,CAAC;EACzD,MAAMgD,UAAU,GAAGhD,MAAM,CAA4B,IAAI,CAAC;EAE1D,MAAMiD,OAAO,GAAGpD,WAAW,CACxB0C,IAAa,IAAK;IACjB,IAAIf,QAAQ,IAAIe,IAAI,EAAE;MACpB;IACF;IACA,IAAIA,IAAI,EAAE;MACRI,aAAa,CAAC5B,KAAK,CAAC;IACtB;IACA0B,YAAY,CAACF,IAAI,CAAC;EACpB,CAAC,EACD,CAACf,QAAQ,EAAEmB,aAAa,EAAEF,YAAY,EAAE1B,KAAK,CAC/C,CAAC;EAED,MAAMmC,eAAe,GAAGrD,WAAW,CAAEsD,IAAuB,IAAK;IAC/D,IAAIN,WAAW,CAACO,OAAO,CAACC,GAAG,CAACF,IAAI,CAAC,EAAE;MACjC;IACF;IACAN,WAAW,CAACO,OAAO,CAACE,GAAG,CAACH,IAAI,CAAC;IAC7B,IAAIN,WAAW,CAACO,OAAO,CAACG,IAAI,GAAG,CAAC,EAAE;MAChCC,OAAO,CAACC,IAAI,CACV,kHACF,CAAC;IACH;EACF,CAAC,EAAE,EAAE,CAAC;EAEN3D,SAAS,CAAC,MAAM;IACd6C,aAAa,CAAC5B,KAAK,CAAC;EACtB,CAAC,EAAE,CAAC4B,aAAa,EAAE5B,KAAK,CAAC,CAAC;EAE1BjB,SAAS,CAAC,MAAM;IACd,IAAI,CAAC0C,IAAI,EAAE;MACTK,WAAW,CAACO,OAAO,CAACM,KAAK,CAAC,CAAC;IAC7B;EACF,CAAC,EAAE,CAAClB,IAAI,CAAC,CAAC;EAEV,MAAMmB,YAAY,GAAG5D,OAAO,CAC1B,OAAO;IACLgB,KAAK;IACLG,aAAa,EAAEiB,QAAQ;IACvBO,UAAU;IACVC,aAAa;IACbH,IAAI,EAAEA,IAAI,IAAI,KAAK;IACnBS,OAAO;IACPzB,QAAQ;IACRI,QAAQ;IACRC,QAAQ;IACRC,MAAM;IACNC,MAAM;IACNmB,eAAe;IACfH,SAAS;IACTC;EACF,CAAC,CAAC,EACF,CACEjC,KAAK,EACLoB,QAAQ,EACRO,UAAU,EACVC,aAAa,EACbH,IAAI,EACJS,OAAO,EACPzB,QAAQ,EACRI,QAAQ,EACRC,QAAQ,EACRC,MAAM,EACNC,MAAM,EACNmB,eAAe,CAEnB,CAAC;EAED,MAAMU,IAAI,GAAG/C,OAAO,GAAGP,IAAI,GAAGL,IAAI;EAElC,oBACEU,IAAA,CAACF,iBAAiB,CAACoD,QAAQ;IAAC9C,KAAK,EAAE4C,YAAa;IAAA7C,QAAA,eAC9CH,IAAA,CAACiD,IAAI;MACH1B,GAAG,EAAE/B,SAAS,CAAC+B,GAAG,EAAEa,SAAS,CAAE;MAAA,GAC3Bd,KAAK;MAAA,GACLzB,mBAAmB,CAACyB,KAAK,EAAE1B,cAAc,CAAC;QAAEiB,QAAQ;QAAEgB;MAAK,CAAC,CAAC,CAAC;MAAA1B,QAAA,eAElEH,IAAA,CAACN,aAAa;QACZU,KAAK,EAAEA,KAAM;QACbG,aAAa,EAAGqB,IAAI,IAAKJ,QAAQ,CAACI,IAA0B,CAAE;QAC9DuB,IAAI,EAAC,MAAM;QACXhC,MAAM,EAAEA,MAAO;QACfC,MAAM,EAAEC,UAAW;QACnBT,UAAU,EAAEC,QAAS;QACrBC,UAAU,EAAEA,UAAW;QACvBC,SAAS,EAAEA,SAAU;QACrBC,UAAU,EAAEA,UAAW;QAAAb,QAAA,EAEtBA;MAAQ,CACI;IAAC,CACZ;EAAC,CACmB,CAAC;AAEjC,CACF,CAAC;AAEDF,cAAc,CAACmD,WAAW,GAAG,gBAAgB","ignoreList":[]}
1
+ {"version":3,"names":["forwardRef","useCallback","useEffect","useLayoutEffect","useMemo","useRef","View","formatDateValidationMessage","getDateValidationReason","resolveDateComponentLabels","FormControlContext","mergeRefs","useControllableState","useFormControlContext","useReportFormControlValidation","DateFieldRoot","Slot","dataAttributes","mergeDataAttributes","DatePickerContext","jsx","_jsx","DatePickerRoot","asChild","children","value","valueProp","defaultValue","onValueChange","isOpen","openProp","defaultOpen","onOpenChange","isDisabled","disabled","isReadOnly","isInvalid","isRequired","minValue","maxValue","isDateUnavailable","onValidationChange","locale","labels","labelsProp","props","ref","setValue","prop","defaultProp","onChange","next","open","setOpenState","draftValue","setDraftValue","undefined","validationReason","resolvedInvalid","validationMessage","onValidationChangeRef","current","reportedValidationRef","reason","message","reported","reportsToField","parentFormControl","standaloneFormControl","errorMessage","surfacesRef","Set","anchorRef","triggerRef","setOpen","registerSurface","type","has","add","size","console","warn","clear","contextValue","Comp","field","mode","Provider","displayName"],"sourceRoot":"../../../src","sources":["date-picker/DatePickerRoot.tsx"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["createContext","useContext","DatePickerContext","useDatePickerContext","ctx","Error"],"sourceRoot":"../../../src","sources":["date-picker/context.tsx"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,UAAU,QAAwB,OAAO;AAyBjE,OAAO,MAAMC,iBAAiB,gBAAGF,aAAa,CAAgC,IAAI,CAAC;AAEnF,OAAO,SAASG,oBAAoBA,CAAA,EAA2B;EAC7D,MAAMC,GAAG,GAAGH,UAAU,CAACC,iBAAiB,CAAC;EACzC,IAAI,CAACE,GAAG,EAAE;IACR,MAAM,IAAIC,KAAK,CAAC,mEAAmE,CAAC;EACtF;EACA,OAAOD,GAAG;AACZ","ignoreList":[]}
1
+ {"version":3,"names":["createContext","useContext","DatePickerContext","useDatePickerContext","ctx","Error"],"sourceRoot":"../../../src","sources":["date-picker/context.tsx"],"mappings":";;AAAA,SAASA,aAAa,EAAEC,UAAU,QAAwB,OAAO;AA0BjE,OAAO,MAAMC,iBAAiB,gBAAGF,aAAa,CAAgC,IAAI,CAAC;AAEnF,OAAO,SAASG,oBAAoBA,CAAA,EAA2B;EAC7D,MAAMC,GAAG,GAAGH,UAAU,CAACC,iBAAiB,CAAC;EACzC,IAAI,CAACE,GAAG,EAAE;IACR,MAAM,IAAIC,KAAK,CAAC,mEAAmE,CAAC;EACtF;EACA,OAAOD,GAAG;AACZ","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"CalendarRoot.d.ts","sourceRoot":"","sources":["../../../src/calendar/CalendarRoot.tsx"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAapD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,WAAW,iBAAkB,SAAQ,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;IACpF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,YAAY,oGAwGxB,CAAC"}
1
+ {"version":3,"file":"CalendarRoot.d.ts","sourceRoot":"","sources":["../../../src/calendar/CalendarRoot.tsx"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAapD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,WAAW,iBAAkB,SAAQ,cAAc,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;IACpF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,YAAY,oGA2GxB,CAAC"}
@@ -7,6 +7,7 @@ export interface CalendarContextValue {
7
7
  onMonthIdChange: (monthId: MonthId) => void;
8
8
  minValue?: DateId;
9
9
  maxValue?: DateId;
10
+ isDateUnavailable?: (date: DateId) => boolean;
10
11
  disabled: boolean;
11
12
  locale: string;
12
13
  labels: DateComponentLabels;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/calendar/context.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE/E,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,CAAC;AAE5C,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACpD,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,mBAAmB,CAAC;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;CACvC;AAED,eAAO,MAAM,eAAe,sDAAmD,CAAC;AAEhF,wBAAgB,kBAAkB,IAAI,oBAAoB,CAMzD"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/calendar/context.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE/E,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,CAAC;AAE5C,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACpD,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,mBAAmB,CAAC;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;CACvC;AAED,eAAO,MAAM,eAAe,sDAAmD,CAAC;AAEhF,wBAAgB,kBAAkB,IAAI,oBAAoB,CAMzD"}
@@ -16,6 +16,13 @@ export interface ICalendarProps {
16
16
  minValue?: DateId;
17
17
  /** Latest selectable date. Build with `dateId(...)` from `@cdx-ui/formatters`. */
18
18
  maxValue?: DateId;
19
+ /**
20
+ * Returns `true` for days that cannot be selected, such as weekends or holidays. Unavailable
21
+ * days render disabled and ignore presses, combined with `minValue` / `maxValue`. An inline
22
+ * function is safe; a stable (module-level or memoized) one also skips re-checking every day of
23
+ * the visible month on each render.
24
+ */
25
+ isDateUnavailable?: (date: DateId) => boolean;
19
26
  disabled?: boolean;
20
27
  /** BCP 47 locale for weekday and month formatting. Defaults to `en-US`. */
21
28
  locale?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/calendar/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE/E,MAAM,WAAW,cAAc;IAC7B,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mFAAmF;IACnF,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACpD,wGAAwG;IACxG,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACtC,+CAA+C;IAC/C,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAmB,SAAQ,SAAS;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/calendar/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE/E,MAAM,WAAW,cAAc;IAC7B,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mFAAmF;IACnF,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACpD,wGAAwG;IACxG,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,2DAA2D;IAC3D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,oFAAoF;IACpF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACtC,+CAA+C;IAC/C,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAmB,SAAQ,SAAS;IACnD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -1 +1 @@
1
- {"version":3,"file":"DateFieldRoot.d.ts","sourceRoot":"","sources":["../../../src/date-field/DateFieldRoot.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA0C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC/E,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAMpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG/C,MAAM,WAAW,kBAAmB,SAAQ,eAAe,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;IACtF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,aAAa,qGAkGzB,CAAC"}
1
+ {"version":3,"file":"DateFieldRoot.d.ts","sourceRoot":"","sources":["../../../src/date-field/DateFieldRoot.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA0C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAC/E,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAMpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAG/C,MAAM,WAAW,kBAAmB,SAAQ,eAAe,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;IACtF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,aAAa,qGAqGzB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"DateFieldSegment.d.ts","sourceRoot":"","sources":["../../../src/date-field/DateFieldSegment.tsx"],"names":[],"mappings":"AACA,OAAO,EAGL,IAAI,EAEJ,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAMtB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEtD,MAAM,WAAW,qBAAsB,SAAQ,sBAAsB,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;IAChG,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,gBAAgB,wGAyE5B,CAAC"}
1
+ {"version":3,"file":"DateFieldSegment.d.ts","sourceRoot":"","sources":["../../../src/date-field/DateFieldSegment.tsx"],"names":[],"mappings":"AACA,OAAO,EAGL,IAAI,EAEJ,KAAK,SAAS,EACf,MAAM,cAAc,CAAC;AAMtB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEtD,MAAM,WAAW,qBAAsB,SAAQ,sBAAsB,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;IAChG,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,gBAAgB,wGAyF5B,CAAC"}
@@ -12,6 +12,8 @@ export interface DateFieldContextValue {
12
12
  disabled: boolean;
13
13
  readOnly: boolean;
14
14
  invalid: boolean;
15
+ /** Message the enclosing `Field` shows for the invalid state, if any. */
16
+ errorMessage?: string;
15
17
  focusedSegmentIndex: number | null;
16
18
  focusSegment: (index: number) => void;
17
19
  blurSegment: (index: number) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/date-field/context.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AACtF,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,MAAM,EACN,WAAW,EACX,OAAO,EACR,MAAM,oBAAoB,CAAC;AAE5B,mFAAmF;AACnF,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAE1D,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,cAAc,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAChD,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,wBAAwB,EAAE,MAAM,IAAI,CAAC;IACrC,wBAAwB,EAAE,MAAM,IAAI,CAAC;IACrC,kBAAkB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,wEAAwE;IACxE,wBAAwB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,sBAAsB,EAAE,MAAM,IAAI,CAAC;IACnC,yEAAyE;IACzE,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD,eAAe,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3E,iDAAiD;IACjD,sBAAsB,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;CAClE;AAED,eAAO,MAAM,gBAAgB,uDAAoD,CAAC;AAElF,wBAAgB,mBAAmB,IAAI,qBAAqB,CAM3D"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/date-field/context.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,QAAQ,EAAE,KAAK,cAAc,EAAE,MAAM,OAAO,CAAC;AACtF,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,MAAM,EACN,WAAW,EACX,OAAO,EACR,MAAM,oBAAoB,CAAC;AAE5B,mFAAmF;AACnF,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAE1D,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,cAAc,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAChD,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,mBAAmB,CAAC;IAC5B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,yEAAyE;IACzE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,wBAAwB,EAAE,MAAM,IAAI,CAAC;IACrC,wBAAwB,EAAE,MAAM,IAAI,CAAC;IACrC,kBAAkB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,wEAAwE;IACxE,wBAAwB,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,sBAAsB,EAAE,MAAM,IAAI,CAAC;IACnC,yEAAyE;IACzE,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD,eAAe,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3E,iDAAiD;IACjD,sBAAsB,CAAC,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;CAClE;AAED,eAAO,MAAM,gBAAgB,uDAAoD,CAAC;AAElF,wBAAgB,mBAAmB,IAAI,qBAAqB,CAM3D"}
@@ -1,6 +1,6 @@
1
1
  import { type ReactNode } from 'react';
2
2
  import { View, type ViewProps } from 'react-native';
3
- import type { DateComponentLabels, DateId } from '@cdx-ui/formatters';
3
+ import { type DateComponentLabels, type DateId, type DateValidationReason } from '@cdx-ui/formatters';
4
4
  export interface DatePickerRootProps extends Omit<ViewProps, 'children'> {
5
5
  asChild?: boolean;
6
6
  children?: ReactNode;
@@ -14,12 +14,38 @@ export interface DatePickerRootProps extends Omit<ViewProps, 'children'> {
14
14
  onOpenChange?: (open: boolean) => void;
15
15
  isDisabled?: boolean;
16
16
  isReadOnly?: boolean;
17
+ /**
18
+ * Forces the invalid state. OR-ed with the picker's own validation: setting `true` marks the
19
+ * field invalid, but `false` never hides a `minValue` / `maxValue` / `isDateUnavailable` violation.
20
+ */
17
21
  isInvalid?: boolean;
18
22
  isRequired?: boolean;
19
- /** Earliest selectable date, applied to the embedded calendar. Build with `dateId(...)`. */
23
+ /**
24
+ * Earliest selectable date, applied to the embedded calendar and to typed entry. Build with
25
+ * `dateId(...)`.
26
+ */
20
27
  minValue?: DateId;
21
- /** Latest selectable date, applied to the embedded calendar. Build with `dateId(...)`. */
28
+ /**
29
+ * Latest selectable date, applied to the embedded calendar and to typed entry. Build with
30
+ * `dateId(...)`.
31
+ */
22
32
  maxValue?: DateId;
33
+ /**
34
+ * Returns `true` for dates that cannot be selected, such as weekends or holidays. The calendar
35
+ * renders them disabled; a typed unavailable date is kept and emitted but renders invalid. Pass
36
+ * a stable (memoized) function.
37
+ */
38
+ isDateUnavailable?: (date: DateId) => boolean;
39
+ /**
40
+ * Called when the committed value starts or stops violating `minValue`, `maxValue`, or
41
+ * `isDateUnavailable`, and again when the formatted message changes while the reason stays
42
+ * the same — a new bound, `locale`, or `labels` while the value is still `beforeMin`, for
43
+ * example. Receives the reason and its `labels` message formatted in `locale`, or `undefined`
44
+ * for both once the value is valid or cleared. Fires before paint, so state set here renders
45
+ * in the same frame as the invalid styling. Not needed to show the message: an empty
46
+ * `Field.Error` anywhere in the enclosing `Field` already renders it.
47
+ */
48
+ onValidationChange?: (reason: DateValidationReason | undefined, message: string | undefined) => void;
23
49
  name?: string;
24
50
  locale?: string;
25
51
  labels?: Partial<DateComponentLabels>;
@@ -1 +1 @@
1
- {"version":3,"file":"DatePickerRoot.d.ts","sourceRoot":"","sources":["../../../src/date-picker/DatePickerRoot.tsx"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAQtE,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;IACtE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACpD,6EAA6E;IAC7E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACvC;AAED,eAAO,MAAM,cAAc,sGA6I1B,CAAC"}
1
+ {"version":3,"file":"DatePickerRoot.d.ts","sourceRoot":"","sources":["../../../src/date-picker/DatePickerRoot.tsx"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,MAAM,EACX,KAAK,oBAAoB,EAC1B,MAAM,oBAAoB,CAAC;AAa5B,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC;IACtE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACpD,6EAA6E;IAC7E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,CACnB,MAAM,EAAE,oBAAoB,GAAG,SAAS,EACxC,OAAO,EAAE,MAAM,GAAG,SAAS,KACxB,IAAI,CAAC;IACV,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;CACvC;AAED,eAAO,MAAM,cAAc,sGAgN1B,CAAC"}
@@ -12,6 +12,7 @@ export interface DatePickerContextValue {
12
12
  disabled: boolean;
13
13
  minValue?: DateId;
14
14
  maxValue?: DateId;
15
+ isDateUnavailable?: (date: DateId) => boolean;
15
16
  locale: string;
16
17
  labels: DateComponentLabels;
17
18
  registerSurface: (type: PickerSurfaceType) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/date-picker/context.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEtE,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa,CAAC;AAErE,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACnD,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,mBAAmB,CAAC;IAC5B,eAAe,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACnD,gEAAgE;IAChE,SAAS,EAAE,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAClC,gEAAgE;IAChE,UAAU,EAAE,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;CACpC;AAED,eAAO,MAAM,iBAAiB,wDAAqD,CAAC;AAEpF,wBAAgB,oBAAoB,IAAI,sBAAsB,CAM7D"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/date-picker/context.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEtE,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,GAAG,aAAa,CAAC;AAErE,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACpD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACnD,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,mBAAmB,CAAC;IAC5B,eAAe,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACnD,gEAAgE;IAChE,SAAS,EAAE,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAClC,gEAAgE;IAChE,UAAU,EAAE,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;CACpC;AAED,eAAO,MAAM,iBAAiB,wDAAqD,CAAC;AAEpF,wBAAgB,oBAAoB,IAAI,sBAAsB,CAM7D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cdx-ui/primitives",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -69,8 +69,8 @@
69
69
  "@react-stately/disclosure": "3.1.1",
70
70
  "@react-stately/radio": "3.12.0",
71
71
  "@react-stately/toggle": "3.9.4",
72
- "@cdx-ui/formatters": "0.2.0",
73
- "@cdx-ui/utils": "0.2.0"
72
+ "@cdx-ui/formatters": "0.2.2",
73
+ "@cdx-ui/utils": "0.2.2"
74
74
  },
75
75
  "devDependencies": {
76
76
  "@types/react": "19.1.17",
@@ -42,6 +42,7 @@ export const CalendarRoot = forwardRef<ComponentRef<typeof View>, CalendarRootPr
42
42
  onMonthIdChange,
43
43
  minValue,
44
44
  maxValue,
45
+ isDateUnavailable,
45
46
  disabled = false,
46
47
  locale = 'en-US',
47
48
  labels: labelsProp,
@@ -96,6 +97,7 @@ export const CalendarRoot = forwardRef<ComponentRef<typeof View>, CalendarRootPr
96
97
  onMonthIdChange: setMonthId,
97
98
  minValue,
98
99
  maxValue,
100
+ isDateUnavailable,
99
101
  disabled,
100
102
  locale,
101
103
  labels,
@@ -109,6 +111,7 @@ export const CalendarRoot = forwardRef<ComponentRef<typeof View>, CalendarRootPr
109
111
  setMonthId,
110
112
  minValue,
111
113
  maxValue,
114
+ isDateUnavailable,
112
115
  disabled,
113
116
  locale,
114
117
  labels,
@@ -10,6 +10,7 @@ export interface CalendarContextValue {
10
10
  onMonthIdChange: (monthId: MonthId) => void;
11
11
  minValue?: DateId;
12
12
  maxValue?: DateId;
13
+ isDateUnavailable?: (date: DateId) => boolean;
13
14
  disabled: boolean;
14
15
  locale: string;
15
16
  labels: DateComponentLabels;
@@ -17,6 +17,13 @@ export interface ICalendarProps {
17
17
  minValue?: DateId;
18
18
  /** Latest selectable date. Build with `dateId(...)` from `@cdx-ui/formatters`. */
19
19
  maxValue?: DateId;
20
+ /**
21
+ * Returns `true` for days that cannot be selected, such as weekends or holidays. Unavailable
22
+ * days render disabled and ignore presses, combined with `minValue` / `maxValue`. An inline
23
+ * function is safe; a stable (module-level or memoized) one also skips re-checking every day of
24
+ * the visible month on each render.
25
+ */
26
+ isDateUnavailable?: (date: DateId) => boolean;
20
27
  disabled?: boolean;
21
28
  /** BCP 47 locale for weekday and month formatting. Defaults to `en-US`. */
22
29
  locale?: string;
@@ -1,7 +1,7 @@
1
1
  import { forwardRef, useMemo, type ComponentRef, type ReactNode } from 'react';
2
2
  import { View, type ViewProps } from 'react-native';
3
3
  import { getDateFieldSegments, resolveDateComponentLabels } from '@cdx-ui/formatters';
4
- import { useControllableState, useFormControl } from '@cdx-ui/utils';
4
+ import { useControllableState, useFormControl, useFormControlContext } from '@cdx-ui/utils';
5
5
  import { Slot } from '../slot';
6
6
  import { dataAttributes, mergeDataAttributes } from '../utils/dataAttributes';
7
7
  import { DateFieldContext, type DateFieldValue } from './context';
@@ -39,6 +39,7 @@ export const DateFieldRoot = forwardRef<ComponentRef<typeof View>, DateFieldRoot
39
39
  isInvalid,
40
40
  isRequired,
41
41
  });
42
+ const { errorMessage } = useFormControlContext();
42
43
 
43
44
  const [value, setValue] = useControllableState<DateFieldValue>({
44
45
  prop: valueProp,
@@ -75,6 +76,7 @@ export const DateFieldRoot = forwardRef<ComponentRef<typeof View>, DateFieldRoot
75
76
  disabled: !!formControl.disabled,
76
77
  readOnly: !!formControl.readOnly,
77
78
  invalid: !!formControl['aria-invalid'],
79
+ errorMessage,
78
80
  ...segmentState,
79
81
  }),
80
82
  [
@@ -87,6 +89,7 @@ export const DateFieldRoot = forwardRef<ComponentRef<typeof View>, DateFieldRoot
87
89
  formControl.disabled,
88
90
  formControl.readOnly,
89
91
  formControl['aria-invalid'],
92
+ errorMessage,
90
93
  segmentState,
91
94
  ],
92
95
  );
@@ -23,8 +23,16 @@ export const DateFieldSegment = forwardRef<ComponentRef<typeof Text>, DateFieldS
23
23
  ({ asChild, segment, segmentIndex: segmentIndexProp, style, ...props }, ref) => {
24
24
  const contextSegmentIndex = useDateFieldSegmentIndex();
25
25
  const segmentIndex = segmentIndexProp ?? contextSegmentIndex;
26
- const { disabled, readOnly, focusedSegmentIndex, focusSegment, getSegmentDisplayText, labels } =
27
- useDateFieldContext();
26
+ const {
27
+ disabled,
28
+ readOnly,
29
+ invalid,
30
+ errorMessage,
31
+ focusedSegmentIndex,
32
+ focusSegment,
33
+ getSegmentDisplayText,
34
+ labels,
35
+ } = useDateFieldContext();
28
36
  const isFocused = focusedSegmentIndex === segmentIndex;
29
37
  const displayText = getSegmentDisplayText(segmentIndex);
30
38
 
@@ -52,11 +60,19 @@ export const DateFieldSegment = forwardRef<ComponentRef<typeof Text>, DateFieldS
52
60
  );
53
61
 
54
62
  if (segment.isEditable && !asChild) {
63
+ // `aria-invalid` only reaches web screen readers; native ones need it in the name and hint.
64
+ const announceInvalid = invalid && Platform.OS !== 'web';
55
65
  return (
56
66
  <Pressable
57
67
  accessibilityRole="spinbutton"
58
- accessibilityLabel={getDateSegmentAccessibilityLabel(segment.type, labels)}
68
+ accessibilityLabel={getDateSegmentAccessibilityLabel(
69
+ segment.type,
70
+ labels,
71
+ announceInvalid,
72
+ )}
73
+ accessibilityHint={announceInvalid ? errorMessage : undefined}
59
74
  accessibilityState={{ disabled, selected: isFocused }}
75
+ aria-invalid={invalid || undefined}
60
76
  disabled={disabled || readOnly}
61
77
  onPress={handlePress}
62
78
  onPressIn={preventWebFocusSteal}
@@ -20,6 +20,8 @@ export interface DateFieldContextValue {
20
20
  disabled: boolean;
21
21
  readOnly: boolean;
22
22
  invalid: boolean;
23
+ /** Message the enclosing `Field` shows for the invalid state, if any. */
24
+ errorMessage?: string;
23
25
  focusedSegmentIndex: number | null;
24
26
  focusSegment: (index: number) => void;
25
27
  blurSegment: (index: number) => void;
@@ -2,15 +2,28 @@ import {
2
2
  forwardRef,
3
3
  useCallback,
4
4
  useEffect,
5
+ useLayoutEffect,
5
6
  useMemo,
6
7
  useRef,
7
8
  type ComponentRef,
8
9
  type ReactNode,
9
10
  } from 'react';
10
11
  import { View, type ViewProps } from 'react-native';
11
- import type { DateComponentLabels, DateId } from '@cdx-ui/formatters';
12
- import { resolveDateComponentLabels } from '@cdx-ui/formatters';
13
- import { mergeRefs, useControllableState } from '@cdx-ui/utils';
12
+ import {
13
+ formatDateValidationMessage,
14
+ getDateValidationReason,
15
+ resolveDateComponentLabels,
16
+ type DateComponentLabels,
17
+ type DateId,
18
+ type DateValidationReason,
19
+ } from '@cdx-ui/formatters';
20
+ import {
21
+ FormControlContext,
22
+ mergeRefs,
23
+ useControllableState,
24
+ useFormControlContext,
25
+ useReportFormControlValidation,
26
+ } from '@cdx-ui/utils';
14
27
  import { DateFieldRoot } from '../date-field/DateFieldRoot';
15
28
  import { Slot } from '../slot';
16
29
  import { dataAttributes, mergeDataAttributes } from '../utils/dataAttributes';
@@ -29,12 +42,41 @@ export interface DatePickerRootProps extends Omit<ViewProps, 'children'> {
29
42
  onOpenChange?: (open: boolean) => void;
30
43
  isDisabled?: boolean;
31
44
  isReadOnly?: boolean;
45
+ /**
46
+ * Forces the invalid state. OR-ed with the picker's own validation: setting `true` marks the
47
+ * field invalid, but `false` never hides a `minValue` / `maxValue` / `isDateUnavailable` violation.
48
+ */
32
49
  isInvalid?: boolean;
33
50
  isRequired?: boolean;
34
- /** Earliest selectable date, applied to the embedded calendar. Build with `dateId(...)`. */
51
+ /**
52
+ * Earliest selectable date, applied to the embedded calendar and to typed entry. Build with
53
+ * `dateId(...)`.
54
+ */
35
55
  minValue?: DateId;
36
- /** Latest selectable date, applied to the embedded calendar. Build with `dateId(...)`. */
56
+ /**
57
+ * Latest selectable date, applied to the embedded calendar and to typed entry. Build with
58
+ * `dateId(...)`.
59
+ */
37
60
  maxValue?: DateId;
61
+ /**
62
+ * Returns `true` for dates that cannot be selected, such as weekends or holidays. The calendar
63
+ * renders them disabled; a typed unavailable date is kept and emitted but renders invalid. Pass
64
+ * a stable (memoized) function.
65
+ */
66
+ isDateUnavailable?: (date: DateId) => boolean;
67
+ /**
68
+ * Called when the committed value starts or stops violating `minValue`, `maxValue`, or
69
+ * `isDateUnavailable`, and again when the formatted message changes while the reason stays
70
+ * the same — a new bound, `locale`, or `labels` while the value is still `beforeMin`, for
71
+ * example. Receives the reason and its `labels` message formatted in `locale`, or `undefined`
72
+ * for both once the value is valid or cleared. Fires before paint, so state set here renders
73
+ * in the same frame as the invalid styling. Not needed to show the message: an empty
74
+ * `Field.Error` anywhere in the enclosing `Field` already renders it.
75
+ */
76
+ onValidationChange?: (
77
+ reason: DateValidationReason | undefined,
78
+ message: string | undefined,
79
+ ) => void;
38
80
  name?: string;
39
81
  locale?: string;
40
82
  labels?: Partial<DateComponentLabels>;
@@ -57,6 +99,8 @@ export const DatePickerRoot = forwardRef<ComponentRef<typeof View>, DatePickerRo
57
99
  isRequired,
58
100
  minValue,
59
101
  maxValue,
102
+ isDateUnavailable,
103
+ onValidationChange,
60
104
  locale = 'en-US',
61
105
  labels: labelsProp,
62
106
  ...props
@@ -83,6 +127,59 @@ export const DatePickerRoot = forwardRef<ComponentRef<typeof View>, DatePickerRo
83
127
  defaultProp: value,
84
128
  });
85
129
 
130
+ const validationReason = useMemo(
131
+ () =>
132
+ value === undefined
133
+ ? undefined
134
+ : getDateValidationReason(value, { minValue, maxValue, isDateUnavailable }),
135
+ [isDateUnavailable, maxValue, minValue, value],
136
+ );
137
+ const resolvedInvalid = !!isInvalid || validationReason !== undefined;
138
+ const validationMessage = useMemo(
139
+ () =>
140
+ validationReason === undefined
141
+ ? undefined
142
+ : formatDateValidationMessage(
143
+ labels,
144
+ validationReason,
145
+ { minValue, maxValue },
146
+ { locale },
147
+ ),
148
+ [labels, locale, maxValue, minValue, validationReason],
149
+ );
150
+
151
+ const onValidationChangeRef = useRef(onValidationChange);
152
+ onValidationChangeRef.current = onValidationChange;
153
+ const reportedValidationRef = useRef<{
154
+ reason: DateValidationReason | undefined;
155
+ message: string | undefined;
156
+ }>({ reason: undefined, message: undefined });
157
+ useLayoutEffect(() => {
158
+ const reported = reportedValidationRef.current;
159
+ if (reported.reason === validationReason && reported.message === validationMessage) {
160
+ return;
161
+ }
162
+ reportedValidationRef.current = { reason: validationReason, message: validationMessage };
163
+ onValidationChangeRef.current?.(validationReason, validationMessage);
164
+ }, [validationMessage, validationReason]);
165
+
166
+ const reportsToField = useReportFormControlValidation(resolvedInvalid, validationMessage);
167
+
168
+ // Without an enclosing `Field` there is nothing to report to, so provide the picker's
169
+ // validation to its own children (`Field.Error`, `Field.Helper`, the input group).
170
+ const parentFormControl = useFormControlContext();
171
+ const standaloneFormControl = useMemo(
172
+ () =>
173
+ reportsToField
174
+ ? undefined
175
+ : {
176
+ ...parentFormControl,
177
+ isInvalid: !!parentFormControl.isInvalid || resolvedInvalid,
178
+ errorMessage: validationMessage,
179
+ },
180
+ [parentFormControl, reportsToField, resolvedInvalid, validationMessage],
181
+ );
182
+
86
183
  const surfacesRef = useRef<Set<PickerSurfaceType>>(new Set());
87
184
  const anchorRef = useRef<ComponentRef<typeof View>>(null);
88
185
  const triggerRef = useRef<ComponentRef<typeof View>>(null);
@@ -133,6 +230,7 @@ export const DatePickerRoot = forwardRef<ComponentRef<typeof View>, DatePickerRo
133
230
  disabled,
134
231
  minValue,
135
232
  maxValue,
233
+ isDateUnavailable,
136
234
  locale,
137
235
  labels,
138
236
  registerSurface,
@@ -149,6 +247,7 @@ export const DatePickerRoot = forwardRef<ComponentRef<typeof View>, DatePickerRo
149
247
  disabled,
150
248
  minValue,
151
249
  maxValue,
250
+ isDateUnavailable,
152
251
  locale,
153
252
  labels,
154
253
  registerSurface,
@@ -157,6 +256,22 @@ export const DatePickerRoot = forwardRef<ComponentRef<typeof View>, DatePickerRo
157
256
 
158
257
  const Comp = asChild ? Slot : View;
159
258
 
259
+ const field = (
260
+ <DateFieldRoot
261
+ value={value}
262
+ onValueChange={(next) => setValue(next as DateId | undefined)}
263
+ mode="date"
264
+ locale={locale}
265
+ labels={labelsProp}
266
+ isDisabled={disabled}
267
+ isReadOnly={isReadOnly}
268
+ isInvalid={resolvedInvalid}
269
+ isRequired={isRequired}
270
+ >
271
+ {children}
272
+ </DateFieldRoot>
273
+ );
274
+
160
275
  return (
161
276
  <DatePickerContext.Provider value={contextValue}>
162
277
  <Comp
@@ -164,19 +279,13 @@ export const DatePickerRoot = forwardRef<ComponentRef<typeof View>, DatePickerRo
164
279
  {...props}
165
280
  {...mergeDataAttributes(props, dataAttributes({ disabled, open }))}
166
281
  >
167
- <DateFieldRoot
168
- value={value}
169
- onValueChange={(next) => setValue(next as DateId | undefined)}
170
- mode="date"
171
- locale={locale}
172
- labels={labelsProp}
173
- isDisabled={disabled}
174
- isReadOnly={isReadOnly}
175
- isInvalid={isInvalid}
176
- isRequired={isRequired}
177
- >
178
- {children}
179
- </DateFieldRoot>
282
+ {standaloneFormControl ? (
283
+ <FormControlContext.Provider value={standaloneFormControl}>
284
+ {field}
285
+ </FormControlContext.Provider>
286
+ ) : (
287
+ field
288
+ )}
180
289
  </Comp>
181
290
  </DatePickerContext.Provider>
182
291
  );
@@ -14,6 +14,7 @@ export interface DatePickerContextValue {
14
14
  disabled: boolean;
15
15
  minValue?: DateId;
16
16
  maxValue?: DateId;
17
+ isDateUnavailable?: (date: DateId) => boolean;
17
18
  locale: string;
18
19
  labels: DateComponentLabels;
19
20
  registerSurface: (type: PickerSurfaceType) => void;