@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,194 @@
1
+ /** @codex
2
+ {
3
+ "id": "pithy.ui-kit.smart-container",
4
+ "title": "<SmartContainer> Layout Component",
5
+ "category": "feature"
6
+ }
7
+ */
8
+ import { renderChildren } from '@pithyjs/core';
9
+ import { captureSlot } from '../shared/slots';
10
+ import { GAP_CLASS, ALIGN_CLASS, JUSTIFY_CLASS, CSS_LENGTH_PATTERN, } from '../shared/common';
11
+ import { GRID_COLS_CLASS, RESPONSIVE_GRID_COLS } from '../shared/grid';
12
+ import { RECIPE_ITEMS, DENSITY_ITEMS, DENSITY_RATIO, } from '../shared/smart-container';
13
+ import { applyElementDensity } from '@pithyjs/design-system';
14
+ function clampLanes(n) {
15
+ if (!Number.isFinite(n))
16
+ return 3;
17
+ return Math.max(2, Math.min(6, Math.round(n)));
18
+ }
19
+ /**
20
+ * Build classes for the equal-cards recipe based on lanes count.
21
+ * Maps lane count to responsive grid column breakpoint classes.
22
+ */
23
+ function buildLaneClasses(lanes) {
24
+ const classes = [GRID_COLS_CLASS[1]]; // base: 1 column
25
+ if (lanes >= 2)
26
+ classes.push(RESPONSIVE_GRID_COLS.sm[2]);
27
+ if (lanes >= 3)
28
+ classes.push(RESPONSIVE_GRID_COLS.md[3]);
29
+ // For lanes=6 use lg:5 to avoid a 4→6 jump at xl
30
+ if (lanes >= 4 && lanes <= 5)
31
+ classes.push(RESPONSIVE_GRID_COLS.lg[4]);
32
+ if (lanes === 6)
33
+ classes.push(RESPONSIVE_GRID_COLS.lg[5]);
34
+ if (lanes >= 5)
35
+ classes.push(RESPONSIVE_GRID_COLS.xl[Math.min(lanes, 6)]);
36
+ return classes;
37
+ }
38
+ /**
39
+ * Higher-level layout component providing 5 opinionated responsive
40
+ * layout recipes that adapt to container width via CSS container queries.
41
+ *
42
+ * Unlike Grid/Stack (low-level primitives), SmartContainer provides
43
+ * common layout patterns that "just work" responsively.
44
+ *
45
+ * @example
46
+ * ```html
47
+ * <!-- Auto-grid: items flow into columns based on minimum width -->
48
+ * <SmartContainer recipe="'auto-grid'" minItem="'14rem'" gap="'lg'">
49
+ * <div>Card 1</div>
50
+ * <div>Card 2</div>
51
+ * <div>Card 3</div>
52
+ * </SmartContainer>
53
+ *
54
+ * <!-- Stack-to-row: vertical on mobile, horizontal on wider containers -->
55
+ * <SmartContainer recipe="'stack-to-row'">
56
+ * <div>Left</div>
57
+ * <div>Right</div>
58
+ * </SmartContainer>
59
+ *
60
+ * <!-- Equal cards: responsive grid capped at N columns -->
61
+ * <SmartContainer recipe="'equal-cards'" lanes="4">
62
+ * <div>Card 1</div>
63
+ * <div>Card 2</div>
64
+ * <div>Card 3</div>
65
+ * <div>Card 4</div>
66
+ * </SmartContainer>
67
+ * ```
68
+ */
69
+ /** @codexApi {"parent":"pithy.ui-kit.smart-container","name":"SmartContainer","stability":"stable","signature":"(props?: SmartContainerProps) => { el: HTMLElement | DocumentFragment; destroy: () => void }"} */
70
+ export function SmartContainer({ recipe: rawRecipe = 'auto-grid', minItem = undefined, gap: rawGap = 'md', density: rawDensity = 'normal', align: rawAlign = undefined, justify: rawJustify = undefined, lanes: rawLanes = 3, as = 'div', } = {}) {
71
+ // Validate and fall back unconditionally (not just DEV) to prevent undefined class names in production
72
+ const hasOwn = Object.prototype.hasOwnProperty;
73
+ const validRecipe = RECIPE_ITEMS.includes(rawRecipe);
74
+ const validGap = hasOwn.call(GAP_CLASS, rawGap);
75
+ const validDensity = DENSITY_ITEMS.includes(rawDensity);
76
+ const validAlign = rawAlign == null || hasOwn.call(ALIGN_CLASS, rawAlign);
77
+ const validJustify = rawJustify == null || hasOwn.call(JUSTIFY_CLASS, rawJustify);
78
+ if (import.meta.env?.DEV) {
79
+ if (!validRecipe) {
80
+ const valid = RECIPE_ITEMS.join(', ');
81
+ console.warn(`[<SmartContainer>] Invalid recipe value: "${rawRecipe}". Expected one of: ${valid}. Falling back to "auto-grid".`);
82
+ }
83
+ if (!validGap) {
84
+ const valid = Object.keys(GAP_CLASS).join(', ');
85
+ console.warn(`[<SmartContainer>] Invalid gap value: "${rawGap}". Expected one of: ${valid}. Falling back to "md".`);
86
+ }
87
+ if (!validDensity) {
88
+ const valid = DENSITY_ITEMS.join(', ');
89
+ console.warn(`[<SmartContainer>] Invalid density value: "${rawDensity}". Expected one of: ${valid}. Falling back to "normal".`);
90
+ }
91
+ if (!validAlign) {
92
+ const valid = Object.keys(ALIGN_CLASS).join(', ');
93
+ console.warn(`[<SmartContainer>] Invalid align value: "${rawAlign}". Expected one of: ${valid}. Ignoring.`);
94
+ }
95
+ if (!validJustify) {
96
+ const valid = Object.keys(JUSTIFY_CLASS).join(', ');
97
+ console.warn(`[<SmartContainer>] Invalid justify value: "${rawJustify}". Expected one of: ${valid}. Ignoring.`);
98
+ }
99
+ if (rawRecipe !== 'equal-cards' && rawLanes !== 3) {
100
+ console.warn(`[<SmartContainer>] lanes prop is only used with the "equal-cards" recipe. Ignoring.`);
101
+ }
102
+ if (rawRecipe !== 'auto-grid' && minItem != null) {
103
+ console.warn(`[<SmartContainer>] minItem prop is only used with the "auto-grid" recipe. Ignoring.`);
104
+ }
105
+ if ((rawRecipe === 'auto-grid' || !validRecipe) &&
106
+ minItem != null &&
107
+ !CSS_LENGTH_PATTERN.test(minItem)) {
108
+ console.warn(`[<SmartContainer>] Suspicious minItem value: "${minItem}". Expected a CSS length (e.g. "250px", "14rem"). Note: fr units are not valid inside minmax().`);
109
+ }
110
+ }
111
+ const recipe = validRecipe ? rawRecipe : 'auto-grid';
112
+ const gap = validGap ? rawGap : 'md';
113
+ const density = validDensity ? rawDensity : 'normal';
114
+ const align = validAlign ? rawAlign : undefined;
115
+ const justify = validJustify ? rawJustify : undefined;
116
+ const lanes = clampLanes(rawLanes);
117
+ // Common classes for all recipes
118
+ const gapClass = GAP_CLASS[gap];
119
+ const alignClass = align ? ALIGN_CLASS[align] : '';
120
+ const justifyClass = justify ? JUSTIFY_CLASS[justify] : '';
121
+ // Build recipe-specific inner classes
122
+ let innerClasses;
123
+ switch (recipe) {
124
+ case 'auto-grid':
125
+ innerClasses = [
126
+ 'u-grid',
127
+ 'u-grid-auto-fit',
128
+ gapClass,
129
+ alignClass,
130
+ justifyClass,
131
+ ];
132
+ break;
133
+ case 'stack-to-row':
134
+ innerClasses = ['u-sc-stack-to-row', gapClass, alignClass, justifyClass];
135
+ break;
136
+ case 'row-wrap':
137
+ innerClasses = [
138
+ 'u-flex',
139
+ 'u-flex-wrap',
140
+ gapClass,
141
+ alignClass,
142
+ justifyClass,
143
+ ];
144
+ break;
145
+ case 'sidebar':
146
+ innerClasses = ['u-sc-sidebar', gapClass, alignClass, justifyClass];
147
+ break;
148
+ case 'equal-cards':
149
+ innerClasses = [
150
+ 'u-grid',
151
+ ...buildLaneClasses(lanes),
152
+ ...(align ? [] : ['u-items-stretch']),
153
+ gapClass,
154
+ alignClass,
155
+ justifyClass,
156
+ ];
157
+ break;
158
+ }
159
+ // Add child control class for grid-based recipes
160
+ if (recipe === 'auto-grid' ||
161
+ recipe === 'sidebar' ||
162
+ recipe === 'equal-cards') {
163
+ innerClasses.push('u-sc-child-span');
164
+ }
165
+ // Add collapse control class for all recipes
166
+ innerClasses.push('u-sc-child-collapse');
167
+ // Filter empty strings
168
+ innerClasses = innerClasses.filter(Boolean);
169
+ // Compile children through full pipeline
170
+ const { el: childFragment, destroy } = renderChildren();
171
+ // Double-nesting: outer = container-type, inner = recipe layout
172
+ const outer = document.createElement(as);
173
+ outer.classList.add('u-container-inline');
174
+ const inner = document.createElement('div');
175
+ for (const cls of innerClasses)
176
+ inner.classList.add(cls);
177
+ // Set CSS variables
178
+ if (recipe === 'auto-grid' && minItem) {
179
+ inner.style.setProperty('--grid-auto-min', minItem);
180
+ }
181
+ applyElementDensity(outer, DENSITY_RATIO[density]);
182
+ captureSlot(inner, 'default');
183
+ inner.appendChild(childFragment);
184
+ outer.appendChild(inner);
185
+ return {
186
+ el: outer,
187
+ destroy: () => {
188
+ destroy();
189
+ inner.replaceChildren();
190
+ outer.replaceChildren();
191
+ },
192
+ };
193
+ }
194
+ //# sourceMappingURL=SmartContainer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SmartContainer.js","sourceRoot":"","sources":["../../src/layout/SmartContainer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /** @codex
2
+ {
3
+ "id": "pithy.ui-kit.stack",
4
+ "title": "<Stack> Layout Component",
5
+ "category": "feature"
6
+ }
7
+ */
8
+ import { type AlignItems } from '../shared/common';
9
+ import { type Orientation } from '../shared/types';
10
+ import type { SpacingSize } from '@pithyjs/design-system';
11
+ /** @codexApi {"parent":"pithy.ui-kit.stack","name":"StackProps","stability":"stable","signature":"interface StackProps"} */
12
+ export interface StackProps {
13
+ /** Stack direction (default: "vertical") */
14
+ direction?: Orientation;
15
+ /** Gap between children — maps to u-gap-* utilities (default: "md") */
16
+ gap?: SpacingSize;
17
+ /** Cross-axis alignment — maps to u-items-* utilities (default: "stretch") */
18
+ align?: AlignItems;
19
+ /** Whether children wrap to next line (default: false) */
20
+ wrap?: boolean;
21
+ /** Reverse the stacking order (default: false) */
22
+ reverse?: boolean;
23
+ /**
24
+ * Minimum child width before wrapping (CSS length, e.g. "200px", "15rem").
25
+ * When set on a horizontal stack, enables fluid responsive behavior:
26
+ * children will wrap to a new row when they can't maintain this minimum
27
+ * width. Automatically enables `wrap`. (default: undefined — no fluid behavior)
28
+ */
29
+ minChildWidth?: string;
30
+ /** HTML tag to render (default: "div") */
31
+ as?: keyof HTMLElementTagNameMap;
32
+ }
33
+ /**
34
+ * Layout atom that arranges children in a vertical or horizontal stack.
35
+ *
36
+ * Maps props to design-system utility classes (u-vstack, u-hstack,
37
+ * u-gap-*, u-items-*, u-flex-wrap, u-flex-col-reverse, u-flex-row-reverse).
38
+ * No custom CSS required.
39
+ *
40
+ * For fluid responsive horizontal layouts, set `minChildWidth` — children
41
+ * will wrap to a new row when they can't maintain the minimum width.
42
+ * This uses pure CSS flex-wrap, no breakpoints or container queries.
43
+ *
44
+ * @example
45
+ * ```html
46
+ * <!-- Simple stack -->
47
+ * <Stack direction="'horizontal'" gap="'lg'" align="'center'">
48
+ * <div>Item 1</div>
49
+ * <div>Item 2</div>
50
+ * </Stack>
51
+ *
52
+ * <!-- Fluid responsive: wraps to vertical when children < 200px -->
53
+ * <Stack direction="'horizontal'" gap="'md'" minChildWidth="'200px'">
54
+ * <div>Item 1</div>
55
+ * <div>Item 2</div>
56
+ * <div>Item 3</div>
57
+ * </Stack>
58
+ * ```
59
+ */
60
+ /** @codexApi {"parent":"pithy.ui-kit.stack","name":"Stack","stability":"stable","signature":"(props?: StackProps) => { el: HTMLElement | DocumentFragment; destroy: () => void }"} */
61
+ export declare function Stack({ direction: rawDirection, gap: rawGap, align: rawAlign, wrap, reverse, minChildWidth, as, }?: StackProps): {
62
+ el: HTMLElement | DocumentFragment;
63
+ destroy: () => void;
64
+ };
65
+ //# sourceMappingURL=Stack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stack.d.ts","sourceRoot":"","sources":["../../src/layout/Stack.ts"],"names":[],"mappings":"AAAA;;;;;;EAME;AAGF,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,4HAA4H;AAC5H,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,uEAAuE;IACvE,GAAG,CAAC,EAAE,WAAW,CAAC;IAClB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,0DAA0D;IAC1D,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,kDAAkD;IAClD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0CAA0C;IAC1C,EAAE,CAAC,EAAE,MAAM,qBAAqB,CAAC;CAClC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,sLAAsL;AACtL,wBAAgB,KAAK,CAAC,EACpB,SAAS,EAAE,YAAyB,EACpC,GAAG,EAAE,MAAa,EAClB,KAAK,EAAE,QAAoB,EAC3B,IAAY,EACZ,OAAe,EACf,aAAyB,EACzB,EAAU,GACX,GAAE,UAAe,GAAG;IACnB,EAAE,EAAE,WAAW,GAAG,gBAAgB,CAAC;IACnC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CA6FA"}
@@ -0,0 +1,114 @@
1
+ /** @codex
2
+ {
3
+ "id": "pithy.ui-kit.stack",
4
+ "title": "<Stack> Layout Component",
5
+ "category": "feature"
6
+ }
7
+ */
8
+ import { renderChildren } from '@pithyjs/core';
9
+ import { GAP_CLASS, ALIGN_CLASS, CSS_LENGTH_PATTERN, } from '../shared/common';
10
+ import { captureSlot } from '../shared/slots';
11
+ import { ORIENTATIONS } from '../shared/types';
12
+ let fluidStackUid = 0;
13
+ /**
14
+ * Layout atom that arranges children in a vertical or horizontal stack.
15
+ *
16
+ * Maps props to design-system utility classes (u-vstack, u-hstack,
17
+ * u-gap-*, u-items-*, u-flex-wrap, u-flex-col-reverse, u-flex-row-reverse).
18
+ * No custom CSS required.
19
+ *
20
+ * For fluid responsive horizontal layouts, set `minChildWidth` — children
21
+ * will wrap to a new row when they can't maintain the minimum width.
22
+ * This uses pure CSS flex-wrap, no breakpoints or container queries.
23
+ *
24
+ * @example
25
+ * ```html
26
+ * <!-- Simple stack -->
27
+ * <Stack direction="'horizontal'" gap="'lg'" align="'center'">
28
+ * <div>Item 1</div>
29
+ * <div>Item 2</div>
30
+ * </Stack>
31
+ *
32
+ * <!-- Fluid responsive: wraps to vertical when children < 200px -->
33
+ * <Stack direction="'horizontal'" gap="'md'" minChildWidth="'200px'">
34
+ * <div>Item 1</div>
35
+ * <div>Item 2</div>
36
+ * <div>Item 3</div>
37
+ * </Stack>
38
+ * ```
39
+ */
40
+ /** @codexApi {"parent":"pithy.ui-kit.stack","name":"Stack","stability":"stable","signature":"(props?: StackProps) => { el: HTMLElement | DocumentFragment; destroy: () => void }"} */
41
+ export function Stack({ direction: rawDirection = 'vertical', gap: rawGap = 'md', align: rawAlign = 'stretch', wrap = false, reverse = false, minChildWidth = undefined, as = 'div', } = {}) {
42
+ const hasOwn = Object.prototype.hasOwnProperty;
43
+ const validGap = hasOwn.call(GAP_CLASS, rawGap);
44
+ const validAlign = hasOwn.call(ALIGN_CLASS, rawAlign);
45
+ const validDirection = ORIENTATIONS.includes(rawDirection);
46
+ if (import.meta.env?.DEV) {
47
+ if (!validGap) {
48
+ const valid = Object.keys(GAP_CLASS).join(', ');
49
+ console.warn(`[<Stack>] Invalid gap value: "${rawGap}". Expected one of: ${valid}. Falling back to "md".`);
50
+ }
51
+ if (!validAlign) {
52
+ const valid = Object.keys(ALIGN_CLASS).join(', ');
53
+ console.warn(`[<Stack>] Invalid align value: "${rawAlign}". Expected one of: ${valid}. Falling back to "stretch".`);
54
+ }
55
+ if (!validDirection) {
56
+ const valid = ORIENTATIONS.join(', ');
57
+ console.warn(`[<Stack>] Invalid direction value: "${rawDirection}". Expected one of: ${valid}. Falling back to "vertical".`);
58
+ }
59
+ if (minChildWidth != null && !CSS_LENGTH_PATTERN.test(minChildWidth)) {
60
+ console.warn(`[<Stack>] Suspicious minChildWidth value: "${minChildWidth}". Expected a CSS length (e.g. "200px", "15rem").`);
61
+ }
62
+ if (minChildWidth != null && rawDirection !== 'horizontal') {
63
+ console.warn(`[<Stack>] minChildWidth is only supported on horizontal stacks and will be ignored.`);
64
+ }
65
+ }
66
+ const direction = validDirection ? rawDirection : 'vertical';
67
+ const gap = validGap ? rawGap : 'md';
68
+ const align = validAlign ? rawAlign : 'stretch';
69
+ // minChildWidth implies wrap for horizontal stacks
70
+ const shouldWrap = wrap || (minChildWidth != null && direction === 'horizontal');
71
+ const classes = [
72
+ 'u-flex',
73
+ reverse
74
+ ? direction === 'horizontal'
75
+ ? 'u-flex-row-reverse'
76
+ : 'u-flex-col-reverse'
77
+ : direction === 'horizontal'
78
+ ? 'u-hstack'
79
+ : 'u-vstack',
80
+ GAP_CLASS[gap],
81
+ ALIGN_CLASS[align],
82
+ shouldWrap ? 'u-flex-wrap' : '',
83
+ ].filter(Boolean);
84
+ // Create wrapper element with utility classes
85
+ const wrapper = document.createElement(as);
86
+ for (const cls of classes)
87
+ wrapper.classList.add(cls);
88
+ // Fluid mode: use a scoped <style> with `> *` rule so ALL direct children
89
+ // (including those added later by structural directives) get the flex sizing.
90
+ // flex: 1 0 <min> ensures children won't shrink below minChildWidth and will
91
+ // wrap to a new row instead (matching the prop's documented contract).
92
+ if (minChildWidth != null && direction === 'horizontal') {
93
+ // Validate against CSS injection — reject values that don't match a safe CSS length pattern
94
+ const trimmed = minChildWidth.trim();
95
+ const safeValue = CSS_LENGTH_PATTERN.test(trimmed) ? trimmed : '0px';
96
+ const scopeAttr = `data-stack-fluid-${fluidStackUid++}`;
97
+ wrapper.setAttribute(scopeAttr, '');
98
+ const styleEl = document.createElement('style');
99
+ styleEl.textContent = `[${scopeAttr}] > :not(style) { flex: 1 0 ${safeValue}; min-inline-size: ${safeValue}; }`;
100
+ wrapper.appendChild(styleEl);
101
+ }
102
+ captureSlot(wrapper, 'default');
103
+ // Compile children through full pipeline (enables nested <Stack>)
104
+ const { el: childFragment, destroy } = renderChildren();
105
+ wrapper.appendChild(childFragment);
106
+ return {
107
+ el: wrapper,
108
+ destroy: () => {
109
+ destroy();
110
+ wrapper.replaceChildren();
111
+ },
112
+ };
113
+ }
114
+ //# sourceMappingURL=Stack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stack.js","sourceRoot":"","sources":["../../src/layout/Stack.ts"],"names":[],"mappings":"AAAA;;;;;;EAME;AAEF,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACL,SAAS,EACT,WAAW,EACX,kBAAkB,GAEnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAoB,MAAM,iBAAiB,CAAC;AAGjE,IAAI,aAAa,GAAG,CAAC,CAAC;AAyBtB;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,sLAAsL;AACtL,MAAM,UAAU,KAAK,CAAC,EACpB,SAAS,EAAE,YAAY,GAAG,UAAU,EACpC,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,KAAK,EAAE,QAAQ,GAAG,SAAS,EAC3B,IAAI,GAAG,KAAK,EACZ,OAAO,GAAG,KAAK,EACf,aAAa,GAAG,SAAS,EACzB,EAAE,GAAG,KAAK,MACI,EAAE;IAIhB,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;IAC/C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACtD,MAAM,cAAc,GAAI,YAAkC,CAAC,QAAQ,CACjE,YAAY,CACb,CAAC;IAEF,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChD,OAAO,CAAC,IAAI,CACV,iCAAiC,MAAM,uBAAuB,KAAK,yBAAyB,CAC7F,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CACV,mCAAmC,QAAQ,uBAAuB,KAAK,8BAA8B,CACtG,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CACV,uCAAuC,YAAY,uBAAuB,KAAK,+BAA+B,CAC/G,CAAC;QACJ,CAAC;QACD,IAAI,aAAa,IAAI,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;YACrE,OAAO,CAAC,IAAI,CACV,8CAA8C,aAAa,mDAAmD,CAC/G,CAAC;QACJ,CAAC;QACD,IAAI,aAAa,IAAI,IAAI,IAAI,YAAY,KAAK,YAAY,EAAE,CAAC;YAC3D,OAAO,CAAC,IAAI,CACV,qFAAqF,CACtF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAgB,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC;IAC1E,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACrC,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAEhD,mDAAmD;IACnD,MAAM,UAAU,GACd,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,IAAI,SAAS,KAAK,YAAY,CAAC,CAAC;IAEhE,MAAM,OAAO,GAAG;QACd,QAAQ;QACR,OAAO;YACL,CAAC,CAAC,SAAS,KAAK,YAAY;gBAC1B,CAAC,CAAC,oBAAoB;gBACtB,CAAC,CAAC,oBAAoB;YACxB,CAAC,CAAC,SAAS,KAAK,YAAY;gBAC1B,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,UAAU;QAChB,SAAS,CAAC,GAAG,CAAC;QACd,WAAW,CAAC,KAAK,CAAC;QAClB,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE;KAChC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAElB,8CAA8C;IAC9C,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,OAAO;QAAE,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAEtD,0EAA0E;IAC1E,8EAA8E;IAC9E,6EAA6E;IAC7E,uEAAuE;IACvE,IAAI,aAAa,IAAI,IAAI,IAAI,SAAS,KAAK,YAAY,EAAE,CAAC;QACxD,4FAA4F;QAC5F,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;QACrE,MAAM,SAAS,GAAG,oBAAoB,aAAa,EAAE,EAAE,CAAC;QACxD,OAAO,CAAC,YAAY,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAChD,OAAO,CAAC,WAAW,GAAG,IAAI,SAAS,+BAA+B,SAAS,sBAAsB,SAAS,KAAK,CAAC;QAChH,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAED,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAEhC,kEAAkE;IAClE,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IACxD,OAAO,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IAEnC,OAAO;QACL,EAAE,EAAE,OAAO;QACX,OAAO,EAAE,GAAG,EAAE;YACZ,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,eAAe,EAAE,CAAC;QAC5B,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,93 @@
1
+ /** @codex
2
+ {
3
+ "id": "pithy.ui-kit.card",
4
+ "title": "<Card> Organism",
5
+ "category": "feature",
6
+ "risk": "medium"
7
+ }
8
+ */
9
+ import { type Orientation } from '../../shared/types';
10
+ import { type CardVariant, type CardPadding, type CardRadius, type CardMediaAspect } from '../../shared/card';
11
+ /** @codexApi {"parent":"pithy.ui-kit.card","name":"CardProps","stability":"stable","signature":"interface CardProps"} */
12
+ export interface CardProps {
13
+ /** Visual variant (default: "default") */
14
+ variant?: CardVariant;
15
+ /** Inset padding (default: "md"). "none" bleeds media to the card edges. */
16
+ padding?: CardPadding;
17
+ /** Corner radius (default: "md") */
18
+ radius?: CardRadius;
19
+ /** Layout direction (default: "vertical"). "horizontal" places media at the inline-start. */
20
+ orientation?: Orientation;
21
+ /**
22
+ * Aspect ratio for the `media` slot. Optional in vertical mode (defaults to
23
+ * the media's intrinsic ratio). In horizontal mode it defaults to "16/9" so
24
+ * thumbnails stay rhythmically consistent across list layouts.
25
+ */
26
+ mediaAspect?: CardMediaAspect;
27
+ /**
28
+ * Full-bleed media overlay mode. The media slot fills the whole card
29
+ * (ignoring `padding`) and the header / body / footer stack at the
30
+ * block-end on top of a gradient scrim with inverse text colors. Canonical
31
+ * pattern for hero tiles, gallery cards, and marketing listings where the
32
+ * image carries the eye and the caption is secondary.
33
+ */
34
+ mediaOverlay?: boolean;
35
+ /** Make the whole card a navigation target via a stretched pseudo-link overlay. */
36
+ clickable?: boolean;
37
+ /** Href for the clickable overlay (validated via isSafeHref). Required when `clickable`. */
38
+ href?: string;
39
+ /** Screen-reader label for the clickable overlay. Defaults to `ariaLabel` or the card's heading. */
40
+ linkLabel?: string;
41
+ /**
42
+ * Disable interactivity. Applies `aria-disabled` + `inert` + dimmed chrome.
43
+ * Accepts a boolean or a reactive getter (`() => boolean`) — when a getter
44
+ * is passed, Card wires an internal effect that tracks it.
45
+ */
46
+ disabled?: boolean | (() => boolean);
47
+ /**
48
+ * Mark the card as selected. Sets `aria-current="true"` (when clickable) +
49
+ * primary-tinted chrome. Accepts a boolean or a reactive getter
50
+ * (`() => boolean`) — when a getter is passed, Card wires an internal effect
51
+ * so the card repaints without remounting.
52
+ */
53
+ selected?: boolean | (() => boolean);
54
+ /**
55
+ * Short uppercase label rendered above the heading in the header slot —
56
+ * primary-colored, letter-spaced, semibold. Mirrors the `eyebrow` prop on
57
+ * Hero / CTA sections. Used for category tags ("Engineering", "Product")
58
+ * and editorial kickers. Auto-injected into the header slot when set.
59
+ */
60
+ eyebrow?: string;
61
+ /** Fallback accessible name for the article (used when no heading is present in the header slot). */
62
+ ariaLabel?: string;
63
+ /** Explicit id of an element labeling this card (takes precedence over auto-detection). */
64
+ ariaLabelledBy?: string;
65
+ /** Anchor id on the `<article>` root. */
66
+ id?: string;
67
+ }
68
+ /**
69
+ * Content container with named slots (`media`, `header`, default = body,
70
+ * `footer`), five variants, orientation, and a pseudo-link pattern that
71
+ * lets the whole card act as a navigation target without sacrificing
72
+ * interactive children.
73
+ *
74
+ * @example
75
+ * ```html
76
+ * <Card variant="'elevated'" clickable="true" href="'/post/hello'">
77
+ * <img data-slot="media" src="/hero.jpg" alt="">
78
+ * <header data-slot="header">
79
+ * <Heading level="3">Hello world</Heading>
80
+ * </header>
81
+ * <Text>A short excerpt…</Text>
82
+ * <footer data-slot="footer">
83
+ * <Text color="'text-muted'" size="'sm'">3 min read</Text>
84
+ * </footer>
85
+ * </Card>
86
+ * ```
87
+ */
88
+ /** @codexApi {"parent":"pithy.ui-kit.card","name":"Card","stability":"stable","signature":"(props?: CardProps) => { el: HTMLElement; destroy: () => void }"} */
89
+ export declare function Card(props?: CardProps): {
90
+ el: HTMLElement;
91
+ destroy: () => void;
92
+ };
93
+ //# sourceMappingURL=Card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card.d.ts","sourceRoot":"","sources":["../../../src/organisms/content/Card.ts"],"names":[],"mappings":"AAAA;;;;;;;EAOE;AAQF,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACpE,OAAO,EAKL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAC;AAI3B,yHAAyH;AACzH,MAAM,WAAW,SAAS;IACxB,0CAA0C;IAC1C,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,oCAAoC;IACpC,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,6FAA6F;IAC7F,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;;OAIG;IACH,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mFAAmF;IACnF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4FAA4F;IAC5F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oGAAoG;IACpG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;IACrC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,CAAC;IACrC;;;;;OAKG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qGAAqG;IACrG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2FAA2F;IAC3F,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,yCAAyC;IACzC,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AA2CD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,gKAAgK;AAChK,wBAAgB,IAAI,CAAC,KAAK,GAAE,SAAc,GAAG;IAC3C,EAAE,EAAE,WAAW,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CA0WA"}