snice 4.28.0 → 4.30.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 +3 -10
- package/adapters/react/SniceProvider.d.ts +71 -0
- package/adapters/react/SniceProvider.js +49 -0
- package/adapters/react/SniceProvider.js.map +1 -0
- package/adapters/react/SniceRouter.d.ts +44 -0
- package/adapters/react/SniceRouter.js +190 -0
- package/adapters/react/SniceRouter.js.map +1 -0
- package/adapters/react/action-bar.d.ts +30 -0
- package/adapters/react/action-bar.d.ts.map +1 -0
- package/adapters/react/action-bar.js +24 -0
- package/adapters/react/action-bar.js.map +1 -0
- package/adapters/react/action-bar.tsx +38 -0
- package/adapters/react/binpack.d.ts +35 -0
- package/adapters/react/binpack.d.ts.map +1 -0
- package/adapters/react/binpack.js +24 -0
- package/adapters/react/binpack.js.map +1 -0
- package/adapters/react/binpack.tsx +43 -0
- package/adapters/react/components.d.ts +6 -0
- package/adapters/react/components.d.ts.map +1 -1
- package/adapters/react/components.js +3 -0
- package/adapters/react/components.js.map +1 -1
- package/adapters/react/components.ts +6 -0
- package/adapters/react/grid.d.ts +36 -0
- package/adapters/react/grid.d.ts.map +1 -0
- package/adapters/react/grid.js +24 -0
- package/adapters/react/grid.js.map +1 -0
- package/adapters/react/grid.tsx +44 -0
- package/adapters/react/index.d.ts +5 -0
- package/adapters/react/index.d.ts.map +1 -1
- package/adapters/react/index.js +3 -2
- package/adapters/react/index.js.map +1 -1
- package/adapters/react/index.ts +6 -3
- package/adapters/react/matchRoute.d.ts +16 -0
- package/adapters/react/matchRoute.js +32 -0
- package/adapters/react/matchRoute.js.map +1 -0
- package/adapters/react/types.d.ts +1 -15
- package/adapters/react/types.d.ts.map +1 -1
- package/adapters/react/types.ts +1 -15
- package/adapters/react/useRequestHandler.d.ts +56 -0
- package/adapters/react/useRequestHandler.js +103 -0
- package/adapters/react/useRequestHandler.js.map +1 -0
- package/bin/snice.js +8 -13
- package/bin/templates/{pwa → default}/index.html +1 -1
- package/bin/templates/{pwa → default}/src/components/app-header.ts +36 -18
- package/bin/templates/{pwa → default}/src/components/notification-badge.ts +2 -21
- package/bin/templates/{pwa → default}/src/components/search-bar.ts +12 -12
- package/bin/templates/default/src/context.ts +17 -0
- package/bin/templates/{pwa → default}/src/controllers/notification-controller.ts +10 -15
- package/bin/templates/{pwa → default}/src/daemons/notifications.ts +0 -12
- package/bin/templates/{pwa → default}/src/main.ts +1 -7
- package/bin/templates/{pwa → default}/src/middleware/error.ts +1 -8
- package/bin/templates/{pwa → default}/src/pages/dashboard.ts +17 -18
- package/bin/templates/{pwa → default}/src/pages/data.ts +24 -24
- package/bin/templates/{pwa → default}/src/pages/login.ts +3 -6
- package/bin/templates/{pwa → default}/src/pages/notifications.ts +21 -19
- package/bin/templates/{pwa → default}/src/pages/profile.ts +10 -12
- package/bin/templates/{pwa → default}/src/pages/settings.ts +22 -22
- package/bin/templates/default/src/router.ts +13 -0
- package/bin/templates/default/src/styles/global.css +16 -0
- package/bin/templates/{pwa → default}/tsconfig.json +2 -1
- package/bin/templates/react/README.md +124 -0
- package/bin/templates/react/global.d.ts +10 -0
- package/bin/templates/react/index.html +15 -0
- package/bin/templates/react/package.json +31 -0
- package/bin/templates/react/src/App.tsx +112 -0
- package/bin/templates/react/src/components/AppHeader.tsx +85 -0
- package/bin/templates/react/src/components/AppLayout.tsx +11 -0
- package/bin/templates/react/src/components/NotificationBadge.tsx +13 -0
- package/bin/templates/react/src/components/SearchBar.tsx +63 -0
- package/bin/templates/react/src/daemons/notifications.ts +136 -0
- package/bin/templates/react/src/fetcher.ts +15 -0
- package/bin/templates/react/src/guards/auth.ts +6 -0
- package/bin/templates/react/src/main.tsx +27 -0
- package/bin/templates/react/src/middleware/auth.ts +16 -0
- package/bin/templates/react/src/middleware/error.ts +29 -0
- package/bin/templates/react/src/middleware/retry.ts +31 -0
- package/bin/templates/react/src/pages/DashboardPage.tsx +111 -0
- package/bin/templates/react/src/pages/DataPage.tsx +119 -0
- package/bin/templates/react/src/pages/LoginPage.tsx +46 -0
- package/bin/templates/react/src/pages/NotificationsPage.tsx +119 -0
- package/bin/templates/react/src/pages/ProfilePage.tsx +92 -0
- package/bin/templates/react/src/pages/SettingsPage.tsx +165 -0
- package/bin/templates/react/src/services/auth.ts +48 -0
- package/bin/templates/react/src/services/jwt.ts +35 -0
- package/bin/templates/react/src/services/storage.ts +24 -0
- package/bin/templates/react/src/styles/global.css +382 -0
- package/bin/templates/react/src/types/auth.ts +21 -0
- package/bin/templates/react/src/types/notifications.ts +9 -0
- package/bin/templates/react/tests/helpers/test-utils.ts +79 -0
- package/bin/templates/react/tests/middleware/auth.test.ts +67 -0
- package/bin/templates/react/tests/middleware/error.test.ts +105 -0
- package/bin/templates/react/tests/middleware/retry.test.ts +103 -0
- package/bin/templates/react/tests/services/auth.test.ts +89 -0
- package/bin/templates/react/tests/services/jwt.test.ts +76 -0
- package/bin/templates/react/tests/services/storage.test.ts +69 -0
- package/bin/templates/{base → react}/tsconfig.json +4 -6
- package/bin/templates/react/vite.config.ts +18 -0
- package/bin/templates/react/vitest.config.ts +18 -0
- package/dist/cdn/accordion/snice-accordion.js +1 -1
- package/dist/cdn/accordion/snice-accordion.min.js +1 -1
- package/dist/cdn/action-bar/README.md +27 -0
- package/dist/cdn/action-bar/snice-action-bar.js +249 -0
- package/dist/cdn/action-bar/snice-action-bar.js.map +1 -0
- package/dist/cdn/action-bar/snice-action-bar.min.js +12 -0
- package/dist/cdn/action-bar/snice-action-bar.min.js.map +1 -0
- package/dist/cdn/activity-feed/snice-activity-feed.js +1 -1
- package/dist/cdn/activity-feed/snice-activity-feed.min.js +1 -1
- package/dist/cdn/alert/snice-alert.js +1 -1
- package/dist/cdn/alert/snice-alert.min.js +1 -1
- package/dist/cdn/app-tiles/snice-app-tiles.js +1 -1
- package/dist/cdn/app-tiles/snice-app-tiles.min.js +1 -1
- package/dist/cdn/approval-flow/snice-approval-flow.js +1 -1
- package/dist/cdn/approval-flow/snice-approval-flow.min.js +1 -1
- package/dist/cdn/audio-recorder/snice-audio-recorder.js +1 -1
- package/dist/cdn/audio-recorder/snice-audio-recorder.min.js +1 -1
- package/dist/cdn/availability/snice-availability.js +1 -1
- package/dist/cdn/availability/snice-availability.min.js +1 -1
- package/dist/cdn/avatar/snice-avatar.js +1 -1
- package/dist/cdn/avatar/snice-avatar.min.js +1 -1
- package/dist/cdn/avatar-group/snice-avatar-group.js +1 -1
- package/dist/cdn/avatar-group/snice-avatar-group.min.js +1 -1
- package/dist/cdn/badge/snice-badge.js +1 -1
- package/dist/cdn/badge/snice-badge.min.js +1 -1
- package/dist/cdn/banner/snice-banner.js +1 -1
- package/dist/cdn/banner/snice-banner.min.js +1 -1
- package/dist/cdn/binpack/README.md +27 -0
- package/dist/cdn/binpack/snice-binpack.js +1037 -0
- package/dist/cdn/binpack/snice-binpack.js.map +1 -0
- package/dist/cdn/binpack/snice-binpack.min.js +13 -0
- package/dist/cdn/binpack/snice-binpack.min.js.map +1 -0
- package/dist/cdn/book/snice-book.js +1 -1
- package/dist/cdn/book/snice-book.min.js +1 -1
- package/dist/cdn/booking/snice-booking.js +1 -1
- package/dist/cdn/booking/snice-booking.min.js +1 -1
- package/dist/cdn/breadcrumbs/snice-breadcrumbs.js +1 -1
- package/dist/cdn/breadcrumbs/snice-breadcrumbs.min.js +1 -1
- package/dist/cdn/button/README.md +1 -1
- package/dist/cdn/button/snice-button.js +2 -2
- package/dist/cdn/button/snice-button.js.map +1 -1
- package/dist/cdn/button/snice-button.min.js +2 -2
- package/dist/cdn/button/snice-button.min.js.map +1 -1
- package/dist/cdn/calendar/snice-calendar.js +1 -1
- package/dist/cdn/calendar/snice-calendar.min.js +1 -1
- package/dist/cdn/camera/snice-camera.js +1 -1
- package/dist/cdn/camera/snice-camera.min.js +1 -1
- package/dist/cdn/camera-annotate/snice-camera-annotate.js +1 -1
- package/dist/cdn/camera-annotate/snice-camera-annotate.min.js +1 -1
- package/dist/cdn/candlestick/snice-candlestick.js +1 -1
- package/dist/cdn/candlestick/snice-candlestick.min.js +1 -1
- package/dist/cdn/card/snice-card.js +1 -1
- package/dist/cdn/card/snice-card.min.js +1 -1
- package/dist/cdn/carousel/snice-carousel.js +1 -1
- package/dist/cdn/carousel/snice-carousel.min.js +1 -1
- package/dist/cdn/cart/snice-cart.js +1 -1
- package/dist/cdn/cart/snice-cart.min.js +1 -1
- package/dist/cdn/chart/snice-chart.js +1 -1
- package/dist/cdn/chart/snice-chart.min.js +1 -1
- package/dist/cdn/chat/snice-chat.js +1 -1
- package/dist/cdn/chat/snice-chat.min.js +1 -1
- package/dist/cdn/checkbox/snice-checkbox.js +1 -1
- package/dist/cdn/checkbox/snice-checkbox.min.js +1 -1
- package/dist/cdn/chip/README.md +2 -2
- package/dist/cdn/chip/snice-chip.js +2 -2
- package/dist/cdn/chip/snice-chip.js.map +1 -1
- package/dist/cdn/chip/snice-chip.min.js +3 -3
- package/dist/cdn/chip/snice-chip.min.js.map +1 -1
- package/dist/cdn/code-block/snice-code-block.js +1 -1
- package/dist/cdn/code-block/snice-code-block.min.js +1 -1
- package/dist/cdn/color-display/snice-color-display.js +1 -1
- package/dist/cdn/color-display/snice-color-display.min.js +1 -1
- package/dist/cdn/color-picker/snice-color-picker.js +1 -1
- package/dist/cdn/color-picker/snice-color-picker.min.js +1 -1
- package/dist/cdn/command-palette/snice-command-palette.js +1 -1
- package/dist/cdn/command-palette/snice-command-palette.min.js +1 -1
- package/dist/cdn/comments/snice-comments.js +1 -1
- package/dist/cdn/comments/snice-comments.min.js +1 -1
- package/dist/cdn/countdown/snice-countdown.js +1 -1
- package/dist/cdn/countdown/snice-countdown.min.js +1 -1
- package/dist/cdn/cropper/snice-cropper.js +1 -1
- package/dist/cdn/cropper/snice-cropper.min.js +1 -1
- package/dist/cdn/data-card/snice-data-card.js +1 -1
- package/dist/cdn/data-card/snice-data-card.min.js +1 -1
- package/dist/cdn/date-picker/README.md +1 -1
- package/dist/cdn/date-picker/snice-date-picker.js +2 -2
- package/dist/cdn/date-picker/snice-date-picker.js.map +1 -1
- package/dist/cdn/date-picker/snice-date-picker.min.js +2 -2
- package/dist/cdn/date-picker/snice-date-picker.min.js.map +1 -1
- package/dist/cdn/date-range-picker/README.md +1 -1
- package/dist/cdn/date-range-picker/snice-date-range-picker.js +2 -2
- package/dist/cdn/date-range-picker/snice-date-range-picker.js.map +1 -1
- package/dist/cdn/date-range-picker/snice-date-range-picker.min.js +11 -11
- package/dist/cdn/date-range-picker/snice-date-range-picker.min.js.map +1 -1
- package/dist/cdn/date-time-picker/README.md +1 -1
- package/dist/cdn/date-time-picker/snice-date-time-picker.js +2 -2
- package/dist/cdn/date-time-picker/snice-date-time-picker.js.map +1 -1
- package/dist/cdn/date-time-picker/snice-date-time-picker.min.js +2 -2
- package/dist/cdn/date-time-picker/snice-date-time-picker.min.js.map +1 -1
- package/dist/cdn/diff/snice-diff.js +1 -1
- package/dist/cdn/diff/snice-diff.min.js +1 -1
- package/dist/cdn/divider/snice-divider.js +1 -1
- package/dist/cdn/divider/snice-divider.min.js +1 -1
- package/dist/cdn/doc/snice-doc.js +1 -1
- package/dist/cdn/doc/snice-doc.min.js +1 -1
- package/dist/cdn/draw/README.md +2 -2
- package/dist/cdn/draw/snice-draw.js +26 -4
- package/dist/cdn/draw/snice-draw.js.map +1 -1
- package/dist/cdn/draw/snice-draw.min.js +3 -3
- package/dist/cdn/draw/snice-draw.min.js.map +1 -1
- package/dist/cdn/drawer/snice-drawer.js +1 -1
- package/dist/cdn/drawer/snice-drawer.min.js +1 -1
- package/dist/cdn/empty-state/snice-empty-state.js +1 -1
- package/dist/cdn/empty-state/snice-empty-state.min.js +1 -1
- package/dist/cdn/estimate/snice-estimate.js +1 -1
- package/dist/cdn/estimate/snice-estimate.min.js +1 -1
- package/dist/cdn/file-gallery/snice-file-gallery.js +1 -1
- package/dist/cdn/file-gallery/snice-file-gallery.min.js +1 -1
- package/dist/cdn/file-upload/snice-file-upload.js +1 -1
- package/dist/cdn/file-upload/snice-file-upload.min.js +1 -1
- package/dist/cdn/flip-card/snice-flip-card.js +1 -1
- package/dist/cdn/flip-card/snice-flip-card.min.js +1 -1
- package/dist/cdn/flow/snice-flow.js +1 -1
- package/dist/cdn/flow/snice-flow.min.js +1 -1
- package/dist/cdn/form-layout/snice-form-layout.js +1 -1
- package/dist/cdn/form-layout/snice-form-layout.min.js +1 -1
- package/dist/cdn/funnel/snice-funnel.js +1 -1
- package/dist/cdn/funnel/snice-funnel.min.js +1 -1
- package/dist/cdn/gantt/snice-gantt.js +1 -1
- package/dist/cdn/gantt/snice-gantt.min.js +1 -1
- package/dist/cdn/gauge/snice-gauge.js +1 -1
- package/dist/cdn/gauge/snice-gauge.min.js +1 -1
- package/dist/cdn/grid/README.md +27 -0
- package/dist/cdn/grid/snice-grid.js +862 -0
- package/dist/cdn/grid/snice-grid.js.map +1 -0
- package/dist/cdn/grid/snice-grid.min.js +13 -0
- package/dist/cdn/grid/snice-grid.min.js.map +1 -0
- package/dist/cdn/heatmap/snice-heatmap.js +1 -1
- package/dist/cdn/heatmap/snice-heatmap.min.js +1 -1
- package/dist/cdn/image/snice-image.js +1 -1
- package/dist/cdn/image/snice-image.min.js +1 -1
- package/dist/cdn/input/snice-input.js +1 -1
- package/dist/cdn/input/snice-input.min.js +1 -1
- package/dist/cdn/invoice/snice-invoice.js +1 -1
- package/dist/cdn/invoice/snice-invoice.min.js +1 -1
- package/dist/cdn/kanban/snice-kanban.js +1 -1
- package/dist/cdn/kanban/snice-kanban.min.js +1 -1
- package/dist/cdn/key-value/snice-key-value.js +1 -1
- package/dist/cdn/key-value/snice-key-value.min.js +1 -1
- package/dist/cdn/kpi/snice-kpi.js +1 -1
- package/dist/cdn/kpi/snice-kpi.min.js +1 -1
- package/dist/cdn/layout/snice-layout.js +1 -1
- package/dist/cdn/layout/snice-layout.min.js +1 -1
- package/dist/cdn/leaderboard/snice-leaderboard.js +1 -1
- package/dist/cdn/leaderboard/snice-leaderboard.min.js +1 -1
- package/dist/cdn/link/snice-link.js +1 -1
- package/dist/cdn/link/snice-link.min.js +1 -1
- package/dist/cdn/link-preview/snice-link-preview.js +1 -1
- package/dist/cdn/link-preview/snice-link-preview.min.js +1 -1
- package/dist/cdn/list/snice-list.js +1 -1
- package/dist/cdn/list/snice-list.min.js +1 -1
- package/dist/cdn/location/snice-location.js +1 -1
- package/dist/cdn/location/snice-location.min.js +1 -1
- package/dist/cdn/login/README.md +2 -2
- package/dist/cdn/login/snice-login.js +2 -2
- package/dist/cdn/login/snice-login.js.map +1 -1
- package/dist/cdn/login/snice-login.min.js +2 -2
- package/dist/cdn/login/snice-login.min.js.map +1 -1
- package/dist/cdn/map/snice-map.js +1 -1
- package/dist/cdn/map/snice-map.min.js +1 -1
- package/dist/cdn/markdown/snice-markdown.js +1 -1
- package/dist/cdn/markdown/snice-markdown.min.js +1 -1
- package/dist/cdn/masonry/snice-masonry.js +1 -1
- package/dist/cdn/masonry/snice-masonry.min.js +1 -1
- package/dist/cdn/menu/snice-menu.js +1 -1
- package/dist/cdn/menu/snice-menu.min.js +1 -1
- package/dist/cdn/message-strip/README.md +2 -2
- package/dist/cdn/message-strip/snice-message-strip.js +2 -2
- package/dist/cdn/message-strip/snice-message-strip.js.map +1 -1
- package/dist/cdn/message-strip/snice-message-strip.min.js +6 -6
- package/dist/cdn/message-strip/snice-message-strip.min.js.map +1 -1
- package/dist/cdn/metric-table/snice-metric-table.js +1 -1
- package/dist/cdn/metric-table/snice-metric-table.min.js +1 -1
- package/dist/cdn/modal/snice-modal.js +1 -1
- package/dist/cdn/modal/snice-modal.min.js +1 -1
- package/dist/cdn/music-player/snice-music-player.js +1 -1
- package/dist/cdn/music-player/snice-music-player.min.js +1 -1
- package/dist/cdn/nav/snice-nav.js +1 -1
- package/dist/cdn/nav/snice-nav.min.js +1 -1
- package/dist/cdn/network-graph/snice-network-graph.js +1 -1
- package/dist/cdn/network-graph/snice-network-graph.min.js +1 -1
- package/dist/cdn/notification-center/snice-notification-center.js +1 -1
- package/dist/cdn/notification-center/snice-notification-center.min.js +1 -1
- package/dist/cdn/order-tracker/snice-order-tracker.js +1 -1
- package/dist/cdn/order-tracker/snice-order-tracker.min.js +1 -1
- package/dist/cdn/org-chart/snice-org-chart.js +1 -1
- package/dist/cdn/org-chart/snice-org-chart.min.js +1 -1
- package/dist/cdn/pagination/snice-pagination.js +1 -1
- package/dist/cdn/pagination/snice-pagination.min.js +1 -1
- package/dist/cdn/paint/README.md +2 -2
- package/dist/cdn/paint/snice-paint.js +26 -3
- package/dist/cdn/paint/snice-paint.js.map +1 -1
- package/dist/cdn/paint/snice-paint.min.js +3 -3
- package/dist/cdn/paint/snice-paint.min.js.map +1 -1
- package/dist/cdn/pdf-viewer/snice-pdf-viewer.js +1 -1
- package/dist/cdn/pdf-viewer/snice-pdf-viewer.min.js +1 -1
- package/dist/cdn/permission-matrix/snice-permission-matrix.js +1 -1
- package/dist/cdn/permission-matrix/snice-permission-matrix.min.js +1 -1
- package/dist/cdn/podcast-player/snice-podcast-player.js +1 -1
- package/dist/cdn/podcast-player/snice-podcast-player.min.js +1 -1
- package/dist/cdn/pricing-table/snice-pricing-table.js +1 -1
- package/dist/cdn/pricing-table/snice-pricing-table.min.js +1 -1
- package/dist/cdn/product-card/README.md +1 -1
- package/dist/cdn/product-card/snice-product-card.js +1 -1
- package/dist/cdn/product-card/snice-product-card.min.js +1 -1
- package/dist/cdn/progress/snice-progress.js +1 -1
- package/dist/cdn/progress/snice-progress.min.js +1 -1
- package/dist/cdn/progress-ring/snice-progress-ring.js +1 -1
- package/dist/cdn/progress-ring/snice-progress-ring.min.js +1 -1
- package/dist/cdn/qr-code/snice-qr-code.js +1 -1
- package/dist/cdn/qr-code/snice-qr-code.min.js +1 -1
- package/dist/cdn/qr-reader/snice-qr-reader.js +1 -1
- package/dist/cdn/qr-reader/snice-qr-reader.min.js +1 -1
- package/dist/cdn/radio/snice-radio.js +1 -1
- package/dist/cdn/radio/snice-radio.min.js +1 -1
- package/dist/cdn/range-slider/snice-range-slider.js +1 -1
- package/dist/cdn/range-slider/snice-range-slider.min.js +1 -1
- package/dist/cdn/rating/snice-rating.js +1 -1
- package/dist/cdn/rating/snice-rating.min.js +1 -1
- package/dist/cdn/receipt/snice-receipt.js +1 -1
- package/dist/cdn/receipt/snice-receipt.min.js +1 -1
- package/dist/cdn/recipe/snice-recipe.js +1 -1
- package/dist/cdn/recipe/snice-recipe.min.js +1 -1
- package/dist/cdn/runtime/README.md +2 -2
- package/dist/cdn/runtime/snice-runtime.esm.js +109 -16
- package/dist/cdn/runtime/snice-runtime.esm.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.esm.min.js +8 -8
- package/dist/cdn/runtime/snice-runtime.esm.min.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.js +109 -15
- package/dist/cdn/runtime/snice-runtime.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.min.js +7 -7
- package/dist/cdn/runtime/snice-runtime.min.js.map +1 -1
- package/dist/cdn/sankey/snice-sankey.js +1 -1
- package/dist/cdn/sankey/snice-sankey.min.js +1 -1
- package/dist/cdn/segmented-control/snice-segmented-control.js +1 -1
- package/dist/cdn/segmented-control/snice-segmented-control.min.js +1 -1
- package/dist/cdn/select/snice-select.js +1 -1
- package/dist/cdn/select/snice-select.min.js +1 -1
- package/dist/cdn/skeleton/snice-skeleton.js +1 -1
- package/dist/cdn/skeleton/snice-skeleton.min.js +1 -1
- package/dist/cdn/slider/snice-slider.js +1 -1
- package/dist/cdn/slider/snice-slider.min.js +1 -1
- package/dist/cdn/sortable/snice-sortable.js +1 -1
- package/dist/cdn/sortable/snice-sortable.min.js +1 -1
- package/dist/cdn/sparkline/snice-sparkline.js +1 -1
- package/dist/cdn/sparkline/snice-sparkline.min.js +1 -1
- package/dist/cdn/spinner/snice-spinner.js +1 -1
- package/dist/cdn/spinner/snice-spinner.min.js +1 -1
- package/dist/cdn/split-button/snice-split-button.js +1 -1
- package/dist/cdn/split-button/snice-split-button.min.js +1 -1
- package/dist/cdn/split-pane/snice-split-pane.js +1 -1
- package/dist/cdn/split-pane/snice-split-pane.min.js +1 -1
- package/dist/cdn/spotlight/snice-spotlight.js +1 -1
- package/dist/cdn/spotlight/snice-spotlight.min.js +1 -1
- package/dist/cdn/spreadsheet/snice-spreadsheet.js +1 -1
- package/dist/cdn/spreadsheet/snice-spreadsheet.min.js +1 -1
- package/dist/cdn/stat-group/snice-stat-group.js +1 -1
- package/dist/cdn/stat-group/snice-stat-group.min.js +1 -1
- package/dist/cdn/step-input/snice-step-input.js +1 -1
- package/dist/cdn/step-input/snice-step-input.min.js +1 -1
- package/dist/cdn/stepper/snice-stepper.js +1 -1
- package/dist/cdn/stepper/snice-stepper.min.js +1 -1
- package/dist/cdn/switch/snice-switch.js +1 -1
- package/dist/cdn/switch/snice-switch.min.js +1 -1
- package/dist/cdn/table/README.md +1 -1
- package/dist/cdn/table/snice-table.js +2 -2
- package/dist/cdn/table/snice-table.js.map +1 -1
- package/dist/cdn/table/snice-table.min.js +2 -2
- package/dist/cdn/table/snice-table.min.js.map +1 -1
- package/dist/cdn/tabs/snice-tabs.js +1 -1
- package/dist/cdn/tabs/snice-tabs.min.js +1 -1
- package/dist/cdn/tag/README.md +1 -1
- package/dist/cdn/tag/snice-tag.js +2 -2
- package/dist/cdn/tag/snice-tag.js.map +1 -1
- package/dist/cdn/tag/snice-tag.min.js +3 -3
- package/dist/cdn/tag/snice-tag.min.js.map +1 -1
- package/dist/cdn/tag-input/README.md +2 -2
- package/dist/cdn/tag-input/snice-tag-input.js +2 -2
- package/dist/cdn/tag-input/snice-tag-input.js.map +1 -1
- package/dist/cdn/tag-input/snice-tag-input.min.js +2 -2
- package/dist/cdn/tag-input/snice-tag-input.min.js.map +1 -1
- package/dist/cdn/terminal/snice-terminal.js +1 -1
- package/dist/cdn/terminal/snice-terminal.min.js +1 -1
- package/dist/cdn/testimonial/snice-testimonial.js +1 -1
- package/dist/cdn/testimonial/snice-testimonial.min.js +1 -1
- package/dist/cdn/textarea/snice-textarea.js +1 -1
- package/dist/cdn/textarea/snice-textarea.min.js +1 -1
- package/dist/cdn/time-picker/README.md +1 -1
- package/dist/cdn/time-picker/snice-time-picker.js +2 -2
- package/dist/cdn/time-picker/snice-time-picker.js.map +1 -1
- package/dist/cdn/time-picker/snice-time-picker.min.js +2 -2
- package/dist/cdn/time-picker/snice-time-picker.min.js.map +1 -1
- package/dist/cdn/time-range-picker/snice-time-range-picker.js +1 -1
- package/dist/cdn/time-range-picker/snice-time-range-picker.min.js +1 -1
- package/dist/cdn/timeline/snice-timeline.js +1 -1
- package/dist/cdn/timeline/snice-timeline.min.js +1 -1
- package/dist/cdn/timer/snice-timer.js +1 -1
- package/dist/cdn/timer/snice-timer.min.js +1 -1
- package/dist/cdn/toast/README.md +1 -1
- package/dist/cdn/toast/snice-toast.js +7 -3
- package/dist/cdn/toast/snice-toast.js.map +1 -1
- package/dist/cdn/toast/snice-toast.min.js +6 -6
- package/dist/cdn/toast/snice-toast.min.js.map +1 -1
- package/dist/cdn/tooltip/snice-tooltip.js +1 -1
- package/dist/cdn/tooltip/snice-tooltip.min.js +1 -1
- package/dist/cdn/tree/snice-tree.js +1 -1
- package/dist/cdn/tree/snice-tree.min.js +1 -1
- package/dist/cdn/treemap/snice-treemap.js +1 -1
- package/dist/cdn/treemap/snice-treemap.min.js +1 -1
- package/dist/cdn/user-card/snice-user-card.js +1 -1
- package/dist/cdn/user-card/snice-user-card.min.js +1 -1
- package/dist/cdn/video-player/snice-video-player.js +1 -1
- package/dist/cdn/video-player/snice-video-player.min.js +1 -1
- package/dist/cdn/virtual-scroller/snice-virtual-scroller.js +1 -1
- package/dist/cdn/virtual-scroller/snice-virtual-scroller.min.js +1 -1
- package/dist/cdn/waterfall/README.md +1 -1
- package/dist/cdn/waterfall/snice-waterfall.js +1 -1
- package/dist/cdn/waterfall/snice-waterfall.min.js +1 -1
- package/dist/cdn/weather/snice-weather.js +1 -1
- package/dist/cdn/weather/snice-weather.min.js +1 -1
- package/dist/cdn/work-order/snice-work-order.js +1 -1
- package/dist/cdn/work-order/snice-work-order.min.js +1 -1
- package/dist/components/action-bar/snice-action-bar.d.ts +22 -0
- package/dist/components/action-bar/snice-action-bar.js +182 -0
- package/dist/components/action-bar/snice-action-bar.js.map +1 -0
- package/dist/components/action-bar/snice-action-bar.types.d.ts +17 -0
- package/dist/components/binpack/snice-binpack.d.ts +82 -0
- package/dist/components/binpack/snice-binpack.js +970 -0
- package/dist/components/binpack/snice-binpack.js.map +1 -0
- package/dist/components/binpack/snice-binpack.types.d.ts +52 -0
- package/dist/components/button/snice-button.js +1 -1
- package/dist/components/button/snice-button.js.map +1 -1
- package/dist/components/chip/snice-chip.js +1 -1
- package/dist/components/chip/snice-chip.js.map +1 -1
- package/dist/components/date-picker/snice-date-picker.js +1 -1
- package/dist/components/date-picker/snice-date-picker.js.map +1 -1
- package/dist/components/date-range-picker/snice-date-range-picker.js +1 -1
- package/dist/components/date-range-picker/snice-date-range-picker.js.map +1 -1
- package/dist/components/date-time-picker/snice-date-time-picker.js +1 -1
- package/dist/components/date-time-picker/snice-date-time-picker.js.map +1 -1
- package/dist/components/draw/snice-draw.d.ts +2 -0
- package/dist/components/draw/snice-draw.js +25 -3
- package/dist/components/draw/snice-draw.js.map +1 -1
- package/dist/components/grid/snice-grid.d.ts +73 -0
- package/dist/components/grid/snice-grid.js +795 -0
- package/dist/components/grid/snice-grid.js.map +1 -0
- package/dist/components/grid/snice-grid.types.d.ts +41 -0
- package/dist/components/message-strip/snice-message-strip.js +1 -1
- package/dist/components/message-strip/snice-message-strip.js.map +1 -1
- package/dist/components/paint/snice-paint.d.ts +2 -0
- package/dist/components/paint/snice-paint.js +25 -2
- package/dist/components/paint/snice-paint.js.map +1 -1
- package/dist/components/tag/snice-tag.js +1 -1
- package/dist/components/tag/snice-tag.js.map +1 -1
- package/dist/components/tag-input/snice-tag-input.js +1 -1
- package/dist/components/tag-input/snice-tag-input.js.map +1 -1
- package/dist/components/theme/theme.css +15 -0
- package/dist/components/time-picker/snice-time-picker.js +1 -1
- package/dist/components/time-picker/snice-time-picker.js.map +1 -1
- package/dist/components/toast/snice-toast-container.js +4 -0
- package/dist/components/toast/snice-toast-container.js.map +1 -1
- package/dist/components/toast/snice-toast.js +2 -2
- package/dist/create-request-handler.d.ts +42 -0
- package/dist/index.cjs +106 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.esm.js +106 -13
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +106 -12
- package/dist/index.iife.js.map +1 -1
- package/dist/react/SniceProvider.d.ts +71 -0
- package/dist/react/SniceProvider.js +49 -0
- package/dist/react/SniceProvider.js.map +1 -0
- package/dist/react/SniceRouter.d.ts +44 -0
- package/dist/react/SniceRouter.js +190 -0
- package/dist/react/SniceRouter.js.map +1 -0
- package/dist/react/index.d.ts +3 -0
- package/dist/react/index.js +14 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/matchRoute.d.ts +16 -0
- package/dist/react/matchRoute.js +32 -0
- package/dist/react/matchRoute.js.map +1 -0
- package/dist/react/useRequestHandler.d.ts +56 -0
- package/dist/react/useRequestHandler.js +103 -0
- package/dist/react/useRequestHandler.js.map +1 -0
- package/dist/symbols.cjs +1 -1
- package/dist/symbols.esm.js +1 -1
- package/dist/transitions.cjs +1 -1
- package/dist/transitions.esm.js +1 -1
- package/dist/types/guard.d.ts +4 -11
- package/docs/ai/DEVELOPMENT.md +1 -1
- package/docs/ai/README.md +7 -7
- package/docs/ai/components/accordion.md +46 -80
- package/docs/ai/components/action-bar.md +75 -0
- package/docs/ai/components/activity-feed.md +7 -7
- package/docs/ai/components/alert.md +26 -44
- package/docs/ai/components/app-tiles.md +34 -39
- package/docs/ai/components/approval-flow.md +1 -1
- package/docs/ai/components/audio-recorder.md +35 -67
- package/docs/ai/components/availability.md +13 -34
- package/docs/ai/components/avatar-group.md +26 -13
- package/docs/ai/components/avatar.md +52 -36
- package/docs/ai/components/badge.md +21 -32
- package/docs/ai/components/banner.md +21 -43
- package/docs/ai/components/binpack.md +89 -0
- package/docs/ai/components/book.md +25 -23
- package/docs/ai/components/booking.md +31 -36
- package/docs/ai/components/breadcrumbs.md +36 -11
- package/docs/ai/components/button.md +33 -44
- package/docs/ai/components/calendar.md +37 -70
- package/docs/ai/components/camera-annotate.md +31 -64
- package/docs/ai/components/camera.md +38 -120
- package/docs/ai/components/candlestick.md +32 -52
- package/docs/ai/components/card.md +20 -30
- package/docs/ai/components/carousel.md +32 -32
- package/docs/ai/components/cart.md +24 -29
- package/docs/ai/components/chart.md +29 -114
- package/docs/ai/components/chat.md +38 -75
- package/docs/ai/components/checkbox.md +22 -41
- package/docs/ai/components/chip.md +18 -54
- package/docs/ai/components/code-block.md +57 -178
- package/docs/ai/components/color-display.md +12 -32
- package/docs/ai/components/color-picker.md +17 -39
- package/docs/ai/components/command-palette.md +49 -71
- package/docs/ai/components/comments.md +55 -36
- package/docs/ai/components/countdown.md +28 -30
- package/docs/ai/components/cropper.md +33 -33
- package/docs/ai/components/data-card.md +20 -14
- package/docs/ai/components/date-picker.md +40 -47
- package/docs/ai/components/date-range-picker.md +31 -15
- package/docs/ai/components/date-time-picker.md +23 -46
- package/docs/ai/components/diff.md +30 -31
- package/docs/ai/components/divider.md +17 -47
- package/docs/ai/components/doc.md +43 -68
- package/docs/ai/components/draw.md +35 -87
- package/docs/ai/components/drawer.md +48 -77
- package/docs/ai/components/empty-state.md +10 -44
- package/docs/ai/components/estimate.md +33 -58
- package/docs/ai/components/file-gallery.md +48 -100
- package/docs/ai/components/file-upload.md +17 -53
- package/docs/ai/components/flip-card.md +31 -23
- package/docs/ai/components/flow.md +37 -65
- package/docs/ai/components/form-builder.md +35 -75
- package/docs/ai/components/form-layout.md +10 -20
- package/docs/ai/components/funnel.md +33 -48
- package/docs/ai/components/gantt.md +27 -23
- package/docs/ai/components/gauge.md +16 -17
- package/docs/ai/components/grid.md +116 -0
- package/docs/ai/components/heatmap.md +21 -21
- package/docs/ai/components/image.md +7 -13
- package/docs/ai/components/input.md +38 -70
- package/docs/ai/components/invoice.md +35 -36
- package/docs/ai/components/kanban.md +32 -61
- package/docs/ai/components/key-value.md +32 -16
- package/docs/ai/components/kpi.md +38 -73
- package/docs/ai/components/layout.md +29 -23
- package/docs/ai/components/leaderboard.md +28 -37
- package/docs/ai/components/link-preview.md +12 -18
- package/docs/ai/components/link.md +10 -7
- package/docs/ai/components/list.md +21 -5
- package/docs/ai/components/location.md +21 -25
- package/docs/ai/components/login.md +14 -9
- package/docs/ai/components/map.md +27 -33
- package/docs/ai/components/markdown.md +20 -24
- package/docs/ai/components/masonry.md +10 -14
- package/docs/ai/components/mentions.md +26 -12
- package/docs/ai/components/menu.md +54 -52
- package/docs/ai/components/message-strip.md +20 -20
- package/docs/ai/components/metric-table.md +14 -21
- package/docs/ai/components/modal.md +27 -18
- package/docs/ai/components/music-player.md +49 -41
- package/docs/ai/components/nav.md +34 -31
- package/docs/ai/components/network-graph.md +27 -42
- package/docs/ai/components/notification-center.md +31 -33
- package/docs/ai/components/order-tracker.md +36 -27
- package/docs/ai/components/org-chart.md +36 -31
- package/docs/ai/components/pagination.md +34 -26
- package/docs/ai/components/paint.md +53 -91
- package/docs/ai/components/pdf-viewer.md +35 -36
- package/docs/ai/components/permission-matrix.md +26 -31
- package/docs/ai/components/podcast-player.md +64 -70
- package/docs/ai/components/pricing-table.md +37 -48
- package/docs/ai/components/product-card.md +58 -41
- package/docs/ai/components/progress-ring.md +20 -24
- package/docs/ai/components/progress.md +28 -45
- package/docs/ai/components/qr-code.md +25 -27
- package/docs/ai/components/qr-reader.md +20 -23
- package/docs/ai/components/radio.md +17 -15
- package/docs/ai/components/range-slider.md +22 -11
- package/docs/ai/components/rating.md +29 -33
- package/docs/ai/components/receipt.md +50 -127
- package/docs/ai/components/recipe.md +44 -42
- package/docs/ai/components/sankey.md +21 -30
- package/docs/ai/components/scheduler.md +29 -41
- package/docs/ai/components/segmented-control.md +11 -15
- package/docs/ai/components/select.md +58 -102
- package/docs/ai/components/skeleton.md +16 -30
- package/docs/ai/components/slider.md +26 -20
- package/docs/ai/components/sortable.md +25 -27
- package/docs/ai/components/sparkline.md +21 -17
- package/docs/ai/components/spinner.md +9 -5
- package/docs/ai/components/split-button.md +10 -13
- package/docs/ai/components/split-pane.md +19 -14
- package/docs/ai/components/spotlight.md +31 -26
- package/docs/ai/components/spreadsheet.md +51 -97
- package/docs/ai/components/stat-group.md +9 -19
- package/docs/ai/components/step-input.md +17 -15
- package/docs/ai/components/stepper.md +14 -15
- package/docs/ai/components/switch.md +15 -9
- package/docs/ai/components/table.md +24 -84
- package/docs/ai/components/tabs.md +18 -10
- package/docs/ai/components/tag-input.md +18 -29
- package/docs/ai/components/tag.md +10 -22
- package/docs/ai/components/terminal.md +9 -9
- package/docs/ai/components/testimonial.md +9 -19
- package/docs/ai/components/textarea.md +15 -16
- package/docs/ai/components/theme.md +3 -3
- package/docs/ai/components/time-picker.md +30 -49
- package/docs/ai/components/time-range-picker.md +16 -15
- package/docs/ai/components/timeline.md +5 -4
- package/docs/ai/components/timer.md +8 -8
- package/docs/ai/components/toast.md +24 -18
- package/docs/ai/components/tooltip.md +11 -22
- package/docs/ai/components/tree.md +9 -9
- package/docs/ai/components/treemap.md +14 -13
- package/docs/ai/components/user-card.md +21 -27
- package/docs/ai/components/video-player.md +35 -52
- package/docs/ai/components/virtual-scroller.md +1 -1
- package/docs/ai/components/waterfall.md +17 -16
- package/docs/ai/components/weather.md +19 -34
- package/docs/ai/components/work-order.md +58 -134
- package/docs/ai/patterns.md +87 -0
- package/docs/ai/react-integration.md +97 -0
- package/docs/components/accordion.md +72 -151
- package/docs/components/action-bar.md +185 -0
- package/docs/components/activity-feed.md +9 -14
- package/docs/components/alert.md +17 -109
- package/docs/components/app-tiles.md +58 -43
- package/docs/components/approval-flow.md +8 -14
- package/docs/components/audio-recorder.md +45 -51
- package/docs/components/availability.md +30 -45
- package/docs/components/avatar-group.md +34 -14
- package/docs/components/avatar.md +20 -55
- package/docs/components/badge.md +53 -470
- package/docs/components/banner.md +44 -30
- package/docs/components/binpack.md +208 -0
- package/docs/components/book.md +78 -57
- package/docs/components/booking.md +35 -87
- package/docs/components/breadcrumbs.md +74 -448
- package/docs/components/button.md +72 -603
- package/docs/components/calendar.md +77 -261
- package/docs/components/camera-annotate.md +44 -96
- package/docs/components/camera.md +94 -333
- package/docs/components/candlestick.md +79 -116
- package/docs/components/card.md +51 -689
- package/docs/components/carousel.md +29 -76
- package/docs/components/cart.md +44 -136
- package/docs/components/chart.md +95 -438
- package/docs/components/chat.md +175 -439
- package/docs/components/checkbox.md +52 -609
- package/docs/components/chip.md +45 -574
- package/docs/components/code-block.md +157 -421
- package/docs/components/color-display.md +45 -54
- package/docs/components/color-picker.md +103 -36
- package/docs/components/command-palette.md +98 -92
- package/docs/components/comments.md +16 -10
- package/docs/components/countdown.md +15 -20
- package/docs/components/cropper.md +14 -16
- package/docs/components/data-card.md +16 -15
- package/docs/components/date-picker.md +45 -25
- package/docs/components/date-range-picker.md +140 -87
- package/docs/components/date-time-picker.md +25 -28
- package/docs/components/diff.md +22 -17
- package/docs/components/divider.md +18 -20
- package/docs/components/doc.md +105 -197
- package/docs/components/draw.md +117 -223
- package/docs/components/drawer.md +113 -478
- package/docs/components/empty-state.md +13 -29
- package/docs/components/estimate.md +58 -118
- package/docs/components/file-gallery.md +123 -495
- package/docs/components/file-upload.md +36 -123
- package/docs/components/flip-card.md +30 -34
- package/docs/components/flow.md +74 -89
- package/docs/components/form-builder.md +59 -86
- package/docs/components/form-layout.md +21 -31
- package/docs/components/funnel.md +21 -22
- package/docs/components/gantt.md +5 -5
- package/docs/components/gauge.md +5 -23
- package/docs/components/grid.md +249 -0
- package/docs/components/heatmap.md +13 -55
- package/docs/components/image.md +28 -32
- package/docs/components/input.md +25 -14
- package/docs/components/invoice.md +34 -33
- package/docs/components/kanban.md +99 -394
- package/docs/components/key-value.md +22 -12
- package/docs/components/kpi.md +41 -112
- package/docs/components/layout.md +7 -13
- package/docs/components/leaderboard.md +52 -76
- package/docs/components/link-preview.md +20 -16
- package/docs/components/link.md +22 -19
- package/docs/components/list.md +44 -26
- package/docs/components/location.md +9 -13
- package/docs/components/login.md +42 -36
- package/docs/components/map.md +24 -46
- package/docs/components/markdown.md +14 -25
- package/docs/components/masonry.md +15 -13
- package/docs/components/mentions.md +36 -25
- package/docs/components/menu.md +39 -46
- package/docs/components/message-strip.md +15 -51
- package/docs/components/metric-table.md +50 -72
- package/docs/components/modal.md +32 -43
- package/docs/components/music-player.md +41 -49
- package/docs/components/nav.md +23 -13
- package/docs/components/network-graph.md +14 -13
- package/docs/components/notification-center.md +68 -172
- package/docs/components/order-tracker.md +72 -117
- package/docs/components/org-chart.md +58 -207
- package/docs/components/pagination.md +67 -89
- package/docs/components/paint.md +86 -172
- package/docs/components/pdf-viewer.md +46 -151
- package/docs/components/permission-matrix.md +61 -112
- package/docs/components/podcast-player.md +41 -119
- package/docs/components/pricing-table.md +104 -147
- package/docs/components/product-card.md +94 -197
- package/docs/components/progress-ring.md +29 -32
- package/docs/components/progress.md +30 -61
- package/docs/components/qr-code.md +53 -61
- package/docs/components/qr-reader.md +53 -42
- package/docs/components/radio.md +42 -40
- package/docs/components/range-slider.md +41 -30
- package/docs/components/rating.md +50 -84
- package/docs/components/receipt.md +91 -129
- package/docs/components/recipe.md +107 -216
- package/docs/components/sankey.md +47 -83
- package/docs/components/scheduler.md +81 -184
- package/docs/components/segmented-control.md +48 -40
- package/docs/components/select.md +107 -129
- package/docs/components/skeleton.md +33 -47
- package/docs/components/slider.md +49 -53
- package/docs/components/sortable.md +43 -186
- package/docs/components/sparkline.md +26 -25
- package/docs/components/spinner.md +32 -37
- package/docs/components/split-button.md +43 -23
- package/docs/components/split-pane.md +41 -58
- package/docs/components/spotlight.md +53 -145
- package/docs/components/spreadsheet.md +84 -307
- package/docs/components/stat-group.md +27 -61
- package/docs/components/step-input.md +44 -41
- package/docs/components/stepper.md +55 -89
- package/docs/components/switch.md +39 -39
- package/docs/components/table.md +27 -32
- package/docs/components/tabs.md +36 -27
- package/docs/components/tag-input.md +50 -176
- package/docs/components/tag.md +12 -50
- package/docs/components/terminal.md +32 -37
- package/docs/components/testimonial.md +24 -81
- package/docs/components/textarea.md +9 -14
- package/docs/components/theme.md +10 -23
- package/docs/components/time-picker.md +48 -72
- package/docs/components/time-range-picker.md +22 -41
- package/docs/components/timeline.md +7 -14
- package/docs/components/timer.md +16 -32
- package/docs/components/toast.md +19 -45
- package/docs/components/tooltip.md +13 -115
- package/docs/components/tree.md +2 -19
- package/docs/components/treemap.md +19 -43
- package/docs/components/user-card.md +13 -22
- package/docs/components/video-player.md +53 -227
- package/docs/components/virtual-scroller.md +11 -44
- package/docs/components/waterfall.md +58 -137
- package/docs/components/weather.md +94 -153
- package/docs/components/work-order.md +56 -143
- package/docs/plans/2026-03-09-action-bar-design.md +104 -0
- package/docs/plans/2026-03-09-action-bar-plan.md +676 -0
- package/docs/plans/2026-03-10-grid-component-design.md +138 -0
- package/docs/plans/2026-03-10-grid-component-plan.md +716 -0
- package/docs/plans/2026-03-10-react-integration-design.md +166 -0
- package/docs/plans/2026-03-10-react-integration-plan.md +1178 -0
- package/docs/react-integration.md +508 -0
- package/docs/request-response.md +63 -0
- package/package.json +1 -1
- package/bin/templates/base/README.md +0 -33
- package/bin/templates/base/global.d.ts +0 -14
- package/bin/templates/base/index.html +0 -13
- package/bin/templates/base/package.json +0 -21
- package/bin/templates/base/src/components/counter-button.ts +0 -88
- package/bin/templates/base/src/components/counter-button.types.ts +0 -7
- package/bin/templates/base/src/components/feature-card.ts +0 -59
- package/bin/templates/base/src/components/feature-card.types.ts +0 -5
- package/bin/templates/base/src/controllers/counter-controller.ts +0 -24
- package/bin/templates/base/src/main.ts +0 -24
- package/bin/templates/base/src/pages/about-page.ts +0 -68
- package/bin/templates/base/src/pages/home-page.ts +0 -105
- package/bin/templates/base/src/pages/not-found-page.ts +0 -55
- package/bin/templates/base/src/router.ts +0 -9
- package/bin/templates/base/src/styles/global.css +0 -27
- package/bin/templates/base/src/types/api-response.ts +0 -5
- package/bin/templates/base/src/types/status.ts +0 -1
- package/bin/templates/base/src/types/theme.ts +0 -1
- package/bin/templates/base/src/types/user.ts +0 -5
- package/bin/templates/base/vite.config.ts +0 -38
- package/bin/templates/pwa/public/vite.svg +0 -1
- package/bin/templates/pwa/src/router.ts +0 -20
- package/bin/templates/pwa/src/styles/global.css +0 -64
- /package/bin/templates/{pwa → default}/README.md +0 -0
- /package/bin/templates/{pwa → default}/global.d.ts +0 -0
- /package/bin/templates/{pwa → default}/package.json +0 -0
- /package/bin/templates/{pwa → default}/public/icons/.gitkeep +0 -0
- /package/bin/templates/{base → default}/public/vite.svg +0 -0
- /package/bin/templates/{pwa → default}/src/fetcher.ts +0 -0
- /package/bin/templates/{pwa → default}/src/guards/auth.ts +0 -0
- /package/bin/templates/{pwa → default}/src/middleware/auth.ts +0 -0
- /package/bin/templates/{pwa → default}/src/middleware/retry.ts +0 -0
- /package/bin/templates/{pwa → default}/src/services/auth.ts +0 -0
- /package/bin/templates/{pwa → default}/src/services/jwt.ts +0 -0
- /package/bin/templates/{pwa → default}/src/services/storage.ts +0 -0
- /package/bin/templates/{pwa → default}/src/types/auth.ts +0 -0
- /package/bin/templates/{pwa → default}/src/types/notifications.ts +0 -0
- /package/bin/templates/{pwa → default}/tests/helpers/test-utils.ts +0 -0
- /package/bin/templates/{pwa → default}/tests/middleware/auth.test.ts +0 -0
- /package/bin/templates/{pwa → default}/tests/middleware/error.test.ts +0 -0
- /package/bin/templates/{pwa → default}/tests/middleware/retry.test.ts +0 -0
- /package/bin/templates/{pwa → default}/tests/services/auth.test.ts +0 -0
- /package/bin/templates/{pwa → default}/tests/services/jwt.test.ts +0 -0
- /package/bin/templates/{pwa → default}/tests/services/storage.test.ts +0 -0
- /package/bin/templates/{pwa → default}/vite.config.ts +0 -0
- /package/bin/templates/{pwa → default}/vitest.config.ts +0 -0
|
@@ -1,146 +1,104 @@
|
|
|
1
|
-
<!-- AI: For
|
|
1
|
+
<!-- AI: For the AI-optimized version of this doc, see docs/ai/components/drawer.md -->
|
|
2
2
|
|
|
3
3
|
# Drawer Component
|
|
4
|
+
`<snice-drawer>`
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
Slide-out panel from any viewport side with focus trap and dismissal options. Supports inline mode for persistent sidebars and responsive breakpoint switching.
|
|
6
7
|
|
|
7
8
|
## Table of Contents
|
|
8
9
|
- [Properties](#properties)
|
|
9
10
|
- [Methods](#methods)
|
|
10
11
|
- [Events](#events)
|
|
11
12
|
- [Slots](#slots)
|
|
13
|
+
- [CSS Custom Properties](#css-custom-properties)
|
|
12
14
|
- [CSS Parts](#css-parts)
|
|
13
15
|
- [Basic Usage](#basic-usage)
|
|
14
16
|
- [Examples](#examples)
|
|
17
|
+
- [Keyboard Navigation](#keyboard-navigation)
|
|
15
18
|
- [Accessibility](#accessibility)
|
|
16
|
-
- [Behavior](#behavior)
|
|
17
|
-
- [Browser Support](#browser-support)
|
|
18
19
|
|
|
19
20
|
## Properties
|
|
20
21
|
|
|
21
|
-
| Property | Type | Default | Description |
|
|
22
|
-
|
|
23
|
-
| `open` | `boolean` | `false` | Whether the drawer is visible |
|
|
24
|
-
| `position` | `'left' \| 'right' \| 'top' \| 'bottom'` | `'left'` | Side from which the drawer slides in |
|
|
25
|
-
| `size` | `'small' \| 'medium' \| 'large' \| 'xl' \| 'xxl' \| 'xxxl' \| 'full'` | `'medium'` | Width/height of the drawer |
|
|
26
|
-
| `
|
|
27
|
-
| `
|
|
28
|
-
| `
|
|
29
|
-
| `
|
|
30
|
-
| `
|
|
31
|
-
| `
|
|
32
|
-
| `
|
|
33
|
-
| `
|
|
34
|
-
| `
|
|
35
|
-
| `
|
|
36
|
-
| `
|
|
22
|
+
| Property | Attribute | Type | Default | Description |
|
|
23
|
+
|----------|-----------|------|---------|-------------|
|
|
24
|
+
| `open` | `open` | `boolean` | `false` | Whether the drawer is visible |
|
|
25
|
+
| `position` | `position` | `'left' \| 'right' \| 'top' \| 'bottom'` | `'left'` | Side from which the drawer slides in |
|
|
26
|
+
| `size` | `size` | `'small' \| 'medium' \| 'large' \| 'xl' \| 'xxl' \| 'xxxl' \| 'full'` | `'medium'` | Width/height of the drawer |
|
|
27
|
+
| `inline` | `inline` | `boolean` | `false` | Render in document flow as a persistent sidebar |
|
|
28
|
+
| `breakpoint` | `breakpoint` | `number` | `0` | Viewport width (px) above which drawer switches to inline mode |
|
|
29
|
+
| `noHeader` | `no-header` | `boolean` | `false` | Hide the header (title + close button) entirely |
|
|
30
|
+
| `noFooter` | `no-footer` | `boolean` | `false` | Hide the footer slot entirely |
|
|
31
|
+
| `noBackdrop` | `no-backdrop` | `boolean` | `false` | Hide the backdrop overlay |
|
|
32
|
+
| `noBackdropDismiss` | `no-backdrop-dismiss` | `boolean` | `false` | Prevent closing when clicking backdrop |
|
|
33
|
+
| `noEscapeDismiss` | `no-escape-dismiss` | `boolean` | `false` | Prevent closing with Escape key |
|
|
34
|
+
| `noFocusTrap` | `no-focus-trap` | `boolean` | `false` | Disable focus trapping |
|
|
35
|
+
| `persistent` | `persistent` | `boolean` | `false` | Hide close button and prevent all dismissal |
|
|
36
|
+
| `pushContent` | `push-content` | `boolean` | `false` | Push main content instead of overlaying |
|
|
37
|
+
| `contained` | `contained` | `boolean` | `false` | Position relative to parent instead of viewport |
|
|
37
38
|
|
|
38
39
|
## Methods
|
|
39
40
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
### `hide(): void`
|
|
48
|
-
Close the drawer.
|
|
49
|
-
|
|
50
|
-
```typescript
|
|
51
|
-
drawer.hide();
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
### `toggle(): void`
|
|
55
|
-
Toggle the drawer open/closed state.
|
|
56
|
-
|
|
57
|
-
```typescript
|
|
58
|
-
drawer.toggle();
|
|
59
|
-
```
|
|
41
|
+
| Method | Arguments | Description |
|
|
42
|
+
|--------|-----------|-------------|
|
|
43
|
+
| `show()` | -- | Open the drawer |
|
|
44
|
+
| `hide()` | -- | Close the drawer |
|
|
45
|
+
| `toggle()` | -- | Toggle the drawer open/closed state |
|
|
60
46
|
|
|
61
47
|
## Events
|
|
62
48
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
```typescript
|
|
68
|
-
{
|
|
69
|
-
drawer: SniceDrawerElement; // Reference to the drawer element
|
|
70
|
-
}
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
**Usage:**
|
|
74
|
-
```typescript
|
|
75
|
-
drawer.addEventListener('drawer-open', (e) => {
|
|
76
|
-
console.log('Drawer opened:', e.detail.drawer);
|
|
77
|
-
});
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
### `drawer-close`
|
|
81
|
-
Fired when the drawer closes.
|
|
82
|
-
|
|
83
|
-
**Event Detail:**
|
|
84
|
-
```typescript
|
|
85
|
-
{
|
|
86
|
-
drawer: SniceDrawerElement; // Reference to the drawer element
|
|
87
|
-
}
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
**Usage:**
|
|
91
|
-
```typescript
|
|
92
|
-
drawer.addEventListener('drawer-close', (e) => {
|
|
93
|
-
console.log('Drawer closed:', e.detail.drawer);
|
|
94
|
-
});
|
|
95
|
-
```
|
|
49
|
+
| Event | Detail | Description |
|
|
50
|
+
|-------|--------|-------------|
|
|
51
|
+
| `drawer-open` | `{ drawer }` | Fired when the drawer opens |
|
|
52
|
+
| `drawer-close` | `{ drawer }` | Fired when the drawer closes |
|
|
96
53
|
|
|
97
54
|
## Slots
|
|
98
55
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
```
|
|
56
|
+
| Name | Description |
|
|
57
|
+
|------|-------------|
|
|
58
|
+
| (default) | Main content of the drawer body |
|
|
59
|
+
| `title` | Content for the drawer header/title area |
|
|
60
|
+
| `footer` | Content for the drawer footer, typically action buttons |
|
|
61
|
+
|
|
62
|
+
## CSS Custom Properties
|
|
63
|
+
|
|
64
|
+
| Property | Description | Default |
|
|
65
|
+
|----------|-------------|---------|
|
|
66
|
+
| `--drawer-width-small` | Small drawer width | `var(--snice-size-drawer-small, 15rem)` |
|
|
67
|
+
| `--drawer-width-medium` | Medium drawer width | `var(--snice-size-drawer-medium, 20rem)` |
|
|
68
|
+
| `--drawer-width-large` | Large drawer width | `var(--snice-size-drawer-large, 30rem)` |
|
|
69
|
+
| `--drawer-width-xl` | XL drawer width | `var(--snice-size-drawer-xl, 40rem)` |
|
|
70
|
+
| `--drawer-width-xxl` | XXL drawer width | `var(--snice-size-drawer-xxl, 50rem)` |
|
|
71
|
+
| `--drawer-width-xxxl` | XXXL drawer width | `var(--snice-size-drawer-xxxl, 60rem)` |
|
|
72
|
+
| `--drawer-height-small` | Small drawer height (top/bottom) | `12.5rem` |
|
|
73
|
+
| `--drawer-height-medium` | Medium drawer height (top/bottom) | `25rem` |
|
|
74
|
+
| `--drawer-height-large` | Large drawer height (top/bottom) | `37.5rem` |
|
|
75
|
+
| `--drawer-height-xl` | XL drawer height (top/bottom) | `70vh` |
|
|
76
|
+
| `--drawer-height-xxl` | XXL drawer height (top/bottom) | `80vh` |
|
|
77
|
+
| `--drawer-height-xxxl` | XXXL drawer height (top/bottom) | `90vh` |
|
|
78
|
+
| `--drawer-bg` | Drawer background color | `var(--snice-color-background, white)` |
|
|
79
|
+
| `--drawer-shadow` | Drawer shadow | `var(--snice-shadow-lg)` |
|
|
80
|
+
| `--drawer-backdrop` | Backdrop color | `rgba(0, 0, 0, 0.5)` |
|
|
81
|
+
| `--drawer-transition` | Transition timing | `transform 250ms cubic-bezier(0.4, 0, 0.2, 1)` |
|
|
82
|
+
| `--drawer-z-index` | Z-index | `var(--snice-z-index-modal, 1050)` |
|
|
127
83
|
|
|
128
84
|
## CSS Parts
|
|
129
85
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
|
133
|
-
|
|
134
|
-
| `
|
|
135
|
-
| `
|
|
136
|
-
| `
|
|
137
|
-
| `
|
|
138
|
-
| `
|
|
139
|
-
| `body` | `<div>` | Body content section |
|
|
140
|
-
| `footer` | `<div>` | Footer section |
|
|
86
|
+
| Part | Description |
|
|
87
|
+
|------|-------------|
|
|
88
|
+
| `backdrop` | Backdrop overlay |
|
|
89
|
+
| `base` | The drawer panel container |
|
|
90
|
+
| `header` | Header section |
|
|
91
|
+
| `title` | Title wrapper (h2) |
|
|
92
|
+
| `close` | Close button |
|
|
93
|
+
| `body` | Body content section |
|
|
94
|
+
| `footer` | Footer section |
|
|
141
95
|
|
|
142
96
|
## Basic Usage
|
|
143
97
|
|
|
98
|
+
```typescript
|
|
99
|
+
import 'snice/components/drawer/snice-drawer';
|
|
100
|
+
```
|
|
101
|
+
|
|
144
102
|
```html
|
|
145
103
|
<button id="openDrawer">Open Drawer</button>
|
|
146
104
|
|
|
@@ -160,55 +118,37 @@ Style internal elements from outside the shadow DOM using `::part()`.
|
|
|
160
118
|
```
|
|
161
119
|
|
|
162
120
|
```typescript
|
|
163
|
-
import 'snice/components/drawer/snice-drawer';
|
|
164
|
-
|
|
165
121
|
openDrawer.addEventListener('click', () => myDrawer.show());
|
|
166
122
|
```
|
|
167
123
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
### Basic Drawer
|
|
171
|
-
|
|
124
|
+
**CDN**
|
|
172
125
|
```html
|
|
173
|
-
<
|
|
174
|
-
|
|
175
|
-
<snice-drawer id="drawer">
|
|
176
|
-
<h2 slot="title">Navigation</h2>
|
|
177
|
-
|
|
178
|
-
<nav>
|
|
179
|
-
<a href="/">Home</a>
|
|
180
|
-
<a href="/products">Products</a>
|
|
181
|
-
<a href="/about">About</a>
|
|
182
|
-
</nav>
|
|
183
|
-
</snice-drawer>
|
|
126
|
+
<script src="snice-runtime.min.js"></script>
|
|
127
|
+
<script src="snice-drawer.min.js"></script>
|
|
184
128
|
```
|
|
185
129
|
|
|
186
|
-
|
|
187
|
-
toggle.addEventListener('click', () => drawer.toggle());
|
|
188
|
-
```
|
|
130
|
+
## Examples
|
|
189
131
|
|
|
190
132
|
### Position Variants
|
|
191
133
|
|
|
134
|
+
Use the `position` attribute to control which side the drawer slides in from.
|
|
135
|
+
|
|
192
136
|
```html
|
|
193
|
-
<!-- Left (default) -->
|
|
194
137
|
<snice-drawer position="left">
|
|
195
138
|
<h2 slot="title">Left Drawer</h2>
|
|
196
139
|
<p>Slides in from the left</p>
|
|
197
140
|
</snice-drawer>
|
|
198
141
|
|
|
199
|
-
<!-- Right -->
|
|
200
142
|
<snice-drawer position="right">
|
|
201
143
|
<h2 slot="title">Right Drawer</h2>
|
|
202
144
|
<p>Slides in from the right</p>
|
|
203
145
|
</snice-drawer>
|
|
204
146
|
|
|
205
|
-
<!-- Top -->
|
|
206
147
|
<snice-drawer position="top">
|
|
207
148
|
<h2 slot="title">Top Drawer</h2>
|
|
208
149
|
<p>Slides in from the top</p>
|
|
209
150
|
</snice-drawer>
|
|
210
151
|
|
|
211
|
-
<!-- Bottom -->
|
|
212
152
|
<snice-drawer position="bottom">
|
|
213
153
|
<h2 slot="title">Bottom Drawer</h2>
|
|
214
154
|
<p>Slides in from the bottom</p>
|
|
@@ -217,35 +157,20 @@ toggle.addEventListener('click', () => drawer.toggle());
|
|
|
217
157
|
|
|
218
158
|
### Size Variants
|
|
219
159
|
|
|
220
|
-
|
|
221
|
-
<!-- Small -->
|
|
222
|
-
<snice-drawer size="small">
|
|
223
|
-
<h2 slot="title">Small Drawer</h2>
|
|
224
|
-
</snice-drawer>
|
|
160
|
+
Use the `size` attribute to control the drawer's width (or height for top/bottom).
|
|
225
161
|
|
|
226
|
-
|
|
227
|
-
<snice-drawer size="
|
|
228
|
-
|
|
229
|
-
</snice-drawer>
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
<snice-drawer size="large">
|
|
233
|
-
<h2 slot="title">Large Drawer</h2>
|
|
234
|
-
</snice-drawer>
|
|
235
|
-
|
|
236
|
-
<!-- Extra Large -->
|
|
237
|
-
<snice-drawer size="xl">
|
|
238
|
-
<h2 slot="title">XL Drawer</h2>
|
|
239
|
-
</snice-drawer>
|
|
240
|
-
|
|
241
|
-
<!-- Full Width/Height -->
|
|
242
|
-
<snice-drawer size="full">
|
|
243
|
-
<h2 slot="title">Full Drawer</h2>
|
|
244
|
-
</snice-drawer>
|
|
162
|
+
```html
|
|
163
|
+
<snice-drawer size="small"><h2 slot="title">Small</h2></snice-drawer>
|
|
164
|
+
<snice-drawer size="medium"><h2 slot="title">Medium</h2></snice-drawer>
|
|
165
|
+
<snice-drawer size="large"><h2 slot="title">Large</h2></snice-drawer>
|
|
166
|
+
<snice-drawer size="xl"><h2 slot="title">XL</h2></snice-drawer>
|
|
167
|
+
<snice-drawer size="full"><h2 slot="title">Full</h2></snice-drawer>
|
|
245
168
|
```
|
|
246
169
|
|
|
247
170
|
### Without Backdrop
|
|
248
171
|
|
|
172
|
+
Set `no-backdrop` to remove the background overlay.
|
|
173
|
+
|
|
249
174
|
```html
|
|
250
175
|
<snice-drawer no-backdrop>
|
|
251
176
|
<h2 slot="title">No Backdrop</h2>
|
|
@@ -255,6 +180,8 @@ toggle.addEventListener('click', () => drawer.toggle());
|
|
|
255
180
|
|
|
256
181
|
### Persistent Drawer
|
|
257
182
|
|
|
183
|
+
Set `persistent` to hide the close button and prevent all user-initiated dismissal.
|
|
184
|
+
|
|
258
185
|
```html
|
|
259
186
|
<snice-drawer persistent>
|
|
260
187
|
<h2 slot="title">Persistent Drawer</h2>
|
|
@@ -264,7 +191,7 @@ toggle.addEventListener('click', () => drawer.toggle());
|
|
|
264
191
|
|
|
265
192
|
### Push Content
|
|
266
193
|
|
|
267
|
-
Use `<snice-drawer-target>` to wrap content that should be pushed aside when a drawer opens.
|
|
194
|
+
Use `<snice-drawer-target>` to wrap content that should be pushed aside when a drawer opens.
|
|
268
195
|
|
|
269
196
|
```html
|
|
270
197
|
<div style="position: relative; height: 400px; overflow: hidden;">
|
|
@@ -285,23 +212,18 @@ Use `<snice-drawer-target>` to wrap content that should be pushed aside when a d
|
|
|
285
212
|
</div>
|
|
286
213
|
```
|
|
287
214
|
|
|
288
|
-
The `<snice-drawer-target>` component:
|
|
289
|
-
- Watches the linked drawer's `open` attribute via MutationObserver
|
|
290
|
-
- Measures the drawer panel's actual width/height
|
|
291
|
-
- Applies a smooth `translateX()` or `translateY()` transform
|
|
292
|
-
- Automatically resets when the drawer closes
|
|
293
|
-
- Handles `overflow:hidden` parent scroll reset
|
|
294
|
-
|
|
295
215
|
#### Drawer Target Properties
|
|
296
216
|
|
|
297
217
|
| Property | Type | Default | Description |
|
|
298
218
|
|----------|------|---------|-------------|
|
|
299
219
|
| `for` | `string` | `''` | ID of the linked `<snice-drawer>` element |
|
|
300
|
-
| `push` | `string` | `''` | Current push amount (e.g. `'240px'`)
|
|
220
|
+
| `push` | `string` | `''` | Current push amount (e.g. `'240px'`), set automatically |
|
|
221
|
+
|
|
222
|
+
The target watches the drawer's `open` attribute via MutationObserver, measures the drawer panel's width/height, and applies a smooth CSS transform.
|
|
301
223
|
|
|
302
224
|
### Inline Mode
|
|
303
225
|
|
|
304
|
-
|
|
226
|
+
Set `inline` to render the drawer as a persistent sidebar in document flow.
|
|
305
227
|
|
|
306
228
|
```html
|
|
307
229
|
<div style="display: flex; height: 100vh;">
|
|
@@ -316,73 +238,40 @@ The `inline` attribute renders the drawer directly in the document flow as a per
|
|
|
316
238
|
|
|
317
239
|
<main style="flex: 1; padding: 1rem;">
|
|
318
240
|
<h1>Main Content</h1>
|
|
319
|
-
<p>The sidebar sits alongside this content.</p>
|
|
320
241
|
</main>
|
|
321
242
|
</div>
|
|
322
243
|
```
|
|
323
244
|
|
|
324
|
-
A border separator is
|
|
325
|
-
- `left` → right border
|
|
326
|
-
- `right` → left border
|
|
327
|
-
- `top` → bottom border
|
|
328
|
-
- `bottom` → top border
|
|
245
|
+
In inline mode: no overlay, backdrop, focus trap, or escape handler. A border separator is applied based on position (left = right border, etc.).
|
|
329
246
|
|
|
330
247
|
### Responsive Breakpoint
|
|
331
248
|
|
|
332
|
-
|
|
249
|
+
Use `breakpoint` to switch between inline (above breakpoint) and overlay (below breakpoint) modes.
|
|
333
250
|
|
|
334
251
|
```html
|
|
335
|
-
<!-- Inline sidebar on desktop (≥768px), overlay drawer on mobile (<768px) -->
|
|
336
252
|
<snice-drawer breakpoint="768" position="left" size="small">
|
|
337
253
|
<span slot="title">Navigation</span>
|
|
338
254
|
<nav>
|
|
339
255
|
<a href="/">Home</a>
|
|
340
256
|
<a href="/products">Products</a>
|
|
341
|
-
<a href="/settings">Settings</a>
|
|
342
257
|
</nav>
|
|
343
258
|
</snice-drawer>
|
|
344
259
|
```
|
|
345
260
|
|
|
346
|
-
|
|
347
|
-
- **Above breakpoint**: The `inline` attribute is set automatically. Overlay behaviors (backdrop, focus trap, escape handler) are torn down.
|
|
348
|
-
- **Below breakpoint**: The `inline` attribute is removed. The drawer reverts to standard overlay mode.
|
|
349
|
-
|
|
350
|
-
You can combine `breakpoint` with `open` to control the overlay state on mobile:
|
|
351
|
-
|
|
352
|
-
```html
|
|
353
|
-
<snice-drawer id="nav" breakpoint="1024" position="left" size="small">
|
|
354
|
-
<span slot="title">Menu</span>
|
|
355
|
-
<nav>...</nav>
|
|
356
|
-
</snice-drawer>
|
|
357
|
-
|
|
358
|
-
<button onclick="document.getElementById('nav').toggle()">
|
|
359
|
-
Toggle Menu
|
|
360
|
-
</button>
|
|
361
|
-
```
|
|
261
|
+
Uses `window.matchMedia` internally. Above the breakpoint, the `inline` attribute is set automatically. Below, it reverts to overlay mode.
|
|
362
262
|
|
|
363
263
|
### Filters Panel
|
|
364
264
|
|
|
365
|
-
|
|
366
|
-
<button id="showFilters">Show Filters</button>
|
|
265
|
+
Use a right-side drawer for filter controls.
|
|
367
266
|
|
|
267
|
+
```html
|
|
368
268
|
<snice-drawer id="filtersDrawer" position="right" size="small">
|
|
369
269
|
<h2 slot="title">Filters</h2>
|
|
370
270
|
|
|
371
271
|
<div style="display: flex; flex-direction: column; gap: 1rem;">
|
|
372
|
-
<
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
</label>
|
|
376
|
-
</div>
|
|
377
|
-
<div>
|
|
378
|
-
<label>
|
|
379
|
-
<input type="checkbox"> On Sale
|
|
380
|
-
</label>
|
|
381
|
-
</div>
|
|
382
|
-
<div>
|
|
383
|
-
<label>Price Range</label>
|
|
384
|
-
<input type="range" min="0" max="1000">
|
|
385
|
-
</div>
|
|
272
|
+
<label><input type="checkbox"> In Stock</label>
|
|
273
|
+
<label><input type="checkbox"> On Sale</label>
|
|
274
|
+
<label>Price Range <input type="range" min="0" max="1000"></label>
|
|
386
275
|
</div>
|
|
387
276
|
|
|
388
277
|
<div slot="footer">
|
|
@@ -391,286 +280,32 @@ You can combine `breakpoint` with `open` to control the overlay state on mobile:
|
|
|
391
280
|
</snice-drawer>
|
|
392
281
|
```
|
|
393
282
|
|
|
394
|
-
|
|
395
|
-
showFilters.addEventListener('click', () => filtersDrawer.show());
|
|
396
|
-
```
|
|
397
|
-
|
|
398
|
-
### Settings Panel
|
|
399
|
-
|
|
400
|
-
```html
|
|
401
|
-
<button id="showSettings">Settings</button>
|
|
402
|
-
|
|
403
|
-
<snice-drawer id="settingsDrawer" position="right">
|
|
404
|
-
<h2 slot="title">Settings</h2>
|
|
405
|
-
|
|
406
|
-
<form id="settingsForm">
|
|
407
|
-
<div style="display: flex; flex-direction: column; gap: 1rem;">
|
|
408
|
-
<div>
|
|
409
|
-
<label for="theme">Theme</label>
|
|
410
|
-
<select id="theme" name="theme">
|
|
411
|
-
<option>Light</option>
|
|
412
|
-
<option>Dark</option>
|
|
413
|
-
<option>Auto</option>
|
|
414
|
-
</select>
|
|
415
|
-
</div>
|
|
416
|
-
|
|
417
|
-
<div>
|
|
418
|
-
<label>
|
|
419
|
-
<input type="checkbox" name="notifications">
|
|
420
|
-
Enable notifications
|
|
421
|
-
</label>
|
|
422
|
-
</div>
|
|
423
|
-
|
|
424
|
-
<div>
|
|
425
|
-
<label>
|
|
426
|
-
<input type="checkbox" name="autoSave">
|
|
427
|
-
Auto-save
|
|
428
|
-
</label>
|
|
429
|
-
</div>
|
|
430
|
-
</div>
|
|
431
|
-
</form>
|
|
432
|
-
|
|
433
|
-
<div slot="footer">
|
|
434
|
-
<button type="button" onclick="this.closest('snice-drawer').hide()">
|
|
435
|
-
Cancel
|
|
436
|
-
</button>
|
|
437
|
-
<button type="submit" form="settingsForm">
|
|
438
|
-
Save
|
|
439
|
-
</button>
|
|
440
|
-
</div>
|
|
441
|
-
</snice-drawer>
|
|
442
|
-
```
|
|
443
|
-
|
|
444
|
-
```typescript
|
|
445
|
-
showSettings.addEventListener('click', () => settingsDrawer.show());
|
|
446
|
-
|
|
447
|
-
settingsForm.addEventListener('submit', (e) => {
|
|
448
|
-
e.preventDefault();
|
|
449
|
-
const data = new FormData(settingsForm);
|
|
450
|
-
console.log('Settings:', Object.fromEntries(data));
|
|
451
|
-
settingsDrawer.hide();
|
|
452
|
-
});
|
|
453
|
-
```
|
|
454
|
-
|
|
455
|
-
### Mobile Navigation
|
|
456
|
-
|
|
457
|
-
```html
|
|
458
|
-
<button id="menuBtn">Menu</button>
|
|
459
|
-
|
|
460
|
-
<snice-drawer id="navDrawer" position="left" size="medium">
|
|
461
|
-
<h2 slot="title">Menu</h2>
|
|
462
|
-
|
|
463
|
-
<nav style="display: flex; flex-direction: column; gap: 0.5rem;">
|
|
464
|
-
<a href="/" style="padding: 0.5rem;">Home</a>
|
|
465
|
-
<a href="/products" style="padding: 0.5rem;">Products</a>
|
|
466
|
-
<a href="/services" style="padding: 0.5rem;">Services</a>
|
|
467
|
-
<a href="/about" style="padding: 0.5rem;">About</a>
|
|
468
|
-
<a href="/contact" style="padding: 0.5rem;">Contact</a>
|
|
469
|
-
</nav>
|
|
470
|
-
</snice-drawer>
|
|
471
|
-
```
|
|
472
|
-
|
|
473
|
-
```typescript
|
|
474
|
-
menuBtn.addEventListener('click', () => navDrawer.show());
|
|
475
|
-
|
|
476
|
-
// Close drawer when clicking a link
|
|
477
|
-
navDrawer.querySelectorAll('a').forEach(link => {
|
|
478
|
-
link.addEventListener('click', () => navDrawer.hide());
|
|
479
|
-
});
|
|
480
|
-
```
|
|
283
|
+
### Event Handling
|
|
481
284
|
|
|
482
|
-
|
|
285
|
+
Listen for open/close events.
|
|
483
286
|
|
|
484
287
|
```typescript
|
|
485
288
|
drawer.addEventListener('drawer-open', () => {
|
|
486
289
|
console.log('Drawer opened');
|
|
487
|
-
// Pause video, load content, etc.
|
|
488
290
|
});
|
|
489
291
|
|
|
490
292
|
drawer.addEventListener('drawer-close', () => {
|
|
491
293
|
console.log('Drawer closed');
|
|
492
|
-
// Resume video, save state, etc.
|
|
493
294
|
});
|
|
494
|
-
|
|
495
|
-
// Programmatic control
|
|
496
|
-
drawer.show();
|
|
497
|
-
drawer.hide();
|
|
498
|
-
drawer.toggle();
|
|
499
295
|
```
|
|
500
296
|
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
```html
|
|
504
|
-
<button id="showDetails">Show Details</button>
|
|
505
|
-
|
|
506
|
-
<snice-drawer id="detailsDrawer" position="right">
|
|
507
|
-
<h2 slot="title" id="itemTitle">Loading...</h2>
|
|
508
|
-
|
|
509
|
-
<div id="itemContent">
|
|
510
|
-
<p>Loading...</p>
|
|
511
|
-
</div>
|
|
512
|
-
</snice-drawer>
|
|
513
|
-
```
|
|
514
|
-
|
|
515
|
-
```typescript
|
|
516
|
-
showDetails.addEventListener('click', async () => {
|
|
517
|
-
detailsDrawer.show();
|
|
518
|
-
|
|
519
|
-
// Fetch data
|
|
520
|
-
const response = await fetch('/api/item/123');
|
|
521
|
-
const item = await response.json();
|
|
522
|
-
|
|
523
|
-
// Update content
|
|
524
|
-
itemTitle.textContent = item.name;
|
|
525
|
-
itemContent.innerHTML = `
|
|
526
|
-
<dl>
|
|
527
|
-
<dt>Price:</dt>
|
|
528
|
-
<dd>$${item.price}</dd>
|
|
529
|
-
<dt>Description:</dt>
|
|
530
|
-
<dd>${item.description}</dd>
|
|
531
|
-
</dl>
|
|
532
|
-
`;
|
|
533
|
-
});
|
|
534
|
-
```
|
|
535
|
-
|
|
536
|
-
### Complete Example
|
|
537
|
-
|
|
538
|
-
```html
|
|
539
|
-
<!DOCTYPE html>
|
|
540
|
-
<html>
|
|
541
|
-
<head>
|
|
542
|
-
<style>
|
|
543
|
-
body {
|
|
544
|
-
margin: 0;
|
|
545
|
-
font-family: system-ui;
|
|
546
|
-
}
|
|
547
|
-
|
|
548
|
-
.app-header {
|
|
549
|
-
padding: 1rem;
|
|
550
|
-
background: #1f2937;
|
|
551
|
-
color: white;
|
|
552
|
-
display: flex;
|
|
553
|
-
align-items: center;
|
|
554
|
-
gap: 1rem;
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
.content {
|
|
558
|
-
padding: 2rem;
|
|
559
|
-
}
|
|
560
|
-
|
|
561
|
-
snice-drawer nav {
|
|
562
|
-
display: flex;
|
|
563
|
-
flex-direction: column;
|
|
564
|
-
}
|
|
565
|
-
|
|
566
|
-
snice-drawer nav a {
|
|
567
|
-
padding: 0.75rem 1rem;
|
|
568
|
-
text-decoration: none;
|
|
569
|
-
color: inherit;
|
|
570
|
-
border-radius: 4px;
|
|
571
|
-
}
|
|
572
|
-
|
|
573
|
-
snice-drawer nav a:hover {
|
|
574
|
-
background: #f3f4f6;
|
|
575
|
-
}
|
|
576
|
-
</style>
|
|
577
|
-
|
|
578
|
-
<script type="module">
|
|
579
|
-
import 'snice/components/drawer/snice-drawer';
|
|
580
|
-
|
|
581
|
-
menuBtn.addEventListener('click', () => navDrawer.show());
|
|
582
|
-
|
|
583
|
-
// Close drawer on link click
|
|
584
|
-
navDrawer.querySelectorAll('a').forEach(link => {
|
|
585
|
-
link.addEventListener('click', (e) => {
|
|
586
|
-
e.preventDefault();
|
|
587
|
-
navDrawer.hide();
|
|
588
|
-
console.log('Navigate to:', link.getAttribute('href'));
|
|
589
|
-
});
|
|
590
|
-
});
|
|
591
|
-
</script>
|
|
592
|
-
</head>
|
|
593
|
-
<body>
|
|
594
|
-
<header class="app-header">
|
|
595
|
-
<button id="menuBtn">☰ Menu</button>
|
|
596
|
-
<h1>My App</h1>
|
|
597
|
-
</header>
|
|
598
|
-
|
|
599
|
-
<main class="content">
|
|
600
|
-
<h2>Welcome</h2>
|
|
601
|
-
<p>Click the menu button to open the navigation drawer.</p>
|
|
602
|
-
</main>
|
|
603
|
-
|
|
604
|
-
<snice-drawer id="navDrawer" position="left" size="medium">
|
|
605
|
-
<h2 slot="title">Navigation</h2>
|
|
297
|
+
## Keyboard Navigation
|
|
606
298
|
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
<a href="/products">📦 Products</a>
|
|
611
|
-
<a href="/orders">📋 Orders</a>
|
|
612
|
-
<a href="/customers">👥 Customers</a>
|
|
613
|
-
<a href="/analytics">📈 Analytics</a>
|
|
614
|
-
<a href="/settings">⚙️ Settings</a>
|
|
615
|
-
</nav>
|
|
616
|
-
|
|
617
|
-
<div slot="footer">
|
|
618
|
-
<button onclick="this.closest('snice-drawer').hide()">
|
|
619
|
-
Close
|
|
620
|
-
</button>
|
|
621
|
-
</div>
|
|
622
|
-
</snice-drawer>
|
|
623
|
-
</body>
|
|
624
|
-
</html>
|
|
625
|
-
```
|
|
299
|
+
- **Escape** - Close drawer (unless `no-escape-dismiss` or `persistent`)
|
|
300
|
+
- **Tab** - Cycle through focusable elements within drawer (trapped)
|
|
301
|
+
- **Shift + Tab** - Reverse cycle through focusable elements
|
|
626
302
|
|
|
627
303
|
## Accessibility
|
|
628
304
|
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
-
|
|
632
|
-
-
|
|
633
|
-
-
|
|
634
|
-
-
|
|
635
|
-
-
|
|
636
|
-
- Escape key support for closing
|
|
637
|
-
- Close button is keyboard accessible
|
|
638
|
-
|
|
639
|
-
### Keyboard Support
|
|
640
|
-
|
|
641
|
-
- **Escape**: Close drawer (unless `noEscapeDismiss` or `persistent` is true)
|
|
642
|
-
- **Tab**: Cycle through focusable elements within drawer (trapped)
|
|
643
|
-
- **Shift + Tab**: Reverse cycle through focusable elements
|
|
644
|
-
|
|
645
|
-
## Behavior
|
|
646
|
-
|
|
647
|
-
### Focus Management
|
|
648
|
-
|
|
649
|
-
When a drawer opens:
|
|
650
|
-
1. Current focus is stored
|
|
651
|
-
2. Focus moves to the drawer container
|
|
652
|
-
3. Tab navigation is trapped within the drawer (unless `noFocusTrap` is true)
|
|
653
|
-
|
|
654
|
-
When a drawer closes:
|
|
655
|
-
1. Focus returns to the previously focused element
|
|
656
|
-
|
|
657
|
-
### Dismissal
|
|
658
|
-
|
|
659
|
-
By default, drawers can be dismissed by:
|
|
660
|
-
- Clicking the close button
|
|
661
|
-
- Clicking the backdrop
|
|
662
|
-
- Pressing Escape
|
|
663
|
-
|
|
664
|
-
This behavior can be customized:
|
|
665
|
-
- `noBackdropDismiss`: Prevents backdrop click dismissal
|
|
666
|
-
- `noEscapeDismiss`: Prevents Escape key dismissal
|
|
667
|
-
- `persistent`: Hides close button and prevents all dismissal
|
|
668
|
-
|
|
669
|
-
### Push Content Mode
|
|
670
|
-
|
|
671
|
-
When `push-content` is set on a drawer, use `<snice-drawer-target for="drawer-id">` to wrap the content that should be pushed aside. The target element watches the drawer's open state and applies a CSS transform to slide its contents. This approach uses transforms (not margins) for smooth 60fps animations and avoids layout thrash.
|
|
672
|
-
|
|
673
|
-
## Browser Support
|
|
674
|
-
|
|
675
|
-
- Modern browsers (Chrome, Firefox, Safari, Edge)
|
|
676
|
-
- Requires Custom Elements v1 and Shadow DOM support
|
|
305
|
+
- `role="dialog"` and `aria-modal="true"` on the drawer container
|
|
306
|
+
- `aria-hidden` reflects visibility state on the host element
|
|
307
|
+
- Focus trap keeps keyboard navigation within the drawer
|
|
308
|
+
- Focus restoration returns focus to the trigger element on close
|
|
309
|
+
- Escape key support for closing (configurable)
|
|
310
|
+
- Close button is keyboard accessible with `aria-label="Close"`
|
|
311
|
+
- Contained mode skips focus trap and body scroll lock (in-page, not modal)
|