ionbase-ui 0.81.0 → 0.84.0

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 (42) hide show
  1. package/dist/components/DatePicker.d.ts +1 -1
  2. package/dist/components/DatePicker.d.ts.map +1 -1
  3. package/dist/components/DatePicker.js +14 -6
  4. package/dist/components/DatePicker.js.map +1 -1
  5. package/dist/components/DateRangePicker.d.ts +1 -1
  6. package/dist/components/DateRangePicker.d.ts.map +1 -1
  7. package/dist/components/DateRangePicker.js +14 -6
  8. package/dist/components/DateRangePicker.js.map +1 -1
  9. package/dist/components/Menu.d.ts +87 -24
  10. package/dist/components/Menu.d.ts.map +1 -1
  11. package/dist/components/Menu.js +245 -28
  12. package/dist/components/Menu.js.map +1 -1
  13. package/dist/components/PageHeader.d.ts +59 -0
  14. package/dist/components/PageHeader.d.ts.map +1 -0
  15. package/dist/components/PageHeader.js +29 -0
  16. package/dist/components/PageHeader.js.map +1 -0
  17. package/dist/components/TimeField.d.ts +1 -1
  18. package/dist/components/TimeField.d.ts.map +1 -1
  19. package/dist/components/index.d.ts +4 -2
  20. package/dist/components/index.d.ts.map +1 -1
  21. package/dist/components/index.js +2 -1
  22. package/dist/components/index.js.map +1 -1
  23. package/dist/figma-descriptions.json +86 -76
  24. package/dist/figma-map.json +142 -38
  25. package/dist/meta/DatePicker.json +3 -2
  26. package/dist/meta/DateRangePicker.json +3 -2
  27. package/dist/meta/Menu.json +201 -27
  28. package/dist/meta/MenuItem.json +137 -17
  29. package/dist/meta/MenuSection.json +90 -0
  30. package/dist/meta/MenuTrigger.json +177 -0
  31. package/dist/meta/PageHeader.json +169 -0
  32. package/dist/meta/TimeField.json +1 -1
  33. package/dist/meta/components.json +841 -109
  34. package/dist/meta/contrast.json +240 -32
  35. package/dist/meta/index.json +31 -3
  36. package/dist/meta/patterns/PageShell.json +18 -5
  37. package/dist/meta/patterns/index.json +2 -1
  38. package/dist/styles/index.css +1 -0
  39. package/dist/styles/menu.css +153 -32
  40. package/dist/styles/page-header.css +94 -0
  41. package/llms.txt +2 -2
  42. package/package.json +1 -1
@@ -6,7 +6,7 @@ export interface DatePickerProps {
6
6
  label?: React.ReactNode;
7
7
  /** Helper text below the field. */
8
8
  description?: React.ReactNode;
9
- /** Replaces the helper text when `isInvalid` is set. */
9
+ /** Replaces the helper text while the field is invalid — `isInvalid`, or its own bounds check. */
10
10
  errorMessage?: React.ReactNode;
11
11
  isInvalid?: boolean;
12
12
  isDisabled?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"DatePicker.d.ts","sourceRoot":"","sources":["../../src/components/DatePicker.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAiB,MAAM,OAAO,CAAC;AAOtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAchD,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,mCAAmC;IACnC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,wDAAwD;IACxD,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACvB,oEAAoE;IACpE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3C,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;IAC/C,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,UAAU,EACV,UAAU,EACV,UAAU,EACV,IAAW,EACX,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,IAAI,EACJ,aAA+B,EAC/B,SAAS,EACT,gBAAgB,EAChB,EAAE,GACH,EAAE,eAAe,qBAiJjB;yBArKe,UAAU"}
1
+ {"version":3,"file":"DatePicker.d.ts","sourceRoot":"","sources":["../../src/components/DatePicker.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAiB,MAAM,OAAO,CAAC;AAOtC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAchD,MAAM,WAAW,eAAe;IAC9B,wEAAwE;IACxE,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,mCAAmC;IACnC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,kGAAkG;IAClG,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IACvB,oEAAoE;IACpE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oEAAoE;IACpE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3C,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;IAC/C,iEAAiE;IACjE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,UAAU,EACV,UAAU,EACV,UAAU,EACV,IAAW,EACX,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,IAAI,EACJ,aAA+B,EAC/B,SAAS,EACT,gBAAgB,EAChB,EAAE,GACH,EAAE,eAAe,qBA2JjB;yBA/Ke,UAAU"}
@@ -73,10 +73,20 @@ export function DatePicker({ label, description, errorMessage, isInvalid, isDisa
73
73
  const buttonRef = useRef(null);
74
74
  const { groupProps, labelProps, fieldProps, buttonProps: triggerProps, dialogProps, calendarProps, descriptionProps, errorMessageProps, } = useDatePicker({ ...ariaProps, id }, state, groupRef);
75
75
  const { buttonProps } = useButton(triggerProps, buttonRef);
76
- const helper = isInvalid && errorMessage ? errorMessage : description;
76
+ /*
77
+ * Invalid is the prop OR the picker's own validation — TimeField's rule.
78
+ * Left to the prop alone, a date before `minValue` or after `maxValue` marked the segments
79
+ * aria-invalid and left the box looking valid. With no `errorMessage`,
80
+ * React Aria's own localized message says what is wrong.
81
+ */
82
+ const { isInvalid: failsValidation, validationErrors } = state.displayValidation;
83
+ const invalid = !!isInvalid || failsValidation;
84
+ const error = errorMessage ??
85
+ (validationErrors.length ? validationErrors.join(' ') : null);
86
+ const helper = invalid && error ? error : description;
77
87
  return (_jsxs("div", { className: [
78
88
  'ion-field',
79
- isInvalid ? 'ion-field--error' : '',
89
+ invalid ? 'ion-field--error' : '',
80
90
  wrapperClassName || '',
81
91
  ]
82
92
  .filter(Boolean)
@@ -88,15 +98,13 @@ export function DatePicker({ label, description, errorMessage, isInvalid, isDisa
88
98
  'ion-input',
89
99
  'ion-date-picker',
90
100
  size !== 'md' ? `ion-input--${size}` : '',
91
- isInvalid ? 'ion-input--invalid' : '',
101
+ invalid ? 'ion-input--invalid' : '',
92
102
  isDisabled ? 'ion-input--disabled' : '',
93
103
  isReadOnly ? 'ion-input--readonly' : '',
94
104
  className || '',
95
105
  ]
96
106
  .filter(Boolean)
97
- .join(' '), "data-open": state.isOpen || undefined, "data-invalid": isInvalid || undefined, "data-disabled": isDisabled || undefined, children: [_jsx(DateField, { ...fieldProps }), name && (_jsx("input", { type: "hidden", name: name, value: state.value ? toIso(state.value) : '' })), _jsx("button", { ...buttonProps, ref: buttonRef, type: "button", "aria-labelledby": undefined, "aria-label": calendarLabel, className: "ion-date-picker__button", children: _jsx(CalendarIcon, {}) })] }), state.isOpen && !isDisabled && !isReadOnly && (_jsx(CalendarPopover, { state: state, triggerRef: groupRef, dialogProps: dialogProps, children: _jsx(SingleCalendar, { ...calendarProps }) })), helper && (_jsx("span", { ...(isInvalid && errorMessage
98
- ? errorMessageProps
99
- : descriptionProps), className: "ion-field__helper", children: helper }))] }));
107
+ .join(' '), "data-open": state.isOpen || undefined, "data-invalid": invalid || undefined, "data-disabled": isDisabled || undefined, children: [_jsx(DateField, { ...fieldProps }), name && (_jsx("input", { type: "hidden", name: name, value: state.value ? toIso(state.value) : '' })), _jsx("button", { ...buttonProps, ref: buttonRef, type: "button", "aria-labelledby": undefined, "aria-label": calendarLabel, className: "ion-date-picker__button", children: _jsx(CalendarIcon, {}) })] }), state.isOpen && !isDisabled && !isReadOnly && (_jsx(CalendarPopover, { state: state, triggerRef: groupRef, dialogProps: dialogProps, children: _jsx(SingleCalendar, { ...calendarProps }) })), helper && (_jsx("span", { ...(invalid && error ? errorMessageProps : descriptionProps), className: "ion-field__helper", children: helper }))] }));
100
108
  }
101
109
  DatePicker.displayName = 'DatePicker';
102
110
  //# sourceMappingURL=DatePicker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DatePicker.js","sourceRoot":"","sources":["../../src/components/DatePicker.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAc,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAKvE,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,CACzB,cAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,iBAAa,MAAM,EAAC,SAAS,EAAC,OAAO,YACvE,eACE,CAAC,EAAC,6FAA6F,EAC/F,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,GAAG,EACf,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,GACtB,GACE,CACP,CAAC;AA+CF;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,UAAU,EACV,UAAU,EACV,UAAU,EACV,IAAI,GAAG,IAAI,EACX,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,IAAI,EACJ,aAAa,GAAG,eAAe,EAC/B,SAAS,EACT,gBAAgB,EAChB,EAAE,GACc;IAChB;;;;;;;OAOG;IACH,MAAM,SAAS,GAAG;QAChB,KAAK,EAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QACpD,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC;QACvE,YAAY,EAAE,cAAc,CAAC,YAAY,EAAE,cAAc,CAAC,IAAI,SAAS;QACvE,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,SAAS;QAC3D,QAAQ,EAAE,cAAc,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,SAAS;QAC3D,iBAAiB,EAAE,eAAe,CAAC,iBAAiB,CAAC;QACrD,UAAU;QACV,UAAU;QACV,UAAU;QACV,SAAS;QACT;;;;;WAKG;QACH,WAAW,EAAE,KAAc;QAC3B,QAAQ,EAAE,QAAQ;YAChB,CAAC,CAAC,CAAC,IAAwC,EAAE,EAAE,CAC3C,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACvC,CAAC,CAAC,SAAS;KACd,CAAC;IAEF,MAAM,KAAK,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAE5C,MAAM,QAAQ,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAC;IAElD,MAAM,EACJ,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EAAE,YAAY,EACzB,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,iBAAiB,GAClB,GAAG,aAAa,CAAC,EAAE,GAAG,SAAS,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAEzD,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;IAE3D,MAAM,MAAM,GAAG,SAAS,IAAI,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,WAAW,CAAC;IAEtE,OAAO,CACL,eACE,SAAS,EAAE;YACT,WAAW;YACX,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE;YACnC,gBAAgB,IAAI,EAAE;SACvB;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC,aAEX,KAAK,IAAI;YACR,oEAAoE;YACpE,gEAAgE;YAChE,oEAAoE;YACpE,kBAAU,UAAU,EAAE,SAAS,EAAC,kBAAkB,YAC/C,KAAK,GACD,CACR,EAED,kBACM,UAAU,EACd,GAAG,EAAE,QAAQ,EACb,SAAS,EAAE;oBACT,WAAW;oBACX,iBAAiB;oBACjB,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE;oBACzC,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE;oBACrC,UAAU,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE;oBACvC,UAAU,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE;oBACvC,SAAS,IAAI,EAAE;iBAChB;qBACE,MAAM,CAAC,OAAO,CAAC;qBACf,IAAI,CAAC,GAAG,CAAC,eACD,KAAK,CAAC,MAAM,IAAI,SAAS,kBACtB,SAAS,IAAI,SAAS,mBACrB,UAAU,IAAI,SAAS,aAEtC,KAAC,SAAS,OAAK,UAAU,GAAI,EAO5B,IAAI,IAAI,CACP,gBACE,IAAI,EAAC,QAAQ,EACb,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,GAC5C,CACH,EAED,oBACM,WAAW,EACf,GAAG,EAAE,SAAS,EACd,IAAI,EAAC,QAAQ,qBAOI,SAAS,gBACd,aAAa,EACzB,SAAS,EAAC,yBAAyB,YAEnC,KAAC,YAAY,KAAG,GACT,IACL,EAEL,KAAK,CAAC,MAAM,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,IAAI,CAC7C,KAAC,eAAe,IACd,KAAK,EAAE,KAAK,EACZ,UAAU,EAAE,QAAQ,EACpB,WAAW,EAAE,WAAW,YAExB,KAAC,cAAc,OAAK,aAAa,GAAI,GACrB,CACnB,EAEA,MAAM,IAAI,CACT,kBACM,CAAC,SAAS,IAAI,YAAY;oBAC5B,CAAC,CAAC,iBAAiB;oBACnB,CAAC,CAAC,gBAAgB,CAAC,EACrB,SAAS,EAAC,mBAAmB,YAE5B,MAAM,GACF,CACR,IACG,CACP,CAAC;AACJ,CAAC;AAED,UAAU,CAAC,WAAW,GAAG,YAAY,CAAC"}
1
+ {"version":3,"file":"DatePicker.js","sourceRoot":"","sources":["../../src/components/DatePicker.tsx"],"names":[],"mappings":"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"}
@@ -30,7 +30,7 @@ export interface DateRangePickerProps {
30
30
  label?: React.ReactNode;
31
31
  /** Helper text below the field. */
32
32
  description?: React.ReactNode;
33
- /** Replaces the helper text when `isInvalid` is set. */
33
+ /** Replaces the helper text while the field is invalid — `isInvalid`, or its own bounds check. */
34
34
  errorMessage?: React.ReactNode;
35
35
  isInvalid?: boolean;
36
36
  isDisabled?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"DateRangePicker.d.ts","sourceRoot":"","sources":["../../src/components/DateRangePicker.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA0B,MAAM,OAAO,CAAC;AAO/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,MAAM,MAAM,mBAAmB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAErD,2EAA2E;AAC3E,MAAM,WAAW,SAAS;IACxB,oBAAoB;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,+BAA+B;IAC/B,GAAG,EAAE,OAAO,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;;OAQG;IACH,KAAK,EAAE,SAAS,GAAG,CAAC,MAAM,SAAS,CAAC,CAAC;CACtC;AAcD,MAAM,WAAW,oBAAoB;IACnC,wEAAwE;IACxE,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,mCAAmC;IACnC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,wDAAwD;IACxD,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,qDAAqD;IACrD,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;IAC/C,uEAAuE;IACvE,OAAO,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACrC;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,kEAAkE;IAClE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,UAAU,EACV,UAAU,EACV,UAAU,EACV,IAAW,EACX,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,OAAO,EACP,aAAiB,EACjB,WAAkB,EAClB,IAAI,EACJ,aAA+B,EAC/B,UAAoB,EACpB,YAAqC,EACrC,SAAS,EACT,gBAAgB,EAChB,EAAE,GACH,EAAE,oBAAoB,qBAuPtB;yBAhRe,eAAe"}
1
+ {"version":3,"file":"DateRangePicker.d.ts","sourceRoot":"","sources":["../../src/components/DateRangePicker.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA0B,MAAM,OAAO,CAAC;AAO/C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,MAAM,MAAM,mBAAmB,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAErD,2EAA2E;AAC3E,MAAM,WAAW,SAAS;IACxB,oBAAoB;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,+BAA+B;IAC/B,GAAG,EAAE,OAAO,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;;OAQG;IACH,KAAK,EAAE,SAAS,GAAG,CAAC,MAAM,SAAS,CAAC,CAAC;CACtC;AAcD,MAAM,WAAW,oBAAoB;IACnC,wEAAwE;IACxE,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,mCAAmC;IACnC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,kGAAkG;IAClG,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4DAA4D;IAC5D,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACzB,qDAAqD;IACrD,YAAY,CAAC,EAAE,SAAS,CAAC;IACzB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7C,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;IAC/C,uEAAuE;IACvE,OAAO,CAAC,EAAE,SAAS,eAAe,EAAE,CAAC;IACrC;;;;OAIG;IACH,aAAa,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,kEAAkE;IAClE,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,UAAU,EACV,UAAU,EACV,UAAU,EACV,IAAW,EACX,KAAK,EACL,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,iBAAiB,EACjB,OAAO,EACP,aAAiB,EACjB,WAAkB,EAClB,IAAI,EACJ,aAA+B,EAC/B,UAAoB,EACpB,YAAqC,EACrC,SAAS,EACT,gBAAgB,EAChB,EAAE,GACH,EAAE,oBAAoB,qBAiQtB;yBA1Re,eAAe"}
@@ -99,7 +99,17 @@ export function DateRangePicker({ label, description, errorMessage, isInvalid, i
99
99
  start: toIso(state.value.start),
100
100
  end: toIso(state.value.end),
101
101
  };
102
- const helper = isInvalid && errorMessage ? errorMessage : description;
102
+ /*
103
+ * Invalid is the prop OR the picker's own validation — TimeField's rule.
104
+ * Left to the prop alone, a date outside `minValue`/`maxValue`, or an end before the start, marked the segments
105
+ * aria-invalid and left the box looking valid. With no `errorMessage`,
106
+ * React Aria's own localized message says what is wrong.
107
+ */
108
+ const { isInvalid: failsValidation, validationErrors } = state.displayValidation;
109
+ const invalid = !!isInvalid || failsValidation;
110
+ const error = errorMessage ??
111
+ (validationErrors.length ? validationErrors.join(' ') : null);
112
+ const helper = invalid && error ? error : description;
103
113
  const rail = resolvedPresets.length ? (_jsx("div", { className: "ion-range-presets", role: "group", "aria-label": presetsLabel, children: resolvedPresets.map((p) => {
104
114
  const isSelected = selectedIso?.start === p.start && selectedIso?.end === p.end;
105
115
  return (_jsx("button", { type: "button", className: "ion-range-presets__item", "aria-pressed": isSelected, "data-selected": isSelected || undefined, onClick: () => {
@@ -127,7 +137,7 @@ export function DateRangePicker({ label, description, errorMessage, isInvalid, i
127
137
  }, children: clearLabel }) })) : null;
128
138
  return (_jsxs("div", { className: [
129
139
  'ion-field',
130
- isInvalid ? 'ion-field--error' : '',
140
+ invalid ? 'ion-field--error' : '',
131
141
  wrapperClassName || '',
132
142
  ]
133
143
  .filter(Boolean)
@@ -138,15 +148,13 @@ export function DateRangePicker({ label, description, errorMessage, isInvalid, i
138
148
  'ion-input',
139
149
  'ion-date-range-picker',
140
150
  size !== 'md' ? `ion-input--${size}` : '',
141
- isInvalid ? 'ion-input--invalid' : '',
151
+ invalid ? 'ion-input--invalid' : '',
142
152
  isDisabled ? 'ion-input--disabled' : '',
143
153
  isReadOnly ? 'ion-input--readonly' : '',
144
154
  className || '',
145
155
  ]
146
156
  .filter(Boolean)
147
- .join(' '), "data-open": state.isOpen || undefined, "data-invalid": isInvalid || undefined, "data-disabled": isDisabled || undefined, children: [_jsx(DateField, { ...startFieldProps }), _jsx("span", { className: "ion-date-range-picker__dash", "aria-hidden": "true", children: "\u2013" }), _jsx(DateField, { ...endFieldProps }), name && (_jsxs(_Fragment, { children: [_jsx("input", { type: "hidden", name: `${name}-start`, value: state.value?.start ? toIso(state.value.start) : '' }), _jsx("input", { type: "hidden", name: `${name}-end`, value: state.value?.end ? toIso(state.value.end) : '' })] })), _jsx("button", { ...buttonProps, ref: buttonRef, type: "button", "aria-labelledby": undefined, "aria-label": calendarLabel, className: "ion-date-range-picker__button", children: _jsx(CalendarIcon, {}) })] }), state.isOpen && !isDisabled && !isReadOnly && (_jsx(CalendarPopover, { state: state, triggerRef: groupRef, dialogProps: dialogProps, className: "ion-calendar-popover--range", children: _jsx(RangeCalendar, { ...calendarProps, visibleMonths: visibleMonths, aside: rail, footer: footer }) })), helper && (_jsx("span", { ...(isInvalid && errorMessage
148
- ? errorMessageProps
149
- : descriptionProps), className: "ion-field__helper", children: helper }))] }));
157
+ .join(' '), "data-open": state.isOpen || undefined, "data-invalid": invalid || undefined, "data-disabled": isDisabled || undefined, children: [_jsx(DateField, { ...startFieldProps }), _jsx("span", { className: "ion-date-range-picker__dash", "aria-hidden": "true", children: "\u2013" }), _jsx(DateField, { ...endFieldProps }), name && (_jsxs(_Fragment, { children: [_jsx("input", { type: "hidden", name: `${name}-start`, value: state.value?.start ? toIso(state.value.start) : '' }), _jsx("input", { type: "hidden", name: `${name}-end`, value: state.value?.end ? toIso(state.value.end) : '' })] })), _jsx("button", { ...buttonProps, ref: buttonRef, type: "button", "aria-labelledby": undefined, "aria-label": calendarLabel, className: "ion-date-range-picker__button", children: _jsx(CalendarIcon, {}) })] }), state.isOpen && !isDisabled && !isReadOnly && (_jsx(CalendarPopover, { state: state, triggerRef: groupRef, dialogProps: dialogProps, className: "ion-calendar-popover--range", children: _jsx(RangeCalendar, { ...calendarProps, visibleMonths: visibleMonths, aside: rail, footer: footer }) })), helper && (_jsx("span", { ...(invalid && error ? errorMessageProps : descriptionProps), className: "ion-field__helper", children: helper }))] }));
150
158
  }
151
159
  DateRangePicker.displayName = 'DateRangePicker';
152
160
  //# sourceMappingURL=DateRangePicker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DateRangePicker.js","sourceRoot":"","sources":["../../src/components/DateRangePicker.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DateRangePicker.js","sourceRoot":"","sources":["../../src/components/DateRangePicker.tsx"],"names":[],"mappings":"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"}
@@ -1,35 +1,98 @@
1
1
  import React from 'react';
2
- export interface MenuProps extends React.HTMLAttributes<HTMLUListElement> {
3
- children?: React.ReactNode;
2
+ import { type AriaMenuProps } from 'react-aria';
3
+ import { Section } from '@react-stately/collections';
4
+ import type { ItemProps } from '@react-types/shared';
5
+ export interface MenuProps<T extends object> extends AriaMenuProps<T> {
6
+ className?: string;
7
+ style?: React.CSSProperties;
4
8
  }
5
- /**
6
- * Menu is the list surface, not a popover.
7
- *
8
- * Figma models the list alone — there is no trigger, anchor or open state in
9
- * the design — so this renders the surface and nothing else. Positioning it
10
- * against a button is the caller's job until Figma has a component that says
11
- * how. Building a popover here would be inventing design, and it would be the
12
- * hard half to unpick later.
13
- *
14
- * `role="menu"` is deliberately NOT set. A real ARIA menu owes the user
15
- * roving-tabindex arrow navigation, typeahead and focus containment; claiming
16
- * the role without them is worse for a screen-reader user than an honest list,
17
- * because it promises interactions that are not there. When the popover exists,
18
- * the role comes with it.
19
- */
20
- export declare const Menu: React.ForwardRefExoticComponent<MenuProps & React.RefAttributes<HTMLUListElement>>;
21
- export interface MenuItemProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'type'> {
22
- /** Figma's `Selected` / `Selected-hover` states. Shows the trailing check. */
23
- isSelected?: boolean;
9
+ export interface MenuItemProps<T extends object = object> extends ItemProps<T> {
10
+ /**
11
+ * Only on a row that opens a submenu: the row's label. Its children are then
12
+ * the submenu's MenuItems rather than its label. Submenus open only inside a
13
+ * MenuTrigger — a standalone Menu has nothing to open them from.
14
+ */
15
+ title?: React.ReactNode;
24
16
  /** Figma's `Show Leading Icon` + `Leading Icon` swap. */
25
17
  icon?: React.ReactNode;
26
- /** Whether the item is disabled. */
18
+ /** Whether the item is disabled. Listed, skipped by the arrow keys. */
27
19
  isDisabled?: boolean;
28
20
  /**
29
21
  * @deprecated Use `isDisabled`. Accepted as an alias for one minor version.
30
22
  */
31
23
  disabled?: boolean;
32
- children?: React.ReactNode;
24
+ /**
25
+ * @deprecated Put the item's key in Menu's `selectedKeys`. Accepted for one
26
+ * minor version: when no item's key is in `selectedKeys` and Menu is given
27
+ * neither `selectedKeys` nor `defaultSelectedKeys`, the items passing this
28
+ * become the selection.
29
+ */
30
+ isSelected?: boolean;
31
+ }
32
+ /**
33
+ * One row of a Menu. A collection element, like TabItem: it renders nothing
34
+ * itself — Menu reads its props and draws the row — so it only means anything
35
+ * as a direct child of Menu or MenuSection. Give it a `key`; that key is what
36
+ * `onAction` and `selectedKeys` speak in.
37
+ */
38
+ export declare function MenuItem<T extends object>(_props: MenuItemProps<T>): React.ReactElement | null;
39
+ export declare namespace MenuItem {
40
+ var displayName: string;
41
+ }
42
+ /**
43
+ * A named group of MenuItems. `title` is Figma's `Menu Section Title`; without
44
+ * one, pass `aria-label` and the group is set off by a rule instead.
45
+ */
46
+ export { Section as MenuSection };
47
+ /**
48
+ * Menu — Figma `Menu` (82:306), `Menu Item` and `Menu Section Title`.
49
+ *
50
+ * A real ARIA menu: `role="menu"`, one tab stop, arrow keys, Home and End,
51
+ * typeahead, and disabled rows listed but skipped. Figma's `Type` is
52
+ * `selectionMode` — Single draws one check, Multi draws several — and with
53
+ * a selection mode the rows become `menuitemradio` / `menuitemcheckbox` and
54
+ * announce their checked state.
55
+ *
56
+ * On its own it is the surface only, rendered in flow. Inside a MenuTrigger it
57
+ * floats, opens and closes, is named by its trigger, and can open submenus.
58
+ */
59
+ export declare const Menu: <T extends object>(props: MenuProps<T> & {
60
+ ref?: React.Ref<HTMLUListElement>;
61
+ }) => React.ReactElement;
62
+ export type MenuTriggerPlacement = 'bottom start' | 'bottom end' | 'top start' | 'top end';
63
+ export interface MenuTriggerProps {
64
+ /**
65
+ * Exactly two children: the Button that opens the menu, then the Menu. The
66
+ * Button must accept a ref and react-aria press props — IonBase's Button
67
+ * does; a plain `<button>` does not.
68
+ */
69
+ children: [React.ReactElement, React.ReactElement];
70
+ /**
71
+ * Where the menu opens, relative to the trigger. A preference, not a
72
+ * guarantee: it flips when there is no room.
73
+ */
74
+ placement?: MenuTriggerPlacement;
75
+ /** Whether the trigger is disabled. */
76
+ isDisabled?: boolean;
77
+ isOpen?: boolean;
78
+ defaultOpen?: boolean;
79
+ onOpenChange?: (isOpen: boolean) => void;
80
+ }
81
+ /**
82
+ * MenuTrigger — a Button that opens a Menu.
83
+ *
84
+ * The "⋯" overflow menu is this with an icon-only Button; there is no separate
85
+ * component for it, because the only difference is the Button's content and
86
+ * its required aria-label.
87
+ *
88
+ * `useMenuTrigger` does what a Popover wrapped round a Menu could not: the
89
+ * trigger announces `aria-haspopup="menu"` and `aria-expanded`, the menu is
90
+ * named by the trigger, ArrowDown and ArrowUp open it with focus on the first
91
+ * or last row, and choosing an action closes it and returns focus to the
92
+ * trigger.
93
+ */
94
+ export declare function MenuTrigger({ children, placement, isDisabled, ...stateProps }: MenuTriggerProps): React.JSX.Element;
95
+ export declare namespace MenuTrigger {
96
+ var displayName: string;
33
97
  }
34
- export declare const MenuItem: React.ForwardRefExoticComponent<MenuItemProps & React.RefAttributes<HTMLButtonElement>>;
35
98
  //# sourceMappingURL=Menu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../src/components/Menu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAqB,MAAM,OAAO,CAAC;AAG1C,MAAM,WAAW,SAAU,SAAQ,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC;IACvE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,IAAI,oFAUhB,CAAC;AAIF,MAAM,WAAW,aAAc,SAAQ,IAAI,CACzC,KAAK,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAC7C,MAAM,CACP;IACC,8EAA8E;IAC9E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,yDAAyD;IACzD,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,oCAAoC;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC5B;AAgBD,eAAO,MAAM,QAAQ,yFAoCpB,CAAC"}
1
+ {"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../src/components/Menu.tsx"],"names":[],"mappings":"AAEA,OAAO,KAON,MAAM,OAAO,CAAC;AACf,OAAO,EAYL,KAAK,aAAa,EAEnB,MAAM,YAAY,CAAC;AAQpB,OAAO,EAGL,OAAO,EAER,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAwB,MAAM,qBAAqB,CAAC;AAG3E,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,MAAM,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM,CAAE,SAAQ,SAAS,CAAC,CAAC,CAAC;IAC5E;;;;OAIG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,yDAAyD;IACzD,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,uEAAuE;IACvE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,EAEvC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,GACvB,KAAK,CAAC,YAAY,GAAG,IAAI,CAE3B;yBALe,QAAQ;;;AAmBxB;;;GAGG;AACH,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,CAAC;AAmalC;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,IAAI,EA8BX,CAAC,CAAC,SAAS,MAAM,EACrB,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG;IAAE,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;CAAE,KACxD,KAAK,CAAC,YAAY,CAAC;AAExB,MAAM,MAAM,oBAAoB,GAC9B,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,CAAC;AAE1D,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,QAAQ,EAAE,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IACnD;;;OAGG;IACH,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,uCAAuC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAC1C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,SAA0B,EAC1B,UAAU,EACV,GAAG,UAAU,EACd,EAAE,gBAAgB,qBA2ClB;yBAhDe,WAAW"}
@@ -1,35 +1,252 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { forwardRef } from 'react';
1
+ 'use client';
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import React, { cloneElement, createContext, forwardRef, useContext, useMemo, useRef, } from 'react';
4
+ import { DismissButton, Overlay, mergeProps, useMenu, useMenuItem, useMenuSection, useMenuTrigger, usePopover, useSeparator, useSubmenuTrigger, } from 'react-aria';
5
+ import { useMenuTriggerState, useSubmenuTriggerState, useTreeState, } from 'react-stately';
6
+ import { CollectionBuilder, Item, Section, getChildNodes, } from '@react-stately/collections';
3
7
  import { resolveDisabled } from './resolve-disabled.js';
4
8
  /**
5
- * Menu is the list surface, not a popover.
6
- *
7
- * Figma models the list alone — there is no trigger, anchor or open state in
8
- * the design — so this renders the surface and nothing else. Positioning it
9
- * against a button is the caller's job until Figma has a component that says
10
- * how. Building a popover here would be inventing design, and it would be the
11
- * hard half to unpick later.
12
- *
13
- * `role="menu"` is deliberately NOT set. A real ARIA menu owes the user
14
- * roving-tabindex arrow navigation, typeahead and focus containment; claiming
15
- * the role without them is worse for a screen-reader user than an honest list,
16
- * because it promises interactions that are not there. When the popover exists,
17
- * the role comes with it.
18
- */
19
- export const Menu = forwardRef(({ className, children, ...rest }, ref) => (_jsx("ul", { ...rest, ref: ref, className: ['ion-menu', className].filter(Boolean).join(' '), children: children })));
20
- Menu.displayName = 'Menu';
9
+ * One row of a Menu. A collection element, like TabItem: it renders nothing
10
+ * itself — Menu reads its props and draws the row — so it only means anything
11
+ * as a direct child of Menu or MenuSection. Give it a `key`; that key is what
12
+ * `onAction` and `selectedKeys` speak in.
13
+ */
14
+ export function MenuItem(
15
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
16
+ _props) {
17
+ return null;
18
+ }
19
+ /*
20
+ * The collection builder asks the element's TYPE how to turn it into a node.
21
+ * Borrowing Item's answer is what makes MenuItem a collection element while
22
+ * keeping its own prop type: the builder copies every prop onto `node.props`,
23
+ * which is where Menu reads `icon` and `isDisabled` back from.
24
+ */
25
+ MenuItem.getCollectionNode = Item.getCollectionNode;
26
+ MenuItem.displayName = 'MenuItem';
27
+ /**
28
+ * A named group of MenuItems. `title` is Figma's `Menu Section Title`; without
29
+ * one, pass `aria-label` and the group is set off by a rule instead.
30
+ */
31
+ export { Section as MenuSection };
21
32
  /** Figma's trailing check. Always occupies its slot so rows never reflow as the
22
33
  * selection moves; only its visibility changes. */
23
34
  const Check = () => (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", focusable: "false", children: _jsx("path", { d: "m5 13 4 4L19 7", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }));
24
- export const MenuItem = forwardRef(({ isSelected, icon, className, children, isDisabled, disabled, ...rest }, ref) => {
25
- const resolvedDisabled = resolveDisabled(isDisabled, disabled);
26
- return (_jsx("li", { children: _jsxs("button", { ...rest, ref: ref, type: "button", disabled: resolvedDisabled, "aria-pressed": isSelected, className: [
27
- 'ion-menu__item',
28
- isSelected ? 'ion-menu__item--selected' : '',
29
- className || '',
30
- ]
31
- .filter(Boolean)
32
- .join(' '), children: [icon && (_jsx("span", { className: "ion-menu__icon", "aria-hidden": "true", children: icon })), _jsx("span", { className: "ion-menu__label", children: children }), _jsx("span", { className: "ion-menu__check", "aria-hidden": "true", children: _jsx(Check, {}) })] }) }));
35
+ /** Figma draws no submenu row; this is Button's chevron, turned to point
36
+ * where the submenu opens. Mirrored in right-to-left layouts by the CSS. */
37
+ const Chevron = () => (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", focusable: "false", children: _jsx("path", { d: "m9 18 6-6-6-6", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }));
38
+ /**
39
+ * What MenuTrigger hands the Menu it opens: the ARIA wiring from
40
+ * `useMenuTrigger` (the label, autofocus and close-on-action), and the root
41
+ * state every submenu's state is derived from.
42
+ */
43
+ const MenuTriggerContext = createContext(null);
44
+ /**
45
+ * What a menu hands the submenus beneath it. `onAction` is the ROOT menu's:
46
+ * an action chosen three levels down is still one of the actions the caller
47
+ * listed, and it reaches the one handler the caller wrote.
48
+ */
49
+ const MenuTreeContext = createContext(null);
50
+ /**
51
+ * Reads the two deprecated item props before the menu's state exists.
52
+ *
53
+ * `isDisabled` needs nothing here: react-stately's SelectionManager reads an
54
+ * item's own `isDisabled` off `node.props`, and the arrow keys skip it. The
55
+ * `disabled` alias it has never heard of, so that one has to reach
56
+ * `useTreeState` as a key — a row that only LOOKED disabled would still take
57
+ * focus and fire `onAction`. `isSelected` has to become `selectedKeys` for the
58
+ * same reason. Building the collection once more is the price of the aliases,
59
+ * and a menu is small enough that the price is nothing. Delete this with them.
60
+ */
61
+ function readItemFlags(props) {
62
+ const flags = {
63
+ disabled: [],
64
+ selected: [],
65
+ hasLegacySelected: false,
66
+ };
67
+ const visit = (nodes) => {
68
+ for (const node of nodes) {
69
+ if (node.type === 'section') {
70
+ visit(node.childNodes);
71
+ continue;
72
+ }
73
+ const p = node.props;
74
+ if (!p)
75
+ continue;
76
+ if (p.isDisabled === undefined &&
77
+ resolveDisabled(p.isDisabled, p.disabled))
78
+ flags.disabled.push(node.key);
79
+ if (p.isSelected !== undefined) {
80
+ flags.hasLegacySelected = true;
81
+ if (p.isSelected)
82
+ flags.selected.push(node.key);
83
+ }
84
+ }
85
+ };
86
+ visit(new CollectionBuilder().build(props));
87
+ return flags;
88
+ }
89
+ function MenuRow(props) {
90
+ const tree = useContext(MenuTreeContext);
91
+ return props.item.hasChildNodes && tree ? (_jsx(SubmenuRow, { ...props, tree: tree })) : (_jsx(ActionRow, { ...props }));
92
+ }
93
+ function ActionRow({ item, state }) {
94
+ const ref = useRef(null);
95
+ const { menuItemProps, labelProps, isFocused, isFocusVisible, isSelected, isDisabled, } = useMenuItem({ key: item.key }, state, ref);
96
+ const icon = item.props?.icon;
97
+ return (_jsxs("li", { ...menuItemProps, ref: ref, className: [
98
+ 'ion-menu__item',
99
+ isSelected ? 'ion-menu__item--selected' : '',
100
+ ]
101
+ .filter(Boolean)
102
+ .join(' '), "data-focused": isFocused || undefined, "data-focus-visible": isFocusVisible || undefined, "data-disabled": isDisabled || undefined, children: [icon && (_jsx("span", { className: "ion-menu__icon", "aria-hidden": "true", children: icon })), _jsx("span", { ...labelProps, className: "ion-menu__label", children: item.rendered }), state.selectionManager.selectionMode !== 'none' && (_jsx("span", { className: "ion-menu__check", "aria-hidden": "true", children: _jsx(Check, {}) }))] }));
103
+ }
104
+ /**
105
+ * A row that opens a submenu. Right arrow, Enter or Space opens it with focus
106
+ * on its first row; hovering opens it after a short delay; left arrow or
107
+ * Escape closes it and puts focus back on this row.
108
+ *
109
+ * The submenu is NOT modal: the parent menu stays on screen and hoverable, so
110
+ * the pointer can move between the two. react-aria makes that choice, and it
111
+ * is the right one — a submenu that trapped focus would make moving back up a
112
+ * level a keyboard-only act.
113
+ */
114
+ function SubmenuRow({ item, state, menuRef, tree, }) {
115
+ const ref = useRef(null);
116
+ const submenuRef = useRef(null);
117
+ const submenuState = useSubmenuTriggerState({ triggerKey: item.key }, tree.rootState);
118
+ const { submenuTriggerProps, submenuProps, popoverProps } = useSubmenuTrigger({ parentMenuRef: menuRef, submenuRef, type: 'menu' }, submenuState, ref);
119
+ // `isOpen` describes the trigger, it is not a menu-item option.
120
+ const { isOpen, ...triggerOptions } = submenuTriggerProps;
121
+ const { menuItemProps, labelProps, isFocused, isFocusVisible, isDisabled } = useMenuItem({ ...triggerOptions, key: item.key }, state, ref);
122
+ const icon = item.props?.icon;
123
+ return (_jsxs("li", { ...menuItemProps, ref: ref, className: "ion-menu__item ion-menu__item--submenu", "data-focused": isFocused || undefined, "data-focus-visible": isFocusVisible || undefined, "data-disabled": isDisabled || undefined, "data-open": isOpen || undefined, children: [icon && (_jsx("span", { className: "ion-menu__icon", "aria-hidden": "true", children: icon })), _jsx("span", { ...labelProps, className: "ion-menu__label", children: item.rendered }), _jsx("span", { className: "ion-menu__chevron", "aria-hidden": "true", children: _jsx(Chevron, {}) }), submenuState.isOpen && (_jsx(MenuPopover, { state: submenuState, triggerRef: ref, popoverRef: submenuRef, placement: "end top", isNonModal: popoverProps.isNonModal, shouldCloseOnInteractOutside: popoverProps.shouldCloseOnInteractOutside, disableFocusManagement: popoverProps.disableFocusManagement, children: _jsx(MenuList, { ...submenuProps, onAction: tree.onAction, children: item.props.children }) }))] }));
124
+ }
125
+ /**
126
+ * The floating surface a menu opens on. Mounted only while open, for the
127
+ * reason AGENTS.md gives about overlay hooks: `usePopover` has to be called in
128
+ * the component that mounts with the overlay.
129
+ *
130
+ * Figma's Menu already IS the surface — border, radius, Shadow/lg — so this
131
+ * wrapper paints nothing. It positions, and it carries the underlay that makes
132
+ * an outside click close the root menu. A submenu has no underlay: it is
133
+ * non-modal, and an underlay would swallow the pointer on its way back to the
134
+ * parent.
135
+ */
136
+ function MenuPopover({ state, triggerRef, popoverRef, placement, isNonModal, shouldCloseOnInteractOutside, disableFocusManagement, children, }) {
137
+ const { popoverProps, underlayProps } = usePopover({
138
+ triggerRef,
139
+ popoverRef,
140
+ placement,
141
+ offset: isNonModal ? 0 : 4,
142
+ // Line the submenu's first row up with the row that opened it: the
143
+ // menu's own padding plus its border.
144
+ crossOffset: isNonModal ? -7 : 0,
145
+ isNonModal,
146
+ shouldCloseOnInteractOutside,
147
+ }, state);
148
+ return (_jsxs(Overlay, { disableFocusManagement: disableFocusManagement, children: [!isNonModal && (_jsx("div", { ...underlayProps, className: "ion-menu-popover__underlay" })), _jsxs("div", { ...popoverProps, ref: popoverRef, className: "ion-menu-popover", children: [!isNonModal && _jsx(DismissButton, { onDismiss: state.close }), children, !isNonModal && _jsx(DismissButton, { onDismiss: state.close })] })] }));
149
+ }
150
+ function MenuSectionGroup({ section, state, isFirst, menuRef, }) {
151
+ const { itemProps, headingProps, groupProps } = useMenuSection({
152
+ heading: section.rendered,
153
+ 'aria-label': section['aria-label'],
154
+ });
155
+ const { separatorProps } = useSeparator({ elementType: 'li' });
156
+ return (_jsxs(_Fragment, { children: [!isFirst && !section.rendered && (_jsx("li", { ...separatorProps, className: "ion-menu__separator" })), _jsxs("li", { ...itemProps, className: "ion-menu__section", children: [section.rendered && (_jsx("span", { ...headingProps, className: "ion-menu__section-title", children: section.rendered })), _jsx("ul", { ...groupProps, className: "ion-menu__group", children: [...getChildNodes(section, state.collection)].map((node) => (_jsx(MenuRow, { item: node, state: state, menuRef: menuRef }, node.key))) })] })] }));
157
+ }
158
+ /**
159
+ * The list itself, shared by the root menu and every submenu. It knows nothing
160
+ * about triggers: whatever opened it has already put its wiring into `props`.
161
+ */
162
+ const MenuList = forwardRef(function MenuList(props, forwardedRef) {
163
+ const { className, style } = props;
164
+ const flags = useMemo(() => readItemFlags(props),
165
+ // Only the collection's inputs matter here; the rest of `props` changes on
166
+ // every render and would rebuild the collection for nothing.
167
+ [props.children, props.items]);
168
+ const disabledKeys = useMemo(() => new Set([...(props.disabledKeys ?? []), ...flags.disabled]), [props.disabledKeys, flags.disabled]);
169
+ const usesLegacySelection = flags.hasLegacySelected &&
170
+ props.selectedKeys === undefined &&
171
+ props.defaultSelectedKeys === undefined;
172
+ const stateProps = {
173
+ ...props,
174
+ disabledKeys,
175
+ ...(usesLegacySelection && {
176
+ selectedKeys: new Set(flags.selected),
177
+ selectionMode: props.selectionMode ??
178
+ (flags.selected.length > 1 ? 'multiple' : 'single'),
179
+ }),
180
+ };
181
+ const state = useTreeState(stateProps);
182
+ const ref = useRef(null);
183
+ const { menuProps } = useMenu(stateProps, state, ref);
184
+ const setRef = (el) => {
185
+ ref.current = el;
186
+ if (typeof forwardedRef === 'function')
187
+ forwardedRef(el);
188
+ else if (forwardedRef)
189
+ forwardedRef.current = el;
190
+ };
191
+ const nodes = [...state.collection];
192
+ return (_jsx("ul", { ...menuProps, ref: setRef, style: style, className: ['ion-menu', className].filter(Boolean).join(' '), children: nodes.map((node, i) => node.type === 'section' ? (_jsx(MenuSectionGroup, { section: node, state: state, isFirst: i === 0, menuRef: ref }, node.key)) : (_jsx(MenuRow, { item: node, state: state, menuRef: ref }, node.key))) }));
33
193
  });
34
- MenuItem.displayName = 'MenuItem';
194
+ /**
195
+ * Menu — Figma `Menu` (82:306), `Menu Item` and `Menu Section Title`.
196
+ *
197
+ * A real ARIA menu: `role="menu"`, one tab stop, arrow keys, Home and End,
198
+ * typeahead, and disabled rows listed but skipped. Figma's `Type` is
199
+ * `selectionMode` — Single draws one check, Multi draws several — and with
200
+ * a selection mode the rows become `menuitemradio` / `menuitemcheckbox` and
201
+ * announce their checked state.
202
+ *
203
+ * On its own it is the surface only, rendered in flow. Inside a MenuTrigger it
204
+ * floats, opens and closes, is named by its trigger, and can open submenus.
205
+ */
206
+ export const Menu = forwardRef(function Menu(props, forwardedRef) {
207
+ const trigger = useContext(MenuTriggerContext);
208
+ if (!trigger)
209
+ return _jsx(MenuList, { ...props, ref: forwardedRef });
210
+ /*
211
+ * The trigger names the menu through aria-labelledby. An aria-label the
212
+ * caller passed is kept and wins, because a trigger reading "⋯" or "Options"
213
+ * is often a worse name than the one the caller wrote.
214
+ */
215
+ const { 'aria-labelledby': labelledBy, ...wiring } = trigger.menuProps;
216
+ const named = props['aria-label'] || props['aria-labelledby'];
217
+ const merged = mergeProps(wiring, named ? {} : { 'aria-labelledby': labelledBy }, props);
218
+ return (_jsx(MenuTreeContext.Provider, { value: {
219
+ rootState: trigger.rootState,
220
+ onAction: props.onAction,
221
+ }, children: _jsx(MenuList, { ...merged, ref: forwardedRef }) }));
222
+ });
223
+ /**
224
+ * MenuTrigger — a Button that opens a Menu.
225
+ *
226
+ * The "⋯" overflow menu is this with an icon-only Button; there is no separate
227
+ * component for it, because the only difference is the Button's content and
228
+ * its required aria-label.
229
+ *
230
+ * `useMenuTrigger` does what a Popover wrapped round a Menu could not: the
231
+ * trigger announces `aria-haspopup="menu"` and `aria-expanded`, the menu is
232
+ * named by the trigger, ArrowDown and ArrowUp open it with focus on the first
233
+ * or last row, and choosing an action closes it and returns focus to the
234
+ * trigger.
235
+ */
236
+ export function MenuTrigger({ children, placement = 'bottom start', isDisabled, ...stateProps }) {
237
+ const [trigger, menu] = React.Children.toArray(children);
238
+ const rootState = useMenuTriggerState(stateProps);
239
+ const triggerRef = useRef(null);
240
+ const popoverRef = useRef(null);
241
+ const { menuTriggerProps, menuProps } = useMenuTrigger({ isDisabled }, rootState, triggerRef);
242
+ return (_jsxs(_Fragment, { children: [cloneElement(trigger, mergeProps(trigger.props, {
243
+ ...menuTriggerProps,
244
+ isDisabled,
245
+ ref: triggerRef,
246
+ })), rootState.isOpen && (_jsx(MenuPopover, { state: rootState, triggerRef: triggerRef, popoverRef: popoverRef, placement: placement, children: _jsx(MenuTriggerContext.Provider, { value: {
247
+ rootState,
248
+ menuProps: menuProps,
249
+ }, children: menu }) }))] }));
250
+ }
251
+ MenuTrigger.displayName = 'MenuTrigger';
35
252
  //# sourceMappingURL=Menu.js.map