@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,49 @@
1
+ /**
2
+ * Separator component React wrapper.
3
+ *
4
+ * @example
5
+ * ```tsx
6
+ * import { Separator } from "@/components/ui";
7
+ *
8
+ * <Separator />
9
+ * <Separator orientation="vertical" />
10
+ * <Separator decorative />
11
+ * ```
12
+ */
13
+
14
+ import { type HTMLAttributes, createElement, forwardRef } from "react";
15
+
16
+ // ============================================================================
17
+ // Types
18
+ // ============================================================================
19
+
20
+ export type SeparatorOrientation = "horizontal" | "vertical";
21
+
22
+ export interface SeparatorProps extends HTMLAttributes<HTMLElement> {
23
+ /** Visual orientation of the separator */
24
+ orientation?: SeparatorOrientation;
25
+ /** Whether the separator is purely decorative (no semantic meaning) */
26
+ decorative?: boolean;
27
+ }
28
+
29
+ // ============================================================================
30
+ // Component
31
+ // ============================================================================
32
+
33
+ /**
34
+ * Separator component - visual divider between content sections.
35
+ */
36
+ export const Separator = forwardRef<HTMLElement, SeparatorProps>(function Separator(
37
+ { className, orientation = "horizontal", decorative = false, ...props },
38
+ ref
39
+ ) {
40
+ return createElement("ds-separator", {
41
+ ref,
42
+ class: className,
43
+ orientation,
44
+ decorative: decorative || undefined,
45
+ ...props,
46
+ });
47
+ });
48
+
49
+ Separator.displayName = "Separator";
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Separator component barrel exports.
3
+ */
4
+
5
+ export { DsSeparator, type SeparatorOrientation } from "./separator.js";
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Separator component - visual divider between content sections.
3
+ *
4
+ * @element ds-separator
5
+ *
6
+ * @example
7
+ * ```html
8
+ * <ds-separator></ds-separator>
9
+ * <ds-separator orientation="vertical"></ds-separator>
10
+ * <ds-separator decorative></ds-separator>
11
+ * ```
12
+ */
13
+
14
+ import { html } from "lit";
15
+ import { property } from "lit/decorators.js";
16
+ import { DSElement } from "../../base/ds-element.js";
17
+ import { define } from "../../registry/define.js";
18
+
19
+ export type SeparatorOrientation = "horizontal" | "vertical";
20
+
21
+ export class DsSeparator extends DSElement {
22
+ /** Visual orientation of the separator */
23
+ @property({ reflect: true })
24
+ orientation: SeparatorOrientation = "horizontal";
25
+
26
+ /** Whether the separator is purely decorative (no semantic meaning) */
27
+ @property({ type: Boolean, reflect: true })
28
+ decorative = false;
29
+
30
+ override connectedCallback(): void {
31
+ super.connectedCallback();
32
+ this.updateAccessibility();
33
+ }
34
+
35
+ override updated(): void {
36
+ this.updateAccessibility();
37
+ }
38
+
39
+ private updateAccessibility(): void {
40
+ if (this.decorative) {
41
+ this.setAttribute("role", "none");
42
+ this.removeAttribute("aria-orientation");
43
+ } else {
44
+ this.setAttribute("role", "separator");
45
+ this.setAttribute("aria-orientation", this.orientation);
46
+ }
47
+ }
48
+
49
+ override render() {
50
+ return html``;
51
+ }
52
+ }
53
+
54
+ define("ds-separator", DsSeparator);
55
+
56
+ declare global {
57
+ interface HTMLElementTagNameMap {
58
+ "ds-separator": DsSeparator;
59
+ }
60
+ }
@@ -0,0 +1,291 @@
1
+ /**
2
+ * Sheet compound component exports.
3
+ *
4
+ * Sheet is a slide-in overlay panel from screen edges.
5
+ *
6
+ * @example
7
+ * ```tsx
8
+ * import { Sheet } from "@/components/ui";
9
+ *
10
+ * <Sheet.Root>
11
+ * <Sheet.Trigger>
12
+ * <button>Open Settings</button>
13
+ * </Sheet.Trigger>
14
+ * <Sheet.Content side="right">
15
+ * <Sheet.Header>
16
+ * <Sheet.Title>Settings</Sheet.Title>
17
+ * <Sheet.Description>Adjust your preferences</Sheet.Description>
18
+ * </Sheet.Header>
19
+ * <div>Settings content...</div>
20
+ * <Sheet.Footer>
21
+ * <Sheet.Close>
22
+ * <button>Close</button>
23
+ * </Sheet.Close>
24
+ * </Sheet.Footer>
25
+ * </Sheet.Content>
26
+ * </Sheet.Root>
27
+ * ```
28
+ */
29
+
30
+ import {
31
+ type HTMLAttributes,
32
+ type ReactNode,
33
+ createElement,
34
+ forwardRef,
35
+ useCallback,
36
+ useEffect,
37
+ useRef,
38
+ useState,
39
+ } from "react";
40
+
41
+ // ============================================================================
42
+ // Types
43
+ // ============================================================================
44
+
45
+ export type SheetSide = "top" | "right" | "bottom" | "left";
46
+ export type SheetContentSize = "sm" | "md" | "lg" | "xl" | "full";
47
+
48
+ export interface SheetRootProps extends HTMLAttributes<HTMLElement> {
49
+ /** Content */
50
+ children?: ReactNode;
51
+ /** Controlled open state */
52
+ open?: boolean;
53
+ /** Default open state (uncontrolled) */
54
+ defaultOpen?: boolean;
55
+ /** Called when open state changes */
56
+ onOpenChange?: (open: boolean) => void;
57
+ /** Whether Escape key closes the sheet */
58
+ closeOnEscape?: boolean;
59
+ /** Whether clicking the overlay closes the sheet */
60
+ closeOnOverlay?: boolean;
61
+ /** Whether to animate open/close transitions */
62
+ animated?: boolean;
63
+ }
64
+
65
+ export interface SheetTriggerProps extends HTMLAttributes<HTMLElement> {
66
+ /** Trigger content (typically a button) */
67
+ children?: ReactNode;
68
+ }
69
+
70
+ export interface SheetContentProps extends HTMLAttributes<HTMLElement> {
71
+ /** Content */
72
+ children?: ReactNode;
73
+ /** Side of the screen the sheet appears from */
74
+ side?: SheetSide;
75
+ /** Size of the content */
76
+ size?: SheetContentSize;
77
+ }
78
+
79
+ export interface SheetOverlayProps extends HTMLAttributes<HTMLElement> {}
80
+
81
+ export interface SheetHeaderProps extends HTMLAttributes<HTMLElement> {
82
+ /** Header content */
83
+ children?: ReactNode;
84
+ }
85
+
86
+ export interface SheetFooterProps extends HTMLAttributes<HTMLElement> {
87
+ /** Footer content */
88
+ children?: ReactNode;
89
+ }
90
+
91
+ export interface SheetTitleProps extends HTMLAttributes<HTMLElement> {
92
+ /** Title content */
93
+ children?: ReactNode;
94
+ }
95
+
96
+ export interface SheetDescriptionProps extends HTMLAttributes<HTMLElement> {
97
+ /** Description content */
98
+ children?: ReactNode;
99
+ }
100
+
101
+ export interface SheetCloseProps extends HTMLAttributes<HTMLElement> {
102
+ /** Close button content */
103
+ children?: ReactNode;
104
+ }
105
+
106
+ // ============================================================================
107
+ // Components
108
+ // ============================================================================
109
+
110
+ /**
111
+ * Sheet root component.
112
+ */
113
+ const SheetRoot = forwardRef<HTMLElement, SheetRootProps>(function SheetRoot(
114
+ {
115
+ children,
116
+ className,
117
+ open: controlledOpen,
118
+ defaultOpen = false,
119
+ onOpenChange,
120
+ closeOnEscape = true,
121
+ closeOnOverlay = true,
122
+ animated = true,
123
+ ...props
124
+ },
125
+ ref
126
+ ) {
127
+ const [internalOpen, setInternalOpen] = useState(defaultOpen);
128
+ const isControlled = controlledOpen !== undefined;
129
+ const open = isControlled ? controlledOpen : internalOpen;
130
+ const elementRef = useRef<HTMLElement>(null);
131
+
132
+ // Combine refs
133
+ const combinedRef = (node: HTMLElement | null) => {
134
+ (elementRef as React.MutableRefObject<HTMLElement | null>).current = node;
135
+ if (typeof ref === "function") {
136
+ ref(node);
137
+ } else if (ref) {
138
+ (ref as React.MutableRefObject<HTMLElement | null>).current = node;
139
+ }
140
+ };
141
+
142
+ const handleOpenChange = useCallback(
143
+ (event: Event) => {
144
+ const customEvent = event as CustomEvent;
145
+ const isOpen = customEvent.type === "ds:open";
146
+
147
+ if (!isControlled) {
148
+ setInternalOpen(isOpen);
149
+ }
150
+ onOpenChange?.(isOpen);
151
+ },
152
+ [isControlled, onOpenChange]
153
+ );
154
+
155
+ // Attach event listeners
156
+ useEffect(() => {
157
+ const element = elementRef.current;
158
+ if (!element) return;
159
+
160
+ element.addEventListener("ds:open", handleOpenChange);
161
+ element.addEventListener("ds:close", handleOpenChange);
162
+
163
+ return () => {
164
+ element.removeEventListener("ds:open", handleOpenChange);
165
+ element.removeEventListener("ds:close", handleOpenChange);
166
+ };
167
+ }, [handleOpenChange]);
168
+
169
+ return createElement(
170
+ "ds-sheet",
171
+ {
172
+ ref: combinedRef,
173
+ class: className,
174
+ open: open || undefined,
175
+ "close-on-escape": closeOnEscape,
176
+ "close-on-overlay": closeOnOverlay,
177
+ animated: animated || undefined,
178
+ ...props,
179
+ },
180
+ children
181
+ );
182
+ });
183
+ SheetRoot.displayName = "Sheet.Root";
184
+
185
+ /**
186
+ * Sheet trigger component.
187
+ */
188
+ const SheetTrigger = forwardRef<HTMLElement, SheetTriggerProps>(function SheetTrigger(
189
+ { children, className, ...props },
190
+ ref
191
+ ) {
192
+ return createElement("div", { ref, className, slot: "trigger", ...props }, children);
193
+ });
194
+ SheetTrigger.displayName = "Sheet.Trigger";
195
+
196
+ /**
197
+ * Sheet content component.
198
+ */
199
+ const SheetContent = forwardRef<HTMLElement, SheetContentProps>(function SheetContent(
200
+ { children, className, side = "right", size = "md", ...props },
201
+ ref
202
+ ) {
203
+ return createElement(
204
+ "ds-sheet-content",
205
+ { ref, class: className, side, size, ...props },
206
+ children
207
+ );
208
+ });
209
+ SheetContent.displayName = "Sheet.Content";
210
+
211
+ /**
212
+ * Sheet header component.
213
+ */
214
+ const SheetHeader = forwardRef<HTMLElement, SheetHeaderProps>(function SheetHeader(
215
+ { children, className, ...props },
216
+ ref
217
+ ) {
218
+ return createElement("ds-sheet-header", { ref, class: className, ...props }, children);
219
+ });
220
+ SheetHeader.displayName = "Sheet.Header";
221
+
222
+ /**
223
+ * Sheet footer component.
224
+ */
225
+ const SheetFooter = forwardRef<HTMLElement, SheetFooterProps>(function SheetFooter(
226
+ { children, className, ...props },
227
+ ref
228
+ ) {
229
+ return createElement("ds-sheet-footer", { ref, class: className, ...props }, children);
230
+ });
231
+ SheetFooter.displayName = "Sheet.Footer";
232
+
233
+ /**
234
+ * Sheet title component.
235
+ */
236
+ const SheetTitle = forwardRef<HTMLElement, SheetTitleProps>(function SheetTitle(
237
+ { children, className, ...props },
238
+ ref
239
+ ) {
240
+ return createElement("ds-sheet-title", { ref, class: className, ...props }, children);
241
+ });
242
+ SheetTitle.displayName = "Sheet.Title";
243
+
244
+ /**
245
+ * Sheet description component.
246
+ */
247
+ const SheetDescription = forwardRef<HTMLElement, SheetDescriptionProps>(function SheetDescription(
248
+ { children, className, ...props },
249
+ ref
250
+ ) {
251
+ return createElement("ds-sheet-description", { ref, class: className, ...props }, children);
252
+ });
253
+ SheetDescription.displayName = "Sheet.Description";
254
+
255
+ /**
256
+ * Sheet close component.
257
+ */
258
+ const SheetClose = forwardRef<HTMLElement, SheetCloseProps>(function SheetClose(
259
+ { children, className, ...props },
260
+ ref
261
+ ) {
262
+ return createElement("ds-sheet-close", { ref, class: className, ...props }, children);
263
+ });
264
+ SheetClose.displayName = "Sheet.Close";
265
+
266
+ // ============================================================================
267
+ // Compound Component
268
+ // ============================================================================
269
+
270
+ export const Sheet = {
271
+ Root: SheetRoot,
272
+ Trigger: SheetTrigger,
273
+ Content: SheetContent,
274
+ Header: SheetHeader,
275
+ Footer: SheetFooter,
276
+ Title: SheetTitle,
277
+ Description: SheetDescription,
278
+ Close: SheetClose,
279
+ };
280
+
281
+ // Also export individual components
282
+ export {
283
+ SheetRoot,
284
+ SheetTrigger,
285
+ SheetContent,
286
+ SheetHeader,
287
+ SheetFooter,
288
+ SheetTitle,
289
+ SheetDescription,
290
+ SheetClose,
291
+ };
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Sheet component exports.
3
+ */
4
+
5
+ export { DsSheet } from "./sheet.js";
6
+ export { DsSheetContent, type SheetSide, type SheetContentSize } from "./sheet-content.js";
7
+ export { DsSheetOverlay } from "./sheet-overlay.js";
8
+ export { DsSheetHeader } from "./sheet-header.js";
9
+ export { DsSheetFooter } from "./sheet-footer.js";
10
+ export { DsSheetTitle } from "./sheet-title.js";
11
+ export { DsSheetDescription } from "./sheet-description.js";
12
+ export { DsSheetClose } from "./sheet-close.js";
@@ -0,0 +1,43 @@
1
+ /**
2
+ * SheetClose component - closes the sheet when clicked.
3
+ *
4
+ * @element ds-sheet-close
5
+ *
6
+ * @slot - Close button content
7
+ *
8
+ * @fires ds:sheet-close - Fired when close is clicked
9
+ */
10
+
11
+ import { html } from "lit";
12
+ import { DSElement } from "../../base/ds-element.js";
13
+ import { emitEvent } from "../../events/emit.js";
14
+ import { define } from "../../registry/define.js";
15
+
16
+ export class DsSheetClose extends DSElement {
17
+ override connectedCallback(): void {
18
+ super.connectedCallback();
19
+ this.addEventListener("click", this.handleClick);
20
+ }
21
+
22
+ override disconnectedCallback(): void {
23
+ super.disconnectedCallback();
24
+ this.removeEventListener("click", this.handleClick);
25
+ }
26
+
27
+ private handleClick = (): void => {
28
+ // Emit close event - parent will handle closing
29
+ emitEvent(this, "ds:sheet-close", { bubbles: true });
30
+ };
31
+
32
+ override render() {
33
+ return html`<slot></slot>`;
34
+ }
35
+ }
36
+
37
+ define("ds-sheet-close", DsSheetClose);
38
+
39
+ declare global {
40
+ interface HTMLElementTagNameMap {
41
+ "ds-sheet-close": DsSheetClose;
42
+ }
43
+ }
@@ -0,0 +1,47 @@
1
+ /**
2
+ * SheetContent component - container for sheet content.
3
+ *
4
+ * @element ds-sheet-content
5
+ *
6
+ * @slot - Sheet content (header, body, footer)
7
+ */
8
+
9
+ import { html } from "lit";
10
+ import { property } from "lit/decorators.js";
11
+ import { DSElement } from "../../base/ds-element.js";
12
+ import { define } from "../../registry/define.js";
13
+
14
+ export type SheetSide = "top" | "right" | "bottom" | "left";
15
+ export type SheetContentSize = "sm" | "md" | "lg" | "xl" | "full";
16
+
17
+ export class DsSheetContent extends DSElement {
18
+ /** Side of the screen the sheet appears from */
19
+ @property({ reflect: true })
20
+ side: SheetSide = "right";
21
+
22
+ /** Size of the sheet content */
23
+ @property({ reflect: true })
24
+ size: SheetContentSize = "md";
25
+
26
+ /** Data state for animations */
27
+ @property({ attribute: "data-state", reflect: true })
28
+ dataState: "open" | "closed" = "closed";
29
+
30
+ override connectedCallback(): void {
31
+ super.connectedCallback();
32
+
33
+ // ARIA attributes are set by parent DsSheet
34
+ }
35
+
36
+ override render() {
37
+ return html`<slot></slot>`;
38
+ }
39
+ }
40
+
41
+ define("ds-sheet-content", DsSheetContent);
42
+
43
+ declare global {
44
+ interface HTMLElementTagNameMap {
45
+ "ds-sheet-content": DsSheetContent;
46
+ }
47
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * SheetDescription component - description for the sheet.
3
+ *
4
+ * @element ds-sheet-description
5
+ *
6
+ * @slot - Description content
7
+ */
8
+
9
+ import { html } from "lit";
10
+ import { DSElement } from "../../base/ds-element.js";
11
+ import { define } from "../../registry/define.js";
12
+
13
+ export class DsSheetDescription extends DSElement {
14
+ override connectedCallback(): void {
15
+ super.connectedCallback();
16
+
17
+ // Generate ID if not present (for aria-describedby)
18
+ if (!this.id) {
19
+ this.id = `sheet-desc-${crypto.randomUUID().slice(0, 8)}`;
20
+ }
21
+ }
22
+
23
+ override render() {
24
+ return html`<slot></slot>`;
25
+ }
26
+ }
27
+
28
+ define("ds-sheet-description", DsSheetDescription);
29
+
30
+ declare global {
31
+ interface HTMLElementTagNameMap {
32
+ "ds-sheet-description": DsSheetDescription;
33
+ }
34
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * SheetFooter component - footer section for sheet actions.
3
+ *
4
+ * @element ds-sheet-footer
5
+ *
6
+ * @slot - Footer content (action buttons)
7
+ */
8
+
9
+ import { html } from "lit";
10
+ import { DSElement } from "../../base/ds-element.js";
11
+ import { define } from "../../registry/define.js";
12
+
13
+ export class DsSheetFooter extends DSElement {
14
+ override render() {
15
+ return html`<slot></slot>`;
16
+ }
17
+ }
18
+
19
+ define("ds-sheet-footer", DsSheetFooter);
20
+
21
+ declare global {
22
+ interface HTMLElementTagNameMap {
23
+ "ds-sheet-footer": DsSheetFooter;
24
+ }
25
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * SheetHeader component - header section for sheet.
3
+ *
4
+ * @element ds-sheet-header
5
+ *
6
+ * @slot - Header content (title and description)
7
+ */
8
+
9
+ import { html } from "lit";
10
+ import { DSElement } from "../../base/ds-element.js";
11
+ import { define } from "../../registry/define.js";
12
+
13
+ export class DsSheetHeader extends DSElement {
14
+ override render() {
15
+ return html`<slot></slot>`;
16
+ }
17
+ }
18
+
19
+ define("ds-sheet-header", DsSheetHeader);
20
+
21
+ declare global {
22
+ interface HTMLElementTagNameMap {
23
+ "ds-sheet-header": DsSheetHeader;
24
+ }
25
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * SheetOverlay component - backdrop overlay behind the sheet.
3
+ *
4
+ * @element ds-sheet-overlay
5
+ */
6
+
7
+ import { html } from "lit";
8
+ import { DSElement } from "../../base/ds-element.js";
9
+ import { define } from "../../registry/define.js";
10
+
11
+ export class DsSheetOverlay extends DSElement {
12
+ override render() {
13
+ return html``;
14
+ }
15
+ }
16
+
17
+ define("ds-sheet-overlay", DsSheetOverlay);
18
+
19
+ declare global {
20
+ interface HTMLElementTagNameMap {
21
+ "ds-sheet-overlay": DsSheetOverlay;
22
+ }
23
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * SheetTitle component - title for the sheet.
3
+ *
4
+ * @element ds-sheet-title
5
+ *
6
+ * @slot - Title content
7
+ */
8
+
9
+ import { html } from "lit";
10
+ import { DSElement } from "../../base/ds-element.js";
11
+ import { define } from "../../registry/define.js";
12
+
13
+ export class DsSheetTitle extends DSElement {
14
+ override connectedCallback(): void {
15
+ super.connectedCallback();
16
+
17
+ // Generate ID if not present (for aria-labelledby)
18
+ if (!this.id) {
19
+ this.id = `sheet-title-${crypto.randomUUID().slice(0, 8)}`;
20
+ }
21
+ }
22
+
23
+ override render() {
24
+ return html`<slot></slot>`;
25
+ }
26
+ }
27
+
28
+ define("ds-sheet-title", DsSheetTitle);
29
+
30
+ declare global {
31
+ interface HTMLElementTagNameMap {
32
+ "ds-sheet-title": DsSheetTitle;
33
+ }
34
+ }