@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.
- package/LICENSE +21 -0
- package/README.md +19 -115
- package/dist/{add-PDBC4JTE.js → add-V5PW73GC.js} +29 -17
- package/dist/{chunk-5LTQ2XVL.js → chunk-27CLUUVC.js} +0 -2
- package/dist/{chunk-YPKFYE45.js → chunk-NWIRSZUQ.js} +6 -13
- package/dist/{chunk-GJ6JOQ3Q.js → chunk-PBK72SJJ.js} +1 -1
- package/dist/{diff-BQEXG7HU.js → diff-776UATCA.js} +2 -2
- package/dist/index.js +5 -5
- package/dist/{init-7AZXYAPJ.js → init-GDU2PW7K.js} +10 -13
- package/dist/{list-X6ZLM2NQ.js → list-XDP5I537.js} +3 -3
- package/package.json +16 -12
- package/registry/components.json +1820 -206
- package/templates/accordion/index.tsx +266 -0
- package/templates/accordion/wc/accordion-content.ts +113 -0
- package/templates/accordion/wc/accordion-item.ts +111 -0
- package/templates/accordion/wc/accordion-trigger.ts +105 -0
- package/templates/accordion/wc/accordion.ts +213 -0
- package/templates/accordion/wc/index.ts +12 -0
- package/templates/alert/index.tsx +177 -0
- package/templates/alert/wc/alert.ts +167 -0
- package/templates/alert/wc/index.ts +1 -0
- package/templates/alert-dialog/index.tsx +360 -0
- package/templates/alert-dialog/wc/alert-dialog-action.ts +43 -0
- package/templates/alert-dialog/wc/alert-dialog-cancel.ts +43 -0
- package/templates/alert-dialog/wc/alert-dialog-content.ts +42 -0
- package/templates/alert-dialog/wc/alert-dialog-description.ts +34 -0
- package/templates/alert-dialog/wc/alert-dialog-footer.ts +25 -0
- package/templates/alert-dialog/wc/alert-dialog-header.ts +25 -0
- package/templates/alert-dialog/wc/alert-dialog-title.ts +34 -0
- package/templates/alert-dialog/wc/alert-dialog-trigger.ts +46 -0
- package/templates/alert-dialog/wc/alert-dialog.ts +302 -0
- package/templates/alert-dialog/wc/index.ts +13 -0
- package/templates/aspect-ratio/index.tsx +50 -0
- package/templates/aspect-ratio/wc/aspect-ratio.ts +78 -0
- package/templates/aspect-ratio/wc/index.ts +5 -0
- package/templates/avatar/avatar-group.tsx +88 -0
- package/templates/avatar/avatar.tsx +124 -0
- package/templates/avatar/index.tsx +33 -0
- package/templates/avatar/wc/avatar-group.ts +112 -0
- package/templates/avatar/wc/avatar.ts +184 -0
- package/templates/avatar/wc/index.ts +5 -0
- package/templates/badge/index.tsx +140 -0
- package/templates/badge/wc/badge.ts +119 -0
- package/templates/badge/wc/index.ts +9 -0
- package/templates/breadcrumb/index.tsx +157 -0
- package/templates/breadcrumb/wc/breadcrumb-item.ts +30 -0
- package/templates/breadcrumb/wc/breadcrumb-link.ts +70 -0
- package/templates/breadcrumb/wc/breadcrumb-list.ts +30 -0
- package/templates/breadcrumb/wc/breadcrumb-page.ts +32 -0
- package/templates/breadcrumb/wc/breadcrumb-separator.ts +31 -0
- package/templates/breadcrumb/wc/breadcrumb.ts +55 -0
- package/templates/breadcrumb/wc/index.ts +10 -0
- package/templates/button/button.tsx +119 -0
- package/templates/button/index.ts +1 -0
- package/templates/button/wc/button.ts +169 -0
- package/templates/calendar/index.tsx +149 -0
- package/templates/calendar/wc/calendar.ts +316 -0
- package/templates/calendar/wc/index.ts +4 -0
- package/templates/card/index.tsx +108 -0
- package/templates/card/wc/card-content.ts +25 -0
- package/templates/card/wc/card-footer.ts +25 -0
- package/templates/card/wc/card-header.ts +25 -0
- package/templates/card/wc/card.ts +43 -0
- package/templates/card/wc/index.ts +8 -0
- package/templates/checkbox/checkbox.tsx +85 -0
- package/templates/checkbox/wc/checkbox.ts +247 -0
- package/templates/collapsible/index.tsx +172 -0
- package/templates/collapsible/wc/collapsible-content.ts +97 -0
- package/templates/collapsible/wc/collapsible-trigger.ts +39 -0
- package/templates/collapsible/wc/collapsible.ts +143 -0
- package/templates/collapsible/wc/index.ts +7 -0
- package/templates/combobox/combobox-content.tsx +141 -0
- package/templates/combobox/combobox-context.ts +36 -0
- package/templates/combobox/combobox-empty.tsx +38 -0
- package/templates/combobox/combobox-input.tsx +159 -0
- package/templates/combobox/combobox-loading.tsx +38 -0
- package/templates/combobox/combobox-option.tsx +99 -0
- package/templates/combobox/combobox-root.tsx +207 -0
- package/templates/combobox/combobox-tag.tsx +62 -0
- package/templates/combobox/index.ts +62 -0
- package/templates/combobox/wc/combobox-content.ts +97 -0
- package/templates/combobox/wc/combobox-input.ts +134 -0
- package/templates/combobox/wc/combobox-option.ts +111 -0
- package/templates/combobox/wc/combobox-tag.ts +103 -0
- package/templates/combobox/wc/combobox.ts +981 -0
- package/templates/combobox/wc/index.ts +5 -0
- package/templates/command/index.tsx +279 -0
- package/templates/command/wc/command-empty.ts +24 -0
- package/templates/command/wc/command-group.ts +60 -0
- package/templates/command/wc/command-input.ts +136 -0
- package/templates/command/wc/command-item.ts +78 -0
- package/templates/command/wc/command-list.ts +103 -0
- package/templates/command/wc/command-loading.ts +24 -0
- package/templates/command/wc/command-separator.ts +23 -0
- package/templates/command/wc/command.ts +176 -0
- package/templates/context-menu/index.tsx +262 -0
- package/templates/context-menu/wc/context-menu-content.ts +41 -0
- package/templates/context-menu/wc/context-menu-item.ts +83 -0
- package/templates/context-menu/wc/context-menu-label.ts +30 -0
- package/templates/context-menu/wc/context-menu-separator.ts +28 -0
- package/templates/context-menu/wc/context-menu.ts +324 -0
- package/templates/context-menu/wc/index.ts +9 -0
- package/templates/data-table/index.tsx +263 -0
- package/templates/data-table/wc/data-table.ts +405 -0
- package/templates/data-table/wc/index.ts +10 -0
- package/templates/date-picker/date-picker-calendar.tsx +352 -0
- package/templates/date-picker/date-picker-content.tsx +121 -0
- package/templates/date-picker/date-picker-context.ts +46 -0
- package/templates/date-picker/date-picker-root.tsx +201 -0
- package/templates/date-picker/date-picker-trigger.tsx +95 -0
- package/templates/date-picker/index.ts +44 -0
- package/templates/date-picker/wc/date-picker-calendar.ts +457 -0
- package/templates/date-picker/wc/date-picker.ts +592 -0
- package/templates/date-picker/wc/date-utils.ts +467 -0
- package/templates/date-picker/wc/index.ts +3 -0
- package/templates/dialog/dialog-close.tsx +57 -0
- package/templates/dialog/dialog-content.tsx +106 -0
- package/templates/dialog/dialog-context.ts +24 -0
- package/templates/dialog/dialog-description.tsx +51 -0
- package/templates/dialog/dialog-root.tsx +104 -0
- package/templates/dialog/dialog-title.tsx +38 -0
- package/templates/dialog/dialog-trigger.tsx +94 -0
- package/templates/dialog/index.ts +52 -0
- package/templates/dialog/wc/dialog-content.ts +59 -0
- package/templates/dialog/wc/dialog-description.ts +58 -0
- package/templates/dialog/wc/dialog-title.ts +56 -0
- package/templates/dialog/wc/dialog.ts +411 -0
- package/templates/drawer/index.tsx +263 -0
- package/templates/drawer/wc/drawer-content.ts +150 -0
- package/templates/drawer/wc/drawer-description.ts +34 -0
- package/templates/drawer/wc/drawer-footer.ts +25 -0
- package/templates/drawer/wc/drawer-header.ts +25 -0
- package/templates/drawer/wc/drawer-title.ts +34 -0
- package/templates/drawer/wc/drawer.ts +348 -0
- package/templates/drawer/wc/index.ts +10 -0
- package/templates/dropdown-menu/index.tsx +454 -0
- package/templates/dropdown-menu/wc/dropdown-menu-checkbox-item.ts +93 -0
- package/templates/dropdown-menu/wc/dropdown-menu-content.ts +43 -0
- package/templates/dropdown-menu/wc/dropdown-menu-item.ts +85 -0
- package/templates/dropdown-menu/wc/dropdown-menu-label.ts +31 -0
- package/templates/dropdown-menu/wc/dropdown-menu-radio-group.ts +80 -0
- package/templates/dropdown-menu/wc/dropdown-menu-radio-item.ts +101 -0
- package/templates/dropdown-menu/wc/dropdown-menu-separator.ts +28 -0
- package/templates/dropdown-menu/wc/dropdown-menu.ts +358 -0
- package/templates/dropdown-menu/wc/index.ts +12 -0
- package/templates/field/field-description.tsx +39 -0
- package/templates/field/field-error.tsx +37 -0
- package/templates/field/field.tsx +46 -0
- package/templates/field/index.ts +4 -0
- package/templates/field/label.tsx +40 -0
- package/templates/field/wc/field-description.ts +42 -0
- package/templates/field/wc/field-error.ts +46 -0
- package/templates/field/wc/field.ts +210 -0
- package/templates/field/wc/label.ts +54 -0
- package/templates/file-upload/file-upload-context.ts +26 -0
- package/templates/file-upload/file-upload-dropzone.tsx +111 -0
- package/templates/file-upload/file-upload-input.tsx +86 -0
- package/templates/file-upload/file-upload-item.tsx +105 -0
- package/templates/file-upload/file-upload-root.tsx +115 -0
- package/templates/file-upload/index.ts +50 -0
- package/templates/file-upload/wc/file-upload.ts +380 -0
- package/templates/file-upload/wc/index.ts +1 -0
- package/templates/hover-card/index.tsx +203 -0
- package/templates/hover-card/wc/hover-card-content.ts +50 -0
- package/templates/hover-card/wc/hover-card.ts +382 -0
- package/templates/hover-card/wc/index.ts +6 -0
- package/templates/icon/icon.tsx +76 -0
- package/templates/icon/wc/icon-adapter.ts +108 -0
- package/templates/icon/wc/icon.ts +161 -0
- package/templates/input/input.tsx +130 -0
- package/templates/input/wc/input.ts +216 -0
- package/templates/layout/app-shell.tsx +177 -0
- package/templates/layout/box.tsx +53 -0
- package/templates/layout/center.tsx +42 -0
- package/templates/layout/container.tsx +43 -0
- package/templates/layout/flow.tsx +83 -0
- package/templates/layout/grid.tsx +79 -0
- package/templates/layout/index.ts +33 -0
- package/templates/layout/inline.tsx +16 -0
- package/templates/layout/page.tsx +43 -0
- package/templates/layout/section.tsx +39 -0
- package/templates/layout/spacer.tsx +30 -0
- package/templates/layout/split.tsx +47 -0
- package/templates/layout/stack.tsx +16 -0
- package/templates/layout/wc/app-shell.ts +58 -0
- package/templates/layout/wc/box.ts +117 -0
- package/templates/layout/wc/center.ts +78 -0
- package/templates/layout/wc/container.ts +77 -0
- package/templates/layout/wc/flow.ts +149 -0
- package/templates/layout/wc/footer.ts +57 -0
- package/templates/layout/wc/grid.ts +142 -0
- package/templates/layout/wc/header.ts +57 -0
- package/templates/layout/wc/index.ts +41 -0
- package/templates/layout/wc/main.ts +46 -0
- package/templates/layout/wc/page.ts +81 -0
- package/templates/layout/wc/section.ts +65 -0
- package/templates/layout/wc/spacer.ts +77 -0
- package/templates/layout/wc/split.ts +94 -0
- package/templates/layout/wc/wrap.ts +93 -0
- package/templates/layout/wrap.tsx +46 -0
- package/templates/link/link.tsx +109 -0
- package/templates/link/wc/link.ts +124 -0
- package/templates/list/index.tsx +55 -0
- package/templates/list/list-item.tsx +117 -0
- package/templates/list/list.tsx +115 -0
- package/templates/list/wc/index.ts +5 -0
- package/templates/list/wc/list-item.ts +127 -0
- package/templates/list/wc/list.ts +114 -0
- package/templates/menu/index.ts +49 -0
- package/templates/menu/menu-content.tsx +109 -0
- package/templates/menu/menu-context.ts +17 -0
- package/templates/menu/menu-item.tsx +108 -0
- package/templates/menu/menu-label.tsx +32 -0
- package/templates/menu/menu-root.tsx +108 -0
- package/templates/menu/menu-separator.tsx +24 -0
- package/templates/menu/menu-trigger.tsx +104 -0
- package/templates/menu/wc/menu-content.ts +67 -0
- package/templates/menu/wc/menu-item.ts +109 -0
- package/templates/menu/wc/menu.ts +449 -0
- package/templates/navigation-menu/index.tsx +328 -0
- package/templates/navigation-menu/wc/index.ts +12 -0
- package/templates/navigation-menu/wc/navigation-menu-content.ts +30 -0
- package/templates/navigation-menu/wc/navigation-menu-indicator.ts +30 -0
- package/templates/navigation-menu/wc/navigation-menu-item.ts +60 -0
- package/templates/navigation-menu/wc/navigation-menu-link.ts +97 -0
- package/templates/navigation-menu/wc/navigation-menu-list.ts +30 -0
- package/templates/navigation-menu/wc/navigation-menu-trigger.ts +110 -0
- package/templates/navigation-menu/wc/navigation-menu-viewport.ts +85 -0
- package/templates/navigation-menu/wc/navigation-menu.ts +272 -0
- package/templates/number-input/index.ts +46 -0
- package/templates/number-input/number-input-context.ts +38 -0
- package/templates/number-input/number-input-decrement.tsx +53 -0
- package/templates/number-input/number-input-field.tsx +93 -0
- package/templates/number-input/number-input-increment.tsx +53 -0
- package/templates/number-input/number-input-root.tsx +137 -0
- package/templates/number-input/wc/index.ts +1 -0
- package/templates/number-input/wc/number-input.ts +283 -0
- package/templates/pagination/index.tsx +198 -0
- package/templates/pagination/wc/index.ts +11 -0
- package/templates/pagination/wc/pagination-content.ts +30 -0
- package/templates/pagination/wc/pagination-ellipsis.ts +28 -0
- package/templates/pagination/wc/pagination-item.ts +30 -0
- package/templates/pagination/wc/pagination-link.ts +76 -0
- package/templates/pagination/wc/pagination-next.ts +69 -0
- package/templates/pagination/wc/pagination-previous.ts +69 -0
- package/templates/pagination/wc/pagination.ts +156 -0
- package/templates/pin-input/index.ts +39 -0
- package/templates/pin-input/pin-input-context.ts +30 -0
- package/templates/pin-input/pin-input-field.tsx +186 -0
- package/templates/pin-input/pin-input-root.tsx +120 -0
- package/templates/pin-input/wc/index.ts +1 -0
- package/templates/pin-input/wc/pin-input.ts +259 -0
- package/templates/popover/popover.tsx +121 -0
- package/templates/popover/wc/popover-content.ts +66 -0
- package/templates/popover/wc/popover.ts +343 -0
- package/templates/progress/index.tsx +117 -0
- package/templates/progress/wc/index.ts +4 -0
- package/templates/progress/wc/progress.ts +174 -0
- package/templates/radio/radio.tsx +43 -0
- package/templates/radio/wc/radio-group.ts +261 -0
- package/templates/radio/wc/radio.ts +145 -0
- package/templates/scroll-area/index.tsx +144 -0
- package/templates/scroll-area/wc/index.ts +8 -0
- package/templates/scroll-area/wc/scroll-area-scrollbar.ts +143 -0
- package/templates/scroll-area/wc/scroll-area-thumb.ts +225 -0
- package/templates/scroll-area/wc/scroll-area-viewport.ts +120 -0
- package/templates/scroll-area/wc/scroll-area.ts +63 -0
- package/templates/select/index.ts +57 -0
- package/templates/select/select-content.tsx +243 -0
- package/templates/select/select-context.ts +30 -0
- package/templates/select/select-group.tsx +53 -0
- package/templates/select/select-label.tsx +34 -0
- package/templates/select/select-option.tsx +97 -0
- package/templates/select/select-root.tsx +153 -0
- package/templates/select/select-separator.tsx +27 -0
- package/templates/select/select-trigger.tsx +112 -0
- package/templates/select/select-value.tsx +48 -0
- package/templates/select/wc/index.ts +6 -0
- package/templates/select/wc/select-content.ts +89 -0
- package/templates/select/wc/select-group.ts +82 -0
- package/templates/select/wc/select-label.ts +49 -0
- package/templates/select/wc/select-option.ts +111 -0
- package/templates/select/wc/select-trigger.ts +101 -0
- package/templates/select/wc/select.ts +840 -0
- package/templates/separator/index.tsx +49 -0
- package/templates/separator/wc/index.ts +5 -0
- package/templates/separator/wc/separator.ts +60 -0
- package/templates/sheet/index.tsx +291 -0
- package/templates/sheet/wc/index.ts +12 -0
- package/templates/sheet/wc/sheet-close.ts +43 -0
- package/templates/sheet/wc/sheet-content.ts +47 -0
- package/templates/sheet/wc/sheet-description.ts +34 -0
- package/templates/sheet/wc/sheet-footer.ts +25 -0
- package/templates/sheet/wc/sheet-header.ts +25 -0
- package/templates/sheet/wc/sheet-overlay.ts +23 -0
- package/templates/sheet/wc/sheet-title.ts +34 -0
- package/templates/sheet/wc/sheet.ts +336 -0
- package/templates/skeleton/index.tsx +131 -0
- package/templates/skeleton/wc/index.ts +10 -0
- package/templates/skeleton/wc/skeleton.ts +107 -0
- package/templates/slider/index.ts +41 -0
- package/templates/slider/slider-context.ts +36 -0
- package/templates/slider/slider-range.tsx +59 -0
- package/templates/slider/slider-root.tsx +166 -0
- package/templates/slider/slider-thumb.tsx +213 -0
- package/templates/slider/slider-track.tsx +113 -0
- package/templates/slider/wc/index.ts +1 -0
- package/templates/slider/wc/slider.ts +465 -0
- package/templates/spinner/spinner.tsx +64 -0
- package/templates/spinner/wc/spinner.ts +70 -0
- package/templates/stepper/index.tsx +230 -0
- package/templates/stepper/wc/index.ts +12 -0
- package/templates/stepper/wc/stepper-content.ts +30 -0
- package/templates/stepper/wc/stepper-description.ts +25 -0
- package/templates/stepper/wc/stepper-indicator.ts +30 -0
- package/templates/stepper/wc/stepper-item.ts +55 -0
- package/templates/stepper/wc/stepper-separator.ts +29 -0
- package/templates/stepper/wc/stepper-title.ts +25 -0
- package/templates/stepper/wc/stepper-trigger.ts +67 -0
- package/templates/stepper/wc/stepper.ts +164 -0
- package/templates/switch/switch.tsx +90 -0
- package/templates/switch/wc/switch.ts +228 -0
- package/templates/table/body.tsx +21 -0
- package/templates/table/cell.tsx +44 -0
- package/templates/table/head.tsx +112 -0
- package/templates/table/header.tsx +21 -0
- package/templates/table/index.tsx +93 -0
- package/templates/table/root.tsx +82 -0
- package/templates/table/row.tsx +36 -0
- package/templates/table/wc/index.ts +9 -0
- package/templates/table/wc/table-body.ts +32 -0
- package/templates/table/wc/table-cell.ts +58 -0
- package/templates/table/wc/table-head.ts +129 -0
- package/templates/table/wc/table-header.ts +32 -0
- package/templates/table/wc/table-row.ts +50 -0
- package/templates/table/wc/table.ts +93 -0
- package/templates/tabs/index.tsx +222 -0
- package/templates/tabs/wc/index.ts +8 -0
- package/templates/tabs/wc/tabs-content.ts +82 -0
- package/templates/tabs/wc/tabs-list.ts +56 -0
- package/templates/tabs/wc/tabs-trigger.ts +136 -0
- package/templates/tabs/wc/tabs.ts +202 -0
- package/templates/tag/index.tsx +186 -0
- package/templates/tag/wc/index.ts +4 -0
- package/templates/tag/wc/tag.ts +166 -0
- package/templates/text/text.tsx +100 -0
- package/templates/text/wc/text.ts +94 -0
- package/templates/textarea/textarea.tsx +134 -0
- package/templates/textarea/wc/textarea.ts +280 -0
- package/templates/time-picker/index.ts +42 -0
- package/templates/time-picker/time-picker-context.ts +28 -0
- package/templates/time-picker/time-picker-root.tsx +113 -0
- package/templates/time-picker/time-picker-segment.tsx +91 -0
- package/templates/time-picker/wc/index.ts +1 -0
- package/templates/time-picker/wc/time-picker.ts +221 -0
- package/templates/toast/index.tsx +71 -0
- package/templates/toast/provider.tsx +228 -0
- package/templates/toast/toast.tsx +142 -0
- package/templates/toast/use-toast.ts +89 -0
- package/templates/toast/wc/index.ts +15 -0
- package/templates/toast/wc/toast-controller.ts +282 -0
- package/templates/toast/wc/toast-provider.ts +161 -0
- package/templates/toast/wc/toast.ts +165 -0
- package/templates/tooltip/tooltip.tsx +62 -0
- package/templates/tooltip/wc/tooltip-content.ts +64 -0
- package/templates/tooltip/wc/tooltip.ts +289 -0
- package/templates/tree/index.tsx +60 -0
- package/templates/tree/tree-item.tsx +131 -0
- package/templates/tree/tree.tsx +138 -0
- package/templates/tree/wc/index.ts +11 -0
- package/templates/tree/wc/tree-item.ts +273 -0
- package/templates/tree/wc/tree-utils.ts +143 -0
- package/templates/tree/wc/tree.ts +139 -0
- package/templates/visually-hidden/visually-hidden.tsx +45 -0
- 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,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
|
+
}
|