@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,272 @@
1
+ /** @codex
2
+ {
3
+ "id": "pithy.ui-kit.grid",
4
+ "title": "<Grid> Layout Component",
5
+ "category": "feature"
6
+ }
7
+ */
8
+ import { renderChildren } from '@pithyjs/core';
9
+ import { GAP_CLASS, ROW_GAP_CLASS, COL_GAP_CLASS, ALIGN_CLASS, JUSTIFY_CLASS, CSS_LENGTH_PATTERN, } from '../shared/common';
10
+ import { GRID_COLS_CLASS, RESPONSIVE_GRID_COLS, GRID_ROWS_CLASS, } from '../shared/grid';
11
+ import { CONTAINER_BREAKPOINT_NAMES, GRID_FLUID_MIN_COLUMN_WIDTH, SPACING_CSS_VAR, } from '@pithyjs/design-system';
12
+ // ── Helpers ─────────────────────────────────────────────────────────────
13
+ function clampCols(n) {
14
+ if (!Number.isFinite(n))
15
+ return 1;
16
+ return Math.max(1, Math.min(12, Math.round(n)));
17
+ }
18
+ /** Regex matching GridItem placement utility classes that require explicit grid tracks. */
19
+ const PLACEMENT_RE = /\bu-(col-start|col-end|col-span|row-start|row-end|row-span)-/;
20
+ /**
21
+ * Scans direct children of a fragment/element for GridItem placement classes.
22
+ * When children use explicit placement (span, start, end), the grid must use
23
+ * fixed column tracks — auto-fit would create implicit tracks that break
24
+ * those placements.
25
+ */
26
+ function hasPlacementClasses(fragment) {
27
+ const children = fragment.children;
28
+ for (let i = 0; i < children.length; i++) {
29
+ const el = children[i];
30
+ for (let j = 0; j < el.classList.length; j++) {
31
+ if (PLACEMENT_RE.test(el.classList[j]))
32
+ return true;
33
+ }
34
+ }
35
+ return false;
36
+ }
37
+ function buildGapClasses(gap, rowGap, colGap) {
38
+ if (rowGap != null && colGap != null) {
39
+ return [ROW_GAP_CLASS[rowGap], COL_GAP_CLASS[colGap]];
40
+ }
41
+ if (rowGap != null) {
42
+ return [ROW_GAP_CLASS[rowGap], COL_GAP_CLASS[gap]];
43
+ }
44
+ if (colGap != null) {
45
+ return [ROW_GAP_CLASS[gap], COL_GAP_CLASS[colGap]];
46
+ }
47
+ return [GAP_CLASS[gap]];
48
+ }
49
+ /**
50
+ * Builds a fluid CSS grid-template-columns value that targets N columns at
51
+ * wide widths and gracefully collapses to fewer columns at narrow widths,
52
+ * using pure CSS — no breakpoints or container queries required.
53
+ *
54
+ * Uses design system spacing CSS variables for the gap calculation.
55
+ *
56
+ * Formula: repeat(auto-fit, minmax(min(100%, max(FLOOR, calc((100% - (N-1) * GAP_VAR) / N - 0.01px))), 1fr))
57
+ *
58
+ * - `calc(...)` computes the exact per-column width for N columns minus a tiny epsilon.
59
+ * - `max(FLOOR, ...)` sets the collapse threshold — when columns would be smaller than FLOOR, auto-fit reduces count.
60
+ * - `min(100%, ...)` ensures single-column works at very narrow widths.
61
+ */
62
+ function buildFluidGridCols(cols, gapCssVar, minColumnWidth) {
63
+ const gapCount = cols - 1;
64
+ const floor = minColumnWidth ?? GRID_FLUID_MIN_COLUMN_WIDTH;
65
+ return `repeat(auto-fit, minmax(min(100%, max(${floor}, calc((100% - ${gapCount} * ${gapCssVar}) / ${cols} - 0.01px))), 1fr))`;
66
+ }
67
+ // ── Component ───────────────────────────────────────────────────────────
68
+ /**
69
+ * Layout atom that arranges children in a CSS grid.
70
+ *
71
+ * Mobile-first: defaults to 1 column. Supports simple column counts (which
72
+ * are fluid-responsive by default), explicit responsive breakpoints via
73
+ * container queries, and intrinsic auto-fit/fill patterns.
74
+ *
75
+ * When `columns` is a number ≥ 2, the grid uses a fluid CSS formula that
76
+ * targets that exact column count at wide widths but gracefully collapses
77
+ * to fewer columns at narrow widths — no breakpoints required.
78
+ *
79
+ * @example
80
+ * ```html
81
+ * <!-- Fluid 3-column grid (collapses gracefully on mobile) -->
82
+ * <Grid columns="3" gap="'lg'">
83
+ * <div>Cell 1</div>
84
+ * <div>Cell 2</div>
85
+ * <div>Cell 3</div>
86
+ * </Grid>
87
+ *
88
+ * <!-- Explicit responsive: 1 col mobile → 2 col tablet → 3 col desktop -->
89
+ * <Grid columns="{ base: 1, sm: 2, lg: 3 }">
90
+ * <div>A</div>
91
+ * <div>B</div>
92
+ * <div>C</div>
93
+ * </Grid>
94
+ *
95
+ * <!-- Auto-fit with minimum 250px columns -->
96
+ * <Grid columns="'auto-fit'" minColumnWidth="'250px'">
97
+ * <div>Card</div>
98
+ * <div>Card</div>
99
+ * <div>Card</div>
100
+ * </Grid>
101
+ * ```
102
+ */
103
+ /** @codexApi {"parent":"pithy.ui-kit.grid","name":"Grid","stability":"stable","signature":"(props?: GridProps) => { el: HTMLElement | DocumentFragment; destroy: () => void }"} */
104
+ export function Grid({ columns = 1, rows = undefined, gap: rawGap = 'md', rowGap: rawRowGap = undefined, colGap: rawColGap = undefined, align: rawAlign = undefined, justify: rawJustify = undefined, minColumnWidth = undefined, as = 'div', } = {}) {
105
+ // Validate and fall back unconditionally (not just DEV) to prevent undefined class names in production
106
+ const hasOwn = Object.prototype.hasOwnProperty;
107
+ const validGap = hasOwn.call(GAP_CLASS, rawGap);
108
+ const validRowGap = rawRowGap == null || hasOwn.call(ROW_GAP_CLASS, rawRowGap);
109
+ const validColGap = rawColGap == null || hasOwn.call(COL_GAP_CLASS, rawColGap);
110
+ const validAlign = rawAlign == null || hasOwn.call(ALIGN_CLASS, rawAlign);
111
+ const validJustify = rawJustify == null || hasOwn.call(JUSTIFY_CLASS, rawJustify);
112
+ if (import.meta.env?.DEV) {
113
+ if (!validGap) {
114
+ const valid = Object.keys(GAP_CLASS).join(', ');
115
+ console.warn(`[<Grid>] Invalid gap value: "${rawGap}". Expected one of: ${valid}. Falling back to "md".`);
116
+ }
117
+ if (!validRowGap) {
118
+ const valid = Object.keys(ROW_GAP_CLASS).join(', ');
119
+ console.warn(`[<Grid>] Invalid rowGap value: "${rawRowGap}". Expected one of: ${valid}. Ignoring.`);
120
+ }
121
+ if (!validColGap) {
122
+ const valid = Object.keys(COL_GAP_CLASS).join(', ');
123
+ console.warn(`[<Grid>] Invalid colGap value: "${rawColGap}". Expected one of: ${valid}. Ignoring.`);
124
+ }
125
+ if (!validAlign) {
126
+ const valid = Object.keys(ALIGN_CLASS).join(', ');
127
+ console.warn(`[<Grid>] Invalid align value: "${rawAlign}". Expected one of: ${valid}. Ignoring.`);
128
+ }
129
+ if (!validJustify) {
130
+ const valid = Object.keys(JUSTIFY_CLASS).join(', ');
131
+ console.warn(`[<Grid>] Invalid justify value: "${rawJustify}". Expected one of: ${valid}. Ignoring.`);
132
+ }
133
+ if (minColumnWidth != null && !CSS_LENGTH_PATTERN.test(minColumnWidth)) {
134
+ console.warn(`[<Grid>] Suspicious minColumnWidth value: "${minColumnWidth}". Expected a CSS length (e.g. "250px", "15rem"). Note: fr units are not valid inside minmax().`);
135
+ }
136
+ }
137
+ const gap = validGap ? rawGap : 'md';
138
+ const rowGap = validRowGap ? rawRowGap : undefined;
139
+ const colGap = validColGap ? rawColGap : undefined;
140
+ const align = validAlign ? rawAlign : undefined;
141
+ const justify = validJustify ? rawJustify : undefined;
142
+ const rowCount = rows != null && Number.isFinite(rows)
143
+ ? Math.max(1, Math.min(6, Math.round(rows)))
144
+ : undefined;
145
+ const gapClasses = buildGapClasses(gap, rowGap, colGap);
146
+ const alignClass = align ? ALIGN_CLASS[align] : '';
147
+ const justifyClass = justify ? JUSTIFY_CLASS[justify] : '';
148
+ const rowClass = rowCount != null ? GRID_ROWS_CLASS[rowCount] : '';
149
+ // Compile children through full pipeline (enables nested <GridItem>, <Stack>, etc.)
150
+ const { el: childFragment, destroy } = renderChildren();
151
+ // ── Auto-fit / auto-fill ──────────────────────────────────
152
+ if (columns === 'auto-fit' || columns === 'auto-fill') {
153
+ const autoClass = columns === 'auto-fit' ? 'u-grid-auto-fit' : 'u-grid-auto-fill';
154
+ const classes = [
155
+ 'u-grid',
156
+ autoClass,
157
+ rowClass,
158
+ ...gapClasses,
159
+ alignClass,
160
+ justifyClass,
161
+ ].filter(Boolean);
162
+ const wrapper = document.createElement(as);
163
+ for (const cls of classes)
164
+ wrapper.classList.add(cls);
165
+ if (minColumnWidth)
166
+ wrapper.style.setProperty('--grid-auto-min', minColumnWidth);
167
+ wrapper.appendChild(childFragment);
168
+ return {
169
+ el: wrapper,
170
+ destroy: () => {
171
+ destroy();
172
+ wrapper.replaceChildren();
173
+ },
174
+ };
175
+ }
176
+ // ── Responsive object ─────────────────────────────────────
177
+ if (columns != null && typeof columns === 'object') {
178
+ const base = clampCols(columns.base ?? 1);
179
+ const bpClasses = CONTAINER_BREAKPOINT_NAMES.filter(bp => columns[bp] != null).map(bp => RESPONSIVE_GRID_COLS[bp][clampCols(columns[bp])]);
180
+ const gridClasses = [
181
+ 'u-grid',
182
+ GRID_COLS_CLASS[base],
183
+ ...bpClasses,
184
+ rowClass,
185
+ ...gapClasses,
186
+ alignClass,
187
+ justifyClass,
188
+ ].filter(Boolean);
189
+ const outer = document.createElement('div');
190
+ outer.classList.add('u-container-inline');
191
+ const inner = document.createElement(as);
192
+ for (const cls of gridClasses)
193
+ inner.classList.add(cls);
194
+ inner.appendChild(childFragment);
195
+ outer.appendChild(inner);
196
+ return {
197
+ el: outer,
198
+ destroy: () => {
199
+ destroy();
200
+ inner.replaceChildren();
201
+ outer.replaceChildren();
202
+ },
203
+ };
204
+ }
205
+ // ── Simple number ─────────────────────────────────────────
206
+ const cols = clampCols(columns);
207
+ // For 2+ columns: use fluid CSS formula unless rows is set or children
208
+ // use explicit GridItem placement (span, start, end) which requires
209
+ // fixed column tracks — auto-fit would create implicit tracks that
210
+ // break those placements.
211
+ if (cols >= 2 && rowCount == null && !hasPlacementClasses(childFragment)) {
212
+ const effectiveColGap = colGap ?? gap;
213
+ const gapCssVar = SPACING_CSS_VAR[effectiveColGap];
214
+ const classes = ['u-grid', ...gapClasses, alignClass, justifyClass].filter(Boolean);
215
+ const wrapper = document.createElement(as);
216
+ for (const cls of classes)
217
+ wrapper.classList.add(cls);
218
+ wrapper.style.gridTemplateColumns = buildFluidGridCols(cols, gapCssVar, minColumnWidth);
219
+ wrapper.appendChild(childFragment);
220
+ return {
221
+ el: wrapper,
222
+ destroy: () => {
223
+ destroy();
224
+ wrapper.replaceChildren();
225
+ },
226
+ };
227
+ }
228
+ // For 2+ columns with rows or explicit placement: use fixed column count
229
+ // to preserve GridItem placement (span, start, rowSpan).
230
+ if (cols >= 2) {
231
+ const classes = [
232
+ 'u-grid',
233
+ GRID_COLS_CLASS[cols],
234
+ rowClass,
235
+ ...gapClasses,
236
+ alignClass,
237
+ justifyClass,
238
+ ].filter(Boolean);
239
+ const wrapper = document.createElement(as);
240
+ for (const cls of classes)
241
+ wrapper.classList.add(cls);
242
+ wrapper.appendChild(childFragment);
243
+ return {
244
+ el: wrapper,
245
+ destroy: () => {
246
+ destroy();
247
+ wrapper.replaceChildren();
248
+ },
249
+ };
250
+ }
251
+ // Single column — no fluid behavior needed
252
+ const classes = [
253
+ 'u-grid',
254
+ GRID_COLS_CLASS[cols],
255
+ rowClass,
256
+ ...gapClasses,
257
+ alignClass,
258
+ justifyClass,
259
+ ].filter(Boolean);
260
+ const wrapper = document.createElement(as);
261
+ for (const cls of classes)
262
+ wrapper.classList.add(cls);
263
+ wrapper.appendChild(childFragment);
264
+ return {
265
+ el: wrapper,
266
+ destroy: () => {
267
+ destroy();
268
+ wrapper.replaceChildren();
269
+ },
270
+ };
271
+ }
272
+ //# sourceMappingURL=Grid.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Grid.js","sourceRoot":"","sources":["../../src/layout/Grid.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /** @codex
2
+ {
3
+ "id": "pithy.ui-kit.grid-item",
4
+ "title": "<GridItem> Layout Component",
5
+ "category": "feature"
6
+ }
7
+ */
8
+ import { type PlaceSelf } from '../shared/grid';
9
+ /** @codexApi {"parent":"pithy.ui-kit.grid-item","name":"GridItemProps","stability":"stable","signature":"interface GridItemProps"} */
10
+ export interface GridItemProps {
11
+ /** Column span (1-12 or "full") — maps to u-col-span-* */
12
+ span?: number | 'full';
13
+ /** Column start line (1-13) — maps to u-col-start-* */
14
+ start?: number;
15
+ /** Column end line (1-13) — maps to u-col-end-* */
16
+ end?: number;
17
+ /** Row span (1-6) — maps to u-row-span-* */
18
+ rowSpan?: number;
19
+ /** Row start line (1-7) — maps to u-row-start-* */
20
+ rowStart?: number;
21
+ /** Row end line (1-7) — maps to u-row-end-* */
22
+ rowEnd?: number;
23
+ /** Place self alignment — maps to u-place-self-* */
24
+ placeSelf?: PlaceSelf;
25
+ /** HTML tag to render (default: "div") */
26
+ as?: keyof HTMLElementTagNameMap;
27
+ }
28
+ /**
29
+ * Grid child component for structured placement within a Grid.
30
+ *
31
+ * Designed for use inside Grid — maps props to existing utility classes
32
+ * for column/row spanning and positioning. Critical for site builder
33
+ * serialization and property panels.
34
+ *
35
+ * @example
36
+ * ```html
37
+ * <Grid columns="3">
38
+ * <GridItem span="2">
39
+ * <div>Spans 2 columns</div>
40
+ * </GridItem>
41
+ * <GridItem start="3">
42
+ * <div>Starts at column 3</div>
43
+ * </GridItem>
44
+ * </Grid>
45
+ * ```
46
+ */
47
+ /** @codexApi {"parent":"pithy.ui-kit.grid-item","name":"GridItem","stability":"stable","signature":"(props?: GridItemProps) => { el: HTMLElement | DocumentFragment; destroy: () => void }"} */
48
+ export declare function GridItem({ span, start, end, rowSpan, rowStart, rowEnd, placeSelf, as, }?: GridItemProps): {
49
+ el: HTMLElement | DocumentFragment;
50
+ destroy: () => void;
51
+ };
52
+ //# sourceMappingURL=GridItem.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GridItem.d.ts","sourceRoot":"","sources":["../../src/layout/GridItem.ts"],"names":[],"mappings":"AAAA;;;;;;EAME;AAIF,OAAO,EASL,KAAK,SAAS,EACf,MAAM,gBAAgB,CAAC;AAOxB,sIAAsI;AACtI,MAAM,WAAW,aAAa;IAC5B,0DAA0D;IAC1D,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mDAAmD;IACnD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,0CAA0C;IAC1C,EAAE,CAAC,EAAE,MAAM,qBAAqB,CAAC;CAClC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,gMAAgM;AAChM,wBAAgB,QAAQ,CAAC,EACvB,IAAgB,EAChB,KAAiB,EACjB,GAAe,EACf,OAAmB,EACnB,QAAoB,EACpB,MAAkB,EAClB,SAAqB,EACrB,EAAU,GACX,GAAE,aAAkB,GAAG;IACtB,EAAE,EAAE,WAAW,GAAG,gBAAgB,CAAC;IACnC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAiEA"}
@@ -0,0 +1,99 @@
1
+ /** @codex
2
+ {
3
+ "id": "pithy.ui-kit.grid-item",
4
+ "title": "<GridItem> Layout Component",
5
+ "category": "feature"
6
+ }
7
+ */
8
+ import { renderChildren } from '@pithyjs/core';
9
+ import { captureSlot } from '../shared/slots';
10
+ import { COL_SPAN_CLASS, COL_START_CLASS, COL_END_CLASS, ROW_SPAN_CLASS, ROW_START_CLASS, ROW_END_CLASS, PLACE_SELF_CLASS, PLACE_SELF_ITEMS, } from '../shared/grid';
11
+ function clampFinite(n, min, max) {
12
+ if (!Number.isFinite(n))
13
+ return undefined;
14
+ return Math.max(min, Math.min(max, Math.round(n)));
15
+ }
16
+ /**
17
+ * Grid child component for structured placement within a Grid.
18
+ *
19
+ * Designed for use inside Grid — maps props to existing utility classes
20
+ * for column/row spanning and positioning. Critical for site builder
21
+ * serialization and property panels.
22
+ *
23
+ * @example
24
+ * ```html
25
+ * <Grid columns="3">
26
+ * <GridItem span="2">
27
+ * <div>Spans 2 columns</div>
28
+ * </GridItem>
29
+ * <GridItem start="3">
30
+ * <div>Starts at column 3</div>
31
+ * </GridItem>
32
+ * </Grid>
33
+ * ```
34
+ */
35
+ /** @codexApi {"parent":"pithy.ui-kit.grid-item","name":"GridItem","stability":"stable","signature":"(props?: GridItemProps) => { el: HTMLElement | DocumentFragment; destroy: () => void }"} */
36
+ export function GridItem({ span = undefined, start = undefined, end = undefined, rowSpan = undefined, rowStart = undefined, rowEnd = undefined, placeSelf = undefined, as = 'div', } = {}) {
37
+ const classes = [];
38
+ // Column span
39
+ if (span === 'full') {
40
+ classes.push('u-col-span-full');
41
+ }
42
+ else if (span != null) {
43
+ const n = clampFinite(span, 1, 12);
44
+ if (n != null)
45
+ classes.push(COL_SPAN_CLASS[n]);
46
+ }
47
+ // Column start/end
48
+ if (start != null) {
49
+ const n = clampFinite(start, 1, 13);
50
+ if (n != null)
51
+ classes.push(COL_START_CLASS[n]);
52
+ }
53
+ if (end != null) {
54
+ const n = clampFinite(end, 1, 13);
55
+ if (n != null)
56
+ classes.push(COL_END_CLASS[n]);
57
+ }
58
+ // Row span
59
+ if (rowSpan != null) {
60
+ const n = clampFinite(rowSpan, 1, 6);
61
+ if (n != null)
62
+ classes.push(ROW_SPAN_CLASS[n]);
63
+ }
64
+ // Row start/end
65
+ if (rowStart != null) {
66
+ const n = clampFinite(rowStart, 1, 7);
67
+ if (n != null)
68
+ classes.push(ROW_START_CLASS[n]);
69
+ }
70
+ if (rowEnd != null) {
71
+ const n = clampFinite(rowEnd, 1, 7);
72
+ if (n != null)
73
+ classes.push(ROW_END_CLASS[n]);
74
+ }
75
+ // Place self — guard against invalid values to prevent "undefined" class name
76
+ if (placeSelf != null &&
77
+ PLACE_SELF_ITEMS.includes(placeSelf)) {
78
+ classes.push(PLACE_SELF_CLASS[placeSelf]);
79
+ }
80
+ else if (placeSelf != null && import.meta.env?.DEV) {
81
+ const valid = PLACE_SELF_ITEMS.join(', ');
82
+ console.warn(`[<GridItem>] Invalid placeSelf value: "${placeSelf}". Expected one of: ${valid}. Ignoring.`);
83
+ }
84
+ // Compile children through full pipeline
85
+ const { el: childFragment, destroy } = renderChildren();
86
+ const wrapper = document.createElement(as);
87
+ for (const cls of classes)
88
+ wrapper.classList.add(cls);
89
+ captureSlot(wrapper, 'default');
90
+ wrapper.appendChild(childFragment);
91
+ return {
92
+ el: wrapper,
93
+ destroy: () => {
94
+ destroy();
95
+ wrapper.replaceChildren();
96
+ },
97
+ };
98
+ }
99
+ //# sourceMappingURL=GridItem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GridItem.js","sourceRoot":"","sources":["../../src/layout/GridItem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /** @codex
2
+ {
3
+ "id": "pithy.ui-kit.page-section",
4
+ "title": "<PageSection> Layout Component",
5
+ "category": "feature"
6
+ }
7
+ */
8
+ import { type SectionTag } from '../shared/common';
9
+ import { type SpacingSize } from '@pithyjs/design-system';
10
+ /** @codexApi {"parent":"pithy.ui-kit.page-section","name":"PageSectionProps","stability":"stable","signature":"interface PageSectionProps"} */
11
+ export interface PageSectionProps {
12
+ /** Vertical padding — maps to u-py-* utilities (default: "lg") */
13
+ spacing?: SpacingSize;
14
+ /** Apply max-width + centered layout with gutters (default: false) */
15
+ contained?: boolean;
16
+ /** Edge-to-edge viewport width breakout (default: false) */
17
+ fullBleed?: boolean;
18
+ /** Semantic HTML tag (default: "section") */
19
+ as?: SectionTag;
20
+ /** Optional anchor id */
21
+ id?: string;
22
+ }
23
+ /**
24
+ * Semantic page section wrapper with consistent vertical spacing,
25
+ * optional containment, and full-bleed support.
26
+ *
27
+ * Named `PageSection` (not `Section`) to avoid collision with the
28
+ * native HTML `<section>` element — same pattern as `NavLink`.
29
+ *
30
+ * @example
31
+ * ```html
32
+ * <PageSection spacing="'lg'" contained="true">
33
+ * <h2>Features</h2>
34
+ * <p>Content here</p>
35
+ * </PageSection>
36
+ * ```
37
+ */
38
+ /** @codexApi {"parent":"pithy.ui-kit.page-section","name":"PageSection","stability":"stable","signature":"(props?: PageSectionProps) => { el: HTMLElement | DocumentFragment; destroy: () => void }"} */
39
+ export declare function PageSection({ spacing: rawSpacing, contained, fullBleed, as: rawAs, id, }?: PageSectionProps): {
40
+ el: HTMLElement | DocumentFragment;
41
+ destroy: () => void;
42
+ };
43
+ //# sourceMappingURL=PageSection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageSection.d.ts","sourceRoot":"","sources":["../../src/layout/PageSection.ts"],"names":[],"mappings":"AAAA;;;;;;EAME;AAGF,OAAO,EAA0B,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE3E,OAAO,EAEL,KAAK,WAAW,EACjB,MAAM,wBAAwB,CAAC;AAEhC,+IAA+I;AAC/I,MAAM,WAAW,gBAAgB;IAC/B,kEAAkE;IAClE,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,sEAAsE;IACtE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6CAA6C;IAC7C,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,yBAAyB;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;;;;GAcG;AACH,yMAAyM;AACzM,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EAAE,UAAiB,EAC1B,SAAiB,EACjB,SAAiB,EACjB,EAAE,EAAE,KAAiB,EACrB,EAAc,GACf,GAAE,gBAAqB,GAAG;IACzB,EAAE,EAAE,WAAW,GAAG,gBAAgB,CAAC;IACnC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CA0DA"}
@@ -0,0 +1,75 @@
1
+ /** @codex
2
+ {
3
+ "id": "pithy.ui-kit.page-section",
4
+ "title": "<PageSection> Layout Component",
5
+ "category": "feature"
6
+ }
7
+ */
8
+ import { renderChildren } from '@pithyjs/core';
9
+ import { PY_CLASS, SECTION_TAGS } from '../shared/common';
10
+ import { captureSlot } from '../shared/slots';
11
+ import { CONTAINER_BREAKPOINTS, } from '@pithyjs/design-system';
12
+ /**
13
+ * Semantic page section wrapper with consistent vertical spacing,
14
+ * optional containment, and full-bleed support.
15
+ *
16
+ * Named `PageSection` (not `Section`) to avoid collision with the
17
+ * native HTML `<section>` element — same pattern as `NavLink`.
18
+ *
19
+ * @example
20
+ * ```html
21
+ * <PageSection spacing="'lg'" contained="true">
22
+ * <h2>Features</h2>
23
+ * <p>Content here</p>
24
+ * </PageSection>
25
+ * ```
26
+ */
27
+ /** @codexApi {"parent":"pithy.ui-kit.page-section","name":"PageSection","stability":"stable","signature":"(props?: PageSectionProps) => { el: HTMLElement | DocumentFragment; destroy: () => void }"} */
28
+ export function PageSection({ spacing: rawSpacing = 'lg', contained = false, fullBleed = false, as: rawAs = 'section', id = undefined, } = {}) {
29
+ const hasOwn = Object.prototype.hasOwnProperty;
30
+ const validSpacing = hasOwn.call(PY_CLASS, rawSpacing);
31
+ const validAs = SECTION_TAGS.includes(rawAs);
32
+ if (import.meta.env?.DEV) {
33
+ if (!validSpacing) {
34
+ const valid = Object.keys(PY_CLASS).join(', ');
35
+ console.warn(`[<PageSection>] Invalid spacing value: "${rawSpacing}". Expected one of: ${valid}. Falling back to "lg".`);
36
+ }
37
+ if (!validAs) {
38
+ const valid = SECTION_TAGS.join(', ');
39
+ console.warn(`[<PageSection>] Invalid as value: "${rawAs}". Expected one of: ${valid}. Falling back to "section".`);
40
+ }
41
+ if (contained && fullBleed) {
42
+ console.warn(`[<PageSection>] "contained" and "fullBleed" are mutually exclusive. "fullBleed" takes precedence.`);
43
+ }
44
+ }
45
+ const spacing = validSpacing ? rawSpacing : 'lg';
46
+ const as = validAs ? rawAs : 'section';
47
+ // Create wrapper element
48
+ const wrapper = document.createElement(as);
49
+ wrapper.classList.add(PY_CLASS[spacing]);
50
+ // Optional anchor id
51
+ if (id)
52
+ wrapper.id = id;
53
+ // Full-bleed takes precedence over contained (mutually exclusive)
54
+ if (fullBleed) {
55
+ wrapper.style.width = '100vw';
56
+ wrapper.style.marginInline = 'calc(50% - 50vw)';
57
+ }
58
+ else if (contained) {
59
+ wrapper.style.maxWidth = CONTAINER_BREAKPOINTS.xl;
60
+ wrapper.style.marginInline = 'auto';
61
+ wrapper.style.paddingInline = 'var(--space-md)';
62
+ }
63
+ captureSlot(wrapper, 'default');
64
+ // Compile children through full pipeline
65
+ const { el: childFragment, destroy } = renderChildren();
66
+ wrapper.appendChild(childFragment);
67
+ return {
68
+ el: wrapper,
69
+ destroy: () => {
70
+ destroy();
71
+ wrapper.replaceChildren();
72
+ },
73
+ };
74
+ }
75
+ //# sourceMappingURL=PageSection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageSection.js","sourceRoot":"","sources":["../../src/layout/PageSection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /** @codex
2
+ {
3
+ "id": "pithy.ui-kit.smart-container",
4
+ "title": "<SmartContainer> Layout Component",
5
+ "category": "feature"
6
+ }
7
+ */
8
+ import { type AlignItems, type JustifyContent } from '../shared/common';
9
+ import { type Recipe, type Density } from '../shared/smart-container';
10
+ import { type SpacingSize } from '@pithyjs/design-system';
11
+ /** @codexApi {"parent":"pithy.ui-kit.smart-container","name":"SmartContainerProps","stability":"stable","signature":"interface SmartContainerProps"} */
12
+ export interface SmartContainerProps {
13
+ /** Layout recipe (default: "auto-grid") */
14
+ recipe?: Recipe;
15
+ /** Minimum item width for auto-grid recipe, e.g. "14rem", "250px" */
16
+ minItem?: string;
17
+ /** Gap between children — maps to u-gap-* utilities (default: "md") */
18
+ gap?: SpacingSize;
19
+ /** Density scaling: compact (0.9), normal (1.0), relaxed (1.25) */
20
+ density?: Density;
21
+ /** Cross-axis alignment — maps to u-items-* utilities */
22
+ align?: AlignItems;
23
+ /** Main-axis justification — maps to u-justify-* utilities */
24
+ justify?: JustifyContent;
25
+ /** Max column count for equal-cards recipe (2-6, default: 3) */
26
+ lanes?: number;
27
+ /** HTML tag to render (default: "div") */
28
+ as?: keyof HTMLElementTagNameMap;
29
+ }
30
+ /**
31
+ * Higher-level layout component providing 5 opinionated responsive
32
+ * layout recipes that adapt to container width via CSS container queries.
33
+ *
34
+ * Unlike Grid/Stack (low-level primitives), SmartContainer provides
35
+ * common layout patterns that "just work" responsively.
36
+ *
37
+ * @example
38
+ * ```html
39
+ * <!-- Auto-grid: items flow into columns based on minimum width -->
40
+ * <SmartContainer recipe="'auto-grid'" minItem="'14rem'" gap="'lg'">
41
+ * <div>Card 1</div>
42
+ * <div>Card 2</div>
43
+ * <div>Card 3</div>
44
+ * </SmartContainer>
45
+ *
46
+ * <!-- Stack-to-row: vertical on mobile, horizontal on wider containers -->
47
+ * <SmartContainer recipe="'stack-to-row'">
48
+ * <div>Left</div>
49
+ * <div>Right</div>
50
+ * </SmartContainer>
51
+ *
52
+ * <!-- Equal cards: responsive grid capped at N columns -->
53
+ * <SmartContainer recipe="'equal-cards'" lanes="4">
54
+ * <div>Card 1</div>
55
+ * <div>Card 2</div>
56
+ * <div>Card 3</div>
57
+ * <div>Card 4</div>
58
+ * </SmartContainer>
59
+ * ```
60
+ */
61
+ /** @codexApi {"parent":"pithy.ui-kit.smart-container","name":"SmartContainer","stability":"stable","signature":"(props?: SmartContainerProps) => { el: HTMLElement | DocumentFragment; destroy: () => void }"} */
62
+ export declare function SmartContainer({ recipe: rawRecipe, minItem, gap: rawGap, density: rawDensity, align: rawAlign, justify: rawJustify, lanes: rawLanes, as, }?: SmartContainerProps): {
63
+ el: HTMLElement | DocumentFragment;
64
+ destroy: () => void;
65
+ };
66
+ //# sourceMappingURL=SmartContainer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SmartContainer.d.ts","sourceRoot":"","sources":["../../src/layout/SmartContainer.ts"],"names":[],"mappings":"AAAA;;;;;;EAME;AAIF,OAAO,EAKL,KAAK,UAAU,EACf,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAIL,KAAK,MAAM,EACX,KAAK,OAAO,EACb,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAuB,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE/E,wJAAwJ;AACxJ,MAAM,WAAW,mBAAmB;IAClC,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,GAAG,CAAC,EAAE,WAAW,CAAC;IAClB,mEAAmE;IACnE,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yDAAyD;IACzD,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0CAA0C;IAC1C,EAAE,CAAC,EAAE,MAAM,qBAAqB,CAAC;CAClC;AAsBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,kNAAkN;AAClN,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EAAE,SAAuB,EAC/B,OAAmB,EACnB,GAAG,EAAE,MAAa,EAClB,OAAO,EAAE,UAAqB,EAC9B,KAAK,EAAE,QAAoB,EAC3B,OAAO,EAAE,UAAsB,EAC/B,KAAK,EAAE,QAAY,EACnB,EAAU,GACX,GAAE,mBAAwB,GAAG;IAC5B,EAAE,EAAE,WAAW,GAAG,gBAAgB,CAAC;IACnC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAmKA"}