@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,459 @@
1
+ /// Radio component styles — premium edition.
2
+ /// Native input is visually hidden; the .ui-radio-circle element renders the
3
+ /// outer ring and an inline SVG inner dot that scales in on checked.
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
+ // ============================================
14
+ // Wrapper <label>
15
+ // ============================================
16
+
17
+ .ui-radio {
18
+ --_cmp-color: var(--color-primary);
19
+ --_cmp-color-hover: var(--color-primary-hover);
20
+
21
+ @include a11y.touch-target-pseudo; // WCAG 2.5.5 — 44×44 invisible hit area
22
+
23
+ display: inline-flex;
24
+ align-items: center;
25
+ gap: var(--space-xs); // Lovers — circle ↔ label
26
+ cursor: pointer;
27
+ position: relative;
28
+ user-select: none;
29
+ color: var(--color-text);
30
+
31
+ @include a11y.motion-safe {
32
+ transition: var(--motion-transition-color);
33
+ }
34
+ }
35
+
36
+ // Field wrapper (when helper/error is rendered)
37
+ // No gap — child .ui-form-helper / .ui-form-error already carry
38
+ // margin-block-start: var(--space-xs), consistent with other form atoms.
39
+ .ui-radio-field {
40
+ display: inline-flex;
41
+ flex-direction: column;
42
+ }
43
+
44
+ // ============================================
45
+ // Native input — visually hidden but functional
46
+ // ============================================
47
+
48
+ .ui-radio-input {
49
+ position: absolute;
50
+ inline-size: 1px;
51
+ block-size: 1px;
52
+ padding: 0;
53
+ margin: 0;
54
+ overflow: hidden;
55
+ clip: rect(0 0 0 0);
56
+ clip-path: inset(50%);
57
+ white-space: nowrap;
58
+ border: 0;
59
+ }
60
+
61
+ // ============================================
62
+ // Custom circle
63
+ // ============================================
64
+
65
+ .ui-radio-circle {
66
+ --_cmp-shadow: 0 0 transparent;
67
+
68
+ display: inline-flex;
69
+ align-items: center;
70
+ justify-content: center;
71
+ flex-shrink: 0;
72
+ inline-size: var(--_cmp-box-size);
73
+ block-size: var(--_cmp-box-size);
74
+ background-color: var(--color-surface);
75
+ border: borders.border(control);
76
+ border-radius: 50%;
77
+ position: relative;
78
+ color: var(--_cmp-color);
79
+ box-shadow: var(--_cmp-shadow);
80
+
81
+ @include a11y.motion-safe {
82
+ transition:
83
+ var(--motion-transition-background),
84
+ var(--motion-transition-border),
85
+ var(--motion-transition-color),
86
+ box-shadow var(--motion-duration-normal) var(--motion-easing-entrance);
87
+ }
88
+ }
89
+
90
+ // ============================================
91
+ // SVG inner dot — scales in on checked
92
+ // ============================================
93
+
94
+ .ui-radio-dot {
95
+ position: absolute;
96
+ inset: 0;
97
+ inline-size: 100%;
98
+ block-size: 100%;
99
+ pointer-events: none;
100
+ overflow: visible;
101
+
102
+ circle {
103
+ transform-origin: center;
104
+ transform: scale(0);
105
+ opacity: 0;
106
+
107
+ @include a11y.motion-safe {
108
+ // Springy easing — dot overshoots slightly and settles, feels physical.
109
+ transition:
110
+ transform var(--motion-duration-slow) var(--motion-easing-springy),
111
+ opacity var(--motion-duration-normal) var(--motion-easing-entrance);
112
+ }
113
+ }
114
+ }
115
+
116
+ // ============================================
117
+ // Visible label text
118
+ // ============================================
119
+
120
+ .ui-radio-label {
121
+ font-size: var(--_cmp-font-size);
122
+ line-height: var(--leading-snug);
123
+ color: inherit;
124
+
125
+ &::selection {
126
+ background-color: color-mix(
127
+ in oklch,
128
+ var(--_cmp-color) calc(var(--state-selected-opacity) * 100%),
129
+ transparent
130
+ );
131
+ color: inherit;
132
+ }
133
+ }
134
+
135
+ // ============================================
136
+ // Sizes — set custom props per control size
137
+ // ============================================
138
+
139
+ @each $size in shared.$control-sizes {
140
+ .ui-radio[data-size='#{$size}'] {
141
+ --_cmp-box-size: #{map.get(shared.$control-indicator-sizes, $size)};
142
+ --_cmp-font-size: #{map.get(shared.$control-font-sizes, $size)};
143
+ }
144
+ }
145
+
146
+ // ============================================
147
+ // Checked state — fills inner dot, tints ring
148
+ // ============================================
149
+
150
+ .ui-radio:has(.ui-radio-input:checked) .ui-radio-circle {
151
+ border-color: var(--_cmp-color);
152
+ --_cmp-shadow: 0 var(--shadow-base-offset-y) var(--shadow-base-blur)
153
+ calc(var(--shadow-base-offset-y) * -1)
154
+ color-mix(
155
+ in oklch,
156
+ var(--_cmp-color) #{shared.$checked-glow-opacity},
157
+ transparent
158
+ );
159
+
160
+ .ui-radio-dot circle {
161
+ transform: scale(1);
162
+ opacity: 1;
163
+ }
164
+ }
165
+
166
+ @include form-anim.form-pop(
167
+ '.ui-radio:has(.ui-radio-input:checked) .ui-radio-circle'
168
+ );
169
+
170
+ // ============================================
171
+ // Hover (not disabled / not readonly)
172
+ // ============================================
173
+
174
+ .ui-radio:hover:not([data-disabled]):not([data-readonly]):not(
175
+ :has(.ui-radio-input:disabled)
176
+ )
177
+ .ui-radio-circle {
178
+ border-color: var(--_cmp-color);
179
+ }
180
+
181
+ // Ghost dot preview — when hovering an unchecked radio, show a faint hint
182
+ // of the inner dot so users know what will appear when they click.
183
+ // Visual properties live outside motion-safe so the preview is visible even
184
+ // in reduced-motion mode (the dot's transition is already gated in its
185
+ // parent rule, so in reduced-motion the ghost appears instantly).
186
+ .ui-radio:hover:not([data-disabled]):not([data-readonly]):not(
187
+ :has(.ui-radio-input:disabled)
188
+ ):not(:has(.ui-radio-input:checked))
189
+ .ui-radio-dot
190
+ circle {
191
+ transform: scale(shared.$ghost-dot-scale);
192
+ opacity: shared.$ghost-dot-opacity;
193
+ }
194
+
195
+ .ui-radio:hover:not([data-disabled]):not([data-readonly]):not(
196
+ :has(.ui-radio-input:disabled)
197
+ ):has(.ui-radio-input:checked)
198
+ .ui-radio-circle {
199
+ border-color: var(--_cmp-color-hover);
200
+ color: var(--_cmp-color-hover);
201
+ }
202
+
203
+ // ============================================
204
+ // Focus — bridge native input focus to the circle
205
+ // ============================================
206
+
207
+ .ui-radio:has(.ui-radio-input:focus-visible) .ui-radio-circle {
208
+ outline: none;
209
+ --ring-offset: #{shared.$focus-ring-offset};
210
+ box-shadow: borders.ring(), var(--_cmp-shadow);
211
+ }
212
+
213
+ // ============================================
214
+ // Active / pressed feedback
215
+ // ============================================
216
+
217
+ .ui-radio:not([data-disabled]):not([data-readonly]):not(
218
+ :has(.ui-radio-input:disabled)
219
+ ):active
220
+ .ui-radio-circle {
221
+ @include a11y.state-background(pressed, var(--_cmp-color));
222
+
223
+ @include a11y.motion-safe {
224
+ transform: scale(var(--motion-scale-big));
225
+ transition: transform var(--motion-duration-fast)
226
+ var(--motion-easing-standard);
227
+ }
228
+ }
229
+
230
+ // ============================================
231
+ // Success state
232
+ // ============================================
233
+
234
+ .ui-radio[data-success] {
235
+ --_cmp-color: var(--color-success);
236
+ --_cmp-color-hover: var(--color-success-hover, var(--color-success));
237
+ }
238
+
239
+ .ui-radio[data-success] .ui-radio-circle {
240
+ border-color: var(--_cmp-color);
241
+ }
242
+
243
+ .ui-radio[data-success]:has(.ui-radio-input:focus-visible) .ui-radio-circle {
244
+ --ring-color: var(--color-success);
245
+ box-shadow: borders.ring(), var(--_cmp-shadow);
246
+ }
247
+
248
+ // ============================================
249
+ // Error state (after success — source order wins)
250
+ // ============================================
251
+
252
+ .ui-radio[data-error] {
253
+ --_cmp-color: var(--color-danger);
254
+ --_cmp-color-hover: var(--color-danger-hover, var(--color-danger));
255
+ }
256
+
257
+ .ui-radio[data-error] .ui-radio-circle {
258
+ border-color: var(--_cmp-color);
259
+ }
260
+
261
+ .ui-radio[data-error]:has(.ui-radio-input:focus-visible) .ui-radio-circle {
262
+ --ring-color: var(--color-danger);
263
+ box-shadow: borders.ring(), var(--_cmp-shadow);
264
+ }
265
+
266
+ .ui-radio[data-error] .ui-radio-label {
267
+ color: var(--color-danger);
268
+ }
269
+
270
+ // ============================================
271
+ // Error shake animation
272
+ // ============================================
273
+
274
+ @include form-anim.form-shake('.ui-radio-shake');
275
+
276
+ // ============================================
277
+ // Disabled state
278
+ // ============================================
279
+
280
+ .ui-radio[data-disabled] {
281
+ opacity: var(--state-disabled-opacity);
282
+ filter: saturate(shared.$disabled-saturation);
283
+ cursor: not-allowed;
284
+
285
+ .ui-radio-input {
286
+ cursor: not-allowed;
287
+ }
288
+ }
289
+
290
+ // Fieldset[disabled] cascade — when a radio is disabled via a parent
291
+ // <fieldset disabled>, the native input is :disabled but the wrapper has no
292
+ // [data-disabled] attribute. Opacity is already handled by the group's
293
+ // .ui-radio-group[data-disabled] rule; we only add cursor + desaturation
294
+ // so individual radios look properly deactivated.
295
+ .ui-radio:not([data-disabled]):has(.ui-radio-input:disabled) {
296
+ filter: saturate(shared.$disabled-saturation);
297
+ cursor: not-allowed;
298
+
299
+ .ui-radio-input {
300
+ cursor: not-allowed;
301
+ }
302
+ }
303
+
304
+ // ============================================
305
+ // Readonly state — looks normal, blocks toggling
306
+ // ============================================
307
+
308
+ .ui-radio[data-readonly] {
309
+ cursor: default;
310
+
311
+ .ui-radio-input {
312
+ cursor: default;
313
+ }
314
+
315
+ // Only override the unchecked background — checked radios keep their
316
+ // --color-primary ring so the dot stays legible.
317
+ .ui-radio-input:not(:checked) + .ui-radio-circle {
318
+ background-color: var(--color-surface-variant);
319
+ }
320
+ }
321
+
322
+ // ============================================
323
+ // Required indicator on label text
324
+ // ============================================
325
+
326
+ .ui-radio[data-required] .ui-radio-label::after {
327
+ content: ' *';
328
+ color: var(--color-danger);
329
+ font-weight: var(--font-weight-medium);
330
+ }
331
+
332
+ // ============================================
333
+ // Loading spinner — overlays the circle
334
+ // ============================================
335
+
336
+ .ui-radio.ui-radio-loading .ui-radio-dot {
337
+ opacity: 0;
338
+ }
339
+
340
+ .ui-radio.ui-radio-loading:not([data-error]):not([data-success])
341
+ .ui-radio-circle {
342
+ border-color: var(--color-primary);
343
+ }
344
+
345
+ .ui-radio.ui-radio-loading .ui-radio-circle {
346
+ --_cmp-spinner-color: var(--color-primary);
347
+ }
348
+
349
+ .ui-radio[data-error].ui-radio-loading .ui-radio-circle {
350
+ --_cmp-spinner-color: var(--color-danger);
351
+ }
352
+
353
+ // Scoped with :not([data-error]) so error always wins when both flags
354
+ // are set (matches the circle border precedence contract).
355
+ .ui-radio[data-success]:not([data-error]).ui-radio-loading .ui-radio-circle {
356
+ --_cmp-spinner-color: var(--color-success);
357
+ }
358
+
359
+ .ui-radio.ui-radio-loading .ui-radio-circle::before {
360
+ content: '';
361
+ position: absolute;
362
+ inset: shared.$spinner-inset;
363
+ border: var(--border-width-medium) solid var(--_cmp-spinner-color);
364
+ border-inline-end-color: transparent;
365
+ border-radius: 50%;
366
+
367
+ @include a11y.motion-safe {
368
+ animation: var(--motion-animation-spin) var(--motion-duration-deliberate)
369
+ linear infinite;
370
+ }
371
+
372
+ @include a11y.motion-reduced {
373
+ border-inline-end-color: var(--_cmp-spinner-color);
374
+ opacity: shared.$spinner-reduced-opacity;
375
+ }
376
+ }
377
+
378
+ // State icon is kept detached (never in the DOM) — the custom circle conveys
379
+ // all state. No CSS rule needed.
380
+
381
+ // Helper + error text use shared .ui-form-helper / .ui-form-error classes.
382
+
383
+ // ============================================
384
+ // Forced colors
385
+ // ============================================
386
+
387
+ @include a11y.forced-colors {
388
+ .ui-radio-circle {
389
+ border: var(--border-width-hairline) solid ButtonText;
390
+ background: Field;
391
+ }
392
+
393
+ .ui-radio:has(.ui-radio-input:checked) .ui-radio-circle {
394
+ border-color: Highlight;
395
+ color: Highlight;
396
+ }
397
+
398
+ .ui-radio:has(.ui-radio-input:checked) .ui-radio-dot circle {
399
+ fill: Highlight;
400
+ }
401
+
402
+ .ui-radio[data-disabled] {
403
+ color: GrayText;
404
+
405
+ .ui-radio-circle {
406
+ border-color: GrayText;
407
+ }
408
+ }
409
+
410
+ // Fieldset[disabled] cascade — when disabled via a parent fieldset, the
411
+ // wrapper has no [data-disabled] but the input matches :disabled.
412
+ .ui-radio:not([data-disabled]):has(.ui-radio-input:disabled) {
413
+ color: GrayText;
414
+
415
+ .ui-radio-circle {
416
+ border-color: GrayText;
417
+ }
418
+ }
419
+
420
+ .ui-radio:has(.ui-radio-input:focus-visible) .ui-radio-circle {
421
+ @include a11y.focus-outline(Highlight);
422
+ }
423
+ }
424
+
425
+ // ============================================
426
+ // RadioGroup — fieldset wrapper
427
+ // ============================================
428
+
429
+ .ui-radio-group {
430
+ display: flex;
431
+ flex-direction: column;
432
+ gap: var(--space-sm); // Close Friends — controls in a group
433
+ border: none;
434
+ margin: 0;
435
+ padding: 0;
436
+ min-inline-size: 0;
437
+ }
438
+
439
+ .ui-radio-group-legend {
440
+ display: block;
441
+ font-size: var(--font-size-sm);
442
+ font-weight: var(--font-weight-medium);
443
+ color: var(--color-text);
444
+ margin-block-end: var(--space-xs);
445
+ padding: 0;
446
+ }
447
+
448
+ // Helper / error text reuses shared .ui-form-helper / .ui-form-error classes
449
+ // from _form-animations.scss — no group-specific overrides needed.
450
+
451
+ .ui-radio-group[data-disabled] {
452
+ opacity: var(--state-disabled-opacity);
453
+ }
454
+
455
+ @include a11y.forced-colors {
456
+ .ui-radio-group[data-error] .ui-radio-group-legend {
457
+ color: inherit;
458
+ }
459
+ }
@@ -0,0 +1,57 @@
1
+ /** @codex
2
+ {
3
+ "id": "pithy.ui-kit.select",
4
+ "title": "<Select> Form Atom",
5
+ "category": "feature"
6
+ }
7
+ */
8
+ import { type FormControlBaseProps } from '../../../shared/types';
9
+ import { type SelectOption } from '../../../shared/select';
10
+ /** @codexApi {"parent":"pithy.ui-kit.select","name":"SelectProps","stability":"stable","signature":"interface SelectProps extends FormControlBaseProps"} */
11
+ export interface SelectProps extends FormControlBaseProps {
12
+ /** Select name attribute for form submission */
13
+ name?: string;
14
+ /** Options to display in the dropdown. Option values must be non-empty strings. */
15
+ options: SelectOption[] | (() => SelectOption[]);
16
+ /** Selected value — static string or signal accessor for controlled select */
17
+ value?: string | (() => string);
18
+ /** Placeholder text shown when no option is selected */
19
+ placeholder?: string;
20
+ /** Enable search/filter input in the dropdown (default: false) */
21
+ searchable?: boolean;
22
+ /** Show clear button when a value is selected (default: false) */
23
+ clearable?: boolean;
24
+ /** Fires when the selected value changes. An empty string indicates "cleared" (no selection). */
25
+ onChange?: (value: string, option: SelectOption | undefined) => void;
26
+ /** Fires when select loses focus */
27
+ onBlur?: (e: FocusEvent) => void;
28
+ /** Fires when the trigger gains focus */
29
+ onFocus?: (e: FocusEvent) => void;
30
+ }
31
+ /**
32
+ * Accessible custom select atom with searchable dropdown, keyboard navigation,
33
+ * and polished micro-interactions.
34
+ *
35
+ * Renders a trigger button with a dropdown listbox. Supports search filtering,
36
+ * success/error states with shake animation and state icons, helper text, error
37
+ * message, clear button, and loading spinner.
38
+ *
39
+ * This is a pure visual atom — no validation logic. Error/success states are
40
+ * driven externally via props.
41
+ *
42
+ * @param props - Select configuration
43
+ * @returns `{ el, destroy }` — mounted element and cleanup function
44
+ *
45
+ * @example
46
+ * ```html
47
+ * <Select label="'Country'" options="countries" placeholder="'Select a country'" />
48
+ * <Select label="'Status'" options="statuses" searchable="true" />
49
+ * <Select label="'Priority'" options="priorities" clearable="true" />
50
+ * ```
51
+ */
52
+ /** @codexApi {"parent":"pithy.ui-kit.select","name":"Select","stability":"stable","signature":"(props: SelectProps) => { el: HTMLElement | DocumentFragment; destroy: () => void }"} */
53
+ export declare function Select({ id: externalId, name, options: optionsProp, value, placeholder, disabled, readonly: readonlyProp, required, error, errorMessage, helperText, success, size: rawSize, label, searchable, clearable, loading, onChange, onBlur, onFocus, }: SelectProps): {
54
+ el: HTMLElement | DocumentFragment;
55
+ destroy: () => void;
56
+ };
57
+ //# sourceMappingURL=Select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Select.d.ts","sourceRoot":"","sources":["../../../../src/atoms/forms/select/Select.ts"],"names":[],"mappings":"AAAA;;;;;;EAME;AAGF,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,wBAAwB,CAAC;AA6B7E,4JAA4J;AAC5J,MAAM,WAAW,WAAY,SAAQ,oBAAoB;IACvD,gDAAgD;IAChD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mFAAmF;IACnF,OAAO,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,YAAY,EAAE,CAAC,CAAC;IACjD,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IAChC,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kEAAkE;IAClE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iGAAiG;IACjG,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,SAAS,KAAK,IAAI,CAAC;IACrE,oCAAoC;IACpC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IACjC,yCAAyC;IACzC,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;CACnC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wLAAwL;AACxL,wBAAgB,MAAM,CAAC,EACrB,EAAE,EAAE,UAAU,EACd,IAAI,EACJ,OAAO,EAAE,WAAW,EACpB,KAAK,EACL,WAAW,EACX,QAAgB,EAChB,QAAQ,EAAE,YAAoB,EAC9B,QAAgB,EAChB,KAAa,EACb,YAAY,EACZ,UAAU,EACV,OAAe,EACf,IAAI,EAAE,OAAc,EACpB,KAAK,EACL,UAAkB,EAClB,SAAiB,EACjB,OAAe,EACf,QAAQ,EACR,MAAM,EACN,OAAO,GACR,EAAE,WAAW,GAAG;IAAE,EAAE,EAAE,WAAW,GAAG,gBAAgB,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CAigB3E"}