@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,360 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AlertDialog compound component exports.
|
|
3
|
+
*
|
|
4
|
+
* AlertDialog is used for important confirmations that require explicit user action.
|
|
5
|
+
* Unlike Dialog, it cannot be dismissed by clicking outside or pressing Escape.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```tsx
|
|
9
|
+
* import { AlertDialog } from "@/components/ui";
|
|
10
|
+
*
|
|
11
|
+
* <AlertDialog.Root>
|
|
12
|
+
* <AlertDialog.Trigger>
|
|
13
|
+
* <button>Delete Account</button>
|
|
14
|
+
* </AlertDialog.Trigger>
|
|
15
|
+
* <AlertDialog.Content>
|
|
16
|
+
* <AlertDialog.Header>
|
|
17
|
+
* <AlertDialog.Title>Are you absolutely sure?</AlertDialog.Title>
|
|
18
|
+
* <AlertDialog.Description>
|
|
19
|
+
* This action cannot be undone.
|
|
20
|
+
* </AlertDialog.Description>
|
|
21
|
+
* </AlertDialog.Header>
|
|
22
|
+
* <AlertDialog.Footer>
|
|
23
|
+
* <AlertDialog.Cancel>
|
|
24
|
+
* <button>Cancel</button>
|
|
25
|
+
* </AlertDialog.Cancel>
|
|
26
|
+
* <AlertDialog.Action>
|
|
27
|
+
* <button>Delete</button>
|
|
28
|
+
* </AlertDialog.Action>
|
|
29
|
+
* </AlertDialog.Footer>
|
|
30
|
+
* </AlertDialog.Content>
|
|
31
|
+
* </AlertDialog.Root>
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
import {
|
|
36
|
+
type HTMLAttributes,
|
|
37
|
+
type ReactNode,
|
|
38
|
+
createElement,
|
|
39
|
+
forwardRef,
|
|
40
|
+
useCallback,
|
|
41
|
+
useEffect,
|
|
42
|
+
useRef,
|
|
43
|
+
useState,
|
|
44
|
+
} from "react";
|
|
45
|
+
|
|
46
|
+
// ============================================================================
|
|
47
|
+
// Types
|
|
48
|
+
// ============================================================================
|
|
49
|
+
|
|
50
|
+
export type AlertDialogContentSize = "sm" | "md" | "lg" | "xl" | "full";
|
|
51
|
+
|
|
52
|
+
export interface AlertDialogRootProps extends HTMLAttributes<HTMLElement> {
|
|
53
|
+
/** Content */
|
|
54
|
+
children?: ReactNode;
|
|
55
|
+
/** Controlled open state */
|
|
56
|
+
open?: boolean;
|
|
57
|
+
/** Default open state (uncontrolled) */
|
|
58
|
+
defaultOpen?: boolean;
|
|
59
|
+
/** Called when open state changes */
|
|
60
|
+
onOpenChange?: (open: boolean) => void;
|
|
61
|
+
/** Whether to animate open/close transitions */
|
|
62
|
+
animated?: boolean;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export interface AlertDialogTriggerProps extends HTMLAttributes<HTMLElement> {
|
|
66
|
+
/** Trigger content (typically a button) */
|
|
67
|
+
children?: ReactNode;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export interface AlertDialogContentProps extends HTMLAttributes<HTMLElement> {
|
|
71
|
+
/** Content */
|
|
72
|
+
children?: ReactNode;
|
|
73
|
+
/** Size of the content */
|
|
74
|
+
size?: AlertDialogContentSize;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export interface AlertDialogHeaderProps extends HTMLAttributes<HTMLElement> {
|
|
78
|
+
/** Header content */
|
|
79
|
+
children?: ReactNode;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export interface AlertDialogFooterProps extends HTMLAttributes<HTMLElement> {
|
|
83
|
+
/** Footer content */
|
|
84
|
+
children?: ReactNode;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export interface AlertDialogTitleProps extends HTMLAttributes<HTMLElement> {
|
|
88
|
+
/** Title content */
|
|
89
|
+
children?: ReactNode;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export interface AlertDialogDescriptionProps extends HTMLAttributes<HTMLElement> {
|
|
93
|
+
/** Description content */
|
|
94
|
+
children?: ReactNode;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export interface AlertDialogActionProps extends HTMLAttributes<HTMLElement> {
|
|
98
|
+
/** Action button content */
|
|
99
|
+
children?: ReactNode;
|
|
100
|
+
/** Called when action is clicked */
|
|
101
|
+
onClick?: () => void;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export interface AlertDialogCancelProps extends HTMLAttributes<HTMLElement> {
|
|
105
|
+
/** Cancel button content */
|
|
106
|
+
children?: ReactNode;
|
|
107
|
+
/** Called when cancel is clicked */
|
|
108
|
+
onClick?: () => void;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// ============================================================================
|
|
112
|
+
// Components
|
|
113
|
+
// ============================================================================
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* AlertDialog root component.
|
|
117
|
+
*/
|
|
118
|
+
const AlertDialogRoot = forwardRef<HTMLElement, AlertDialogRootProps>(function AlertDialogRoot(
|
|
119
|
+
{
|
|
120
|
+
children,
|
|
121
|
+
className,
|
|
122
|
+
open: controlledOpen,
|
|
123
|
+
defaultOpen = false,
|
|
124
|
+
onOpenChange,
|
|
125
|
+
animated = true,
|
|
126
|
+
...props
|
|
127
|
+
},
|
|
128
|
+
ref
|
|
129
|
+
) {
|
|
130
|
+
const [internalOpen, setInternalOpen] = useState(defaultOpen);
|
|
131
|
+
const isControlled = controlledOpen !== undefined;
|
|
132
|
+
const open = isControlled ? controlledOpen : internalOpen;
|
|
133
|
+
const elementRef = useRef<HTMLElement>(null);
|
|
134
|
+
|
|
135
|
+
// Combine refs
|
|
136
|
+
const combinedRef = (node: HTMLElement | null) => {
|
|
137
|
+
(elementRef as React.MutableRefObject<HTMLElement | null>).current = node;
|
|
138
|
+
if (typeof ref === "function") {
|
|
139
|
+
ref(node);
|
|
140
|
+
} else if (ref) {
|
|
141
|
+
(ref as React.MutableRefObject<HTMLElement | null>).current = node;
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
const handleOpenChange = useCallback(
|
|
146
|
+
(event: Event) => {
|
|
147
|
+
const customEvent = event as CustomEvent;
|
|
148
|
+
const isOpen = customEvent.type === "ds:open";
|
|
149
|
+
|
|
150
|
+
if (!isControlled) {
|
|
151
|
+
setInternalOpen(isOpen);
|
|
152
|
+
}
|
|
153
|
+
onOpenChange?.(isOpen);
|
|
154
|
+
},
|
|
155
|
+
[isControlled, onOpenChange]
|
|
156
|
+
);
|
|
157
|
+
|
|
158
|
+
// Attach event listeners
|
|
159
|
+
useEffect(() => {
|
|
160
|
+
const element = elementRef.current;
|
|
161
|
+
if (!element) return;
|
|
162
|
+
|
|
163
|
+
element.addEventListener("ds:open", handleOpenChange);
|
|
164
|
+
element.addEventListener("ds:close", handleOpenChange);
|
|
165
|
+
|
|
166
|
+
return () => {
|
|
167
|
+
element.removeEventListener("ds:open", handleOpenChange);
|
|
168
|
+
element.removeEventListener("ds:close", handleOpenChange);
|
|
169
|
+
};
|
|
170
|
+
}, [handleOpenChange]);
|
|
171
|
+
|
|
172
|
+
return createElement(
|
|
173
|
+
"ds-alert-dialog",
|
|
174
|
+
{
|
|
175
|
+
ref: combinedRef,
|
|
176
|
+
class: className,
|
|
177
|
+
open: open || undefined,
|
|
178
|
+
animated: animated || undefined,
|
|
179
|
+
...props,
|
|
180
|
+
},
|
|
181
|
+
children
|
|
182
|
+
);
|
|
183
|
+
});
|
|
184
|
+
AlertDialogRoot.displayName = "AlertDialog.Root";
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* AlertDialog trigger component.
|
|
188
|
+
*/
|
|
189
|
+
const AlertDialogTrigger = forwardRef<HTMLElement, AlertDialogTriggerProps>(
|
|
190
|
+
function AlertDialogTrigger({ children, className, ...props }, ref) {
|
|
191
|
+
return createElement("ds-alert-dialog-trigger", { ref, class: className, ...props }, children);
|
|
192
|
+
}
|
|
193
|
+
);
|
|
194
|
+
AlertDialogTrigger.displayName = "AlertDialog.Trigger";
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* AlertDialog content component.
|
|
198
|
+
*/
|
|
199
|
+
const AlertDialogContent = forwardRef<HTMLElement, AlertDialogContentProps>(
|
|
200
|
+
function AlertDialogContent({ children, className, size = "md", ...props }, ref) {
|
|
201
|
+
return createElement(
|
|
202
|
+
"ds-alert-dialog-content",
|
|
203
|
+
{ ref, class: className, size, ...props },
|
|
204
|
+
children
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
);
|
|
208
|
+
AlertDialogContent.displayName = "AlertDialog.Content";
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* AlertDialog header component.
|
|
212
|
+
*/
|
|
213
|
+
const AlertDialogHeader = forwardRef<HTMLElement, AlertDialogHeaderProps>(
|
|
214
|
+
function AlertDialogHeader({ children, className, ...props }, ref) {
|
|
215
|
+
return createElement("ds-alert-dialog-header", { ref, class: className, ...props }, children);
|
|
216
|
+
}
|
|
217
|
+
);
|
|
218
|
+
AlertDialogHeader.displayName = "AlertDialog.Header";
|
|
219
|
+
|
|
220
|
+
/**
|
|
221
|
+
* AlertDialog footer component.
|
|
222
|
+
*/
|
|
223
|
+
const AlertDialogFooter = forwardRef<HTMLElement, AlertDialogFooterProps>(
|
|
224
|
+
function AlertDialogFooter({ children, className, ...props }, ref) {
|
|
225
|
+
return createElement("ds-alert-dialog-footer", { ref, class: className, ...props }, children);
|
|
226
|
+
}
|
|
227
|
+
);
|
|
228
|
+
AlertDialogFooter.displayName = "AlertDialog.Footer";
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* AlertDialog title component.
|
|
232
|
+
*/
|
|
233
|
+
const AlertDialogTitle = forwardRef<HTMLElement, AlertDialogTitleProps>(function AlertDialogTitle(
|
|
234
|
+
{ children, className, ...props },
|
|
235
|
+
ref
|
|
236
|
+
) {
|
|
237
|
+
return createElement("ds-alert-dialog-title", { ref, class: className, ...props }, children);
|
|
238
|
+
});
|
|
239
|
+
AlertDialogTitle.displayName = "AlertDialog.Title";
|
|
240
|
+
|
|
241
|
+
/**
|
|
242
|
+
* AlertDialog description component.
|
|
243
|
+
*/
|
|
244
|
+
const AlertDialogDescription = forwardRef<HTMLElement, AlertDialogDescriptionProps>(
|
|
245
|
+
function AlertDialogDescription({ children, className, ...props }, ref) {
|
|
246
|
+
return createElement(
|
|
247
|
+
"ds-alert-dialog-description",
|
|
248
|
+
{ ref, class: className, ...props },
|
|
249
|
+
children
|
|
250
|
+
);
|
|
251
|
+
}
|
|
252
|
+
);
|
|
253
|
+
AlertDialogDescription.displayName = "AlertDialog.Description";
|
|
254
|
+
|
|
255
|
+
/**
|
|
256
|
+
* AlertDialog action component.
|
|
257
|
+
*/
|
|
258
|
+
const AlertDialogAction = forwardRef<HTMLElement, AlertDialogActionProps>(
|
|
259
|
+
function AlertDialogAction({ children, className, onClick, ...props }, ref) {
|
|
260
|
+
const elementRef = useRef<HTMLElement>(null);
|
|
261
|
+
|
|
262
|
+
// Combine refs
|
|
263
|
+
const combinedRef = (node: HTMLElement | null) => {
|
|
264
|
+
(elementRef as React.MutableRefObject<HTMLElement | null>).current = node;
|
|
265
|
+
if (typeof ref === "function") {
|
|
266
|
+
ref(node);
|
|
267
|
+
} else if (ref) {
|
|
268
|
+
(ref as React.MutableRefObject<HTMLElement | null>).current = node;
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
|
|
272
|
+
// Attach click handler
|
|
273
|
+
useEffect(() => {
|
|
274
|
+
const element = elementRef.current;
|
|
275
|
+
if (!element || !onClick) return;
|
|
276
|
+
|
|
277
|
+
const handleClick = () => onClick();
|
|
278
|
+
element.addEventListener("click", handleClick);
|
|
279
|
+
|
|
280
|
+
return () => {
|
|
281
|
+
element.removeEventListener("click", handleClick);
|
|
282
|
+
};
|
|
283
|
+
}, [onClick]);
|
|
284
|
+
|
|
285
|
+
return createElement(
|
|
286
|
+
"ds-alert-dialog-action",
|
|
287
|
+
{ ref: combinedRef, class: className, ...props },
|
|
288
|
+
children
|
|
289
|
+
);
|
|
290
|
+
}
|
|
291
|
+
);
|
|
292
|
+
AlertDialogAction.displayName = "AlertDialog.Action";
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* AlertDialog cancel component.
|
|
296
|
+
*/
|
|
297
|
+
const AlertDialogCancel = forwardRef<HTMLElement, AlertDialogCancelProps>(
|
|
298
|
+
function AlertDialogCancel({ children, className, onClick, ...props }, ref) {
|
|
299
|
+
const elementRef = useRef<HTMLElement>(null);
|
|
300
|
+
|
|
301
|
+
// Combine refs
|
|
302
|
+
const combinedRef = (node: HTMLElement | null) => {
|
|
303
|
+
(elementRef as React.MutableRefObject<HTMLElement | null>).current = node;
|
|
304
|
+
if (typeof ref === "function") {
|
|
305
|
+
ref(node);
|
|
306
|
+
} else if (ref) {
|
|
307
|
+
(ref as React.MutableRefObject<HTMLElement | null>).current = node;
|
|
308
|
+
}
|
|
309
|
+
};
|
|
310
|
+
|
|
311
|
+
// Attach click handler
|
|
312
|
+
useEffect(() => {
|
|
313
|
+
const element = elementRef.current;
|
|
314
|
+
if (!element || !onClick) return;
|
|
315
|
+
|
|
316
|
+
const handleClick = () => onClick();
|
|
317
|
+
element.addEventListener("click", handleClick);
|
|
318
|
+
|
|
319
|
+
return () => {
|
|
320
|
+
element.removeEventListener("click", handleClick);
|
|
321
|
+
};
|
|
322
|
+
}, [onClick]);
|
|
323
|
+
|
|
324
|
+
return createElement(
|
|
325
|
+
"ds-alert-dialog-cancel",
|
|
326
|
+
{ ref: combinedRef, class: className, ...props },
|
|
327
|
+
children
|
|
328
|
+
);
|
|
329
|
+
}
|
|
330
|
+
);
|
|
331
|
+
AlertDialogCancel.displayName = "AlertDialog.Cancel";
|
|
332
|
+
|
|
333
|
+
// ============================================================================
|
|
334
|
+
// Compound Component
|
|
335
|
+
// ============================================================================
|
|
336
|
+
|
|
337
|
+
export const AlertDialog = {
|
|
338
|
+
Root: AlertDialogRoot,
|
|
339
|
+
Trigger: AlertDialogTrigger,
|
|
340
|
+
Content: AlertDialogContent,
|
|
341
|
+
Header: AlertDialogHeader,
|
|
342
|
+
Footer: AlertDialogFooter,
|
|
343
|
+
Title: AlertDialogTitle,
|
|
344
|
+
Description: AlertDialogDescription,
|
|
345
|
+
Action: AlertDialogAction,
|
|
346
|
+
Cancel: AlertDialogCancel,
|
|
347
|
+
};
|
|
348
|
+
|
|
349
|
+
// Also export individual components
|
|
350
|
+
export {
|
|
351
|
+
AlertDialogRoot,
|
|
352
|
+
AlertDialogTrigger,
|
|
353
|
+
AlertDialogContent,
|
|
354
|
+
AlertDialogHeader,
|
|
355
|
+
AlertDialogFooter,
|
|
356
|
+
AlertDialogTitle,
|
|
357
|
+
AlertDialogDescription,
|
|
358
|
+
AlertDialogAction,
|
|
359
|
+
AlertDialogCancel,
|
|
360
|
+
};
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AlertDialogAction component - confirms the action and closes the dialog.
|
|
3
|
+
*
|
|
4
|
+
* @element ds-alert-dialog-action
|
|
5
|
+
*
|
|
6
|
+
* @slot - Action button content
|
|
7
|
+
*
|
|
8
|
+
* @fires ds:alert-dialog-action - Fired when action 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 DsAlertDialogAction 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 action event - parent will handle closing
|
|
29
|
+
emitEvent(this, "ds:alert-dialog-action", { bubbles: true });
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
override render() {
|
|
33
|
+
return html`<slot></slot>`;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
define("ds-alert-dialog-action", DsAlertDialogAction);
|
|
38
|
+
|
|
39
|
+
declare global {
|
|
40
|
+
interface HTMLElementTagNameMap {
|
|
41
|
+
"ds-alert-dialog-action": DsAlertDialogAction;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AlertDialogCancel component - cancels the action and closes the dialog.
|
|
3
|
+
*
|
|
4
|
+
* @element ds-alert-dialog-cancel
|
|
5
|
+
*
|
|
6
|
+
* @slot - Cancel button content
|
|
7
|
+
*
|
|
8
|
+
* @fires ds:alert-dialog-cancel - Fired when cancel 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 DsAlertDialogCancel 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 cancel event - parent will handle closing
|
|
29
|
+
emitEvent(this, "ds:alert-dialog-cancel", { bubbles: true });
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
override render() {
|
|
33
|
+
return html`<slot></slot>`;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
define("ds-alert-dialog-cancel", DsAlertDialogCancel);
|
|
38
|
+
|
|
39
|
+
declare global {
|
|
40
|
+
interface HTMLElementTagNameMap {
|
|
41
|
+
"ds-alert-dialog-cancel": DsAlertDialogCancel;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AlertDialogContent component - container for alert dialog content.
|
|
3
|
+
*
|
|
4
|
+
* @element ds-alert-dialog-content
|
|
5
|
+
*
|
|
6
|
+
* @slot - Alert dialog 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 AlertDialogContentSize = "sm" | "md" | "lg" | "xl" | "full";
|
|
15
|
+
|
|
16
|
+
export class DsAlertDialogContent extends DSElement {
|
|
17
|
+
/** Size of the alert dialog content */
|
|
18
|
+
@property({ reflect: true })
|
|
19
|
+
size: AlertDialogContentSize = "md";
|
|
20
|
+
|
|
21
|
+
/** Data state for animations */
|
|
22
|
+
@property({ attribute: "data-state", reflect: true })
|
|
23
|
+
dataState: "open" | "closed" = "closed";
|
|
24
|
+
|
|
25
|
+
override connectedCallback(): void {
|
|
26
|
+
super.connectedCallback();
|
|
27
|
+
|
|
28
|
+
// ARIA attributes are set by parent DsAlertDialog
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
override render() {
|
|
32
|
+
return html`<slot></slot>`;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
define("ds-alert-dialog-content", DsAlertDialogContent);
|
|
37
|
+
|
|
38
|
+
declare global {
|
|
39
|
+
interface HTMLElementTagNameMap {
|
|
40
|
+
"ds-alert-dialog-content": DsAlertDialogContent;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AlertDialogDescription component - description for the alert dialog.
|
|
3
|
+
*
|
|
4
|
+
* @element ds-alert-dialog-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 DsAlertDialogDescription 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 = `alert-dialog-desc-${crypto.randomUUID().slice(0, 8)}`;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
override render() {
|
|
24
|
+
return html`<slot></slot>`;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
define("ds-alert-dialog-description", DsAlertDialogDescription);
|
|
29
|
+
|
|
30
|
+
declare global {
|
|
31
|
+
interface HTMLElementTagNameMap {
|
|
32
|
+
"ds-alert-dialog-description": DsAlertDialogDescription;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AlertDialogFooter component - footer section for alert dialog actions.
|
|
3
|
+
*
|
|
4
|
+
* @element ds-alert-dialog-footer
|
|
5
|
+
*
|
|
6
|
+
* @slot - Footer content (action and cancel 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 DsAlertDialogFooter extends DSElement {
|
|
14
|
+
override render() {
|
|
15
|
+
return html`<slot></slot>`;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
define("ds-alert-dialog-footer", DsAlertDialogFooter);
|
|
20
|
+
|
|
21
|
+
declare global {
|
|
22
|
+
interface HTMLElementTagNameMap {
|
|
23
|
+
"ds-alert-dialog-footer": DsAlertDialogFooter;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AlertDialogHeader component - header section for alert dialog.
|
|
3
|
+
*
|
|
4
|
+
* @element ds-alert-dialog-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 DsAlertDialogHeader extends DSElement {
|
|
14
|
+
override render() {
|
|
15
|
+
return html`<slot></slot>`;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
define("ds-alert-dialog-header", DsAlertDialogHeader);
|
|
20
|
+
|
|
21
|
+
declare global {
|
|
22
|
+
interface HTMLElementTagNameMap {
|
|
23
|
+
"ds-alert-dialog-header": DsAlertDialogHeader;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AlertDialogTitle component - title for the alert dialog.
|
|
3
|
+
*
|
|
4
|
+
* @element ds-alert-dialog-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 DsAlertDialogTitle 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 = `alert-dialog-title-${crypto.randomUUID().slice(0, 8)}`;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
override render() {
|
|
24
|
+
return html`<slot></slot>`;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
define("ds-alert-dialog-title", DsAlertDialogTitle);
|
|
29
|
+
|
|
30
|
+
declare global {
|
|
31
|
+
interface HTMLElementTagNameMap {
|
|
32
|
+
"ds-alert-dialog-title": DsAlertDialogTitle;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AlertDialogTrigger component - element that opens the alert dialog.
|
|
3
|
+
*
|
|
4
|
+
* @element ds-alert-dialog-trigger
|
|
5
|
+
*
|
|
6
|
+
* @slot - Trigger content (typically a button)
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { html } from "lit";
|
|
10
|
+
import { DSElement } from "../../base/ds-element.js";
|
|
11
|
+
import { define } from "../../registry/define.js";
|
|
12
|
+
import type { DsAlertDialog } from "./alert-dialog.js";
|
|
13
|
+
|
|
14
|
+
export class DsAlertDialogTrigger extends DSElement {
|
|
15
|
+
override connectedCallback(): void {
|
|
16
|
+
super.connectedCallback();
|
|
17
|
+
|
|
18
|
+
// Set slot attribute
|
|
19
|
+
this.setAttribute("slot", "trigger");
|
|
20
|
+
|
|
21
|
+
// Add click handler
|
|
22
|
+
this.addEventListener("click", this.handleClick);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
override disconnectedCallback(): void {
|
|
26
|
+
super.disconnectedCallback();
|
|
27
|
+
this.removeEventListener("click", this.handleClick);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
private handleClick = (): void => {
|
|
31
|
+
const alertDialog = this.closest("ds-alert-dialog") as DsAlertDialog | null;
|
|
32
|
+
alertDialog?.show();
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
override render() {
|
|
36
|
+
return html`<slot></slot>`;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
define("ds-alert-dialog-trigger", DsAlertDialogTrigger);
|
|
41
|
+
|
|
42
|
+
declare global {
|
|
43
|
+
interface HTMLElementTagNameMap {
|
|
44
|
+
"ds-alert-dialog-trigger": DsAlertDialogTrigger;
|
|
45
|
+
}
|
|
46
|
+
}
|