@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ListBox.js","names":["JSX","createContext","createEffect","createMemo","createSignal","onCleanup","splitProps","useContext","For","Show","createListBox","createOption","createFocusRing","createScrollIntoViewOnFocus","mergeProps","useLocale","AriaListBoxProps","AriaOptionProps","createListState","ListState","Key","DropTarget","RenderChildren","ClassNameOrFunction","StyleOrFunction","SlotProps","useRenderProps","filterDOMProps","SharedElementTransition","SelectionIndicatorContext","SelectionIndicatorContextValue","useVirtualizerContext","DragAndDropHooks","getNormalizedDropTargetKey","mergePersistedKeysIntoVirtualRange","useDndPersistedKeys","useRenderDropIndicator","CollectionRendererContext","Section","Header","Group","CollectionEntry","CollectionRendererContextValue","SectionProps","useCollectionRenderer","isCollectionSection","flattenCollectionEntries","ListBoxRenderProps","isFocused","isFocusVisible","isDisabled","isEmpty","RefLike","el","T","current","assignRef","ref","ListBoxProps","Omit","items","getKey","item","getTextValue","getDisabled","selectionMode","selectionBehavior","disabledBehavior","disabledKeys","Iterable","selectedKeys","defaultSelectedKeys","onSelectionChange","keys","Set","children","Element","class","style","renderEmptyState","hasMore","isLoading","onLoadMore","Promise","HTMLUListElement","dragAndDropHooks","layout","orientation","slots","Record","Partial","ListBoxOptionRenderProps","isSelected","isPressed","isHovered","ListBoxOptionProps","id","textValue","HTMLLIElement","ListBoxLoadMoreItemProps","scrollOffset","ListBoxSectionProps","ListBoxContextValue","state","dragState","dropState","ListBoxContext","ListBoxStateContext","ListStateContext","ListBox","props","parentContext","contextSlotProps","slot","mergedListBoxProps","local","stateProps","ariaProps","flatItems","hasSections","some","resolveDisabled","disabled","locale","listBoxAria","direction","listRef","focusProps","renderValues","collection","size","renderProps","defaultClassName","domProps","filtered","global","cleanListBoxProps","_ref1","rest","listBoxProps","cleanFocusProps","_ref2","cleanLabelProps","_ref3","labelProps","setListRef","HTMLElement","focusedKey","isActive","length","parentCollectionRenderer","getItemNodes","Array","from","filter","node","type","getDropTargetByIndex","index","position","key","dropPosition","hasDroppableDnd","hooks","Boolean","useDroppableCollectionState","useDroppableCollection","dropTargetDelegate","ListDropTargetDelegate","undefined","hasDraggableDnd","useDraggableCollectionState","useDraggableCollection","activeDragState","droppableCollection","activeDropState","resolveDirection","window","getComputedStyle","dir","document","keyboardDelegate","getFirstKey","getLastKey","getKeyBelow","getKeyAfter","getKeyAbove","getKeyBefore","getKeyPageBelow","getKeyPageAbove","isRootDropTarget","target","dndRenderDropIndicator","dndDropIndicator","virtualizer","persistedKeys","virtualRange","isVirtualized","baseRange","getVisibleRange","itemNodes","persistedIndexes","map","findIndex","dropTarget","normalizedDropKey","focusedIndex","forceIncludeIndexes","forceIncludeMaxSpan","setDropTargetItemCountResolver","setDropTargetIndexResolver","setDropTargetResolver","visibleItems","range","slice","start","end","virtualSpacerStyle","CSSProperties","width","height","sectionedRenderEntries","globalIndex","entry","sectionItems","const","section","indexedItem","collectionRenderer","renderItem","renderDropIndicator","_$createComponent","Provider","value","when","label","_el$","_$getNextElement","_tmpl$","_$spread","_$mergeProps","_$insert","_$runHydrationEvents","_el$2","_tmpl$2","_el$3","firstChild","_el$4","_co$","_$getNextMarker","nextSibling","_el$5","_el$6","_co$2","_$use","collectionProps","data-focused","data-focus-visible","data-disabled","data-empty","data-layout","data-orientation","data-drop-target","_$memo","_el$7","_tmpl$3","each","_el$8","_tmpl$5","title","_el$9","_tmpl$4","_$effect","_$setAttribute","offsetTop","_el$0","_tmpl$6","_$p","_$style","itemIndex","beforeIndicator","onIndicator","afterIndicator","offsetBottom","_el$1","_tmpl$7","_c$","ListBoxLoadMoreItem","ListBoxOption","context","Error","listContext","setRef","optionAria","aria-label","shouldSelectOnPressUp","shouldFocusOnHover","onHoverStart","onHoverEnd","onHoverChange","hasPrimitiveLabel","selectionIndicatorContext","draggableItem","useDraggableItem","Parameters","NonNullable","droppableItem","useDroppableItem","cleanOptionProps","_ariaDescribedby","optionProps","_el$10","_tmpl$8","dragProps","dropProps","data-selected","data-pressed","data-hovered","data-dragging","isDragging","isDropTarget","_c$2","_el$11","renderChildren","sentinelRef","HTMLDivElement","isPending","setIsPending","triggerLoadMore","IntersectionObserver","offset","margin","observer","entries","isIntersecting","rootMargin","observe","disconnect","_el$12","_tmpl$9","_el$13","_ref$","_el$14","_tmpl$0","addEventListener","_p$","_v$","_v$2","_v$3","e","_$className","t","a","ListBoxSection","Option","LoadMoreItem"],"sources":["../src/ListBox.tsx"],"sourcesContent":["/**\n * ListBox component for solidaria-components\n *\n * A pre-wired headless listbox that combines state + aria hooks.\n * Port of react-aria-components/src/ListBox.tsx\n */\n\nimport {\n type JSX,\n createContext,\n createEffect,\n createMemo,\n createSignal,\n onCleanup,\n splitProps,\n useContext,\n For,\n Show,\n} from \"solid-js\";\nimport {\n createListBox,\n createOption,\n createFocusRing,\n createScrollIntoViewOnFocus,\n mergeProps,\n useLocale,\n type AriaListBoxProps,\n type AriaOptionProps,\n} from \"@proyecto-viviana/solidaria\";\nimport {\n createListState,\n type ListState,\n type Key,\n type DropTarget,\n} from \"@proyecto-viviana/solid-stately\";\nimport {\n type RenderChildren,\n type ClassNameOrFunction,\n type StyleOrFunction,\n type SlotProps,\n useRenderProps,\n filterDOMProps,\n} from \"./utils\";\nimport { SharedElementTransition } from \"./SharedElementTransition\";\nimport {\n SelectionIndicatorContext,\n type SelectionIndicatorContextValue,\n} from \"./SelectionIndicator\";\nimport { useVirtualizerContext } from \"./Virtualizer\";\nimport { type DragAndDropHooks } from \"./useDragAndDrop\";\nimport {\n getNormalizedDropTargetKey,\n mergePersistedKeysIntoVirtualRange,\n useDndPersistedKeys,\n useRenderDropIndicator,\n} from \"./DragAndDrop\";\nimport {\n CollectionRendererContext,\n Section,\n Header,\n Group,\n type CollectionEntry,\n type CollectionRendererContextValue,\n type SectionProps,\n useCollectionRenderer,\n isCollectionSection,\n flattenCollectionEntries,\n} from \"./Collection\";\n\nexport interface ListBoxRenderProps {\n /** Whether the listbox has focus. */\n isFocused: boolean;\n /** Whether the listbox has keyboard focus. */\n isFocusVisible: boolean;\n /** Whether the listbox is disabled. */\n isDisabled: boolean;\n /** Whether the listbox is empty. */\n isEmpty: boolean;\n}\n\ntype RefLike<T> = ((el: T) => void) | { current?: T | null } | undefined;\n\nfunction assignRef<T>(ref: RefLike<T>, el: T): void {\n if (!ref) return;\n if (typeof ref === \"function\") ref(el);\n else ref.current = el;\n}\n\nexport interface ListBoxProps<T> extends Omit<AriaListBoxProps, \"children\">, SlotProps {\n /** The items to render in the listbox. */\n items: CollectionEntry<T>[];\n /** Function to get the key from an item. */\n getKey?: (item: T) => Key;\n /** Function to get the text value from an item. */\n getTextValue?: (item: T) => string;\n /** Function to check if an item is disabled. */\n getDisabled?: (item: T) => boolean;\n /** The selection mode. */\n selectionMode?: \"none\" | \"single\" | \"multiple\";\n /** The selection behavior (toggle vs replace). */\n selectionBehavior?: \"toggle\" | \"replace\";\n /** Whether disabled items can still receive focus. */\n disabledBehavior?: \"selection\" | \"all\";\n /** Keys of disabled items. */\n disabledKeys?: Iterable<Key>;\n /** Currently selected keys (controlled). */\n selectedKeys?: \"all\" | Iterable<Key>;\n /** Default selected keys (uncontrolled). */\n defaultSelectedKeys?: \"all\" | Iterable<Key>;\n /** Handler called when selection changes. */\n onSelectionChange?: (keys: \"all\" | Set<Key>) => void;\n /** The children of the component. A function may be provided to render each item. */\n children: (item: T) => JSX.Element;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<ListBoxRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<ListBoxRenderProps>;\n /** A function to render when the listbox is empty. */\n renderEmptyState?: () => JSX.Element;\n /** Whether there are more items to load. */\n hasMore?: boolean;\n /** Whether additional items are currently loading. */\n isLoading?: boolean;\n /** Called when the load more sentinel becomes visible. */\n onLoadMore?: () => void | Promise<void>;\n /** Ref for the listbox element. */\n ref?: RefLike<HTMLUListElement>;\n /** Drag and drop hooks from `useDragAndDrop`. */\n dragAndDropHooks?: DragAndDropHooks<T>;\n /** Layout hint for styling parity. */\n layout?: \"stack\" | \"grid\";\n /** Orientation hint for styling parity. */\n orientation?: \"vertical\" | \"horizontal\";\n /** Slot definitions provided through ListBoxContext. */\n slots?: Record<string, Partial<ListBoxProps<T>>>;\n}\n\nexport interface ListBoxOptionRenderProps {\n /** Whether the option is selected. */\n isSelected: boolean;\n /** Whether the option is focused. */\n isFocused: boolean;\n /** Whether the option has keyboard focus. */\n isFocusVisible: boolean;\n /** Whether the option is pressed. */\n isPressed: boolean;\n /** Whether the option is hovered. */\n isHovered: boolean;\n /** Whether the option is disabled. */\n isDisabled: boolean;\n}\n\nexport interface ListBoxOptionProps<T>\n extends Omit<AriaOptionProps, \"children\" | \"key\">, SlotProps {\n /** The unique key for the option. */\n id: Key;\n /** The item value. */\n item?: T;\n /** The children of the option. A function may be provided to receive render props. */\n children?: RenderChildren<ListBoxOptionRenderProps>;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<ListBoxOptionRenderProps>;\n /** The inline style for the element. */\n style?: StyleOrFunction<ListBoxOptionRenderProps>;\n /** The text value of the option (for typeahead). */\n textValue?: string;\n /** Ref for the option element. */\n ref?: RefLike<HTMLLIElement>;\n}\n\nexport interface ListBoxLoadMoreItemProps extends SlotProps {\n /** Called when the sentinel becomes visible. */\n onLoadMore: () => void | Promise<void>;\n /** Whether additional items are currently loading. */\n isLoading?: boolean;\n /** Scroll offset multiplier for early loading trigger (default: 1 = 100% of viewport height). */\n scrollOffset?: number;\n /** Content for the load more row. */\n children?: JSX.Element;\n /** The CSS className for the element. */\n class?: ClassNameOrFunction<{ isLoading: boolean }>;\n /** The inline style for the element. */\n style?: StyleOrFunction<{ isLoading: boolean }>;\n}\n\nexport interface ListBoxSectionProps extends SectionProps {}\n\ninterface ListBoxContextValue<T> {\n state: ListState<T>;\n isDisabled: () => boolean;\n dragAndDropHooks?: DragAndDropHooks<unknown>;\n dragState?: unknown;\n dropState?: unknown;\n slots?: Record<string, Partial<ListBoxProps<T>>>;\n}\n\nexport const ListBoxContext = createContext<ListBoxContextValue<unknown> | null>(null);\nexport const ListBoxStateContext = createContext<ListState<unknown> | null>(null);\nexport const ListStateContext = ListBoxStateContext;\n\n/**\n * A listbox displays a list of options and allows a user to select one or more of them.\n */\nexport function ListBox<T>(props: ListBoxProps<T>): JSX.Element {\n const parentContext = useContext(ListBoxContext) as ListBoxContextValue<T> | null;\n const contextSlotProps = parentContext?.slots?.[props.slot ?? \"default\"];\n const mergedListBoxProps = contextSlotProps\n ? (mergeProps(contextSlotProps, props) as ListBoxProps<T>)\n : props;\n const [local, stateProps, ariaProps] = splitProps(\n mergedListBoxProps,\n [\n \"children\",\n \"class\",\n \"style\",\n \"slot\",\n \"renderEmptyState\",\n \"hasMore\",\n \"isLoading\",\n \"onLoadMore\",\n \"dragAndDropHooks\",\n \"slots\",\n \"ref\",\n ],\n [\n \"items\",\n \"getKey\",\n \"getTextValue\",\n \"getDisabled\",\n \"disabledKeys\",\n \"disabledBehavior\",\n \"selectionMode\",\n \"selectionBehavior\",\n \"selectedKeys\",\n \"defaultSelectedKeys\",\n \"onSelectionChange\",\n \"layout\",\n \"orientation\",\n ],\n );\n\n const flatItems = createMemo<T[]>(() => {\n return flattenCollectionEntries(stateProps.items);\n });\n\n const hasSections = createMemo(() => stateProps.items.some((item) => isCollectionSection(item)));\n\n const state = createListState<T>({\n get items() {\n return flatItems();\n },\n get getKey() {\n return stateProps.getKey;\n },\n get getTextValue() {\n return stateProps.getTextValue;\n },\n get getDisabled() {\n return stateProps.getDisabled;\n },\n get disabledKeys() {\n return stateProps.disabledKeys;\n },\n get selectionMode() {\n return stateProps.selectionMode;\n },\n get selectionBehavior() {\n return stateProps.selectionBehavior;\n },\n get disabledBehavior() {\n return stateProps.disabledBehavior;\n },\n get selectedKeys() {\n return stateProps.selectedKeys;\n },\n get defaultSelectedKeys() {\n return stateProps.defaultSelectedKeys;\n },\n get onSelectionChange() {\n return stateProps.onSelectionChange;\n },\n });\n\n const resolveDisabled = (): boolean => {\n const disabled = ariaProps.isDisabled;\n if (typeof disabled === \"function\") {\n return (disabled as () => boolean)();\n }\n return !!disabled;\n };\n\n const locale = useLocale();\n const listBoxAria = createListBox(\n {\n ...ariaProps,\n get isDisabled() {\n return resolveDisabled();\n },\n get orientation() {\n return stateProps.orientation ?? \"vertical\";\n },\n get direction() {\n return locale().direction;\n },\n },\n state,\n () => listRef(),\n );\n\n const { isFocused, isFocusVisible, focusProps } = createFocusRing();\n\n const renderValues = createMemo<ListBoxRenderProps>(() => ({\n isFocused: state.isFocused() || isFocused(),\n isFocusVisible: isFocusVisible(),\n isDisabled: resolveDisabled(),\n isEmpty: state.collection().size === 0,\n }));\n\n const renderProps = useRenderProps(\n {\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-ListBox\",\n },\n renderValues,\n );\n\n const domProps = createMemo(() => {\n const filtered = filterDOMProps(ariaProps as Record<string, unknown>, { global: true });\n return filtered;\n });\n\n const cleanListBoxProps = () => {\n const { ref: _ref1, ...rest } = listBoxAria.listBoxProps as Record<string, unknown>;\n return rest;\n };\n const cleanFocusProps = () => {\n const { ref: _ref2, ...rest } = focusProps as Record<string, unknown>;\n return rest;\n };\n const cleanLabelProps = () => {\n const { ref: _ref3, ...rest } = listBoxAria.labelProps as Record<string, unknown>;\n return rest;\n };\n const [listRef, setListRef] = createSignal<HTMLElement | null>(null);\n\n // Reveal the activedescendant-focused option on keyboard navigation. The\n // listbox keeps real DOM focus on itself, so the browser won't natively scroll\n // an off-screen focused option into view the way roving tabindex would.\n createScrollIntoViewOnFocus({\n focusedKey: () => state.focusedKey(),\n isActive: () => state.isFocused(),\n ref: () => listRef(),\n });\n\n const isEmpty = () => stateProps.items.length === 0;\n const parentCollectionRenderer = useCollectionRenderer<unknown>();\n const getItemNodes = createMemo(() =>\n Array.from(state.collection()).filter((node) => node.type === \"item\"),\n );\n const getDropTargetByIndex = (\n index: number,\n position: \"before\" | \"after\" | \"on\",\n ): DropTarget | null => {\n const node = getItemNodes()[index];\n if (!node) return null;\n return { type: \"item\", key: node.key, dropPosition: position };\n };\n const hasDroppableDnd = createMemo(() => {\n const hooks = local.dragAndDropHooks;\n return Boolean(\n hooks?.useDroppableCollectionState &&\n hooks.useDroppableCollection &&\n (hooks.dropTargetDelegate ||\n parentCollectionRenderer?.dropTargetDelegate ||\n hooks.ListDropTargetDelegate),\n );\n });\n const dropState = createMemo(() => {\n if (!hasDroppableDnd()) return undefined;\n return local.dragAndDropHooks?.useDroppableCollectionState?.({});\n });\n const hasDraggableDnd = createMemo(() => {\n const hooks = local.dragAndDropHooks;\n return Boolean(hooks?.useDraggableCollectionState && hooks.useDraggableCollection);\n });\n const dragState = createMemo(() => {\n if (!hasDraggableDnd()) return undefined;\n return local.dragAndDropHooks?.useDraggableCollectionState?.({\n items: flatItems(),\n });\n });\n createEffect(() => {\n if (!hasDraggableDnd()) return;\n const hooks = local.dragAndDropHooks;\n const activeDragState = dragState();\n if (!hooks?.useDraggableCollection || !activeDragState) return;\n hooks.useDraggableCollection({}, activeDragState, () => listRef());\n });\n const droppableCollection = createMemo(() => {\n if (!hasDroppableDnd()) return undefined;\n const hooks = local.dragAndDropHooks;\n const activeDropState = dropState();\n if (!hooks?.useDroppableCollection || !activeDropState) return undefined;\n const resolveDirection = (): \"ltr\" | \"rtl\" => {\n const el = listRef();\n if (el && typeof window !== \"undefined\" && typeof window.getComputedStyle === \"function\") {\n const dir = window.getComputedStyle(el).direction;\n if (dir === \"rtl\") return \"rtl\";\n }\n return typeof document !== \"undefined\" && document.dir === \"rtl\" ? \"rtl\" : \"ltr\";\n };\n const dropTargetDelegate =\n hooks.dropTargetDelegate ??\n parentCollectionRenderer?.dropTargetDelegate ??\n (hooks.ListDropTargetDelegate\n ? new hooks.ListDropTargetDelegate(\n () => state.collection(),\n () => listRef(),\n { layout: \"stack\", orientation: \"vertical\", direction: resolveDirection() },\n )\n : undefined);\n if (!dropTargetDelegate) return undefined;\n return hooks.useDroppableCollection(\n {\n dropTargetDelegate,\n keyboardDelegate: {\n getFirstKey: () => state.collection().getFirstKey(),\n getLastKey: () => state.collection().getLastKey(),\n getKeyBelow: (key) => state.collection().getKeyAfter(key),\n getKeyAbove: (key) => state.collection().getKeyBefore(key),\n getKeyPageBelow: (key) => state.collection().getKeyAfter(key),\n getKeyPageAbove: (key) => state.collection().getKeyBefore(key),\n },\n },\n activeDropState,\n () => listRef(),\n );\n });\n const isRootDropTarget = createMemo(() => {\n return Boolean(dropState()?.target?.type === \"root\");\n });\n const dndRenderDropIndicator = createMemo(() =>\n useRenderDropIndicator(local.dragAndDropHooks, dropState()),\n );\n const dndDropIndicator = (index: number, position: \"before\" | \"after\" | \"on\") => {\n const target = getDropTargetByIndex(index, position);\n if (!target || target.type !== \"item\") return undefined;\n return dndRenderDropIndicator()?.(target);\n };\n const virtualizer = useVirtualizerContext();\n const persistedKeys = useDndPersistedKeys(\n { focusedKey: state.focusedKey },\n local.dragAndDropHooks,\n dropState(),\n state.collection(),\n );\n const virtualRange = createMemo(() => {\n if (!virtualizer || !parentCollectionRenderer?.isVirtualized || hasSections()) return null;\n const baseRange = virtualizer.getVisibleRange(stateProps.items.length);\n const itemNodes = getItemNodes();\n const persistedIndexes = Array.from(persistedKeys())\n .map((key) => itemNodes.findIndex((node) => node.key === key))\n .filter((index) => index >= 0);\n const dropTarget = dropState()?.target;\n const normalizedDropKey = getNormalizedDropTargetKey(dropTarget, state.collection());\n const focusedKey = state.focusedKey();\n const focusedIndex =\n focusedKey != null ? itemNodes.findIndex((node) => node.key === focusedKey) : -1;\n const forceIncludeIndexes = [\n dropTarget?.type === \"item\" ? itemNodes.findIndex((node) => node.key === dropTarget.key) : -1,\n normalizedDropKey != null\n ? itemNodes.findIndex((node) => node.key === normalizedDropKey)\n : -1,\n dropTarget?.type === \"item\" ? -1 : focusedIndex,\n ].filter((index) => index >= 0);\n return mergePersistedKeysIntoVirtualRange(\n baseRange,\n persistedIndexes,\n stateProps.items.length,\n virtualizer,\n 80,\n {\n forceIncludeIndexes,\n forceIncludeMaxSpan: 320,\n },\n );\n });\n createEffect(() => {\n if (!virtualizer || !parentCollectionRenderer?.isVirtualized) return;\n const getItemNodes = () =>\n Array.from(state.collection()).filter((node) => node.type === \"item\");\n virtualizer.setDropTargetItemCountResolver(() => getItemNodes().length);\n virtualizer.setDropTargetIndexResolver((key) => {\n const index = getItemNodes().findIndex((node) => node.key === key);\n return index >= 0 ? index : null;\n });\n virtualizer.setDropTargetResolver((target) => {\n const node = getItemNodes()[target.index];\n if (!node) return target;\n return {\n ...target,\n key: typeof node.key === \"string\" || typeof node.key === \"number\" ? node.key : undefined,\n };\n });\n onCleanup(() => {\n virtualizer.setDropTargetIndexResolver(undefined);\n virtualizer.setDropTargetItemCountResolver(undefined);\n virtualizer.setDropTargetResolver(undefined);\n });\n });\n const visibleItems = createMemo(() => {\n const range = virtualRange();\n if (!range) return stateProps.items;\n return stateProps.items.slice(range.start, range.end);\n });\n // Spacers reserve the windowed-out extent along the virtualizer's primary axis,\n // so a horizontal layout offsets along width rather than height.\n const virtualSpacerStyle = (size: number): JSX.CSSProperties =>\n virtualizer?.orientation === \"horizontal\" ? { width: `${size}px` } : { height: `${size}px` };\n const sectionedRenderEntries = createMemo(() => {\n let globalIndex = 0;\n return stateProps.items.map((entry) => {\n if (isCollectionSection(entry)) {\n const sectionItems = entry.items.map((item) => ({\n item,\n index: globalIndex++,\n }));\n return {\n type: \"section\" as const,\n section: entry,\n items: sectionItems,\n };\n }\n const indexedItem = {\n item: entry as T,\n index: globalIndex++,\n };\n return {\n type: \"item\" as const,\n item: indexedItem,\n };\n });\n });\n const collectionRenderer = createMemo<CollectionRendererContextValue<unknown>>(() => ({\n ...parentCollectionRenderer,\n renderItem: (item) => local.children(item as T),\n renderDropIndicator: (index, position) =>\n dndDropIndicator(index, position) ??\n parentCollectionRenderer?.renderDropIndicator?.(index, position),\n }));\n\n return (\n <ListBoxContext.Provider\n value={\n {\n state,\n isDisabled: resolveDisabled,\n dragAndDropHooks: local.dragAndDropHooks as DragAndDropHooks<unknown> | undefined,\n dragState: dragState(),\n dropState: dropState(),\n slots: local.slots,\n } as ListBoxContextValue<unknown>\n }\n >\n <ListBoxStateContext.Provider value={state}>\n <CollectionRendererContext.Provider value={collectionRenderer()}>\n <>\n <Show when={ariaProps.label}>\n <span {...cleanLabelProps()}>{ariaProps.label as JSX.Element}</span>\n </Show>\n <ul\n {...mergeProps(\n domProps(),\n cleanListBoxProps(),\n cleanFocusProps(),\n (droppableCollection()?.collectionProps as Record<string, unknown> | undefined) ??\n {},\n )}\n ref={(el) => {\n setListRef(el);\n assignRef(local.ref, el);\n }}\n class={renderProps.class()}\n style={renderProps.style()}\n data-focused={state.isFocused() || undefined}\n data-focus-visible={isFocusVisible() || undefined}\n data-disabled={resolveDisabled() || undefined}\n data-empty={isEmpty() || undefined}\n data-layout={stateProps.layout}\n data-orientation={stateProps.orientation}\n data-drop-target={isRootDropTarget() || undefined}\n slot={local.slot}\n >\n <SharedElementTransition>\n {isEmpty() && local.renderEmptyState ? (\n <li role=\"option\" style={{ display: \"contents\" }} data-empty-state>\n {local.renderEmptyState()}\n </li>\n ) : hasSections() ? (\n <For each={sectionedRenderEntries()}>\n {(entry) =>\n entry.type === \"section\" ? (\n <li role=\"presentation\" data-section-wrapper>\n <Section class=\"solidaria-ListBox-section\">\n {entry.section.title != null && (\n <Header class=\"solidaria-ListBox-sectionHeader\">\n {entry.section.title}\n </Header>\n )}\n <Group class=\"solidaria-ListBox-sectionGroup\">\n <ul role=\"group\" aria-label={entry.section[\"aria-label\"]}>\n <For each={entry.items}>\n {(indexedItem) => (\n <>\n {collectionRenderer().renderDropIndicator?.(\n indexedItem.index,\n \"before\",\n )}\n {collectionRenderer().renderDropIndicator?.(\n indexedItem.index,\n \"on\",\n )}\n {local.children(indexedItem.item)}\n {collectionRenderer().renderDropIndicator?.(\n indexedItem.index,\n \"after\",\n )}\n </>\n )}\n </For>\n </ul>\n </Group>\n </Section>\n </li>\n ) : (\n <>\n {collectionRenderer().renderDropIndicator?.(entry.item.index, \"before\")}\n {collectionRenderer().renderDropIndicator?.(entry.item.index, \"on\")}\n {local.children(entry.item.item)}\n {collectionRenderer().renderDropIndicator?.(entry.item.index, \"after\")}\n </>\n )\n }\n </For>\n ) : (\n <>\n {virtualRange()?.offsetTop ? (\n <li\n role=\"presentation\"\n aria-hidden=\"true\"\n style={virtualSpacerStyle(virtualRange()!.offsetTop)}\n data-virtualizer-spacer=\"top\"\n />\n ) : null}\n <For each={visibleItems()}>\n {(item, index) => {\n const itemIndex = () => (virtualRange()?.start ?? 0) + index();\n const beforeIndicator = () =>\n collectionRenderer().renderDropIndicator?.(itemIndex(), \"before\");\n const onIndicator = () =>\n collectionRenderer().renderDropIndicator?.(itemIndex(), \"on\");\n const afterIndicator = () =>\n collectionRenderer().renderDropIndicator?.(itemIndex(), \"after\");\n return (\n <>\n {beforeIndicator()}\n {onIndicator()}\n {local.children(item as T)}\n {afterIndicator()}\n </>\n );\n }}\n </For>\n {virtualRange()?.offsetBottom ? (\n <li\n role=\"presentation\"\n aria-hidden=\"true\"\n style={virtualSpacerStyle(virtualRange()!.offsetBottom)}\n data-virtualizer-spacer=\"bottom\"\n />\n ) : null}\n </>\n )}\n </SharedElementTransition>\n {local.hasMore && local.onLoadMore && (\n <ListBoxLoadMoreItem onLoadMore={local.onLoadMore} isLoading={local.isLoading} />\n )}\n </ul>\n </>\n </CollectionRendererContext.Provider>\n </ListBoxStateContext.Provider>\n </ListBoxContext.Provider>\n );\n}\n\n/**\n * An option in a listbox.\n */\nexport function ListBoxOption<T>(props: ListBoxOptionProps<T>): JSX.Element {\n const [local, ariaProps] = splitProps(props, [\n \"class\",\n \"style\",\n \"slot\",\n \"id\",\n \"item\",\n \"textValue\",\n \"ref\",\n ]);\n\n const context = useContext(ListBoxStateContext);\n if (!context) {\n throw new Error(\"ListBoxOption must be used within a ListBox\");\n }\n const state = context as ListState<T>;\n const listContext = useContext(ListBoxContext) as ListBoxContextValue<T> | null;\n const [ref, setRef] = createSignal<HTMLLIElement | null>(null);\n\n const optionAria = createOption<T>(\n {\n key: local.id,\n get isDisabled() {\n return Boolean(ariaProps.isDisabled || listContext?.isDisabled());\n },\n get \"aria-label\"() {\n return ariaProps[\"aria-label\"] ?? local.textValue;\n },\n get shouldSelectOnPressUp() {\n return ariaProps.shouldSelectOnPressUp;\n },\n get shouldFocusOnHover() {\n return ariaProps.shouldFocusOnHover;\n },\n get onHoverStart() {\n return ariaProps.onHoverStart;\n },\n get onHoverEnd() {\n return ariaProps.onHoverEnd;\n },\n get onHoverChange() {\n return ariaProps.onHoverChange;\n },\n },\n state,\n );\n\n const renderValues = createMemo<ListBoxOptionRenderProps>(() => ({\n isSelected: optionAria.isSelected(),\n isFocused: optionAria.isFocused(),\n isFocusVisible: optionAria.isFocusVisible(),\n isPressed: optionAria.isPressed(),\n isHovered: optionAria.isHovered(),\n isDisabled: optionAria.isDisabled(),\n }));\n\n const renderProps = useRenderProps(\n {\n get children() {\n return props.children;\n },\n class: local.class,\n style: local.style,\n defaultClassName: \"solidaria-ListBox-option\",\n },\n renderValues,\n );\n const hasPrimitiveLabel = () => {\n return typeof props.children === \"string\" || typeof props.children === \"number\";\n };\n\n const selectionIndicatorContext = createMemo<SelectionIndicatorContextValue>(() => ({\n isSelected: optionAria.isSelected,\n }));\n const draggableItem = createMemo(() => {\n if (!listContext?.dragAndDropHooks?.useDraggableItem || !listContext.dragState)\n return undefined;\n return listContext.dragAndDropHooks.useDraggableItem(\n {\n key: local.id as string | number,\n },\n listContext.dragState as Parameters<NonNullable<DragAndDropHooks<T>[\"useDraggableItem\"]>>[1],\n );\n });\n const droppableItem = createMemo(() => {\n if (!listContext?.dragAndDropHooks?.useDroppableItem || !listContext.dropState)\n return undefined;\n return listContext.dragAndDropHooks.useDroppableItem(\n {\n key: local.id as string | number,\n },\n listContext.dropState as Parameters<NonNullable<DragAndDropHooks<T>[\"useDroppableItem\"]>>[1],\n () => ref(),\n );\n });\n\n const cleanOptionProps = () => {\n const {\n ref: _ref1,\n \"aria-describedby\": _ariaDescribedby,\n ...rest\n } = optionAria.optionProps as Record<string, unknown>;\n if (!hasPrimitiveLabel() && rest[\"aria-label\"] == null) {\n delete rest[\"aria-labelledby\"];\n }\n return rest;\n };\n const domProps = () => filterDOMProps(ariaProps as Record<string, unknown>, { global: true });\n\n return (\n <SelectionIndicatorContext.Provider value={selectionIndicatorContext()}>\n <li\n ref={(el) => {\n setRef(el);\n assignRef(local.ref, el);\n }}\n {...mergeProps(\n domProps(),\n cleanOptionProps(),\n (draggableItem()?.dragProps as Record<string, unknown> | undefined) ?? {},\n (droppableItem()?.dropProps as Record<string, unknown> | undefined) ?? {},\n )}\n class={renderProps.class()}\n style={renderProps.style()}\n data-selected={optionAria.isSelected() || undefined}\n data-focused={optionAria.isFocused() || undefined}\n data-focus-visible={optionAria.isFocusVisible() || undefined}\n data-pressed={optionAria.isPressed() || undefined}\n data-hovered={optionAria.isHovered() || undefined}\n data-disabled={optionAria.isDisabled() || undefined}\n data-dragging={draggableItem()?.isDragging || undefined}\n data-drop-target={droppableItem()?.isDropTarget || undefined}\n slot={local.slot}\n >\n {hasPrimitiveLabel() ? (\n <span {...optionAria.labelProps}>{renderProps.renderChildren()}</span>\n ) : (\n renderProps.renderChildren()\n )}\n </li>\n </SelectionIndicatorContext.Provider>\n );\n}\n\n/**\n * Load more sentinel item for listbox collections.\n */\nexport function ListBoxLoadMoreItem(props: ListBoxLoadMoreItemProps): JSX.Element {\n let sentinelRef: HTMLDivElement | undefined;\n const [isPending, setIsPending] = createSignal(false);\n\n const isLoading = () => !!props.isLoading || isPending();\n\n const triggerLoadMore = async () => {\n if (isLoading()) return;\n setIsPending(true);\n try {\n await props.onLoadMore();\n } finally {\n setIsPending(false);\n }\n };\n\n createEffect(() => {\n if (!sentinelRef || typeof IntersectionObserver !== \"function\") return;\n\n const offset = props.scrollOffset ?? 1;\n const margin = `0px 0px ${100 * offset}% 0px`;\n const observer = new IntersectionObserver(\n (entries) => {\n if (entries[0]?.isIntersecting) {\n void triggerLoadMore();\n }\n },\n { rootMargin: margin },\n );\n\n observer.observe(sentinelRef);\n return () => observer.disconnect();\n });\n\n const renderProps = useRenderProps(\n {\n get children() {\n return props.children ?? (() => (isLoading() ? \"Loading more...\" : \"Load more\"));\n },\n class: props.class,\n style: props.style,\n defaultClassName: \"solidaria-ListBox-loadMore\",\n },\n () => ({ isLoading: isLoading() }),\n );\n\n return (\n <>\n <li style={{ position: \"relative\", width: 0, height: 0, overflow: \"hidden\" }} inert>\n <div ref={sentinelRef} style={{ position: \"absolute\", height: \"1px\", width: \"1px\" }} />\n </li>\n <li\n role=\"option\"\n aria-disabled={true}\n tabIndex={0}\n onFocus={() => {\n void triggerLoadMore();\n }}\n class={renderProps.class()}\n style={renderProps.style()}\n data-loading={isLoading() || undefined}\n >\n {renderProps.renderChildren()}\n </li>\n </>\n );\n}\n\n/**\n * Section primitive alias for ListBox composition parity.\n */\nexport function ListBoxSection(props: ListBoxSectionProps): JSX.Element {\n return <Section {...props} />;\n}\n\nListBox.Option = ListBoxOption;\nListBox.LoadMoreItem = ListBoxLoadMoreItem;\n"],"mappings":"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"}
@@ -0,0 +1,508 @@
1
+ import { filterDOMProps, useRenderProps } from "./utils.jsx";
2
+ import { SharedElementTransition } from "./SharedElementTransition.jsx";
3
+ import { SelectionIndicatorContext } from "./SelectionIndicator.jsx";
4
+ import { CollectionRendererContext, Group, Header, Section, flattenCollectionEntries, isCollectionSection, useCollectionRenderer } from "./Collection.jsx";
5
+ import { r as useVirtualizerContext } from "./Virtualizer2.jsx";
6
+ import { getNormalizedDropTargetKey, mergePersistedKeysIntoVirtualRange, useDndPersistedKeys, useRenderDropIndicator } from "./DragAndDrop.jsx";
7
+ import { For, Show, createContext, createEffect, createMemo, createSignal, onCleanup, splitProps, useContext } from "solid-js";
8
+ import { createFocusRing, createListBox, createOption, createScrollIntoViewOnFocus, mergeProps as mergeProps$1, useLocale } from "@proyecto-viviana/solidaria";
9
+ import { createListState } from "@proyecto-viviana/solid-stately";
10
+ //#region src/ListBox.tsx
11
+ /**
12
+ * ListBox component for solidaria-components
13
+ *
14
+ * A pre-wired headless listbox that combines state + aria hooks.
15
+ * Port of react-aria-components/src/ListBox.tsx
16
+ */
17
+ function assignRef(ref, el) {
18
+ if (!ref) return;
19
+ if (typeof ref === "function") ref(el);
20
+ else ref.current = el;
21
+ }
22
+ const ListBoxContext = createContext(null);
23
+ const ListBoxStateContext = createContext(null);
24
+ const ListStateContext = ListBoxStateContext;
25
+ /**
26
+ * A listbox displays a list of options and allows a user to select one or more of them.
27
+ */
28
+ function ListBox(props) {
29
+ const contextSlotProps = useContext(ListBoxContext)?.slots?.[props.slot ?? "default"];
30
+ const [local, stateProps, ariaProps] = splitProps(contextSlotProps ? mergeProps$1(contextSlotProps, props) : props, [
31
+ "children",
32
+ "class",
33
+ "style",
34
+ "slot",
35
+ "renderEmptyState",
36
+ "hasMore",
37
+ "isLoading",
38
+ "onLoadMore",
39
+ "dragAndDropHooks",
40
+ "slots",
41
+ "ref"
42
+ ], [
43
+ "items",
44
+ "getKey",
45
+ "getTextValue",
46
+ "getDisabled",
47
+ "disabledKeys",
48
+ "disabledBehavior",
49
+ "selectionMode",
50
+ "selectionBehavior",
51
+ "selectedKeys",
52
+ "defaultSelectedKeys",
53
+ "onSelectionChange",
54
+ "layout",
55
+ "orientation"
56
+ ]);
57
+ const flatItems = createMemo(() => {
58
+ return flattenCollectionEntries(stateProps.items);
59
+ });
60
+ const hasSections = createMemo(() => stateProps.items.some((item) => isCollectionSection(item)));
61
+ const state = createListState({
62
+ get items() {
63
+ return flatItems();
64
+ },
65
+ get getKey() {
66
+ return stateProps.getKey;
67
+ },
68
+ get getTextValue() {
69
+ return stateProps.getTextValue;
70
+ },
71
+ get getDisabled() {
72
+ return stateProps.getDisabled;
73
+ },
74
+ get disabledKeys() {
75
+ return stateProps.disabledKeys;
76
+ },
77
+ get selectionMode() {
78
+ return stateProps.selectionMode;
79
+ },
80
+ get selectionBehavior() {
81
+ return stateProps.selectionBehavior;
82
+ },
83
+ get disabledBehavior() {
84
+ return stateProps.disabledBehavior;
85
+ },
86
+ get selectedKeys() {
87
+ return stateProps.selectedKeys;
88
+ },
89
+ get defaultSelectedKeys() {
90
+ return stateProps.defaultSelectedKeys;
91
+ },
92
+ get onSelectionChange() {
93
+ return stateProps.onSelectionChange;
94
+ }
95
+ });
96
+ const resolveDisabled = () => {
97
+ const disabled = ariaProps.isDisabled;
98
+ if (typeof disabled === "function") return disabled();
99
+ return !!disabled;
100
+ };
101
+ const locale = useLocale();
102
+ const listBoxAria = createListBox({
103
+ ...ariaProps,
104
+ get isDisabled() {
105
+ return resolveDisabled();
106
+ },
107
+ get orientation() {
108
+ return stateProps.orientation ?? "vertical";
109
+ },
110
+ get direction() {
111
+ return locale().direction;
112
+ }
113
+ }, state, () => listRef());
114
+ const { isFocused, isFocusVisible, focusProps } = createFocusRing();
115
+ const renderValues = createMemo(() => ({
116
+ isFocused: state.isFocused() || isFocused(),
117
+ isFocusVisible: isFocusVisible(),
118
+ isDisabled: resolveDisabled(),
119
+ isEmpty: state.collection().size === 0
120
+ }));
121
+ const renderProps = useRenderProps({
122
+ class: local.class,
123
+ style: local.style,
124
+ defaultClassName: "solidaria-ListBox"
125
+ }, renderValues);
126
+ const domProps = createMemo(() => {
127
+ return filterDOMProps(ariaProps, { global: true });
128
+ });
129
+ const cleanListBoxProps = () => {
130
+ const { ref: _ref1, ...rest } = listBoxAria.listBoxProps;
131
+ return rest;
132
+ };
133
+ const cleanFocusProps = () => {
134
+ const { ref: _ref2, ...rest } = focusProps;
135
+ return rest;
136
+ };
137
+ const cleanLabelProps = () => {
138
+ const { ref: _ref3, ...rest } = listBoxAria.labelProps;
139
+ return rest;
140
+ };
141
+ const [listRef, setListRef] = createSignal(null);
142
+ createScrollIntoViewOnFocus({
143
+ focusedKey: () => state.focusedKey(),
144
+ isActive: () => state.isFocused(),
145
+ ref: () => listRef()
146
+ });
147
+ const isEmpty = () => stateProps.items.length === 0;
148
+ const parentCollectionRenderer = useCollectionRenderer();
149
+ const getItemNodes = createMemo(() => Array.from(state.collection()).filter((node) => node.type === "item"));
150
+ const getDropTargetByIndex = (index, position) => {
151
+ const node = getItemNodes()[index];
152
+ if (!node) return null;
153
+ return {
154
+ type: "item",
155
+ key: node.key,
156
+ dropPosition: position
157
+ };
158
+ };
159
+ const hasDroppableDnd = createMemo(() => {
160
+ const hooks = local.dragAndDropHooks;
161
+ return Boolean(hooks?.useDroppableCollectionState && hooks.useDroppableCollection && (hooks.dropTargetDelegate || parentCollectionRenderer?.dropTargetDelegate || hooks.ListDropTargetDelegate));
162
+ });
163
+ const dropState = createMemo(() => {
164
+ if (!hasDroppableDnd()) return void 0;
165
+ return local.dragAndDropHooks?.useDroppableCollectionState?.({});
166
+ });
167
+ const hasDraggableDnd = createMemo(() => {
168
+ const hooks = local.dragAndDropHooks;
169
+ return Boolean(hooks?.useDraggableCollectionState && hooks.useDraggableCollection);
170
+ });
171
+ const dragState = createMemo(() => {
172
+ if (!hasDraggableDnd()) return void 0;
173
+ return local.dragAndDropHooks?.useDraggableCollectionState?.({ items: flatItems() });
174
+ });
175
+ createEffect(() => {
176
+ if (!hasDraggableDnd()) return;
177
+ const hooks = local.dragAndDropHooks;
178
+ const activeDragState = dragState();
179
+ if (!hooks?.useDraggableCollection || !activeDragState) return;
180
+ hooks.useDraggableCollection({}, activeDragState, () => listRef());
181
+ });
182
+ const droppableCollection = createMemo(() => {
183
+ if (!hasDroppableDnd()) return void 0;
184
+ const hooks = local.dragAndDropHooks;
185
+ const activeDropState = dropState();
186
+ if (!hooks?.useDroppableCollection || !activeDropState) return void 0;
187
+ const resolveDirection = () => {
188
+ const el = listRef();
189
+ if (el && typeof window !== "undefined" && typeof window.getComputedStyle === "function") {
190
+ if (window.getComputedStyle(el).direction === "rtl") return "rtl";
191
+ }
192
+ return typeof document !== "undefined" && document.dir === "rtl" ? "rtl" : "ltr";
193
+ };
194
+ const dropTargetDelegate = hooks.dropTargetDelegate ?? parentCollectionRenderer?.dropTargetDelegate ?? (hooks.ListDropTargetDelegate ? new hooks.ListDropTargetDelegate(() => state.collection(), () => listRef(), {
195
+ layout: "stack",
196
+ orientation: "vertical",
197
+ direction: resolveDirection()
198
+ }) : void 0);
199
+ if (!dropTargetDelegate) return void 0;
200
+ return hooks.useDroppableCollection({
201
+ dropTargetDelegate,
202
+ keyboardDelegate: {
203
+ getFirstKey: () => state.collection().getFirstKey(),
204
+ getLastKey: () => state.collection().getLastKey(),
205
+ getKeyBelow: (key) => state.collection().getKeyAfter(key),
206
+ getKeyAbove: (key) => state.collection().getKeyBefore(key),
207
+ getKeyPageBelow: (key) => state.collection().getKeyAfter(key),
208
+ getKeyPageAbove: (key) => state.collection().getKeyBefore(key)
209
+ }
210
+ }, activeDropState, () => listRef());
211
+ });
212
+ const isRootDropTarget = createMemo(() => {
213
+ return Boolean(dropState()?.target?.type === "root");
214
+ });
215
+ const dndRenderDropIndicator = createMemo(() => useRenderDropIndicator(local.dragAndDropHooks, dropState()));
216
+ const dndDropIndicator = (index, position) => {
217
+ const target = getDropTargetByIndex(index, position);
218
+ if (!target || target.type !== "item") return void 0;
219
+ return dndRenderDropIndicator()?.(target);
220
+ };
221
+ const virtualizer = useVirtualizerContext();
222
+ const persistedKeys = useDndPersistedKeys({ focusedKey: state.focusedKey }, local.dragAndDropHooks, dropState(), state.collection());
223
+ const virtualRange = createMemo(() => {
224
+ if (!virtualizer || !parentCollectionRenderer?.isVirtualized || hasSections()) return null;
225
+ const baseRange = virtualizer.getVisibleRange(stateProps.items.length);
226
+ const itemNodes = getItemNodes();
227
+ const persistedIndexes = Array.from(persistedKeys()).map((key) => itemNodes.findIndex((node) => node.key === key)).filter((index) => index >= 0);
228
+ const dropTarget = dropState()?.target;
229
+ const normalizedDropKey = getNormalizedDropTargetKey(dropTarget, state.collection());
230
+ const focusedKey = state.focusedKey();
231
+ const focusedIndex = focusedKey != null ? itemNodes.findIndex((node) => node.key === focusedKey) : -1;
232
+ const forceIncludeIndexes = [
233
+ dropTarget?.type === "item" ? itemNodes.findIndex((node) => node.key === dropTarget.key) : -1,
234
+ normalizedDropKey != null ? itemNodes.findIndex((node) => node.key === normalizedDropKey) : -1,
235
+ dropTarget?.type === "item" ? -1 : focusedIndex
236
+ ].filter((index) => index >= 0);
237
+ return mergePersistedKeysIntoVirtualRange(baseRange, persistedIndexes, stateProps.items.length, virtualizer, 80, {
238
+ forceIncludeIndexes,
239
+ forceIncludeMaxSpan: 320
240
+ });
241
+ });
242
+ createEffect(() => {
243
+ if (!virtualizer || !parentCollectionRenderer?.isVirtualized) return;
244
+ const getItemNodes = () => Array.from(state.collection()).filter((node) => node.type === "item");
245
+ virtualizer.setDropTargetItemCountResolver(() => getItemNodes().length);
246
+ virtualizer.setDropTargetIndexResolver((key) => {
247
+ const index = getItemNodes().findIndex((node) => node.key === key);
248
+ return index >= 0 ? index : null;
249
+ });
250
+ virtualizer.setDropTargetResolver((target) => {
251
+ const node = getItemNodes()[target.index];
252
+ if (!node) return target;
253
+ return {
254
+ ...target,
255
+ key: typeof node.key === "string" || typeof node.key === "number" ? node.key : void 0
256
+ };
257
+ });
258
+ onCleanup(() => {
259
+ virtualizer.setDropTargetIndexResolver(void 0);
260
+ virtualizer.setDropTargetItemCountResolver(void 0);
261
+ virtualizer.setDropTargetResolver(void 0);
262
+ });
263
+ });
264
+ const visibleItems = createMemo(() => {
265
+ const range = virtualRange();
266
+ if (!range) return stateProps.items;
267
+ return stateProps.items.slice(range.start, range.end);
268
+ });
269
+ const virtualSpacerStyle = (size) => virtualizer?.orientation === "horizontal" ? { width: `${size}px` } : { height: `${size}px` };
270
+ const sectionedRenderEntries = createMemo(() => {
271
+ let globalIndex = 0;
272
+ return stateProps.items.map((entry) => {
273
+ if (isCollectionSection(entry)) return {
274
+ type: "section",
275
+ section: entry,
276
+ items: entry.items.map((item) => ({
277
+ item,
278
+ index: globalIndex++
279
+ }))
280
+ };
281
+ return {
282
+ type: "item",
283
+ item: {
284
+ item: entry,
285
+ index: globalIndex++
286
+ }
287
+ };
288
+ });
289
+ });
290
+ const collectionRenderer = createMemo(() => ({
291
+ ...parentCollectionRenderer,
292
+ renderItem: (item) => local.children(item),
293
+ renderDropIndicator: (index, position) => dndDropIndicator(index, position) ?? parentCollectionRenderer?.renderDropIndicator?.(index, position)
294
+ }));
295
+ return <ListBoxContext.Provider value={{
296
+ state,
297
+ isDisabled: resolveDisabled,
298
+ dragAndDropHooks: local.dragAndDropHooks,
299
+ dragState: dragState(),
300
+ dropState: dropState(),
301
+ slots: local.slots
302
+ }}>
303
+ <ListBoxStateContext.Provider value={state}>
304
+ <CollectionRendererContext.Provider value={collectionRenderer()}>
305
+ <>
306
+ <Show when={ariaProps.label}>
307
+ <span {...cleanLabelProps()}>{ariaProps.label}</span>
308
+ </Show>
309
+ <ul {...mergeProps$1(domProps(), cleanListBoxProps(), cleanFocusProps(), droppableCollection()?.collectionProps ?? {})} ref={(el) => {
310
+ setListRef(el);
311
+ assignRef(local.ref, el);
312
+ }} class={renderProps.class()} style={renderProps.style()} data-focused={state.isFocused() || void 0} data-focus-visible={isFocusVisible() || void 0} data-disabled={resolveDisabled() || void 0} data-empty={isEmpty() || void 0} data-layout={stateProps.layout} data-orientation={stateProps.orientation} data-drop-target={isRootDropTarget() || void 0} slot={local.slot}>
313
+ <SharedElementTransition>
314
+ {isEmpty() && local.renderEmptyState ? <li role="option" style={{ display: "contents" }} data-empty-state>
315
+ {local.renderEmptyState()}
316
+ </li> : hasSections() ? <For each={sectionedRenderEntries()}>
317
+ {(entry) => entry.type === "section" ? <li role="presentation" data-section-wrapper>
318
+ <Section class="solidaria-ListBox-section">
319
+ {entry.section.title != null && <Header class="solidaria-ListBox-sectionHeader">
320
+ {entry.section.title}
321
+ </Header>}
322
+ <Group class="solidaria-ListBox-sectionGroup">
323
+ <ul role="group" aria-label={entry.section["aria-label"]}>
324
+ <For each={entry.items}>
325
+ {(indexedItem) => <>
326
+ {collectionRenderer().renderDropIndicator?.(indexedItem.index, "before")}
327
+ {collectionRenderer().renderDropIndicator?.(indexedItem.index, "on")}
328
+ {local.children(indexedItem.item)}
329
+ {collectionRenderer().renderDropIndicator?.(indexedItem.index, "after")}
330
+ </>}
331
+ </For>
332
+ </ul>
333
+ </Group>
334
+ </Section>
335
+ </li> : <>
336
+ {collectionRenderer().renderDropIndicator?.(entry.item.index, "before")}
337
+ {collectionRenderer().renderDropIndicator?.(entry.item.index, "on")}
338
+ {local.children(entry.item.item)}
339
+ {collectionRenderer().renderDropIndicator?.(entry.item.index, "after")}
340
+ </>}
341
+ </For> : <>
342
+ {virtualRange()?.offsetTop ? <li role="presentation" aria-hidden="true" style={virtualSpacerStyle(virtualRange().offsetTop)} data-virtualizer-spacer="top" /> : null}
343
+ <For each={visibleItems()}>
344
+ {(item, index) => {
345
+ const itemIndex = () => (virtualRange()?.start ?? 0) + index();
346
+ const beforeIndicator = () => collectionRenderer().renderDropIndicator?.(itemIndex(), "before");
347
+ const onIndicator = () => collectionRenderer().renderDropIndicator?.(itemIndex(), "on");
348
+ const afterIndicator = () => collectionRenderer().renderDropIndicator?.(itemIndex(), "after");
349
+ return <>
350
+ {beforeIndicator()}
351
+ {onIndicator()}
352
+ {local.children(item)}
353
+ {afterIndicator()}
354
+ </>;
355
+ }}
356
+ </For>
357
+ {virtualRange()?.offsetBottom ? <li role="presentation" aria-hidden="true" style={virtualSpacerStyle(virtualRange().offsetBottom)} data-virtualizer-spacer="bottom" /> : null}
358
+ </>}
359
+ </SharedElementTransition>
360
+ {local.hasMore && local.onLoadMore && <ListBoxLoadMoreItem onLoadMore={local.onLoadMore} isLoading={local.isLoading} />}
361
+ </ul>
362
+ </>
363
+ </CollectionRendererContext.Provider>
364
+ </ListBoxStateContext.Provider>
365
+ </ListBoxContext.Provider>;
366
+ }
367
+ /**
368
+ * An option in a listbox.
369
+ */
370
+ function ListBoxOption(props) {
371
+ const [local, ariaProps] = splitProps(props, [
372
+ "class",
373
+ "style",
374
+ "slot",
375
+ "id",
376
+ "item",
377
+ "textValue",
378
+ "ref"
379
+ ]);
380
+ const context = useContext(ListBoxStateContext);
381
+ if (!context) throw new Error("ListBoxOption must be used within a ListBox");
382
+ const state = context;
383
+ const listContext = useContext(ListBoxContext);
384
+ const [ref, setRef] = createSignal(null);
385
+ const optionAria = createOption({
386
+ key: local.id,
387
+ get isDisabled() {
388
+ return Boolean(ariaProps.isDisabled || listContext?.isDisabled());
389
+ },
390
+ get "aria-label"() {
391
+ return ariaProps["aria-label"] ?? local.textValue;
392
+ },
393
+ get shouldSelectOnPressUp() {
394
+ return ariaProps.shouldSelectOnPressUp;
395
+ },
396
+ get shouldFocusOnHover() {
397
+ return ariaProps.shouldFocusOnHover;
398
+ },
399
+ get onHoverStart() {
400
+ return ariaProps.onHoverStart;
401
+ },
402
+ get onHoverEnd() {
403
+ return ariaProps.onHoverEnd;
404
+ },
405
+ get onHoverChange() {
406
+ return ariaProps.onHoverChange;
407
+ }
408
+ }, state);
409
+ const renderValues = createMemo(() => ({
410
+ isSelected: optionAria.isSelected(),
411
+ isFocused: optionAria.isFocused(),
412
+ isFocusVisible: optionAria.isFocusVisible(),
413
+ isPressed: optionAria.isPressed(),
414
+ isHovered: optionAria.isHovered(),
415
+ isDisabled: optionAria.isDisabled()
416
+ }));
417
+ const renderProps = useRenderProps({
418
+ get children() {
419
+ return props.children;
420
+ },
421
+ class: local.class,
422
+ style: local.style,
423
+ defaultClassName: "solidaria-ListBox-option"
424
+ }, renderValues);
425
+ const hasPrimitiveLabel = () => {
426
+ return typeof props.children === "string" || typeof props.children === "number";
427
+ };
428
+ const selectionIndicatorContext = createMemo(() => ({ isSelected: optionAria.isSelected }));
429
+ const draggableItem = createMemo(() => {
430
+ if (!listContext?.dragAndDropHooks?.useDraggableItem || !listContext.dragState) return void 0;
431
+ return listContext.dragAndDropHooks.useDraggableItem({ key: local.id }, listContext.dragState);
432
+ });
433
+ const droppableItem = createMemo(() => {
434
+ if (!listContext?.dragAndDropHooks?.useDroppableItem || !listContext.dropState) return void 0;
435
+ return listContext.dragAndDropHooks.useDroppableItem({ key: local.id }, listContext.dropState, () => ref());
436
+ });
437
+ const cleanOptionProps = () => {
438
+ const { ref: _ref1, "aria-describedby": _ariaDescribedby, ...rest } = optionAria.optionProps;
439
+ if (!hasPrimitiveLabel() && rest["aria-label"] == null) delete rest["aria-labelledby"];
440
+ return rest;
441
+ };
442
+ const domProps = () => filterDOMProps(ariaProps, { global: true });
443
+ return <SelectionIndicatorContext.Provider value={selectionIndicatorContext()}>
444
+ <li ref={(el) => {
445
+ setRef(el);
446
+ assignRef(local.ref, el);
447
+ }} {...mergeProps$1(domProps(), cleanOptionProps(), draggableItem()?.dragProps ?? {}, droppableItem()?.dropProps ?? {})} class={renderProps.class()} style={renderProps.style()} data-selected={optionAria.isSelected() || void 0} data-focused={optionAria.isFocused() || void 0} data-focus-visible={optionAria.isFocusVisible() || void 0} data-pressed={optionAria.isPressed() || void 0} data-hovered={optionAria.isHovered() || void 0} data-disabled={optionAria.isDisabled() || void 0} data-dragging={draggableItem()?.isDragging || void 0} data-drop-target={droppableItem()?.isDropTarget || void 0} slot={local.slot}>
448
+ {hasPrimitiveLabel() ? <span {...optionAria.labelProps}>{renderProps.renderChildren()}</span> : renderProps.renderChildren()}
449
+ </li>
450
+ </SelectionIndicatorContext.Provider>;
451
+ }
452
+ /**
453
+ * Load more sentinel item for listbox collections.
454
+ */
455
+ function ListBoxLoadMoreItem(props) {
456
+ let sentinelRef;
457
+ const [isPending, setIsPending] = createSignal(false);
458
+ const isLoading = () => !!props.isLoading || isPending();
459
+ const triggerLoadMore = async () => {
460
+ if (isLoading()) return;
461
+ setIsPending(true);
462
+ try {
463
+ await props.onLoadMore();
464
+ } finally {
465
+ setIsPending(false);
466
+ }
467
+ };
468
+ createEffect(() => {});
469
+ const renderProps = useRenderProps({
470
+ get children() {
471
+ return props.children ?? (() => isLoading() ? "Loading more..." : "Load more");
472
+ },
473
+ class: props.class,
474
+ style: props.style,
475
+ defaultClassName: "solidaria-ListBox-loadMore"
476
+ }, () => ({ isLoading: isLoading() }));
477
+ return <>
478
+ <li style={{
479
+ position: "relative",
480
+ width: 0,
481
+ height: 0,
482
+ overflow: "hidden"
483
+ }} inert>
484
+ <div ref={sentinelRef} style={{
485
+ position: "absolute",
486
+ height: "1px",
487
+ width: "1px"
488
+ }} />
489
+ </li>
490
+ <li role="option" aria-disabled={true} tabIndex={0} onFocus={() => {
491
+ triggerLoadMore();
492
+ }} class={renderProps.class()} style={renderProps.style()} data-loading={isLoading() || void 0}>
493
+ {renderProps.renderChildren()}
494
+ </li>
495
+ </>;
496
+ }
497
+ /**
498
+ * Section primitive alias for ListBox composition parity.
499
+ */
500
+ function ListBoxSection(props) {
501
+ return <Section {...props} />;
502
+ }
503
+ ListBox.Option = ListBoxOption;
504
+ ListBox.LoadMoreItem = ListBoxLoadMoreItem;
505
+ //#endregion
506
+ export { ListBox, ListBoxContext, ListBoxLoadMoreItem, ListBoxOption, ListBoxSection, ListBoxStateContext, ListStateContext };
507
+
508
+ //# sourceMappingURL=ListBox.jsx.map