@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,561 @@
1
+ /// Toggle / switch component styles — premium edition.
2
+ /// Native input is visually hidden; the .ui-toggle-track element renders the
3
+ /// pill-shaped track in CSS, while .ui-toggle-thumb is the sliding circle knob.
4
+ ///
5
+ /// @group atoms/forms
6
+
7
+ @use 'sass:map';
8
+ @use '@pithyjs/design-system/a11y/styles/mixins' as a11y;
9
+ @use '@pithyjs/design-system/borders/styles/tokens' as borders;
10
+ @use '../../../shared/tokens' as shared;
11
+ @use '../../../shared/form-animations' as form-anim;
12
+
13
+ // -- Component-level tokens ---------------------------------------------------
14
+ $_track-inset-shadow-opacity: 12%;
15
+
16
+ // ============================================
17
+ // Wrapper <label>
18
+ // ============================================
19
+
20
+ .ui-toggle {
21
+ // Single color family per state — declared on the wrapper so both the
22
+ // track and the label inherit it. Overridden by [data-success] / [data-error].
23
+ --_cmp-color: var(--color-primary);
24
+ --_cmp-color-hover: var(--color-primary-hover);
25
+ // Track border width — keep in sync with borders.border(control).
26
+ // Exposed as a custom property so the thumb can size itself relative to
27
+ // the padding-box (content area) rather than the border-box.
28
+ --_cmp-border-width: var(--border-width-thin);
29
+
30
+ @include a11y.touch-target-pseudo; // WCAG 2.5.5 — 44×44 invisible hit area
31
+
32
+ display: inline-flex;
33
+ align-items: center;
34
+ gap: var(--space-xs); // Lovers — track ↔ label
35
+ cursor: pointer;
36
+ position: relative;
37
+ user-select: none;
38
+ color: var(--color-text);
39
+
40
+ @include a11y.motion-safe {
41
+ transition: var(--motion-transition-color);
42
+ }
43
+ }
44
+
45
+ // Field wrapper (when helper/error is rendered)
46
+ // No gap — child .ui-form-helper / .ui-form-error already carry
47
+ // margin-block-start: var(--space-xs), consistent with other form atoms.
48
+ .ui-toggle-field {
49
+ display: inline-flex;
50
+ flex-direction: column;
51
+ }
52
+
53
+ // ============================================
54
+ // Native input — visually hidden but functional
55
+ // ============================================
56
+
57
+ .ui-toggle-input {
58
+ // sr-only — keeps the input in the layout (focusable, click-forwards via
59
+ // <label>), but visually hidden so the custom track renders the state.
60
+ position: absolute;
61
+ inline-size: 1px;
62
+ block-size: 1px;
63
+ padding: 0;
64
+ margin: 0;
65
+ overflow: hidden;
66
+ clip: rect(0 0 0 0);
67
+ clip-path: inset(50%);
68
+ white-space: nowrap;
69
+ border: 0;
70
+ }
71
+
72
+ // ============================================
73
+ // Custom track (pill shape)
74
+ // ============================================
75
+
76
+ .ui-toggle-track {
77
+ --_cmp-shadow: 0 0 transparent;
78
+
79
+ box-sizing: border-box;
80
+ display: inline-flex;
81
+ align-items: center;
82
+ flex-shrink: 0;
83
+ position: relative;
84
+ inline-size: calc(var(--_cmp-track-height) * 2);
85
+ block-size: var(--_cmp-track-height);
86
+ background-color: var(--color-surface-variant);
87
+ border: borders.border(control);
88
+ // Strengthen the control border — the toggle track is a small pill
89
+ // with minimal inner content, so its border is the primary visual
90
+ // boundary. Blending with text color ensures ≥3:1 vs background
91
+ // in dark mode (global --color-border alone achieves only ~2.2:1).
92
+ border-color: color-mix(in oklch, var(--color-border) 80%, var(--color-text));
93
+ border-radius: var(--radius-pill);
94
+ box-shadow: var(--_cmp-shadow);
95
+ // No overflow:hidden — keep the thumb unclipped during interactive
96
+ // size/position transitions (for example pressed/stretch states), so the
97
+ // circle does not read as flattened or barrel-shaped at the track edge.
98
+
99
+ // Inset shadow on off-state — creates a recessed channel feel so the
100
+ // filled "on" state pops by contrast. Layered under the colored shadow.
101
+ &::after {
102
+ content: '';
103
+ position: absolute;
104
+ inset: 0;
105
+ border-radius: inherit;
106
+ box-shadow: inset 0 var(--border-width-hairline) var(--border-width-thin)
107
+ color-mix(
108
+ in oklch,
109
+ var(--color-on-surface) $_track-inset-shadow-opacity,
110
+ transparent
111
+ );
112
+ pointer-events: none;
113
+ }
114
+
115
+ @include a11y.motion-safe {
116
+ transition:
117
+ var(--motion-transition-background),
118
+ var(--motion-transition-border),
119
+ box-shadow var(--motion-duration-normal) var(--motion-easing-entrance);
120
+ }
121
+ }
122
+
123
+ // ============================================
124
+ // Thumb (sliding circle)
125
+ // ============================================
126
+
127
+ .ui-toggle-thumb {
128
+ position: absolute;
129
+ // Gap between the thumb circle and the track's content edge.
130
+ // Equal on all sides so the thumb sits concentrically in the pill's end
131
+ // semicircle — no asymmetric "floating" effect.
132
+ --_thumb-gap: var(--border-width-hairline);
133
+ // Thumb size derived from the PADDING-BOX height (not border-box).
134
+ // padding-height = track-height - 2*border, then subtract 2*gap.
135
+ --_thumb-size: calc(
136
+ var(--_cmp-track-height) - var(--_cmp-border-width) *
137
+ 2 - var(--_thumb-gap) * 2
138
+ );
139
+ // Thumb shape primitives — circle at rest, rounded-rect when stretched
140
+ // during the active-press animation. Component-scoped so the global
141
+ // border-radius allowlist stays limited to true primitives (0 / 50%).
142
+ --_thumb-radius: 50%;
143
+ --_thumb-radius-stretched: 40%;
144
+ inline-size: var(--_thumb-size);
145
+ block-size: var(--_thumb-size);
146
+ border-radius: var(--_thumb-radius);
147
+ background-color: var(--color-on-primary);
148
+ // Vertical: bulletproof centering via auto margins (not flex static position).
149
+ inset-block: 0;
150
+ margin-block: auto;
151
+ // Horizontal: equal gap from content edge = concentric in pill semicircle.
152
+ inset-inline-start: var(--_thumb-gap);
153
+ box-shadow: var(--shadow-sm);
154
+ // Off-state edge definition — hairline border ensures the thumb is
155
+ // distinguishable from the light track for WCAG 1.4.11 (non-text contrast).
156
+ // Disappears on checked — the colored track provides sufficient contrast.
157
+ box-sizing: border-box;
158
+ border: var(--border-width-hairline) solid
159
+ color-mix(in oklch, var(--color-on-surface) 55%, transparent);
160
+
161
+ @include a11y.motion-safe {
162
+ // Springy easing — thumb overshoots slightly and settles, feels physical.
163
+ transition:
164
+ inset-inline-start var(--motion-duration-slow)
165
+ var(--motion-easing-springy),
166
+ inline-size var(--motion-duration-normal) var(--motion-easing-entrance),
167
+ block-size var(--motion-duration-normal) var(--motion-easing-entrance),
168
+ border-radius var(--motion-duration-normal) var(--motion-easing-entrance),
169
+ box-shadow var(--motion-duration-normal) var(--motion-easing-entrance),
170
+ var(--motion-transition-border),
171
+ var(--motion-transition-background);
172
+ }
173
+ }
174
+
175
+ // ============================================
176
+ // Visible label text
177
+ // ============================================
178
+
179
+ .ui-toggle-label {
180
+ font-size: var(--_cmp-font-size);
181
+ line-height: var(--leading-snug);
182
+ color: inherit;
183
+
184
+ // Branded selection — matches the active state color.
185
+ &::selection {
186
+ background-color: color-mix(
187
+ in oklch,
188
+ var(--_cmp-color) calc(var(--state-selected-opacity) * 100%),
189
+ transparent
190
+ );
191
+ color: inherit;
192
+ }
193
+ }
194
+
195
+ // ============================================
196
+ // Sizes — set custom props per control size
197
+ // ============================================
198
+
199
+ @each $size in shared.$control-sizes {
200
+ .ui-toggle[data-size='#{$size}'] {
201
+ --_cmp-track-height: #{map.get(shared.$control-indicator-sizes, $size)};
202
+ --_cmp-font-size: #{map.get(shared.$control-font-sizes, $size)};
203
+ }
204
+ }
205
+
206
+ // ============================================
207
+ // Checked state
208
+ // ============================================
209
+
210
+ .ui-toggle:has(.ui-toggle-input:checked) .ui-toggle-track {
211
+ background-color: var(--_cmp-color);
212
+ border-color: var(--_cmp-color);
213
+ --_cmp-shadow: 0 var(--shadow-base-offset-y) var(--shadow-base-blur)
214
+ calc(var(--shadow-base-offset-y) * -1)
215
+ color-mix(
216
+ in oklch,
217
+ var(--_cmp-color) #{shared.$checked-glow-opacity},
218
+ transparent
219
+ );
220
+
221
+ // Kill the recessed inset shadow — the filled track doesn't need it.
222
+ &::after {
223
+ box-shadow: none;
224
+ }
225
+ }
226
+
227
+ // Slide thumb to the end when checked.
228
+ // Uses 100% (= actual rendered padding-box width) so the end gap exactly
229
+ // mirrors the start gap, immune to DPI subpixel rounding of border-box tokens.
230
+ .ui-toggle:has(.ui-toggle-input:checked) .ui-toggle-thumb {
231
+ inset-inline-start: calc(100% - var(--_thumb-size) - var(--_thumb-gap));
232
+ // Thumb lifts when checked — knob "rises" onto the active surface.
233
+ box-shadow: var(--shadow-md);
234
+ // Colored track provides ample contrast — border is no longer needed.
235
+ border-color: transparent;
236
+ }
237
+
238
+ // Pop animation on toggle
239
+ @include form-anim.form-pop(
240
+ '.ui-toggle:has(.ui-toggle-input:checked) .ui-toggle-track'
241
+ );
242
+
243
+ // ============================================
244
+ // Hover (not disabled / not readonly)
245
+ // ============================================
246
+
247
+ .ui-toggle:hover:not([data-disabled]):not([data-readonly]):not(
248
+ :has(.ui-toggle-input:disabled)
249
+ )
250
+ .ui-toggle-track {
251
+ border-color: var(--_cmp-color);
252
+ }
253
+
254
+ .ui-toggle:hover:not([data-disabled]):not([data-readonly]):not(
255
+ :has(.ui-toggle-input:disabled)
256
+ ):has(.ui-toggle-input:checked)
257
+ .ui-toggle-track {
258
+ background-color: var(--_cmp-color-hover);
259
+ border-color: var(--_cmp-color-hover);
260
+ }
261
+
262
+ // Hover: thumb grows to fill the full content area (padding-box height).
263
+ // This is non-color feedback for WCAG (visible size change, not just shadow).
264
+ // No overflow — the hover size exactly matches the padding-box height.
265
+ .ui-toggle:hover:not([data-disabled]):not([data-readonly]):not(
266
+ :has(.ui-toggle-input:disabled)
267
+ )
268
+ .ui-toggle-thumb {
269
+ --_thumb-hover-size: calc(
270
+ var(--_cmp-track-height) - var(--_cmp-border-width) * 2
271
+ );
272
+ inline-size: var(--_thumb-hover-size);
273
+ block-size: var(--_thumb-hover-size);
274
+ inset-inline-start: 0; // flush with content start edge
275
+ box-shadow: var(--shadow-md);
276
+ }
277
+
278
+ // Hover + checked: flush with content end edge.
279
+ // Uses 100% to mirror the unchecked hover (inset-inline-start: 0).
280
+ .ui-toggle:hover:not([data-disabled]):not([data-readonly]):not(
281
+ :has(.ui-toggle-input:disabled)
282
+ ):has(.ui-toggle-input:checked)
283
+ .ui-toggle-thumb {
284
+ inset-inline-start: calc(100% - var(--_thumb-hover-size));
285
+ }
286
+
287
+ // ============================================
288
+ // Focus — bridge native input focus to the track
289
+ // ============================================
290
+
291
+ .ui-toggle:has(.ui-toggle-input:focus-visible) .ui-toggle-track {
292
+ outline: none;
293
+ --ring-offset: #{shared.$focus-ring-offset};
294
+ box-shadow: borders.ring(), var(--_cmp-shadow);
295
+ }
296
+
297
+ // ============================================
298
+ // Active / pressed feedback (iOS-style thumb stretch)
299
+ // ============================================
300
+
301
+ .ui-toggle:not([data-disabled]):not([data-readonly]):not(
302
+ :has(.ui-toggle-input:disabled)
303
+ ):active
304
+ .ui-toggle-track {
305
+ @include a11y.state-background(pressed, var(--_cmp-color));
306
+ }
307
+
308
+ // iOS signature: thumb stretches ~30% wider on press, creating an elongated
309
+ // pill shape that hints at the direction of travel. The border-radius shift
310
+ // from 50% to 40% keeps it rounded-rect instead of an ellipse.
311
+ //
312
+ // Unchecked+active: thumb stretches RIGHT (toward checked position) — default
313
+ // anchor is inset-inline-start so the width growth extends rightward.
314
+ .ui-toggle:not([data-disabled]):not([data-readonly]):not(
315
+ :has(.ui-toggle-input:disabled)
316
+ ):active
317
+ .ui-toggle-thumb {
318
+ @include a11y.motion-safe {
319
+ inline-size: calc(var(--_thumb-size) * 1.3);
320
+ border-radius: var(--_thumb-radius-stretched);
321
+ transition:
322
+ inset-inline-start var(--motion-duration-slow)
323
+ var(--motion-easing-springy),
324
+ inline-size var(--motion-duration-fast) var(--motion-easing-standard),
325
+ border-radius var(--motion-duration-fast) var(--motion-easing-standard);
326
+ }
327
+ }
328
+
329
+ // Checked+active: thumb stretches LEFT (toward unchecked position).
330
+ // Shift inset-inline-start to account for the wider thumb so the extra 30%
331
+ // grows toward the start edge (direction of travel when unchecking).
332
+ // Stretch width = thumb × 1.3. End gap = --_thumb-gap (mirrors unchecked start gap).
333
+ // Uses 100% so the stretched thumb aligns flush with the rendered content end edge.
334
+ .ui-toggle:has(.ui-toggle-input:checked):not([data-disabled]):not(
335
+ [data-readonly]
336
+ ):not(:has(.ui-toggle-input:disabled)):active
337
+ .ui-toggle-thumb {
338
+ @include a11y.motion-safe {
339
+ inset-inline-start: calc(
340
+ 100% - var(--_thumb-size) * 1.3 - var(--_thumb-gap)
341
+ );
342
+ }
343
+ }
344
+
345
+ // ============================================
346
+ // Success state
347
+ // ============================================
348
+
349
+ .ui-toggle[data-success] {
350
+ --_cmp-color: var(--color-success);
351
+ --_cmp-color-hover: var(--color-success-hover, var(--color-success));
352
+ }
353
+
354
+ .ui-toggle[data-success] .ui-toggle-track {
355
+ border-color: var(--_cmp-color);
356
+ }
357
+
358
+ .ui-toggle[data-success]:has(.ui-toggle-input:focus-visible) .ui-toggle-track {
359
+ --ring-color: var(--color-success);
360
+ box-shadow: borders.ring(), var(--_cmp-shadow);
361
+ }
362
+
363
+ // ============================================
364
+ // Error state (after success — source order wins)
365
+ // ============================================
366
+
367
+ .ui-toggle[data-error] {
368
+ --_cmp-color: var(--color-danger);
369
+ --_cmp-color-hover: var(--color-danger-hover, var(--color-danger));
370
+ }
371
+
372
+ .ui-toggle[data-error] .ui-toggle-track {
373
+ border-color: var(--_cmp-color);
374
+ }
375
+
376
+ .ui-toggle[data-error]:has(.ui-toggle-input:focus-visible) .ui-toggle-track {
377
+ --ring-color: var(--color-danger);
378
+ box-shadow: borders.ring(), var(--_cmp-shadow);
379
+ }
380
+
381
+ .ui-toggle[data-error] .ui-toggle-label {
382
+ color: var(--color-danger);
383
+ }
384
+
385
+ // ============================================
386
+ // Error shake animation
387
+ // ============================================
388
+
389
+ @include form-anim.form-shake('.ui-toggle-shake');
390
+
391
+ // ============================================
392
+ // Disabled state
393
+ // ============================================
394
+
395
+ .ui-toggle[data-disabled] {
396
+ opacity: var(--state-disabled-opacity);
397
+ filter: saturate(shared.$disabled-saturation);
398
+ cursor: not-allowed;
399
+
400
+ .ui-toggle-input {
401
+ cursor: not-allowed;
402
+ }
403
+ }
404
+
405
+ // Fieldset[disabled] cascade — when a toggle is disabled via a parent
406
+ // <fieldset disabled>, the native input is :disabled but the wrapper has no
407
+ // [data-disabled] attribute. Match the direct disabled visuals so individual
408
+ // toggles look consistently deactivated across both disable paths.
409
+ .ui-toggle:not([data-disabled]):has(.ui-toggle-input:disabled) {
410
+ opacity: var(--state-disabled-opacity);
411
+ filter: saturate(shared.$disabled-saturation);
412
+ cursor: not-allowed;
413
+
414
+ .ui-toggle-input {
415
+ cursor: not-allowed;
416
+ }
417
+ }
418
+
419
+ // ============================================
420
+ // Readonly state — looks normal, blocks toggling
421
+ // ============================================
422
+
423
+ .ui-toggle[data-readonly] {
424
+ cursor: default;
425
+
426
+ .ui-toggle-input {
427
+ cursor: default;
428
+ }
429
+
430
+ // Unchecked track gets a slightly different surface to hint it's locked.
431
+ .ui-toggle-input:not(:checked) + .ui-toggle-track {
432
+ background-color: var(--color-surface-variant);
433
+ }
434
+ }
435
+
436
+ // ============================================
437
+ // Required indicator on label text
438
+ // ============================================
439
+
440
+ .ui-toggle[data-required] .ui-toggle-label::after {
441
+ content: ' *';
442
+ color: var(--color-danger);
443
+ font-weight: var(--font-weight-medium);
444
+ }
445
+
446
+ // ============================================
447
+ // Loading spinner — overlays the track
448
+ // ============================================
449
+
450
+ // Hide the thumb while loading — the spinner is the only signal.
451
+ .ui-toggle.ui-toggle-loading .ui-toggle-thumb {
452
+ opacity: 0;
453
+ }
454
+
455
+ // Kill the inset shadow so it doesn't interfere with the spinner.
456
+ .ui-toggle.ui-toggle-loading .ui-toggle-track::after {
457
+ box-shadow: none;
458
+ }
459
+
460
+ // Subtle border tint when not in error/success state.
461
+ .ui-toggle.ui-toggle-loading:not([data-error]):not([data-success])
462
+ .ui-toggle-track {
463
+ border-color: var(--color-primary);
464
+ }
465
+
466
+ // Spinner color: primary on empty surface, on-primary when filled (checked).
467
+ .ui-toggle.ui-toggle-loading .ui-toggle-track {
468
+ --_cmp-spinner-color: var(--color-primary);
469
+ }
470
+
471
+ .ui-toggle.ui-toggle-loading:has(.ui-toggle-input:checked) .ui-toggle-track {
472
+ --_cmp-spinner-color: var(--color-on-primary);
473
+ }
474
+
475
+ .ui-toggle[data-error].ui-toggle-loading .ui-toggle-track {
476
+ --_cmp-spinner-color: var(--color-danger);
477
+ }
478
+
479
+ .ui-toggle[data-success]:not([data-error]).ui-toggle-loading .ui-toggle-track {
480
+ --_cmp-spinner-color: var(--color-success);
481
+ }
482
+
483
+ // Spinner is a circle sized to the track height, centered in the track.
484
+ // We can't use `inset: 15%` because the track is a wide pill — that would
485
+ // create an oval. We can't use `transform: translate` for centering because
486
+ // it conflicts with the spin animation's transform. Use margin auto instead.
487
+ .ui-toggle.ui-toggle-loading .ui-toggle-track::before {
488
+ --_spinner-size: calc(var(--_cmp-track-height) * 0.5);
489
+ content: '';
490
+ position: absolute;
491
+ inset: 0;
492
+ // Explicit square dimensions + margin auto = centered circle in the pill
493
+ inline-size: var(--_spinner-size);
494
+ block-size: var(--_spinner-size);
495
+ margin: auto;
496
+ border: var(--border-width-medium) solid var(--_cmp-spinner-color);
497
+ border-inline-end-color: transparent;
498
+ border-radius: 50%;
499
+
500
+ @include a11y.motion-safe {
501
+ animation: var(--motion-animation-spin) var(--motion-duration-deliberate)
502
+ linear infinite;
503
+ }
504
+
505
+ @include a11y.motion-reduced {
506
+ border-inline-end-color: var(--_cmp-spinner-color);
507
+ opacity: shared.$spinner-reduced-opacity;
508
+ }
509
+ }
510
+
511
+ // Helper + error text use shared .ui-form-helper / .ui-form-error classes
512
+ // from src/shared/_form-animations.scss — no per-component styles needed.
513
+
514
+ // ============================================
515
+ // Forced colors
516
+ // ============================================
517
+
518
+ @include a11y.forced-colors {
519
+ .ui-toggle-track {
520
+ border: var(--border-width-hairline) solid ButtonText;
521
+ background: Field;
522
+
523
+ // Suppress inset shadow — forced-colors surfaces must be flat.
524
+ &::after {
525
+ box-shadow: none;
526
+ }
527
+ }
528
+
529
+ .ui-toggle-thumb {
530
+ background: ButtonText;
531
+ border-color: ButtonText;
532
+ box-shadow: none;
533
+ }
534
+
535
+ .ui-toggle:has(.ui-toggle-input:checked) .ui-toggle-track {
536
+ background: Highlight;
537
+ border-color: Highlight;
538
+ }
539
+
540
+ .ui-toggle:has(.ui-toggle-input:checked) .ui-toggle-thumb {
541
+ background: HighlightText;
542
+ border-color: HighlightText;
543
+ }
544
+
545
+ .ui-toggle[data-disabled],
546
+ .ui-toggle:not([data-disabled]):has(.ui-toggle-input:disabled) {
547
+ color: GrayText;
548
+
549
+ .ui-toggle-track {
550
+ border-color: GrayText;
551
+ }
552
+
553
+ .ui-toggle-thumb {
554
+ background: GrayText;
555
+ }
556
+ }
557
+
558
+ .ui-toggle:has(.ui-toggle-input:focus-visible) .ui-toggle-track {
559
+ @include a11y.focus-outline(Highlight);
560
+ }
561
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Compiler-time metadata for @pithyjs/ui-kit components.
3
+ * Pass to htmlTransformPlugin({ componentScopes }) in vite.config.ts.
4
+ */
5
+ import type { ComponentScopeConfig } from '@pithyjs/vite-plugin';
6
+ export declare const componentScopes: Record<string, ComponentScopeConfig>;
7
+ //# sourceMappingURL=compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.d.ts","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAgBhE,CAAC"}
@@ -0,0 +1,18 @@
1
+ export const componentScopes = {
2
+ For: {
3
+ vars: ['item', 'index', 'count', 'first', 'last', 'even', 'odd'],
4
+ aliases: {
5
+ as: 'item',
6
+ indexAs: 'index',
7
+ countAs: 'count',
8
+ firstAs: 'first',
9
+ lastAs: 'last',
10
+ evenAs: 'even',
11
+ oddAs: 'odd',
12
+ },
13
+ },
14
+ ErrorBoundary: {
15
+ vars: ['error'],
16
+ },
17
+ };
18
+ //# sourceMappingURL=compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compiler.js","sourceRoot":"","sources":["../src/compiler.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,MAAM,eAAe,GAAyC;IACnE,GAAG,EAAE;QACH,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;QAChE,OAAO,EAAE;YACP,EAAE,EAAE,MAAM;YACV,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,MAAM;YACd,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,KAAK;SACb;KACF;IACD,aAAa,EAAE;QACb,IAAI,EAAE,CAAC,OAAO,CAAC;KAChB;CACF,CAAC"}
@@ -0,0 +1,14 @@
1
+ /** @codex
2
+ {
3
+ "id": "pithy.ui-kit.icons",
4
+ "title": "Icon Sprite Registry Module",
5
+ "category": "runtime"
6
+ }
7
+ */
8
+ /**
9
+ * Icon sprite registry — tree-shakeable opt-in module.
10
+ *
11
+ * @module @pithyjs/ui-kit/icons
12
+ */
13
+ export { registerIconSprite, lookupIcon, getRegisteredIcons, getIconMeta, hasIconSprite, getSpriteUrl, clearIconRegistry, type IconMeta, } from './registry';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/icons/index.ts"],"names":[],"mappings":"AAAA;;;;;;EAME;AAEF;;;;GAIG;AACH,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,KAAK,QAAQ,GACd,MAAM,YAAY,CAAC"}
@@ -0,0 +1,14 @@
1
+ /** @codex
2
+ {
3
+ "id": "pithy.ui-kit.icons",
4
+ "title": "Icon Sprite Registry Module",
5
+ "category": "runtime"
6
+ }
7
+ */
8
+ /**
9
+ * Icon sprite registry — tree-shakeable opt-in module.
10
+ *
11
+ * @module @pithyjs/ui-kit/icons
12
+ */
13
+ export { registerIconSprite, lookupIcon, getRegisteredIcons, getIconMeta, hasIconSprite, getSpriteUrl, clearIconRegistry, } from './registry';
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/icons/index.ts"],"names":[],"mappings":"AAAA;;;;;;EAME;AAEF;;;;GAIG;AACH,OAAO,EACL,kBAAkB,EAClB,UAAU,EACV,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,YAAY,EACZ,iBAAiB,GAElB,MAAM,YAAY,CAAC"}