@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,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Breadcrumb compound component exports.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```tsx
|
|
6
|
+
* import { Breadcrumb } from "@/components/ui";
|
|
7
|
+
*
|
|
8
|
+
* <Breadcrumb.Root>
|
|
9
|
+
* <Breadcrumb.List>
|
|
10
|
+
* <Breadcrumb.Item>
|
|
11
|
+
* <Breadcrumb.Link href="/">Home</Breadcrumb.Link>
|
|
12
|
+
* </Breadcrumb.Item>
|
|
13
|
+
* <Breadcrumb.Separator />
|
|
14
|
+
* <Breadcrumb.Item>
|
|
15
|
+
* <Breadcrumb.Page>Current</Breadcrumb.Page>
|
|
16
|
+
* </Breadcrumb.Item>
|
|
17
|
+
* </Breadcrumb.List>
|
|
18
|
+
* </Breadcrumb.Root>
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import {
|
|
23
|
+
type HTMLAttributes,
|
|
24
|
+
type ReactNode,
|
|
25
|
+
createElement,
|
|
26
|
+
forwardRef,
|
|
27
|
+
useEffect,
|
|
28
|
+
useRef,
|
|
29
|
+
} from "react";
|
|
30
|
+
|
|
31
|
+
// ============================================================================
|
|
32
|
+
// Types
|
|
33
|
+
// ============================================================================
|
|
34
|
+
|
|
35
|
+
export interface BreadcrumbRootProps extends HTMLAttributes<HTMLElement> {
|
|
36
|
+
children?: ReactNode;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface BreadcrumbListProps extends HTMLAttributes<HTMLElement> {
|
|
40
|
+
children?: ReactNode;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export interface BreadcrumbItemProps extends HTMLAttributes<HTMLElement> {
|
|
44
|
+
children?: ReactNode;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export interface BreadcrumbLinkProps extends HTMLAttributes<HTMLElement> {
|
|
48
|
+
children?: ReactNode;
|
|
49
|
+
href?: string;
|
|
50
|
+
onNavigate?: (href: string) => void;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export interface BreadcrumbPageProps extends HTMLAttributes<HTMLElement> {
|
|
54
|
+
children?: ReactNode;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export interface BreadcrumbSeparatorProps extends HTMLAttributes<HTMLElement> {
|
|
58
|
+
children?: ReactNode;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// ============================================================================
|
|
62
|
+
// Components
|
|
63
|
+
// ============================================================================
|
|
64
|
+
|
|
65
|
+
const BreadcrumbRoot = forwardRef<HTMLElement, BreadcrumbRootProps>(function BreadcrumbRoot(
|
|
66
|
+
{ children, className, ...props },
|
|
67
|
+
ref
|
|
68
|
+
) {
|
|
69
|
+
return createElement("ds-breadcrumb", { ref, class: className, ...props }, children);
|
|
70
|
+
});
|
|
71
|
+
BreadcrumbRoot.displayName = "Breadcrumb.Root";
|
|
72
|
+
|
|
73
|
+
const BreadcrumbList = forwardRef<HTMLElement, BreadcrumbListProps>(function BreadcrumbList(
|
|
74
|
+
{ children, className, ...props },
|
|
75
|
+
ref
|
|
76
|
+
) {
|
|
77
|
+
return createElement("ds-breadcrumb-list", { ref, class: className, ...props }, children);
|
|
78
|
+
});
|
|
79
|
+
BreadcrumbList.displayName = "Breadcrumb.List";
|
|
80
|
+
|
|
81
|
+
const BreadcrumbItem = forwardRef<HTMLElement, BreadcrumbItemProps>(function BreadcrumbItem(
|
|
82
|
+
{ children, className, ...props },
|
|
83
|
+
ref
|
|
84
|
+
) {
|
|
85
|
+
return createElement("ds-breadcrumb-item", { ref, class: className, ...props }, children);
|
|
86
|
+
});
|
|
87
|
+
BreadcrumbItem.displayName = "Breadcrumb.Item";
|
|
88
|
+
|
|
89
|
+
const BreadcrumbLink = forwardRef<HTMLElement, BreadcrumbLinkProps>(function BreadcrumbLink(
|
|
90
|
+
{ children, className, href, onNavigate, ...props },
|
|
91
|
+
ref
|
|
92
|
+
) {
|
|
93
|
+
const elementRef = useRef<HTMLElement>(null);
|
|
94
|
+
|
|
95
|
+
const combinedRef = (node: HTMLElement | null) => {
|
|
96
|
+
(elementRef as React.MutableRefObject<HTMLElement | null>).current = node;
|
|
97
|
+
if (typeof ref === "function") ref(node);
|
|
98
|
+
else if (ref) (ref as React.MutableRefObject<HTMLElement | null>).current = node;
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
useEffect(() => {
|
|
102
|
+
const element = elementRef.current;
|
|
103
|
+
if (!element || !onNavigate) return;
|
|
104
|
+
|
|
105
|
+
const handleNavigate = (event: Event) => {
|
|
106
|
+
event.preventDefault();
|
|
107
|
+
const e = event as CustomEvent<{ href: string }>;
|
|
108
|
+
onNavigate(e.detail.href);
|
|
109
|
+
};
|
|
110
|
+
element.addEventListener("ds:navigate", handleNavigate);
|
|
111
|
+
return () => element.removeEventListener("ds:navigate", handleNavigate);
|
|
112
|
+
}, [onNavigate]);
|
|
113
|
+
|
|
114
|
+
return createElement(
|
|
115
|
+
"ds-breadcrumb-link",
|
|
116
|
+
{ ref: combinedRef, class: className, href, ...props },
|
|
117
|
+
children
|
|
118
|
+
);
|
|
119
|
+
});
|
|
120
|
+
BreadcrumbLink.displayName = "Breadcrumb.Link";
|
|
121
|
+
|
|
122
|
+
const BreadcrumbPage = forwardRef<HTMLElement, BreadcrumbPageProps>(function BreadcrumbPage(
|
|
123
|
+
{ children, className, ...props },
|
|
124
|
+
ref
|
|
125
|
+
) {
|
|
126
|
+
return createElement("ds-breadcrumb-page", { ref, class: className, ...props }, children);
|
|
127
|
+
});
|
|
128
|
+
BreadcrumbPage.displayName = "Breadcrumb.Page";
|
|
129
|
+
|
|
130
|
+
const BreadcrumbSeparator = forwardRef<HTMLElement, BreadcrumbSeparatorProps>(
|
|
131
|
+
function BreadcrumbSeparator({ children, className, ...props }, ref) {
|
|
132
|
+
return createElement("ds-breadcrumb-separator", { ref, class: className, ...props }, children);
|
|
133
|
+
}
|
|
134
|
+
);
|
|
135
|
+
BreadcrumbSeparator.displayName = "Breadcrumb.Separator";
|
|
136
|
+
|
|
137
|
+
// ============================================================================
|
|
138
|
+
// Compound Component
|
|
139
|
+
// ============================================================================
|
|
140
|
+
|
|
141
|
+
export const Breadcrumb = {
|
|
142
|
+
Root: BreadcrumbRoot,
|
|
143
|
+
List: BreadcrumbList,
|
|
144
|
+
Item: BreadcrumbItem,
|
|
145
|
+
Link: BreadcrumbLink,
|
|
146
|
+
Page: BreadcrumbPage,
|
|
147
|
+
Separator: BreadcrumbSeparator,
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
export {
|
|
151
|
+
BreadcrumbRoot,
|
|
152
|
+
BreadcrumbList,
|
|
153
|
+
BreadcrumbItem,
|
|
154
|
+
BreadcrumbLink,
|
|
155
|
+
BreadcrumbPage,
|
|
156
|
+
BreadcrumbSeparator,
|
|
157
|
+
};
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BreadcrumbItem component - individual breadcrumb item.
|
|
3
|
+
*
|
|
4
|
+
* @element ds-breadcrumb-item
|
|
5
|
+
*
|
|
6
|
+
* @slot - Link or page 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 DsBreadcrumbItem extends DSElement {
|
|
14
|
+
override connectedCallback(): void {
|
|
15
|
+
super.connectedCallback();
|
|
16
|
+
this.setAttribute("role", "listitem");
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
override render() {
|
|
20
|
+
return html`<slot></slot>`;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
define("ds-breadcrumb-item", DsBreadcrumbItem);
|
|
25
|
+
|
|
26
|
+
declare global {
|
|
27
|
+
interface HTMLElementTagNameMap {
|
|
28
|
+
"ds-breadcrumb-item": DsBreadcrumbItem;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BreadcrumbLink component - navigable breadcrumb link.
|
|
3
|
+
*
|
|
4
|
+
* @element ds-breadcrumb-link
|
|
5
|
+
*
|
|
6
|
+
* @slot - Link content
|
|
7
|
+
*
|
|
8
|
+
* @fires ds:navigate - Fired when link is clicked (for SPA navigation)
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { html } from "lit";
|
|
12
|
+
import { property } from "lit/decorators.js";
|
|
13
|
+
import { DSElement } from "../../base/ds-element.js";
|
|
14
|
+
import { emitEvent } from "../../events/emit.js";
|
|
15
|
+
import { define } from "../../registry/define.js";
|
|
16
|
+
|
|
17
|
+
export class DsBreadcrumbLink extends DSElement {
|
|
18
|
+
/** URL to navigate to */
|
|
19
|
+
@property({ type: String, reflect: true })
|
|
20
|
+
href = "";
|
|
21
|
+
|
|
22
|
+
override connectedCallback(): void {
|
|
23
|
+
super.connectedCallback();
|
|
24
|
+
this.setAttribute("tabindex", "0");
|
|
25
|
+
|
|
26
|
+
this.addEventListener("click", this.handleClick);
|
|
27
|
+
this.addEventListener("keydown", this.handleKeyDown);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
override disconnectedCallback(): void {
|
|
31
|
+
super.disconnectedCallback();
|
|
32
|
+
this.removeEventListener("click", this.handleClick);
|
|
33
|
+
this.removeEventListener("keydown", this.handleKeyDown);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
private handleClick = (event: MouseEvent): void => {
|
|
37
|
+
const navigateEvent = emitEvent(this, "ds:navigate", {
|
|
38
|
+
detail: { href: this.href },
|
|
39
|
+
bubbles: true,
|
|
40
|
+
cancelable: true,
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
if (!navigateEvent.defaultPrevented && this.href) {
|
|
44
|
+
if (event.ctrlKey || event.metaKey) {
|
|
45
|
+
window.open(this.href, "_blank");
|
|
46
|
+
} else {
|
|
47
|
+
window.location.href = this.href;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
private handleKeyDown = (event: KeyboardEvent): void => {
|
|
53
|
+
if (event.key === "Enter") {
|
|
54
|
+
event.preventDefault();
|
|
55
|
+
this.handleClick(new MouseEvent("click"));
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
override render() {
|
|
60
|
+
return html`<slot></slot>`;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
define("ds-breadcrumb-link", DsBreadcrumbLink);
|
|
65
|
+
|
|
66
|
+
declare global {
|
|
67
|
+
interface HTMLElementTagNameMap {
|
|
68
|
+
"ds-breadcrumb-link": DsBreadcrumbLink;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BreadcrumbList component - ordered list container.
|
|
3
|
+
*
|
|
4
|
+
* @element ds-breadcrumb-list
|
|
5
|
+
*
|
|
6
|
+
* @slot - Breadcrumb items and separators
|
|
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 DsBreadcrumbList extends DSElement {
|
|
14
|
+
override connectedCallback(): void {
|
|
15
|
+
super.connectedCallback();
|
|
16
|
+
this.setAttribute("role", "list");
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
override render() {
|
|
20
|
+
return html`<slot></slot>`;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
define("ds-breadcrumb-list", DsBreadcrumbList);
|
|
25
|
+
|
|
26
|
+
declare global {
|
|
27
|
+
interface HTMLElementTagNameMap {
|
|
28
|
+
"ds-breadcrumb-list": DsBreadcrumbList;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BreadcrumbPage component - current page (non-navigable).
|
|
3
|
+
*
|
|
4
|
+
* @element ds-breadcrumb-page
|
|
5
|
+
*
|
|
6
|
+
* @slot - Page 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 DsBreadcrumbPage extends DSElement {
|
|
14
|
+
override connectedCallback(): void {
|
|
15
|
+
super.connectedCallback();
|
|
16
|
+
this.setAttribute("role", "link");
|
|
17
|
+
this.setAttribute("aria-current", "page");
|
|
18
|
+
this.setAttribute("aria-disabled", "true");
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
override render() {
|
|
22
|
+
return html`<slot></slot>`;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
define("ds-breadcrumb-page", DsBreadcrumbPage);
|
|
27
|
+
|
|
28
|
+
declare global {
|
|
29
|
+
interface HTMLElementTagNameMap {
|
|
30
|
+
"ds-breadcrumb-page": DsBreadcrumbPage;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BreadcrumbSeparator component - visual separator between items.
|
|
3
|
+
*
|
|
4
|
+
* @element ds-breadcrumb-separator
|
|
5
|
+
*
|
|
6
|
+
* @slot - Separator content (defaults to /)
|
|
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 DsBreadcrumbSeparator extends DSElement {
|
|
14
|
+
override connectedCallback(): void {
|
|
15
|
+
super.connectedCallback();
|
|
16
|
+
this.setAttribute("role", "presentation");
|
|
17
|
+
this.setAttribute("aria-hidden", "true");
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
override render() {
|
|
21
|
+
return html`<slot>/</slot>`;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
define("ds-breadcrumb-separator", DsBreadcrumbSeparator);
|
|
26
|
+
|
|
27
|
+
declare global {
|
|
28
|
+
interface HTMLElementTagNameMap {
|
|
29
|
+
"ds-breadcrumb-separator": DsBreadcrumbSeparator;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Breadcrumb component - navigation trail.
|
|
3
|
+
*
|
|
4
|
+
* Shows the current page location within a navigational hierarchy.
|
|
5
|
+
*
|
|
6
|
+
* @element ds-breadcrumb
|
|
7
|
+
*
|
|
8
|
+
* @slot - Breadcrumb list
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```html
|
|
12
|
+
* <ds-breadcrumb>
|
|
13
|
+
* <ds-breadcrumb-list>
|
|
14
|
+
* <ds-breadcrumb-item>
|
|
15
|
+
* <ds-breadcrumb-link href="/">Home</ds-breadcrumb-link>
|
|
16
|
+
* </ds-breadcrumb-item>
|
|
17
|
+
* <ds-breadcrumb-separator>/</ds-breadcrumb-separator>
|
|
18
|
+
* <ds-breadcrumb-item>
|
|
19
|
+
* <ds-breadcrumb-page>Current</ds-breadcrumb-page>
|
|
20
|
+
* </ds-breadcrumb-item>
|
|
21
|
+
* </ds-breadcrumb-list>
|
|
22
|
+
* </ds-breadcrumb>
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
import { html } from "lit";
|
|
27
|
+
import { DSElement } from "../../base/ds-element.js";
|
|
28
|
+
import { define } from "../../registry/define.js";
|
|
29
|
+
|
|
30
|
+
// Import child components
|
|
31
|
+
import "./breadcrumb-list.js";
|
|
32
|
+
import "./breadcrumb-item.js";
|
|
33
|
+
import "./breadcrumb-link.js";
|
|
34
|
+
import "./breadcrumb-page.js";
|
|
35
|
+
import "./breadcrumb-separator.js";
|
|
36
|
+
|
|
37
|
+
export class DsBreadcrumb extends DSElement {
|
|
38
|
+
override connectedCallback(): void {
|
|
39
|
+
super.connectedCallback();
|
|
40
|
+
this.setAttribute("role", "navigation");
|
|
41
|
+
this.setAttribute("aria-label", "Breadcrumb");
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
override render() {
|
|
45
|
+
return html`<slot></slot>`;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
define("ds-breadcrumb", DsBreadcrumb);
|
|
50
|
+
|
|
51
|
+
declare global {
|
|
52
|
+
interface HTMLElementTagNameMap {
|
|
53
|
+
"ds-breadcrumb": DsBreadcrumb;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Breadcrumb component exports.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
export { DsBreadcrumb } from "./breadcrumb.js";
|
|
6
|
+
export { DsBreadcrumbList } from "./breadcrumb-list.js";
|
|
7
|
+
export { DsBreadcrumbItem } from "./breadcrumb-item.js";
|
|
8
|
+
export { DsBreadcrumbLink } from "./breadcrumb-link.js";
|
|
9
|
+
export { DsBreadcrumbPage } from "./breadcrumb-page.js";
|
|
10
|
+
export { DsBreadcrumbSeparator } from "./breadcrumb-separator.js";
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native React Button component using createButtonBehavior.
|
|
3
|
+
* Provides accessible button with loading and disabled states.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { type ButtonBehaviorOptions, createButtonBehavior } from "@hypoth-ui/primitives-dom";
|
|
7
|
+
import {
|
|
8
|
+
type ButtonHTMLAttributes,
|
|
9
|
+
type ReactNode,
|
|
10
|
+
forwardRef,
|
|
11
|
+
useCallback,
|
|
12
|
+
useEffect,
|
|
13
|
+
useMemo,
|
|
14
|
+
} from "react";
|
|
15
|
+
import { Slot } from "../../primitives/slot.js";
|
|
16
|
+
|
|
17
|
+
export interface ButtonProps
|
|
18
|
+
extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "type" | "disabled"> {
|
|
19
|
+
/** Button content */
|
|
20
|
+
children?: ReactNode;
|
|
21
|
+
/** Button type */
|
|
22
|
+
type?: "button" | "submit" | "reset";
|
|
23
|
+
/** Whether button is disabled */
|
|
24
|
+
disabled?: boolean;
|
|
25
|
+
/** Whether button is in loading state */
|
|
26
|
+
loading?: boolean;
|
|
27
|
+
/** Render as child element (polymorphic) */
|
|
28
|
+
asChild?: boolean;
|
|
29
|
+
/** Called when button is activated */
|
|
30
|
+
onPress?: () => void;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Accessible button component with loading and disabled states.
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* ```tsx
|
|
38
|
+
* <Button onPress={() => console.log("clicked")}>Click me</Button>
|
|
39
|
+
*
|
|
40
|
+
* <Button loading>Saving...</Button>
|
|
41
|
+
*
|
|
42
|
+
* <Button asChild>
|
|
43
|
+
* <a href="/link">Link styled as button</a>
|
|
44
|
+
* </Button>
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export const Button = forwardRef<HTMLButtonElement, ButtonProps>(
|
|
48
|
+
(
|
|
49
|
+
{
|
|
50
|
+
children,
|
|
51
|
+
type = "button",
|
|
52
|
+
disabled = false,
|
|
53
|
+
loading = false,
|
|
54
|
+
asChild = false,
|
|
55
|
+
onPress,
|
|
56
|
+
onClick,
|
|
57
|
+
onKeyDown,
|
|
58
|
+
...restProps
|
|
59
|
+
},
|
|
60
|
+
ref
|
|
61
|
+
) => {
|
|
62
|
+
// Create behavior instance - intentionally created once with initial values
|
|
63
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: behavior is created once, updates handled via setState
|
|
64
|
+
const behavior = useMemo(() => {
|
|
65
|
+
const options: ButtonBehaviorOptions = {
|
|
66
|
+
disabled,
|
|
67
|
+
loading,
|
|
68
|
+
type,
|
|
69
|
+
onActivate: onPress,
|
|
70
|
+
};
|
|
71
|
+
return createButtonBehavior(options);
|
|
72
|
+
}, []);
|
|
73
|
+
|
|
74
|
+
// Update behavior state when props change
|
|
75
|
+
useEffect(() => {
|
|
76
|
+
behavior.setState({ disabled, loading, type });
|
|
77
|
+
}, [behavior, disabled, loading, type]);
|
|
78
|
+
|
|
79
|
+
// Get button props from behavior
|
|
80
|
+
const buttonProps = behavior.getButtonProps();
|
|
81
|
+
|
|
82
|
+
// Handle keyboard events
|
|
83
|
+
const handleKeyDown = useCallback(
|
|
84
|
+
(event: React.KeyboardEvent<HTMLButtonElement>) => {
|
|
85
|
+
behavior.handleKeyDown(event.nativeEvent);
|
|
86
|
+
onKeyDown?.(event);
|
|
87
|
+
},
|
|
88
|
+
[behavior, onKeyDown]
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
// Handle click events
|
|
92
|
+
const handleClick = useCallback(
|
|
93
|
+
(event: React.MouseEvent<HTMLButtonElement>) => {
|
|
94
|
+
behavior.handleClick(event.nativeEvent);
|
|
95
|
+
onClick?.(event);
|
|
96
|
+
},
|
|
97
|
+
[behavior, onClick]
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
const Component = asChild ? Slot : "button";
|
|
101
|
+
|
|
102
|
+
return (
|
|
103
|
+
<Component
|
|
104
|
+
ref={ref}
|
|
105
|
+
type={asChild ? undefined : buttonProps.type}
|
|
106
|
+
aria-disabled={buttonProps["aria-disabled"]}
|
|
107
|
+
aria-busy={buttonProps["aria-busy"]}
|
|
108
|
+
tabIndex={buttonProps.tabIndex}
|
|
109
|
+
onClick={handleClick}
|
|
110
|
+
onKeyDown={handleKeyDown}
|
|
111
|
+
{...restProps}
|
|
112
|
+
>
|
|
113
|
+
{children}
|
|
114
|
+
</Component>
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
);
|
|
118
|
+
|
|
119
|
+
Button.displayName = "Button";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Button, type ButtonProps } from "./button.js";
|