@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,992 @@
1
+ import { Provider, filterDOMProps, useRenderProps } from "./utils.js";
2
+ import { TextContext } from "./Text.js";
3
+ import { SelectionIndicatorContext } from "./SelectionIndicator.js";
4
+ import { className, createComponent, delegateEvents, effect, getNextElement, getNextMarker, insert, memo, mergeProps, runHydrationEvents, setAttribute, setProperty, spread, style, template, use } from "solid-js/web";
5
+ import { For, Show, createContext, createEffect, createMemo, createSignal, onCleanup, splitProps, useContext } from "solid-js";
6
+ import { createComboBox, createHover, createInteractOutside, createListBox, createOption, createScrollIntoViewOnFocus, getComboBoxData, mergeProps as mergeProps$2 } from "@proyecto-viviana/solidaria";
7
+ import { createComboBoxState, defaultContainsFilter } from "@proyecto-viviana/solid-stately";
8
+ //#region src/ComboBox.tsx
9
+ /**
10
+ * ComboBox component for solidaria-components
11
+ *
12
+ * A pre-wired headless combobox that combines state + aria hooks.
13
+ * Port of react-aria-components/src/ComboBox.tsx
14
+ */
15
+ var _tmpl$ = /*#__PURE__*/ template(`<input type=hidden>`), _tmpl$2 = /*#__PURE__*/ template(`<div><!$><!/><!$><!/>`), _tmpl$3 = /*#__PURE__*/ template(`<label>`), _tmpl$4 = /*#__PURE__*/ template(`<div>`), _tmpl$5 = /*#__PURE__*/ template(`<input>`), _tmpl$6 = /*#__PURE__*/ template(`<span>`), _tmpl$7 = /*#__PURE__*/ template(`<button>`), _tmpl$8 = /*#__PURE__*/ template(`<ul>`), _tmpl$9 = /*#__PURE__*/ template(`<li>`), _tmpl$0 = /*#__PURE__*/ template(`<div role=group aria-label="Selected items">`), _tmpl$1 = /*#__PURE__*/ template(`<span><!$><!/><button type=button class=solidaria-ComboBox-tag-remove tabindex=-1>&#215;`);
16
+ function assignRef(ref, el) {
17
+ if (!ref) return;
18
+ if (typeof ref === "function") ref(el);
19
+ else ref.current = el;
20
+ }
21
+ const ComboBoxContext = createContext(null);
22
+ const ComboBoxStateContext = createContext(null);
23
+ const ComboBoxValueContext = ComboBoxContext;
24
+ function callInputKeyDown(handler, event) {
25
+ if (typeof handler === "function") handler(event);
26
+ else if (handler) handler[0](handler[1], event);
27
+ }
28
+ /**
29
+ * A combobox combines a text input with a listbox, allowing users to filter a list of options.
30
+ */
31
+ function ComboBox(props) {
32
+ const contextSlotProps = useContext(ComboBoxContext)?.slots?.[props.slot ?? "default"];
33
+ const [local, stateProps, ariaProps] = splitProps(contextSlotProps ? mergeProps$2(contextSlotProps, props) : props, [
34
+ "class",
35
+ "style",
36
+ "slot",
37
+ "children",
38
+ "ref",
39
+ "rootRef",
40
+ "slots"
41
+ ], [
42
+ "items",
43
+ "defaultItems",
44
+ "getKey",
45
+ "getTextValue",
46
+ "getDisabled",
47
+ "disabledKeys",
48
+ "selectionMode",
49
+ "selectedKey",
50
+ "defaultSelectedKey",
51
+ "selectedKeys",
52
+ "defaultSelectedKeys",
53
+ "onSelectionChange",
54
+ "onSelectionChangeMultiple",
55
+ "inputValue",
56
+ "defaultInputValue",
57
+ "onInputChange",
58
+ "isOpen",
59
+ "defaultOpen",
60
+ "onOpenChange",
61
+ "defaultFilter",
62
+ "allowsCustomValue",
63
+ "allowsEmptyCollection",
64
+ "menuTrigger",
65
+ "name",
66
+ "formValue"
67
+ ]);
68
+ let inputRef = null;
69
+ let buttonRef = null;
70
+ let triggerRef = null;
71
+ let listBoxRef = null;
72
+ const optionActions = /* @__PURE__ */ new Map();
73
+ const runOptionAction = (key) => {
74
+ optionActions.get(key)?.();
75
+ };
76
+ const state = createComboBoxState({
77
+ get items() {
78
+ return stateProps.items;
79
+ },
80
+ get defaultItems() {
81
+ return stateProps.defaultItems;
82
+ },
83
+ get getKey() {
84
+ return stateProps.getKey;
85
+ },
86
+ get getTextValue() {
87
+ return stateProps.getTextValue;
88
+ },
89
+ get getDisabled() {
90
+ return stateProps.getDisabled;
91
+ },
92
+ get disabledKeys() {
93
+ return stateProps.disabledKeys;
94
+ },
95
+ get selectionMode() {
96
+ return stateProps.selectionMode;
97
+ },
98
+ get selectedKey() {
99
+ return stateProps.selectedKey;
100
+ },
101
+ get defaultSelectedKey() {
102
+ return stateProps.defaultSelectedKey;
103
+ },
104
+ get selectedKeys() {
105
+ return stateProps.selectedKeys;
106
+ },
107
+ get defaultSelectedKeys() {
108
+ return stateProps.defaultSelectedKeys;
109
+ },
110
+ get onSelectionChange() {
111
+ return stateProps.onSelectionChange;
112
+ },
113
+ get onSelectionChangeMultiple() {
114
+ return stateProps.onSelectionChangeMultiple;
115
+ },
116
+ get inputValue() {
117
+ return stateProps.inputValue;
118
+ },
119
+ get defaultInputValue() {
120
+ return stateProps.defaultInputValue;
121
+ },
122
+ get onInputChange() {
123
+ return stateProps.onInputChange;
124
+ },
125
+ get isOpen() {
126
+ return stateProps.isOpen;
127
+ },
128
+ get defaultOpen() {
129
+ return stateProps.defaultOpen;
130
+ },
131
+ get onOpenChange() {
132
+ return stateProps.onOpenChange;
133
+ },
134
+ get defaultFilter() {
135
+ return stateProps.defaultFilter;
136
+ },
137
+ get allowsCustomValue() {
138
+ return stateProps.allowsCustomValue;
139
+ },
140
+ get allowsEmptyCollection() {
141
+ return stateProps.allowsEmptyCollection;
142
+ },
143
+ get menuTrigger() {
144
+ return stateProps.menuTrigger;
145
+ },
146
+ get isDisabled() {
147
+ return ariaProps.isDisabled;
148
+ },
149
+ get isReadOnly() {
150
+ return ariaProps.isReadOnly;
151
+ },
152
+ get isRequired() {
153
+ return ariaProps.isRequired;
154
+ }
155
+ });
156
+ const listState = createComboBoxListStateAdapter(state);
157
+ const effectiveFormValue = createMemo(() => {
158
+ if (stateProps.allowsCustomValue) return "text";
159
+ return stateProps.formValue ?? "key";
160
+ });
161
+ const comboBoxAriaProps = createMemo(() => {
162
+ const cleanProps = {};
163
+ for (const key in ariaProps) if (!key.startsWith("data-")) cleanProps[key] = ariaProps[key];
164
+ return cleanProps;
165
+ });
166
+ const comboBoxAria = createComboBox(() => ({
167
+ ...comboBoxAriaProps(),
168
+ get name() {
169
+ return effectiveFormValue() === "text" ? stateProps.name : void 0;
170
+ }
171
+ }), state, () => inputRef, () => buttonRef, () => listBoxRef);
172
+ const getInputProps = () => {
173
+ const inputProps = comboBoxAria.inputProps;
174
+ const originalOnKeyDown = inputProps.onKeyDown;
175
+ return {
176
+ ...inputProps,
177
+ onKeyDown: (event) => {
178
+ const focusedKey = state.focusedKey();
179
+ const optionAction = event.key === "Enter" && state.isOpen() && focusedKey != null && !state.isKeyDisabled(focusedKey) ? optionActions.get(focusedKey) : void 0;
180
+ callInputKeyDown(originalOnKeyDown, event);
181
+ optionAction?.();
182
+ }
183
+ };
184
+ };
185
+ const { isHovered, hoverProps } = createHover({ get isDisabled() {
186
+ return ariaProps.isDisabled;
187
+ } });
188
+ const renderValues = createMemo(() => ({
189
+ isOpen: comboBoxAria.isOpen(),
190
+ isFocused: comboBoxAria.isFocused(),
191
+ isFocusVisible: comboBoxAria.isFocusVisible(),
192
+ isDisabled: !!ariaProps.isDisabled,
193
+ isRequired: !!ariaProps.isRequired,
194
+ isInvalid: !!ariaProps.isInvalid,
195
+ isReadOnly: !!ariaProps.isReadOnly,
196
+ isSelected: state.selectedKey() != null,
197
+ inputValue: state.inputValue()
198
+ }));
199
+ const renderProps = useRenderProps({
200
+ class: local.class,
201
+ style: local.style,
202
+ defaultClassName: "solidaria-ComboBox"
203
+ }, renderValues);
204
+ const domProps = createMemo(() => {
205
+ return filterDOMProps(ariaProps, { global: true });
206
+ });
207
+ const cleanHoverProps = () => {
208
+ const { ref: _ref, ...rest } = hoverProps;
209
+ return rest;
210
+ };
211
+ const ComboBoxChildren = () => typeof local.children === "function" ? local.children(renderValues()) : local.children;
212
+ const textSlots = { slots: {
213
+ get description() {
214
+ return comboBoxAria.descriptionProps;
215
+ },
216
+ get errorMessage() {
217
+ return comboBoxAria.errorMessageProps;
218
+ }
219
+ } };
220
+ return createComponent(ComboBoxContext.Provider, {
221
+ get value() {
222
+ return {
223
+ state,
224
+ listState,
225
+ inputProps: getInputProps,
226
+ buttonProps: () => comboBoxAria.buttonProps,
227
+ listBoxProps: () => ({
228
+ ...comboBoxAria.listBoxProps,
229
+ onAction: void 0,
230
+ shouldUseVirtualFocus: true,
231
+ shouldSelectOnPressUp: true,
232
+ shouldFocusOnHover: true,
233
+ linkBehavior: "selection",
234
+ UNSTABLE_itemBehavior: "action"
235
+ }),
236
+ labelProps: () => comboBoxAria.labelProps,
237
+ descriptionProps: () => comboBoxAria.descriptionProps,
238
+ errorMessageProps: () => comboBoxAria.errorMessageProps,
239
+ isOpen: comboBoxAria.isOpen,
240
+ isFocused: comboBoxAria.isFocused,
241
+ isFocusVisible: comboBoxAria.isFocusVisible,
242
+ items: stateProps.items ?? stateProps.defaultItems ?? [],
243
+ inputRef: () => inputRef,
244
+ setInputRef: (el) => {
245
+ inputRef = el;
246
+ },
247
+ buttonRef: () => buttonRef,
248
+ setButtonRef: (el) => {
249
+ buttonRef = el;
250
+ },
251
+ triggerRef: () => triggerRef,
252
+ setTriggerRef: (el) => {
253
+ triggerRef = el;
254
+ },
255
+ listBoxRef: () => listBoxRef,
256
+ setListBoxRef: (el) => {
257
+ listBoxRef = el;
258
+ },
259
+ registerOptionAction: (key, action) => {
260
+ if (action) optionActions.set(key, action);
261
+ else optionActions.delete(key);
262
+ },
263
+ runOptionAction,
264
+ slots: local.slots
265
+ };
266
+ },
267
+ get children() {
268
+ return createComponent(ComboBoxStateContext.Provider, {
269
+ value: state,
270
+ get children() {
271
+ var _el$ = getNextElement(_tmpl$2), _el$3 = _el$.firstChild, [_el$4, _co$] = getNextMarker(_el$3.nextSibling), _el$5 = _el$4.nextSibling, [_el$6, _co$2] = getNextMarker(_el$5.nextSibling);
272
+ use((el) => {
273
+ assignRef(local.ref, el);
274
+ assignRef(local.rootRef, el);
275
+ }, _el$);
276
+ spread(_el$, mergeProps(domProps, cleanHoverProps, {
277
+ get ["class"]() {
278
+ return renderProps.class();
279
+ },
280
+ get style() {
281
+ return renderProps.style();
282
+ },
283
+ get ["data-open"]() {
284
+ return comboBoxAria.isOpen() || void 0;
285
+ },
286
+ get ["data-focused"]() {
287
+ return comboBoxAria.isFocused() || void 0;
288
+ },
289
+ get ["data-focus-visible"]() {
290
+ return comboBoxAria.isFocusVisible() || void 0;
291
+ },
292
+ get ["data-disabled"]() {
293
+ return ariaProps.isDisabled || void 0;
294
+ },
295
+ get ["data-required"]() {
296
+ return ariaProps.isRequired || void 0;
297
+ },
298
+ get ["data-invalid"]() {
299
+ return ariaProps.isInvalid || void 0;
300
+ },
301
+ get ["data-readonly"]() {
302
+ return ariaProps.isReadOnly || void 0;
303
+ },
304
+ get ["data-hovered"]() {
305
+ return isHovered() || void 0;
306
+ },
307
+ get slot() {
308
+ return local.slot;
309
+ }
310
+ }), false, true);
311
+ insert(_el$, createComponent(Show, {
312
+ get when() {
313
+ return memo(() => !!stateProps.name)() && effectiveFormValue() === "key";
314
+ },
315
+ get children() {
316
+ var _el$2 = getNextElement(_tmpl$);
317
+ effect((_p$) => {
318
+ var _v$ = stateProps.name, _v$2 = ariaProps.form;
319
+ _v$ !== _p$.e && setAttribute(_el$2, "name", _p$.e = _v$);
320
+ _v$2 !== _p$.t && setAttribute(_el$2, "form", _p$.t = _v$2);
321
+ return _p$;
322
+ }, {
323
+ e: void 0,
324
+ t: void 0
325
+ });
326
+ effect(() => setProperty(_el$2, "value", state.selectedKey()?.toString() ?? ""));
327
+ return _el$2;
328
+ }
329
+ }), _el$4, _co$);
330
+ insert(_el$, createComponent(Provider, {
331
+ values: [[TextContext, textSlots]],
332
+ get children() {
333
+ return createComponent(ComboBoxChildren, {});
334
+ }
335
+ }), _el$6, _co$2);
336
+ runHydrationEvents();
337
+ return _el$;
338
+ }
339
+ });
340
+ }
341
+ });
342
+ }
343
+ /**
344
+ * Label element for a combobox.
345
+ */
346
+ function ComboBoxLabel(props) {
347
+ const [local, domProps] = splitProps(props, [
348
+ "class",
349
+ "style",
350
+ "slot",
351
+ "children"
352
+ ]);
353
+ const context = useContext(ComboBoxContext);
354
+ if (!context) throw new Error("ComboBoxLabel must be used within a ComboBox");
355
+ const cleanLabelProps = () => {
356
+ const { ref: _ref, ...rest } = context.labelProps();
357
+ return rest;
358
+ };
359
+ return (() => {
360
+ var _el$7 = getNextElement(_tmpl$3);
361
+ spread(_el$7, mergeProps(domProps, cleanLabelProps, {
362
+ get ["class"]() {
363
+ return local.class;
364
+ },
365
+ get style() {
366
+ return local.style;
367
+ }
368
+ }), false, true);
369
+ insert(_el$7, () => local.children);
370
+ runHydrationEvents();
371
+ return _el$7;
372
+ })();
373
+ }
374
+ /**
375
+ * Description element for a combobox.
376
+ */
377
+ function ComboBoxDescription(props) {
378
+ const [local, domProps] = splitProps(props, [
379
+ "class",
380
+ "style",
381
+ "slot",
382
+ "children"
383
+ ]);
384
+ const context = useContext(ComboBoxContext);
385
+ if (!context) throw new Error("ComboBoxDescription must be used within a ComboBox");
386
+ const cleanDescriptionProps = () => {
387
+ const { ref: _ref, ...rest } = context.descriptionProps();
388
+ return rest;
389
+ };
390
+ return (() => {
391
+ var _el$8 = getNextElement(_tmpl$4);
392
+ spread(_el$8, mergeProps(domProps, cleanDescriptionProps, {
393
+ get ["class"]() {
394
+ return local.class;
395
+ },
396
+ get style() {
397
+ return local.style;
398
+ }
399
+ }), false, true);
400
+ insert(_el$8, () => local.children);
401
+ runHydrationEvents();
402
+ return _el$8;
403
+ })();
404
+ }
405
+ /**
406
+ * Error message element for a combobox.
407
+ */
408
+ function ComboBoxErrorMessage(props) {
409
+ const [local, domProps] = splitProps(props, [
410
+ "class",
411
+ "style",
412
+ "slot",
413
+ "children"
414
+ ]);
415
+ const context = useContext(ComboBoxContext);
416
+ if (!context) throw new Error("ComboBoxErrorMessage must be used within a ComboBox");
417
+ const cleanErrorMessageProps = () => {
418
+ const { ref: _ref, ...rest } = context.errorMessageProps();
419
+ return rest;
420
+ };
421
+ return (() => {
422
+ var _el$9 = getNextElement(_tmpl$4);
423
+ spread(_el$9, mergeProps(domProps, cleanErrorMessageProps, {
424
+ get ["class"]() {
425
+ return local.class;
426
+ },
427
+ get style() {
428
+ return local.style;
429
+ }
430
+ }), false, true);
431
+ insert(_el$9, () => local.children);
432
+ runHydrationEvents();
433
+ return _el$9;
434
+ })();
435
+ }
436
+ /**
437
+ * The text input for a combobox.
438
+ */
439
+ function ComboBoxInput(props) {
440
+ const [local, domProps] = splitProps(props, [
441
+ "class",
442
+ "style",
443
+ "slot",
444
+ "children"
445
+ ]);
446
+ const context = useContext(ComboBoxContext);
447
+ if (!context) throw new Error("ComboBoxInput must be used within a ComboBox");
448
+ const { isOpen, isFocused, isFocusVisible, state, setInputRef } = context;
449
+ const { isHovered, hoverProps } = createHover({ get isDisabled() {
450
+ return state.isDisabled;
451
+ } });
452
+ const renderValues = createMemo(() => ({
453
+ isOpen: isOpen(),
454
+ isFocused: isFocused(),
455
+ isFocusVisible: isFocusVisible(),
456
+ isHovered: isHovered(),
457
+ isDisabled: state.isDisabled,
458
+ inputValue: state.inputValue()
459
+ }));
460
+ const renderProps = useRenderProps({
461
+ get children() {
462
+ return local.children;
463
+ },
464
+ class: local.class,
465
+ style: local.style,
466
+ defaultClassName: "solidaria-ComboBox-input"
467
+ }, renderValues);
468
+ const cleanInputProps = () => {
469
+ const { ref: _ref1, value: _value, ...rest } = context.inputProps();
470
+ return rest;
471
+ };
472
+ const cleanHoverProps = () => {
473
+ const { ref: _ref2, ...rest } = hoverProps;
474
+ return rest;
475
+ };
476
+ return (() => {
477
+ var _el$0 = getNextElement(_tmpl$5);
478
+ use((el) => setInputRef(el), _el$0);
479
+ spread(_el$0, mergeProps(domProps, cleanInputProps, cleanHoverProps, {
480
+ get value() {
481
+ return state.inputValue();
482
+ },
483
+ get ["class"]() {
484
+ return renderProps.class();
485
+ },
486
+ get style() {
487
+ return renderProps.style();
488
+ },
489
+ get ["data-open"]() {
490
+ return isOpen() || void 0;
491
+ },
492
+ get ["data-focused"]() {
493
+ return isFocused() || void 0;
494
+ },
495
+ get ["data-focus-visible"]() {
496
+ return isFocusVisible() || void 0;
497
+ },
498
+ get ["data-hovered"]() {
499
+ return isHovered() || void 0;
500
+ },
501
+ get ["data-disabled"]() {
502
+ return state.isDisabled || void 0;
503
+ }
504
+ }), false, false);
505
+ runHydrationEvents();
506
+ return _el$0;
507
+ })();
508
+ }
509
+ function ComboBoxValue(props) {
510
+ const context = useContext(ComboBoxContext);
511
+ if (!context) throw new Error("ComboBoxValue must be used within a ComboBox");
512
+ const state = context.state;
513
+ const isMulti = createMemo(() => state.selectionMode() === "multiple");
514
+ const selectedItem = createMemo(() => state.selectedItem());
515
+ const selectedItems = createMemo(() => {
516
+ if (isMulti()) return state.selectedItems().map((node) => node.value ?? null);
517
+ const item = selectedItem();
518
+ return item ? [item.value ?? null] : [];
519
+ });
520
+ const selectedText = createMemo(() => {
521
+ if (isMulti()) return state.selectedItems().map((n) => n.textValue).join(", ");
522
+ return selectedItem()?.textValue ?? "";
523
+ });
524
+ const textValue = createMemo(() => selectedText() || state.inputValue() || "");
525
+ const isPlaceholder = createMemo(() => textValue().length === 0);
526
+ const renderProps = useRenderProps({
527
+ get children() {
528
+ return props.children;
529
+ },
530
+ class: props.class,
531
+ style: props.style,
532
+ defaultClassName: "solidaria-ComboBox-value"
533
+ }, () => ({
534
+ textValue: textValue(),
535
+ isPlaceholder: isPlaceholder(),
536
+ selectedItems: selectedItems(),
537
+ selectedText: selectedText(),
538
+ state
539
+ }));
540
+ return (() => {
541
+ var _el$1 = getNextElement(_tmpl$6);
542
+ insert(_el$1, (() => {
543
+ var _c$ = memo(() => !!props.children);
544
+ return () => _c$() ? renderProps.renderChildren() : memo(() => !!isPlaceholder())() ? props.placeholder : textValue();
545
+ })());
546
+ effect((_p$) => {
547
+ var _v$3 = renderProps.class(), _v$4 = renderProps.style(), _v$5 = isPlaceholder() || void 0;
548
+ _v$3 !== _p$.e && className(_el$1, _p$.e = _v$3);
549
+ _p$.t = style(_el$1, _v$4, _p$.t);
550
+ _v$5 !== _p$.a && setAttribute(_el$1, "data-placeholder", _p$.a = _v$5);
551
+ return _p$;
552
+ }, {
553
+ e: void 0,
554
+ t: void 0,
555
+ a: void 0
556
+ });
557
+ return _el$1;
558
+ })();
559
+ }
560
+ /**
561
+ * The trigger button for a combobox.
562
+ */
563
+ function ComboBoxButton(props) {
564
+ const [local, domProps] = splitProps(props, [
565
+ "class",
566
+ "style",
567
+ "slot",
568
+ "children"
569
+ ]);
570
+ const context = useContext(ComboBoxContext);
571
+ if (!context) throw new Error("ComboBoxButton must be used within a ComboBox");
572
+ const { isOpen, isFocused, state, setButtonRef } = context;
573
+ const { isHovered, hoverProps } = createHover({ get isDisabled() {
574
+ return state.isDisabled;
575
+ } });
576
+ const renderValues = createMemo(() => ({
577
+ isOpen: isOpen(),
578
+ isFocused: isFocused(),
579
+ isHovered: isHovered(),
580
+ isPressed: isOpen(),
581
+ isDisabled: state.isDisabled
582
+ }));
583
+ const renderProps = useRenderProps({
584
+ get children() {
585
+ return local.children;
586
+ },
587
+ class: local.class,
588
+ style: local.style,
589
+ defaultClassName: "solidaria-ComboBox-button"
590
+ }, renderValues);
591
+ const cleanButtonProps = () => {
592
+ const { ref: _ref1, ...rest } = context.buttonProps();
593
+ return rest;
594
+ };
595
+ const cleanHoverProps = () => {
596
+ const { ref: _ref2, ...rest } = hoverProps;
597
+ return rest;
598
+ };
599
+ return (() => {
600
+ var _el$10 = getNextElement(_tmpl$7);
601
+ use((el) => setButtonRef(el), _el$10);
602
+ spread(_el$10, mergeProps(domProps, cleanButtonProps, cleanHoverProps, {
603
+ get ["class"]() {
604
+ return renderProps.class();
605
+ },
606
+ get style() {
607
+ return renderProps.style();
608
+ },
609
+ get ["data-open"]() {
610
+ return isOpen() || void 0;
611
+ },
612
+ get ["data-pressed"]() {
613
+ return isOpen() || void 0;
614
+ },
615
+ get ["data-focused"]() {
616
+ return isFocused() || void 0;
617
+ },
618
+ get ["data-hovered"]() {
619
+ return isHovered() || void 0;
620
+ },
621
+ get ["data-disabled"]() {
622
+ return state.isDisabled || void 0;
623
+ }
624
+ }), false, true);
625
+ insert(_el$10, () => renderProps.renderChildren());
626
+ runHydrationEvents();
627
+ return _el$10;
628
+ })();
629
+ }
630
+ /**
631
+ * The listbox popup for a combobox.
632
+ */
633
+ function ComboBoxListBox(props) {
634
+ const [local, domProps] = splitProps(props, [
635
+ "class",
636
+ "style",
637
+ "slot",
638
+ "children"
639
+ ]);
640
+ const rawContext = useContext(ComboBoxContext);
641
+ if (!rawContext) throw new Error("ComboBoxListBox must be used within a ComboBox");
642
+ const context = rawContext;
643
+ const { state: comboBoxState, listState, isOpen, inputRef, buttonRef, setListBoxRef } = context;
644
+ const state = comboBoxState;
645
+ let listBoxRef;
646
+ createScrollIntoViewOnFocus({
647
+ focusedKey: () => state.focusedKey(),
648
+ isActive: () => isOpen(),
649
+ ref: () => listBoxRef ?? null
650
+ });
651
+ createInteractOutside({
652
+ ref: () => listBoxRef ?? null,
653
+ onInteractOutside: (e) => {
654
+ const target = e.target;
655
+ const input = inputRef();
656
+ const button = buttonRef();
657
+ if (input?.contains(target)) return;
658
+ if (button?.contains(target)) return;
659
+ if (isOpen()) state.close();
660
+ },
661
+ get isDisabled() {
662
+ return !isOpen();
663
+ }
664
+ });
665
+ const { listBoxProps } = createListBox(context.listBoxProps, listState);
666
+ const renderValues = createMemo(() => ({ isFocused: state.isFocused() }));
667
+ const renderProps = useRenderProps({
668
+ class: local.class,
669
+ style: local.style,
670
+ defaultClassName: "solidaria-ComboBox-listbox"
671
+ }, renderValues);
672
+ const cleanContextProps = () => {
673
+ const { ref: _ref1, ...rest } = context.listBoxProps();
674
+ return rest;
675
+ };
676
+ const cleanListBoxProps = () => {
677
+ const { ref: _ref2, ...rest } = listBoxProps;
678
+ return rest;
679
+ };
680
+ const items = () => Array.from(state.collection());
681
+ const getNodeValue = (node) => {
682
+ if (node.value != null) return node.value;
683
+ return context.items.find((item, index) => {
684
+ const candidate = item;
685
+ return (candidate.key ?? candidate.id ?? index) === node.key;
686
+ }) ?? null;
687
+ };
688
+ const setListBoxElement = (el) => {
689
+ listBoxRef = el;
690
+ setListBoxRef(el);
691
+ };
692
+ onCleanup(() => {
693
+ setListBoxRef(null);
694
+ });
695
+ return createComponent(Show, {
696
+ get when() {
697
+ return isOpen();
698
+ },
699
+ get children() {
700
+ var _el$11 = getNextElement(_tmpl$8);
701
+ use(setListBoxElement, _el$11);
702
+ spread(_el$11, mergeProps(domProps, cleanContextProps, cleanListBoxProps, {
703
+ get ["class"]() {
704
+ return renderProps.class();
705
+ },
706
+ get style() {
707
+ return renderProps.style();
708
+ },
709
+ get ["data-focused"]() {
710
+ return state.isFocused() || void 0;
711
+ }
712
+ }), false, true);
713
+ insert(_el$11, createComponent(Show, {
714
+ get when() {
715
+ return local.children;
716
+ },
717
+ get fallback() {
718
+ return createComponent(For, {
719
+ get each() {
720
+ return items();
721
+ },
722
+ children: (node) => createComponent(ComboBoxOption, {
723
+ get id() {
724
+ return node.key;
725
+ },
726
+ get children() {
727
+ return node.textValue;
728
+ }
729
+ })
730
+ });
731
+ },
732
+ get children() {
733
+ return createComponent(For, {
734
+ get each() {
735
+ return items();
736
+ },
737
+ children: (node) => {
738
+ const value = getNodeValue(node);
739
+ return value != null ? local.children(value) : null;
740
+ }
741
+ });
742
+ }
743
+ }));
744
+ runHydrationEvents();
745
+ return _el$11;
746
+ }
747
+ });
748
+ }
749
+ /**
750
+ * An option in a combobox listbox.
751
+ */
752
+ function ComboBoxOption(props) {
753
+ const [local, ariaProps] = splitProps(props, [
754
+ "class",
755
+ "style",
756
+ "slot",
757
+ "id",
758
+ "item",
759
+ "textValue",
760
+ "onAction"
761
+ ]);
762
+ const stateContext = useContext(ComboBoxStateContext);
763
+ const comboBoxContext = useContext(ComboBoxContext);
764
+ if (!stateContext || !comboBoxContext) throw new Error("ComboBoxOption must be used within a ComboBox");
765
+ const state = stateContext;
766
+ const listState = comboBoxContext.listState;
767
+ const [ref, setRef] = createSignal(null);
768
+ const optionId = () => {
769
+ const listBoxId = getComboBoxData(state)?.listBoxId;
770
+ return listBoxId ? `${listBoxId}-option-${local.id}` : String(local.id);
771
+ };
772
+ createEffect(() => {
773
+ const key = local.id;
774
+ comboBoxContext?.registerOptionAction(key, local.onAction);
775
+ onCleanup(() => {
776
+ comboBoxContext?.registerOptionAction(key, void 0);
777
+ });
778
+ });
779
+ const optionAria = createOption({
780
+ key: local.id,
781
+ get optionId() {
782
+ return optionId();
783
+ },
784
+ get isDisabled() {
785
+ return ariaProps.isDisabled;
786
+ },
787
+ get "aria-label"() {
788
+ return ariaProps["aria-label"];
789
+ },
790
+ shouldSelectOnPressUp: true,
791
+ shouldFocusOnHover: true,
792
+ shouldUseVirtualFocus: true,
793
+ allowsDifferentPressOrigin: true,
794
+ get onHoverStart() {
795
+ return ariaProps.onHoverStart;
796
+ },
797
+ get onHoverEnd() {
798
+ return ariaProps.onHoverEnd;
799
+ },
800
+ get onHoverChange() {
801
+ return ariaProps.onHoverChange;
802
+ },
803
+ get onAction() {
804
+ return local.onAction;
805
+ }
806
+ }, listState, () => ref());
807
+ const isOptionFocusVisible = () => optionAria.isFocusVisible() || optionAria.isFocused() && (comboBoxContext?.isFocusVisible() ?? false);
808
+ const renderValues = createMemo(() => ({
809
+ isSelected: optionAria.isSelected(),
810
+ isFocused: optionAria.isFocused(),
811
+ isFocusVisible: isOptionFocusVisible(),
812
+ isPressed: optionAria.isPressed(),
813
+ isHovered: optionAria.isHovered(),
814
+ isDisabled: optionAria.isDisabled()
815
+ }));
816
+ const renderProps = useRenderProps({
817
+ get children() {
818
+ return props.children;
819
+ },
820
+ class: local.class,
821
+ style: local.style,
822
+ defaultClassName: "solidaria-ComboBox-option"
823
+ }, renderValues);
824
+ const selectionIndicatorContext = createMemo(() => ({ isSelected: optionAria.isSelected }));
825
+ const cleanOptionProps = () => {
826
+ const { ref: _ref1, ...rest } = optionAria.optionProps;
827
+ return rest;
828
+ };
829
+ return createComponent(SelectionIndicatorContext.Provider, {
830
+ get value() {
831
+ return selectionIndicatorContext();
832
+ },
833
+ get children() {
834
+ var _el$12 = getNextElement(_tmpl$9);
835
+ use(setRef, _el$12);
836
+ spread(_el$12, mergeProps(cleanOptionProps, {
837
+ get ["class"]() {
838
+ return renderProps.class();
839
+ },
840
+ get style() {
841
+ return renderProps.style();
842
+ },
843
+ get ["data-selected"]() {
844
+ return optionAria.isSelected() || void 0;
845
+ },
846
+ get ["data-focused"]() {
847
+ return optionAria.isFocused() || void 0;
848
+ },
849
+ get ["data-focus-visible"]() {
850
+ return isOptionFocusVisible() || void 0;
851
+ },
852
+ get ["data-pressed"]() {
853
+ return optionAria.isPressed() || void 0;
854
+ },
855
+ get ["data-hovered"]() {
856
+ return optionAria.isHovered() || void 0;
857
+ },
858
+ get ["data-disabled"]() {
859
+ return optionAria.isDisabled() || void 0;
860
+ }
861
+ }), false, true);
862
+ insert(_el$12, () => renderProps.renderChildren());
863
+ runHydrationEvents();
864
+ return _el$12;
865
+ }
866
+ });
867
+ }
868
+ /**
869
+ * Renders selected items as tags in multi-select mode.
870
+ */
871
+ function ComboBoxTagGroup(props) {
872
+ const context = useContext(ComboBoxContext);
873
+ if (!context) throw new Error("ComboBoxTagGroup must be used within a ComboBox");
874
+ const state = context.state;
875
+ const items = createMemo(() => state.selectedItems().map((node) => ({
876
+ key: node.key,
877
+ label: node.textValue
878
+ })));
879
+ return createComponent(Show, {
880
+ get when() {
881
+ return items().length > 0;
882
+ },
883
+ get children() {
884
+ var _el$13 = getNextElement(_tmpl$0);
885
+ insert(_el$13, createComponent(For, {
886
+ get each() {
887
+ return items();
888
+ },
889
+ children: (item) => props.children(item)
890
+ }));
891
+ effect((_p$) => {
892
+ var _v$6 = props.class ?? "solidaria-ComboBox-tagGroup", _v$7 = props.style;
893
+ _v$6 !== _p$.e && className(_el$13, _p$.e = _v$6);
894
+ _p$.t = style(_el$13, _v$7, _p$.t);
895
+ return _p$;
896
+ }, {
897
+ e: void 0,
898
+ t: void 0
899
+ });
900
+ return _el$13;
901
+ }
902
+ });
903
+ }
904
+ /**
905
+ * A tag representing a selected item in a multi-select combobox.
906
+ */
907
+ function ComboBoxTag(props) {
908
+ const context = useContext(ComboBoxContext);
909
+ if (!context) throw new Error("ComboBoxTag must be used within a ComboBox");
910
+ const state = context.state;
911
+ const handleRemove = () => {
912
+ if (props.onRemove) props.onRemove();
913
+ else state.removeSelectedKey(props.item.key);
914
+ };
915
+ return (() => {
916
+ var _el$14 = getNextElement(_tmpl$1), _el$16 = _el$14.firstChild, [_el$17, _co$3] = getNextMarker(_el$16.nextSibling), _el$15 = _el$17.nextSibling;
917
+ insert(_el$14, () => props.children ?? props.item.label, _el$17, _co$3);
918
+ _el$15.$$click = handleRemove;
919
+ effect((_p$) => {
920
+ var _v$8 = props.class ?? "solidaria-ComboBox-tag", _v$9 = props.style, _v$0 = String(props.item.key), _v$1 = `Remove ${props.item.label}`;
921
+ _v$8 !== _p$.e && className(_el$14, _p$.e = _v$8);
922
+ _p$.t = style(_el$14, _v$9, _p$.t);
923
+ _v$0 !== _p$.a && setAttribute(_el$14, "data-key", _p$.a = _v$0);
924
+ _v$1 !== _p$.o && setAttribute(_el$15, "aria-label", _p$.o = _v$1);
925
+ return _p$;
926
+ }, {
927
+ e: void 0,
928
+ t: void 0,
929
+ a: void 0,
930
+ o: void 0
931
+ });
932
+ runHydrationEvents();
933
+ return _el$14;
934
+ })();
935
+ }
936
+ ComboBox.Input = ComboBoxInput;
937
+ ComboBox.Button = ComboBoxButton;
938
+ ComboBox.ListBox = ComboBoxListBox;
939
+ ComboBox.Option = ComboBoxOption;
940
+ ComboBox.Label = ComboBoxLabel;
941
+ ComboBox.Description = ComboBoxDescription;
942
+ ComboBox.ErrorMessage = ComboBoxErrorMessage;
943
+ ComboBox.TagGroup = ComboBoxTagGroup;
944
+ ComboBox.Tag = ComboBoxTag;
945
+ function createComboBoxListStateAdapter(state) {
946
+ const selectedKeys = createMemo(() => {
947
+ if (state.selectionMode() === "multiple") return state.selectedKeys();
948
+ const key = state.selectedKey();
949
+ return key != null ? new Set([key]) : /* @__PURE__ */ new Set();
950
+ });
951
+ const disabledKeys = createMemo(() => {
952
+ const keys = /* @__PURE__ */ new Set();
953
+ for (const node of state.collection()) if (node.isDisabled) keys.add(node.key);
954
+ return keys;
955
+ });
956
+ return {
957
+ collection: state.collection,
958
+ selectionManager: state.selectionManager,
959
+ isFocused: state.isFocused,
960
+ setFocused: state.setFocused,
961
+ focusedKey: state.focusedKey,
962
+ setFocusedKey: (key) => state.setFocusedKey(key ?? null),
963
+ childFocusStrategy: () => null,
964
+ selectionMode: state.selectionMode,
965
+ selectionBehavior: () => "replace",
966
+ disallowEmptySelection: () => true,
967
+ selectedKeys,
968
+ disabledKeys,
969
+ disabledBehavior: () => "all",
970
+ isEmpty: () => selectedKeys().size === 0,
971
+ isSelectAll: () => false,
972
+ isSelected: state.isSelected,
973
+ isDisabled: state.isKeyDisabled,
974
+ setSelectionBehavior: () => {},
975
+ toggleSelection: (key) => state.select(key),
976
+ replaceSelection: (key) => state.select(key),
977
+ setSelectedKeys: (keys) => {
978
+ const first = keys[Symbol.iterator]().next().value;
979
+ state.setSelectedKey(first ?? null);
980
+ },
981
+ selectAll: () => {},
982
+ clearSelection: () => state.setSelectedKey(null),
983
+ toggleSelectAll: () => {},
984
+ extendSelection: (toKey) => state.select(toKey),
985
+ select: (key) => state.select(key)
986
+ };
987
+ }
988
+ delegateEvents(["click"]);
989
+ //#endregion
990
+ export { ComboBox, ComboBoxButton, ComboBoxContext, ComboBoxDescription, ComboBoxErrorMessage, ComboBoxInput, ComboBoxLabel, ComboBoxListBox, ComboBoxOption, ComboBoxStateContext, ComboBoxTag, ComboBoxTagGroup, ComboBoxValue, ComboBoxValueContext, defaultContainsFilter };
991
+
992
+ //# sourceMappingURL=ComboBox.js.map