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
|
@@ -0,0 +1,602 @@
|
|
|
1
|
+
# Drawer Component
|
|
2
|
+
|
|
3
|
+
The `<snice-drawer>` component provides a slide-out panel that appears from any side of the viewport. It's commonly used for navigation menus, filters, settings panels, or additional content that shouldn't occupy permanent screen space.
|
|
4
|
+
|
|
5
|
+
## Table of Contents
|
|
6
|
+
- [Basic Usage](#basic-usage)
|
|
7
|
+
- [Properties](#properties)
|
|
8
|
+
- [Methods](#methods)
|
|
9
|
+
- [Events](#events)
|
|
10
|
+
- [Slots](#slots)
|
|
11
|
+
- [Examples](#examples)
|
|
12
|
+
|
|
13
|
+
## Basic Usage
|
|
14
|
+
|
|
15
|
+
```html
|
|
16
|
+
<button id="openDrawer">Open Drawer</button>
|
|
17
|
+
|
|
18
|
+
<snice-drawer id="myDrawer">
|
|
19
|
+
<h2 slot="title">Menu</h2>
|
|
20
|
+
|
|
21
|
+
<nav>
|
|
22
|
+
<a href="/">Home</a>
|
|
23
|
+
<a href="/about">About</a>
|
|
24
|
+
<a href="/contact">Contact</a>
|
|
25
|
+
</nav>
|
|
26
|
+
|
|
27
|
+
<div slot="footer">
|
|
28
|
+
<button onclick="this.closest('snice-drawer').hide()">Close</button>
|
|
29
|
+
</div>
|
|
30
|
+
</snice-drawer>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
import 'snice/components/drawer/snice-drawer';
|
|
35
|
+
|
|
36
|
+
const drawer = document.querySelector('snice-drawer');
|
|
37
|
+
const openBtn = document.querySelector('#openDrawer');
|
|
38
|
+
|
|
39
|
+
openBtn.addEventListener('click', () => drawer.show());
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Properties
|
|
43
|
+
|
|
44
|
+
| Property | Type | Default | Description |
|
|
45
|
+
|----------|------|---------|-------------|
|
|
46
|
+
| `open` | `boolean` | `false` | Whether the drawer is visible |
|
|
47
|
+
| `position` | `'left' \| 'right' \| 'top' \| 'bottom'` | `'left'` | Side from which the drawer slides in |
|
|
48
|
+
| `size` | `'small' \| 'medium' \| 'large' \| 'xl' \| 'xxl' \| 'xxxl' \| 'full'` | `'medium'` | Width/height of the drawer |
|
|
49
|
+
| `noBackdrop` | `boolean` | `false` | Hide the backdrop overlay |
|
|
50
|
+
| `noBackdropDismiss` | `boolean` | `false` | Prevent closing when clicking backdrop |
|
|
51
|
+
| `noEscapeDismiss` | `boolean` | `false` | Prevent closing with Escape key |
|
|
52
|
+
| `noFocusTrap` | `boolean` | `false` | Disable focus trapping |
|
|
53
|
+
| `persistent` | `boolean` | `false` | Hide close button and prevent all dismissal |
|
|
54
|
+
| `pushContent` | `boolean` | `false` | Push main content instead of overlaying |
|
|
55
|
+
| `contained` | `boolean` | `false` | Position relative to parent instead of viewport |
|
|
56
|
+
|
|
57
|
+
## Methods
|
|
58
|
+
|
|
59
|
+
### `show(): void`
|
|
60
|
+
Open the drawer.
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
drawer.show();
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### `hide(): void`
|
|
67
|
+
Close the drawer.
|
|
68
|
+
|
|
69
|
+
```typescript
|
|
70
|
+
drawer.hide();
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### `toggle(): void`
|
|
74
|
+
Toggle the drawer open/closed state.
|
|
75
|
+
|
|
76
|
+
```typescript
|
|
77
|
+
drawer.toggle();
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Events
|
|
81
|
+
|
|
82
|
+
### `@snice/drawer-open`
|
|
83
|
+
Fired when the drawer opens.
|
|
84
|
+
|
|
85
|
+
**Event Detail:**
|
|
86
|
+
```typescript
|
|
87
|
+
{
|
|
88
|
+
drawer: SniceDrawerElement; // Reference to the drawer element
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**Usage:**
|
|
93
|
+
```typescript
|
|
94
|
+
drawer.addEventListener('@snice/drawer-open', (e) => {
|
|
95
|
+
console.log('Drawer opened:', e.detail.drawer);
|
|
96
|
+
});
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### `@snice/drawer-close`
|
|
100
|
+
Fired when the drawer closes.
|
|
101
|
+
|
|
102
|
+
**Event Detail:**
|
|
103
|
+
```typescript
|
|
104
|
+
{
|
|
105
|
+
drawer: SniceDrawerElement; // Reference to the drawer element
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
**Usage:**
|
|
110
|
+
```typescript
|
|
111
|
+
drawer.addEventListener('@snice/drawer-close', (e) => {
|
|
112
|
+
console.log('Drawer closed:', e.detail.drawer);
|
|
113
|
+
});
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
## Slots
|
|
117
|
+
|
|
118
|
+
### `title` (named slot)
|
|
119
|
+
Content for the drawer header/title area.
|
|
120
|
+
|
|
121
|
+
```html
|
|
122
|
+
<snice-drawer>
|
|
123
|
+
<h2 slot="title">Drawer Title</h2>
|
|
124
|
+
</snice-drawer>
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### Default slot
|
|
128
|
+
Main content of the drawer body.
|
|
129
|
+
|
|
130
|
+
```html
|
|
131
|
+
<snice-drawer>
|
|
132
|
+
<p>This goes in the body</p>
|
|
133
|
+
</snice-drawer>
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### `footer` (named slot)
|
|
137
|
+
Content for the drawer footer. Typically used for action buttons.
|
|
138
|
+
|
|
139
|
+
```html
|
|
140
|
+
<snice-drawer>
|
|
141
|
+
<div slot="footer">
|
|
142
|
+
<button>Action</button>
|
|
143
|
+
</div>
|
|
144
|
+
</snice-drawer>
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## Examples
|
|
148
|
+
|
|
149
|
+
### Basic Drawer
|
|
150
|
+
|
|
151
|
+
```html
|
|
152
|
+
<button id="toggle">Toggle Drawer</button>
|
|
153
|
+
|
|
154
|
+
<snice-drawer id="drawer">
|
|
155
|
+
<h2 slot="title">Navigation</h2>
|
|
156
|
+
|
|
157
|
+
<nav>
|
|
158
|
+
<a href="/">Home</a>
|
|
159
|
+
<a href="/products">Products</a>
|
|
160
|
+
<a href="/about">About</a>
|
|
161
|
+
</nav>
|
|
162
|
+
</snice-drawer>
|
|
163
|
+
|
|
164
|
+
<script type="module">
|
|
165
|
+
import 'snice/components/drawer/snice-drawer';
|
|
166
|
+
|
|
167
|
+
const drawer = document.querySelector('#drawer');
|
|
168
|
+
const toggleBtn = document.querySelector('#toggle');
|
|
169
|
+
|
|
170
|
+
toggleBtn.addEventListener('click', () => drawer.toggle());
|
|
171
|
+
</script>
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### Position Variants
|
|
175
|
+
|
|
176
|
+
```html
|
|
177
|
+
<!-- Left (default) -->
|
|
178
|
+
<snice-drawer position="left">
|
|
179
|
+
<h2 slot="title">Left Drawer</h2>
|
|
180
|
+
<p>Slides in from the left</p>
|
|
181
|
+
</snice-drawer>
|
|
182
|
+
|
|
183
|
+
<!-- Right -->
|
|
184
|
+
<snice-drawer position="right">
|
|
185
|
+
<h2 slot="title">Right Drawer</h2>
|
|
186
|
+
<p>Slides in from the right</p>
|
|
187
|
+
</snice-drawer>
|
|
188
|
+
|
|
189
|
+
<!-- Top -->
|
|
190
|
+
<snice-drawer position="top">
|
|
191
|
+
<h2 slot="title">Top Drawer</h2>
|
|
192
|
+
<p>Slides in from the top</p>
|
|
193
|
+
</snice-drawer>
|
|
194
|
+
|
|
195
|
+
<!-- Bottom -->
|
|
196
|
+
<snice-drawer position="bottom">
|
|
197
|
+
<h2 slot="title">Bottom Drawer</h2>
|
|
198
|
+
<p>Slides in from the bottom</p>
|
|
199
|
+
</snice-drawer>
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Size Variants
|
|
203
|
+
|
|
204
|
+
```html
|
|
205
|
+
<!-- Small -->
|
|
206
|
+
<snice-drawer size="small">
|
|
207
|
+
<h2 slot="title">Small Drawer</h2>
|
|
208
|
+
</snice-drawer>
|
|
209
|
+
|
|
210
|
+
<!-- Medium (default) -->
|
|
211
|
+
<snice-drawer size="medium">
|
|
212
|
+
<h2 slot="title">Medium Drawer</h2>
|
|
213
|
+
</snice-drawer>
|
|
214
|
+
|
|
215
|
+
<!-- Large -->
|
|
216
|
+
<snice-drawer size="large">
|
|
217
|
+
<h2 slot="title">Large Drawer</h2>
|
|
218
|
+
</snice-drawer>
|
|
219
|
+
|
|
220
|
+
<!-- Extra Large -->
|
|
221
|
+
<snice-drawer size="xl">
|
|
222
|
+
<h2 slot="title">XL Drawer</h2>
|
|
223
|
+
</snice-drawer>
|
|
224
|
+
|
|
225
|
+
<!-- Full Width/Height -->
|
|
226
|
+
<snice-drawer size="full">
|
|
227
|
+
<h2 slot="title">Full Drawer</h2>
|
|
228
|
+
</snice-drawer>
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Without Backdrop
|
|
232
|
+
|
|
233
|
+
```html
|
|
234
|
+
<snice-drawer no-backdrop>
|
|
235
|
+
<h2 slot="title">No Backdrop</h2>
|
|
236
|
+
<p>This drawer has no background overlay.</p>
|
|
237
|
+
</snice-drawer>
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### Persistent Drawer
|
|
241
|
+
|
|
242
|
+
```html
|
|
243
|
+
<snice-drawer persistent>
|
|
244
|
+
<h2 slot="title">Persistent Drawer</h2>
|
|
245
|
+
<p>No close button, must be closed programmatically.</p>
|
|
246
|
+
</snice-drawer>
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### Push Content
|
|
250
|
+
|
|
251
|
+
```html
|
|
252
|
+
<snice-drawer push-content>
|
|
253
|
+
<h2 slot="title">Push Content</h2>
|
|
254
|
+
<p>Main content slides over when this opens.</p>
|
|
255
|
+
</snice-drawer>
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### Filters Panel
|
|
259
|
+
|
|
260
|
+
```html
|
|
261
|
+
<button id="showFilters">Show Filters</button>
|
|
262
|
+
|
|
263
|
+
<snice-drawer id="filtersDrawer" position="right" size="small">
|
|
264
|
+
<h2 slot="title">Filters</h2>
|
|
265
|
+
|
|
266
|
+
<div style="display: flex; flex-direction: column; gap: 1rem;">
|
|
267
|
+
<div>
|
|
268
|
+
<label>
|
|
269
|
+
<input type="checkbox"> In Stock
|
|
270
|
+
</label>
|
|
271
|
+
</div>
|
|
272
|
+
<div>
|
|
273
|
+
<label>
|
|
274
|
+
<input type="checkbox"> On Sale
|
|
275
|
+
</label>
|
|
276
|
+
</div>
|
|
277
|
+
<div>
|
|
278
|
+
<label>Price Range</label>
|
|
279
|
+
<input type="range" min="0" max="1000">
|
|
280
|
+
</div>
|
|
281
|
+
</div>
|
|
282
|
+
|
|
283
|
+
<div slot="footer">
|
|
284
|
+
<button onclick="this.closest('snice-drawer').hide()">Apply</button>
|
|
285
|
+
</div>
|
|
286
|
+
</snice-drawer>
|
|
287
|
+
|
|
288
|
+
<script type="module">
|
|
289
|
+
import 'snice/components/drawer/snice-drawer';
|
|
290
|
+
|
|
291
|
+
document.querySelector('#showFilters').addEventListener('click', () => {
|
|
292
|
+
document.querySelector('#filtersDrawer').show();
|
|
293
|
+
});
|
|
294
|
+
</script>
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### Settings Panel
|
|
298
|
+
|
|
299
|
+
```html
|
|
300
|
+
<button id="showSettings">Settings</button>
|
|
301
|
+
|
|
302
|
+
<snice-drawer id="settingsDrawer" position="right">
|
|
303
|
+
<h2 slot="title">Settings</h2>
|
|
304
|
+
|
|
305
|
+
<form id="settingsForm">
|
|
306
|
+
<div style="display: flex; flex-direction: column; gap: 1rem;">
|
|
307
|
+
<div>
|
|
308
|
+
<label for="theme">Theme</label>
|
|
309
|
+
<select id="theme" name="theme">
|
|
310
|
+
<option>Light</option>
|
|
311
|
+
<option>Dark</option>
|
|
312
|
+
<option>Auto</option>
|
|
313
|
+
</select>
|
|
314
|
+
</div>
|
|
315
|
+
|
|
316
|
+
<div>
|
|
317
|
+
<label>
|
|
318
|
+
<input type="checkbox" name="notifications">
|
|
319
|
+
Enable notifications
|
|
320
|
+
</label>
|
|
321
|
+
</div>
|
|
322
|
+
|
|
323
|
+
<div>
|
|
324
|
+
<label>
|
|
325
|
+
<input type="checkbox" name="autoSave">
|
|
326
|
+
Auto-save
|
|
327
|
+
</label>
|
|
328
|
+
</div>
|
|
329
|
+
</div>
|
|
330
|
+
</form>
|
|
331
|
+
|
|
332
|
+
<div slot="footer">
|
|
333
|
+
<button type="button" onclick="this.closest('snice-drawer').hide()">
|
|
334
|
+
Cancel
|
|
335
|
+
</button>
|
|
336
|
+
<button type="submit" form="settingsForm">
|
|
337
|
+
Save
|
|
338
|
+
</button>
|
|
339
|
+
</div>
|
|
340
|
+
</snice-drawer>
|
|
341
|
+
|
|
342
|
+
<script type="module">
|
|
343
|
+
import 'snice/components/drawer/snice-drawer';
|
|
344
|
+
|
|
345
|
+
const drawer = document.querySelector('#settingsDrawer');
|
|
346
|
+
const form = document.querySelector('#settingsForm');
|
|
347
|
+
|
|
348
|
+
document.querySelector('#showSettings').addEventListener('click', () => {
|
|
349
|
+
drawer.show();
|
|
350
|
+
});
|
|
351
|
+
|
|
352
|
+
form.addEventListener('submit', (e) => {
|
|
353
|
+
e.preventDefault();
|
|
354
|
+
const data = new FormData(form);
|
|
355
|
+
console.log('Settings:', Object.fromEntries(data));
|
|
356
|
+
drawer.hide();
|
|
357
|
+
});
|
|
358
|
+
</script>
|
|
359
|
+
```
|
|
360
|
+
|
|
361
|
+
### Mobile Navigation
|
|
362
|
+
|
|
363
|
+
```html
|
|
364
|
+
<button id="menuBtn">Menu</button>
|
|
365
|
+
|
|
366
|
+
<snice-drawer id="navDrawer" position="left" size="medium">
|
|
367
|
+
<h2 slot="title">Menu</h2>
|
|
368
|
+
|
|
369
|
+
<nav style="display: flex; flex-direction: column; gap: 0.5rem;">
|
|
370
|
+
<a href="/" style="padding: 0.5rem;">Home</a>
|
|
371
|
+
<a href="/products" style="padding: 0.5rem;">Products</a>
|
|
372
|
+
<a href="/services" style="padding: 0.5rem;">Services</a>
|
|
373
|
+
<a href="/about" style="padding: 0.5rem;">About</a>
|
|
374
|
+
<a href="/contact" style="padding: 0.5rem;">Contact</a>
|
|
375
|
+
</nav>
|
|
376
|
+
</snice-drawer>
|
|
377
|
+
|
|
378
|
+
<script type="module">
|
|
379
|
+
import 'snice/components/drawer/snice-drawer';
|
|
380
|
+
|
|
381
|
+
const drawer = document.querySelector('#navDrawer');
|
|
382
|
+
const menuBtn = document.querySelector('#menuBtn');
|
|
383
|
+
|
|
384
|
+
menuBtn.addEventListener('click', () => drawer.show());
|
|
385
|
+
|
|
386
|
+
// Close drawer when clicking a link
|
|
387
|
+
drawer.querySelectorAll('a').forEach(link => {
|
|
388
|
+
link.addEventListener('click', () => drawer.hide());
|
|
389
|
+
});
|
|
390
|
+
</script>
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
### With Event Handling
|
|
394
|
+
|
|
395
|
+
```typescript
|
|
396
|
+
import type { SniceDrawerElement } from 'snice/components/drawer/snice-drawer.types';
|
|
397
|
+
|
|
398
|
+
const drawer = document.querySelector<SniceDrawerElement>('snice-drawer');
|
|
399
|
+
|
|
400
|
+
drawer.addEventListener('@snice/drawer-open', () => {
|
|
401
|
+
console.log('Drawer opened');
|
|
402
|
+
// Pause video, load content, etc.
|
|
403
|
+
});
|
|
404
|
+
|
|
405
|
+
drawer.addEventListener('@snice/drawer-close', () => {
|
|
406
|
+
console.log('Drawer closed');
|
|
407
|
+
// Resume video, save state, etc.
|
|
408
|
+
});
|
|
409
|
+
|
|
410
|
+
// Programmatic control
|
|
411
|
+
drawer.show();
|
|
412
|
+
drawer.hide();
|
|
413
|
+
drawer.toggle();
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
### Dynamic Content Loading
|
|
417
|
+
|
|
418
|
+
```html
|
|
419
|
+
<button id="showDetails">Show Details</button>
|
|
420
|
+
|
|
421
|
+
<snice-drawer id="detailsDrawer" position="right">
|
|
422
|
+
<h2 slot="title" id="itemTitle">Loading...</h2>
|
|
423
|
+
|
|
424
|
+
<div id="itemContent">
|
|
425
|
+
<p>Loading...</p>
|
|
426
|
+
</div>
|
|
427
|
+
</snice-drawer>
|
|
428
|
+
|
|
429
|
+
<script type="module">
|
|
430
|
+
import 'snice/components/drawer/snice-drawer';
|
|
431
|
+
|
|
432
|
+
const drawer = document.querySelector('#detailsDrawer');
|
|
433
|
+
const title = document.querySelector('#itemTitle');
|
|
434
|
+
const content = document.querySelector('#itemContent');
|
|
435
|
+
|
|
436
|
+
document.querySelector('#showDetails').addEventListener('click', async () => {
|
|
437
|
+
drawer.show();
|
|
438
|
+
|
|
439
|
+
// Fetch data
|
|
440
|
+
const response = await fetch('/api/item/123');
|
|
441
|
+
const item = await response.json();
|
|
442
|
+
|
|
443
|
+
// Update content
|
|
444
|
+
title.textContent = item.name;
|
|
445
|
+
content.innerHTML = `
|
|
446
|
+
<dl>
|
|
447
|
+
<dt>Price:</dt>
|
|
448
|
+
<dd>$${item.price}</dd>
|
|
449
|
+
<dt>Description:</dt>
|
|
450
|
+
<dd>${item.description}</dd>
|
|
451
|
+
</dl>
|
|
452
|
+
`;
|
|
453
|
+
});
|
|
454
|
+
</script>
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
### Complete Example
|
|
458
|
+
|
|
459
|
+
```html
|
|
460
|
+
<!DOCTYPE html>
|
|
461
|
+
<html>
|
|
462
|
+
<head>
|
|
463
|
+
<style>
|
|
464
|
+
body {
|
|
465
|
+
margin: 0;
|
|
466
|
+
font-family: system-ui;
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
.app-header {
|
|
470
|
+
padding: 1rem;
|
|
471
|
+
background: #1f2937;
|
|
472
|
+
color: white;
|
|
473
|
+
display: flex;
|
|
474
|
+
align-items: center;
|
|
475
|
+
gap: 1rem;
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
.content {
|
|
479
|
+
padding: 2rem;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
snice-drawer nav {
|
|
483
|
+
display: flex;
|
|
484
|
+
flex-direction: column;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
snice-drawer nav a {
|
|
488
|
+
padding: 0.75rem 1rem;
|
|
489
|
+
text-decoration: none;
|
|
490
|
+
color: inherit;
|
|
491
|
+
border-radius: 4px;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
snice-drawer nav a:hover {
|
|
495
|
+
background: #f3f4f6;
|
|
496
|
+
}
|
|
497
|
+
</style>
|
|
498
|
+
|
|
499
|
+
<script type="module">
|
|
500
|
+
import 'snice/components/drawer/snice-drawer';
|
|
501
|
+
|
|
502
|
+
const drawer = document.querySelector('snice-drawer');
|
|
503
|
+
const menuBtn = document.querySelector('#menuBtn');
|
|
504
|
+
|
|
505
|
+
menuBtn.addEventListener('click', () => drawer.show());
|
|
506
|
+
|
|
507
|
+
// Close drawer on link click
|
|
508
|
+
drawer.querySelectorAll('a').forEach(link => {
|
|
509
|
+
link.addEventListener('click', (e) => {
|
|
510
|
+
e.preventDefault();
|
|
511
|
+
drawer.hide();
|
|
512
|
+
console.log('Navigate to:', link.getAttribute('href'));
|
|
513
|
+
});
|
|
514
|
+
});
|
|
515
|
+
</script>
|
|
516
|
+
</head>
|
|
517
|
+
<body>
|
|
518
|
+
<header class="app-header">
|
|
519
|
+
<button id="menuBtn">☰ Menu</button>
|
|
520
|
+
<h1>My App</h1>
|
|
521
|
+
</header>
|
|
522
|
+
|
|
523
|
+
<main class="content">
|
|
524
|
+
<h2>Welcome</h2>
|
|
525
|
+
<p>Click the menu button to open the navigation drawer.</p>
|
|
526
|
+
</main>
|
|
527
|
+
|
|
528
|
+
<snice-drawer id="navDrawer" position="left" size="medium">
|
|
529
|
+
<h2 slot="title">Navigation</h2>
|
|
530
|
+
|
|
531
|
+
<nav>
|
|
532
|
+
<a href="/">🏠 Home</a>
|
|
533
|
+
<a href="/dashboard">📊 Dashboard</a>
|
|
534
|
+
<a href="/products">📦 Products</a>
|
|
535
|
+
<a href="/orders">📋 Orders</a>
|
|
536
|
+
<a href="/customers">👥 Customers</a>
|
|
537
|
+
<a href="/analytics">📈 Analytics</a>
|
|
538
|
+
<a href="/settings">⚙️ Settings</a>
|
|
539
|
+
</nav>
|
|
540
|
+
|
|
541
|
+
<div slot="footer">
|
|
542
|
+
<button onclick="this.closest('snice-drawer').hide()">
|
|
543
|
+
Close
|
|
544
|
+
</button>
|
|
545
|
+
</div>
|
|
546
|
+
</snice-drawer>
|
|
547
|
+
</body>
|
|
548
|
+
</html>
|
|
549
|
+
```
|
|
550
|
+
|
|
551
|
+
## Accessibility
|
|
552
|
+
|
|
553
|
+
The drawer component includes comprehensive accessibility features:
|
|
554
|
+
|
|
555
|
+
- `role="dialog"` on the drawer container
|
|
556
|
+
- `aria-modal="true"` to indicate modal behavior
|
|
557
|
+
- `aria-hidden` reflects visibility state
|
|
558
|
+
- Focus trap keeps keyboard navigation within drawer
|
|
559
|
+
- Focus restoration returns focus to trigger element on close
|
|
560
|
+
- Escape key support for closing
|
|
561
|
+
- Close button is keyboard accessible
|
|
562
|
+
|
|
563
|
+
### Keyboard Support
|
|
564
|
+
|
|
565
|
+
- **Escape**: Close drawer (unless `noEscapeDismiss` or `persistent` is true)
|
|
566
|
+
- **Tab**: Cycle through focusable elements within drawer (trapped)
|
|
567
|
+
- **Shift + Tab**: Reverse cycle through focusable elements
|
|
568
|
+
|
|
569
|
+
## Behavior
|
|
570
|
+
|
|
571
|
+
### Focus Management
|
|
572
|
+
|
|
573
|
+
When a drawer opens:
|
|
574
|
+
1. Current focus is stored
|
|
575
|
+
2. Focus moves to the drawer container
|
|
576
|
+
3. Tab navigation is trapped within the drawer (unless `noFocusTrap` is true)
|
|
577
|
+
|
|
578
|
+
When a drawer closes:
|
|
579
|
+
1. Focus returns to the previously focused element
|
|
580
|
+
|
|
581
|
+
### Dismissal
|
|
582
|
+
|
|
583
|
+
By default, drawers can be dismissed by:
|
|
584
|
+
- Clicking the close button
|
|
585
|
+
- Clicking the backdrop
|
|
586
|
+
- Pressing Escape
|
|
587
|
+
|
|
588
|
+
This behavior can be customized:
|
|
589
|
+
- `noBackdropDismiss`: Prevents backdrop click dismissal
|
|
590
|
+
- `noEscapeDismiss`: Prevents Escape key dismissal
|
|
591
|
+
- `persistent`: Hides close button and prevents all dismissal
|
|
592
|
+
|
|
593
|
+
### Push Content Mode
|
|
594
|
+
|
|
595
|
+
When `pushContent` is enabled, the drawer pushes the main content aside instead of overlaying it. This is useful for persistent navigation panels. The pushed element is determined by:
|
|
596
|
+
1. First `<main>` element in the document
|
|
597
|
+
2. Falls back to `<body>` if no `<main>` exists
|
|
598
|
+
|
|
599
|
+
## Browser Support
|
|
600
|
+
|
|
601
|
+
- Modern browsers (Chrome, Firefox, Safari, Edge)
|
|
602
|
+
- Requires Custom Elements v1 and Shadow DOM support
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Empty State Component
|
|
2
|
+
|
|
3
|
+
The `<snice-empty-state>` component provides a consistent way to display empty or no-data states.
|
|
4
|
+
|
|
5
|
+
## Basic Usage
|
|
6
|
+
|
|
7
|
+
```html
|
|
8
|
+
<snice-empty-state
|
|
9
|
+
icon="📭"
|
|
10
|
+
title="No data"
|
|
11
|
+
description="There's nothing here yet"
|
|
12
|
+
></snice-empty-state>
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Properties
|
|
16
|
+
|
|
17
|
+
| Property | Type | Default | Description |
|
|
18
|
+
|----------|------|---------|-------------|
|
|
19
|
+
| `size` | `'small' \| 'medium' \| 'large'` | `'medium'` | Size variant |
|
|
20
|
+
| `icon` | `string` | `'📭'` | Icon (emoji or text) |
|
|
21
|
+
| `title` | `string` | `'No data'` | Title text |
|
|
22
|
+
| `description` | `string` | `''` | Description text |
|
|
23
|
+
| `actionText` | `string` | `''` | Action button text |
|
|
24
|
+
| `actionHref` | `string` | `''` | Action link URL |
|
|
25
|
+
|
|
26
|
+
## Events
|
|
27
|
+
|
|
28
|
+
### `@snice/empty-state-action`
|
|
29
|
+
Fired when action button/link is clicked.
|
|
30
|
+
|
|
31
|
+
## Examples
|
|
32
|
+
|
|
33
|
+
### No Search Results
|
|
34
|
+
|
|
35
|
+
```html
|
|
36
|
+
<snice-empty-state
|
|
37
|
+
icon="🔍"
|
|
38
|
+
title="No results found"
|
|
39
|
+
description="Try adjusting your search criteria"
|
|
40
|
+
action-text="Clear Search"
|
|
41
|
+
></snice-empty-state>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Empty List
|
|
45
|
+
|
|
46
|
+
```html
|
|
47
|
+
<snice-empty-state
|
|
48
|
+
icon="📦"
|
|
49
|
+
title="No items yet"
|
|
50
|
+
description="Get started by creating your first item"
|
|
51
|
+
action-text="Create Item"
|
|
52
|
+
></snice-empty-state>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 404 Page
|
|
56
|
+
|
|
57
|
+
```html
|
|
58
|
+
<snice-empty-state
|
|
59
|
+
icon="🤷"
|
|
60
|
+
title="Page not found"
|
|
61
|
+
description="The page you're looking for doesn't exist"
|
|
62
|
+
action-text="Go Home"
|
|
63
|
+
action-href="/"
|
|
64
|
+
></snice-empty-state>
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### With Custom Content
|
|
68
|
+
|
|
69
|
+
```html
|
|
70
|
+
<snice-empty-state
|
|
71
|
+
icon="🎨"
|
|
72
|
+
title="No projects"
|
|
73
|
+
>
|
|
74
|
+
<div slot="">
|
|
75
|
+
<button>Create Project</button>
|
|
76
|
+
<button>Import Project</button>
|
|
77
|
+
</div>
|
|
78
|
+
</snice-empty-state>
|
|
79
|
+
```
|