@proyecto-viviana/solidaria-components 0.3.2 → 0.4.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 (398) hide show
  1. package/dist/ActionBar.js +184 -0
  2. package/dist/ActionBar.js.map +1 -0
  3. package/dist/ActionBar.jsx +128 -0
  4. package/dist/ActionBar.jsx.map +1 -0
  5. package/dist/ActionGroup.js +179 -0
  6. package/dist/ActionGroup.js.map +1 -0
  7. package/dist/ActionGroup.jsx +129 -0
  8. package/dist/ActionGroup.jsx.map +1 -0
  9. package/dist/Alert.js +111 -0
  10. package/dist/Alert.js.map +1 -0
  11. package/dist/Alert.jsx +82 -0
  12. package/dist/Alert.jsx.map +1 -0
  13. package/dist/Autocomplete.js +130 -0
  14. package/dist/Autocomplete.js.map +1 -0
  15. package/dist/Autocomplete.jsx +116 -0
  16. package/dist/Autocomplete.jsx.map +1 -0
  17. package/dist/Breadcrumbs.d.ts.map +1 -1
  18. package/dist/Breadcrumbs.js +334 -0
  19. package/dist/Breadcrumbs.js.map +1 -0
  20. package/dist/Breadcrumbs.jsx +266 -0
  21. package/dist/Breadcrumbs.jsx.map +1 -0
  22. package/dist/Button.d.ts.map +1 -1
  23. package/dist/Button.js +348 -0
  24. package/dist/Button.js.map +1 -0
  25. package/dist/Button.jsx +314 -0
  26. package/dist/Button.jsx.map +1 -0
  27. package/dist/Calendar.d.ts +4 -4
  28. package/dist/Calendar.d.ts.map +1 -1
  29. package/dist/Calendar.js +538 -0
  30. package/dist/Calendar.js.map +1 -0
  31. package/dist/Calendar.jsx +333 -0
  32. package/dist/Calendar.jsx.map +1 -0
  33. package/dist/CalendarPicker.d.ts +33 -0
  34. package/dist/CalendarPicker.d.ts.map +1 -0
  35. package/dist/CalendarPicker.js +44 -0
  36. package/dist/CalendarPicker.js.map +1 -0
  37. package/dist/CalendarPicker.jsx +44 -0
  38. package/dist/CalendarPicker.jsx.map +1 -0
  39. package/dist/Checkbox.d.ts +83 -4
  40. package/dist/Checkbox.d.ts.map +1 -1
  41. package/dist/Checkbox.js +923 -0
  42. package/dist/Checkbox.js.map +1 -0
  43. package/dist/Checkbox.jsx +707 -0
  44. package/dist/Checkbox.jsx.map +1 -0
  45. package/dist/Collection.d.ts.map +1 -1
  46. package/dist/Collection.js +202 -0
  47. package/dist/Collection.js.map +1 -0
  48. package/dist/Collection.jsx +152 -0
  49. package/dist/Collection.jsx.map +1 -0
  50. package/dist/Color.d.ts.map +1 -1
  51. package/dist/Color.js +1720 -0
  52. package/dist/Color.js.map +1 -0
  53. package/dist/Color.jsx +1344 -0
  54. package/dist/Color.jsx.map +1 -0
  55. package/dist/ColorEditor.js +208 -0
  56. package/dist/ColorEditor.js.map +1 -0
  57. package/dist/ColorEditor.jsx +120 -0
  58. package/dist/ColorEditor.jsx.map +1 -0
  59. package/dist/ComboBox.d.ts +4 -4
  60. package/dist/ComboBox.d.ts.map +1 -1
  61. package/dist/ComboBox.js +992 -0
  62. package/dist/ComboBox.js.map +1 -0
  63. package/dist/ComboBox.jsx +714 -0
  64. package/dist/ComboBox.jsx.map +1 -0
  65. package/dist/ContextualHelpTrigger.js +146 -0
  66. package/dist/ContextualHelpTrigger.js.map +1 -0
  67. package/dist/ContextualHelpTrigger.jsx +109 -0
  68. package/dist/ContextualHelpTrigger.jsx.map +1 -0
  69. package/dist/DateField.d.ts +3 -3
  70. package/dist/DateField.d.ts.map +1 -1
  71. package/dist/DateField.js +4 -0
  72. package/dist/DateField.jsx +4 -0
  73. package/dist/DateField2.js +499 -0
  74. package/dist/DateField2.js.map +1 -0
  75. package/dist/DateField2.jsx +317 -0
  76. package/dist/DateField2.jsx.map +1 -0
  77. package/dist/DatePicker.d.ts +4 -4
  78. package/dist/DatePicker.d.ts.map +1 -1
  79. package/dist/DatePicker.js +991 -0
  80. package/dist/DatePicker.js.map +1 -0
  81. package/dist/DatePicker.jsx +682 -0
  82. package/dist/DatePicker.jsx.map +1 -0
  83. package/dist/Dialog.d.ts.map +1 -1
  84. package/dist/Dialog.js +337 -0
  85. package/dist/Dialog.js.map +1 -0
  86. package/dist/Dialog.jsx +192 -0
  87. package/dist/Dialog.jsx.map +1 -0
  88. package/dist/Disclosure.d.ts.map +1 -1
  89. package/dist/Disclosure.js +328 -0
  90. package/dist/Disclosure.js.map +1 -0
  91. package/dist/Disclosure.jsx +230 -0
  92. package/dist/Disclosure.jsx.map +1 -0
  93. package/dist/DragAndDrop.d.ts.map +1 -1
  94. package/dist/DragAndDrop.js +176 -0
  95. package/dist/DragAndDrop.js.map +1 -0
  96. package/dist/DragAndDrop.jsx +160 -0
  97. package/dist/DragAndDrop.jsx.map +1 -0
  98. package/dist/DropZone.d.ts.map +1 -1
  99. package/dist/DropZone.js +189 -0
  100. package/dist/DropZone.js.map +1 -0
  101. package/dist/DropZone.jsx +144 -0
  102. package/dist/DropZone.jsx.map +1 -0
  103. package/dist/FieldError.js +66 -0
  104. package/dist/FieldError.js.map +1 -0
  105. package/dist/FieldError.jsx +47 -0
  106. package/dist/FieldError.jsx.map +1 -0
  107. package/dist/FileTrigger.js +79 -0
  108. package/dist/FileTrigger.js.map +1 -0
  109. package/dist/FileTrigger.jsx +49 -0
  110. package/dist/FileTrigger.jsx.map +1 -0
  111. package/dist/Focusable.js +70 -0
  112. package/dist/Focusable.js.map +1 -0
  113. package/dist/Focusable.jsx +69 -0
  114. package/dist/Focusable.jsx.map +1 -0
  115. package/dist/Form.js +99 -0
  116. package/dist/Form.js.map +1 -0
  117. package/dist/Form.jsx +73 -0
  118. package/dist/Form.jsx.map +1 -0
  119. package/dist/GridList.d.ts +34 -2
  120. package/dist/GridList.d.ts.map +1 -1
  121. package/dist/GridList.js +723 -0
  122. package/dist/GridList.js.map +1 -0
  123. package/dist/GridList.jsx +552 -0
  124. package/dist/GridList.jsx.map +1 -0
  125. package/dist/HiddenTimeInput.js +104 -0
  126. package/dist/HiddenTimeInput.js.map +1 -0
  127. package/dist/HiddenTimeInput.jsx +69 -0
  128. package/dist/HiddenTimeInput.jsx.map +1 -0
  129. package/dist/Icon.d.ts.map +1 -1
  130. package/dist/Icon.js +127 -0
  131. package/dist/Icon.js.map +1 -0
  132. package/dist/Icon.jsx +72 -0
  133. package/dist/Icon.jsx.map +1 -0
  134. package/dist/Keyboard.js +30 -0
  135. package/dist/Keyboard.js.map +1 -0
  136. package/dist/Keyboard.jsx +24 -0
  137. package/dist/Keyboard.jsx.map +1 -0
  138. package/dist/Landmark.js +134 -0
  139. package/dist/Landmark.js.map +1 -0
  140. package/dist/Landmark.jsx +118 -0
  141. package/dist/Landmark.jsx.map +1 -0
  142. package/dist/Link.d.ts.map +1 -1
  143. package/dist/Link.js +219 -0
  144. package/dist/Link.js.map +1 -0
  145. package/dist/Link.jsx +189 -0
  146. package/dist/Link.jsx.map +1 -0
  147. package/dist/ListBox.d.ts.map +1 -1
  148. package/dist/ListBox.js +670 -0
  149. package/dist/ListBox.js.map +1 -0
  150. package/dist/ListBox.jsx +508 -0
  151. package/dist/ListBox.jsx.map +1 -0
  152. package/dist/Menu.d.ts +27 -9
  153. package/dist/Menu.d.ts.map +1 -1
  154. package/dist/Menu.js +1254 -0
  155. package/dist/Menu.js.map +1 -0
  156. package/dist/Menu.jsx +1042 -0
  157. package/dist/Menu.jsx.map +1 -0
  158. package/dist/Meter.d.ts.map +1 -1
  159. package/dist/Meter.js +123 -0
  160. package/dist/Meter.js.map +1 -0
  161. package/dist/Meter.jsx +107 -0
  162. package/dist/Meter.jsx.map +1 -0
  163. package/dist/Modal.d.ts.map +1 -1
  164. package/dist/Modal.js +380 -0
  165. package/dist/Modal.js.map +1 -0
  166. package/dist/Modal.jsx +314 -0
  167. package/dist/Modal.jsx.map +1 -0
  168. package/dist/NumberField.d.ts +3 -3
  169. package/dist/NumberField.d.ts.map +1 -1
  170. package/dist/NumberField.js +573 -0
  171. package/dist/NumberField.js.map +1 -0
  172. package/dist/NumberField.jsx +443 -0
  173. package/dist/NumberField.jsx.map +1 -0
  174. package/dist/Popover.d.ts +10 -2
  175. package/dist/Popover.d.ts.map +1 -1
  176. package/dist/Popover.js +464 -0
  177. package/dist/Popover.js.map +1 -0
  178. package/dist/Popover.jsx +333 -0
  179. package/dist/Popover.jsx.map +1 -0
  180. package/dist/Pressable.js +69 -0
  181. package/dist/Pressable.js.map +1 -0
  182. package/dist/Pressable.jsx +68 -0
  183. package/dist/Pressable.jsx.map +1 -0
  184. package/dist/ProgressBar.d.ts.map +1 -1
  185. package/dist/ProgressBar.js +130 -0
  186. package/dist/ProgressBar.js.map +1 -0
  187. package/dist/ProgressBar.jsx +114 -0
  188. package/dist/ProgressBar.jsx.map +1 -0
  189. package/dist/RadioGroup.d.ts +82 -4
  190. package/dist/RadioGroup.d.ts.map +1 -1
  191. package/dist/RadioGroup.js +931 -0
  192. package/dist/RadioGroup.js.map +1 -0
  193. package/dist/RadioGroup.jsx +681 -0
  194. package/dist/RadioGroup.jsx.map +1 -0
  195. package/dist/RangeCalendar.d.ts.map +1 -1
  196. package/dist/RangeCalendar.js +410 -0
  197. package/dist/RangeCalendar.js.map +1 -0
  198. package/dist/RangeCalendar.jsx +253 -0
  199. package/dist/RangeCalendar.jsx.map +1 -0
  200. package/dist/RouterProvider.js +118 -0
  201. package/dist/RouterProvider.js.map +1 -0
  202. package/dist/RouterProvider.jsx +112 -0
  203. package/dist/RouterProvider.jsx.map +1 -0
  204. package/dist/SearchField.d.ts +2 -2
  205. package/dist/SearchField.d.ts.map +1 -1
  206. package/dist/SearchField.js +643 -0
  207. package/dist/SearchField.js.map +1 -0
  208. package/dist/SearchField.jsx +526 -0
  209. package/dist/SearchField.jsx.map +1 -0
  210. package/dist/Select.d.ts.map +1 -1
  211. package/dist/Select.js +1031 -0
  212. package/dist/Select.js.map +1 -0
  213. package/dist/Select.jsx +744 -0
  214. package/dist/Select.jsx.map +1 -0
  215. package/dist/SelectionIndicator.d.ts.map +1 -1
  216. package/dist/SelectionIndicator.js +86 -0
  217. package/dist/SelectionIndicator.js.map +1 -0
  218. package/dist/SelectionIndicator.jsx +50 -0
  219. package/dist/SelectionIndicator.jsx.map +1 -0
  220. package/dist/Separator.js +97 -0
  221. package/dist/Separator.js.map +1 -0
  222. package/dist/Separator.jsx +85 -0
  223. package/dist/Separator.jsx.map +1 -0
  224. package/dist/SharedElementTransition.d.ts.map +1 -1
  225. package/dist/SharedElementTransition.js +165 -0
  226. package/dist/SharedElementTransition.js.map +1 -0
  227. package/dist/SharedElementTransition.jsx +138 -0
  228. package/dist/SharedElementTransition.jsx.map +1 -0
  229. package/dist/Slider.d.ts +33 -1
  230. package/dist/Slider.d.ts.map +1 -1
  231. package/dist/Slider.js +515 -0
  232. package/dist/Slider.js.map +1 -0
  233. package/dist/Slider.jsx +403 -0
  234. package/dist/Slider.jsx.map +1 -0
  235. package/dist/StepList.js +198 -0
  236. package/dist/StepList.js.map +1 -0
  237. package/dist/StepList.jsx +141 -0
  238. package/dist/StepList.jsx.map +1 -0
  239. package/dist/Switch.d.ts +65 -2
  240. package/dist/Switch.d.ts.map +1 -1
  241. package/dist/Switch.js +534 -0
  242. package/dist/Switch.js.map +1 -0
  243. package/dist/Switch.jsx +393 -0
  244. package/dist/Switch.jsx.map +1 -0
  245. package/dist/Table.d.ts +48 -0
  246. package/dist/Table.d.ts.map +1 -1
  247. package/dist/Table.js +1759 -0
  248. package/dist/Table.js.map +1 -0
  249. package/dist/Table.jsx +1348 -0
  250. package/dist/Table.jsx.map +1 -0
  251. package/dist/Tabs.d.ts +0 -4
  252. package/dist/Tabs.d.ts.map +1 -1
  253. package/dist/Tabs.js +595 -0
  254. package/dist/Tabs.js.map +1 -0
  255. package/dist/Tabs.jsx +367 -0
  256. package/dist/Tabs.jsx.map +1 -0
  257. package/dist/TagGroup.d.ts.map +1 -1
  258. package/dist/TagGroup.js +378 -0
  259. package/dist/TagGroup.js.map +1 -0
  260. package/dist/TagGroup.jsx +270 -0
  261. package/dist/TagGroup.jsx.map +1 -0
  262. package/dist/Text.d.ts +18 -6
  263. package/dist/Text.d.ts.map +1 -1
  264. package/dist/Text.js +42 -0
  265. package/dist/Text.js.map +1 -0
  266. package/dist/Text.jsx +35 -0
  267. package/dist/Text.jsx.map +1 -0
  268. package/dist/TextField.d.ts +6 -6
  269. package/dist/TextField.d.ts.map +1 -1
  270. package/dist/TextField.js +436 -0
  271. package/dist/TextField.js.map +1 -0
  272. package/dist/TextField.jsx +403 -0
  273. package/dist/TextField.jsx.map +1 -0
  274. package/dist/TimeField.d.ts +3 -3
  275. package/dist/TimeField.d.ts.map +1 -1
  276. package/dist/TimeField.js +372 -0
  277. package/dist/TimeField.js.map +1 -0
  278. package/dist/TimeField.jsx +224 -0
  279. package/dist/TimeField.jsx.map +1 -0
  280. package/dist/Toast.d.ts +14 -0
  281. package/dist/Toast.d.ts.map +1 -1
  282. package/dist/Toast.js +551 -0
  283. package/dist/Toast.js.map +1 -0
  284. package/dist/Toast.jsx +361 -0
  285. package/dist/Toast.jsx.map +1 -0
  286. package/dist/ToggleButton.d.ts.map +1 -1
  287. package/dist/ToggleButton.js +123 -0
  288. package/dist/ToggleButton.js.map +1 -0
  289. package/dist/ToggleButton.jsx +88 -0
  290. package/dist/ToggleButton.jsx.map +1 -0
  291. package/dist/ToggleButtonGroup.d.ts.map +1 -1
  292. package/dist/ToggleButtonGroup.js +114 -0
  293. package/dist/ToggleButtonGroup.js.map +1 -0
  294. package/dist/ToggleButtonGroup.jsx +85 -0
  295. package/dist/ToggleButtonGroup.jsx.map +1 -0
  296. package/dist/Toolbar.js +112 -0
  297. package/dist/Toolbar.js.map +1 -0
  298. package/dist/Toolbar.jsx +92 -0
  299. package/dist/Toolbar.jsx.map +1 -0
  300. package/dist/Tooltip.d.ts.map +1 -1
  301. package/dist/Tooltip.js +539 -0
  302. package/dist/Tooltip.js.map +1 -0
  303. package/dist/Tooltip.jsx +465 -0
  304. package/dist/Tooltip.jsx.map +1 -0
  305. package/dist/Tree.d.ts +14 -2
  306. package/dist/Tree.d.ts.map +1 -1
  307. package/dist/Tree.js +1424 -0
  308. package/dist/Tree.js.map +1 -0
  309. package/dist/Tree.jsx +1172 -0
  310. package/dist/Tree.jsx.map +1 -0
  311. package/dist/Virtualizer.d.ts +16 -2
  312. package/dist/Virtualizer.d.ts.map +1 -1
  313. package/dist/Virtualizer.js +2 -0
  314. package/dist/Virtualizer.jsx +2 -0
  315. package/dist/Virtualizer2.js +751 -0
  316. package/dist/Virtualizer2.js.map +1 -0
  317. package/dist/Virtualizer2.jsx +730 -0
  318. package/dist/Virtualizer2.jsx.map +1 -0
  319. package/dist/VirtualizerLayouts.d.ts +18 -0
  320. package/dist/VirtualizerLayouts.d.ts.map +1 -1
  321. package/dist/VisuallyHidden.js +42 -0
  322. package/dist/VisuallyHidden.js.map +1 -0
  323. package/dist/VisuallyHidden.jsx +35 -0
  324. package/dist/VisuallyHidden.jsx.map +1 -0
  325. package/dist/contexts.js +33 -0
  326. package/dist/contexts.js.map +1 -0
  327. package/dist/contexts.jsx +33 -0
  328. package/dist/contexts.jsx.map +1 -0
  329. package/dist/index.d.ts +7 -6
  330. package/dist/index.d.ts.map +1 -1
  331. package/dist/index.js +70 -23932
  332. package/dist/index.jsx +70 -18337
  333. package/dist/useDragAndDrop.js +2 -0
  334. package/dist/useDragAndDrop.jsx +2 -0
  335. package/dist/useDragAndDrop2.js +395 -0
  336. package/dist/useDragAndDrop2.js.map +1 -0
  337. package/dist/useDragAndDrop2.jsx +395 -0
  338. package/dist/useDragAndDrop2.jsx.map +1 -0
  339. package/dist/utils.d.ts +83 -11
  340. package/dist/utils.d.ts.map +1 -1
  341. package/dist/utils.js +285 -0
  342. package/dist/utils.js.map +1 -0
  343. package/dist/utils.jsx +277 -0
  344. package/dist/utils.jsx.map +1 -0
  345. package/dist/virtualizer/Layout.js +144 -0
  346. package/dist/virtualizer/Layout.js.map +1 -0
  347. package/dist/virtualizer/Layout.jsx +144 -0
  348. package/dist/virtualizer/Layout.jsx.map +1 -0
  349. package/package.json +401 -4
  350. package/src/Breadcrumbs.tsx +3 -1
  351. package/src/Button.tsx +22 -2
  352. package/src/Calendar.tsx +27 -10
  353. package/src/CalendarPicker.tsx +73 -0
  354. package/src/Checkbox.tsx +539 -3
  355. package/src/Collection.tsx +9 -3
  356. package/src/Color.tsx +42 -14
  357. package/src/ComboBox.tsx +50 -6
  358. package/src/DateField.tsx +20 -2
  359. package/src/DatePicker.tsx +57 -5
  360. package/src/Dialog.tsx +13 -5
  361. package/src/Disclosure.tsx +3 -1
  362. package/src/DragAndDrop.tsx +3 -1
  363. package/src/DropZone.tsx +3 -1
  364. package/src/GridList.tsx +125 -24
  365. package/src/Icon.tsx +3 -1
  366. package/src/Link.tsx +3 -1
  367. package/src/ListBox.tsx +31 -4
  368. package/src/Menu.tsx +252 -128
  369. package/src/Meter.tsx +3 -1
  370. package/src/Modal.tsx +100 -52
  371. package/src/NumberField.tsx +51 -8
  372. package/src/Popover.tsx +40 -10
  373. package/src/ProgressBar.tsx +3 -1
  374. package/src/RadioGroup.tsx +468 -4
  375. package/src/RangeCalendar.tsx +3 -1
  376. package/src/SearchField.tsx +27 -3
  377. package/src/Select.tsx +22 -7
  378. package/src/SelectionIndicator.tsx +3 -1
  379. package/src/SharedElementTransition.tsx +3 -1
  380. package/src/Slider.tsx +159 -13
  381. package/src/Switch.tsx +395 -2
  382. package/src/Table.tsx +409 -95
  383. package/src/Tabs.tsx +16 -45
  384. package/src/TagGroup.tsx +3 -1
  385. package/src/Text.tsx +31 -10
  386. package/src/TextField.tsx +43 -5
  387. package/src/TimeField.tsx +20 -2
  388. package/src/Toast.tsx +79 -14
  389. package/src/ToggleButton.tsx +3 -1
  390. package/src/ToggleButtonGroup.tsx +3 -1
  391. package/src/Tooltip.tsx +3 -1
  392. package/src/Tree.tsx +77 -9
  393. package/src/Virtualizer.tsx +180 -31
  394. package/src/VirtualizerLayouts.ts +45 -10
  395. package/src/index.ts +50 -0
  396. package/src/utils.tsx +243 -27
  397. package/dist/index.js.map +0 -1
  398. package/dist/index.jsx.map +0 -1
package/dist/Menu.js ADDED
@@ -0,0 +1,1254 @@
1
+ import { filterDOMProps, useRenderProps } from "./utils.js";
2
+ import { r as PopoverTriggerContext } from "./contexts.js";
3
+ import { SharedElementTransition } from "./SharedElementTransition.js";
4
+ import { CollectionRendererContext, Group, Header, Section, flattenCollectionEntries, isCollectionSection, useCollectionRenderer } from "./Collection.js";
5
+ import { r as useVirtualizerContext } from "./Virtualizer2.js";
6
+ import { getNormalizedDropTargetKey, mergePersistedKeysIntoVirtualRange, useDndPersistedKeys, useRenderDropIndicator } from "./DragAndDrop.js";
7
+ import { createComponent, effect, getNextElement, insert, memo, mergeProps, runHydrationEvents, setAttribute, setStyleProperty, spread, template, use } from "solid-js/web";
8
+ import { For, Show, createContext, createEffect, createMemo, createSignal, createUniqueId, onCleanup, splitProps, useContext } from "solid-js";
9
+ import { FocusScope, createButton, createFocusRing, createHover, createInteractOutside, createMenu, createMenuItem, createMenuTrigger, createScrollIntoViewOnFocus, mergeProps as mergeProps$2 } from "@proyecto-viviana/solidaria";
10
+ import { createMenuState, createMenuTriggerState, createSelectionState } from "@proyecto-viviana/solid-stately";
11
+ //#region src/Menu.tsx
12
+ /**
13
+ * Menu component for solidaria-components
14
+ *
15
+ * A pre-wired headless menu that combines state + aria hooks.
16
+ * Port of react-aria-components/src/Menu.tsx
17
+ */
18
+ var _tmpl$ = /*#__PURE__*/ template(`<button>`), _tmpl$2 = /*#__PURE__*/ template(`<div role=presentation data-empty-state><div role=menuitem style=display:contents>`), _tmpl$3 = /*#__PURE__*/ template(`<div role=group>`), _tmpl$4 = /*#__PURE__*/ template(`<div role=presentation data-section-wrapper>`), _tmpl$5 = /*#__PURE__*/ template(`<div role=presentation aria-hidden=true data-virtualizer-spacer=top>`), _tmpl$6 = /*#__PURE__*/ template(`<div role=presentation aria-hidden=true data-virtualizer-spacer=bottom>`), _tmpl$7 = /*#__PURE__*/ template(`<span>`), _tmpl$8 = /*#__PURE__*/ template(`<div>`), _tmpl$9 = /*#__PURE__*/ template(`<a>`);
19
+ const MenuContext = createContext(null);
20
+ const MenuStateContext = createContext(null);
21
+ const MenuTriggerContext = createContext(null);
22
+ const RootMenuTriggerStateContext = createContext(null);
23
+ const MenuItemContext = createContext(null);
24
+ const StaticMenuCollectionContext = createContext(null);
25
+ const MenuSectionSelectionContext = createContext(null);
26
+ const MenuSectionSelectionRegistryContext = createContext(null);
27
+ const MenuItemCloseRegistryContext = createContext(null);
28
+ function assignRef(ref, el) {
29
+ if (!ref) return;
30
+ if (typeof ref === "function") ref(el);
31
+ else ref.current = el;
32
+ }
33
+ function resolveBoolean(value) {
34
+ return typeof value === "function" ? Boolean(value()) : Boolean(value);
35
+ }
36
+ /**
37
+ * A menu trigger wraps a button and menu, handling the open/close state.
38
+ */
39
+ function MenuTrigger(props) {
40
+ const [local, stateProps] = splitProps(props, ["slot"]);
41
+ const state = createMenuTriggerState({
42
+ get isOpen() {
43
+ return stateProps.isOpen;
44
+ },
45
+ get defaultOpen() {
46
+ return stateProps.defaultOpen;
47
+ },
48
+ get onOpenChange() {
49
+ return stateProps.onOpenChange;
50
+ }
51
+ });
52
+ const [isMousePressed, setMousePressed] = createSignal(false);
53
+ const onPressStart = (e) => {
54
+ if (e.pointerType !== "mouse" || typeof document === "undefined") return;
55
+ setMousePressed(true);
56
+ document.addEventListener("pointerup", () => {
57
+ setMousePressed(false);
58
+ }, {
59
+ once: true,
60
+ capture: true
61
+ });
62
+ };
63
+ const menuTrigger = createMenuTrigger({ get isDisabled() {
64
+ return stateProps.isDisabled;
65
+ } }, state);
66
+ return createComponent(RootMenuTriggerStateContext.Provider, {
67
+ value: state,
68
+ get children() {
69
+ return createComponent(MenuTriggerContext.Provider, {
70
+ value: {
71
+ state,
72
+ get triggerProps() {
73
+ return menuTrigger.menuTriggerProps;
74
+ },
75
+ get menuProps() {
76
+ return menuTrigger.menuProps;
77
+ },
78
+ isPressed: isMousePressed,
79
+ onPressStart
80
+ },
81
+ get children() {
82
+ return props.children;
83
+ }
84
+ });
85
+ }
86
+ });
87
+ }
88
+ function SubmenuTrigger(props) {
89
+ const children = () => Array.isArray(props.children) ? props.children : [props.children];
90
+ const trigger = () => children()[0];
91
+ const content = () => children()[1];
92
+ const parentMenuItemContext = useContext(MenuItemContext);
93
+ const state = createMenuTriggerState({
94
+ get isOpen() {
95
+ return props.isOpen;
96
+ },
97
+ get defaultOpen() {
98
+ return props.defaultOpen;
99
+ },
100
+ get onOpenChange() {
101
+ return props.onOpenChange;
102
+ }
103
+ });
104
+ let triggerRef = null;
105
+ const triggerId = createUniqueId();
106
+ const menuId = createUniqueId();
107
+ let hoverTimeout;
108
+ let hasPointerHover = false;
109
+ const delay = () => props.delay ?? 200;
110
+ const clearHoverTimeout = () => {
111
+ if (hoverTimeout != null) {
112
+ window.clearTimeout(hoverTimeout);
113
+ hoverTimeout = void 0;
114
+ }
115
+ };
116
+ const openSubmenu = () => {
117
+ clearHoverTimeout();
118
+ state.open();
119
+ };
120
+ const queueOpenSubmenu = () => {
121
+ clearHoverTimeout();
122
+ const open = () => state.open();
123
+ if (typeof queueMicrotask === "function") queueMicrotask(open);
124
+ else Promise.resolve().then(open);
125
+ };
126
+ const scheduleOpen = () => {
127
+ clearHoverTimeout();
128
+ hoverTimeout = window.setTimeout(() => {
129
+ hoverTimeout = void 0;
130
+ state.open();
131
+ }, delay());
132
+ };
133
+ const schedulePointerOpen = (event) => {
134
+ hasPointerHover = true;
135
+ if (event.isTrusted === false) {
136
+ queueOpenSubmenu();
137
+ return;
138
+ }
139
+ scheduleOpen();
140
+ };
141
+ const openFromMouseHover = () => {
142
+ if (state.isOpen()) return;
143
+ if (hasPointerHover) scheduleOpen();
144
+ else queueOpenSubmenu();
145
+ };
146
+ onCleanup(clearHoverTimeout);
147
+ const menuTriggerContext = createMemo(() => ({
148
+ state,
149
+ triggerProps: {},
150
+ menuProps: {
151
+ id: menuId,
152
+ "aria-labelledby": triggerId
153
+ }
154
+ }));
155
+ const popoverTriggerContext = createMemo(() => ({
156
+ state: {
157
+ isOpen: () => state.isOpen(),
158
+ open: () => state.open(),
159
+ close: () => state.close(),
160
+ toggle: () => state.toggle()
161
+ },
162
+ triggerRef: () => triggerRef,
163
+ setTriggerRef: (el) => {
164
+ triggerRef = el;
165
+ },
166
+ triggerId,
167
+ trigger: "SubmenuTrigger"
168
+ }));
169
+ const itemContext = createMemo(() => ({
170
+ closeOnSelect: false,
171
+ onAction: () => openSubmenu(),
172
+ setItemRef: (el) => {
173
+ triggerRef = el;
174
+ },
175
+ props: () => ({
176
+ id: triggerId,
177
+ "aria-haspopup": "menu",
178
+ get "aria-expanded"() {
179
+ return state.isOpen() || void 0;
180
+ },
181
+ get "aria-controls"() {
182
+ return state.isOpen() ? menuId : void 0;
183
+ },
184
+ onPointerEnter: (event) => {
185
+ if (event.pointerType === "touch") return;
186
+ schedulePointerOpen(event);
187
+ },
188
+ onPointerOver: (event) => {
189
+ if (event.pointerType === "touch") return;
190
+ schedulePointerOpen(event);
191
+ },
192
+ onMouseEnter: openFromMouseHover,
193
+ onMouseOver: openFromMouseHover,
194
+ onKeyDown: (event) => {
195
+ if (event.key === "ArrowRight" || event.key === "Enter" || event.key === " ") {
196
+ event.preventDefault();
197
+ openSubmenu();
198
+ } else if (event.key === "ArrowLeft" && state.isOpen()) {
199
+ event.preventDefault();
200
+ state.close();
201
+ }
202
+ }
203
+ })
204
+ }));
205
+ return createComponent(PopoverTriggerContext.Provider, {
206
+ get value() {
207
+ return popoverTriggerContext();
208
+ },
209
+ get children() {
210
+ return createComponent(MenuTriggerContext.Provider, {
211
+ get value() {
212
+ return menuTriggerContext();
213
+ },
214
+ get children() {
215
+ return [createComponent(MenuItemContext.Provider, {
216
+ get value() {
217
+ return {
218
+ ...parentMenuItemContext,
219
+ ...itemContext()
220
+ };
221
+ },
222
+ get children() {
223
+ return trigger();
224
+ }
225
+ }), memo(() => content())];
226
+ }
227
+ });
228
+ }
229
+ });
230
+ }
231
+ function MenuButton(props) {
232
+ const [local, domProps] = splitProps(props, [
233
+ "class",
234
+ "style",
235
+ "slot",
236
+ "isDisabled",
237
+ "children"
238
+ ]);
239
+ const context = useContext(MenuTriggerContext);
240
+ if (!context) throw new Error("MenuButton must be used within a MenuTrigger");
241
+ const { state } = context;
242
+ const buttonAria = createButton({
243
+ get isDisabled() {
244
+ return local.isDisabled;
245
+ },
246
+ onPressStart(e) {
247
+ context.onPressStart?.(e);
248
+ },
249
+ onPress() {
250
+ state.toggle();
251
+ }
252
+ });
253
+ const { isFocused, isFocusVisible, focusProps } = createFocusRing();
254
+ const { isHovered, hoverProps } = createHover({ get isDisabled() {
255
+ return local.isDisabled;
256
+ } });
257
+ const renderValues = createMemo(() => ({
258
+ isOpen: state.isOpen(),
259
+ isFocused: isFocused(),
260
+ isFocusVisible: isFocusVisible(),
261
+ isPressed: context.isPressed?.() || buttonAria.isPressed(),
262
+ isHovered: isHovered(),
263
+ isDisabled: !!local.isDisabled
264
+ }));
265
+ const renderProps = useRenderProps({
266
+ get children() {
267
+ return props.children;
268
+ },
269
+ class: local.class,
270
+ style: local.style,
271
+ defaultClassName: "solidaria-MenuButton"
272
+ }, renderValues);
273
+ const resolvedTriggerProps = () => context.triggerProps;
274
+ const cleanTriggerProps = () => {
275
+ const { ref: _ref1, "aria-haspopup": _ariaHasPopup, "aria-expanded": _ariaExpanded, "aria-controls": _ariaControls, "aria-disabled": _ariaDisabled, ...rest } = resolvedTriggerProps();
276
+ return rest;
277
+ };
278
+ const cleanButtonProps = () => {
279
+ const { ref: _ref2, ...rest } = buttonAria.buttonProps;
280
+ return rest;
281
+ };
282
+ const cleanFocusProps = () => {
283
+ const { ref: _ref3, ...rest } = focusProps;
284
+ return rest;
285
+ };
286
+ const cleanHoverProps = () => {
287
+ const { ref: _ref4, ...rest } = hoverProps;
288
+ return rest;
289
+ };
290
+ return (() => {
291
+ var _el$ = getNextElement(_tmpl$);
292
+ spread(_el$, mergeProps(domProps, cleanTriggerProps, cleanButtonProps, cleanFocusProps, cleanHoverProps, {
293
+ "type": "button",
294
+ get ["class"]() {
295
+ return renderProps.class();
296
+ },
297
+ get style() {
298
+ return renderProps.style();
299
+ },
300
+ get ["aria-haspopup"]() {
301
+ return resolvedTriggerProps()["aria-haspopup"];
302
+ },
303
+ get ["aria-expanded"]() {
304
+ return resolvedTriggerProps()["aria-expanded"];
305
+ },
306
+ get ["aria-controls"]() {
307
+ return resolvedTriggerProps()["aria-controls"];
308
+ },
309
+ get ["aria-disabled"]() {
310
+ return resolvedTriggerProps()["aria-disabled"];
311
+ },
312
+ get ["data-open"]() {
313
+ return state.isOpen() || void 0;
314
+ },
315
+ get ["data-focused"]() {
316
+ return isFocused() || void 0;
317
+ },
318
+ get ["data-focus-visible"]() {
319
+ return isFocusVisible() || void 0;
320
+ },
321
+ get ["data-pressed"]() {
322
+ return context.isPressed?.() || buttonAria.isPressed() || void 0;
323
+ },
324
+ get ["data-hovered"]() {
325
+ return isHovered() || void 0;
326
+ },
327
+ get ["data-disabled"]() {
328
+ return local.isDisabled || void 0;
329
+ }
330
+ }), false, true);
331
+ insert(_el$, () => renderProps.renderChildren());
332
+ runHydrationEvents();
333
+ return _el$;
334
+ })();
335
+ }
336
+ /**
337
+ * A menu displays a list of actions or options for the user to choose from.
338
+ */
339
+ function Menu(props) {
340
+ const [local, stateProps, ariaProps] = splitProps(props, [
341
+ "children",
342
+ "class",
343
+ "style",
344
+ "render",
345
+ "slot",
346
+ "renderEmptyState",
347
+ "ref",
348
+ "staticChildren"
349
+ ], [
350
+ "items",
351
+ "getKey",
352
+ "getTextValue",
353
+ "getDisabled",
354
+ "disabledKeys",
355
+ "disabledBehavior",
356
+ "selectionMode",
357
+ "selectionBehavior",
358
+ "disallowEmptySelection",
359
+ "selectedKeys",
360
+ "defaultSelectedKeys",
361
+ "onSelectionChange",
362
+ "allowDuplicateSelectionEvents",
363
+ "onAction",
364
+ "onClose",
365
+ "shouldCloseOnSelect",
366
+ "dragAndDropHooks"
367
+ ]);
368
+ const triggerContext = useContext(MenuTriggerContext);
369
+ const [menuRef, setMenuRef] = createSignal(null);
370
+ const [staticItems, setStaticItems] = createSignal([]);
371
+ const staticItemMap = /* @__PURE__ */ new Map();
372
+ const sectionSelectionMap = /* @__PURE__ */ new Map();
373
+ const itemCloseMap = /* @__PURE__ */ new Map();
374
+ const usesStaticChildren = () => local.staticChildren != null || stateProps.items == null;
375
+ const syncStaticItems = () => {
376
+ setStaticItems(Array.from(staticItemMap.values()));
377
+ };
378
+ const staticCollectionContext = {
379
+ registerItem(item) {
380
+ const previous = staticItemMap.get(item.id);
381
+ if (previous && previous.textValue === item.textValue && previous.isDisabled === item.isDisabled) return;
382
+ staticItemMap.set(item.id, item);
383
+ syncStaticItems();
384
+ },
385
+ unregisterItem(id) {
386
+ if (staticItemMap.delete(id)) syncStaticItems();
387
+ }
388
+ };
389
+ const sectionSelectionRegistry = {
390
+ registerItem(key, selection) {
391
+ sectionSelectionMap.set(key, selection);
392
+ },
393
+ unregisterItem(key, selection) {
394
+ if (sectionSelectionMap.get(key) === selection) sectionSelectionMap.delete(key);
395
+ },
396
+ selectItem(key, event) {
397
+ const selection = sectionSelectionMap.get(key);
398
+ if (!selection || selection.selectionMode() === "none") return false;
399
+ selection.select(key, event);
400
+ return true;
401
+ }
402
+ };
403
+ const itemCloseRegistry = {
404
+ registerItem(key, shouldCloseOnSelect) {
405
+ itemCloseMap.set(key, shouldCloseOnSelect);
406
+ },
407
+ unregisterItem(key, shouldCloseOnSelect) {
408
+ if (itemCloseMap.get(key) === shouldCloseOnSelect) itemCloseMap.delete(key);
409
+ },
410
+ shouldCloseOnSelect(key) {
411
+ return key == null ? void 0 : itemCloseMap.get(key)?.();
412
+ }
413
+ };
414
+ const handleAction = (key, value) => {
415
+ sectionSelectionRegistry.selectItem(key);
416
+ stateProps.onAction?.(key, usesStaticChildren() ? void 0 : value);
417
+ };
418
+ const flatItems = createMemo(() => {
419
+ return flattenCollectionEntries(stateProps.items ?? []);
420
+ });
421
+ const hasSections = createMemo(() => (stateProps.items ?? []).some((item) => isCollectionSection(item)));
422
+ const state = createMenuState({
423
+ get items() {
424
+ return usesStaticChildren() ? staticItems() : flatItems();
425
+ },
426
+ get getKey() {
427
+ return usesStaticChildren() ? (item) => item.id : stateProps.getKey;
428
+ },
429
+ get getTextValue() {
430
+ return usesStaticChildren() ? (item) => item.textValue ?? String(item.id) : stateProps.getTextValue;
431
+ },
432
+ get getDisabled() {
433
+ return usesStaticChildren() ? (item) => Boolean(item.isDisabled) : stateProps.getDisabled;
434
+ },
435
+ get disabledKeys() {
436
+ return stateProps.disabledKeys;
437
+ },
438
+ get disabledBehavior() {
439
+ return stateProps.disabledBehavior;
440
+ },
441
+ get selectionMode() {
442
+ return stateProps.selectionMode;
443
+ },
444
+ get selectionBehavior() {
445
+ return stateProps.selectionBehavior;
446
+ },
447
+ get disallowEmptySelection() {
448
+ return stateProps.disallowEmptySelection;
449
+ },
450
+ get selectedKeys() {
451
+ return stateProps.selectedKeys;
452
+ },
453
+ get defaultSelectedKeys() {
454
+ return stateProps.defaultSelectedKeys;
455
+ },
456
+ get onSelectionChange() {
457
+ return stateProps.onSelectionChange;
458
+ },
459
+ get allowDuplicateSelectionEvents() {
460
+ return stateProps.allowDuplicateSelectionEvents;
461
+ },
462
+ get onAction() {
463
+ return handleAction;
464
+ },
465
+ get onClose() {
466
+ return stateProps.onClose ?? (() => triggerContext?.state.close());
467
+ }
468
+ });
469
+ const resolveDisabled = () => {
470
+ const disabled = ariaProps.isDisabled;
471
+ if (typeof disabled === "function") return disabled();
472
+ return !!disabled;
473
+ };
474
+ const { menuProps, labelProps } = createMenu({
475
+ get isDisabled() {
476
+ return resolveDisabled();
477
+ },
478
+ get label() {
479
+ return ariaProps.label;
480
+ },
481
+ get onAction() {
482
+ return handleAction;
483
+ },
484
+ get onClose() {
485
+ return stateProps.onClose ?? (() => triggerContext?.state.close());
486
+ },
487
+ get shouldCloseOnSelect() {
488
+ return itemCloseRegistry.shouldCloseOnSelect(state.focusedKey()) ?? stateProps.shouldCloseOnSelect;
489
+ },
490
+ get "aria-label"() {
491
+ return ariaProps["aria-label"];
492
+ },
493
+ get "aria-labelledby"() {
494
+ return ariaProps["aria-labelledby"];
495
+ },
496
+ get "aria-describedby"() {
497
+ return ariaProps["aria-describedby"];
498
+ }
499
+ }, state);
500
+ createScrollIntoViewOnFocus({
501
+ focusedKey: () => state.focusedKey(),
502
+ isActive: () => state.isFocused(),
503
+ ref: () => menuRef()
504
+ });
505
+ const { isFocused, focusProps } = createFocusRing();
506
+ createInteractOutside({
507
+ ref: () => menuRef(),
508
+ onInteractOutside: () => {
509
+ if (triggerContext?.state.isOpen()) triggerContext.state.close();
510
+ },
511
+ get isDisabled() {
512
+ return !triggerContext?.state.isOpen();
513
+ }
514
+ });
515
+ const renderValues = createMemo(() => ({
516
+ isFocused: state.isFocused() || isFocused(),
517
+ isOpen: triggerContext?.state.isOpen() ?? true,
518
+ isEmpty: state.collection().size === 0
519
+ }));
520
+ const renderProps = useRenderProps({
521
+ class: local.class,
522
+ style: local.style,
523
+ defaultClassName: "solidaria-Menu"
524
+ }, renderValues);
525
+ const cleanMenuProps = () => {
526
+ const { ref: _ref1, ...rest } = menuProps;
527
+ return rest;
528
+ };
529
+ const cleanTriggerMenuProps = () => {
530
+ if (!triggerContext) return {};
531
+ const { ref: _ref2, ...rest } = triggerContext.menuProps;
532
+ return rest;
533
+ };
534
+ const cleanFocusProps = () => {
535
+ const { ref: _ref3, ...rest } = focusProps;
536
+ return rest;
537
+ };
538
+ const domProps = createMemo(() => filterDOMProps(ariaProps, { global: true }));
539
+ const cleanLabelProps = () => {
540
+ const { ref: _ref4, ...rest } = labelProps;
541
+ return rest;
542
+ };
543
+ const setResolvedMenuRef = (el) => {
544
+ setMenuRef(el);
545
+ assignRef(local.ref, el);
546
+ };
547
+ const shouldRender = () => triggerContext ? triggerContext.state.isOpen() : true;
548
+ const parentCollectionRenderer = useCollectionRenderer();
549
+ const virtualizer = useVirtualizerContext();
550
+ const getItemNodes = createMemo(() => Array.from(state.collection()).filter((node) => node.type === "item"));
551
+ const getDropTargetByIndex = (index, position) => {
552
+ const node = getItemNodes()[index];
553
+ if (!node) return null;
554
+ return {
555
+ type: "item",
556
+ key: node.key,
557
+ dropPosition: position
558
+ };
559
+ };
560
+ const hasDroppableDnd = createMemo(() => {
561
+ const hooks = stateProps.dragAndDropHooks;
562
+ return Boolean(hooks?.useDroppableCollectionState && hooks.useDroppableCollection && (hooks.dropTargetDelegate || parentCollectionRenderer?.dropTargetDelegate || hooks.ListDropTargetDelegate));
563
+ });
564
+ const hasDraggableDnd = createMemo(() => {
565
+ const hooks = stateProps.dragAndDropHooks;
566
+ return Boolean(hooks?.useDraggableCollectionState && hooks.useDraggableCollection);
567
+ });
568
+ const dragState = createMemo(() => {
569
+ if (!hasDraggableDnd()) return void 0;
570
+ return stateProps.dragAndDropHooks?.useDraggableCollectionState?.({ items: flatItems() });
571
+ });
572
+ const dropState = createMemo(() => {
573
+ if (!hasDroppableDnd()) return void 0;
574
+ return stateProps.dragAndDropHooks?.useDroppableCollectionState?.({});
575
+ });
576
+ const persistedKeys = useDndPersistedKeys({ focusedKey: state.focusedKey }, stateProps.dragAndDropHooks, dropState(), state.collection());
577
+ const virtualRange = createMemo(() => {
578
+ if (!virtualizer || !parentCollectionRenderer?.isVirtualized || hasSections()) return null;
579
+ const dynamicItems = stateProps.items ?? [];
580
+ const baseRange = virtualizer.getVisibleRange(dynamicItems.length);
581
+ const itemNodes = getItemNodes();
582
+ const persistedIndexes = Array.from(persistedKeys()).map((key) => itemNodes.findIndex((node) => node.key === key)).filter((index) => index >= 0);
583
+ const dropTarget = dropState()?.target;
584
+ const normalizedDropKey = getNormalizedDropTargetKey(dropTarget, state.collection());
585
+ const focusedKey = state.focusedKey();
586
+ const focusedIndex = focusedKey != null ? itemNodes.findIndex((node) => node.key === focusedKey) : -1;
587
+ const forceIncludeIndexes = [
588
+ dropTarget?.type === "item" ? itemNodes.findIndex((node) => node.key === dropTarget.key) : -1,
589
+ normalizedDropKey != null ? itemNodes.findIndex((node) => node.key === normalizedDropKey) : -1,
590
+ dropTarget?.type === "item" ? -1 : focusedIndex
591
+ ].filter((index) => index >= 0);
592
+ return mergePersistedKeysIntoVirtualRange(baseRange, persistedIndexes, dynamicItems.length, virtualizer, 80, {
593
+ forceIncludeIndexes,
594
+ forceIncludeMaxSpan: 320
595
+ });
596
+ });
597
+ const visibleItems = createMemo(() => {
598
+ const range = virtualRange();
599
+ const items = stateProps.items ?? [];
600
+ if (!range) return items;
601
+ return items.slice(range.start, range.end);
602
+ });
603
+ createEffect(() => {
604
+ if (!hasDraggableDnd()) return;
605
+ const hooks = stateProps.dragAndDropHooks;
606
+ const activeDragState = dragState();
607
+ if (!hooks?.useDraggableCollection || !activeDragState) return;
608
+ hooks.useDraggableCollection({}, activeDragState, () => menuRef());
609
+ });
610
+ const droppableCollection = createMemo(() => {
611
+ if (!hasDroppableDnd()) return void 0;
612
+ const hooks = stateProps.dragAndDropHooks;
613
+ const activeDropState = dropState();
614
+ if (!hooks?.useDroppableCollection || !activeDropState) return void 0;
615
+ const resolveDirection = () => {
616
+ const menuEl = menuRef();
617
+ if (menuEl && typeof window !== "undefined" && typeof window.getComputedStyle === "function") {
618
+ if (window.getComputedStyle(menuEl).direction === "rtl") return "rtl";
619
+ }
620
+ return typeof document !== "undefined" && document.dir === "rtl" ? "rtl" : "ltr";
621
+ };
622
+ const dropTargetDelegate = hooks.dropTargetDelegate ?? parentCollectionRenderer?.dropTargetDelegate ?? (hooks.ListDropTargetDelegate ? new hooks.ListDropTargetDelegate(() => state.collection(), () => menuRef(), {
623
+ layout: "stack",
624
+ orientation: "vertical",
625
+ direction: resolveDirection()
626
+ }) : void 0);
627
+ if (!dropTargetDelegate) return void 0;
628
+ return hooks.useDroppableCollection({
629
+ dropTargetDelegate,
630
+ keyboardDelegate: {
631
+ getFirstKey: () => state.collection().getFirstKey(),
632
+ getLastKey: () => state.collection().getLastKey(),
633
+ getKeyBelow: (key) => state.collection().getKeyAfter(key),
634
+ getKeyAbove: (key) => state.collection().getKeyBefore(key),
635
+ getKeyPageBelow: (key) => state.collection().getKeyAfter(key),
636
+ getKeyPageAbove: (key) => state.collection().getKeyBefore(key)
637
+ }
638
+ }, activeDropState, () => menuRef());
639
+ });
640
+ const isRootDropTarget = createMemo(() => {
641
+ return Boolean(dropState()?.target?.type === "root");
642
+ });
643
+ const dndRenderDropIndicator = createMemo(() => useRenderDropIndicator(stateProps.dragAndDropHooks, dropState()));
644
+ const dndDropIndicator = (index, position) => {
645
+ const target = getDropTargetByIndex(index, position);
646
+ if (!target || target.type !== "item") return void 0;
647
+ return dndRenderDropIndicator()?.(target);
648
+ };
649
+ const sectionedRenderEntries = createMemo(() => {
650
+ let globalIndex = 0;
651
+ return (stateProps.items ?? []).map((entry) => {
652
+ if (isCollectionSection(entry)) return {
653
+ type: "section",
654
+ section: entry,
655
+ items: entry.items.map((item) => ({
656
+ item,
657
+ index: globalIndex++
658
+ }))
659
+ };
660
+ return {
661
+ type: "item",
662
+ item: {
663
+ item: entry,
664
+ index: globalIndex++
665
+ }
666
+ };
667
+ });
668
+ });
669
+ const renderDynamicItem = (item) => typeof local.children === "function" ? local.children(item) : void 0;
670
+ const resolveStaticChild = (child) => {
671
+ return typeof child === "function" ? child() : child;
672
+ };
673
+ const renderStaticChildren = () => {
674
+ const staticChildren = local.staticChildren?.() ?? local.children;
675
+ if (Array.isArray(staticChildren)) return staticChildren.map(resolveStaticChild);
676
+ return resolveStaticChild(staticChildren);
677
+ };
678
+ const collectionRenderer = createMemo(() => ({
679
+ ...parentCollectionRenderer,
680
+ renderItem: (item) => renderDynamicItem(item),
681
+ renderDropIndicator: (index, position) => dndDropIndicator(index, position) ?? parentCollectionRenderer?.renderDropIndicator?.(index, position)
682
+ }));
683
+ const menuItemContextValue = createMemo(() => stateProps.shouldCloseOnSelect !== void 0 ? { closeOnSelect: stateProps.shouldCloseOnSelect } : {});
684
+ const menuListChildren = () => createComponent(SharedElementTransition, { get children() {
685
+ return memo(() => !!(state.collection().size === 0 && !usesStaticChildren() && local.renderEmptyState))() ? (() => {
686
+ var _el$2 = getNextElement(_tmpl$2), _el$3 = _el$2.firstChild;
687
+ insert(_el$3, () => local.renderEmptyState());
688
+ return _el$2;
689
+ })() : memo(() => !!usesStaticChildren())() ? renderStaticChildren() : memo(() => !!hasSections())() ? createComponent(For, {
690
+ get each() {
691
+ return sectionedRenderEntries();
692
+ },
693
+ children: (entry) => entry.type === "section" ? (() => {
694
+ var _el$4 = getNextElement(_tmpl$4);
695
+ insert(_el$4, createComponent(Section, {
696
+ "class": "solidaria-Menu-section",
697
+ get children() {
698
+ return [memo(() => memo(() => entry.section.title != null)() && createComponent(Header, {
699
+ "class": "solidaria-Menu-sectionHeader",
700
+ get children() {
701
+ return entry.section.title;
702
+ }
703
+ })), createComponent(Group, {
704
+ "class": "solidaria-Menu-sectionGroup",
705
+ get children() {
706
+ var _el$5 = getNextElement(_tmpl$3);
707
+ insert(_el$5, createComponent(For, {
708
+ get each() {
709
+ return entry.items;
710
+ },
711
+ children: (indexedItem) => [
712
+ memo(() => collectionRenderer().renderDropIndicator?.(indexedItem.index, "before")),
713
+ memo(() => collectionRenderer().renderDropIndicator?.(indexedItem.index, "on")),
714
+ memo(() => renderDynamicItem(indexedItem.item)),
715
+ memo(() => collectionRenderer().renderDropIndicator?.(indexedItem.index, "after"))
716
+ ]
717
+ }));
718
+ effect(() => setAttribute(_el$5, "aria-label", entry.section["aria-label"]));
719
+ return _el$5;
720
+ }
721
+ })];
722
+ }
723
+ }));
724
+ return _el$4;
725
+ })() : [
726
+ memo(() => collectionRenderer().renderDropIndicator?.(entry.item.index, "before")),
727
+ memo(() => collectionRenderer().renderDropIndicator?.(entry.item.index, "on")),
728
+ memo(() => renderDynamicItem(entry.item.item)),
729
+ memo(() => collectionRenderer().renderDropIndicator?.(entry.item.index, "after"))
730
+ ]
731
+ }) : [
732
+ memo(() => memo(() => !!virtualRange()?.offsetTop)() ? (() => {
733
+ var _el$6 = getNextElement(_tmpl$5);
734
+ effect((_$p) => setStyleProperty(_el$6, "height", `${virtualRange().offsetTop}px`));
735
+ return _el$6;
736
+ })() : null),
737
+ createComponent(For, {
738
+ get each() {
739
+ return visibleItems();
740
+ },
741
+ children: (item, index) => {
742
+ const itemIndex = () => (virtualRange()?.start ?? 0) + index();
743
+ const beforeIndicator = () => collectionRenderer().renderDropIndicator?.(itemIndex(), "before");
744
+ const onIndicator = () => collectionRenderer().renderDropIndicator?.(itemIndex(), "on");
745
+ const afterIndicator = () => collectionRenderer().renderDropIndicator?.(itemIndex(), "after");
746
+ return [
747
+ memo(beforeIndicator),
748
+ memo(onIndicator),
749
+ memo(() => renderDynamicItem(item)),
750
+ memo(afterIndicator)
751
+ ];
752
+ }
753
+ }),
754
+ memo(() => memo(() => !!virtualRange()?.offsetBottom)() ? (() => {
755
+ var _el$7 = getNextElement(_tmpl$6);
756
+ effect((_$p) => setStyleProperty(_el$7, "height", `${virtualRange().offsetBottom}px`));
757
+ return _el$7;
758
+ })() : null)
759
+ ];
760
+ } });
761
+ const menuListProps = () => ({
762
+ ref: setResolvedMenuRef,
763
+ ...mergeProps$2(domProps(), cleanMenuProps(), cleanTriggerMenuProps(), cleanFocusProps(), droppableCollection()?.collectionProps ?? {}),
764
+ class: renderProps.class(),
765
+ style: renderProps.style(),
766
+ slot: local.slot,
767
+ "data-focused": state.isFocused() || void 0,
768
+ "data-disabled": resolveDisabled() || void 0,
769
+ "data-empty": state.collection().size === 0 || void 0,
770
+ "data-drop-target": isRootDropTarget() || void 0,
771
+ children: menuListChildren()
772
+ });
773
+ const menuContent = () => createComponent(MenuContext.Provider, {
774
+ get value() {
775
+ return {
776
+ state,
777
+ isDisabled: resolveDisabled,
778
+ dragAndDropHooks: stateProps.dragAndDropHooks,
779
+ dragState: dragState(),
780
+ dropState: dropState()
781
+ };
782
+ },
783
+ get children() {
784
+ return createComponent(MenuStateContext.Provider, {
785
+ value: state,
786
+ get children() {
787
+ return createComponent(MenuSectionSelectionRegistryContext.Provider, {
788
+ value: sectionSelectionRegistry,
789
+ get children() {
790
+ return createComponent(MenuItemCloseRegistryContext.Provider, {
791
+ value: itemCloseRegistry,
792
+ get children() {
793
+ return createComponent(StaticMenuCollectionContext.Provider, {
794
+ get value() {
795
+ return usesStaticChildren() ? staticCollectionContext : null;
796
+ },
797
+ get children() {
798
+ return createComponent(MenuItemContext.Provider, {
799
+ get value() {
800
+ return menuItemContextValue();
801
+ },
802
+ get children() {
803
+ return createComponent(CollectionRendererContext.Provider, {
804
+ get value() {
805
+ return collectionRenderer();
806
+ },
807
+ get children() {
808
+ return [createComponent(Show, {
809
+ get when() {
810
+ return ariaProps.label;
811
+ },
812
+ get children() {
813
+ var _el$8 = getNextElement(_tmpl$7);
814
+ spread(_el$8, mergeProps(cleanLabelProps), false, true);
815
+ insert(_el$8, () => ariaProps.label);
816
+ runHydrationEvents();
817
+ return _el$8;
818
+ }
819
+ }), memo(() => memo(() => !!local.render)() ? local.render(menuListProps(), renderValues()) : (() => {
820
+ var _el$9 = getNextElement(_tmpl$8);
821
+ use(setResolvedMenuRef, _el$9);
822
+ spread(_el$9, mergeProps(() => mergeProps$2(domProps(), cleanMenuProps(), cleanTriggerMenuProps(), cleanFocusProps(), droppableCollection()?.collectionProps ?? {}), {
823
+ get ["class"]() {
824
+ return renderProps.class();
825
+ },
826
+ get style() {
827
+ return renderProps.style();
828
+ },
829
+ get slot() {
830
+ return local.slot;
831
+ },
832
+ get ["data-focused"]() {
833
+ return state.isFocused() || void 0;
834
+ },
835
+ get ["data-disabled"]() {
836
+ return resolveDisabled() || void 0;
837
+ },
838
+ get ["data-empty"]() {
839
+ return state.collection().size === 0 || void 0;
840
+ },
841
+ get ["data-drop-target"]() {
842
+ return isRootDropTarget() || void 0;
843
+ }
844
+ }), false, true);
845
+ insert(_el$9, menuListChildren);
846
+ runHydrationEvents();
847
+ return _el$9;
848
+ })())];
849
+ }
850
+ });
851
+ }
852
+ });
853
+ }
854
+ });
855
+ }
856
+ });
857
+ }
858
+ });
859
+ }
860
+ });
861
+ }
862
+ });
863
+ return createComponent(Show, {
864
+ get when() {
865
+ return shouldRender();
866
+ },
867
+ get children() {
868
+ return createComponent(Show, {
869
+ when: triggerContext,
870
+ get fallback() {
871
+ return menuContent();
872
+ },
873
+ get children() {
874
+ return createComponent(FocusScope, {
875
+ restoreFocus: true,
876
+ autoFocus: true,
877
+ get children() {
878
+ return menuContent();
879
+ }
880
+ });
881
+ }
882
+ });
883
+ }
884
+ });
885
+ }
886
+ /**
887
+ * An item in a menu.
888
+ */
889
+ function MenuItem(props) {
890
+ const [local, ariaProps] = splitProps(props, [
891
+ "class",
892
+ "style",
893
+ "render",
894
+ "slot",
895
+ "id",
896
+ "item",
897
+ "textValue",
898
+ "onAction",
899
+ "href",
900
+ "target",
901
+ "rel",
902
+ "download",
903
+ "onHoverStart",
904
+ "onHoverEnd",
905
+ "onHoverChange",
906
+ "ref"
907
+ ]);
908
+ const context = useContext(MenuStateContext);
909
+ if (!context) throw new Error("MenuItem must be used within a Menu");
910
+ const state = context;
911
+ const menuContext = useContext(MenuContext);
912
+ const itemContext = useContext(MenuItemContext);
913
+ const staticCollection = useContext(StaticMenuCollectionContext);
914
+ const sectionSelection = useContext(MenuSectionSelectionContext);
915
+ const sectionSelectionRegistry = useContext(MenuSectionSelectionRegistryContext);
916
+ const itemCloseRegistry = useContext(MenuItemCloseRegistryContext);
917
+ const [ref, setRef] = createSignal(null);
918
+ const contextProps = () => itemContext?.props?.() ?? {};
919
+ const combinedOnAction = () => {
920
+ local.onAction?.();
921
+ itemContext?.onAction?.();
922
+ };
923
+ const itemCloseOnSelect = () => ariaProps.closeOnSelect ?? sectionSelection?.shouldCloseOnSelect() ?? itemContext?.closeOnSelect;
924
+ const activeSectionSelection = () => sectionSelection && sectionSelection.selectionMode() !== "none" ? sectionSelection : null;
925
+ let registeredStaticKey = null;
926
+ let registeredSectionSelectionKey = null;
927
+ let registeredSectionSelection = null;
928
+ let registeredCloseKey = null;
929
+ let registeredCloseAccessor = null;
930
+ const unregisterSectionSelection = () => {
931
+ if (registeredSectionSelectionKey != null && registeredSectionSelection) {
932
+ sectionSelectionRegistry?.unregisterItem(registeredSectionSelectionKey, registeredSectionSelection);
933
+ registeredSectionSelectionKey = null;
934
+ registeredSectionSelection = null;
935
+ }
936
+ };
937
+ createEffect(() => {
938
+ if (!staticCollection) return;
939
+ if (registeredStaticKey != null && registeredStaticKey !== local.id) staticCollection.unregisterItem(registeredStaticKey);
940
+ registeredStaticKey = local.id;
941
+ staticCollection.registerItem({
942
+ id: local.id,
943
+ textValue: local.textValue ?? ariaProps["aria-label"],
944
+ isDisabled: resolveBoolean(ariaProps.isDisabled) || (sectionSelection?.isDisabled(local.id) ?? false)
945
+ });
946
+ });
947
+ onCleanup(() => {
948
+ if (registeredStaticKey != null) staticCollection?.unregisterItem(registeredStaticKey);
949
+ });
950
+ createEffect(() => {
951
+ const selection = activeSectionSelection();
952
+ if (!sectionSelectionRegistry || !selection) {
953
+ unregisterSectionSelection();
954
+ return;
955
+ }
956
+ if (registeredSectionSelectionKey === local.id && registeredSectionSelection === selection) return;
957
+ unregisterSectionSelection();
958
+ registeredSectionSelectionKey = local.id;
959
+ registeredSectionSelection = selection;
960
+ sectionSelectionRegistry.registerItem(local.id, selection);
961
+ });
962
+ onCleanup(unregisterSectionSelection);
963
+ const unregisterItemClose = () => {
964
+ if (registeredCloseKey != null && registeredCloseAccessor) {
965
+ itemCloseRegistry?.unregisterItem(registeredCloseKey, registeredCloseAccessor);
966
+ registeredCloseKey = null;
967
+ registeredCloseAccessor = null;
968
+ }
969
+ };
970
+ createEffect(() => {
971
+ if (!itemCloseRegistry) {
972
+ unregisterItemClose();
973
+ return;
974
+ }
975
+ if (registeredCloseKey === local.id && registeredCloseAccessor === itemCloseOnSelect) return;
976
+ unregisterItemClose();
977
+ registeredCloseKey = local.id;
978
+ registeredCloseAccessor = itemCloseOnSelect;
979
+ itemCloseRegistry.registerItem(local.id, itemCloseOnSelect);
980
+ });
981
+ onCleanup(unregisterItemClose);
982
+ const itemAria = createMenuItem({
983
+ key: local.id,
984
+ get id() {
985
+ return contextProps().id;
986
+ },
987
+ get isDisabled() {
988
+ return Boolean(ariaProps.isDisabled || sectionSelection?.isDisabled(local.id) || menuContext?.isDisabled());
989
+ },
990
+ get "aria-label"() {
991
+ return ariaProps["aria-label"] ?? local.textValue;
992
+ },
993
+ get "aria-controls"() {
994
+ return contextProps()["aria-controls"];
995
+ },
996
+ get "aria-haspopup"() {
997
+ return contextProps()["aria-haspopup"];
998
+ },
999
+ get "aria-expanded"() {
1000
+ return contextProps()["aria-expanded"];
1001
+ },
1002
+ get onAction() {
1003
+ return combinedOnAction;
1004
+ },
1005
+ get closeOnSelect() {
1006
+ return itemCloseOnSelect();
1007
+ },
1008
+ get href() {
1009
+ return local.href;
1010
+ },
1011
+ get target() {
1012
+ return local.target;
1013
+ },
1014
+ get rel() {
1015
+ return local.rel;
1016
+ },
1017
+ get download() {
1018
+ return local.download;
1019
+ }
1020
+ }, state, () => ref());
1021
+ const { isHovered, hoverProps } = createHover({
1022
+ get isDisabled() {
1023
+ return itemAria.isDisabled();
1024
+ },
1025
+ onHoverStart: local.onHoverStart,
1026
+ onHoverEnd: local.onHoverEnd,
1027
+ onHoverChange: local.onHoverChange
1028
+ });
1029
+ const renderValues = createMemo(() => {
1030
+ const selection = activeSectionSelection();
1031
+ return {
1032
+ isSelected: selection?.isSelected(local.id) ?? itemAria.isSelected(),
1033
+ selectionMode: selection?.selectionMode() ?? itemAria.selectionMode(),
1034
+ isFocused: itemAria.isFocused(),
1035
+ isFocusVisible: itemAria.isFocusVisible(),
1036
+ isPressed: itemAria.isPressed(),
1037
+ isHovered: isHovered(),
1038
+ isDisabled: itemAria.isDisabled(),
1039
+ hasSubmenu: Boolean(contextProps()["aria-haspopup"]),
1040
+ isOpen: contextProps()["aria-expanded"] === true,
1041
+ descriptionProps: itemAria.descriptionProps,
1042
+ keyboardShortcutProps: itemAria.keyboardShortcutProps
1043
+ };
1044
+ });
1045
+ const renderProps = useRenderProps({
1046
+ get children() {
1047
+ return props.children;
1048
+ },
1049
+ class: local.class,
1050
+ style: local.style,
1051
+ defaultClassName: "solidaria-Menu-item"
1052
+ }, renderValues);
1053
+ const hasPrimitiveLabel = () => {
1054
+ return typeof props.children === "string" || typeof props.children === "number";
1055
+ };
1056
+ const cleanItemProps = () => {
1057
+ const { ref: _ref1, ...rest } = itemAria.menuItemProps;
1058
+ if (!hasPrimitiveLabel() && rest["aria-label"] == null) delete rest["aria-labelledby"];
1059
+ const selection = activeSectionSelection();
1060
+ const selectionMode = selection?.selectionMode();
1061
+ if (selectionMode) {
1062
+ rest.role = selectionMode === "single" ? "menuitemradio" : selectionMode === "multiple" ? "menuitemcheckbox" : "menuitem";
1063
+ if (selectionMode !== "none") rest["aria-checked"] = selection?.isSelected(local.id) ?? false;
1064
+ else delete rest["aria-checked"];
1065
+ rest["data-selected"] = selection?.isSelected(local.id) || void 0;
1066
+ }
1067
+ return rest;
1068
+ };
1069
+ const cleanHoverProps = () => {
1070
+ const { ref: _ref2, ...rest } = hoverProps;
1071
+ return rest;
1072
+ };
1073
+ const domProps = createMemo(() => filterDOMProps(ariaProps, { global: true }));
1074
+ const draggableItem = createMemo(() => {
1075
+ if (!menuContext?.dragAndDropHooks?.useDraggableItem || !menuContext.dragState) return void 0;
1076
+ return menuContext.dragAndDropHooks.useDraggableItem({ key: local.id }, menuContext.dragState);
1077
+ });
1078
+ const droppableItem = createMemo(() => {
1079
+ if (!menuContext?.dragAndDropHooks?.useDroppableItem || !menuContext.dropState) return void 0;
1080
+ return menuContext.dragAndDropHooks.useDroppableItem({ key: local.id }, menuContext.dropState, () => ref());
1081
+ });
1082
+ const isLink = () => !!local.href;
1083
+ const cleanItemPropsForLink = () => {
1084
+ const { href: _href, target: _target, rel: _rel, download: _download, ...rest } = cleanItemProps();
1085
+ return rest;
1086
+ };
1087
+ const linkDomProps = () => {
1088
+ const all = cleanItemProps();
1089
+ const result = {};
1090
+ if (all.href !== void 0) result.href = all.href;
1091
+ if (all.target !== void 0) result.target = all.target;
1092
+ if (all.rel !== void 0) result.rel = all.rel;
1093
+ if (all.download !== void 0) result.download = all.download;
1094
+ return result;
1095
+ };
1096
+ const dataAttrs = () => {
1097
+ const selection = activeSectionSelection();
1098
+ return {
1099
+ "data-focused": itemAria.isFocused() || void 0,
1100
+ "data-focus-visible": itemAria.isFocusVisible() || void 0,
1101
+ "data-pressed": itemAria.isPressed() || void 0,
1102
+ "data-hovered": isHovered() || void 0,
1103
+ "data-disabled": itemAria.isDisabled() || void 0,
1104
+ "data-selected": (selection?.isSelected(local.id) ?? itemAria.isSelected()) || void 0,
1105
+ "data-has-submenu": Boolean(contextProps()["aria-haspopup"]) || void 0,
1106
+ "data-open": contextProps()["aria-expanded"] === true || void 0,
1107
+ "data-dragging": draggableItem()?.isDragging || void 0,
1108
+ "data-drop-target": droppableItem()?.isDropTarget || void 0
1109
+ };
1110
+ };
1111
+ const childContent = () => hasPrimitiveLabel() ? (() => {
1112
+ var _el$0 = getNextElement(_tmpl$7);
1113
+ spread(_el$0, mergeProps(() => itemAria.labelProps), false, true);
1114
+ insert(_el$0, () => renderProps.renderChildren());
1115
+ runHydrationEvents();
1116
+ return _el$0;
1117
+ })() : renderProps.renderChildren();
1118
+ const setResolvedItemRef = (el) => {
1119
+ setRef(el);
1120
+ itemContext?.setItemRef?.(el);
1121
+ if (el) assignRef(local.ref, el);
1122
+ };
1123
+ const menuItemProps = () => ({
1124
+ ref: setResolvedItemRef,
1125
+ ...mergeProps$2(cleanItemProps(), contextProps(), domProps(), cleanHoverProps(), draggableItem()?.dragProps ?? {}, droppableItem()?.dropProps ?? {}),
1126
+ class: renderProps.class(),
1127
+ style: renderProps.style(),
1128
+ ...dataAttrs(),
1129
+ children: childContent()
1130
+ });
1131
+ const linkMenuItemProps = () => ({
1132
+ ...mergeProps$2(cleanItemPropsForLink(), contextProps(), domProps(), cleanHoverProps(), linkDomProps(), draggableItem()?.dragProps ?? {}, droppableItem()?.dropProps ?? {}),
1133
+ class: renderProps.class(),
1134
+ style: renderProps.style(),
1135
+ ...dataAttrs(),
1136
+ children: childContent()
1137
+ });
1138
+ if (local.render && !isLink()) return local.render(menuItemProps(), renderValues());
1139
+ return createComponent(Show, {
1140
+ get when() {
1141
+ return isLink();
1142
+ },
1143
+ get fallback() {
1144
+ return (() => {
1145
+ var _el$1 = getNextElement(_tmpl$8);
1146
+ use((el) => {
1147
+ setRef(el);
1148
+ itemContext?.setItemRef?.(el);
1149
+ assignRef(local.ref, el);
1150
+ }, _el$1);
1151
+ spread(_el$1, mergeProps(() => mergeProps$2(cleanItemProps(), contextProps(), domProps(), cleanHoverProps(), draggableItem()?.dragProps ?? {}, droppableItem()?.dropProps ?? {}), {
1152
+ get ["class"]() {
1153
+ return renderProps.class();
1154
+ },
1155
+ get style() {
1156
+ return renderProps.style();
1157
+ }
1158
+ }, dataAttrs), false, true);
1159
+ insert(_el$1, childContent);
1160
+ runHydrationEvents();
1161
+ return _el$1;
1162
+ })();
1163
+ },
1164
+ get children() {
1165
+ return memo(() => !!local.render)() ? local.render(linkMenuItemProps(), renderValues()) : (() => {
1166
+ var _el$10 = getNextElement(_tmpl$9);
1167
+ use((el) => {
1168
+ setRef(el);
1169
+ itemContext?.setItemRef?.(el);
1170
+ assignRef(local.ref, el);
1171
+ }, _el$10);
1172
+ spread(_el$10, mergeProps(() => mergeProps$2(cleanItemPropsForLink(), contextProps(), domProps(), cleanHoverProps(), linkDomProps(), draggableItem()?.dragProps ?? {}, droppableItem()?.dropProps ?? {}), {
1173
+ get ["class"]() {
1174
+ return renderProps.class();
1175
+ },
1176
+ get style() {
1177
+ return renderProps.style();
1178
+ }
1179
+ }, dataAttrs), false, true);
1180
+ insert(_el$10, childContent);
1181
+ runHydrationEvents();
1182
+ return _el$10;
1183
+ })();
1184
+ }
1185
+ });
1186
+ }
1187
+ /**
1188
+ * Section primitive alias for Menu composition parity.
1189
+ */
1190
+ function MenuSection(props) {
1191
+ const [selectionProps, sectionProps] = splitProps(props, [
1192
+ "selectionMode",
1193
+ "selectionBehavior",
1194
+ "disallowEmptySelection",
1195
+ "selectedKeys",
1196
+ "defaultSelectedKeys",
1197
+ "onSelectionChange",
1198
+ "disabledKeys",
1199
+ "disabledBehavior",
1200
+ "allowDuplicateSelectionEvents",
1201
+ "shouldCloseOnSelect"
1202
+ ]);
1203
+ const selectionState = createSelectionState({
1204
+ get selectionMode() {
1205
+ return selectionProps.selectionMode ?? "none";
1206
+ },
1207
+ get selectionBehavior() {
1208
+ return selectionProps.selectionBehavior;
1209
+ },
1210
+ get disallowEmptySelection() {
1211
+ return selectionProps.disallowEmptySelection;
1212
+ },
1213
+ get selectedKeys() {
1214
+ return selectionProps.selectionMode ? selectionProps.selectedKeys : void 0;
1215
+ },
1216
+ get defaultSelectedKeys() {
1217
+ return selectionProps.selectionMode ? selectionProps.defaultSelectedKeys : void 0;
1218
+ },
1219
+ get onSelectionChange() {
1220
+ return selectionProps.selectionMode ? selectionProps.onSelectionChange : void 0;
1221
+ },
1222
+ get disabledKeys() {
1223
+ return selectionProps.disabledKeys;
1224
+ },
1225
+ get disabledBehavior() {
1226
+ return selectionProps.disabledBehavior;
1227
+ },
1228
+ get allowDuplicateSelectionEvents() {
1229
+ return selectionProps.allowDuplicateSelectionEvents;
1230
+ }
1231
+ });
1232
+ const sectionSelection = {
1233
+ selectionMode: selectionState.selectionMode,
1234
+ isSelected: selectionState.isSelected,
1235
+ isDisabled: selectionState.isDisabled,
1236
+ select(key, event) {
1237
+ selectionState.select(key, event);
1238
+ },
1239
+ shouldCloseOnSelect() {
1240
+ return selectionProps.shouldCloseOnSelect;
1241
+ }
1242
+ };
1243
+ return createComponent(MenuSectionSelectionContext.Provider, {
1244
+ value: sectionSelection,
1245
+ get children() {
1246
+ return createComponent(Section, sectionProps);
1247
+ }
1248
+ });
1249
+ }
1250
+ Menu.Item = MenuItem;
1251
+ //#endregion
1252
+ export { Menu, MenuButton, MenuContext, MenuItem, MenuSection, MenuStateContext, MenuTrigger, MenuTriggerContext, RootMenuTriggerStateContext, SubmenuTrigger };
1253
+
1254
+ //# sourceMappingURL=Menu.js.map