@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,44 @@
1
+ /** @codex
2
+ {
3
+ "id": "pithy.ui-kit.tooltip",
4
+ "title": "<Tooltip> Feedback Component",
5
+ "category": "feature",
6
+ "risk": "low"
7
+ }
8
+ */
9
+ import { type ReactiveText } from '../../../shared/clickable';
10
+ /**
11
+ * Reset the module-level tooltip ID counter so `ui-tooltip-*` IDs are
12
+ * deterministic. Call between SSR requests and between test cases — same pattern
13
+ * as `resetInputIdCounter` / `resetSectionIdCounter`.
14
+ */
15
+ /** @codexApi {"parent":"pithy.ui-kit.tooltip","name":"resetTooltipIdCounter","stability":"stable","signature":"() => void"} */
16
+ export declare function resetTooltipIdCounter(): void;
17
+ /** @codexApi {"parent":"pithy.ui-kit.tooltip","name":"TooltipProps","stability":"stable","signature":"interface TooltipProps"} */
18
+ export interface TooltipProps {
19
+ /** Hint text. Static or a `() => string` accessor for reactive copy. */
20
+ label: ReactiveText;
21
+ /** Bubble placement relative to the trigger (default `"bottom"`). */
22
+ placement?: 'top' | 'bottom' | 'left' | 'right';
23
+ }
24
+ /**
25
+ * Wraps trigger content and reveals a hint bubble on hover / focus-within.
26
+ *
27
+ * CSS-driven (no JS positioning): the wrapper element receives `:hover` /
28
+ * `:focus-within`, so the hint still shows when the wrapped control is
29
+ * **disabled** (a disabled `<button>` doesn't emit pointer events itself, but
30
+ * the wrapper does) — which is the primary use case.
31
+ *
32
+ * @example
33
+ * ```html
34
+ * <Tooltip label="'Set Default mode to Auto to preview both'">
35
+ * <IconGroup ... disabled="locked" />
36
+ * </Tooltip>
37
+ * ```
38
+ */
39
+ /** @codexApi {"parent":"pithy.ui-kit.tooltip","name":"Tooltip","stability":"stable","signature":"(props: TooltipProps) => { el: HTMLElement; destroy: () => void }"} */
40
+ export declare function Tooltip({ label, placement }: TooltipProps): {
41
+ el: HTMLElement;
42
+ destroy: () => void;
43
+ };
44
+ //# sourceMappingURL=Tooltip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tooltip.d.ts","sourceRoot":"","sources":["../../../../src/atoms/feedback/tooltip/Tooltip.ts"],"names":[],"mappings":"AAAA;;;;;;;EAOE;AAIF,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,2BAA2B,CAAC;AAInC;;;;GAIG;AACH,+HAA+H;AAC/H,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAID,kIAAkI;AAClI,MAAM,WAAW,YAAY;IAC3B,wEAAwE;IACxE,KAAK,EAAE,YAAY,CAAC;IACpB,qEAAqE;IACrE,SAAS,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;CACjD;AAED;;;;;;;;;;;;;;GAcG;AACH,wKAAwK;AACxK,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,SAAoB,EAAE,EAAE,YAAY,GAAG;IACtE,EAAE,EAAE,WAAW,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAuFA"}
@@ -0,0 +1,121 @@
1
+ /** @codex
2
+ {
3
+ "id": "pithy.ui-kit.tooltip",
4
+ "title": "<Tooltip> Feedback Component",
5
+ "category": "feature",
6
+ "risk": "low"
7
+ }
8
+ */
9
+ import { renderChildren } from '@pithyjs/core';
10
+ import { effect } from '@pithyjs/signals';
11
+ import { hasReactive, readReactive, } from '../../../shared/clickable';
12
+ let tooltipIdCounter = 0;
13
+ /**
14
+ * Reset the module-level tooltip ID counter so `ui-tooltip-*` IDs are
15
+ * deterministic. Call between SSR requests and between test cases — same pattern
16
+ * as `resetInputIdCounter` / `resetSectionIdCounter`.
17
+ */
18
+ /** @codexApi {"parent":"pithy.ui-kit.tooltip","name":"resetTooltipIdCounter","stability":"stable","signature":"() => void"} */
19
+ export function resetTooltipIdCounter() {
20
+ tooltipIdCounter = 0;
21
+ }
22
+ /**
23
+ * Wraps trigger content and reveals a hint bubble on hover / focus-within.
24
+ *
25
+ * CSS-driven (no JS positioning): the wrapper element receives `:hover` /
26
+ * `:focus-within`, so the hint still shows when the wrapped control is
27
+ * **disabled** (a disabled `<button>` doesn't emit pointer events itself, but
28
+ * the wrapper does) — which is the primary use case.
29
+ *
30
+ * @example
31
+ * ```html
32
+ * <Tooltip label="'Set Default mode to Auto to preview both'">
33
+ * <IconGroup ... disabled="locked" />
34
+ * </Tooltip>
35
+ * ```
36
+ */
37
+ /** @codexApi {"parent":"pithy.ui-kit.tooltip","name":"Tooltip","stability":"stable","signature":"(props: TooltipProps) => { el: HTMLElement; destroy: () => void }"} */
38
+ export function Tooltip({ label, placement = 'bottom' }) {
39
+ const root = document.createElement('span');
40
+ root.classList.add('ui-tooltip');
41
+ root.dataset.placement = placement;
42
+ // Projected trigger content (the wrapped control).
43
+ const { el: childFragment, destroy: destroyChildren } = renderChildren();
44
+ root.appendChild(childFragment);
45
+ // The element that actually receives focus is the projected trigger, not the
46
+ // wrapper — capture it now (before the bubble is appended) for aria wiring.
47
+ const trigger = root.firstElementChild;
48
+ // Hint bubble.
49
+ const bubble = document.createElement('span');
50
+ bubble.classList.add('ui-tooltip-bubble');
51
+ bubble.setAttribute('role', 'tooltip');
52
+ bubble.id = `ui-tooltip-${(tooltipIdCounter += 1)}`;
53
+ // Describe the trigger for AT. Set on the wrapper (covers the disabled-control
54
+ // case, where focus stays outside), and best-effort on the projected trigger
55
+ // element so the hint is announced when focus lands on it. APPEND to any
56
+ // existing `aria-describedby` (e.g. a control already pointing at helper/error
57
+ // text) rather than skipping — deduped, space-separated.
58
+ root.setAttribute('aria-describedby', bubble.id);
59
+ if (trigger) {
60
+ const ids = (trigger.getAttribute('aria-describedby') ?? '')
61
+ .split(/\s+/)
62
+ .filter(Boolean);
63
+ if (!ids.includes(bubble.id)) {
64
+ ids.push(bubble.id);
65
+ trigger.setAttribute('aria-describedby', ids.join(' '));
66
+ }
67
+ }
68
+ root.appendChild(bubble);
69
+ const disposers = [destroyChildren];
70
+ // A disabled trigger exposes no focusable element, so `:focus-within` (and thus
71
+ // keyboard reveal of the hint) can never fire and the wrapper's `aria-describedby`
72
+ // goes unused. Make the WRAPPER focusable in that case so keyboard users can
73
+ // reach the tooltip. Tracked reactively — e.g. `<IconGroup disabled>` toggles
74
+ // `data-disabled`/`aria-disabled` after mount.
75
+ if (trigger) {
76
+ const syncFocusable = () => {
77
+ // `data-disabled` has two conventions in the kit: a boolean attribute
78
+ // (`data-disabled=""` present when disabled — Input/Checkbox/Select/…) and
79
+ // IconGroup's `"true"/"false"`. Treat any present value as disabled EXCEPT
80
+ // the explicit "false".
81
+ const dataDisabled = trigger.getAttribute('data-disabled');
82
+ const disabled = trigger.hasAttribute('disabled') ||
83
+ trigger.getAttribute('aria-disabled') === 'true' ||
84
+ (dataDisabled !== null && dataDisabled !== 'false');
85
+ if (disabled)
86
+ root.tabIndex = 0;
87
+ else
88
+ root.removeAttribute('tabindex');
89
+ };
90
+ syncFocusable();
91
+ if (typeof MutationObserver !== 'undefined') {
92
+ const observer = new MutationObserver(syncFocusable);
93
+ observer.observe(trigger, {
94
+ attributes: true,
95
+ attributeFilter: ['disabled', 'aria-disabled', 'data-disabled'],
96
+ });
97
+ disposers.push(() => observer.disconnect());
98
+ }
99
+ }
100
+ if (hasReactive(label)) {
101
+ disposers.push(effect(() => {
102
+ bubble.textContent = readReactive(label) ?? '';
103
+ }));
104
+ }
105
+ else {
106
+ bubble.textContent = readReactive(label) ?? '';
107
+ }
108
+ return {
109
+ el: root,
110
+ destroy() {
111
+ for (const dispose of disposers)
112
+ dispose();
113
+ disposers.length = 0;
114
+ // Clear the projected trigger + bubble so no stale ARIA wiring / DOM is
115
+ // left behind when a consumer destroys without removing `el` (matches the
116
+ // other ui-kit atoms).
117
+ root.replaceChildren();
118
+ },
119
+ };
120
+ }
121
+ //# sourceMappingURL=Tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tooltip.js","sourceRoot":"","sources":["../../../../src/atoms/feedback/tooltip/Tooltip.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,96 @@
1
+ /// Tooltip — hint bubble revealed on hover / focus-within of the wrapper.
2
+ /// Pure-CSS visibility so it works around disabled controls.
3
+ ///
4
+ /// @group atoms/feedback
5
+
6
+ @use '@pithyjs/design-system/a11y/styles/mixins' as a11y;
7
+ @use '../../../shared/tokens' as shared;
8
+
9
+ .ui-tooltip {
10
+ position: relative;
11
+ display: inline-flex;
12
+ }
13
+
14
+ .ui-tooltip-bubble {
15
+ position: absolute;
16
+ z-index: var(--z-tooltip);
17
+ inline-size: max-content;
18
+ // Centralized measure token (shared/_tokens.scss) rather than a one-off raw value.
19
+ max-inline-size: shared.$measure-tooltip;
20
+ padding-block: var(--space-xs);
21
+ padding-inline: var(--space-sm);
22
+ border-radius: var(--radius-sm);
23
+ background-color: var(--color-surface-inverse, var(--color-text));
24
+ color: var(--color-surface);
25
+ font-size: var(--font-size-xs);
26
+ line-height: var(--line-height-sm);
27
+ text-align: center;
28
+ box-shadow: var(--shadow-md);
29
+ pointer-events: none;
30
+ opacity: 0;
31
+ visibility: hidden;
32
+
33
+ @include a11y.motion-safe {
34
+ transition:
35
+ opacity var(--motion-duration-fast) var(--motion-easing-standard),
36
+ // visibility: 0ms duration, easing, then DELAY by the fade duration so the
37
+ // bubble stays present during the opacity fade-out before hiding. The
38
+ // explicit easing makes the 2nd time unambiguously the delay (not a
39
+ // timing-function).
40
+ visibility var(--motion-duration-instant) var(--motion-easing-standard)
41
+ var(--motion-duration-fast);
42
+ }
43
+
44
+ // Forced-colors (Windows High Contrast): the token bg/text map to system
45
+ // colors that can collapse to unreadable pairings, and shadows aren't rendered
46
+ // — pin to a system Canvas/CanvasText bubble with a visible border instead.
47
+ @include a11y.forced-colors {
48
+ border: var(--border-width-thin) solid CanvasText;
49
+ background-color: Canvas;
50
+ color: CanvasText;
51
+ box-shadow: none;
52
+ }
53
+ }
54
+
55
+ // No bubble when there's no hint text (e.g. a reactive label that's empty).
56
+ .ui-tooltip-bubble:empty {
57
+ display: none;
58
+ }
59
+
60
+ // Reveal on hover or keyboard focus within the wrapper.
61
+ .ui-tooltip:hover .ui-tooltip-bubble:not(:empty),
62
+ .ui-tooltip:focus-within .ui-tooltip-bubble:not(:empty) {
63
+ opacity: 1;
64
+ visibility: visible;
65
+
66
+ @include a11y.motion-safe {
67
+ transition: opacity var(--motion-duration-fast)
68
+ var(--motion-easing-standard);
69
+ }
70
+ }
71
+
72
+ // -- Placement ---------------------------------------------------------------
73
+
74
+ .ui-tooltip[data-placement='bottom'] .ui-tooltip-bubble {
75
+ inset-block-start: calc(100% + var(--space-xs));
76
+ inset-inline-start: 50%;
77
+ translate: -50% 0;
78
+ }
79
+
80
+ .ui-tooltip[data-placement='top'] .ui-tooltip-bubble {
81
+ inset-block-end: calc(100% + var(--space-xs));
82
+ inset-inline-start: 50%;
83
+ translate: -50% 0;
84
+ }
85
+
86
+ .ui-tooltip[data-placement='right'] .ui-tooltip-bubble {
87
+ inset-inline-start: calc(100% + var(--space-xs));
88
+ inset-block-start: 50%;
89
+ translate: 0 -50%;
90
+ }
91
+
92
+ .ui-tooltip[data-placement='left'] .ui-tooltip-bubble {
93
+ inset-inline-end: calc(100% + var(--space-xs));
94
+ inset-block-start: 50%;
95
+ translate: 0 -50%;
96
+ }
@@ -0,0 +1,49 @@
1
+ /** @codex
2
+ {
3
+ "id": "pithy.ui-kit.checkbox",
4
+ "title": "<Checkbox> Form Atom",
5
+ "category": "feature"
6
+ }
7
+ */
8
+ import { type FormControlBaseProps } from '../../../shared/types';
9
+ /** @codexApi {"parent":"pithy.ui-kit.checkbox","name":"CheckboxProps","stability":"stable","signature":"interface CheckboxProps extends FormControlBaseProps"} */
10
+ export interface CheckboxProps extends FormControlBaseProps {
11
+ /** Checkbox name attribute */
12
+ name?: string;
13
+ /** Submitted value when the checkbox is checked (default: "on") */
14
+ value?: string;
15
+ /** Checked state — static boolean or signal accessor for controlled checkbox */
16
+ checked?: boolean | (() => boolean);
17
+ /** Indeterminate state — visually shows a dash; cleared on user toggle */
18
+ indeterminate?: boolean | (() => boolean);
19
+ /** Fires whenever the checked state changes */
20
+ onChange?: (checked: boolean, e: Event) => void;
21
+ /** Fires when the checkbox loses focus */
22
+ onBlur?: (e: FocusEvent) => void;
23
+ /** Fires when the checkbox gains focus */
24
+ onFocus?: (e: FocusEvent) => void;
25
+ }
26
+ /**
27
+ * Accessible checkbox atom.
28
+ *
29
+ * Renders a `<label class="ui-checkbox">` wrapping a native `<input type="checkbox">`,
30
+ * a custom `<span class="ui-checkbox-box">` (drawn from CSS), and a visible
31
+ * `<span class="ui-checkbox-label">`. Supports indeterminate, error/success
32
+ * states (with shake), helper/error text, loading, and full a11y wiring.
33
+ *
34
+ * This is a pure visual atom — no validation logic. Error/success are driven
35
+ * externally via props.
36
+ *
37
+ * @example
38
+ * ```html
39
+ * <Checkbox label="'Accept terms'" required="true" />
40
+ * <Checkbox label="'Subscribe'" checked="isSubscribed" onChange="toggle" />
41
+ * <Checkbox label="'Select all'" indeterminate="someSelected" />
42
+ * ```
43
+ */
44
+ /** @codexApi {"parent":"pithy.ui-kit.checkbox","name":"Checkbox","stability":"stable","signature":"(props: CheckboxProps) => { el: HTMLElement | DocumentFragment; destroy: () => void }"} */
45
+ export declare function Checkbox({ id: externalId, name, value, checked, indeterminate, disabled, readonly: readonlyProp, required, error, errorMessage, helperText, success, size: rawSize, label, loading, onChange, onBlur, onFocus, }: CheckboxProps): {
46
+ el: HTMLElement | DocumentFragment;
47
+ destroy: () => void;
48
+ };
49
+ //# sourceMappingURL=Checkbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../../src/atoms/forms/checkbox/Checkbox.ts"],"names":[],"mappings":"AAAA;;;;;;EAME;AAGF,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAC;AAc/B,kKAAkK;AAClK,MAAM,WAAW,aAAc,SAAQ,oBAAoB;IACzD,8BAA8B;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,OAAO,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;IACpC,0EAA0E;IAC1E,aAAa,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;IAC1C,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,KAAK,IAAI,CAAC;IAChD,0CAA0C;IAC1C,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACjC,0CAA0C;IAC1C,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,8LAA8L;AAC9L,wBAAgB,QAAQ,CAAC,EACvB,EAAE,EAAE,UAAU,EACd,IAAI,EACJ,KAAY,EACZ,OAAe,EACf,aAAqB,EACrB,QAAgB,EAChB,QAAQ,EAAE,YAAoB,EAC9B,QAAgB,EAChB,KAAa,EACb,YAAY,EACZ,UAAU,EACV,OAAe,EACf,IAAI,EAAE,OAAc,EACpB,KAAK,EACL,OAAe,EACf,QAAQ,EACR,MAAM,EACN,OAAO,GACR,EAAE,aAAa,GAAG;IAAE,EAAE,EAAE,WAAW,GAAG,gBAAgB,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CA0R7E"}
@@ -0,0 +1,269 @@
1
+ /** @codex
2
+ {
3
+ "id": "pithy.ui-kit.checkbox",
4
+ "title": "<Checkbox> Form Atom",
5
+ "category": "feature"
6
+ }
7
+ */
8
+ import { effect } from '@pithyjs/signals';
9
+ import { CONTROL_SIZES, } from '../../../shared/types';
10
+ import { generateCheckboxId } from '../../../shared/checkbox';
11
+ import { createFormStateTracker, applyFormState, cleanupFormState, } from '../../../shared/form-state';
12
+ import { createHelperElement, createErrorElement, createStateIcon, wrapFormControl, } from '../../../shared/form-elements';
13
+ /**
14
+ * Accessible checkbox atom.
15
+ *
16
+ * Renders a `<label class="ui-checkbox">` wrapping a native `<input type="checkbox">`,
17
+ * a custom `<span class="ui-checkbox-box">` (drawn from CSS), and a visible
18
+ * `<span class="ui-checkbox-label">`. Supports indeterminate, error/success
19
+ * states (with shake), helper/error text, loading, and full a11y wiring.
20
+ *
21
+ * This is a pure visual atom — no validation logic. Error/success are driven
22
+ * externally via props.
23
+ *
24
+ * @example
25
+ * ```html
26
+ * <Checkbox label="'Accept terms'" required="true" />
27
+ * <Checkbox label="'Subscribe'" checked="isSubscribed" onChange="toggle" />
28
+ * <Checkbox label="'Select all'" indeterminate="someSelected" />
29
+ * ```
30
+ */
31
+ /** @codexApi {"parent":"pithy.ui-kit.checkbox","name":"Checkbox","stability":"stable","signature":"(props: CheckboxProps) => { el: HTMLElement | DocumentFragment; destroy: () => void }"} */
32
+ export function Checkbox({ id: externalId, name, value = 'on', checked = false, indeterminate = false, disabled = false, readonly: readonlyProp = false, required = false, error = false, errorMessage, helperText, success = false, size: rawSize = 'md', label, loading = false, onChange, onBlur, onFocus, }) {
33
+ // -- Prop validation -------------------------------------------------------
34
+ const validSize = CONTROL_SIZES.includes(rawSize);
35
+ if (import.meta.env?.DEV) {
36
+ if (!validSize) {
37
+ const valid = CONTROL_SIZES.join(', ');
38
+ console.warn(`[<Checkbox>] Invalid size: "${rawSize}". Expected one of: ${valid}. Falling back to "md".`);
39
+ }
40
+ if (!label) {
41
+ console.warn(`[<Checkbox>] Empty label — all checkboxes require an accessible name. Pass a non-empty label string.`);
42
+ }
43
+ }
44
+ const size = validSize ? rawSize : 'md';
45
+ // -- Element creation ------------------------------------------------------
46
+ const wrapper = document.createElement('label');
47
+ wrapper.classList.add('ui-checkbox');
48
+ wrapper.setAttribute('data-size', size);
49
+ const checkboxId = externalId ?? generateCheckboxId();
50
+ const input = document.createElement('input');
51
+ input.type = 'checkbox';
52
+ input.classList.add('ui-checkbox-input');
53
+ input.id = checkboxId;
54
+ if (name != null)
55
+ input.name = name;
56
+ input.value = value;
57
+ if (required) {
58
+ input.required = true;
59
+ input.setAttribute('aria-required', 'true');
60
+ wrapper.setAttribute('data-required', '');
61
+ }
62
+ // Custom box — inline SVG for crisp draw-in checkmark + indeterminate dash.
63
+ // Both paths share the same stroke-dasharray plumbing in CSS so they animate
64
+ // identically. The box itself is the painted square; the SVG is the mark.
65
+ const boxEl = document.createElement('span');
66
+ boxEl.classList.add('ui-checkbox-box');
67
+ boxEl.setAttribute('aria-hidden', 'true');
68
+ boxEl.innerHTML = `
69
+ <svg class="ui-checkbox-mark" viewBox="0 0 16 16" fill="none" focusable="false" aria-hidden="true">
70
+ <path class="ui-checkbox-mark-check" d="M3.5 8.5 L7 12 L13 4.5" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" stroke-linejoin="round" pathLength="1" />
71
+ <path class="ui-checkbox-mark-dash" d="M4 8 L12 8" stroke="currentColor" stroke-width="2.25" stroke-linecap="round" pathLength="1" />
72
+ </svg>
73
+ `.trim();
74
+ // Visible label text
75
+ const labelTextEl = document.createElement('span');
76
+ labelTextEl.classList.add('ui-checkbox-label');
77
+ labelTextEl.textContent = label;
78
+ wrapper.appendChild(input);
79
+ wrapper.appendChild(boxEl);
80
+ wrapper.appendChild(labelTextEl);
81
+ // -- State icon (detached — satisfies applyFormState's element contract) ---
82
+ // The custom box already conveys error/success colors, so the icon is never
83
+ // shown. We keep a detached element so applyFormState can mutate it without
84
+ // injecting unnecessary DOM nodes or triggering animations.
85
+ const stateIconEl = createStateIcon();
86
+ // -- Helper text -----------------------------------------------------------
87
+ const helperId = `${checkboxId}-helper`;
88
+ const helperEl = createHelperElement(helperId, helperText);
89
+ // -- Error message ---------------------------------------------------------
90
+ const errorMsgId = `${checkboxId}-error`;
91
+ const errorMsgEl = createErrorElement(errorMsgId, errorMessage);
92
+ // -- Event handlers --------------------------------------------------------
93
+ const changeHandler = ((e) => {
94
+ // Defensive: click/keydown preventDefault covers user toggles in readonly,
95
+ // but a stray programmatic toggle or label-forwarded click could still
96
+ // dispatch a change event. Roll back the value and skip side effects so
97
+ // readonly truly means readonly.
98
+ if (input.readOnly) {
99
+ const intended = !!readChecked();
100
+ if (input.checked !== intended) {
101
+ input.checked = intended;
102
+ }
103
+ if (intended) {
104
+ wrapper.setAttribute('data-checked', '');
105
+ }
106
+ else {
107
+ wrapper.removeAttribute('data-checked');
108
+ }
109
+ // Restore indeterminate too — UA clears it on any toggle, so a stray
110
+ // change event would lose the visual dash even after checked rollback.
111
+ const intendedIndet = !!readIndeterminate() && !intended;
112
+ if (input.indeterminate !== intendedIndet) {
113
+ input.indeterminate = intendedIndet;
114
+ if (intendedIndet) {
115
+ wrapper.setAttribute('data-indeterminate', '');
116
+ }
117
+ else {
118
+ wrapper.removeAttribute('data-indeterminate');
119
+ }
120
+ }
121
+ return;
122
+ }
123
+ // User interaction always clears indeterminate
124
+ if (input.indeterminate) {
125
+ input.indeterminate = false;
126
+ wrapper.removeAttribute('data-indeterminate');
127
+ }
128
+ // Keep data-checked in sync for uncontrolled usage (static checked prop)
129
+ if (input.checked) {
130
+ wrapper.setAttribute('data-checked', '');
131
+ }
132
+ else {
133
+ wrapper.removeAttribute('data-checked');
134
+ }
135
+ onChange?.(input.checked, e);
136
+ });
137
+ const blurHandler = ((e) => {
138
+ onBlur?.(e);
139
+ });
140
+ const focusHandler = ((e) => {
141
+ onFocus?.(e);
142
+ });
143
+ input.addEventListener('change', changeHandler);
144
+ input.addEventListener('blur', blurHandler);
145
+ input.addEventListener('focus', focusHandler);
146
+ // Readonly behavior — native <input type="checkbox"> ignores `readonly`,
147
+ // so we intercept and prevent toggling while allowing focus.
148
+ const clickHandler = (e) => {
149
+ if (input.readOnly) {
150
+ e.preventDefault();
151
+ }
152
+ };
153
+ input.addEventListener('click', clickHandler);
154
+ // Block keyboard toggle in readonly mode (Space). Native checkbox
155
+ // activation fires on keyup in Chromium (keydown only suppresses scroll),
156
+ // so intercept both phases — otherwise a stray toggle would slip through
157
+ // and trigger the change-event rollback path with a visible flash.
158
+ const keydownHandler = (e) => {
159
+ if (input.readOnly && e.key === ' ') {
160
+ e.preventDefault();
161
+ }
162
+ };
163
+ const keyupHandler = (e) => {
164
+ if (input.readOnly && e.key === ' ') {
165
+ e.preventDefault();
166
+ }
167
+ };
168
+ input.addEventListener('keydown', keydownHandler);
169
+ input.addEventListener('keyup', keyupHandler);
170
+ // -- Reactive state --------------------------------------------------------
171
+ const readChecked = () => typeof checked === 'function' ? checked() : checked;
172
+ const readIndeterminate = () => typeof indeterminate === 'function' ? indeterminate() : indeterminate;
173
+ const readDisabled = () => typeof disabled === 'function' ? disabled() : disabled;
174
+ const readReadonly = () => typeof readonlyProp === 'function' ? readonlyProp() : readonlyProp;
175
+ const readError = () => (typeof error === 'function' ? error() : error);
176
+ const readErrorMessage = () => typeof errorMessage === 'function' ? errorMessage() : errorMessage;
177
+ const readSuccess = () => typeof success === 'function' ? success() : success;
178
+ const readLoading = () => typeof loading === 'function' ? loading() : loading;
179
+ const isReactive = typeof checked === 'function' ||
180
+ typeof indeterminate === 'function' ||
181
+ typeof disabled === 'function' ||
182
+ typeof readonlyProp === 'function' ||
183
+ typeof error === 'function' ||
184
+ typeof errorMessage === 'function' ||
185
+ typeof success === 'function' ||
186
+ typeof loading === 'function';
187
+ const formTracker = createFormStateTracker();
188
+ const applyState = () => {
189
+ // Checked
190
+ const isChecked = !!readChecked();
191
+ if (input.checked !== isChecked) {
192
+ input.checked = isChecked;
193
+ }
194
+ if (isChecked) {
195
+ wrapper.setAttribute('data-checked', '');
196
+ }
197
+ else {
198
+ wrapper.removeAttribute('data-checked');
199
+ }
200
+ // Indeterminate (only when not checked — UA convention)
201
+ const isIndet = !!readIndeterminate() && !isChecked;
202
+ input.indeterminate = isIndet;
203
+ if (isIndet) {
204
+ wrapper.setAttribute('data-indeterminate', '');
205
+ }
206
+ else {
207
+ wrapper.removeAttribute('data-indeterminate');
208
+ }
209
+ // Disabled
210
+ const isDisabled = !!readDisabled();
211
+ input.disabled = isDisabled;
212
+ if (isDisabled) {
213
+ wrapper.setAttribute('data-disabled', '');
214
+ }
215
+ else {
216
+ wrapper.removeAttribute('data-disabled');
217
+ }
218
+ // Readonly (custom — native checkboxes ignore it)
219
+ const isReadonly = !!readReadonly();
220
+ input.readOnly = isReadonly;
221
+ if (isReadonly) {
222
+ wrapper.setAttribute('data-readonly', '');
223
+ input.setAttribute('aria-readonly', 'true');
224
+ }
225
+ else {
226
+ wrapper.removeAttribute('data-readonly');
227
+ input.removeAttribute('aria-readonly');
228
+ }
229
+ // Error / success / shake / aria-describedby — shared
230
+ applyFormState({ wrapper, control: input, stateIconEl, helperEl, errorMsgEl }, { readError, readErrorMessage, readSuccess }, { helperId, errorMsgId }, { shakeClass: 'ui-checkbox-shake', iconPrefix: 'ui-checkbox-state-icon' }, formTracker);
231
+ // Loading
232
+ const isLoading = !!readLoading();
233
+ wrapper.classList.toggle('ui-checkbox-loading', isLoading);
234
+ if (isLoading) {
235
+ input.setAttribute('aria-busy', 'true');
236
+ }
237
+ else {
238
+ input.removeAttribute('aria-busy');
239
+ }
240
+ formTracker.firstRun = false;
241
+ };
242
+ const cleanupEffect = isReactive
243
+ ? effect(applyState)
244
+ : (applyState(), undefined);
245
+ // -- Return ----------------------------------------------------------------
246
+ const { root, needsContainer } = wrapFormControl(wrapper, {
247
+ helperEl,
248
+ errorMsgEl,
249
+ containerClass: 'ui-checkbox-field',
250
+ });
251
+ return {
252
+ el: root,
253
+ destroy: () => {
254
+ cleanupEffect?.();
255
+ input.removeEventListener('change', changeHandler);
256
+ input.removeEventListener('blur', blurHandler);
257
+ input.removeEventListener('focus', focusHandler);
258
+ input.removeEventListener('click', clickHandler);
259
+ input.removeEventListener('keydown', keydownHandler);
260
+ input.removeEventListener('keyup', keyupHandler);
261
+ cleanupFormState(wrapper, stateIconEl, formTracker);
262
+ wrapper.replaceChildren();
263
+ if (needsContainer) {
264
+ root.replaceChildren();
265
+ }
266
+ },
267
+ };
268
+ }
269
+ //# sourceMappingURL=Checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox.js","sourceRoot":"","sources":["../../../../src/atoms/forms/checkbox/Checkbox.ts"],"names":[],"mappings":"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"}