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,20 +1,19 @@
|
|
|
1
|
-
<!-- AI: For
|
|
1
|
+
<!-- AI: For the AI-optimized version of this doc, see docs/ai/components/button.md -->
|
|
2
2
|
|
|
3
3
|
# Button Component
|
|
4
|
+
`<snice-button>`
|
|
4
5
|
|
|
5
|
-
The button component provides an interactive element for user actions. It supports multiple variants, sizes, states (loading, disabled), styles (outline, pill, circle), and icons. When `href` is set, clicking navigates via `window.location` (not rendered as an anchor).
|
|
6
|
+
The button component provides an interactive element for user actions. It supports multiple variants, sizes, states (loading, disabled), styles (outline, pill, circle), and icons. When `href` is set, clicking navigates via `window.location` (not rendered as an anchor). Form-associated for `submit`/`reset` support.
|
|
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 Parts](#css-parts)
|
|
12
14
|
- [Basic Usage](#basic-usage)
|
|
13
15
|
- [Examples](#examples)
|
|
14
16
|
- [Accessibility](#accessibility)
|
|
15
|
-
- [Browser Support](#browser-support)
|
|
16
|
-
- [Common Patterns](#common-patterns)
|
|
17
|
-
- [Variant Colors](#variant-colors)
|
|
18
17
|
|
|
19
18
|
## Properties
|
|
20
19
|
|
|
@@ -28,121 +27,54 @@ The button component provides an interactive element for user actions. It suppor
|
|
|
28
27
|
| `outline` | `boolean` | `false` | Use outline style |
|
|
29
28
|
| `pill` | `boolean` | `false` | Use pill (fully rounded) shape |
|
|
30
29
|
| `circle` | `boolean` | `false` | Use circle shape (icon only) |
|
|
31
|
-
| `href` | `string` | `''` | URL to navigate to
|
|
32
|
-
| `target` | `string` | `''` | Link target
|
|
30
|
+
| `href` | `string` | `''` | URL to navigate to on click |
|
|
31
|
+
| `target` | `string` | `''` | Link target (e.g. `_blank`) |
|
|
33
32
|
| `download` | `string` | `''` | Download attribute for file downloads |
|
|
34
|
-
| `icon` | `string` | `''` | Icon (URL, image file
|
|
35
|
-
| `iconPlacement` | `'start' \| 'end'` | `'start'` | Icon position relative to label |
|
|
33
|
+
| `icon` | `string` | `''` | Icon (emoji, URL, image file). Use the `icon` slot for icon fonts. |
|
|
34
|
+
| `iconPlacement` (attr: `icon-placement`) | `'start' \| 'end'` | `'start'` | Icon position relative to label |
|
|
36
35
|
|
|
37
36
|
## Methods
|
|
38
37
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
#### `blur(): void`
|
|
48
|
-
Remove focus from the button.
|
|
49
|
-
|
|
50
|
-
```typescript
|
|
51
|
-
button.blur();
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
#### `click(): void`
|
|
55
|
-
Programmatically click the button.
|
|
56
|
-
|
|
57
|
-
```typescript
|
|
58
|
-
button.click();
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
#### `setLoading(loading: boolean): void`
|
|
62
|
-
Set the loading state programmatically.
|
|
63
|
-
|
|
64
|
-
```typescript
|
|
65
|
-
button.setLoading(true);
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
#### `setDisabled(disabled: boolean): void`
|
|
69
|
-
Set the disabled state programmatically.
|
|
70
|
-
|
|
71
|
-
```typescript
|
|
72
|
-
button.setDisabled(true);
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
#### `setVariant(variant: ButtonVariant): void`
|
|
76
|
-
Set the variant programmatically.
|
|
77
|
-
|
|
78
|
-
```typescript
|
|
79
|
-
button.setVariant('success');
|
|
80
|
-
```
|
|
38
|
+
| Method | Arguments | Description |
|
|
39
|
+
|--------|-----------|-------------|
|
|
40
|
+
| `focus()` | `options?: FocusOptions` | Focus the button |
|
|
41
|
+
| `blur()` | -- | Remove focus |
|
|
42
|
+
| `click()` | -- | Programmatic click |
|
|
43
|
+
| `setLoading()` | `loading: boolean` | Set loading state |
|
|
44
|
+
| `setDisabled()` | `disabled: boolean` | Set disabled state |
|
|
45
|
+
| `setVariant()` | `variant: ButtonVariant` | Set variant |
|
|
81
46
|
|
|
82
47
|
## Events
|
|
83
48
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
**Event Detail:**
|
|
88
|
-
```typescript
|
|
89
|
-
{
|
|
90
|
-
originalEvent: MouseEvent;
|
|
91
|
-
}
|
|
92
|
-
```
|
|
49
|
+
| Event | Detail | Description |
|
|
50
|
+
|-------|--------|-------------|
|
|
51
|
+
| `button-click` | `{ originalEvent: MouseEvent }` | Fired when the button is clicked |
|
|
93
52
|
|
|
94
53
|
## Slots
|
|
95
54
|
|
|
96
|
-
|
|
|
97
|
-
|
|
98
|
-
| `icon` | Custom icon content. Overrides the `icon` property when present. Useful for external CSS icon fonts like Material Symbols or Font Awesome that require specific styling to work inside shadow DOM. |
|
|
55
|
+
| Name | Description |
|
|
56
|
+
|------|-------------|
|
|
99
57
|
| (default) | Button label content |
|
|
58
|
+
| `icon` | Custom icon content. Overrides the `icon` property. Use for icon fonts (Material Symbols, Font Awesome, etc.). |
|
|
100
59
|
|
|
101
60
|
### Icon Slot Usage
|
|
102
61
|
|
|
103
|
-
Use the `icon` slot for icon fonts
|
|
62
|
+
Use the `icon` slot for icon fonts or inline SVGs:
|
|
104
63
|
|
|
105
|
-
#### Material Symbols
|
|
106
64
|
```html
|
|
107
|
-
<!--
|
|
108
|
-
<link href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined" rel="stylesheet" />
|
|
109
|
-
|
|
65
|
+
<!-- Material Symbols -->
|
|
110
66
|
<snice-button variant="primary">
|
|
111
67
|
<span slot="icon" class="material-symbols-outlined">save</span>
|
|
112
68
|
Save
|
|
113
69
|
</snice-button>
|
|
114
70
|
|
|
115
|
-
<!--
|
|
116
|
-
<snice-button>
|
|
117
|
-
<span slot="icon" class="material-symbols-outlined" style="font-variation-settings: 'FILL' 1">favorite</span>
|
|
118
|
-
Liked
|
|
119
|
-
</snice-button>
|
|
120
|
-
|
|
121
|
-
<!-- Rounded variant -->
|
|
122
|
-
<snice-button>
|
|
123
|
-
<span slot="icon" class="material-symbols-rounded">home</span>
|
|
124
|
-
Home
|
|
125
|
-
</snice-button>
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
#### Font Awesome
|
|
129
|
-
```html
|
|
130
|
-
<!-- Load Font Awesome in your document head -->
|
|
131
|
-
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.0/css/all.min.css" rel="stylesheet" />
|
|
132
|
-
|
|
71
|
+
<!-- Font Awesome -->
|
|
133
72
|
<snice-button variant="danger">
|
|
134
73
|
<i slot="icon" class="fa-solid fa-trash"></i>
|
|
135
74
|
Delete
|
|
136
75
|
</snice-button>
|
|
137
76
|
|
|
138
|
-
|
|
139
|
-
<i slot="icon" class="fa-regular fa-heart"></i>
|
|
140
|
-
Like
|
|
141
|
-
</snice-button>
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
#### Inline SVG
|
|
145
|
-
```html
|
|
77
|
+
<!-- Inline SVG -->
|
|
146
78
|
<snice-button>
|
|
147
79
|
<svg slot="icon" viewBox="0 0 24 24" width="20" height="20">
|
|
148
80
|
<path d="M12 2L2 7l10 5 10-5-10-5z" fill="currentColor"/>
|
|
@@ -151,8 +83,8 @@ Use the `icon` slot for icon fonts (Material Symbols, Font Awesome, etc.) or inl
|
|
|
151
83
|
</snice-button>
|
|
152
84
|
```
|
|
153
85
|
|
|
154
|
-
#### Placement
|
|
155
86
|
The `icon-placement` property works with both the slot and the `icon` property:
|
|
87
|
+
|
|
156
88
|
```html
|
|
157
89
|
<snice-button icon-placement="end">
|
|
158
90
|
<span slot="icon" class="material-symbols-outlined">arrow_forward</span>
|
|
@@ -162,6 +94,8 @@ The `icon-placement` property works with both the slot and the `icon` property:
|
|
|
162
94
|
|
|
163
95
|
> **Note**: The `icon` slot takes precedence over the `icon` property when both are present.
|
|
164
96
|
|
|
97
|
+
> **Note**: `icon="home"` renders as plain text, not a Material icon. Use the `icon` slot for icon fonts.
|
|
98
|
+
|
|
165
99
|
## CSS Parts
|
|
166
100
|
|
|
167
101
|
| Part | Description |
|
|
@@ -173,39 +107,32 @@ The `icon-placement` property works with both the slot and the `icon` property:
|
|
|
173
107
|
|
|
174
108
|
## Basic Usage
|
|
175
109
|
|
|
176
|
-
```html
|
|
177
|
-
<snice-button>Click me</snice-button>
|
|
178
|
-
```
|
|
179
|
-
|
|
180
110
|
```typescript
|
|
181
111
|
import 'snice/components/button/snice-button';
|
|
182
112
|
```
|
|
183
113
|
|
|
114
|
+
```html
|
|
115
|
+
<snice-button>Click me</snice-button>
|
|
116
|
+
```
|
|
117
|
+
|
|
184
118
|
## Examples
|
|
185
119
|
|
|
186
|
-
###
|
|
120
|
+
### Variants
|
|
121
|
+
|
|
122
|
+
Use the `variant` attribute to set the button's visual style.
|
|
187
123
|
|
|
188
124
|
```html
|
|
189
|
-
<!-- Default button -->
|
|
190
125
|
<snice-button>Default</snice-button>
|
|
191
|
-
|
|
192
|
-
<!-- Primary button -->
|
|
193
126
|
<snice-button variant="primary">Primary</snice-button>
|
|
194
|
-
|
|
195
|
-
<!-- Success button -->
|
|
196
127
|
<snice-button variant="success">Success</snice-button>
|
|
197
|
-
|
|
198
|
-
<!-- Warning button -->
|
|
199
128
|
<snice-button variant="warning">Warning</snice-button>
|
|
200
|
-
|
|
201
|
-
<!-- Danger button -->
|
|
202
129
|
<snice-button variant="danger">Danger</snice-button>
|
|
203
|
-
|
|
204
|
-
<!-- Text button -->
|
|
205
130
|
<snice-button variant="text">Text Only</snice-button>
|
|
206
131
|
```
|
|
207
132
|
|
|
208
|
-
###
|
|
133
|
+
### Sizes
|
|
134
|
+
|
|
135
|
+
Use the `size` attribute to change the button's size.
|
|
209
136
|
|
|
210
137
|
```html
|
|
211
138
|
<snice-button size="small">Small</snice-button>
|
|
@@ -215,503 +142,89 @@ import 'snice/components/button/snice-button';
|
|
|
215
142
|
|
|
216
143
|
### Outline Buttons
|
|
217
144
|
|
|
145
|
+
Use the `outline` attribute for a transparent background with a border.
|
|
146
|
+
|
|
218
147
|
```html
|
|
219
148
|
<snice-button outline>Default Outline</snice-button>
|
|
220
149
|
<snice-button variant="primary" outline>Primary Outline</snice-button>
|
|
221
|
-
<snice-button variant="success" outline>Success Outline</snice-button>
|
|
222
|
-
<snice-button variant="warning" outline>Warning Outline</snice-button>
|
|
223
150
|
<snice-button variant="danger" outline>Danger Outline</snice-button>
|
|
224
151
|
```
|
|
225
152
|
|
|
226
153
|
### Pill Buttons
|
|
227
154
|
|
|
155
|
+
Use the `pill` attribute for fully rounded corners.
|
|
156
|
+
|
|
228
157
|
```html
|
|
229
158
|
<snice-button pill>Default Pill</snice-button>
|
|
230
159
|
<snice-button variant="primary" pill>Primary Pill</snice-button>
|
|
231
|
-
<snice-button variant="success" pill>Success Pill</snice-button>
|
|
232
160
|
```
|
|
233
161
|
|
|
234
162
|
### Circle Buttons
|
|
235
163
|
|
|
164
|
+
Use `circle` for icon-only circular buttons.
|
|
165
|
+
|
|
236
166
|
```html
|
|
237
167
|
<snice-button circle icon="/icons/plus.svg"></snice-button>
|
|
238
168
|
<snice-button variant="primary" circle icon="/icons/edit.svg"></snice-button>
|
|
239
|
-
<snice-button variant="danger" circle icon="/icons/delete.svg"></snice-button>
|
|
240
169
|
```
|
|
241
170
|
|
|
242
|
-
###
|
|
171
|
+
### States
|
|
243
172
|
|
|
244
173
|
```html
|
|
245
|
-
<!-- Disabled -->
|
|
246
174
|
<snice-button disabled>Disabled</snice-button>
|
|
247
175
|
<snice-button variant="primary" disabled>Primary Disabled</snice-button>
|
|
248
|
-
|
|
249
|
-
<!-- Loading -->
|
|
250
176
|
<snice-button loading>Loading...</snice-button>
|
|
251
177
|
<snice-button variant="primary" loading>Saving...</snice-button>
|
|
252
|
-
|
|
253
|
-
<!-- Disabled and loading cannot be clicked -->
|
|
254
|
-
<snice-button disabled loading>Processing...</snice-button>
|
|
255
178
|
```
|
|
256
179
|
|
|
257
180
|
### Buttons with Icons
|
|
258
181
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
The `icon` **property** is for simple cases: emoji, image URLs, and image files.
|
|
262
|
-
|
|
263
|
-
> **⚠️ `icon="home"` renders as plain text, not a Material icon.** Use the `icon` slot for icon fonts.
|
|
182
|
+
The `icon` **property** is for emoji, image URLs, and image files:
|
|
264
183
|
|
|
265
184
|
```html
|
|
266
|
-
|
|
267
|
-
<snice-button icon="
|
|
268
|
-
<snice-button icon="
|
|
269
|
-
<snice-button icon="💾" variant="primary">Save</snice-button>
|
|
270
|
-
|
|
271
|
-
<!-- Image URL -->
|
|
272
|
-
<snice-button icon="/icons/arrow-right.svg">Next</snice-button>
|
|
273
|
-
<snice-button icon="https://example.com/icon.png">External</snice-button>
|
|
274
|
-
|
|
275
|
-
<!-- Image file (auto-detected by extension) -->
|
|
276
|
-
<snice-button icon="logo.svg">Brand</snice-button>
|
|
277
|
-
|
|
278
|
-
<!-- Icon placement -->
|
|
279
|
-
<snice-button icon="→" icon-placement="end">Next</snice-button>
|
|
280
|
-
|
|
281
|
-
<!-- Icon-only circle button -->
|
|
282
|
-
<snice-button circle icon="⚙️"></snice-button>
|
|
283
|
-
<snice-button circle icon="×"></snice-button>
|
|
284
|
-
|
|
285
|
-
<!-- Scheme overrides (force rendering mode) -->
|
|
286
|
-
<snice-button icon="img://filename">Force as image</snice-button>
|
|
287
|
-
<snice-button icon="text://content">Force as text</snice-button>
|
|
185
|
+
<snice-button icon="->">Next</snice-button>
|
|
186
|
+
<snice-button icon="/icons/save.svg" variant="primary">Save</snice-button>
|
|
187
|
+
<snice-button icon="->" icon-placement="end">Next</snice-button>
|
|
288
188
|
```
|
|
289
189
|
|
|
290
190
|
### Link Buttons
|
|
291
191
|
|
|
292
|
-
|
|
293
|
-
<!-- Basic link -->
|
|
294
|
-
<snice-button href="/page">Go to Page</snice-button>
|
|
295
|
-
|
|
296
|
-
<!-- External link -->
|
|
297
|
-
<snice-button href="https://example.com" target="_blank">
|
|
298
|
-
Visit Site
|
|
299
|
-
</snice-button>
|
|
300
|
-
|
|
301
|
-
<!-- Download link -->
|
|
302
|
-
<snice-button href="/files/document.pdf" download="document.pdf">
|
|
303
|
-
Download PDF
|
|
304
|
-
</snice-button>
|
|
305
|
-
|
|
306
|
-
<!-- Link with icon -->
|
|
307
|
-
<snice-button
|
|
308
|
-
href="/docs"
|
|
309
|
-
icon="/icons/book.svg"
|
|
310
|
-
variant="primary">
|
|
311
|
-
View Docs
|
|
312
|
-
</snice-button>
|
|
313
|
-
```
|
|
314
|
-
|
|
315
|
-
### Button Groups
|
|
192
|
+
Use `href` to navigate on click.
|
|
316
193
|
|
|
317
194
|
```html
|
|
318
|
-
<
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
gap: 0.5rem;
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
.button-group--attached {
|
|
325
|
-
display: inline-flex;
|
|
326
|
-
gap: 0;
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
.button-group--attached snice-button:not(:first-child):not(:last-child) {
|
|
330
|
-
border-radius: 0;
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
.button-group--attached snice-button:first-child {
|
|
334
|
-
border-top-right-radius: 0;
|
|
335
|
-
border-bottom-right-radius: 0;
|
|
336
|
-
}
|
|
337
|
-
|
|
338
|
-
.button-group--attached snice-button:last-child {
|
|
339
|
-
border-top-left-radius: 0;
|
|
340
|
-
border-bottom-left-radius: 0;
|
|
341
|
-
}
|
|
342
|
-
</style>
|
|
343
|
-
|
|
344
|
-
<!-- Spaced group -->
|
|
345
|
-
<div class="button-group">
|
|
346
|
-
<snice-button>Cancel</snice-button>
|
|
347
|
-
<snice-button variant="primary">Save</snice-button>
|
|
348
|
-
</div>
|
|
349
|
-
|
|
350
|
-
<!-- Attached group -->
|
|
351
|
-
<div class="button-group--attached">
|
|
352
|
-
<snice-button outline>Left</snice-button>
|
|
353
|
-
<snice-button outline>Center</snice-button>
|
|
354
|
-
<snice-button outline>Right</snice-button>
|
|
355
|
-
</div>
|
|
195
|
+
<snice-button href="/page">Go to Page</snice-button>
|
|
196
|
+
<snice-button href="https://example.com" target="_blank">Visit Site</snice-button>
|
|
197
|
+
<snice-button href="/files/document.pdf" download="document.pdf">Download PDF</snice-button>
|
|
356
198
|
```
|
|
357
199
|
|
|
358
200
|
### Form Buttons
|
|
359
201
|
|
|
360
202
|
```html
|
|
361
203
|
<form id="user-form">
|
|
362
|
-
<
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
</label>
|
|
366
|
-
|
|
367
|
-
<label>
|
|
368
|
-
Email:
|
|
369
|
-
<input type="email" name="email" required>
|
|
370
|
-
</label>
|
|
371
|
-
|
|
372
|
-
<div class="button-group">
|
|
373
|
-
<snice-button type="reset">Reset</snice-button>
|
|
374
|
-
<snice-button variant="primary" type="submit">Submit</snice-button>
|
|
375
|
-
</div>
|
|
204
|
+
<input type="text" name="name" required>
|
|
205
|
+
<snice-button type="reset">Reset</snice-button>
|
|
206
|
+
<snice-button variant="primary" type="submit">Submit</snice-button>
|
|
376
207
|
</form>
|
|
377
|
-
|
|
378
|
-
<script type="module">
|
|
379
|
-
import 'snice/components/button/snice-button';
|
|
380
|
-
|
|
381
|
-
const form = document.getElementById('user-form');
|
|
382
|
-
const submitButton = form.querySelector('snice-button[type="submit"]');
|
|
383
|
-
|
|
384
|
-
form.addEventListener('submit', async (e) => {
|
|
385
|
-
e.preventDefault();
|
|
386
|
-
|
|
387
|
-
// Show loading state
|
|
388
|
-
submitButton.loading = true;
|
|
389
|
-
submitButton.textContent = 'Submitting...';
|
|
390
|
-
|
|
391
|
-
try {
|
|
392
|
-
const formData = new FormData(form);
|
|
393
|
-
const response = await fetch('/api/users', {
|
|
394
|
-
method: 'POST',
|
|
395
|
-
body: formData
|
|
396
|
-
});
|
|
397
|
-
|
|
398
|
-
if (!response.ok) throw new Error('Submission failed');
|
|
399
|
-
|
|
400
|
-
alert('Form submitted successfully!');
|
|
401
|
-
} catch (error) {
|
|
402
|
-
alert('Error: ' + error.message);
|
|
403
|
-
} finally {
|
|
404
|
-
// Reset loading state
|
|
405
|
-
submitButton.loading = false;
|
|
406
|
-
submitButton.textContent = 'Submit';
|
|
407
|
-
}
|
|
408
|
-
});
|
|
409
|
-
</script>
|
|
410
208
|
```
|
|
411
209
|
|
|
412
210
|
### Async Action Handling
|
|
413
211
|
|
|
414
|
-
```
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
// Show loading state
|
|
429
|
-
button.loading = true;
|
|
430
|
-
const originalText = button.textContent;
|
|
431
|
-
button.textContent = 'Saving...';
|
|
432
|
-
|
|
433
|
-
try {
|
|
434
|
-
// Simulate API call
|
|
435
|
-
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
436
|
-
|
|
437
|
-
// Success feedback
|
|
438
|
-
button.variant = 'success';
|
|
439
|
-
button.textContent = 'Saved!';
|
|
440
|
-
|
|
441
|
-
setTimeout(() => {
|
|
442
|
-
button.variant = 'primary';
|
|
443
|
-
button.textContent = originalText;
|
|
444
|
-
button.loading = false;
|
|
445
|
-
}, 1500);
|
|
446
|
-
|
|
447
|
-
} catch (error) {
|
|
448
|
-
// Error feedback
|
|
449
|
-
button.variant = 'danger';
|
|
450
|
-
button.textContent = 'Save Failed';
|
|
451
|
-
button.loading = false;
|
|
452
|
-
|
|
453
|
-
setTimeout(() => {
|
|
454
|
-
button.variant = 'primary';
|
|
455
|
-
button.textContent = originalText;
|
|
456
|
-
}, 2000);
|
|
457
|
-
}
|
|
458
|
-
});
|
|
459
|
-
</script>
|
|
460
|
-
```
|
|
461
|
-
|
|
462
|
-
### Confirmation Dialog
|
|
463
|
-
|
|
464
|
-
```html
|
|
465
|
-
<snice-button
|
|
466
|
-
id="delete-btn"
|
|
467
|
-
variant="danger"
|
|
468
|
-
outline
|
|
469
|
-
icon="/icons/trash.svg">
|
|
470
|
-
Delete Account
|
|
471
|
-
</snice-button>
|
|
472
|
-
|
|
473
|
-
<script type="module">
|
|
474
|
-
import type { SniceButtonElement } from 'snice/components/button/snice-button.types';
|
|
475
|
-
|
|
476
|
-
const button = document.getElementById('delete-btn') as SniceButtonElement;
|
|
477
|
-
|
|
478
|
-
button.addEventListener('click', async () => {
|
|
479
|
-
const confirmed = confirm('Are you sure you want to delete your account? This action cannot be undone.');
|
|
480
|
-
|
|
481
|
-
if (!confirmed) return;
|
|
482
|
-
|
|
483
|
-
button.loading = true;
|
|
484
|
-
button.disabled = true;
|
|
485
|
-
|
|
486
|
-
try {
|
|
487
|
-
await fetch('/api/account', { method: 'DELETE' });
|
|
488
|
-
alert('Account deleted successfully');
|
|
489
|
-
window.location.href = '/goodbye';
|
|
490
|
-
} catch (error) {
|
|
491
|
-
alert('Failed to delete account');
|
|
492
|
-
button.loading = false;
|
|
493
|
-
button.disabled = false;
|
|
494
|
-
}
|
|
495
|
-
});
|
|
496
|
-
</script>
|
|
497
|
-
```
|
|
498
|
-
|
|
499
|
-
### Icon Buttons with Tooltips
|
|
500
|
-
|
|
501
|
-
```html
|
|
502
|
-
<style>
|
|
503
|
-
.icon-button-group {
|
|
504
|
-
display: inline-flex;
|
|
505
|
-
gap: 0.5rem;
|
|
506
|
-
}
|
|
507
|
-
</style>
|
|
508
|
-
|
|
509
|
-
<div class="icon-button-group">
|
|
510
|
-
<snice-button
|
|
511
|
-
circle
|
|
512
|
-
icon="/icons/bold.svg"
|
|
513
|
-
variant="default"
|
|
514
|
-
outline
|
|
515
|
-
title="Bold">
|
|
516
|
-
</snice-button>
|
|
517
|
-
|
|
518
|
-
<snice-button
|
|
519
|
-
circle
|
|
520
|
-
icon="/icons/italic.svg"
|
|
521
|
-
variant="default"
|
|
522
|
-
outline
|
|
523
|
-
title="Italic">
|
|
524
|
-
</snice-button>
|
|
525
|
-
|
|
526
|
-
<snice-button
|
|
527
|
-
circle
|
|
528
|
-
icon="/icons/underline.svg"
|
|
529
|
-
variant="default"
|
|
530
|
-
outline
|
|
531
|
-
title="Underline">
|
|
532
|
-
</snice-button>
|
|
533
|
-
</div>
|
|
534
|
-
```
|
|
535
|
-
|
|
536
|
-
### Call-to-Action Buttons
|
|
537
|
-
|
|
538
|
-
```html
|
|
539
|
-
<style>
|
|
540
|
-
.cta-section {
|
|
541
|
-
text-align: center;
|
|
542
|
-
padding: 3rem;
|
|
543
|
-
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
544
|
-
color: white;
|
|
545
|
-
border-radius: 0.5rem;
|
|
546
|
-
}
|
|
547
|
-
|
|
548
|
-
.cta-buttons {
|
|
549
|
-
display: flex;
|
|
550
|
-
gap: 1rem;
|
|
551
|
-
justify-content: center;
|
|
552
|
-
margin-top: 2rem;
|
|
553
|
-
}
|
|
554
|
-
</style>
|
|
555
|
-
|
|
556
|
-
<div class="cta-section">
|
|
557
|
-
<h2>Ready to get started?</h2>
|
|
558
|
-
<p>Join thousands of users already using our platform.</p>
|
|
559
|
-
|
|
560
|
-
<div class="cta-buttons">
|
|
561
|
-
<snice-button size="large" variant="default">
|
|
562
|
-
Learn More
|
|
563
|
-
</snice-button>
|
|
564
|
-
<snice-button size="large" variant="primary">
|
|
565
|
-
Get Started Free
|
|
566
|
-
</snice-button>
|
|
567
|
-
</div>
|
|
568
|
-
</div>
|
|
569
|
-
```
|
|
570
|
-
|
|
571
|
-
### Toolbar Buttons
|
|
572
|
-
|
|
573
|
-
```html
|
|
574
|
-
<style>
|
|
575
|
-
.toolbar {
|
|
576
|
-
display: flex;
|
|
577
|
-
gap: 0.25rem;
|
|
578
|
-
padding: 0.5rem;
|
|
579
|
-
background: #f3f4f6;
|
|
580
|
-
border-radius: 0.375rem;
|
|
581
|
-
width: fit-content;
|
|
582
|
-
}
|
|
583
|
-
</style>
|
|
584
|
-
|
|
585
|
-
<div class="toolbar">
|
|
586
|
-
<snice-button circle icon="/icons/undo.svg" size="small" outline title="Undo"></snice-button>
|
|
587
|
-
<snice-button circle icon="/icons/redo.svg" size="small" outline title="Redo"></snice-button>
|
|
588
|
-
<div style="width: 1px; background: #d1d5db; margin: 0 0.25rem;"></div>
|
|
589
|
-
<snice-button circle icon="/icons/copy.svg" size="small" outline title="Copy"></snice-button>
|
|
590
|
-
<snice-button circle icon="/icons/paste.svg" size="small" outline title="Paste"></snice-button>
|
|
591
|
-
<snice-button circle icon="/icons/cut.svg" size="small" outline title="Cut"></snice-button>
|
|
592
|
-
<div style="width: 1px; background: #d1d5db; margin: 0 0.25rem;"></div>
|
|
593
|
-
<snice-button circle icon="/icons/align-left.svg" size="small" outline title="Align Left"></snice-button>
|
|
594
|
-
<snice-button circle icon="/icons/align-center.svg" size="small" outline title="Align Center"></snice-button>
|
|
595
|
-
<snice-button circle icon="/icons/align-right.svg" size="small" outline title="Align Right"></snice-button>
|
|
596
|
-
</div>
|
|
597
|
-
```
|
|
598
|
-
|
|
599
|
-
### Social Login Buttons
|
|
600
|
-
|
|
601
|
-
```html
|
|
602
|
-
<style>
|
|
603
|
-
.social-buttons {
|
|
604
|
-
display: flex;
|
|
605
|
-
flex-direction: column;
|
|
606
|
-
gap: 0.75rem;
|
|
607
|
-
max-width: 20rem;
|
|
608
|
-
}
|
|
609
|
-
</style>
|
|
610
|
-
|
|
611
|
-
<div class="social-buttons">
|
|
612
|
-
<snice-button
|
|
613
|
-
variant="default"
|
|
614
|
-
icon="/icons/google.svg"
|
|
615
|
-
style="width: 100%;">
|
|
616
|
-
Continue with Google
|
|
617
|
-
</snice-button>
|
|
618
|
-
|
|
619
|
-
<snice-button
|
|
620
|
-
variant="default"
|
|
621
|
-
icon="/icons/github.svg"
|
|
622
|
-
style="width: 100%;">
|
|
623
|
-
Continue with GitHub
|
|
624
|
-
</snice-button>
|
|
625
|
-
|
|
626
|
-
<snice-button
|
|
627
|
-
variant="default"
|
|
628
|
-
icon="/icons/twitter.svg"
|
|
629
|
-
style="width: 100%;">
|
|
630
|
-
Continue with Twitter
|
|
631
|
-
</snice-button>
|
|
632
|
-
</div>
|
|
633
|
-
```
|
|
634
|
-
|
|
635
|
-
### Pagination Buttons
|
|
636
|
-
|
|
637
|
-
```html
|
|
638
|
-
<style>
|
|
639
|
-
.pagination {
|
|
640
|
-
display: flex;
|
|
641
|
-
gap: 0.25rem;
|
|
642
|
-
align-items: center;
|
|
212
|
+
```typescript
|
|
213
|
+
const button = document.querySelector('snice-button');
|
|
214
|
+
|
|
215
|
+
button.addEventListener('click', async () => {
|
|
216
|
+
button.loading = true;
|
|
217
|
+
try {
|
|
218
|
+
await saveData();
|
|
219
|
+
button.variant = 'success';
|
|
220
|
+
button.textContent = 'Saved!';
|
|
221
|
+
} catch (error) {
|
|
222
|
+
button.variant = 'danger';
|
|
223
|
+
button.textContent = 'Failed';
|
|
224
|
+
} finally {
|
|
225
|
+
button.loading = false;
|
|
643
226
|
}
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
<div class="pagination">
|
|
647
|
-
<snice-button icon="/icons/chevron-left.svg" outline disabled>Previous</snice-button>
|
|
648
|
-
|
|
649
|
-
<snice-button outline>1</snice-button>
|
|
650
|
-
<snice-button variant="primary">2</snice-button>
|
|
651
|
-
<snice-button outline>3</snice-button>
|
|
652
|
-
<snice-button outline>4</snice-button>
|
|
653
|
-
<snice-button outline>5</snice-button>
|
|
654
|
-
|
|
655
|
-
<snice-button icon="/icons/chevron-right.svg" icon-placement="end" outline>Next</snice-button>
|
|
656
|
-
</div>
|
|
657
|
-
```
|
|
658
|
-
|
|
659
|
-
### Upload Button
|
|
660
|
-
|
|
661
|
-
```html
|
|
662
|
-
<input type="file" id="file-input" style="display: none;" accept="image/*">
|
|
663
|
-
|
|
664
|
-
<snice-button
|
|
665
|
-
id="upload-btn"
|
|
666
|
-
variant="primary"
|
|
667
|
-
icon="/icons/upload.svg">
|
|
668
|
-
Upload Image
|
|
669
|
-
</snice-button>
|
|
670
|
-
|
|
671
|
-
<script type="module">
|
|
672
|
-
import type { SniceButtonElement } from 'snice/components/button/snice-button.types';
|
|
673
|
-
|
|
674
|
-
const button = document.getElementById('upload-btn') as SniceButtonElement;
|
|
675
|
-
const input = document.getElementById('file-input');
|
|
676
|
-
|
|
677
|
-
button.addEventListener('click', () => {
|
|
678
|
-
input.click();
|
|
679
|
-
});
|
|
680
|
-
|
|
681
|
-
input.addEventListener('change', async (e) => {
|
|
682
|
-
const file = e.target.files[0];
|
|
683
|
-
if (!file) return;
|
|
684
|
-
|
|
685
|
-
button.loading = true;
|
|
686
|
-
button.textContent = 'Uploading...';
|
|
687
|
-
|
|
688
|
-
try {
|
|
689
|
-
const formData = new FormData();
|
|
690
|
-
formData.append('file', file);
|
|
691
|
-
|
|
692
|
-
const response = await fetch('/api/upload', {
|
|
693
|
-
method: 'POST',
|
|
694
|
-
body: formData
|
|
695
|
-
});
|
|
696
|
-
|
|
697
|
-
if (!response.ok) throw new Error('Upload failed');
|
|
698
|
-
|
|
699
|
-
button.variant = 'success';
|
|
700
|
-
button.textContent = 'Uploaded!';
|
|
701
|
-
|
|
702
|
-
setTimeout(() => {
|
|
703
|
-
button.variant = 'primary';
|
|
704
|
-
button.textContent = 'Upload Image';
|
|
705
|
-
button.loading = false;
|
|
706
|
-
}, 2000);
|
|
707
|
-
|
|
708
|
-
} catch (error) {
|
|
709
|
-
alert('Upload failed: ' + error.message);
|
|
710
|
-
button.textContent = 'Upload Image';
|
|
711
|
-
button.loading = false;
|
|
712
|
-
}
|
|
713
|
-
});
|
|
714
|
-
</script>
|
|
227
|
+
});
|
|
715
228
|
```
|
|
716
229
|
|
|
717
230
|
## Accessibility
|
|
@@ -720,47 +233,3 @@ The `icon` **property** is for simple cases: emoji, image URLs, and image files.
|
|
|
720
233
|
- **Focus indicators**: Clear focus states for keyboard navigation
|
|
721
234
|
- **ARIA attributes**: Proper roles and states for screen readers
|
|
722
235
|
- **Disabled state**: Properly disabled buttons cannot be focused or activated
|
|
723
|
-
- **Link semantics**: When using href, renders as accessible link
|
|
724
|
-
|
|
725
|
-
## Browser Support
|
|
726
|
-
|
|
727
|
-
- Modern browsers (Chrome, Firefox, Safari, Edge)
|
|
728
|
-
- Requires Custom Elements v1 and Shadow DOM support
|
|
729
|
-
|
|
730
|
-
## Common Patterns
|
|
731
|
-
|
|
732
|
-
### Primary Action
|
|
733
|
-
```html
|
|
734
|
-
<snice-button variant="primary">Save Changes</snice-button>
|
|
735
|
-
```
|
|
736
|
-
|
|
737
|
-
### Secondary Action
|
|
738
|
-
```html
|
|
739
|
-
<snice-button variant="default">Cancel</snice-button>
|
|
740
|
-
```
|
|
741
|
-
|
|
742
|
-
### Destructive Action
|
|
743
|
-
```html
|
|
744
|
-
<snice-button variant="danger" outline>Delete</snice-button>
|
|
745
|
-
```
|
|
746
|
-
|
|
747
|
-
### Icon-Only Action
|
|
748
|
-
```html
|
|
749
|
-
<snice-button circle icon="/icons/edit.svg"></snice-button>
|
|
750
|
-
```
|
|
751
|
-
|
|
752
|
-
### Form Submit
|
|
753
|
-
```html
|
|
754
|
-
<snice-button variant="primary" type="submit">Submit</snice-button>
|
|
755
|
-
```
|
|
756
|
-
|
|
757
|
-
## Variant Colors
|
|
758
|
-
|
|
759
|
-
| Variant | Color Scheme | Use Case |
|
|
760
|
-
|---------|-------------|----------|
|
|
761
|
-
| `default` | Gray | Secondary actions, cancel |
|
|
762
|
-
| `primary` | Blue | Primary actions, submit |
|
|
763
|
-
| `success` | Green | Confirmations, positive actions |
|
|
764
|
-
| `warning` | Orange | Caution actions, important notices |
|
|
765
|
-
| `danger` | Red | Destructive actions, delete |
|
|
766
|
-
| `text` | Transparent | Tertiary actions, links |
|