@salt-ds/lab 1.0.0-alpha.94 → 1.0.0-alpha.96

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 (191) hide show
  1. package/CHANGELOG.md +157 -0
  2. package/css/salt-lab.css +76 -49
  3. package/dist-cjs/index.js +12 -52
  4. package/dist-cjs/index.js.map +1 -1
  5. package/dist-cjs/mega-menu/MegaMenu.js +8 -14
  6. package/dist-cjs/mega-menu/MegaMenu.js.map +1 -1
  7. package/dist-cjs/mega-menu/MegaMenuActions.css.js +6 -0
  8. package/dist-cjs/mega-menu/MegaMenuActions.css.js.map +1 -0
  9. package/dist-cjs/mega-menu/MegaMenuActions.js +33 -0
  10. package/dist-cjs/mega-menu/MegaMenuActions.js.map +1 -0
  11. package/dist-cjs/mega-menu/MegaMenuAside.css.js +6 -0
  12. package/dist-cjs/mega-menu/MegaMenuAside.css.js.map +1 -0
  13. package/dist-cjs/mega-menu/MegaMenuAside.js +33 -0
  14. package/dist-cjs/mega-menu/MegaMenuAside.js.map +1 -0
  15. package/dist-cjs/mega-menu/MegaMenuContent.css.js +1 -1
  16. package/dist-cjs/mega-menu/MegaMenuContent.js +2 -10
  17. package/dist-cjs/mega-menu/MegaMenuContent.js.map +1 -1
  18. package/dist-cjs/mega-menu/MegaMenuContext.js.map +1 -1
  19. package/dist-cjs/mega-menu/MegaMenuGroup.css.js +1 -1
  20. package/dist-cjs/mega-menu/MegaMenuGroup.js +10 -28
  21. package/dist-cjs/mega-menu/MegaMenuGroup.js.map +1 -1
  22. package/dist-cjs/mega-menu/MegaMenuGroupContext.js +17 -0
  23. package/dist-cjs/mega-menu/MegaMenuGroupContext.js.map +1 -0
  24. package/dist-cjs/mega-menu/MegaMenuGroupHeading.css.js +6 -0
  25. package/dist-cjs/mega-menu/MegaMenuGroupHeading.css.js.map +1 -0
  26. package/dist-cjs/mega-menu/MegaMenuGroupHeading.js +39 -0
  27. package/dist-cjs/mega-menu/MegaMenuGroupHeading.js.map +1 -0
  28. package/dist-cjs/mega-menu/MegaMenuGroups.css.js +6 -0
  29. package/dist-cjs/mega-menu/MegaMenuGroups.css.js.map +1 -0
  30. package/dist-cjs/mega-menu/{MegaMenuSection.js → MegaMenuGroups.js} +8 -8
  31. package/dist-cjs/mega-menu/MegaMenuGroups.js.map +1 -0
  32. package/dist-cjs/mega-menu/MegaMenuList.css.js +6 -0
  33. package/dist-cjs/mega-menu/MegaMenuList.css.js.map +1 -0
  34. package/dist-cjs/mega-menu/MegaMenuList.js +43 -0
  35. package/dist-cjs/mega-menu/MegaMenuList.js.map +1 -0
  36. package/dist-cjs/mega-menu/MegaMenuListItem.css.js +6 -0
  37. package/dist-cjs/mega-menu/MegaMenuListItem.css.js.map +1 -0
  38. package/dist-cjs/mega-menu/MegaMenuListItem.js +45 -0
  39. package/dist-cjs/mega-menu/MegaMenuListItem.js.map +1 -0
  40. package/dist-cjs/mega-menu/MegaMenuPanel.css.js +1 -1
  41. package/dist-cjs/mega-menu/MegaMenuPanel.js +27 -47
  42. package/dist-cjs/mega-menu/MegaMenuPanel.js.map +1 -1
  43. package/dist-cjs/mega-menu/MegaMenuTrigger.js +16 -18
  44. package/dist-cjs/mega-menu/MegaMenuTrigger.js.map +1 -1
  45. package/dist-cjs/mega-menu/useMegaMenuNavigation.js +282 -0
  46. package/dist-cjs/mega-menu/useMegaMenuNavigation.js.map +1 -0
  47. package/dist-cjs/mega-menu/usePageMargin.js +22 -0
  48. package/dist-cjs/mega-menu/usePageMargin.js.map +1 -0
  49. package/dist-cjs/toolbar-next/ToolbarNextOverflow.js +2 -1
  50. package/dist-cjs/toolbar-next/ToolbarNextOverflow.js.map +1 -1
  51. package/dist-cjs/toolbar-next/toolbarNextKeyboardUtils.js +21 -3
  52. package/dist-cjs/toolbar-next/toolbarNextKeyboardUtils.js.map +1 -1
  53. package/dist-cjs/toolbar-next/useToolbarNextKeyboardNavigation.js +3 -25
  54. package/dist-cjs/toolbar-next/useToolbarNextKeyboardNavigation.js.map +1 -1
  55. package/dist-cjs/toolbar-next/useToolbarNextOverflow.js +9 -7
  56. package/dist-cjs/toolbar-next/useToolbarNextOverflow.js.map +1 -1
  57. package/dist-es/index.js +6 -9
  58. package/dist-es/index.js.map +1 -1
  59. package/dist-es/mega-menu/MegaMenu.js +9 -15
  60. package/dist-es/mega-menu/MegaMenu.js.map +1 -1
  61. package/dist-es/mega-menu/MegaMenuActions.css.js +4 -0
  62. package/dist-es/mega-menu/MegaMenuActions.css.js.map +1 -0
  63. package/dist-es/mega-menu/MegaMenuActions.js +31 -0
  64. package/dist-es/mega-menu/MegaMenuActions.js.map +1 -0
  65. package/dist-es/mega-menu/MegaMenuAside.css.js +4 -0
  66. package/dist-es/mega-menu/MegaMenuAside.css.js.map +1 -0
  67. package/dist-es/mega-menu/MegaMenuAside.js +31 -0
  68. package/dist-es/mega-menu/MegaMenuAside.js.map +1 -0
  69. package/dist-es/mega-menu/MegaMenuContent.css.js +1 -1
  70. package/dist-es/mega-menu/MegaMenuContent.js +2 -10
  71. package/dist-es/mega-menu/MegaMenuContent.js.map +1 -1
  72. package/dist-es/mega-menu/MegaMenuContext.js.map +1 -1
  73. package/dist-es/mega-menu/MegaMenuGroup.css.js +1 -1
  74. package/dist-es/mega-menu/MegaMenuGroup.js +13 -31
  75. package/dist-es/mega-menu/MegaMenuGroup.js.map +1 -1
  76. package/dist-es/mega-menu/MegaMenuGroupContext.js +14 -0
  77. package/dist-es/mega-menu/MegaMenuGroupContext.js.map +1 -0
  78. package/dist-es/mega-menu/MegaMenuGroupHeading.css.js +4 -0
  79. package/dist-es/mega-menu/MegaMenuGroupHeading.css.js.map +1 -0
  80. package/dist-es/mega-menu/MegaMenuGroupHeading.js +37 -0
  81. package/dist-es/mega-menu/MegaMenuGroupHeading.js.map +1 -0
  82. package/dist-es/mega-menu/MegaMenuGroups.css.js +4 -0
  83. package/dist-es/mega-menu/MegaMenuGroups.css.js.map +1 -0
  84. package/dist-es/mega-menu/{MegaMenuSection.js → MegaMenuGroups.js} +7 -7
  85. package/dist-es/mega-menu/MegaMenuGroups.js.map +1 -0
  86. package/dist-es/mega-menu/MegaMenuList.css.js +4 -0
  87. package/dist-es/mega-menu/MegaMenuList.css.js.map +1 -0
  88. package/dist-es/mega-menu/MegaMenuList.js +41 -0
  89. package/dist-es/mega-menu/MegaMenuList.js.map +1 -0
  90. package/dist-es/mega-menu/MegaMenuListItem.css.js +4 -0
  91. package/dist-es/mega-menu/MegaMenuListItem.css.js.map +1 -0
  92. package/dist-es/mega-menu/MegaMenuListItem.js +43 -0
  93. package/dist-es/mega-menu/MegaMenuListItem.js.map +1 -0
  94. package/dist-es/mega-menu/MegaMenuPanel.css.js +1 -1
  95. package/dist-es/mega-menu/MegaMenuPanel.js +30 -50
  96. package/dist-es/mega-menu/MegaMenuPanel.js.map +1 -1
  97. package/dist-es/mega-menu/MegaMenuTrigger.js +14 -16
  98. package/dist-es/mega-menu/MegaMenuTrigger.js.map +1 -1
  99. package/dist-es/mega-menu/useMegaMenuNavigation.js +278 -0
  100. package/dist-es/mega-menu/useMegaMenuNavigation.js.map +1 -0
  101. package/dist-es/mega-menu/usePageMargin.js +20 -0
  102. package/dist-es/mega-menu/usePageMargin.js.map +1 -0
  103. package/dist-es/toolbar-next/ToolbarNextOverflow.js +2 -1
  104. package/dist-es/toolbar-next/ToolbarNextOverflow.js.map +1 -1
  105. package/dist-es/toolbar-next/toolbarNextKeyboardUtils.js +21 -3
  106. package/dist-es/toolbar-next/toolbarNextKeyboardUtils.js.map +1 -1
  107. package/dist-es/toolbar-next/useToolbarNextKeyboardNavigation.js +4 -26
  108. package/dist-es/toolbar-next/useToolbarNextKeyboardNavigation.js.map +1 -1
  109. package/dist-es/toolbar-next/useToolbarNextOverflow.js +9 -7
  110. package/dist-es/toolbar-next/useToolbarNextOverflow.js.map +1 -1
  111. package/dist-types/index.d.ts +0 -4
  112. package/dist-types/mega-menu/MegaMenu.d.ts +11 -2
  113. package/dist-types/mega-menu/MegaMenuActions.d.ts +10 -0
  114. package/dist-types/mega-menu/MegaMenuAside.d.ts +9 -0
  115. package/dist-types/mega-menu/MegaMenuContent.d.ts +2 -1
  116. package/dist-types/mega-menu/MegaMenuContext.d.ts +6 -7
  117. package/dist-types/mega-menu/MegaMenuGroup.d.ts +4 -3
  118. package/dist-types/mega-menu/MegaMenuGroupContext.d.ts +12 -0
  119. package/dist-types/mega-menu/MegaMenuGroupHeading.d.ts +13 -0
  120. package/dist-types/mega-menu/MegaMenuGroups.d.ts +8 -0
  121. package/dist-types/mega-menu/MegaMenuList.d.ts +16 -0
  122. package/dist-types/mega-menu/MegaMenuListItem.d.ts +25 -0
  123. package/dist-types/mega-menu/MegaMenuPanel.d.ts +2 -2
  124. package/dist-types/mega-menu/MegaMenuTrigger.d.ts +1 -0
  125. package/dist-types/mega-menu/index.d.ts +6 -4
  126. package/dist-types/mega-menu/useMegaMenuNavigation.d.ts +16 -0
  127. package/dist-types/mega-menu/usePageMargin.d.ts +6 -0
  128. package/dist-types/toolbar-next/useToolbarNextKeyboardNavigation.d.ts +1 -0
  129. package/package.json +2 -4
  130. package/dist-cjs/calendar/index.js +0 -61
  131. package/dist-cjs/calendar/index.js.map +0 -1
  132. package/dist-cjs/date-input/index.js +0 -23
  133. package/dist-cjs/date-input/index.js.map +0 -1
  134. package/dist-cjs/date-picker/index.js +0 -106
  135. package/dist-cjs/date-picker/index.js.map +0 -1
  136. package/dist-cjs/localization-provider/index.js +0 -26
  137. package/dist-cjs/localization-provider/index.js.map +0 -1
  138. package/dist-cjs/mega-menu/MegaMenuHeader.css.js +0 -6
  139. package/dist-cjs/mega-menu/MegaMenuHeader.css.js.map +0 -1
  140. package/dist-cjs/mega-menu/MegaMenuHeader.js +0 -26
  141. package/dist-cjs/mega-menu/MegaMenuHeader.js.map +0 -1
  142. package/dist-cjs/mega-menu/MegaMenuItem.css.js +0 -6
  143. package/dist-cjs/mega-menu/MegaMenuItem.css.js.map +0 -1
  144. package/dist-cjs/mega-menu/MegaMenuItem.js +0 -52
  145. package/dist-cjs/mega-menu/MegaMenuItem.js.map +0 -1
  146. package/dist-cjs/mega-menu/MegaMenuItemContent.css.js +0 -6
  147. package/dist-cjs/mega-menu/MegaMenuItemContent.css.js.map +0 -1
  148. package/dist-cjs/mega-menu/MegaMenuItemContent.js +0 -23
  149. package/dist-cjs/mega-menu/MegaMenuItemContent.js.map +0 -1
  150. package/dist-cjs/mega-menu/MegaMenuSection.css.js +0 -6
  151. package/dist-cjs/mega-menu/MegaMenuSection.css.js.map +0 -1
  152. package/dist-cjs/mega-menu/MegaMenuSection.js.map +0 -1
  153. package/dist-cjs/mega-menu/useMegaMenuKeyboard.js +0 -209
  154. package/dist-cjs/mega-menu/useMegaMenuKeyboard.js.map +0 -1
  155. package/dist-cjs/utils/deprecatedExport.js +0 -30
  156. package/dist-cjs/utils/deprecatedExport.js.map +0 -1
  157. package/dist-es/calendar/index.js +0 -50
  158. package/dist-es/calendar/index.js.map +0 -1
  159. package/dist-es/date-input/index.js +0 -20
  160. package/dist-es/date-input/index.js.map +0 -1
  161. package/dist-es/date-picker/index.js +0 -85
  162. package/dist-es/date-picker/index.js.map +0 -1
  163. package/dist-es/localization-provider/index.js +0 -20
  164. package/dist-es/localization-provider/index.js.map +0 -1
  165. package/dist-es/mega-menu/MegaMenuHeader.css.js +0 -4
  166. package/dist-es/mega-menu/MegaMenuHeader.css.js.map +0 -1
  167. package/dist-es/mega-menu/MegaMenuHeader.js +0 -24
  168. package/dist-es/mega-menu/MegaMenuHeader.js.map +0 -1
  169. package/dist-es/mega-menu/MegaMenuItem.css.js +0 -4
  170. package/dist-es/mega-menu/MegaMenuItem.css.js.map +0 -1
  171. package/dist-es/mega-menu/MegaMenuItem.js +0 -50
  172. package/dist-es/mega-menu/MegaMenuItem.js.map +0 -1
  173. package/dist-es/mega-menu/MegaMenuItemContent.css.js +0 -4
  174. package/dist-es/mega-menu/MegaMenuItemContent.css.js.map +0 -1
  175. package/dist-es/mega-menu/MegaMenuItemContent.js +0 -21
  176. package/dist-es/mega-menu/MegaMenuItemContent.js.map +0 -1
  177. package/dist-es/mega-menu/MegaMenuSection.css.js +0 -4
  178. package/dist-es/mega-menu/MegaMenuSection.css.js.map +0 -1
  179. package/dist-es/mega-menu/MegaMenuSection.js.map +0 -1
  180. package/dist-es/mega-menu/useMegaMenuKeyboard.js +0 -205
  181. package/dist-es/mega-menu/useMegaMenuKeyboard.js.map +0 -1
  182. package/dist-es/utils/deprecatedExport.js +0 -27
  183. package/dist-es/utils/deprecatedExport.js.map +0 -1
  184. package/dist-types/calendar/index.d.ts +0 -13
  185. package/dist-types/date-input/index.d.ts +0 -3
  186. package/dist-types/localization-provider/index.d.ts +0 -9
  187. package/dist-types/mega-menu/MegaMenuHeader.d.ts +0 -8
  188. package/dist-types/mega-menu/MegaMenuItem.d.ts +0 -12
  189. package/dist-types/mega-menu/MegaMenuItemContent.d.ts +0 -8
  190. package/dist-types/mega-menu/MegaMenuSection.d.ts +0 -8
  191. package/dist-types/mega-menu/useMegaMenuKeyboard.d.ts +0 -30
@@ -1,205 +0,0 @@
1
- import { useMemo } from 'react';
2
-
3
- const COLUMN_SELECTOR = "[data-mega-menu-column]";
4
- const ITEM_SELECTOR = "[data-mega-menu-item]";
5
- const FOCUSABLE_SELECTOR = 'a[href], button:not([disabled]), [tabindex]:not([tabindex="-1"])';
6
- function getColumnItems(column) {
7
- const marked = Array.from(
8
- column.querySelectorAll(ITEM_SELECTOR)
9
- );
10
- if (marked.length > 0) return marked;
11
- return Array.from(column.querySelectorAll(FOCUSABLE_SELECTOR));
12
- }
13
- function buildGrid(panel) {
14
- const columns = new Set(panel.querySelectorAll(COLUMN_SELECTOR));
15
- const grid = [];
16
- const processedColumns = /* @__PURE__ */ new Set();
17
- const all = panel.querySelectorAll(
18
- `${COLUMN_SELECTOR}, ${ITEM_SELECTOR}`
19
- );
20
- for (const el of all) {
21
- if (columns.has(el) && !processedColumns.has(el)) {
22
- processedColumns.add(el);
23
- const items = getColumnItems(el);
24
- if (items.length > 0) grid.push(items);
25
- } else if (el.matches(ITEM_SELECTOR)) {
26
- const parentCol = el.closest(COLUMN_SELECTOR);
27
- if (!parentCol || !columns.has(parentCol)) {
28
- grid.push([el]);
29
- }
30
- }
31
- }
32
- return grid;
33
- }
34
- function findPosition(grid, el) {
35
- for (let col = 0; col < grid.length; col++) {
36
- const row = grid[col].indexOf(el);
37
- if (row !== -1) return { col, row };
38
- }
39
- return null;
40
- }
41
- function focusTrigger(context) {
42
- const reference = context.elements.reference;
43
- const focusable = (reference == null ? void 0 : reference.querySelector(FOCUSABLE_SELECTOR)) ?? reference;
44
- focusable == null ? void 0 : focusable.focus();
45
- }
46
- function focusNextAfterPanel(context, panel) {
47
- var _a, _b;
48
- const reference = context.elements.reference;
49
- const refFocusable = (reference == null ? void 0 : reference.querySelector(FOCUSABLE_SELECTOR)) ?? reference;
50
- const nextSibling = (_b = (_a = refFocusable == null ? void 0 : refFocusable.closest("li")) == null ? void 0 : _a.nextElementSibling) == null ? void 0 : _b.querySelector(FOCUSABLE_SELECTOR);
51
- const nextOutside = nextSibling || (() => {
52
- const allFocusable = Array.from(
53
- panel.ownerDocument.querySelectorAll(FOCUSABLE_SELECTOR)
54
- ).filter((el) => !panel.contains(el));
55
- const idx = refFocusable ? allFocusable.indexOf(refFocusable) : -1;
56
- return idx >= 0 ? allFocusable[idx + 1] : void 0;
57
- })();
58
- if (nextOutside) {
59
- const view = panel.ownerDocument.defaultView;
60
- view == null ? void 0 : view.requestAnimationFrame(() => {
61
- view == null ? void 0 : view.requestAnimationFrame(() => {
62
- nextOutside.focus();
63
- });
64
- });
65
- }
66
- }
67
- function useMegaMenuKeyboard(context, props = {}) {
68
- const { enabled = true } = props;
69
- const { open, onOpenChange } = context;
70
- return useMemo(() => {
71
- if (!enabled) {
72
- return {};
73
- }
74
- return {
75
- reference: {
76
- onKeyDown(event) {
77
- if (event.key === "ArrowDown" && open) {
78
- event.preventDefault();
79
- const floating = context.elements.floating;
80
- if (floating instanceof HTMLElement) {
81
- focusFirstItem(floating);
82
- }
83
- }
84
- }
85
- },
86
- floating: {
87
- onKeyDown(event) {
88
- var _a, _b, _c, _d;
89
- if (!open) return;
90
- const panel = event.currentTarget;
91
- const target = event.target;
92
- const focusedItem = target.closest(ITEM_SELECTOR) ?? target.closest(FOCUSABLE_SELECTOR);
93
- if (!focusedItem) return;
94
- const grid = buildGrid(panel);
95
- const pos = findPosition(grid, focusedItem);
96
- if (!pos) return;
97
- const allItems = grid.flat();
98
- const linearIndex = allItems.indexOf(focusedItem);
99
- switch (event.key) {
100
- case "ArrowDown": {
101
- event.preventDefault();
102
- const next = pos.row + 1;
103
- if (next < grid[pos.col].length) {
104
- grid[pos.col][next].focus();
105
- } else {
106
- const nextCol = pos.col + 1;
107
- if (nextCol < grid.length) {
108
- grid[nextCol][0].focus();
109
- }
110
- }
111
- break;
112
- }
113
- case "ArrowUp": {
114
- event.preventDefault();
115
- if (pos.row > 0) {
116
- grid[pos.col][pos.row - 1].focus();
117
- } else {
118
- const prevCol = pos.col - 1;
119
- if (prevCol >= 0) {
120
- grid[prevCol][grid[prevCol].length - 1].focus();
121
- } else {
122
- focusTrigger(context);
123
- }
124
- }
125
- break;
126
- }
127
- case "ArrowRight": {
128
- event.preventDefault();
129
- const nextCol = pos.col + 1;
130
- if (nextCol < grid.length) {
131
- grid[nextCol][0].focus();
132
- } else {
133
- const reference = context.elements.reference;
134
- const trigger = (reference == null ? void 0 : reference.querySelector(FOCUSABLE_SELECTOR)) ?? reference;
135
- const li = trigger == null ? void 0 : trigger.closest("li");
136
- const nextSibling = (li == null ? void 0 : li.nextElementSibling) instanceof HTMLElement ? li.nextElementSibling.querySelector(
137
- FOCUSABLE_SELECTOR
138
- ) : null;
139
- if (nextSibling) {
140
- onOpenChange(false);
141
- nextSibling.focus();
142
- }
143
- }
144
- break;
145
- }
146
- case "ArrowLeft": {
147
- event.preventDefault();
148
- const prevCol = pos.col - 1;
149
- if (prevCol >= 0) {
150
- grid[prevCol][0].focus();
151
- } else {
152
- focusTrigger(context);
153
- }
154
- break;
155
- }
156
- case "Tab": {
157
- event.preventDefault();
158
- if (event.shiftKey) {
159
- if (linearIndex === 0) {
160
- focusTrigger(context);
161
- } else {
162
- (_a = allItems[linearIndex - 1]) == null ? void 0 : _a.focus();
163
- }
164
- } else {
165
- if (linearIndex === allItems.length - 1) {
166
- onOpenChange(false);
167
- focusNextAfterPanel(context, panel);
168
- } else {
169
- (_b = allItems[linearIndex + 1]) == null ? void 0 : _b.focus();
170
- }
171
- }
172
- break;
173
- }
174
- case "Home": {
175
- event.preventDefault();
176
- (_c = grid[pos.col][0]) == null ? void 0 : _c.focus();
177
- break;
178
- }
179
- case "End": {
180
- event.preventDefault();
181
- (_d = grid[pos.col][grid[pos.col].length - 1]) == null ? void 0 : _d.focus();
182
- break;
183
- }
184
- }
185
- }
186
- }
187
- };
188
- }, [enabled, open, context, onOpenChange]);
189
- }
190
- function focusFirstItem(panel, attempt = 0) {
191
- var _a;
192
- const grid = buildGrid(panel);
193
- const firstItem = (_a = grid[0]) == null ? void 0 : _a[0];
194
- if (firstItem) {
195
- firstItem.focus();
196
- return;
197
- }
198
- const view = panel.ownerDocument.defaultView;
199
- if (attempt < 3 && view) {
200
- view.requestAnimationFrame(() => focusFirstItem(panel, attempt + 1));
201
- }
202
- }
203
-
204
- export { FOCUSABLE_SELECTOR, focusFirstItem, useMegaMenuKeyboard };
205
- //# sourceMappingURL=useMegaMenuKeyboard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useMegaMenuKeyboard.js","sources":["../src/mega-menu/useMegaMenuKeyboard.ts"],"sourcesContent":["import type { ElementProps, FloatingRootContext } from \"@floating-ui/react\";\nimport { useMemo } from \"react\";\n\nconst COLUMN_SELECTOR = \"[data-mega-menu-column]\";\nconst ITEM_SELECTOR = \"[data-mega-menu-item]\";\nexport const FOCUSABLE_SELECTOR =\n 'a[href], button:not([disabled]), [tabindex]:not([tabindex=\"-1\"])';\n\n/**\n * Get navigable items within a column.\n * Prefers explicitly marked items (`data-mega-menu-item`), falling back\n * to all focusable elements when no marked items are found.\n */\nfunction getColumnItems(column: HTMLElement): HTMLElement[] {\n const marked = Array.from(\n column.querySelectorAll<HTMLElement>(ITEM_SELECTOR),\n );\n if (marked.length > 0) return marked;\n return Array.from(column.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR));\n}\n\n/**\n * Build a 2D grid of navigable items from the panel DOM.\n * Each column is a `[data-mega-menu-column]` wrapper; items within each\n * column are discovered via `getColumnItems`.\n * Items not inside any column (orphans) are inserted at their DOM position\n * as single-item columns so keyboard navigation follows visual order.\n */\nfunction buildGrid(panel: HTMLElement): HTMLElement[][] {\n const columns = new Set(panel.querySelectorAll<HTMLElement>(COLUMN_SELECTOR));\n const grid: HTMLElement[][] = [];\n const processedColumns = new Set<HTMLElement>();\n\n // Walk columns and items in DOM order so orphans are interleaved correctly.\n const all = panel.querySelectorAll<HTMLElement>(\n `${COLUMN_SELECTOR}, ${ITEM_SELECTOR}`,\n );\n\n for (const el of all) {\n if (columns.has(el) && !processedColumns.has(el)) {\n processedColumns.add(el);\n const items = getColumnItems(el);\n if (items.length > 0) grid.push(items);\n } else if (el.matches(ITEM_SELECTOR)) {\n const parentCol = el.closest(COLUMN_SELECTOR);\n if (!parentCol || !columns.has(parentCol as HTMLElement)) {\n grid.push([el]);\n }\n }\n }\n\n return grid;\n}\n\nfunction findPosition(\n grid: HTMLElement[][],\n el: HTMLElement,\n): { col: number; row: number } | null {\n for (let col = 0; col < grid.length; col++) {\n const row = grid[col].indexOf(el);\n if (row !== -1) return { col, row };\n }\n return null;\n}\n\nfunction focusTrigger(context: FloatingRootContext) {\n const reference = context.elements.reference as HTMLElement | null;\n const focusable =\n reference?.querySelector<HTMLElement>(FOCUSABLE_SELECTOR) ?? reference;\n focusable?.focus();\n}\n\nfunction focusNextAfterPanel(context: FloatingRootContext, panel: HTMLElement) {\n const reference = context.elements.reference as HTMLElement | null;\n const refFocusable =\n reference?.querySelector<HTMLElement>(FOCUSABLE_SELECTOR) ?? reference;\n\n const nextSibling = refFocusable\n ?.closest(\"li\")\n ?.nextElementSibling?.querySelector<HTMLElement>(FOCUSABLE_SELECTOR);\n\n const nextOutside =\n nextSibling ||\n (() => {\n const allFocusable = Array.from(\n panel.ownerDocument.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR),\n ).filter((el) => !panel.contains(el));\n const idx = refFocusable ? allFocusable.indexOf(refFocusable) : -1;\n return idx >= 0 ? allFocusable[idx + 1] : undefined;\n })();\n\n if (nextOutside) {\n const view = panel.ownerDocument.defaultView;\n view?.requestAnimationFrame(() => {\n view?.requestAnimationFrame(() => {\n nextOutside.focus();\n });\n });\n }\n}\n\nexport interface UseMegaMenuKeyboardProps {\n /**\n * Whether the interaction is enabled.\n * @default true\n */\n enabled?: boolean;\n}\n\n/**\n * Floating-ui custom interaction hook for mega menu grid keyboard navigation.\n *\n * Returns `ElementProps` that get merged via `useInteractions`, handling\n * keyboard events on both the reference (trigger) and floating (panel) elements.\n *\n * - **↑ / ↓** move within the current column.\n * - **← / →** jump to the top of the previous / next column.\n * - **Tab / Shift+Tab** move linearly through every item.\n * - **Home / End** jump to the first / last item in the column.\n * - **↑ from the first item** or **← from the first column** returns\n * focus to the trigger.\n * - **→ from the last column** closes the panel and moves focus to the\n * next sibling trigger.\n */\nexport function useMegaMenuKeyboard(\n context: FloatingRootContext,\n props: UseMegaMenuKeyboardProps = {},\n): ElementProps {\n const { enabled = true } = props;\n const { open, onOpenChange } = context;\n\n return useMemo(() => {\n if (!enabled) {\n return {};\n }\n\n return {\n reference: {\n onKeyDown(event: React.KeyboardEvent) {\n if (event.key === \"ArrowDown\" && open) {\n event.preventDefault();\n const floating = context.elements.floating;\n if (floating instanceof HTMLElement) {\n focusFirstItem(floating);\n }\n }\n },\n },\n floating: {\n onKeyDown(event: React.KeyboardEvent) {\n if (!open) return;\n\n const panel = event.currentTarget as HTMLElement;\n const target = event.target as HTMLElement;\n\n const focusedItem =\n target.closest<HTMLElement>(ITEM_SELECTOR) ??\n target.closest<HTMLElement>(FOCUSABLE_SELECTOR);\n if (!focusedItem) return;\n\n const grid = buildGrid(panel);\n const pos = findPosition(grid, focusedItem);\n if (!pos) return;\n\n const allItems = grid.flat();\n const linearIndex = allItems.indexOf(focusedItem);\n\n switch (event.key) {\n case \"ArrowDown\": {\n event.preventDefault();\n const next = pos.row + 1;\n if (next < grid[pos.col].length) {\n grid[pos.col][next].focus();\n } else {\n const nextCol = pos.col + 1;\n if (nextCol < grid.length) {\n grid[nextCol][0].focus();\n }\n }\n break;\n }\n\n case \"ArrowUp\": {\n event.preventDefault();\n if (pos.row > 0) {\n grid[pos.col][pos.row - 1].focus();\n } else {\n const prevCol = pos.col - 1;\n if (prevCol >= 0) {\n grid[prevCol][grid[prevCol].length - 1].focus();\n } else {\n focusTrigger(context);\n }\n }\n break;\n }\n\n case \"ArrowRight\": {\n event.preventDefault();\n const nextCol = pos.col + 1;\n if (nextCol < grid.length) {\n grid[nextCol][0].focus();\n } else {\n // On the last column — close panel and move to next trigger\n const reference = context.elements\n .reference as HTMLElement | null;\n const trigger =\n reference?.querySelector<HTMLElement>(FOCUSABLE_SELECTOR) ??\n reference;\n const li = trigger?.closest(\"li\");\n const nextSibling =\n li?.nextElementSibling instanceof HTMLElement\n ? li.nextElementSibling.querySelector<HTMLElement>(\n FOCUSABLE_SELECTOR,\n )\n : null;\n if (nextSibling) {\n onOpenChange(false);\n nextSibling.focus();\n }\n }\n break;\n }\n\n case \"ArrowLeft\": {\n event.preventDefault();\n const prevCol = pos.col - 1;\n if (prevCol >= 0) {\n grid[prevCol][0].focus();\n } else {\n focusTrigger(context);\n }\n break;\n }\n\n case \"Tab\": {\n event.preventDefault();\n if (event.shiftKey) {\n if (linearIndex === 0) {\n focusTrigger(context);\n } else {\n allItems[linearIndex - 1]?.focus();\n }\n } else {\n if (linearIndex === allItems.length - 1) {\n onOpenChange(false);\n focusNextAfterPanel(context, panel);\n } else {\n allItems[linearIndex + 1]?.focus();\n }\n }\n break;\n }\n\n case \"Home\": {\n event.preventDefault();\n grid[pos.col][0]?.focus();\n break;\n }\n\n case \"End\": {\n event.preventDefault();\n grid[pos.col][grid[pos.col].length - 1]?.focus();\n break;\n }\n\n default:\n break;\n }\n },\n },\n };\n }, [enabled, open, context, onOpenChange]);\n}\n\n/**\n * Focus the first navigable item inside a mega menu panel.\n * Retries with `requestAnimationFrame` if content has not yet rendered.\n */\nexport function focusFirstItem(panel: HTMLElement, attempt = 0): void {\n const grid = buildGrid(panel);\n const firstItem = grid[0]?.[0];\n\n if (firstItem) {\n firstItem.focus();\n return;\n }\n\n const view = panel.ownerDocument.defaultView;\n if (attempt < 3 && view) {\n view.requestAnimationFrame(() => focusFirstItem(panel, attempt + 1));\n }\n}\n"],"names":[],"mappings":";;AAGA,MAAM,eAAA,GAAkB,yBAAA;AACxB,MAAM,aAAA,GAAgB,uBAAA;AACf,MAAM,kBAAA,GACX;AAOF,SAAS,eAAe,MAAA,EAAoC;AAC1D,EAAA,MAAM,SAAS,KAAA,CAAM,IAAA;AAAA,IACnB,MAAA,CAAO,iBAA8B,aAAa;AAAA,GACpD;AACA,EAAA,IAAI,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,OAAO,MAAA;AAC9B,EAAA,OAAO,KAAA,CAAM,IAAA,CAAK,MAAA,CAAO,gBAAA,CAA8B,kBAAkB,CAAC,CAAA;AAC5E;AASA,SAAS,UAAU,KAAA,EAAqC;AACtD,EAAA,MAAM,UAAU,IAAI,GAAA,CAAI,KAAA,CAAM,gBAAA,CAA8B,eAAe,CAAC,CAAA;AAC5E,EAAA,MAAM,OAAwB,EAAC;AAC/B,EAAA,MAAM,gBAAA,uBAAuB,GAAA,EAAiB;AAG9C,EAAA,MAAM,MAAM,KAAA,CAAM,gBAAA;AAAA,IAChB,CAAA,EAAG,eAAe,CAAA,EAAA,EAAK,aAAa,CAAA;AAAA,GACtC;AAEA,EAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AACpB,IAAA,IAAI,OAAA,CAAQ,IAAI,EAAE,CAAA,IAAK,CAAC,gBAAA,CAAiB,GAAA,CAAI,EAAE,CAAA,EAAG;AAChD,MAAA,gBAAA,CAAiB,IAAI,EAAE,CAAA;AACvB,MAAA,MAAM,KAAA,GAAQ,eAAe,EAAE,CAAA;AAC/B,MAAA,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG,IAAA,CAAK,KAAK,KAAK,CAAA;AAAA,IACvC,CAAA,MAAA,IAAW,EAAA,CAAG,OAAA,CAAQ,aAAa,CAAA,EAAG;AACpC,MAAA,MAAM,SAAA,GAAY,EAAA,CAAG,OAAA,CAAQ,eAAe,CAAA;AAC5C,MAAA,IAAI,CAAC,SAAA,IAAa,CAAC,OAAA,CAAQ,GAAA,CAAI,SAAwB,CAAA,EAAG;AACxD,QAAA,IAAA,CAAK,IAAA,CAAK,CAAC,EAAE,CAAC,CAAA;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,YAAA,CACP,MACA,EAAA,EACqC;AACrC,EAAA,KAAA,IAAS,GAAA,GAAM,CAAA,EAAG,GAAA,GAAM,IAAA,CAAK,QAAQ,GAAA,EAAA,EAAO;AAC1C,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAG,CAAA,CAAE,QAAQ,EAAE,CAAA;AAChC,IAAA,IAAI,GAAA,KAAQ,EAAA,EAAI,OAAO,EAAE,KAAK,GAAA,EAAI;AAAA,EACpC;AACA,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,aAAa,OAAA,EAA8B;AAClD,EAAA,MAAM,SAAA,GAAY,QAAQ,QAAA,CAAS,SAAA;AACnC,EAAA,MAAM,SAAA,GAAA,CACJ,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,aAAA,CAA2B,kBAAA,CAAA,KAAuB,SAAA;AAC/D,EAAA,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,KAAA,EAAA;AACb;AAEA,SAAS,mBAAA,CAAoB,SAA8B,KAAA,EAAoB;AAxE/E,EAAA,IAAA,EAAA,EAAA,EAAA;AAyEE,EAAA,MAAM,SAAA,GAAY,QAAQ,QAAA,CAAS,SAAA;AACnC,EAAA,MAAM,YAAA,GAAA,CACJ,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,aAAA,CAA2B,kBAAA,CAAA,KAAuB,SAAA;AAE/D,EAAA,MAAM,eAAc,EAAA,GAAA,CAAA,EAAA,GAAA,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAChB,OAAA,CAAQ,UADQ,IAAA,GAAA,MAAA,GAAA,EAAA,CAEhB,kBAAA,KAFgB,mBAEI,aAAA,CAA2B,kBAAA,CAAA;AAEnD,EAAA,MAAM,WAAA,GACJ,gBACC,MAAM;AACL,IAAA,MAAM,eAAe,KAAA,CAAM,IAAA;AAAA,MACzB,KAAA,CAAM,aAAA,CAAc,gBAAA,CAA8B,kBAAkB;AAAA,KACtE,CAAE,OAAO,CAAC,EAAA,KAAO,CAAC,KAAA,CAAM,QAAA,CAAS,EAAE,CAAC,CAAA;AACpC,IAAA,MAAM,GAAA,GAAM,YAAA,GAAe,YAAA,CAAa,OAAA,CAAQ,YAAY,CAAA,GAAI,EAAA;AAChE,IAAA,OAAO,GAAA,IAAO,CAAA,GAAI,YAAA,CAAa,GAAA,GAAM,CAAC,CAAA,GAAI,MAAA;AAAA,EAC5C,CAAA,GAAG;AAEL,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,MAAM,IAAA,GAAO,MAAM,aAAA,CAAc,WAAA;AACjC,IAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,sBAAsB,MAAM;AAChC,MAAA,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAM,sBAAsB,MAAM;AAChC,QAAA,WAAA,CAAY,KAAA,EAAM;AAAA,MACpB,CAAA,CAAA;AAAA,IACF,CAAA,CAAA;AAAA,EACF;AACF;AAyBO,SAAS,mBAAA,CACd,OAAA,EACA,KAAA,GAAkC,EAAC,EACrB;AACd,EAAA,MAAM,EAAE,OAAA,GAAU,IAAA,EAAK,GAAI,KAAA;AAC3B,EAAA,MAAM,EAAE,IAAA,EAAM,YAAA,EAAa,GAAI,OAAA;AAE/B,EAAA,OAAO,QAAQ,MAAM;AACnB,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,OAAO;AAAA,MACL,SAAA,EAAW;AAAA,QACT,UAAU,KAAA,EAA4B;AACpC,UAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,WAAA,IAAe,IAAA,EAAM;AACrC,YAAA,KAAA,CAAM,cAAA,EAAe;AACrB,YAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,CAAS,QAAA;AAClC,YAAA,IAAI,oBAAoB,WAAA,EAAa;AACnC,cAAA,cAAA,CAAe,QAAQ,CAAA;AAAA,YACzB;AAAA,UACF;AAAA,QACF;AAAA,OACF;AAAA,MACA,QAAA,EAAU;AAAA,QACR,UAAU,KAAA,EAA4B;AArJ9C,UAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAsJU,UAAA,IAAI,CAAC,IAAA,EAAM;AAEX,UAAA,MAAM,QAAQ,KAAA,CAAM,aAAA;AACpB,UAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AAErB,UAAA,MAAM,cACJ,MAAA,CAAO,OAAA,CAAqB,aAAa,CAAA,IACzC,MAAA,CAAO,QAAqB,kBAAkB,CAAA;AAChD,UAAA,IAAI,CAAC,WAAA,EAAa;AAElB,UAAA,MAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,UAAA,MAAM,GAAA,GAAM,YAAA,CAAa,IAAA,EAAM,WAAW,CAAA;AAC1C,UAAA,IAAI,CAAC,GAAA,EAAK;AAEV,UAAA,MAAM,QAAA,GAAW,KAAK,IAAA,EAAK;AAC3B,UAAA,MAAM,WAAA,GAAc,QAAA,CAAS,OAAA,CAAQ,WAAW,CAAA;AAEhD,UAAA,QAAQ,MAAM,GAAA;AAAK,YACjB,KAAK,WAAA,EAAa;AAChB,cAAA,KAAA,CAAM,cAAA,EAAe;AACrB,cAAA,MAAM,IAAA,GAAO,IAAI,GAAA,GAAM,CAAA;AACvB,cAAA,IAAI,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,GAAG,EAAE,MAAA,EAAQ;AAC/B,gBAAA,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,CAAE,IAAI,EAAE,KAAA,EAAM;AAAA,cAC5B,CAAA,MAAO;AACL,gBAAA,MAAM,OAAA,GAAU,IAAI,GAAA,GAAM,CAAA;AAC1B,gBAAA,IAAI,OAAA,GAAU,KAAK,MAAA,EAAQ;AACzB,kBAAA,IAAA,CAAK,OAAO,CAAA,CAAE,CAAC,CAAA,CAAE,KAAA,EAAM;AAAA,gBACzB;AAAA,cACF;AACA,cAAA;AAAA,YACF;AAAA,YAEA,KAAK,SAAA,EAAW;AACd,cAAA,KAAA,CAAM,cAAA,EAAe;AACrB,cAAA,IAAI,GAAA,CAAI,MAAM,CAAA,EAAG;AACf,gBAAA,IAAA,CAAK,IAAI,GAAG,CAAA,CAAE,IAAI,GAAA,GAAM,CAAC,EAAE,KAAA,EAAM;AAAA,cACnC,CAAA,MAAO;AACL,gBAAA,MAAM,OAAA,GAAU,IAAI,GAAA,GAAM,CAAA;AAC1B,gBAAA,IAAI,WAAW,CAAA,EAAG;AAChB,kBAAA,IAAA,CAAK,OAAO,EAAE,IAAA,CAAK,OAAO,EAAE,MAAA,GAAS,CAAC,EAAE,KAAA,EAAM;AAAA,gBAChD,CAAA,MAAO;AACL,kBAAA,YAAA,CAAa,OAAO,CAAA;AAAA,gBACtB;AAAA,cACF;AACA,cAAA;AAAA,YACF;AAAA,YAEA,KAAK,YAAA,EAAc;AACjB,cAAA,KAAA,CAAM,cAAA,EAAe;AACrB,cAAA,MAAM,OAAA,GAAU,IAAI,GAAA,GAAM,CAAA;AAC1B,cAAA,IAAI,OAAA,GAAU,KAAK,MAAA,EAAQ;AACzB,gBAAA,IAAA,CAAK,OAAO,CAAA,CAAE,CAAC,CAAA,CAAE,KAAA,EAAM;AAAA,cACzB,CAAA,MAAO;AAEL,gBAAA,MAAM,SAAA,GAAY,QAAQ,QAAA,CACvB,SAAA;AACH,gBAAA,MAAM,OAAA,GAAA,CACJ,SAAA,IAAA,IAAA,GAAA,MAAA,GAAA,SAAA,CAAW,aAAA,CAA2B,kBAAA,CAAA,KACtC,SAAA;AACF,gBAAA,MAAM,EAAA,GAAK,mCAAS,OAAA,CAAQ,IAAA,CAAA;AAC5B,gBAAA,MAAM,WAAA,GAAA,CACJ,EAAA,IAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAI,kBAAA,aAA8B,WAAA,GAC9B,GAAG,kBAAA,CAAmB,aAAA;AAAA,kBACpB;AAAA,iBACF,GACA,IAAA;AACN,gBAAA,IAAI,WAAA,EAAa;AACf,kBAAA,YAAA,CAAa,KAAK,CAAA;AAClB,kBAAA,WAAA,CAAY,KAAA,EAAM;AAAA,gBACpB;AAAA,cACF;AACA,cAAA;AAAA,YACF;AAAA,YAEA,KAAK,WAAA,EAAa;AAChB,cAAA,KAAA,CAAM,cAAA,EAAe;AACrB,cAAA,MAAM,OAAA,GAAU,IAAI,GAAA,GAAM,CAAA;AAC1B,cAAA,IAAI,WAAW,CAAA,EAAG;AAChB,gBAAA,IAAA,CAAK,OAAO,CAAA,CAAE,CAAC,CAAA,CAAE,KAAA,EAAM;AAAA,cACzB,CAAA,MAAO;AACL,gBAAA,YAAA,CAAa,OAAO,CAAA;AAAA,cACtB;AACA,cAAA;AAAA,YACF;AAAA,YAEA,KAAK,KAAA,EAAO;AACV,cAAA,KAAA,CAAM,cAAA,EAAe;AACrB,cAAA,IAAI,MAAM,QAAA,EAAU;AAClB,gBAAA,IAAI,gBAAgB,CAAA,EAAG;AACrB,kBAAA,YAAA,CAAa,OAAO,CAAA;AAAA,gBACtB,CAAA,MAAO;AACL,kBAAA,CAAA,EAAA,GAAA,QAAA,CAAS,WAAA,GAAc,CAAC,CAAA,KAAxB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA2B,KAAA,EAAA;AAAA,gBAC7B;AAAA,cACF,CAAA,MAAO;AACL,gBAAA,IAAI,WAAA,KAAgB,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG;AACvC,kBAAA,YAAA,CAAa,KAAK,CAAA;AAClB,kBAAA,mBAAA,CAAoB,SAAS,KAAK,CAAA;AAAA,gBACpC,CAAA,MAAO;AACL,kBAAA,CAAA,EAAA,GAAA,QAAA,CAAS,WAAA,GAAc,CAAC,CAAA,KAAxB,IAAA,GAAA,MAAA,GAAA,EAAA,CAA2B,KAAA,EAAA;AAAA,gBAC7B;AAAA,cACF;AACA,cAAA;AAAA,YACF;AAAA,YAEA,KAAK,MAAA,EAAQ;AACX,cAAA,KAAA,CAAM,cAAA,EAAe;AACrB,cAAA,CAAA,EAAA,GAAA,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,CAAE,CAAC,MAAf,IAAA,GAAA,MAAA,GAAA,EAAA,CAAkB,KAAA,EAAA;AAClB,cAAA;AAAA,YACF;AAAA,YAEA,KAAK,KAAA,EAAO;AACV,cAAA,KAAA,CAAM,cAAA,EAAe;AACrB,cAAA,CAAA,EAAA,GAAA,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,CAAE,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,CAAE,MAAA,GAAS,CAAC,CAAA,KAAtC,IAAA,GAAA,MAAA,GAAA,EAAA,CAAyC,KAAA,EAAA;AACzC,cAAA;AAAA,YACF;AAGE;AACJ,QACF;AAAA;AACF,KACF;AAAA,EACF,GAAG,CAAC,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS,YAAY,CAAC,CAAA;AAC3C;AAMO,SAAS,cAAA,CAAe,KAAA,EAAoB,OAAA,GAAU,CAAA,EAAS;AAvRtE,EAAA,IAAA,EAAA;AAwRE,EAAA,MAAM,IAAA,GAAO,UAAU,KAAK,CAAA;AAC5B,EAAA,MAAM,SAAA,GAAA,CAAY,EAAA,GAAA,IAAA,CAAK,CAAC,CAAA,KAAN,IAAA,GAAA,MAAA,GAAA,EAAA,CAAU,CAAA,CAAA;AAE5B,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,SAAA,CAAU,KAAA,EAAM;AAChB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,IAAA,GAAO,MAAM,aAAA,CAAc,WAAA;AACjC,EAAA,IAAI,OAAA,GAAU,KAAK,IAAA,EAAM;AACvB,IAAA,IAAA,CAAK,sBAAsB,MAAM,cAAA,CAAe,KAAA,EAAO,OAAA,GAAU,CAAC,CAAC,CAAA;AAAA,EACrE;AACF;;;;"}
@@ -1,27 +0,0 @@
1
- import { forwardRef, createElement } from 'react';
2
-
3
- const warnedKeys = /* @__PURE__ */ new Set();
4
- const warnOnce = (key, message) => {
5
- if (process.env.NODE_ENV === "production") return;
6
- if (warnedKeys.has(key)) return;
7
- warnedKeys.add(key);
8
- console.warn(message);
9
- };
10
- function deprecatedComponent(Component, displayName, deprecationKey, message) {
11
- const Wrapped = forwardRef((props, ref) => {
12
- warnOnce(deprecationKey, message);
13
- return createElement(Component, { ...props, ref });
14
- });
15
- Wrapped.displayName = displayName;
16
- return Wrapped;
17
- }
18
- function deprecatedFunction(hook, deprecationKey, message) {
19
- const wrapped = (...args) => {
20
- warnOnce(deprecationKey, message);
21
- return hook(...args);
22
- };
23
- return wrapped;
24
- }
25
-
26
- export { deprecatedComponent, deprecatedFunction };
27
- //# sourceMappingURL=deprecatedExport.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deprecatedExport.js","sources":["../src/utils/deprecatedExport.ts"],"sourcesContent":["import { type ComponentType, createElement, forwardRef } from \"react\";\n\nconst warnedKeys = new Set<string>();\n\nconst warnOnce = (key: string, message: string) => {\n if (process.env.NODE_ENV === \"production\") return;\n if (warnedKeys.has(key)) return;\n warnedKeys.add(key);\n // eslint-disable-next-line no-console\n console.warn(message);\n};\n\n/**\n * Wrap a component so that a deprecation warning is logged on first render\n * instead of at import time.\n */\nexport function deprecatedComponent<P extends object>(\n Component: ComponentType<P>,\n displayName: string,\n deprecationKey: string,\n message: string,\n) {\n const Wrapped = forwardRef<unknown, P>((props, ref) => {\n warnOnce(deprecationKey, message);\n return createElement(Component, { ...props, ref } as P);\n });\n Wrapped.displayName = displayName;\n return Wrapped as unknown as typeof Component;\n}\n\n/**\n * Wrap a hook or plain function so that a deprecation warning is logged on\n * first call instead of at import time.\n */\nexport function deprecatedFunction<T extends (...args: any[]) => any>(\n hook: T,\n deprecationKey: string,\n message: string,\n): T {\n const wrapped = (...args: any[]) => {\n warnOnce(deprecationKey, message);\n return hook(...args);\n };\n return wrapped as T;\n}\n"],"names":[],"mappings":";;AAEA,MAAM,UAAA,uBAAiB,GAAA,EAAY;AAEnC,MAAM,QAAA,GAAW,CAAC,GAAA,EAAa,OAAA,KAAoB;AACjD,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AAC3C,EAAA,IAAI,UAAA,CAAW,GAAA,CAAI,GAAG,CAAA,EAAG;AACzB,EAAA,UAAA,CAAW,IAAI,GAAG,CAAA;AAElB,EAAA,OAAA,CAAQ,KAAK,OAAO,CAAA;AACtB,CAAA;AAMO,SAAS,mBAAA,CACd,SAAA,EACA,WAAA,EACA,cAAA,EACA,OAAA,EACA;AACA,EAAA,MAAM,OAAA,GAAU,UAAA,CAAuB,CAAC,KAAA,EAAO,GAAA,KAAQ;AACrD,IAAA,QAAA,CAAS,gBAAgB,OAAO,CAAA;AAChC,IAAA,OAAO,cAAc,SAAA,EAAW,EAAE,GAAG,KAAA,EAAO,KAAU,CAAA;AAAA,EACxD,CAAC,CAAA;AACD,EAAA,OAAA,CAAQ,WAAA,GAAc,WAAA;AACtB,EAAA,OAAO,OAAA;AACT;AAMO,SAAS,kBAAA,CACd,IAAA,EACA,cAAA,EACA,OAAA,EACG;AACH,EAAA,MAAM,OAAA,GAAU,IAAI,IAAA,KAAgB;AAClC,IAAA,QAAA,CAAS,gBAAgB,OAAO,CAAA;AAChC,IAAA,OAAO,IAAA,CAAK,GAAG,IAAI,CAAA;AAAA,EACrB,CAAA;AACA,EAAA,OAAO,OAAA;AACT;;;;"}
@@ -1,13 +0,0 @@
1
- import type { DateFrameworkType } from "@salt-ds/date-adapters";
2
- import { useCalendar as _useCalendar, useCalendarDay as _useCalendarDay, useCalendarSelection as _useCalendarSelection, useCalendarSelectionDay as _useCalendarSelectionDay, useDateSelectionAnnouncer as _useDateSelectionAnnouncer, type DateRangeSelection } from "@salt-ds/date-components";
3
- export declare const Calendar: import("react").ComponentType<import("@salt-ds/date-components").CalendarProps & import("react").RefAttributes<HTMLDivElement>>;
4
- export declare const CalendarGrid: import("react").ComponentType<import("@salt-ds/date-components").CalendarGridProps & import("react").RefAttributes<HTMLDivElement>>;
5
- export declare const CalendarNavigation: import("react").ComponentType<Omit<import("@salt-ds/date-components").CalendarNavigationProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
6
- export declare const CalendarWeekHeader: import("react").ComponentType<Omit<import("@salt-ds/date-components").CalendarWeekHeaderProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
7
- export declare const useCalendar: typeof _useCalendar;
8
- export declare const useCalendarDay: typeof _useCalendarDay;
9
- export declare const useCalendarSelection: typeof _useCalendarSelection;
10
- export declare const useCalendarSelectionDay: typeof _useCalendarSelectionDay;
11
- export declare const useDateSelectionAnnouncer: typeof _useDateSelectionAnnouncer;
12
- export declare function isDateRangeSelection<TDate extends DateFrameworkType = DateFrameworkType>(value: unknown): value is DateRangeSelection<TDate>;
13
- export type { CalendarBaseProps, CalendarDayProps, CalendarGridProps, CalendarMultiselectOffsetProps, CalendarMultiselectRangeProps, CalendarMultiselectSingleProps, CalendarNavigationProps, CalendarOffsetProps, CalendarProps, CalendarRangeProps, CalendarSingleProps, CalendarWeekHeaderProps, CreateAnnouncement, DateRangeSelection, DayStatus, renderCalendarDayProps, SelectionVariant, SingleDateSelection, UseCalendarMultiselectOffsetProps, UseCalendarMultiselectRangeProps, UseCalendarMultiselectSingleProps, UseCalendarOffsetProps, UseCalendarProps, UseCalendarRangeProps, UseCalendarReturn, UseCalendarSelectionBaseProps, UseCalendarSelectionMultiselectOffsetProps, UseCalendarSelectionMultiselectRangeProps, UseCalendarSelectionMultiselectSingleProps, UseCalendarSelectionOffsetProps, UseCalendarSelectionProps, UseCalendarSelectionRangeProps, UseCalendarSelectionSingleProps, UseCalendarSingleProps, useCalendarDayProps, } from "@salt-ds/date-components";
@@ -1,3 +0,0 @@
1
- export declare const DateInputRange: import("react").ComponentType<import("@salt-ds/date-components").DateInputRangeProps & import("react").RefAttributes<HTMLDivElement>>;
2
- export declare const DateInputSingle: import("react").ComponentType<import("@salt-ds/date-components").DateInputSingleProps & import("react").RefAttributes<HTMLDivElement>>;
3
- export type { DateInputRangeDetails, DateInputRangeProps, DateInputRangeValue, DateInputSingleDetails, DateInputSingleProps, DateParserField, } from "@salt-ds/date-components";
@@ -1,9 +0,0 @@
1
- import type { DateFrameworkType } from "@salt-ds/date-adapters";
2
- import { type LocalizationProviderProps, type LocalizationProviderValue } from "@salt-ds/date-components";
3
- export declare function LocalizationProvider<TDate extends DateFrameworkType = DateFrameworkType, TLocale = undefined>(props: LocalizationProviderProps<TDate, TLocale>): import("react/jsx-runtime").JSX.Element;
4
- export declare namespace LocalizationProvider {
5
- var displayName: string;
6
- }
7
- export declare function useLocalization<TDate extends DateFrameworkType = DateFrameworkType>(): LocalizationProviderValue<TDate>;
8
- export type { LocalizationProviderContext as LocalizationProviderContextType, LocalizationProviderProps, LocalizationProviderValue, } from "@salt-ds/date-components";
9
- export { LocalizationProviderContext } from "@salt-ds/date-components";
@@ -1,8 +0,0 @@
1
- import { type ComponentPropsWithoutRef, type ReactNode } from "react";
2
- export interface MegaMenuHeaderProps extends ComponentPropsWithoutRef<"div"> {
3
- /**
4
- * The content of the mega menu header.
5
- */
6
- children?: ReactNode;
7
- }
8
- export declare const MegaMenuHeader: import("react").ForwardRefExoticComponent<MegaMenuHeaderProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -1,12 +0,0 @@
1
- import { type AnchorHTMLAttributes, type ReactNode } from "react";
2
- export interface MegaMenuItemProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
3
- /**
4
- * The content of the mega menu item.
5
- */
6
- children?: ReactNode;
7
- /**
8
- * Href to be passed to the Link element.
9
- */
10
- href?: string;
11
- }
12
- export declare const MegaMenuItem: import("react").ForwardRefExoticComponent<MegaMenuItemProps & import("react").RefAttributes<HTMLLIElement>>;
@@ -1,8 +0,0 @@
1
- import { type ComponentPropsWithoutRef, type ReactNode } from "react";
2
- export interface MegaMenuItemContentProps extends ComponentPropsWithoutRef<"div"> {
3
- /**
4
- * The content of Mega Menu Item.
5
- */
6
- children?: ReactNode;
7
- }
8
- export declare const MegaMenuItemContent: import("react").ForwardRefExoticComponent<MegaMenuItemContentProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -1,8 +0,0 @@
1
- import { type HTMLAttributes, type ReactNode } from "react";
2
- export interface MegaMenuSectionProps extends HTMLAttributes<HTMLDivElement> {
3
- /**
4
- * The content of the mega menu section.
5
- */
6
- children?: ReactNode;
7
- }
8
- export declare const MegaMenuSection: import("react").ForwardRefExoticComponent<MegaMenuSectionProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -1,30 +0,0 @@
1
- import type { ElementProps, FloatingRootContext } from "@floating-ui/react";
2
- export declare const FOCUSABLE_SELECTOR = "a[href], button:not([disabled]), [tabindex]:not([tabindex=\"-1\"])";
3
- export interface UseMegaMenuKeyboardProps {
4
- /**
5
- * Whether the interaction is enabled.
6
- * @default true
7
- */
8
- enabled?: boolean;
9
- }
10
- /**
11
- * Floating-ui custom interaction hook for mega menu grid keyboard navigation.
12
- *
13
- * Returns `ElementProps` that get merged via `useInteractions`, handling
14
- * keyboard events on both the reference (trigger) and floating (panel) elements.
15
- *
16
- * - **↑ / ↓** move within the current column.
17
- * - **← / →** jump to the top of the previous / next column.
18
- * - **Tab / Shift+Tab** move linearly through every item.
19
- * - **Home / End** jump to the first / last item in the column.
20
- * - **↑ from the first item** or **← from the first column** returns
21
- * focus to the trigger.
22
- * - **→ from the last column** closes the panel and moves focus to the
23
- * next sibling trigger.
24
- */
25
- export declare function useMegaMenuKeyboard(context: FloatingRootContext, props?: UseMegaMenuKeyboardProps): ElementProps;
26
- /**
27
- * Focus the first navigable item inside a mega menu panel.
28
- * Retries with `requestAnimationFrame` if content has not yet rendered.
29
- */
30
- export declare function focusFirstItem(panel: HTMLElement, attempt?: number): void;