@askrjs/themes 0.0.8 → 0.0.10

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 (479) hide show
  1. package/README.md +19 -13
  2. package/THEMING.md +24 -18
  3. package/dist/components/_internal/block-layout.d.ts +49 -0
  4. package/dist/components/_internal/block-layout.js +210 -0
  5. package/dist/components/_internal/block-layout.js.map +1 -0
  6. package/dist/components/_internal/jsx.js.map +1 -1
  7. package/dist/components/_internal/style.js +25 -1
  8. package/dist/components/_internal/style.js.map +1 -1
  9. package/dist/components/alert/alert.js +2 -2
  10. package/dist/components/alert/alert.js.map +1 -1
  11. package/dist/components/alert/alert.types.d.ts +0 -1
  12. package/dist/components/aside/aside.d.ts +7 -0
  13. package/dist/components/aside/aside.js +16 -0
  14. package/dist/components/aside/aside.js.map +1 -0
  15. package/dist/components/aside/aside.types.d.ts +6 -0
  16. package/dist/components/aside/index.d.ts +2 -0
  17. package/dist/components/aspect-ratio/aspect-ratio.js +1 -1
  18. package/dist/components/aspect-ratio/aspect-ratio.js.map +1 -1
  19. package/dist/components/badge/index.d.ts +1 -2
  20. package/dist/components/block/block.d.ts +2 -3
  21. package/dist/components/block/block.js +16 -46
  22. package/dist/components/block/block.js.map +1 -1
  23. package/dist/components/block/block.types.d.ts +13 -23
  24. package/dist/components/block/index.d.ts +3 -3
  25. package/dist/components/brand/brand.d.ts +9 -0
  26. package/dist/components/brand/brand.js +49 -0
  27. package/dist/components/brand/brand.js.map +1 -0
  28. package/dist/components/brand/brand.types.d.ts +31 -0
  29. package/dist/components/brand/index.d.ts +2 -0
  30. package/dist/components/card/card.d.ts +3 -3
  31. package/dist/components/card/card.js +6 -11
  32. package/dist/components/card/card.js.map +1 -1
  33. package/dist/components/card/card.types.d.ts +10 -12
  34. package/dist/components/card/index.d.ts +2 -2
  35. package/dist/components/catalog.d.ts +156 -0
  36. package/dist/components/catalog.js +723 -0
  37. package/dist/components/catalog.js.map +1 -0
  38. package/dist/components/container/container.d.ts +2 -3
  39. package/dist/components/container/container.js +8 -71
  40. package/dist/components/container/container.js.map +1 -1
  41. package/dist/components/container/container.types.d.ts +5 -24
  42. package/dist/components/container/index.d.ts +2 -3
  43. package/dist/components/empty-state/empty-state.js +34 -28
  44. package/dist/components/empty-state/empty-state.js.map +1 -1
  45. package/dist/components/empty-state/empty-state.types.d.ts +3 -6
  46. package/dist/components/field/field.js +4 -2
  47. package/dist/components/field/field.js.map +1 -1
  48. package/dist/components/field/field.types.d.ts +1 -0
  49. package/dist/components/footer/footer.d.ts +13 -0
  50. package/dist/components/footer/footer.js +86 -0
  51. package/dist/components/footer/footer.js.map +1 -0
  52. package/dist/components/footer/footer.types.d.ts +37 -0
  53. package/dist/components/footer/index.d.ts +2 -0
  54. package/dist/components/grid/grid.d.ts +7 -0
  55. package/dist/components/grid/grid.js +76 -0
  56. package/dist/components/grid/grid.js.map +1 -0
  57. package/dist/components/grid/grid.types.d.ts +19 -0
  58. package/dist/components/grid/index.d.ts +2 -0
  59. package/dist/components/header/header.js +9 -6
  60. package/dist/components/header/header.js.map +1 -1
  61. package/dist/components/header/header.types.d.ts +5 -5
  62. package/dist/components/header/index.d.ts +2 -0
  63. package/dist/components/main/index.d.ts +2 -0
  64. package/dist/components/main/main.d.ts +7 -0
  65. package/dist/components/main/main.js +17 -0
  66. package/dist/components/main/main.js.map +1 -0
  67. package/dist/components/main/main.types.d.ts +6 -0
  68. package/dist/components/nav/index.d.ts +2 -2
  69. package/dist/components/nav/nav.d.ts +8 -6
  70. package/dist/components/nav/nav.js +93 -58
  71. package/dist/components/nav/nav.js.map +1 -1
  72. package/dist/components/nav/nav.types.d.ts +16 -20
  73. package/dist/components/navbar/index.d.ts +4 -5
  74. package/dist/components/navbar/navbar.d.ts +3 -38
  75. package/dist/components/navbar/navbar.js +102 -198
  76. package/dist/components/navbar/navbar.js.map +1 -1
  77. package/dist/components/navbar/navbar.types.d.ts +14 -24
  78. package/dist/components/page/index.d.ts +2 -0
  79. package/dist/components/page/page.d.ts +7 -0
  80. package/dist/components/page/page.js +22 -0
  81. package/dist/components/page/page.js.map +1 -0
  82. package/dist/components/page/page.types.d.ts +6 -0
  83. package/dist/components/page-header/index.d.ts +2 -0
  84. package/dist/components/page-header/page-header.d.ts +7 -0
  85. package/dist/components/page-header/page-header.js +37 -0
  86. package/dist/components/page-header/page-header.js.map +1 -0
  87. package/dist/components/page-header/page-header.types.d.ts +10 -0
  88. package/dist/components/section/index.d.ts +2 -3
  89. package/dist/components/section/section.d.ts +2 -3
  90. package/dist/components/section/section.js +7 -30
  91. package/dist/components/section/section.js.map +1 -1
  92. package/dist/components/section/section.types.d.ts +3 -20
  93. package/dist/components/separator/index.d.ts +1 -2
  94. package/dist/components/sidebar/index.d.ts +2 -0
  95. package/dist/components/sidebar/sidebar.d.ts +17 -2
  96. package/dist/components/sidebar/sidebar.js +115 -211
  97. package/dist/components/sidebar/sidebar.js.map +1 -1
  98. package/dist/components/sidebar/sidebar.types.d.ts +21 -23
  99. package/dist/components/skeleton/index.d.ts +1 -2
  100. package/dist/components/skeleton/skeleton.js +12 -1
  101. package/dist/components/skeleton/skeleton.js.map +1 -1
  102. package/dist/components/skeleton/skeleton.types.d.ts +2 -0
  103. package/dist/components/spinner/index.d.ts +1 -1
  104. package/dist/components/spinner/spinner.js +6 -3
  105. package/dist/components/spinner/spinner.js.map +1 -1
  106. package/dist/components/spinner/spinner.types.d.ts +3 -1
  107. package/dist/components/stat/index.d.ts +2 -0
  108. package/dist/components/stat/stat.d.ts +10 -0
  109. package/dist/components/stat/stat.js +52 -0
  110. package/dist/components/stat/stat.js.map +1 -0
  111. package/dist/components/stat/stat.types.d.ts +24 -0
  112. package/dist/components/text/index.d.ts +2 -0
  113. package/dist/components/text/text.d.ts +7 -0
  114. package/dist/components/text/text.js +28 -0
  115. package/dist/components/text/text.js.map +1 -0
  116. package/dist/components/text/text.types.d.ts +26 -0
  117. package/dist/components/theme/theme.js +97 -18
  118. package/dist/components/theme/theme.js.map +1 -1
  119. package/dist/components/toolbar/index.d.ts +2 -0
  120. package/dist/components/toolbar/toolbar.d.ts +7 -0
  121. package/dist/components/toolbar/toolbar.js +30 -0
  122. package/dist/components/toolbar/toolbar.js.map +1 -0
  123. package/dist/components/toolbar/toolbar.types.d.ts +9 -0
  124. package/dist/components.d.ts +60 -0
  125. package/dist/components.js +35 -0
  126. package/dist/controls.d.ts +2 -2
  127. package/dist/controls.js +3 -3
  128. package/dist/core.d.ts +36 -0
  129. package/dist/core.js +19 -0
  130. package/dist/navs.d.ts +3 -15
  131. package/dist/navs.js +2 -8
  132. package/dist/overlays.d.ts +2 -2
  133. package/dist/overlays.js +2 -2
  134. package/dist/surfaces.d.ts +10 -8
  135. package/dist/surfaces.js +6 -4
  136. package/dist/themes/default/index.css +3691 -3959
  137. package/package.json +239 -73
  138. package/src/components/_internal/block-layout.ts +354 -0
  139. package/src/components/_internal/jsx.ts +18 -6
  140. package/src/components/_internal/style.ts +42 -4
  141. package/src/components/alert/alert.tsx +1 -2
  142. package/src/components/alert/alert.types.ts +0 -1
  143. package/src/components/aside/aside.tsx +12 -0
  144. package/src/components/aside/aside.types.ts +3 -0
  145. package/src/components/aside/index.ts +2 -0
  146. package/src/components/aspect-ratio/aspect-ratio.tsx +1 -1
  147. package/src/components/badge/index.ts +0 -1
  148. package/src/components/block/block.a11y.ts +0 -6
  149. package/src/components/block/block.tsx +40 -56
  150. package/src/components/block/block.types.ts +59 -41
  151. package/src/components/block/index.ts +1 -10
  152. package/src/components/brand/brand.tsx +61 -0
  153. package/src/components/brand/brand.types.ts +39 -0
  154. package/src/components/brand/index.ts +2 -0
  155. package/src/components/card/card.tsx +6 -18
  156. package/src/components/card/card.types.ts +9 -11
  157. package/src/components/card/index.ts +2 -3
  158. package/src/components/catalog.tsx +713 -0
  159. package/src/components/container/container.a11y.ts +0 -5
  160. package/src/components/container/container.tsx +18 -128
  161. package/src/components/container/container.types.ts +3 -32
  162. package/src/components/container/index.ts +1 -8
  163. package/src/components/empty-state/empty-state.tsx +17 -35
  164. package/src/components/empty-state/empty-state.types.ts +3 -5
  165. package/src/components/field/field.tsx +3 -1
  166. package/src/components/field/field.types.ts +1 -0
  167. package/src/components/footer/footer.tsx +88 -0
  168. package/src/components/footer/footer.types.ts +40 -0
  169. package/src/components/footer/index.ts +10 -0
  170. package/src/components/grid/grid.tsx +113 -0
  171. package/src/components/grid/grid.types.ts +20 -0
  172. package/src/components/grid/index.ts +2 -0
  173. package/src/components/header/header.tsx +10 -7
  174. package/src/components/header/header.types.ts +4 -4
  175. package/src/components/header/index.ts +1 -2
  176. package/src/components/main/index.ts +2 -0
  177. package/src/components/main/main.tsx +12 -0
  178. package/src/components/main/main.types.ts +3 -0
  179. package/src/components/nav/index.ts +7 -9
  180. package/src/components/nav/nav.tsx +153 -110
  181. package/src/components/nav/nav.types.ts +26 -27
  182. package/src/components/navbar/index.ts +4 -11
  183. package/src/components/navbar/navbar.tsx +104 -251
  184. package/src/components/navbar/navbar.types.ts +16 -42
  185. package/src/components/page/index.ts +2 -0
  186. package/src/components/page/page.tsx +17 -0
  187. package/src/components/page/page.types.ts +3 -0
  188. package/src/components/page-header/index.ts +2 -0
  189. package/src/components/page-header/page-header.tsx +29 -0
  190. package/src/components/page-header/page-header.types.ts +7 -0
  191. package/src/components/section/index.ts +1 -7
  192. package/src/components/section/section.a11y.ts +0 -1
  193. package/src/components/section/section.tsx +9 -35
  194. package/src/components/section/section.types.ts +2 -22
  195. package/src/components/separator/index.ts +4 -9
  196. package/src/components/sidebar/index.ts +27 -5
  197. package/src/components/sidebar/sidebar.tsx +145 -317
  198. package/src/components/sidebar/sidebar.types.ts +21 -28
  199. package/src/components/skeleton/index.ts +1 -2
  200. package/src/components/skeleton/skeleton.tsx +33 -1
  201. package/src/components/skeleton/skeleton.types.ts +2 -0
  202. package/src/components/spinner/index.ts +1 -1
  203. package/src/components/spinner/spinner.tsx +7 -2
  204. package/src/components/spinner/spinner.types.ts +3 -0
  205. package/src/components/stat/index.ts +2 -0
  206. package/src/components/stat/stat.tsx +47 -0
  207. package/src/components/stat/stat.types.ts +24 -0
  208. package/src/components/text/index.ts +2 -0
  209. package/src/components/text/text.tsx +39 -0
  210. package/src/components/text/text.types.ts +35 -0
  211. package/src/components/theme/theme.tsx +163 -21
  212. package/src/components/toolbar/index.ts +2 -0
  213. package/src/components/toolbar/toolbar.tsx +24 -0
  214. package/src/components/toolbar/toolbar.types.ts +6 -0
  215. package/src/components.ts +289 -0
  216. package/src/controls.ts +69 -2
  217. package/src/core.ts +42 -0
  218. package/src/navs.ts +9 -24
  219. package/src/overlays.ts +101 -59
  220. package/src/parity.ts +125 -0
  221. package/src/surfaces.ts +60 -13
  222. package/src/themes/default/index.css +11 -14
  223. package/src/themes/default/styles/actions/button-group.css +6 -6
  224. package/src/themes/default/styles/actions/button.css +98 -60
  225. package/src/themes/default/styles/actions/toggle-group.css +61 -25
  226. package/src/themes/default/styles/base/text.css +87 -0
  227. package/src/themes/default/styles/base/typography.css +24 -117
  228. package/src/themes/default/styles/base/utilities.css +0 -250
  229. package/src/themes/default/styles/disclosure/accordion.css +35 -28
  230. package/src/themes/default/styles/display/alert.css +7 -7
  231. package/src/themes/default/styles/display/avatar.css +7 -1
  232. package/src/themes/default/styles/display/badge.css +10 -10
  233. package/src/themes/default/styles/display/card.css +10 -47
  234. package/src/themes/default/styles/display/catalog.css +753 -0
  235. package/src/themes/default/styles/display/coverage.css +30 -305
  236. package/src/themes/default/styles/display/progress-circle.css +2 -0
  237. package/src/themes/default/styles/display/scroll-area.css +29 -24
  238. package/src/themes/default/styles/display/spinner.css +38 -1
  239. package/src/themes/default/styles/display/stat.css +21 -0
  240. package/src/themes/default/styles/display/table.css +39 -12
  241. package/src/themes/default/styles/display/virtual-list.css +24 -13
  242. package/src/themes/default/styles/display/virtual-table.css +58 -36
  243. package/src/themes/default/styles/forms/checkbox.css +12 -21
  244. package/src/themes/default/styles/forms/input-group.css +2 -1
  245. package/src/themes/default/styles/forms/input.css +11 -12
  246. package/src/themes/default/styles/forms/radio-group.css +44 -27
  247. package/src/themes/default/styles/forms/select.css +33 -35
  248. package/src/themes/default/styles/forms/slider.css +61 -47
  249. package/src/themes/default/styles/forms/switch.css +18 -23
  250. package/src/themes/default/styles/forms/textarea.css +12 -12
  251. package/src/themes/default/styles/layout/block.css +96 -12
  252. package/src/themes/default/styles/layout/grid.css +78 -0
  253. package/src/themes/default/styles/layout/layout.css +502 -772
  254. package/src/themes/default/styles/layout/patterns.css +0 -155
  255. package/src/themes/default/styles/navigation/nav.css +104 -154
  256. package/src/themes/default/styles/overlays/alert-dialog.css +2 -2
  257. package/src/themes/default/styles/overlays/dialog.css +76 -22
  258. package/src/themes/default/styles/overlays/dropdown.css +108 -31
  259. package/src/themes/default/styles/overlays/hover-card.css +39 -17
  260. package/src/themes/default/styles/overlays/menubar.css +223 -0
  261. package/src/themes/default/styles/overlays/popover.css +69 -23
  262. package/src/themes/default/styles/overlays/toast.css +91 -33
  263. package/src/themes/default/styles/overlays/tooltip.css +88 -14
  264. package/src/themes/default/styles/shell/brand.css +48 -0
  265. package/src/themes/default/styles/shell/footer.css +72 -0
  266. package/src/themes/default/styles/shell/header.css +7 -50
  267. package/src/themes/default/styles/shell/navbar.css +226 -453
  268. package/src/themes/default/styles/shell/sidebar.css +243 -829
  269. package/src/themes/default/tokens.css +145 -98
  270. package/templates/theme/index.css +11 -14
  271. package/templates/theme/styles/actions/button-group.css +6 -6
  272. package/templates/theme/styles/actions/button.css +98 -60
  273. package/templates/theme/styles/actions/toggle-group.css +61 -25
  274. package/templates/theme/styles/base/text.css +87 -0
  275. package/templates/theme/styles/base/typography.css +24 -117
  276. package/templates/theme/styles/disclosure/accordion.css +35 -28
  277. package/templates/theme/styles/display/alert.css +7 -7
  278. package/templates/theme/styles/display/avatar.css +7 -1
  279. package/templates/theme/styles/display/badge.css +10 -10
  280. package/templates/theme/styles/display/card.css +10 -47
  281. package/templates/theme/styles/display/catalog.css +753 -0
  282. package/templates/theme/styles/display/coverage.css +30 -305
  283. package/templates/theme/styles/display/scroll-area.css +29 -24
  284. package/templates/theme/styles/display/spinner.css +38 -1
  285. package/templates/theme/styles/display/stat.css +21 -0
  286. package/templates/theme/styles/display/table.css +39 -12
  287. package/templates/theme/styles/display/virtual-list.css +24 -13
  288. package/templates/theme/styles/display/virtual-table.css +58 -36
  289. package/templates/theme/styles/forms/checkbox.css +12 -21
  290. package/templates/theme/styles/forms/input.css +11 -12
  291. package/templates/theme/styles/forms/radio-group.css +44 -27
  292. package/templates/theme/styles/forms/select.css +33 -35
  293. package/templates/theme/styles/forms/slider.css +61 -47
  294. package/templates/theme/styles/forms/switch.css +18 -23
  295. package/templates/theme/styles/forms/textarea.css +12 -12
  296. package/templates/theme/styles/layout/block.css +96 -12
  297. package/templates/theme/styles/layout/grid.css +78 -0
  298. package/templates/theme/styles/layout/layout.css +676 -1
  299. package/templates/theme/styles/layout/patterns.css +0 -155
  300. package/templates/theme/styles/navigation/nav.css +104 -154
  301. package/templates/theme/styles/overlays/alert-dialog.css +2 -2
  302. package/templates/theme/styles/overlays/dialog.css +76 -22
  303. package/templates/theme/styles/overlays/dropdown.css +108 -31
  304. package/templates/theme/styles/overlays/hover-card.css +39 -17
  305. package/templates/theme/styles/overlays/menubar.css +223 -0
  306. package/templates/theme/styles/overlays/popover.css +69 -23
  307. package/templates/theme/styles/overlays/toast.css +80 -33
  308. package/templates/theme/styles/overlays/tooltip.css +88 -14
  309. package/templates/theme/styles/shell/brand.css +48 -0
  310. package/templates/theme/styles/shell/footer.css +72 -0
  311. package/templates/theme/styles/shell/header.css +7 -50
  312. package/templates/theme/styles/shell/navbar.css +226 -453
  313. package/templates/theme/styles/shell/sidebar.css +197 -779
  314. package/templates/theme/tokens.css +145 -98
  315. package/dist/components/_internal/box-layout.js +0 -116
  316. package/dist/components/_internal/box-layout.js.map +0 -1
  317. package/dist/components/_internal/layout.d.ts +0 -9
  318. package/dist/components/_internal/layout.js +0 -147
  319. package/dist/components/_internal/layout.js.map +0 -1
  320. package/dist/components/badge/badge.a11y.d.ts +0 -17
  321. package/dist/components/block/block.a11y.d.ts +0 -20
  322. package/dist/components/box/box.a11y.d.ts +0 -14
  323. package/dist/components/box/box.d.ts +0 -9
  324. package/dist/components/box/box.js +0 -36
  325. package/dist/components/box/box.js.map +0 -1
  326. package/dist/components/box/box.types.d.ts +0 -72
  327. package/dist/components/box/index.d.ts +0 -3
  328. package/dist/components/breadcrumb/breadcrumb.a11y.d.ts +0 -17
  329. package/dist/components/breadcrumb/breadcrumb.a11y.js +0 -15
  330. package/dist/components/breadcrumb/breadcrumb.a11y.js.map +0 -1
  331. package/dist/components/breadcrumb/breadcrumb.d.ts +0 -18
  332. package/dist/components/breadcrumb/breadcrumb.js +0 -113
  333. package/dist/components/breadcrumb/breadcrumb.js.map +0 -1
  334. package/dist/components/breadcrumb/breadcrumb.types.d.ts +0 -65
  335. package/dist/components/breadcrumb/index.d.ts +0 -3
  336. package/dist/components/container/container.a11y.d.ts +0 -19
  337. package/dist/components/flex/flex.a11y.d.ts +0 -22
  338. package/dist/components/flex/flex.d.ts +0 -9
  339. package/dist/components/flex/flex.js +0 -115
  340. package/dist/components/flex/flex.js.map +0 -1
  341. package/dist/components/flex/flex.types.d.ts +0 -42
  342. package/dist/components/flex/index.d.ts +0 -3
  343. package/dist/components/header/header.a11y.d.ts +0 -14
  344. package/dist/components/header/header.a11y.js +0 -12
  345. package/dist/components/header/header.a11y.js.map +0 -1
  346. package/dist/components/inline/index.d.ts +0 -8
  347. package/dist/components/inline/index.js +0 -13
  348. package/dist/components/inline/index.js.map +0 -1
  349. package/dist/components/list-group/index.d.ts +0 -2
  350. package/dist/components/list-group/list-group.d.ts +0 -9
  351. package/dist/components/list-group/list-group.js +0 -43
  352. package/dist/components/list-group/list-group.js.map +0 -1
  353. package/dist/components/list-group/list-group.types.d.ts +0 -32
  354. package/dist/components/navbar/navbar-panel.js +0 -42
  355. package/dist/components/navbar/navbar-panel.js.map +0 -1
  356. package/dist/components/navbar/navbar.context.js +0 -13
  357. package/dist/components/navbar/navbar.context.js.map +0 -1
  358. package/dist/components/navbar/navbar.render.js +0 -26
  359. package/dist/components/navbar/navbar.render.js.map +0 -1
  360. package/dist/components/navbar/navbar.shared.js +0 -18
  361. package/dist/components/navbar/navbar.shared.js.map +0 -1
  362. package/dist/components/pagination/index.d.ts +0 -2
  363. package/dist/components/pagination/pagination.d.ts +0 -11
  364. package/dist/components/pagination/pagination.js +0 -95
  365. package/dist/components/pagination/pagination.js.map +0 -1
  366. package/dist/components/pagination/pagination.types.d.ts +0 -40
  367. package/dist/components/section/section.a11y.d.ts +0 -15
  368. package/dist/components/separator/separator.a11y.d.ts +0 -17
  369. package/dist/components/separator/separator.a11y.js +0 -15
  370. package/dist/components/separator/separator.a11y.js.map +0 -1
  371. package/dist/components/shell/index.d.ts +0 -3
  372. package/dist/components/shell/shell-nav.types.d.ts +0 -7
  373. package/dist/components/shell/shell-panel.js +0 -54
  374. package/dist/components/shell/shell-panel.js.map +0 -1
  375. package/dist/components/shell/shell-responsive.js +0 -118
  376. package/dist/components/shell/shell-responsive.js.map +0 -1
  377. package/dist/components/shell/shell.a11y.d.ts +0 -23
  378. package/dist/components/shell/shell.a11y.js +0 -23
  379. package/dist/components/shell/shell.a11y.js.map +0 -1
  380. package/dist/components/shell/shell.d.ts +0 -13
  381. package/dist/components/shell/shell.js +0 -69
  382. package/dist/components/shell/shell.js.map +0 -1
  383. package/dist/components/shell/shell.types.d.ts +0 -58
  384. package/dist/components/sidebar/sidebar-panel.d.ts +0 -7
  385. package/dist/components/sidebar/sidebar-panel.js +0 -49
  386. package/dist/components/sidebar/sidebar-panel.js.map +0 -1
  387. package/dist/components/sidebar/sidebar-toggle.d.ts +0 -7
  388. package/dist/components/sidebar/sidebar-toggle.js +0 -8
  389. package/dist/components/sidebar/sidebar-toggle.js.map +0 -1
  390. package/dist/components/sidebar/sidebar.context.js +0 -21
  391. package/dist/components/sidebar/sidebar.context.js.map +0 -1
  392. package/dist/components/sidebar/sidebar.shared.js +0 -12
  393. package/dist/components/sidebar/sidebar.shared.js.map +0 -1
  394. package/dist/components/skeleton/skeleton.a11y.d.ts +0 -16
  395. package/dist/components/spacer/index.d.ts +0 -3
  396. package/dist/components/spacer/spacer.a11y.d.ts +0 -17
  397. package/dist/components/spacer/spacer.d.ts +0 -8
  398. package/dist/components/spacer/spacer.js +0 -49
  399. package/dist/components/spacer/spacer.js.map +0 -1
  400. package/dist/components/spacer/spacer.types.d.ts +0 -26
  401. package/dist/components/stack/index.d.ts +0 -3
  402. package/dist/components/stack/stack.a11y.d.ts +0 -18
  403. package/dist/components/stack/stack.d.ts +0 -8
  404. package/dist/components/stack/stack.js +0 -16
  405. package/dist/components/stack/stack.js.map +0 -1
  406. package/dist/components/stack/stack.types.d.ts +0 -22
  407. package/dist/feedback.d.ts +0 -5
  408. package/dist/feedback.js +0 -4
  409. package/dist/layouts.d.ts +0 -25
  410. package/dist/layouts.js +0 -11
  411. package/dist/shells.d.ts +0 -16
  412. package/dist/shells.js +0 -11
  413. package/src/components/_internal/box-layout.ts +0 -164
  414. package/src/components/_internal/layout.ts +0 -211
  415. package/src/components/box/box.a11y.ts +0 -11
  416. package/src/components/box/box.tsx +0 -38
  417. package/src/components/box/box.types.ts +0 -76
  418. package/src/components/box/index.ts +0 -11
  419. package/src/components/breadcrumb/breadcrumb.a11y.ts +0 -15
  420. package/src/components/breadcrumb/breadcrumb.tsx +0 -123
  421. package/src/components/breadcrumb/breadcrumb.types.ts +0 -74
  422. package/src/components/breadcrumb/index.ts +0 -24
  423. package/src/components/flex/flex.a11y.ts +0 -19
  424. package/src/components/flex/flex.tsx +0 -162
  425. package/src/components/flex/flex.types.ts +0 -51
  426. package/src/components/flex/index.ts +0 -16
  427. package/src/components/inline/index.tsx +0 -28
  428. package/src/components/list-group/index.ts +0 -7
  429. package/src/components/list-group/list-group.tsx +0 -74
  430. package/src/components/list-group/list-group.types.ts +0 -32
  431. package/src/components/navbar/navbar-panel.tsx +0 -62
  432. package/src/components/navbar/navbar.context.ts +0 -22
  433. package/src/components/navbar/navbar.render.tsx +0 -32
  434. package/src/components/navbar/navbar.shared.ts +0 -21
  435. package/src/components/pagination/index.ts +0 -8
  436. package/src/components/pagination/pagination.tsx +0 -158
  437. package/src/components/pagination/pagination.types.ts +0 -41
  438. package/src/components/shell/index.ts +0 -16
  439. package/src/components/shell/shell-nav.types.ts +0 -3
  440. package/src/components/shell/shell-panel.tsx +0 -85
  441. package/src/components/shell/shell-responsive.tsx +0 -246
  442. package/src/components/shell/shell.a11y.ts +0 -20
  443. package/src/components/shell/shell.tsx +0 -74
  444. package/src/components/shell/shell.types.ts +0 -71
  445. package/src/components/sidebar/sidebar-panel.tsx +0 -67
  446. package/src/components/sidebar/sidebar-toggle.tsx +0 -5
  447. package/src/components/sidebar/sidebar.context.ts +0 -40
  448. package/src/components/sidebar/sidebar.shared.ts +0 -12
  449. package/src/components/spacer/index.ts +0 -9
  450. package/src/components/spacer/spacer.a11y.ts +0 -14
  451. package/src/components/spacer/spacer.tsx +0 -61
  452. package/src/components/spacer/spacer.types.ts +0 -31
  453. package/src/components/stack/index.ts +0 -3
  454. package/src/components/stack/stack.a11y.ts +0 -15
  455. package/src/components/stack/stack.tsx +0 -13
  456. package/src/components/stack/stack.types.ts +0 -22
  457. package/src/feedback.ts +0 -6
  458. package/src/layouts.ts +0 -19
  459. package/src/shells.ts +0 -13
  460. package/src/themes/default/styles/actions/toggle.css +0 -50
  461. package/src/themes/default/styles/disclosure/collapsible.css +0 -58
  462. package/src/themes/default/styles/display/list-group.css +0 -84
  463. package/src/themes/default/styles/forms/form.css +0 -5
  464. package/src/themes/default/styles/layout/responsive-layout.css +0 -230
  465. package/src/themes/default/styles/navigation/breadcrumb.css +0 -45
  466. package/src/themes/default/styles/navigation/menu.css +0 -203
  467. package/src/themes/default/styles/navigation/menubar.css +0 -255
  468. package/src/themes/default/styles/navigation/pagination.css +0 -91
  469. package/src/themes/default/styles/shell/theme.css +0 -37
  470. package/templates/theme/styles/actions/toggle.css +0 -50
  471. package/templates/theme/styles/disclosure/collapsible.css +0 -58
  472. package/templates/theme/styles/display/list-group.css +0 -84
  473. package/templates/theme/styles/forms/form.css +0 -5
  474. package/templates/theme/styles/layout/responsive-layout.css +0 -230
  475. package/templates/theme/styles/navigation/breadcrumb.css +0 -45
  476. package/templates/theme/styles/navigation/menu.css +0 -203
  477. package/templates/theme/styles/navigation/menubar.css +0 -255
  478. package/templates/theme/styles/navigation/pagination.css +0 -91
  479. package/templates/theme/styles/shell/theme.css +0 -37
@@ -2,11 +2,6 @@ export const CONTAINER_A11Y_CONTRACT = {
2
2
  DATA_ATTRIBUTES: {
3
3
  slot: "data-slot" as const,
4
4
  layout: "data-ak-layout" as const,
5
- variant: "data-variant" as const,
6
- maxWidth: "data-max-width" as const,
7
- padding: "data-padding" as const,
8
- size: "data-size" as const,
9
- align: "data-align" as const,
10
5
  },
11
6
  SLOT_VALUES: {
12
7
  root: "container" as const,
@@ -1,129 +1,19 @@
1
- import { Slot } from "@askrjs/askr/foundations";
2
- import { mergeProps } from "../_internal/merge-props";
3
- import {
4
- applyBoxLayoutStyles,
5
- splitBoxLayoutProps,
6
- withBoxLayoutClass,
7
- } from "../_internal/box-layout";
8
- import {
9
- isResponsiveValue,
10
- resolveContainerSizeValue,
11
- resolveInlineAlignValue,
12
- resolveSpaceValue,
13
- serializeResponsiveValueIf,
14
- setResponsiveStyleVar,
15
- } from "../_internal/layout";
16
- import type { ContainerAsChildProps, ContainerNativeProps } from "./container.types";
17
-
18
- const CONTAINER_WIDTH_TOKENS = new Set(["1", "2", "3", "4", "sm", "md", "lg", "xl", "fluid"]);
19
-
20
- function isContainerWidthToken(value: unknown): value is string {
21
- return typeof value === "string" && CONTAINER_WIDTH_TOKENS.has(value.trim());
22
- }
23
-
24
- function isContainerAlignToken(value: unknown): value is "left" | "center" | "right" {
25
- return typeof value === "string" && ["left", "center", "right"].includes(value.trim());
26
- }
27
-
28
- function hasStyleValue(value: unknown): boolean {
29
- if (typeof value === "string") return value.trim().length > 0;
30
- if (value && typeof value === "object") {
31
- return Object.keys(value as Record<string, unknown>).length > 0;
32
- }
33
-
34
- return false;
35
- }
36
-
37
- function isStaticValue(value: unknown): boolean {
38
- return !isResponsiveValue(value as Record<string, unknown> | undefined);
39
- }
40
-
41
- export function Container(props: ContainerNativeProps): JSX.Element;
42
- export function Container(props: ContainerAsChildProps): JSX.Element;
43
- export function Container(props: ContainerNativeProps | ContainerAsChildProps) {
44
- const {
45
- asChild,
46
- children,
47
- variant,
48
- maxWidth,
49
- padding,
50
- size,
51
- align = "center",
52
- ref,
53
- style: userStyle,
54
- ...rest
55
- } = props;
56
-
57
- const responsiveVariant =
58
- size === undefined && maxWidth === undefined ? (variant ?? "default") : undefined;
59
-
60
- const { boxProps, rest: passthroughProps } = splitBoxLayoutProps(rest);
61
- const layoutStyle: Record<string, string | number> = {
62
- boxSizing: "border-box",
63
- width: "100%",
64
- };
65
- applyBoxLayoutStyles(layoutStyle, boxProps);
66
-
67
- const widthValue = maxWidth ?? size;
68
- const usesInlineMaxWidth =
69
- boxProps.maxWidth === undefined &&
70
- widthValue !== undefined &&
71
- (isResponsiveValue(widthValue) || !isContainerWidthToken(widthValue));
72
-
73
- if (usesInlineMaxWidth) {
74
- setResponsiveStyleVar(layoutStyle, "max-width", widthValue, (value) =>
75
- typeof value === "string" && isContainerWidthToken(value)
76
- ? resolveContainerSizeValue(value)
77
- : value,
78
- );
79
- }
80
-
81
- if (
82
- padding !== undefined &&
83
- boxProps.px === undefined &&
84
- boxProps.pl === undefined &&
85
- boxProps.pr === undefined
86
- ) {
87
- setResponsiveStyleVar(layoutStyle, "px", padding, resolveSpaceValue);
88
- }
89
-
90
- const applyAlign = (side: "marginLeft" | "marginRight", value: typeof align) => {
91
- setResponsiveStyleVar(layoutStyle, side === "marginLeft" ? "ml" : "mr", value, (input) => {
92
- const margins = resolveInlineAlignValue(input);
93
- return side === "marginLeft" ? margins.marginLeft : margins.marginRight;
94
- });
95
- };
96
-
97
- if (boxProps.ml === undefined && boxProps.mr === undefined && isResponsiveValue(align)) {
98
- applyAlign("marginLeft", align);
99
- applyAlign("marginRight", align);
100
- }
101
-
102
- const layoutClass =
103
- Object.keys(layoutStyle).length > 2 || hasStyleValue(userStyle)
104
- ? withBoxLayoutClass(layoutStyle, userStyle)
105
- : undefined;
106
-
107
- const finalProps = mergeProps(passthroughProps, {
108
- ref,
109
- "data-slot": "container",
110
- "data-ak-layout": "true",
111
- "data-variant": responsiveVariant,
112
- "data-size": isStaticValue(size)
113
- ? serializeResponsiveValueIf(size, isContainerWidthToken)
114
- : undefined,
115
- "data-align": isStaticValue(align)
116
- ? serializeResponsiveValueIf(align, isContainerAlignToken)
117
- : undefined,
118
- "data-max-width": isStaticValue(maxWidth)
119
- ? serializeResponsiveValueIf(maxWidth, isContainerWidthToken)
120
- : undefined,
121
- ...(layoutClass ? { class: layoutClass } : {}),
122
- });
123
-
124
- if (asChild) {
125
- return <Slot asChild {...finalProps} children={children} />;
126
- }
127
-
128
- return <div {...finalProps}>{children}</div>;
1
+ import { Block } from "../block";
2
+ import type { ContainerProps } from "./container.types";
3
+
4
+ export function Container(props: ContainerProps): JSX.Element {
5
+ const { children, size = "page", ...rest } = props;
6
+
7
+ return (
8
+ <Block
9
+ maxWidth={size}
10
+ marginX="auto"
11
+ paddingX="page"
12
+ width="full"
13
+ {...rest}
14
+ data-slot="container"
15
+ >
16
+ {children}
17
+ </Block>
18
+ );
129
19
  }
@@ -1,34 +1,5 @@
1
- import type { JSXElement } from "@askrjs/askr/foundations";
2
- import type { Ref } from "@askrjs/askr/foundations/utilities";
3
- import type { BoxLayoutOwnProps, LayoutResponsive } from "../box/box.types";
1
+ import type { BlockDivProps, BlockSize } from "../block";
4
2
 
5
- export type ContainerVariant = "default" | "sm" | "md" | "lg" | "xl" | "xxl" | "fluid";
6
-
7
- export type ContainerOwnProps = BoxLayoutOwnProps & {
8
- /** Bootstrap-like responsive container variant. */
9
- variant?: ContainerVariant;
10
- /** Radix-style container size token. */
11
- size?: LayoutResponsive<"1" | "2" | "3" | "4" | "sm" | "md" | "lg" | "xl" | "fluid">;
12
- /** Horizontal alignment of the constrained container. */
13
- align?: LayoutResponsive<"left" | "center" | "right">;
14
- /** Compatibility max-width override. */
15
- maxWidth?: LayoutResponsive<string>;
16
- /** Compatibility horizontal padding override. */
17
- padding?: LayoutResponsive<string | number>;
18
- children?: unknown;
3
+ export type ContainerProps = Omit<BlockDivProps, "maxWidth"> & {
4
+ size?: BlockSize;
19
5
  };
20
-
21
- export type ContainerNativeProps = Omit<JSX.IntrinsicElements["div"], "children" | "ref"> &
22
- ContainerOwnProps & {
23
- asChild?: false;
24
- ref?: Ref<HTMLDivElement>;
25
- };
26
-
27
- export type ContainerAsChildProps = ContainerOwnProps & {
28
- asChild: true;
29
- children: JSXElement;
30
- ref?: Ref<unknown>;
31
- style?: JSX.IntrinsicElements["div"]["style"];
32
- };
33
-
34
- export type ContainerProps = ContainerNativeProps | ContainerAsChildProps;
@@ -1,9 +1,2 @@
1
1
  export { Container } from "./container";
2
- export { CONTAINER_A11Y_CONTRACT, type ContainerA11yContract } from "./container.a11y";
3
- export type {
4
- ContainerProps,
5
- ContainerVariant,
6
- ContainerOwnProps,
7
- ContainerNativeProps,
8
- ContainerAsChildProps,
9
- } from "./container.types";
2
+ export type { ContainerProps } from "./container.types";
@@ -1,42 +1,24 @@
1
- import { classes } from "../_internal/classes";
1
+ import { Block } from "../block";
2
2
  import type { EmptyStateProps } from "./empty-state.types";
3
3
 
4
4
  export function EmptyState(props: EmptyStateProps): JSX.Element {
5
- const {
6
- icon,
7
- title,
8
- titleAs: TitleTag = "h2",
9
- description,
10
- actions,
11
- children,
12
- ref,
13
- class: className,
14
- ...rest
15
- } = props;
5
+ const { icon, title, titleAs: TitleTag = "h2", description, action, children, ...rest } = props;
16
6
 
17
7
  return (
18
- <div {...rest} ref={ref} class={classes("empty-state", className)} data-slot="empty-state">
19
- {icon !== undefined ? (
20
- <div class="empty-state-icon" data-slot="empty-state-icon">
21
- {icon}
22
- </div>
23
- ) : null}
24
- {title !== undefined ? (
25
- <TitleTag class="empty-state-title" data-slot="empty-state-title">
26
- {title}
27
- </TitleTag>
28
- ) : null}
29
- {description !== undefined ? (
30
- <p class="empty-state-description" data-slot="empty-state-description">
31
- {description}
32
- </p>
33
- ) : null}
34
- {children}
35
- {actions !== undefined ? (
36
- <div class="empty-state-actions" data-slot="empty-state-actions">
37
- {actions}
38
- </div>
39
- ) : null}
40
- </div>
8
+ <Block center minHeight="content" padding="xl" {...rest} data-slot="empty-state">
9
+ <Block align="center" gap="md" maxWidth="sm" data-slot="empty-state-content">
10
+ {icon !== undefined ? <div data-slot="empty-state-icon">{icon}</div> : null}
11
+ {title !== undefined ? <TitleTag data-slot="empty-state-title">{title}</TitleTag> : null}
12
+ {description !== undefined ? (
13
+ <p data-slot="empty-state-description">{description}</p>
14
+ ) : null}
15
+ {children}
16
+ {action !== undefined ? (
17
+ <Block direction="row" justify="center" gap="sm" data-slot="empty-state-actions">
18
+ {action}
19
+ </Block>
20
+ ) : null}
21
+ </Block>
22
+ </Block>
41
23
  );
42
24
  }
@@ -1,13 +1,11 @@
1
- import type { Ref } from "@askrjs/askr/foundations/utilities";
1
+ import type { BlockDivProps } from "../block";
2
2
 
3
3
  export type EmptyStateHeadingTag = "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
4
4
 
5
- export type EmptyStateProps = Omit<JSX.IntrinsicElements["div"], "children"> & {
5
+ export type EmptyStateProps = BlockDivProps & {
6
6
  icon?: unknown;
7
7
  title?: unknown;
8
8
  titleAs?: EmptyStateHeadingTag;
9
9
  description?: unknown;
10
- actions?: unknown;
11
- children?: unknown;
12
- ref?: Ref<HTMLDivElement>;
10
+ action?: unknown;
13
11
  };
@@ -3,11 +3,12 @@ import { mergeProps } from "../_internal/merge-props";
3
3
  import type { FieldErrorProps, FieldHintProps, FieldProps } from "./field.types";
4
4
 
5
5
  export function Field(props: FieldProps): JSX.Element {
6
- const { children, class: className, ref, ...rest } = props;
6
+ const { children, class: className, invalid = false, ref, ...rest } = props;
7
7
  const finalProps = mergeProps(rest, {
8
8
  class: classes("field", className),
9
9
  ref,
10
10
  "data-slot": "field",
11
+ "data-invalid": invalid ? "true" : undefined,
11
12
  });
12
13
 
13
14
  return <div {...finalProps}>{children}</div>;
@@ -29,6 +30,7 @@ export function FieldError(props: FieldErrorProps): JSX.Element {
29
30
  const finalProps = mergeProps(rest, {
30
31
  class: classes("field-error", className),
31
32
  ref,
33
+ role: "alert",
32
34
  "data-slot": "field-error",
33
35
  });
34
36
 
@@ -5,6 +5,7 @@ type ParagraphProps = Omit<JSX.IntrinsicElements["p"], "children" | "ref">;
5
5
 
6
6
  export type FieldProps = DivProps & {
7
7
  children?: unknown;
8
+ invalid?: boolean;
8
9
  ref?: Ref<HTMLDivElement>;
9
10
  };
10
11
 
@@ -0,0 +1,88 @@
1
+ import { Block } from "../block";
2
+ import { classes } from "../_internal/classes";
3
+ import { mergeProps } from "../_internal/merge-props";
4
+ import type {
5
+ FooterContentProps,
6
+ FooterDescriptionProps,
7
+ FooterLinkProps,
8
+ FooterLinksProps,
9
+ FooterProps,
10
+ FooterSectionProps,
11
+ FooterTitleProps,
12
+ } from "./footer.types";
13
+
14
+ export function Footer(props: FooterProps): JSX.Element {
15
+ const { children, ...rest } = props;
16
+
17
+ return (
18
+ <Block as="footer" background="muted" borderTop {...rest} data-slot="footer">
19
+ {children}
20
+ </Block>
21
+ );
22
+ }
23
+
24
+ export function FooterContent(props: FooterContentProps): JSX.Element {
25
+ const { children, class: className, ref, ...rest } = props;
26
+ const finalProps = mergeProps(rest, {
27
+ ref,
28
+ class: classes("footer-content", className),
29
+ "data-slot": "footer-content",
30
+ });
31
+
32
+ return <div {...finalProps}>{children}</div>;
33
+ }
34
+
35
+ export function FooterSection(props: FooterSectionProps): JSX.Element {
36
+ const { children, class: className, ref, ...rest } = props;
37
+ const finalProps = mergeProps(rest, {
38
+ ref,
39
+ class: classes("footer-section", className),
40
+ "data-slot": "footer-section",
41
+ });
42
+
43
+ return <div {...finalProps}>{children}</div>;
44
+ }
45
+
46
+ export function FooterTitle(props: FooterTitleProps): JSX.Element {
47
+ const { children, class: className, ref, ...rest } = props;
48
+ const finalProps = mergeProps(rest, {
49
+ ref,
50
+ class: classes("footer-title", className),
51
+ "data-slot": "footer-title",
52
+ });
53
+
54
+ return <h2 {...finalProps}>{children}</h2>;
55
+ }
56
+
57
+ export function FooterDescription(props: FooterDescriptionProps): JSX.Element {
58
+ const { children, class: className, ref, ...rest } = props;
59
+ const finalProps = mergeProps(rest, {
60
+ ref,
61
+ class: classes("footer-description", className),
62
+ "data-slot": "footer-description",
63
+ });
64
+
65
+ return <p {...finalProps}>{children}</p>;
66
+ }
67
+
68
+ export function FooterLinks(props: FooterLinksProps): JSX.Element {
69
+ const { children, class: className, ref, ...rest } = props;
70
+ const finalProps = mergeProps(rest, {
71
+ ref,
72
+ class: classes("footer-links", className),
73
+ "data-slot": "footer-links",
74
+ });
75
+
76
+ return <nav {...finalProps}>{children}</nav>;
77
+ }
78
+
79
+ export function FooterLink(props: FooterLinkProps): JSX.Element {
80
+ const { children, class: className, ref, ...rest } = props;
81
+ const finalProps = mergeProps(rest, {
82
+ ref,
83
+ class: classes("footer-link", className),
84
+ "data-slot": "footer-link",
85
+ });
86
+
87
+ return <a {...finalProps}>{children}</a>;
88
+ }
@@ -0,0 +1,40 @@
1
+ import type { BlockElementProps } from "../block";
2
+ import type { Ref } from "@askrjs/askr/foundations/utilities";
3
+
4
+ export type FooterProps = Omit<BlockElementProps<"footer">, "as">;
5
+
6
+ type DivProps = Omit<JSX.IntrinsicElements["div"], "children" | "ref">;
7
+ type HeadingProps = Omit<JSX.IntrinsicElements["h2"], "children" | "ref">;
8
+ type ParagraphProps = Omit<JSX.IntrinsicElements["p"], "children" | "ref">;
9
+ type NavProps = Omit<JSX.IntrinsicElements["nav"], "children" | "ref">;
10
+ type AnchorProps = Omit<JSX.IntrinsicElements["a"], "children" | "ref">;
11
+
12
+ export type FooterContentProps = DivProps & {
13
+ children?: unknown;
14
+ ref?: Ref<HTMLDivElement>;
15
+ };
16
+
17
+ export type FooterSectionProps = DivProps & {
18
+ children?: unknown;
19
+ ref?: Ref<HTMLDivElement>;
20
+ };
21
+
22
+ export type FooterTitleProps = HeadingProps & {
23
+ children?: unknown;
24
+ ref?: Ref<HTMLHeadingElement>;
25
+ };
26
+
27
+ export type FooterDescriptionProps = ParagraphProps & {
28
+ children?: unknown;
29
+ ref?: Ref<HTMLParagraphElement>;
30
+ };
31
+
32
+ export type FooterLinksProps = NavProps & {
33
+ children?: unknown;
34
+ ref?: Ref<HTMLElement>;
35
+ };
36
+
37
+ export type FooterLinkProps = AnchorProps & {
38
+ children?: unknown;
39
+ ref?: Ref<HTMLAnchorElement>;
40
+ };
@@ -0,0 +1,10 @@
1
+ export {
2
+ Footer,
3
+ FooterContent,
4
+ FooterDescription,
5
+ FooterLink,
6
+ FooterLinks,
7
+ FooterSection,
8
+ FooterTitle,
9
+ } from "./footer";
10
+ export type * from "./footer.types";
@@ -0,0 +1,113 @@
1
+ import { classes } from "../_internal/classes";
2
+ import { mergeLayoutStyles } from "../_internal/block-layout";
3
+ import { mergeProps } from "../_internal/merge-props";
4
+ import { styleDeclarationsToClass } from "../_internal/style";
5
+ import type { BlockSpace, LayoutBreakpoint, ResponsiveValue } from "../_internal/block-layout";
6
+ import type { GridAlign, GridColumns, GridElement, GridProps } from "./grid.types";
7
+
8
+ const DEFAULT_ELEMENT = "div";
9
+ const BREAKPOINTS: readonly LayoutBreakpoint[] = ["base", "sm", "md", "lg", "xl"];
10
+
11
+ const SPACE_TOKEN_MAP: Record<BlockSpace, string> = {
12
+ "0": "0",
13
+ xs: "var(--ak-space-xs)",
14
+ sm: "var(--ak-space-sm)",
15
+ md: "var(--ak-space-md)",
16
+ lg: "var(--ak-space-lg)",
17
+ xl: "var(--ak-space-xl)",
18
+ "2xl": "var(--ak-space-2xl)",
19
+ "3xl": "var(--ak-space-3xl)",
20
+ page: "var(--ak-layout-page-gutter)",
21
+ };
22
+
23
+ function isResponsiveValue<T>(
24
+ value: ResponsiveValue<T> | undefined,
25
+ ): value is Partial<Record<LayoutBreakpoint, T>> {
26
+ return Boolean(
27
+ value &&
28
+ typeof value === "object" &&
29
+ !Array.isArray(value) &&
30
+ BREAKPOINTS.some((breakpoint) => breakpoint in value),
31
+ );
32
+ }
33
+
34
+ function normalizeResponsiveValue<T>(
35
+ value: ResponsiveValue<T> | undefined,
36
+ ): Partial<Record<LayoutBreakpoint, T>> | undefined {
37
+ if (value === undefined) return undefined;
38
+ if (isResponsiveValue(value)) return value;
39
+ return { base: value };
40
+ }
41
+
42
+ function resolveColumns(value: GridColumns): string {
43
+ if (typeof value === "number") {
44
+ return `repeat(${value}, minmax(0, 1fr))`;
45
+ }
46
+
47
+ const trimmed = value.trim();
48
+ return trimmed || "minmax(0, 1fr)";
49
+ }
50
+
51
+ function resolveGap(value: BlockSpace): string {
52
+ return SPACE_TOKEN_MAP[value] ?? value;
53
+ }
54
+
55
+ function resolveAlign(value: GridAlign): string {
56
+ if (value === "start") return "start";
57
+ if (value === "end") return "end";
58
+ return value;
59
+ }
60
+
61
+ function setResponsiveVar<T>(
62
+ styles: Record<string, string | number>,
63
+ property: string,
64
+ value: ResponsiveValue<T> | undefined,
65
+ resolve: (value: T) => string | number | undefined,
66
+ ) {
67
+ const normalized = normalizeResponsiveValue(value);
68
+ if (!normalized) return;
69
+
70
+ for (const breakpoint of BREAKPOINTS) {
71
+ const breakpointValue = normalized[breakpoint];
72
+ if (breakpointValue === undefined) continue;
73
+ const resolved = resolve(breakpointValue);
74
+ if (resolved === undefined || resolved === "") continue;
75
+ styles[`--ak-grid-${property}-${breakpoint}`] = resolved;
76
+ }
77
+ }
78
+
79
+ export function Grid<TElement extends GridElement = "div">(
80
+ props: GridProps<TElement>,
81
+ ): JSX.Element {
82
+ const {
83
+ as,
84
+ columns,
85
+ gap,
86
+ align,
87
+ children,
88
+ class: classProp,
89
+ className,
90
+ ref,
91
+ style: userStyle,
92
+ ...rest
93
+ } = props as GridProps<GridElement> & {
94
+ class?: unknown;
95
+ className?: unknown;
96
+ style?: unknown;
97
+ };
98
+
99
+ const styles: Record<string, string | number> = {};
100
+ setResponsiveVar(styles, "columns", columns, resolveColumns);
101
+ setResponsiveVar(styles, "gap", gap, resolveGap);
102
+ setResponsiveVar(styles, "align", align, resolveAlign);
103
+
104
+ const generatedClass = styleDeclarationsToClass(mergeLayoutStyles(styles, userStyle));
105
+ const finalProps = mergeProps(rest, {
106
+ ref,
107
+ class: classes("grid", classProp, className, generatedClass),
108
+ "data-slot": "grid",
109
+ });
110
+
111
+ const Element = (as ?? DEFAULT_ELEMENT) as keyof JSX.IntrinsicElements;
112
+ return <Element {...finalProps}>{children}</Element>;
113
+ }
@@ -0,0 +1,20 @@
1
+ import type { Ref } from "@askrjs/askr/foundations/utilities";
2
+ import type { BlockSpace, ResponsiveValue } from "../_internal/block-layout";
3
+
4
+ export type GridElement = "div" | "section" | "ul";
5
+ export type GridColumns = number | string;
6
+ export type GridAlign = "start" | "center" | "end" | "stretch";
7
+
8
+ type GridIntrinsicProps<TElement extends GridElement> = Omit<
9
+ JSX.IntrinsicElements[TElement],
10
+ "children" | "ref"
11
+ >;
12
+
13
+ export type GridProps<TElement extends GridElement = "div"> = GridIntrinsicProps<TElement> & {
14
+ as?: TElement;
15
+ columns?: ResponsiveValue<GridColumns>;
16
+ gap?: ResponsiveValue<BlockSpace>;
17
+ align?: ResponsiveValue<GridAlign>;
18
+ children?: unknown;
19
+ ref?: Ref<HTMLElement>;
20
+ };
@@ -0,0 +1,2 @@
1
+ export { Grid } from "./grid";
2
+ export type * from "./grid.types";
@@ -1,18 +1,21 @@
1
- import { classes } from "../_internal/classes";
1
+ import { Block } from "../block";
2
2
  import type { HeaderProps } from "./header.types";
3
3
 
4
4
  export function Header(props: HeaderProps): JSX.Element {
5
- const { children, position = "static", ref, class: className, ...rest } = props;
5
+ const { children, position, sticky = position === "sticky", ...rest } = props;
6
6
 
7
7
  return (
8
- <header
8
+ <Block
9
+ as="header"
10
+ sticky={sticky}
11
+ top={sticky ? "0" : undefined}
12
+ zIndex={sticky ? "header" : undefined}
13
+ background="surface"
14
+ borderBottom
9
15
  {...rest}
10
- ref={ref}
11
- class={classes("header", className)}
12
16
  data-slot="header"
13
- data-position={position}
14
17
  >
15
18
  {children}
16
- </header>
19
+ </Block>
17
20
  );
18
21
  }
@@ -1,6 +1,6 @@
1
- export type HeaderPosition = "static" | "relative" | "sticky" | "absolute" | "fixed";
1
+ import type { BlockElementProps } from "../block";
2
2
 
3
- export type HeaderProps = Omit<JSX.IntrinsicElements["header"], "children"> & {
4
- position?: HeaderPosition;
5
- children?: unknown;
3
+ export type HeaderProps = Omit<BlockElementProps<"header">, "as" | "sticky"> & {
4
+ position?: "sticky" | "static";
5
+ sticky?: boolean;
6
6
  };
@@ -1,3 +1,2 @@
1
1
  export { Header } from "./header";
2
- export { HEADER_A11Y_CONTRACT, type HeaderA11yContract } from "./header.a11y";
3
- export type { HeaderProps, HeaderPosition } from "./header.types";
2
+ export type { HeaderProps } from "./header.types";
@@ -0,0 +1,2 @@
1
+ export { Main } from "./main";
2
+ export type { MainProps } from "./main.types";
@@ -0,0 +1,12 @@
1
+ import { Block } from "../block";
2
+ import type { MainProps } from "./main.types";
3
+
4
+ export function Main(props: MainProps): JSX.Element {
5
+ const { children, ...rest } = props;
6
+
7
+ return (
8
+ <Block as="main" grow {...rest} data-slot="main">
9
+ {children}
10
+ </Block>
11
+ );
12
+ }
@@ -0,0 +1,3 @@
1
+ import type { BlockElementProps } from "../block";
2
+
3
+ export type MainProps = Omit<BlockElementProps<"main">, "as">;