@tessera-ui/core 0.4.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 +225 -0
- package/dist/cjs/aria-CeYIvz3U.js +94 -0
- package/dist/cjs/aria-CeYIvz3U.js.map +1 -0
- package/dist/cjs/index-Bel_x2OU.js +2401 -0
- package/dist/cjs/index-Bel_x2OU.js.map +1 -0
- package/dist/cjs/index.cjs.js +155 -0
- package/dist/cjs/index.cjs.js.map +1 -0
- package/dist/cjs/loader.cjs.js +15 -0
- package/dist/cjs/loader.cjs.js.map +1 -0
- package/dist/cjs/lucide-B1gCqJ3G.js +28324 -0
- package/dist/cjs/lucide-B1gCqJ3G.js.map +1 -0
- package/dist/cjs/tessera-ui.cjs.js +27 -0
- package/dist/cjs/tessera-ui.cjs.js.map +1 -0
- package/dist/cjs/ts-accordion-item.cjs.entry.js +65 -0
- package/dist/cjs/ts-accordion-item.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-accordion.cjs.entry.js +36 -0
- package/dist/cjs/ts-accordion.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-alert.cjs.entry.js +60 -0
- package/dist/cjs/ts-alert.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-avatar.cjs.entry.js +54 -0
- package/dist/cjs/ts-avatar.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-badge.cjs.entry.js +38 -0
- package/dist/cjs/ts-badge.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-banner.cjs.entry.js +67 -0
- package/dist/cjs/ts-banner.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-breadcrumb-item.cjs.entry.js +28 -0
- package/dist/cjs/ts-breadcrumb-item.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-breadcrumb.cjs.entry.js +35 -0
- package/dist/cjs/ts-breadcrumb.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-button.cjs.entry.js +88 -0
- package/dist/cjs/ts-button.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-card.cjs.entry.js +35 -0
- package/dist/cjs/ts-card.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-checkbox.cjs.entry.js +68 -0
- package/dist/cjs/ts-checkbox.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-chip.cjs.entry.js +76 -0
- package/dist/cjs/ts-chip.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-container.cjs.entry.js +28 -0
- package/dist/cjs/ts-container.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-date-picker.cjs.entry.js +229 -0
- package/dist/cjs/ts-date-picker.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-dialog.cjs.entry.js +109 -0
- package/dist/cjs/ts-dialog.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-divider.cjs.entry.js +33 -0
- package/dist/cjs/ts-divider.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-drawer.cjs.entry.js +113 -0
- package/dist/cjs/ts-drawer.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-empty-state.cjs.entry.js +32 -0
- package/dist/cjs/ts-empty-state.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-file-upload.cjs.entry.js +122 -0
- package/dist/cjs/ts-file-upload.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-grid.cjs.entry.js +37 -0
- package/dist/cjs/ts-grid.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-icon-CfbhgAgr.js +161 -0
- package/dist/cjs/ts-icon-CfbhgAgr.js.map +1 -0
- package/dist/cjs/ts-icon.cjs.entry.js +11 -0
- package/dist/cjs/ts-icon.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-input.cjs.entry.js +130 -0
- package/dist/cjs/ts-input.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-menu-item.cjs.entry.js +65 -0
- package/dist/cjs/ts-menu-item.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-menu.cjs.entry.js +155 -0
- package/dist/cjs/ts-menu.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-modal.cjs.entry.js +122 -0
- package/dist/cjs/ts-modal.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-nav-item.cjs.entry.js +48 -0
- package/dist/cjs/ts-nav-item.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-nav.cjs.entry.js +29 -0
- package/dist/cjs/ts-nav.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-pagination.cjs.entry.js +88 -0
- package/dist/cjs/ts-pagination.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-popover.cjs.entry.js +133 -0
- package/dist/cjs/ts-popover.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-progress.cjs.entry.js +46 -0
- package/dist/cjs/ts-progress.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-radio.cjs.entry.js +60 -0
- package/dist/cjs/ts-radio.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-row.cjs.entry.js +53 -0
- package/dist/cjs/ts-row.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-select.cjs.entry.js +221 -0
- package/dist/cjs/ts-select.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-skeleton.cjs.entry.js +55 -0
- package/dist/cjs/ts-skeleton.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-slider.cjs.entry.js +132 -0
- package/dist/cjs/ts-slider.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-spacer.cjs.entry.js +28 -0
- package/dist/cjs/ts-spacer.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-spinner.cjs.entry.js +30 -0
- package/dist/cjs/ts-spinner.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-stack.cjs.entry.js +34 -0
- package/dist/cjs/ts-stack.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-step.cjs.entry.js +74 -0
- package/dist/cjs/ts-step.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-stepper.cjs.entry.js +67 -0
- package/dist/cjs/ts-stepper.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-switch-group.cjs.entry.js +109 -0
- package/dist/cjs/ts-switch-group.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-switch-option.cjs.entry.js +42 -0
- package/dist/cjs/ts-switch-option.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-tab-panel.cjs.entry.js +30 -0
- package/dist/cjs/ts-tab-panel.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-table.cjs.entry.js +39 -0
- package/dist/cjs/ts-table.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-tabs.cjs.entry.js +124 -0
- package/dist/cjs/ts-tabs.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-textarea.cjs.entry.js +117 -0
- package/dist/cjs/ts-textarea.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-toast.cjs.entry.js +107 -0
- package/dist/cjs/ts-toast.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-toggle.cjs.entry.js +58 -0
- package/dist/cjs/ts-toggle.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-toolbar.cjs.entry.js +29 -0
- package/dist/cjs/ts-toolbar.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-tooltip.cjs.entry.js +82 -0
- package/dist/cjs/ts-tooltip.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-tree-item.cjs.entry.js +94 -0
- package/dist/cjs/ts-tree-item.cjs.entry.js.map +1 -0
- package/dist/cjs/ts-tree.cjs.entry.js +81 -0
- package/dist/cjs/ts-tree.cjs.entry.js.map +1 -0
- package/dist/collection/collection-manifest.json +64 -0
- package/dist/collection/components/accordion/accordion-item.css +75 -0
- package/dist/collection/components/accordion/accordion-item.js +157 -0
- package/dist/collection/components/accordion/accordion-item.js.map +1 -0
- package/dist/collection/components/accordion/accordion-item.stories.js +4 -0
- package/dist/collection/components/accordion/accordion-item.stories.js.map +1 -0
- package/dist/collection/components/accordion/accordion.css +31 -0
- package/dist/collection/components/accordion/accordion.js +72 -0
- package/dist/collection/components/accordion/accordion.js.map +1 -0
- package/dist/collection/components/accordion/accordion.stories.js +90 -0
- package/dist/collection/components/accordion/accordion.stories.js.map +1 -0
- package/dist/collection/components/alert/alert.css +118 -0
- package/dist/collection/components/alert/alert.js +181 -0
- package/dist/collection/components/alert/alert.js.map +1 -0
- package/dist/collection/components/alert/alert.stories.js +128 -0
- package/dist/collection/components/alert/alert.stories.js.map +1 -0
- package/dist/collection/components/avatar/avatar.css +63 -0
- package/dist/collection/components/avatar/avatar.js +185 -0
- package/dist/collection/components/avatar/avatar.js.map +1 -0
- package/dist/collection/components/avatar/avatar.stories.js +138 -0
- package/dist/collection/components/avatar/avatar.stories.js.map +1 -0
- package/dist/collection/components/badge/badge.css +67 -0
- package/dist/collection/components/badge/badge.js +160 -0
- package/dist/collection/components/badge/badge.js.map +1 -0
- package/dist/collection/components/badge/badge.stories.js +193 -0
- package/dist/collection/components/badge/badge.stories.js.map +1 -0
- package/dist/collection/components/banner/banner.css +129 -0
- package/dist/collection/components/banner/banner.js +226 -0
- package/dist/collection/components/banner/banner.js.map +1 -0
- package/dist/collection/components/banner/banner.stories.js +92 -0
- package/dist/collection/components/banner/banner.stories.js.map +1 -0
- package/dist/collection/components/breadcrumb/breadcrumb-item.css +44 -0
- package/dist/collection/components/breadcrumb/breadcrumb-item.js +95 -0
- package/dist/collection/components/breadcrumb/breadcrumb-item.js.map +1 -0
- package/dist/collection/components/breadcrumb/breadcrumb-item.stories.js +4 -0
- package/dist/collection/components/breadcrumb/breadcrumb-item.stories.js.map +1 -0
- package/dist/collection/components/breadcrumb/breadcrumb.css +26 -0
- package/dist/collection/components/breadcrumb/breadcrumb.js +65 -0
- package/dist/collection/components/breadcrumb/breadcrumb.js.map +1 -0
- package/dist/collection/components/breadcrumb/breadcrumb.stories.js +88 -0
- package/dist/collection/components/breadcrumb/breadcrumb.stories.js.map +1 -0
- package/dist/collection/components/button/button.css +260 -0
- package/dist/collection/components/button/button.js +347 -0
- package/dist/collection/components/button/button.js.map +1 -0
- package/dist/collection/components/button/button.stories.js +219 -0
- package/dist/collection/components/button/button.stories.js.map +1 -0
- package/dist/collection/components/card/card.css +108 -0
- package/dist/collection/components/card/card.js +130 -0
- package/dist/collection/components/card/card.js.map +1 -0
- package/dist/collection/components/card/card.stories.js +221 -0
- package/dist/collection/components/card/card.stories.js.map +1 -0
- package/dist/collection/components/checkbox/checkbox.css +115 -0
- package/dist/collection/components/checkbox/checkbox.js +282 -0
- package/dist/collection/components/checkbox/checkbox.js.map +1 -0
- package/dist/collection/components/checkbox/checkbox.stories.js +90 -0
- package/dist/collection/components/checkbox/checkbox.stories.js.map +1 -0
- package/dist/collection/components/chip/chip.css +210 -0
- package/dist/collection/components/chip/chip.js +253 -0
- package/dist/collection/components/chip/chip.js.map +1 -0
- package/dist/collection/components/chip/chip.stories.js +139 -0
- package/dist/collection/components/chip/chip.stories.js.map +1 -0
- package/dist/collection/components/container/container.css +47 -0
- package/dist/collection/components/container/container.js +76 -0
- package/dist/collection/components/container/container.js.map +1 -0
- package/dist/collection/components/container/container.stories.js +138 -0
- package/dist/collection/components/container/container.stories.js.map +1 -0
- package/dist/collection/components/date-picker/date-picker.css +233 -0
- package/dist/collection/components/date-picker/date-picker.js +462 -0
- package/dist/collection/components/date-picker/date-picker.js.map +1 -0
- package/dist/collection/components/date-picker/date-picker.stories.js +119 -0
- package/dist/collection/components/date-picker/date-picker.stories.js.map +1 -0
- package/dist/collection/components/dialog/dialog.css +128 -0
- package/dist/collection/components/dialog/dialog.js +264 -0
- package/dist/collection/components/dialog/dialog.js.map +1 -0
- package/dist/collection/components/dialog/dialog.stories.js +147 -0
- package/dist/collection/components/dialog/dialog.stories.js.map +1 -0
- package/dist/collection/components/divider/divider.css +94 -0
- package/dist/collection/components/divider/divider.js +99 -0
- package/dist/collection/components/divider/divider.js.map +1 -0
- package/dist/collection/components/divider/divider.stories.js +94 -0
- package/dist/collection/components/divider/divider.stories.js.map +1 -0
- package/dist/collection/components/drawer/drawer.css +202 -0
- package/dist/collection/components/drawer/drawer.js +288 -0
- package/dist/collection/components/drawer/drawer.js.map +1 -0
- package/dist/collection/components/drawer/drawer.stories.js +143 -0
- package/dist/collection/components/drawer/drawer.stories.js.map +1 -0
- package/dist/collection/components/empty-state/empty-state.css +112 -0
- package/dist/collection/components/empty-state/empty-state.js +131 -0
- package/dist/collection/components/empty-state/empty-state.js.map +1 -0
- package/dist/collection/components/empty-state/empty-state.stories.js +113 -0
- package/dist/collection/components/empty-state/empty-state.stories.js.map +1 -0
- package/dist/collection/components/file-upload/file-upload.css +84 -0
- package/dist/collection/components/file-upload/file-upload.js +277 -0
- package/dist/collection/components/file-upload/file-upload.js.map +1 -0
- package/dist/collection/components/file-upload/file-upload.stories.js +107 -0
- package/dist/collection/components/file-upload/file-upload.stories.js.map +1 -0
- package/dist/collection/components/grid/grid.css +11 -0
- package/dist/collection/components/grid/grid.js +125 -0
- package/dist/collection/components/grid/grid.js.map +1 -0
- package/dist/collection/components/grid/grid.stories.js +134 -0
- package/dist/collection/components/grid/grid.stories.js.map +1 -0
- package/dist/collection/components/icon/icon-registry.js +39 -0
- package/dist/collection/components/icon/icon-registry.js.map +1 -0
- package/dist/collection/components/icon/icon.css +54 -0
- package/dist/collection/components/icon/icon.js +239 -0
- package/dist/collection/components/icon/icon.js.map +1 -0
- package/dist/collection/components/icon/icon.stories.js +119 -0
- package/dist/collection/components/icon/icon.stories.js.map +1 -0
- package/dist/collection/components/input/input.css +155 -0
- package/dist/collection/components/input/input.js +583 -0
- package/dist/collection/components/input/input.js.map +1 -0
- package/dist/collection/components/input/input.stories.js +151 -0
- package/dist/collection/components/input/input.stories.js.map +1 -0
- package/dist/collection/components/menu/menu-item.css +77 -0
- package/dist/collection/components/menu/menu-item.js +176 -0
- package/dist/collection/components/menu/menu-item.js.map +1 -0
- package/dist/collection/components/menu/menu-item.stories.js +4 -0
- package/dist/collection/components/menu/menu-item.stories.js.map +1 -0
- package/dist/collection/components/menu/menu.css +81 -0
- package/dist/collection/components/menu/menu.js +295 -0
- package/dist/collection/components/menu/menu.js.map +1 -0
- package/dist/collection/components/menu/menu.stories.js +126 -0
- package/dist/collection/components/menu/menu.stories.js.map +1 -0
- package/dist/collection/components/modal/modal.css +131 -0
- package/dist/collection/components/modal/modal.js +339 -0
- package/dist/collection/components/modal/modal.js.map +1 -0
- package/dist/collection/components/modal/modal.stories.js +233 -0
- package/dist/collection/components/modal/modal.stories.js.map +1 -0
- package/dist/collection/components/nav/nav-item.css +73 -0
- package/dist/collection/components/nav/nav-item.js +154 -0
- package/dist/collection/components/nav/nav-item.js.map +1 -0
- package/dist/collection/components/nav/nav-item.stories.js +4 -0
- package/dist/collection/components/nav/nav-item.stories.js.map +1 -0
- package/dist/collection/components/nav/nav.css +48 -0
- package/dist/collection/components/nav/nav.js +78 -0
- package/dist/collection/components/nav/nav.js.map +1 -0
- package/dist/collection/components/nav/nav.stories.js +106 -0
- package/dist/collection/components/nav/nav.stories.js.map +1 -0
- package/dist/collection/components/pagination/pagination.css +102 -0
- package/dist/collection/components/pagination/pagination.js +220 -0
- package/dist/collection/components/pagination/pagination.js.map +1 -0
- package/dist/collection/components/pagination/pagination.stories.js +92 -0
- package/dist/collection/components/pagination/pagination.stories.js.map +1 -0
- package/dist/collection/components/popover/popover.css +150 -0
- package/dist/collection/components/popover/popover.js +305 -0
- package/dist/collection/components/popover/popover.js.map +1 -0
- package/dist/collection/components/popover/popover.stories.js +112 -0
- package/dist/collection/components/popover/popover.stories.js.map +1 -0
- package/dist/collection/components/progress/progress.css +89 -0
- package/dist/collection/components/progress/progress.js +205 -0
- package/dist/collection/components/progress/progress.js.map +1 -0
- package/dist/collection/components/progress/progress.stories.js +132 -0
- package/dist/collection/components/progress/progress.stories.js.map +1 -0
- package/dist/collection/components/radio/radio.css +110 -0
- package/dist/collection/components/radio/radio.js +234 -0
- package/dist/collection/components/radio/radio.js.map +1 -0
- package/dist/collection/components/radio/radio.stories.js +77 -0
- package/dist/collection/components/radio/radio.stories.js.map +1 -0
- package/dist/collection/components/row/row.css +42 -0
- package/dist/collection/components/row/row.js +179 -0
- package/dist/collection/components/row/row.js.map +1 -0
- package/dist/collection/components/row/row.stories.js +172 -0
- package/dist/collection/components/row/row.stories.js.map +1 -0
- package/dist/collection/components/select/select.css +200 -0
- package/dist/collection/components/select/select.js +527 -0
- package/dist/collection/components/select/select.js.map +1 -0
- package/dist/collection/components/select/select.stories.js +138 -0
- package/dist/collection/components/select/select.stories.js.map +1 -0
- package/dist/collection/components/skeleton/skeleton.css +89 -0
- package/dist/collection/components/skeleton/skeleton.js +161 -0
- package/dist/collection/components/skeleton/skeleton.js.map +1 -0
- package/dist/collection/components/skeleton/skeleton.stories.js +140 -0
- package/dist/collection/components/skeleton/skeleton.stories.js.map +1 -0
- package/dist/collection/components/slider/slider.css +123 -0
- package/dist/collection/components/slider/slider.js +344 -0
- package/dist/collection/components/slider/slider.js.map +1 -0
- package/dist/collection/components/slider/slider.stories.js +100 -0
- package/dist/collection/components/slider/slider.stories.js.map +1 -0
- package/dist/collection/components/spacer/spacer.css +13 -0
- package/dist/collection/components/spacer/spacer.js +74 -0
- package/dist/collection/components/spacer/spacer.js.map +1 -0
- package/dist/collection/components/spacer/spacer.stories.js +90 -0
- package/dist/collection/components/spacer/spacer.stories.js.map +1 -0
- package/dist/collection/components/spinner/spinner.css +49 -0
- package/dist/collection/components/spinner/spinner.js +98 -0
- package/dist/collection/components/spinner/spinner.js.map +1 -0
- package/dist/collection/components/spinner/spinner.stories.js +88 -0
- package/dist/collection/components/spinner/spinner.stories.js.map +1 -0
- package/dist/collection/components/stack/stack.css +10 -0
- package/dist/collection/components/stack/stack.js +82 -0
- package/dist/collection/components/stack/stack.js.map +1 -0
- package/dist/collection/components/stack/stack.stories.js +121 -0
- package/dist/collection/components/stack/stack.stories.js.map +1 -0
- package/dist/collection/components/stepper/step.css +172 -0
- package/dist/collection/components/stepper/step.js +205 -0
- package/dist/collection/components/stepper/step.js.map +1 -0
- package/dist/collection/components/stepper/step.stories.js +4 -0
- package/dist/collection/components/stepper/step.stories.js.map +1 -0
- package/dist/collection/components/stepper/stepper.css +32 -0
- package/dist/collection/components/stepper/stepper.js +137 -0
- package/dist/collection/components/stepper/stepper.js.map +1 -0
- package/dist/collection/components/stepper/stepper.stories.js +130 -0
- package/dist/collection/components/stepper/stepper.stories.js.map +1 -0
- package/dist/collection/components/switch-group/switch-group.css +51 -0
- package/dist/collection/components/switch-group/switch-group.js +237 -0
- package/dist/collection/components/switch-group/switch-group.js.map +1 -0
- package/dist/collection/components/switch-group/switch-group.stories.js +132 -0
- package/dist/collection/components/switch-group/switch-group.stories.js.map +1 -0
- package/dist/collection/components/switch-group/switch-option.css +64 -0
- package/dist/collection/components/switch-group/switch-option.js +150 -0
- package/dist/collection/components/switch-group/switch-option.js.map +1 -0
- package/dist/collection/components/switch-group/switch-option.stories.js +4 -0
- package/dist/collection/components/switch-group/switch-option.stories.js.map +1 -0
- package/dist/collection/components/table/table.css +112 -0
- package/dist/collection/components/table/table.js +151 -0
- package/dist/collection/components/table/table.js.map +1 -0
- package/dist/collection/components/table/table.stories.js +147 -0
- package/dist/collection/components/table/table.stories.js.map +1 -0
- package/dist/collection/components/tabs/tab-panel.css +11 -0
- package/dist/collection/components/tabs/tab-panel.js +116 -0
- package/dist/collection/components/tabs/tab-panel.js.map +1 -0
- package/dist/collection/components/tabs/tab-panel.stories.js +4 -0
- package/dist/collection/components/tabs/tab-panel.stories.js.map +1 -0
- package/dist/collection/components/tabs/tabs.css +134 -0
- package/dist/collection/components/tabs/tabs.js +213 -0
- package/dist/collection/components/tabs/tabs.js.map +1 -0
- package/dist/collection/components/tabs/tabs.stories.js +187 -0
- package/dist/collection/components/tabs/tabs.stories.js.map +1 -0
- package/dist/collection/components/textarea/textarea.css +146 -0
- package/dist/collection/components/textarea/textarea.js +526 -0
- package/dist/collection/components/textarea/textarea.js.map +1 -0
- package/dist/collection/components/textarea/textarea.stories.js +130 -0
- package/dist/collection/components/textarea/textarea.stories.js.map +1 -0
- package/dist/collection/components/toast/toast.css +166 -0
- package/dist/collection/components/toast/toast.js +291 -0
- package/dist/collection/components/toast/toast.js.map +1 -0
- package/dist/collection/components/toast/toast.stories.js +91 -0
- package/dist/collection/components/toast/toast.stories.js.map +1 -0
- package/dist/collection/components/toggle/toggle.css +99 -0
- package/dist/collection/components/toggle/toggle.js +220 -0
- package/dist/collection/components/toggle/toggle.js.map +1 -0
- package/dist/collection/components/toggle/toggle.stories.js +145 -0
- package/dist/collection/components/toggle/toggle.stories.js.map +1 -0
- package/dist/collection/components/toolbar/toolbar.css +89 -0
- package/dist/collection/components/toolbar/toolbar.js +89 -0
- package/dist/collection/components/toolbar/toolbar.js.map +1 -0
- package/dist/collection/components/toolbar/toolbar.stories.js +131 -0
- package/dist/collection/components/toolbar/toolbar.stories.js.map +1 -0
- package/dist/collection/components/tooltip/tooltip.css +124 -0
- package/dist/collection/components/tooltip/tooltip.js +242 -0
- package/dist/collection/components/tooltip/tooltip.js.map +1 -0
- package/dist/collection/components/tooltip/tooltip.stories.js +186 -0
- package/dist/collection/components/tooltip/tooltip.stories.js.map +1 -0
- package/dist/collection/components/tree/tree-item.css +97 -0
- package/dist/collection/components/tree/tree-item.js +242 -0
- package/dist/collection/components/tree/tree-item.js.map +1 -0
- package/dist/collection/components/tree/tree-item.stories.js +4 -0
- package/dist/collection/components/tree/tree-item.stories.js.map +1 -0
- package/dist/collection/components/tree/tree.css +23 -0
- package/dist/collection/components/tree/tree.js +119 -0
- package/dist/collection/components/tree/tree.js.map +1 -0
- package/dist/collection/components/tree/tree.stories.js +121 -0
- package/dist/collection/components/tree/tree.stories.js.map +1 -0
- package/dist/collection/index.js +53 -0
- package/dist/collection/index.js.map +1 -0
- package/dist/collection/theme/tokens.js +109 -0
- package/dist/collection/theme/tokens.js.map +1 -0
- package/dist/collection/types/index.js +2 -0
- package/dist/collection/types/index.js.map +1 -0
- package/dist/collection/utils/aria.js +89 -0
- package/dist/collection/utils/aria.js.map +1 -0
- package/dist/collection/utils/dom.js +42 -0
- package/dist/collection/utils/dom.js.map +1 -0
- package/dist/collection/utils/events.js +20 -0
- package/dist/collection/utils/events.js.map +1 -0
- package/dist/components/index.d.ts +35 -0
- package/dist/components/index.js +2 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/p-6RDSLDuS.js +2 -0
- package/dist/components/p-6RDSLDuS.js.map +1 -0
- package/dist/components/p-B0ZXNFSa.js +2 -0
- package/dist/components/p-B0ZXNFSa.js.map +1 -0
- package/dist/components/p-BCgm2utU.js +2 -0
- package/dist/components/p-BCgm2utU.js.map +1 -0
- package/dist/components/p-BFN5hUo4.js +2 -0
- package/dist/components/p-BFN5hUo4.js.map +1 -0
- package/dist/components/p-BOxYojS-.js +9572 -0
- package/dist/components/p-BOxYojS-.js.map +1 -0
- package/dist/components/p-BP-fZfRb.js +2 -0
- package/dist/components/p-BP-fZfRb.js.map +1 -0
- package/dist/components/p-B_NL55YI.js +2 -0
- package/dist/components/p-B_NL55YI.js.map +1 -0
- package/dist/components/p-BcoU0ISN.js +2 -0
- package/dist/components/p-BcoU0ISN.js.map +1 -0
- package/dist/components/p-BdzH6wlc.js +2 -0
- package/dist/components/p-BdzH6wlc.js.map +1 -0
- package/dist/components/p-BeErYjKz.js +2 -0
- package/dist/components/p-BeErYjKz.js.map +1 -0
- package/dist/components/p-BjiDgszq.js +2 -0
- package/dist/components/p-BjiDgszq.js.map +1 -0
- package/dist/components/p-BjyTgfXe.js +2 -0
- package/dist/components/p-BjyTgfXe.js.map +1 -0
- package/dist/components/p-BlZHjan9.js +2 -0
- package/dist/components/p-BlZHjan9.js.map +1 -0
- package/dist/components/p-C7JaUlNB.js +2 -0
- package/dist/components/p-C7JaUlNB.js.map +1 -0
- package/dist/components/p-C8wd1644.js +2 -0
- package/dist/components/p-C8wd1644.js.map +1 -0
- package/dist/components/p-CEQXPxzU.js +2 -0
- package/dist/components/p-CEQXPxzU.js.map +1 -0
- package/dist/components/p-CGh7W07E.js +2 -0
- package/dist/components/p-CGh7W07E.js.map +1 -0
- package/dist/components/p-CHtE5caV.js +2 -0
- package/dist/components/p-CHtE5caV.js.map +1 -0
- package/dist/components/p-CSNeA_zh.js +2 -0
- package/dist/components/p-CSNeA_zh.js.map +1 -0
- package/dist/components/p-CbHlJvjF.js +2 -0
- package/dist/components/p-CbHlJvjF.js.map +1 -0
- package/dist/components/p-CkQOAizb.js +2 -0
- package/dist/components/p-CkQOAizb.js.map +1 -0
- package/dist/components/p-Cy_Ad-Jy.js +2 -0
- package/dist/components/p-Cy_Ad-Jy.js.map +1 -0
- package/dist/components/p-DD986daz.js +2 -0
- package/dist/components/p-DD986daz.js.map +1 -0
- package/dist/components/p-DFnNsZtI.js +2 -0
- package/dist/components/p-DFnNsZtI.js.map +1 -0
- package/dist/components/p-DMPxu5Po.js +2 -0
- package/dist/components/p-DMPxu5Po.js.map +1 -0
- package/dist/components/p-DMuI5d5r.js +2 -0
- package/dist/components/p-DMuI5d5r.js.map +1 -0
- package/dist/components/p-DPQ1o4MP.js +2 -0
- package/dist/components/p-DPQ1o4MP.js.map +1 -0
- package/dist/components/p-DTAVTqnc.js +2 -0
- package/dist/components/p-DTAVTqnc.js.map +1 -0
- package/dist/components/p-DhQ7X_TL.js +2 -0
- package/dist/components/p-DhQ7X_TL.js.map +1 -0
- package/dist/components/p-DkpyRqHf.js +2 -0
- package/dist/components/p-DkpyRqHf.js.map +1 -0
- package/dist/components/p-DlB-KfKY.js +2 -0
- package/dist/components/p-DlB-KfKY.js.map +1 -0
- package/dist/components/p-DooMF1E0.js +2 -0
- package/dist/components/p-DooMF1E0.js.map +1 -0
- package/dist/components/p-DwJ7Jt3k.js +2 -0
- package/dist/components/p-DwJ7Jt3k.js.map +1 -0
- package/dist/components/p-DwUH8YQW.js +2 -0
- package/dist/components/p-DwUH8YQW.js.map +1 -0
- package/dist/components/p-Fot2uNwg.js +2 -0
- package/dist/components/p-Fot2uNwg.js.map +1 -0
- package/dist/components/p-O8aQgWRZ.js +2 -0
- package/dist/components/p-O8aQgWRZ.js.map +1 -0
- package/dist/components/p-SopsdO_f.js +2 -0
- package/dist/components/p-SopsdO_f.js.map +1 -0
- package/dist/components/p-TFHAUMKT.js +2 -0
- package/dist/components/p-TFHAUMKT.js.map +1 -0
- package/dist/components/p-faVXXwqR.js +2 -0
- package/dist/components/p-faVXXwqR.js.map +1 -0
- package/dist/components/p-lpqZSiIf.js +2 -0
- package/dist/components/p-lpqZSiIf.js.map +1 -0
- package/dist/components/p-mfB_pP4L.js +2 -0
- package/dist/components/p-mfB_pP4L.js.map +1 -0
- package/dist/components/p-v-L32wKy.js +2 -0
- package/dist/components/p-v-L32wKy.js.map +1 -0
- package/dist/components/p-zveaarwa.js +2 -0
- package/dist/components/p-zveaarwa.js.map +1 -0
- package/dist/components/ts-accordion-item.d.ts +11 -0
- package/dist/components/ts-accordion-item.js +2 -0
- package/dist/components/ts-accordion-item.js.map +1 -0
- package/dist/components/ts-accordion.d.ts +11 -0
- package/dist/components/ts-accordion.js +2 -0
- package/dist/components/ts-accordion.js.map +1 -0
- package/dist/components/ts-alert.d.ts +11 -0
- package/dist/components/ts-alert.js +2 -0
- package/dist/components/ts-alert.js.map +1 -0
- package/dist/components/ts-avatar.d.ts +11 -0
- package/dist/components/ts-avatar.js +2 -0
- package/dist/components/ts-avatar.js.map +1 -0
- package/dist/components/ts-badge.d.ts +11 -0
- package/dist/components/ts-badge.js +2 -0
- package/dist/components/ts-badge.js.map +1 -0
- package/dist/components/ts-banner.d.ts +11 -0
- package/dist/components/ts-banner.js +2 -0
- package/dist/components/ts-banner.js.map +1 -0
- package/dist/components/ts-breadcrumb-item.d.ts +11 -0
- package/dist/components/ts-breadcrumb-item.js +2 -0
- package/dist/components/ts-breadcrumb-item.js.map +1 -0
- package/dist/components/ts-breadcrumb.d.ts +11 -0
- package/dist/components/ts-breadcrumb.js +2 -0
- package/dist/components/ts-breadcrumb.js.map +1 -0
- package/dist/components/ts-button.d.ts +11 -0
- package/dist/components/ts-button.js +2 -0
- package/dist/components/ts-button.js.map +1 -0
- package/dist/components/ts-card.d.ts +11 -0
- package/dist/components/ts-card.js +2 -0
- package/dist/components/ts-card.js.map +1 -0
- package/dist/components/ts-checkbox.d.ts +11 -0
- package/dist/components/ts-checkbox.js +2 -0
- package/dist/components/ts-checkbox.js.map +1 -0
- package/dist/components/ts-chip.d.ts +11 -0
- package/dist/components/ts-chip.js +2 -0
- package/dist/components/ts-chip.js.map +1 -0
- package/dist/components/ts-container.d.ts +11 -0
- package/dist/components/ts-container.js +2 -0
- package/dist/components/ts-container.js.map +1 -0
- package/dist/components/ts-date-picker.d.ts +11 -0
- package/dist/components/ts-date-picker.js +2 -0
- package/dist/components/ts-date-picker.js.map +1 -0
- package/dist/components/ts-dialog.d.ts +11 -0
- package/dist/components/ts-dialog.js +2 -0
- package/dist/components/ts-dialog.js.map +1 -0
- package/dist/components/ts-divider.d.ts +11 -0
- package/dist/components/ts-divider.js +2 -0
- package/dist/components/ts-divider.js.map +1 -0
- package/dist/components/ts-drawer.d.ts +11 -0
- package/dist/components/ts-drawer.js +2 -0
- package/dist/components/ts-drawer.js.map +1 -0
- package/dist/components/ts-empty-state.d.ts +11 -0
- package/dist/components/ts-empty-state.js +2 -0
- package/dist/components/ts-empty-state.js.map +1 -0
- package/dist/components/ts-file-upload.d.ts +11 -0
- package/dist/components/ts-file-upload.js +2 -0
- package/dist/components/ts-file-upload.js.map +1 -0
- package/dist/components/ts-grid.d.ts +11 -0
- package/dist/components/ts-grid.js +2 -0
- package/dist/components/ts-grid.js.map +1 -0
- package/dist/components/ts-icon.d.ts +11 -0
- package/dist/components/ts-icon.js +2 -0
- package/dist/components/ts-icon.js.map +1 -0
- package/dist/components/ts-input.d.ts +11 -0
- package/dist/components/ts-input.js +2 -0
- package/dist/components/ts-input.js.map +1 -0
- package/dist/components/ts-menu-item.d.ts +11 -0
- package/dist/components/ts-menu-item.js +2 -0
- package/dist/components/ts-menu-item.js.map +1 -0
- package/dist/components/ts-menu.d.ts +11 -0
- package/dist/components/ts-menu.js +2 -0
- package/dist/components/ts-menu.js.map +1 -0
- package/dist/components/ts-modal.d.ts +11 -0
- package/dist/components/ts-modal.js +2 -0
- package/dist/components/ts-modal.js.map +1 -0
- package/dist/components/ts-nav-item.d.ts +11 -0
- package/dist/components/ts-nav-item.js +2 -0
- package/dist/components/ts-nav-item.js.map +1 -0
- package/dist/components/ts-nav.d.ts +11 -0
- package/dist/components/ts-nav.js +2 -0
- package/dist/components/ts-nav.js.map +1 -0
- package/dist/components/ts-pagination.d.ts +11 -0
- package/dist/components/ts-pagination.js +2 -0
- package/dist/components/ts-pagination.js.map +1 -0
- package/dist/components/ts-popover.d.ts +11 -0
- package/dist/components/ts-popover.js +2 -0
- package/dist/components/ts-popover.js.map +1 -0
- package/dist/components/ts-progress.d.ts +11 -0
- package/dist/components/ts-progress.js +2 -0
- package/dist/components/ts-progress.js.map +1 -0
- package/dist/components/ts-radio.d.ts +11 -0
- package/dist/components/ts-radio.js +2 -0
- package/dist/components/ts-radio.js.map +1 -0
- package/dist/components/ts-row.d.ts +11 -0
- package/dist/components/ts-row.js +2 -0
- package/dist/components/ts-row.js.map +1 -0
- package/dist/components/ts-select.d.ts +11 -0
- package/dist/components/ts-select.js +2 -0
- package/dist/components/ts-select.js.map +1 -0
- package/dist/components/ts-skeleton.d.ts +11 -0
- package/dist/components/ts-skeleton.js +2 -0
- package/dist/components/ts-skeleton.js.map +1 -0
- package/dist/components/ts-slider.d.ts +11 -0
- package/dist/components/ts-slider.js +2 -0
- package/dist/components/ts-slider.js.map +1 -0
- package/dist/components/ts-spacer.d.ts +11 -0
- package/dist/components/ts-spacer.js +2 -0
- package/dist/components/ts-spacer.js.map +1 -0
- package/dist/components/ts-spinner.d.ts +11 -0
- package/dist/components/ts-spinner.js +2 -0
- package/dist/components/ts-spinner.js.map +1 -0
- package/dist/components/ts-stack.d.ts +11 -0
- package/dist/components/ts-stack.js +2 -0
- package/dist/components/ts-stack.js.map +1 -0
- package/dist/components/ts-step.d.ts +11 -0
- package/dist/components/ts-step.js +2 -0
- package/dist/components/ts-step.js.map +1 -0
- package/dist/components/ts-stepper.d.ts +11 -0
- package/dist/components/ts-stepper.js +2 -0
- package/dist/components/ts-stepper.js.map +1 -0
- package/dist/components/ts-switch-group.d.ts +11 -0
- package/dist/components/ts-switch-group.js +2 -0
- package/dist/components/ts-switch-group.js.map +1 -0
- package/dist/components/ts-switch-option.d.ts +11 -0
- package/dist/components/ts-switch-option.js +2 -0
- package/dist/components/ts-switch-option.js.map +1 -0
- package/dist/components/ts-tab-panel.d.ts +11 -0
- package/dist/components/ts-tab-panel.js +2 -0
- package/dist/components/ts-tab-panel.js.map +1 -0
- package/dist/components/ts-table.d.ts +11 -0
- package/dist/components/ts-table.js +2 -0
- package/dist/components/ts-table.js.map +1 -0
- package/dist/components/ts-tabs.d.ts +11 -0
- package/dist/components/ts-tabs.js +2 -0
- package/dist/components/ts-tabs.js.map +1 -0
- package/dist/components/ts-textarea.d.ts +11 -0
- package/dist/components/ts-textarea.js +2 -0
- package/dist/components/ts-textarea.js.map +1 -0
- package/dist/components/ts-toast.d.ts +11 -0
- package/dist/components/ts-toast.js +2 -0
- package/dist/components/ts-toast.js.map +1 -0
- package/dist/components/ts-toggle.d.ts +11 -0
- package/dist/components/ts-toggle.js +2 -0
- package/dist/components/ts-toggle.js.map +1 -0
- package/dist/components/ts-toolbar.d.ts +11 -0
- package/dist/components/ts-toolbar.js +2 -0
- package/dist/components/ts-toolbar.js.map +1 -0
- package/dist/components/ts-tooltip.d.ts +11 -0
- package/dist/components/ts-tooltip.js +2 -0
- package/dist/components/ts-tooltip.js.map +1 -0
- package/dist/components/ts-tree-item.d.ts +11 -0
- package/dist/components/ts-tree-item.js +2 -0
- package/dist/components/ts-tree-item.js.map +1 -0
- package/dist/components/ts-tree.d.ts +11 -0
- package/dist/components/ts-tree.js +2 -0
- package/dist/components/ts-tree.js.map +1 -0
- package/dist/components.d.ts +480 -0
- package/dist/components.json +12678 -0
- package/dist/esm/aria-lpqZSiIf.js +89 -0
- package/dist/esm/aria-lpqZSiIf.js.map +1 -0
- package/dist/esm/index-V8-ENixA.js +2373 -0
- package/dist/esm/index-V8-ENixA.js.map +1 -0
- package/dist/esm/index.js +102 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/loader.js +13 -0
- package/dist/esm/loader.js.map +1 -0
- package/dist/esm/lucide-BOxYojS-.js +26523 -0
- package/dist/esm/lucide-BOxYojS-.js.map +1 -0
- package/dist/esm/tessera-ui.js +23 -0
- package/dist/esm/tessera-ui.js.map +1 -0
- package/dist/esm/ts-accordion-item.entry.js +63 -0
- package/dist/esm/ts-accordion-item.entry.js.map +1 -0
- package/dist/esm/ts-accordion.entry.js +34 -0
- package/dist/esm/ts-accordion.entry.js.map +1 -0
- package/dist/esm/ts-alert.entry.js +58 -0
- package/dist/esm/ts-alert.entry.js.map +1 -0
- package/dist/esm/ts-avatar.entry.js +52 -0
- package/dist/esm/ts-avatar.entry.js.map +1 -0
- package/dist/esm/ts-badge.entry.js +36 -0
- package/dist/esm/ts-badge.entry.js.map +1 -0
- package/dist/esm/ts-banner.entry.js +65 -0
- package/dist/esm/ts-banner.entry.js.map +1 -0
- package/dist/esm/ts-breadcrumb-item.entry.js +26 -0
- package/dist/esm/ts-breadcrumb-item.entry.js.map +1 -0
- package/dist/esm/ts-breadcrumb.entry.js +33 -0
- package/dist/esm/ts-breadcrumb.entry.js.map +1 -0
- package/dist/esm/ts-button.entry.js +86 -0
- package/dist/esm/ts-button.entry.js.map +1 -0
- package/dist/esm/ts-card.entry.js +33 -0
- package/dist/esm/ts-card.entry.js.map +1 -0
- package/dist/esm/ts-checkbox.entry.js +66 -0
- package/dist/esm/ts-checkbox.entry.js.map +1 -0
- package/dist/esm/ts-chip.entry.js +74 -0
- package/dist/esm/ts-chip.entry.js.map +1 -0
- package/dist/esm/ts-container.entry.js +26 -0
- package/dist/esm/ts-container.entry.js.map +1 -0
- package/dist/esm/ts-date-picker.entry.js +227 -0
- package/dist/esm/ts-date-picker.entry.js.map +1 -0
- package/dist/esm/ts-dialog.entry.js +107 -0
- package/dist/esm/ts-dialog.entry.js.map +1 -0
- package/dist/esm/ts-divider.entry.js +31 -0
- package/dist/esm/ts-divider.entry.js.map +1 -0
- package/dist/esm/ts-drawer.entry.js +111 -0
- package/dist/esm/ts-drawer.entry.js.map +1 -0
- package/dist/esm/ts-empty-state.entry.js +30 -0
- package/dist/esm/ts-empty-state.entry.js.map +1 -0
- package/dist/esm/ts-file-upload.entry.js +120 -0
- package/dist/esm/ts-file-upload.entry.js.map +1 -0
- package/dist/esm/ts-grid.entry.js +35 -0
- package/dist/esm/ts-grid.entry.js.map +1 -0
- package/dist/esm/ts-icon-Jz9ioZag.js +155 -0
- package/dist/esm/ts-icon-Jz9ioZag.js.map +1 -0
- package/dist/esm/ts-icon.entry.js +5 -0
- package/dist/esm/ts-icon.entry.js.map +1 -0
- package/dist/esm/ts-input.entry.js +128 -0
- package/dist/esm/ts-input.entry.js.map +1 -0
- package/dist/esm/ts-menu-item.entry.js +63 -0
- package/dist/esm/ts-menu-item.entry.js.map +1 -0
- package/dist/esm/ts-menu.entry.js +153 -0
- package/dist/esm/ts-menu.entry.js.map +1 -0
- package/dist/esm/ts-modal.entry.js +120 -0
- package/dist/esm/ts-modal.entry.js.map +1 -0
- package/dist/esm/ts-nav-item.entry.js +46 -0
- package/dist/esm/ts-nav-item.entry.js.map +1 -0
- package/dist/esm/ts-nav.entry.js +27 -0
- package/dist/esm/ts-nav.entry.js.map +1 -0
- package/dist/esm/ts-pagination.entry.js +86 -0
- package/dist/esm/ts-pagination.entry.js.map +1 -0
- package/dist/esm/ts-popover.entry.js +131 -0
- package/dist/esm/ts-popover.entry.js.map +1 -0
- package/dist/esm/ts-progress.entry.js +44 -0
- package/dist/esm/ts-progress.entry.js.map +1 -0
- package/dist/esm/ts-radio.entry.js +58 -0
- package/dist/esm/ts-radio.entry.js.map +1 -0
- package/dist/esm/ts-row.entry.js +51 -0
- package/dist/esm/ts-row.entry.js.map +1 -0
- package/dist/esm/ts-select.entry.js +219 -0
- package/dist/esm/ts-select.entry.js.map +1 -0
- package/dist/esm/ts-skeleton.entry.js +53 -0
- package/dist/esm/ts-skeleton.entry.js.map +1 -0
- package/dist/esm/ts-slider.entry.js +130 -0
- package/dist/esm/ts-slider.entry.js.map +1 -0
- package/dist/esm/ts-spacer.entry.js +26 -0
- package/dist/esm/ts-spacer.entry.js.map +1 -0
- package/dist/esm/ts-spinner.entry.js +28 -0
- package/dist/esm/ts-spinner.entry.js.map +1 -0
- package/dist/esm/ts-stack.entry.js +32 -0
- package/dist/esm/ts-stack.entry.js.map +1 -0
- package/dist/esm/ts-step.entry.js +72 -0
- package/dist/esm/ts-step.entry.js.map +1 -0
- package/dist/esm/ts-stepper.entry.js +65 -0
- package/dist/esm/ts-stepper.entry.js.map +1 -0
- package/dist/esm/ts-switch-group.entry.js +107 -0
- package/dist/esm/ts-switch-group.entry.js.map +1 -0
- package/dist/esm/ts-switch-option.entry.js +40 -0
- package/dist/esm/ts-switch-option.entry.js.map +1 -0
- package/dist/esm/ts-tab-panel.entry.js +28 -0
- package/dist/esm/ts-tab-panel.entry.js.map +1 -0
- package/dist/esm/ts-table.entry.js +37 -0
- package/dist/esm/ts-table.entry.js.map +1 -0
- package/dist/esm/ts-tabs.entry.js +122 -0
- package/dist/esm/ts-tabs.entry.js.map +1 -0
- package/dist/esm/ts-textarea.entry.js +115 -0
- package/dist/esm/ts-textarea.entry.js.map +1 -0
- package/dist/esm/ts-toast.entry.js +105 -0
- package/dist/esm/ts-toast.entry.js.map +1 -0
- package/dist/esm/ts-toggle.entry.js +56 -0
- package/dist/esm/ts-toggle.entry.js.map +1 -0
- package/dist/esm/ts-toolbar.entry.js +27 -0
- package/dist/esm/ts-toolbar.entry.js.map +1 -0
- package/dist/esm/ts-tooltip.entry.js +80 -0
- package/dist/esm/ts-tooltip.entry.js.map +1 -0
- package/dist/esm/ts-tree-item.entry.js +92 -0
- package/dist/esm/ts-tree-item.entry.js.map +1 -0
- package/dist/esm/ts-tree.entry.js +79 -0
- package/dist/esm/ts-tree.entry.js.map +1 -0
- package/dist/index.cjs.js +1 -0
- package/dist/index.js +1 -0
- package/dist/tessera-ui/index.esm.js +2 -0
- package/dist/tessera-ui/index.esm.js.map +1 -0
- package/dist/tessera-ui/p-0424cd55.entry.js +2 -0
- package/dist/tessera-ui/p-0424cd55.entry.js.map +1 -0
- package/dist/tessera-ui/p-04522bf9.entry.js +2 -0
- package/dist/tessera-ui/p-04522bf9.entry.js.map +1 -0
- package/dist/tessera-ui/p-04aa8b90.entry.js +2 -0
- package/dist/tessera-ui/p-04aa8b90.entry.js.map +1 -0
- package/dist/tessera-ui/p-080eaf89.entry.js +2 -0
- package/dist/tessera-ui/p-080eaf89.entry.js.map +1 -0
- package/dist/tessera-ui/p-0ec061e5.entry.js +2 -0
- package/dist/tessera-ui/p-0ec061e5.entry.js.map +1 -0
- package/dist/tessera-ui/p-122e43b7.entry.js +2 -0
- package/dist/tessera-ui/p-122e43b7.entry.js.map +1 -0
- package/dist/tessera-ui/p-16bb8ca8.entry.js +2 -0
- package/dist/tessera-ui/p-16bb8ca8.entry.js.map +1 -0
- package/dist/tessera-ui/p-16fc632b.entry.js +2 -0
- package/dist/tessera-ui/p-16fc632b.entry.js.map +1 -0
- package/dist/tessera-ui/p-1d73f6c9.entry.js +2 -0
- package/dist/tessera-ui/p-1d73f6c9.entry.js.map +1 -0
- package/dist/tessera-ui/p-24305379.entry.js +2 -0
- package/dist/tessera-ui/p-24305379.entry.js.map +1 -0
- package/dist/tessera-ui/p-25f77cc9.entry.js +2 -0
- package/dist/tessera-ui/p-25f77cc9.entry.js.map +1 -0
- package/dist/tessera-ui/p-35eb8496.entry.js +2 -0
- package/dist/tessera-ui/p-35eb8496.entry.js.map +1 -0
- package/dist/tessera-ui/p-3aec66b4.entry.js +2 -0
- package/dist/tessera-ui/p-3aec66b4.entry.js.map +1 -0
- package/dist/tessera-ui/p-4277460b.entry.js +2 -0
- package/dist/tessera-ui/p-4277460b.entry.js.map +1 -0
- package/dist/tessera-ui/p-441310f7.entry.js +2 -0
- package/dist/tessera-ui/p-441310f7.entry.js.map +1 -0
- package/dist/tessera-ui/p-491e1a75.entry.js +2 -0
- package/dist/tessera-ui/p-491e1a75.entry.js.map +1 -0
- package/dist/tessera-ui/p-50d092ce.entry.js +2 -0
- package/dist/tessera-ui/p-50d092ce.entry.js.map +1 -0
- package/dist/tessera-ui/p-50efadf3.entry.js +2 -0
- package/dist/tessera-ui/p-50efadf3.entry.js.map +1 -0
- package/dist/tessera-ui/p-53846d59.entry.js +2 -0
- package/dist/tessera-ui/p-53846d59.entry.js.map +1 -0
- package/dist/tessera-ui/p-56f2b070.entry.js +2 -0
- package/dist/tessera-ui/p-56f2b070.entry.js.map +1 -0
- package/dist/tessera-ui/p-6760f922.entry.js +2 -0
- package/dist/tessera-ui/p-6760f922.entry.js.map +1 -0
- package/dist/tessera-ui/p-69bb11ed.entry.js +2 -0
- package/dist/tessera-ui/p-69bb11ed.entry.js.map +1 -0
- package/dist/tessera-ui/p-6d35a60c.entry.js +2 -0
- package/dist/tessera-ui/p-6d35a60c.entry.js.map +1 -0
- package/dist/tessera-ui/p-6ec285ad.entry.js +2 -0
- package/dist/tessera-ui/p-6ec285ad.entry.js.map +1 -0
- package/dist/tessera-ui/p-708d4eb5.entry.js +2 -0
- package/dist/tessera-ui/p-708d4eb5.entry.js.map +1 -0
- package/dist/tessera-ui/p-79ff8ceb.entry.js +2 -0
- package/dist/tessera-ui/p-79ff8ceb.entry.js.map +1 -0
- package/dist/tessera-ui/p-7e531195.entry.js +2 -0
- package/dist/tessera-ui/p-7e531195.entry.js.map +1 -0
- package/dist/tessera-ui/p-7fa64f00.entry.js +2 -0
- package/dist/tessera-ui/p-7fa64f00.entry.js.map +1 -0
- package/dist/tessera-ui/p-829c4307.entry.js +2 -0
- package/dist/tessera-ui/p-829c4307.entry.js.map +1 -0
- package/dist/tessera-ui/p-91ccef3f.entry.js +2 -0
- package/dist/tessera-ui/p-91ccef3f.entry.js.map +1 -0
- package/dist/tessera-ui/p-9209e603.entry.js +2 -0
- package/dist/tessera-ui/p-9209e603.entry.js.map +1 -0
- package/dist/tessera-ui/p-97a9def7.entry.js +2 -0
- package/dist/tessera-ui/p-97a9def7.entry.js.map +1 -0
- package/dist/tessera-ui/p-9b41b538.entry.js +2 -0
- package/dist/tessera-ui/p-9b41b538.entry.js.map +1 -0
- package/dist/tessera-ui/p-9c0504fd.entry.js +2 -0
- package/dist/tessera-ui/p-9c0504fd.entry.js.map +1 -0
- package/dist/tessera-ui/p-BOxYojS-.js +9572 -0
- package/dist/tessera-ui/p-BOxYojS-.js.map +1 -0
- package/dist/tessera-ui/p-StBQmS8h.js +2 -0
- package/dist/tessera-ui/p-StBQmS8h.js.map +1 -0
- package/dist/tessera-ui/p-V8-ENixA.js +3 -0
- package/dist/tessera-ui/p-V8-ENixA.js.map +1 -0
- package/dist/tessera-ui/p-a120b5d6.entry.js +2 -0
- package/dist/tessera-ui/p-a120b5d6.entry.js.map +1 -0
- package/dist/tessera-ui/p-a55a5695.entry.js +2 -0
- package/dist/tessera-ui/p-a55a5695.entry.js.map +1 -0
- package/dist/tessera-ui/p-a83d903e.entry.js +2 -0
- package/dist/tessera-ui/p-a83d903e.entry.js.map +1 -0
- package/dist/tessera-ui/p-adc807dc.entry.js +2 -0
- package/dist/tessera-ui/p-adc807dc.entry.js.map +1 -0
- package/dist/tessera-ui/p-b09f202c.entry.js +2 -0
- package/dist/tessera-ui/p-b09f202c.entry.js.map +1 -0
- package/dist/tessera-ui/p-b1182592.entry.js +2 -0
- package/dist/tessera-ui/p-b1182592.entry.js.map +1 -0
- package/dist/tessera-ui/p-b3f60955.entry.js +2 -0
- package/dist/tessera-ui/p-b3f60955.entry.js.map +1 -0
- package/dist/tessera-ui/p-bb9ebbd8.entry.js +2 -0
- package/dist/tessera-ui/p-bb9ebbd8.entry.js.map +1 -0
- package/dist/tessera-ui/p-bce40715.entry.js +2 -0
- package/dist/tessera-ui/p-bce40715.entry.js.map +1 -0
- package/dist/tessera-ui/p-c35c7049.entry.js +2 -0
- package/dist/tessera-ui/p-c35c7049.entry.js.map +1 -0
- package/dist/tessera-ui/p-c59ecffa.entry.js +2 -0
- package/dist/tessera-ui/p-c59ecffa.entry.js.map +1 -0
- package/dist/tessera-ui/p-d318774a.entry.js +2 -0
- package/dist/tessera-ui/p-d318774a.entry.js.map +1 -0
- package/dist/tessera-ui/p-d5cbadd6.entry.js +2 -0
- package/dist/tessera-ui/p-d5cbadd6.entry.js.map +1 -0
- package/dist/tessera-ui/p-e1d2b141.entry.js +2 -0
- package/dist/tessera-ui/p-e1d2b141.entry.js.map +1 -0
- package/dist/tessera-ui/p-f0bf6408.entry.js +2 -0
- package/dist/tessera-ui/p-f0bf6408.entry.js.map +1 -0
- package/dist/tessera-ui/p-f639213a.entry.js +2 -0
- package/dist/tessera-ui/p-f639213a.entry.js.map +1 -0
- package/dist/tessera-ui/p-fd2376e0.entry.js +2 -0
- package/dist/tessera-ui/p-fd2376e0.entry.js.map +1 -0
- package/dist/tessera-ui/p-fef9a993.entry.js +2 -0
- package/dist/tessera-ui/p-fef9a993.entry.js.map +1 -0
- package/dist/tessera-ui/p-lpqZSiIf.js +2 -0
- package/dist/tessera-ui/p-lpqZSiIf.js.map +1 -0
- package/dist/tessera-ui/tessera-ui.css +1 -0
- package/dist/tessera-ui/tessera-ui.esm.js +2 -0
- package/dist/tessera-ui/tessera-ui.esm.js.map +1 -0
- package/dist/types/components/accordion/accordion-item.d.ts +28 -0
- package/dist/types/components/accordion/accordion-item.stories.d.ts +5 -0
- package/dist/types/components/accordion/accordion.d.ts +12 -0
- package/dist/types/components/accordion/accordion.stories.d.ts +21 -0
- package/dist/types/components/alert/alert.d.ts +30 -0
- package/dist/types/components/alert/alert.stories.d.ts +34 -0
- package/dist/types/components/avatar/avatar.d.ts +26 -0
- package/dist/types/components/avatar/avatar.stories.d.ts +51 -0
- package/dist/types/components/badge/badge.d.ts +19 -0
- package/dist/types/components/badge/badge.stories.d.ts +50 -0
- package/dist/types/components/banner/banner.d.ts +33 -0
- package/dist/types/components/banner/banner.stories.d.ts +40 -0
- package/dist/types/components/breadcrumb/breadcrumb-item.d.ts +15 -0
- package/dist/types/components/breadcrumb/breadcrumb-item.stories.d.ts +5 -0
- package/dist/types/components/breadcrumb/breadcrumb.d.ts +13 -0
- package/dist/types/components/breadcrumb/breadcrumb.stories.d.ts +20 -0
- package/dist/types/components/button/button.d.ts +45 -0
- package/dist/types/components/button/button.stories.d.ts +73 -0
- package/dist/types/components/card/card.d.ts +23 -0
- package/dist/types/components/card/card.stories.d.ts +46 -0
- package/dist/types/components/checkbox/checkbox.d.ts +36 -0
- package/dist/types/components/checkbox/checkbox.stories.d.ts +58 -0
- package/dist/types/components/chip/chip.d.ts +34 -0
- package/dist/types/components/chip/chip.stories.d.ts +54 -0
- package/dist/types/components/container/container.d.ts +12 -0
- package/dist/types/components/container/container.stories.d.ts +21 -0
- package/dist/types/components/date-picker/date-picker.d.ts +67 -0
- package/dist/types/components/date-picker/date-picker.stories.d.ts +62 -0
- package/dist/types/components/dialog/dialog.d.ts +44 -0
- package/dist/types/components/dialog/dialog.stories.d.ts +39 -0
- package/dist/types/components/divider/divider.d.ts +13 -0
- package/dist/types/components/divider/divider.stories.d.ts +33 -0
- package/dist/types/components/drawer/drawer.d.ts +46 -0
- package/dist/types/components/drawer/drawer.stories.d.ts +43 -0
- package/dist/types/components/empty-state/empty-state.d.ts +24 -0
- package/dist/types/components/empty-state/empty-state.stories.d.ts +37 -0
- package/dist/types/components/file-upload/file-upload.d.ts +38 -0
- package/dist/types/components/file-upload/file-upload.stories.d.ts +43 -0
- package/dist/types/components/grid/grid.d.ts +16 -0
- package/dist/types/components/grid/grid.stories.d.ts +30 -0
- package/dist/types/components/icon/icon-registry.d.ts +27 -0
- package/dist/types/components/icon/icon.d.ts +30 -0
- package/dist/types/components/icon/icon.stories.d.ts +42 -0
- package/dist/types/components/input/input.d.ts +72 -0
- package/dist/types/components/input/input.stories.d.ts +77 -0
- package/dist/types/components/menu/menu-item.d.ts +31 -0
- package/dist/types/components/menu/menu-item.stories.d.ts +5 -0
- package/dist/types/components/menu/menu.d.ts +38 -0
- package/dist/types/components/menu/menu.stories.d.ts +36 -0
- package/dist/types/components/modal/modal.d.ts +52 -0
- package/dist/types/components/modal/modal.stories.d.ts +47 -0
- package/dist/types/components/nav/nav-item.d.ts +23 -0
- package/dist/types/components/nav/nav-item.stories.d.ts +5 -0
- package/dist/types/components/nav/nav.d.ts +13 -0
- package/dist/types/components/nav/nav.stories.d.ts +27 -0
- package/dist/types/components/pagination/pagination.d.ts +28 -0
- package/dist/types/components/pagination/pagination.stories.d.ts +42 -0
- package/dist/types/components/popover/popover.d.ts +44 -0
- package/dist/types/components/popover/popover.stories.d.ts +38 -0
- package/dist/types/components/progress/progress.d.ts +26 -0
- package/dist/types/components/progress/progress.stories.d.ts +59 -0
- package/dist/types/components/radio/radio.d.ts +32 -0
- package/dist/types/components/radio/radio.stories.d.ts +48 -0
- package/dist/types/components/row/row.d.ts +18 -0
- package/dist/types/components/row/row.stories.d.ts +52 -0
- package/dist/types/components/select/select.d.ts +74 -0
- package/dist/types/components/select/select.stories.d.ts +73 -0
- package/dist/types/components/skeleton/skeleton.d.ts +17 -0
- package/dist/types/components/skeleton/skeleton.stories.d.ts +44 -0
- package/dist/types/components/slider/slider.d.ts +43 -0
- package/dist/types/components/slider/slider.stories.d.ts +62 -0
- package/dist/types/components/spacer/spacer.d.ts +10 -0
- package/dist/types/components/spacer/spacer.stories.d.ts +28 -0
- package/dist/types/components/spinner/spinner.d.ts +14 -0
- package/dist/types/components/spinner/spinner.stories.d.ts +33 -0
- package/dist/types/components/stack/stack.d.ts +12 -0
- package/dist/types/components/stack/stack.stories.d.ts +28 -0
- package/dist/types/components/stepper/step.d.ts +31 -0
- package/dist/types/components/stepper/step.stories.d.ts +5 -0
- package/dist/types/components/stepper/stepper.d.ts +18 -0
- package/dist/types/components/stepper/stepper.stories.d.ts +36 -0
- package/dist/types/components/switch-group/switch-group.d.ts +33 -0
- package/dist/types/components/switch-group/switch-group.stories.d.ts +37 -0
- package/dist/types/components/switch-group/switch-option.d.ts +24 -0
- package/dist/types/components/switch-group/switch-option.stories.d.ts +5 -0
- package/dist/types/components/table/table.d.ts +23 -0
- package/dist/types/components/table/table.stories.d.ts +45 -0
- package/dist/types/components/tabs/tab-panel.d.ts +17 -0
- package/dist/types/components/tabs/tab-panel.stories.d.ts +5 -0
- package/dist/types/components/tabs/tabs.d.ts +30 -0
- package/dist/types/components/tabs/tabs.stories.d.ts +34 -0
- package/dist/types/components/textarea/textarea.d.ts +62 -0
- package/dist/types/components/textarea/textarea.stories.d.ts +88 -0
- package/dist/types/components/toast/toast.d.ts +42 -0
- package/dist/types/components/toast/toast.stories.d.ts +48 -0
- package/dist/types/components/toggle/toggle.d.ts +31 -0
- package/dist/types/components/toggle/toggle.stories.d.ts +46 -0
- package/dist/types/components/toolbar/toolbar.d.ts +18 -0
- package/dist/types/components/toolbar/toolbar.stories.d.ts +28 -0
- package/dist/types/components/tooltip/tooltip.d.ts +36 -0
- package/dist/types/components/tooltip/tooltip.stories.d.ts +43 -0
- package/dist/types/components/tree/tree-item.d.ts +42 -0
- package/dist/types/components/tree/tree-item.stories.d.ts +5 -0
- package/dist/types/components/tree/tree.d.ts +13 -0
- package/dist/types/components/tree/tree.stories.d.ts +21 -0
- package/dist/types/components.d.ts +4191 -0
- package/dist/types/index.d.ts +53 -0
- package/dist/types/stencil-public-runtime.d.ts +1860 -0
- package/dist/types/theme/tokens.d.ts +29 -0
- package/dist/types/types/index.d.ts +36 -0
- package/dist/types/utils/aria.d.ts +23 -0
- package/dist/types/utils/dom.d.ts +19 -0
- package/dist/types/utils/events.d.ts +17 -0
- package/loader/cdn.js +1 -0
- package/loader/index.cjs.js +1 -0
- package/loader/index.d.ts +24 -0
- package/loader/index.es2017.js +1 -0
- package/loader/index.js +2 -0
- package/package.json +79 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t,p as e,H as r,d as a,h as s,c as i}from"./p-DkpyRqHf.js";import{g as o}from"./p-lpqZSiIf.js";const n=()=>`:host{display:block;position:relative;font-family:var(--ts-font-family-base);--ts-date-picker-bg:var(--ts-color-neutral-50);--ts-date-picker-radius:var(--ts-radius-md);--ts-date-picker-focus-ring:var(--ts-focus-ring)}.date-picker__label{display:block;margin-block-end:var(--ts-spacing-1);font-size:var(--ts-font-size-sm);font-weight:var(--ts-font-weight-medium);color:var(--ts-color-text-primary)}.date-picker__trigger{display:block;width:100%;border:1px solid var(--ts-color-border-default);border-radius:var(--ts-date-picker-radius);background-color:var(--ts-date-picker-bg);color:var(--ts-color-text-primary);font-family:var(--ts-font-family-base);cursor:pointer;outline:none;transition:border-color var(--ts-transition-fast), box-shadow var(--ts-transition-fast)}.date-picker__trigger:focus-visible{box-shadow:var(--ts-date-picker-focus-ring);border-color:var(--ts-color-interactive-primary)}:host([size="sm"]) .date-picker__trigger{padding:var(--ts-spacing-1) var(--ts-spacing-2);font-size:var(--ts-font-size-sm)}:host([size="md"]) .date-picker__trigger{padding:var(--ts-spacing-2) var(--ts-spacing-3);font-size:var(--ts-font-size-md)}:host([size="lg"]) .date-picker__trigger{padding:var(--ts-spacing-3) var(--ts-spacing-4);font-size:var(--ts-font-size-lg)}:host([error]) .date-picker__trigger{border-color:var(--ts-color-danger-500)}:host([error]) .date-picker__trigger:focus-visible{box-shadow:0 0 0 3px rgba(239, 68, 68, 0.25)}.date-picker__error{display:block;margin-block-start:var(--ts-spacing-1);font-size:var(--ts-font-size-sm);color:var(--ts-color-danger-500)}:host([disabled]) .date-picker__trigger{opacity:0.5;cursor:not-allowed}.date-picker__calendar{position:absolute;inset-block-start:100%;inset-inline-start:0;z-index:var(--ts-z-dropdown, 100);margin-block-start:var(--ts-spacing-1);padding:var(--ts-spacing-3);background-color:var(--ts-color-bg-elevated);border:1px solid var(--ts-color-border-subtle);border-radius:var(--ts-radius-lg);box-shadow:var(--ts-shadow-lg);min-inline-size:280px;animation:ts-dp-fade-in 150ms ease-out}.date-picker__header{display:flex;align-items:center;justify-content:space-between;margin-block-end:var(--ts-spacing-2)}.date-picker__month-year{font-size:var(--ts-font-size-sm);font-weight:var(--ts-font-weight-semi);color:var(--ts-color-text-primary)}.date-picker__nav-btn{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border:none;border-radius:var(--ts-radius-md);background:transparent;color:var(--ts-color-text-secondary);font-size:var(--ts-font-size-lg);cursor:pointer;padding:0;line-height:1;transition:background-color var(--ts-transition-fast), color var(--ts-transition-fast)}.date-picker__nav-btn:hover{background-color:var(--ts-color-bg-hover);color:var(--ts-color-text-primary)}.date-picker__nav-btn:focus-visible{box-shadow:var(--ts-focus-ring);outline:none}.date-picker__weekdays{display:grid;grid-template-columns:repeat(7, 1fr);gap:0;margin-block-end:var(--ts-spacing-1)}.date-picker__weekday{display:flex;align-items:center;justify-content:center;font-size:var(--ts-font-size-xs);font-weight:var(--ts-font-weight-semi);color:var(--ts-color-text-tertiary);padding:var(--ts-spacing-1) 0}.date-picker__days{display:grid;grid-template-columns:repeat(7, 1fr);gap:1px}.date-picker__day{display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;margin:1px auto;border:none;border-radius:var(--ts-radius-full);background:transparent;color:var(--ts-color-text-primary);font-family:var(--ts-font-family-base);font-size:var(--ts-font-size-sm);cursor:pointer;padding:0;transition:background-color var(--ts-transition-fast), color var(--ts-transition-fast)}.date-picker__day--empty{cursor:default}.date-picker__day:not(.date-picker__day--empty):not(.date-picker__day--disabled):hover{background-color:var(--ts-color-bg-hover)}.date-picker__day:not(.date-picker__day--empty):focus-visible{box-shadow:var(--ts-date-picker-focus-ring);outline:none}.date-picker__day--today{font-weight:var(--ts-font-weight-bold);border:1px solid var(--ts-color-interactive-primary)}.date-picker__day--selected{background-color:var(--ts-color-interactive-primary);color:var(--ts-color-text-on-primary);font-weight:var(--ts-font-weight-semi)}.date-picker__day--selected:hover{background-color:var(--ts-color-interactive-primary-hover)}.date-picker__day--disabled{opacity:0.35;cursor:not-allowed}.date-picker__day--focused{box-shadow:var(--ts-date-picker-focus-ring)}@keyframes ts-dp-fade-in{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}`;const d=["Su","Mo","Tu","We","Th","Fr","Sa"];const c=e(class t extends r{constructor(t){super();if(t!==false){this.__registerHost()}this.__attachShadow();this.tsChange=a(this,"tsChange")}get hostEl(){return this}pickerId=o("ts-date-picker");triggerEl;value;placeholder="Select date";disabled=false;min;max;label;error=false;errorMessage;size="md";name;tsChange;isOpen=false;viewMonth=(new Date).getMonth();viewYear=(new Date).getFullYear();focusedDay=null;handleValueChange(){if(this.value){const t=new Date(this.value+"T00:00:00");if(!isNaN(t.getTime())){this.viewMonth=t.getMonth();this.viewYear=t.getFullYear()}}}connectedCallback(){this.handleValueChange()}toggleCalendar=()=>{if(this.disabled)return;this.isOpen=!this.isOpen;if(this.isOpen){this.handleValueChange()}};closeCalendar=()=>{this.isOpen=false;this.focusedDay=null};prevMonth=()=>{if(this.viewMonth===0){this.viewMonth=11;this.viewYear-=1}else{this.viewMonth-=1}};nextMonth=()=>{if(this.viewMonth===11){this.viewMonth=0;this.viewYear+=1}else{this.viewMonth+=1}};selectDay=t=>{const e=String(this.viewMonth+1).padStart(2,"0");const r=String(t).padStart(2,"0");const a=`${this.viewYear}-${e}-${r}`;this.value=a;this.tsChange.emit({value:a});this.closeCalendar();this.triggerEl?.focus()};isDayDisabled(t){const e=`${this.viewYear}-${String(this.viewMonth+1).padStart(2,"0")}-${String(t).padStart(2,"0")}`;if(this.min&&e<this.min)return true;if(this.max&&e>this.max)return true;return false}isToday(t){const e=new Date;return t===e.getDate()&&this.viewMonth===e.getMonth()&&this.viewYear===e.getFullYear()}isSelected(t){if(!this.value)return false;const e=new Date(this.value+"T00:00:00");return t===e.getDate()&&this.viewMonth===e.getMonth()&&this.viewYear===e.getFullYear()}getDaysInMonth(){return new Date(this.viewYear,this.viewMonth+1,0).getDate()}getFirstDayOfWeek(){return new Date(this.viewYear,this.viewMonth,1).getDay()}getMonthName(){return new Date(this.viewYear,this.viewMonth).toLocaleString("default",{month:"long"})}handleTriggerKeydown=t=>{if(t.key==="Enter"||t.key===" "){t.preventDefault();this.toggleCalendar()}else if(t.key==="Escape"&&this.isOpen){this.closeCalendar()}};handleCalendarKeydown=t=>{const e=this.getDaysInMonth();if(t.key==="Escape"){this.closeCalendar();this.triggerEl?.focus();return}if(this.focusedDay===null){this.focusedDay=1;return}let r=this.focusedDay;switch(t.key){case"ArrowRight":t.preventDefault();r=Math.min(this.focusedDay+1,e);break;case"ArrowLeft":t.preventDefault();r=Math.max(this.focusedDay-1,1);break;case"ArrowDown":t.preventDefault();r=Math.min(this.focusedDay+7,e);break;case"ArrowUp":t.preventDefault();r=Math.max(this.focusedDay-7,1);break;case"Enter":t.preventDefault();if(!this.isDayDisabled(this.focusedDay)){this.selectDay(this.focusedDay)}return;default:return}this.focusedDay=r};handleDocumentClick=t=>{const e=t.composedPath();if(!e.includes(this.hostEl)){this.closeCalendar()}};componentDidLoad(){document.addEventListener("click",this.handleDocumentClick)}disconnectedCallback(){document.removeEventListener("click",this.handleDocumentClick)}renderCalendar(){const t=this.getDaysInMonth();const e=this.getFirstDayOfWeek();const r=[];for(let t=0;t<e;t++){r.push(null)}for(let e=1;e<=t;e++){r.push(e)}return s("div",{class:"date-picker__calendar",part:"calendar",role:"dialog","aria-label":`${this.getMonthName()} ${this.viewYear}`,onKeyDown:this.handleCalendarKeydown},s("div",{class:"date-picker__header",part:"header"},s("button",{class:"date-picker__nav-btn",type:"button","aria-label":"Previous month",onClick:this.prevMonth},"‹"),s("span",{class:"date-picker__month-year"},this.getMonthName()," ",this.viewYear),s("button",{class:"date-picker__nav-btn",type:"button","aria-label":"Next month",onClick:this.nextMonth},"›")),s("div",{class:"date-picker__grid",role:"grid","aria-label":"Calendar"},s("div",{class:"date-picker__weekdays"},d.map((t=>s("span",{class:"date-picker__weekday",role:"columnheader",key:t},t)))),s("div",{class:"date-picker__days"},r.map(((t,e)=>t===null?s("span",{class:"date-picker__day date-picker__day--empty",key:`empty-${e}`}):s("button",{class:{"date-picker__day":true,"date-picker__day--today":this.isToday(t),"date-picker__day--selected":this.isSelected(t),"date-picker__day--disabled":this.isDayDisabled(t),"date-picker__day--focused":this.focusedDay===t},part:"day",type:"button",disabled:this.isDayDisabled(t),tabindex:this.focusedDay===t?0:-1,"aria-label":`${t} ${this.getMonthName()} ${this.viewYear}`,"aria-selected":this.isSelected(t)?"true":undefined,key:`day-${t}`,onClick:()=>this.selectDay(t)},t))))))}render(){return s(i,{key:"50137a4ae337d96c546d842875d4d22a710a6473",class:{"ts-date-picker":true,"ts-date-picker--open":this.isOpen,"ts-date-picker--error":this.error,[`ts-date-picker--${this.size}`]:true}},this.label&&s("label",{key:"475c187da383d04c078f0870ae67010183983574",class:"date-picker__label",part:"label",htmlFor:this.pickerId},this.label),s("input",{key:"74f792fb4db7930dbacbf310162d89a2224480ad",ref:t=>this.triggerEl=t,class:"date-picker__trigger",part:"trigger",type:"text",id:this.pickerId,name:this.name,value:this.value||"",placeholder:this.placeholder,disabled:this.disabled,readOnly:true,"aria-haspopup":"dialog","aria-expanded":this.isOpen?"true":"false","aria-invalid":this.error?"true":undefined,onClick:this.toggleCalendar,onKeyDown:this.handleTriggerKeydown}),this.isOpen&&this.renderCalendar(),this.error&&this.errorMessage&&s("span",{key:"8b807115f167df573ff6a48d6790da72e2e82197",class:"date-picker__error",part:"error",role:"alert"},this.errorMessage))}static get watchers(){return{value:[{handleValueChange:0}]}}static get style(){return n()}},[513,"ts-date-picker",{value:[1537],placeholder:[1],disabled:[516],min:[1],max:[1],label:[1],error:[516],errorMessage:[1,"error-message"],size:[513],name:[1],isOpen:[32],viewMonth:[32],viewYear:[32],focusedDay:[32]},undefined,{value:[{handleValueChange:0}]}]);function l(){if(typeof customElements==="undefined"){return}const e=["ts-date-picker"];e.forEach((e=>{switch(e){case"ts-date-picker":if(!customElements.get(t(e))){customElements.define(t(e),c)}break}}))}l();export{c as T,l as d};
|
|
2
|
+
//# sourceMappingURL=p-DlB-KfKY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["datePickerCss","WEEKDAYS","TsDatePicker","__stencil_proxyCustomElement","HTMLElement","pickerId","generateId","triggerEl","value","placeholder","disabled","min","max","label","error","errorMessage","size","name","tsChange","isOpen","viewMonth","Date","getMonth","viewYear","getFullYear","focusedDay","handleValueChange","this","date","isNaN","getTime","connectedCallback","toggleCalendar","closeCalendar","prevMonth","nextMonth","selectDay","day","month","String","padStart","dayStr","newValue","emit","focus","isDayDisabled","dateStr","isToday","today","getDate","isSelected","getDaysInMonth","getFirstDayOfWeek","getDay","getMonthName","toLocaleString","handleTriggerKeydown","event","key","preventDefault","handleCalendarKeydown","daysInMonth","newDay","Math","handleDocumentClick","path","composedPath","includes","hostEl","componentDidLoad","document","addEventListener","disconnectedCallback","removeEventListener","renderCalendar","firstDay","days","i","push","d","h","class","part","role","onKeyDown","type","onClick","map","wd","index","tabindex","undefined","render","Host","htmlFor","ref","el","id","readOnly"],"sources":["src/components/date-picker/date-picker.css?tag=ts-date-picker&encapsulation=shadow","src/components/date-picker/date-picker.tsx"],"sourcesContent":["/* ==========================================================================\n ts-date-picker — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-date-picker-bg Input/calendar background\n --ts-date-picker-radius Border radius\n --ts-date-picker-focus-ring Focus ring box-shadow\n ========================================================================== */\n\n:host {\n display: block;\n position: relative;\n font-family: var(--ts-font-family-base);\n\n --ts-date-picker-bg: var(--ts-color-neutral-50);\n --ts-date-picker-radius: var(--ts-radius-md);\n --ts-date-picker-focus-ring: var(--ts-focus-ring);\n}\n\n/* ---- Label ---- */\n.date-picker__label {\n display: block;\n margin-block-end: var(--ts-spacing-1);\n font-size: var(--ts-font-size-sm);\n font-weight: var(--ts-font-weight-medium);\n color: var(--ts-color-text-primary);\n}\n\n/* ---- Trigger Input ---- */\n.date-picker__trigger {\n display: block;\n width: 100%;\n border: 1px solid var(--ts-color-border-default);\n border-radius: var(--ts-date-picker-radius);\n background-color: var(--ts-date-picker-bg);\n color: var(--ts-color-text-primary);\n font-family: var(--ts-font-family-base);\n cursor: pointer;\n outline: none;\n transition:\n border-color var(--ts-transition-fast),\n box-shadow var(--ts-transition-fast);\n}\n\n.date-picker__trigger:focus-visible {\n box-shadow: var(--ts-date-picker-focus-ring);\n border-color: var(--ts-color-interactive-primary);\n}\n\n/* ---- Sizes ---- */\n:host([size=\"sm\"]) .date-picker__trigger {\n padding: var(--ts-spacing-1) var(--ts-spacing-2);\n font-size: var(--ts-font-size-sm);\n}\n\n:host([size=\"md\"]) .date-picker__trigger {\n padding: var(--ts-spacing-2) var(--ts-spacing-3);\n font-size: var(--ts-font-size-md);\n}\n\n:host([size=\"lg\"]) .date-picker__trigger {\n padding: var(--ts-spacing-3) var(--ts-spacing-4);\n font-size: var(--ts-font-size-lg);\n}\n\n/* ---- Error state ---- */\n:host([error]) .date-picker__trigger {\n border-color: var(--ts-color-danger-500);\n}\n\n:host([error]) .date-picker__trigger:focus-visible {\n box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.25);\n}\n\n.date-picker__error {\n display: block;\n margin-block-start: var(--ts-spacing-1);\n font-size: var(--ts-font-size-sm);\n color: var(--ts-color-danger-500);\n}\n\n/* ---- Disabled ---- */\n:host([disabled]) .date-picker__trigger {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n/* ---- Calendar Dropdown ---- */\n.date-picker__calendar {\n position: absolute;\n inset-block-start: 100%;\n inset-inline-start: 0;\n z-index: var(--ts-z-dropdown, 100);\n margin-block-start: var(--ts-spacing-1);\n padding: var(--ts-spacing-3);\n background-color: var(--ts-color-bg-elevated);\n border: 1px solid var(--ts-color-border-subtle);\n border-radius: var(--ts-radius-lg);\n box-shadow: var(--ts-shadow-lg);\n min-inline-size: 280px;\n animation: ts-dp-fade-in 150ms ease-out;\n}\n\n/* ---- Header ---- */\n.date-picker__header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-block-end: var(--ts-spacing-2);\n}\n\n.date-picker__month-year {\n font-size: var(--ts-font-size-sm);\n font-weight: var(--ts-font-weight-semi);\n color: var(--ts-color-text-primary);\n}\n\n.date-picker__nav-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n border: none;\n border-radius: var(--ts-radius-md);\n background: transparent;\n color: var(--ts-color-text-secondary);\n font-size: var(--ts-font-size-lg);\n cursor: pointer;\n padding: 0;\n line-height: 1;\n transition:\n background-color var(--ts-transition-fast),\n color var(--ts-transition-fast);\n}\n\n.date-picker__nav-btn:hover {\n background-color: var(--ts-color-bg-hover);\n color: var(--ts-color-text-primary);\n}\n\n.date-picker__nav-btn:focus-visible {\n box-shadow: var(--ts-focus-ring);\n outline: none;\n}\n\n/* ---- Grid ---- */\n.date-picker__weekdays {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n gap: 0;\n margin-block-end: var(--ts-spacing-1);\n}\n\n.date-picker__weekday {\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: var(--ts-font-size-xs);\n font-weight: var(--ts-font-weight-semi);\n color: var(--ts-color-text-tertiary);\n padding: var(--ts-spacing-1) 0;\n}\n\n.date-picker__days {\n display: grid;\n grid-template-columns: repeat(7, 1fr);\n gap: 1px;\n}\n\n/* ---- Day cells ---- */\n.date-picker__day {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n margin: 1px auto;\n border: none;\n border-radius: var(--ts-radius-full);\n background: transparent;\n color: var(--ts-color-text-primary);\n font-family: var(--ts-font-family-base);\n font-size: var(--ts-font-size-sm);\n cursor: pointer;\n padding: 0;\n transition:\n background-color var(--ts-transition-fast),\n color var(--ts-transition-fast);\n}\n\n.date-picker__day--empty {\n cursor: default;\n}\n\n.date-picker__day:not(.date-picker__day--empty):not(.date-picker__day--disabled):hover {\n background-color: var(--ts-color-bg-hover);\n}\n\n.date-picker__day:not(.date-picker__day--empty):focus-visible {\n box-shadow: var(--ts-date-picker-focus-ring);\n outline: none;\n}\n\n.date-picker__day--today {\n font-weight: var(--ts-font-weight-bold);\n border: 1px solid var(--ts-color-interactive-primary);\n}\n\n.date-picker__day--selected {\n background-color: var(--ts-color-interactive-primary);\n color: var(--ts-color-text-on-primary);\n font-weight: var(--ts-font-weight-semi);\n}\n\n.date-picker__day--selected:hover {\n background-color: var(--ts-color-interactive-primary-hover);\n}\n\n.date-picker__day--disabled {\n opacity: 0.35;\n cursor: not-allowed;\n}\n\n.date-picker__day--focused {\n box-shadow: var(--ts-date-picker-focus-ring);\n}\n\n/* ---- Animation ---- */\n@keyframes ts-dp-fade-in {\n from { opacity: 0; transform: translateY(-4px); }\n to { opacity: 1; transform: translateY(0); }\n}\n","import { Component, Prop, State, Event, h, Host, Element, Watch } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\nimport { generateId } from '../../utils/aria';\n\nconst WEEKDAYS = ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'];\n\n/**\n * @part trigger - The input trigger element.\n * @part calendar - The calendar dropdown container.\n * @part header - The month/year navigation header.\n * @part grid - The day grid.\n * @part day - Individual day cell.\n * @part label - The label element.\n * @part error - The error message.\n */\n@Component({\n tag: 'ts-date-picker',\n styleUrl: 'date-picker.css',\n shadow: true,\n})\nexport class TsDatePicker {\n @Element() hostEl!: HTMLElement;\n\n private pickerId = generateId('ts-date-picker');\n private triggerEl?: HTMLInputElement;\n\n /** The selected date value in ISO format (YYYY-MM-DD). */\n @Prop({ mutable: true, reflect: true }) value?: string;\n\n /** Placeholder text for the input. */\n @Prop() placeholder = 'Select date';\n\n /** Whether the date picker is disabled. */\n @Prop({ reflect: true }) disabled = false;\n\n /** Minimum selectable date in ISO format. */\n @Prop() min?: string;\n\n /** Maximum selectable date in ISO format. */\n @Prop() max?: string;\n\n /** Label text for the input. */\n @Prop() label?: string;\n\n /** Whether the input is in an error state. */\n @Prop({ reflect: true }) error = false;\n\n /** Error message to display. */\n @Prop() errorMessage?: string;\n\n /** The input size. */\n @Prop({ reflect: true }) size: 'sm' | 'md' | 'lg' = 'md';\n\n /** Form field name. */\n @Prop() name?: string;\n\n /** Emitted when a date is selected. */\n @Event({ eventName: 'tsChange' }) tsChange!: EventEmitter<{ value: string }>;\n\n /** Whether the calendar dropdown is open. */\n @State() isOpen = false;\n\n /** The month currently being viewed (0-11). */\n @State() viewMonth = new Date().getMonth();\n\n /** The year currently being viewed. */\n @State() viewYear = new Date().getFullYear();\n\n /** Currently focused day in the grid for keyboard navigation. */\n @State() focusedDay: number | null = null;\n\n @Watch('value')\n handleValueChange(): void {\n if (this.value) {\n const date = new Date(this.value + 'T00:00:00');\n if (!isNaN(date.getTime())) {\n this.viewMonth = date.getMonth();\n this.viewYear = date.getFullYear();\n }\n }\n }\n\n connectedCallback(): void {\n this.handleValueChange();\n }\n\n private toggleCalendar = (): void => {\n if (this.disabled) return;\n this.isOpen = !this.isOpen;\n if (this.isOpen) {\n this.handleValueChange();\n }\n };\n\n private closeCalendar = (): void => {\n this.isOpen = false;\n this.focusedDay = null;\n };\n\n private prevMonth = (): void => {\n if (this.viewMonth === 0) {\n this.viewMonth = 11;\n this.viewYear -= 1;\n } else {\n this.viewMonth -= 1;\n }\n };\n\n private nextMonth = (): void => {\n if (this.viewMonth === 11) {\n this.viewMonth = 0;\n this.viewYear += 1;\n } else {\n this.viewMonth += 1;\n }\n };\n\n private selectDay = (day: number): void => {\n const month = String(this.viewMonth + 1).padStart(2, '0');\n const dayStr = String(day).padStart(2, '0');\n const newValue = `${this.viewYear}-${month}-${dayStr}`;\n this.value = newValue;\n this.tsChange.emit({ value: newValue });\n this.closeCalendar();\n this.triggerEl?.focus();\n };\n\n private isDayDisabled(day: number): boolean {\n const dateStr = `${this.viewYear}-${String(this.viewMonth + 1).padStart(2, '0')}-${String(day).padStart(2, '0')}`;\n if (this.min && dateStr < this.min) return true;\n if (this.max && dateStr > this.max) return true;\n return false;\n }\n\n private isToday(day: number): boolean {\n const today = new Date();\n return (\n day === today.getDate() &&\n this.viewMonth === today.getMonth() &&\n this.viewYear === today.getFullYear()\n );\n }\n\n private isSelected(day: number): boolean {\n if (!this.value) return false;\n const date = new Date(this.value + 'T00:00:00');\n return (\n day === date.getDate() &&\n this.viewMonth === date.getMonth() &&\n this.viewYear === date.getFullYear()\n );\n }\n\n private getDaysInMonth(): number {\n return new Date(this.viewYear, this.viewMonth + 1, 0).getDate();\n }\n\n private getFirstDayOfWeek(): number {\n return new Date(this.viewYear, this.viewMonth, 1).getDay();\n }\n\n private getMonthName(): string {\n return new Date(this.viewYear, this.viewMonth).toLocaleString('default', { month: 'long' });\n }\n\n private handleTriggerKeydown = (event: KeyboardEvent): void => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.toggleCalendar();\n } else if (event.key === 'Escape' && this.isOpen) {\n this.closeCalendar();\n }\n };\n\n private handleCalendarKeydown = (event: KeyboardEvent): void => {\n const daysInMonth = this.getDaysInMonth();\n\n if (event.key === 'Escape') {\n this.closeCalendar();\n this.triggerEl?.focus();\n return;\n }\n\n if (this.focusedDay === null) {\n this.focusedDay = 1;\n return;\n }\n\n let newDay = this.focusedDay;\n\n switch (event.key) {\n case 'ArrowRight':\n event.preventDefault();\n newDay = Math.min(this.focusedDay + 1, daysInMonth);\n break;\n case 'ArrowLeft':\n event.preventDefault();\n newDay = Math.max(this.focusedDay - 1, 1);\n break;\n case 'ArrowDown':\n event.preventDefault();\n newDay = Math.min(this.focusedDay + 7, daysInMonth);\n break;\n case 'ArrowUp':\n event.preventDefault();\n newDay = Math.max(this.focusedDay - 7, 1);\n break;\n case 'Enter':\n event.preventDefault();\n if (!this.isDayDisabled(this.focusedDay)) {\n this.selectDay(this.focusedDay);\n }\n return;\n default:\n return;\n }\n\n this.focusedDay = newDay;\n };\n\n private handleDocumentClick = (event: MouseEvent): void => {\n const path = event.composedPath();\n if (!path.includes(this.hostEl)) {\n this.closeCalendar();\n }\n };\n\n componentDidLoad(): void {\n document.addEventListener('click', this.handleDocumentClick);\n }\n\n disconnectedCallback(): void {\n document.removeEventListener('click', this.handleDocumentClick);\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n private renderCalendar() {\n const daysInMonth = this.getDaysInMonth();\n const firstDay = this.getFirstDayOfWeek();\n const days: (number | null)[] = [];\n\n for (let i = 0; i < firstDay; i++) {\n days.push(null);\n }\n for (let d = 1; d <= daysInMonth; d++) {\n days.push(d);\n }\n\n return (\n <div\n class=\"date-picker__calendar\"\n part=\"calendar\"\n role=\"dialog\"\n aria-label={`${this.getMonthName()} ${this.viewYear}`}\n onKeyDown={this.handleCalendarKeydown}\n >\n <div class=\"date-picker__header\" part=\"header\">\n <button\n class=\"date-picker__nav-btn\"\n type=\"button\"\n aria-label=\"Previous month\"\n onClick={this.prevMonth}\n >\n ‹\n </button>\n <span class=\"date-picker__month-year\">\n {this.getMonthName()} {this.viewYear}\n </span>\n <button\n class=\"date-picker__nav-btn\"\n type=\"button\"\n aria-label=\"Next month\"\n onClick={this.nextMonth}\n >\n ›\n </button>\n </div>\n\n <div class=\"date-picker__grid\" role=\"grid\" aria-label=\"Calendar\">\n <div class=\"date-picker__weekdays\">\n {WEEKDAYS.map((wd) => (\n <span class=\"date-picker__weekday\" role=\"columnheader\" key={wd}>\n {wd}\n </span>\n ))}\n </div>\n <div class=\"date-picker__days\">\n {days.map((day, index) =>\n day === null ? (\n <span class=\"date-picker__day date-picker__day--empty\" key={`empty-${index}`} />\n ) : (\n <button\n class={{\n 'date-picker__day': true,\n 'date-picker__day--today': this.isToday(day),\n 'date-picker__day--selected': this.isSelected(day),\n 'date-picker__day--disabled': this.isDayDisabled(day),\n 'date-picker__day--focused': this.focusedDay === day,\n }}\n part=\"day\"\n type=\"button\"\n disabled={this.isDayDisabled(day)}\n tabindex={this.focusedDay === day ? 0 : -1}\n aria-label={`${day} ${this.getMonthName()} ${this.viewYear}`}\n aria-selected={this.isSelected(day) ? 'true' : undefined}\n key={`day-${day}`}\n onClick={() => this.selectDay(day)}\n >\n {day}\n </button>\n ),\n )}\n </div>\n </div>\n </div>\n );\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host\n class={{\n 'ts-date-picker': true,\n 'ts-date-picker--open': this.isOpen,\n 'ts-date-picker--error': this.error,\n [`ts-date-picker--${this.size}`]: true,\n }}\n >\n {this.label && (\n <label class=\"date-picker__label\" part=\"label\" htmlFor={this.pickerId}>\n {this.label}\n </label>\n )}\n\n <input\n ref={(el) => (this.triggerEl = el)}\n class=\"date-picker__trigger\"\n part=\"trigger\"\n type=\"text\"\n id={this.pickerId}\n name={this.name}\n value={this.value || ''}\n placeholder={this.placeholder}\n disabled={this.disabled}\n readOnly\n aria-haspopup=\"dialog\"\n aria-expanded={this.isOpen ? 'true' : 'false'}\n aria-invalid={this.error ? 'true' : undefined}\n onClick={this.toggleCalendar}\n onKeyDown={this.handleTriggerKeydown}\n />\n\n {this.isOpen && this.renderCalendar()}\n\n {this.error && this.errorMessage && (\n <span class=\"date-picker__error\" part=\"error\" role=\"alert\">\n {this.errorMessage}\n </span>\n )}\n </Host>\n );\n }\n}\n"],"mappings":"sGAAA,MAAMA,EAAgB,IAAM,y9ICI5B,MAAMC,EAAW,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,M,MAgBzCC,EAAYC,EAAA,MAAAD,UAAAE,E,2IAGfC,SAAWC,EAAW,kBACtBC,UAGgCC,MAGhCC,YAAc,cAGGC,SAAW,MAG5BC,IAGAC,IAGAC,MAGiBC,MAAQ,MAGzBC,aAGiBC,KAA2B,KAG5CC,KAG0BC,SAGzBC,OAAS,MAGTC,WAAY,IAAIC,MAAOC,WAGvBC,UAAW,IAAIF,MAAOG,cAGtBC,WAA4B,KAGrC,iBAAAC,GACE,GAAIC,KAAKnB,MAAO,CACd,MAAMoB,EAAO,IAAIP,KAAKM,KAAKnB,MAAQ,aACnC,IAAKqB,MAAMD,EAAKE,WAAY,CAC1BH,KAAKP,UAAYQ,EAAKN,WACtBK,KAAKJ,SAAWK,EAAKJ,a,GAK3B,iBAAAO,GACEJ,KAAKD,mB,CAGCM,eAAiB,KACvB,GAAIL,KAAKjB,SAAU,OACnBiB,KAAKR,QAAUQ,KAAKR,OACpB,GAAIQ,KAAKR,OAAQ,CACfQ,KAAKD,mB,GAIDO,cAAgB,KACtBN,KAAKR,OAAS,MACdQ,KAAKF,WAAa,IAAI,EAGhBS,UAAY,KAClB,GAAIP,KAAKP,YAAc,EAAG,CACxBO,KAAKP,UAAY,GACjBO,KAAKJ,UAAY,C,KACZ,CACLI,KAAKP,WAAa,C,GAIde,UAAY,KAClB,GAAIR,KAAKP,YAAc,GAAI,CACzBO,KAAKP,UAAY,EACjBO,KAAKJ,UAAY,C,KACZ,CACLI,KAAKP,WAAa,C,GAIdgB,UAAaC,IACnB,MAAMC,EAAQC,OAAOZ,KAAKP,UAAY,GAAGoB,SAAS,EAAG,KACrD,MAAMC,EAASF,OAAOF,GAAKG,SAAS,EAAG,KACvC,MAAME,EAAW,GAAGf,KAAKJ,YAAYe,KAASG,IAC9Cd,KAAKnB,MAAQkC,EACbf,KAAKT,SAASyB,KAAK,CAAEnC,MAAOkC,IAC5Bf,KAAKM,gBACLN,KAAKpB,WAAWqC,OAAO,EAGjB,aAAAC,CAAcR,GACpB,MAAMS,EAAU,GAAGnB,KAAKJ,YAAYgB,OAAOZ,KAAKP,UAAY,GAAGoB,SAAS,EAAG,QAAQD,OAAOF,GAAKG,SAAS,EAAG,OAC3G,GAAIb,KAAKhB,KAAOmC,EAAUnB,KAAKhB,IAAK,OAAO,KAC3C,GAAIgB,KAAKf,KAAOkC,EAAUnB,KAAKf,IAAK,OAAO,KAC3C,OAAO,K,CAGD,OAAAmC,CAAQV,GACd,MAAMW,EAAQ,IAAI3B,KAClB,OACEgB,IAAQW,EAAMC,WACdtB,KAAKP,YAAc4B,EAAM1B,YACzBK,KAAKJ,WAAayB,EAAMxB,a,CAIpB,UAAA0B,CAAWb,GACjB,IAAKV,KAAKnB,MAAO,OAAO,MACxB,MAAMoB,EAAO,IAAIP,KAAKM,KAAKnB,MAAQ,aACnC,OACE6B,IAAQT,EAAKqB,WACbtB,KAAKP,YAAcQ,EAAKN,YACxBK,KAAKJ,WAAaK,EAAKJ,a,CAInB,cAAA2B,GACN,OAAO,IAAI9B,KAAKM,KAAKJ,SAAUI,KAAKP,UAAY,EAAG,GAAG6B,S,CAGhD,iBAAAG,GACN,OAAO,IAAI/B,KAAKM,KAAKJ,SAAUI,KAAKP,UAAW,GAAGiC,Q,CAG5C,YAAAC,GACN,OAAO,IAAIjC,KAAKM,KAAKJ,SAAUI,KAAKP,WAAWmC,eAAe,UAAW,CAAEjB,MAAO,Q,CAG5EkB,qBAAwBC,IAC9B,GAAIA,EAAMC,MAAQ,SAAWD,EAAMC,MAAQ,IAAK,CAC9CD,EAAME,iBACNhC,KAAKK,gB,MACA,GAAIyB,EAAMC,MAAQ,UAAY/B,KAAKR,OAAQ,CAChDQ,KAAKM,e,GAID2B,sBAAyBH,IAC/B,MAAMI,EAAclC,KAAKwB,iBAEzB,GAAIM,EAAMC,MAAQ,SAAU,CAC1B/B,KAAKM,gBACLN,KAAKpB,WAAWqC,QAChB,M,CAGF,GAAIjB,KAAKF,aAAe,KAAM,CAC5BE,KAAKF,WAAa,EAClB,M,CAGF,IAAIqC,EAASnC,KAAKF,WAElB,OAAQgC,EAAMC,KACZ,IAAK,aACHD,EAAME,iBACNG,EAASC,KAAKpD,IAAIgB,KAAKF,WAAa,EAAGoC,GACvC,MACF,IAAK,YACHJ,EAAME,iBACNG,EAASC,KAAKnD,IAAIe,KAAKF,WAAa,EAAG,GACvC,MACF,IAAK,YACHgC,EAAME,iBACNG,EAASC,KAAKpD,IAAIgB,KAAKF,WAAa,EAAGoC,GACvC,MACF,IAAK,UACHJ,EAAME,iBACNG,EAASC,KAAKnD,IAAIe,KAAKF,WAAa,EAAG,GACvC,MACF,IAAK,QACHgC,EAAME,iBACN,IAAKhC,KAAKkB,cAAclB,KAAKF,YAAa,CACxCE,KAAKS,UAAUT,KAAKF,W,CAEtB,OACF,QACE,OAGJE,KAAKF,WAAaqC,CAAM,EAGlBE,oBAAuBP,IAC7B,MAAMQ,EAAOR,EAAMS,eACnB,IAAKD,EAAKE,SAASxC,KAAKyC,QAAS,CAC/BzC,KAAKM,e,GAIT,gBAAAoC,GACEC,SAASC,iBAAiB,QAAS5C,KAAKqC,oB,CAG1C,oBAAAQ,GACEF,SAASG,oBAAoB,QAAS9C,KAAKqC,oB,CAIrC,cAAAU,GACN,MAAMb,EAAclC,KAAKwB,iBACzB,MAAMwB,EAAWhD,KAAKyB,oBACtB,MAAMwB,EAA0B,GAEhC,IAAK,IAAIC,EAAI,EAAGA,EAAIF,EAAUE,IAAK,CACjCD,EAAKE,KAAK,K,CAEZ,IAAK,IAAIC,EAAI,EAAGA,GAAKlB,EAAakB,IAAK,CACrCH,EAAKE,KAAKC,E,CAGZ,OACEC,EAAA,OACEC,MAAM,wBACNC,KAAK,WACLC,KAAK,SAAQ,aACD,GAAGxD,KAAK2B,kBAAkB3B,KAAKJ,WAC3C6D,UAAWzD,KAAKiC,uBAEhBoB,EAAA,OAAKC,MAAM,sBAAsBC,KAAK,UACpCF,EAAA,UACEC,MAAM,uBACNI,KAAK,SAAQ,aACF,iBACXC,QAAS3D,KAAKO,WAAS,KAIzB8C,EAAA,QAAMC,MAAM,2BACTtD,KAAK2B,eAAc,IAAG3B,KAAKJ,UAE9ByD,EAAA,UACEC,MAAM,uBACNI,KAAK,SAAQ,aACF,aACXC,QAAS3D,KAAKQ,WAAS,MAM3B6C,EAAA,OAAKC,MAAM,oBAAoBE,KAAK,OAAM,aAAY,YACpDH,EAAA,OAAKC,MAAM,yBACRhF,EAASsF,KAAKC,GACbR,EAAA,QAAMC,MAAM,uBAAuBE,KAAK,eAAezB,IAAK8B,GACzDA,MAIPR,EAAA,OAAKC,MAAM,qBACRL,EAAKW,KAAI,CAAClD,EAAKoD,IACdpD,IAAQ,KACN2C,EAAA,QAAMC,MAAM,2CAA2CvB,IAAK,SAAS+B,MAErET,EAAA,UACEC,MAAO,CACL,mBAAoB,KACpB,0BAA2BtD,KAAKoB,QAAQV,GACxC,6BAA8BV,KAAKuB,WAAWb,GAC9C,6BAA8BV,KAAKkB,cAAcR,GACjD,4BAA6BV,KAAKF,aAAeY,GAEnD6C,KAAK,MACLG,KAAK,SACL3E,SAAUiB,KAAKkB,cAAcR,GAC7BqD,SAAU/D,KAAKF,aAAeY,EAAM,GAAI,EAAE,aAC9B,GAAGA,KAAOV,KAAK2B,kBAAkB3B,KAAKJ,WAAU,gBAC7CI,KAAKuB,WAAWb,GAAO,OAASsD,UAC/CjC,IAAK,OAAOrB,IACZiD,QAAS,IAAM3D,KAAKS,UAAUC,IAE7BA,O,CAWjB,MAAAuD,GACE,OACEZ,EAACa,EAAI,CAAAnC,IAAA,2CACHuB,MAAO,CACL,iBAAkB,KAClB,uBAAwBtD,KAAKR,OAC7B,wBAAyBQ,KAAKb,MAC9B,CAAC,mBAAmBa,KAAKX,QAAS,OAGnCW,KAAKd,OACJmE,EAAA,SAAAtB,IAAA,2CAAOuB,MAAM,qBAAqBC,KAAK,QAAQY,QAASnE,KAAKtB,UAC1DsB,KAAKd,OAIVmE,EAAA,SAAAtB,IAAA,2CACEqC,IAAMC,GAAQrE,KAAKpB,UAAYyF,EAC/Bf,MAAM,uBACNC,KAAK,UACLG,KAAK,OACLY,GAAItE,KAAKtB,SACTY,KAAMU,KAAKV,KACXT,MAAOmB,KAAKnB,OAAS,GACrBC,YAAakB,KAAKlB,YAClBC,SAAUiB,KAAKjB,SACfwF,SAAQ,qBACM,SAAQ,gBACPvE,KAAKR,OAAS,OAAS,QAAO,eAC/BQ,KAAKb,MAAQ,OAAS6E,UACpCL,QAAS3D,KAAKK,eACdoD,UAAWzD,KAAK6B,uBAGjB7B,KAAKR,QAAUQ,KAAK+C,iBAEpB/C,KAAKb,OAASa,KAAKZ,cAClBiE,EAAA,QAAAtB,IAAA,2CAAMuB,MAAM,qBAAqBC,KAAK,QAAQC,KAAK,SAChDxD,KAAKZ,c","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as a,p as t,H as s,h as e,c as o}from"./p-DkpyRqHf.js";const r=()=>`:host{display:block;font-family:var(--ts-font-family-base);--ts-toolbar-bg:var(--ts-color-bg-surface);--ts-toolbar-border-color:var(--ts-color-border-subtle);--ts-toolbar-padding:var(--ts-spacing-3);--ts-toolbar-gap:var(--ts-spacing-2)}.toolbar__base{display:flex;align-items:center;gap:var(--ts-toolbar-gap);padding-inline:var(--ts-toolbar-padding);padding-block:var(--ts-toolbar-padding);background-color:var(--ts-toolbar-bg)}:host([variant="bordered"]) .toolbar__base{border-block-end:1px solid var(--ts-toolbar-border-color)}:host([variant="elevated"]) .toolbar__base{box-shadow:var(--ts-shadow-sm);border-radius:var(--ts-radius-md)}:host([size="sm"]) .toolbar__base{padding-inline:var(--ts-spacing-2);padding-block:var(--ts-spacing-1);gap:var(--ts-spacing-1);font-size:var(--ts-font-size-sm)}:host([size="md"]) .toolbar__base{padding-inline:var(--ts-spacing-3);padding-block:var(--ts-spacing-2);gap:var(--ts-spacing-2);font-size:var(--ts-font-size-md)}:host([size="lg"]) .toolbar__base{padding-inline:var(--ts-spacing-4);padding-block:var(--ts-spacing-3);gap:var(--ts-spacing-3);font-size:var(--ts-font-size-lg)}.toolbar__start{display:flex;align-items:center;gap:var(--ts-toolbar-gap);flex-shrink:0}.toolbar__center{display:flex;align-items:center;gap:var(--ts-toolbar-gap);flex:1;min-inline-size:0}.toolbar__end{display:flex;align-items:center;gap:var(--ts-toolbar-gap);flex-shrink:0;margin-inline-start:auto}.toolbar__start:empty,.toolbar__end:empty{display:none}`;const b=t(class a extends s{constructor(a){super();if(a!==false){this.__registerHost()}this.__attachShadow()}variant="default";size="md";render(){return e(o,{key:"83f2c4baba0daca4e9ce04179c0a135ce7c015b9",class:{"ts-toolbar":true,[`ts-toolbar--${this.variant}`]:true,[`ts-toolbar--${this.size}`]:true},role:"toolbar","aria-orientation":"horizontal"},e("div",{key:"5c2b6c4b0050c0ca000aa475fedff456efee66c3",class:"toolbar__base",part:"base"},e("div",{key:"2e1e1f97c6ba0481cc039aee8c5407c2eb4b55b5",class:"toolbar__start",part:"start"},e("slot",{key:"e147cb24308e4bc2de5bcd2d6bd0dbbed48bb029",name:"start"})),e("div",{key:"727603e4bfed0642feeba89288c64315cc0b1dbf",class:"toolbar__center",part:"center"},e("slot",{key:"b323e21f9290c0b07e2dae640287aabb739b71b6"})),e("div",{key:"33040658c7a58b1df7b16c2c01bf8a8460307efe",class:"toolbar__end",part:"end"},e("slot",{key:"05209ec0a17ec31a4de2193d84456cdcb3207608",name:"end"}))))}static get style(){return r()}},[769,"ts-toolbar",{variant:[513],size:[513]}]);function i(){if(typeof customElements==="undefined"){return}const t=["ts-toolbar"];t.forEach((t=>{switch(t){case"ts-toolbar":if(!customElements.get(a(t))){customElements.define(a(t),b)}break}}))}i();export{b as T,i as d};
|
|
2
|
+
//# sourceMappingURL=p-DooMF1E0.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["toolbarCss","TsToolbar","__stencil_proxyCustomElement","HTMLElement","variant","size","render","h","Host","key","class","this","role","part","name"],"sources":["src/components/toolbar/toolbar.css?tag=ts-toolbar&encapsulation=shadow","src/components/toolbar/toolbar.tsx"],"sourcesContent":["/* ==========================================================================\n ts-toolbar — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-toolbar-bg Background color\n --ts-toolbar-border-color Border color\n --ts-toolbar-padding Padding\n --ts-toolbar-gap Gap between items\n ========================================================================== */\n\n:host {\n display: block;\n font-family: var(--ts-font-family-base);\n\n --ts-toolbar-bg: var(--ts-color-bg-surface);\n --ts-toolbar-border-color: var(--ts-color-border-subtle);\n --ts-toolbar-padding: var(--ts-spacing-3);\n --ts-toolbar-gap: var(--ts-spacing-2);\n}\n\n.toolbar__base {\n display: flex;\n align-items: center;\n gap: var(--ts-toolbar-gap);\n padding-inline: var(--ts-toolbar-padding);\n padding-block: var(--ts-toolbar-padding);\n background-color: var(--ts-toolbar-bg);\n}\n\n/* ---- Variants ---- */\n:host([variant=\"bordered\"]) .toolbar__base {\n border-block-end: 1px solid var(--ts-toolbar-border-color);\n}\n\n:host([variant=\"elevated\"]) .toolbar__base {\n box-shadow: var(--ts-shadow-sm);\n border-radius: var(--ts-radius-md);\n}\n\n/* ---- Sizes ---- */\n:host([size=\"sm\"]) .toolbar__base {\n padding-inline: var(--ts-spacing-2);\n padding-block: var(--ts-spacing-1);\n gap: var(--ts-spacing-1);\n font-size: var(--ts-font-size-sm);\n}\n\n:host([size=\"md\"]) .toolbar__base {\n padding-inline: var(--ts-spacing-3);\n padding-block: var(--ts-spacing-2);\n gap: var(--ts-spacing-2);\n font-size: var(--ts-font-size-md);\n}\n\n:host([size=\"lg\"]) .toolbar__base {\n padding-inline: var(--ts-spacing-4);\n padding-block: var(--ts-spacing-3);\n gap: var(--ts-spacing-3);\n font-size: var(--ts-font-size-lg);\n}\n\n/* ---- Layout sections ---- */\n.toolbar__start {\n display: flex;\n align-items: center;\n gap: var(--ts-toolbar-gap);\n flex-shrink: 0;\n}\n\n.toolbar__center {\n display: flex;\n align-items: center;\n gap: var(--ts-toolbar-gap);\n flex: 1;\n min-inline-size: 0;\n}\n\n.toolbar__end {\n display: flex;\n align-items: center;\n gap: var(--ts-toolbar-gap);\n flex-shrink: 0;\n margin-inline-start: auto;\n}\n\n.toolbar__start:empty,\n.toolbar__end:empty {\n display: none;\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\nimport type { TsSize } from '../../types';\n\n/**\n * @slot - Default slot for toolbar items (center).\n * @slot start - Left/start-aligned items.\n * @slot end - Right/end-aligned items.\n *\n * @part base - The toolbar container.\n * @part start - The start slot wrapper.\n * @part center - The center/default slot wrapper.\n * @part end - The end slot wrapper.\n */\n@Component({\n tag: 'ts-toolbar',\n styleUrl: 'toolbar.css',\n shadow: true,\n})\nexport class TsToolbar {\n /** The toolbar variant style. */\n @Prop({ reflect: true }) variant: 'default' | 'bordered' | 'elevated' = 'default';\n\n /** The toolbar size. */\n @Prop({ reflect: true }) size: TsSize = 'md';\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host\n class={{\n 'ts-toolbar': true,\n [`ts-toolbar--${this.variant}`]: true,\n [`ts-toolbar--${this.size}`]: true,\n }}\n role=\"toolbar\"\n aria-orientation=\"horizontal\"\n >\n <div class=\"toolbar__base\" part=\"base\">\n <div class=\"toolbar__start\" part=\"start\">\n <slot name=\"start\" />\n </div>\n\n <div class=\"toolbar__center\" part=\"center\">\n <slot />\n </div>\n\n <div class=\"toolbar__end\" part=\"end\">\n <slot name=\"end\" />\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"gEAAA,MAAMA,EAAa,IAAM,k8C,MCkBZC,EAASC,EAAA,MAAAD,UAAAE,E,iFAEKC,QAA+C,UAG/CC,KAAe,KAGxC,MAAAC,GACE,OACEC,EAACC,EAAI,CAAAC,IAAA,2CACHC,MAAO,CACL,aAAc,KACd,CAAC,eAAeC,KAAKP,WAAY,KACjC,CAAC,eAAeO,KAAKN,QAAS,MAEhCO,KAAK,UAAS,mBACG,cAEjBL,EAAA,OAAAE,IAAA,2CAAKC,MAAM,gBAAgBG,KAAK,QAC9BN,EAAA,OAAAE,IAAA,2CAAKC,MAAM,iBAAiBG,KAAK,SAC/BN,EAAA,QAAAE,IAAA,2CAAMK,KAAK,WAGbP,EAAA,OAAAE,IAAA,2CAAKC,MAAM,kBAAkBG,KAAK,UAChCN,EAAA,QAAAE,IAAA,8CAGFF,EAAA,OAAAE,IAAA,2CAAKC,MAAM,eAAeG,KAAK,OAC7BN,EAAA,QAAAE,IAAA,2CAAMK,KAAK,U","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as i,p as e,H as t,h as s,c as r}from"./p-DkpyRqHf.js";const a=()=>`:host{display:block;font-family:var(--ts-font-family-base);--ts-divider-color:var(--ts-color-border-subtle);--ts-divider-spacing:var(--ts-spacing-3)}:host([orientation="horizontal"]){inline-size:100%;padding-block:var(--ts-divider-spacing)}:host([orientation="horizontal"]) .divider__base{display:flex;align-items:center;inline-size:100%}:host([orientation="horizontal"]:not([class*="has-label"])) .divider__line{flex:1;block-size:0;border-block-start:1px solid var(--ts-divider-color)}:host([orientation="horizontal"]) .divider__line--start,:host([orientation="horizontal"]) .divider__line--end{flex:1;block-size:0;border-block-start:1px solid var(--ts-divider-color)}:host([variant="dashed"]) .divider__line,:host([variant="dashed"]) .divider__line--start,:host([variant="dashed"]) .divider__line--end{border-block-start-style:dashed}:host([variant="dotted"]) .divider__line,:host([variant="dotted"]) .divider__line--start,:host([variant="dotted"]) .divider__line--end{border-block-start-style:dotted}.divider__label{padding-inline:var(--ts-spacing-3);font-size:var(--ts-font-size-xs);color:var(--ts-color-text-secondary);white-space:nowrap;line-height:1}:host([orientation="vertical"]){display:inline-block;block-size:100%;padding-inline:var(--ts-divider-spacing)}:host([orientation="vertical"]) .divider__base{display:flex;block-size:100%}:host([orientation="vertical"]) .divider__line{inline-size:0;block-size:100%;border-inline-start:1px solid var(--ts-divider-color)}:host([orientation="vertical"][variant="dashed"]) .divider__line{border-inline-start-style:dashed}:host([orientation="vertical"][variant="dotted"]) .divider__line{border-inline-start-style:dotted}.ts-divider--has-label .divider__line{}`;const d=e(class i extends t{constructor(i){super();if(i!==false){this.__registerHost()}this.__attachShadow()}orientation="horizontal";variant="solid";label;render(){const i=!!this.label;return s(r,{key:"91e1c22fd7f266364aeac8cf9ea6429a5462375d",class:{"ts-divider":true,[`ts-divider--${this.orientation}`]:true,[`ts-divider--${this.variant}`]:true,"ts-divider--has-label":i},role:"separator","aria-orientation":this.orientation},i&&this.orientation==="horizontal"?s("div",{class:"divider__base",part:"base"},s("span",{class:"divider__line divider__line--start"}),s("span",{class:"divider__label",part:"label"},this.label),s("span",{class:"divider__line divider__line--end"})):s("div",{class:"divider__base",part:"base"},s("span",{class:"divider__line"})))}static get style(){return a()}},[513,"ts-divider",{orientation:[513],variant:[513],label:[1]}]);function o(){if(typeof customElements==="undefined"){return}const e=["ts-divider"];e.forEach((e=>{switch(e){case"ts-divider":if(!customElements.get(i(e))){customElements.define(i(e),d)}break}}))}o();export{d as T,o as d};
|
|
2
|
+
//# sourceMappingURL=p-DwJ7Jt3k.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["dividerCss","TsDivider","__stencil_proxyCustomElement","HTMLElement","orientation","variant","label","render","hasLabel","this","h","Host","key","class","role","part"],"sources":["src/components/divider/divider.css?tag=ts-divider&encapsulation=shadow","src/components/divider/divider.tsx"],"sourcesContent":["/* ==========================================================================\n ts-divider — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-divider-color Line color\n --ts-divider-spacing Spacing above/below (or left/right for vertical)\n ========================================================================== */\n\n:host {\n display: block;\n font-family: var(--ts-font-family-base);\n\n --ts-divider-color: var(--ts-color-border-subtle);\n --ts-divider-spacing: var(--ts-spacing-3);\n}\n\n/* ---- Horizontal ---- */\n:host([orientation=\"horizontal\"]) {\n inline-size: 100%;\n padding-block: var(--ts-divider-spacing);\n}\n\n:host([orientation=\"horizontal\"]) .divider__base {\n display: flex;\n align-items: center;\n inline-size: 100%;\n}\n\n:host([orientation=\"horizontal\"]:not([class*=\"has-label\"])) .divider__line {\n flex: 1;\n block-size: 0;\n border-block-start: 1px solid var(--ts-divider-color);\n}\n\n:host([orientation=\"horizontal\"]) .divider__line--start,\n:host([orientation=\"horizontal\"]) .divider__line--end {\n flex: 1;\n block-size: 0;\n border-block-start: 1px solid var(--ts-divider-color);\n}\n\n/* ---- Dashed ---- */\n:host([variant=\"dashed\"]) .divider__line,\n:host([variant=\"dashed\"]) .divider__line--start,\n:host([variant=\"dashed\"]) .divider__line--end {\n border-block-start-style: dashed;\n}\n\n/* ---- Dotted ---- */\n:host([variant=\"dotted\"]) .divider__line,\n:host([variant=\"dotted\"]) .divider__line--start,\n:host([variant=\"dotted\"]) .divider__line--end {\n border-block-start-style: dotted;\n}\n\n/* ---- Label ---- */\n.divider__label {\n padding-inline: var(--ts-spacing-3);\n font-size: var(--ts-font-size-xs);\n color: var(--ts-color-text-secondary);\n white-space: nowrap;\n line-height: 1;\n}\n\n/* ---- Vertical ---- */\n:host([orientation=\"vertical\"]) {\n display: inline-block;\n block-size: 100%;\n padding-inline: var(--ts-divider-spacing);\n}\n\n:host([orientation=\"vertical\"]) .divider__base {\n display: flex;\n block-size: 100%;\n}\n\n:host([orientation=\"vertical\"]) .divider__line {\n inline-size: 0;\n block-size: 100%;\n border-inline-start: 1px solid var(--ts-divider-color);\n}\n\n:host([orientation=\"vertical\"][variant=\"dashed\"]) .divider__line {\n border-inline-start-style: dashed;\n}\n\n:host([orientation=\"vertical\"][variant=\"dotted\"]) .divider__line {\n border-inline-start-style: dotted;\n}\n\n/* ---- Has-label class (for horizontal with text) ---- */\n.ts-divider--has-label .divider__line {\n /* overridden by --start/--end when label present */\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\n/**\n * @part base - The divider line element.\n * @part label - The optional label text.\n */\n@Component({\n tag: 'ts-divider',\n styleUrl: 'divider.css',\n shadow: true,\n})\nexport class TsDivider {\n /** The divider orientation. */\n @Prop({ reflect: true }) orientation: 'horizontal' | 'vertical' = 'horizontal';\n\n /** The line style variant. */\n @Prop({ reflect: true }) variant: 'solid' | 'dashed' | 'dotted' = 'solid';\n\n /** Optional label text displayed in the center of the divider. */\n @Prop() label?: string;\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n const hasLabel = !!this.label;\n\n return (\n <Host\n class={{\n 'ts-divider': true,\n [`ts-divider--${this.orientation}`]: true,\n [`ts-divider--${this.variant}`]: true,\n 'ts-divider--has-label': hasLabel,\n }}\n role=\"separator\"\n aria-orientation={this.orientation}\n >\n {hasLabel && this.orientation === 'horizontal' ? (\n <div class=\"divider__base\" part=\"base\">\n <span class=\"divider__line divider__line--start\" />\n <span class=\"divider__label\" part=\"label\">{this.label}</span>\n <span class=\"divider__line divider__line--end\" />\n </div>\n ) : (\n <div class=\"divider__base\" part=\"base\">\n <span class=\"divider__line\" />\n </div>\n )}\n </Host>\n );\n }\n}\n"],"mappings":"gEAAA,MAAMA,EAAa,IAAM,grD,MCWZC,EAASC,EAAA,MAAAD,UAAAE,E,iFAEKC,YAAyC,aAGzCC,QAAyC,QAG1DC,MAGR,MAAAC,GACE,MAAMC,IAAaC,KAAKH,MAExB,OACEI,EAACC,EAAI,CAAAC,IAAA,2CACHC,MAAO,CACL,aAAc,KACd,CAAC,eAAeJ,KAAKL,eAAgB,KACrC,CAAC,eAAeK,KAAKJ,WAAY,KACjC,wBAAyBG,GAE3BM,KAAK,YAAW,mBACEL,KAAKL,aAEtBI,GAAYC,KAAKL,cAAgB,aAChCM,EAAA,OAAKG,MAAM,gBAAgBE,KAAK,QAC9BL,EAAA,QAAMG,MAAM,uCACZH,EAAA,QAAMG,MAAM,iBAAiBE,KAAK,SAASN,KAAKH,OAChDI,EAAA,QAAMG,MAAM,sCAGdH,EAAA,OAAKG,MAAM,gBAAgBE,KAAK,QAC9BL,EAAA,QAAMG,MAAM,mB","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as e,p as t,H as s,d as i,h as a,c as n}from"./p-DkpyRqHf.js";const r=()=>`:host{display:block;font-family:var(--ts-font-family-base);--ts-menu-item-height:2.25rem}.menu-item__base{display:flex;align-items:center;gap:var(--ts-spacing-2);min-block-size:var(--ts-menu-item-height);padding-inline:var(--ts-spacing-3);padding-block:var(--ts-spacing-1);font-size:var(--ts-font-size-sm);color:var(--ts-color-text-primary);text-decoration:none;cursor:pointer;transition:background-color var(--ts-transition-fast), color var(--ts-transition-fast);outline:none;border:none;background:none;width:100%;white-space:nowrap}.menu-item__base:hover:not([aria-disabled="true"]){background-color:var(--ts-color-bg-hover)}.menu-item__base:focus-visible{background-color:var(--ts-color-bg-hover);box-shadow:inset 0 0 0 2px var(--ts-color-interactive-primary)}:host([disabled]) .menu-item__base{opacity:0.5;cursor:not-allowed;pointer-events:none}.menu-item__prefix,.menu-item__suffix{display:inline-flex;align-items:center;flex-shrink:0}.menu-item__prefix:empty,.menu-item__suffix:empty{display:none}.menu-item__label{display:inline-flex;align-items:center;flex-grow:1}.menu-item__suffix{margin-inline-start:auto;padding-inline-start:var(--ts-spacing-3);color:var(--ts-color-text-tertiary);font-size:var(--ts-font-size-xs)}`;const o=t(class e extends s{constructor(e){super();if(e!==false){this.__registerHost()}this.__attachShadow();this.tsSelect=i(this,"tsSelect")}get hostEl(){return this}disabled=false;value="";href;tsSelect;baseEl;async setFocus(){this.baseEl?.focus()}connectedCallback(){this.hostEl.addEventListener("focus",(()=>{this.baseEl?.focus()}))}handleClick=()=>{if(this.disabled)return;this.tsSelect.emit({value:this.value})};handleKeydown=e=>{if(this.disabled)return;if(e.key==="Enter"||e.key===" "){e.preventDefault();this.tsSelect.emit({value:this.value})}};render(){const e=!!this.href;const t=e?"a":"div";const s=e?{href:this.disabled?undefined:this.href}:{};return a(n,{key:"5b22feae43a6cf198651b55cc3285969dd6f796f",class:{"ts-menu-item":true,"ts-menu-item--disabled":this.disabled}},a(t,{key:"80c5f0748d110708eeb8c5278b3473352ab51280",...s,ref:e=>this.baseEl=e,class:"menu-item__base",part:"base",role:"menuitem",tabindex:this.disabled?-1:0,"aria-disabled":this.disabled?"true":undefined,onClick:this.handleClick,onKeyDown:this.handleKeydown},a("span",{key:"99cac763578eba7c95a9609bf3d50782b0efe0f6",class:"menu-item__prefix",part:"prefix"},a("slot",{key:"a58b57ff9d48a0a347417ebfd9a6ab82ac44486e",name:"prefix"})),a("span",{key:"6cd4e9d9b57ee7fa6404f0e6fd26f3fbde0f2bb3",class:"menu-item__label",part:"label"},a("slot",{key:"9bfa5a772807c16aca216f806dff8f3165af9c4c"})),a("span",{key:"194b24cb2e5b5d41bedb1982ba2c370a1f8e2421",class:"menu-item__suffix",part:"suffix"},a("slot",{key:"a14e9e98baf2a3addcb9870012bcedf169a00f9e",name:"suffix"}))))}static get style(){return r()}},[769,"ts-menu-item",{disabled:[516],value:[513],href:[1],setFocus:[64]}]);function c(){if(typeof customElements==="undefined"){return}const t=["ts-menu-item"];t.forEach((t=>{switch(t){case"ts-menu-item":if(!customElements.get(e(t))){customElements.define(e(t),o)}break}}))}c();export{o as T,c as d};
|
|
2
|
+
//# sourceMappingURL=p-DwUH8YQW.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["menuItemCss","TsMenuItem","__stencil_proxyCustomElement","HTMLElement","disabled","value","href","tsSelect","baseEl","setFocus","this","focus","connectedCallback","hostEl","addEventListener","handleClick","emit","handleKeydown","event","key","preventDefault","render","isLink","Tag","linkAttrs","undefined","h","Host","class","ref","el","part","role","tabindex","onClick","onKeyDown","name"],"sources":["src/components/menu/menu-item.css?tag=ts-menu-item&encapsulation=shadow","src/components/menu/menu-item.tsx"],"sourcesContent":["/* ==========================================================================\n ts-menu-item — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-menu-item-height Item minimum height\n ========================================================================== */\n\n:host {\n display: block;\n font-family: var(--ts-font-family-base);\n\n --ts-menu-item-height: 2.25rem;\n}\n\n/* ---- Base ---- */\n.menu-item__base {\n display: flex;\n align-items: center;\n gap: var(--ts-spacing-2);\n min-block-size: var(--ts-menu-item-height);\n padding-inline: var(--ts-spacing-3);\n padding-block: var(--ts-spacing-1);\n font-size: var(--ts-font-size-sm);\n color: var(--ts-color-text-primary);\n text-decoration: none;\n cursor: pointer;\n transition:\n background-color var(--ts-transition-fast),\n color var(--ts-transition-fast);\n outline: none;\n border: none;\n background: none;\n width: 100%;\n white-space: nowrap;\n}\n\n.menu-item__base:hover:not([aria-disabled=\"true\"]) {\n background-color: var(--ts-color-bg-hover);\n}\n\n.menu-item__base:focus-visible {\n background-color: var(--ts-color-bg-hover);\n box-shadow: inset 0 0 0 2px var(--ts-color-interactive-primary);\n}\n\n/* ---- Disabled ---- */\n:host([disabled]) .menu-item__base {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n/* ---- Slot wrappers ---- */\n.menu-item__prefix,\n.menu-item__suffix {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n}\n\n.menu-item__prefix:empty,\n.menu-item__suffix:empty {\n display: none;\n}\n\n.menu-item__label {\n display: inline-flex;\n align-items: center;\n flex-grow: 1;\n}\n\n.menu-item__suffix {\n margin-inline-start: auto;\n padding-inline-start: var(--ts-spacing-3);\n color: var(--ts-color-text-tertiary);\n font-size: var(--ts-font-size-xs);\n}\n","import { Component, Prop, Event, h, Host, Element, Method } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\n\n/**\n * @slot - Default slot for menu item label content.\n * @slot prefix - Content before the label (e.g., icon).\n * @slot suffix - Content after the label (e.g., shortcut or badge).\n *\n * @part base - The menu item container element.\n * @part prefix - The prefix slot wrapper.\n * @part label - The label wrapper.\n * @part suffix - The suffix slot wrapper.\n */\n@Component({\n tag: 'ts-menu-item',\n styleUrl: 'menu-item.css',\n shadow: true,\n})\nexport class TsMenuItem {\n @Element() hostEl!: HTMLElement;\n\n /** Disables the menu item. */\n @Prop({ reflect: true }) disabled = false;\n\n /** The value associated with this menu item. */\n @Prop({ reflect: true }) value = '';\n\n /** If provided, renders the item as a link. */\n @Prop() href?: string;\n\n /** Emitted when the menu item is selected. */\n @Event({ eventName: 'tsSelect' }) tsSelect!: EventEmitter<{ value: string }>;\n\n private baseEl?: HTMLElement;\n\n /** Focus the menu item. */\n @Method()\n async setFocus(): Promise<void> {\n this.baseEl?.focus();\n }\n\n connectedCallback(): void {\n // Allow the host element to delegate focus to the inner element\n this.hostEl.addEventListener('focus', () => {\n this.baseEl?.focus();\n });\n }\n\n private handleClick = (): void => {\n if (this.disabled) return;\n this.tsSelect.emit({ value: this.value });\n };\n\n private handleKeydown = (event: KeyboardEvent): void => {\n if (this.disabled) return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.tsSelect.emit({ value: this.value });\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n const isLink = !!this.href;\n const Tag = isLink ? 'a' : 'div';\n\n const linkAttrs = isLink\n ? {\n href: this.disabled ? undefined : this.href,\n }\n : {};\n\n return (\n <Host\n class={{\n 'ts-menu-item': true,\n 'ts-menu-item--disabled': this.disabled,\n }}\n >\n <Tag\n {...linkAttrs}\n ref={(el) => (this.baseEl = el as HTMLElement)}\n class=\"menu-item__base\"\n part=\"base\"\n role=\"menuitem\"\n tabindex={this.disabled ? -1 : 0}\n aria-disabled={this.disabled ? 'true' : undefined}\n onClick={this.handleClick}\n onKeyDown={this.handleKeydown}\n >\n <span class=\"menu-item__prefix\" part=\"prefix\">\n <slot name=\"prefix\" />\n </span>\n\n <span class=\"menu-item__label\" part=\"label\">\n <slot />\n </span>\n\n <span class=\"menu-item__suffix\" part=\"suffix\">\n <slot name=\"suffix\" />\n </span>\n </Tag>\n </Host>\n );\n }\n}\n"],"mappings":"uEAAA,MAAMA,EAAc,IAAM,ktC,MCkBbC,EAAUC,EAAA,MAAAD,UAAAE,E,2IAIIC,SAAW,MAGXC,MAAQ,GAGzBC,KAG0BC,SAE1BC,OAIR,cAAMC,GACJC,KAAKF,QAAQG,O,CAGf,iBAAAC,GAEEF,KAAKG,OAAOC,iBAAiB,SAAS,KACpCJ,KAAKF,QAAQG,OAAO,G,CAIhBI,YAAc,KACpB,GAAIL,KAAKN,SAAU,OACnBM,KAAKH,SAASS,KAAK,CAAEX,MAAOK,KAAKL,OAAQ,EAGnCY,cAAiBC,IACvB,GAAIR,KAAKN,SAAU,OACnB,GAAIc,EAAMC,MAAQ,SAAWD,EAAMC,MAAQ,IAAK,CAC9CD,EAAME,iBACNV,KAAKH,SAASS,KAAK,CAAEX,MAAOK,KAAKL,O,GAKrC,MAAAgB,GACE,MAAMC,IAAWZ,KAAKJ,KACtB,MAAMiB,EAAMD,EAAS,IAAM,MAE3B,MAAME,EAAYF,EACd,CACEhB,KAAMI,KAAKN,SAAWqB,UAAYf,KAAKJ,MAEzC,GAEJ,OACEoB,EAACC,EAAI,CAAAR,IAAA,2CACHS,MAAO,CACL,eAAgB,KAChB,yBAA0BlB,KAAKN,WAGjCsB,EAACH,EAAG,CAAAJ,IAAA,8CACEK,EACJK,IAAMC,GAAQpB,KAAKF,OAASsB,EAC5BF,MAAM,kBACNG,KAAK,OACLC,KAAK,WACLC,SAAUvB,KAAKN,UAAW,EAAK,EAAC,gBACjBM,KAAKN,SAAW,OAASqB,UACxCS,QAASxB,KAAKK,YACdoB,UAAWzB,KAAKO,eAEhBS,EAAA,QAAAP,IAAA,2CAAMS,MAAM,oBAAoBG,KAAK,UACnCL,EAAA,QAAAP,IAAA,2CAAMiB,KAAK,YAGbV,EAAA,QAAAP,IAAA,2CAAMS,MAAM,mBAAmBG,KAAK,SAClCL,EAAA,QAAAP,IAAA,8CAGFO,EAAA,QAAAP,IAAA,2CAAMS,MAAM,oBAAoBG,KAAK,UACnCL,EAAA,QAAAP,IAAA,2CAAMiB,KAAK,a","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as s,p as t,H as e,d as i,h as a,c as o}from"./p-DkpyRqHf.js";const r=()=>`:host{display:inline-flex;font-family:var(--ts-font-family-base);--ts-switch-group-bg:var(--ts-color-neutral-100);--ts-switch-group-active-bg:var(--ts-color-bg-elevated);--ts-switch-group-radius:var(--ts-shape-interactive)}:host([full-width]){display:flex;inline-size:100%}.switch-group__base{display:inline-flex;align-items:center;gap:var(--ts-spacing-1);padding:var(--ts-spacing-1);background-color:var(--ts-switch-group-bg);border-radius:var(--ts-switch-group-radius);inline-size:100%}:host([size="sm"]) .switch-group__base{font-size:var(--ts-font-size-sm)}:host([size="md"]) .switch-group__base{font-size:var(--ts-font-size-md)}:host([size="lg"]) .switch-group__base{font-size:var(--ts-font-size-lg)}:host([disabled]){opacity:0.5;pointer-events:none}`;const n=t(class s extends e{constructor(s){super();if(s!==false){this.__registerHost()}this.__attachShadow();this.tsChange=i(this,"tsChange")}get hostEl(){return this}value;size="md";disabled=false;fullWidth=false;tsChange;onValueChange(){this.syncOptions()}handleOptionSelect(s){s.stopPropagation();if(this.disabled)return;this.selectOption(s.detail.value)}handleKeyDown(s){if(this.disabled)return;const t=this.getOptions();const e=t.filter((s=>!s.disabled));if(e.length===0)return;const i=e.findIndex((s=>s.value===this.value));switch(s.key){case"ArrowRight":case"ArrowDown":s.preventDefault();{const s=(i+1)%e.length;this.selectOption(e[s].value)}break;case"ArrowLeft":case"ArrowUp":s.preventDefault();{const s=(i-1+e.length)%e.length;this.selectOption(e[s].value)}break;case"Home":s.preventDefault();this.selectOption(e[0].value);break;case"End":s.preventDefault();this.selectOption(e[e.length-1].value);break}}componentDidLoad(){this.syncOptions()}getOptions(){return Array.from(this.hostEl.querySelectorAll("ts-switch-option"))}selectOption(s){if(s!==this.value){this.value=s;this.tsChange.emit({value:s})}this.syncOptions()}syncOptions(){const s=this.getOptions();s.forEach((s=>{s.active=s.value===this.value}))}handleSlotChange=()=>{this.syncOptions()};render(){return a(o,{key:"211ffe406ac11e248971c5485d88e2855cdcdb77",class:{"ts-switch-group":true,[`ts-switch-group--${this.size}`]:true,"ts-switch-group--disabled":this.disabled,"ts-switch-group--full-width":this.fullWidth},role:"radiogroup"},a("div",{key:"82e39f308c359e8d60cc8349de380fcb08f6b252",class:"switch-group__base",part:"base"},a("slot",{key:"81748d90d92184c0fa3b9c6cf55f32dff3267b46",onSlotchange:this.handleSlotChange})))}static get watchers(){return{value:[{onValueChange:0}]}}static get style(){return r()}},[769,"ts-switch-group",{value:[1537],size:[513],disabled:[516],fullWidth:[516,"full-width"]},[[0,"tsOptionSelect","handleOptionSelect"],[0,"keydown","handleKeyDown"]],{value:[{onValueChange:0}]}]);function c(){if(typeof customElements==="undefined"){return}const t=["ts-switch-group"];t.forEach((t=>{switch(t){case"ts-switch-group":if(!customElements.get(s(t))){customElements.define(s(t),n)}break}}))}c();export{n as T,c as d};
|
|
2
|
+
//# sourceMappingURL=p-Fot2uNwg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["switchGroupCss","TsSwitchGroup","__stencil_proxyCustomElement","HTMLElement","value","size","disabled","fullWidth","tsChange","onValueChange","this","syncOptions","handleOptionSelect","event","stopPropagation","selectOption","detail","handleKeyDown","options","getOptions","enabledOptions","filter","o","length","currentIndex","findIndex","key","preventDefault","nextIndex","prevIndex","componentDidLoad","Array","from","hostEl","querySelectorAll","emit","forEach","option","active","handleSlotChange","render","h","Host","class","role","part","onSlotchange"],"sources":["src/components/switch-group/switch-group.css?tag=ts-switch-group&encapsulation=shadow","src/components/switch-group/switch-group.tsx"],"sourcesContent":["/* ==========================================================================\n ts-switch-group — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-switch-group-bg Background color\n --ts-switch-group-active-bg Active segment background\n --ts-switch-group-radius Border radius\n ========================================================================== */\n\n:host {\n display: inline-flex;\n font-family: var(--ts-font-family-base);\n\n --ts-switch-group-bg: var(--ts-color-neutral-100);\n --ts-switch-group-active-bg: var(--ts-color-bg-elevated);\n --ts-switch-group-radius: var(--ts-shape-interactive);\n}\n\n:host([full-width]) {\n display: flex;\n inline-size: 100%;\n}\n\n.switch-group__base {\n display: inline-flex;\n align-items: center;\n gap: var(--ts-spacing-1);\n padding: var(--ts-spacing-1);\n background-color: var(--ts-switch-group-bg);\n border-radius: var(--ts-switch-group-radius);\n inline-size: 100%;\n}\n\n/* ---- Sizes ---- */\n:host([size=\"sm\"]) .switch-group__base {\n font-size: var(--ts-font-size-sm);\n}\n\n:host([size=\"md\"]) .switch-group__base {\n font-size: var(--ts-font-size-md);\n}\n\n:host([size=\"lg\"]) .switch-group__base {\n font-size: var(--ts-font-size-lg);\n}\n\n/* ---- Disabled ---- */\n:host([disabled]) {\n opacity: 0.5;\n pointer-events: none;\n}\n","import { Component, Prop, Event, h, Host, Element, Listen, Watch } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\nimport type { TsSize } from '../../types';\n\n/**\n * @slot - Default slot for ts-switch-option children.\n *\n * @part base - The switch group container.\n */\n@Component({\n tag: 'ts-switch-group',\n styleUrl: 'switch-group.css',\n shadow: true,\n})\nexport class TsSwitchGroup {\n @Element() hostEl!: HTMLElement;\n\n /** The currently active segment value. */\n @Prop({ reflect: true, mutable: true }) value?: string;\n\n /** The size of the switch group. */\n @Prop({ reflect: true }) size: TsSize = 'md';\n\n /** Disables the entire group. */\n @Prop({ reflect: true }) disabled = false;\n\n /** Stretch to fill the container width. */\n @Prop({ reflect: true }) fullWidth = false;\n\n /** Emitted when the active value changes. */\n @Event({ eventName: 'tsChange' }) tsChange!: EventEmitter<{ value: string }>;\n\n @Watch('value')\n onValueChange(): void {\n this.syncOptions();\n }\n\n @Listen('tsOptionSelect')\n handleOptionSelect(event: CustomEvent<{ value: string }>): void {\n event.stopPropagation();\n if (this.disabled) return;\n this.selectOption(event.detail.value);\n }\n\n @Listen('keydown')\n handleKeyDown(event: KeyboardEvent): void {\n if (this.disabled) return;\n\n const options = this.getOptions();\n const enabledOptions = options.filter(o => !o.disabled);\n if (enabledOptions.length === 0) return;\n\n const currentIndex = enabledOptions.findIndex(o => o.value === this.value);\n\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowDown':\n event.preventDefault();\n {\n const nextIndex = (currentIndex + 1) % enabledOptions.length;\n this.selectOption(enabledOptions[nextIndex].value);\n }\n break;\n case 'ArrowLeft':\n case 'ArrowUp':\n event.preventDefault();\n {\n const prevIndex = (currentIndex - 1 + enabledOptions.length) % enabledOptions.length;\n this.selectOption(enabledOptions[prevIndex].value);\n }\n break;\n case 'Home':\n event.preventDefault();\n this.selectOption(enabledOptions[0].value);\n break;\n case 'End':\n event.preventDefault();\n this.selectOption(enabledOptions[enabledOptions.length - 1].value);\n break;\n }\n }\n\n componentDidLoad(): void {\n this.syncOptions();\n }\n\n private getOptions(): HTMLTsSwitchOptionElement[] {\n return Array.from(this.hostEl.querySelectorAll('ts-switch-option')) as HTMLTsSwitchOptionElement[];\n }\n\n private selectOption(value: string): void {\n if (value !== this.value) {\n this.value = value;\n this.tsChange.emit({ value });\n }\n this.syncOptions();\n }\n\n private syncOptions(): void {\n const options = this.getOptions();\n options.forEach(option => {\n (option as unknown as { active: boolean }).active = option.value === this.value;\n });\n }\n\n private handleSlotChange = (): void => {\n this.syncOptions();\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host\n class={{\n 'ts-switch-group': true,\n [`ts-switch-group--${this.size}`]: true,\n 'ts-switch-group--disabled': this.disabled,\n 'ts-switch-group--full-width': this.fullWidth,\n }}\n role=\"radiogroup\"\n >\n <div class=\"switch-group__base\" part=\"base\">\n <slot onSlotchange={this.handleSlotChange} />\n </div>\n </Host>\n );\n }\n}\n\ninterface HTMLTsSwitchOptionElement extends HTMLElement {\n value: string;\n disabled: boolean;\n active: boolean;\n}\n"],"mappings":"uEAAA,MAAMA,EAAiB,IAAM,qvB,MCchBC,EAAaC,EAAA,MAAAD,UAAAE,E,2IAIgBC,MAGfC,KAAe,KAGfC,SAAW,MAGXC,UAAY,MAGHC,SAGlC,aAAAC,GACEC,KAAKC,a,CAIP,kBAAAC,CAAmBC,GACjBA,EAAMC,kBACN,GAAIJ,KAAKJ,SAAU,OACnBI,KAAKK,aAAaF,EAAMG,OAAOZ,M,CAIjC,aAAAa,CAAcJ,GACZ,GAAIH,KAAKJ,SAAU,OAEnB,MAAMY,EAAUR,KAAKS,aACrB,MAAMC,EAAiBF,EAAQG,QAAOC,IAAMA,EAAEhB,WAC9C,GAAIc,EAAeG,SAAW,EAAG,OAEjC,MAAMC,EAAeJ,EAAeK,WAAUH,GAAKA,EAAElB,QAAUM,KAAKN,QAEpE,OAAQS,EAAMa,KACZ,IAAK,aACL,IAAK,YACHb,EAAMc,iBACN,CACE,MAAMC,GAAaJ,EAAe,GAAKJ,EAAeG,OACtDb,KAAKK,aAAaK,EAAeQ,GAAWxB,M,CAE9C,MACF,IAAK,YACL,IAAK,UACHS,EAAMc,iBACN,CACE,MAAME,GAAaL,EAAe,EAAIJ,EAAeG,QAAUH,EAAeG,OAC9Eb,KAAKK,aAAaK,EAAeS,GAAWzB,M,CAE9C,MACF,IAAK,OACHS,EAAMc,iBACNjB,KAAKK,aAAaK,EAAe,GAAGhB,OACpC,MACF,IAAK,MACHS,EAAMc,iBACNjB,KAAKK,aAAaK,EAAeA,EAAeG,OAAS,GAAGnB,OAC5D,M,CAIN,gBAAA0B,GACEpB,KAAKC,a,CAGC,UAAAQ,GACN,OAAOY,MAAMC,KAAKtB,KAAKuB,OAAOC,iBAAiB,oB,CAGzC,YAAAnB,CAAaX,GACnB,GAAIA,IAAUM,KAAKN,MAAO,CACxBM,KAAKN,MAAQA,EACbM,KAAKF,SAAS2B,KAAK,CAAE/B,S,CAEvBM,KAAKC,a,CAGC,WAAAA,GACN,MAAMO,EAAUR,KAAKS,aACrBD,EAAQkB,SAAQC,IACbA,EAA0CC,OAASD,EAAOjC,QAAUM,KAAKN,KAAK,G,CAI3EmC,iBAAmB,KACzB7B,KAAKC,aAAa,EAIpB,MAAA6B,GACE,OACEC,EAACC,EAAI,CAAAhB,IAAA,2CACHiB,MAAO,CACL,kBAAmB,KACnB,CAAC,oBAAoBjC,KAAKL,QAAS,KACnC,4BAA6BK,KAAKJ,SAClC,8BAA+BI,KAAKH,WAEtCqC,KAAK,cAELH,EAAA,OAAAf,IAAA,2CAAKiB,MAAM,qBAAqBE,KAAK,QACnCJ,EAAA,QAAAf,IAAA,2CAAMoB,aAAcpC,KAAK6B,oB","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as a,p as s,H as t,d as i,h as e,c as o}from"./p-DkpyRqHf.js";import{g as n,t as l}from"./p-lpqZSiIf.js";const r=()=>`:host{font-family:var(--ts-font-family-base);--ts-dialog-bg:var(--ts-color-bg-elevated);--ts-dialog-radius:var(--ts-shape-overlay);--ts-dialog-shadow:var(--ts-shadow-xl);--ts-dialog-overlay-bg:var(--ts-color-bg-overlay)}.dialog__overlay{position:fixed;inset:0;z-index:var(--ts-z-modal);display:flex;align-items:center;justify-content:center;padding:var(--ts-spacing-4);background-color:var(--ts-dialog-overlay-bg);animation:ts-dialog-fade-in 200ms ease-out}.dialog__panel{position:relative;background-color:var(--ts-dialog-bg);border-radius:var(--ts-dialog-radius);box-shadow:var(--ts-dialog-shadow);max-height:calc(100vh - var(--ts-spacing-16));overflow-y:auto;animation:ts-dialog-scale-in 250ms cubic-bezier(0.16, 1, 0.3, 1);outline:none}.dialog__panel--sm{width:100%;max-width:400px}.dialog__panel--md{width:100%;max-width:520px}.dialog__panel--lg{width:100%;max-width:680px}.dialog__close{position:absolute;inset-block-start:var(--ts-spacing-3);inset-inline-end:var(--ts-spacing-3);display:flex;align-items:center;justify-content:center;width:2rem;height:2rem;border:none;border-radius:var(--ts-radius-md);background:transparent;color:var(--ts-color-text-tertiary);font-size:var(--ts-font-size-md);cursor:pointer;transition:background-color var(--ts-transition-fast), color var(--ts-transition-fast);z-index:1;padding:0;line-height:1}.dialog__close:hover{background-color:var(--ts-color-bg-hover);color:var(--ts-color-text-secondary)}.dialog__close:focus-visible{box-shadow:var(--ts-focus-ring)}.dialog__header{padding:var(--ts-spacing-5) var(--ts-spacing-6) var(--ts-spacing-3);font-size:var(--ts-font-size-lg);font-weight:var(--ts-font-weight-semi);color:var(--ts-color-text-primary);padding-inline-end:var(--ts-spacing-10)}.dialog__body{padding:var(--ts-spacing-3) var(--ts-spacing-6);font-size:var(--ts-font-size-md);color:var(--ts-color-text-secondary);line-height:var(--ts-line-height-normal)}.dialog__footer{padding:var(--ts-spacing-3) var(--ts-spacing-6) var(--ts-spacing-5);display:flex;align-items:center;justify-content:flex-end;gap:var(--ts-spacing-2)}.dialog__footer:empty{display:none}@keyframes ts-dialog-fade-in{from{opacity:0}to{opacity:1}}@keyframes ts-dialog-scale-in{from{opacity:0;transform:scale(0.95) translateY(8px)}to{opacity:1;transform:scale(1) translateY(0)}}`;const d=s(class a extends t{constructor(a){super();if(a!==false){this.__registerHost()}this.__attachShadow();this.tsClose=i(this,"tsClose")}get hostEl(){return this}dialogEl;removeFocusTrap;previouslyFocused;dialogId=n("ts-dialog");open=false;heading;size="sm";dismissible=true;tsClose;isAnimating=false;handleOpenChange(a){if(a){this.openDialog()}else{this.closeDialog()}}async show(){this.open=true}async close(){this.open=false}openDialog(){this.previouslyFocused=document.activeElement;this.isAnimating=true;document.body.style.overflow="hidden";requestAnimationFrame((()=>{if(this.dialogEl){this.removeFocusTrap=l(this.dialogEl);this.dialogEl.focus()}}))}closeDialog(){this.isAnimating=false;this.tsClose.emit();document.body.style.overflow="";this.removeFocusTrap?.();this.previouslyFocused?.focus()}disconnectedCallback(){this.removeFocusTrap?.();document.body.style.overflow=""}handleOverlayClick=()=>{if(this.dismissible){this.close()}};handleDialogClick=a=>{a.stopPropagation()};handleKeydown=a=>{if(a.key==="Escape"&&this.dismissible){a.stopPropagation();this.close()}};handleCloseClick=()=>{this.close()};render(){if(!this.open)return null;const a=`${this.dialogId}-heading`;return e(o,{class:{"ts-dialog":true,"ts-dialog--open":this.open},onKeyDown:this.handleKeydown},e("div",{class:"dialog__overlay",part:"overlay",onClick:this.handleOverlayClick},e("div",{ref:a=>this.dialogEl=a,class:{dialog__panel:true,[`dialog__panel--${this.size}`]:true},part:"dialog",role:"dialog","aria-modal":"true","aria-labelledby":this.heading?a:undefined,tabindex:-1,onClick:this.handleDialogClick},this.dismissible&&e("button",{class:"dialog__close",part:"close",type:"button","aria-label":"Close dialog",onClick:this.handleCloseClick},"✕"),this.heading&&e("div",{class:"dialog__header",part:"header",id:a},this.heading),e("div",{class:"dialog__body",part:"body"},e("slot",null)),e("div",{class:"dialog__footer",part:"footer"},e("slot",{name:"footer"})))))}static get watchers(){return{open:[{handleOpenChange:0}]}}static get style(){return r()}},[769,"ts-dialog",{open:[1540],heading:[1],size:[513],dismissible:[4],isAnimating:[32],show:[64],close:[64]},undefined,{open:[{handleOpenChange:0}]}]);function c(){if(typeof customElements==="undefined"){return}const s=["ts-dialog"];s.forEach((s=>{switch(s){case"ts-dialog":if(!customElements.get(a(s))){customElements.define(a(s),d)}break}}))}c();export{d as T,c as d};
|
|
2
|
+
//# sourceMappingURL=p-O8aQgWRZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["dialogCss","TsDialog","__stencil_proxyCustomElement","HTMLElement","dialogEl","removeFocusTrap","previouslyFocused","dialogId","generateId","open","heading","size","dismissible","tsClose","isAnimating","handleOpenChange","isOpen","this","openDialog","closeDialog","show","close","document","activeElement","body","style","overflow","requestAnimationFrame","trapFocus","focus","emit","disconnectedCallback","handleOverlayClick","handleDialogClick","event","stopPropagation","handleKeydown","key","handleCloseClick","render","headingId","h","Host","class","onKeyDown","part","onClick","ref","el","dialog__panel","role","undefined","tabindex","type","id","name"],"sources":["src/components/dialog/dialog.css?tag=ts-dialog&encapsulation=shadow","src/components/dialog/dialog.tsx"],"sourcesContent":["/* ==========================================================================\n ts-dialog — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-dialog-bg Dialog background\n --ts-dialog-radius Dialog border radius\n --ts-dialog-shadow Dialog box-shadow\n --ts-dialog-overlay-bg Overlay background\n ========================================================================== */\n\n:host {\n font-family: var(--ts-font-family-base);\n\n --ts-dialog-bg: var(--ts-color-bg-elevated);\n --ts-dialog-radius: var(--ts-shape-overlay);\n --ts-dialog-shadow: var(--ts-shadow-xl);\n --ts-dialog-overlay-bg: var(--ts-color-bg-overlay);\n}\n\n/* ---- Overlay ---- */\n.dialog__overlay {\n position: fixed;\n inset: 0;\n z-index: var(--ts-z-modal);\n display: flex;\n align-items: center;\n justify-content: center;\n padding: var(--ts-spacing-4);\n background-color: var(--ts-dialog-overlay-bg);\n animation: ts-dialog-fade-in 200ms ease-out;\n}\n\n/* ---- Panel ---- */\n.dialog__panel {\n position: relative;\n background-color: var(--ts-dialog-bg);\n border-radius: var(--ts-dialog-radius);\n box-shadow: var(--ts-dialog-shadow);\n max-height: calc(100vh - var(--ts-spacing-16));\n overflow-y: auto;\n animation: ts-dialog-scale-in 250ms cubic-bezier(0.16, 1, 0.3, 1);\n outline: none;\n}\n\n/* ---- Sizes ---- */\n.dialog__panel--sm { width: 100%; max-width: 400px; }\n.dialog__panel--md { width: 100%; max-width: 520px; }\n.dialog__panel--lg { width: 100%; max-width: 680px; }\n\n/* ---- Close Button ---- */\n.dialog__close {\n position: absolute;\n inset-block-start: var(--ts-spacing-3);\n inset-inline-end: var(--ts-spacing-3);\n display: flex;\n align-items: center;\n justify-content: center;\n width: 2rem;\n height: 2rem;\n border: none;\n border-radius: var(--ts-radius-md);\n background: transparent;\n color: var(--ts-color-text-tertiary);\n font-size: var(--ts-font-size-md);\n cursor: pointer;\n transition:\n background-color var(--ts-transition-fast),\n color var(--ts-transition-fast);\n z-index: 1;\n padding: 0;\n line-height: 1;\n}\n\n.dialog__close:hover {\n background-color: var(--ts-color-bg-hover);\n color: var(--ts-color-text-secondary);\n}\n\n.dialog__close:focus-visible {\n box-shadow: var(--ts-focus-ring);\n}\n\n/* ---- Header ---- */\n.dialog__header {\n padding: var(--ts-spacing-5) var(--ts-spacing-6) var(--ts-spacing-3);\n font-size: var(--ts-font-size-lg);\n font-weight: var(--ts-font-weight-semi);\n color: var(--ts-color-text-primary);\n padding-inline-end: var(--ts-spacing-10);\n}\n\n/* ---- Body ---- */\n.dialog__body {\n padding: var(--ts-spacing-3) var(--ts-spacing-6);\n font-size: var(--ts-font-size-md);\n color: var(--ts-color-text-secondary);\n line-height: var(--ts-line-height-normal);\n}\n\n/* ---- Footer ---- */\n.dialog__footer {\n padding: var(--ts-spacing-3) var(--ts-spacing-6) var(--ts-spacing-5);\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: var(--ts-spacing-2);\n}\n\n.dialog__footer:empty {\n display: none;\n}\n\n/* ---- Animations ---- */\n@keyframes ts-dialog-fade-in {\n from { opacity: 0; }\n to { opacity: 1; }\n}\n\n@keyframes ts-dialog-scale-in {\n from {\n opacity: 0;\n transform: scale(0.95) translateY(8px);\n }\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n}\n","import { Component, Prop, State, Event, h, Host, Element, Watch, Method } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\nimport { generateId, trapFocus } from '../../utils/aria';\n\n/**\n * @slot - Default slot for dialog body content.\n * @slot footer - Footer content (e.g., action buttons).\n *\n * @part overlay - The backdrop overlay.\n * @part dialog - The dialog container.\n * @part header - The heading wrapper.\n * @part body - The body content wrapper.\n * @part footer - The footer wrapper.\n * @part close - The close button.\n */\n@Component({\n tag: 'ts-dialog',\n styleUrl: 'dialog.css',\n shadow: true,\n})\nexport class TsDialog {\n @Element() hostEl!: HTMLElement;\n\n private dialogEl?: HTMLElement;\n private removeFocusTrap?: () => void;\n private previouslyFocused?: HTMLElement;\n private dialogId = generateId('ts-dialog');\n\n /** Whether the dialog is open. */\n @Prop({ mutable: true, reflect: true }) open = false;\n\n /** The dialog heading text. */\n @Prop() heading?: string;\n\n /** The dialog's width size preset. */\n @Prop({ reflect: true }) size: 'sm' | 'md' | 'lg' = 'sm';\n\n /** Whether the dialog can be dismissed via close button, Escape, or overlay click. */\n @Prop() dismissible = true;\n\n /** Emitted when the dialog is closed. */\n @Event({ eventName: 'tsClose' }) tsClose!: EventEmitter<void>;\n\n /** Internal animation state. */\n @State() isAnimating = false;\n\n @Watch('open')\n handleOpenChange(isOpen: boolean): void {\n if (isOpen) {\n this.openDialog();\n } else {\n this.closeDialog();\n }\n }\n\n /** Programmatically open the dialog. */\n @Method()\n async show(): Promise<void> {\n this.open = true;\n }\n\n /** Programmatically close the dialog. */\n @Method()\n async close(): Promise<void> {\n this.open = false;\n }\n\n private openDialog(): void {\n this.previouslyFocused = document.activeElement as HTMLElement;\n this.isAnimating = true;\n\n document.body.style.overflow = 'hidden';\n\n requestAnimationFrame(() => {\n if (this.dialogEl) {\n this.removeFocusTrap = trapFocus(this.dialogEl);\n this.dialogEl.focus();\n }\n });\n }\n\n private closeDialog(): void {\n this.isAnimating = false;\n this.tsClose.emit();\n\n document.body.style.overflow = '';\n\n this.removeFocusTrap?.();\n this.previouslyFocused?.focus();\n }\n\n disconnectedCallback(): void {\n this.removeFocusTrap?.();\n document.body.style.overflow = '';\n }\n\n private handleOverlayClick = (): void => {\n if (this.dismissible) {\n this.close();\n }\n };\n\n private handleDialogClick = (event: MouseEvent): void => {\n event.stopPropagation();\n };\n\n private handleKeydown = (event: KeyboardEvent): void => {\n if (event.key === 'Escape' && this.dismissible) {\n event.stopPropagation();\n this.close();\n }\n };\n\n private handleCloseClick = (): void => {\n this.close();\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n if (!this.open) return null;\n\n const headingId = `${this.dialogId}-heading`;\n\n return (\n <Host\n class={{\n 'ts-dialog': true,\n 'ts-dialog--open': this.open,\n }}\n onKeyDown={this.handleKeydown}\n >\n <div class=\"dialog__overlay\" part=\"overlay\" onClick={this.handleOverlayClick}>\n <div\n ref={(el) => (this.dialogEl = el)}\n class={{\n 'dialog__panel': true,\n [`dialog__panel--${this.size}`]: true,\n }}\n part=\"dialog\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={this.heading ? headingId : undefined}\n tabindex={-1}\n onClick={this.handleDialogClick}\n >\n {this.dismissible && (\n <button\n class=\"dialog__close\"\n part=\"close\"\n type=\"button\"\n aria-label=\"Close dialog\"\n onClick={this.handleCloseClick}\n >\n ✕\n </button>\n )}\n\n {this.heading && (\n <div class=\"dialog__header\" part=\"header\" id={headingId}>\n {this.heading}\n </div>\n )}\n\n <div class=\"dialog__body\" part=\"body\">\n <slot />\n </div>\n\n <div class=\"dialog__footer\" part=\"footer\">\n <slot name=\"footer\" />\n </div>\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"kHAAA,MAAMA,EAAY,IAAM,0vE,MCoBXC,EAAQC,EAAA,MAAAD,UAAAE,E,yIAGXC,SACAC,gBACAC,kBACAC,SAAWC,EAAW,aAGUC,KAAO,MAGvCC,QAGiBC,KAA2B,KAG5CC,YAAc,KAGWC,QAGxBC,YAAc,MAGvB,gBAAAC,CAAiBC,GACf,GAAIA,EAAQ,CACVC,KAAKC,Y,KACA,CACLD,KAAKE,a,EAMT,UAAMC,GACJH,KAAKR,KAAO,I,CAKd,WAAMY,GACJJ,KAAKR,KAAO,K,CAGN,UAAAS,GACND,KAAKX,kBAAoBgB,SAASC,cAClCN,KAAKH,YAAc,KAEnBQ,SAASE,KAAKC,MAAMC,SAAW,SAE/BC,uBAAsB,KACpB,GAAIV,KAAKb,SAAU,CACjBa,KAAKZ,gBAAkBuB,EAAUX,KAAKb,UACtCa,KAAKb,SAASyB,O,KAKZ,WAAAV,GACNF,KAAKH,YAAc,MACnBG,KAAKJ,QAAQiB,OAEbR,SAASE,KAAKC,MAAMC,SAAW,GAE/BT,KAAKZ,oBACLY,KAAKX,mBAAmBuB,O,CAG1B,oBAAAE,GACEd,KAAKZ,oBACLiB,SAASE,KAAKC,MAAMC,SAAW,E,CAGzBM,mBAAqB,KAC3B,GAAIf,KAAKL,YAAa,CACpBK,KAAKI,O,GAIDY,kBAAqBC,IAC3BA,EAAMC,iBAAiB,EAGjBC,cAAiBF,IACvB,GAAIA,EAAMG,MAAQ,UAAYpB,KAAKL,YAAa,CAC9CsB,EAAMC,kBACNlB,KAAKI,O,GAIDiB,iBAAmB,KACzBrB,KAAKI,OAAO,EAId,MAAAkB,GACE,IAAKtB,KAAKR,KAAM,OAAO,KAEvB,MAAM+B,EAAY,GAAGvB,KAAKV,mBAE1B,OACEkC,EAACC,EAAI,CACHC,MAAO,CACL,YAAa,KACb,kBAAmB1B,KAAKR,MAE1BmC,UAAW3B,KAAKmB,eAEhBK,EAAA,OAAKE,MAAM,kBAAkBE,KAAK,UAAUC,QAAS7B,KAAKe,oBACxDS,EAAA,OACEM,IAAMC,GAAQ/B,KAAKb,SAAW4C,EAC9BL,MAAO,CACLM,cAAiB,KACjB,CAAC,kBAAkBhC,KAAKN,QAAS,MAEnCkC,KAAK,SACLK,KAAK,SAAQ,aACF,OAAM,kBACAjC,KAAKP,QAAU8B,EAAYW,UAC5CC,UAAU,EACVN,QAAS7B,KAAKgB,mBAEbhB,KAAKL,aACJ6B,EAAA,UACEE,MAAM,gBACNE,KAAK,QACLQ,KAAK,SAAQ,aACF,eACXP,QAAS7B,KAAKqB,kBAAgB,KAMjCrB,KAAKP,SACJ+B,EAAA,OAAKE,MAAM,iBAAiBE,KAAK,SAASS,GAAId,GAC3CvB,KAAKP,SAIV+B,EAAA,OAAKE,MAAM,eAAeE,KAAK,QAC7BJ,EAAA,cAGFA,EAAA,OAAKE,MAAM,iBAAiBE,KAAK,UAC/BJ,EAAA,QAAMc,KAAK,c","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as r,p as o,H as t,d as e,h as s,c as a}from"./p-DkpyRqHf.js";const i=()=>`:host{display:inline-block;vertical-align:middle;font-family:var(--ts-font-family-base);--ts-chip-radius:var(--ts-radius-full, 9999px);--ts-chip-height:2rem}.chip__base{display:inline-flex;align-items:center;gap:var(--ts-spacing-1);block-size:var(--ts-chip-height);padding-inline:var(--ts-spacing-3);border-radius:var(--ts-chip-radius);font-size:var(--ts-font-size-sm);font-weight:var(--ts-font-weight-medium);line-height:1;cursor:pointer;user-select:none;border:1px solid transparent;outline:none;transition:background-color var(--ts-transition-fast), border-color var(--ts-transition-fast), color var(--ts-transition-fast), box-shadow var(--ts-transition-fast)}.chip__base:focus-visible{box-shadow:var(--ts-focus-ring)}:host([size="sm"]){--ts-chip-height:1.5rem}:host([size="sm"]) .chip__base{padding-inline:var(--ts-spacing-2);font-size:var(--ts-font-size-xs)}:host([size="lg"]){--ts-chip-height:2.5rem}:host([size="lg"]) .chip__base{padding-inline:var(--ts-spacing-4);font-size:var(--ts-font-size-md)}:host([variant="neutral"]:not([outline])) .chip__base{background-color:var(--ts-color-neutral-200);color:var(--ts-color-text-primary)}:host([variant="neutral"]:not([outline])) .chip__base:hover{background-color:var(--ts-color-neutral-300)}:host([variant="primary"]:not([outline])) .chip__base{background-color:var(--ts-color-primary-100, var(--ts-color-primary-500));color:var(--ts-color-primary-700, var(--ts-color-text-primary))}:host([variant="primary"]:not([outline])) .chip__base:hover{background-color:var(--ts-color-primary-200, var(--ts-color-primary-600))}:host([variant="success"]:not([outline])) .chip__base{background-color:var(--ts-color-success-bg);color:var(--ts-color-success-600)}:host([variant="warning"]:not([outline])) .chip__base{background-color:var(--ts-color-warning-bg);color:var(--ts-color-warning-600)}:host([variant="danger"]:not([outline])) .chip__base{background-color:var(--ts-color-danger-bg);color:var(--ts-color-danger-600)}:host([variant="info"]:not([outline])) .chip__base{background-color:var(--ts-color-info-bg);color:var(--ts-color-info-600)}:host([variant="secondary"]:not([outline])) .chip__base{background-color:var(--ts-color-neutral-100);color:var(--ts-color-text-secondary)}:host([outline]) .chip__base{background-color:transparent}:host([outline][variant="neutral"]) .chip__base{border-color:var(--ts-color-border-strong);color:var(--ts-color-text-secondary)}:host([outline][variant="neutral"]) .chip__base:hover{background-color:var(--ts-color-bg-subtle)}:host([outline][variant="primary"]) .chip__base{border-color:var(--ts-color-primary-500);color:var(--ts-color-primary-600)}:host([outline][variant="primary"]) .chip__base:hover{background-color:var(--ts-color-primary-100, var(--ts-color-interactive-primary-subtle))}:host([outline][variant="danger"]) .chip__base{border-color:var(--ts-color-danger-500);color:var(--ts-color-danger-600)}:host([outline][variant="success"]) .chip__base{border-color:var(--ts-color-success-500, var(--ts-color-success-border));color:var(--ts-color-success-600)}:host([outline][variant="warning"]) .chip__base{border-color:var(--ts-color-warning-500, var(--ts-color-warning-border));color:var(--ts-color-warning-600)}:host([outline][variant="info"]) .chip__base{border-color:var(--ts-color-info-500, var(--ts-color-info-border));color:var(--ts-color-info-600)}:host([selected]) .chip__base{background-color:var(--ts-color-interactive-primary);color:var(--ts-color-text-on-primary);border-color:var(--ts-color-interactive-primary)}:host([selected]) .chip__base:hover{background-color:var(--ts-color-interactive-primary-hover);border-color:var(--ts-color-interactive-primary-hover)}:host([disabled]) .chip__base{opacity:0.5;cursor:not-allowed;pointer-events:none}.chip__prefix{display:inline-flex;align-items:center}.chip__prefix:empty{display:none}.chip__label{display:inline-flex;align-items:center}.chip__remove{display:inline-flex;align-items:center;justify-content:center;inline-size:1.1em;block-size:1.1em;border:none;border-radius:50%;background:transparent;color:currentColor;opacity:0.6;cursor:pointer;font-size:0.75em;padding:0;margin-inline-start:var(--ts-spacing-1);line-height:1;transition:opacity var(--ts-transition-fast)}.chip__remove:hover{opacity:1}.chip__remove:focus-visible{box-shadow:var(--ts-focus-ring);opacity:1}.chip__remove:disabled{cursor:not-allowed;pointer-events:none}`;const n=o(class r extends t{constructor(r){super();if(r!==false){this.__registerHost()}this.__attachShadow();this.tsRemove=e(this,"tsRemove");this.tsClick=e(this,"tsClick")}variant="neutral";size="md";removable=false;disabled=false;selected=false;outline=false;tsRemove;tsClick;handleClick=()=>{if(this.disabled)return;this.tsClick.emit()};handleRemove=r=>{r.stopPropagation();if(this.disabled)return;this.tsRemove.emit()};handleKeydown=r=>{if(this.disabled)return;if(r.key==="Enter"||r.key===" "){r.preventDefault();this.tsClick.emit()}};handleRemoveKeydown=r=>{if(this.disabled)return;if(r.key==="Enter"||r.key===" "){r.preventDefault();r.stopPropagation();this.tsRemove.emit()}};render(){const r=!this.disabled;return s(a,{key:"cf6fed27509592a4105f794976e8995ca03ddecd",class:{"ts-chip":true,[`ts-chip--${this.variant}`]:true,[`ts-chip--${this.size}`]:true,"ts-chip--selected":this.selected,"ts-chip--outline":this.outline,"ts-chip--disabled":this.disabled,"ts-chip--removable":this.removable}},s("span",{key:"355bf33f71eb0761f766a5363bc317066dfc1b5c",class:"chip__base",part:"base",role:"button",tabindex:r?"0":undefined,"aria-disabled":this.disabled?"true":undefined,"aria-pressed":this.selected?"true":undefined,onClick:this.handleClick,onKeyDown:this.handleKeydown},s("span",{key:"8476fe8599f535022b2afc7c6229bd92ea3549ff",class:"chip__prefix",part:"prefix"},s("slot",{key:"2379133e14d192afd474e06ce3a2140a6a7dcfa7",name:"prefix"})),s("span",{key:"8a1053c6315f717a12fc61f0dc3ffeb458a6fbb2",class:"chip__label",part:"label"},s("slot",{key:"3d46aefd8fd7a03d6bd3d21d5679a6b90361b1ed"})),this.removable&&s("button",{key:"41de0966096540a5f9f29168a181a353661ee934",class:"chip__remove",part:"remove",type:"button","aria-label":"Remove",disabled:this.disabled,onClick:this.handleRemove,onKeyDown:this.handleRemoveKeydown},"\\u2715")))}static get style(){return i()}},[769,"ts-chip",{variant:[513],size:[513],removable:[516],disabled:[516],selected:[516],outline:[516]}]);function c(){if(typeof customElements==="undefined"){return}const o=["ts-chip"];o.forEach((o=>{switch(o){case"ts-chip":if(!customElements.get(r(o))){customElements.define(r(o),n)}break}}))}c();export{n as T,c as d};
|
|
2
|
+
//# sourceMappingURL=p-SopsdO_f.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["chipCss","TsChip","__stencil_proxyCustomElement","HTMLElement","variant","size","removable","disabled","selected","outline","tsRemove","tsClick","handleClick","this","emit","handleRemove","event","stopPropagation","handleKeydown","key","preventDefault","handleRemoveKeydown","render","isInteractive","h","Host","class","part","role","tabindex","undefined","onClick","onKeyDown","name","type"],"sources":["src/components/chip/chip.css?tag=ts-chip&encapsulation=shadow","src/components/chip/chip.tsx"],"sourcesContent":["/* ==========================================================================\n ts-chip — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-chip-radius Border radius (pill shape)\n --ts-chip-height Chip height per size\n ========================================================================== */\n\n:host {\n display: inline-block;\n vertical-align: middle;\n font-family: var(--ts-font-family-base);\n\n --ts-chip-radius: var(--ts-radius-full, 9999px);\n --ts-chip-height: 2rem;\n}\n\n/* ---- Base ---- */\n.chip__base {\n display: inline-flex;\n align-items: center;\n gap: var(--ts-spacing-1);\n block-size: var(--ts-chip-height);\n padding-inline: var(--ts-spacing-3);\n border-radius: var(--ts-chip-radius);\n font-size: var(--ts-font-size-sm);\n font-weight: var(--ts-font-weight-medium);\n line-height: 1;\n cursor: pointer;\n user-select: none;\n border: 1px solid transparent;\n outline: none;\n transition:\n background-color var(--ts-transition-fast),\n border-color var(--ts-transition-fast),\n color var(--ts-transition-fast),\n box-shadow var(--ts-transition-fast);\n}\n\n.chip__base:focus-visible {\n box-shadow: var(--ts-focus-ring);\n}\n\n/* ---- Sizes ---- */\n:host([size=\"sm\"]) {\n --ts-chip-height: 1.5rem;\n}\n:host([size=\"sm\"]) .chip__base {\n padding-inline: var(--ts-spacing-2);\n font-size: var(--ts-font-size-xs);\n}\n\n:host([size=\"lg\"]) {\n --ts-chip-height: 2.5rem;\n}\n:host([size=\"lg\"]) .chip__base {\n padding-inline: var(--ts-spacing-4);\n font-size: var(--ts-font-size-md);\n}\n\n/* ---- Solid Variants ---- */\n:host([variant=\"neutral\"]:not([outline])) .chip__base {\n background-color: var(--ts-color-neutral-200);\n color: var(--ts-color-text-primary);\n}\n:host([variant=\"neutral\"]:not([outline])) .chip__base:hover {\n background-color: var(--ts-color-neutral-300);\n}\n\n:host([variant=\"primary\"]:not([outline])) .chip__base {\n background-color: var(--ts-color-primary-100, var(--ts-color-primary-500));\n color: var(--ts-color-primary-700, var(--ts-color-text-primary));\n}\n:host([variant=\"primary\"]:not([outline])) .chip__base:hover {\n background-color: var(--ts-color-primary-200, var(--ts-color-primary-600));\n}\n\n:host([variant=\"success\"]:not([outline])) .chip__base {\n background-color: var(--ts-color-success-bg);\n color: var(--ts-color-success-600);\n}\n\n:host([variant=\"warning\"]:not([outline])) .chip__base {\n background-color: var(--ts-color-warning-bg);\n color: var(--ts-color-warning-600);\n}\n\n:host([variant=\"danger\"]:not([outline])) .chip__base {\n background-color: var(--ts-color-danger-bg);\n color: var(--ts-color-danger-600);\n}\n\n:host([variant=\"info\"]:not([outline])) .chip__base {\n background-color: var(--ts-color-info-bg);\n color: var(--ts-color-info-600);\n}\n\n:host([variant=\"secondary\"]:not([outline])) .chip__base {\n background-color: var(--ts-color-neutral-100);\n color: var(--ts-color-text-secondary);\n}\n\n/* ---- Outline Variants ---- */\n:host([outline]) .chip__base {\n background-color: transparent;\n}\n\n:host([outline][variant=\"neutral\"]) .chip__base {\n border-color: var(--ts-color-border-strong);\n color: var(--ts-color-text-secondary);\n}\n:host([outline][variant=\"neutral\"]) .chip__base:hover {\n background-color: var(--ts-color-bg-subtle);\n}\n\n:host([outline][variant=\"primary\"]) .chip__base {\n border-color: var(--ts-color-primary-500);\n color: var(--ts-color-primary-600);\n}\n:host([outline][variant=\"primary\"]) .chip__base:hover {\n background-color: var(--ts-color-primary-100, var(--ts-color-interactive-primary-subtle));\n}\n\n:host([outline][variant=\"danger\"]) .chip__base {\n border-color: var(--ts-color-danger-500);\n color: var(--ts-color-danger-600);\n}\n\n:host([outline][variant=\"success\"]) .chip__base {\n border-color: var(--ts-color-success-500, var(--ts-color-success-border));\n color: var(--ts-color-success-600);\n}\n\n:host([outline][variant=\"warning\"]) .chip__base {\n border-color: var(--ts-color-warning-500, var(--ts-color-warning-border));\n color: var(--ts-color-warning-600);\n}\n\n:host([outline][variant=\"info\"]) .chip__base {\n border-color: var(--ts-color-info-500, var(--ts-color-info-border));\n color: var(--ts-color-info-600);\n}\n\n/* ---- Selected state ---- */\n:host([selected]) .chip__base {\n background-color: var(--ts-color-interactive-primary);\n color: var(--ts-color-text-on-primary);\n border-color: var(--ts-color-interactive-primary);\n}\n:host([selected]) .chip__base:hover {\n background-color: var(--ts-color-interactive-primary-hover);\n border-color: var(--ts-color-interactive-primary-hover);\n}\n\n/* ---- Disabled ---- */\n:host([disabled]) .chip__base {\n opacity: 0.5;\n cursor: not-allowed;\n pointer-events: none;\n}\n\n/* ---- Prefix ---- */\n.chip__prefix {\n display: inline-flex;\n align-items: center;\n}\n\n.chip__prefix:empty {\n display: none;\n}\n\n/* ---- Label ---- */\n.chip__label {\n display: inline-flex;\n align-items: center;\n}\n\n/* ---- Remove button ---- */\n.chip__remove {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n inline-size: 1.1em;\n block-size: 1.1em;\n border: none;\n border-radius: 50%;\n background: transparent;\n color: currentColor;\n opacity: 0.6;\n cursor: pointer;\n font-size: 0.75em;\n padding: 0;\n margin-inline-start: var(--ts-spacing-1);\n line-height: 1;\n transition: opacity var(--ts-transition-fast);\n}\n\n.chip__remove:hover {\n opacity: 1;\n}\n\n.chip__remove:focus-visible {\n box-shadow: var(--ts-focus-ring);\n opacity: 1;\n}\n\n.chip__remove:disabled {\n cursor: not-allowed;\n pointer-events: none;\n}\n","import { Component, Prop, Event, h, Host } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\nimport type { TsVariant, TsSize } from '../../types';\n\n/**\n * @slot - Default slot for chip label.\n * @slot prefix - Icon or content before the label.\n *\n * @part base - The chip container.\n * @part label - The label wrapper.\n * @part prefix - The prefix slot wrapper.\n * @part remove - The remove button.\n */\n@Component({\n tag: 'ts-chip',\n styleUrl: 'chip.css',\n shadow: true,\n})\nexport class TsChip {\n /** The chip's semantic variant. */\n @Prop({ reflect: true }) variant: TsVariant = 'neutral';\n\n /** The chip's size. */\n @Prop({ reflect: true }) size: TsSize = 'md';\n\n /** Whether the chip shows a remove button. */\n @Prop({ reflect: true }) removable = false;\n\n /** Whether the chip is disabled. */\n @Prop({ reflect: true }) disabled = false;\n\n /** Whether the chip is selected. */\n @Prop({ reflect: true }) selected = false;\n\n /** Whether to render as outline style. */\n @Prop({ reflect: true }) outline = false;\n\n /** Emitted when the remove button is clicked. */\n @Event({ eventName: 'tsRemove' }) tsRemove!: EventEmitter<void>;\n\n /** Emitted when the chip body is clicked. */\n @Event({ eventName: 'tsClick' }) tsClick!: EventEmitter<void>;\n\n private handleClick = (): void => {\n if (this.disabled) return;\n this.tsClick.emit();\n };\n\n private handleRemove = (event: MouseEvent): void => {\n event.stopPropagation();\n if (this.disabled) return;\n this.tsRemove.emit();\n };\n\n private handleKeydown = (event: KeyboardEvent): void => {\n if (this.disabled) return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.tsClick.emit();\n }\n };\n\n private handleRemoveKeydown = (event: KeyboardEvent): void => {\n if (this.disabled) return;\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n event.stopPropagation();\n this.tsRemove.emit();\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n const isInteractive = !this.disabled;\n\n return (\n <Host\n class={{\n 'ts-chip': true,\n [`ts-chip--${this.variant}`]: true,\n [`ts-chip--${this.size}`]: true,\n 'ts-chip--selected': this.selected,\n 'ts-chip--outline': this.outline,\n 'ts-chip--disabled': this.disabled,\n 'ts-chip--removable': this.removable,\n }}\n >\n <span\n class=\"chip__base\"\n part=\"base\"\n role=\"button\"\n tabindex={isInteractive ? '0' : undefined}\n aria-disabled={this.disabled ? 'true' : undefined}\n aria-pressed={this.selected ? 'true' : undefined}\n onClick={this.handleClick}\n onKeyDown={this.handleKeydown}\n >\n <span class=\"chip__prefix\" part=\"prefix\">\n <slot name=\"prefix\" />\n </span>\n\n <span class=\"chip__label\" part=\"label\">\n <slot />\n </span>\n\n {this.removable && (\n <button\n class=\"chip__remove\"\n part=\"remove\"\n type=\"button\"\n aria-label=\"Remove\"\n disabled={this.disabled}\n onClick={this.handleRemove}\n onKeyDown={this.handleRemoveKeydown}\n >\n \\u2715\n </button>\n )}\n </span>\n </Host>\n );\n }\n}\n"],"mappings":"uEAAA,MAAMA,EAAU,IAAM,8yI,MCkBTC,EAAMC,EAAA,MAAAD,UAAAE,E,iJAEQC,QAAqB,UAGrBC,KAAe,KAGfC,UAAY,MAGZC,SAAW,MAGXC,SAAW,MAGXC,QAAU,MAGDC,SAGDC,QAEzBC,YAAc,KACpB,GAAIC,KAAKN,SAAU,OACnBM,KAAKF,QAAQG,MAAM,EAGbC,aAAgBC,IACtBA,EAAMC,kBACN,GAAIJ,KAAKN,SAAU,OACnBM,KAAKH,SAASI,MAAM,EAGdI,cAAiBF,IACvB,GAAIH,KAAKN,SAAU,OACnB,GAAIS,EAAMG,MAAQ,SAAWH,EAAMG,MAAQ,IAAK,CAC9CH,EAAMI,iBACNP,KAAKF,QAAQG,M,GAITO,oBAAuBL,IAC7B,GAAIH,KAAKN,SAAU,OACnB,GAAIS,EAAMG,MAAQ,SAAWH,EAAMG,MAAQ,IAAK,CAC9CH,EAAMI,iBACNJ,EAAMC,kBACNJ,KAAKH,SAASI,M,GAKlB,MAAAQ,GACE,MAAMC,GAAiBV,KAAKN,SAE5B,OACEiB,EAACC,EAAI,CAAAN,IAAA,2CACHO,MAAO,CACL,UAAW,KACX,CAAC,YAAYb,KAAKT,WAAY,KAC9B,CAAC,YAAYS,KAAKR,QAAS,KAC3B,oBAAqBQ,KAAKL,SAC1B,mBAAoBK,KAAKJ,QACzB,oBAAqBI,KAAKN,SAC1B,qBAAsBM,KAAKP,YAG7BkB,EAAA,QAAAL,IAAA,2CACEO,MAAM,aACNC,KAAK,OACLC,KAAK,SACLC,SAAUN,EAAgB,IAAMO,UAAS,gBAC1BjB,KAAKN,SAAW,OAASuB,UAAS,eACnCjB,KAAKL,SAAW,OAASsB,UACvCC,QAASlB,KAAKD,YACdoB,UAAWnB,KAAKK,eAEhBM,EAAA,QAAAL,IAAA,2CAAMO,MAAM,eAAeC,KAAK,UAC9BH,EAAA,QAAAL,IAAA,2CAAMc,KAAK,YAGbT,EAAA,QAAAL,IAAA,2CAAMO,MAAM,cAAcC,KAAK,SAC7BH,EAAA,QAAAL,IAAA,8CAGDN,KAAKP,WACJkB,EAAA,UAAAL,IAAA,2CACEO,MAAM,eACNC,KAAK,SACLO,KAAK,SAAQ,aACF,SACX3B,SAAUM,KAAKN,SACfwB,QAASlB,KAAKE,aACdiB,UAAWnB,KAAKQ,qBAAmB,Y","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t,p as e,H as n,h as s,c as i}from"./p-DkpyRqHf.js";const o=new Map;function r(t){for(const[e,n]of Object.entries(t)){o.set(e,n)}}function c(t,e){o.set(t,e)}function a(t){return o.get(t)}function l(){return Array.from(o.keys())}const h=()=>`:host{display:inline-flex;align-items:center;justify-content:center;vertical-align:middle;--ts-icon-size:1em;--ts-icon-color:currentColor;width:var(--ts-icon-size);height:var(--ts-icon-size);color:var(--ts-icon-color);line-height:0}:host([size="xs"]){--ts-icon-size:12px}:host([size="sm"]){--ts-icon-size:14px}:host([size="md"]){--ts-icon-size:16px}:host([size="lg"]){--ts-icon-size:18px}:host([size="xl"]){--ts-icon-size:20px}::slotted(svg){width:100%;height:100%;fill:currentColor}span{display:contents}span>svg{width:100%;height:100%;fill:none;stroke:currentColor}img{width:100%;height:100%}`;let u=null;function d(t){return t.split("-").map((t=>t.charAt(0).toUpperCase()+t.slice(1))).join("")}function f(t){const e=t.map((([t,e])=>{const n=Object.entries(e).map((([t,e])=>`${t}="${e}"`)).join(" ");return`<${t} ${n}/>`})).join("");return`<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">${e}</svg>`}const g=e(class t extends n{constructor(t){super();if(t!==false){this.__registerHost()}this.__attachShadow()}get el(){return this}name;src;size="md";label;color="currentColor";svgContent;nameChanged(){this.loadIcon()}componentWillLoad(){return this.loadIcon()}isBuiltInDisabled(){return this.el.closest('[data-icons="none"]')!==null}async loadIcon(){if(this.name&&!this.src){const t=a(this.name);if(t){this.svgContent=t;return}if(this.isBuiltInDisabled()){this.svgContent=undefined;return}if(!u){try{const t=await import("./p-BOxYojS-.js");u=t.icons}catch{this.svgContent=undefined;return}}const e=d(this.name);const n=u[e];if(n){this.svgContent=f(n);return}this.svgContent=undefined}else{this.svgContent=undefined}}render(){const t=!!this.label;return s(i,{key:"f1a6c10915bf60ee50be384b8b879a73a1bf73e7",class:{"ts-icon":true,[`ts-icon--${this.size}`]:true},role:t?"img":undefined,"aria-label":t?this.label:undefined,"aria-hidden":t?undefined:"true",style:{"--ts-icon-color":this.color}},this.src?s("img",{src:this.src,alt:"",part:"img"}):this.svgContent?s("span",{part:"svg",innerHTML:this.svgContent}):s("slot",null))}static get watchers(){return{name:[{nameChanged:0}]}}static get style(){return h()}},[769,"ts-icon",{name:[513],src:[1],size:[513],label:[1],color:[513],svgContent:[32]},undefined,{name:[{nameChanged:0}]}]);function m(){if(typeof customElements==="undefined"){return}const e=["ts-icon"];e.forEach((e=>{switch(e){case"ts-icon":if(!customElements.get(t(e))){customElements.define(t(e),g)}break}}))}m();export{g as T,c as a,l as b,m as d,a as g,r};
|
|
2
|
+
//# sourceMappingURL=p-TFHAUMKT.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["registry","Map","registerIcons","icons","name","svg","Object","entries","set","registerIcon","getIcon","get","getRegisteredIconNames","Array","from","keys","iconCss","lucideCache","toLucideKey","split","map","part","charAt","toUpperCase","slice","join","renderLucideSvg","nodes","children","tag","attrs","attrStr","k","v","TsIcon","__stencil_proxyCustomElement","HTMLElement","src","size","label","color","svgContent","nameChanged","this","loadIcon","componentWillLoad","isBuiltInDisabled","el","closest","registered","undefined","mod","import","key","lucideIcon","render","hasLabel","h","Host","class","role","style","alt","innerHTML"],"sources":["src/components/icon/icon-registry.ts","src/components/icon/icon.css?tag=ts-icon&encapsulation=shadow","src/components/icon/icon.tsx"],"sourcesContent":["/**\n * Icon Registry\n *\n * A global registry for SVG icon strings. Components look up icons by name\n * from this registry. Works with any icon library — register SVG strings\n * directly or use the Lucide helper (`registerLucideIcons`).\n */\n\nconst registry = new Map<string, string>();\n\n/**\n * Register multiple icons at once.\n * @param icons - A map of icon name to SVG string.\n */\nexport function registerIcons(icons: Record<string, string>): void {\n for (const [name, svg] of Object.entries(icons)) {\n registry.set(name, svg);\n }\n}\n\n/**\n * Register a single icon.\n * @param name - The icon name used in `<ts-icon name=\"...\">`.\n * @param svg - The full SVG markup string.\n */\nexport function registerIcon(name: string, svg: string): void {\n registry.set(name, svg);\n}\n\n/**\n * Retrieve an icon's SVG string by name.\n * @returns The SVG string, or `undefined` if the icon is not registered.\n */\nexport function getIcon(name: string): string | undefined {\n return registry.get(name);\n}\n\n/**\n * List all registered icon names.\n */\nexport function getRegisteredIconNames(): string[] {\n return Array.from(registry.keys());\n}\n","/* ==========================================================================\n ts-icon — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-icon-size Width & height of the icon\n --ts-icon-color Fill / stroke color\n ========================================================================== */\n\n:host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n vertical-align: middle;\n\n --ts-icon-size: 1em;\n --ts-icon-color: currentColor;\n\n width: var(--ts-icon-size);\n height: var(--ts-icon-size);\n color: var(--ts-icon-color);\n line-height: 0;\n}\n\n/* ---- Sizes ---- */\n:host([size=\"xs\"]) { --ts-icon-size: 12px; }\n:host([size=\"sm\"]) { --ts-icon-size: 14px; }\n:host([size=\"md\"]) { --ts-icon-size: 16px; }\n:host([size=\"lg\"]) { --ts-icon-size: 18px; }\n:host([size=\"xl\"]) { --ts-icon-size: 20px; }\n\n/* ---- Slotted SVG ---- */\n::slotted(svg) {\n width: 100%;\n height: 100%;\n fill: currentColor;\n}\n\n/* ---- Registry SVG ---- */\nspan {\n display: contents;\n}\n\nspan > svg {\n width: 100%;\n height: 100%;\n fill: none;\n stroke: currentColor;\n}\n\n/* ---- External image ---- */\nimg {\n width: 100%;\n height: 100%;\n}\n","import { Component, Prop, h, Host, Element, Watch, State } from '@stencil/core';\nimport type { TsSize } from '../../types';\nimport { getIcon } from './icon-registry';\n\ntype LucideNode = [string, Record<string, string>][];\n\n/** Cached reference to the Lucide icons map — loaded lazily on first use. */\nlet lucideCache: Record<string, LucideNode> | null = null;\n\n/**\n * Converts a PascalCase or kebab-case icon name to the PascalCase key used by Lucide.\n * e.g. \"search\" → \"Search\", \"arrow-left\" → \"ArrowLeft\"\n */\nfunction toLucideKey(name: string): string {\n return name\n .split('-')\n .map((part: string) => part.charAt(0).toUpperCase() + part.slice(1))\n .join('');\n}\n\n/**\n * Renders a Lucide icon node array to an SVG string.\n */\nfunction renderLucideSvg(nodes: LucideNode): string {\n const children = nodes\n .map(([tag, attrs]: [string, Record<string, string>]) => {\n const attrStr = Object.entries(attrs)\n .map(([k, v]: [string, string]) => `${k}=\"${v}\"`)\n .join(' ');\n return `<${tag} ${attrStr}/>`;\n })\n .join('');\n return `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"100%\" height=\"100%\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">${children}</svg>`;\n}\n\n/**\n * @slot - Default slot for inline SVG content.\n *\n * @part img - The img element (when using src prop).\n * @part svg - The container for resolved SVG content (when using name prop).\n */\n@Component({\n tag: 'ts-icon',\n styleUrl: 'icon.css',\n shadow: true,\n})\nexport class TsIcon {\n @Element() el!: HTMLElement;\n\n /** Icon name — resolves from custom registry first, then built-in Lucide icons. Accepts kebab-case or PascalCase. */\n @Prop({ reflect: true }) name?: string;\n\n /** URL to an external SVG icon file. */\n @Prop() src?: string;\n\n /** The icon's size. */\n @Prop({ reflect: true }) size: TsSize = 'md';\n\n /** Accessible label. When set, applies role=\"img\" and aria-label. When absent, sets aria-hidden=\"true\". */\n @Prop() label?: string;\n\n /** CSS color value applied to the icon. */\n @Prop({ reflect: true }) color: string = 'currentColor';\n\n @State() private svgContent?: string;\n\n @Watch('name')\n nameChanged(): void {\n this.loadIcon();\n }\n\n componentWillLoad(): void {\n return this.loadIcon() as unknown as void;\n }\n\n /**\n * Checks whether built-in Lucide icons are disabled via data-icons=\"none\"\n * on any ancestor element.\n */\n private isBuiltInDisabled(): boolean {\n return this.el.closest('[data-icons=\"none\"]') !== null;\n }\n\n private async loadIcon(): Promise<void> {\n if (this.name && !this.src) {\n // 1. Check custom registry first (allows overrides)\n const registered = getIcon(this.name);\n if (registered) {\n this.svgContent = registered;\n return;\n }\n\n // 2. If built-in icons are disabled via data-icons=\"none\", stop here\n if (this.isBuiltInDisabled()) {\n this.svgContent = undefined;\n return;\n }\n\n // 3. Lazy-load Lucide icons (only fetched on first name lookup)\n if (!lucideCache) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const mod: { icons: Record<string, LucideNode> } = await import('lucide') as any;\n lucideCache = mod.icons;\n } catch {\n this.svgContent = undefined;\n return;\n }\n }\n\n const key = toLucideKey(this.name);\n const lucideIcon = lucideCache[key];\n if (lucideIcon) {\n this.svgContent = renderLucideSvg(lucideIcon);\n return;\n }\n\n this.svgContent = undefined;\n } else {\n this.svgContent = undefined;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n const hasLabel = !!this.label;\n\n return (\n <Host\n class={{\n 'ts-icon': true,\n [`ts-icon--${this.size}`]: true,\n }}\n role={hasLabel ? 'img' : undefined}\n aria-label={hasLabel ? this.label : undefined}\n aria-hidden={hasLabel ? undefined : 'true'}\n style={{ '--ts-icon-color': this.color }}\n >\n {this.src ? (\n <img src={this.src} alt=\"\" part=\"img\" />\n ) : this.svgContent ? (\n <span part=\"svg\" innerHTML={this.svgContent}></span>\n ) : (\n <slot />\n )}\n </Host>\n );\n }\n}\n"],"mappings":"2DAQA,MAAMA,EAAW,IAAIC,IAMf,SAAUC,EAAcC,GAC5B,IAAK,MAAOC,EAAMC,KAAQC,OAAOC,QAAQJ,GAAQ,CAC/CH,EAASQ,IAAIJ,EAAMC,E,CAEvB,CAOM,SAAUI,EAAaL,EAAcC,GACzCL,EAASQ,IAAIJ,EAAMC,EACrB,CAMM,SAAUK,EAAQN,GACtB,OAAOJ,EAASW,IAAIP,EACtB,C,SAKgBQ,IACd,OAAOC,MAAMC,KAAKd,EAASe,OAC7B,CC1CA,MAAMC,EAAU,IAAM,qlBCOtB,IAAIC,EAAiD,KAMrD,SAASC,EAAYd,GACnB,OAAOA,EACJe,MAAM,KACNC,KAAKC,GAAiBA,EAAKC,OAAO,GAAGC,cAAgBF,EAAKG,MAAM,KAChEC,KAAK,GACV,CAKA,SAASC,EAAgBC,GACvB,MAAMC,EAAWD,EACdP,KAAI,EAAES,EAAKC,MACV,MAAMC,EAAUzB,OAAOC,QAAQuB,GAC5BV,KAAI,EAAEY,EAAGC,KAAyB,GAAGD,MAAMC,OAC3CR,KAAK,KACR,MAAO,IAAII,KAAOE,KAAW,IAE9BN,KAAK,IACR,MAAO,4LAA4LG,SACrM,C,MAaaM,EAAMC,EAAA,MAAAD,UAAAE,E,sGAIQhC,KAGjBiC,IAGiBC,KAAe,KAGhCC,MAGiBC,MAAgB,eAExBC,WAGjB,WAAAC,GACEC,KAAKC,U,CAGP,iBAAAC,GACE,OAAOF,KAAKC,U,CAON,iBAAAE,GACN,OAAOH,KAAKI,GAAGC,QAAQ,yBAA2B,I,CAG5C,cAAMJ,GACZ,GAAID,KAAKvC,OAASuC,KAAKN,IAAK,CAE1B,MAAMY,EAAavC,EAAQiC,KAAKvC,MAChC,GAAI6C,EAAY,CACdN,KAAKF,WAAaQ,EAClB,M,CAIF,GAAIN,KAAKG,oBAAqB,CAC5BH,KAAKF,WAAaS,UAClB,M,CAIF,IAAKjC,EAAa,CAChB,IAEE,MAAMkC,QAAmDC,OAAO,mBAChEnC,EAAckC,EAAIhD,K,CAClB,MACAwC,KAAKF,WAAaS,UAClB,M,EAIJ,MAAMG,EAAMnC,EAAYyB,KAAKvC,MAC7B,MAAMkD,EAAarC,EAAYoC,GAC/B,GAAIC,EAAY,CACdX,KAAKF,WAAaf,EAAgB4B,GAClC,M,CAGFX,KAAKF,WAAaS,S,KACb,CACLP,KAAKF,WAAaS,S,EAKtB,MAAAK,GACE,MAAMC,IAAab,KAAKJ,MAExB,OACEkB,EAACC,EAAI,CAAAL,IAAA,2CACHM,MAAO,CACL,UAAW,KACX,CAAC,YAAYhB,KAAKL,QAAS,MAE7BsB,KAAMJ,EAAW,MAAQN,UAAS,aACtBM,EAAWb,KAAKJ,MAAQW,UAAS,cAChCM,EAAWN,UAAY,OACpCW,MAAO,CAAE,kBAAmBlB,KAAKH,QAEhCG,KAAKN,IACJoB,EAAA,OAAKpB,IAAKM,KAAKN,IAAKyB,IAAI,GAAGzC,KAAK,QAC9BsB,KAAKF,WACPgB,EAAA,QAAMpC,KAAK,MAAM0C,UAAWpB,KAAKF,aAEjCgB,EAAA,a","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as e,p as o,H as t,d as r,h as s,c as i}from"./p-DkpyRqHf.js";import{g as p}from"./p-lpqZSiIf.js";const a=()=>`:host{display:inline-block;position:relative;font-family:var(--ts-font-family-base);--ts-popover-bg:var(--ts-color-bg-elevated);--ts-popover-radius:var(--ts-radius-lg);--ts-popover-shadow:var(--ts-shadow-lg);--ts-popover-max-width:320px}.popover__trigger{display:inline-block;cursor:pointer}.popover__panel{position:absolute;z-index:var(--ts-z-popover, 1000);padding:var(--ts-spacing-4);background-color:var(--ts-popover-bg);border-radius:var(--ts-popover-radius);box-shadow:var(--ts-popover-shadow);max-inline-size:var(--ts-popover-max-width);border:1px solid var(--ts-color-border-subtle);font-size:var(--ts-font-size-sm);line-height:var(--ts-line-height-normal);opacity:0;transform:scale(0.95);pointer-events:none;transition:opacity var(--ts-transition-fast), transform var(--ts-transition-fast)}.popover__panel--visible{opacity:1;transform:scale(1);pointer-events:auto}.popover__panel--top{bottom:calc(100% + 10px);left:50%;margin-left:-50%}.popover__panel--top-start{bottom:calc(100% + 10px);inset-inline-start:0}.popover__panel--top-end{bottom:calc(100% + 10px);inset-inline-end:0}.popover__panel--bottom{top:calc(100% + 10px);left:50%;margin-left:-50%}.popover__panel--bottom-start{top:calc(100% + 10px);inset-inline-start:0}.popover__panel--bottom-end{top:calc(100% + 10px);inset-inline-end:0}.popover__panel--left{inset-inline-end:calc(100% + 10px);top:50%;transform:translateY(-50%) scale(0.95)}.popover__panel--left.popover__panel--visible{transform:translateY(-50%) scale(1)}.popover__panel--right{inset-inline-start:calc(100% + 10px);top:50%;transform:translateY(-50%) scale(0.95)}.popover__panel--right.popover__panel--visible{transform:translateY(-50%) scale(1)}.popover__arrow{position:absolute;inline-size:10px;block-size:10px;background:var(--ts-popover-bg);border:1px solid var(--ts-color-border-subtle);transform:rotate(45deg)}.popover__panel--top .popover__arrow,.popover__panel--top-start .popover__arrow,.popover__panel--top-end .popover__arrow{bottom:-6px;left:50%;margin-left:-5px;border-top:none;border-left:none}.popover__panel--bottom .popover__arrow,.popover__panel--bottom-start .popover__arrow,.popover__panel--bottom-end .popover__arrow{top:-6px;left:50%;margin-left:-5px;border-bottom:none;border-right:none}.popover__panel--left .popover__arrow{inset-inline-end:-6px;top:50%;margin-top:-5px;border-bottom:none;border-left:none}.popover__panel--right .popover__arrow{inset-inline-start:-6px;top:50%;margin-top:-5px;border-top:none;border-right:none}.popover__content{position:relative;z-index:1}`;const n=o(class e extends t{constructor(e){super();if(e!==false){this.__registerHost()}this.__attachShadow();this.tsOpen=r(this,"tsOpen");this.tsClose=r(this,"tsClose")}get hostEl(){return this}popoverId=p("ts-popover");outsideClickHandler;escapeHandler;open=false;placement="bottom";trigger="click";dismissible=true;tsOpen;tsClose;isVisible=false;handleOpenChange(e){this.isVisible=e;if(e){this.tsOpen.emit();this.addGlobalListeners()}else{this.tsClose.emit();this.removeGlobalListeners()}}connectedCallback(){if(this.open){this.isVisible=true;this.addGlobalListeners()}}disconnectedCallback(){this.removeGlobalListeners()}async show(){this.open=true}async hide(){this.open=false}addGlobalListeners(){if(this.dismissible){this.outsideClickHandler=e=>{const o=e.composedPath();if(!o.includes(this.hostEl)){this.open=false}};this.escapeHandler=e=>{if(e.key==="Escape"){this.open=false}};setTimeout((()=>{document.addEventListener("click",this.outsideClickHandler);document.addEventListener("keydown",this.escapeHandler)}),0)}}removeGlobalListeners(){if(this.outsideClickHandler){document.removeEventListener("click",this.outsideClickHandler);this.outsideClickHandler=undefined}if(this.escapeHandler){document.removeEventListener("keydown",this.escapeHandler);this.escapeHandler=undefined}}handleTriggerClick=()=>{if(this.trigger==="click"){this.open=!this.open}};handleTriggerKeydown=e=>{if(this.trigger==="click"&&(e.key==="Enter"||e.key===" ")){e.preventDefault();this.open=!this.open}};handleMouseEnter=()=>{if(this.trigger==="hover"){this.open=true}};handleMouseLeave=()=>{if(this.trigger==="hover"){this.open=false}};render(){return s(i,{key:"9a797e457251167901cee8ebcb7077b5129bc88d",class:{"ts-popover":true,"ts-popover--open":this.isVisible,[`ts-popover--${this.placement}`]:true},onMouseEnter:this.handleMouseEnter,onMouseLeave:this.handleMouseLeave},s("span",{key:"cec789e62522c7d0580fae48563d16ae41c92da4",class:"popover__trigger",part:"trigger","aria-expanded":this.isVisible?"true":"false","aria-controls":this.popoverId,onClick:this.handleTriggerClick,onKeyDown:this.handleTriggerKeydown},s("slot",{key:"6cbc8158004db058b42935af9dc07f8bf6457f6d",name:"trigger"})),s("div",{key:"dc0cfb77b4fbda578336b7c63a78fdac9107d598",class:{popover__panel:true,[`popover__panel--${this.placement}`]:true,"popover__panel--visible":this.isVisible},part:"base",id:this.popoverId,role:"dialog","aria-hidden":!this.isVisible?"true":undefined},s("div",{key:"bcef96d994c1364274eca367a053ef5ec9ddcc8a",class:"popover__arrow",part:"arrow"}),s("div",{key:"027a7e705132e20533ce0f4616b47d5e912e0d78",class:"popover__content"},s("slot",{key:"838183659524f7687ed2d17ae2c00aa21db2b6d8"}))))}static get watchers(){return{open:[{handleOpenChange:0}]}}static get style(){return a()}},[769,"ts-popover",{open:[1540],placement:[513],trigger:[1],dismissible:[4],isVisible:[32],show:[64],hide:[64]},undefined,{open:[{handleOpenChange:0}]}]);function l(){if(typeof customElements==="undefined"){return}const o=["ts-popover"];o.forEach((o=>{switch(o){case"ts-popover":if(!customElements.get(e(o))){customElements.define(e(o),n)}break}}))}l();export{n as T,l as d};
|
|
2
|
+
//# sourceMappingURL=p-faVXXwqR.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["popoverCss","TsPopover","__stencil_proxyCustomElement","HTMLElement","popoverId","generateId","outsideClickHandler","escapeHandler","open","placement","trigger","dismissible","tsOpen","tsClose","isVisible","handleOpenChange","newValue","this","emit","addGlobalListeners","removeGlobalListeners","connectedCallback","disconnectedCallback","show","hide","event","path","composedPath","includes","hostEl","key","setTimeout","document","addEventListener","removeEventListener","undefined","handleTriggerClick","handleTriggerKeydown","preventDefault","handleMouseEnter","handleMouseLeave","render","h","Host","class","onMouseEnter","onMouseLeave","part","onClick","onKeyDown","name","popover__panel","id","role"],"sources":["src/components/popover/popover.css?tag=ts-popover&encapsulation=shadow","src/components/popover/popover.tsx"],"sourcesContent":["/* ==========================================================================\n ts-popover — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-popover-bg Background color\n --ts-popover-radius Border radius\n --ts-popover-shadow Box shadow\n --ts-popover-max-width Max width\n ========================================================================== */\n\n:host {\n display: inline-block;\n position: relative;\n font-family: var(--ts-font-family-base);\n\n --ts-popover-bg: var(--ts-color-bg-elevated);\n --ts-popover-radius: var(--ts-radius-lg);\n --ts-popover-shadow: var(--ts-shadow-lg);\n --ts-popover-max-width: 320px;\n}\n\n.popover__trigger {\n display: inline-block;\n cursor: pointer;\n}\n\n/* ---- Panel ---- */\n.popover__panel {\n position: absolute;\n z-index: var(--ts-z-popover, 1000);\n padding: var(--ts-spacing-4);\n background-color: var(--ts-popover-bg);\n border-radius: var(--ts-popover-radius);\n box-shadow: var(--ts-popover-shadow);\n max-inline-size: var(--ts-popover-max-width);\n border: 1px solid var(--ts-color-border-subtle);\n font-size: var(--ts-font-size-sm);\n line-height: var(--ts-line-height-normal);\n opacity: 0;\n transform: scale(0.95);\n pointer-events: none;\n transition:\n opacity var(--ts-transition-fast),\n transform var(--ts-transition-fast);\n}\n\n.popover__panel--visible {\n opacity: 1;\n transform: scale(1);\n pointer-events: auto;\n}\n\n/* ---- Placements ---- */\n.popover__panel--top {\n bottom: calc(100% + 10px);\n left: 50%;\n margin-left: -50%;\n}\n.popover__panel--top-start {\n bottom: calc(100% + 10px);\n inset-inline-start: 0;\n}\n.popover__panel--top-end {\n bottom: calc(100% + 10px);\n inset-inline-end: 0;\n}\n\n.popover__panel--bottom {\n top: calc(100% + 10px);\n left: 50%;\n margin-left: -50%;\n}\n.popover__panel--bottom-start {\n top: calc(100% + 10px);\n inset-inline-start: 0;\n}\n.popover__panel--bottom-end {\n top: calc(100% + 10px);\n inset-inline-end: 0;\n}\n\n.popover__panel--left {\n inset-inline-end: calc(100% + 10px);\n top: 50%;\n transform: translateY(-50%) scale(0.95);\n}\n.popover__panel--left.popover__panel--visible {\n transform: translateY(-50%) scale(1);\n}\n\n.popover__panel--right {\n inset-inline-start: calc(100% + 10px);\n top: 50%;\n transform: translateY(-50%) scale(0.95);\n}\n.popover__panel--right.popover__panel--visible {\n transform: translateY(-50%) scale(1);\n}\n\n/* ---- Arrow ---- */\n.popover__arrow {\n position: absolute;\n inline-size: 10px;\n block-size: 10px;\n background: var(--ts-popover-bg);\n border: 1px solid var(--ts-color-border-subtle);\n transform: rotate(45deg);\n}\n\n.popover__panel--top .popover__arrow,\n.popover__panel--top-start .popover__arrow,\n.popover__panel--top-end .popover__arrow {\n bottom: -6px;\n left: 50%;\n margin-left: -5px;\n border-top: none;\n border-left: none;\n}\n\n.popover__panel--bottom .popover__arrow,\n.popover__panel--bottom-start .popover__arrow,\n.popover__panel--bottom-end .popover__arrow {\n top: -6px;\n left: 50%;\n margin-left: -5px;\n border-bottom: none;\n border-right: none;\n}\n\n.popover__panel--left .popover__arrow {\n inset-inline-end: -6px;\n top: 50%;\n margin-top: -5px;\n border-bottom: none;\n border-left: none;\n}\n\n.popover__panel--right .popover__arrow {\n inset-inline-start: -6px;\n top: 50%;\n margin-top: -5px;\n border-top: none;\n border-right: none;\n}\n\n/* ---- Content ---- */\n.popover__content {\n position: relative;\n z-index: 1;\n}\n","import { Component, Prop, Event, State, h, Host, Element, Watch, Method } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\nimport { generateId } from '../../utils/aria';\n\ntype TsPopoverPlacement = 'top' | 'bottom' | 'left' | 'right' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end';\n\n/**\n * @slot trigger - The element that triggers the popover.\n * @slot - Default slot for popover content.\n *\n * @part base - The popover container.\n * @part arrow - The popover arrow.\n * @part trigger - The trigger wrapper.\n */\n@Component({\n tag: 'ts-popover',\n styleUrl: 'popover.css',\n shadow: true,\n})\nexport class TsPopover {\n @Element() hostEl!: HTMLElement;\n\n private popoverId = generateId('ts-popover');\n private outsideClickHandler?: (event: MouseEvent) => void;\n private escapeHandler?: (event: KeyboardEvent) => void;\n\n /** Whether the popover is currently visible. */\n @Prop({ reflect: true, mutable: true }) open = false;\n\n /** Placement of the popover relative to the trigger. */\n @Prop({ reflect: true }) placement: TsPopoverPlacement = 'bottom';\n\n /** How the popover is triggered. */\n @Prop() trigger: 'click' | 'hover' | 'manual' = 'click';\n\n /** Whether the popover closes on outside click or Escape. */\n @Prop() dismissible = true;\n\n /** Emitted when the popover opens. */\n @Event({ eventName: 'tsOpen' }) tsOpen!: EventEmitter<void>;\n\n /** Emitted when the popover closes. */\n @Event({ eventName: 'tsClose' }) tsClose!: EventEmitter<void>;\n\n @State() isVisible = false;\n\n @Watch('open')\n handleOpenChange(newValue: boolean): void {\n this.isVisible = newValue;\n if (newValue) {\n this.tsOpen.emit();\n this.addGlobalListeners();\n } else {\n this.tsClose.emit();\n this.removeGlobalListeners();\n }\n }\n\n connectedCallback(): void {\n if (this.open) {\n this.isVisible = true;\n this.addGlobalListeners();\n }\n }\n\n disconnectedCallback(): void {\n this.removeGlobalListeners();\n }\n\n /** Programmatically show the popover. */\n @Method()\n async show(): Promise<void> {\n this.open = true;\n }\n\n /** Programmatically hide the popover. */\n @Method()\n async hide(): Promise<void> {\n this.open = false;\n }\n\n private addGlobalListeners(): void {\n if (this.dismissible) {\n this.outsideClickHandler = (event: MouseEvent) => {\n const path = event.composedPath();\n if (!path.includes(this.hostEl)) {\n this.open = false;\n }\n };\n this.escapeHandler = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n this.open = false;\n }\n };\n // Use setTimeout to avoid capturing the click that opened the popover\n setTimeout(() => {\n document.addEventListener('click', this.outsideClickHandler!);\n document.addEventListener('keydown', this.escapeHandler!);\n }, 0);\n }\n }\n\n private removeGlobalListeners(): void {\n if (this.outsideClickHandler) {\n document.removeEventListener('click', this.outsideClickHandler);\n this.outsideClickHandler = undefined;\n }\n if (this.escapeHandler) {\n document.removeEventListener('keydown', this.escapeHandler);\n this.escapeHandler = undefined;\n }\n }\n\n private handleTriggerClick = (): void => {\n if (this.trigger === 'click') {\n this.open = !this.open;\n }\n };\n\n private handleTriggerKeydown = (event: KeyboardEvent): void => {\n if (this.trigger === 'click' && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n this.open = !this.open;\n }\n };\n\n private handleMouseEnter = (): void => {\n if (this.trigger === 'hover') {\n this.open = true;\n }\n };\n\n private handleMouseLeave = (): void => {\n if (this.trigger === 'hover') {\n this.open = false;\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n return (\n <Host\n class={{\n 'ts-popover': true,\n 'ts-popover--open': this.isVisible,\n [`ts-popover--${this.placement}`]: true,\n }}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n >\n <span\n class=\"popover__trigger\"\n part=\"trigger\"\n aria-expanded={this.isVisible ? 'true' : 'false'}\n aria-controls={this.popoverId}\n onClick={this.handleTriggerClick}\n onKeyDown={this.handleTriggerKeydown}\n >\n <slot name=\"trigger\" />\n </span>\n\n <div\n class={{\n 'popover__panel': true,\n [`popover__panel--${this.placement}`]: true,\n 'popover__panel--visible': this.isVisible,\n }}\n part=\"base\"\n id={this.popoverId}\n role=\"dialog\"\n aria-hidden={!this.isVisible ? 'true' : undefined}\n >\n <div class=\"popover__arrow\" part=\"arrow\" />\n <div class=\"popover__content\">\n <slot />\n </div>\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"2GAAA,MAAMA,EAAa,IAAM,u+E,MCmBZC,EAASC,EAAA,MAAAD,UAAAE,E,sKAGZC,UAAYC,EAAW,cACvBC,oBACAC,cAGgCC,KAAO,MAGtBC,UAAgC,SAGjDC,QAAwC,QAGxCC,YAAc,KAGUC,OAGCC,QAExBC,UAAY,MAGrB,gBAAAC,CAAiBC,GACfC,KAAKH,UAAYE,EACjB,GAAIA,EAAU,CACZC,KAAKL,OAAOM,OACZD,KAAKE,oB,KACA,CACLF,KAAKJ,QAAQK,OACbD,KAAKG,uB,EAIT,iBAAAC,GACE,GAAIJ,KAAKT,KAAM,CACbS,KAAKH,UAAY,KACjBG,KAAKE,oB,EAIT,oBAAAG,GACEL,KAAKG,uB,CAKP,UAAMG,GACJN,KAAKT,KAAO,I,CAKd,UAAMgB,GACJP,KAAKT,KAAO,K,CAGN,kBAAAW,GACN,GAAIF,KAAKN,YAAa,CACpBM,KAAKX,oBAAuBmB,IAC1B,MAAMC,EAAOD,EAAME,eACnB,IAAKD,EAAKE,SAASX,KAAKY,QAAS,CAC/BZ,KAAKT,KAAO,K,GAGhBS,KAAKV,cAAiBkB,IACpB,GAAIA,EAAMK,MAAQ,SAAU,CAC1Bb,KAAKT,KAAO,K,GAIhBuB,YAAW,KACTC,SAASC,iBAAiB,QAAShB,KAAKX,qBACxC0B,SAASC,iBAAiB,UAAWhB,KAAKV,cAAe,GACxD,E,EAIC,qBAAAa,GACN,GAAIH,KAAKX,oBAAqB,CAC5B0B,SAASE,oBAAoB,QAASjB,KAAKX,qBAC3CW,KAAKX,oBAAsB6B,S,CAE7B,GAAIlB,KAAKV,cAAe,CACtByB,SAASE,oBAAoB,UAAWjB,KAAKV,eAC7CU,KAAKV,cAAgB4B,S,EAIjBC,mBAAqB,KAC3B,GAAInB,KAAKP,UAAY,QAAS,CAC5BO,KAAKT,MAAQS,KAAKT,I,GAId6B,qBAAwBZ,IAC9B,GAAIR,KAAKP,UAAY,UAAYe,EAAMK,MAAQ,SAAWL,EAAMK,MAAQ,KAAM,CAC5EL,EAAMa,iBACNrB,KAAKT,MAAQS,KAAKT,I,GAId+B,iBAAmB,KACzB,GAAItB,KAAKP,UAAY,QAAS,CAC5BO,KAAKT,KAAO,I,GAIRgC,iBAAmB,KACzB,GAAIvB,KAAKP,UAAY,QAAS,CAC5BO,KAAKT,KAAO,K,GAKhB,MAAAiC,GACE,OACEC,EAACC,EAAI,CAAAb,IAAA,2CACHc,MAAO,CACL,aAAc,KACd,mBAAoB3B,KAAKH,UACzB,CAAC,eAAeG,KAAKR,aAAc,MAErCoC,aAAc5B,KAAKsB,iBACnBO,aAAc7B,KAAKuB,kBAEnBE,EAAA,QAAAZ,IAAA,2CACEc,MAAM,mBACNG,KAAK,UAAS,gBACC9B,KAAKH,UAAY,OAAS,QAAO,gBACjCG,KAAKb,UACpB4C,QAAS/B,KAAKmB,mBACda,UAAWhC,KAAKoB,sBAEhBK,EAAA,QAAAZ,IAAA,2CAAMoB,KAAK,aAGbR,EAAA,OAAAZ,IAAA,2CACEc,MAAO,CACLO,eAAkB,KAClB,CAAC,mBAAmBlC,KAAKR,aAAc,KACvC,0BAA2BQ,KAAKH,WAElCiC,KAAK,OACLK,GAAInC,KAAKb,UACTiD,KAAK,SAAQ,eACCpC,KAAKH,UAAY,OAASqB,WAExCO,EAAA,OAAAZ,IAAA,2CAAKc,MAAM,iBAAiBG,KAAK,UACjCL,EAAA,OAAAZ,IAAA,2CAAKc,MAAM,oBACTF,EAAA,QAAAZ,IAAA,+C","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
let t=0;function e(e="q"){t+=1;return`${e}-${t}`}function n(t,e="polite"){const n=document.createElement("div");n.setAttribute("aria-live",e);n.setAttribute("role","status");n.setAttribute("aria-atomic","true");Object.assign(n.style,{position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",border:"0"});document.body.appendChild(n);requestAnimationFrame((()=>{n.textContent=t;setTimeout((()=>n.remove()),1e3)}))}function o(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}function i(t){const e=["a[href]","button:not([disabled])","input:not([disabled])","select:not([disabled])","textarea:not([disabled])",'[tabindex]:not([tabindex="-1"])'].join(", ");function n(n){if(n.key!=="Tab")return;const o=Array.from(t.querySelectorAll(e));if(o.length===0){n.preventDefault();return}const i=o[0];const r=o[o.length-1];if(n.shiftKey){if(document.activeElement===i){n.preventDefault();r.focus()}}else{if(document.activeElement===r){n.preventDefault();i.focus()}}}t.addEventListener("keydown",n);return()=>t.removeEventListener("keydown",n)}export{n as a,e as g,o as p,i as t};
|
|
2
|
+
//# sourceMappingURL=p-lpqZSiIf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["idCounter","generateId","prefix","announce","message","priority","el","document","createElement","setAttribute","Object","assign","style","position","width","height","padding","margin","overflow","clip","whiteSpace","border","body","appendChild","requestAnimationFrame","textContent","setTimeout","remove","prefersReducedMotion","window","matchMedia","matches","trapFocus","container","focusableSelectors","join","handleKeydown","event","key","focusableElements","Array","from","querySelectorAll","length","preventDefault","firstFocusable","lastFocusable","shiftKey","activeElement","focus","addEventListener","removeEventListener"],"sources":["src/utils/aria.ts"],"sourcesContent":["/**\n * Tessera UI — Accessibility Utilities\n *\n * Helpers for consistent ARIA patterns across components.\n */\n\n/** Generate a unique ID for ARIA relationships */\nlet idCounter = 0;\nexport function generateId(prefix = 'q'): string {\n idCounter += 1;\n return `${prefix}-${idCounter}`;\n}\n\n/** Reset ID counter (for testing) */\nexport function resetIdCounter(): void {\n idCounter = 0;\n}\n\n/**\n * Announce a message to screen readers via a live region.\n * Creates a temporary `aria-live` element, inserts the message,\n * and removes it after the AT has time to read it.\n */\nexport function announce(message: string, priority: 'polite' | 'assertive' = 'polite'): void {\n const el = document.createElement('div');\n el.setAttribute('aria-live', priority);\n el.setAttribute('role', 'status');\n el.setAttribute('aria-atomic', 'true');\n Object.assign(el.style, {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: '0',\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: '0',\n });\n\n document.body.appendChild(el);\n\n // Delay to ensure the live region is registered before content is added\n requestAnimationFrame(() => {\n el.textContent = message;\n setTimeout(() => el.remove(), 1000);\n });\n}\n\n/**\n * Check if the user prefers reduced motion.\n */\nexport function prefersReducedMotion(): boolean {\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n/**\n * Trap focus within a container element.\n * Returns a cleanup function to remove the trap.\n */\nexport function trapFocus(container: HTMLElement): () => void {\n const focusableSelectors = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n ].join(', ');\n\n function handleKeydown(event: KeyboardEvent): void {\n if (event.key !== 'Tab') return;\n\n const focusableElements = Array.from(\n container.querySelectorAll<HTMLElement>(focusableSelectors)\n );\n\n if (focusableElements.length === 0) {\n event.preventDefault();\n return;\n }\n\n const firstFocusable = focusableElements[0];\n const lastFocusable = focusableElements[focusableElements.length - 1];\n\n if (event.shiftKey) {\n if (document.activeElement === firstFocusable) {\n event.preventDefault();\n lastFocusable.focus();\n }\n } else {\n if (document.activeElement === lastFocusable) {\n event.preventDefault();\n firstFocusable.focus();\n }\n }\n }\n\n container.addEventListener('keydown', handleKeydown);\n return () => container.removeEventListener('keydown', handleKeydown);\n}\n"],"mappings":"AAOA,IAAIA,EAAY,EACV,SAAUC,EAAWC,EAAS,KAClCF,GAAa,EACb,MAAO,GAAGE,KAAUF,GACtB,C,SAYgBG,EAASC,EAAiBC,EAAmC,UAC3E,MAAMC,EAAKC,SAASC,cAAc,OAClCF,EAAGG,aAAa,YAAaJ,GAC7BC,EAAGG,aAAa,OAAQ,UACxBH,EAAGG,aAAa,cAAe,QAC/BC,OAAOC,OAAOL,EAAGM,MAAO,CACtBC,SAAU,WACVC,MAAO,MACPC,OAAQ,MACRC,QAAS,IACTC,OAAQ,OACRC,SAAU,SACVC,KAAM,mBACNC,WAAY,SACZC,OAAQ,MAGVd,SAASe,KAAKC,YAAYjB,GAG1BkB,uBAAsB,KACpBlB,EAAGmB,YAAcrB,EACjBsB,YAAW,IAAMpB,EAAGqB,UAAU,IAAK,GAEvC,C,SAKgBC,IACd,OAAOC,OAAOC,WAAW,oCAAoCC,OAC/D,CAMM,SAAUC,EAAUC,GACxB,MAAMC,EAAqB,CACzB,UACA,yBACA,wBACA,yBACA,2BACA,mCACAC,KAAK,MAEP,SAASC,EAAcC,GACrB,GAAIA,EAAMC,MAAQ,MAAO,OAEzB,MAAMC,EAAoBC,MAAMC,KAC9BR,EAAUS,iBAA8BR,IAG1C,GAAIK,EAAkBI,SAAW,EAAG,CAClCN,EAAMO,iBACN,M,CAGF,MAAMC,EAAiBN,EAAkB,GACzC,MAAMO,EAAgBP,EAAkBA,EAAkBI,OAAS,GAEnE,GAAIN,EAAMU,SAAU,CAClB,GAAIxC,SAASyC,gBAAkBH,EAAgB,CAC7CR,EAAMO,iBACNE,EAAcG,O,MAEX,CACL,GAAI1C,SAASyC,gBAAkBF,EAAe,CAC5CT,EAAMO,iBACNC,EAAeI,O,GAKrBhB,EAAUiB,iBAAiB,UAAWd,GACtC,MAAO,IAAMH,EAAUkB,oBAAoB,UAAWf,EACxD,Q","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t,p as s,H as o,d as a,h as i,c as e}from"./p-DkpyRqHf.js";const r=()=>`:host{display:block;position:fixed;z-index:var(--ts-z-toast, 9000);font-family:var(--ts-font-family-base);pointer-events:none;--ts-toast-radius:var(--ts-radius-xl);--ts-toast-shadow:var(--ts-shadow-lg);--ts-toast-max-width:420px}:host([position="top-right"]){inset-block-start:var(--ts-spacing-4);inset-inline-end:var(--ts-spacing-4)}:host([position="top-left"]){inset-block-start:var(--ts-spacing-4);inset-inline-start:var(--ts-spacing-4)}:host([position="bottom-right"]){inset-block-end:var(--ts-spacing-4);inset-inline-end:var(--ts-spacing-4)}:host([position="bottom-left"]){inset-block-end:var(--ts-spacing-4);inset-inline-start:var(--ts-spacing-4)}:host([position="top-center"]){inset-block-start:var(--ts-spacing-4);inset-inline-start:50%;transform:translateX(-50%)}:host([position="bottom-center"]){inset-block-end:var(--ts-spacing-4);inset-inline-start:50%;transform:translateX(-50%)}.toast__base{display:flex;align-items:flex-start;gap:var(--ts-spacing-3);padding:var(--ts-spacing-3) var(--ts-spacing-4);border-radius:var(--ts-toast-radius);box-shadow:var(--ts-toast-shadow);max-inline-size:var(--ts-toast-max-width);pointer-events:auto;border:1px solid transparent;font-size:var(--ts-font-size-sm);line-height:var(--ts-line-height-normal);animation:ts-toast-slide-in 0.3s ease-out}@keyframes ts-toast-slide-in{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}:host([variant="info"]) .toast__base{background-color:var(--ts-color-info-bg);border-color:var(--ts-color-info-border);color:var(--ts-color-info-600)}:host([variant="success"]) .toast__base{background-color:var(--ts-color-success-bg);border-color:var(--ts-color-success-border);color:var(--ts-color-success-600)}:host([variant="warning"]) .toast__base{background-color:var(--ts-color-warning-bg);border-color:var(--ts-color-warning-border);color:var(--ts-color-warning-600)}:host([variant="danger"]) .toast__base{background-color:var(--ts-color-danger-bg);border-color:var(--ts-color-danger-border);color:var(--ts-color-danger-600)}:host([variant="neutral"]) .toast__base{background-color:var(--ts-color-bg-subtle);border-color:var(--ts-color-border-subtle);color:var(--ts-color-text-secondary)}.toast__icon{display:flex;align-items:center;font-size:1.15em;flex-shrink:0;margin-block-start:1px}.toast__message{flex:1;min-inline-size:0}.toast__action{display:flex;align-items:center;flex-shrink:0}.toast__action:empty{display:none}.toast__close{display:flex;align-items:center;justify-content:center;flex-shrink:0;inline-size:1.5rem;block-size:1.5rem;border:none;border-radius:var(--ts-radius-sm);background:transparent;color:currentColor;opacity:0.6;cursor:pointer;font-size:0.8em;transition:opacity var(--ts-transition-fast);padding:0;line-height:1}.toast__close:hover{opacity:1}.toast__close:focus-visible{box-shadow:var(--ts-focus-ring);opacity:1}`;const n=s(class t extends o{constructor(t){super();if(t!==false){this.__registerHost()}this.__attachShadow();this.tsClose=a(this,"tsClose")}autoCloseTimer;variant="info";duration=5e3;dismissible=true;open=false;position="top-right";tsClose;isVisible=false;handleOpenChange(t){if(t){this.isVisible=true;this.startAutoClose()}else{this.isVisible=false;this.clearAutoClose()}}connectedCallback(){if(this.open){this.isVisible=true;this.startAutoClose()}}disconnectedCallback(){this.clearAutoClose()}async close(){this.open=false;this.isVisible=false;this.clearAutoClose();this.tsClose.emit()}async show(){this.open=true}startAutoClose(){this.clearAutoClose();if(this.duration>0){this.autoCloseTimer=setTimeout((()=>{this.close()}),this.duration)}}clearAutoClose(){if(this.autoCloseTimer){clearTimeout(this.autoCloseTimer);this.autoCloseTimer=undefined}}handleClose=()=>{this.close()};renderIcon(){const t={info:"ℹ",success:"✓",warning:"⚠",danger:"✕",neutral:"ℹ"};return i("span",{class:"toast__icon-symbol","aria-hidden":"true"},t[this.variant]||"ℹ")}render(){if(!this.isVisible)return null;const t=this.variant==="danger"?"assertive":"polite";return i(e,{class:{"ts-toast":true,[`ts-toast--${this.variant}`]:true,[`ts-toast--${this.position}`]:true,"ts-toast--open":this.isVisible},role:"status","aria-live":t},i("div",{class:"toast__base",part:"base"},i("div",{class:"toast__icon",part:"icon"},this.renderIcon()),i("div",{class:"toast__message",part:"message"},i("slot",null)),i("div",{class:"toast__action",part:"action"},i("slot",{name:"action"})),this.dismissible&&i("button",{class:"toast__close",part:"close",type:"button","aria-label":"Dismiss notification",onClick:this.handleClose},"\\u2715")))}static get watchers(){return{open:[{handleOpenChange:0}]}}static get style(){return r()}},[769,"ts-toast",{variant:[513],duration:[2],dismissible:[4],open:[1540],position:[513],isVisible:[32],close:[64],show:[64]},undefined,{open:[{handleOpenChange:0}]}]);function l(){if(typeof customElements==="undefined"){return}const s=["ts-toast"];s.forEach((s=>{switch(s){case"ts-toast":if(!customElements.get(t(s))){customElements.define(t(s),n)}break}}))}l();export{n as T,l as d};
|
|
2
|
+
//# sourceMappingURL=p-mfB_pP4L.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["toastCss","TsToast","__stencil_proxyCustomElement","HTMLElement","autoCloseTimer","variant","duration","dismissible","open","position","tsClose","isVisible","handleOpenChange","newValue","this","startAutoClose","clearAutoClose","connectedCallback","disconnectedCallback","close","emit","show","setTimeout","clearTimeout","undefined","handleClose","renderIcon","icons","info","success","warning","danger","neutral","h","class","render","ariaLive","Host","role","part","name","type","onClick"],"sources":["src/components/toast/toast.css?tag=ts-toast&encapsulation=shadow","src/components/toast/toast.tsx"],"sourcesContent":["/* ==========================================================================\n ts-toast — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-toast-radius Border radius\n --ts-toast-shadow Box shadow\n --ts-toast-max-width Maximum width\n ========================================================================== */\n\n:host {\n display: block;\n position: fixed;\n z-index: var(--ts-z-toast, 9000);\n font-family: var(--ts-font-family-base);\n pointer-events: none;\n\n --ts-toast-radius: var(--ts-radius-xl);\n --ts-toast-shadow: var(--ts-shadow-lg);\n --ts-toast-max-width: 420px;\n}\n\n/* ---- Positions ---- */\n:host([position=\"top-right\"]) {\n inset-block-start: var(--ts-spacing-4);\n inset-inline-end: var(--ts-spacing-4);\n}\n\n:host([position=\"top-left\"]) {\n inset-block-start: var(--ts-spacing-4);\n inset-inline-start: var(--ts-spacing-4);\n}\n\n:host([position=\"bottom-right\"]) {\n inset-block-end: var(--ts-spacing-4);\n inset-inline-end: var(--ts-spacing-4);\n}\n\n:host([position=\"bottom-left\"]) {\n inset-block-end: var(--ts-spacing-4);\n inset-inline-start: var(--ts-spacing-4);\n}\n\n:host([position=\"top-center\"]) {\n inset-block-start: var(--ts-spacing-4);\n inset-inline-start: 50%;\n transform: translateX(-50%);\n}\n\n:host([position=\"bottom-center\"]) {\n inset-block-end: var(--ts-spacing-4);\n inset-inline-start: 50%;\n transform: translateX(-50%);\n}\n\n/* ---- Base ---- */\n.toast__base {\n display: flex;\n align-items: flex-start;\n gap: var(--ts-spacing-3);\n padding: var(--ts-spacing-3) var(--ts-spacing-4);\n border-radius: var(--ts-toast-radius);\n box-shadow: var(--ts-toast-shadow);\n max-inline-size: var(--ts-toast-max-width);\n pointer-events: auto;\n border: 1px solid transparent;\n font-size: var(--ts-font-size-sm);\n line-height: var(--ts-line-height-normal);\n animation: ts-toast-slide-in 0.3s ease-out;\n}\n\n@keyframes ts-toast-slide-in {\n from {\n opacity: 0;\n transform: translateY(-8px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* ---- Variants ---- */\n:host([variant=\"info\"]) .toast__base {\n background-color: var(--ts-color-info-bg);\n border-color: var(--ts-color-info-border);\n color: var(--ts-color-info-600);\n}\n\n:host([variant=\"success\"]) .toast__base {\n background-color: var(--ts-color-success-bg);\n border-color: var(--ts-color-success-border);\n color: var(--ts-color-success-600);\n}\n\n:host([variant=\"warning\"]) .toast__base {\n background-color: var(--ts-color-warning-bg);\n border-color: var(--ts-color-warning-border);\n color: var(--ts-color-warning-600);\n}\n\n:host([variant=\"danger\"]) .toast__base {\n background-color: var(--ts-color-danger-bg);\n border-color: var(--ts-color-danger-border);\n color: var(--ts-color-danger-600);\n}\n\n:host([variant=\"neutral\"]) .toast__base {\n background-color: var(--ts-color-bg-subtle);\n border-color: var(--ts-color-border-subtle);\n color: var(--ts-color-text-secondary);\n}\n\n/* ---- Icon ---- */\n.toast__icon {\n display: flex;\n align-items: center;\n font-size: 1.15em;\n flex-shrink: 0;\n margin-block-start: 1px;\n}\n\n/* ---- Message ---- */\n.toast__message {\n flex: 1;\n min-inline-size: 0;\n}\n\n/* ---- Action ---- */\n.toast__action {\n display: flex;\n align-items: center;\n flex-shrink: 0;\n}\n\n.toast__action:empty {\n display: none;\n}\n\n/* ---- Close button ---- */\n.toast__close {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n inline-size: 1.5rem;\n block-size: 1.5rem;\n border: none;\n border-radius: var(--ts-radius-sm);\n background: transparent;\n color: currentColor;\n opacity: 0.6;\n cursor: pointer;\n font-size: 0.8em;\n transition: opacity var(--ts-transition-fast);\n padding: 0;\n line-height: 1;\n}\n\n.toast__close:hover {\n opacity: 1;\n}\n\n.toast__close:focus-visible {\n box-shadow: var(--ts-focus-ring);\n opacity: 1;\n}\n","import { Component, Prop, Event, State, h, Host, Watch, Method } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\n\ntype TsToastVariant = 'info' | 'success' | 'warning' | 'danger' | 'neutral';\ntype TsToastPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center' | 'bottom-center';\n\n/**\n * @slot - Default slot for message content.\n * @slot action - Optional action button.\n *\n * @part base - The toast container.\n * @part icon - The variant icon wrapper.\n * @part message - The message wrapper.\n * @part action - The action slot wrapper.\n * @part close - The close button.\n */\n@Component({\n tag: 'ts-toast',\n styleUrl: 'toast.css',\n shadow: true,\n})\nexport class TsToast {\n private autoCloseTimer?: ReturnType<typeof setTimeout>;\n\n /** The toast's visual variant. */\n @Prop({ reflect: true }) variant: TsToastVariant = 'info';\n\n /** Auto-dismiss duration in ms. Set 0 to disable. */\n @Prop() duration = 5000;\n\n /** Whether the toast shows a close button. */\n @Prop() dismissible = true;\n\n /** Whether the toast is visible. */\n @Prop({ reflect: true, mutable: true }) open = false;\n\n /** Position of the toast on screen. */\n @Prop({ reflect: true }) position: TsToastPosition = 'top-right';\n\n /** Emitted when the toast is dismissed. */\n @Event({ eventName: 'tsClose' }) tsClose!: EventEmitter<void>;\n\n @State() isVisible = false;\n\n @Watch('open')\n handleOpenChange(newValue: boolean): void {\n if (newValue) {\n this.isVisible = true;\n this.startAutoClose();\n } else {\n this.isVisible = false;\n this.clearAutoClose();\n }\n }\n\n connectedCallback(): void {\n if (this.open) {\n this.isVisible = true;\n this.startAutoClose();\n }\n }\n\n disconnectedCallback(): void {\n this.clearAutoClose();\n }\n\n /** Programmatically close the toast. */\n @Method()\n async close(): Promise<void> {\n this.open = false;\n this.isVisible = false;\n this.clearAutoClose();\n this.tsClose.emit();\n }\n\n /** Programmatically show the toast. */\n @Method()\n async show(): Promise<void> {\n this.open = true;\n }\n\n private startAutoClose(): void {\n this.clearAutoClose();\n if (this.duration > 0) {\n this.autoCloseTimer = setTimeout(() => {\n this.close();\n }, this.duration);\n }\n }\n\n private clearAutoClose(): void {\n if (this.autoCloseTimer) {\n clearTimeout(this.autoCloseTimer);\n this.autoCloseTimer = undefined;\n }\n }\n\n private handleClose = (): void => {\n this.close();\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n private renderIcon() {\n const icons: Record<string, string> = {\n info: '\\u2139',\n success: '\\u2713',\n warning: '\\u26A0',\n danger: '\\u2715',\n neutral: '\\u2139',\n };\n return <span class=\"toast__icon-symbol\" aria-hidden=\"true\">{icons[this.variant] || '\\u2139'}</span>;\n }\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n if (!this.isVisible) return null;\n\n const ariaLive = this.variant === 'danger' ? 'assertive' : 'polite';\n\n return (\n <Host\n class={{\n 'ts-toast': true,\n [`ts-toast--${this.variant}`]: true,\n [`ts-toast--${this.position}`]: true,\n 'ts-toast--open': this.isVisible,\n }}\n role=\"status\"\n aria-live={ariaLive}\n >\n <div class=\"toast__base\" part=\"base\">\n <div class=\"toast__icon\" part=\"icon\">\n {this.renderIcon()}\n </div>\n\n <div class=\"toast__message\" part=\"message\">\n <slot />\n </div>\n\n <div class=\"toast__action\" part=\"action\">\n <slot name=\"action\" />\n </div>\n\n {this.dismissible && (\n <button\n class=\"toast__close\"\n part=\"close\"\n type=\"button\"\n aria-label=\"Dismiss notification\"\n onClick={this.handleClose}\n >\n \\u2715\n </button>\n )}\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"kEAAA,MAAMA,EAAW,IAAM,qyF,MCqBVC,EAAOC,EAAA,MAAAD,UAAAE,E,gHACVC,eAGiBC,QAA0B,OAG3CC,SAAW,IAGXC,YAAc,KAGkBC,KAAO,MAGtBC,SAA4B,YAGpBC,QAExBC,UAAY,MAGrB,gBAAAC,CAAiBC,GACf,GAAIA,EAAU,CACZC,KAAKH,UAAY,KACjBG,KAAKC,gB,KACA,CACLD,KAAKH,UAAY,MACjBG,KAAKE,gB,EAIT,iBAAAC,GACE,GAAIH,KAAKN,KAAM,CACbM,KAAKH,UAAY,KACjBG,KAAKC,gB,EAIT,oBAAAG,GACEJ,KAAKE,gB,CAKP,WAAMG,GACJL,KAAKN,KAAO,MACZM,KAAKH,UAAY,MACjBG,KAAKE,iBACLF,KAAKJ,QAAQU,M,CAKf,UAAMC,GACJP,KAAKN,KAAO,I,CAGN,cAAAO,GACND,KAAKE,iBACL,GAAIF,KAAKR,SAAW,EAAG,CACrBQ,KAAKV,eAAiBkB,YAAW,KAC/BR,KAAKK,OAAO,GACXL,KAAKR,S,EAIJ,cAAAU,GACN,GAAIF,KAAKV,eAAgB,CACvBmB,aAAaT,KAAKV,gBAClBU,KAAKV,eAAiBoB,S,EAIlBC,YAAc,KACpBX,KAAKK,OAAO,EAIN,UAAAO,GACN,MAAMC,EAAgC,CACpCC,KAAM,IACNC,QAAS,IACTC,QAAS,IACTC,OAAQ,IACRC,QAAS,KAEX,OAAOC,EAAA,QAAMC,MAAM,qBAAoB,cAAa,QAAQP,EAAMb,KAAKT,UAAY,I,CAIrF,MAAA8B,GACE,IAAKrB,KAAKH,UAAW,OAAO,KAE5B,MAAMyB,EAAWtB,KAAKT,UAAY,SAAW,YAAc,SAE3D,OACE4B,EAACI,EAAI,CACHH,MAAO,CACL,WAAY,KACZ,CAAC,aAAapB,KAAKT,WAAY,KAC/B,CAAC,aAAaS,KAAKL,YAAa,KAChC,iBAAkBK,KAAKH,WAEzB2B,KAAK,SAAQ,YACFF,GAEXH,EAAA,OAAKC,MAAM,cAAcK,KAAK,QAC5BN,EAAA,OAAKC,MAAM,cAAcK,KAAK,QAC3BzB,KAAKY,cAGRO,EAAA,OAAKC,MAAM,iBAAiBK,KAAK,WAC/BN,EAAA,cAGFA,EAAA,OAAKC,MAAM,gBAAgBK,KAAK,UAC9BN,EAAA,QAAMO,KAAK,YAGZ1B,KAAKP,aACJ0B,EAAA,UACEC,MAAM,eACNK,KAAK,QACLE,KAAK,SAAQ,aACF,uBACXC,QAAS5B,KAAKW,aAAW,Y","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as e,p as t,H as s,h as n,c as a}from"./p-DkpyRqHf.js";const o=()=>`:host{display:block;font-family:var(--ts-font-family-base);--ts-skeleton-radius:var(--ts-radius-sm);--ts-skeleton-height:1em;--ts-color-skeleton-base:var(--ts-color-neutral-200);--ts-color-skeleton-pulse:var(--ts-color-neutral-300)}.skeleton__base{display:flex;flex-direction:column;gap:var(--ts-spacing-2);width:100%;height:100%}.skeleton__line{block-size:var(--ts-skeleton-height);inline-size:100%;border-radius:var(--ts-skeleton-radius);background-color:var(--ts-color-skeleton-base)}.skeleton__line--last{inline-size:75%}:host([variant="circular"]) .skeleton__base{border-radius:50%;background-color:var(--ts-color-skeleton-base);aspect-ratio:1}:host([variant="rectangular"]) .skeleton__base{border-radius:var(--ts-skeleton-radius);background-color:var(--ts-color-skeleton-base);min-block-size:var(--ts-skeleton-height)}:host([animation="pulse"]) .skeleton__line,:host([animation="pulse"][variant="circular"]) .skeleton__base,:host([animation="pulse"][variant="rectangular"]) .skeleton__base{animation:ts-skeleton-pulse 1.5s ease-in-out infinite}@keyframes ts-skeleton-pulse{0%,100%{background-color:var(--ts-color-skeleton-base)}50%{background-color:var(--ts-color-skeleton-pulse)}}:host([animation="wave"]) .skeleton__line,:host([animation="wave"][variant="circular"]) .skeleton__base,:host([animation="wave"][variant="rectangular"]) .skeleton__base{background:linear-gradient( 90deg, var(--ts-color-skeleton-base) 25%, var(--ts-color-skeleton-pulse) 50%, var(--ts-color-skeleton-base) 75% );background-size:200% 100%;animation:ts-skeleton-wave 1.5s ease-in-out infinite}@keyframes ts-skeleton-wave{0%{background-position:200% 0}100%{background-position:-200% 0}}:host([animation="none"]) .skeleton__line,:host([animation="none"][variant="circular"]) .skeleton__base,:host([animation="none"][variant="rectangular"]) .skeleton__base{animation:none}`;const i=t(class e extends s{constructor(e){super();if(e!==false){this.__registerHost()}this.__attachShadow()}variant="text";width="100%";height;lines=1;animation="pulse";render(){const e={};if(this.width)e["width"]=this.width;if(this.height)e["height"]=this.height;if(this.variant==="text"){const t=[];for(let e=0;e<this.lines;e++){const s=e===this.lines-1&&this.lines>1;t.push(n("div",{class:{skeleton__line:true,"skeleton__line--last":s},part:"line"}))}return n(a,{class:{"ts-skeleton":true,[`ts-skeleton--${this.variant}`]:true,[`ts-skeleton--${this.animation}`]:true},style:e,"aria-hidden":"true"},n("div",{class:"skeleton__base",part:"base"},t))}return n(a,{class:{"ts-skeleton":true,[`ts-skeleton--${this.variant}`]:true,[`ts-skeleton--${this.animation}`]:true},style:e,"aria-hidden":"true"},n("div",{class:"skeleton__base",part:"base"}))}static get style(){return o()}},[513,"ts-skeleton",{variant:[513],width:[1],height:[1],lines:[2],animation:[513]}]);function l(){if(typeof customElements==="undefined"){return}const t=["ts-skeleton"];t.forEach((t=>{switch(t){case"ts-skeleton":if(!customElements.get(e(t))){customElements.define(e(t),i)}break}}))}l();export{i as T,l as d};
|
|
2
|
+
//# sourceMappingURL=p-v-L32wKy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["skeletonCss","TsSkeleton","__stencil_proxyCustomElement","HTMLElement","variant","width","height","lines","animation","render","style","this","lineElements","i","isLast","push","h","class","skeleton__line","part","Host"],"sources":["src/components/skeleton/skeleton.css?tag=ts-skeleton&encapsulation=shadow","src/components/skeleton/skeleton.tsx"],"sourcesContent":["/* ==========================================================================\n ts-skeleton — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-skeleton-radius Border radius\n --ts-skeleton-height Default line height\n ========================================================================== */\n\n:host {\n display: block;\n font-family: var(--ts-font-family-base);\n\n --ts-skeleton-radius: var(--ts-radius-sm);\n --ts-skeleton-height: 1em;\n --ts-color-skeleton-base: var(--ts-color-neutral-200);\n --ts-color-skeleton-pulse: var(--ts-color-neutral-300);\n}\n\n.skeleton__base {\n display: flex;\n flex-direction: column;\n gap: var(--ts-spacing-2);\n width: 100%;\n height: 100%;\n}\n\n/* ---- Line (text variant) ---- */\n.skeleton__line {\n block-size: var(--ts-skeleton-height);\n inline-size: 100%;\n border-radius: var(--ts-skeleton-radius);\n background-color: var(--ts-color-skeleton-base);\n}\n\n.skeleton__line--last {\n inline-size: 75%;\n}\n\n/* ---- Circular variant ---- */\n:host([variant=\"circular\"]) .skeleton__base {\n border-radius: 50%;\n background-color: var(--ts-color-skeleton-base);\n aspect-ratio: 1;\n}\n\n/* ---- Rectangular variant ---- */\n:host([variant=\"rectangular\"]) .skeleton__base {\n border-radius: var(--ts-skeleton-radius);\n background-color: var(--ts-color-skeleton-base);\n min-block-size: var(--ts-skeleton-height);\n}\n\n/* ---- Pulse animation ---- */\n:host([animation=\"pulse\"]) .skeleton__line,\n:host([animation=\"pulse\"][variant=\"circular\"]) .skeleton__base,\n:host([animation=\"pulse\"][variant=\"rectangular\"]) .skeleton__base {\n animation: ts-skeleton-pulse 1.5s ease-in-out infinite;\n}\n\n@keyframes ts-skeleton-pulse {\n 0%, 100% { background-color: var(--ts-color-skeleton-base); }\n 50% { background-color: var(--ts-color-skeleton-pulse); }\n}\n\n/* ---- Wave animation ---- */\n:host([animation=\"wave\"]) .skeleton__line,\n:host([animation=\"wave\"][variant=\"circular\"]) .skeleton__base,\n:host([animation=\"wave\"][variant=\"rectangular\"]) .skeleton__base {\n background: linear-gradient(\n 90deg,\n var(--ts-color-skeleton-base) 25%,\n var(--ts-color-skeleton-pulse) 50%,\n var(--ts-color-skeleton-base) 75%\n );\n background-size: 200% 100%;\n animation: ts-skeleton-wave 1.5s ease-in-out infinite;\n}\n\n@keyframes ts-skeleton-wave {\n 0% { background-position: 200% 0; }\n 100% { background-position: -200% 0; }\n}\n\n/* ---- No animation ---- */\n:host([animation=\"none\"]) .skeleton__line,\n:host([animation=\"none\"][variant=\"circular\"]) .skeleton__base,\n:host([animation=\"none\"][variant=\"rectangular\"]) .skeleton__base {\n animation: none;\n}\n","import { Component, Prop, h, Host } from '@stencil/core';\n\n/**\n * @part base - The skeleton element container.\n * @part line - Individual skeleton line (text variant).\n */\n@Component({\n tag: 'ts-skeleton',\n styleUrl: 'skeleton.css',\n shadow: true,\n})\nexport class TsSkeleton {\n /** The skeleton shape variant. */\n @Prop({ reflect: true }) variant: 'text' | 'circular' | 'rectangular' = 'text';\n\n /** CSS width of the skeleton. */\n @Prop() width = '100%';\n\n /** CSS height of the skeleton. */\n @Prop() height?: string;\n\n /** Number of lines to render (text variant only). */\n @Prop() lines = 1;\n\n /** Animation style. */\n @Prop({ reflect: true }) animation: 'pulse' | 'wave' | 'none' = 'pulse';\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n const style: Record<string, string> = {};\n if (this.width) style['width'] = this.width;\n if (this.height) style['height'] = this.height;\n\n if (this.variant === 'text') {\n const lineElements = [];\n for (let i = 0; i < this.lines; i++) {\n const isLast = i === this.lines - 1 && this.lines > 1;\n lineElements.push(\n <div\n class={{\n 'skeleton__line': true,\n 'skeleton__line--last': isLast,\n }}\n part=\"line\"\n />,\n );\n }\n\n return (\n <Host\n class={{\n 'ts-skeleton': true,\n [`ts-skeleton--${this.variant}`]: true,\n [`ts-skeleton--${this.animation}`]: true,\n }}\n style={style}\n aria-hidden=\"true\"\n >\n <div class=\"skeleton__base\" part=\"base\">\n {lineElements}\n </div>\n </Host>\n );\n }\n\n return (\n <Host\n class={{\n 'ts-skeleton': true,\n [`ts-skeleton--${this.variant}`]: true,\n [`ts-skeleton--${this.animation}`]: true,\n }}\n style={style}\n aria-hidden=\"true\"\n >\n <div class=\"skeleton__base\" part=\"base\" />\n </Host>\n );\n }\n}\n"],"mappings":"gEAAA,MAAMA,EAAc,IAAM,k1D,MCWbC,EAAUC,EAAA,MAAAD,UAAAE,E,iFAEIC,QAA+C,OAGhEC,MAAQ,OAGRC,OAGAC,MAAQ,EAGSC,UAAuC,QAGhE,MAAAC,GACE,MAAMC,EAAgC,GACtC,GAAIC,KAAKN,MAAOK,EAAM,SAAWC,KAAKN,MACtC,GAAIM,KAAKL,OAAQI,EAAM,UAAYC,KAAKL,OAExC,GAAIK,KAAKP,UAAY,OAAQ,CAC3B,MAAMQ,EAAe,GACrB,IAAK,IAAIC,EAAI,EAAGA,EAAIF,KAAKJ,MAAOM,IAAK,CACnC,MAAMC,EAASD,IAAMF,KAAKJ,MAAQ,GAAKI,KAAKJ,MAAQ,EACpDK,EAAaG,KACXC,EAAA,OACEC,MAAO,CACLC,eAAkB,KAClB,uBAAwBJ,GAE1BK,KAAK,S,CAKX,OACEH,EAACI,EAAI,CACHH,MAAO,CACL,cAAe,KACf,CAAC,gBAAgBN,KAAKP,WAAY,KAClC,CAAC,gBAAgBO,KAAKH,aAAc,MAEtCE,MAAOA,EAAK,cACA,QAEZM,EAAA,OAAKC,MAAM,iBAAiBE,KAAK,QAC9BP,G,CAMT,OACEI,EAACI,EAAI,CACHH,MAAO,CACL,cAAe,KACf,CAAC,gBAAgBN,KAAKP,WAAY,KAClC,CAAC,gBAAgBO,KAAKH,aAAc,MAEtCE,MAAOA,EAAK,cACA,QAEZM,EAAA,OAAKC,MAAM,iBAAiBE,KAAK,S","ignoreList":[]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as s,p as t,H as e,d as i,h as r,c as a}from"./p-DkpyRqHf.js";const l=()=>`:host{display:block;--ts-slider-track-bg:var(--ts-color-neutral-200);--ts-slider-fill-bg:var(--ts-color-interactive-primary);--ts-slider-thumb-bg:var(--ts-color-neutral-0);--ts-slider-thumb-size:1.25rem}.slider__label{display:flex;justify-content:space-between;align-items:center;font-family:var(--ts-font-family-base);font-size:var(--ts-font-size-sm);font-weight:var(--ts-font-weight-semi);color:var(--ts-color-text-primary);margin-block-end:var(--ts-spacing-2)}.slider__value{font-family:var(--ts-font-family-base);font-size:var(--ts-font-size-sm);font-weight:var(--ts-font-weight-semi);color:var(--ts-color-text-secondary)}.slider__track{position:relative;block-size:var(--ts-slider-thumb-size);display:flex;align-items:center;cursor:pointer}.slider__track::before{content:'';position:absolute;inset-inline:0;block-size:4px;background-color:var(--ts-slider-track-bg);border-radius:var(--ts-radius-full)}.slider__fill{position:absolute;inset-inline-start:0;block-size:4px;background-color:var(--ts-slider-fill-bg);border-radius:var(--ts-radius-full);pointer-events:none}.slider__thumb{position:absolute;inline-size:var(--ts-slider-thumb-size);block-size:var(--ts-slider-thumb-size);border-radius:var(--ts-radius-full);background-color:var(--ts-slider-thumb-bg);border:2px solid var(--ts-slider-fill-bg);box-shadow:var(--ts-shadow-sm);transform:translateX(-50%);cursor:grab;outline:none;transition:box-shadow var(--ts-transition-fast), transform var(--ts-transition-fast)}.slider__thumb:focus-visible{box-shadow:var(--ts-focus-ring)}.slider__thumb:active{cursor:grabbing;transform:translateX(-50%) scale(1.1)}:host([size="sm"]){--ts-slider-thumb-size:1rem}:host([size="sm"]) .slider__track::before,:host([size="sm"]) .slider__fill{block-size:3px}:host([size="lg"]){--ts-slider-thumb-size:1.5rem}:host([size="lg"]) .slider__track::before,:host([size="lg"]) .slider__fill{block-size:6px}:host(.ts-slider--disabled){opacity:0.5}:host(.ts-slider--disabled) .slider__track{cursor:not-allowed}:host(.ts-slider--disabled) .slider__thumb{cursor:not-allowed}`;const o=t(class s extends e{constructor(s){super();if(s!==false){this.__registerHost()}this.__attachShadow();this.tsInput=i(this,"tsInput");this.tsChange=i(this,"tsChange")}get hostEl(){return this}trackEl;dragging=false;value=0;min=0;max=100;step=1;disabled=false;label;showValue=false;size="md";tsInput;tsChange;get percentage(){const s=this.max-this.min;if(s<=0)return 0;return(this.value-this.min)/s*100}clampAndStep(s){const t=Math.round((s-this.min)/this.step)*this.step+this.min;return Math.min(this.max,Math.max(this.min,t))}updateValueFromPosition(s){if(!this.trackEl)return;const t=this.trackEl.getBoundingClientRect();const e=(s-t.left)/t.width;const i=this.min+e*(this.max-this.min);this.value=this.clampAndStep(i)}handleMouseDown=s=>{if(this.disabled)return;s.preventDefault();this.dragging=true;this.updateValueFromPosition(s.clientX);this.tsInput.emit({value:this.value});const t=s=>{this.updateValueFromPosition(s.clientX);this.tsInput.emit({value:this.value})};const e=()=>{this.dragging=false;this.tsChange.emit({value:this.value});document.removeEventListener("mousemove",t);document.removeEventListener("mouseup",e)};document.addEventListener("mousemove",t);document.addEventListener("mouseup",e)};handleKeyDown=s=>{if(this.disabled)return;let t=this.value;const e=this.step*10;switch(s.key){case"ArrowRight":case"ArrowUp":s.preventDefault();t=this.clampAndStep(this.value+this.step);break;case"ArrowLeft":case"ArrowDown":s.preventDefault();t=this.clampAndStep(this.value-this.step);break;case"PageUp":s.preventDefault();t=this.clampAndStep(this.value+e);break;case"PageDown":s.preventDefault();t=this.clampAndStep(this.value-e);break;case"Home":s.preventDefault();t=this.min;break;case"End":s.preventDefault();t=this.max;break;default:return}if(t!==this.value){this.value=t;this.tsInput.emit({value:this.value});this.tsChange.emit({value:this.value})}};render(){const s=this.percentage;return r(a,{key:"c02613013e6e9c44f48c3916069020bf7252c154",class:{"ts-slider":true,[`ts-slider--${this.size}`]:true,"ts-slider--disabled":this.disabled}},this.label&&r("label",{key:"6919de6f5cbd24e18cd7154bcb056838e31f3d69",class:"slider__label",part:"label"},this.label,this.showValue&&r("span",{key:"c09c6b63da3db97623ff43d6ba329c3072756bd2",class:"slider__value"},this.value)),!this.label&&this.showValue&&r("span",{key:"1ec0bc6e6cecc217b52f5cf36ad2557dfcf3f724",class:"slider__value",part:"label","aria-hidden":"true"},this.value),r("div",{key:"37c433458db6f6d37139fb2b402391570a7bcc2d",class:"slider__track",part:"track",ref:s=>this.trackEl=s,onMouseDown:this.handleMouseDown},r("div",{key:"e2ef651e9b102ea1d0eaf8d1cb5516cd1a413d69",class:"slider__fill",part:"fill",style:{width:`${s}%`}}),r("div",{key:"bff51286191e7beffcbff2d70d9595497bcb8d0b",class:"slider__thumb",part:"thumb",role:"slider",tabindex:this.disabled?-1:0,"aria-valuenow":this.value,"aria-valuemin":this.min,"aria-valuemax":this.max,"aria-label":this.label||undefined,"aria-disabled":this.disabled?"true":undefined,style:{insetInlineStart:`${s}%`},onKeyDown:this.handleKeyDown})))}static get style(){return l()}},[513,"ts-slider",{value:[1538],min:[2],max:[2],step:[2],disabled:[516],label:[1],showValue:[516,"show-value"],size:[513],dragging:[32]}]);function n(){if(typeof customElements==="undefined"){return}const t=["ts-slider"];t.forEach((t=>{switch(t){case"ts-slider":if(!customElements.get(s(t))){customElements.define(s(t),o)}break}}))}n();export{o as T,n as d};
|
|
2
|
+
//# sourceMappingURL=p-zveaarwa.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["sliderCss","TsSlider","__stencil_proxyCustomElement","HTMLElement","trackEl","dragging","value","min","max","step","disabled","label","showValue","size","tsInput","tsChange","percentage","range","this","clampAndStep","val","stepped","Math","round","updateValueFromPosition","clientX","rect","getBoundingClientRect","ratio","left","width","rawValue","handleMouseDown","event","preventDefault","emit","handleMouseMove","e","handleMouseUp","document","removeEventListener","addEventListener","handleKeyDown","newValue","bigStep","key","render","percent","h","Host","class","part","ref","el","onMouseDown","style","role","tabindex","undefined","insetInlineStart","onKeyDown"],"sources":["src/components/slider/slider.css?tag=ts-slider&encapsulation=shadow","src/components/slider/slider.tsx"],"sourcesContent":["/* ==========================================================================\n ts-slider — Shadow DOM Scoped Styles\n\n Component tokens (Tier 3):\n --ts-slider-track-bg Track background color\n --ts-slider-fill-bg Fill background color\n --ts-slider-thumb-bg Thumb background color\n --ts-slider-thumb-size Thumb dimensions\n ========================================================================== */\n\n:host {\n display: block;\n\n --ts-slider-track-bg: var(--ts-color-neutral-200);\n --ts-slider-fill-bg: var(--ts-color-interactive-primary);\n --ts-slider-thumb-bg: var(--ts-color-neutral-0);\n --ts-slider-thumb-size: 1.25rem;\n}\n\n/* ---- Label ---- */\n.slider__label {\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-family: var(--ts-font-family-base);\n font-size: var(--ts-font-size-sm);\n font-weight: var(--ts-font-weight-semi);\n color: var(--ts-color-text-primary);\n margin-block-end: var(--ts-spacing-2);\n}\n\n.slider__value {\n font-family: var(--ts-font-family-base);\n font-size: var(--ts-font-size-sm);\n font-weight: var(--ts-font-weight-semi);\n color: var(--ts-color-text-secondary);\n}\n\n/* ---- Track ---- */\n.slider__track {\n position: relative;\n block-size: var(--ts-slider-thumb-size);\n display: flex;\n align-items: center;\n cursor: pointer;\n}\n\n.slider__track::before {\n content: '';\n position: absolute;\n inset-inline: 0;\n block-size: 4px;\n background-color: var(--ts-slider-track-bg);\n border-radius: var(--ts-radius-full);\n}\n\n/* ---- Fill ---- */\n.slider__fill {\n position: absolute;\n inset-inline-start: 0;\n block-size: 4px;\n background-color: var(--ts-slider-fill-bg);\n border-radius: var(--ts-radius-full);\n pointer-events: none;\n}\n\n/* ---- Thumb ---- */\n.slider__thumb {\n position: absolute;\n inline-size: var(--ts-slider-thumb-size);\n block-size: var(--ts-slider-thumb-size);\n border-radius: var(--ts-radius-full);\n background-color: var(--ts-slider-thumb-bg);\n border: 2px solid var(--ts-slider-fill-bg);\n box-shadow: var(--ts-shadow-sm);\n transform: translateX(-50%);\n cursor: grab;\n outline: none;\n transition:\n box-shadow var(--ts-transition-fast),\n transform var(--ts-transition-fast);\n}\n\n.slider__thumb:focus-visible {\n box-shadow: var(--ts-focus-ring);\n}\n\n.slider__thumb:active {\n cursor: grabbing;\n transform: translateX(-50%) scale(1.1);\n}\n\n/* ---- Sizes ---- */\n:host([size=\"sm\"]) {\n --ts-slider-thumb-size: 1rem;\n}\n\n:host([size=\"sm\"]) .slider__track::before,\n:host([size=\"sm\"]) .slider__fill {\n block-size: 3px;\n}\n\n:host([size=\"lg\"]) {\n --ts-slider-thumb-size: 1.5rem;\n}\n\n:host([size=\"lg\"]) .slider__track::before,\n:host([size=\"lg\"]) .slider__fill {\n block-size: 6px;\n}\n\n/* ---- Disabled ---- */\n:host(.ts-slider--disabled) {\n opacity: 0.5;\n}\n\n:host(.ts-slider--disabled) .slider__track {\n cursor: not-allowed;\n}\n\n:host(.ts-slider--disabled) .slider__thumb {\n cursor: not-allowed;\n}\n","import { Component, Prop, Event, State, h, Host, Element } from '@stencil/core';\nimport type { EventEmitter } from '@stencil/core';\nimport type { TsSize } from '../../types';\n\n/**\n * @part track - The slider track.\n * @part fill - The filled portion of the track.\n * @part thumb - The draggable thumb.\n * @part label - The value label.\n */\n@Component({\n tag: 'ts-slider',\n styleUrl: 'slider.css',\n shadow: true,\n})\nexport class TsSlider {\n @Element() hostEl!: HTMLElement;\n\n private trackEl?: HTMLElement;\n\n @State() dragging = false;\n\n /** Current slider value. */\n @Prop({ mutable: true, reflect: true }) value = 0;\n\n /** Minimum value. */\n @Prop() min = 0;\n\n /** Maximum value. */\n @Prop() max = 100;\n\n /** Step increment. */\n @Prop() step = 1;\n\n /** Disables the slider. */\n @Prop({ reflect: true }) disabled = false;\n\n /** Accessible label. */\n @Prop() label?: string;\n\n /** Whether to display the current value. */\n @Prop({ reflect: true }) showValue = false;\n\n /** The size of the slider. */\n @Prop({ reflect: true }) size: TsSize = 'md';\n\n /** Emitted continuously during drag. */\n @Event({ eventName: 'tsInput' }) tsInput!: EventEmitter<{ value: number }>;\n\n /** Emitted when drag ends (value committed). */\n @Event({ eventName: 'tsChange' }) tsChange!: EventEmitter<{ value: number }>;\n\n private get percentage(): number {\n const range = this.max - this.min;\n if (range <= 0) return 0;\n return ((this.value - this.min) / range) * 100;\n }\n\n private clampAndStep(val: number): number {\n // Snap to step\n const stepped = Math.round((val - this.min) / this.step) * this.step + this.min;\n // Clamp\n return Math.min(this.max, Math.max(this.min, stepped));\n }\n\n private updateValueFromPosition(clientX: number): void {\n if (!this.trackEl) return;\n const rect = this.trackEl.getBoundingClientRect();\n const ratio = (clientX - rect.left) / rect.width;\n const rawValue = this.min + ratio * (this.max - this.min);\n this.value = this.clampAndStep(rawValue);\n }\n\n private handleMouseDown = (event: MouseEvent): void => {\n if (this.disabled) return;\n event.preventDefault();\n this.dragging = true;\n this.updateValueFromPosition(event.clientX);\n this.tsInput.emit({ value: this.value });\n\n const handleMouseMove = (e: MouseEvent): void => {\n this.updateValueFromPosition(e.clientX);\n this.tsInput.emit({ value: this.value });\n };\n\n const handleMouseUp = (): void => {\n this.dragging = false;\n this.tsChange.emit({ value: this.value });\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n };\n\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n };\n\n private handleKeyDown = (event: KeyboardEvent): void => {\n if (this.disabled) return;\n\n let newValue = this.value;\n const bigStep = this.step * 10;\n\n switch (event.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n event.preventDefault();\n newValue = this.clampAndStep(this.value + this.step);\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n event.preventDefault();\n newValue = this.clampAndStep(this.value - this.step);\n break;\n case 'PageUp':\n event.preventDefault();\n newValue = this.clampAndStep(this.value + bigStep);\n break;\n case 'PageDown':\n event.preventDefault();\n newValue = this.clampAndStep(this.value - bigStep);\n break;\n case 'Home':\n event.preventDefault();\n newValue = this.min;\n break;\n case 'End':\n event.preventDefault();\n newValue = this.max;\n break;\n default:\n return;\n }\n\n if (newValue !== this.value) {\n this.value = newValue;\n this.tsInput.emit({ value: this.value });\n this.tsChange.emit({ value: this.value });\n }\n };\n\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n render() {\n const percent = this.percentage;\n\n return (\n <Host\n class={{\n 'ts-slider': true,\n [`ts-slider--${this.size}`]: true,\n 'ts-slider--disabled': this.disabled,\n }}\n >\n {this.label && (\n <label class=\"slider__label\" part=\"label\">\n {this.label}\n {this.showValue && <span class=\"slider__value\">{this.value}</span>}\n </label>\n )}\n {!this.label && this.showValue && (\n <span class=\"slider__value\" part=\"label\" aria-hidden=\"true\">\n {this.value}\n </span>\n )}\n <div\n class=\"slider__track\"\n part=\"track\"\n ref={(el) => (this.trackEl = el)}\n onMouseDown={this.handleMouseDown}\n >\n <div\n class=\"slider__fill\"\n part=\"fill\"\n style={{ width: `${percent}%` }}\n />\n <div\n class=\"slider__thumb\"\n part=\"thumb\"\n role=\"slider\"\n tabindex={this.disabled ? -1 : 0}\n aria-valuenow={this.value}\n aria-valuemin={this.min}\n aria-valuemax={this.max}\n aria-label={this.label || undefined}\n aria-disabled={this.disabled ? 'true' : undefined}\n style={{ insetInlineStart: `${percent}%` }}\n onKeyDown={this.handleKeyDown}\n />\n </div>\n </Host>\n );\n }\n}\n"],"mappings":"uEAAA,MAAMA,EAAY,IAAM,ygE,MCeXC,EAAQC,EAAA,MAAAD,UAAAE,E,0KAGXC,QAECC,SAAW,MAGoBC,MAAQ,EAGxCC,IAAM,EAGNC,IAAM,IAGNC,KAAO,EAGUC,SAAW,MAG5BC,MAGiBC,UAAY,MAGZC,KAAe,KAGPC,QAGCC,SAElC,cAAYC,GACV,MAAMC,EAAQC,KAAKV,IAAMU,KAAKX,IAC9B,GAAIU,GAAS,EAAG,OAAO,EACvB,OAASC,KAAKZ,MAAQY,KAAKX,KAAOU,EAAS,G,CAGrC,YAAAE,CAAaC,GAEnB,MAAMC,EAAUC,KAAKC,OAAOH,EAAMF,KAAKX,KAAOW,KAAKT,MAAQS,KAAKT,KAAOS,KAAKX,IAE5E,OAAOe,KAAKf,IAAIW,KAAKV,IAAKc,KAAKd,IAAIU,KAAKX,IAAKc,G,CAGvC,uBAAAG,CAAwBC,GAC9B,IAAKP,KAAKd,QAAS,OACnB,MAAMsB,EAAOR,KAAKd,QAAQuB,wBAC1B,MAAMC,GAASH,EAAUC,EAAKG,MAAQH,EAAKI,MAC3C,MAAMC,EAAWb,KAAKX,IAAMqB,GAASV,KAAKV,IAAMU,KAAKX,KACrDW,KAAKZ,MAAQY,KAAKC,aAAaY,E,CAGzBC,gBAAmBC,IACzB,GAAIf,KAAKR,SAAU,OACnBuB,EAAMC,iBACNhB,KAAKb,SAAW,KAChBa,KAAKM,wBAAwBS,EAAMR,SACnCP,KAAKJ,QAAQqB,KAAK,CAAE7B,MAAOY,KAAKZ,QAEhC,MAAM8B,EAAmBC,IACvBnB,KAAKM,wBAAwBa,EAAEZ,SAC/BP,KAAKJ,QAAQqB,KAAK,CAAE7B,MAAOY,KAAKZ,OAAQ,EAG1C,MAAMgC,EAAgB,KACpBpB,KAAKb,SAAW,MAChBa,KAAKH,SAASoB,KAAK,CAAE7B,MAAOY,KAAKZ,QACjCiC,SAASC,oBAAoB,YAAaJ,GAC1CG,SAASC,oBAAoB,UAAWF,EAAc,EAGxDC,SAASE,iBAAiB,YAAaL,GACvCG,SAASE,iBAAiB,UAAWH,EAAc,EAG7CI,cAAiBT,IACvB,GAAIf,KAAKR,SAAU,OAEnB,IAAIiC,EAAWzB,KAAKZ,MACpB,MAAMsC,EAAU1B,KAAKT,KAAO,GAE5B,OAAQwB,EAAMY,KACZ,IAAK,aACL,IAAK,UACHZ,EAAMC,iBACNS,EAAWzB,KAAKC,aAAaD,KAAKZ,MAAQY,KAAKT,MAC/C,MACF,IAAK,YACL,IAAK,YACHwB,EAAMC,iBACNS,EAAWzB,KAAKC,aAAaD,KAAKZ,MAAQY,KAAKT,MAC/C,MACF,IAAK,SACHwB,EAAMC,iBACNS,EAAWzB,KAAKC,aAAaD,KAAKZ,MAAQsC,GAC1C,MACF,IAAK,WACHX,EAAMC,iBACNS,EAAWzB,KAAKC,aAAaD,KAAKZ,MAAQsC,GAC1C,MACF,IAAK,OACHX,EAAMC,iBACNS,EAAWzB,KAAKX,IAChB,MACF,IAAK,MACH0B,EAAMC,iBACNS,EAAWzB,KAAKV,IAChB,MACF,QACE,OAGJ,GAAImC,IAAazB,KAAKZ,MAAO,CAC3BY,KAAKZ,MAAQqC,EACbzB,KAAKJ,QAAQqB,KAAK,CAAE7B,MAAOY,KAAKZ,QAChCY,KAAKH,SAASoB,KAAK,CAAE7B,MAAOY,KAAKZ,O,GAKrC,MAAAwC,GACE,MAAMC,EAAU7B,KAAKF,WAErB,OACEgC,EAACC,EAAI,CAAAJ,IAAA,2CACHK,MAAO,CACL,YAAa,KACb,CAAC,cAAchC,KAAKL,QAAS,KAC7B,sBAAuBK,KAAKR,WAG7BQ,KAAKP,OACJqC,EAAA,SAAAH,IAAA,2CAAOK,MAAM,gBAAgBC,KAAK,SAC/BjC,KAAKP,MACLO,KAAKN,WAAaoC,EAAA,QAAAH,IAAA,2CAAMK,MAAM,iBAAiBhC,KAAKZ,SAGvDY,KAAKP,OAASO,KAAKN,WACnBoC,EAAA,QAAAH,IAAA,2CAAMK,MAAM,gBAAgBC,KAAK,QAAO,cAAa,QAClDjC,KAAKZ,OAGV0C,EAAA,OAAAH,IAAA,2CACEK,MAAM,gBACNC,KAAK,QACLC,IAAMC,GAAQnC,KAAKd,QAAUiD,EAC7BC,YAAapC,KAAKc,iBAElBgB,EAAA,OAAAH,IAAA,2CACEK,MAAM,eACNC,KAAK,OACLI,MAAO,CAAEzB,MAAO,GAAGiB,QAErBC,EAAA,OAAAH,IAAA,2CACEK,MAAM,gBACNC,KAAK,QACLK,KAAK,SACLC,SAAUvC,KAAKR,UAAW,EAAK,EAAC,gBACjBQ,KAAKZ,MAAK,gBACVY,KAAKX,IAAG,gBACRW,KAAKV,IAAG,aACXU,KAAKP,OAAS+C,UAAS,gBACpBxC,KAAKR,SAAW,OAASgD,UACxCH,MAAO,CAAEI,iBAAkB,GAAGZ,MAC9Ba,UAAW1C,KAAKwB,iB","ignoreList":[]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Components, JSX } from "../types/components";
|
|
2
|
+
|
|
3
|
+
interface TsAccordionItem extends Components.TsAccordionItem, HTMLElement {}
|
|
4
|
+
export const TsAccordionItem: {
|
|
5
|
+
prototype: TsAccordionItem;
|
|
6
|
+
new (): TsAccordionItem;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Used to define this component and all nested components recursively.
|
|
10
|
+
*/
|
|
11
|
+
export const defineCustomElement: () => void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sources":[],"mappings":"","ignoreList":[]}
|