@astryxdesign/core 0.5.1 → 0.5.2-canary.039852f

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 (213) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/BottomSheet/BottomSheet.d.ts +3 -1
  3. package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
  4. package/dist/BottomSheet/BottomSheet.js +4 -3
  5. package/dist/BottomSheet/BottomSheetEdgeTint.d.ts +2 -2
  6. package/dist/BottomSheet/BottomSheetEdgeTint.d.ts.map +1 -1
  7. package/dist/BottomSheet/BottomSheetEdgeTint.js +7 -10
  8. package/dist/BottomSheet/BottomSheetSwitcher.d.ts.map +1 -1
  9. package/dist/BottomSheet/BottomSheetSwitcher.js +1 -1
  10. package/dist/Button/Button.d.ts +2 -1
  11. package/dist/Button/Button.d.ts.map +1 -1
  12. package/dist/Button/Button.js +11 -4
  13. package/dist/Carousel/Carousel.d.ts.map +1 -1
  14. package/dist/Carousel/Carousel.js +2 -2
  15. package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
  16. package/dist/Chat/ChatToolCalls.js +34 -17
  17. package/dist/ContextMenu/ContextMenu.d.ts +14 -3
  18. package/dist/ContextMenu/ContextMenu.d.ts.map +1 -1
  19. package/dist/ContextMenu/ContextMenu.js +149 -26
  20. package/dist/ContextMenu/index.d.ts +1 -0
  21. package/dist/ContextMenu/index.d.ts.map +1 -1
  22. package/dist/DropdownMenu/DropdownMenu.d.ts +24 -5
  23. package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  24. package/dist/DropdownMenu/DropdownMenu.js +340 -26
  25. package/dist/DropdownMenu/DropdownMenuContext.d.ts +1 -1
  26. package/dist/DropdownMenu/DropdownMenuContext.d.ts.map +1 -1
  27. package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
  28. package/dist/DropdownMenu/DropdownMenuItem.js +1 -1
  29. package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts +6 -2
  30. package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
  31. package/dist/DropdownMenu/DropdownMenuSubMenu.js +43 -14
  32. package/dist/DropdownMenu/MenuBottomSheet.d.ts +20 -0
  33. package/dist/DropdownMenu/MenuBottomSheet.d.ts.map +1 -0
  34. package/dist/DropdownMenu/MenuBottomSheet.js +36 -0
  35. package/dist/DropdownMenu/MenuBottomSheetActionList.d.ts +10 -0
  36. package/dist/DropdownMenu/MenuBottomSheetActionList.d.ts.map +1 -0
  37. package/dist/DropdownMenu/MenuBottomSheetActionList.js +111 -0
  38. package/dist/DropdownMenu/index.d.ts +2 -1
  39. package/dist/DropdownMenu/index.d.ts.map +1 -1
  40. package/dist/DropdownMenu/menuWidth.d.ts +14 -0
  41. package/dist/DropdownMenu/menuWidth.d.ts.map +1 -0
  42. package/dist/DropdownMenu/menuWidth.js +35 -0
  43. package/dist/DropdownMenu/useMenuOverflow.d.ts +10 -0
  44. package/dist/DropdownMenu/useMenuOverflow.d.ts.map +1 -0
  45. package/dist/DropdownMenu/useMenuOverflow.js +60 -0
  46. package/dist/MoreMenu/MoreMenu.d.ts +8 -2
  47. package/dist/MoreMenu/MoreMenu.d.ts.map +1 -1
  48. package/dist/MoreMenu/MoreMenu.js +2 -0
  49. package/dist/MultiSelector/MultiSelector.d.ts +11 -1
  50. package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
  51. package/dist/MultiSelector/MultiSelector.js +97 -68
  52. package/dist/MultiSelector/index.d.ts +1 -1
  53. package/dist/MultiSelector/index.d.ts.map +1 -1
  54. package/dist/Popover/Popover.d.ts +10 -6
  55. package/dist/Popover/Popover.d.ts.map +1 -1
  56. package/dist/Popover/Popover.js +141 -16
  57. package/dist/Popover/usePopover.d.ts +4 -0
  58. package/dist/Popover/usePopover.d.ts.map +1 -1
  59. package/dist/Popover/usePopover.js +52 -5
  60. package/dist/Selector/Selector.d.ts +10 -0
  61. package/dist/Selector/Selector.d.ts.map +1 -1
  62. package/dist/Selector/Selector.js +106 -80
  63. package/dist/Selector/SelectorBottomSheet.d.ts +21 -0
  64. package/dist/Selector/SelectorBottomSheet.d.ts.map +1 -0
  65. package/dist/Selector/SelectorBottomSheet.js +83 -0
  66. package/dist/Selector/index.d.ts +1 -1
  67. package/dist/Selector/index.d.ts.map +1 -1
  68. package/dist/Selector/selectorPresentation.stylex.d.ts +16 -0
  69. package/dist/Selector/selectorPresentation.stylex.d.ts.map +1 -0
  70. package/dist/Selector/selectorPresentation.stylex.js +21 -0
  71. package/dist/Selector/useSelectorPresentation.d.ts +32 -0
  72. package/dist/Selector/useSelectorPresentation.d.ts.map +1 -0
  73. package/dist/Selector/useSelectorPresentation.js +90 -0
  74. package/dist/Toast/useToastGesture.d.ts.map +1 -1
  75. package/dist/Toast/useToastGesture.js +46 -9
  76. package/dist/astryx.css +19 -1
  77. package/dist/hooks/useAdaptivePresentation.d.ts +5 -0
  78. package/dist/hooks/useAdaptivePresentation.d.ts.map +1 -0
  79. package/dist/hooks/useAdaptivePresentation.js +19 -0
  80. package/dist/hooks/useFocusReturnVisibility.d.ts +7 -0
  81. package/dist/hooks/useFocusReturnVisibility.d.ts.map +1 -0
  82. package/dist/hooks/useFocusReturnVisibility.js +35 -0
  83. package/dist/hooks/useFocusTrap.d.ts.map +1 -1
  84. package/dist/hooks/useFocusTrap.js +12 -0
  85. package/dist/i18n/InternationalizationContext.d.ts +2 -0
  86. package/dist/i18n/InternationalizationContext.d.ts.map +1 -1
  87. package/dist/i18n/InternationalizationContext.js +3 -1
  88. package/dist/i18n/InternationalizationProvider.d.ts.map +1 -1
  89. package/dist/i18n/InternationalizationProvider.js +3 -1
  90. package/dist/i18n/resolve.d.ts +1 -1
  91. package/dist/i18n/resolve.d.ts.map +1 -1
  92. package/dist/i18n/resolve.js +37 -38
  93. package/dist/i18n/useTranslator.d.ts.map +1 -1
  94. package/dist/i18n/useTranslator.js +2 -3
  95. package/locales/af-ZA.json +0 -4
  96. package/locales/ar-SA.json +0 -4
  97. package/locales/ca-ES.json +0 -4
  98. package/locales/cs-CZ.json +0 -4
  99. package/locales/da-DK.json +0 -4
  100. package/locales/de-DE.json +0 -4
  101. package/locales/el-GR.json +0 -4
  102. package/locales/en.json +20 -0
  103. package/locales/es-ES.json +0 -4
  104. package/locales/fi-FI.json +0 -4
  105. package/locales/fr-FR.json +0 -4
  106. package/locales/he-IL.json +0 -4
  107. package/locales/hu-HU.json +0 -4
  108. package/locales/it-IT.json +0 -4
  109. package/locales/ja-JP.json +0 -4
  110. package/locales/ko-KR.json +0 -4
  111. package/locales/nl-NL.json +0 -4
  112. package/locales/no-NO.json +0 -4
  113. package/locales/pl-PL.json +0 -4
  114. package/locales/pseudo.json +15 -0
  115. package/locales/pt-BR.json +0 -4
  116. package/locales/pt-PT.json +0 -4
  117. package/locales/ro-RO.json +0 -4
  118. package/locales/ru-RU.json +0 -4
  119. package/locales/sr-SP.json +0 -4
  120. package/locales/sv-SE.json +0 -4
  121. package/locales/tr-TR.json +0 -4
  122. package/locales/uk-UA.json +0 -4
  123. package/locales/vi-VN.json +0 -4
  124. package/locales/zh-CN.json +0 -4
  125. package/locales/zh-TW.json +0 -4
  126. package/package.json +3 -3
  127. package/src/BottomSheet/BottomSheet.doc.mjs +6 -0
  128. package/src/BottomSheet/BottomSheet.test.tsx +29 -0
  129. package/src/BottomSheet/BottomSheet.tsx +7 -4
  130. package/src/BottomSheet/BottomSheetEdgeTint.test.tsx +4 -6
  131. package/src/BottomSheet/BottomSheetEdgeTint.tsx +7 -10
  132. package/src/BottomSheet/BottomSheetSwitcher.tsx +1 -2
  133. package/src/Button/Button.doc.mjs +56 -0
  134. package/src/Button/Button.test.tsx +10 -0
  135. package/src/Button/Button.tsx +13 -5
  136. package/src/ButtonGroup/ButtonGroup.doc.mjs +47 -0
  137. package/src/Calendar/Calendar.doc.mjs +1 -1
  138. package/src/Carousel/Carousel.test.tsx +83 -0
  139. package/src/Carousel/Carousel.tsx +8 -2
  140. package/src/Chat/ChatToolCalls.test.tsx +44 -0
  141. package/src/Chat/ChatToolCalls.tsx +36 -15
  142. package/src/CheckboxInput/CheckboxInput.doc.mjs +1 -1
  143. package/src/CheckboxList/CheckboxList.doc.mjs +1 -1
  144. package/src/ComplexSelector/ComplexSelector.doc.mjs +2 -2
  145. package/src/ContextMenu/ContextMenu.doc.mjs +13 -1
  146. package/src/ContextMenu/ContextMenu.test.tsx +131 -1
  147. package/src/ContextMenu/ContextMenu.tsx +199 -32
  148. package/src/ContextMenu/index.ts +1 -0
  149. package/src/DateInput/DateInput.doc.mjs +1 -1
  150. package/src/DateRangeInput/DateRangeInput.doc.mjs +1 -1
  151. package/src/DateTimeInput/DateTimeInput.doc.mjs +1 -1
  152. package/src/DropdownMenu/DropdownMenu.doc.mjs +201 -40
  153. package/src/DropdownMenu/DropdownMenu.test.tsx +518 -7
  154. package/src/DropdownMenu/DropdownMenu.tsx +459 -28
  155. package/src/DropdownMenu/DropdownMenuContext.tsx +1 -1
  156. package/src/DropdownMenu/DropdownMenuItem.tsx +2 -0
  157. package/src/DropdownMenu/DropdownMenuSubMenu.doc.mjs +4 -2
  158. package/src/DropdownMenu/DropdownMenuSubMenu.test.tsx +124 -0
  159. package/src/DropdownMenu/DropdownMenuSubMenu.tsx +72 -17
  160. package/src/DropdownMenu/MenuBottomSheet.tsx +46 -0
  161. package/src/DropdownMenu/MenuBottomSheetActionList.tsx +141 -0
  162. package/src/DropdownMenu/index.ts +2 -0
  163. package/src/DropdownMenu/menuWidth.ts +51 -0
  164. package/src/DropdownMenu/useMenuOverflow.ts +77 -0
  165. package/src/Field/Field.doc.mjs +1 -1
  166. package/src/FieldStatus/FieldStatus.doc.mjs +1 -1
  167. package/src/FileInput/FileInput.doc.mjs +1 -1
  168. package/src/IconButton/IconButton.doc.mjs +38 -0
  169. package/src/Indicator/Indicator.doc.mjs +1 -1
  170. package/src/InputGroup/InputGroup.doc.mjs +1 -1
  171. package/src/MoreMenu/MoreMenu.doc.mjs +17 -0
  172. package/src/MoreMenu/MoreMenu.test.tsx +47 -0
  173. package/src/MoreMenu/MoreMenu.tsx +13 -1
  174. package/src/MultiSelector/MultiSelector.doc.mjs +17 -1
  175. package/src/MultiSelector/MultiSelector.test.tsx +127 -0
  176. package/src/MultiSelector/MultiSelector.tsx +121 -73
  177. package/src/MultiSelector/index.ts +1 -0
  178. package/src/NumberInput/NumberInput.doc.mjs +1 -1
  179. package/src/Popover/Popover.doc.mjs +11 -11
  180. package/src/Popover/Popover.test.tsx +397 -2
  181. package/src/Popover/Popover.tsx +228 -21
  182. package/src/Popover/usePopover.tsx +92 -15
  183. package/src/PowerSearch/PowerSearch.doc.mjs +1 -1
  184. package/src/ProgressBar/ProgressBar.spec.md +208 -0
  185. package/src/RadioList/RadioList.doc.mjs +1 -1
  186. package/src/SegmentedControl/SegmentedControl.doc.mjs +56 -0
  187. package/src/Selector/Selector.doc.mjs +13 -1
  188. package/src/Selector/Selector.test.tsx +135 -0
  189. package/src/Selector/Selector.tsx +141 -82
  190. package/src/Selector/SelectorBottomSheet.tsx +97 -0
  191. package/src/Selector/index.ts +1 -0
  192. package/src/Selector/selectorPresentation.stylex.ts +20 -0
  193. package/src/Selector/useSelectorPresentation.ts +147 -0
  194. package/src/Slider/Slider.doc.mjs +2 -2
  195. package/src/Switch/Switch.doc.mjs +1 -1
  196. package/src/TextArea/TextArea.doc.mjs +1 -1
  197. package/src/TextInput/TextInput.doc.mjs +1 -1
  198. package/src/TimeInput/TimeInput.doc.mjs +1 -1
  199. package/src/Toast/ToastViewport.test.tsx +118 -4
  200. package/src/Toast/useToastGesture.ts +61 -8
  201. package/src/ToggleButton/ToggleButton.doc.mjs +56 -0
  202. package/src/Tokenizer/Tokenizer.doc.mjs +1 -1
  203. package/src/Typeahead/Typeahead.doc.mjs +1 -1
  204. package/src/hooks/useAdaptivePresentation.ts +35 -0
  205. package/src/hooks/useFocusReturnVisibility.ts +45 -0
  206. package/src/hooks/useFocusTrap.test.tsx +40 -0
  207. package/src/hooks/useFocusTrap.ts +13 -0
  208. package/src/i18n/InternationalizationContext.ts +3 -0
  209. package/src/i18n/InternationalizationProvider.tsx +8 -1
  210. package/src/i18n/__tests__/resolve.test.ts +23 -1
  211. package/src/i18n/resolve.ts +46 -49
  212. package/src/i18n/useTranslator.ts +2 -7
  213. package/src/theme/themingTargets.test.ts +91 -25
@@ -69,55 +69,54 @@ export function resolveLocaleChain(locale) {
69
69
  }
70
70
  return chain;
71
71
  }
72
- function lookup(key, locale, messages, overrides) {
72
+ function getLookup(locale, messages, overrides) {
73
+ const lookup = {};
73
74
  const chain = resolveLocaleChain(locale);
74
-
75
75
  // 1 + 2. Overrides (most specific to least specific in the chain)
76
76
  if (overrides !== undefined) {
77
77
  for (const tag of chain) {
78
- const value = overrides[tag]?.[key];
79
- if (value !== undefined) {
80
- return value;
78
+ if (overrides[tag]) {
79
+ for (const [key, value] of Object.entries(overrides[tag])) {
80
+ if (lookup[key] === undefined && value !== null) {
81
+ lookup[key] = value;
82
+ }
83
+ }
81
84
  }
82
85
  }
83
86
  }
84
-
85
- // 3 + 4. Shipped catalogs (most specific to least specific)
86
87
  for (const tag of chain) {
87
- const entry = messages[tag]?.[key];
88
- if (entry !== undefined) {
89
- return entry.defaultMessage;
88
+ if (messages[tag]) {
89
+ for (const [key, value] of Object.entries(messages[tag])) {
90
+ if (lookup[key] === undefined && value?.defaultMessage !== null) {
91
+ lookup[key] = value?.defaultMessage;
92
+ }
93
+ }
90
94
  }
91
95
  }
92
-
93
- // 5. Shipped en catalog — always present
94
- const enEntry = EN_CATALOG[key];
95
- if (enEntry !== undefined) {
96
- return enEntry.defaultMessage;
97
- }
98
-
99
- // 6. Nothing found
100
- return null;
96
+ return lookup;
101
97
  }
102
- export function resolve(key, values, locale, messages, overrides) {
103
- const result = lookup(key, locale, messages, overrides);
104
- if (result === null) {
105
- // Fires ONLY when a key is missing from every source including the
106
- // shipped `en` catalog — a real bug (typo, stale catalog, deleted key).
107
- // Fallback to `en` from a non-en locale is expected and stays silent,
108
- // matching the FormatJS / i18next default.
109
- warnOnce(`astryx-i18n:${locale}::${key}`, 'astryx-i18n', `missing key: ${key} (locale: ${locale})`);
110
- return key;
111
- }
112
- if (values === undefined) {
113
- // Static string — skip the parser entirely for the common case
114
- return result;
115
- }
116
- const formatted = getFormatter(result, locale).format(values);
117
- // IntlMessageFormat.format returns string | (string | React elements) — we
118
- // only ever pass string values so it will be a string; assert for the type
119
- // system.
120
- return formatted;
98
+ export function getResolve(locale, messages, overrides) {
99
+ const lookup = getLookup(locale, messages, overrides);
100
+ return (key, values) => {
101
+ const result = lookup[key] ?? EN_CATALOG[key]?.defaultMessage;
102
+ if (result === undefined) {
103
+ // Fires ONLY when a key is missing from every source including the
104
+ // shipped `en` catalog — a real bug (typo, stale catalog, deleted key).
105
+ // Fallback to `en` from a non-en locale is expected and stays silent,
106
+ // matching the FormatJS / i18next default.
107
+ warnOnce(`astryx-i18n:${locale}::${key}`, 'astryx-i18n', `missing key: ${key} (locale: ${locale})`);
108
+ return key;
109
+ }
110
+ if (values === undefined) {
111
+ // Static string — skip the parser entirely for the common case
112
+ return result;
113
+ }
114
+ const formatted = getFormatter(result, locale).format(values);
115
+ // IntlMessageFormat.format returns string | (string | React elements) — we
116
+ // only ever pass string values so it will be a string; assert for the type
117
+ // system.
118
+ return formatted;
119
+ };
121
120
  }
122
121
 
123
122
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"useTranslator.d.ts","sourceRoot":"","sources":["../../src/i18n/useTranslator.ts"],"names":[],"mappings":"AAyBA,MAAM,MAAM,YAAY,GAAG,CACzB,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,MAAM,CAAC;AAEZ;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,IAAI,YAAY,CAO5C"}
1
+ {"version":3,"file":"useTranslator.d.ts","sourceRoot":"","sources":["../../src/i18n/useTranslator.ts"],"names":[],"mappings":"AAwBA,MAAM,MAAM,YAAY,GAAG,CACzB,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,MAAM,CAAC;AAEZ;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,IAAI,YAAY,CAG5C"}
@@ -18,9 +18,8 @@
18
18
  * - /packages/core/src/i18n/index.ts
19
19
  * - /packages/core/src/i18n/t.client.ts
20
20
  */
21
- import { use, useCallback } from 'react';
21
+ import { use } from 'react';
22
22
  import { InternationalizationContext } from "./InternationalizationContext.js";
23
- import { resolve } from "./resolve.js";
24
23
  /**
25
24
  * Returns a translator function bound to the current provider's locale.
26
25
  * Safe to call from event handlers and effects.
@@ -35,5 +34,5 @@ import { resolve } from "./resolve.js";
35
34
  */
36
35
  export function useTranslator() {
37
36
  const ctx = use(InternationalizationContext);
38
- return useCallback((key, values) => resolve(key, values, ctx.locale, ctx.messages, ctx.overrides), [ctx.locale, ctx.messages, ctx.overrides]);
37
+ return ctx.translate;
39
38
  }
@@ -623,10 +623,6 @@
623
623
  "defaultMessage": "Kies 'n datum",
624
624
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
625
625
  },
626
- "@astryx.dateTimeInput.dialogLabel": {
627
- "defaultMessage": "Kies datum",
628
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
629
- },
630
626
  "@astryx.link.newTab": {
631
627
  "defaultMessage": "(maak in nuwe oortjie oop)",
632
628
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -651,10 +651,6 @@
651
651
  "defaultMessage": "حدّد تاريخًا",
652
652
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
653
653
  },
654
- "@astryx.dateTimeInput.dialogLabel": {
655
- "defaultMessage": "اختر التاريخ",
656
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
657
- },
658
654
  "@astryx.link.newTab": {
659
655
  "defaultMessage": "(يُفتح في علامة تبويب جديدة)",
660
656
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -643,10 +643,6 @@
643
643
  "defaultMessage": "Selecciona una data",
644
644
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
645
645
  },
646
- "@astryx.dateTimeInput.dialogLabel": {
647
- "defaultMessage": "Tria una data",
648
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
649
- },
650
646
  "@astryx.link.newTab": {
651
647
  "defaultMessage": "(s’obre en una pestanya nova)",
652
648
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -647,10 +647,6 @@
647
647
  "defaultMessage": "Vyberte datum",
648
648
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
649
649
  },
650
- "@astryx.dateTimeInput.dialogLabel": {
651
- "defaultMessage": "Zvolit datum",
652
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
653
- },
654
650
  "@astryx.link.newTab": {
655
651
  "defaultMessage": "(otevře se na nové kartě)",
656
652
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -639,10 +639,6 @@
639
639
  "defaultMessage": "Vælg en dato",
640
640
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
641
641
  },
642
- "@astryx.dateTimeInput.dialogLabel": {
643
- "defaultMessage": "Vælg dato",
644
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
645
- },
646
642
  "@astryx.link.newTab": {
647
643
  "defaultMessage": "(åbner i ny fane)",
648
644
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -639,10 +639,6 @@
639
639
  "defaultMessage": "Datum auswählen",
640
640
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
641
641
  },
642
- "@astryx.dateTimeInput.dialogLabel": {
643
- "defaultMessage": "Datum auswählen",
644
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
645
- },
646
642
  "@astryx.link.newTab": {
647
643
  "defaultMessage": "(wird in neuem Tab geöffnet)",
648
644
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -647,10 +647,6 @@
647
647
  "defaultMessage": "Επιλέξτε ημερομηνία",
648
648
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
649
649
  },
650
- "@astryx.dateTimeInput.dialogLabel": {
651
- "defaultMessage": "Επιλογή ημερομηνίας",
652
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
653
- },
654
650
  "@astryx.link.newTab": {
655
651
  "defaultMessage": "(ανοίγει σε νέα καρτέλα)",
656
652
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
package/locales/en.json CHANGED
@@ -415,6 +415,10 @@
415
415
  "defaultMessage": "Menu",
416
416
  "description": "Screen-reader-only fallback name for a dropdown menu popover. Very generic; consumers usually override. Noun (\"a menu\"), not the imperative."
417
417
  },
418
+ "@astryx.dropdownMenu.back": {
419
+ "defaultMessage": "Back",
420
+ "description": "Button label that returns from a nested action list to its parent inside a DropdownMenu bottom sheet. Imperative navigation action."
421
+ },
418
422
  "@astryx.lightbox.close": {
419
423
  "defaultMessage": "Close",
420
424
  "description": "\"Close\" = shut/dismiss (not \"nearby\"). Screen-reader-only label on the X button that dismisses a Lightbox."
@@ -951,6 +955,22 @@
951
955
  "defaultMessage": "Error: {message}",
952
956
  "description": "Screen-reader text for a tool call that failed. {message} is the error detail."
953
957
  },
958
+ "@astryx.chatToolCalls.status.pending": {
959
+ "defaultMessage": "Pending",
960
+ "description": "Screen-reader-only status label for a tool call that is waiting to begin."
961
+ },
962
+ "@astryx.chatToolCalls.status.running": {
963
+ "defaultMessage": "Running",
964
+ "description": "Screen-reader-only status label for a tool call that is currently running."
965
+ },
966
+ "@astryx.chatToolCalls.status.complete": {
967
+ "defaultMessage": "Complete",
968
+ "description": "Screen-reader-only status label for a tool call that completed successfully."
969
+ },
970
+ "@astryx.chatToolCalls.status.error": {
971
+ "defaultMessage": "Failed",
972
+ "description": "Screen-reader-only status label for a failed tool call when no error detail is supplied."
973
+ },
954
974
  "@astryx.chatToolCalls.groupLabel": {
955
975
  "defaultMessage": "{count} tool calls",
956
976
  "description": "Summary label shown in the group header when multiple tool calls are expanded. {count} is the number of calls."
@@ -647,10 +647,6 @@
647
647
  "defaultMessage": "Selecciona una fecha",
648
648
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
649
649
  },
650
- "@astryx.dateTimeInput.dialogLabel": {
651
- "defaultMessage": "Elige una fecha",
652
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
653
- },
654
650
  "@astryx.link.newTab": {
655
651
  "defaultMessage": "(se abre en una pestaña nueva)",
656
652
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -647,10 +647,6 @@
647
647
  "defaultMessage": "Valitse päivämäärä",
648
648
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
649
649
  },
650
- "@astryx.dateTimeInput.dialogLabel": {
651
- "defaultMessage": "Valitse päivämäärä",
652
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
653
- },
654
650
  "@astryx.link.newTab": {
655
651
  "defaultMessage": "(avautuu uuteen välilehteen)",
656
652
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -615,10 +615,6 @@
615
615
  "defaultMessage": "Sélectionner une date",
616
616
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
617
617
  },
618
- "@astryx.dateTimeInput.dialogLabel": {
619
- "defaultMessage": "Choisir une date",
620
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
621
- },
622
618
  "@astryx.link.newTab": {
623
619
  "defaultMessage": "(ouvre un nouvel onglet)",
624
620
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -647,10 +647,6 @@
647
647
  "defaultMessage": "בחירת תאריך",
648
648
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
649
649
  },
650
- "@astryx.dateTimeInput.dialogLabel": {
651
- "defaultMessage": "בחירת תאריך",
652
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
653
- },
654
650
  "@astryx.link.newTab": {
655
651
  "defaultMessage": "(נפתח בכרטיסייה חדשה)",
656
652
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -647,10 +647,6 @@
647
647
  "defaultMessage": "Válasszon dátumot",
648
648
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
649
649
  },
650
- "@astryx.dateTimeInput.dialogLabel": {
651
- "defaultMessage": "Dátum kiválasztása",
652
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
653
- },
654
650
  "@astryx.link.newTab": {
655
651
  "defaultMessage": "(új lapon nyílik meg)",
656
652
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -639,10 +639,6 @@
639
639
  "defaultMessage": "Seleziona una data",
640
640
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
641
641
  },
642
- "@astryx.dateTimeInput.dialogLabel": {
643
- "defaultMessage": "Scegli una data",
644
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
645
- },
646
642
  "@astryx.link.newTab": {
647
643
  "defaultMessage": "(si apre in una nuova scheda)",
648
644
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -651,10 +651,6 @@
651
651
  "defaultMessage": "日付を選択",
652
652
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
653
653
  },
654
- "@astryx.dateTimeInput.dialogLabel": {
655
- "defaultMessage": "日付を選択",
656
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
657
- },
658
654
  "@astryx.link.newTab": {
659
655
  "defaultMessage": "(新しいタブで開く)",
660
656
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -647,10 +647,6 @@
647
647
  "defaultMessage": "날짜 선택",
648
648
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
649
649
  },
650
- "@astryx.dateTimeInput.dialogLabel": {
651
- "defaultMessage": "날짜 선택",
652
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
653
- },
654
650
  "@astryx.link.newTab": {
655
651
  "defaultMessage": "(새 탭에서 열림)",
656
652
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -615,10 +615,6 @@
615
615
  "defaultMessage": "Selecteer een datum",
616
616
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
617
617
  },
618
- "@astryx.dateTimeInput.dialogLabel": {
619
- "defaultMessage": "Datum kiezen",
620
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
621
- },
622
618
  "@astryx.link.newTab": {
623
619
  "defaultMessage": "(opent in nieuw tabblad)",
624
620
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -643,10 +643,6 @@
643
643
  "defaultMessage": "Velg en dato",
644
644
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
645
645
  },
646
- "@astryx.dateTimeInput.dialogLabel": {
647
- "defaultMessage": "Velg dato",
648
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
649
- },
650
646
  "@astryx.link.newTab": {
651
647
  "defaultMessage": "(åpnes i ny fane)",
652
648
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -639,10 +639,6 @@
639
639
  "defaultMessage": "Wybierz datę",
640
640
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
641
641
  },
642
- "@astryx.dateTimeInput.dialogLabel": {
643
- "defaultMessage": "Wybierz datę",
644
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
645
- },
646
642
  "@astryx.link.newTab": {
647
643
  "defaultMessage": "(otwiera się w nowej karcie)",
648
644
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -311,6 +311,9 @@
311
311
  "@astryx.dropdownMenu.label": {
312
312
  "defaultMessage": "⟦Ṁéñú⟧"
313
313
  },
314
+ "@astryx.dropdownMenu.back": {
315
+ "defaultMessage": "⟦Ɓàçķ⟧"
316
+ },
314
317
  "@astryx.lightbox.close": {
315
318
  "defaultMessage": "⟦Çłóšé⟧"
316
319
  },
@@ -713,6 +716,18 @@
713
716
  "@astryx.chatToolCalls.error": {
714
717
  "defaultMessage": "⟦Éřřóř: {message}⟧"
715
718
  },
719
+ "@astryx.chatToolCalls.status.pending": {
720
+ "defaultMessage": "⟦Þéñðíñĝ⟧"
721
+ },
722
+ "@astryx.chatToolCalls.status.running": {
723
+ "defaultMessage": "⟦Řúññíñĝ⟧"
724
+ },
725
+ "@astryx.chatToolCalls.status.complete": {
726
+ "defaultMessage": "⟦Çóɱþłéţé⟧"
727
+ },
728
+ "@astryx.chatToolCalls.status.error": {
729
+ "defaultMessage": "⟦Ƒàíłéð⟧"
730
+ },
716
731
  "@astryx.chatToolCalls.groupLabel": {
717
732
  "defaultMessage": "⟦{count} ţóół çàłłš⟧"
718
733
  },
@@ -643,10 +643,6 @@
643
643
  "defaultMessage": "Selecione uma data",
644
644
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
645
645
  },
646
- "@astryx.dateTimeInput.dialogLabel": {
647
- "defaultMessage": "Escolha uma data",
648
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
649
- },
650
646
  "@astryx.link.newTab": {
651
647
  "defaultMessage": "(abre em uma nova guia)",
652
648
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -643,10 +643,6 @@
643
643
  "defaultMessage": "Selecione uma data",
644
644
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
645
645
  },
646
- "@astryx.dateTimeInput.dialogLabel": {
647
- "defaultMessage": "Escolha uma data",
648
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
649
- },
650
646
  "@astryx.link.newTab": {
651
647
  "defaultMessage": "(abre num novo separador)",
652
648
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -643,10 +643,6 @@
643
643
  "defaultMessage": "Selectează o dată",
644
644
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
645
645
  },
646
- "@astryx.dateTimeInput.dialogLabel": {
647
- "defaultMessage": "Alege data",
648
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
649
- },
650
646
  "@astryx.link.newTab": {
651
647
  "defaultMessage": "(se deschide într-o filă nouă)",
652
648
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -647,10 +647,6 @@
647
647
  "defaultMessage": "Выберите дату",
648
648
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
649
649
  },
650
- "@astryx.dateTimeInput.dialogLabel": {
651
- "defaultMessage": "Выбор даты",
652
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
653
- },
654
650
  "@astryx.link.newTab": {
655
651
  "defaultMessage": "(откроется в новой вкладке)",
656
652
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -647,10 +647,6 @@
647
647
  "defaultMessage": "Изаберите датум",
648
648
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
649
649
  },
650
- "@astryx.dateTimeInput.dialogLabel": {
651
- "defaultMessage": "Изаберите датум",
652
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
653
- },
654
650
  "@astryx.link.newTab": {
655
651
  "defaultMessage": "(отвара се у новој картици)",
656
652
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -643,10 +643,6 @@
643
643
  "defaultMessage": "Välj ett datum",
644
644
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
645
645
  },
646
- "@astryx.dateTimeInput.dialogLabel": {
647
- "defaultMessage": "Välj datum",
648
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
649
- },
650
646
  "@astryx.link.newTab": {
651
647
  "defaultMessage": "(öppnas i ny flik)",
652
648
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -647,10 +647,6 @@
647
647
  "defaultMessage": "Bir tarih seçin",
648
648
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
649
649
  },
650
- "@astryx.dateTimeInput.dialogLabel": {
651
- "defaultMessage": "Tarih seçin",
652
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
653
- },
654
650
  "@astryx.link.newTab": {
655
651
  "defaultMessage": "(yeni sekmede açılır)",
656
652
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -647,10 +647,6 @@
647
647
  "defaultMessage": "Виберіть дату",
648
648
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
649
649
  },
650
- "@astryx.dateTimeInput.dialogLabel": {
651
- "defaultMessage": "Виберіть дату",
652
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
653
- },
654
650
  "@astryx.link.newTab": {
655
651
  "defaultMessage": "(відкривається в новій вкладці)",
656
652
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -643,10 +643,6 @@
643
643
  "defaultMessage": "Chọn ngày",
644
644
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
645
645
  },
646
- "@astryx.dateTimeInput.dialogLabel": {
647
- "defaultMessage": "Chọn ngày",
648
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
649
- },
650
646
  "@astryx.link.newTab": {
651
647
  "defaultMessage": "(mở trong tab mới)",
652
648
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -651,10 +651,6 @@
651
651
  "defaultMessage": "选择日期",
652
652
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
653
653
  },
654
- "@astryx.dateTimeInput.dialogLabel": {
655
- "defaultMessage": "选择日期",
656
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
657
- },
658
654
  "@astryx.link.newTab": {
659
655
  "defaultMessage": "(在新标签页中打开)",
660
656
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
@@ -651,10 +651,6 @@
651
651
  "defaultMessage": "選擇日期",
652
652
  "description": "Grey placeholder inside an empty DateTimeInput field. Note: the English says only \"date\" though the field is date+time — do not add \"and time\" unless natural."
653
653
  },
654
- "@astryx.dateTimeInput.dialogLabel": {
655
- "defaultMessage": "選擇日期",
656
- "description": "Screen-reader-only accessible name for the DateTimeInput picker dialog. Same English-only \"date\" phrasing as the placeholder — don't add \"and time\" unless natural."
657
- },
658
654
  "@astryx.link.newTab": {
659
655
  "defaultMessage": "(在新分頁中開啟)",
660
656
  "description": "Visually-hidden (screen-reader-only) suffix appended to a Link's accessible name when it opens in a new tab. Example: `Documentation (opens in new tab)`."
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@astryxdesign/core",
3
- "version": "0.5.1",
3
+ "version": "0.5.2-canary.039852f",
4
4
  "displayName": "Astryx Core",
5
5
  "description": "The component library. Accessible, themeable React components with built-in spacing, dark mode, and StyleX styling.",
6
6
  "author": "Meta Open Source",
@@ -661,6 +661,7 @@
661
661
  "react-dom": ">=19.0.0"
662
662
  },
663
663
  "devDependencies": {
664
+ "@astryxdesign/cli": "0.5.2-canary.039852f",
664
665
  "@babel/cli": "^8.0.4",
665
666
  "@babel/core": "^7.29.7",
666
667
  "@babel/preset-react": "^8.0.1",
@@ -668,8 +669,7 @@
668
669
  "@stylexjs/babel-plugin": "^0.19.0",
669
670
  "@testing-library/dom": "^10.0.0",
670
671
  "@testing-library/jest-dom": "^6.6.0",
671
- "@testing-library/react": "^16.3.2",
672
- "@astryxdesign/cli": "0.5.1"
672
+ "@testing-library/react": "^16.3.2"
673
673
  },
674
674
  "dependencies": {
675
675
  "intl-messageformat": "^11.2.9"
@@ -71,6 +71,12 @@ export const docs = {
71
71
  description:
72
72
  'For a standalone sheet, called when it requests an open-state change. Automatic calls follow purpose: info dismisses on Escape, scrim click, or swipe; form dismisses on Escape only; required never dismisses implicitly. Omit inside BottomSheetSwitcher.',
73
73
  },
74
+ {
75
+ name: 'finalFocusRef',
76
+ type: 'RefObject<HTMLElement | null>',
77
+ description:
78
+ 'Optional explicit focus-return target for a standalone sheet. Use when the opener can remount or the active element is not a reliable trigger, such as an adaptive presentation switch. Omit inside BottomSheetSwitcher.',
79
+ },
74
80
  {
75
81
  name: 'purpose',
76
82
  type: "'required' | 'form' | 'info'",