@pithyjs/ui-kit 0.1.0-beta.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 (417) hide show
  1. package/LICENSE +21 -0
  2. package/dist/animation/animate-in.d.ts +35 -0
  3. package/dist/animation/animate-in.d.ts.map +1 -0
  4. package/dist/animation/animate-in.js +71 -0
  5. package/dist/animation/animate-in.js.map +1 -0
  6. package/dist/atoms/actions/_icon-control.scss +53 -0
  7. package/dist/atoms/actions/button/Button.d.ts +93 -0
  8. package/dist/atoms/actions/button/Button.d.ts.map +1 -0
  9. package/dist/atoms/actions/button/Button.js +332 -0
  10. package/dist/atoms/actions/button/Button.js.map +1 -0
  11. package/dist/atoms/actions/button/button.scss +342 -0
  12. package/dist/atoms/actions/icon-button/IconButton.d.ts +47 -0
  13. package/dist/atoms/actions/icon-button/IconButton.d.ts.map +1 -0
  14. package/dist/atoms/actions/icon-button/IconButton.js +81 -0
  15. package/dist/atoms/actions/icon-button/IconButton.js.map +1 -0
  16. package/dist/atoms/actions/icon-button/icon-button.scss +20 -0
  17. package/dist/atoms/actions/icon-group/IconGroup.d.ts +60 -0
  18. package/dist/atoms/actions/icon-group/IconGroup.d.ts.map +1 -0
  19. package/dist/atoms/actions/icon-group/IconGroup.js +191 -0
  20. package/dist/atoms/actions/icon-group/IconGroup.js.map +1 -0
  21. package/dist/atoms/actions/icon-group/icon-group.scss +36 -0
  22. package/dist/atoms/actions/segmented-control/SegmentedControl.d.ts +49 -0
  23. package/dist/atoms/actions/segmented-control/SegmentedControl.d.ts.map +1 -0
  24. package/dist/atoms/actions/segmented-control/SegmentedControl.js +107 -0
  25. package/dist/atoms/actions/segmented-control/SegmentedControl.js.map +1 -0
  26. package/dist/atoms/actions/segmented-control/segmented-control.scss +90 -0
  27. package/dist/atoms/content/_mixins.scss +79 -0
  28. package/dist/atoms/content/action-tile/ActionTile.d.ts +27 -0
  29. package/dist/atoms/content/action-tile/ActionTile.d.ts.map +1 -0
  30. package/dist/atoms/content/action-tile/ActionTile.js +98 -0
  31. package/dist/atoms/content/action-tile/ActionTile.js.map +1 -0
  32. package/dist/atoms/content/action-tile/action-tile.scss +150 -0
  33. package/dist/atoms/content/badge/Badge.d.ts +57 -0
  34. package/dist/atoms/content/badge/Badge.d.ts.map +1 -0
  35. package/dist/atoms/content/badge/Badge.js +177 -0
  36. package/dist/atoms/content/badge/Badge.js.map +1 -0
  37. package/dist/atoms/content/badge/badge.scss +198 -0
  38. package/dist/atoms/content/heading/Heading.d.ts +53 -0
  39. package/dist/atoms/content/heading/Heading.d.ts.map +1 -0
  40. package/dist/atoms/content/heading/Heading.js +142 -0
  41. package/dist/atoms/content/heading/Heading.js.map +1 -0
  42. package/dist/atoms/content/heading/heading.scss +43 -0
  43. package/dist/atoms/content/icon/Icon.d.ts +68 -0
  44. package/dist/atoms/content/icon/Icon.d.ts.map +1 -0
  45. package/dist/atoms/content/icon/Icon.js +137 -0
  46. package/dist/atoms/content/icon/Icon.js.map +1 -0
  47. package/dist/atoms/content/icon/icon.scss +66 -0
  48. package/dist/atoms/content/icon/resolveIconSvg.d.ts +21 -0
  49. package/dist/atoms/content/icon/resolveIconSvg.d.ts.map +1 -0
  50. package/dist/atoms/content/icon/resolveIconSvg.js +73 -0
  51. package/dist/atoms/content/icon/resolveIconSvg.js.map +1 -0
  52. package/dist/atoms/content/image/Image.d.ts +81 -0
  53. package/dist/atoms/content/image/Image.d.ts.map +1 -0
  54. package/dist/atoms/content/image/Image.js +293 -0
  55. package/dist/atoms/content/image/Image.js.map +1 -0
  56. package/dist/atoms/content/image/image.scss +77 -0
  57. package/dist/atoms/content/text/Text.d.ts +58 -0
  58. package/dist/atoms/content/text/Text.d.ts.map +1 -0
  59. package/dist/atoms/content/text/Text.js +158 -0
  60. package/dist/atoms/content/text/Text.js.map +1 -0
  61. package/dist/atoms/content/text/text.scss +98 -0
  62. package/dist/atoms/content/tile/Tile.d.ts +66 -0
  63. package/dist/atoms/content/tile/Tile.d.ts.map +1 -0
  64. package/dist/atoms/content/tile/Tile.js +125 -0
  65. package/dist/atoms/content/tile/Tile.js.map +1 -0
  66. package/dist/atoms/content/tile/tile.scss +122 -0
  67. package/dist/atoms/feedback/tooltip/Tooltip.d.ts +44 -0
  68. package/dist/atoms/feedback/tooltip/Tooltip.d.ts.map +1 -0
  69. package/dist/atoms/feedback/tooltip/Tooltip.js +121 -0
  70. package/dist/atoms/feedback/tooltip/Tooltip.js.map +1 -0
  71. package/dist/atoms/feedback/tooltip/tooltip.scss +96 -0
  72. package/dist/atoms/forms/checkbox/Checkbox.d.ts +49 -0
  73. package/dist/atoms/forms/checkbox/Checkbox.d.ts.map +1 -0
  74. package/dist/atoms/forms/checkbox/Checkbox.js +269 -0
  75. package/dist/atoms/forms/checkbox/Checkbox.js.map +1 -0
  76. package/dist/atoms/forms/checkbox/CheckboxGroup.d.ts +50 -0
  77. package/dist/atoms/forms/checkbox/CheckboxGroup.d.ts.map +1 -0
  78. package/dist/atoms/forms/checkbox/CheckboxGroup.js +132 -0
  79. package/dist/atoms/forms/checkbox/CheckboxGroup.js.map +1 -0
  80. package/dist/atoms/forms/checkbox/checkbox.scss +506 -0
  81. package/dist/atoms/forms/file-picker/FilePicker.d.ts +23 -0
  82. package/dist/atoms/forms/file-picker/FilePicker.d.ts.map +1 -0
  83. package/dist/atoms/forms/file-picker/FilePicker.js +103 -0
  84. package/dist/atoms/forms/file-picker/FilePicker.js.map +1 -0
  85. package/dist/atoms/forms/file-picker/file-picker.scss +84 -0
  86. package/dist/atoms/forms/form-field/FormField.d.ts +39 -0
  87. package/dist/atoms/forms/form-field/FormField.d.ts.map +1 -0
  88. package/dist/atoms/forms/form-field/FormField.js +139 -0
  89. package/dist/atoms/forms/form-field/FormField.js.map +1 -0
  90. package/dist/atoms/forms/form-field/form-field.scss +46 -0
  91. package/dist/atoms/forms/input/Input.d.ts +81 -0
  92. package/dist/atoms/forms/input/Input.d.ts.map +1 -0
  93. package/dist/atoms/forms/input/Input.js +417 -0
  94. package/dist/atoms/forms/input/Input.js.map +1 -0
  95. package/dist/atoms/forms/input/input.scss +547 -0
  96. package/dist/atoms/forms/radio/Radio.d.ts +54 -0
  97. package/dist/atoms/forms/radio/Radio.d.ts.map +1 -0
  98. package/dist/atoms/forms/radio/Radio.js +278 -0
  99. package/dist/atoms/forms/radio/Radio.js.map +1 -0
  100. package/dist/atoms/forms/radio/RadioGroup.d.ts +54 -0
  101. package/dist/atoms/forms/radio/RadioGroup.d.ts.map +1 -0
  102. package/dist/atoms/forms/radio/RadioGroup.js +137 -0
  103. package/dist/atoms/forms/radio/RadioGroup.js.map +1 -0
  104. package/dist/atoms/forms/radio/radio.scss +459 -0
  105. package/dist/atoms/forms/select/Select.d.ts +57 -0
  106. package/dist/atoms/forms/select/Select.d.ts.map +1 -0
  107. package/dist/atoms/forms/select/Select.js +457 -0
  108. package/dist/atoms/forms/select/Select.js.map +1 -0
  109. package/dist/atoms/forms/select/select-dropdown.d.ts +49 -0
  110. package/dist/atoms/forms/select/select-dropdown.d.ts.map +1 -0
  111. package/dist/atoms/forms/select/select-dropdown.js +305 -0
  112. package/dist/atoms/forms/select/select-dropdown.js.map +1 -0
  113. package/dist/atoms/forms/select/select-keyboard.d.ts +14 -0
  114. package/dist/atoms/forms/select/select-keyboard.d.ts.map +1 -0
  115. package/dist/atoms/forms/select/select-keyboard.js +182 -0
  116. package/dist/atoms/forms/select/select-keyboard.js.map +1 -0
  117. package/dist/atoms/forms/select/select.scss +630 -0
  118. package/dist/atoms/forms/textarea/Textarea.d.ts +69 -0
  119. package/dist/atoms/forms/textarea/Textarea.d.ts.map +1 -0
  120. package/dist/atoms/forms/textarea/Textarea.js +394 -0
  121. package/dist/atoms/forms/textarea/Textarea.js.map +1 -0
  122. package/dist/atoms/forms/textarea/textarea.scss +486 -0
  123. package/dist/atoms/forms/toggle/Toggle.d.ts +47 -0
  124. package/dist/atoms/forms/toggle/Toggle.d.ts.map +1 -0
  125. package/dist/atoms/forms/toggle/Toggle.js +243 -0
  126. package/dist/atoms/forms/toggle/Toggle.js.map +1 -0
  127. package/dist/atoms/forms/toggle/toggle.scss +561 -0
  128. package/dist/compiler.d.ts +7 -0
  129. package/dist/compiler.d.ts.map +1 -0
  130. package/dist/compiler.js +18 -0
  131. package/dist/compiler.js.map +1 -0
  132. package/dist/icons/index.d.ts +14 -0
  133. package/dist/icons/index.d.ts.map +1 -0
  134. package/dist/icons/index.js +14 -0
  135. package/dist/icons/index.js.map +1 -0
  136. package/dist/icons/registry.d.ts +65 -0
  137. package/dist/icons/registry.d.ts.map +1 -0
  138. package/dist/icons/registry.js +126 -0
  139. package/dist/icons/registry.js.map +1 -0
  140. package/dist/index.d.ts +55 -0
  141. package/dist/index.d.ts.map +1 -0
  142. package/dist/index.js +64 -0
  143. package/dist/index.js.map +1 -0
  144. package/dist/layout/Grid.d.ts +78 -0
  145. package/dist/layout/Grid.d.ts.map +1 -0
  146. package/dist/layout/Grid.js +272 -0
  147. package/dist/layout/Grid.js.map +1 -0
  148. package/dist/layout/GridItem.d.ts +52 -0
  149. package/dist/layout/GridItem.d.ts.map +1 -0
  150. package/dist/layout/GridItem.js +99 -0
  151. package/dist/layout/GridItem.js.map +1 -0
  152. package/dist/layout/PageSection.d.ts +43 -0
  153. package/dist/layout/PageSection.d.ts.map +1 -0
  154. package/dist/layout/PageSection.js +75 -0
  155. package/dist/layout/PageSection.js.map +1 -0
  156. package/dist/layout/SmartContainer.d.ts +66 -0
  157. package/dist/layout/SmartContainer.d.ts.map +1 -0
  158. package/dist/layout/SmartContainer.js +194 -0
  159. package/dist/layout/SmartContainer.js.map +1 -0
  160. package/dist/layout/Stack.d.ts +65 -0
  161. package/dist/layout/Stack.d.ts.map +1 -0
  162. package/dist/layout/Stack.js +114 -0
  163. package/dist/layout/Stack.js.map +1 -0
  164. package/dist/organisms/content/Card.d.ts +93 -0
  165. package/dist/organisms/content/Card.d.ts.map +1 -0
  166. package/dist/organisms/content/Card.js +353 -0
  167. package/dist/organisms/content/Card.js.map +1 -0
  168. package/dist/organisms/content/_card-horizontal.scss +88 -0
  169. package/dist/organisms/content/_card-link.scss +49 -0
  170. package/dist/organisms/content/_card-overlay.scss +91 -0
  171. package/dist/organisms/content/_card-root.scss +99 -0
  172. package/dist/organisms/content/_card-slots.scss +143 -0
  173. package/dist/organisms/content/_card-states.scss +166 -0
  174. package/dist/organisms/content/_card-tokens.scss +22 -0
  175. package/dist/organisms/content/_card-variants.scss +31 -0
  176. package/dist/organisms/content/card.scss +15 -0
  177. package/dist/organisms/feedback/Modal.d.ts +39 -0
  178. package/dist/organisms/feedback/Modal.d.ts.map +1 -0
  179. package/dist/organisms/feedback/Modal.js +120 -0
  180. package/dist/organisms/feedback/Modal.js.map +1 -0
  181. package/dist/organisms/feedback/Popover.d.ts +30 -0
  182. package/dist/organisms/feedback/Popover.d.ts.map +1 -0
  183. package/dist/organisms/feedback/Popover.js +151 -0
  184. package/dist/organisms/feedback/Popover.js.map +1 -0
  185. package/dist/organisms/feedback/modal.scss +66 -0
  186. package/dist/organisms/feedback/popover.scss +27 -0
  187. package/dist/organisms/forms/DynamicForm.d.ts +118 -0
  188. package/dist/organisms/forms/DynamicForm.d.ts.map +1 -0
  189. package/dist/organisms/forms/DynamicForm.js +546 -0
  190. package/dist/organisms/forms/DynamicForm.js.map +1 -0
  191. package/dist/organisms/forms/Form.d.ts +62 -0
  192. package/dist/organisms/forms/Form.d.ts.map +1 -0
  193. package/dist/organisms/forms/Form.js +131 -0
  194. package/dist/organisms/forms/Form.js.map +1 -0
  195. package/dist/organisms/forms/dynamic-form.scss +91 -0
  196. package/dist/organisms/forms/form-helpers.d.ts +21 -0
  197. package/dist/organisms/forms/form-helpers.d.ts.map +1 -0
  198. package/dist/organisms/forms/form-helpers.js +57 -0
  199. package/dist/organisms/forms/form-helpers.js.map +1 -0
  200. package/dist/organisms/forms/form-state.d.ts +66 -0
  201. package/dist/organisms/forms/form-state.d.ts.map +1 -0
  202. package/dist/organisms/forms/form-state.js +156 -0
  203. package/dist/organisms/forms/form-state.js.map +1 -0
  204. package/dist/organisms/forms/form.scss +23 -0
  205. package/dist/organisms/forms/validation.d.ts +32 -0
  206. package/dist/organisms/forms/validation.d.ts.map +1 -0
  207. package/dist/organisms/forms/validation.js +118 -0
  208. package/dist/organisms/forms/validation.js.map +1 -0
  209. package/dist/organisms/navigation/Navbar.d.ts +66 -0
  210. package/dist/organisms/navigation/Navbar.d.ts.map +1 -0
  211. package/dist/organisms/navigation/Navbar.js +881 -0
  212. package/dist/organisms/navigation/Navbar.js.map +1 -0
  213. package/dist/organisms/navigation/_navbar-announcement.scss +62 -0
  214. package/dist/organisms/navigation/_navbar-brand.scss +69 -0
  215. package/dist/organisms/navigation/_navbar-container.scss +37 -0
  216. package/dist/organisms/navigation/_navbar-desktop.scss +116 -0
  217. package/dist/organisms/navigation/_navbar-drawer.scss +97 -0
  218. package/dist/organisms/navigation/_navbar-links.scss +143 -0
  219. package/dist/organisms/navigation/_navbar-menu.scss +193 -0
  220. package/dist/organisms/navigation/_navbar-root.scss +107 -0
  221. package/dist/organisms/navigation/_navbar-search.scss +83 -0
  222. package/dist/organisms/navigation/_navbar-toggle.scss +91 -0
  223. package/dist/organisms/navigation/_navbar-tokens.scss +15 -0
  224. package/dist/organisms/navigation/navbar.scss +17 -0
  225. package/dist/registry/categories.d.ts +6 -0
  226. package/dist/registry/categories.d.ts.map +1 -0
  227. package/dist/registry/categories.js +13 -0
  228. package/dist/registry/categories.js.map +1 -0
  229. package/dist/registry/components.d.ts +5 -0
  230. package/dist/registry/components.d.ts.map +1 -0
  231. package/dist/registry/components.js +95 -0
  232. package/dist/registry/components.js.map +1 -0
  233. package/dist/registry/index.d.ts +59 -0
  234. package/dist/registry/index.d.ts.map +1 -0
  235. package/dist/registry/index.js +79 -0
  236. package/dist/registry/index.js.map +1 -0
  237. package/dist/registry/levels.d.ts +6 -0
  238. package/dist/registry/levels.d.ts.map +1 -0
  239. package/dist/registry/levels.js +9 -0
  240. package/dist/registry/levels.js.map +1 -0
  241. package/dist/registry/registry-meta-types.d.ts +67 -0
  242. package/dist/registry/registry-meta-types.d.ts.map +1 -0
  243. package/dist/registry/registry-meta-types.js +6 -0
  244. package/dist/registry/registry-meta-types.js.map +1 -0
  245. package/dist/registry/registry-meta.d.ts +5 -0
  246. package/dist/registry/registry-meta.d.ts.map +1 -0
  247. package/dist/registry/registry-meta.js +731 -0
  248. package/dist/registry/registry-meta.js.map +1 -0
  249. package/dist/registry/renderer.d.ts +69 -0
  250. package/dist/registry/renderer.d.ts.map +1 -0
  251. package/dist/registry/renderer.js +311 -0
  252. package/dist/registry/renderer.js.map +1 -0
  253. package/dist/sections/_section-base.scss +204 -0
  254. package/dist/sections/contact/ContactSection.d.ts +55 -0
  255. package/dist/sections/contact/ContactSection.d.ts.map +1 -0
  256. package/dist/sections/contact/ContactSection.js +142 -0
  257. package/dist/sections/contact/ContactSection.js.map +1 -0
  258. package/dist/sections/contact/contact-section.scss +142 -0
  259. package/dist/sections/cta/CTASection.d.ts +52 -0
  260. package/dist/sections/cta/CTASection.d.ts.map +1 -0
  261. package/dist/sections/cta/CTASection.js +130 -0
  262. package/dist/sections/cta/CTASection.js.map +1 -0
  263. package/dist/sections/cta/cta-section.scss +131 -0
  264. package/dist/sections/entrance.d.ts +29 -0
  265. package/dist/sections/entrance.d.ts.map +1 -0
  266. package/dist/sections/entrance.js +69 -0
  267. package/dist/sections/entrance.js.map +1 -0
  268. package/dist/sections/features/FeaturesSection.d.ts +54 -0
  269. package/dist/sections/features/FeaturesSection.d.ts.map +1 -0
  270. package/dist/sections/features/FeaturesSection.js +139 -0
  271. package/dist/sections/features/FeaturesSection.js.map +1 -0
  272. package/dist/sections/features/features-section.scss +140 -0
  273. package/dist/sections/footer/FooterSection.d.ts +53 -0
  274. package/dist/sections/footer/FooterSection.d.ts.map +1 -0
  275. package/dist/sections/footer/FooterSection.js +147 -0
  276. package/dist/sections/footer/FooterSection.js.map +1 -0
  277. package/dist/sections/footer/footer-section.scss +131 -0
  278. package/dist/sections/hero/HeroSection.d.ts +66 -0
  279. package/dist/sections/hero/HeroSection.d.ts.map +1 -0
  280. package/dist/sections/hero/HeroSection.js +156 -0
  281. package/dist/sections/hero/HeroSection.js.map +1 -0
  282. package/dist/sections/hero/hero-section.scss +211 -0
  283. package/dist/shared/_form-animations.scss +283 -0
  284. package/dist/shared/_media-fit.scss +63 -0
  285. package/dist/shared/_mixins.scss +69 -0
  286. package/dist/shared/_tokens.scss +116 -0
  287. package/dist/shared/badge.d.ts +15 -0
  288. package/dist/shared/badge.d.ts.map +1 -0
  289. package/dist/shared/badge.js +15 -0
  290. package/dist/shared/badge.js.map +1 -0
  291. package/dist/shared/button.d.ts +22 -0
  292. package/dist/shared/button.d.ts.map +1 -0
  293. package/dist/shared/button.js +22 -0
  294. package/dist/shared/button.js.map +1 -0
  295. package/dist/shared/card.d.ts +21 -0
  296. package/dist/shared/card.d.ts.map +1 -0
  297. package/dist/shared/card.js +38 -0
  298. package/dist/shared/card.js.map +1 -0
  299. package/dist/shared/checkbox.d.ts +10 -0
  300. package/dist/shared/checkbox.d.ts.map +1 -0
  301. package/dist/shared/checkbox.js +28 -0
  302. package/dist/shared/checkbox.js.map +1 -0
  303. package/dist/shared/clickable.d.ts +34 -0
  304. package/dist/shared/clickable.d.ts.map +1 -0
  305. package/dist/shared/clickable.js +54 -0
  306. package/dist/shared/clickable.js.map +1 -0
  307. package/dist/shared/common.d.ts +31 -0
  308. package/dist/shared/common.d.ts.map +1 -0
  309. package/dist/shared/common.js +92 -0
  310. package/dist/shared/common.js.map +1 -0
  311. package/dist/shared/entrance-config.d.ts +46 -0
  312. package/dist/shared/entrance-config.d.ts.map +1 -0
  313. package/dist/shared/entrance-config.js +54 -0
  314. package/dist/shared/entrance-config.js.map +1 -0
  315. package/dist/shared/focusable.d.ts +8 -0
  316. package/dist/shared/focusable.d.ts.map +1 -0
  317. package/dist/shared/focusable.js +17 -0
  318. package/dist/shared/focusable.js.map +1 -0
  319. package/dist/shared/form-elements.d.ts +57 -0
  320. package/dist/shared/form-elements.d.ts.map +1 -0
  321. package/dist/shared/form-elements.js +95 -0
  322. package/dist/shared/form-elements.js.map +1 -0
  323. package/dist/shared/form-state.d.ts +52 -0
  324. package/dist/shared/form-state.d.ts.map +1 -0
  325. package/dist/shared/form-state.js +151 -0
  326. package/dist/shared/form-state.js.map +1 -0
  327. package/dist/shared/grid.d.ts +21 -0
  328. package/dist/shared/grid.d.ts.map +1 -0
  329. package/dist/shared/grid.js +187 -0
  330. package/dist/shared/grid.js.map +1 -0
  331. package/dist/shared/icon-slot.d.ts +22 -0
  332. package/dist/shared/icon-slot.d.ts.map +1 -0
  333. package/dist/shared/icon-slot.js +38 -0
  334. package/dist/shared/icon-slot.js.map +1 -0
  335. package/dist/shared/icon.d.ts +17 -0
  336. package/dist/shared/icon.d.ts.map +1 -0
  337. package/dist/shared/icon.js +18 -0
  338. package/dist/shared/icon.js.map +1 -0
  339. package/dist/shared/icons.d.ts +19 -0
  340. package/dist/shared/icons.d.ts.map +1 -0
  341. package/dist/shared/icons.js +22 -0
  342. package/dist/shared/icons.js.map +1 -0
  343. package/dist/shared/image.d.ts +35 -0
  344. package/dist/shared/image.d.ts.map +1 -0
  345. package/dist/shared/image.js +46 -0
  346. package/dist/shared/image.js.map +1 -0
  347. package/dist/shared/input.d.ts +12 -0
  348. package/dist/shared/input.d.ts.map +1 -0
  349. package/dist/shared/input.js +29 -0
  350. package/dist/shared/input.js.map +1 -0
  351. package/dist/shared/radio.d.ts +10 -0
  352. package/dist/shared/radio.d.ts.map +1 -0
  353. package/dist/shared/radio.js +29 -0
  354. package/dist/shared/radio.js.map +1 -0
  355. package/dist/shared/reconcile-list.d.ts +37 -0
  356. package/dist/shared/reconcile-list.d.ts.map +1 -0
  357. package/dist/shared/reconcile-list.js +95 -0
  358. package/dist/shared/reconcile-list.js.map +1 -0
  359. package/dist/shared/section.d.ts +23 -0
  360. package/dist/shared/section.d.ts.map +1 -0
  361. package/dist/shared/section.js +65 -0
  362. package/dist/shared/section.js.map +1 -0
  363. package/dist/shared/segmented.d.ts +17 -0
  364. package/dist/shared/segmented.d.ts.map +1 -0
  365. package/dist/shared/segmented.js +53 -0
  366. package/dist/shared/segmented.js.map +1 -0
  367. package/dist/shared/select.d.ts +18 -0
  368. package/dist/shared/select.d.ts.map +1 -0
  369. package/dist/shared/select.js +14 -0
  370. package/dist/shared/select.js.map +1 -0
  371. package/dist/shared/slots.d.ts +11 -0
  372. package/dist/shared/slots.d.ts.map +1 -0
  373. package/dist/shared/slots.js +33 -0
  374. package/dist/shared/slots.js.map +1 -0
  375. package/dist/shared/smart-container.d.ts +19 -0
  376. package/dist/shared/smart-container.d.ts.map +1 -0
  377. package/dist/shared/smart-container.js +29 -0
  378. package/dist/shared/smart-container.js.map +1 -0
  379. package/dist/shared/text.d.ts +29 -0
  380. package/dist/shared/text.d.ts.map +1 -0
  381. package/dist/shared/text.js +72 -0
  382. package/dist/shared/text.js.map +1 -0
  383. package/dist/shared/textarea.d.ts +6 -0
  384. package/dist/shared/textarea.d.ts.map +1 -0
  385. package/dist/shared/textarea.js +18 -0
  386. package/dist/shared/textarea.js.map +1 -0
  387. package/dist/shared/toggle.d.ts +6 -0
  388. package/dist/shared/toggle.d.ts.map +1 -0
  389. package/dist/shared/toggle.js +19 -0
  390. package/dist/shared/toggle.js.map +1 -0
  391. package/dist/shared/types.d.ts +41 -0
  392. package/dist/shared/types.d.ts.map +1 -0
  393. package/dist/shared/types.js +20 -0
  394. package/dist/shared/types.js.map +1 -0
  395. package/dist/structural/ErrorBoundary.d.ts +18 -0
  396. package/dist/structural/ErrorBoundary.d.ts.map +1 -0
  397. package/dist/structural/ErrorBoundary.js +119 -0
  398. package/dist/structural/ErrorBoundary.js.map +1 -0
  399. package/dist/structural/For.d.ts +37 -0
  400. package/dist/structural/For.d.ts.map +1 -0
  401. package/dist/structural/For.js +129 -0
  402. package/dist/structural/For.js.map +1 -0
  403. package/dist/structural/Lazy.d.ts +43 -0
  404. package/dist/structural/Lazy.d.ts.map +1 -0
  405. package/dist/structural/Lazy.js +47 -0
  406. package/dist/structural/Lazy.js.map +1 -0
  407. package/dist/structural/NavLink.d.ts +45 -0
  408. package/dist/structural/NavLink.d.ts.map +1 -0
  409. package/dist/structural/NavLink.js +37 -0
  410. package/dist/structural/NavLink.js.map +1 -0
  411. package/dist/structural/Show.d.ts +35 -0
  412. package/dist/structural/Show.d.ts.map +1 -0
  413. package/dist/structural/Show.js +34 -0
  414. package/dist/structural/Show.js.map +1 -0
  415. package/dist/structural/nav-link.scss +54 -0
  416. package/dist/styles/index.scss +58 -0
  417. package/package.json +64 -0
@@ -0,0 +1,278 @@
1
+ /** @codex
2
+ {
3
+ "id": "pithy.ui-kit.radio",
4
+ "title": "<Radio> Form Atom",
5
+ "category": "feature"
6
+ }
7
+ */
8
+ import { effect } from '@pithyjs/signals';
9
+ import { CONTROL_SIZES, } from '../../../shared/types';
10
+ import { generateRadioId } from '../../../shared/radio';
11
+ import { createFormStateTracker, applyFormState, cleanupFormState, } from '../../../shared/form-state';
12
+ import { createHelperElement, createErrorElement, createStateIcon, wrapFormControl, } from '../../../shared/form-elements';
13
+ /**
14
+ * Accessible radio button atom.
15
+ *
16
+ * Renders a `<label class="ui-radio">` wrapping a native `<input type="radio">`,
17
+ * a custom `<span class="ui-radio-circle">` (with an inner dot drawn from inline
18
+ * SVG), and a visible `<span class="ui-radio-label">`. Supports error/success
19
+ * states (with shake), helper/error text, loading, and full a11y wiring.
20
+ *
21
+ * Unlike checkboxes, a radio cannot be un-checked by the user — selecting
22
+ * another radio in the same `name` group un-checks the previous one. The
23
+ * native input is visually hidden (sr-only) but kept focusable so
24
+ * `<label>`-forwarded clicks and keyboard interaction still work. Arrow-key
25
+ * navigation across siblings with the same `name` is handled explicitly here
26
+ * because the sr-only technique prevents the UA from finding siblings via
27
+ * default tab-stops.
28
+ *
29
+ * This is a pure visual atom — no validation logic. Error/success are driven
30
+ * externally via props.
31
+ *
32
+ * @example
33
+ * ```html
34
+ * <Radio label="'Cheese'" name="'topping'" value="'cheese'" />
35
+ * <Radio label="'Subscribe'" name="'plan'" value="'pro'" checked="isPro" onChange="select" />
36
+ * ```
37
+ */
38
+ /** @codexApi {"parent":"pithy.ui-kit.radio","name":"Radio","stability":"stable","signature":"(props: RadioProps) => { el: HTMLElement | DocumentFragment; destroy: () => void }"} */
39
+ export function Radio({ id: externalId, name, value, checked = false, disabled = false, readonly: readonlyProp = false, required = false, error = false, errorMessage, helperText, success = false, size: rawSize = 'md', label, loading = false, onChange, onBlur, onFocus, }) {
40
+ // -- Prop validation -------------------------------------------------------
41
+ const validSize = CONTROL_SIZES.includes(rawSize);
42
+ if (import.meta.env?.DEV) {
43
+ if (!validSize) {
44
+ const valid = CONTROL_SIZES.join(', ');
45
+ console.warn(`[<Radio>] Invalid size: "${rawSize}". Expected one of: ${valid}. Falling back to "md".`);
46
+ }
47
+ if (!label) {
48
+ console.warn(`[<Radio>] Empty label — all radios require an accessible name. Pass a non-empty label string.`);
49
+ }
50
+ if (!name) {
51
+ console.warn(`[<Radio>] Missing name — radios must share a 'name' attribute to form a group.`);
52
+ }
53
+ }
54
+ const size = validSize ? rawSize : 'md';
55
+ // -- Element creation ------------------------------------------------------
56
+ const wrapper = document.createElement('label');
57
+ wrapper.classList.add('ui-radio');
58
+ wrapper.setAttribute('data-size', size);
59
+ const radioId = externalId ?? generateRadioId();
60
+ const input = document.createElement('input');
61
+ input.type = 'radio';
62
+ input.classList.add('ui-radio-input');
63
+ input.id = radioId;
64
+ if (name != null)
65
+ input.name = name;
66
+ if (value != null)
67
+ input.value = value;
68
+ if (required) {
69
+ input.required = true;
70
+ input.setAttribute('aria-required', 'true');
71
+ wrapper.setAttribute('data-required', '');
72
+ }
73
+ // Custom circle — inline SVG inner dot scales in/out on checked.
74
+ const circleEl = document.createElement('span');
75
+ circleEl.classList.add('ui-radio-circle');
76
+ circleEl.setAttribute('aria-hidden', 'true');
77
+ circleEl.innerHTML = `
78
+ <svg class="ui-radio-dot" viewBox="0 0 16 16" fill="none" focusable="false" aria-hidden="true">
79
+ <circle cx="8" cy="8" r="4" fill="currentColor" />
80
+ </svg>
81
+ `.trim();
82
+ // Visible label text
83
+ const labelTextEl = document.createElement('span');
84
+ labelTextEl.classList.add('ui-radio-label');
85
+ labelTextEl.textContent = label;
86
+ wrapper.appendChild(input);
87
+ wrapper.appendChild(circleEl);
88
+ wrapper.appendChild(labelTextEl);
89
+ // -- State icon (detached — satisfies applyFormState's element contract) ---
90
+ // The custom circle already conveys error/success colors, so the icon is never
91
+ // shown. We keep a detached element so applyFormState can mutate it without
92
+ // injecting unnecessary DOM nodes or triggering animations.
93
+ const stateIconEl = createStateIcon();
94
+ // -- Helper text -----------------------------------------------------------
95
+ const helperId = `${radioId}-helper`;
96
+ const helperEl = createHelperElement(helperId, helperText);
97
+ // -- Error message ---------------------------------------------------------
98
+ const errorMsgId = `${radioId}-error`;
99
+ const errorMsgEl = createErrorElement(errorMsgId, errorMessage);
100
+ // -- Event handlers --------------------------------------------------------
101
+ const changeHandler = ((e) => {
102
+ // Readonly rollback — a stray programmatic toggle could still dispatch
103
+ // change; restore the controlled value and skip side effects.
104
+ if (input.readOnly) {
105
+ const intended = !!readChecked();
106
+ if (input.checked !== intended) {
107
+ input.checked = intended;
108
+ }
109
+ if (intended) {
110
+ wrapper.setAttribute('data-checked', '');
111
+ }
112
+ else {
113
+ wrapper.removeAttribute('data-checked');
114
+ }
115
+ return;
116
+ }
117
+ // Keep data-checked in sync for uncontrolled usage (static checked prop)
118
+ if (input.checked) {
119
+ wrapper.setAttribute('data-checked', '');
120
+ }
121
+ else {
122
+ wrapper.removeAttribute('data-checked');
123
+ }
124
+ onChange?.(input.checked, e);
125
+ });
126
+ const blurHandler = ((e) => {
127
+ onBlur?.(e);
128
+ });
129
+ const focusHandler = ((e) => {
130
+ onFocus?.(e);
131
+ });
132
+ input.addEventListener('change', changeHandler);
133
+ input.addEventListener('blur', blurHandler);
134
+ input.addEventListener('focus', focusHandler);
135
+ // Readonly — native radios honor `readonly` even less consistently than
136
+ // checkboxes. Same intercept layers as Checkbox: click + Space + change.
137
+ const clickHandler = (e) => {
138
+ if (input.readOnly) {
139
+ e.preventDefault();
140
+ }
141
+ };
142
+ input.addEventListener('click', clickHandler);
143
+ // Arrow-key navigation — jsdom and the sr-only technique combined mean we
144
+ // cannot rely on the UA's built-in radio group focus/check cycling. Find
145
+ // siblings by `name` in the containing form (or document) and move
146
+ // focus + check accordingly. Also intercept Space in readonly mode.
147
+ const keydownHandler = (e) => {
148
+ if (input.readOnly && e.key === ' ') {
149
+ e.preventDefault();
150
+ return;
151
+ }
152
+ if (input.disabled || input.readOnly)
153
+ return;
154
+ const isNext = e.key === 'ArrowDown' || e.key === 'ArrowRight';
155
+ const isPrev = e.key === 'ArrowUp' || e.key === 'ArrowLeft';
156
+ if (!isNext && !isPrev)
157
+ return;
158
+ if (!input.name)
159
+ return;
160
+ const scope = input.form ?? document;
161
+ const siblings = Array.from(scope.querySelectorAll('input[type="radio"]')).filter(r => r.name === input.name && !r.matches(':disabled') && !r.readOnly);
162
+ if (siblings.length < 2)
163
+ return;
164
+ const idx = siblings.indexOf(input);
165
+ if (idx === -1)
166
+ return;
167
+ e.preventDefault();
168
+ const nextIdx = isNext
169
+ ? (idx + 1) % siblings.length
170
+ : (idx - 1 + siblings.length) % siblings.length;
171
+ // Clean up outgoing radio's data-checked before moving
172
+ wrapper.removeAttribute('data-checked');
173
+ const target = siblings[nextIdx];
174
+ target.checked = true;
175
+ target.focus();
176
+ target.dispatchEvent(new Event('change', { bubbles: true }));
177
+ };
178
+ input.addEventListener('keydown', keydownHandler);
179
+ // Block Space on keyup — Chromium fires activation on keyup, not keydown,
180
+ // so keydown alone can't prevent a readonly radio from toggling.
181
+ const keyupHandler = (e) => {
182
+ if (input.readOnly && e.key === ' ') {
183
+ e.preventDefault();
184
+ }
185
+ };
186
+ input.addEventListener('keyup', keyupHandler);
187
+ // -- Reactive state --------------------------------------------------------
188
+ const readChecked = () => typeof checked === 'function' ? checked() : checked;
189
+ const readDisabled = () => typeof disabled === 'function' ? disabled() : disabled;
190
+ const readReadonly = () => typeof readonlyProp === 'function' ? readonlyProp() : readonlyProp;
191
+ const readError = () => (typeof error === 'function' ? error() : error);
192
+ const readErrorMessage = () => typeof errorMessage === 'function' ? errorMessage() : errorMessage;
193
+ const readSuccess = () => typeof success === 'function' ? success() : success;
194
+ const readLoading = () => typeof loading === 'function' ? loading() : loading;
195
+ const isReactive = typeof checked === 'function' ||
196
+ typeof disabled === 'function' ||
197
+ typeof readonlyProp === 'function' ||
198
+ typeof error === 'function' ||
199
+ typeof errorMessage === 'function' ||
200
+ typeof success === 'function' ||
201
+ typeof loading === 'function';
202
+ const formTracker = createFormStateTracker();
203
+ const applyState = () => {
204
+ // Checked
205
+ const isChecked = !!readChecked();
206
+ if (input.checked !== isChecked) {
207
+ input.checked = isChecked;
208
+ }
209
+ if (isChecked) {
210
+ wrapper.setAttribute('data-checked', '');
211
+ }
212
+ else {
213
+ wrapper.removeAttribute('data-checked');
214
+ }
215
+ // Disabled
216
+ const isDisabled = !!readDisabled();
217
+ input.disabled = isDisabled;
218
+ if (isDisabled) {
219
+ wrapper.setAttribute('data-disabled', '');
220
+ }
221
+ else {
222
+ wrapper.removeAttribute('data-disabled');
223
+ }
224
+ // Readonly (custom — native radios ignore it; ARIA also disallows
225
+ // aria-readonly on role=radio, so we only mark via data attribute and
226
+ // intercept toggling in JS). aria-description signals the locked state
227
+ // to screen readers since aria-readonly is not allowed on role=radio.
228
+ const isReadonly = !!readReadonly();
229
+ input.readOnly = isReadonly;
230
+ if (isReadonly) {
231
+ wrapper.setAttribute('data-readonly', '');
232
+ input.setAttribute('aria-description', 'Read-only');
233
+ }
234
+ else {
235
+ wrapper.removeAttribute('data-readonly');
236
+ input.removeAttribute('aria-description');
237
+ }
238
+ // Error / success / shake / aria-describedby — shared
239
+ applyFormState({ wrapper, control: input, stateIconEl, helperEl, errorMsgEl }, { readError, readErrorMessage, readSuccess }, { helperId, errorMsgId }, { shakeClass: 'ui-radio-shake', iconPrefix: 'ui-radio-state-icon' }, formTracker);
240
+ // Loading
241
+ const isLoading = !!readLoading();
242
+ wrapper.classList.toggle('ui-radio-loading', isLoading);
243
+ if (isLoading) {
244
+ input.setAttribute('aria-busy', 'true');
245
+ }
246
+ else {
247
+ input.removeAttribute('aria-busy');
248
+ }
249
+ formTracker.firstRun = false;
250
+ };
251
+ const cleanupEffect = isReactive
252
+ ? effect(applyState)
253
+ : (applyState(), undefined);
254
+ // -- Return ----------------------------------------------------------------
255
+ const { root, needsContainer } = wrapFormControl(wrapper, {
256
+ helperEl,
257
+ errorMsgEl,
258
+ containerClass: 'ui-radio-field',
259
+ });
260
+ return {
261
+ el: root,
262
+ destroy: () => {
263
+ cleanupEffect?.();
264
+ input.removeEventListener('change', changeHandler);
265
+ input.removeEventListener('blur', blurHandler);
266
+ input.removeEventListener('focus', focusHandler);
267
+ input.removeEventListener('click', clickHandler);
268
+ input.removeEventListener('keydown', keydownHandler);
269
+ input.removeEventListener('keyup', keyupHandler);
270
+ cleanupFormState(wrapper, stateIconEl, formTracker);
271
+ wrapper.replaceChildren();
272
+ if (needsContainer) {
273
+ root.replaceChildren();
274
+ }
275
+ },
276
+ };
277
+ }
278
+ //# sourceMappingURL=Radio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Radio.js","sourceRoot":"","sources":["../../../../src/atoms/forms/radio/Radio.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /** @codex
2
+ {
3
+ "id": "pithy.ui-kit.radio-group",
4
+ "title": "<RadioGroup> Form Atom",
5
+ "category": "feature"
6
+ }
7
+ */
8
+ /** @codexApi {"parent":"pithy.ui-kit.radio-group","name":"RadioGroupProps","stability":"stable","signature":"interface RadioGroupProps"} */
9
+ export interface RadioGroupProps {
10
+ /** Explicit fieldset ID — overrides auto-generated ID */
11
+ id?: string;
12
+ /** Required group label rendered inside <legend> */
13
+ label: string;
14
+ /** Visually hide the legend (still announced by screen readers) */
15
+ hideLabel?: boolean;
16
+ /** Persistent helper text below the group */
17
+ helperText?: string;
18
+ /** Error message — when present and error is truthy, shown below the group */
19
+ errorMessage?: string | (() => string);
20
+ /** Visual error state — static boolean or signal accessor */
21
+ error?: boolean | (() => boolean);
22
+ /** Disable the entire group (sets fieldset[disabled]) — static boolean or signal accessor */
23
+ disabled?: boolean | (() => boolean);
24
+ }
25
+ /**
26
+ * Accessible group wrapper for `<Radio>` controls.
27
+ *
28
+ * Renders `<fieldset><legend>...</legend>{children}{helper/error}</fieldset>`.
29
+ * Children are compiled through PithyJS's full pipeline via `renderChildren()`,
30
+ * so any markup is supported. The fieldset is marked with `data-slot="default"`
31
+ * so the site builder can target it as a drop zone.
32
+ *
33
+ * Native `fieldset[disabled]` cascades to all descendant form controls, so
34
+ * setting `disabled` on the group disables every child radio without any
35
+ * extra plumbing.
36
+ *
37
+ * `RadioGroup` does NOT auto-inject a `name` onto its children — every `<Radio>`
38
+ * must declare its own `name` explicitly. Siblings with the same `name` are
39
+ * mutually exclusive and share arrow-key navigation.
40
+ *
41
+ * @example
42
+ * ```html
43
+ * <RadioGroup label="'Plan'">
44
+ * <Radio label="'Free'" name="'plan'" value="'free'" />
45
+ * <Radio label="'Pro'" name="'plan'" value="'pro'" />
46
+ * </RadioGroup>
47
+ * ```
48
+ */
49
+ /** @codexApi {"parent":"pithy.ui-kit.radio-group","name":"RadioGroup","stability":"stable","signature":"(props: RadioGroupProps) => { el: HTMLElement | DocumentFragment; destroy: () => void }"} */
50
+ export declare function RadioGroup({ id: externalId, label, hideLabel, helperText, errorMessage, error, disabled, }: RadioGroupProps): {
51
+ el: HTMLElement | DocumentFragment;
52
+ destroy: () => void;
53
+ };
54
+ //# sourceMappingURL=RadioGroup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadioGroup.d.ts","sourceRoot":"","sources":["../../../../src/atoms/forms/radio/RadioGroup.ts"],"names":[],"mappings":"AAAA;;;;;;EAME;AAWF,4IAA4I;AAC5I,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,YAAY,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IACvC,6DAA6D;IAC7D,KAAK,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;IAClC,6FAA6F;IAC7F,QAAQ,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;CACtC;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qMAAqM;AACrM,wBAAgB,UAAU,CAAC,EACzB,EAAE,EAAE,UAAU,EACd,KAAK,EACL,SAAiB,EACjB,UAAU,EACV,YAAY,EACZ,KAAa,EACb,QAAgB,GACjB,EAAE,eAAe,GAAG;IACnB,EAAE,EAAE,WAAW,GAAG,gBAAgB,CAAC;IACnC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAsHA"}
@@ -0,0 +1,137 @@
1
+ /** @codex
2
+ {
3
+ "id": "pithy.ui-kit.radio-group",
4
+ "title": "<RadioGroup> Form Atom",
5
+ "category": "feature"
6
+ }
7
+ */
8
+ import { effect } from '@pithyjs/signals';
9
+ import { renderChildren } from '@pithyjs/core';
10
+ import { captureSlot } from '../../../shared/slots';
11
+ import { generateRadioGroupId } from '../../../shared/radio';
12
+ import { createHelperElement, createErrorElement, } from '../../../shared/form-elements';
13
+ /**
14
+ * Accessible group wrapper for `<Radio>` controls.
15
+ *
16
+ * Renders `<fieldset><legend>...</legend>{children}{helper/error}</fieldset>`.
17
+ * Children are compiled through PithyJS's full pipeline via `renderChildren()`,
18
+ * so any markup is supported. The fieldset is marked with `data-slot="default"`
19
+ * so the site builder can target it as a drop zone.
20
+ *
21
+ * Native `fieldset[disabled]` cascades to all descendant form controls, so
22
+ * setting `disabled` on the group disables every child radio without any
23
+ * extra plumbing.
24
+ *
25
+ * `RadioGroup` does NOT auto-inject a `name` onto its children — every `<Radio>`
26
+ * must declare its own `name` explicitly. Siblings with the same `name` are
27
+ * mutually exclusive and share arrow-key navigation.
28
+ *
29
+ * @example
30
+ * ```html
31
+ * <RadioGroup label="'Plan'">
32
+ * <Radio label="'Free'" name="'plan'" value="'free'" />
33
+ * <Radio label="'Pro'" name="'plan'" value="'pro'" />
34
+ * </RadioGroup>
35
+ * ```
36
+ */
37
+ /** @codexApi {"parent":"pithy.ui-kit.radio-group","name":"RadioGroup","stability":"stable","signature":"(props: RadioGroupProps) => { el: HTMLElement | DocumentFragment; destroy: () => void }"} */
38
+ export function RadioGroup({ id: externalId, label, hideLabel = false, helperText, errorMessage, error = false, disabled = false, }) {
39
+ if (import.meta.env?.DEV) {
40
+ if (!label) {
41
+ console.warn(`[<RadioGroup>] Empty label — all groups require an accessible name. Pass a non-empty label string.`);
42
+ }
43
+ }
44
+ const groupId = externalId ?? generateRadioGroupId();
45
+ const fieldset = document.createElement('fieldset');
46
+ fieldset.classList.add('ui-radio-group');
47
+ fieldset.setAttribute('role', 'radiogroup');
48
+ fieldset.id = groupId;
49
+ captureSlot(fieldset, 'default');
50
+ const legend = document.createElement('legend');
51
+ legend.classList.add('ui-radio-group-legend');
52
+ if (hideLabel)
53
+ legend.classList.add('u-visually-hidden');
54
+ legend.textContent = label;
55
+ fieldset.appendChild(legend);
56
+ // Compile children through full pipeline (enables nested components)
57
+ const { el: childFragment, destroy: destroyChildren } = renderChildren();
58
+ fieldset.appendChild(childFragment);
59
+ const helperEl = createHelperElement(`${groupId}-helper`, helperText);
60
+ if (helperEl)
61
+ fieldset.appendChild(helperEl);
62
+ const errorEl = createErrorElement(`${groupId}-error`, errorMessage);
63
+ if (errorEl)
64
+ fieldset.appendChild(errorEl);
65
+ // -- Reactive state --------------------------------------------------------
66
+ const readError = () => (typeof error === 'function' ? error() : error);
67
+ const readErrorMessage = () => typeof errorMessage === 'function' ? errorMessage() : errorMessage;
68
+ const readDisabled = () => typeof disabled === 'function' ? disabled() : disabled;
69
+ const isReactive = typeof error === 'function' ||
70
+ typeof errorMessage === 'function' ||
71
+ typeof disabled === 'function';
72
+ let prevError = false;
73
+ let firstRun = true;
74
+ const applyState = () => {
75
+ // Disabled
76
+ const isDisabled = !!readDisabled();
77
+ fieldset.disabled = isDisabled;
78
+ if (isDisabled) {
79
+ fieldset.setAttribute('data-disabled', '');
80
+ }
81
+ else {
82
+ fieldset.removeAttribute('data-disabled');
83
+ }
84
+ // Error
85
+ const isError = !!readError();
86
+ const msg = readErrorMessage();
87
+ const showError = isError && !!msg && !!errorEl;
88
+ // Warn only on first run or false→true transition to avoid console spam
89
+ if (import.meta.env?.DEV && isError && !msg && (!prevError || firstRun)) {
90
+ console.warn(`[<RadioGroup>] error=true but no errorMessage. ` +
91
+ `Screen readers will announce "invalid" with no context. ` +
92
+ `Provide an errorMessage for accessible error identification (WCAG 3.3.1).`);
93
+ }
94
+ if (isError) {
95
+ fieldset.setAttribute('aria-invalid', 'true');
96
+ fieldset.setAttribute('data-error', '');
97
+ }
98
+ else {
99
+ fieldset.removeAttribute('aria-invalid');
100
+ fieldset.removeAttribute('data-error');
101
+ }
102
+ if (errorEl) {
103
+ errorEl.textContent = showError ? msg : '';
104
+ errorEl.hidden = !showError;
105
+ }
106
+ // Hide helper when error message is visible (consistent with form atoms)
107
+ if (helperEl) {
108
+ helperEl.hidden = !!showError;
109
+ }
110
+ // aria-describedby — only reference visible content
111
+ const descIds = [];
112
+ if (errorEl && showError)
113
+ descIds.push(errorEl.id);
114
+ if (helperEl && !showError)
115
+ descIds.push(helperEl.id);
116
+ if (descIds.length > 0) {
117
+ fieldset.setAttribute('aria-describedby', descIds.join(' '));
118
+ }
119
+ else {
120
+ fieldset.removeAttribute('aria-describedby');
121
+ }
122
+ prevError = !!isError;
123
+ firstRun = false;
124
+ };
125
+ const cleanupEffect = isReactive
126
+ ? effect(applyState)
127
+ : (applyState(), undefined);
128
+ return {
129
+ el: fieldset,
130
+ destroy: () => {
131
+ cleanupEffect?.();
132
+ destroyChildren();
133
+ fieldset.replaceChildren();
134
+ },
135
+ };
136
+ }
137
+ //# sourceMappingURL=RadioGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadioGroup.js","sourceRoot":"","sources":["../../../../src/atoms/forms/radio/RadioGroup.ts"],"names":[],"mappings":"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"}