snice 2.5.4 → 3.2.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/README.md +537 -869
- package/bin/templates/base/src/components/counter-button.ts +13 -26
- package/bin/templates/base/src/controllers/counter-controller.ts +3 -3
- package/dist/components/accordion/snice-accordion-item.d.ts +4 -5
- package/dist/components/accordion/snice-accordion-item.js +37 -39
- package/dist/components/accordion/snice-accordion-item.js.map +1 -1
- package/dist/components/accordion/snice-accordion.d.ts +5 -11
- package/dist/components/accordion/snice-accordion.js +51 -52
- package/dist/components/accordion/snice-accordion.js.map +1 -1
- package/dist/components/alert/snice-alert.d.ts +2 -6
- package/dist/components/alert/snice-alert.js +41 -56
- package/dist/components/alert/snice-alert.js.map +1 -1
- package/dist/components/avatar/snice-avatar.d.ts +2 -6
- package/dist/components/avatar/snice-avatar.js +64 -71
- package/dist/components/avatar/snice-avatar.js.map +1 -1
- package/dist/components/badge/snice-badge.d.ts +2 -3
- package/dist/components/badge/snice-badge.js +22 -23
- package/dist/components/badge/snice-badge.js.map +1 -1
- package/dist/components/banner/snice-banner.d.ts +22 -0
- package/dist/components/banner/snice-banner.js +180 -0
- package/dist/components/banner/snice-banner.js.map +1 -0
- package/dist/components/banner/snice-banner.types.d.ts +14 -0
- package/dist/components/breadcrumbs/snice-breadcrumbs.d.ts +5 -12
- package/dist/components/breadcrumbs/snice-breadcrumbs.js +88 -89
- package/dist/components/breadcrumbs/snice-breadcrumbs.js.map +1 -1
- package/dist/components/button/snice-button.d.ts +3 -7
- package/dist/components/button/snice-button.js +37 -58
- package/dist/components/button/snice-button.js.map +1 -1
- package/dist/components/card/snice-card.d.ts +5 -8
- package/dist/components/card/snice-card.js +71 -56
- package/dist/components/card/snice-card.js.map +1 -1
- package/dist/components/checkbox/snice-checkbox.d.ts +4 -13
- package/dist/components/checkbox/snice-checkbox.js +66 -137
- package/dist/components/checkbox/snice-checkbox.js.map +1 -1
- package/dist/components/chip/snice-chip.d.ts +5 -11
- package/dist/components/chip/snice-chip.js +44 -47
- package/dist/components/chip/snice-chip.js.map +1 -1
- package/dist/components/color-display/snice-color-display.d.ts +14 -0
- package/dist/components/color-display/snice-color-display.js +151 -0
- package/dist/components/color-display/snice-color-display.js.map +1 -0
- package/dist/components/color-display/snice-color-display.types.d.ts +10 -0
- package/dist/components/color-picker/snice-color-picker.d.ts +50 -0
- package/dist/components/color-picker/snice-color-picker.js +489 -0
- package/dist/components/color-picker/snice-color-picker.js.map +1 -0
- package/dist/components/color-picker/snice-color-picker.types.d.ts +19 -0
- package/dist/components/date-picker/snice-date-picker.d.ts +11 -11
- package/dist/components/date-picker/snice-date-picker.js +134 -133
- package/dist/components/date-picker/snice-date-picker.js.map +1 -1
- package/dist/components/divider/snice-divider.d.ts +2 -4
- package/dist/components/divider/snice-divider.js +14 -22
- package/dist/components/divider/snice-divider.js.map +1 -1
- package/dist/components/drawer/snice-drawer.d.ts +4 -4
- package/dist/components/drawer/snice-drawer.js +25 -19
- package/dist/components/drawer/snice-drawer.js.map +1 -1
- package/dist/components/empty-state/snice-empty-state.d.ts +13 -0
- package/dist/components/empty-state/snice-empty-state.js +121 -0
- package/dist/components/empty-state/snice-empty-state.js.map +1 -0
- package/dist/components/empty-state/snice-empty-state.types.d.ts +9 -0
- package/dist/components/file-upload/snice-file-upload.d.ts +45 -0
- package/dist/components/file-upload/snice-file-upload.js +394 -0
- package/dist/components/file-upload/snice-file-upload.js.map +1 -0
- package/dist/components/file-upload/snice-file-upload.types.d.ts +22 -0
- package/dist/components/image/snice-image.d.ts +22 -0
- package/dist/components/image/snice-image.js +201 -0
- package/dist/components/image/snice-image.js.map +1 -0
- package/dist/components/image/snice-image.types.d.ts +17 -0
- package/dist/components/input/snice-input.d.ts +8 -6
- package/dist/components/input/snice-input.js +122 -105
- package/dist/components/input/snice-input.js.map +1 -1
- package/dist/components/kpi/snice-kpi.d.ts +16 -0
- package/dist/components/kpi/snice-kpi.js +162 -0
- package/dist/components/kpi/snice-kpi.js.map +1 -0
- package/dist/components/kpi/snice-kpi.types.d.ts +12 -0
- package/dist/components/layout/snice-layout-blog.d.ts +4 -4
- package/dist/components/layout/snice-layout-blog.js +21 -19
- package/dist/components/layout/snice-layout-blog.js.map +1 -1
- package/dist/components/layout/snice-layout-card.d.ts +2 -2
- package/dist/components/layout/snice-layout-card.js +16 -9
- package/dist/components/layout/snice-layout-card.js.map +1 -1
- package/dist/components/layout/snice-layout-centered.d.ts +2 -2
- package/dist/components/layout/snice-layout-centered.js +14 -7
- package/dist/components/layout/snice-layout-centered.js.map +1 -1
- package/dist/components/layout/snice-layout-dashboard.d.ts +5 -5
- package/dist/components/layout/snice-layout-dashboard.js +38 -30
- package/dist/components/layout/snice-layout-dashboard.js.map +1 -1
- package/dist/components/layout/snice-layout-fullscreen.d.ts +2 -2
- package/dist/components/layout/snice-layout-fullscreen.js +17 -10
- package/dist/components/layout/snice-layout-fullscreen.js.map +1 -1
- package/dist/components/layout/snice-layout-landing.d.ts +4 -4
- package/dist/components/layout/snice-layout-landing.js +21 -19
- package/dist/components/layout/snice-layout-landing.js.map +1 -1
- package/dist/components/layout/snice-layout-minimal.d.ts +2 -2
- package/dist/components/layout/snice-layout-minimal.js +17 -6
- package/dist/components/layout/snice-layout-minimal.js.map +1 -1
- package/dist/components/layout/snice-layout-sidebar.d.ts +5 -4
- package/dist/components/layout/snice-layout-sidebar.js +42 -20
- package/dist/components/layout/snice-layout-sidebar.js.map +1 -1
- package/dist/components/layout/snice-layout-split.d.ts +2 -2
- package/dist/components/layout/snice-layout-split.js +14 -7
- package/dist/components/layout/snice-layout-split.js.map +1 -1
- package/dist/components/layout/snice-layout.d.ts +4 -4
- package/dist/components/layout/snice-layout.js +16 -10
- package/dist/components/layout/snice-layout.js.map +1 -1
- package/dist/components/link/snice-link.d.ts +13 -0
- package/dist/components/link/snice-link.js +137 -0
- package/dist/components/link/snice-link.js.map +1 -0
- package/dist/components/link/snice-link.types.d.ts +11 -0
- package/dist/components/login/snice-login.d.ts +6 -11
- package/dist/components/login/snice-login.js +97 -71
- package/dist/components/login/snice-login.js.map +1 -1
- package/dist/components/modal/snice-modal.d.ts +5 -9
- package/dist/components/modal/snice-modal.js +47 -78
- package/dist/components/modal/snice-modal.js.map +1 -1
- package/dist/components/nav/snice-nav.d.ts +13 -7
- package/dist/components/nav/snice-nav.js +191 -100
- package/dist/components/nav/snice-nav.js.map +1 -1
- package/dist/components/nav/snice-nav.types.d.ts +3 -3
- package/dist/components/pagination/snice-pagination.d.ts +6 -7
- package/dist/components/pagination/snice-pagination.js +94 -81
- package/dist/components/pagination/snice-pagination.js.map +1 -1
- package/dist/components/progress/snice-progress.d.ts +2 -7
- package/dist/components/progress/snice-progress.js +41 -98
- package/dist/components/progress/snice-progress.js.map +1 -1
- package/dist/components/radio/snice-radio.d.ts +4 -4
- package/dist/components/radio/snice-radio.js +52 -44
- package/dist/components/radio/snice-radio.js.map +1 -1
- package/dist/components/select/snice-option.d.ts +2 -1
- package/dist/components/select/snice-option.js +12 -5
- package/dist/components/select/snice-option.js.map +1 -1
- package/dist/components/select/snice-select.d.ts +9 -21
- package/dist/components/select/snice-select.js +98 -170
- package/dist/components/select/snice-select.js.map +1 -1
- package/dist/components/skeleton/snice-skeleton.d.ts +2 -6
- package/dist/components/skeleton/snice-skeleton.js +18 -49
- package/dist/components/skeleton/snice-skeleton.js.map +1 -1
- package/dist/components/slider/snice-slider.d.ts +53 -0
- package/dist/components/slider/snice-slider.js +479 -0
- package/dist/components/slider/snice-slider.js.map +1 -0
- package/dist/components/slider/snice-slider.types.d.ts +26 -0
- package/dist/components/snice-cell-C0slgOpe.js +4 -0
- package/dist/components/snice-cell-C0slgOpe.js.map +1 -0
- package/dist/components/sparkline/snice-sparkline.d.ts +21 -0
- package/dist/components/sparkline/snice-sparkline.js +228 -0
- package/dist/components/sparkline/snice-sparkline.js.map +1 -0
- package/dist/components/sparkline/snice-sparkline.types.d.ts +16 -0
- package/dist/components/spinner/snice-spinner.d.ts +10 -0
- package/dist/components/spinner/snice-spinner.js +109 -0
- package/dist/components/spinner/snice-spinner.js.map +1 -0
- package/dist/components/spinner/snice-spinner.types.d.ts +8 -0
- package/dist/components/stepper/snice-stepper-panel.d.ts +8 -0
- package/dist/components/stepper/snice-stepper-panel.js +70 -0
- package/dist/components/stepper/snice-stepper-panel.js.map +1 -0
- package/dist/components/stepper/snice-stepper-panel.types.d.ts +4 -0
- package/dist/components/stepper/snice-stepper.d.ts +15 -0
- package/dist/components/stepper/snice-stepper.js +163 -0
- package/dist/components/stepper/snice-stepper.js.map +1 -0
- package/dist/components/stepper/snice-stepper.types.d.ts +13 -0
- package/dist/components/switch/snice-switch.d.ts +2 -2
- package/dist/components/switch/snice-switch.js +38 -26
- package/dist/components/switch/snice-switch.js.map +1 -1
- package/dist/components/table/snice-cell-actions.d.ts +24 -0
- package/dist/components/table/snice-cell-actions.js +149 -0
- package/dist/components/table/snice-cell-actions.js.map +1 -0
- package/dist/components/table/snice-cell-boolean.d.ts +2 -2
- package/dist/components/table/snice-cell-boolean.js +13 -7
- package/dist/components/table/snice-cell-boolean.js.map +1 -1
- package/dist/components/table/snice-cell-color.d.ts +18 -0
- package/dist/components/table/snice-cell-color.js +149 -0
- package/dist/components/table/snice-cell-color.js.map +1 -0
- package/dist/components/table/snice-cell-currency.d.ts +24 -0
- package/dist/components/table/snice-cell-currency.js +235 -0
- package/dist/components/table/snice-cell-currency.js.map +1 -0
- package/dist/components/table/snice-cell-date.d.ts +2 -2
- package/dist/components/table/snice-cell-date.js +14 -8
- package/dist/components/table/snice-cell-date.js.map +1 -1
- package/dist/components/table/snice-cell-duration.d.ts +2 -2
- package/dist/components/table/snice-cell-duration.js +12 -6
- package/dist/components/table/snice-cell-duration.js.map +1 -1
- package/dist/components/table/snice-cell-email.d.ts +15 -0
- package/dist/components/table/snice-cell-email.js +125 -0
- package/dist/components/table/snice-cell-email.js.map +1 -0
- package/dist/components/table/snice-cell-filesize.d.ts +2 -2
- package/dist/components/table/snice-cell-filesize.js +12 -6
- package/dist/components/table/snice-cell-filesize.js.map +1 -1
- package/dist/components/table/snice-cell-image.d.ts +20 -0
- package/dist/components/table/snice-cell-image.js +162 -0
- package/dist/components/table/snice-cell-image.js.map +1 -0
- package/dist/components/table/snice-cell-json.d.ts +20 -0
- package/dist/components/table/snice-cell-json.js +186 -0
- package/dist/components/table/snice-cell-json.js.map +1 -0
- package/dist/components/table/snice-cell-link.d.ts +17 -0
- package/dist/components/table/snice-cell-link.js +142 -0
- package/dist/components/table/snice-cell-link.js.map +1 -0
- package/dist/components/table/snice-cell-location.d.ts +19 -0
- package/dist/components/table/snice-cell-location.js +185 -0
- package/dist/components/table/snice-cell-location.js.map +1 -0
- package/dist/components/table/snice-cell-number.d.ts +2 -2
- package/dist/components/table/snice-cell-number.js +12 -6
- package/dist/components/table/snice-cell-number.js.map +1 -1
- package/dist/components/table/snice-cell-percentage.d.ts +22 -0
- package/dist/components/table/snice-cell-percentage.js +208 -0
- package/dist/components/table/snice-cell-percentage.js.map +1 -0
- package/dist/components/table/snice-cell-phone.d.ts +18 -0
- package/dist/components/table/snice-cell-phone.js +153 -0
- package/dist/components/table/snice-cell-phone.js.map +1 -0
- package/dist/components/table/snice-cell-progress.d.ts +2 -2
- package/dist/components/table/snice-cell-progress.js +12 -6
- package/dist/components/table/snice-cell-progress.js.map +1 -1
- package/dist/components/table/snice-cell-rating.d.ts +2 -2
- package/dist/components/table/snice-cell-rating.js +12 -6
- package/dist/components/table/snice-cell-rating.js.map +1 -1
- package/dist/components/table/snice-cell-sparkline.d.ts +2 -2
- package/dist/components/table/snice-cell-sparkline.js +13 -7
- package/dist/components/table/snice-cell-sparkline.js.map +1 -1
- package/dist/components/table/snice-cell-status.d.ts +17 -0
- package/dist/components/table/snice-cell-status.js +144 -0
- package/dist/components/table/snice-cell-status.js.map +1 -0
- package/dist/components/table/snice-cell-tag.d.ts +16 -0
- package/dist/components/table/snice-cell-tag.js +131 -0
- package/dist/components/table/snice-cell-tag.js.map +1 -0
- package/dist/components/table/snice-cell-text.d.ts +2 -2
- package/dist/components/table/snice-cell-text.js +14 -8
- package/dist/components/table/snice-cell-text.js.map +1 -1
- package/dist/components/table/snice-cell.d.ts +2 -2
- package/dist/components/table/snice-cell.js +12 -6
- package/dist/components/table/snice-cell.js.map +1 -1
- package/dist/components/table/snice-column.d.ts +1 -1
- package/dist/components/table/snice-column.js +6 -3
- package/dist/components/table/snice-column.js.map +1 -1
- package/dist/components/table/snice-header.d.ts +5 -5
- package/dist/components/table/snice-header.js +60 -50
- package/dist/components/table/snice-header.js.map +1 -1
- package/dist/components/table/snice-progress.d.ts +2 -2
- package/dist/components/table/snice-progress.js +18 -11
- package/dist/components/table/snice-progress.js.map +1 -1
- package/dist/components/table/snice-rating.d.ts +2 -2
- package/dist/components/table/snice-rating.js +15 -8
- package/dist/components/table/snice-rating.js.map +1 -1
- package/dist/components/table/snice-row.d.ts +17 -6
- package/dist/components/table/snice-row.js +95 -44
- package/dist/components/table/snice-row.js.map +1 -1
- package/dist/components/table/snice-table.d.ts +18 -10
- package/dist/components/table/snice-table.js +355 -173
- package/dist/components/table/snice-table.js.map +1 -1
- package/dist/components/table/snice-table.types.d.ts +101 -2
- package/dist/components/tabs/snice-tab-panel.d.ts +2 -2
- package/dist/components/tabs/snice-tab-panel.js +12 -6
- package/dist/components/tabs/snice-tab-panel.js.map +1 -1
- package/dist/components/tabs/snice-tab.d.ts +6 -5
- package/dist/components/tabs/snice-tab.js +36 -19
- package/dist/components/tabs/snice-tab.js.map +1 -1
- package/dist/components/tabs/snice-tabs.d.ts +5 -5
- package/dist/components/tabs/snice-tabs.js +38 -28
- package/dist/components/tabs/snice-tabs.js.map +1 -1
- package/dist/components/textarea/snice-textarea.d.ts +52 -0
- package/dist/components/textarea/snice-textarea.js +407 -0
- package/dist/components/textarea/snice-textarea.js.map +1 -0
- package/dist/components/textarea/snice-textarea.types.d.ts +30 -0
- package/dist/components/timeline/snice-timeline.d.ts +11 -0
- package/dist/components/timeline/snice-timeline.js +112 -0
- package/dist/components/timeline/snice-timeline.js.map +1 -0
- package/dist/components/timeline/snice-timeline.types.d.ts +16 -0
- package/dist/components/toast/snice-toast-container.d.ts +7 -7
- package/dist/components/toast/snice-toast-container.js +19 -12
- package/dist/components/toast/snice-toast-container.js.map +1 -1
- package/dist/components/toast/snice-toast.d.ts +3 -15
- package/dist/components/toast/snice-toast.js +49 -108
- package/dist/components/toast/snice-toast.js.map +1 -1
- package/dist/components/tooltip/snice-tooltip.d.ts +2 -2
- package/dist/components/tooltip/snice-tooltip.js +15 -8
- package/dist/components/tooltip/snice-tooltip.js.map +1 -1
- package/dist/context.d.ts +44 -0
- package/dist/element-ready.d.ts +40 -0
- package/dist/{types/element.d.ts → element.d.ts} +2 -8
- package/dist/{types/events.d.ts → events.d.ts} +0 -4
- package/dist/index.cjs +2556 -605
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +21 -0
- package/dist/index.esm.js +2535 -604
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +2556 -605
- package/dist/index.iife.js.map +1 -1
- package/dist/method-decorators.d.ts +121 -0
- package/dist/on.d.ts +59 -0
- package/dist/parts.d.ts +156 -0
- package/dist/render-debug.d.ts +27 -0
- package/dist/render-tracker.d.ts +14 -0
- package/dist/render.d.ts +96 -0
- package/dist/symbols.cjs +163 -0
- package/dist/symbols.cjs.map +1 -1
- package/dist/{types/symbols.d.ts → symbols.d.ts} +22 -0
- package/dist/symbols.esm.js +27 -3
- package/dist/symbols.esm.js.map +1 -1
- package/dist/template.d.ts +99 -0
- package/dist/transitions.cjs +219 -0
- package/dist/transitions.esm.js +2 -2
- package/dist/types/context.d.ts +48 -0
- package/dist/types/element-options.d.ts +26 -0
- package/dist/types/index.d.ts +25 -9
- package/dist/types/nav-context.d.ts +19 -0
- package/dist/types/{types/on-options.d.ts → on-options.d.ts} +2 -0
- package/dist/types/{types/placard.d.ts → placard.d.ts} +0 -1
- package/docs/ai/README.md +26 -0
- package/docs/ai/api.md +175 -0
- package/docs/ai/architecture.md +160 -0
- package/docs/ai/components/accordion.md +174 -0
- package/docs/ai/components/alert.md +77 -0
- package/docs/ai/components/avatar.md +61 -0
- package/docs/ai/components/badge.md +69 -0
- package/docs/ai/components/banner.md +84 -0
- package/docs/ai/components/breadcrumbs.md +74 -0
- package/docs/ai/components/button.md +75 -0
- package/docs/ai/components/card.md +61 -0
- package/docs/ai/components/checkbox.md +74 -0
- package/docs/ai/components/chip.md +73 -0
- package/docs/ai/components/color-display.md +48 -0
- package/docs/ai/components/color-picker.md +75 -0
- package/docs/ai/components/date-picker.md +75 -0
- package/docs/ai/components/divider.md +66 -0
- package/docs/ai/components/drawer.md +80 -0
- package/docs/ai/components/empty-state.md +72 -0
- package/docs/ai/components/file-upload.md +93 -0
- package/docs/ai/components/image.md +60 -0
- package/docs/ai/components/input.md +111 -0
- package/docs/ai/components/kpi.md +158 -0
- package/docs/ai/components/link.md +77 -0
- package/docs/ai/components/login.md +109 -0
- package/docs/ai/components/modal.md +67 -0
- package/docs/ai/components/nav.md +76 -0
- package/docs/ai/components/pagination.md +55 -0
- package/docs/ai/components/progress.md +72 -0
- package/docs/ai/components/radio.md +79 -0
- package/docs/ai/components/select.md +92 -0
- package/docs/ai/components/skeleton.md +57 -0
- package/docs/ai/components/slider.md +87 -0
- package/docs/ai/components/sparkline.md +168 -0
- package/docs/ai/components/spinner.md +47 -0
- package/docs/ai/components/stepper.md +216 -0
- package/docs/ai/components/switch.md +53 -0
- package/docs/ai/components/table.md +227 -0
- package/docs/ai/components/tabs.md +83 -0
- package/docs/ai/components/textarea.md +87 -0
- package/docs/ai/components/timeline.md +77 -0
- package/docs/ai/components/toast.md +140 -0
- package/docs/ai/components/tooltip.md +146 -0
- package/docs/ai/patterns.md +244 -0
- package/docs/components/accordion.md +558 -0
- package/docs/components/banner.md +106 -0
- package/docs/components/color-display.md +96 -0
- package/docs/components/color-picker.md +81 -0
- package/docs/components/drawer.md +602 -0
- package/docs/components/empty-state.md +79 -0
- package/docs/components/file-upload.md +263 -0
- package/docs/components/image.md +110 -0
- package/docs/components/kpi.md +251 -0
- package/docs/components/link.md +229 -0
- package/docs/components/modal.md +558 -0
- package/docs/components/nav.md +239 -0
- package/docs/components/pagination.md +289 -0
- package/docs/components/select.md +599 -0
- package/docs/components/slider.md +297 -0
- package/docs/components/sparkline.md +293 -0
- package/docs/components/spinner.md +63 -0
- package/docs/components/stepper.md +410 -0
- package/docs/components/switch.md +354 -0
- package/docs/components/tabs.md +546 -0
- package/docs/components/textarea.md +235 -0
- package/docs/components/timeline.md +192 -0
- package/docs/components/toast.md +506 -0
- package/docs/components/tooltip.md +523 -0
- package/docs/controllers.md +744 -0
- package/docs/elements.md +855 -0
- package/docs/events.md +807 -0
- package/docs/migration-v2-to-v3.md +569 -0
- package/docs/observe.md +588 -0
- package/docs/placards.md +401 -0
- package/docs/request-response.md +852 -0
- package/docs/routing.md +1186 -0
- package/package.json +11 -11
- package/dist/components/snice-cell-C9N6yGxQ.js +0 -4
- package/dist/components/snice-cell-C9N6yGxQ.js.map +0 -1
- package/dist/types/types/index.d.ts +0 -23
- /package/dist/{types/controller.d.ts → controller.d.ts} +0 -0
- /package/dist/{types/global.d.ts → global.d.ts} +0 -0
- /package/dist/{types/observe.d.ts → observe.d.ts} +0 -0
- /package/dist/{types/request-response.d.ts → request-response.d.ts} +0 -0
- /package/dist/{types/router.d.ts → router.d.ts} +0 -0
- /package/dist/{types/testing.d.ts → testing.d.ts} +0 -0
- /package/dist/{types/transitions.d.ts → transitions.d.ts} +0 -0
- /package/dist/types/{types/adopted-options.d.ts → adopted-options.d.ts} +0 -0
- /package/dist/types/{types/app-context.d.ts → app-context.d.ts} +0 -0
- /package/dist/types/{types/dispatch-options.d.ts → dispatch-options.d.ts} +0 -0
- /package/dist/types/{types/guard.d.ts → guard.d.ts} +0 -0
- /package/dist/types/{types/i-controller.d.ts → i-controller.d.ts} +0 -0
- /package/dist/types/{types/moved-options.d.ts → moved-options.d.ts} +0 -0
- /package/dist/types/{types/observe-options.d.ts → observe-options.d.ts} +0 -0
- /package/dist/types/{types/page-options.d.ts → page-options.d.ts} +0 -0
- /package/dist/types/{types/part-options.d.ts → part-options.d.ts} +0 -0
- /package/dist/types/{types/property-converter.d.ts → property-converter.d.ts} +0 -0
- /package/dist/types/{types/property-options.d.ts → property-options.d.ts} +0 -0
- /package/dist/types/{types/query-options.d.ts → query-options.d.ts} +0 -0
- /package/dist/types/{types/request-options.d.ts → request-options.d.ts} +0 -0
- /package/dist/types/{types/respond-options.d.ts → respond-options.d.ts} +0 -0
- /package/dist/types/{types/route-params.d.ts → route-params.d.ts} +0 -0
- /package/dist/types/{types/router-instance.d.ts → router-instance.d.ts} +0 -0
- /package/dist/types/{types/router-options.d.ts → router-options.d.ts} +0 -0
- /package/dist/types/{types/simple-array.d.ts → simple-array.d.ts} +0 -0
- /package/dist/types/{types/snice-element.d.ts → snice-element.d.ts} +0 -0
- /package/dist/types/{types/snice-global.d.ts → snice-global.d.ts} +0 -0
- /package/dist/types/{types/transition.d.ts → transition.d.ts} +0 -0
- /package/dist/{types/utils.d.ts → utils.d.ts} +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { __runInitializers, __esDecorate } from 'tslib';
|
|
2
|
-
import { element, property, query, queryAll, ready, dispose,
|
|
2
|
+
import { element, property, query, queryAll, render, styles, ready, dispose, watch, dispatch, html, css } from 'snice';
|
|
3
3
|
import './snice-option.js';
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var cssContent = ":host{display:inline-block;font-family:var(--snice-font-family);position:relative;width:100%;max-width:18.75rem}[hidden]{display:none!important}img[src=\"\"]{display:none}.select-wrapper{position:relative;width:100%}.select-label{display:block;margin-bottom:.25rem;color:var(--snice-color-text);font-weight:500}.select-label--small{font-size:var(--snice-font-size-sm)}.select-label--medium{font-size:var(--snice-font-size-md)}.select-label--large{font-size:var(--snice-font-size-lg)}.select-label--required::after{content:' *';color:var(--snice-color-danger)}.select-trigger{width:100%;display:flex;align-items:center;justify-content:space-between;background:var(--snice-color-background);border:1px solid var(--snice-color-border);border-radius:var(--snice-border-radius-md);cursor:pointer;transition:all var(--snice-transition-fast) ease;position:relative;text-align:left;font-family:inherit;color:var(--snice-color-text)}.select-trigger--small{padding:.375rem 2rem .375rem .625rem;font-size:var(--snice-font-size-sm);min-height:2rem}.select-trigger--medium{padding:.5rem 2.25rem .5rem .75rem;font-size:var(--snice-font-size-md);min-height:var(--snice-select-min-height,2.5rem)}.select-trigger--large{padding:.625rem 2.5rem .625rem .875rem;font-size:var(--snice-font-size-lg);min-height:3rem}.select-trigger:hover:not(.select-trigger--disabled){border-color:var(--snice-color-border-hover)}.select-trigger:focus-visible{outline:2px solid var(--snice-color-primary);outline-offset:2px;border-color:var(--snice-color-primary)}.select-trigger--open{border-color:var(--snice-color-primary)}.select-trigger--disabled{background:var(--snice-color-background-secondary);cursor:not-allowed;opacity:.6}.select-trigger--readonly{background:var(--snice-color-background-secondary);cursor:default}.select-trigger--invalid{border-color:var(--snice-color-danger)}.select-placeholder{color:var(--snice-color-text-secondary)}.select-value{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select-value--single{display:flex;align-items:center;gap:.5rem}.select-value-icon{width:1rem;height:1rem;object-fit:contain;flex-shrink:0}.select-value--multiple{display:flex;gap:.25rem;flex-wrap:wrap}.select-tag{display:inline-flex;align-items:center;gap:.25rem;padding:.125rem .375rem;background:var(--snice-color-primary-light);color:var(--snice-color-primary);border-radius:var(--snice-border-radius-sm);font-size:var(--snice-font-size-xs)}.select-tag-icon{width:.75rem;height:.75rem;object-fit:contain;flex-shrink:0}.select-tag-remove{cursor:pointer;padding:0;background:0 0;border:none;color:inherit;font-size:.75rem;line-height:1}.select-tag-remove:hover{opacity:.7}.select-icons{position:absolute;right:.5rem;top:50%;transform:translateY(-50%);display:flex;align-items:center;gap:.25rem;pointer-events:none;z-index:1}.select-clear{padding:2px;background:0 0;border:none;cursor:pointer;color:var(--snice-color-text-secondary);display:flex;align-items:center;justify-content:center;border-radius:var(--snice-border-radius-sm);pointer-events:auto}.select-clear:hover{background:var(--snice-color-background-secondary);color:var(--snice-color-text)}.select-arrow{transition:transform var(--snice-transition-fast) ease;color:var(--snice-color-text-secondary);pointer-events:none}.select-arrow--open{transform:rotate(180deg)}.select-dropdown{position:absolute;top:100%;margin-top:4px;left:0;right:0;background:var(--snice-color-background);border:1px solid var(--snice-color-border);border-radius:var(--snice-border-radius-md);box-shadow:var(--snice-shadow-lg);z-index:1000;opacity:0;transform:translateY(-8px) scaleY(.95);transform-origin:top;pointer-events:none;transition:opacity var(--snice-transition-fast) ease,transform var(--snice-transition-fast) ease;display:flex;flex-direction:column;overflow:hidden}.select-dropdown--open{opacity:1;transform:translateY(0) scaleY(1);pointer-events:auto}.select-search{padding:8px;border-bottom:1px solid var(--snice-color-border);flex-shrink:0}.select-search-input{width:100%;padding:6px 10px;background:var(--snice-color-background);border:1px solid var(--snice-color-border);border-radius:var(--snice-border-radius-sm);font-size:var(--snice-font-size-sm);font-family:inherit;color:var(--snice-color-text);box-sizing:border-box}.select-search-input:focus{outline:0;border-color:var(--snice-color-primary)}.select-options{max-height:200px;overflow-y:auto;overflow-x:hidden;padding:4px;scrollbar-gutter:stable;scrollbar-width:thin;scrollbar-color:var(--snice-color-border) var(--snice-color-background-secondary)}.select-options::-webkit-scrollbar-track{background:var(--snice-color-background-secondary);margin:4px 0}.select-options::-webkit-scrollbar-thumb{background:var(--snice-color-border);border:2px solid var(--snice-color-background)}.select-option{padding:8px 12px;cursor:pointer;border-radius:var(--snice-border-radius-sm);transition:background var(--snice-transition-fast) ease;display:flex;align-items:center;gap:8px}.select-option:hover:not(.select-option--disabled){background:var(--snice-color-background-secondary)}.select-option--selected{background:var(--snice-color-primary-light);color:var(--snice-color-primary);font-weight:500}.select-option--focused{background:var(--snice-color-background-secondary);outline:2px solid var(--snice-color-primary);outline-offset:-2px}.select-option--disabled{opacity:.5;cursor:not-allowed}.select-option-icon{width:16px;height:16px;object-fit:contain;flex-shrink:0}.select-option-check{width:16px;height:16px;display:flex;align-items:center;justify-content:center;flex-shrink:0}.select-option-label{flex:1}.select-no-options{padding:16px;text-align:center;color:var(--snice-color-text-secondary);font-size:var(--snice-font-size-sm)}.select-native{position:absolute;opacity:0;pointer-events:none;width:0;height:0}.select-options::-webkit-scrollbar{width:6px}.select-options::-webkit-scrollbar-track{background:var(--snice-color-background-secondary);border-radius:3px}.select-options::-webkit-scrollbar-thumb{background:var(--snice-color-border);border-radius:3px}.select-options::-webkit-scrollbar-thumb:hover{background:var(--snice-color-border-hover)}";
|
|
6
6
|
|
|
7
7
|
let SniceSelect = (() => {
|
|
8
8
|
let _classDecorators = [element('snice-select')];
|
|
@@ -86,30 +86,14 @@ let SniceSelect = (() => {
|
|
|
86
86
|
let _optionElements_decorators;
|
|
87
87
|
let _optionElements_initializers = [];
|
|
88
88
|
let _optionElements_extraInitializers = [];
|
|
89
|
+
let _renderContent_decorators;
|
|
90
|
+
let _componentStyles_decorators;
|
|
89
91
|
let _init_decorators;
|
|
90
92
|
let _cleanup_decorators;
|
|
91
|
-
let _handleTriggerOpen_decorators;
|
|
92
|
-
let _handleSearchEscape_decorators;
|
|
93
|
-
let _handleSearchArrowDown_decorators;
|
|
94
|
-
let _handleSearchArrowUp_decorators;
|
|
95
|
-
let _handleSearchEnter_decorators;
|
|
96
|
-
let _handleTriggerClick_decorators;
|
|
97
|
-
let _handleClearClick_decorators;
|
|
98
|
-
let _handleTagRemove_decorators;
|
|
99
|
-
let _handleOptionsClick_decorators;
|
|
100
|
-
let _handleSearchInput_decorators;
|
|
101
93
|
let _handleValueChange_decorators;
|
|
102
94
|
let _handleDisabledChange_decorators;
|
|
103
|
-
let _handleReadonlyChange_decorators;
|
|
104
|
-
let _handleInvalidChange_decorators;
|
|
105
95
|
let _handleOpenChange_decorators;
|
|
106
|
-
let
|
|
107
|
-
let _handlePlaceholderChange_decorators;
|
|
108
|
-
let _handleRequiredChange_decorators;
|
|
109
|
-
let _handleMultipleChange_decorators;
|
|
110
|
-
let _handleNameChange_decorators;
|
|
111
|
-
let _handleClearableChange_decorators;
|
|
112
|
-
let _handleSearchableChange_decorators;
|
|
96
|
+
let _handleNativeSelectAttributeChange_decorators;
|
|
113
97
|
let _dispatchChangeEvent_decorators;
|
|
114
98
|
let _dispatchOpenEvent_decorators;
|
|
115
99
|
let _dispatchCloseEvent_decorators;
|
|
@@ -175,57 +159,25 @@ let SniceSelect = (() => {
|
|
|
175
159
|
_arrow_decorators = [query('.select-arrow')];
|
|
176
160
|
_searchContainer_decorators = [query('.select-search')];
|
|
177
161
|
_optionElements_decorators = [queryAll('.select-option')];
|
|
162
|
+
_renderContent_decorators = [render()];
|
|
163
|
+
_componentStyles_decorators = [styles()];
|
|
178
164
|
_init_decorators = [ready()];
|
|
179
165
|
_cleanup_decorators = [dispose()];
|
|
180
|
-
_handleTriggerOpen_decorators = [on(['keydown:Enter', 'keydown:Space', 'keydown:ArrowDown', 'keydown:ArrowUp'], '.select-trigger')];
|
|
181
|
-
_handleSearchEscape_decorators = [on('keydown:Escape', '.select-search-input')];
|
|
182
|
-
_handleSearchArrowDown_decorators = [on('keydown:ArrowDown', '.select-search-input')];
|
|
183
|
-
_handleSearchArrowUp_decorators = [on('keydown:ArrowUp', '.select-search-input')];
|
|
184
|
-
_handleSearchEnter_decorators = [on('keydown:Enter', '.select-search-input')];
|
|
185
|
-
_handleTriggerClick_decorators = [on('click', '.select-trigger')];
|
|
186
|
-
_handleClearClick_decorators = [on('click', '.select-clear', { preventDefault: true, stopPropagation: true })];
|
|
187
|
-
_handleTagRemove_decorators = [on('click', '.select-tag-remove')];
|
|
188
|
-
_handleOptionsClick_decorators = [on('click', '.select-options')];
|
|
189
|
-
_handleSearchInput_decorators = [on('input', '.select-search-input')];
|
|
190
166
|
_handleValueChange_decorators = [watch('value')];
|
|
191
167
|
_handleDisabledChange_decorators = [watch('disabled')];
|
|
192
|
-
_handleReadonlyChange_decorators = [watch('readonly')];
|
|
193
|
-
_handleInvalidChange_decorators = [watch('invalid')];
|
|
194
168
|
_handleOpenChange_decorators = [watch('open')];
|
|
195
|
-
|
|
196
|
-
_handlePlaceholderChange_decorators = [watch('placeholder')];
|
|
197
|
-
_handleRequiredChange_decorators = [watch('required')];
|
|
198
|
-
_handleMultipleChange_decorators = [watch('multiple')];
|
|
199
|
-
_handleNameChange_decorators = [watch('name')];
|
|
200
|
-
_handleClearableChange_decorators = [watch('clearable')];
|
|
201
|
-
_handleSearchableChange_decorators = [watch('searchable')];
|
|
169
|
+
_handleNativeSelectAttributeChange_decorators = [watch('multiple', 'name')];
|
|
202
170
|
_dispatchChangeEvent_decorators = [dispatch('@snice/select-change', { bubbles: true, composed: true })];
|
|
203
171
|
_dispatchOpenEvent_decorators = [dispatch('@snice/select-open', { bubbles: true, composed: true })];
|
|
204
172
|
_dispatchCloseEvent_decorators = [dispatch('@snice/select-close', { bubbles: true, composed: true })];
|
|
173
|
+
__esDecorate(this, null, _renderContent_decorators, { kind: "method", name: "renderContent", static: false, private: false, access: { has: obj => "renderContent" in obj, get: obj => obj.renderContent }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
174
|
+
__esDecorate(this, null, _componentStyles_decorators, { kind: "method", name: "componentStyles", static: false, private: false, access: { has: obj => "componentStyles" in obj, get: obj => obj.componentStyles }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
205
175
|
__esDecorate(this, null, _init_decorators, { kind: "method", name: "init", static: false, private: false, access: { has: obj => "init" in obj, get: obj => obj.init }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
206
176
|
__esDecorate(this, null, _cleanup_decorators, { kind: "method", name: "cleanup", static: false, private: false, access: { has: obj => "cleanup" in obj, get: obj => obj.cleanup }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
207
|
-
__esDecorate(this, null, _handleTriggerOpen_decorators, { kind: "method", name: "handleTriggerOpen", static: false, private: false, access: { has: obj => "handleTriggerOpen" in obj, get: obj => obj.handleTriggerOpen }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
208
|
-
__esDecorate(this, null, _handleSearchEscape_decorators, { kind: "method", name: "handleSearchEscape", static: false, private: false, access: { has: obj => "handleSearchEscape" in obj, get: obj => obj.handleSearchEscape }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
209
|
-
__esDecorate(this, null, _handleSearchArrowDown_decorators, { kind: "method", name: "handleSearchArrowDown", static: false, private: false, access: { has: obj => "handleSearchArrowDown" in obj, get: obj => obj.handleSearchArrowDown }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
210
|
-
__esDecorate(this, null, _handleSearchArrowUp_decorators, { kind: "method", name: "handleSearchArrowUp", static: false, private: false, access: { has: obj => "handleSearchArrowUp" in obj, get: obj => obj.handleSearchArrowUp }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
211
|
-
__esDecorate(this, null, _handleSearchEnter_decorators, { kind: "method", name: "handleSearchEnter", static: false, private: false, access: { has: obj => "handleSearchEnter" in obj, get: obj => obj.handleSearchEnter }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
212
|
-
__esDecorate(this, null, _handleTriggerClick_decorators, { kind: "method", name: "handleTriggerClick", static: false, private: false, access: { has: obj => "handleTriggerClick" in obj, get: obj => obj.handleTriggerClick }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
213
|
-
__esDecorate(this, null, _handleClearClick_decorators, { kind: "method", name: "handleClearClick", static: false, private: false, access: { has: obj => "handleClearClick" in obj, get: obj => obj.handleClearClick }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
214
|
-
__esDecorate(this, null, _handleTagRemove_decorators, { kind: "method", name: "handleTagRemove", static: false, private: false, access: { has: obj => "handleTagRemove" in obj, get: obj => obj.handleTagRemove }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
215
|
-
__esDecorate(this, null, _handleOptionsClick_decorators, { kind: "method", name: "handleOptionsClick", static: false, private: false, access: { has: obj => "handleOptionsClick" in obj, get: obj => obj.handleOptionsClick }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
216
|
-
__esDecorate(this, null, _handleSearchInput_decorators, { kind: "method", name: "handleSearchInput", static: false, private: false, access: { has: obj => "handleSearchInput" in obj, get: obj => obj.handleSearchInput }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
217
177
|
__esDecorate(this, null, _handleValueChange_decorators, { kind: "method", name: "handleValueChange", static: false, private: false, access: { has: obj => "handleValueChange" in obj, get: obj => obj.handleValueChange }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
218
178
|
__esDecorate(this, null, _handleDisabledChange_decorators, { kind: "method", name: "handleDisabledChange", static: false, private: false, access: { has: obj => "handleDisabledChange" in obj, get: obj => obj.handleDisabledChange }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
219
|
-
__esDecorate(this, null, _handleReadonlyChange_decorators, { kind: "method", name: "handleReadonlyChange", static: false, private: false, access: { has: obj => "handleReadonlyChange" in obj, get: obj => obj.handleReadonlyChange }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
220
|
-
__esDecorate(this, null, _handleInvalidChange_decorators, { kind: "method", name: "handleInvalidChange", static: false, private: false, access: { has: obj => "handleInvalidChange" in obj, get: obj => obj.handleInvalidChange }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
221
179
|
__esDecorate(this, null, _handleOpenChange_decorators, { kind: "method", name: "handleOpenChange", static: false, private: false, access: { has: obj => "handleOpenChange" in obj, get: obj => obj.handleOpenChange }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
222
|
-
__esDecorate(this, null,
|
|
223
|
-
__esDecorate(this, null, _handlePlaceholderChange_decorators, { kind: "method", name: "handlePlaceholderChange", static: false, private: false, access: { has: obj => "handlePlaceholderChange" in obj, get: obj => obj.handlePlaceholderChange }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
224
|
-
__esDecorate(this, null, _handleRequiredChange_decorators, { kind: "method", name: "handleRequiredChange", static: false, private: false, access: { has: obj => "handleRequiredChange" in obj, get: obj => obj.handleRequiredChange }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
225
|
-
__esDecorate(this, null, _handleMultipleChange_decorators, { kind: "method", name: "handleMultipleChange", static: false, private: false, access: { has: obj => "handleMultipleChange" in obj, get: obj => obj.handleMultipleChange }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
226
|
-
__esDecorate(this, null, _handleNameChange_decorators, { kind: "method", name: "handleNameChange", static: false, private: false, access: { has: obj => "handleNameChange" in obj, get: obj => obj.handleNameChange }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
227
|
-
__esDecorate(this, null, _handleClearableChange_decorators, { kind: "method", name: "handleClearableChange", static: false, private: false, access: { has: obj => "handleClearableChange" in obj, get: obj => obj.handleClearableChange }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
228
|
-
__esDecorate(this, null, _handleSearchableChange_decorators, { kind: "method", name: "handleSearchableChange", static: false, private: false, access: { has: obj => "handleSearchableChange" in obj, get: obj => obj.handleSearchableChange }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
180
|
+
__esDecorate(this, null, _handleNativeSelectAttributeChange_decorators, { kind: "method", name: "handleNativeSelectAttributeChange", static: false, private: false, access: { has: obj => "handleNativeSelectAttributeChange" in obj, get: obj => obj.handleNativeSelectAttributeChange }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
229
181
|
__esDecorate(this, null, _dispatchChangeEvent_decorators, { kind: "method", name: "dispatchChangeEvent", static: false, private: false, access: { has: obj => "dispatchChangeEvent" in obj, get: obj => obj.dispatchChangeEvent }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
230
182
|
__esDecorate(this, null, _dispatchOpenEvent_decorators, { kind: "method", name: "dispatchOpenEvent", static: false, private: false, access: { has: obj => "dispatchOpenEvent" in obj, get: obj => obj.dispatchOpenEvent }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
231
183
|
__esDecorate(this, null, _dispatchCloseEvent_decorators, { kind: "method", name: "dispatchCloseEvent", static: false, private: false, access: { has: obj => "dispatchCloseEvent" in obj, get: obj => obj.dispatchCloseEvent }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
@@ -259,28 +211,32 @@ let SniceSelect = (() => {
|
|
|
259
211
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
260
212
|
__runInitializers(_classThis, _classExtraInitializers);
|
|
261
213
|
}
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
214
|
+
renderContent() {
|
|
215
|
+
const labelClasses = `select-label select-label--${this.size} ${this.required ? 'select-label--required' : ''}`;
|
|
216
|
+
const triggerClasses = `select-trigger select-trigger--${this.size}`;
|
|
217
|
+
const searchHidden = !this.searchable;
|
|
218
|
+
return html `
|
|
265
219
|
<div class="select-wrapper">
|
|
266
|
-
<label class="
|
|
220
|
+
<label class="${labelClasses}" part="label" ?hidden="${!this.label}">
|
|
267
221
|
${this.label}
|
|
268
222
|
</label>
|
|
269
|
-
|
|
223
|
+
|
|
270
224
|
<button
|
|
271
225
|
type="button"
|
|
272
|
-
class="
|
|
226
|
+
class="${triggerClasses}"
|
|
273
227
|
aria-haspopup="listbox"
|
|
274
228
|
aria-expanded="false"
|
|
275
229
|
aria-label="${this.label || 'Select'}"
|
|
276
|
-
part="trigger"
|
|
277
|
-
|
|
230
|
+
part="trigger"
|
|
231
|
+
@keydown="${(e) => this.handleTriggerOpen(e)}"
|
|
232
|
+
@click="${(e) => this.handleTriggerClick(e)}">
|
|
233
|
+
|
|
278
234
|
<div class="select-value" part="value">
|
|
279
235
|
<span class="select-placeholder">${this.placeholder}</span>
|
|
280
236
|
</div>
|
|
281
|
-
|
|
237
|
+
|
|
282
238
|
<span class="select-icons">
|
|
283
|
-
<span class="select-clear" aria-label="Clear selection" style="display: none;">
|
|
239
|
+
<span class="select-clear" aria-label="Clear selection" style="display: none;" @click="${(e) => this.handleClearClick(e)}">
|
|
284
240
|
<svg width="14" height="14" viewBox="0 0 14 14" fill="currentColor">
|
|
285
241
|
<path d="M14 1.41L12.59 0L7 5.59L1.41 0L0 1.41L5.59 7L0 12.59L1.41 14L7 8.41L12.59 14L14 12.59L8.41 7L14 1.41Z"/>
|
|
286
242
|
</svg>
|
|
@@ -292,26 +248,29 @@ let SniceSelect = (() => {
|
|
|
292
248
|
</span>
|
|
293
249
|
</span>
|
|
294
250
|
</button>
|
|
295
|
-
|
|
296
|
-
<div class="select-dropdown"
|
|
297
|
-
role="listbox"
|
|
251
|
+
|
|
252
|
+
<div class="select-dropdown"
|
|
253
|
+
role="listbox"
|
|
298
254
|
aria-label="${this.label || 'Options'}"
|
|
299
|
-
part="dropdown"
|
|
300
|
-
|
|
301
|
-
|
|
255
|
+
part="dropdown"
|
|
256
|
+
@click="${(e) => this.handleOptionsClick(e)}">
|
|
257
|
+
|
|
258
|
+
<div class="select-search" part="search" ?hidden="${searchHidden}">
|
|
302
259
|
<input
|
|
303
260
|
type="text"
|
|
304
261
|
class="select-search-input"
|
|
305
262
|
placeholder="Search..."
|
|
306
263
|
aria-label="Search options"
|
|
307
|
-
part="search-input"
|
|
264
|
+
part="search-input"
|
|
265
|
+
@keydown="${(e) => this.handleSearchKeydown(e)}"
|
|
266
|
+
@input="${(e) => this.handleSearchInput(e)}" />
|
|
308
267
|
</div>
|
|
309
|
-
|
|
268
|
+
|
|
310
269
|
<div class="select-options" part="options">
|
|
311
270
|
<!-- Options will be rendered in @ready() -->
|
|
312
271
|
</div>
|
|
313
272
|
</div>
|
|
314
|
-
|
|
273
|
+
|
|
315
274
|
<!-- Hidden native select for form submission -->
|
|
316
275
|
<select
|
|
317
276
|
class="select-native"
|
|
@@ -357,8 +316,8 @@ let SniceSelect = (() => {
|
|
|
357
316
|
`;
|
|
358
317
|
}).join('');
|
|
359
318
|
}
|
|
360
|
-
|
|
361
|
-
return css
|
|
319
|
+
componentStyles() {
|
|
320
|
+
return css `${cssContent}`;
|
|
362
321
|
}
|
|
363
322
|
init() {
|
|
364
323
|
// Read options from child snice-option elements
|
|
@@ -487,31 +446,37 @@ let SniceSelect = (() => {
|
|
|
487
446
|
});
|
|
488
447
|
}
|
|
489
448
|
handleTriggerOpen(e) {
|
|
490
|
-
e.
|
|
491
|
-
|
|
492
|
-
this.
|
|
449
|
+
if (['Enter', ' ', 'ArrowDown', 'ArrowUp'].includes(e.key)) {
|
|
450
|
+
e.preventDefault();
|
|
451
|
+
if (!this.open) {
|
|
452
|
+
this.openDropdown();
|
|
453
|
+
}
|
|
493
454
|
}
|
|
494
455
|
}
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
456
|
+
handleSearchKeydown(e) {
|
|
457
|
+
switch (e.key) {
|
|
458
|
+
case 'Escape':
|
|
459
|
+
this.closeDropdown();
|
|
460
|
+
this.trigger?.focus();
|
|
461
|
+
break;
|
|
462
|
+
case 'ArrowDown':
|
|
463
|
+
e.preventDefault();
|
|
464
|
+
this.focusNextOption();
|
|
465
|
+
break;
|
|
466
|
+
case 'ArrowUp':
|
|
467
|
+
e.preventDefault();
|
|
468
|
+
this.focusPreviousOption();
|
|
469
|
+
break;
|
|
470
|
+
case 'Enter':
|
|
471
|
+
e.preventDefault();
|
|
472
|
+
if (this.focusedIndex >= 0) {
|
|
473
|
+
const options = this.searchable ? this.filteredOptions : this.options;
|
|
474
|
+
const option = options[this.focusedIndex];
|
|
475
|
+
if (option && !option.disabled) {
|
|
476
|
+
this.handleOptionSelect(option);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
break;
|
|
515
480
|
}
|
|
516
481
|
}
|
|
517
482
|
focusNextOption() {
|
|
@@ -555,39 +520,43 @@ let SniceSelect = (() => {
|
|
|
555
520
|
});
|
|
556
521
|
}
|
|
557
522
|
}
|
|
558
|
-
|
|
523
|
+
handleClearClick(e) {
|
|
524
|
+
e.preventDefault();
|
|
559
525
|
e.stopPropagation();
|
|
560
|
-
|
|
526
|
+
this.clear();
|
|
527
|
+
}
|
|
528
|
+
handleTriggerClick(e) {
|
|
561
529
|
const target = e.target;
|
|
562
|
-
|
|
530
|
+
// Don't toggle if clicking on the clear button
|
|
531
|
+
if (target.closest('.select-clear')) {
|
|
563
532
|
return;
|
|
564
533
|
}
|
|
534
|
+
e.stopPropagation();
|
|
565
535
|
if (!this.disabled && !this.readonly) {
|
|
566
536
|
this.toggleDropdown();
|
|
567
537
|
}
|
|
568
538
|
}
|
|
569
|
-
handleClearClick(_e) {
|
|
570
|
-
this.clear();
|
|
571
|
-
}
|
|
572
|
-
handleTagRemove(e) {
|
|
573
|
-
e.stopPropagation();
|
|
574
|
-
const target = e.target;
|
|
575
|
-
const value = target.getAttribute('data-value');
|
|
576
|
-
if (value && this.multiple) {
|
|
577
|
-
this.selectedValues.delete(value);
|
|
578
|
-
this.value = Array.from(this.selectedValues).join(',');
|
|
579
|
-
this.updateNativeSelect();
|
|
580
|
-
this.updateValueDisplay();
|
|
581
|
-
this.updateClearButton();
|
|
582
|
-
this.dispatchChangeEvent();
|
|
583
|
-
}
|
|
584
|
-
}
|
|
585
539
|
handleOptionsClick(e) {
|
|
586
|
-
e.stopPropagation();
|
|
587
540
|
const target = e.target;
|
|
541
|
+
// Handle tag remove click
|
|
542
|
+
if (target.closest('.select-tag-remove')) {
|
|
543
|
+
e.stopPropagation();
|
|
544
|
+
const removeBtn = target.closest('.select-tag-remove');
|
|
545
|
+
const value = removeBtn.getAttribute('data-value');
|
|
546
|
+
if (value && this.multiple) {
|
|
547
|
+
this.selectedValues.delete(value);
|
|
548
|
+
this.value = Array.from(this.selectedValues).join(',');
|
|
549
|
+
this.updateNativeSelect();
|
|
550
|
+
this.updateValueDisplay();
|
|
551
|
+
this.updateClearButton();
|
|
552
|
+
this.dispatchChangeEvent();
|
|
553
|
+
}
|
|
554
|
+
return;
|
|
555
|
+
}
|
|
588
556
|
const optionEl = target.closest('.select-option');
|
|
589
557
|
if (!optionEl)
|
|
590
558
|
return;
|
|
559
|
+
e.stopPropagation();
|
|
591
560
|
const value = optionEl.getAttribute('data-value');
|
|
592
561
|
if (!value)
|
|
593
562
|
return;
|
|
@@ -597,8 +566,8 @@ let SniceSelect = (() => {
|
|
|
597
566
|
}
|
|
598
567
|
}
|
|
599
568
|
handleSearchInput(e) {
|
|
600
|
-
const
|
|
601
|
-
const searchTerm =
|
|
569
|
+
const input = e.target;
|
|
570
|
+
const searchTerm = input.value.toLowerCase();
|
|
602
571
|
if (searchTerm) {
|
|
603
572
|
this.filteredOptions = this.options.filter(opt => opt.label.toLowerCase().includes(searchTerm));
|
|
604
573
|
}
|
|
@@ -640,24 +609,19 @@ let SniceSelect = (() => {
|
|
|
640
609
|
this.updateTriggerState();
|
|
641
610
|
this.updateNativeSelectAttributes();
|
|
642
611
|
this.updateClearButton();
|
|
612
|
+
// Side effect: close dropdown when disabled
|
|
643
613
|
if (this.disabled && this.open) {
|
|
644
614
|
this.closeDropdown();
|
|
645
615
|
}
|
|
646
616
|
}
|
|
647
|
-
handleReadonlyChange() {
|
|
648
|
-
this.updateTriggerState();
|
|
649
|
-
this.updateClearButton();
|
|
650
|
-
}
|
|
651
|
-
handleInvalidChange() {
|
|
652
|
-
this.updateTriggerState();
|
|
653
|
-
}
|
|
654
|
-
// Remove the @watch('options') since options are now read from children
|
|
655
617
|
handleOpenChange() {
|
|
656
618
|
this.updateDropdownState();
|
|
657
619
|
this.updateTriggerState();
|
|
620
|
+
// Side effect: focus search input when opened
|
|
658
621
|
if (this.open && this.searchable && this.searchInput) {
|
|
659
622
|
setTimeout(() => this.searchInput?.focus(), 100);
|
|
660
623
|
}
|
|
624
|
+
// Side effect: reset search when closed
|
|
661
625
|
if (!this.open) {
|
|
662
626
|
this.focusedIndex = -1;
|
|
663
627
|
if (this.searchInput) {
|
|
@@ -667,45 +631,9 @@ let SniceSelect = (() => {
|
|
|
667
631
|
}
|
|
668
632
|
}
|
|
669
633
|
}
|
|
670
|
-
|
|
671
|
-
if (this.labelElement) {
|
|
672
|
-
this.labelElement.textContent = this.label;
|
|
673
|
-
if (this.label) {
|
|
674
|
-
this.labelElement.removeAttribute('hidden');
|
|
675
|
-
}
|
|
676
|
-
else {
|
|
677
|
-
this.labelElement.setAttribute('hidden', '');
|
|
678
|
-
}
|
|
679
|
-
}
|
|
680
|
-
}
|
|
681
|
-
handlePlaceholderChange() {
|
|
682
|
-
this.updateValueDisplay();
|
|
683
|
-
}
|
|
684
|
-
handleRequiredChange() {
|
|
685
|
-
if (this.labelElement) {
|
|
686
|
-
this.labelElement.classList.toggle('select-label--required', this.required);
|
|
687
|
-
}
|
|
688
|
-
this.updateNativeSelectAttributes();
|
|
689
|
-
}
|
|
690
|
-
handleMultipleChange() {
|
|
691
|
-
this.updateNativeSelectAttributes();
|
|
692
|
-
}
|
|
693
|
-
handleNameChange() {
|
|
634
|
+
handleNativeSelectAttributeChange() {
|
|
694
635
|
this.updateNativeSelectAttributes();
|
|
695
636
|
}
|
|
696
|
-
handleClearableChange() {
|
|
697
|
-
this.updateClearButton();
|
|
698
|
-
}
|
|
699
|
-
handleSearchableChange() {
|
|
700
|
-
if (this.searchContainer) {
|
|
701
|
-
if (this.searchable) {
|
|
702
|
-
this.searchContainer.removeAttribute('hidden');
|
|
703
|
-
}
|
|
704
|
-
else {
|
|
705
|
-
this.searchContainer.setAttribute('hidden', '');
|
|
706
|
-
}
|
|
707
|
-
}
|
|
708
|
-
}
|
|
709
637
|
updateValueDisplay() {
|
|
710
638
|
if (!this.valueDisplay)
|
|
711
639
|
return;
|