@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,177 @@
1
+ /**
2
+ * AppShell React Component
3
+ *
4
+ * Application structure with compound component pattern.
5
+ */
6
+
7
+ import type React from "react";
8
+ import { createElement, forwardRef } from "react";
9
+
10
+ type SidebarPosition = "left" | "right" | "none";
11
+
12
+ // ============================================
13
+ // AppShell Root
14
+ // ============================================
15
+
16
+ export interface AppShellProps {
17
+ /** Sidebar position. */
18
+ sidebarPosition?: SidebarPosition;
19
+ /** Additional CSS class names. */
20
+ className?: string;
21
+ /** Children elements. */
22
+ children?: React.ReactNode;
23
+ }
24
+
25
+ const AppShellRoot = forwardRef<HTMLElement, AppShellProps>((props, ref) => {
26
+ const { sidebarPosition = "none", className, children, ...rest } = props;
27
+
28
+ return createElement(
29
+ "ds-app-shell",
30
+ {
31
+ ref,
32
+ "sidebar-position": sidebarPosition,
33
+ class: className,
34
+ ...rest,
35
+ },
36
+ children
37
+ );
38
+ });
39
+
40
+ AppShellRoot.displayName = "AppShell";
41
+
42
+ // ============================================
43
+ // Header Sub-component
44
+ // ============================================
45
+
46
+ export interface HeaderProps {
47
+ /** Enable sticky positioning. */
48
+ sticky?: boolean;
49
+ /** Enable safe area insets. */
50
+ safeArea?: boolean;
51
+ /** Additional CSS class names. */
52
+ className?: string;
53
+ /** Children elements. */
54
+ children?: React.ReactNode;
55
+ }
56
+
57
+ const Header = forwardRef<HTMLElement, HeaderProps>((props, ref) => {
58
+ const { sticky = false, safeArea = false, className, children, ...rest } = props;
59
+
60
+ return createElement(
61
+ "ds-header",
62
+ {
63
+ ref,
64
+ slot: "header",
65
+ sticky: sticky || undefined,
66
+ "safe-area": safeArea || undefined,
67
+ class: className,
68
+ ...rest,
69
+ },
70
+ children
71
+ );
72
+ });
73
+
74
+ Header.displayName = "AppShell.Header";
75
+
76
+ // ============================================
77
+ // Footer Sub-component
78
+ // ============================================
79
+
80
+ export interface FooterProps {
81
+ /** Enable sticky positioning. */
82
+ sticky?: boolean;
83
+ /** Enable safe area insets. */
84
+ safeArea?: boolean;
85
+ /** Additional CSS class names. */
86
+ className?: string;
87
+ /** Children elements. */
88
+ children?: React.ReactNode;
89
+ }
90
+
91
+ const Footer = forwardRef<HTMLElement, FooterProps>((props, ref) => {
92
+ const { sticky = false, safeArea = false, className, children, ...rest } = props;
93
+
94
+ return createElement(
95
+ "ds-footer",
96
+ {
97
+ ref,
98
+ slot: "footer",
99
+ sticky: sticky || undefined,
100
+ "safe-area": safeArea || undefined,
101
+ class: className,
102
+ ...rest,
103
+ },
104
+ children
105
+ );
106
+ });
107
+
108
+ Footer.displayName = "AppShell.Footer";
109
+
110
+ // ============================================
111
+ // Main Sub-component
112
+ // ============================================
113
+
114
+ export interface MainProps {
115
+ /** Element ID for skip-link targeting. */
116
+ id?: string;
117
+ /** Additional CSS class names. */
118
+ className?: string;
119
+ /** Children elements. */
120
+ children?: React.ReactNode;
121
+ }
122
+
123
+ const Main = forwardRef<HTMLElement, MainProps>((props, ref) => {
124
+ const { id = "main-content", className, children, ...rest } = props;
125
+
126
+ return createElement(
127
+ "ds-main",
128
+ {
129
+ ref,
130
+ id,
131
+ class: className,
132
+ ...rest,
133
+ },
134
+ children
135
+ );
136
+ });
137
+
138
+ Main.displayName = "AppShell.Main";
139
+
140
+ // ============================================
141
+ // Sidebar Sub-component
142
+ // ============================================
143
+
144
+ export interface SidebarProps {
145
+ /** Additional CSS class names. */
146
+ className?: string;
147
+ /** Children elements. */
148
+ children?: React.ReactNode;
149
+ }
150
+
151
+ const Sidebar = forwardRef<HTMLElement, SidebarProps>((props, ref) => {
152
+ const { className, children, ...rest } = props;
153
+
154
+ return createElement(
155
+ "aside",
156
+ {
157
+ ref,
158
+ slot: "sidebar",
159
+ class: `ds-sidebar ${className || ""}`.trim(),
160
+ ...rest,
161
+ },
162
+ children
163
+ );
164
+ });
165
+
166
+ Sidebar.displayName = "AppShell.Sidebar";
167
+
168
+ // ============================================
169
+ // Compound Component Export
170
+ // ============================================
171
+
172
+ export const AppShell = Object.assign(AppShellRoot, {
173
+ Header,
174
+ Footer,
175
+ Main,
176
+ Sidebar,
177
+ });
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Box React Component
3
+ *
4
+ * Token-only styling escape hatch for padding, background, and radius.
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 SurfaceToken = "background" | "surface" | "surface-raised" | "surface-sunken" | "muted";
12
+ type RadiusToken = "none" | "sm" | "md" | "lg" | "xl" | "full";
13
+
14
+ export interface BoxProps {
15
+ /** Padding (all sides). */
16
+ p?: SpacingToken;
17
+ /** Horizontal padding. */
18
+ px?: SpacingToken;
19
+ /** Vertical padding. */
20
+ py?: SpacingToken;
21
+ /** Background color token. */
22
+ bg?: SurfaceToken;
23
+ /** Border radius token. */
24
+ radius?: RadiusToken;
25
+ /** Additional CSS class names. */
26
+ className?: string;
27
+ /** Children elements. */
28
+ children?: React.ReactNode;
29
+ }
30
+
31
+ /**
32
+ * React wrapper for ds-box Web Component.
33
+ */
34
+ export const Box = forwardRef<HTMLElement, BoxProps>((props, ref) => {
35
+ const { p, px, py, bg, radius, className, children, ...rest } = props;
36
+
37
+ return createElement(
38
+ "ds-box",
39
+ {
40
+ ref,
41
+ p,
42
+ px,
43
+ py,
44
+ bg,
45
+ radius,
46
+ class: className,
47
+ ...rest,
48
+ },
49
+ children
50
+ );
51
+ });
52
+
53
+ Box.displayName = "Box";
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Center React Component
3
+ *
4
+ * Centers content horizontally/vertically with optional max-width.
5
+ */
6
+
7
+ import type React from "react";
8
+ import { createElement, forwardRef } from "react";
9
+
10
+ type ContainerSizeToken = "sm" | "md" | "lg" | "xl" | "2xl" | "full";
11
+
12
+ export interface CenterProps {
13
+ /** Maximum width constraint. */
14
+ maxWidth?: ContainerSizeToken;
15
+ /** Enable vertical centering. */
16
+ vertical?: boolean;
17
+ /** Additional CSS class names. */
18
+ className?: string;
19
+ /** Children elements. */
20
+ children?: React.ReactNode;
21
+ }
22
+
23
+ /**
24
+ * React wrapper for ds-center Web Component.
25
+ */
26
+ export const Center = forwardRef<HTMLElement, CenterProps>((props, ref) => {
27
+ const { maxWidth, vertical = false, className, children, ...rest } = props;
28
+
29
+ return createElement(
30
+ "ds-center",
31
+ {
32
+ ref,
33
+ "max-width": maxWidth,
34
+ vertical: vertical || undefined,
35
+ class: className,
36
+ ...rest,
37
+ },
38
+ children
39
+ );
40
+ });
41
+
42
+ Center.displayName = "Center";
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Container React Component
3
+ *
4
+ * Constrains content width with responsive max-widths and padding.
5
+ */
6
+
7
+ import type React from "react";
8
+ import { createElement, forwardRef } from "react";
9
+
10
+ type ContainerSizeToken = "sm" | "md" | "lg" | "xl" | "2xl" | "full";
11
+ type SpacingToken = "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl";
12
+
13
+ export interface ContainerProps {
14
+ /** Maximum width constraint. */
15
+ size?: ContainerSizeToken;
16
+ /** Horizontal padding. */
17
+ padding?: SpacingToken;
18
+ /** Additional CSS class names. */
19
+ className?: string;
20
+ /** Children elements. */
21
+ children?: React.ReactNode;
22
+ }
23
+
24
+ /**
25
+ * React wrapper for ds-container Web Component.
26
+ */
27
+ export const Container = forwardRef<HTMLElement, ContainerProps>((props, ref) => {
28
+ const { size = "lg", padding = "md", className, children, ...rest } = props;
29
+
30
+ return createElement(
31
+ "ds-container",
32
+ {
33
+ ref,
34
+ size,
35
+ padding,
36
+ class: className,
37
+ ...rest,
38
+ },
39
+ children
40
+ );
41
+ });
42
+
43
+ Container.displayName = "Container";
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Flow React Component
3
+ *
4
+ * Primary 1D layout primitive with responsive direction switching.
5
+ */
6
+
7
+ import type React from "react";
8
+ import { createElement, forwardRef, useMemo } from "react";
9
+ import { type ResponsiveValue, parseResponsiveValue } from "../../hooks/use-responsive-classes.js";
10
+
11
+ type FlexDirection = "row" | "column" | "row-reverse" | "column-reverse";
12
+ type FlexAlign = "start" | "center" | "end" | "stretch" | "baseline";
13
+ type FlexJustify = "start" | "center" | "end" | "between" | "around" | "evenly";
14
+ type FlexWrap = "nowrap" | "wrap" | "wrap-reverse";
15
+ type SpacingToken = "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl";
16
+
17
+ export interface FlowProps {
18
+ /** Flex direction. Supports responsive object syntax. */
19
+ direction?: ResponsiveValue<FlexDirection>;
20
+ /** Gap between children. Supports responsive object syntax. */
21
+ gap?: ResponsiveValue<SpacingToken>;
22
+ /** Cross-axis alignment. */
23
+ align?: FlexAlign;
24
+ /** Main-axis alignment. */
25
+ justify?: FlexJustify;
26
+ /** Flex wrap behavior. */
27
+ wrap?: FlexWrap;
28
+ /** Use inline-flex instead of flex. */
29
+ inline?: boolean;
30
+ /** Additional CSS class names. */
31
+ className?: string;
32
+ /** Children elements. */
33
+ children?: React.ReactNode;
34
+ }
35
+
36
+ /**
37
+ * React wrapper for ds-flow Web Component.
38
+ */
39
+ export const Flow = forwardRef<HTMLElement, FlowProps>((props, ref) => {
40
+ const {
41
+ direction = "row",
42
+ gap = "none",
43
+ align = "stretch",
44
+ justify = "start",
45
+ wrap = "nowrap",
46
+ inline = false,
47
+ className,
48
+ children,
49
+ ...rest
50
+ } = props;
51
+
52
+ // Parse responsive values
53
+ const directionResult = useMemo(
54
+ () => parseResponsiveValue("flow", "dir", direction),
55
+ [direction]
56
+ );
57
+ const gapResult = useMemo(() => parseResponsiveValue("flow", "gap", gap), [gap]);
58
+
59
+ // Combine all classes
60
+ const allClasses = useMemo(() => {
61
+ const classes = [...directionResult.classes, ...gapResult.classes];
62
+ if (className) classes.push(className);
63
+ return classes.join(" ") || undefined;
64
+ }, [directionResult.classes, gapResult.classes, className]);
65
+
66
+ return createElement(
67
+ "ds-flow",
68
+ {
69
+ ref,
70
+ direction: directionResult.baseValue,
71
+ gap: gapResult.baseValue,
72
+ align,
73
+ justify,
74
+ wrap,
75
+ inline: inline || undefined,
76
+ class: allClasses,
77
+ ...rest,
78
+ },
79
+ children
80
+ );
81
+ });
82
+
83
+ Flow.displayName = "Flow";
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Grid React Component
3
+ *
4
+ * 2D grid layout with responsive columns.
5
+ */
6
+
7
+ import type React from "react";
8
+ import { createElement, forwardRef, useMemo } from "react";
9
+ import { type ResponsiveValue, parseResponsiveValue } from "../../hooks/use-responsive-classes.js";
10
+
11
+ type GridColumns = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | "auto-fit" | "auto-fill";
12
+ type SpacingToken = "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl";
13
+
14
+ export interface GridProps {
15
+ /** Number of columns. Supports responsive object syntax. */
16
+ columns?: ResponsiveValue<GridColumns>;
17
+ /** Gap between grid items. Supports responsive object syntax. */
18
+ gap?: ResponsiveValue<SpacingToken>;
19
+ /** Row gap override. */
20
+ rowGap?: SpacingToken;
21
+ /** Column gap override. */
22
+ columnGap?: SpacingToken;
23
+ /** Additional CSS class names. */
24
+ className?: string;
25
+ /** Children elements. */
26
+ children?: React.ReactNode;
27
+ }
28
+
29
+ /**
30
+ * React wrapper for ds-grid Web Component.
31
+ */
32
+ export const Grid = forwardRef<HTMLElement, GridProps>((props, ref) => {
33
+ const { columns = 1, gap = "md", rowGap, columnGap, className, children, ...rest } = props;
34
+
35
+ // Parse responsive values - convert numbers to strings
36
+ const columnsValue = useMemo(() => {
37
+ if (typeof columns === "number") {
38
+ return String(columns);
39
+ }
40
+ if (typeof columns === "object") {
41
+ const converted: Record<string, string> = {};
42
+ for (const [key, val] of Object.entries(columns)) {
43
+ converted[key] = String(val);
44
+ }
45
+ return converted;
46
+ }
47
+ return columns;
48
+ }, [columns]);
49
+
50
+ const columnsResult = useMemo(
51
+ () => parseResponsiveValue("grid", "cols", columnsValue as ResponsiveValue<string>),
52
+ [columnsValue]
53
+ );
54
+
55
+ const gapResult = useMemo(() => parseResponsiveValue("grid", "gap", gap), [gap]);
56
+
57
+ // Combine all classes
58
+ const allClasses = useMemo(() => {
59
+ const classes = [...columnsResult.classes, ...gapResult.classes];
60
+ if (className) classes.push(className);
61
+ return classes.join(" ") || undefined;
62
+ }, [columnsResult.classes, gapResult.classes, className]);
63
+
64
+ return createElement(
65
+ "ds-grid",
66
+ {
67
+ ref,
68
+ columns: columnsResult.baseValue,
69
+ gap: gapResult.baseValue,
70
+ "row-gap": rowGap,
71
+ "column-gap": columnGap,
72
+ class: allClasses,
73
+ ...rest,
74
+ },
75
+ children
76
+ );
77
+ });
78
+
79
+ Grid.displayName = "Grid";
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Layout Components Index
3
+ *
4
+ * Exports all layout primitive React components.
5
+ */
6
+
7
+ // Core Layout
8
+ export { Flow, type FlowProps } from "./flow.js";
9
+ export { Container, type ContainerProps } from "./container.js";
10
+ export { Grid, type GridProps } from "./grid.js";
11
+ export { Box, type BoxProps } from "./box.js";
12
+
13
+ // Page Composition
14
+ export { Page, type PageProps } from "./page.js";
15
+ export { Section, type SectionProps } from "./section.js";
16
+ export {
17
+ AppShell,
18
+ type AppShellProps,
19
+ type HeaderProps,
20
+ type FooterProps,
21
+ type MainProps,
22
+ type SidebarProps,
23
+ } from "./app-shell.js";
24
+
25
+ // Helpers
26
+ export { Spacer, type SpacerProps } from "./spacer.js";
27
+ export { Center, type CenterProps } from "./center.js";
28
+ export { Split, type SplitProps } from "./split.js";
29
+ export { Wrap, type WrapProps } from "./wrap.js";
30
+
31
+ // Aliases
32
+ export { Stack, type StackProps } from "./stack.js";
33
+ export { Inline, type InlineProps } from "./inline.js";
@@ -0,0 +1,16 @@
1
+ import { forwardRef } from "react";
2
+ import { Flow, type FlowProps } from "./flow.js";
3
+
4
+ export interface InlineProps extends Omit<FlowProps, "direction"> {
5
+ /** Gap between children. Supports responsive object syntax. */
6
+ gap?: FlowProps["gap"];
7
+ }
8
+
9
+ /**
10
+ * Inline is a Flow with direction="row".
11
+ */
12
+ export const Inline = forwardRef<HTMLElement, InlineProps>((props, ref) => {
13
+ return <Flow ref={ref} direction="row" {...props} />;
14
+ });
15
+
16
+ Inline.displayName = "Inline";
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Page React Component
3
+ *
4
+ * Page wrapper with min-height and background.
5
+ */
6
+
7
+ import type React from "react";
8
+ import { createElement, forwardRef } from "react";
9
+
10
+ type SurfaceToken = "background" | "surface" | "surface-raised" | "surface-sunken" | "muted";
11
+ type MinHeightValue = "viewport" | "full";
12
+
13
+ export interface PageProps {
14
+ /** Background color token. */
15
+ bg?: SurfaceToken;
16
+ /** Minimum height. */
17
+ minHeight?: MinHeightValue;
18
+ /** Additional CSS class names. */
19
+ className?: string;
20
+ /** Children elements. */
21
+ children?: React.ReactNode;
22
+ }
23
+
24
+ /**
25
+ * React wrapper for ds-page Web Component.
26
+ */
27
+ export const Page = forwardRef<HTMLElement, PageProps>((props, ref) => {
28
+ const { bg = "background", minHeight = "viewport", className, children, ...rest } = props;
29
+
30
+ return createElement(
31
+ "ds-page",
32
+ {
33
+ ref,
34
+ bg,
35
+ "min-height": minHeight,
36
+ class: className,
37
+ ...rest,
38
+ },
39
+ children
40
+ );
41
+ });
42
+
43
+ Page.displayName = "Page";
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Section React Component
3
+ *
4
+ * Semantic section wrapper with consistent vertical spacing.
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
+
12
+ export interface SectionProps {
13
+ /** Vertical padding. */
14
+ spacing?: SpacingToken;
15
+ /** Additional CSS class names. */
16
+ className?: string;
17
+ /** Children elements. */
18
+ children?: React.ReactNode;
19
+ }
20
+
21
+ /**
22
+ * React wrapper for ds-section Web Component.
23
+ */
24
+ export const Section = forwardRef<HTMLElement, SectionProps>((props, ref) => {
25
+ const { spacing = "lg", className, children, ...rest } = props;
26
+
27
+ return createElement(
28
+ "ds-section",
29
+ {
30
+ ref,
31
+ spacing,
32
+ class: className,
33
+ ...rest,
34
+ },
35
+ children
36
+ );
37
+ });
38
+
39
+ Section.displayName = "Section";
@@ -0,0 +1,30 @@
1
+ import { createElement, forwardRef } from "react";
2
+
3
+ type SpacingToken = "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl";
4
+ type SpacerAxis = "horizontal" | "vertical";
5
+
6
+ export interface SpacerProps {
7
+ /** Size of the space. */
8
+ size?: SpacingToken;
9
+ /** Axis direction. */
10
+ axis?: SpacerAxis;
11
+ /** Additional CSS class names. */
12
+ className?: string;
13
+ }
14
+
15
+ /**
16
+ * React wrapper for ds-spacer Web Component.
17
+ */
18
+ export const Spacer = forwardRef<HTMLElement, SpacerProps>((props, ref) => {
19
+ const { size = "md", axis = "vertical", className, ...rest } = props;
20
+
21
+ return createElement("ds-spacer", {
22
+ ref,
23
+ size,
24
+ axis,
25
+ class: className,
26
+ ...rest,
27
+ });
28
+ });
29
+
30
+ Spacer.displayName = "Spacer";
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Split React Component
3
+ *
4
+ * Two-region layout with collapse breakpoint.
5
+ */
6
+
7
+ import type React from "react";
8
+ import { createElement, forwardRef } from "react";
9
+
10
+ type BreakpointToken = "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl";
11
+ type SpacingToken = "none" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl";
12
+ type SplitRatio = "equal" | "1:2" | "2:1" | "1:3" | "3:1";
13
+
14
+ export interface SplitProps {
15
+ /** Breakpoint at which to collapse to single column. */
16
+ collapseAt?: BreakpointToken;
17
+ /** Gap between regions. */
18
+ gap?: SpacingToken;
19
+ /** Width ratio between regions. */
20
+ ratio?: SplitRatio;
21
+ /** Additional CSS class names. */
22
+ className?: string;
23
+ /** Children elements (should be exactly 2). */
24
+ children?: React.ReactNode;
25
+ }
26
+
27
+ /**
28
+ * React wrapper for ds-split Web Component.
29
+ */
30
+ export const Split = forwardRef<HTMLElement, SplitProps>((props, ref) => {
31
+ const { collapseAt = "md", gap = "md", ratio = "equal", className, children, ...rest } = props;
32
+
33
+ return createElement(
34
+ "ds-split",
35
+ {
36
+ ref,
37
+ "collapse-at": collapseAt,
38
+ gap,
39
+ ratio,
40
+ class: className,
41
+ ...rest,
42
+ },
43
+ children
44
+ );
45
+ });
46
+
47
+ Split.displayName = "Split";