@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,931 @@
1
+ import { Provider, filterDOMProps, useRenderProps } from "./utils.js";
2
+ import { VisuallyHidden } from "./VisuallyHidden.js";
3
+ import { FieldErrorContext } from "./FieldError.js";
4
+ import { TextContext } from "./Text.js";
5
+ import { SelectionIndicatorContext } from "./SelectionIndicator.js";
6
+ import { createComponent, getNextElement, getNextMarker, insert, memo, mergeProps, runHydrationEvents, setAttribute, spread, template, use } from "solid-js/web";
7
+ import { Show, createContext, createMemo, createSignal, createUniqueId, splitProps, useContext } from "solid-js";
8
+ import { createFocusRing, createHover, createRadio, createRadioGroup, mergeProps as mergeProps$2 } from "@proyecto-viviana/solidaria";
9
+ import { VALID_VALIDITY_STATE, createRadioGroupState } from "@proyecto-viviana/solid-stately";
10
+ //#region src/RadioGroup.tsx
11
+ /**
12
+ * RadioGroup and Radio components for solidaria-components
13
+ *
14
+ * Pre-wired headless radio components that combine state + aria hooks.
15
+ * Port of react-aria-components/src/RadioGroup.tsx
16
+ */
17
+ var _tmpl$ = /*#__PURE__*/ template(`<div>`), _tmpl$2 = /*#__PURE__*/ template(`<input>`), _tmpl$3 = /*#__PURE__*/ template(`<span slot=description>`), _tmpl$4 = /*#__PURE__*/ template(`<span slot=errorMessage>`), _tmpl$5 = /*#__PURE__*/ template(`<label>`), _tmpl$6 = /*#__PURE__*/ template(`<label><!$><!/><!$><!/>`);
18
+ function assignRef(ref, el) {
19
+ if (!ref) return;
20
+ if (typeof ref === "function") ref(el);
21
+ else ref.current = el;
22
+ }
23
+ const validValidation = {
24
+ isInvalid: false,
25
+ validationDetails: VALID_VALIDITY_STATE,
26
+ validationErrors: []
27
+ };
28
+ function getNativeValidation(input) {
29
+ return {
30
+ isInvalid: !input.validity.valid,
31
+ validationDetails: {
32
+ badInput: input.validity.badInput,
33
+ customError: input.validity.customError,
34
+ patternMismatch: input.validity.patternMismatch,
35
+ rangeOverflow: input.validity.rangeOverflow,
36
+ rangeUnderflow: input.validity.rangeUnderflow,
37
+ stepMismatch: input.validity.stepMismatch,
38
+ tooLong: input.validity.tooLong,
39
+ tooShort: input.validity.tooShort,
40
+ typeMismatch: input.validity.typeMismatch,
41
+ valueMissing: input.validity.valueMissing,
42
+ valid: input.validity.valid
43
+ },
44
+ validationErrors: input.validationMessage ? [input.validationMessage] : []
45
+ };
46
+ }
47
+ const RadioGroupContext = createContext(null);
48
+ const RadioGroupStateContext = createContext(null);
49
+ const RadioContext = createContext(null);
50
+ /**
51
+ * A radio group allows a user to select a single item from a list of mutually exclusive options.
52
+ *
53
+ * @example
54
+ * ```tsx
55
+ * <RadioGroup>
56
+ * <Radio value="one">Option 1</Radio>
57
+ * <Radio value="two">Option 2</Radio>
58
+ * </RadioGroup>
59
+ * ```
60
+ */
61
+ function RadioGroup(props) {
62
+ const contextProps = useContext(RadioGroupContext);
63
+ const contextSlotProps = contextProps?.slots?.[props.slot ?? "default"];
64
+ const contextBaseProps = createMemo(() => {
65
+ if (!contextProps) return {};
66
+ const { slots: _slots, ...rest } = contextProps;
67
+ return rest;
68
+ });
69
+ const mergedProps = contextProps ? mergeProps$2(contextBaseProps(), contextSlotProps ?? {}, props) : props;
70
+ const [local, ariaProps] = splitProps(mergedProps, [
71
+ "class",
72
+ "style",
73
+ "render",
74
+ "ref",
75
+ "slot",
76
+ "renderHelpText"
77
+ ]);
78
+ const state = createRadioGroupState(() => ({
79
+ value: mergedProps.value,
80
+ defaultValue: mergedProps.defaultValue,
81
+ onChange: mergedProps.onChange,
82
+ isDisabled: mergedProps.isDisabled,
83
+ isReadOnly: mergedProps.isReadOnly,
84
+ isRequired: mergedProps.isRequired,
85
+ isInvalid: mergedProps.isInvalid,
86
+ validationState: mergedProps.validationState,
87
+ validate: mergedProps.validate,
88
+ validationBehavior: mergedProps.validationBehavior,
89
+ name: mergedProps.name,
90
+ form: mergedProps.form
91
+ }));
92
+ const groupAria = createRadioGroup(() => ({
93
+ ...ariaProps,
94
+ description: mergedProps.description,
95
+ errorMessage: mergedProps.errorMessage
96
+ }), state);
97
+ const isInvalid = createMemo(() => state.isInvalid);
98
+ const validation = createMemo(() => state.displayValidation());
99
+ const fallbackErrorMessageId = createUniqueId();
100
+ const errorMessageId = () => groupAria.errorMessageProps.id ?? fallbackErrorMessageId;
101
+ const renderValues = createMemo(() => ({
102
+ orientation: ariaProps.orientation ?? "vertical",
103
+ isDisabled: state.isDisabled,
104
+ isReadOnly: state.isReadOnly,
105
+ isRequired: state.isRequired,
106
+ isInvalid: isInvalid(),
107
+ state
108
+ }));
109
+ const renderProps = useRenderProps({
110
+ get children() {
111
+ return props.children;
112
+ },
113
+ class: local.class,
114
+ style: local.style,
115
+ defaultClassName: "solidaria-RadioGroup"
116
+ }, renderValues);
117
+ const domProps = createMemo(() => filterDOMProps(ariaProps, { global: true }));
118
+ const cleanGroupProps = () => {
119
+ const { ref: _ref, ...rest } = groupAria.radioGroupProps;
120
+ return rest;
121
+ };
122
+ const handleGroupFocusIn = (event) => {
123
+ groupAria.radioGroupProps.onFocus?.(event);
124
+ };
125
+ const handleGroupFocusOut = (event) => {
126
+ groupAria.radioGroupProps.onBlur?.(event);
127
+ };
128
+ const handleGroupInvalidCapture = (event) => {
129
+ const target = event.target;
130
+ if (!(target instanceof HTMLInputElement) || target.type !== "radio") return;
131
+ state.updateValidation(getNativeValidation(target));
132
+ state.commitValidation();
133
+ target.focus();
134
+ event.preventDefault();
135
+ };
136
+ const handleGroupChangeCapture = (event) => {
137
+ const target = event.target;
138
+ if (!(target instanceof HTMLInputElement) || target.type !== "radio") return;
139
+ state.updateValidation(target.validity.valid ? validValidation : getNativeValidation(target));
140
+ state.commitValidation();
141
+ };
142
+ const setGroupRef = (el) => {
143
+ assignRef(local.ref, el);
144
+ };
145
+ const groupDescribedBy = () => {
146
+ const ids = [
147
+ cleanGroupProps()["aria-describedby"],
148
+ mergedProps.description ? groupAria.descriptionProps.id : void 0,
149
+ isInvalid() && (mergedProps.errorMessage || validation().validationErrors.length > 0) ? errorMessageId() : void 0
150
+ ].filter(Boolean).join(" ").split(" ").filter(Boolean);
151
+ return ids.length ? Array.from(new Set(ids)).join(" ") : void 0;
152
+ };
153
+ const fieldErrorContext = {
154
+ get validation() {
155
+ return validation();
156
+ },
157
+ get errorMessageProps() {
158
+ return {
159
+ ...groupAria.errorMessageProps,
160
+ id: errorMessageId()
161
+ };
162
+ }
163
+ };
164
+ const GroupChildren = () => {
165
+ const childRenderValues = {
166
+ get orientation() {
167
+ return ariaProps.orientation ?? "vertical";
168
+ },
169
+ get isDisabled() {
170
+ return state.isDisabled;
171
+ },
172
+ get isReadOnly() {
173
+ return state.isReadOnly;
174
+ },
175
+ get isRequired() {
176
+ return state.isRequired;
177
+ },
178
+ get isInvalid() {
179
+ return isInvalid();
180
+ },
181
+ get state() {
182
+ return state;
183
+ }
184
+ };
185
+ return [
186
+ memo(createMemo(() => {
187
+ const children = props.children;
188
+ if (typeof children === "function") return children.length > 0 ? children(childRenderValues) : children();
189
+ return children;
190
+ })),
191
+ createComponent(Show, {
192
+ get when() {
193
+ return memo(() => !!(local.renderHelpText ?? true))() && mergedProps.description;
194
+ },
195
+ get children() {
196
+ var _el$ = getNextElement(_tmpl$);
197
+ spread(_el$, mergeProps(() => groupAria.descriptionProps), false, true);
198
+ insert(_el$, () => mergedProps.description);
199
+ runHydrationEvents();
200
+ return _el$;
201
+ }
202
+ }),
203
+ createComponent(Show, {
204
+ get when() {
205
+ return memo(() => !!((local.renderHelpText ?? true) && isInvalid()))() && mergedProps.errorMessage;
206
+ },
207
+ get children() {
208
+ var _el$2 = getNextElement(_tmpl$);
209
+ spread(_el$2, mergeProps(() => groupAria.errorMessageProps), false, true);
210
+ insert(_el$2, () => mergedProps.errorMessage);
211
+ runHydrationEvents();
212
+ return _el$2;
213
+ }
214
+ })
215
+ ];
216
+ };
217
+ const groupEventProps = {
218
+ onInvalidCapture: handleGroupInvalidCapture,
219
+ onChangeCapture: handleGroupChangeCapture
220
+ };
221
+ const customRootProps = () => ({
222
+ ...domProps(),
223
+ ...cleanGroupProps(),
224
+ ...groupEventProps,
225
+ ref: setGroupRef,
226
+ onFocusIn: handleGroupFocusIn,
227
+ onFocusOut: handleGroupFocusOut,
228
+ "aria-describedby": groupDescribedBy(),
229
+ class: renderProps.class(),
230
+ style: renderProps.style(),
231
+ slot: local.slot,
232
+ "data-orientation": ariaProps.orientation ?? "vertical",
233
+ "data-disabled": state.isDisabled || void 0,
234
+ "data-readonly": state.isReadOnly || void 0,
235
+ "data-required": state.isRequired || void 0,
236
+ "data-invalid": isInvalid() || void 0,
237
+ children: createComponent(GroupChildren, {})
238
+ });
239
+ return createComponent(RadioGroupStateContext.Provider, {
240
+ value: state,
241
+ get children() {
242
+ return createComponent(FieldErrorContext.Provider, {
243
+ value: fieldErrorContext,
244
+ get children() {
245
+ return memo(() => !!local.render)() ? local.render(customRootProps(), renderValues()) : (() => {
246
+ var _el$3 = getNextElement(_tmpl$);
247
+ use(setGroupRef, _el$3);
248
+ spread(_el$3, mergeProps(domProps, cleanGroupProps, groupEventProps, {
249
+ "onFocusIn": handleGroupFocusIn,
250
+ "onFocusOut": handleGroupFocusOut,
251
+ get ["aria-describedby"]() {
252
+ return groupDescribedBy();
253
+ },
254
+ get ["class"]() {
255
+ return renderProps.class();
256
+ },
257
+ get style() {
258
+ return renderProps.style();
259
+ },
260
+ get slot() {
261
+ return local.slot;
262
+ },
263
+ get ["data-orientation"]() {
264
+ return ariaProps.orientation ?? "vertical";
265
+ },
266
+ get ["data-disabled"]() {
267
+ return state.isDisabled || void 0;
268
+ },
269
+ get ["data-readonly"]() {
270
+ return state.isReadOnly || void 0;
271
+ },
272
+ get ["data-required"]() {
273
+ return state.isRequired || void 0;
274
+ },
275
+ get ["data-invalid"]() {
276
+ return isInvalid() || void 0;
277
+ }
278
+ }), false, true);
279
+ insert(_el$3, createComponent(GroupChildren, {}));
280
+ runHydrationEvents();
281
+ return _el$3;
282
+ })();
283
+ }
284
+ });
285
+ }
286
+ });
287
+ }
288
+ /**
289
+ * Internal Radio implementation that has access to RadioGroupStateContext.
290
+ * This is rendered inside the RadioGroup's context provider.
291
+ */
292
+ function RadioImpl(props) {
293
+ const [inputElement, setInputElement] = createSignal(null);
294
+ const { state } = props;
295
+ const contextProps = useContext(RadioContext);
296
+ const contextSlotProps = contextProps?.slots?.[props.radioProps.slot ?? "default"];
297
+ const contextBaseProps = createMemo(() => {
298
+ if (!contextProps) return {};
299
+ const { slots: _slots, ...rest } = contextProps;
300
+ return rest;
301
+ });
302
+ const radioProps = contextProps ? mergeProps$2(contextBaseProps(), contextSlotProps ?? {}, props.radioProps) : props.radioProps;
303
+ const inputRefs = createMemo(() => [
304
+ contextBaseProps().inputRef,
305
+ contextSlotProps?.inputRef,
306
+ props.radioProps.inputRef
307
+ ].filter(Boolean));
308
+ const [local, ariaProps] = splitProps(radioProps, [
309
+ "class",
310
+ "style",
311
+ "render",
312
+ "ref",
313
+ "inputRef",
314
+ "slot",
315
+ "description",
316
+ "errorMessage",
317
+ "onHoverStart",
318
+ "onHoverEnd",
319
+ "onHoverChange"
320
+ ]);
321
+ const descriptionId = createUniqueId();
322
+ const errorMessageId = createUniqueId();
323
+ const describedBy = () => {
324
+ const ids = [
325
+ ariaProps["aria-describedby"],
326
+ local.description ? descriptionId : void 0,
327
+ state.isInvalid && local.errorMessage ? errorMessageId : void 0
328
+ ].filter(Boolean);
329
+ return ids.length ? ids.join(" ") : void 0;
330
+ };
331
+ const inputAriaProps = createMemo(() => {
332
+ const clean = {};
333
+ for (const key in ariaProps) if (!key.startsWith("data-")) clean[key] = ariaProps[key];
334
+ return clean;
335
+ });
336
+ const radioAria = createRadio(() => ({
337
+ ...inputAriaProps(),
338
+ "aria-describedby": describedBy(),
339
+ children: typeof radioProps.children === "function" ? true : radioProps.children
340
+ }), state, inputElement);
341
+ const { isFocused, isFocusVisible, focusProps } = createFocusRing();
342
+ const { isHovered, hoverProps } = createHover({
343
+ get isDisabled() {
344
+ return radioAria.isDisabled || state.isReadOnly;
345
+ },
346
+ onHoverStart: local.onHoverStart,
347
+ onHoverEnd: local.onHoverEnd,
348
+ onHoverChange: local.onHoverChange
349
+ });
350
+ const renderValues = createMemo(() => ({
351
+ isSelected: radioAria.isSelected(),
352
+ isHovered: isHovered(),
353
+ isPressed: radioAria.isPressed(),
354
+ isFocused: isFocused(),
355
+ isFocusVisible: isFocusVisible(),
356
+ isDisabled: radioAria.isDisabled,
357
+ isReadOnly: state.isReadOnly,
358
+ isInvalid: state.isInvalid,
359
+ isRequired: state.isRequired
360
+ }));
361
+ const renderProps = useRenderProps({
362
+ children: radioProps.children,
363
+ class: local.class,
364
+ style: local.style,
365
+ defaultClassName: "solidaria-Radio"
366
+ }, renderValues);
367
+ const selectionIndicatorContext = createMemo(() => ({ isSelected: radioAria.isSelected }));
368
+ const domProps = createMemo(() => {
369
+ const filtered = filterDOMProps(ariaProps, { global: true });
370
+ delete filtered.id;
371
+ delete filtered.onClick;
372
+ return filtered;
373
+ });
374
+ const cleanLabelProps = () => {
375
+ const { ref: _ref1, ...rest } = radioAria.labelProps;
376
+ return rest;
377
+ };
378
+ const cleanHoverProps = () => {
379
+ const { ref: _ref2, ...rest } = hoverProps;
380
+ return rest;
381
+ };
382
+ const cleanInputProps = () => {
383
+ const { ref: _ref3, onFocus: _onFocus, onBlur: _onBlur, ...rest } = radioAria.inputProps;
384
+ return rest;
385
+ };
386
+ const cleanFocusProps = () => {
387
+ const { ref: _ref4, onFocus: _onFocus, onBlur: _onBlur, ...rest } = focusProps;
388
+ return rest;
389
+ };
390
+ const handleInputFocus = (event) => {
391
+ radioAria.inputProps.onFocus?.(event);
392
+ focusProps.onFocus?.(event);
393
+ };
394
+ const handleInputBlur = (event) => {
395
+ radioAria.inputProps.onBlur?.(event);
396
+ focusProps.onBlur?.(event);
397
+ };
398
+ const handleLabelClick = (event) => {
399
+ ariaProps.onClickCapture?.(event);
400
+ radioAria.labelProps.onClick?.(event);
401
+ };
402
+ const handleLabelClickCapture = (event) => {
403
+ ariaProps.onClickCapture?.(event);
404
+ };
405
+ const handleInputClick = (event) => {
406
+ radioAria.inputProps.onClick?.(event);
407
+ };
408
+ const handleInputInvalid = (event) => {
409
+ state.updateValidation(getNativeValidation(event.currentTarget));
410
+ state.commitValidation();
411
+ event.currentTarget.focus();
412
+ event.preventDefault();
413
+ };
414
+ const handleInputChange = (event) => {
415
+ radioAria.inputProps.onChange?.(event);
416
+ state.updateValidation(event.currentTarget.validity.valid ? validValidation : getNativeValidation(event.currentTarget));
417
+ state.commitValidation();
418
+ };
419
+ const setLabelRef = (el) => {
420
+ assignRef(local.ref, el);
421
+ };
422
+ const setInputRef = (el) => {
423
+ setInputElement(el);
424
+ el.addEventListener("invalid", (event) => {
425
+ state.updateValidation(getNativeValidation(el));
426
+ state.commitValidation();
427
+ el.focus();
428
+ event.preventDefault();
429
+ });
430
+ el.addEventListener("change", () => {
431
+ state.updateValidation(el.validity.valid ? validValidation : getNativeValidation(el));
432
+ state.commitValidation();
433
+ });
434
+ for (const ref of inputRefs()) assignRef(ref, el);
435
+ };
436
+ const hiddenInput = createComponent(VisuallyHidden, { get children() {
437
+ var _el$4 = getNextElement(_tmpl$2);
438
+ use(setInputRef, _el$4);
439
+ spread(_el$4, mergeProps(cleanInputProps, cleanFocusProps, {
440
+ "onFocus": handleInputFocus,
441
+ "onBlur": handleInputBlur,
442
+ "onInvalid": handleInputInvalid,
443
+ "onChange": handleInputChange,
444
+ "onClick": handleInputClick
445
+ }), false, false);
446
+ runHydrationEvents();
447
+ return _el$4;
448
+ } });
449
+ const labelChildren = () => [
450
+ hiddenInput,
451
+ memo(() => renderProps.renderChildren()),
452
+ createComponent(Show, {
453
+ get when() {
454
+ return local.description;
455
+ },
456
+ get children() {
457
+ var _el$5 = getNextElement(_tmpl$3);
458
+ setAttribute(_el$5, "id", descriptionId);
459
+ insert(_el$5, () => local.description);
460
+ return _el$5;
461
+ }
462
+ }),
463
+ createComponent(Show, {
464
+ get when() {
465
+ return memo(() => !!state.isInvalid)() && local.errorMessage;
466
+ },
467
+ get children() {
468
+ var _el$6 = getNextElement(_tmpl$4);
469
+ setAttribute(_el$6, "id", errorMessageId);
470
+ insert(_el$6, () => local.errorMessage);
471
+ return _el$6;
472
+ }
473
+ })
474
+ ];
475
+ const customLabelProps = () => ({
476
+ ...domProps(),
477
+ ...cleanLabelProps(),
478
+ ...cleanHoverProps(),
479
+ ref: setLabelRef,
480
+ class: renderProps.class(),
481
+ style: renderProps.style(),
482
+ slot: local.slot,
483
+ onClick: handleLabelClick,
484
+ onClickCapture: handleLabelClickCapture,
485
+ "data-selected": radioAria.isSelected() || void 0,
486
+ "data-pressed": radioAria.isPressed() || void 0,
487
+ "data-hovered": isHovered() || void 0,
488
+ "data-focused": isFocused() || void 0,
489
+ "data-focus-visible": isFocusVisible() || void 0,
490
+ "data-disabled": radioAria.isDisabled || void 0,
491
+ "data-readonly": state.isReadOnly || void 0,
492
+ "data-invalid": state.isInvalid || void 0,
493
+ "data-required": state.isRequired || void 0,
494
+ children: labelChildren()
495
+ });
496
+ const labelCaptureProps = { onClickCapture: handleLabelClickCapture };
497
+ return createComponent(SelectionIndicatorContext.Provider, {
498
+ get value() {
499
+ return selectionIndicatorContext();
500
+ },
501
+ get children() {
502
+ return memo(() => !!local.render)() ? local.render(customLabelProps(), renderValues()) : (() => {
503
+ var _el$7 = getNextElement(_tmpl$5);
504
+ use(setLabelRef, _el$7);
505
+ spread(_el$7, mergeProps(domProps, cleanLabelProps, cleanHoverProps, {
506
+ get ["class"]() {
507
+ return renderProps.class();
508
+ },
509
+ get style() {
510
+ return renderProps.style();
511
+ },
512
+ get slot() {
513
+ return local.slot;
514
+ },
515
+ "onClick": handleLabelClick
516
+ }, labelCaptureProps, {
517
+ get ["data-selected"]() {
518
+ return radioAria.isSelected() || void 0;
519
+ },
520
+ get ["data-pressed"]() {
521
+ return radioAria.isPressed() || void 0;
522
+ },
523
+ get ["data-hovered"]() {
524
+ return isHovered() || void 0;
525
+ },
526
+ get ["data-focused"]() {
527
+ return isFocused() || void 0;
528
+ },
529
+ get ["data-focus-visible"]() {
530
+ return isFocusVisible() || void 0;
531
+ },
532
+ get ["data-disabled"]() {
533
+ return radioAria.isDisabled || void 0;
534
+ },
535
+ get ["data-readonly"]() {
536
+ return state.isReadOnly || void 0;
537
+ },
538
+ get ["data-invalid"]() {
539
+ return state.isInvalid || void 0;
540
+ },
541
+ get ["data-required"]() {
542
+ return state.isRequired || void 0;
543
+ }
544
+ }), false, true);
545
+ insert(_el$7, labelChildren);
546
+ runHydrationEvents();
547
+ return _el$7;
548
+ })();
549
+ }
550
+ });
551
+ }
552
+ /**
553
+ * A radio represents an individual option within a radio group.
554
+ *
555
+ * @example
556
+ * ```tsx
557
+ * <Radio value="option1">
558
+ * {({ isSelected }) => (
559
+ * <>
560
+ * <span class={`radio ${isSelected ? 'selected' : ''}`}>
561
+ * {isSelected && '●'}
562
+ * </span>
563
+ * <span>Option 1</span>
564
+ * </>
565
+ * )}
566
+ * </Radio>
567
+ * ```
568
+ */
569
+ function Radio(props) {
570
+ const getState = createMemo(() => useContext(RadioGroupStateContext));
571
+ return createComponent(Show, {
572
+ get when() {
573
+ return getState();
574
+ },
575
+ fallback: null,
576
+ keyed: true,
577
+ children: (state) => createComponent(RadioImpl, {
578
+ radioProps: props,
579
+ state
580
+ })
581
+ });
582
+ }
583
+ const RadioFieldContext = createContext(null);
584
+ const InternalRadioContext = createContext(null);
585
+ /**
586
+ * A RadioField represents an individual option within a radio group, containing a
587
+ * `RadioButton` and optional description. Must be rendered inside a `RadioGroup`.
588
+ * Per-option help text is wired through a TextContext description slot — render it
589
+ * with `<Text slot="description">`. (Radios have no per-option error slot; errors
590
+ * are reported at the group level.)
591
+ *
592
+ * @example
593
+ * ```tsx
594
+ * <RadioGroup>
595
+ * <RadioField value="a">
596
+ * <RadioButton>Option A</RadioButton>
597
+ * <Text slot="description">The first option</Text>
598
+ * </RadioField>
599
+ * </RadioGroup>
600
+ * ```
601
+ */
602
+ function RadioField(props) {
603
+ const getState = createMemo(() => useContext(RadioGroupStateContext));
604
+ return createComponent(Show, {
605
+ get when() {
606
+ return getState();
607
+ },
608
+ fallback: null,
609
+ keyed: true,
610
+ children: (state) => createComponent(RadioFieldImpl, {
611
+ fieldProps: props,
612
+ state
613
+ })
614
+ });
615
+ }
616
+ function RadioFieldImpl(props) {
617
+ const [inputElement, setInputElement] = createSignal(null);
618
+ const { state } = props;
619
+ const contextProps = useContext(RadioFieldContext);
620
+ const contextSlotProps = contextProps?.slots?.[props.fieldProps.slot ?? "default"];
621
+ const contextBaseProps = createMemo(() => {
622
+ if (!contextProps) return {};
623
+ const { slots: _slots, ...rest } = contextProps;
624
+ return rest;
625
+ });
626
+ const fieldProps = contextProps ? mergeProps$2(contextBaseProps(), contextSlotProps ?? {}, props.fieldProps) : props.fieldProps;
627
+ const inputRefs = createMemo(() => [
628
+ contextBaseProps().inputRef,
629
+ contextSlotProps?.inputRef,
630
+ props.fieldProps.inputRef
631
+ ].filter(Boolean));
632
+ const [local, ariaProps] = splitProps(fieldProps, [
633
+ "class",
634
+ "style",
635
+ "ref",
636
+ "inputRef",
637
+ "slot",
638
+ "children"
639
+ ]);
640
+ const inputAriaProps = createMemo(() => {
641
+ const clean = {};
642
+ for (const key in ariaProps) if (!key.startsWith("data-")) clean[key] = ariaProps[key];
643
+ return clean;
644
+ });
645
+ const radioAria = createRadio(() => ({
646
+ ...inputAriaProps(),
647
+ children: true
648
+ }), state, inputElement);
649
+ const textSlots = { slots: { get description() {
650
+ return radioAria.descriptionProps;
651
+ } } };
652
+ const setInputRef = (el) => {
653
+ setInputElement(el);
654
+ el.addEventListener("invalid", (event) => {
655
+ state.updateValidation(getNativeValidation(el));
656
+ state.commitValidation();
657
+ el.focus();
658
+ event.preventDefault();
659
+ });
660
+ el.addEventListener("change", () => {
661
+ state.updateValidation(el.validity.valid ? validValidation : getNativeValidation(el));
662
+ state.commitValidation();
663
+ });
664
+ for (const ref of inputRefs()) assignRef(ref, el);
665
+ };
666
+ const setFieldRef = (el) => {
667
+ assignRef(local.ref, el);
668
+ };
669
+ const internalContext = {
670
+ isSelected: () => radioAria.isSelected(),
671
+ isPressed: () => radioAria.isPressed(),
672
+ isDisabled: () => radioAria.isDisabled,
673
+ labelProps: () => radioAria.labelProps,
674
+ inputProps: () => radioAria.inputProps,
675
+ setInputRef,
676
+ defaultClassName: "solidaria-RadioButton"
677
+ };
678
+ const selectionIndicatorContext = createMemo(() => ({ isSelected: radioAria.isSelected }));
679
+ const renderValues = createMemo(() => ({
680
+ isSelected: radioAria.isSelected(),
681
+ isDisabled: radioAria.isDisabled,
682
+ isReadOnly: state.isReadOnly,
683
+ isInvalid: state.isInvalid,
684
+ isRequired: state.isRequired
685
+ }));
686
+ const renderProps = useRenderProps({
687
+ children: fieldProps.children,
688
+ class: local.class,
689
+ style: local.style,
690
+ defaultClassName: "solidaria-RadioField"
691
+ }, renderValues);
692
+ const domProps = createMemo(() => {
693
+ const filtered = filterDOMProps(ariaProps, { global: true });
694
+ delete filtered.id;
695
+ delete filtered.onClick;
696
+ return filtered;
697
+ });
698
+ const FieldChildren = () => {
699
+ const childRenderValues = {
700
+ get isSelected() {
701
+ return radioAria.isSelected();
702
+ },
703
+ get isDisabled() {
704
+ return radioAria.isDisabled;
705
+ },
706
+ get isReadOnly() {
707
+ return state.isReadOnly;
708
+ },
709
+ get isInvalid() {
710
+ return state.isInvalid;
711
+ },
712
+ get isRequired() {
713
+ return state.isRequired;
714
+ }
715
+ };
716
+ return memo(createMemo(() => {
717
+ const children = fieldProps.children;
718
+ return typeof children === "function" ? children(childRenderValues) : children;
719
+ }));
720
+ };
721
+ return (() => {
722
+ var _el$8 = getNextElement(_tmpl$);
723
+ use(setFieldRef, _el$8);
724
+ spread(_el$8, mergeProps(domProps, {
725
+ get ["class"]() {
726
+ return renderProps.class();
727
+ },
728
+ get style() {
729
+ return renderProps.style();
730
+ },
731
+ get slot() {
732
+ return local.slot;
733
+ },
734
+ get ["data-selected"]() {
735
+ return radioAria.isSelected() || void 0;
736
+ },
737
+ get ["data-disabled"]() {
738
+ return radioAria.isDisabled || void 0;
739
+ },
740
+ get ["data-readonly"]() {
741
+ return state.isReadOnly || void 0;
742
+ },
743
+ get ["data-invalid"]() {
744
+ return state.isInvalid || void 0;
745
+ },
746
+ get ["data-required"]() {
747
+ return state.isRequired || void 0;
748
+ }
749
+ }), false, true);
750
+ insert(_el$8, createComponent(SelectionIndicatorContext.Provider, {
751
+ get value() {
752
+ return selectionIndicatorContext();
753
+ },
754
+ get children() {
755
+ return createComponent(InternalRadioContext.Provider, {
756
+ value: internalContext,
757
+ get children() {
758
+ return createComponent(Provider, {
759
+ values: [[TextContext, textSlots]],
760
+ get children() {
761
+ return createComponent(FieldChildren, {});
762
+ }
763
+ });
764
+ }
765
+ });
766
+ }
767
+ }));
768
+ runHydrationEvents();
769
+ return _el$8;
770
+ })();
771
+ }
772
+ /**
773
+ * A RadioButton is the clickable area of a radio, including the indicator and label.
774
+ * Must be rendered inside a `RadioField` (or the legacy `Radio`).
775
+ */
776
+ function RadioButton(props) {
777
+ const getCtx = createMemo(() => useContext(InternalRadioContext));
778
+ const getState = createMemo(() => useContext(RadioGroupStateContext));
779
+ return createComponent(Show, {
780
+ get when() {
781
+ return getCtx();
782
+ },
783
+ fallback: null,
784
+ keyed: true,
785
+ children: (ctx) => createComponent(Show, {
786
+ get when() {
787
+ return getState();
788
+ },
789
+ fallback: null,
790
+ keyed: true,
791
+ children: (state) => createComponent(RadioButtonImpl, {
792
+ buttonProps: props,
793
+ ctx,
794
+ state
795
+ })
796
+ })
797
+ });
798
+ }
799
+ function RadioButtonImpl(props) {
800
+ const { ctx, state } = props;
801
+ const { isFocused, isFocusVisible, focusProps } = createFocusRing();
802
+ const { isHovered, hoverProps } = createHover({
803
+ get isDisabled() {
804
+ return ctx.isDisabled() || state.isReadOnly;
805
+ },
806
+ onHoverStart: props.buttonProps.onHoverStart,
807
+ onHoverEnd: props.buttonProps.onHoverEnd,
808
+ onHoverChange: props.buttonProps.onHoverChange
809
+ });
810
+ const renderValues = createMemo(() => ({
811
+ isSelected: ctx.isSelected(),
812
+ isHovered: isHovered(),
813
+ isPressed: ctx.isPressed(),
814
+ isFocused: isFocused(),
815
+ isFocusVisible: isFocusVisible(),
816
+ isDisabled: ctx.isDisabled(),
817
+ isReadOnly: state.isReadOnly,
818
+ isInvalid: state.isInvalid,
819
+ isRequired: state.isRequired
820
+ }));
821
+ const renderProps = useRenderProps({
822
+ children: props.buttonProps.children,
823
+ class: props.buttonProps.class,
824
+ style: props.buttonProps.style,
825
+ defaultClassName: ctx.defaultClassName
826
+ }, renderValues);
827
+ const cleanLabelProps = () => {
828
+ const { ref: _ref1, ...rest } = ctx.labelProps();
829
+ return rest;
830
+ };
831
+ const cleanHoverProps = () => {
832
+ const { ref: _ref2, ...rest } = hoverProps;
833
+ return rest;
834
+ };
835
+ const cleanInputProps = () => {
836
+ const { ref: _ref3, onFocus: _onFocus, onBlur: _onBlur, ...rest } = ctx.inputProps();
837
+ return rest;
838
+ };
839
+ const cleanFocusProps = () => {
840
+ const { ref: _ref4, onFocus: _onFocus, onBlur: _onBlur, ...rest } = focusProps;
841
+ return rest;
842
+ };
843
+ const handleInputFocus = (event) => {
844
+ ctx.inputProps().onFocus?.(event);
845
+ focusProps.onFocus?.(event);
846
+ };
847
+ const handleInputBlur = (event) => {
848
+ ctx.inputProps().onBlur?.(event);
849
+ focusProps.onBlur?.(event);
850
+ };
851
+ const handleInputClick = (event) => {
852
+ ctx.inputProps().onClick?.(event);
853
+ };
854
+ const handleInputInvalid = (event) => {
855
+ state.updateValidation(getNativeValidation(event.currentTarget));
856
+ state.commitValidation();
857
+ event.currentTarget.focus();
858
+ event.preventDefault();
859
+ };
860
+ const handleInputChange = (event) => {
861
+ ctx.inputProps().onChange?.(event);
862
+ state.updateValidation(event.currentTarget.validity.valid ? validValidation : getNativeValidation(event.currentTarget));
863
+ state.commitValidation();
864
+ };
865
+ const setButtonRef = (el) => {
866
+ assignRef(props.buttonProps.ref, el);
867
+ };
868
+ return (() => {
869
+ var _el$9 = getNextElement(_tmpl$6), _el$1 = _el$9.firstChild, [_el$10, _co$] = getNextMarker(_el$1.nextSibling), _el$11 = _el$10.nextSibling, [_el$12, _co$2] = getNextMarker(_el$11.nextSibling);
870
+ use(setButtonRef, _el$9);
871
+ spread(_el$9, mergeProps(cleanLabelProps, cleanHoverProps, {
872
+ get ["class"]() {
873
+ return renderProps.class();
874
+ },
875
+ get style() {
876
+ return renderProps.style();
877
+ },
878
+ get slot() {
879
+ return props.buttonProps.slot;
880
+ },
881
+ get ["data-selected"]() {
882
+ return ctx.isSelected() || void 0;
883
+ },
884
+ get ["data-pressed"]() {
885
+ return ctx.isPressed() || void 0;
886
+ },
887
+ get ["data-hovered"]() {
888
+ return isHovered() || void 0;
889
+ },
890
+ get ["data-focused"]() {
891
+ return isFocused() || void 0;
892
+ },
893
+ get ["data-focus-visible"]() {
894
+ return isFocusVisible() || void 0;
895
+ },
896
+ get ["data-disabled"]() {
897
+ return ctx.isDisabled() || void 0;
898
+ },
899
+ get ["data-readonly"]() {
900
+ return state.isReadOnly || void 0;
901
+ },
902
+ get ["data-invalid"]() {
903
+ return state.isInvalid || void 0;
904
+ },
905
+ get ["data-required"]() {
906
+ return state.isRequired || void 0;
907
+ }
908
+ }), false, true);
909
+ insert(_el$9, createComponent(VisuallyHidden, { get children() {
910
+ var _el$0 = getNextElement(_tmpl$2);
911
+ var _ref$ = ctx.setInputRef;
912
+ typeof _ref$ === "function" ? use(_ref$, _el$0) : ctx.setInputRef = _el$0;
913
+ spread(_el$0, mergeProps(cleanInputProps, cleanFocusProps, {
914
+ "onFocus": handleInputFocus,
915
+ "onBlur": handleInputBlur,
916
+ "onInvalid": handleInputInvalid,
917
+ "onChange": handleInputChange,
918
+ "onClick": handleInputClick
919
+ }), false, false);
920
+ runHydrationEvents();
921
+ return _el$0;
922
+ } }), _el$10, _co$);
923
+ insert(_el$9, () => renderProps.renderChildren(), _el$12, _co$2);
924
+ runHydrationEvents();
925
+ return _el$9;
926
+ })();
927
+ }
928
+ //#endregion
929
+ export { Radio, RadioButton, RadioContext, RadioField, RadioFieldContext, RadioGroup, RadioGroupContext, RadioGroupStateContext };
930
+
931
+ //# sourceMappingURL=RadioGroup.js.map