@viasat/beam-react 2.53.0 → 2.54.1

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.
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),n=require("../../../chunks/DateField.Segment.CqFLhMYA.js"),t=require("./DateField.utils.cjs.js"),o=[{type:"month",value:""},{type:"literal",value:"/"},{type:"day",value:""},{type:"literal",value:"/"},{type:"year",value:""}],N={month:"MM",day:"DD",year:"YYYY"},E=t.getSegmentOrder(o),T=({segmentText:r,segmentValues:a,focusedSegment:m,disabled:c,readOnly:y,invalid:d,role:u,onSegmentFocus:p,onSegmentBlur:D,onSegmentInput:_,onSegmentKeyDown:h,registerSegmentRef:M})=>{const S={day:{min:1,max:t.getDaysInMonth(a.year,a.month)},month:{min:1,max:t.MONTH_MAX},year:{min:t.YEAR_MIN,max:t.YEAR_MAX}};return s.jsx("span",{className:n.styles[n.staticDateFieldClassNames.segments],children:o.map((l,g)=>{if(l.type==="literal")return s.jsx("span",{"aria-hidden":"true",className:n.styles[n.staticDateFieldClassNames.separator],children:l.value},`literal-${g}`);const e=l.type,v=N[e],{displayValue:i,isPlaceholder:x}=t.getSegmentDisplay(e,r[e],v),{min:R,max:F}=S[e],A=e==="month"&&a.month!=null?t.getMonthName(a.month):i;return s.jsx(n.DateFieldSegment,{type:e,value:a[e],valueMin:R,valueMax:F,displayValue:i,isPlaceholder:x,valueText:A,invalid:d,role:u,isActive:m===e,disabled:c,readOnly:y,onFocus:()=>p(e),onBlur:D,onInput:_,onKeyDown:h,segmentRef:M(e)},e)})})};exports.DateFieldSegments=T;exports.PARTS_ORDER=E;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react/jsx-runtime"),n=require("../../../chunks/DateField.Segment.CqFLhMYA.js"),t=require("./DateField.utils.cjs.js"),Y={month:"MM",day:"DD",year:"YYYY"},j=({parts:o,segmentText:r,segmentValues:a,focusedSegment:m,disabled:c,readOnly:d,invalid:u,role:y,onSegmentFocus:D,onSegmentBlur:h,onSegmentInput:p,onSegmentKeyDown:M,registerSegmentRef:x})=>{const _={day:{min:1,max:t.getDaysInMonth(a.year,a.month)},month:{min:1,max:t.MONTH_MAX},year:{min:t.YEAR_MIN,max:t.YEAR_MAX}};return i.jsx("span",{className:n.styles[n.staticDateFieldClassNames.segments],children:o.map((s,g)=>{if(s.type==="literal")return i.jsx("span",{"aria-hidden":"true",className:n.styles[n.staticDateFieldClassNames.separator],children:s.value},`literal-${g}`);const e=s.type,F=Y[e],{displayValue:l,isPlaceholder:S}=t.getSegmentDisplay(e,r[e],F),{min:v,max:N}=_[e],A=e==="month"&&a.month!=null?t.getMonthName(a.month):l;return i.jsx(n.DateFieldSegment,{type:e,value:a[e],valueMin:v,valueMax:N,displayValue:l,isPlaceholder:S,valueText:A,invalid:u,role:y,isActive:m===e,disabled:c,readOnly:d,onFocus:()=>D(e),onBlur:h,onInput:p,onKeyDown:M,segmentRef:x(e)},e)})})};exports.DateFieldSegments=j;
@@ -1,7 +1,8 @@
1
1
  import { FocusEvent, KeyboardEvent } from 'react';
2
- import { FocusTarget, SegmentRole, SegmentText, SegmentType, SegmentValues } from './DateField.types';
3
- export declare const PARTS_ORDER: ReadonlyArray<SegmentType>;
2
+ import { DateFieldPart, FocusTarget, SegmentRole, SegmentText, SegmentType, SegmentValues } from './DateField.types';
4
3
  export interface DateFieldSegmentsProps {
4
+ /** Locale-derived ordered parts (segments + literal separators) to render. */
5
+ parts: ReadonlyArray<DateFieldPart>;
5
6
  /** Per-segment raw strings — the single source of truth for display. */
6
7
  segmentText: SegmentText;
7
8
  /** Derived per-segment numbers for `aria-valuenow`. */
@@ -23,4 +24,4 @@ export interface DateFieldSegmentsProps {
23
24
  onSegmentKeyDown: (segment: SegmentType, event: KeyboardEvent<HTMLSpanElement>) => void;
24
25
  registerSegmentRef: (segment: SegmentType) => (element: HTMLSpanElement | null) => void;
25
26
  }
26
- export declare const DateFieldSegments: ({ segmentText, segmentValues, focusedSegment, disabled, readOnly, invalid, role, onSegmentFocus, onSegmentBlur, onSegmentInput, onSegmentKeyDown, registerSegmentRef, }: DateFieldSegmentsProps) => import("react/jsx-runtime").JSX.Element;
27
+ export declare const DateFieldSegments: ({ parts, segmentText, segmentValues, focusedSegment, disabled, readOnly, invalid, role, onSegmentFocus, onSegmentBlur, onSegmentInput, onSegmentKeyDown, registerSegmentRef, }: DateFieldSegmentsProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,70 +1,65 @@
1
1
  import { jsx as n } from "react/jsx-runtime";
2
- import { s, a as l, D as Y } from "../../../chunks/DateField.Segment.CwhRnhtq.js";
3
- import { getSegmentOrder as _, getDaysInMonth as f, getSegmentDisplay as T, YEAR_MAX as F, YEAR_MIN as O, MONTH_MAX as P, getMonthName as I } from "./DateField.utils.es.js";
4
- const m = [
5
- { type: "month", value: "" },
6
- { type: "literal", value: "/" },
7
- { type: "day", value: "" },
8
- { type: "literal", value: "/" },
9
- { type: "year", value: "" }
10
- ], B = {
2
+ import { s, a as m, D as F } from "../../../chunks/DateField.Segment.CwhRnhtq.js";
3
+ import { getDaysInMonth as R, getSegmentDisplay as S, YEAR_MAX as I, YEAR_MIN as T, MONTH_MAX as _, getMonthName as B } from "./DateField.utils.es.js";
4
+ const C = {
11
5
  month: "MM",
12
6
  day: "DD",
13
7
  year: "YYYY"
14
- }, j = _(m), w = ({
15
- segmentText: r,
8
+ }, X = ({
9
+ parts: r,
10
+ segmentText: i,
16
11
  segmentValues: t,
17
- focusedSegment: i,
18
- disabled: y,
19
- readOnly: c,
20
- invalid: p,
21
- role: d,
22
- onSegmentFocus: u,
23
- onSegmentBlur: h,
24
- onSegmentInput: M,
25
- onSegmentKeyDown: v,
12
+ focusedSegment: l,
13
+ disabled: c,
14
+ readOnly: y,
15
+ invalid: d,
16
+ role: p,
17
+ onSegmentFocus: h,
18
+ onSegmentBlur: M,
19
+ onSegmentInput: u,
20
+ onSegmentKeyDown: x,
26
21
  registerSegmentRef: D
27
22
  }) => {
28
- const x = {
29
- day: { min: 1, max: f(t.year, t.month) },
30
- month: { min: 1, max: P },
31
- year: { min: O, max: F }
23
+ const g = {
24
+ day: { min: 1, max: R(t.year, t.month) },
25
+ month: { min: 1, max: _ },
26
+ year: { min: T, max: I }
32
27
  };
33
- return /* @__PURE__ */ n("span", { className: s[l.segments], children: m.map((a, g) => {
28
+ return /* @__PURE__ */ n("span", { className: s[m.segments], children: r.map((a, v) => {
34
29
  if (a.type === "literal")
35
30
  return /* @__PURE__ */ n(
36
31
  "span",
37
32
  {
38
33
  "aria-hidden": "true",
39
- className: s[l.separator],
34
+ className: s[m.separator],
40
35
  children: a.value
41
36
  },
42
- `literal-${g}`
37
+ `literal-${v}`
43
38
  );
44
- const e = a.type, A = B[e], { displayValue: o, isPlaceholder: R } = T(
39
+ const e = a.type, A = C[e], { displayValue: o, isPlaceholder: N } = S(
45
40
  e,
46
- r[e],
41
+ i[e],
47
42
  A
48
- ), { min: S, max: N } = x[e], E = e === "month" && t.month != null ? I(t.month) : o;
43
+ ), { min: Y, max: f } = g[e], E = e === "month" && t.month != null ? B(t.month) : o;
49
44
  return /* @__PURE__ */ n(
50
- Y,
45
+ F,
51
46
  {
52
47
  type: e,
53
48
  value: t[e],
54
- valueMin: S,
55
- valueMax: N,
49
+ valueMin: Y,
50
+ valueMax: f,
56
51
  displayValue: o,
57
- isPlaceholder: R,
52
+ isPlaceholder: N,
58
53
  valueText: E,
59
- invalid: p,
60
- role: d,
61
- isActive: i === e,
62
- disabled: y,
63
- readOnly: c,
64
- onFocus: () => u(e),
65
- onBlur: h,
66
- onInput: M,
67
- onKeyDown: v,
54
+ invalid: d,
55
+ role: p,
56
+ isActive: l === e,
57
+ disabled: c,
58
+ readOnly: y,
59
+ onFocus: () => h(e),
60
+ onBlur: M,
61
+ onInput: u,
62
+ onKeyDown: x,
68
63
  segmentRef: D(e)
69
64
  },
70
65
  e
@@ -72,6 +67,5 @@ const m = [
72
67
  }) });
73
68
  };
74
69
  export {
75
- w as DateFieldSegments,
76
- j as PARTS_ORDER
70
+ X as DateFieldSegments
77
71
  };
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react/jsx-runtime"),ye=require("clsx"),w=require("react"),e=require("../../../chunks/DateField.Segment.CqFLhMYA.js"),Se=require("../../../chunks/constants.CgMu0_1M.js"),he=require("../../../chunks/helpers.BIckGIbP.js"),qe=require("../../../chunks/form.context.CkC0TwMb.js"),we=require("../../Form/contexts/label.context.cjs.js"),Ie=require("../../Form/contexts/helperText.context.cjs.js"),Me=require("../../Form/hooks/useUniversalRef.hook.cjs.js"),Re=require("../../../utils/hooks/useIsMounted.cjs.js"),u=require("./DateField.Segments.cjs.js"),t=require("./DateField.utils.cjs.js"),Ne=require("./useDateFieldFocus.cjs.js"),Oe=require("./useDateFieldForm.cjs.js"),Pe=require("./useDateFieldKeyboard.cjs.js"),Te=require("./useDateFieldSegments.cjs.js"),Ve=require("./useDateFieldValidity.cjs.js"),je=require("./useDateFieldValue.cjs.js"),Ce=require("./useInvalidState.cjs.js"),Be=w.forwardRef(function({value:I,defaultValue:M,onChange:R,minDate:r,maxDate:d,getClampAnnouncement:N,label:c=null,helperText:b=null,error:F,hideRequiredMarker:O=!1,validationRules:P,width:T,theme:_,fluid:V=!1,disabled:j=!1,readOnly:C=!1,required:B=!1,name:f,id:E,className:K,style:H,"aria-label":L,"aria-describedby":$,"aria-labelledby":k,...A},U){const{disabled:s,readOnly:n,required:D,invalid:W,errorMessageProvided:m,defaultValue:z,errorId:p,helperTextId:G,validationErrorsId:J,labelId:x,ariaDescribedBy:Q,ariaLabelledBy:X,showErrors:Y}=Oe.useDateFieldForm({name:f,disabled:j,readOnly:C,required:B,defaultValue:M,error:F,hasHelperText:!!b,hasLabel:!!c,validationRules:P,ariaDescribedBy:$,ariaLabelledBy:k});w.useEffect(()=>{process.env.NODE_ENV!=="production"&&t.isMinMaxMisconfigured(r,d)&&console.warn("DateField: `minDate` is after `maxDate` — no date satisfies both, so the blur clamp is disabled and values are left as typed.")},[t.dateKeyOrNull(r),t.dateKeyOrNull(d)]);const{refFn:Z,ref:g}=Me.useUniversalRef(U),{segmentRefs:ee,registerSegmentRef:se}=Te.useDateFieldSegments(),{segmentText:ie,segmentValues:v,currentValue:y,wasTouched:ae,appendDigit:le,adjustSegment:te,clearSegment:re,beginSegmentEdit:de,commitOnBlur:ne,clampAnnouncement:oe}=je.useDateFieldValue({value:I,defaultValue:z,onChange:R,minDate:r,maxDate:d,getClampAnnouncement:N}),{focusedSegment:S,fieldTabIndex:ue,handleSegmentFocus:h,handleFieldFocus:ce,handleFieldBlur:be,handleFieldMouseDown:Fe,focusNext:q,focusPrevious:_e}=Ne.useDateFieldFocus({disabled:s,fieldRef:g,segmentRefs:ee,partsOrder:u.PARTS_ORDER,onSegmentFocusChange:de,onFieldBlur:ne}),fe=Pe.useDateFieldKeyboard({disabled:s,readOnly:n,fieldRef:g,focusNext:q,focusPrevious:_e,adjustSegment:te,clearSegment:re}),{isInvalid:De}=Ve.useDateFieldValidity({segments:v,currentValue:y,wasTouched:ae,isFocused:S!==null}),me=(a,l)=>{const{advanced:ve}=le(a,l);ve&&q(a)},o=Ce.useInvalidState({formInvalid:W,valueInvalid:De}),pe=Re.useIsMounted()&&he.isIOS()?"textbox":"spinbutton",xe=a=>{if(s)return;const l=a.target.closest("label");!l||l.id!==x||(a.preventDefault(),h(u.PARTS_ORDER[0]))},ge=ye(e.styles[e.baseClassNamePrefix],_&&Se.themeClassName(_),V&&e.styles[`${e.classModifierPrefix}fluid`],o&&e.styles[`${e.classModifierPrefix}error`],s&&e.styles[`${e.classModifierPrefix}disabled`],n&&e.styles[`${e.classModifierPrefix}read-only`],K);return i.jsxs("div",{className:ge,style:{...H,maxWidth:T},onMouseDownCapture:xe,children:[i.jsx(we.LabelProvider,{ctxId:x,ctxDisabled:s,ctxRequired:D&&!O,children:c}),i.jsx("div",{...A,ref:Z,id:E,role:"group","aria-label":L,"aria-labelledby":X,"aria-disabled":s||void 0,"aria-required":D||void 0,"aria-invalid":o||void 0,"aria-describedby":Q,"aria-errormessage":m?p:void 0,tabIndex:ue,className:e.styles[e.staticDateFieldClassNames.field],onMouseDown:Fe,onFocus:ce,children:i.jsx(u.DateFieldSegments,{segmentText:ie,segmentValues:v,focusedSegment:S,disabled:s,readOnly:n,invalid:o,role:pe,onSegmentFocus:h,onSegmentBlur:be,onSegmentInput:me,onSegmentKeyDown:fe,registerSegmentRef:se})}),i.jsx("span",{role:"status","aria-live":"polite","aria-atomic":"true",className:e.styles[e.staticDateFieldClassNames.srStatus],children:oe}),i.jsx("input",{type:"hidden",name:f,value:t.toISODateString(y),disabled:s}),i.jsxs(Ie.HelperTextProvider,{ctxId:G,ctxDisabled:s,children:[b,m&&i.jsx(qe.HelperText,{id:p,appearance:"negative",children:F})]}),Y(J)]})});exports.DateField=Be;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),qe=require("clsx"),r=require("react"),e=require("../../../chunks/DateField.Segment.CqFLhMYA.js"),we=require("../../../chunks/constants.CgMu0_1M.js"),Ie=require("../../../chunks/helpers.BIckGIbP.js"),Me=require("../../../chunks/form.context.CkC0TwMb.js"),Ne=require("../../Form/contexts/label.context.cjs.js"),Oe=require("../../Form/contexts/helperText.context.cjs.js"),Ve=require("../../Form/hooks/useUniversalRef.hook.cjs.js"),je=require("../../../utils/hooks/useIsMounted.cjs.js"),Pe=require("./DateField.Segments.cjs.js"),i=require("./DateField.utils.cjs.js"),Re=require("./useDateFieldFocus.cjs.js"),Ce=require("./useDateFieldForm.cjs.js"),Te=require("./useDateFieldKeyboard.cjs.js"),Be=require("./useDateFieldSegments.cjs.js"),Ee=require("./useDateFieldValidity.cjs.js"),Ke=require("./useDateFieldValue.cjs.js"),He=require("./useInvalidState.cjs.js"),Le=r.forwardRef(function({value:N,defaultValue:O,onChange:V,minDate:d,maxDate:n,getClampAnnouncement:j,locale:P,label:F=null,helperText:f=null,error:_,hideRequiredMarker:R=!1,validationRules:C,width:T,theme:m,fluid:B=!1,disabled:E=!1,readOnly:K=!1,required:H=!1,name:D,id:L,className:k,style:$,"aria-label":U,"aria-describedby":W,"aria-labelledby":A,...z},G){const{disabled:s,readOnly:o,required:p,invalid:J,errorMessageProvided:g,defaultValue:Q,errorId:x,helperTextId:X,validationErrorsId:Y,labelId:v,ariaDescribedBy:Z,ariaLabelledBy:ee,showErrors:se}=Ce.useDateFieldForm({name:D,disabled:E,readOnly:K,required:H,defaultValue:O,error:_,hasHelperText:!!f,hasLabel:!!F,validationRules:C,ariaDescribedBy:W,ariaLabelledBy:A});r.useEffect(()=>{process.env.NODE_ENV!=="production"&&i.isMinMaxMisconfigured(d,n)&&console.warn("DateField: `minDate` is after `maxDate` — no date satisfies both, so the blur clamp is disabled and values are left as typed.")},[i.dateKeyOrNull(d),i.dateKeyOrNull(n)]);const{refFn:ae,ref:y}=Ve.useUniversalRef(G),{segmentRefs:ie,registerSegmentRef:le}=Be.useDateFieldSegments(),te=P??"en-US",u=i.getDateParts(te),S=r.useMemo(()=>i.getSegmentOrder(u),[u]),{segmentText:re,segmentValues:h,currentValue:q,wasTouched:de,appendDigit:w,adjustSegment:ne,clearSegment:oe,beginSegmentEdit:ue,commitOnBlur:ce,clampAnnouncement:be}=Ke.useDateFieldValue({value:N,defaultValue:Q,onChange:V,minDate:d,maxDate:n,getClampAnnouncement:j}),{focusedSegment:I,fieldTabIndex:Fe,handleSegmentFocus:M,handleFieldFocus:fe,handleFieldBlur:_e,handleFieldMouseDown:me,focusNext:c,focusPrevious:De}=Re.useDateFieldFocus({disabled:s,fieldRef:y,segmentRefs:ie,partsOrder:S,onSegmentFocusChange:ue,onFieldBlur:ce}),pe=Te.useDateFieldKeyboard({disabled:s,readOnly:o,fieldRef:y,focusNext:c,focusPrevious:De,adjustSegment:ne,clearSegment:oe}),{isInvalid:ge}=Ee.useDateFieldValidity({segments:h,currentValue:q,wasTouched:de,isFocused:I!==null}),xe=r.useCallback((l,t)=>{const{advanced:he}=w(l,t);he&&c(l)},[w,c]),b=He.useInvalidState({formInvalid:J,valueInvalid:ge}),ve=je.useIsMounted()&&Ie.isIOS()?"textbox":"spinbutton",ye=l=>{if(s)return;const t=l.target.closest("label");!t||t.id!==v||(l.preventDefault(),M(S[0]))},Se=qe(e.styles[e.baseClassNamePrefix],m&&we.themeClassName(m),B&&e.styles[`${e.classModifierPrefix}fluid`],b&&e.styles[`${e.classModifierPrefix}error`],s&&e.styles[`${e.classModifierPrefix}disabled`],o&&e.styles[`${e.classModifierPrefix}read-only`],k);return a.jsxs("div",{className:Se,style:{...$,maxWidth:T},onMouseDownCapture:ye,children:[a.jsx(Ne.LabelProvider,{ctxId:v,ctxDisabled:s,ctxRequired:p&&!R,children:F}),a.jsx("div",{...z,ref:ae,id:L,role:"group","aria-label":U,"aria-labelledby":ee,"aria-disabled":s||void 0,"aria-required":p||void 0,"aria-invalid":b||void 0,"aria-describedby":Z,"aria-errormessage":g?x:void 0,tabIndex:Fe,className:e.styles[e.staticDateFieldClassNames.field],onMouseDown:me,onFocus:fe,children:a.jsx(Pe.DateFieldSegments,{parts:u,segmentText:re,segmentValues:h,focusedSegment:I,disabled:s,readOnly:o,invalid:b,role:ve,onSegmentFocus:M,onSegmentBlur:_e,onSegmentInput:xe,onSegmentKeyDown:pe,registerSegmentRef:le})}),a.jsx("span",{role:"status","aria-live":"polite","aria-atomic":"true",className:e.styles[e.staticDateFieldClassNames.srStatus],children:be}),a.jsx("input",{type:"hidden",name:D,value:i.toISODateString(q),disabled:s}),a.jsxs(Oe.HelperTextProvider,{ctxId:X,ctxDisabled:s,children:[f,g&&a.jsx(Me.HelperText,{id:x,appearance:"negative",children:_})]}),se(Y)]})});exports.DateField=Le;
@@ -1,198 +1,203 @@
1
- import { jsxs as N, jsx as r } from "react/jsx-runtime";
2
- import Ie from "clsx";
3
- import { forwardRef as Ne, useEffect as Me } from "react";
4
- import { s as a, b as we, c as l, a as M } from "../../../chunks/DateField.Segment.CwhRnhtq.js";
1
+ import { jsxs as O, jsx as r } from "react/jsx-runtime";
2
+ import Ne from "clsx";
3
+ import { forwardRef as we, useEffect as Oe, useMemo as Ve, useCallback as Ce } from "react";
4
+ import { s as a, b as Be, c as i, a as V } from "../../../chunks/DateField.Segment.CwhRnhtq.js";
5
5
  import { t as Re } from "../../../chunks/constants.Cruz2A1w.js";
6
- import { i as Oe } from "../../../chunks/helpers.CiQfGwdc.js";
7
- import { H as Ve } from "../../../chunks/form.context.BDYA2JQs.js";
8
- import { LabelProvider as Be } from "../../Form/contexts/label.context.es.js";
9
- import { HelperTextProvider as Ce } from "../../Form/contexts/helperText.context.es.js";
10
- import { useUniversalRef as Ee } from "../../Form/hooks/useUniversalRef.hook.es.js";
11
- import { useIsMounted as Pe } from "../../../utils/hooks/useIsMounted.es.js";
12
- import { DateFieldSegments as Te, PARTS_ORDER as w } from "./DateField.Segments.es.js";
13
- import { isMinMaxMisconfigured as qe, dateKeyOrNull as R, toISODateString as He } from "./DateField.utils.es.js";
14
- import { useDateFieldFocus as Ke } from "./useDateFieldFocus.es.js";
15
- import { useDateFieldForm as Le } from "./useDateFieldForm.es.js";
16
- import { useDateFieldKeyboard as $e } from "./useDateFieldKeyboard.es.js";
17
- import { useDateFieldSegments as je } from "./useDateFieldSegments.es.js";
18
- import { useDateFieldValidity as Ae } from "./useDateFieldValidity.es.js";
19
- import { useDateFieldValue as We } from "./useDateFieldValue.es.js";
20
- import { useInvalidState as _e } from "./useInvalidState.es.js";
21
- const fa = Ne(
6
+ import { i as Pe } from "../../../chunks/helpers.CiQfGwdc.js";
7
+ import { H as Ee } from "../../../chunks/form.context.BDYA2JQs.js";
8
+ import { LabelProvider as Le } from "../../Form/contexts/label.context.es.js";
9
+ import { HelperTextProvider as Te } from "../../Form/contexts/helperText.context.es.js";
10
+ import { useUniversalRef as qe } from "../../Form/hooks/useUniversalRef.hook.es.js";
11
+ import { useIsMounted as He } from "../../../utils/hooks/useIsMounted.es.js";
12
+ import { DateFieldSegments as Ke } from "./DateField.Segments.es.js";
13
+ import { isMinMaxMisconfigured as $e, dateKeyOrNull as C, getDateParts as je, getSegmentOrder as Ue, toISODateString as We } from "./DateField.utils.es.js";
14
+ import { useDateFieldFocus as ke } from "./useDateFieldFocus.es.js";
15
+ import { useDateFieldForm as Ae } from "./useDateFieldForm.es.js";
16
+ import { useDateFieldKeyboard as _e } from "./useDateFieldKeyboard.es.js";
17
+ import { useDateFieldSegments as ze } from "./useDateFieldSegments.es.js";
18
+ import { useDateFieldValidity as Ge } from "./useDateFieldValidity.es.js";
19
+ import { useDateFieldValue as Je } from "./useDateFieldValue.es.js";
20
+ import { useInvalidState as Qe } from "./useInvalidState.es.js";
21
+ const ha = we(
22
22
  function({
23
- value: O,
24
- defaultValue: V,
25
- onChange: B,
26
- minDate: t,
23
+ value: B,
24
+ defaultValue: R,
25
+ onChange: P,
26
+ minDate: l,
27
27
  maxDate: o,
28
- getClampAnnouncement: C,
29
- label: u = null,
30
- helperText: m = null,
31
- error: c,
32
- hideRequiredMarker: E = !1,
33
- validationRules: P,
34
- width: T,
35
- theme: f,
36
- fluid: q = !1,
37
- disabled: H = !1,
38
- readOnly: K = !1,
39
- required: L = !1,
40
- name: p,
41
- id: $,
42
- className: j,
28
+ getClampAnnouncement: E,
29
+ locale: L,
30
+ label: c = null,
31
+ helperText: f = null,
32
+ error: p,
33
+ hideRequiredMarker: T = !1,
34
+ validationRules: q,
35
+ width: H,
36
+ theme: b,
37
+ fluid: K = !1,
38
+ disabled: $ = !1,
39
+ readOnly: j = !1,
40
+ required: U = !1,
41
+ name: g,
42
+ id: W,
43
+ className: k,
43
44
  style: A,
44
- "aria-label": W,
45
- "aria-describedby": _,
46
- "aria-labelledby": U,
47
- ...k
48
- }, z) {
45
+ "aria-label": _,
46
+ "aria-describedby": z,
47
+ "aria-labelledby": G,
48
+ ...J
49
+ }, Q) {
49
50
  const {
50
51
  disabled: e,
51
52
  readOnly: d,
52
- required: b,
53
- invalid: G,
54
- errorMessageProvided: g,
55
- defaultValue: J,
56
- errorId: v,
57
- helperTextId: Q,
58
- validationErrorsId: X,
59
- labelId: F,
60
- ariaDescribedBy: Y,
61
- ariaLabelledBy: Z,
62
- showErrors: ee
63
- } = Le({
64
- name: p,
65
- disabled: H,
66
- readOnly: K,
67
- required: L,
68
- defaultValue: V,
69
- error: c,
70
- hasHelperText: !!m,
71
- hasLabel: !!u,
72
- validationRules: P,
73
- ariaDescribedBy: _,
74
- ariaLabelledBy: U
53
+ required: v,
54
+ invalid: X,
55
+ errorMessageProvided: F,
56
+ defaultValue: Y,
57
+ errorId: D,
58
+ helperTextId: Z,
59
+ validationErrorsId: ee,
60
+ labelId: h,
61
+ ariaDescribedBy: ae,
62
+ ariaLabelledBy: re,
63
+ showErrors: se
64
+ } = Ae({
65
+ name: g,
66
+ disabled: $,
67
+ readOnly: j,
68
+ required: U,
69
+ defaultValue: R,
70
+ error: p,
71
+ hasHelperText: !!f,
72
+ hasLabel: !!c,
73
+ validationRules: q,
74
+ ariaDescribedBy: z,
75
+ ariaLabelledBy: G
75
76
  });
76
- Me(() => {
77
- process.env.NODE_ENV !== "production" && qe(t, o) && console.warn(
77
+ Oe(() => {
78
+ process.env.NODE_ENV !== "production" && $e(l, o) && console.warn(
78
79
  "DateField: `minDate` is after `maxDate` — no date satisfies both, so the blur clamp is disabled and values are left as typed."
79
80
  );
80
- }, [R(t), R(o)]);
81
- const { refFn: ae, ref: D } = Ee(z), { segmentRefs: re, registerSegmentRef: ie } = je(), {
82
- segmentText: se,
83
- segmentValues: h,
84
- currentValue: x,
85
- wasTouched: le,
86
- appendDigit: te,
87
- adjustSegment: oe,
88
- clearSegment: de,
89
- beginSegmentEdit: ne,
90
- commitOnBlur: ue,
91
- clampAnnouncement: me
92
- } = We({
93
- value: O,
94
- defaultValue: J,
95
- onChange: B,
96
- minDate: t,
81
+ }, [C(l), C(o)]);
82
+ const { refFn: te, ref: S } = qe(Q), { segmentRefs: ie, registerSegmentRef: le } = ze(), n = je(L ?? "en-US"), x = Ve(() => Ue(n), [n]), {
83
+ segmentText: oe,
84
+ segmentValues: y,
85
+ currentValue: I,
86
+ wasTouched: de,
87
+ appendDigit: M,
88
+ adjustSegment: ne,
89
+ clearSegment: ue,
90
+ beginSegmentEdit: me,
91
+ commitOnBlur: ce,
92
+ clampAnnouncement: fe
93
+ } = Je({
94
+ value: B,
95
+ defaultValue: Y,
96
+ onChange: P,
97
+ minDate: l,
97
98
  maxDate: o,
98
- getClampAnnouncement: C
99
+ getClampAnnouncement: E
99
100
  }), {
100
- focusedSegment: y,
101
- fieldTabIndex: ce,
102
- handleSegmentFocus: S,
103
- handleFieldFocus: fe,
104
- handleFieldBlur: pe,
105
- handleFieldMouseDown: be,
106
- focusNext: I,
107
- focusPrevious: ge
108
- } = Ke({
101
+ focusedSegment: N,
102
+ fieldTabIndex: pe,
103
+ handleSegmentFocus: w,
104
+ handleFieldFocus: be,
105
+ handleFieldBlur: ge,
106
+ handleFieldMouseDown: ve,
107
+ focusNext: u,
108
+ focusPrevious: Fe
109
+ } = ke({
109
110
  disabled: e,
110
- fieldRef: D,
111
- segmentRefs: re,
112
- partsOrder: w,
113
- onSegmentFocusChange: ne,
114
- onFieldBlur: ue
115
- }), ve = $e({
111
+ fieldRef: S,
112
+ segmentRefs: ie,
113
+ partsOrder: x,
114
+ onSegmentFocusChange: me,
115
+ onFieldBlur: ce
116
+ }), De = _e({
116
117
  disabled: e,
117
118
  readOnly: d,
118
- fieldRef: D,
119
- focusNext: I,
120
- focusPrevious: ge,
121
- adjustSegment: oe,
122
- clearSegment: de
123
- }), { isInvalid: Fe } = Ae({
124
- segments: h,
125
- currentValue: x,
126
- wasTouched: le,
127
- isFocused: y !== null
128
- }), De = (i, s) => {
129
- const { advanced: Se } = te(i, s);
130
- Se && I(i);
131
- }, n = _e({
132
- formInvalid: G,
133
- valueInvalid: Fe
134
- }), he = Pe() && Oe() ? "textbox" : "spinbutton", xe = (i) => {
119
+ fieldRef: S,
120
+ focusNext: u,
121
+ focusPrevious: Fe,
122
+ adjustSegment: ne,
123
+ clearSegment: ue
124
+ }), { isInvalid: he } = Ge({
125
+ segments: y,
126
+ currentValue: I,
127
+ wasTouched: de,
128
+ isFocused: N !== null
129
+ }), Se = Ce(
130
+ (s, t) => {
131
+ const { advanced: Me } = M(s, t);
132
+ Me && u(s);
133
+ },
134
+ [M, u]
135
+ ), m = Qe({
136
+ formInvalid: X,
137
+ valueInvalid: he
138
+ }), xe = He() && Pe() ? "textbox" : "spinbutton", ye = (s) => {
135
139
  if (e) return;
136
- const s = i.target.closest("label");
137
- !s || s.id !== F || (i.preventDefault(), S(w[0]));
138
- }, ye = Ie(
139
- a[we],
140
- f && Re(f),
141
- q && a[`${l}fluid`],
142
- n && a[`${l}error`],
143
- e && a[`${l}disabled`],
144
- d && a[`${l}read-only`],
145
- j
140
+ const t = s.target.closest("label");
141
+ !t || t.id !== h || (s.preventDefault(), w(x[0]));
142
+ }, Ie = Ne(
143
+ a[Be],
144
+ b && Re(b),
145
+ K && a[`${i}fluid`],
146
+ m && a[`${i}error`],
147
+ e && a[`${i}disabled`],
148
+ d && a[`${i}read-only`],
149
+ k
146
150
  );
147
- return /* @__PURE__ */ N(
151
+ return /* @__PURE__ */ O(
148
152
  "div",
149
153
  {
150
- className: ye,
151
- style: { ...A, maxWidth: T },
152
- onMouseDownCapture: xe,
154
+ className: Ie,
155
+ style: { ...A, maxWidth: H },
156
+ onMouseDownCapture: ye,
153
157
  children: [
154
158
  /* @__PURE__ */ r(
155
- Be,
159
+ Le,
156
160
  {
157
- ctxId: F,
161
+ ctxId: h,
158
162
  ctxDisabled: e,
159
- ctxRequired: b && !E,
160
- children: u
163
+ ctxRequired: v && !T,
164
+ children: c
161
165
  }
162
166
  ),
163
167
  /* @__PURE__ */ r(
164
168
  "div",
165
169
  {
166
- ...k,
167
- ref: ae,
168
- id: $,
170
+ ...J,
171
+ ref: te,
172
+ id: W,
169
173
  role: "group",
170
- "aria-label": W,
171
- "aria-labelledby": Z,
174
+ "aria-label": _,
175
+ "aria-labelledby": re,
172
176
  "aria-disabled": e || void 0,
173
- "aria-required": b || void 0,
174
- "aria-invalid": n || void 0,
175
- "aria-describedby": Y,
176
- "aria-errormessage": g ? v : void 0,
177
- tabIndex: ce,
178
- className: a[M.field],
179
- onMouseDown: be,
180
- onFocus: fe,
177
+ "aria-required": v || void 0,
178
+ "aria-invalid": m || void 0,
179
+ "aria-describedby": ae,
180
+ "aria-errormessage": F ? D : void 0,
181
+ tabIndex: pe,
182
+ className: a[V.field],
183
+ onMouseDown: ve,
184
+ onFocus: be,
181
185
  children: /* @__PURE__ */ r(
182
- Te,
186
+ Ke,
183
187
  {
184
- segmentText: se,
185
- segmentValues: h,
186
- focusedSegment: y,
188
+ parts: n,
189
+ segmentText: oe,
190
+ segmentValues: y,
191
+ focusedSegment: N,
187
192
  disabled: e,
188
193
  readOnly: d,
189
- invalid: n,
190
- role: he,
191
- onSegmentFocus: S,
192
- onSegmentBlur: pe,
193
- onSegmentInput: De,
194
- onSegmentKeyDown: ve,
195
- registerSegmentRef: ie
194
+ invalid: m,
195
+ role: xe,
196
+ onSegmentFocus: w,
197
+ onSegmentBlur: ge,
198
+ onSegmentInput: Se,
199
+ onSegmentKeyDown: De,
200
+ registerSegmentRef: le
196
201
  }
197
202
  )
198
203
  }
@@ -203,29 +208,29 @@ const fa = Ne(
203
208
  role: "status",
204
209
  "aria-live": "polite",
205
210
  "aria-atomic": "true",
206
- className: a[M.srStatus],
207
- children: me
211
+ className: a[V.srStatus],
212
+ children: fe
208
213
  }
209
214
  ),
210
215
  /* @__PURE__ */ r(
211
216
  "input",
212
217
  {
213
218
  type: "hidden",
214
- name: p,
215
- value: He(x),
219
+ name: g,
220
+ value: We(I),
216
221
  disabled: e
217
222
  }
218
223
  ),
219
- /* @__PURE__ */ N(Ce, { ctxId: Q, ctxDisabled: e, children: [
220
- m,
221
- g && /* @__PURE__ */ r(Ve, { id: v, appearance: "negative", children: c })
224
+ /* @__PURE__ */ O(Te, { ctxId: Z, ctxDisabled: e, children: [
225
+ f,
226
+ F && /* @__PURE__ */ r(Ee, { id: D, appearance: "negative", children: p })
222
227
  ] }),
223
- ee(X)
228
+ se(ee)
224
229
  ]
225
230
  }
226
231
  );
227
232
  }
228
233
  );
229
234
  export {
230
- fa as DateField
235
+ ha as DateField
231
236
  };
@@ -26,7 +26,7 @@ export interface AppendDigitResult {
26
26
  /** True when the digit was refused (invalid char, out-of-range, or full). */
27
27
  rejected: boolean;
28
28
  }
29
- /** Shape mirrors `Intl.DateTimeFormatPart` so DF-8 can swap in locale-derived parts directly. */
29
+ /** Shape mirrors `Intl.DateTimeFormatPart`; `getDateParts` derives this directly from `formatToParts()`. */
30
30
  export type DateFieldPart = {
31
31
  type: SegmentType | 'literal';
32
32
  value: string;
@@ -106,6 +106,13 @@ export interface DateFieldProps extends DateFieldInputAttributes {
106
106
  * message announced politely to screen readers. Omit → no announcement.
107
107
  */
108
108
  getClampAnnouncement?: (clampedDate: Date) => string;
109
+ /**
110
+ * BCP-47 locale tag driving segment order + separators (e.g. `en-GB` →
111
+ * DD/MM/YYYY, `de-DE` → DD.MM.YYYY). A future `DatesProvider` will supply the
112
+ * default.
113
+ * @default en-US
114
+ */
115
+ locale?: string;
109
116
  }
110
117
  /**
111
118
  * Internal props for the segment subcomponent. Not part of the public API.
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("../../../chunks/constants.CgMu0_1M.js");const N=require("../../../chunks/helpers.BIckGIbP.js"),g=require("./DateField.validation.cjs.js"),T=new Intl.DateTimeFormat("en-US",{month:"long"}),h=e=>T.format(new Date(2e3,e-1,1)),u=31,s=12,c=1,d=9999,y=(e,t,n)=>Math.min(n,Math.max(t,e)),m=(e,t)=>((e-1)%t+t)%t+1,_=2024,A=(e,t)=>t==null?31:new Date(e??_,t,0).getDate(),E=()=>{const e=new Date;return{day:e.getDate(),month:e.getMonth()+1,year:e.getFullYear()}},l=e=>e instanceof Date&&!Number.isNaN(e.getTime()),p=(e,t,n,r)=>{if(n==="min")return e==="year"?null:1;if(n==="max")return e==="year"?null:e==="day"?r.daysInMonth:s;if(t==null){if(e==="year")return r.today.year;const f=e==="day"?u:s;return n>0?1:f}if(e==="year")return y(t+n,c,d);const o=e==="day"?u:s;return m(t+n,o)},D={day:"",month:"",year:""},S=e=>{const{day:t,month:n,year:r}=e;if(t==null||n==null||r==null)return null;const o=new Date(r,n-1,t);return o.setFullYear(r),Number.isNaN(o.getTime())||o.getFullYear()!==r||o.getMonth()!==n-1||o.getDate()!==t?null:o},R=(e,t)=>e==null&&t==null?!0:e==null||t==null?!1:e.getTime()===t.getTime(),a=N.dateToDayKey,F=e=>l(e)?a(e):null,I=(e,t,n)=>{const r=a(e);return!(l(t)&&r<a(t)||l(n)&&r>a(n))},M=(e,t)=>l(e)&&l(t)&&a(e)>a(t),Y=(e,t,n)=>{if(M(t,n))return e;const r=a(e);return l(t)&&r<a(t)?new Date(t.getFullYear(),t.getMonth(),t.getDate()):l(n)&&r>a(n)?new Date(n.getFullYear(),n.getMonth(),n.getDate()):e},w=e=>{if(!l(e))return"";const t=String(e.getFullYear()).padStart(4,"0"),n=String(e.getMonth()+1).padStart(2,"0"),r=String(e.getDate()).padStart(2,"0");return`${t}-${n}-${r}`},V=e=>e.filter(t=>t.type!=="literal").map(t=>t.type),O=e=>l(e)?{day:String(e.getDate()).padStart(2,"0"),month:String(e.getMonth()+1).padStart(2,"0"),year:String(e.getFullYear()).padStart(4,"0")}:D,i=(e,t)=>{if(t===""||e==="year"&&t.length<g.SEGMENT_MAX_LENGTH.year)return null;const n=parseInt(t,10);return Number.isNaN(n)||n===0?null:n},X=e=>S({day:i("day",e.day),month:i("month",e.month),year:i("year",e.year)}),P=(e,t)=>t===""?"":t.padStart(g.SEGMENT_MAX_LENGTH[e],"0"),b=(e,t,n)=>t===""?{displayValue:n,isPlaceholder:!0}:{displayValue:t.padStart(g.SEGMENT_MAX_LENGTH[e],"0"),isPlaceholder:!1},G=e=>{const t=window.getSelection();if(!t)return;const n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)},H=e=>{var n;if(!e)return;const t=(n=window.getSelection)==null?void 0:n.call(window);t&&t.rangeCount>0&&e.contains(t.anchorNode)&&t.removeAllRanges()};exports.DAY_SPIN_MAX=u;exports.MONTH_MAX=s;exports.YEAR_MAX=d;exports.YEAR_MIN=c;exports.adjustSegmentValue=p;exports.clamp=y;exports.clampDateToRange=Y;exports.clearSelectionWithin=H;exports.dateKeyOrNull=F;exports.deriveValue=S;exports.deriveValueFromText=X;exports.getDaysInMonth=A;exports.getMonthName=h;exports.getSegmentDisplay=b;exports.getSegmentOrder=V;exports.isDateInRange=I;exports.isMinMaxMisconfigured=M;exports.isSameDateValue=R;exports.normalizeSegmentText=P;exports.segmentNumber=i;exports.segmentTextFromValue=O;exports.selectElementContents=G;exports.toISODateString=w;exports.todayParts=E;exports.wrapInRange=m;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});require("../../../chunks/constants.CgMu0_1M.js");const D=require("../../../chunks/helpers.BIckGIbP.js"),g=require("./DateField.validation.cjs.js"),E=new Intl.DateTimeFormat("en-US",{month:"long"}),p=e=>E.format(new Date(2e3,e-1,1)),c=31,l=12,S=1,m=9999,M=(e,t,n)=>Math.min(n,Math.max(t,e)),T=(e,t)=>((e-1)%t+t)%t+1,w=2024,P=(e,t)=>t==null?31:new Date(e??w,t,0).getDate(),R=()=>{const e=new Date;return{day:e.getDate(),month:e.getMonth()+1,year:e.getFullYear()}},o=e=>e instanceof Date&&!Number.isNaN(e.getTime()),I=(e,t,n,r)=>{if(n==="min")return e==="year"?null:1;if(n==="max")return e==="year"?null:e==="day"?r.daysInMonth:l;if(t==null){if(e==="year")return r.today.year;const A=e==="day"?c:l;return n>0?1:A}if(e==="year")return M(t+n,S,m);const s=e==="day"?c:l;return T(t+n,s)},F={day:"",month:"",year:""},f=e=>{const{day:t,month:n,year:r}=e;if(t==null||n==null||r==null)return null;const s=new Date(r,n-1,t);return s.setFullYear(r),Number.isNaN(s.getTime())||s.getFullYear()!==r||s.getMonth()!==n-1||s.getDate()!==t?null:s},Y=(e,t)=>e==null&&t==null?!0:e==null||t==null?!1:e.getTime()===t.getTime(),a=D.dateToDayKey,V=e=>o(e)?a(e):null,O=(e,t,n)=>{const r=a(e);return!(o(t)&&r<a(t)||o(n)&&r>a(n))},h=(e,t)=>o(e)&&o(t)&&a(e)>a(t),C=(e,t,n)=>{if(h(t,n))return e;const r=a(e);return o(t)&&r<a(t)?new Date(t.getFullYear(),t.getMonth(),t.getDate()):o(n)&&r>a(n)?new Date(n.getFullYear(),n.getMonth(),n.getDate()):e},L=e=>{if(!o(e))return"";const t=String(e.getFullYear()).padStart(4,"0"),n=String(e.getMonth()+1).padStart(2,"0"),r=String(e.getDate()).padStart(2,"0");return`${t}-${n}-${r}`},_=e=>e.type==="literal",N=e=>e.filter(t=>!_(t)).map(t=>t.type),X=new Date(2020,0,2),b=new Set([8206,8207,8234,8235,8236,8237,8238,8294,8295,8296,8297]),G=e=>[...e].filter(t=>!b.has(t.codePointAt(0)??-1)).join(""),H=new Set(["day","month","year","literal"]),d=3,y=e=>{try{const t=new Intl.DateTimeFormat(e,{year:"numeric",month:"2-digit",day:"2-digit",calendar:"gregory"}).formatToParts(X).filter(r=>H.has(r.type)).map(r=>({type:r.type,value:r.type==="literal"?G(r.value):""})),n=N(t);return n.length===d&&new Set(n).size===d?t:null}catch{return null}},u=new Map,K=e=>{let t=e;try{t=new Intl.Locale(e).toString()}catch{t=e.toLowerCase()}const n=u.get(t);if(n)return n;const r=y(e)??y("en-US");if(!r)throw new Error("DateField: Intl cannot resolve en-US date parts");return u.set(t,r),r},j=()=>u.clear(),k=e=>o(e)?{day:String(e.getDate()).padStart(2,"0"),month:String(e.getMonth()+1).padStart(2,"0"),year:String(e.getFullYear()).padStart(4,"0")}:F,i=(e,t)=>{if(t===""||e==="year"&&t.length<g.SEGMENT_MAX_LENGTH.year)return null;const n=parseInt(t,10);return Number.isNaN(n)||n===0?null:n},U=e=>f({day:i("day",e.day),month:i("month",e.month),year:i("year",e.year)}),q=(e,t)=>t===""?"":t.padStart(g.SEGMENT_MAX_LENGTH[e],"0"),z=(e,t,n)=>t===""?{displayValue:n,isPlaceholder:!0}:{displayValue:t.padStart(g.SEGMENT_MAX_LENGTH[e],"0"),isPlaceholder:!1},B=e=>{const t=window.getSelection();if(!t)return;const n=document.createRange();n.selectNodeContents(e),t.removeAllRanges(),t.addRange(n)},$=e=>{var n;if(!e)return;const t=(n=window.getSelection)==null?void 0:n.call(window);t&&t.rangeCount>0&&e.contains(t.anchorNode)&&t.removeAllRanges()};exports.DAY_SPIN_MAX=c;exports.MONTH_MAX=l;exports.YEAR_MAX=m;exports.YEAR_MIN=S;exports.__clearDatePartsCache=j;exports.adjustSegmentValue=I;exports.clamp=M;exports.clampDateToRange=C;exports.clearSelectionWithin=$;exports.dateKeyOrNull=V;exports.deriveValue=f;exports.deriveValueFromText=U;exports.getDateParts=K;exports.getDaysInMonth=P;exports.getMonthName=p;exports.getSegmentDisplay=z;exports.getSegmentOrder=N;exports.isDateInRange=O;exports.isLiteralPart=_;exports.isMinMaxMisconfigured=h;exports.isSameDateValue=Y;exports.normalizeSegmentText=q;exports.segmentNumber=i;exports.segmentTextFromValue=k;exports.selectElementContents=B;exports.toISODateString=L;exports.todayParts=R;exports.wrapInRange=T;