@hypoth-ui/cli 0.0.1 → 0.1.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 (375) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +19 -115
  3. package/dist/{add-PDBC4JTE.js → add-V5PW73GC.js} +29 -17
  4. package/dist/{chunk-5LTQ2XVL.js → chunk-27CLUUVC.js} +0 -2
  5. package/dist/{chunk-YPKFYE45.js → chunk-NWIRSZUQ.js} +6 -13
  6. package/dist/{chunk-GJ6JOQ3Q.js → chunk-PBK72SJJ.js} +1 -1
  7. package/dist/{diff-BQEXG7HU.js → diff-776UATCA.js} +2 -2
  8. package/dist/index.js +5 -5
  9. package/dist/{init-7AZXYAPJ.js → init-GDU2PW7K.js} +10 -13
  10. package/dist/{list-X6ZLM2NQ.js → list-XDP5I537.js} +3 -3
  11. package/package.json +16 -12
  12. package/registry/components.json +1820 -206
  13. package/templates/accordion/index.tsx +266 -0
  14. package/templates/accordion/wc/accordion-content.ts +113 -0
  15. package/templates/accordion/wc/accordion-item.ts +111 -0
  16. package/templates/accordion/wc/accordion-trigger.ts +105 -0
  17. package/templates/accordion/wc/accordion.ts +213 -0
  18. package/templates/accordion/wc/index.ts +12 -0
  19. package/templates/alert/index.tsx +177 -0
  20. package/templates/alert/wc/alert.ts +167 -0
  21. package/templates/alert/wc/index.ts +1 -0
  22. package/templates/alert-dialog/index.tsx +360 -0
  23. package/templates/alert-dialog/wc/alert-dialog-action.ts +43 -0
  24. package/templates/alert-dialog/wc/alert-dialog-cancel.ts +43 -0
  25. package/templates/alert-dialog/wc/alert-dialog-content.ts +42 -0
  26. package/templates/alert-dialog/wc/alert-dialog-description.ts +34 -0
  27. package/templates/alert-dialog/wc/alert-dialog-footer.ts +25 -0
  28. package/templates/alert-dialog/wc/alert-dialog-header.ts +25 -0
  29. package/templates/alert-dialog/wc/alert-dialog-title.ts +34 -0
  30. package/templates/alert-dialog/wc/alert-dialog-trigger.ts +46 -0
  31. package/templates/alert-dialog/wc/alert-dialog.ts +302 -0
  32. package/templates/alert-dialog/wc/index.ts +13 -0
  33. package/templates/aspect-ratio/index.tsx +50 -0
  34. package/templates/aspect-ratio/wc/aspect-ratio.ts +78 -0
  35. package/templates/aspect-ratio/wc/index.ts +5 -0
  36. package/templates/avatar/avatar-group.tsx +88 -0
  37. package/templates/avatar/avatar.tsx +124 -0
  38. package/templates/avatar/index.tsx +33 -0
  39. package/templates/avatar/wc/avatar-group.ts +112 -0
  40. package/templates/avatar/wc/avatar.ts +184 -0
  41. package/templates/avatar/wc/index.ts +5 -0
  42. package/templates/badge/index.tsx +140 -0
  43. package/templates/badge/wc/badge.ts +119 -0
  44. package/templates/badge/wc/index.ts +9 -0
  45. package/templates/breadcrumb/index.tsx +157 -0
  46. package/templates/breadcrumb/wc/breadcrumb-item.ts +30 -0
  47. package/templates/breadcrumb/wc/breadcrumb-link.ts +70 -0
  48. package/templates/breadcrumb/wc/breadcrumb-list.ts +30 -0
  49. package/templates/breadcrumb/wc/breadcrumb-page.ts +32 -0
  50. package/templates/breadcrumb/wc/breadcrumb-separator.ts +31 -0
  51. package/templates/breadcrumb/wc/breadcrumb.ts +55 -0
  52. package/templates/breadcrumb/wc/index.ts +10 -0
  53. package/templates/button/button.tsx +119 -0
  54. package/templates/button/index.ts +1 -0
  55. package/templates/button/wc/button.ts +169 -0
  56. package/templates/calendar/index.tsx +149 -0
  57. package/templates/calendar/wc/calendar.ts +316 -0
  58. package/templates/calendar/wc/index.ts +4 -0
  59. package/templates/card/index.tsx +108 -0
  60. package/templates/card/wc/card-content.ts +25 -0
  61. package/templates/card/wc/card-footer.ts +25 -0
  62. package/templates/card/wc/card-header.ts +25 -0
  63. package/templates/card/wc/card.ts +43 -0
  64. package/templates/card/wc/index.ts +8 -0
  65. package/templates/checkbox/checkbox.tsx +85 -0
  66. package/templates/checkbox/wc/checkbox.ts +247 -0
  67. package/templates/collapsible/index.tsx +172 -0
  68. package/templates/collapsible/wc/collapsible-content.ts +97 -0
  69. package/templates/collapsible/wc/collapsible-trigger.ts +39 -0
  70. package/templates/collapsible/wc/collapsible.ts +143 -0
  71. package/templates/collapsible/wc/index.ts +7 -0
  72. package/templates/combobox/combobox-content.tsx +141 -0
  73. package/templates/combobox/combobox-context.ts +36 -0
  74. package/templates/combobox/combobox-empty.tsx +38 -0
  75. package/templates/combobox/combobox-input.tsx +159 -0
  76. package/templates/combobox/combobox-loading.tsx +38 -0
  77. package/templates/combobox/combobox-option.tsx +99 -0
  78. package/templates/combobox/combobox-root.tsx +207 -0
  79. package/templates/combobox/combobox-tag.tsx +62 -0
  80. package/templates/combobox/index.ts +62 -0
  81. package/templates/combobox/wc/combobox-content.ts +97 -0
  82. package/templates/combobox/wc/combobox-input.ts +134 -0
  83. package/templates/combobox/wc/combobox-option.ts +111 -0
  84. package/templates/combobox/wc/combobox-tag.ts +103 -0
  85. package/templates/combobox/wc/combobox.ts +981 -0
  86. package/templates/combobox/wc/index.ts +5 -0
  87. package/templates/command/index.tsx +279 -0
  88. package/templates/command/wc/command-empty.ts +24 -0
  89. package/templates/command/wc/command-group.ts +60 -0
  90. package/templates/command/wc/command-input.ts +136 -0
  91. package/templates/command/wc/command-item.ts +78 -0
  92. package/templates/command/wc/command-list.ts +103 -0
  93. package/templates/command/wc/command-loading.ts +24 -0
  94. package/templates/command/wc/command-separator.ts +23 -0
  95. package/templates/command/wc/command.ts +176 -0
  96. package/templates/context-menu/index.tsx +262 -0
  97. package/templates/context-menu/wc/context-menu-content.ts +41 -0
  98. package/templates/context-menu/wc/context-menu-item.ts +83 -0
  99. package/templates/context-menu/wc/context-menu-label.ts +30 -0
  100. package/templates/context-menu/wc/context-menu-separator.ts +28 -0
  101. package/templates/context-menu/wc/context-menu.ts +324 -0
  102. package/templates/context-menu/wc/index.ts +9 -0
  103. package/templates/data-table/index.tsx +263 -0
  104. package/templates/data-table/wc/data-table.ts +405 -0
  105. package/templates/data-table/wc/index.ts +10 -0
  106. package/templates/date-picker/date-picker-calendar.tsx +352 -0
  107. package/templates/date-picker/date-picker-content.tsx +121 -0
  108. package/templates/date-picker/date-picker-context.ts +46 -0
  109. package/templates/date-picker/date-picker-root.tsx +201 -0
  110. package/templates/date-picker/date-picker-trigger.tsx +95 -0
  111. package/templates/date-picker/index.ts +44 -0
  112. package/templates/date-picker/wc/date-picker-calendar.ts +457 -0
  113. package/templates/date-picker/wc/date-picker.ts +592 -0
  114. package/templates/date-picker/wc/date-utils.ts +467 -0
  115. package/templates/date-picker/wc/index.ts +3 -0
  116. package/templates/dialog/dialog-close.tsx +57 -0
  117. package/templates/dialog/dialog-content.tsx +106 -0
  118. package/templates/dialog/dialog-context.ts +24 -0
  119. package/templates/dialog/dialog-description.tsx +51 -0
  120. package/templates/dialog/dialog-root.tsx +104 -0
  121. package/templates/dialog/dialog-title.tsx +38 -0
  122. package/templates/dialog/dialog-trigger.tsx +94 -0
  123. package/templates/dialog/index.ts +52 -0
  124. package/templates/dialog/wc/dialog-content.ts +59 -0
  125. package/templates/dialog/wc/dialog-description.ts +58 -0
  126. package/templates/dialog/wc/dialog-title.ts +56 -0
  127. package/templates/dialog/wc/dialog.ts +411 -0
  128. package/templates/drawer/index.tsx +263 -0
  129. package/templates/drawer/wc/drawer-content.ts +150 -0
  130. package/templates/drawer/wc/drawer-description.ts +34 -0
  131. package/templates/drawer/wc/drawer-footer.ts +25 -0
  132. package/templates/drawer/wc/drawer-header.ts +25 -0
  133. package/templates/drawer/wc/drawer-title.ts +34 -0
  134. package/templates/drawer/wc/drawer.ts +348 -0
  135. package/templates/drawer/wc/index.ts +10 -0
  136. package/templates/dropdown-menu/index.tsx +454 -0
  137. package/templates/dropdown-menu/wc/dropdown-menu-checkbox-item.ts +93 -0
  138. package/templates/dropdown-menu/wc/dropdown-menu-content.ts +43 -0
  139. package/templates/dropdown-menu/wc/dropdown-menu-item.ts +85 -0
  140. package/templates/dropdown-menu/wc/dropdown-menu-label.ts +31 -0
  141. package/templates/dropdown-menu/wc/dropdown-menu-radio-group.ts +80 -0
  142. package/templates/dropdown-menu/wc/dropdown-menu-radio-item.ts +101 -0
  143. package/templates/dropdown-menu/wc/dropdown-menu-separator.ts +28 -0
  144. package/templates/dropdown-menu/wc/dropdown-menu.ts +358 -0
  145. package/templates/dropdown-menu/wc/index.ts +12 -0
  146. package/templates/field/field-description.tsx +39 -0
  147. package/templates/field/field-error.tsx +37 -0
  148. package/templates/field/field.tsx +46 -0
  149. package/templates/field/index.ts +4 -0
  150. package/templates/field/label.tsx +40 -0
  151. package/templates/field/wc/field-description.ts +42 -0
  152. package/templates/field/wc/field-error.ts +46 -0
  153. package/templates/field/wc/field.ts +210 -0
  154. package/templates/field/wc/label.ts +54 -0
  155. package/templates/file-upload/file-upload-context.ts +26 -0
  156. package/templates/file-upload/file-upload-dropzone.tsx +111 -0
  157. package/templates/file-upload/file-upload-input.tsx +86 -0
  158. package/templates/file-upload/file-upload-item.tsx +105 -0
  159. package/templates/file-upload/file-upload-root.tsx +115 -0
  160. package/templates/file-upload/index.ts +50 -0
  161. package/templates/file-upload/wc/file-upload.ts +380 -0
  162. package/templates/file-upload/wc/index.ts +1 -0
  163. package/templates/hover-card/index.tsx +203 -0
  164. package/templates/hover-card/wc/hover-card-content.ts +50 -0
  165. package/templates/hover-card/wc/hover-card.ts +382 -0
  166. package/templates/hover-card/wc/index.ts +6 -0
  167. package/templates/icon/icon.tsx +76 -0
  168. package/templates/icon/wc/icon-adapter.ts +108 -0
  169. package/templates/icon/wc/icon.ts +161 -0
  170. package/templates/input/input.tsx +130 -0
  171. package/templates/input/wc/input.ts +216 -0
  172. package/templates/layout/app-shell.tsx +177 -0
  173. package/templates/layout/box.tsx +53 -0
  174. package/templates/layout/center.tsx +42 -0
  175. package/templates/layout/container.tsx +43 -0
  176. package/templates/layout/flow.tsx +83 -0
  177. package/templates/layout/grid.tsx +79 -0
  178. package/templates/layout/index.ts +33 -0
  179. package/templates/layout/inline.tsx +16 -0
  180. package/templates/layout/page.tsx +43 -0
  181. package/templates/layout/section.tsx +39 -0
  182. package/templates/layout/spacer.tsx +30 -0
  183. package/templates/layout/split.tsx +47 -0
  184. package/templates/layout/stack.tsx +16 -0
  185. package/templates/layout/wc/app-shell.ts +58 -0
  186. package/templates/layout/wc/box.ts +117 -0
  187. package/templates/layout/wc/center.ts +78 -0
  188. package/templates/layout/wc/container.ts +77 -0
  189. package/templates/layout/wc/flow.ts +149 -0
  190. package/templates/layout/wc/footer.ts +57 -0
  191. package/templates/layout/wc/grid.ts +142 -0
  192. package/templates/layout/wc/header.ts +57 -0
  193. package/templates/layout/wc/index.ts +41 -0
  194. package/templates/layout/wc/main.ts +46 -0
  195. package/templates/layout/wc/page.ts +81 -0
  196. package/templates/layout/wc/section.ts +65 -0
  197. package/templates/layout/wc/spacer.ts +77 -0
  198. package/templates/layout/wc/split.ts +94 -0
  199. package/templates/layout/wc/wrap.ts +93 -0
  200. package/templates/layout/wrap.tsx +46 -0
  201. package/templates/link/link.tsx +109 -0
  202. package/templates/link/wc/link.ts +124 -0
  203. package/templates/list/index.tsx +55 -0
  204. package/templates/list/list-item.tsx +117 -0
  205. package/templates/list/list.tsx +115 -0
  206. package/templates/list/wc/index.ts +5 -0
  207. package/templates/list/wc/list-item.ts +127 -0
  208. package/templates/list/wc/list.ts +114 -0
  209. package/templates/menu/index.ts +49 -0
  210. package/templates/menu/menu-content.tsx +109 -0
  211. package/templates/menu/menu-context.ts +17 -0
  212. package/templates/menu/menu-item.tsx +108 -0
  213. package/templates/menu/menu-label.tsx +32 -0
  214. package/templates/menu/menu-root.tsx +108 -0
  215. package/templates/menu/menu-separator.tsx +24 -0
  216. package/templates/menu/menu-trigger.tsx +104 -0
  217. package/templates/menu/wc/menu-content.ts +67 -0
  218. package/templates/menu/wc/menu-item.ts +109 -0
  219. package/templates/menu/wc/menu.ts +449 -0
  220. package/templates/navigation-menu/index.tsx +328 -0
  221. package/templates/navigation-menu/wc/index.ts +12 -0
  222. package/templates/navigation-menu/wc/navigation-menu-content.ts +30 -0
  223. package/templates/navigation-menu/wc/navigation-menu-indicator.ts +30 -0
  224. package/templates/navigation-menu/wc/navigation-menu-item.ts +60 -0
  225. package/templates/navigation-menu/wc/navigation-menu-link.ts +97 -0
  226. package/templates/navigation-menu/wc/navigation-menu-list.ts +30 -0
  227. package/templates/navigation-menu/wc/navigation-menu-trigger.ts +110 -0
  228. package/templates/navigation-menu/wc/navigation-menu-viewport.ts +85 -0
  229. package/templates/navigation-menu/wc/navigation-menu.ts +272 -0
  230. package/templates/number-input/index.ts +46 -0
  231. package/templates/number-input/number-input-context.ts +38 -0
  232. package/templates/number-input/number-input-decrement.tsx +53 -0
  233. package/templates/number-input/number-input-field.tsx +93 -0
  234. package/templates/number-input/number-input-increment.tsx +53 -0
  235. package/templates/number-input/number-input-root.tsx +137 -0
  236. package/templates/number-input/wc/index.ts +1 -0
  237. package/templates/number-input/wc/number-input.ts +283 -0
  238. package/templates/pagination/index.tsx +198 -0
  239. package/templates/pagination/wc/index.ts +11 -0
  240. package/templates/pagination/wc/pagination-content.ts +30 -0
  241. package/templates/pagination/wc/pagination-ellipsis.ts +28 -0
  242. package/templates/pagination/wc/pagination-item.ts +30 -0
  243. package/templates/pagination/wc/pagination-link.ts +76 -0
  244. package/templates/pagination/wc/pagination-next.ts +69 -0
  245. package/templates/pagination/wc/pagination-previous.ts +69 -0
  246. package/templates/pagination/wc/pagination.ts +156 -0
  247. package/templates/pin-input/index.ts +39 -0
  248. package/templates/pin-input/pin-input-context.ts +30 -0
  249. package/templates/pin-input/pin-input-field.tsx +186 -0
  250. package/templates/pin-input/pin-input-root.tsx +120 -0
  251. package/templates/pin-input/wc/index.ts +1 -0
  252. package/templates/pin-input/wc/pin-input.ts +259 -0
  253. package/templates/popover/popover.tsx +121 -0
  254. package/templates/popover/wc/popover-content.ts +66 -0
  255. package/templates/popover/wc/popover.ts +343 -0
  256. package/templates/progress/index.tsx +117 -0
  257. package/templates/progress/wc/index.ts +4 -0
  258. package/templates/progress/wc/progress.ts +174 -0
  259. package/templates/radio/radio.tsx +43 -0
  260. package/templates/radio/wc/radio-group.ts +261 -0
  261. package/templates/radio/wc/radio.ts +145 -0
  262. package/templates/scroll-area/index.tsx +144 -0
  263. package/templates/scroll-area/wc/index.ts +8 -0
  264. package/templates/scroll-area/wc/scroll-area-scrollbar.ts +143 -0
  265. package/templates/scroll-area/wc/scroll-area-thumb.ts +225 -0
  266. package/templates/scroll-area/wc/scroll-area-viewport.ts +120 -0
  267. package/templates/scroll-area/wc/scroll-area.ts +63 -0
  268. package/templates/select/index.ts +57 -0
  269. package/templates/select/select-content.tsx +243 -0
  270. package/templates/select/select-context.ts +30 -0
  271. package/templates/select/select-group.tsx +53 -0
  272. package/templates/select/select-label.tsx +34 -0
  273. package/templates/select/select-option.tsx +97 -0
  274. package/templates/select/select-root.tsx +153 -0
  275. package/templates/select/select-separator.tsx +27 -0
  276. package/templates/select/select-trigger.tsx +112 -0
  277. package/templates/select/select-value.tsx +48 -0
  278. package/templates/select/wc/index.ts +6 -0
  279. package/templates/select/wc/select-content.ts +89 -0
  280. package/templates/select/wc/select-group.ts +82 -0
  281. package/templates/select/wc/select-label.ts +49 -0
  282. package/templates/select/wc/select-option.ts +111 -0
  283. package/templates/select/wc/select-trigger.ts +101 -0
  284. package/templates/select/wc/select.ts +840 -0
  285. package/templates/separator/index.tsx +49 -0
  286. package/templates/separator/wc/index.ts +5 -0
  287. package/templates/separator/wc/separator.ts +60 -0
  288. package/templates/sheet/index.tsx +291 -0
  289. package/templates/sheet/wc/index.ts +12 -0
  290. package/templates/sheet/wc/sheet-close.ts +43 -0
  291. package/templates/sheet/wc/sheet-content.ts +47 -0
  292. package/templates/sheet/wc/sheet-description.ts +34 -0
  293. package/templates/sheet/wc/sheet-footer.ts +25 -0
  294. package/templates/sheet/wc/sheet-header.ts +25 -0
  295. package/templates/sheet/wc/sheet-overlay.ts +23 -0
  296. package/templates/sheet/wc/sheet-title.ts +34 -0
  297. package/templates/sheet/wc/sheet.ts +336 -0
  298. package/templates/skeleton/index.tsx +131 -0
  299. package/templates/skeleton/wc/index.ts +10 -0
  300. package/templates/skeleton/wc/skeleton.ts +107 -0
  301. package/templates/slider/index.ts +41 -0
  302. package/templates/slider/slider-context.ts +36 -0
  303. package/templates/slider/slider-range.tsx +59 -0
  304. package/templates/slider/slider-root.tsx +166 -0
  305. package/templates/slider/slider-thumb.tsx +213 -0
  306. package/templates/slider/slider-track.tsx +113 -0
  307. package/templates/slider/wc/index.ts +1 -0
  308. package/templates/slider/wc/slider.ts +465 -0
  309. package/templates/spinner/spinner.tsx +64 -0
  310. package/templates/spinner/wc/spinner.ts +70 -0
  311. package/templates/stepper/index.tsx +230 -0
  312. package/templates/stepper/wc/index.ts +12 -0
  313. package/templates/stepper/wc/stepper-content.ts +30 -0
  314. package/templates/stepper/wc/stepper-description.ts +25 -0
  315. package/templates/stepper/wc/stepper-indicator.ts +30 -0
  316. package/templates/stepper/wc/stepper-item.ts +55 -0
  317. package/templates/stepper/wc/stepper-separator.ts +29 -0
  318. package/templates/stepper/wc/stepper-title.ts +25 -0
  319. package/templates/stepper/wc/stepper-trigger.ts +67 -0
  320. package/templates/stepper/wc/stepper.ts +164 -0
  321. package/templates/switch/switch.tsx +90 -0
  322. package/templates/switch/wc/switch.ts +228 -0
  323. package/templates/table/body.tsx +21 -0
  324. package/templates/table/cell.tsx +44 -0
  325. package/templates/table/head.tsx +112 -0
  326. package/templates/table/header.tsx +21 -0
  327. package/templates/table/index.tsx +93 -0
  328. package/templates/table/root.tsx +82 -0
  329. package/templates/table/row.tsx +36 -0
  330. package/templates/table/wc/index.ts +9 -0
  331. package/templates/table/wc/table-body.ts +32 -0
  332. package/templates/table/wc/table-cell.ts +58 -0
  333. package/templates/table/wc/table-head.ts +129 -0
  334. package/templates/table/wc/table-header.ts +32 -0
  335. package/templates/table/wc/table-row.ts +50 -0
  336. package/templates/table/wc/table.ts +93 -0
  337. package/templates/tabs/index.tsx +222 -0
  338. package/templates/tabs/wc/index.ts +8 -0
  339. package/templates/tabs/wc/tabs-content.ts +82 -0
  340. package/templates/tabs/wc/tabs-list.ts +56 -0
  341. package/templates/tabs/wc/tabs-trigger.ts +136 -0
  342. package/templates/tabs/wc/tabs.ts +202 -0
  343. package/templates/tag/index.tsx +186 -0
  344. package/templates/tag/wc/index.ts +4 -0
  345. package/templates/tag/wc/tag.ts +166 -0
  346. package/templates/text/text.tsx +100 -0
  347. package/templates/text/wc/text.ts +94 -0
  348. package/templates/textarea/textarea.tsx +134 -0
  349. package/templates/textarea/wc/textarea.ts +280 -0
  350. package/templates/time-picker/index.ts +42 -0
  351. package/templates/time-picker/time-picker-context.ts +28 -0
  352. package/templates/time-picker/time-picker-root.tsx +113 -0
  353. package/templates/time-picker/time-picker-segment.tsx +91 -0
  354. package/templates/time-picker/wc/index.ts +1 -0
  355. package/templates/time-picker/wc/time-picker.ts +221 -0
  356. package/templates/toast/index.tsx +71 -0
  357. package/templates/toast/provider.tsx +228 -0
  358. package/templates/toast/toast.tsx +142 -0
  359. package/templates/toast/use-toast.ts +89 -0
  360. package/templates/toast/wc/index.ts +15 -0
  361. package/templates/toast/wc/toast-controller.ts +282 -0
  362. package/templates/toast/wc/toast-provider.ts +161 -0
  363. package/templates/toast/wc/toast.ts +165 -0
  364. package/templates/tooltip/tooltip.tsx +62 -0
  365. package/templates/tooltip/wc/tooltip-content.ts +64 -0
  366. package/templates/tooltip/wc/tooltip.ts +289 -0
  367. package/templates/tree/index.tsx +60 -0
  368. package/templates/tree/tree-item.tsx +131 -0
  369. package/templates/tree/tree.tsx +138 -0
  370. package/templates/tree/wc/index.ts +11 -0
  371. package/templates/tree/wc/tree-item.ts +273 -0
  372. package/templates/tree/wc/tree-utils.ts +143 -0
  373. package/templates/tree/wc/tree.ts +139 -0
  374. package/templates/visually-hidden/visually-hidden.tsx +45 -0
  375. package/templates/visually-hidden/wc/visually-hidden.ts +64 -0
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Header Web Component
3
+ *
4
+ * Landmark header with sticky and safe-area support.
5
+ *
6
+ * @element ds-header
7
+ * @slot - Default slot for header content
8
+ */
9
+
10
+ import { type TemplateResult, html } from "lit";
11
+ import { property } from "lit/decorators.js";
12
+ import { classMap } from "lit/directives/class-map.js";
13
+ import { DSElement } from "../../base/ds-element.js";
14
+ import { define } from "../../registry/define.js";
15
+
16
+ export class DsHeader extends DSElement {
17
+ static override styles = [];
18
+
19
+ /**
20
+ * Enable sticky positioning.
21
+ */
22
+ @property({ type: Boolean, reflect: true })
23
+ sticky = false;
24
+
25
+ /**
26
+ * Enable safe area insets.
27
+ */
28
+ @property({ type: Boolean, reflect: true, attribute: "safe-area" })
29
+ safeArea = false;
30
+
31
+ override render(): TemplateResult {
32
+ const classes = {
33
+ "ds-header": true,
34
+ };
35
+
36
+ return html`
37
+ <header
38
+ class=${classMap(classes)}
39
+ ?data-sticky=${this.sticky}
40
+ ?data-safe-area=${this.safeArea}
41
+ data-layout="header"
42
+ >
43
+ <slot></slot>
44
+ </header>
45
+ `;
46
+ }
47
+ }
48
+
49
+ // Register the component
50
+ define("ds-header", DsHeader);
51
+
52
+ // TypeScript declaration for HTML
53
+ declare global {
54
+ interface HTMLElementTagNameMap {
55
+ "ds-header": DsHeader;
56
+ }
57
+ }
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Layout Components Index
3
+ *
4
+ * Exports all layout primitive Web Components.
5
+ */
6
+
7
+ // Core Layout
8
+ export { DsFlow } from "./flow.js";
9
+ export { DsContainer } from "./container.js";
10
+ export { DsGrid } from "./grid.js";
11
+ export { DsBox } from "./box.js";
12
+
13
+ // Page Composition
14
+ export { DsPage } from "./page.js";
15
+ export { DsSection } from "./section.js";
16
+ export { DsAppShell } from "./app-shell.js";
17
+ export { DsHeader } from "./header.js";
18
+ export { DsFooter } from "./footer.js";
19
+ export { DsMain } from "./main.js";
20
+
21
+ // Helpers
22
+ export { DsSpacer } from "./spacer.js";
23
+ export { DsCenter } from "./center.js";
24
+ export { DsSplit } from "./split.js";
25
+ export { DsWrap } from "./wrap.js";
26
+
27
+ // Re-export types
28
+ export type {
29
+ SpacingToken,
30
+ BreakpointToken,
31
+ ContainerSizeToken,
32
+ SurfaceToken,
33
+ RadiusToken,
34
+ FlexDirection,
35
+ FlexAlign,
36
+ FlexJustify,
37
+ FlexWrap,
38
+ GridColumns,
39
+ SplitRatio,
40
+ SpacerAxis,
41
+ } from "../../types/layout-tokens.js";
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Main Web Component
3
+ *
4
+ * Main content region for skip-link targeting.
5
+ *
6
+ * @element ds-main
7
+ * @slot - Default slot for main content
8
+ */
9
+
10
+ import { type TemplateResult, html } from "lit";
11
+ import { property } from "lit/decorators.js";
12
+ import { classMap } from "lit/directives/class-map.js";
13
+ import { DSElement } from "../../base/ds-element.js";
14
+ import { define } from "../../registry/define.js";
15
+
16
+ export class DsMain extends DSElement {
17
+ static override styles = [];
18
+
19
+ /**
20
+ * Element ID for skip-link targeting.
21
+ */
22
+ @property({ type: String, reflect: true })
23
+ override id = "main-content";
24
+
25
+ override render(): TemplateResult {
26
+ const classes = {
27
+ "ds-main": true,
28
+ };
29
+
30
+ return html`
31
+ <main class=${classMap(classes)} id=${this.id} tabindex="-1" data-layout="main">
32
+ <slot></slot>
33
+ </main>
34
+ `;
35
+ }
36
+ }
37
+
38
+ // Register the component
39
+ define("ds-main", DsMain);
40
+
41
+ // TypeScript declaration for HTML
42
+ declare global {
43
+ interface HTMLElementTagNameMap {
44
+ "ds-main": DsMain;
45
+ }
46
+ }
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Page Web Component
3
+ *
4
+ * Page wrapper with min-height and background.
5
+ *
6
+ * @element ds-page
7
+ * @slot - Default slot for page content
8
+ */
9
+
10
+ import { type TemplateResult, html } from "lit";
11
+ import { property } from "lit/decorators.js";
12
+ import { classMap } from "lit/directives/class-map.js";
13
+ import { DSElement } from "../../base/ds-element.js";
14
+ import { define } from "../../registry/define.js";
15
+ import type { SurfaceToken } from "../../types/layout-tokens.js";
16
+ import { SURFACE_TOKENS } from "../../types/layout-tokens.js";
17
+ import { validateToken } from "../../utils/token-validator.js";
18
+
19
+ type MinHeightValue = "viewport" | "full";
20
+
21
+ const MIN_HEIGHT_VALUES: readonly MinHeightValue[] = ["viewport", "full"] as const;
22
+
23
+ export class DsPage extends DSElement {
24
+ static override styles = [];
25
+
26
+ /**
27
+ * Background color token.
28
+ */
29
+ @property({ type: String, reflect: true })
30
+ bg: SurfaceToken = "background";
31
+
32
+ /**
33
+ * Minimum height.
34
+ */
35
+ @property({ type: String, reflect: true, attribute: "min-height" })
36
+ minHeight: MinHeightValue = "viewport";
37
+
38
+ override connectedCallback(): void {
39
+ super.connectedCallback();
40
+ this.validateProps();
41
+ }
42
+
43
+ override updated(changedProperties: Map<string, unknown>): void {
44
+ super.updated(changedProperties);
45
+ if (changedProperties.has("bg") || changedProperties.has("minHeight")) {
46
+ this.validateProps();
47
+ }
48
+ }
49
+
50
+ private validateProps(): void {
51
+ validateToken(this.bg, SURFACE_TOKENS, "bg", "ds-page");
52
+ validateToken(this.minHeight, MIN_HEIGHT_VALUES, "min-height", "ds-page");
53
+ }
54
+
55
+ override render(): TemplateResult {
56
+ const classes = {
57
+ "ds-page": true,
58
+ };
59
+
60
+ return html`
61
+ <div
62
+ class=${classMap(classes)}
63
+ data-bg=${this.bg}
64
+ data-min-height=${this.minHeight}
65
+ data-layout="page"
66
+ >
67
+ <slot></slot>
68
+ </div>
69
+ `;
70
+ }
71
+ }
72
+
73
+ // Register the component
74
+ define("ds-page", DsPage);
75
+
76
+ // TypeScript declaration for HTML
77
+ declare global {
78
+ interface HTMLElementTagNameMap {
79
+ "ds-page": DsPage;
80
+ }
81
+ }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Section Web Component
3
+ *
4
+ * Semantic section wrapper with consistent vertical spacing.
5
+ *
6
+ * @element ds-section
7
+ * @slot - Default slot for section content
8
+ */
9
+
10
+ import { type TemplateResult, html } from "lit";
11
+ import { property } from "lit/decorators.js";
12
+ import { classMap } from "lit/directives/class-map.js";
13
+ import { DSElement } from "../../base/ds-element.js";
14
+ import { define } from "../../registry/define.js";
15
+ import type { SpacingToken } from "../../types/layout-tokens.js";
16
+ import { SPACING_TOKENS } from "../../types/layout-tokens.js";
17
+ import { validateToken } from "../../utils/token-validator.js";
18
+
19
+ export class DsSection extends DSElement {
20
+ static override styles = [];
21
+
22
+ /**
23
+ * Vertical padding.
24
+ */
25
+ @property({ type: String, reflect: true })
26
+ spacing: SpacingToken = "lg";
27
+
28
+ override connectedCallback(): void {
29
+ super.connectedCallback();
30
+ this.validateProps();
31
+ }
32
+
33
+ override updated(changedProperties: Map<string, unknown>): void {
34
+ super.updated(changedProperties);
35
+ if (changedProperties.has("spacing")) {
36
+ this.validateProps();
37
+ }
38
+ }
39
+
40
+ private validateProps(): void {
41
+ validateToken(this.spacing, SPACING_TOKENS, "spacing", "ds-section");
42
+ }
43
+
44
+ override render(): TemplateResult {
45
+ const classes = {
46
+ "ds-section": true,
47
+ };
48
+
49
+ return html`
50
+ <section class=${classMap(classes)} data-spacing=${this.spacing} data-layout="section">
51
+ <slot></slot>
52
+ </section>
53
+ `;
54
+ }
55
+ }
56
+
57
+ // Register the component
58
+ define("ds-section", DsSection);
59
+
60
+ // TypeScript declaration for HTML
61
+ declare global {
62
+ interface HTMLElementTagNameMap {
63
+ "ds-section": DsSection;
64
+ }
65
+ }
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Spacer Web Component
3
+ *
4
+ * Explicit space element for fine-grained spacing control.
5
+ *
6
+ * @element ds-spacer
7
+ */
8
+
9
+ import { type TemplateResult, html } from "lit";
10
+ import { property } from "lit/decorators.js";
11
+ import { classMap } from "lit/directives/class-map.js";
12
+ import { DSElement } from "../../base/ds-element.js";
13
+ import { define } from "../../registry/define.js";
14
+ import type { SpacerAxis, SpacingToken } from "../../types/layout-tokens.js";
15
+ import { SPACING_TOKENS } from "../../types/layout-tokens.js";
16
+ import { validateToken } from "../../utils/token-validator.js";
17
+
18
+ const AXIS_VALUES: readonly SpacerAxis[] = ["horizontal", "vertical"] as const;
19
+
20
+ export class DsSpacer extends DSElement {
21
+ static override styles = [];
22
+
23
+ /**
24
+ * Size of the space.
25
+ */
26
+ @property({ type: String, reflect: true })
27
+ size: SpacingToken = "md";
28
+
29
+ /**
30
+ * Axis direction.
31
+ */
32
+ @property({ type: String, reflect: true })
33
+ axis: SpacerAxis = "vertical";
34
+
35
+ override connectedCallback(): void {
36
+ super.connectedCallback();
37
+ this.validateProps();
38
+ }
39
+
40
+ override updated(changedProperties: Map<string, unknown>): void {
41
+ super.updated(changedProperties);
42
+ if (changedProperties.has("size") || changedProperties.has("axis")) {
43
+ this.validateProps();
44
+ }
45
+ }
46
+
47
+ private validateProps(): void {
48
+ validateToken(this.size, SPACING_TOKENS, "size", "ds-spacer");
49
+ validateToken(this.axis, AXIS_VALUES, "axis", "ds-spacer");
50
+ }
51
+
52
+ override render(): TemplateResult {
53
+ const classes = {
54
+ "ds-spacer": true,
55
+ };
56
+
57
+ return html`
58
+ <div
59
+ class=${classMap(classes)}
60
+ data-size=${this.size}
61
+ data-axis=${this.axis}
62
+ aria-hidden="true"
63
+ data-layout="spacer"
64
+ ></div>
65
+ `;
66
+ }
67
+ }
68
+
69
+ // Register the component
70
+ define("ds-spacer", DsSpacer);
71
+
72
+ // TypeScript declaration for HTML
73
+ declare global {
74
+ interface HTMLElementTagNameMap {
75
+ "ds-spacer": DsSpacer;
76
+ }
77
+ }
@@ -0,0 +1,94 @@
1
+ /**
2
+ * Split Web Component
3
+ *
4
+ * Two-region layout with collapse breakpoint.
5
+ *
6
+ * @element ds-split
7
+ * @slot - Default slot for the two regions
8
+ */
9
+
10
+ import { type TemplateResult, html } from "lit";
11
+ import { property } from "lit/decorators.js";
12
+ import { classMap } from "lit/directives/class-map.js";
13
+ import { DSElement } from "../../base/ds-element.js";
14
+ import { define } from "../../registry/define.js";
15
+ import type { BreakpointToken, SpacingToken, SplitRatio } from "../../types/layout-tokens.js";
16
+ import { BREAKPOINT_TOKENS, SPACING_TOKENS } from "../../types/layout-tokens.js";
17
+ import { validateToken } from "../../utils/token-validator.js";
18
+
19
+ const RATIO_VALUES: readonly SplitRatio[] = ["equal", "1:2", "2:1", "1:3", "3:1"] as const;
20
+
21
+ export class DsSplit extends DSElement {
22
+ static override styles = [];
23
+
24
+ /**
25
+ * Breakpoint at which to collapse to single column.
26
+ */
27
+ @property({ type: String, reflect: true, attribute: "collapse-at" })
28
+ collapseAt: BreakpointToken = "md";
29
+
30
+ /**
31
+ * Gap between regions.
32
+ */
33
+ @property({ type: String, reflect: true })
34
+ gap: SpacingToken = "md";
35
+
36
+ /**
37
+ * Width ratio between regions.
38
+ */
39
+ @property({ type: String, reflect: true })
40
+ ratio: SplitRatio = "equal";
41
+
42
+ override connectedCallback(): void {
43
+ super.connectedCallback();
44
+ this.validateProps();
45
+ }
46
+
47
+ override updated(changedProperties: Map<string, unknown>): void {
48
+ super.updated(changedProperties);
49
+ if (
50
+ changedProperties.has("collapseAt") ||
51
+ changedProperties.has("gap") ||
52
+ changedProperties.has("ratio")
53
+ ) {
54
+ this.validateProps();
55
+ }
56
+ }
57
+
58
+ private validateProps(): void {
59
+ validateToken(this.collapseAt, BREAKPOINT_TOKENS, "collapse-at", "ds-split");
60
+ validateToken(this.gap, SPACING_TOKENS, "gap", "ds-split");
61
+ validateToken(this.ratio, RATIO_VALUES, "ratio", "ds-split");
62
+ }
63
+
64
+ override render(): TemplateResult {
65
+ // Convert ratio format for data attribute (1:2 -> 1-2)
66
+ const ratioData = this.ratio.replace(":", "-");
67
+
68
+ const classes = {
69
+ "ds-split": true,
70
+ };
71
+
72
+ return html`
73
+ <div
74
+ class=${classMap(classes)}
75
+ data-collapse-at=${this.collapseAt}
76
+ data-gap=${this.gap}
77
+ data-ratio=${ratioData}
78
+ data-layout="split"
79
+ >
80
+ <slot></slot>
81
+ </div>
82
+ `;
83
+ }
84
+ }
85
+
86
+ // Register the component
87
+ define("ds-split", DsSplit);
88
+
89
+ // TypeScript declaration for HTML
90
+ declare global {
91
+ interface HTMLElementTagNameMap {
92
+ "ds-split": DsSplit;
93
+ }
94
+ }
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Wrap Web Component
3
+ *
4
+ * Wrapping row layout for tags/chips.
5
+ *
6
+ * @element ds-wrap
7
+ * @slot - Default slot for wrapped items
8
+ */
9
+
10
+ import { type TemplateResult, html } from "lit";
11
+ import { property } from "lit/decorators.js";
12
+ import { classMap } from "lit/directives/class-map.js";
13
+ import { DSElement } from "../../base/ds-element.js";
14
+ import { define } from "../../registry/define.js";
15
+ import type { FlexAlign, SpacingToken } from "../../types/layout-tokens.js";
16
+ import { SPACING_TOKENS } from "../../types/layout-tokens.js";
17
+ import { validateToken } from "../../utils/token-validator.js";
18
+
19
+ export class DsWrap extends DSElement {
20
+ static override styles = [];
21
+
22
+ /**
23
+ * Gap between items.
24
+ */
25
+ @property({ type: String, reflect: true })
26
+ gap: SpacingToken = "sm";
27
+
28
+ /**
29
+ * Row gap override.
30
+ */
31
+ @property({ type: String, reflect: true, attribute: "row-gap" })
32
+ rowGap?: SpacingToken;
33
+
34
+ /**
35
+ * Cross-axis alignment.
36
+ */
37
+ @property({ type: String, reflect: true })
38
+ align: FlexAlign = "start";
39
+
40
+ override connectedCallback(): void {
41
+ super.connectedCallback();
42
+ this.validateProps();
43
+ }
44
+
45
+ override updated(changedProperties: Map<string, unknown>): void {
46
+ super.updated(changedProperties);
47
+ if (
48
+ changedProperties.has("gap") ||
49
+ changedProperties.has("rowGap") ||
50
+ changedProperties.has("align")
51
+ ) {
52
+ this.validateProps();
53
+ }
54
+ }
55
+
56
+ private validateProps(): void {
57
+ validateToken(this.gap, SPACING_TOKENS, "gap", "ds-wrap");
58
+ if (this.rowGap) {
59
+ validateToken(this.rowGap, SPACING_TOKENS, "row-gap", "ds-wrap");
60
+ }
61
+ // Only validate start, center, end for Wrap align
62
+ const wrapAlignValues: readonly FlexAlign[] = ["start", "center", "end"];
63
+ validateToken(this.align, wrapAlignValues, "align", "ds-wrap");
64
+ }
65
+
66
+ override render(): TemplateResult {
67
+ const classes = {
68
+ "ds-wrap": true,
69
+ };
70
+
71
+ return html`
72
+ <div
73
+ class=${classMap(classes)}
74
+ data-gap=${this.gap}
75
+ data-row-gap=${this.rowGap || ""}
76
+ data-align=${this.align}
77
+ data-layout="wrap"
78
+ >
79
+ <slot></slot>
80
+ </div>
81
+ `;
82
+ }
83
+ }
84
+
85
+ // Register the component
86
+ define("ds-wrap", DsWrap);
87
+
88
+ // TypeScript declaration for HTML
89
+ declare global {
90
+ interface HTMLElementTagNameMap {
91
+ "ds-wrap": DsWrap;
92
+ }
93
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Wrap React Component
3
+ *
4
+ * Wrapping row layout for tags/chips.
5
+ */
6
+
7
+ import type React from "react";
8
+ import { createElement, forwardRef } from "react";
9
+
10
+ type SpacingToken = "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl";
11
+ type FlexAlign = "start" | "center" | "end";
12
+
13
+ export interface WrapProps {
14
+ /** Gap between items. */
15
+ gap?: SpacingToken;
16
+ /** Row gap override. */
17
+ rowGap?: SpacingToken;
18
+ /** Cross-axis alignment. */
19
+ align?: FlexAlign;
20
+ /** Additional CSS class names. */
21
+ className?: string;
22
+ /** Children elements. */
23
+ children?: React.ReactNode;
24
+ }
25
+
26
+ /**
27
+ * React wrapper for ds-wrap Web Component.
28
+ */
29
+ export const Wrap = forwardRef<HTMLElement, WrapProps>((props, ref) => {
30
+ const { gap = "sm", rowGap, align = "start", className, children, ...rest } = props;
31
+
32
+ return createElement(
33
+ "ds-wrap",
34
+ {
35
+ ref,
36
+ gap,
37
+ "row-gap": rowGap,
38
+ align,
39
+ class: className,
40
+ ...rest,
41
+ },
42
+ children
43
+ );
44
+ });
45
+
46
+ Wrap.displayName = "Wrap";