@neurocle/synapse-react 0.0.0-bootstrap
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 +163 -0
- package/dist/_virtual/_rolldown/runtime.mjs +13 -0
- package/dist/components/accordion/accordion.d.mts +38 -0
- package/dist/components/accordion/accordion.d.mts.map +1 -0
- package/dist/components/accordion/accordion.mjs +29 -0
- package/dist/components/accordion/accordion.mjs.map +1 -0
- package/dist/components/accordion/accordion.recipe.mjs +191 -0
- package/dist/components/accordion/accordion.recipe.mjs.map +1 -0
- package/dist/components/accordion/index.d.mts +2 -0
- package/dist/components/accordion/index.mjs +2 -0
- package/dist/components/alert/alert.anatomy.mjs +8 -0
- package/dist/components/alert/alert.anatomy.mjs.map +1 -0
- package/dist/components/alert/alert.connect.d.mts +4 -0
- package/dist/components/alert/alert.connect.d.mts.map +1 -0
- package/dist/components/alert/alert.connect.mjs +39 -0
- package/dist/components/alert/alert.connect.mjs.map +1 -0
- package/dist/components/alert/alert.d.mts +14 -0
- package/dist/components/alert/alert.d.mts.map +1 -0
- package/dist/components/alert/alert.mjs +37 -0
- package/dist/components/alert/alert.mjs.map +1 -0
- package/dist/components/alert/alert.recipe.mjs +141 -0
- package/dist/components/alert/alert.recipe.mjs.map +1 -0
- package/dist/components/alert/index.d.mts +3 -0
- package/dist/components/alert/index.mjs +2 -0
- package/dist/components/angle-slider/angle-slider.d.mts +35 -0
- package/dist/components/angle-slider/angle-slider.d.mts.map +1 -0
- package/dist/components/angle-slider/angle-slider.mjs +41 -0
- package/dist/components/angle-slider/angle-slider.mjs.map +1 -0
- package/dist/components/angle-slider/angle-slider.recipe.mjs +201 -0
- package/dist/components/angle-slider/angle-slider.recipe.mjs.map +1 -0
- package/dist/components/angle-slider/index.d.mts +2 -0
- package/dist/components/angle-slider/index.mjs +2 -0
- package/dist/components/avatar/avatar.d.mts +18 -0
- package/dist/components/avatar/avatar.d.mts.map +1 -0
- package/dist/components/avatar/avatar.mjs +35 -0
- package/dist/components/avatar/avatar.mjs.map +1 -0
- package/dist/components/avatar/avatar.recipe.mjs +113 -0
- package/dist/components/avatar/avatar.recipe.mjs.map +1 -0
- package/dist/components/avatar/index.d.mts +2 -0
- package/dist/components/avatar/index.mjs +2 -0
- package/dist/components/badge/badge.anatomy.mjs +8 -0
- package/dist/components/badge/badge.anatomy.mjs.map +1 -0
- package/dist/components/badge/badge.connect.d.mts +4 -0
- package/dist/components/badge/badge.connect.d.mts.map +1 -0
- package/dist/components/badge/badge.connect.mjs +32 -0
- package/dist/components/badge/badge.connect.mjs.map +1 -0
- package/dist/components/badge/badge.d.mts +14 -0
- package/dist/components/badge/badge.d.mts.map +1 -0
- package/dist/components/badge/badge.mjs +18 -0
- package/dist/components/badge/badge.mjs.map +1 -0
- package/dist/components/badge/badge.recipe.mjs +84 -0
- package/dist/components/badge/badge.recipe.mjs.map +1 -0
- package/dist/components/badge/index.d.mts +3 -0
- package/dist/components/badge/index.mjs +2 -0
- package/dist/components/breadcrumb/breadcrumb.anatomy.mjs +8 -0
- package/dist/components/breadcrumb/breadcrumb.anatomy.mjs.map +1 -0
- package/dist/components/breadcrumb/breadcrumb.connect.mjs +30 -0
- package/dist/components/breadcrumb/breadcrumb.connect.mjs.map +1 -0
- package/dist/components/breadcrumb/breadcrumb.d.mts +10 -0
- package/dist/components/breadcrumb/breadcrumb.d.mts.map +1 -0
- package/dist/components/breadcrumb/breadcrumb.mjs +31 -0
- package/dist/components/breadcrumb/breadcrumb.mjs.map +1 -0
- package/dist/components/breadcrumb/breadcrumb.recipe.mjs +121 -0
- package/dist/components/breadcrumb/breadcrumb.recipe.mjs.map +1 -0
- package/dist/components/breadcrumb/index.d.mts +2 -0
- package/dist/components/breadcrumb/index.mjs +2 -0
- package/dist/components/button/button.anatomy.mjs +8 -0
- package/dist/components/button/button.anatomy.mjs.map +1 -0
- package/dist/components/button/button.connect.mjs +35 -0
- package/dist/components/button/button.connect.mjs.map +1 -0
- package/dist/components/button/button.d.mts +19 -0
- package/dist/components/button/button.d.mts.map +1 -0
- package/dist/components/button/button.mjs +25 -0
- package/dist/components/button/button.mjs.map +1 -0
- package/dist/components/button/button.recipe.mjs +377 -0
- package/dist/components/button/button.recipe.mjs.map +1 -0
- package/dist/components/button/index.d.mts +2 -0
- package/dist/components/button/index.mjs +2 -0
- package/dist/components/card/card.anatomy.mjs +8 -0
- package/dist/components/card/card.anatomy.mjs.map +1 -0
- package/dist/components/card/card.connect.mjs +24 -0
- package/dist/components/card/card.connect.mjs.map +1 -0
- package/dist/components/card/card.d.mts +9 -0
- package/dist/components/card/card.d.mts.map +1 -0
- package/dist/components/card/card.mjs +23 -0
- package/dist/components/card/card.mjs.map +1 -0
- package/dist/components/card/card.recipe.mjs +58 -0
- package/dist/components/card/card.recipe.mjs.map +1 -0
- package/dist/components/card/index.d.mts +2 -0
- package/dist/components/card/index.mjs +2 -0
- package/dist/components/carousel/carousel.d.mts +67 -0
- package/dist/components/carousel/carousel.d.mts.map +1 -0
- package/dist/components/carousel/carousel.mjs +123 -0
- package/dist/components/carousel/carousel.mjs.map +1 -0
- package/dist/components/carousel/carousel.recipe.mjs +131 -0
- package/dist/components/carousel/carousel.recipe.mjs.map +1 -0
- package/dist/components/carousel/index.d.mts +2 -0
- package/dist/components/carousel/index.mjs +2 -0
- package/dist/components/cascade-select/cascade-select.d.mts +102 -0
- package/dist/components/cascade-select/cascade-select.d.mts.map +1 -0
- package/dist/components/cascade-select/cascade-select.mjs +169 -0
- package/dist/components/cascade-select/cascade-select.mjs.map +1 -0
- package/dist/components/cascade-select/cascade-select.recipe.mjs +309 -0
- package/dist/components/cascade-select/cascade-select.recipe.mjs.map +1 -0
- package/dist/components/cascade-select/index.d.mts +2 -0
- package/dist/components/cascade-select/index.mjs +2 -0
- package/dist/components/checkbox/checkbox.d.mts +37 -0
- package/dist/components/checkbox/checkbox.d.mts.map +1 -0
- package/dist/components/checkbox/checkbox.mjs +55 -0
- package/dist/components/checkbox/checkbox.mjs.map +1 -0
- package/dist/components/checkbox/checkbox.recipe.mjs +170 -0
- package/dist/components/checkbox/checkbox.recipe.mjs.map +1 -0
- package/dist/components/checkbox/index.d.mts +2 -0
- package/dist/components/checkbox/index.mjs +2 -0
- package/dist/components/clipboard/clipboard.d.mts +26 -0
- package/dist/components/clipboard/clipboard.d.mts.map +1 -0
- package/dist/components/clipboard/clipboard.mjs +76 -0
- package/dist/components/clipboard/clipboard.mjs.map +1 -0
- package/dist/components/clipboard/clipboard.recipe.mjs +119 -0
- package/dist/components/clipboard/clipboard.recipe.mjs.map +1 -0
- package/dist/components/clipboard/index.d.mts +2 -0
- package/dist/components/clipboard/index.mjs +2 -0
- package/dist/components/collapsible/collapsible.d.mts +21 -0
- package/dist/components/collapsible/collapsible.d.mts.map +1 -0
- package/dist/components/collapsible/collapsible.mjs +23 -0
- package/dist/components/collapsible/collapsible.mjs.map +1 -0
- package/dist/components/collapsible/collapsible.recipe.mjs +159 -0
- package/dist/components/collapsible/collapsible.recipe.mjs.map +1 -0
- package/dist/components/collapsible/index.d.mts +2 -0
- package/dist/components/collapsible/index.mjs +2 -0
- package/dist/components/collection-window.mjs +299 -0
- package/dist/components/collection-window.mjs.map +1 -0
- package/dist/components/color-picker/color-picker.d.mts +67 -0
- package/dist/components/color-picker/color-picker.d.mts.map +1 -0
- package/dist/components/color-picker/color-picker.mjs +230 -0
- package/dist/components/color-picker/color-picker.mjs.map +1 -0
- package/dist/components/color-picker/color-picker.recipe.mjs +345 -0
- package/dist/components/color-picker/color-picker.recipe.mjs.map +1 -0
- package/dist/components/color-picker/index.d.mts +2 -0
- package/dist/components/color-picker/index.mjs +2 -0
- package/dist/components/combobox/combobox.d.mts +129 -0
- package/dist/components/combobox/combobox.d.mts.map +1 -0
- package/dist/components/combobox/combobox.mjs +92 -0
- package/dist/components/combobox/combobox.mjs.map +1 -0
- package/dist/components/combobox/combobox.recipe.mjs +336 -0
- package/dist/components/combobox/combobox.recipe.mjs.map +1 -0
- package/dist/components/combobox/index.d.mts +2 -0
- package/dist/components/combobox/index.mjs +2 -0
- package/dist/components/date-input/date-input.d.mts +69 -0
- package/dist/components/date-input/date-input.d.mts.map +1 -0
- package/dist/components/date-input/date-input.mjs +106 -0
- package/dist/components/date-input/date-input.mjs.map +1 -0
- package/dist/components/date-input/date-input.recipe.mjs +142 -0
- package/dist/components/date-input/date-input.recipe.mjs.map +1 -0
- package/dist/components/date-input/index.d.mts +2 -0
- package/dist/components/date-input/index.mjs +2 -0
- package/dist/components/date-picker/date-picker.d.mts +114 -0
- package/dist/components/date-picker/date-picker.d.mts.map +1 -0
- package/dist/components/date-picker/date-picker.mjs +269 -0
- package/dist/components/date-picker/date-picker.mjs.map +1 -0
- package/dist/components/date-picker/date-picker.recipe.mjs +495 -0
- package/dist/components/date-picker/date-picker.recipe.mjs.map +1 -0
- package/dist/components/date-picker/index.d.mts +2 -0
- package/dist/components/date-picker/index.mjs +2 -0
- package/dist/components/details.d.mts +9 -0
- package/dist/components/details.d.mts.map +1 -0
- package/dist/components/dialog/dialog.d.mts +45 -0
- package/dist/components/dialog/dialog.d.mts.map +1 -0
- package/dist/components/dialog/dialog.mjs +49 -0
- package/dist/components/dialog/dialog.mjs.map +1 -0
- package/dist/components/dialog/dialog.recipe.mjs +138 -0
- package/dist/components/dialog/dialog.recipe.mjs.map +1 -0
- package/dist/components/dialog/index.d.mts +2 -0
- package/dist/components/dialog/index.mjs +2 -0
- package/dist/components/drawer/drawer.d.mts +62 -0
- package/dist/components/drawer/drawer.d.mts.map +1 -0
- package/dist/components/drawer/drawer.mjs +65 -0
- package/dist/components/drawer/drawer.mjs.map +1 -0
- package/dist/components/drawer/drawer.recipe.mjs +201 -0
- package/dist/components/drawer/drawer.recipe.mjs.map +1 -0
- package/dist/components/drawer/index.d.mts +2 -0
- package/dist/components/drawer/index.mjs +2 -0
- package/dist/components/editable/editable.d.mts +62 -0
- package/dist/components/editable/editable.d.mts.map +1 -0
- package/dist/components/editable/editable.mjs +78 -0
- package/dist/components/editable/editable.mjs.map +1 -0
- package/dist/components/editable/editable.recipe.mjs +152 -0
- package/dist/components/editable/editable.recipe.mjs.map +1 -0
- package/dist/components/editable/index.d.mts +2 -0
- package/dist/components/editable/index.mjs +2 -0
- package/dist/components/empty-state/empty-state.anatomy.mjs +8 -0
- package/dist/components/empty-state/empty-state.anatomy.mjs.map +1 -0
- package/dist/components/empty-state/empty-state.connect.mjs +26 -0
- package/dist/components/empty-state/empty-state.connect.mjs.map +1 -0
- package/dist/components/empty-state/empty-state.d.mts +10 -0
- package/dist/components/empty-state/empty-state.d.mts.map +1 -0
- package/dist/components/empty-state/empty-state.mjs +24 -0
- package/dist/components/empty-state/empty-state.mjs.map +1 -0
- package/dist/components/empty-state/empty-state.recipe.mjs +134 -0
- package/dist/components/empty-state/empty-state.recipe.mjs.map +1 -0
- package/dist/components/empty-state/index.d.mts +2 -0
- package/dist/components/empty-state/index.mjs +2 -0
- package/dist/components/field/field.anatomy.mjs +8 -0
- package/dist/components/field/field.anatomy.mjs.map +1 -0
- package/dist/components/field/field.connect.mjs +117 -0
- package/dist/components/field/field.connect.mjs.map +1 -0
- package/dist/components/field/field.d.mts +19 -0
- package/dist/components/field/field.d.mts.map +1 -0
- package/dist/components/field/field.mjs +77 -0
- package/dist/components/field/field.mjs.map +1 -0
- package/dist/components/field/field.recipe.mjs +60 -0
- package/dist/components/field/field.recipe.mjs.map +1 -0
- package/dist/components/field/index.d.mts +2 -0
- package/dist/components/field/index.mjs +2 -0
- package/dist/components/fieldset/fieldset.anatomy.mjs +8 -0
- package/dist/components/fieldset/fieldset.anatomy.mjs.map +1 -0
- package/dist/components/fieldset/fieldset.connect.mjs +60 -0
- package/dist/components/fieldset/fieldset.connect.mjs.map +1 -0
- package/dist/components/fieldset/fieldset.d.mts +13 -0
- package/dist/components/fieldset/fieldset.d.mts.map +1 -0
- package/dist/components/fieldset/fieldset.mjs +26 -0
- package/dist/components/fieldset/fieldset.mjs.map +1 -0
- package/dist/components/fieldset/fieldset.recipe.mjs +42 -0
- package/dist/components/fieldset/fieldset.recipe.mjs.map +1 -0
- package/dist/components/fieldset/index.d.mts +2 -0
- package/dist/components/fieldset/index.mjs +2 -0
- package/dist/components/file-upload/file-upload.d.mts +105 -0
- package/dist/components/file-upload/file-upload.d.mts.map +1 -0
- package/dist/components/file-upload/file-upload.mjs +127 -0
- package/dist/components/file-upload/file-upload.mjs.map +1 -0
- package/dist/components/file-upload/file-upload.recipe.mjs +236 -0
- package/dist/components/file-upload/file-upload.recipe.mjs.map +1 -0
- package/dist/components/file-upload/index.d.mts +2 -0
- package/dist/components/file-upload/index.mjs +2 -0
- package/dist/components/floating-panel/floating-panel.d.mts +87 -0
- package/dist/components/floating-panel/floating-panel.d.mts.map +1 -0
- package/dist/components/floating-panel/floating-panel.mjs +89 -0
- package/dist/components/floating-panel/floating-panel.mjs.map +1 -0
- package/dist/components/floating-panel/floating-panel.recipe.mjs +156 -0
- package/dist/components/floating-panel/floating-panel.recipe.mjs.map +1 -0
- package/dist/components/floating-panel/index.d.mts +2 -0
- package/dist/components/floating-panel/index.mjs +2 -0
- package/dist/components/hover-card/hover-card.d.mts +48 -0
- package/dist/components/hover-card/hover-card.d.mts.map +1 -0
- package/dist/components/hover-card/hover-card.mjs +31 -0
- package/dist/components/hover-card/hover-card.mjs.map +1 -0
- package/dist/components/hover-card/hover-card.recipe.mjs +133 -0
- package/dist/components/hover-card/hover-card.recipe.mjs.map +1 -0
- package/dist/components/hover-card/index.d.mts +2 -0
- package/dist/components/hover-card/index.mjs +2 -0
- package/dist/components/image-cropper/image-cropper.d.mts +111 -0
- package/dist/components/image-cropper/image-cropper.d.mts.map +1 -0
- package/dist/components/image-cropper/image-cropper.mjs +71 -0
- package/dist/components/image-cropper/image-cropper.mjs.map +1 -0
- package/dist/components/image-cropper/image-cropper.recipe.mjs +126 -0
- package/dist/components/image-cropper/image-cropper.recipe.mjs.map +1 -0
- package/dist/components/image-cropper/index.d.mts +2 -0
- package/dist/components/image-cropper/index.mjs +2 -0
- package/dist/components/input/index.d.mts +2 -0
- package/dist/components/input/index.mjs +2 -0
- package/dist/components/input/input.anatomy.mjs +8 -0
- package/dist/components/input/input.anatomy.mjs.map +1 -0
- package/dist/components/input/input.connect.mjs +82 -0
- package/dist/components/input/input.connect.mjs.map +1 -0
- package/dist/components/input/input.d.mts +31 -0
- package/dist/components/input/input.d.mts.map +1 -0
- package/dist/components/input/input.mjs +37 -0
- package/dist/components/input/input.mjs.map +1 -0
- package/dist/components/input/input.recipe.mjs +111 -0
- package/dist/components/input/input.recipe.mjs.map +1 -0
- package/dist/components/kbd/index.d.mts +2 -0
- package/dist/components/kbd/index.mjs +2 -0
- package/dist/components/kbd/kbd.anatomy.mjs +8 -0
- package/dist/components/kbd/kbd.anatomy.mjs.map +1 -0
- package/dist/components/kbd/kbd.connect.mjs +17 -0
- package/dist/components/kbd/kbd.connect.mjs.map +1 -0
- package/dist/components/kbd/kbd.d.mts +10 -0
- package/dist/components/kbd/kbd.d.mts.map +1 -0
- package/dist/components/kbd/kbd.mjs +18 -0
- package/dist/components/kbd/kbd.mjs.map +1 -0
- package/dist/components/kbd/kbd.recipe.mjs +55 -0
- package/dist/components/kbd/kbd.recipe.mjs.map +1 -0
- package/dist/components/listbox/index.d.mts +2 -0
- package/dist/components/listbox/index.mjs +2 -0
- package/dist/components/listbox/listbox.d.mts +70 -0
- package/dist/components/listbox/listbox.d.mts.map +1 -0
- package/dist/components/listbox/listbox.mjs +79 -0
- package/dist/components/listbox/listbox.mjs.map +1 -0
- package/dist/components/listbox/listbox.recipe.mjs +169 -0
- package/dist/components/listbox/listbox.recipe.mjs.map +1 -0
- package/dist/components/machine-translations.mjs +8 -0
- package/dist/components/machine-translations.mjs.map +1 -0
- package/dist/components/marquee/index.d.mts +2 -0
- package/dist/components/marquee/index.mjs +2 -0
- package/dist/components/marquee/marquee.d.mts +53 -0
- package/dist/components/marquee/marquee.d.mts.map +1 -0
- package/dist/components/marquee/marquee.mjs +30 -0
- package/dist/components/marquee/marquee.mjs.map +1 -0
- package/dist/components/marquee/marquee.recipe.mjs +123 -0
- package/dist/components/marquee/marquee.recipe.mjs.map +1 -0
- package/dist/components/menu/index.d.mts +2 -0
- package/dist/components/menu/index.mjs +2 -0
- package/dist/components/menu/menu.d.mts +66 -0
- package/dist/components/menu/menu.d.mts.map +1 -0
- package/dist/components/menu/menu.mjs +68 -0
- package/dist/components/menu/menu.mjs.map +1 -0
- package/dist/components/menu/menu.recipe.mjs +285 -0
- package/dist/components/menu/menu.recipe.mjs.map +1 -0
- package/dist/components/navigation-menu/index.d.mts +2 -0
- package/dist/components/navigation-menu/index.mjs +2 -0
- package/dist/components/navigation-menu/navigation-menu.d.mts +42 -0
- package/dist/components/navigation-menu/navigation-menu.d.mts.map +1 -0
- package/dist/components/navigation-menu/navigation-menu.mjs +47 -0
- package/dist/components/navigation-menu/navigation-menu.mjs.map +1 -0
- package/dist/components/navigation-menu/navigation-menu.recipe.mjs +271 -0
- package/dist/components/navigation-menu/navigation-menu.recipe.mjs.map +1 -0
- package/dist/components/number-input/index.d.mts +2 -0
- package/dist/components/number-input/index.mjs +2 -0
- package/dist/components/number-input/number-input.d.mts +88 -0
- package/dist/components/number-input/number-input.d.mts.map +1 -0
- package/dist/components/number-input/number-input.mjs +70 -0
- package/dist/components/number-input/number-input.mjs.map +1 -0
- package/dist/components/number-input/number-input.recipe.mjs +231 -0
- package/dist/components/number-input/number-input.recipe.mjs.map +1 -0
- package/dist/components/pagination/index.d.mts +2 -0
- package/dist/components/pagination/index.mjs +2 -0
- package/dist/components/pagination/pagination.d.mts +51 -0
- package/dist/components/pagination/pagination.d.mts.map +1 -0
- package/dist/components/pagination/pagination.mjs +74 -0
- package/dist/components/pagination/pagination.mjs.map +1 -0
- package/dist/components/pagination/pagination.recipe.mjs +144 -0
- package/dist/components/pagination/pagination.recipe.mjs.map +1 -0
- package/dist/components/password-input/index.d.mts +2 -0
- package/dist/components/password-input/index.mjs +2 -0
- package/dist/components/password-input/password-input.d.mts +37 -0
- package/dist/components/password-input/password-input.d.mts.map +1 -0
- package/dist/components/password-input/password-input.mjs +58 -0
- package/dist/components/password-input/password-input.mjs.map +1 -0
- package/dist/components/password-input/password-input.recipe.mjs +180 -0
- package/dist/components/password-input/password-input.recipe.mjs.map +1 -0
- package/dist/components/pin-input/index.d.mts +2 -0
- package/dist/components/pin-input/index.mjs +2 -0
- package/dist/components/pin-input/pin-input.d.mts +68 -0
- package/dist/components/pin-input/pin-input.d.mts.map +1 -0
- package/dist/components/pin-input/pin-input.mjs +51 -0
- package/dist/components/pin-input/pin-input.mjs.map +1 -0
- package/dist/components/pin-input/pin-input.recipe.mjs +81 -0
- package/dist/components/pin-input/pin-input.recipe.mjs.map +1 -0
- package/dist/components/popover/index.d.mts +2 -0
- package/dist/components/popover/index.mjs +2 -0
- package/dist/components/popover/popover.d.mts +42 -0
- package/dist/components/popover/popover.d.mts.map +1 -0
- package/dist/components/popover/popover.mjs +50 -0
- package/dist/components/popover/popover.mjs.map +1 -0
- package/dist/components/popover/popover.recipe.mjs +162 -0
- package/dist/components/popover/popover.recipe.mjs.map +1 -0
- package/dist/components/progress/index.d.mts +2 -0
- package/dist/components/progress/index.mjs +2 -0
- package/dist/components/progress/progress.d.mts +31 -0
- package/dist/components/progress/progress.d.mts.map +1 -0
- package/dist/components/progress/progress.mjs +42 -0
- package/dist/components/progress/progress.mjs.map +1 -0
- package/dist/components/progress/progress.recipe.mjs +189 -0
- package/dist/components/progress/progress.recipe.mjs.map +1 -0
- package/dist/components/qr-code/index.d.mts +2 -0
- package/dist/components/qr-code/index.mjs +2 -0
- package/dist/components/qr-code/qr-code.d.mts +36 -0
- package/dist/components/qr-code/qr-code.d.mts.map +1 -0
- package/dist/components/qr-code/qr-code.mjs +41 -0
- package/dist/components/qr-code/qr-code.mjs.map +1 -0
- package/dist/components/qr-code/qr-code.recipe.mjs +70 -0
- package/dist/components/qr-code/qr-code.recipe.mjs.map +1 -0
- package/dist/components/radio-group/index.d.mts +2 -0
- package/dist/components/radio-group/index.mjs +2 -0
- package/dist/components/radio-group/radio-group.d.mts +33 -0
- package/dist/components/radio-group/radio-group.d.mts.map +1 -0
- package/dist/components/radio-group/radio-group.mjs +47 -0
- package/dist/components/radio-group/radio-group.mjs.map +1 -0
- package/dist/components/radio-group/radio-group.recipe.mjs +189 -0
- package/dist/components/radio-group/radio-group.recipe.mjs.map +1 -0
- package/dist/components/rating-group/index.d.mts +2 -0
- package/dist/components/rating-group/index.mjs +2 -0
- package/dist/components/rating-group/rating-group.d.mts +43 -0
- package/dist/components/rating-group/rating-group.d.mts.map +1 -0
- package/dist/components/rating-group/rating-group.mjs +39 -0
- package/dist/components/rating-group/rating-group.mjs.map +1 -0
- package/dist/components/rating-group/rating-group.recipe.mjs +133 -0
- package/dist/components/rating-group/rating-group.recipe.mjs.map +1 -0
- package/dist/components/scroll-area/index.d.mts +2 -0
- package/dist/components/scroll-area/index.mjs +2 -0
- package/dist/components/scroll-area/scroll-area.d.mts +12 -0
- package/dist/components/scroll-area/scroll-area.d.mts.map +1 -0
- package/dist/components/scroll-area/scroll-area.mjs +31 -0
- package/dist/components/scroll-area/scroll-area.mjs.map +1 -0
- package/dist/components/scroll-area/scroll-area.recipe.mjs +76 -0
- package/dist/components/scroll-area/scroll-area.recipe.mjs.map +1 -0
- package/dist/components/select/index.d.mts +2 -0
- package/dist/components/select/index.mjs +2 -0
- package/dist/components/select/select.d.mts +90 -0
- package/dist/components/select/select.d.mts.map +1 -0
- package/dist/components/select/select.mjs +83 -0
- package/dist/components/select/select.mjs.map +1 -0
- package/dist/components/select/select.recipe.mjs +298 -0
- package/dist/components/select/select.recipe.mjs.map +1 -0
- package/dist/components/separator/index.d.mts +2 -0
- package/dist/components/separator/index.mjs +2 -0
- package/dist/components/separator/separator.anatomy.mjs +8 -0
- package/dist/components/separator/separator.anatomy.mjs.map +1 -0
- package/dist/components/separator/separator.connect.mjs +28 -0
- package/dist/components/separator/separator.connect.mjs.map +1 -0
- package/dist/components/separator/separator.d.mts +11 -0
- package/dist/components/separator/separator.d.mts.map +1 -0
- package/dist/components/separator/separator.mjs +15 -0
- package/dist/components/separator/separator.mjs.map +1 -0
- package/dist/components/separator/separator.recipe.mjs +22 -0
- package/dist/components/separator/separator.recipe.mjs.map +1 -0
- package/dist/components/signature-pad/index.d.mts +2 -0
- package/dist/components/signature-pad/index.mjs +2 -0
- package/dist/components/signature-pad/signature-pad.d.mts +44 -0
- package/dist/components/signature-pad/signature-pad.d.mts.map +1 -0
- package/dist/components/signature-pad/signature-pad.mjs +90 -0
- package/dist/components/signature-pad/signature-pad.mjs.map +1 -0
- package/dist/components/signature-pad/signature-pad.recipe.mjs +111 -0
- package/dist/components/signature-pad/signature-pad.recipe.mjs.map +1 -0
- package/dist/components/skeleton/index.d.mts +2 -0
- package/dist/components/skeleton/index.mjs +2 -0
- package/dist/components/skeleton/skeleton.anatomy.mjs +8 -0
- package/dist/components/skeleton/skeleton.anatomy.mjs.map +1 -0
- package/dist/components/skeleton/skeleton.connect.mjs +26 -0
- package/dist/components/skeleton/skeleton.connect.mjs.map +1 -0
- package/dist/components/skeleton/skeleton.d.mts +9 -0
- package/dist/components/skeleton/skeleton.d.mts.map +1 -0
- package/dist/components/skeleton/skeleton.mjs +16 -0
- package/dist/components/skeleton/skeleton.mjs.map +1 -0
- package/dist/components/skeleton/skeleton.recipe.mjs +46 -0
- package/dist/components/skeleton/skeleton.recipe.mjs.map +1 -0
- package/dist/components/slider/index.d.mts +2 -0
- package/dist/components/slider/index.mjs +2 -0
- package/dist/components/slider/slider.d.mts +72 -0
- package/dist/components/slider/slider.d.mts.map +1 -0
- package/dist/components/slider/slider.mjs +34 -0
- package/dist/components/slider/slider.mjs.map +1 -0
- package/dist/components/slider/slider.recipe.mjs +219 -0
- package/dist/components/slider/slider.recipe.mjs.map +1 -0
- package/dist/components/snackbar/index.d.mts +2 -0
- package/dist/components/snackbar/index.mjs +2 -0
- package/dist/components/snackbar/snackbar.d.mts +57 -0
- package/dist/components/snackbar/snackbar.d.mts.map +1 -0
- package/dist/components/snackbar/snackbar.mjs +226 -0
- package/dist/components/snackbar/snackbar.mjs.map +1 -0
- package/dist/components/snackbar/snackbar.recipe.mjs +217 -0
- package/dist/components/snackbar/snackbar.recipe.mjs.map +1 -0
- package/dist/components/spinner/index.d.mts +2 -0
- package/dist/components/spinner/index.mjs +2 -0
- package/dist/components/spinner/spinner.anatomy.mjs +8 -0
- package/dist/components/spinner/spinner.anatomy.mjs.map +1 -0
- package/dist/components/spinner/spinner.connect.mjs +27 -0
- package/dist/components/spinner/spinner.connect.mjs.map +1 -0
- package/dist/components/spinner/spinner.d.mts +10 -0
- package/dist/components/spinner/spinner.d.mts.map +1 -0
- package/dist/components/spinner/spinner.mjs +25 -0
- package/dist/components/spinner/spinner.mjs.map +1 -0
- package/dist/components/spinner/spinner.recipe.mjs +70 -0
- package/dist/components/spinner/spinner.recipe.mjs.map +1 -0
- package/dist/components/splitter/index.d.mts +2 -0
- package/dist/components/splitter/index.mjs +2 -0
- package/dist/components/splitter/splitter.d.mts +57 -0
- package/dist/components/splitter/splitter.d.mts.map +1 -0
- package/dist/components/splitter/splitter.mjs +40 -0
- package/dist/components/splitter/splitter.mjs.map +1 -0
- package/dist/components/splitter/splitter.recipe.mjs +129 -0
- package/dist/components/splitter/splitter.recipe.mjs.map +1 -0
- package/dist/components/steps/index.d.mts +2 -0
- package/dist/components/steps/index.mjs +2 -0
- package/dist/components/steps/steps.d.mts +42 -0
- package/dist/components/steps/steps.d.mts.map +1 -0
- package/dist/components/steps/steps.mjs +72 -0
- package/dist/components/steps/steps.mjs.map +1 -0
- package/dist/components/steps/steps.recipe.mjs +291 -0
- package/dist/components/steps/steps.recipe.mjs.map +1 -0
- package/dist/components/switch/index.d.mts +2 -0
- package/dist/components/switch/index.mjs +2 -0
- package/dist/components/switch/switch.d.mts +36 -0
- package/dist/components/switch/switch.d.mts.map +1 -0
- package/dist/components/switch/switch.mjs +50 -0
- package/dist/components/switch/switch.mjs.map +1 -0
- package/dist/components/switch/switch.recipe.mjs +171 -0
- package/dist/components/switch/switch.recipe.mjs.map +1 -0
- package/dist/components/table/index.d.mts +2 -0
- package/dist/components/table/index.mjs +2 -0
- package/dist/components/table/table.anatomy.mjs +8 -0
- package/dist/components/table/table.anatomy.mjs.map +1 -0
- package/dist/components/table/table.connect.mjs +50 -0
- package/dist/components/table/table.connect.mjs.map +1 -0
- package/dist/components/table/table.d.mts +10 -0
- package/dist/components/table/table.d.mts.map +1 -0
- package/dist/components/table/table.mjs +90 -0
- package/dist/components/table/table.mjs.map +1 -0
- package/dist/components/table/table.recipe.mjs +186 -0
- package/dist/components/table/table.recipe.mjs.map +1 -0
- package/dist/components/tabs/index.d.mts +2 -0
- package/dist/components/tabs/index.mjs +2 -0
- package/dist/components/tabs/tabs.d.mts +40 -0
- package/dist/components/tabs/tabs.d.mts.map +1 -0
- package/dist/components/tabs/tabs.mjs +23 -0
- package/dist/components/tabs/tabs.mjs.map +1 -0
- package/dist/components/tabs/tabs.recipe.mjs +182 -0
- package/dist/components/tabs/tabs.recipe.mjs.map +1 -0
- package/dist/components/tags-input/index.d.mts +2 -0
- package/dist/components/tags-input/index.mjs +2 -0
- package/dist/components/tags-input/tags-input.d.mts +77 -0
- package/dist/components/tags-input/tags-input.d.mts.map +1 -0
- package/dist/components/tags-input/tags-input.mjs +103 -0
- package/dist/components/tags-input/tags-input.mjs.map +1 -0
- package/dist/components/tags-input/tags-input.recipe.mjs +320 -0
- package/dist/components/tags-input/tags-input.recipe.mjs.map +1 -0
- package/dist/components/textarea/index.d.mts +2 -0
- package/dist/components/textarea/index.mjs +2 -0
- package/dist/components/textarea/textarea.anatomy.mjs +8 -0
- package/dist/components/textarea/textarea.anatomy.mjs.map +1 -0
- package/dist/components/textarea/textarea.connect.mjs +82 -0
- package/dist/components/textarea/textarea.connect.mjs.map +1 -0
- package/dist/components/textarea/textarea.d.mts +32 -0
- package/dist/components/textarea/textarea.d.mts.map +1 -0
- package/dist/components/textarea/textarea.mjs +41 -0
- package/dist/components/textarea/textarea.mjs.map +1 -0
- package/dist/components/textarea/textarea.recipe.mjs +58 -0
- package/dist/components/textarea/textarea.recipe.mjs.map +1 -0
- package/dist/components/timer/index.d.mts +2 -0
- package/dist/components/timer/index.mjs +2 -0
- package/dist/components/timer/timer.d.mts +31 -0
- package/dist/components/timer/timer.d.mts.map +1 -0
- package/dist/components/timer/timer.mjs +98 -0
- package/dist/components/timer/timer.mjs.map +1 -0
- package/dist/components/timer/timer.recipe.mjs +99 -0
- package/dist/components/timer/timer.recipe.mjs.map +1 -0
- package/dist/components/toast/index.d.mts +2 -0
- package/dist/components/toast/index.mjs +2 -0
- package/dist/components/toast/toast.d.mts +55 -0
- package/dist/components/toast/toast.d.mts.map +1 -0
- package/dist/components/toast/toast.mjs +194 -0
- package/dist/components/toast/toast.mjs.map +1 -0
- package/dist/components/toast/toast.recipe.mjs +172 -0
- package/dist/components/toast/toast.recipe.mjs.map +1 -0
- package/dist/components/toc/index.d.mts +2 -0
- package/dist/components/toc/index.mjs +2 -0
- package/dist/components/toc/toc.d.mts +47 -0
- package/dist/components/toc/toc.d.mts.map +1 -0
- package/dist/components/toc/toc.mjs +239 -0
- package/dist/components/toc/toc.mjs.map +1 -0
- package/dist/components/toc/toc.recipe.mjs +147 -0
- package/dist/components/toc/toc.recipe.mjs.map +1 -0
- package/dist/components/toggle/index.d.mts +2 -0
- package/dist/components/toggle/index.mjs +2 -0
- package/dist/components/toggle/toggle.d.mts +21 -0
- package/dist/components/toggle/toggle.d.mts.map +1 -0
- package/dist/components/toggle/toggle.mjs +34 -0
- package/dist/components/toggle/toggle.mjs.map +1 -0
- package/dist/components/toggle/toggle.recipe.mjs +175 -0
- package/dist/components/toggle/toggle.recipe.mjs.map +1 -0
- package/dist/components/toggle-group/index.d.mts +2 -0
- package/dist/components/toggle-group/index.mjs +2 -0
- package/dist/components/toggle-group/toggle-group.d.mts +29 -0
- package/dist/components/toggle-group/toggle-group.d.mts.map +1 -0
- package/dist/components/toggle-group/toggle-group.mjs +18 -0
- package/dist/components/toggle-group/toggle-group.mjs.map +1 -0
- package/dist/components/toggle-group/toggle-group.recipe.mjs +190 -0
- package/dist/components/toggle-group/toggle-group.recipe.mjs.map +1 -0
- package/dist/components/tooltip/index.d.mts +2 -0
- package/dist/components/tooltip/index.mjs +2 -0
- package/dist/components/tooltip/tooltip.d.mts +66 -0
- package/dist/components/tooltip/tooltip.d.mts.map +1 -0
- package/dist/components/tooltip/tooltip.mjs +64 -0
- package/dist/components/tooltip/tooltip.mjs.map +1 -0
- package/dist/components/tooltip/tooltip.recipe.mjs +149 -0
- package/dist/components/tooltip/tooltip.recipe.mjs.map +1 -0
- package/dist/components/tour/index.d.mts +2 -0
- package/dist/components/tour/index.mjs +2 -0
- package/dist/components/tour/tour.d.mts +92 -0
- package/dist/components/tour/tour.d.mts.map +1 -0
- package/dist/components/tour/tour.mjs +89 -0
- package/dist/components/tour/tour.mjs.map +1 -0
- package/dist/components/tour/tour.recipe.mjs +164 -0
- package/dist/components/tour/tour.recipe.mjs.map +1 -0
- package/dist/components/tree-view/index.d.mts +2 -0
- package/dist/components/tree-view/index.mjs +2 -0
- package/dist/components/tree-view/tree-view.d.mts +108 -0
- package/dist/components/tree-view/tree-view.d.mts.map +1 -0
- package/dist/components/tree-view/tree-view.mjs +145 -0
- package/dist/components/tree-view/tree-view.mjs.map +1 -0
- package/dist/components/tree-view/tree-view.recipe.mjs +458 -0
- package/dist/components/tree-view/tree-view.recipe.mjs.map +1 -0
- package/dist/icons/src/calendar.mjs +13 -0
- package/dist/icons/src/calendar.mjs.map +1 -0
- package/dist/icons/src/checkmark.mjs +13 -0
- package/dist/icons/src/checkmark.mjs.map +1 -0
- package/dist/icons/src/chevron-down.mjs +13 -0
- package/dist/icons/src/chevron-down.mjs.map +1 -0
- package/dist/icons/src/chevron-left.mjs +13 -0
- package/dist/icons/src/chevron-left.mjs.map +1 -0
- package/dist/icons/src/chevron-right.mjs +13 -0
- package/dist/icons/src/chevron-right.mjs.map +1 -0
- package/dist/icons/src/chevron-up.mjs +13 -0
- package/dist/icons/src/chevron-up.mjs.map +1 -0
- package/dist/icons/src/chevrons-left.mjs +13 -0
- package/dist/icons/src/chevrons-left.mjs.map +1 -0
- package/dist/icons/src/chevrons-right.mjs +13 -0
- package/dist/icons/src/chevrons-right.mjs.map +1 -0
- package/dist/icons/src/chevrons-up-down.mjs +13 -0
- package/dist/icons/src/chevrons-up-down.mjs.map +1 -0
- package/dist/icons/src/close.mjs +13 -0
- package/dist/icons/src/close.mjs.map +1 -0
- package/dist/icons/src/copy.mjs +13 -0
- package/dist/icons/src/copy.mjs.map +1 -0
- package/dist/icons/src/edit.mjs +13 -0
- package/dist/icons/src/edit.mjs.map +1 -0
- package/dist/icons/src/error.mjs +13 -0
- package/dist/icons/src/error.mjs.map +1 -0
- package/dist/icons/src/eyedropper.mjs +13 -0
- package/dist/icons/src/eyedropper.mjs.map +1 -0
- package/dist/icons/src/file.mjs +13 -0
- package/dist/icons/src/file.mjs.map +1 -0
- package/dist/icons/src/hide.mjs +13 -0
- package/dist/icons/src/hide.mjs.map +1 -0
- package/dist/icons/src/index.mjs +58 -0
- package/dist/icons/src/index.mjs.map +1 -0
- package/dist/icons/src/info.mjs +13 -0
- package/dist/icons/src/info.mjs.map +1 -0
- package/dist/icons/src/maximize.mjs +13 -0
- package/dist/icons/src/maximize.mjs.map +1 -0
- package/dist/icons/src/minus.mjs +13 -0
- package/dist/icons/src/minus.mjs.map +1 -0
- package/dist/icons/src/pause.mjs +13 -0
- package/dist/icons/src/pause.mjs.map +1 -0
- package/dist/icons/src/play.mjs +13 -0
- package/dist/icons/src/play.mjs.map +1 -0
- package/dist/icons/src/reset.mjs +13 -0
- package/dist/icons/src/reset.mjs.map +1 -0
- package/dist/icons/src/restore.mjs +13 -0
- package/dist/icons/src/restore.mjs.map +1 -0
- package/dist/icons/src/show.mjs +13 -0
- package/dist/icons/src/show.mjs.map +1 -0
- package/dist/icons/src/star.mjs +13 -0
- package/dist/icons/src/star.mjs.map +1 -0
- package/dist/icons/src/success.mjs +2 -0
- package/dist/icons/src/trash.mjs +13 -0
- package/dist/icons/src/trash.mjs.map +1 -0
- package/dist/icons/src/user.mjs +13 -0
- package/dist/icons/src/user.mjs.map +1 -0
- package/dist/icons/src/warning.mjs +13 -0
- package/dist/icons/src/warning.mjs.map +1 -0
- package/dist/index.d.mts +139 -0
- package/dist/index.mjs +71 -0
- package/dist/preset.d.mts +2 -0
- package/dist/preset.mjs +2 -0
- package/dist/provider/locale-context.mjs +36 -0
- package/dist/provider/locale-context.mjs.map +1 -0
- package/dist/provider/synapse-provider.d.mts +17 -0
- package/dist/provider/synapse-provider.d.mts.map +1 -0
- package/dist/provider/synapse-provider.mjs +59 -0
- package/dist/provider/synapse-provider.mjs.map +1 -0
- package/dist/provider/translations.d.mts +179 -0
- package/dist/provider/translations.d.mts.map +1 -0
- package/dist/provider/translations.mjs +201 -0
- package/dist/provider/translations.mjs.map +1 -0
- package/dist/provider/use-theme.d.mts +7 -0
- package/dist/provider/use-theme.d.mts.map +1 -0
- package/dist/provider/use-theme.mjs +37 -0
- package/dist/provider/use-theme.mjs.map +1 -0
- package/dist/react/styled-system/css/conditions.mjs +29 -0
- package/dist/react/styled-system/css/conditions.mjs.map +1 -0
- package/dist/react/styled-system/css/css.mjs +39 -0
- package/dist/react/styled-system/css/css.mjs.map +1 -0
- package/dist/react/styled-system/css/cva.mjs +66 -0
- package/dist/react/styled-system/css/cva.mjs.map +1 -0
- package/dist/react/styled-system/css/cx.mjs +13 -0
- package/dist/react/styled-system/css/cx.mjs.map +1 -0
- package/dist/react/styled-system/css/sva.mjs +44 -0
- package/dist/react/styled-system/css/sva.mjs.map +1 -0
- package/dist/react/styled-system/helpers.mjs +231 -0
- package/dist/react/styled-system/helpers.mjs.map +1 -0
- package/dist/shared/button-style.mjs +10 -0
- package/dist/shared/button-style.mjs.map +1 -0
- package/dist/shared/character-count.mjs +29 -0
- package/dist/shared/character-count.mjs.map +1 -0
- package/dist/shared/collection-internal.mjs +24 -0
- package/dist/shared/collection-internal.mjs.map +1 -0
- package/dist/shared/collection.d.mts +120 -0
- package/dist/shared/collection.d.mts.map +1 -0
- package/dist/shared/collection.mjs +395 -0
- package/dist/shared/collection.mjs.map +1 -0
- package/dist/shared/controller.d.mts +4 -0
- package/dist/shared/controller.d.mts.map +1 -0
- package/dist/shared/controller.mjs +53 -0
- package/dist/shared/controller.mjs.map +1 -0
- package/dist/shared/field-context.mjs +47 -0
- package/dist/shared/field-context.mjs.map +1 -0
- package/dist/shared/field-description.mjs +13 -0
- package/dist/shared/field-description.mjs.map +1 -0
- package/dist/shared/icon.mjs +23 -0
- package/dist/shared/icon.mjs.map +1 -0
- package/dist/shared/input-modality.mjs +47 -0
- package/dist/shared/input-modality.mjs.map +1 -0
- package/dist/shared/input-style.mjs +10 -0
- package/dist/shared/input-style.mjs.map +1 -0
- package/dist/shared/layering.d.mts +17 -0
- package/dist/shared/layering.d.mts.map +1 -0
- package/dist/shared/layering.mjs +37 -0
- package/dist/shared/layering.mjs.map +1 -0
- package/dist/shared/notification.d.mts +10 -0
- package/dist/shared/notification.d.mts.map +1 -0
- package/dist/shared/notification.mjs +105 -0
- package/dist/shared/notification.mjs.map +1 -0
- package/dist/shared/reduced-motion.mjs +19 -0
- package/dist/shared/reduced-motion.mjs.map +1 -0
- package/dist/shared/select-indicator.mjs +40 -0
- package/dist/shared/select-indicator.mjs.map +1 -0
- package/dist/shared/size-scale.d.mts +6 -0
- package/dist/shared/size-scale.d.mts.map +1 -0
- package/dist/shared/size-scale.mjs +28 -0
- package/dist/shared/size-scale.mjs.map +1 -0
- package/dist/shared/state-parts.mjs +123 -0
- package/dist/shared/state-parts.mjs.map +1 -0
- package/dist/shared/text-entry.mjs +54 -0
- package/dist/shared/text-entry.mjs.map +1 -0
- package/dist/styles.css +6238 -0
- package/dist/system/as-child.mjs +42 -0
- package/dist/system/as-child.mjs.map +1 -0
- package/dist/system/context.mjs +54 -0
- package/dist/system/context.mjs.map +1 -0
- package/dist/system/controlled.mjs +45 -0
- package/dist/system/controlled.mjs.map +1 -0
- package/dist/system/create-component.mjs +285 -0
- package/dist/system/create-component.mjs.map +1 -0
- package/dist/system/create-part.mjs +123 -0
- package/dist/system/create-part.mjs.map +1 -0
- package/dist/system/dev-warn.mjs +13 -0
- package/dist/system/dev-warn.mjs.map +1 -0
- package/dist/system/getters.mjs +24 -0
- package/dist/system/getters.mjs.map +1 -0
- package/dist/system/merge-props.d.mts +5 -0
- package/dist/system/merge-props.d.mts.map +1 -0
- package/dist/system/merge-props.mjs +95 -0
- package/dist/system/merge-props.mjs.map +1 -0
- package/dist/system/react-node.mjs +17 -0
- package/dist/system/react-node.mjs.map +1 -0
- package/dist/system/refs.mjs +21 -0
- package/dist/system/refs.mjs.map +1 -0
- package/dist/system/styled-component.mjs +15 -0
- package/dist/system/styled-component.mjs.map +1 -0
- package/dist/system/types.d.mts +47 -0
- package/dist/system/types.d.mts.map +1 -0
- package/dist/tokens/dist/preset.d.mts +6 -0
- package/dist/tokens/dist/preset.d.mts.map +1 -0
- package/dist/tokens/dist/preset.mjs +997 -0
- package/dist/tokens/dist/preset.mjs.map +1 -0
- package/package.json +411 -0
- package/skills/components/accordion/SKILL.md +138 -0
- package/skills/components/alert/SKILL.md +126 -0
- package/skills/components/angle-slider/SKILL.md +155 -0
- package/skills/components/avatar/SKILL.md +123 -0
- package/skills/components/badge/SKILL.md +117 -0
- package/skills/components/breadcrumb/SKILL.md +128 -0
- package/skills/components/button/SKILL.md +122 -0
- package/skills/components/card/SKILL.md +126 -0
- package/skills/components/carousel/SKILL.md +176 -0
- package/skills/components/cascade-select/SKILL.md +206 -0
- package/skills/components/checkbox/SKILL.md +149 -0
- package/skills/components/clipboard/SKILL.md +139 -0
- package/skills/components/collapsible/SKILL.md +130 -0
- package/skills/components/color-picker/SKILL.md +216 -0
- package/skills/components/combobox/SKILL.md +218 -0
- package/skills/components/date-input/SKILL.md +157 -0
- package/skills/components/date-picker/SKILL.md +235 -0
- package/skills/components/dialog/SKILL.md +159 -0
- package/skills/components/drawer/SKILL.md +192 -0
- package/skills/components/editable/SKILL.md +162 -0
- package/skills/components/empty-state/SKILL.md +125 -0
- package/skills/components/field/SKILL.md +133 -0
- package/skills/components/fieldset/SKILL.md +123 -0
- package/skills/components/file-upload/SKILL.md +184 -0
- package/skills/components/floating-panel/SKILL.md +206 -0
- package/skills/components/hover-card/SKILL.md +173 -0
- package/skills/components/image-cropper/SKILL.md +158 -0
- package/skills/components/input/SKILL.md +131 -0
- package/skills/components/kbd/SKILL.md +116 -0
- package/skills/components/listbox/SKILL.md +172 -0
- package/skills/components/marquee/SKILL.md +151 -0
- package/skills/components/menu/SKILL.md +202 -0
- package/skills/components/navigation-menu/SKILL.md +172 -0
- package/skills/components/number-input/SKILL.md +177 -0
- package/skills/components/pagination/SKILL.md +159 -0
- package/skills/components/password-input/SKILL.md +156 -0
- package/skills/components/pin-input/SKILL.md +157 -0
- package/skills/components/popover/SKILL.md +166 -0
- package/skills/components/progress/SKILL.md +144 -0
- package/skills/components/qr-code/SKILL.md +132 -0
- package/skills/components/radio-group/SKILL.md +153 -0
- package/skills/components/rating-group/SKILL.md +151 -0
- package/skills/components/scroll-area/SKILL.md +149 -0
- package/skills/components/select/SKILL.md +202 -0
- package/skills/components/separator/SKILL.md +114 -0
- package/skills/components/signature-pad/SKILL.md +161 -0
- package/skills/components/skeleton/SKILL.md +114 -0
- package/skills/components/slider/SKILL.md +178 -0
- package/skills/components/snackbar/SKILL.md +154 -0
- package/skills/components/spinner/SKILL.md +122 -0
- package/skills/components/splitter/SKILL.md +136 -0
- package/skills/components/steps/SKILL.md +150 -0
- package/skills/components/switch/SKILL.md +144 -0
- package/skills/components/table/SKILL.md +144 -0
- package/skills/components/tabs/SKILL.md +138 -0
- package/skills/components/tags-input/SKILL.md +194 -0
- package/skills/components/textarea/SKILL.md +131 -0
- package/skills/components/timer/SKILL.md +142 -0
- package/skills/components/toast/SKILL.md +129 -0
- package/skills/components/toc/SKILL.md +141 -0
- package/skills/components/toggle/SKILL.md +125 -0
- package/skills/components/toggle-group/SKILL.md +129 -0
- package/skills/components/tooltip/SKILL.md +188 -0
- package/skills/components/tour/SKILL.md +158 -0
- package/skills/components/tree-view/SKILL.md +180 -0
- package/skills/synapse/SKILL.md +301 -0
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { unwrap, unwrapTree } from "../shared/collection-internal.mjs";
|
|
3
|
+
import { createContext, createElement, useContext, useEffect, useRef, useState } from "react";
|
|
4
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
5
|
+
import { visuallyHiddenStyle } from "@zag-js/dom-query";
|
|
6
|
+
//#region src/components/collection-window.tsx
|
|
7
|
+
const upstreamOf = (api) => typeof api === "object" && api !== null && "collection" in api && typeof api.collection === "object" && api.collection !== null ? api.collection : void 0;
|
|
8
|
+
const listSourceOf = /* @__PURE__ */ new WeakMap();
|
|
9
|
+
function rememberCollection(collection) {
|
|
10
|
+
const upstream = unwrap(collection);
|
|
11
|
+
listSourceOf.set(upstream, collection);
|
|
12
|
+
return upstream;
|
|
13
|
+
}
|
|
14
|
+
function collectionOf(api) {
|
|
15
|
+
const upstream = upstreamOf(api);
|
|
16
|
+
return upstream === void 0 ? null : listSourceOf.get(upstream) ?? null;
|
|
17
|
+
}
|
|
18
|
+
const treeSourceOf = /* @__PURE__ */ new WeakMap();
|
|
19
|
+
function treeSource(collection) {
|
|
20
|
+
return {
|
|
21
|
+
rootNode: collection.rootNode,
|
|
22
|
+
nodeOf: (value) => collection.nodeOf(value),
|
|
23
|
+
labelOf: (value) => collection.labelOf(value),
|
|
24
|
+
isBranch: (value) => collection.isBranch(value),
|
|
25
|
+
positionOf: (value) => collection.positionOf(value),
|
|
26
|
+
visibleValues: (expandedValues) => collection.visibleValues(expandedValues),
|
|
27
|
+
resolveWindow: (request) => collection.resolveWindow(request),
|
|
28
|
+
childEntries: (value) => collection.childrenOf(value).map((node) => ({
|
|
29
|
+
item: node,
|
|
30
|
+
value: collection.valueOf(node)
|
|
31
|
+
}))
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
function rememberTreeCollection(collection) {
|
|
35
|
+
const upstream = unwrapTree(collection);
|
|
36
|
+
treeSourceOf.set(upstream, treeSource(collection));
|
|
37
|
+
return upstream;
|
|
38
|
+
}
|
|
39
|
+
function treeCollectionOf(api) {
|
|
40
|
+
const upstream = upstreamOf(api);
|
|
41
|
+
return upstream === void 0 ? null : treeSourceOf.get(upstream) ?? null;
|
|
42
|
+
}
|
|
43
|
+
const UNMEASURED_WINDOW = 60;
|
|
44
|
+
const OVERSCAN = 8;
|
|
45
|
+
const ESTIMATED_ROW_HEIGHT = 32;
|
|
46
|
+
const PINNED_ROW_STYLE = visuallyHiddenStyle;
|
|
47
|
+
function pinnedRowProps(hidden) {
|
|
48
|
+
return hidden ? { style: PINNED_ROW_STYLE } : {};
|
|
49
|
+
}
|
|
50
|
+
const UNMEASURED = {
|
|
51
|
+
scrollTop: 0,
|
|
52
|
+
height: 0
|
|
53
|
+
};
|
|
54
|
+
function scrollParentOf(element) {
|
|
55
|
+
let current = element?.parentElement ?? null;
|
|
56
|
+
while (current !== null) {
|
|
57
|
+
const { overflowY } = getComputedStyle(current);
|
|
58
|
+
if (overflowY === "auto" || overflowY === "scroll" || overflowY === "overlay") return current;
|
|
59
|
+
current = current.parentElement;
|
|
60
|
+
}
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
function resolveWindowRange(request) {
|
|
64
|
+
const { scrollTop, viewportHeight, itemHeight, forced } = request;
|
|
65
|
+
const measured = viewportHeight > 0;
|
|
66
|
+
const count = measured ? Math.ceil(viewportHeight / itemHeight) : UNMEASURED_WINDOW;
|
|
67
|
+
let start = measured ? Math.floor(scrollTop / itemHeight) : 0;
|
|
68
|
+
if (forced !== null) {
|
|
69
|
+
const index = Math.max(0, Math.min(forced.index, Math.max(0, forced.size - 1)));
|
|
70
|
+
if (index < start) start = index;
|
|
71
|
+
else if (index >= start + count) start = index - count + 1;
|
|
72
|
+
}
|
|
73
|
+
return {
|
|
74
|
+
start: Math.max(0, start),
|
|
75
|
+
count
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
function useScrollRange(sizeOf) {
|
|
79
|
+
const anchor = useRef(null);
|
|
80
|
+
const [viewport, setViewport] = useState(UNMEASURED);
|
|
81
|
+
const [rowHeight, setRowHeight] = useState(0);
|
|
82
|
+
const [forcedIndex, setForcedIndex] = useState(null);
|
|
83
|
+
useEffect(() => {
|
|
84
|
+
const scroller = scrollParentOf(anchor.current);
|
|
85
|
+
if (scroller === null) return;
|
|
86
|
+
const read = () => {
|
|
87
|
+
setForcedIndex(null);
|
|
88
|
+
setViewport((previous) => previous.scrollTop === scroller.scrollTop && previous.height === scroller.clientHeight ? previous : {
|
|
89
|
+
scrollTop: scroller.scrollTop,
|
|
90
|
+
height: scroller.clientHeight
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
read();
|
|
94
|
+
scroller.addEventListener("scroll", read, { passive: true });
|
|
95
|
+
const observer = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(() => read());
|
|
96
|
+
observer?.observe(scroller);
|
|
97
|
+
return () => {
|
|
98
|
+
scroller.removeEventListener("scroll", read);
|
|
99
|
+
observer?.disconnect();
|
|
100
|
+
};
|
|
101
|
+
}, []);
|
|
102
|
+
useEffect(() => {
|
|
103
|
+
const first = anchor.current?.nextElementSibling;
|
|
104
|
+
if (!(first instanceof HTMLElement)) return;
|
|
105
|
+
const measured = first.offsetHeight;
|
|
106
|
+
if (measured > 0 && measured !== rowHeight) setRowHeight(measured);
|
|
107
|
+
});
|
|
108
|
+
const unit = rowHeight > 0 ? rowHeight : ESTIMATED_ROW_HEIGHT;
|
|
109
|
+
const range = resolveWindowRange({
|
|
110
|
+
scrollTop: viewport.scrollTop,
|
|
111
|
+
viewportHeight: viewport.height,
|
|
112
|
+
itemHeight: unit,
|
|
113
|
+
forced: forcedIndex === null ? null : {
|
|
114
|
+
index: forcedIndex,
|
|
115
|
+
size: sizeOf()
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
useEffect(() => {
|
|
119
|
+
if (forcedIndex === null) return;
|
|
120
|
+
const scroller = scrollParentOf(anchor.current);
|
|
121
|
+
if (scroller === null) return;
|
|
122
|
+
const target = range.start * unit;
|
|
123
|
+
if (scroller.scrollTop !== target) scroller.scrollTop = target;
|
|
124
|
+
}, [
|
|
125
|
+
forcedIndex,
|
|
126
|
+
range.start,
|
|
127
|
+
unit
|
|
128
|
+
]);
|
|
129
|
+
return {
|
|
130
|
+
anchor,
|
|
131
|
+
unit,
|
|
132
|
+
start: range.start,
|
|
133
|
+
count: range.count,
|
|
134
|
+
forceIndex: setForcedIndex
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
function createWindowHandle() {
|
|
138
|
+
let mounted = null;
|
|
139
|
+
return {
|
|
140
|
+
forceIndex: (index) => mounted?.(index),
|
|
141
|
+
connect: (forceIndex) => {
|
|
142
|
+
mounted = forceIndex;
|
|
143
|
+
return () => {
|
|
144
|
+
if (mounted === forceIndex) mounted = null;
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
const WindowHandleContext = createContext(null);
|
|
150
|
+
WindowHandleContext.displayName = "SynapseWindowHandle";
|
|
151
|
+
function useWindowHandle() {
|
|
152
|
+
return useContext(WindowHandleContext);
|
|
153
|
+
}
|
|
154
|
+
function withWindowHandle(Root) {
|
|
155
|
+
function WindowedRoot(props) {
|
|
156
|
+
const [handle] = useState(createWindowHandle);
|
|
157
|
+
return createElement(WindowHandleContext.Provider, { value: handle }, createElement(Root, props));
|
|
158
|
+
}
|
|
159
|
+
WindowedRoot.displayName = "displayName" in Root && typeof Root.displayName === "string" ? Root.displayName : "Root";
|
|
160
|
+
return WindowedRoot;
|
|
161
|
+
}
|
|
162
|
+
function usePublishedHandle(forceIndex) {
|
|
163
|
+
const handle = useContext(WindowHandleContext);
|
|
164
|
+
useEffect(() => handle?.connect(forceIndex), [handle, forceIndex]);
|
|
165
|
+
}
|
|
166
|
+
const spacerRow = (rows, unit, anchor) => /* @__PURE__ */ jsx("div", {
|
|
167
|
+
ref: anchor ?? null,
|
|
168
|
+
role: "presentation",
|
|
169
|
+
"aria-hidden": "true",
|
|
170
|
+
style: { blockSize: `${rows * unit}px` }
|
|
171
|
+
});
|
|
172
|
+
function WindowedRows(props) {
|
|
173
|
+
const { collection, activeValue, renderRow } = props;
|
|
174
|
+
const { anchor, start, count, unit } = useScrollRange(() => collection.size);
|
|
175
|
+
const window = collection.resolveWindow({
|
|
176
|
+
start,
|
|
177
|
+
count,
|
|
178
|
+
activeValue,
|
|
179
|
+
overscan: OVERSCAN
|
|
180
|
+
});
|
|
181
|
+
return /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
182
|
+
spacerRow(window.leadingCount, unit, anchor),
|
|
183
|
+
window.rows.map((row) => renderRow(row, row.pinned)),
|
|
184
|
+
spacerRow(window.trailingCount, unit)
|
|
185
|
+
] });
|
|
186
|
+
}
|
|
187
|
+
function WindowedTreeRows(props) {
|
|
188
|
+
const { collection, expandedValues, activeValue, renderRow } = props;
|
|
189
|
+
const { anchor, start, count, unit, forceIndex } = useScrollRange(() => collection.visibleValues(expandedValues).length);
|
|
190
|
+
usePublishedHandle(forceIndex);
|
|
191
|
+
const window = collection.resolveWindow({
|
|
192
|
+
expandedValues,
|
|
193
|
+
start,
|
|
194
|
+
count,
|
|
195
|
+
activeValue,
|
|
196
|
+
overscan: OVERSCAN
|
|
197
|
+
});
|
|
198
|
+
return /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
199
|
+
spacerRow(window.leadingCount, unit, anchor),
|
|
200
|
+
window.rows.map((row) => renderRow(row, row.pinned)),
|
|
201
|
+
spacerRow(window.trailingCount, unit)
|
|
202
|
+
] });
|
|
203
|
+
}
|
|
204
|
+
function resolveBranchWindow(collection, parentValue, request) {
|
|
205
|
+
const children = collection.childEntries(parentValue);
|
|
206
|
+
const size = children.length;
|
|
207
|
+
const safeCount = Math.max(0, request.count);
|
|
208
|
+
const rawStart = Math.max(0, Math.min(request.start, Math.max(0, size - safeCount)));
|
|
209
|
+
const windowStart = Math.max(0, rawStart - request.overscan);
|
|
210
|
+
const windowEnd = Math.min(size, rawStart + safeCount + request.overscan);
|
|
211
|
+
const entries = children.slice(windowStart, windowEnd).map((child, offset) => ({
|
|
212
|
+
item: child.item,
|
|
213
|
+
value: child.value,
|
|
214
|
+
index: windowStart + offset
|
|
215
|
+
}));
|
|
216
|
+
const activeIndex = request.activeValue === null ? -1 : children.findIndex((child) => child.value === request.activeValue);
|
|
217
|
+
const activeChild = activeIndex !== -1 && (activeIndex < windowStart || activeIndex >= windowEnd) ? children[activeIndex] : void 0;
|
|
218
|
+
const pinned = activeChild === void 0 ? null : {
|
|
219
|
+
item: activeChild.item,
|
|
220
|
+
value: activeChild.value,
|
|
221
|
+
index: activeIndex
|
|
222
|
+
};
|
|
223
|
+
const rows = (pinned === null ? entries : pinned.index < windowStart ? [pinned, ...entries] : [...entries, pinned]).map((entry) => ({
|
|
224
|
+
item: entry.item,
|
|
225
|
+
value: entry.value,
|
|
226
|
+
index: entry.index,
|
|
227
|
+
position: collection.positionOf(entry.value) ?? {
|
|
228
|
+
level: 1,
|
|
229
|
+
posInSet: entry.index + 1,
|
|
230
|
+
setSize: size,
|
|
231
|
+
indexPath: [entry.index],
|
|
232
|
+
valuePath: [entry.value],
|
|
233
|
+
branch: false
|
|
234
|
+
},
|
|
235
|
+
pinned: pinned !== null && entry.index === pinned.index
|
|
236
|
+
}));
|
|
237
|
+
return {
|
|
238
|
+
start: windowStart,
|
|
239
|
+
end: windowEnd,
|
|
240
|
+
entries,
|
|
241
|
+
leadingCount: windowStart,
|
|
242
|
+
trailingCount: size - windowEnd,
|
|
243
|
+
pinned,
|
|
244
|
+
rows
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
function WindowedBranchRows(props) {
|
|
248
|
+
const { collection, parentValue, activeValue, renderRow } = props;
|
|
249
|
+
const { anchor, start, count, unit } = useScrollRange(() => collection.childEntries(parentValue).length);
|
|
250
|
+
const window = resolveBranchWindow(collection, parentValue, {
|
|
251
|
+
start,
|
|
252
|
+
count,
|
|
253
|
+
activeValue,
|
|
254
|
+
overscan: OVERSCAN
|
|
255
|
+
});
|
|
256
|
+
return /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
257
|
+
spacerRow(window.leadingCount, unit, anchor),
|
|
258
|
+
window.rows.map((row) => renderRow(row, row.pinned)),
|
|
259
|
+
spacerRow(window.trailingCount, unit)
|
|
260
|
+
] });
|
|
261
|
+
}
|
|
262
|
+
function positionProps(position) {
|
|
263
|
+
return {
|
|
264
|
+
"aria-posinset": position.posInSet,
|
|
265
|
+
"aria-setsize": position.setSize
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
const highlightedValueOf = (api) => typeof api === "object" && api !== null && "highlightedValue" in api && typeof api.highlightedValue === "string" ? api.highlightedValue : null;
|
|
269
|
+
function windowedContent(options) {
|
|
270
|
+
const readActive = options.activeValue ?? highlightedValueOf;
|
|
271
|
+
return (api) => {
|
|
272
|
+
const collection = collectionOf(api);
|
|
273
|
+
if (collection === null) return null;
|
|
274
|
+
return /* @__PURE__ */ jsx(WindowedRows, {
|
|
275
|
+
collection,
|
|
276
|
+
activeValue: readActive(api),
|
|
277
|
+
renderRow: (row, hidden) => options.renderRow(row, hidden, collection)
|
|
278
|
+
});
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
const isString = (value) => typeof value === "string";
|
|
282
|
+
const expandedValueOf = (api) => typeof api === "object" && api !== null && "expandedValue" in api && Array.isArray(api.expandedValue) ? api.expandedValue.filter(isString) : [];
|
|
283
|
+
function windowedTreeContent(options) {
|
|
284
|
+
const readExpanded = options.expandedValues ?? expandedValueOf;
|
|
285
|
+
return (api) => {
|
|
286
|
+
const collection = treeCollectionOf(api);
|
|
287
|
+
if (collection === null) return null;
|
|
288
|
+
return /* @__PURE__ */ jsx(WindowedTreeRows, {
|
|
289
|
+
collection,
|
|
290
|
+
expandedValues: readExpanded(api),
|
|
291
|
+
activeValue: options.activeValue(api),
|
|
292
|
+
renderRow: (row, hidden) => options.renderRow(row, hidden, collection)
|
|
293
|
+
});
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
//#endregion
|
|
297
|
+
export { WindowedBranchRows, WindowedRows, WindowedTreeRows, collectionOf, pinnedRowProps, positionProps, rememberCollection, rememberTreeCollection, resolveWindowRange, treeCollectionOf, useWindowHandle, windowedContent, windowedTreeContent, withWindowHandle };
|
|
298
|
+
|
|
299
|
+
//# sourceMappingURL=collection-window.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collection-window.mjs","names":[],"sources":["../../src/components/collection-window.tsx"],"sourcesContent":["'use client'\n\nimport type { ListCollection, TreeCollection } from '@zag-js/collection'\nimport { visuallyHiddenStyle } from '@zag-js/dom-query'\nimport {\n createContext,\n createElement,\n useContext,\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type ReactNode,\n type RefObject,\n} from 'react'\n\nimport { unwrap, unwrapTree } from '#/shared/collection-internal.ts'\nimport type {\n CollectionWindow,\n ItemPosition,\n SynapseCollection,\n SynapseTreeCollection,\n TreeNodePosition,\n TreeWindowRequest,\n WindowEntry,\n WindowRequest,\n WindowRow,\n} from '#/shared/collection.ts'\n\nexport interface ListSource {\n readonly size: number\n labelOf: (value: string | null | undefined) => string | null\n resolveWindow: (request: WindowRequest) => CollectionWindow<unknown>\n}\n\nexport interface TreeSource {\n readonly rootNode: unknown\n nodeOf: (value: string | null | undefined) => unknown\n labelOf: (value: string | null | undefined) => string | null\n isBranch: (value: string | null | undefined) => boolean\n positionOf: (value: string | null | undefined) => TreeNodePosition | null\n visibleValues: (expandedValues: readonly string[]) => readonly string[]\n resolveWindow: (request: TreeWindowRequest) => CollectionWindow<unknown, TreeNodePosition>\n childEntries: (value: string | null | undefined) => readonly ChildEntry[]\n}\n\nexport interface ChildEntry {\n readonly item: unknown\n readonly value: string\n}\n\nconst upstreamOf = (api: unknown): object | undefined =>\n typeof api === 'object' &&\n api !== null &&\n 'collection' in api &&\n typeof api.collection === 'object' &&\n api.collection !== null\n ? api.collection\n : undefined\n\nconst listSourceOf = new WeakMap<object, ListSource>()\n\nexport function rememberCollection<TItem>(\n collection: SynapseCollection<TItem>,\n): ListCollection<unknown> {\n const upstream = unwrap(collection)\n listSourceOf.set(upstream, collection)\n return upstream\n}\n\nexport function collectionOf(api: unknown): ListSource | null {\n const upstream = upstreamOf(api)\n return upstream === undefined ? null : (listSourceOf.get(upstream) ?? null)\n}\n\nconst treeSourceOf = new WeakMap<object, TreeSource>()\n\nfunction treeSource<TNode>(collection: SynapseTreeCollection<TNode>): TreeSource {\n return {\n rootNode: collection.rootNode,\n nodeOf: (value) => collection.nodeOf(value),\n labelOf: (value) => collection.labelOf(value),\n isBranch: (value) => collection.isBranch(value),\n positionOf: (value) => collection.positionOf(value),\n visibleValues: (expandedValues) => collection.visibleValues(expandedValues),\n resolveWindow: (request) => collection.resolveWindow(request),\n childEntries: (value) =>\n collection.childrenOf(value).map((node) => ({ item: node, value: collection.valueOf(node) })),\n }\n}\n\nexport function rememberTreeCollection<TNode>(\n collection: SynapseTreeCollection<TNode>,\n): TreeCollection<unknown> {\n const upstream = unwrapTree(collection)\n treeSourceOf.set(upstream, treeSource(collection))\n return upstream\n}\n\nexport function treeCollectionOf(api: unknown): TreeSource | null {\n const upstream = upstreamOf(api)\n return upstream === undefined ? null : (treeSourceOf.get(upstream) ?? null)\n}\n\nexport const WINDOWED_COLLECTION_LIMIT = 100_000\n\nconst UNMEASURED_WINDOW = 60\n\nconst OVERSCAN = 8\n\nconst ESTIMATED_ROW_HEIGHT = 32\n\nconst PINNED_ROW_STYLE: CSSProperties = visuallyHiddenStyle\n\nexport interface WindowedRowsProps {\n collection: ListSource\n activeValue: string | null\n renderRow: (row: WindowRow<unknown>, hidden: boolean) => ReactNode\n}\n\nexport function pinnedRowProps(hidden: boolean): { style?: CSSProperties } {\n return hidden ? { style: PINNED_ROW_STYLE } : {}\n}\n\ninterface Viewport {\n scrollTop: number\n height: number\n}\n\nconst UNMEASURED: Viewport = { scrollTop: 0, height: 0 }\n\nfunction scrollParentOf(element: Element | null): HTMLElement | null {\n let current = element?.parentElement ?? null\n while (current !== null) {\n const { overflowY } = getComputedStyle(current)\n if (overflowY === 'auto' || overflowY === 'scroll' || overflowY === 'overlay') return current\n current = current.parentElement\n }\n return null\n}\n\nexport interface ForcedIndex {\n index: number\n size: number\n}\n\nexport interface WindowRange {\n start: number\n count: number\n}\n\nexport interface WindowRangeRequest {\n scrollTop: number\n viewportHeight: number\n itemHeight: number\n forced: ForcedIndex | null\n}\n\nexport function resolveWindowRange(request: WindowRangeRequest): WindowRange {\n const { scrollTop, viewportHeight, itemHeight, forced } = request\n const measured = viewportHeight > 0\n const count = measured ? Math.ceil(viewportHeight / itemHeight) : UNMEASURED_WINDOW\n let start = measured ? Math.floor(scrollTop / itemHeight) : 0\n\n if (forced !== null) {\n const index = Math.max(0, Math.min(forced.index, Math.max(0, forced.size - 1)))\n if (index < start) start = index\n else if (index >= start + count) start = index - count + 1\n }\n\n return { start: Math.max(0, start), count }\n}\n\ninterface ScrollRange {\n anchor: RefObject<HTMLDivElement | null>\n start: number\n count: number\n unit: number\n forceIndex: (index: number) => void\n}\n\nfunction useScrollRange(sizeOf: () => number): ScrollRange {\n const anchor = useRef<HTMLDivElement | null>(null)\n const [viewport, setViewport] = useState<Viewport>(UNMEASURED)\n const [rowHeight, setRowHeight] = useState(0)\n const [forcedIndex, setForcedIndex] = useState<number | null>(null)\n\n useEffect(() => {\n const scroller = scrollParentOf(anchor.current)\n if (scroller === null) return\n\n const read = (): void => {\n setForcedIndex(null)\n setViewport((previous) =>\n previous.scrollTop === scroller.scrollTop && previous.height === scroller.clientHeight\n ? previous\n : { scrollTop: scroller.scrollTop, height: scroller.clientHeight },\n )\n }\n\n read()\n scroller.addEventListener('scroll', read, { passive: true })\n const observer = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(() => read())\n observer?.observe(scroller)\n return () => {\n scroller.removeEventListener('scroll', read)\n observer?.disconnect()\n }\n }, [])\n\n useEffect(() => {\n const first = anchor.current?.nextElementSibling\n if (!(first instanceof HTMLElement)) return\n const measured = first.offsetHeight\n if (measured > 0 && measured !== rowHeight) setRowHeight(measured)\n })\n\n const unit = rowHeight > 0 ? rowHeight : ESTIMATED_ROW_HEIGHT\n const range = resolveWindowRange({\n scrollTop: viewport.scrollTop,\n viewportHeight: viewport.height,\n itemHeight: unit,\n forced: forcedIndex === null ? null : { index: forcedIndex, size: sizeOf() },\n })\n\n useEffect(() => {\n if (forcedIndex === null) return\n const scroller = scrollParentOf(anchor.current)\n if (scroller === null) return\n const target = range.start * unit\n if (scroller.scrollTop !== target) scroller.scrollTop = target\n }, [forcedIndex, range.start, unit])\n\n return { anchor, unit, start: range.start, count: range.count, forceIndex: setForcedIndex }\n}\n\nexport interface WindowHandle {\n forceIndex: (index: number) => void\n connect: (forceIndex: (index: number) => void) => () => void\n}\n\nfunction createWindowHandle(): WindowHandle {\n let mounted: ((index: number) => void) | null = null\n return {\n forceIndex: (index) => mounted?.(index),\n connect: (forceIndex) => {\n mounted = forceIndex\n return () => {\n if (mounted === forceIndex) mounted = null\n }\n },\n }\n}\n\nconst WindowHandleContext = createContext<WindowHandle | null>(null)\nWindowHandleContext.displayName = 'SynapseWindowHandle'\n\nexport function useWindowHandle(): WindowHandle | null {\n return useContext(WindowHandleContext)\n}\n\nexport function withWindowHandle<TProps extends object>(\n Root: (props: TProps) => ReactNode,\n): (props: TProps) => ReactNode {\n function WindowedRoot(props: TProps): ReactNode {\n const [handle] = useState(createWindowHandle)\n return createElement(\n WindowHandleContext.Provider,\n { value: handle },\n createElement(Root, props),\n )\n }\n WindowedRoot.displayName =\n 'displayName' in Root && typeof Root.displayName === 'string' ? Root.displayName : 'Root'\n return WindowedRoot\n}\n\nfunction usePublishedHandle(forceIndex: (index: number) => void): void {\n const handle = useContext(WindowHandleContext)\n useEffect(() => handle?.connect(forceIndex), [handle, forceIndex])\n}\n\nconst spacerRow = (\n rows: number,\n unit: number,\n anchor?: RefObject<HTMLDivElement | null>,\n): ReactNode => (\n <div\n ref={anchor ?? null}\n role=\"presentation\"\n aria-hidden=\"true\"\n style={{ blockSize: `${rows * unit}px` }}\n />\n)\n\nexport function WindowedRows(props: WindowedRowsProps): ReactNode {\n const { collection, activeValue, renderRow } = props\n const { anchor, start, count, unit } = useScrollRange(() => collection.size)\n\n const window = collection.resolveWindow({ start, count, activeValue, overscan: OVERSCAN })\n\n return (\n <>\n {spacerRow(window.leadingCount, unit, anchor)}\n {window.rows.map((row) => renderRow(row, row.pinned))}\n {spacerRow(window.trailingCount, unit)}\n </>\n )\n}\n\nexport interface WindowedTreeRowsProps {\n collection: TreeSource\n expandedValues: readonly string[]\n activeValue: string | null\n renderRow: (row: WindowRow<unknown, TreeNodePosition>, hidden: boolean) => ReactNode\n}\n\nexport function WindowedTreeRows(props: WindowedTreeRowsProps): ReactNode {\n const { collection, expandedValues, activeValue, renderRow } = props\n const { anchor, start, count, unit, forceIndex } = useScrollRange(\n () => collection.visibleValues(expandedValues).length,\n )\n usePublishedHandle(forceIndex)\n\n const window = collection.resolveWindow({\n expandedValues,\n start,\n count,\n activeValue,\n overscan: OVERSCAN,\n })\n\n return (\n <>\n {spacerRow(window.leadingCount, unit, anchor)}\n {window.rows.map((row) => renderRow(row, row.pinned))}\n {spacerRow(window.trailingCount, unit)}\n </>\n )\n}\n\nfunction resolveBranchWindow(\n collection: TreeSource,\n parentValue: string | null,\n request: { start: number; count: number; activeValue: string | null; overscan: number },\n): CollectionWindow<unknown, TreeNodePosition> {\n const children = collection.childEntries(parentValue)\n const size = children.length\n const safeCount = Math.max(0, request.count)\n const rawStart = Math.max(0, Math.min(request.start, Math.max(0, size - safeCount)))\n const windowStart = Math.max(0, rawStart - request.overscan)\n const windowEnd = Math.min(size, rawStart + safeCount + request.overscan)\n\n const entries: WindowEntry<unknown>[] = children\n .slice(windowStart, windowEnd)\n .map((child, offset) => ({ item: child.item, value: child.value, index: windowStart + offset }))\n\n const activeIndex =\n request.activeValue === null\n ? -1\n : children.findIndex((child) => child.value === request.activeValue)\n const outside = activeIndex !== -1 && (activeIndex < windowStart || activeIndex >= windowEnd)\n const activeChild = outside ? children[activeIndex] : undefined\n const pinned: WindowEntry<unknown> | null =\n activeChild === undefined\n ? null\n : { item: activeChild.item, value: activeChild.value, index: activeIndex }\n\n const withPin: WindowEntry<unknown>[] =\n pinned === null\n ? entries\n : pinned.index < windowStart\n ? [pinned, ...entries]\n : [...entries, pinned]\n\n const rows: WindowRow<unknown, TreeNodePosition>[] = withPin.map((entry) => ({\n item: entry.item,\n value: entry.value,\n index: entry.index,\n position: collection.positionOf(entry.value) ?? {\n level: 1,\n posInSet: entry.index + 1,\n setSize: size,\n indexPath: [entry.index],\n valuePath: [entry.value],\n branch: false,\n },\n pinned: pinned !== null && entry.index === pinned.index,\n }))\n\n return {\n start: windowStart,\n end: windowEnd,\n entries,\n leadingCount: windowStart,\n trailingCount: size - windowEnd,\n pinned,\n rows,\n }\n}\n\nexport interface WindowedBranchRowsProps {\n collection: TreeSource\n parentValue: string | null\n activeValue: string | null\n renderRow: (row: WindowRow<unknown, TreeNodePosition>, hidden: boolean) => ReactNode\n}\n\nexport function WindowedBranchRows(props: WindowedBranchRowsProps): ReactNode {\n const { collection, parentValue, activeValue, renderRow } = props\n const { anchor, start, count, unit } = useScrollRange(\n () => collection.childEntries(parentValue).length,\n )\n\n const window = resolveBranchWindow(collection, parentValue, {\n start,\n count,\n activeValue,\n overscan: OVERSCAN,\n })\n\n return (\n <>\n {spacerRow(window.leadingCount, unit, anchor)}\n {window.rows.map((row) => renderRow(row, row.pinned))}\n {spacerRow(window.trailingCount, unit)}\n </>\n )\n}\n\nexport function positionProps(position: ItemPosition): {\n 'aria-posinset': number\n 'aria-setsize': number\n} {\n return { 'aria-posinset': position.posInSet, 'aria-setsize': position.setSize }\n}\n\nexport interface WindowedContentOptions {\n activeValue?: (api: unknown) => string | null\n renderRow: (row: WindowRow<unknown>, hidden: boolean, collection: ListSource) => ReactNode\n}\n\nconst highlightedValueOf = (api: unknown): string | null =>\n typeof api === 'object' &&\n api !== null &&\n 'highlightedValue' in api &&\n typeof api.highlightedValue === 'string'\n ? api.highlightedValue\n : null\n\nexport function windowedContent(options: WindowedContentOptions): (api: unknown) => ReactNode {\n const readActive = options.activeValue ?? highlightedValueOf\n return (api) => {\n const collection = collectionOf(api)\n if (collection === null) return null\n return (\n <WindowedRows\n collection={collection}\n activeValue={readActive(api)}\n renderRow={(row, hidden) => options.renderRow(row, hidden, collection)}\n />\n )\n }\n}\n\nexport interface WindowedTreeContentOptions<TApi> {\n expandedValues?: (api: TApi) => readonly string[]\n activeValue: (api: TApi) => string | null\n renderRow: (\n row: WindowRow<unknown, TreeNodePosition>,\n hidden: boolean,\n collection: TreeSource,\n ) => ReactNode\n}\n\nconst isString = (value: unknown): value is string => typeof value === 'string'\n\nconst expandedValueOf = (api: unknown): readonly string[] =>\n typeof api === 'object' &&\n api !== null &&\n 'expandedValue' in api &&\n Array.isArray(api.expandedValue)\n ? api.expandedValue.filter(isString)\n : []\n\nexport function windowedTreeContent<TApi>(\n options: WindowedTreeContentOptions<TApi>,\n): (api: TApi) => ReactNode {\n const readExpanded = options.expandedValues ?? expandedValueOf\n return (api) => {\n const collection = treeCollectionOf(api)\n if (collection === null) return null\n return (\n <WindowedTreeRows\n collection={collection}\n expandedValues={readExpanded(api)}\n activeValue={options.activeValue(api)}\n renderRow={(row, hidden) => options.renderRow(row, hidden, collection)}\n />\n )\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { TranslationOverrides } from "../../provider/translations.mjs";
|
|
2
|
+
import { SynapseComponent } from "../../system/types.mjs";
|
|
3
|
+
import { OpenChangeDetails } from "../details.mjs";
|
|
4
|
+
import { Size } from "../../shared/size-scale.mjs";
|
|
5
|
+
//#region src/components/color-picker/color-picker.d.ts
|
|
6
|
+
export declare const COLOR_PICKER_FORMATS: readonly ['rgba', 'hsla', 'hsba'];
|
|
7
|
+
export type ColorPickerFormat = (typeof COLOR_PICKER_FORMATS)[number];
|
|
8
|
+
export interface ColorPickerPositioning {
|
|
9
|
+
placement?: 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'right';
|
|
10
|
+
gutter?: number;
|
|
11
|
+
flip?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface ColorPickerValueChangeDetails {
|
|
14
|
+
readonly value: string;
|
|
15
|
+
}
|
|
16
|
+
export interface ColorPickerFormatChangeDetails {
|
|
17
|
+
readonly format: ColorPickerFormat;
|
|
18
|
+
}
|
|
19
|
+
export interface ColorPickerRootProps {
|
|
20
|
+
/** 제어되는 색이며, 어떤 CSS 색 문자열이든 됩니다. */
|
|
21
|
+
value?: string;
|
|
22
|
+
/** 비제어 초기 색. `value`가 주어지면 무시됩니다. */
|
|
23
|
+
defaultValue?: string;
|
|
24
|
+
/** 드래그의 매 단계를 포함해, 값이 바뀔 때마다 알림을 받습니다. */
|
|
25
|
+
onValueChange?: (details: ColorPickerValueChangeDetails) => void;
|
|
26
|
+
/** 드래그가 끝난 뒤 한 번 알림을 받습니다 — 저장할 때 쓸 콜백입니다. */
|
|
27
|
+
onValueChangeEnd?: (details: ColorPickerValueChangeDetails) => void;
|
|
28
|
+
/** 제어되는 떠 있는 레이어의 열림 상태. */
|
|
29
|
+
open?: boolean;
|
|
30
|
+
/** 비제어 초기 열림 상태. */
|
|
31
|
+
defaultOpen?: boolean;
|
|
32
|
+
/** 피커가 열리거나 닫힐 때마다 알림을 받습니다. */
|
|
33
|
+
onOpenChange?: (details: OpenChangeDetails) => void;
|
|
34
|
+
/** 숫자 입력과 슬라이더가 다루는, 제어되는 채널 형식. */
|
|
35
|
+
format?: ColorPickerFormat;
|
|
36
|
+
/** 비제어 초기 형식. 기본값은 `rgba`입니다. */
|
|
37
|
+
defaultFormat?: ColorPickerFormat;
|
|
38
|
+
/** 형식이 바뀔 때마다 알림을 받습니다. */
|
|
39
|
+
onFormatChange?: (details: ColorPickerFormatChangeDetails) => void;
|
|
40
|
+
/** 피커를 떠 있는 레이어가 아니라 제자리에 렌더링합니다. */
|
|
41
|
+
inline?: boolean;
|
|
42
|
+
/** 색 견본을 고르면 떠 있는 레이어를 닫습니다. 기본값은 false입니다. */
|
|
43
|
+
closeOnSelect?: boolean;
|
|
44
|
+
/** 열릴 때 포커스를 콘텐츠 안으로 옮깁니다. 기본값은 true입니다. */
|
|
45
|
+
openAutoFocus?: boolean;
|
|
46
|
+
/** 떠 있는 레이어가 놓이는 위치. */
|
|
47
|
+
positioning?: ColorPickerPositioning;
|
|
48
|
+
/** 폼 필드 이름. 이것이 없으면 컨트롤은 아무것도 제출하지 않습니다. */
|
|
49
|
+
name?: string;
|
|
50
|
+
/** 비활성화된 ColorPicker는 제출되지 않고 반응하지도 않습니다. */
|
|
51
|
+
disabled?: boolean;
|
|
52
|
+
/** 읽기 전용 ColorPicker는 값을 제출하지만 바꿀 수는 없습니다. */
|
|
53
|
+
readOnly?: boolean;
|
|
54
|
+
/** 보조 기술에 `aria-invalid`로 알려집니다. */
|
|
55
|
+
invalid?: boolean;
|
|
56
|
+
/** 제약 검증: 폼이 제출되려면 색이 골라져 있어야 합니다. */
|
|
57
|
+
required?: boolean;
|
|
58
|
+
/** 이 ColorPicker에만 적용되는 접근성 문자열이며, provider의 것보다 우선합니다. */
|
|
59
|
+
translations?: TranslationOverrides;
|
|
60
|
+
/** 하나의 공유 척도에서 옵니다. 모든 컴포넌트가 그렇듯 기본값은 `md`입니다. */
|
|
61
|
+
size?: Size;
|
|
62
|
+
/** 팩토리가 생성하는 식별자를 덮어씁니다. 서버와 클라이언트에서 동일합니다. */
|
|
63
|
+
id?: string;
|
|
64
|
+
}
|
|
65
|
+
export declare const ColorPicker: SynapseComponent<"area" | "areaBackground" | "areaThumb" | "channelInput" | "channelSlider" | "channelSliderLabel" | "channelSliderThumb" | "channelSliderTrack" | "channelSliderValueText" | "content" | "control" | "eyeDropperTrigger" | "formatSelect" | "formatTrigger" | "label" | "positioner" | "root" | "swatch" | "swatchGroup" | "swatchIndicator" | "swatchTrigger" | "transparencyGrid" | "trigger" | "valueText", "root", ColorPickerRootProps, never>;
|
|
66
|
+
//#endregion
|
|
67
|
+
//# sourceMappingURL=color-picker.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-picker.d.mts","names":[],"sources":["../../../src/components/color-picker/color-picker.tsx"],"mappings":";;;;;qBAgBa;YAED,4BAA4B;iBAEvB;EACf;EASA;EACA;;iBAGe;WACN;;iBAGM;WACN,QAAQ;;iBAGF;;EAEf;;EAEA;;EAEA,iBAAiB,SAAS;;EAE1B,oBAAoB,SAAS;;EAE7B;;EAEA;;EAEA,gBAAgB,SAAS;;EAEzB,SAAS;;EAET,gBAAgB;;EAEhB,kBAAkB,SAAS;;EAE3B;;EAEA;;EAEA;;EAEA,cAAc;;EAEd;;EAEA;;EAEA;;EAEA;;EAEA;;EAEA,eAAe;;EAEf,OAAO;;EAEP;;qBA8FW,aAAW,waAAA"}
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { resolveSize, sizeBelow } from "../../shared/size-scale.mjs";
|
|
3
|
+
import { checkmark } from "../../icons/src/checkmark.mjs";
|
|
4
|
+
import { eyedropper } from "../../icons/src/eyedropper.mjs";
|
|
5
|
+
import "../../icons/src/index.mjs";
|
|
6
|
+
import { Icon } from "../../shared/icon.mjs";
|
|
7
|
+
import { defineComponent } from "../../system/create-component.mjs";
|
|
8
|
+
import { buttonPartClass } from "../../shared/button-style.mjs";
|
|
9
|
+
import { inputPartClass } from "../../shared/input-style.mjs";
|
|
10
|
+
import { withSelectIndicator } from "../../shared/select-indicator.mjs";
|
|
11
|
+
import { colorPickerRecipe } from "./color-picker.recipe.mjs";
|
|
12
|
+
import { createElement, useState } from "react";
|
|
13
|
+
import { jsx } from "react/jsx-runtime";
|
|
14
|
+
import * as colorPicker from "@zag-js/color-picker";
|
|
15
|
+
//#region src/components/color-picker/color-picker.tsx
|
|
16
|
+
const COLOR_PICKER_FORMATS = [
|
|
17
|
+
"rgba",
|
|
18
|
+
"hsla",
|
|
19
|
+
"hsba"
|
|
20
|
+
];
|
|
21
|
+
const useColorPickerMachineProps = (props) => {
|
|
22
|
+
const [emitted] = useState(() => /* @__PURE__ */ new Map());
|
|
23
|
+
const remember = (details) => {
|
|
24
|
+
emitted.clear();
|
|
25
|
+
emitted.set(details.valueAsString, details.value);
|
|
26
|
+
};
|
|
27
|
+
const resolve = (value) => emitted.get(value) ?? colorPicker.parse(value);
|
|
28
|
+
return {
|
|
29
|
+
...props.value === void 0 ? {} : { value: resolve(props.value) },
|
|
30
|
+
...props.defaultValue === void 0 ? {} : { defaultValue: colorPicker.parse(props.defaultValue) },
|
|
31
|
+
onValueChange: (details) => {
|
|
32
|
+
remember(details);
|
|
33
|
+
props.onValueChange?.({ value: details.valueAsString });
|
|
34
|
+
},
|
|
35
|
+
onValueChangeEnd: (details) => {
|
|
36
|
+
remember(details);
|
|
37
|
+
props.onValueChangeEnd?.({ value: details.valueAsString });
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
const CHANNEL_LABELS = {
|
|
42
|
+
hue: "colorPicker.channelSlider.hue",
|
|
43
|
+
saturation: "colorPicker.channelSlider.saturation",
|
|
44
|
+
brightness: "colorPicker.channelSlider.brightness",
|
|
45
|
+
lightness: "colorPicker.channelSlider.lightness",
|
|
46
|
+
red: "colorPicker.channelSlider.red",
|
|
47
|
+
green: "colorPicker.channelSlider.green",
|
|
48
|
+
blue: "colorPicker.channelSlider.blue",
|
|
49
|
+
alpha: "colorPicker.channelSlider.alpha",
|
|
50
|
+
hex: "colorPicker.channelSlider.hex",
|
|
51
|
+
css: "colorPicker.channelSlider.css"
|
|
52
|
+
};
|
|
53
|
+
const channelLabel = (channel, translate) => {
|
|
54
|
+
const key = typeof channel === "string" ? CHANNEL_LABELS[channel] : void 0;
|
|
55
|
+
return key === void 0 ? String(channel) : translate(key);
|
|
56
|
+
};
|
|
57
|
+
const invalidOf = (behaviorProps) => behaviorProps["data-invalid"] === "" ? true : void 0;
|
|
58
|
+
const PERCENT_CHANNELS = /* @__PURE__ */ new Set([
|
|
59
|
+
"saturation",
|
|
60
|
+
"brightness",
|
|
61
|
+
"lightness"
|
|
62
|
+
]);
|
|
63
|
+
const channelValueText = (channel, value, translate) => {
|
|
64
|
+
if (Number.isNaN(value)) return void 0;
|
|
65
|
+
if (channel === "hue") return translate("colorPicker.channelSliderThumb.degrees", { value: Math.round(value) });
|
|
66
|
+
if (channel === "alpha") return translate("colorPicker.channelSliderThumb.percent", { value: Math.round(value * 100) });
|
|
67
|
+
if (PERCENT_CHANNELS.has(channel)) return translate("colorPicker.channelSliderThumb.percent", { value: Math.round(value) });
|
|
68
|
+
return String(Math.round(value));
|
|
69
|
+
};
|
|
70
|
+
const MACHINE_FORMATS = [
|
|
71
|
+
"hsba",
|
|
72
|
+
"hsla",
|
|
73
|
+
"rgba"
|
|
74
|
+
];
|
|
75
|
+
const COLOR_CHANNELS = [
|
|
76
|
+
"hue",
|
|
77
|
+
"saturation",
|
|
78
|
+
"brightness",
|
|
79
|
+
"lightness",
|
|
80
|
+
"red",
|
|
81
|
+
"green",
|
|
82
|
+
"blue",
|
|
83
|
+
"alpha"
|
|
84
|
+
];
|
|
85
|
+
const channelOr = (value, fallback) => COLOR_CHANNELS.find((channel) => channel === value) ?? fallback;
|
|
86
|
+
const formatOptions = () => COLOR_PICKER_FORMATS.map((format) => createElement("option", {
|
|
87
|
+
key: format,
|
|
88
|
+
value: format
|
|
89
|
+
}, format));
|
|
90
|
+
const ColorPicker = defineComponent()({
|
|
91
|
+
name: "ColorPicker",
|
|
92
|
+
module: colorPicker,
|
|
93
|
+
rootPart: "root",
|
|
94
|
+
elements: {
|
|
95
|
+
valueText: "span",
|
|
96
|
+
channelSliderLabel: "span",
|
|
97
|
+
channelSliderValueText: "span",
|
|
98
|
+
swatchIndicator: "span",
|
|
99
|
+
channelInput: "input",
|
|
100
|
+
formatSelect: "select"
|
|
101
|
+
},
|
|
102
|
+
getterProps: {
|
|
103
|
+
area: ["xChannel", "yChannel"],
|
|
104
|
+
areaBackground: ["xChannel", "yChannel"],
|
|
105
|
+
areaThumb: ["xChannel", "yChannel"],
|
|
106
|
+
channelSlider: [
|
|
107
|
+
"channel",
|
|
108
|
+
"orientation",
|
|
109
|
+
"format"
|
|
110
|
+
],
|
|
111
|
+
channelSliderTrack: [
|
|
112
|
+
"channel",
|
|
113
|
+
"orientation",
|
|
114
|
+
"format"
|
|
115
|
+
],
|
|
116
|
+
channelSliderThumb: [
|
|
117
|
+
"channel",
|
|
118
|
+
"orientation",
|
|
119
|
+
"format"
|
|
120
|
+
],
|
|
121
|
+
channelSliderLabel: ["channel", "orientation"],
|
|
122
|
+
channelSliderValueText: ["channel", "orientation"],
|
|
123
|
+
channelInput: ["channel", "orientation"],
|
|
124
|
+
swatchTrigger: ["value", "disabled"],
|
|
125
|
+
swatch: ["value", "respectAlpha"],
|
|
126
|
+
swatchIndicator: ["value", "respectAlpha"]
|
|
127
|
+
},
|
|
128
|
+
defaultContent: {
|
|
129
|
+
formatSelect: formatOptions,
|
|
130
|
+
valueText: (api) => api.valueAsString,
|
|
131
|
+
eyeDropperTrigger: () => /* @__PURE__ */ jsx(Icon, { icon: eyedropper }),
|
|
132
|
+
swatchIndicator: () => /* @__PURE__ */ jsx(Icon, { icon: checkmark })
|
|
133
|
+
},
|
|
134
|
+
rootOwnedGetters: [{
|
|
135
|
+
name: "hiddenInput",
|
|
136
|
+
getter: "getHiddenInputProps",
|
|
137
|
+
element: "input"
|
|
138
|
+
}],
|
|
139
|
+
amendBehaviorProps: {
|
|
140
|
+
trigger: (behaviorProps, api, _args, translate) => ({
|
|
141
|
+
"aria-label": translate("colorPicker.trigger.label", { value: api.valueAsString }),
|
|
142
|
+
"aria-invalid": invalidOf(behaviorProps)
|
|
143
|
+
}),
|
|
144
|
+
areaThumb: (behaviorProps, api, getterArgs, translate) => {
|
|
145
|
+
const { value, format } = api;
|
|
146
|
+
const area = value.toFormat(format.startsWith("hsl") ? "hsla" : "hsba");
|
|
147
|
+
const [, defaultX, defaultY] = area.getChannels();
|
|
148
|
+
const xChannel = channelOr(getterArgs["xChannel"], defaultX);
|
|
149
|
+
const yChannel = channelOr(getterArgs["yChannel"], defaultY);
|
|
150
|
+
const x = channelLabel(xChannel, translate);
|
|
151
|
+
const y = channelLabel(yChannel, translate);
|
|
152
|
+
return {
|
|
153
|
+
"aria-label": translate("colorPicker.areaThumb.label", {
|
|
154
|
+
xChannel: x,
|
|
155
|
+
yChannel: y
|
|
156
|
+
}),
|
|
157
|
+
"aria-roledescription": translate("colorPicker.areaThumb.roleDescription"),
|
|
158
|
+
"aria-valuetext": translate("colorPicker.areaThumb.valueText", {
|
|
159
|
+
xChannel: x,
|
|
160
|
+
xValue: String(area.getChannelValue(xChannel)),
|
|
161
|
+
yChannel: y,
|
|
162
|
+
yValue: String(area.getChannelValue(yChannel))
|
|
163
|
+
}),
|
|
164
|
+
"aria-invalid": invalidOf(behaviorProps)
|
|
165
|
+
};
|
|
166
|
+
},
|
|
167
|
+
channelSliderThumb: (behaviorProps, _api, getterArgs, translate) => ({
|
|
168
|
+
"aria-label": channelLabel(getterArgs["channel"], translate),
|
|
169
|
+
"aria-valuetext": channelValueText(String(getterArgs["channel"]), Number(behaviorProps["aria-valuenow"]), translate),
|
|
170
|
+
"aria-invalid": invalidOf(behaviorProps)
|
|
171
|
+
}),
|
|
172
|
+
channelInput: (behaviorProps, _api, getterArgs, translate) => ({
|
|
173
|
+
"aria-label": channelLabel(getterArgs["channel"], translate),
|
|
174
|
+
"aria-invalid": invalidOf(behaviorProps)
|
|
175
|
+
}),
|
|
176
|
+
eyeDropperTrigger: (_behaviorProps, _api, _args, translate) => ({ "aria-label": translate("colorPicker.eyeDropperTrigger.label") }),
|
|
177
|
+
swatchTrigger: (behaviorProps, _api, _args, translate) => ({ "aria-label": translate("colorPicker.swatchTrigger.label", { value: String(behaviorProps["data-value"]) }) }),
|
|
178
|
+
formatTrigger: (_behaviorProps, api, _args, translate) => {
|
|
179
|
+
const index = MACHINE_FORMATS.indexOf(api.format);
|
|
180
|
+
return { "aria-label": translate("colorPicker.formatTrigger.label", { format: MACHINE_FORMATS[(index + 1) % MACHINE_FORMATS.length] ?? MACHINE_FORMATS[0] }) };
|
|
181
|
+
},
|
|
182
|
+
formatSelect: (_behaviorProps, _api, _args, translate) => ({ "aria-label": translate("colorPicker.formatSelect.label") }),
|
|
183
|
+
positioner: (_behaviorProps, api) => api.inline ? { style: void 0 } : {}
|
|
184
|
+
},
|
|
185
|
+
field: {
|
|
186
|
+
ids: (field) => ({
|
|
187
|
+
label: field.label,
|
|
188
|
+
trigger: field.control
|
|
189
|
+
}),
|
|
190
|
+
describe: [
|
|
191
|
+
"trigger",
|
|
192
|
+
"channelInput",
|
|
193
|
+
"areaThumb",
|
|
194
|
+
"channelSliderThumb"
|
|
195
|
+
],
|
|
196
|
+
labelable: false
|
|
197
|
+
},
|
|
198
|
+
machineTranslations: null,
|
|
199
|
+
variantProps: [
|
|
200
|
+
"value",
|
|
201
|
+
"defaultValue",
|
|
202
|
+
"onValueChange",
|
|
203
|
+
"onValueChangeEnd",
|
|
204
|
+
"size"
|
|
205
|
+
],
|
|
206
|
+
useMachineProps: useColorPickerMachineProps,
|
|
207
|
+
slots: (props) => {
|
|
208
|
+
const size = resolveSize(props.size, "ColorPicker");
|
|
209
|
+
const raw = colorPickerRecipe.raw({ size });
|
|
210
|
+
return {
|
|
211
|
+
...colorPickerRecipe({ size }),
|
|
212
|
+
eyeDropperTrigger: buttonPartClass({
|
|
213
|
+
variant: "ghost",
|
|
214
|
+
tone: "neutral",
|
|
215
|
+
size
|
|
216
|
+
}, raw.eyeDropperTrigger),
|
|
217
|
+
formatTrigger: buttonPartClass({
|
|
218
|
+
variant: "ghost",
|
|
219
|
+
tone: "neutral",
|
|
220
|
+
size: sizeBelow(size)
|
|
221
|
+
}, raw.formatTrigger),
|
|
222
|
+
channelInput: inputPartClass(size, raw.channelInput)
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
Object.assign(ColorPicker, { FormatSelect: withSelectIndicator(ColorPicker.FormatSelect) });
|
|
227
|
+
//#endregion
|
|
228
|
+
export { COLOR_PICKER_FORMATS, ColorPicker };
|
|
229
|
+
|
|
230
|
+
//# sourceMappingURL=color-picker.mjs.map
|