snice 4.27.0 → 4.29.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/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 +4 -0
- package/adapters/react/components.d.ts.map +1 -1
- package/adapters/react/components.js +2 -0
- package/adapters/react/components.js.map +1 -1
- package/adapters/react/components.ts +4 -0
- package/adapters/react/useRequestHandler.d.ts +56 -0
- package/adapters/react/useRequestHandler.js +103 -0
- package/adapters/react/useRequestHandler.js.map +1 -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 +2 -2
- package/dist/cdn/badge/snice-badge.js.map +1 -1
- package/dist/cdn/badge/snice-badge.min.js +2 -2
- package/dist/cdn/badge/snice-badge.min.js.map +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 +11 -10
- package/dist/cdn/button/snice-button.js.map +1 -1
- package/dist/cdn/button/snice-button.min.js +3 -3
- 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/snice-chip.js +1 -1
- package/dist/cdn/chip/snice-chip.min.js +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/snice-date-picker.js +1 -1
- package/dist/cdn/date-picker/snice-date-picker.min.js +1 -1
- package/dist/cdn/date-range-picker/snice-date-range-picker.js +1 -1
- package/dist/cdn/date-range-picker/snice-date-range-picker.min.js +1 -1
- package/dist/cdn/date-time-picker/snice-date-time-picker.js +1 -1
- package/dist/cdn/date-time-picker/snice-date-time-picker.min.js +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/snice-draw.js +1 -1
- package/dist/cdn/draw/snice-draw.min.js +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/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 +11 -10
- package/dist/cdn/login/snice-login.js.map +1 -1
- package/dist/cdn/login/snice-login.min.js +5 -5
- 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/snice-message-strip.js +1 -1
- package/dist/cdn/message-strip/snice-message-strip.min.js +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/snice-paint.js +1 -1
- package/dist/cdn/paint/snice-paint.min.js +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/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 +152 -62
- 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 +152 -61
- package/dist/cdn/runtime/snice-runtime.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.min.js +8 -8
- 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 +11 -10
- package/dist/cdn/table/snice-table.js.map +1 -1
- package/dist/cdn/table/snice-table.min.js +73 -73
- 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/snice-tag.js +1 -1
- package/dist/cdn/tag/snice-tag.min.js +1 -1
- package/dist/cdn/tag-input/snice-tag-input.js +1 -1
- package/dist/cdn/tag-input/snice-tag-input.min.js +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/snice-time-picker.js +1 -1
- package/dist/cdn/time-picker/snice-time-picker.min.js +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/snice-toast.js +1 -1
- package/dist/cdn/toast/snice-toast.min.js +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/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/badge/snice-badge.js +1 -1
- package/dist/components/badge/snice-badge.js.map +1 -1
- 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.d.ts +2 -2
- package/dist/components/button/snice-button.js +11 -10
- package/dist/components/button/snice-button.js.map +1 -1
- package/dist/create-request-handler.d.ts +42 -0
- package/dist/index.cjs +149 -58
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.esm.js +149 -59
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +149 -58
- package/dist/index.iife.js.map +1 -1
- package/dist/parts.d.ts +9 -7
- 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/docs/ai/DEVELOPMENT.md +1 -1
- 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/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 +63 -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/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-react-integration-design.md +166 -0
- package/docs/request-response.md +77 -0
- package/package.json +20 -10
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
<!-- AI: For
|
|
1
|
+
<!-- AI: For the AI-optimized version of this doc, see docs/ai/components/file-gallery.md -->
|
|
2
2
|
|
|
3
|
-
# File Gallery
|
|
3
|
+
# File Gallery
|
|
4
4
|
|
|
5
5
|
The `<snice-file-gallery>` component provides a file upload gallery with drag-and-drop support, image previews, pausable/resumable uploads, and progress tracking.
|
|
6
6
|
|
|
@@ -10,9 +10,7 @@ The `<snice-file-gallery>` component provides a file upload gallery with drag-an
|
|
|
10
10
|
- [Events](#events)
|
|
11
11
|
- [CSS Parts](#css-parts)
|
|
12
12
|
- [Basic Usage](#basic-usage)
|
|
13
|
-
- [Upload Handler](#upload-handler)
|
|
14
13
|
- [Examples](#examples)
|
|
15
|
-
- [Features](#features)
|
|
16
14
|
|
|
17
15
|
## Properties
|
|
18
16
|
|
|
@@ -21,363 +19,102 @@ The `<snice-file-gallery>` component provides a file upload gallery with drag-an
|
|
|
21
19
|
| `accept` | `string` | `''` | Allowed file types (same as input accept) |
|
|
22
20
|
| `multiple` | `boolean` | `true` | Allow multiple file selection |
|
|
23
21
|
| `disabled` | `boolean` | `false` | Whether gallery is disabled |
|
|
24
|
-
| `maxSize` | `number` | `-1` | Maximum file size in bytes (-1 = no limit) |
|
|
25
|
-
| `maxFiles` | `number` | `-1` | Maximum number of files (-1 = no limit) |
|
|
22
|
+
| `maxSize` (attr: `max-size`) | `number` | `-1` | Maximum file size in bytes (-1 = no limit) |
|
|
23
|
+
| `maxFiles` (attr: `max-files`) | `number` | `-1` | Maximum number of files (-1 = no limit) |
|
|
26
24
|
| `view` | `'grid' \| 'list'` | `'grid'` | Display layout mode |
|
|
27
|
-
| `showProgress` | `boolean` | `true` | Show upload progress |
|
|
28
|
-
| `allowPause` | `boolean` | `true` | Allow pause/resume of uploads |
|
|
29
|
-
| `allowDelete` | `boolean` | `true` | Allow file deletion |
|
|
30
|
-
| `autoUpload` | `boolean` | `true` | Start upload immediately on file add |
|
|
31
|
-
| `showDropzone` | `boolean` | `true` | Show drop zone for drag & drop uploads |
|
|
32
|
-
| `showAddButton` | `boolean` | `false` | Show add button tile in gallery |
|
|
25
|
+
| `showProgress` (attr: `show-progress`) | `boolean` | `true` | Show upload progress |
|
|
26
|
+
| `allowPause` (attr: `allow-pause`) | `boolean` | `true` | Allow pause/resume of uploads |
|
|
27
|
+
| `allowDelete` (attr: `allow-delete`) | `boolean` | `true` | Allow file deletion |
|
|
28
|
+
| `autoUpload` (attr: `auto-upload`) | `boolean` | `true` | Start upload immediately on file add |
|
|
29
|
+
| `showDropzone` (attr: `show-dropzone`) | `boolean` | `true` | Show drop zone for drag & drop uploads |
|
|
30
|
+
| `showAddButton` (attr: `show-add-button`) | `boolean` | `false` | Show add button tile in gallery |
|
|
33
31
|
| `showHeader` (attr: `show-header`) | `boolean` | `true` | Show gallery header section |
|
|
34
|
-
| `files` | `GalleryFile[]` | `[]` | Current files (read-only) |
|
|
32
|
+
| `files` | `GalleryFile[]` | `[]` | Current files (read-only getter) |
|
|
35
33
|
|
|
36
34
|
## Methods
|
|
37
35
|
|
|
38
36
|
### Getters
|
|
39
37
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
#### `getFile(fileId: string): GalleryFile | undefined`
|
|
55
|
-
Get a specific file by ID.
|
|
56
|
-
|
|
57
|
-
```typescript
|
|
58
|
-
const file = gallery.getFile('file-id-123');
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
#### `getCustomAction(actionId: string): CustomAction | undefined`
|
|
62
|
-
Get a specific custom action by ID.
|
|
63
|
-
|
|
64
|
-
```typescript
|
|
65
|
-
const action = gallery.getCustomAction('action-id-456');
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
#### `isPending(fileId: string): boolean`
|
|
69
|
-
Check if a file upload is pending.
|
|
70
|
-
|
|
71
|
-
```typescript
|
|
72
|
-
if (gallery.isPending('file-id-123')) {
|
|
73
|
-
console.log('File is waiting to upload');
|
|
74
|
-
}
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
#### `isUploading(fileId: string): boolean`
|
|
78
|
-
Check if a file is currently uploading.
|
|
79
|
-
|
|
80
|
-
#### `isPaused(fileId: string): boolean`
|
|
81
|
-
Check if a file upload is paused.
|
|
82
|
-
|
|
83
|
-
#### `isCompleted(fileId: string): boolean`
|
|
84
|
-
Check if a file upload is completed.
|
|
85
|
-
|
|
86
|
-
#### `hasError(fileId: string): boolean`
|
|
87
|
-
Check if a file upload has an error.
|
|
88
|
-
|
|
89
|
-
#### `canAddFiles(): boolean`
|
|
90
|
-
Check if more files can be added (respects maxFiles limit).
|
|
91
|
-
|
|
92
|
-
```typescript
|
|
93
|
-
if (gallery.canAddFiles()) {
|
|
94
|
-
gallery.openFilePicker();
|
|
95
|
-
}
|
|
96
|
-
```
|
|
38
|
+
| Method | Returns | Description |
|
|
39
|
+
|--------|---------|-------------|
|
|
40
|
+
| `files` | `GalleryFile[]` | Get all files (read-only) |
|
|
41
|
+
| `customActions` | `CustomAction[]` | Get all custom action buttons (read-only) |
|
|
42
|
+
| `getFile(fileId)` | `GalleryFile \| undefined` | Get a specific file by ID |
|
|
43
|
+
| `getCustomAction(actionId)` | `CustomAction \| undefined` | Get a specific custom action by ID |
|
|
44
|
+
| `isPending(fileId)` | `boolean` | Check if a file upload is pending |
|
|
45
|
+
| `isUploading(fileId)` | `boolean` | Check if a file is currently uploading |
|
|
46
|
+
| `isPaused(fileId)` | `boolean` | Check if a file upload is paused |
|
|
47
|
+
| `isCompleted(fileId)` | `boolean` | Check if a file upload is completed |
|
|
48
|
+
| `hasError(fileId)` | `boolean` | Check if a file upload has an error |
|
|
49
|
+
| `canAddFiles()` | `boolean` | Check if more files can be added (respects maxFiles) |
|
|
97
50
|
|
|
98
51
|
### File Management
|
|
99
52
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
Add a file with a custom preview (e.g., from camera/canvas).
|
|
109
|
-
|
|
110
|
-
```typescript
|
|
111
|
-
const canvas = document.createElement('canvas');
|
|
112
|
-
// ... draw on canvas
|
|
113
|
-
canvas.toBlob((blob) => {
|
|
114
|
-
const file = new File([blob], 'photo.png', { type: 'image/png' });
|
|
115
|
-
const preview = canvas.toDataURL('image/png');
|
|
116
|
-
gallery.addFileWithPreview(file, preview);
|
|
117
|
-
});
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
#### `removeFile(fileId: string): void`
|
|
121
|
-
Remove a file from the gallery.
|
|
122
|
-
|
|
123
|
-
```typescript
|
|
124
|
-
gallery.removeFile('file-id-123');
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
#### `clear(): void`
|
|
128
|
-
Remove all files from the gallery.
|
|
129
|
-
|
|
130
|
-
```typescript
|
|
131
|
-
gallery.clear();
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
#### `clearCompleted(): void`
|
|
135
|
-
Remove all completed files from the gallery.
|
|
136
|
-
|
|
137
|
-
```typescript
|
|
138
|
-
gallery.clearCompleted();
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
#### `clearErrors(): void`
|
|
142
|
-
Remove all files with errors from the gallery.
|
|
143
|
-
|
|
144
|
-
```typescript
|
|
145
|
-
gallery.clearErrors();
|
|
146
|
-
```
|
|
53
|
+
| Method | Description |
|
|
54
|
+
|--------|-------------|
|
|
55
|
+
| `addFiles(files: FileList \| File[])` | Add files to the gallery |
|
|
56
|
+
| `addFileWithPreview(file: File, previewDataUrl: string)` | Add a file with a custom preview |
|
|
57
|
+
| `removeFile(fileId: string)` | Remove a file from the gallery |
|
|
58
|
+
| `clear()` | Remove all files |
|
|
59
|
+
| `clearCompleted()` | Remove all completed files |
|
|
60
|
+
| `clearErrors()` | Remove all files with errors |
|
|
147
61
|
|
|
148
62
|
### Upload Control
|
|
149
63
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
```typescript
|
|
161
|
-
await gallery.resumeUpload('file-id-123');
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
#### `retryUpload(fileId: string): Promise<void>`
|
|
165
|
-
Retry a failed upload.
|
|
166
|
-
|
|
167
|
-
```typescript
|
|
168
|
-
await gallery.retryUpload('file-id-123');
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
#### `cancelUpload(fileId: string): void`
|
|
172
|
-
Cancel an upload and remove the file.
|
|
173
|
-
|
|
174
|
-
```typescript
|
|
175
|
-
gallery.cancelUpload('file-id-123');
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
#### `pauseAll(): void`
|
|
179
|
-
Pause all currently uploading files.
|
|
180
|
-
|
|
181
|
-
```typescript
|
|
182
|
-
gallery.pauseAll();
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
#### `resumeAll(): void`
|
|
186
|
-
Resume all paused uploads.
|
|
187
|
-
|
|
188
|
-
```typescript
|
|
189
|
-
gallery.resumeAll();
|
|
190
|
-
```
|
|
191
|
-
|
|
192
|
-
#### `retryAll(): void`
|
|
193
|
-
Retry all failed uploads.
|
|
194
|
-
|
|
195
|
-
```typescript
|
|
196
|
-
gallery.retryAll();
|
|
197
|
-
```
|
|
198
|
-
|
|
199
|
-
#### `cancelAll(): void`
|
|
200
|
-
Cancel all active uploads and remove them.
|
|
201
|
-
|
|
202
|
-
```typescript
|
|
203
|
-
gallery.cancelAll();
|
|
204
|
-
```
|
|
64
|
+
| Method | Description |
|
|
65
|
+
|--------|-------------|
|
|
66
|
+
| `pauseUpload(fileId: string)` | Pause an ongoing upload |
|
|
67
|
+
| `resumeUpload(fileId: string)` | Resume a paused upload |
|
|
68
|
+
| `retryUpload(fileId: string)` | Retry a failed upload |
|
|
69
|
+
| `cancelUpload(fileId: string)` | Cancel an upload and remove the file |
|
|
70
|
+
| `pauseAll()` | Pause all currently uploading files |
|
|
71
|
+
| `resumeAll()` | Resume all paused uploads |
|
|
72
|
+
| `retryAll()` | Retry all failed uploads |
|
|
73
|
+
| `cancelAll()` | Cancel all active uploads and remove them |
|
|
205
74
|
|
|
206
75
|
### Custom Actions
|
|
207
76
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
const actionId = gallery.addCustomAction(cameraIcon, 'Camera');
|
|
214
|
-
```
|
|
215
|
-
|
|
216
|
-
#### `removeCustomAction(actionId: string): void`
|
|
217
|
-
Remove a custom action button.
|
|
218
|
-
|
|
219
|
-
```typescript
|
|
220
|
-
gallery.removeCustomAction(actionId);
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
#### `clearCustomActions(): void`
|
|
224
|
-
Remove all custom action buttons.
|
|
225
|
-
|
|
226
|
-
```typescript
|
|
227
|
-
gallery.clearCustomActions();
|
|
228
|
-
```
|
|
77
|
+
| Method | Returns | Description |
|
|
78
|
+
|--------|---------|-------------|
|
|
79
|
+
| `addCustomAction(icon: string, text: string)` | `string` | Add a custom action button; returns the action ID |
|
|
80
|
+
| `removeCustomAction(actionId: string)` | `void` | Remove a custom action button |
|
|
81
|
+
| `clearCustomActions()` | `void` | Remove all custom action buttons |
|
|
229
82
|
|
|
230
83
|
### Utility
|
|
231
84
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
```
|
|
238
|
-
|
|
239
|
-
#### `setFileBadge(fileId: string, badge: string, position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'): void`
|
|
240
|
-
Add a custom badge overlay to a file's preview thumbnail. Supports HTML content for avatars, icons, or custom elements.
|
|
241
|
-
|
|
242
|
-
```typescript
|
|
243
|
-
// Add user avatar badge
|
|
244
|
-
const avatarHTML = `<div style="
|
|
245
|
-
width: 40px;
|
|
246
|
-
height: 40px;
|
|
247
|
-
border-radius: 50%;
|
|
248
|
-
background: #3b82f6;
|
|
249
|
-
color: white;
|
|
250
|
-
display: flex;
|
|
251
|
-
align-items: center;
|
|
252
|
-
justify-content: center;
|
|
253
|
-
font-weight: bold;
|
|
254
|
-
border: 2px solid white;
|
|
255
|
-
box-shadow: 0 2px 4px rgba(0,0,0,0.2);
|
|
256
|
-
">JD</div>`;
|
|
257
|
-
|
|
258
|
-
gallery.setFileBadge('file-id-123', avatarHTML, 'top-right');
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
#### `removeFileBadge(fileId: string): void`
|
|
262
|
-
Remove a badge from a file.
|
|
263
|
-
|
|
264
|
-
```typescript
|
|
265
|
-
gallery.removeFileBadge('file-id-123');
|
|
266
|
-
```
|
|
85
|
+
| Method | Description |
|
|
86
|
+
|--------|-------------|
|
|
87
|
+
| `openFilePicker()` | Programmatically open the file picker dialog |
|
|
88
|
+
| `setFileBadge(fileId, badge, position?)` | Add a custom badge overlay to a file's preview |
|
|
89
|
+
| `removeFileBadge(fileId)` | Remove a badge from a file |
|
|
267
90
|
|
|
268
91
|
## Events
|
|
269
92
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
### `upload-progress`
|
|
282
|
-
Fired during upload progress.
|
|
283
|
-
|
|
284
|
-
**Detail**: `{ file: GalleryFile, progress: number }`
|
|
285
|
-
|
|
286
|
-
```typescript
|
|
287
|
-
gallery.addEventListener('upload-progress', (e) => {
|
|
288
|
-
console.log(`${e.detail.file.file.name}: ${e.detail.progress}%`);
|
|
289
|
-
});
|
|
290
|
-
```
|
|
291
|
-
|
|
292
|
-
### `upload-complete`
|
|
293
|
-
Fired when an upload completes successfully.
|
|
294
|
-
|
|
295
|
-
**Detail**: `{ file: GalleryFile, response: UploadResponse, component: SniceFileGalleryElement }`
|
|
296
|
-
|
|
297
|
-
```typescript
|
|
298
|
-
gallery.addEventListener('upload-complete', (e) => {
|
|
299
|
-
console.log('Upload complete:', e.detail.response);
|
|
300
|
-
});
|
|
301
|
-
```
|
|
302
|
-
|
|
303
|
-
### `upload-pause`
|
|
304
|
-
Fired when an upload is paused.
|
|
305
|
-
|
|
306
|
-
**Detail**: `{ file: GalleryFile, component: SniceFileGalleryElement }`
|
|
307
|
-
|
|
308
|
-
```typescript
|
|
309
|
-
gallery.addEventListener('upload-pause', (e) => {
|
|
310
|
-
console.log('Upload paused:', e.detail.file.file.name);
|
|
311
|
-
});
|
|
312
|
-
```
|
|
313
|
-
|
|
314
|
-
### `file-remove`
|
|
315
|
-
Fired when a file is removed from the gallery.
|
|
316
|
-
|
|
317
|
-
**Detail**: `{ file: GalleryFile, component: SniceFileGalleryElement }`
|
|
318
|
-
|
|
319
|
-
```typescript
|
|
320
|
-
gallery.addEventListener('file-remove', (e) => {
|
|
321
|
-
console.log('File removed:', e.detail.file.file.name);
|
|
322
|
-
});
|
|
323
|
-
```
|
|
324
|
-
|
|
325
|
-
### `upload-error`
|
|
326
|
-
Fired when an upload fails.
|
|
327
|
-
|
|
328
|
-
**Detail**: `{ file: GalleryFile, error: string, component: SniceFileGalleryElement }`
|
|
329
|
-
|
|
330
|
-
```typescript
|
|
331
|
-
gallery.addEventListener('upload-error', (e) => {
|
|
332
|
-
console.error('Upload error:', e.detail.error);
|
|
333
|
-
});
|
|
334
|
-
```
|
|
335
|
-
|
|
336
|
-
### `custom-action-click`
|
|
337
|
-
Fired when a custom action button is clicked.
|
|
338
|
-
|
|
339
|
-
**Detail**: `{ actionId: string }`
|
|
340
|
-
|
|
341
|
-
```typescript
|
|
342
|
-
gallery.addEventListener('custom-action-click', (e) => {
|
|
343
|
-
console.log('Custom action clicked:', e.detail.actionId);
|
|
344
|
-
});
|
|
345
|
-
```
|
|
346
|
-
|
|
347
|
-
### `gallery-error`
|
|
348
|
-
Fired when a validation or general error occurs.
|
|
349
|
-
|
|
350
|
-
**Detail**: `{ message: string }`
|
|
351
|
-
|
|
352
|
-
```typescript
|
|
353
|
-
gallery.addEventListener('gallery-error', (e) => {
|
|
354
|
-
console.error('Error:', e.detail.message);
|
|
355
|
-
});
|
|
356
|
-
```
|
|
93
|
+
| Event | Detail | Description |
|
|
94
|
+
|-------|--------|-------------|
|
|
95
|
+
| `files-change` | `{ files, component }` | Files added or removed |
|
|
96
|
+
| `upload-progress` | `{ file, progress, component }` | Upload progress update |
|
|
97
|
+
| `upload-complete` | `{ file, response, component }` | Upload completed successfully |
|
|
98
|
+
| `upload-error` | `{ file, error, component }` | Upload failed |
|
|
99
|
+
| `upload-pause` | `{ file, component }` | Upload paused |
|
|
100
|
+
| `file-remove` | `{ file, component }` | File removed from gallery |
|
|
101
|
+
| `custom-action-click` | `{ actionId, component }` | Custom action button clicked |
|
|
102
|
+
| `gallery-error` | `{ message, component }` | Validation or general error |
|
|
357
103
|
|
|
358
104
|
## CSS Parts
|
|
359
105
|
|
|
360
|
-
|
|
106
|
+
| Part | Description |
|
|
107
|
+
|------|-------------|
|
|
108
|
+
| `base` | Outer gallery container |
|
|
109
|
+
| `dropzone` | Drag-and-drop upload zone |
|
|
110
|
+
| `gallery` | File thumbnails grid/list area |
|
|
361
111
|
|
|
362
|
-
|
|
363
|
-
|------|---------|-------------|
|
|
364
|
-
| `base` | `<div>` | Outer gallery container |
|
|
365
|
-
| `dropzone` | `<div>` | Drag-and-drop upload zone |
|
|
366
|
-
| `gallery` | `<div>` | File thumbnails grid/list area |
|
|
367
|
-
|
|
368
|
-
```css
|
|
369
|
-
snice-file-gallery::part(dropzone) {
|
|
370
|
-
border-style: dashed;
|
|
371
|
-
border-color: #3b82f6;
|
|
372
|
-
}
|
|
112
|
+
## Basic Usage
|
|
373
113
|
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
}
|
|
114
|
+
```typescript
|
|
115
|
+
import 'snice/components/file-gallery/snice-file-gallery';
|
|
377
116
|
```
|
|
378
117
|
|
|
379
|
-
## Basic Usage
|
|
380
|
-
|
|
381
118
|
```html
|
|
382
119
|
<snice-file-gallery controller="upload-handler"></snice-file-gallery>
|
|
383
120
|
```
|
|
@@ -408,72 +145,8 @@ class UploadHandler implements IController {
|
|
|
408
145
|
}
|
|
409
146
|
```
|
|
410
147
|
|
|
411
|
-
## Upload Handler
|
|
412
|
-
|
|
413
|
-
The file gallery uses the `@request/@respond` pattern for uploads. Attach a controller with `@respond('file-gallery-upload')`:
|
|
414
|
-
|
|
415
|
-
```typescript
|
|
416
|
-
import { controller, respond, IController } from 'snice';
|
|
417
|
-
|
|
418
|
-
@controller('upload-handler')
|
|
419
|
-
class UploadHandler implements IController {
|
|
420
|
-
element: HTMLElement | null = null;
|
|
421
|
-
|
|
422
|
-
async attach(element: HTMLElement) {
|
|
423
|
-
this.element = element;
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
async detach() {}
|
|
427
|
-
|
|
428
|
-
@respond('file-gallery-upload')
|
|
429
|
-
async handleUpload(request) {
|
|
430
|
-
const { file, fileId, onProgress, signal } = request;
|
|
431
|
-
|
|
432
|
-
const formData = new FormData();
|
|
433
|
-
formData.append('file', file);
|
|
434
|
-
|
|
435
|
-
return new Promise((resolve, reject) => {
|
|
436
|
-
const xhr = new XMLHttpRequest();
|
|
437
|
-
|
|
438
|
-
xhr.upload.addEventListener('progress', (e) => {
|
|
439
|
-
if (e.lengthComputable && onProgress) {
|
|
440
|
-
onProgress(e.loaded / e.total);
|
|
441
|
-
}
|
|
442
|
-
});
|
|
443
|
-
|
|
444
|
-
xhr.addEventListener('load', () => {
|
|
445
|
-
if (xhr.status === 200) {
|
|
446
|
-
const response = JSON.parse(xhr.responseText);
|
|
447
|
-
resolve({ success: true, fileId, url: response.url });
|
|
448
|
-
} else {
|
|
449
|
-
reject(new Error('Upload failed'));
|
|
450
|
-
}
|
|
451
|
-
});
|
|
452
|
-
|
|
453
|
-
xhr.addEventListener('error', () => reject(new Error('Network error')));
|
|
454
|
-
|
|
455
|
-
if (signal) {
|
|
456
|
-
signal.addEventListener('abort', () => {
|
|
457
|
-
xhr.abort();
|
|
458
|
-
reject(new Error('Upload cancelled'));
|
|
459
|
-
});
|
|
460
|
-
}
|
|
461
|
-
|
|
462
|
-
xhr.open('POST', '/api/upload');
|
|
463
|
-
xhr.send(formData);
|
|
464
|
-
});
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
```
|
|
468
|
-
|
|
469
148
|
## Examples
|
|
470
149
|
|
|
471
|
-
### Basic Gallery
|
|
472
|
-
|
|
473
|
-
```html
|
|
474
|
-
<snice-file-gallery></snice-file-gallery>
|
|
475
|
-
```
|
|
476
|
-
|
|
477
150
|
### Image Gallery
|
|
478
151
|
|
|
479
152
|
```html
|
|
@@ -486,16 +159,6 @@ class UploadHandler implements IController {
|
|
|
486
159
|
<snice-file-gallery auto-upload="false" controller="upload-handler"></snice-file-gallery>
|
|
487
160
|
```
|
|
488
161
|
|
|
489
|
-
```typescript
|
|
490
|
-
// Upload files manually
|
|
491
|
-
const files = gallery.files;
|
|
492
|
-
for (const file of files) {
|
|
493
|
-
if (file.uploadStatus === 'pending') {
|
|
494
|
-
await gallery.resumeUpload(file.id);
|
|
495
|
-
}
|
|
496
|
-
}
|
|
497
|
-
```
|
|
498
|
-
|
|
499
162
|
### File Limits
|
|
500
163
|
|
|
501
164
|
```html
|
|
@@ -511,19 +174,9 @@ for (const file of files) {
|
|
|
511
174
|
<snice-file-gallery view="list"></snice-file-gallery>
|
|
512
175
|
```
|
|
513
176
|
|
|
514
|
-
### Custom File Types
|
|
515
|
-
|
|
516
|
-
```html
|
|
517
|
-
<snice-file-gallery
|
|
518
|
-
accept=".pdf,.doc,.docx,.txt"
|
|
519
|
-
allow-pause="false"
|
|
520
|
-
></snice-file-gallery>
|
|
521
|
-
```
|
|
522
|
-
|
|
523
177
|
### Add Button Mode
|
|
524
178
|
|
|
525
179
|
```html
|
|
526
|
-
<!-- Hide drop zone and show plus tile in gallery instead -->
|
|
527
180
|
<snice-file-gallery
|
|
528
181
|
show-dropzone="false"
|
|
529
182
|
show-add-button="true"
|
|
@@ -531,43 +184,24 @@ for (const file of files) {
|
|
|
531
184
|
></snice-file-gallery>
|
|
532
185
|
```
|
|
533
186
|
|
|
534
|
-
###
|
|
187
|
+
### Custom Action Buttons
|
|
535
188
|
|
|
536
189
|
```typescript
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
gallery.addEventListener('upload-progress', (e) => {
|
|
542
|
-
console.log(`${e.detail.file.file.name}: ${e.detail.progress}%`);
|
|
543
|
-
});
|
|
190
|
+
const cameraIcon = `<svg viewBox="0 0 24 24" fill="none" stroke="currentColor">
|
|
191
|
+
<path d="M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z" stroke-width="2"/>
|
|
192
|
+
<circle cx="12" cy="13" r="4" stroke-width="2"/>
|
|
193
|
+
</svg>`;
|
|
544
194
|
|
|
545
|
-
gallery.
|
|
546
|
-
console.log('Upload complete:', e.detail.file.file.name);
|
|
547
|
-
});
|
|
195
|
+
const cameraActionId = gallery.addCustomAction(cameraIcon, 'Camera');
|
|
548
196
|
|
|
549
|
-
gallery.addEventListener('
|
|
550
|
-
|
|
197
|
+
gallery.addEventListener('custom-action-click', (e) => {
|
|
198
|
+
if (e.detail.actionId === cameraActionId) {
|
|
199
|
+
// Open camera, capture image, etc.
|
|
200
|
+
}
|
|
551
201
|
});
|
|
552
202
|
```
|
|
553
203
|
|
|
554
|
-
###
|
|
555
|
-
|
|
556
|
-
```typescript
|
|
557
|
-
gallery.pauseAll();
|
|
558
|
-
gallery.resumeAll();
|
|
559
|
-
gallery.retryAll();
|
|
560
|
-
gallery.clearCompleted();
|
|
561
|
-
gallery.clear();
|
|
562
|
-
```
|
|
563
|
-
|
|
564
|
-
### Custom Badges for Collaboration
|
|
565
|
-
|
|
566
|
-
Use badges to show user avatars on files in collaborative scenarios:
|
|
567
|
-
|
|
568
|
-
```html
|
|
569
|
-
<snice-file-gallery show-dropzone="false" show-add-button="true" controller="upload-handler"></snice-file-gallery>
|
|
570
|
-
```
|
|
204
|
+
### Custom Badges
|
|
571
205
|
|
|
572
206
|
```typescript
|
|
573
207
|
const avatarHTML = `<div style="
|
|
@@ -575,40 +209,38 @@ const avatarHTML = `<div style="
|
|
|
575
209
|
background: #3b82f6; color: white;
|
|
576
210
|
display: flex; align-items: center; justify-content: center;
|
|
577
211
|
font-weight: bold; border: 2px solid white;
|
|
578
|
-
box-shadow: 0 2px 4px rgba(0,0,0,0.2);
|
|
579
212
|
">JD</div>`;
|
|
580
213
|
|
|
581
214
|
gallery.setFileBadge('file-id-123', avatarHTML, 'top-right');
|
|
582
215
|
```
|
|
583
216
|
|
|
584
|
-
###
|
|
217
|
+
### Tracking Upload Events
|
|
585
218
|
|
|
586
219
|
```typescript
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
</svg>`;
|
|
220
|
+
gallery.addEventListener('files-change', (e) => {
|
|
221
|
+
console.log('Files changed:', e.detail.files);
|
|
222
|
+
});
|
|
591
223
|
|
|
592
|
-
|
|
224
|
+
gallery.addEventListener('upload-progress', (e) => {
|
|
225
|
+
console.log(`${e.detail.file.file.name}: ${e.detail.progress}%`);
|
|
226
|
+
});
|
|
593
227
|
|
|
594
|
-
gallery.addEventListener('
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
});
|
|
601
|
-
}
|
|
228
|
+
gallery.addEventListener('upload-complete', (e) => {
|
|
229
|
+
console.log('Upload complete:', e.detail.file.file.name);
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
gallery.addEventListener('upload-error', (e) => {
|
|
233
|
+
console.error('Upload failed:', e.detail.error);
|
|
602
234
|
});
|
|
603
235
|
```
|
|
604
236
|
|
|
605
|
-
###
|
|
237
|
+
### Upload Handler with XHR Progress
|
|
606
238
|
|
|
607
239
|
```typescript
|
|
608
240
|
import { controller, respond, IController } from 'snice';
|
|
609
241
|
|
|
610
|
-
@controller('upload-
|
|
611
|
-
class
|
|
242
|
+
@controller('upload-handler')
|
|
243
|
+
class UploadHandler implements IController {
|
|
612
244
|
element: HTMLElement | null = null;
|
|
613
245
|
async attach(element: HTMLElement) { this.element = element; }
|
|
614
246
|
async detach() {}
|
|
@@ -617,43 +249,39 @@ class UploadWithRetry implements IController {
|
|
|
617
249
|
async handleUpload(request) {
|
|
618
250
|
const { file, fileId, onProgress, signal } = request;
|
|
619
251
|
|
|
620
|
-
const
|
|
621
|
-
|
|
622
|
-
const formData = new FormData();
|
|
623
|
-
formData.append('file', file);
|
|
252
|
+
const formData = new FormData();
|
|
253
|
+
formData.append('file', file);
|
|
624
254
|
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
body: formData,
|
|
628
|
-
signal,
|
|
629
|
-
});
|
|
255
|
+
return new Promise((resolve, reject) => {
|
|
256
|
+
const xhr = new XMLHttpRequest();
|
|
630
257
|
|
|
631
|
-
|
|
258
|
+
xhr.upload.addEventListener('progress', (e) => {
|
|
259
|
+
if (e.lengthComputable && onProgress) {
|
|
260
|
+
onProgress(e.loaded / e.total);
|
|
261
|
+
}
|
|
262
|
+
});
|
|
632
263
|
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
264
|
+
xhr.addEventListener('load', () => {
|
|
265
|
+
if (xhr.status === 200) {
|
|
266
|
+
const response = JSON.parse(xhr.responseText);
|
|
267
|
+
resolve({ success: true, fileId, url: response.url });
|
|
268
|
+
} else {
|
|
269
|
+
reject(new Error('Upload failed'));
|
|
639
270
|
}
|
|
640
|
-
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
xhr.addEventListener('error', () => reject(new Error('Network error')));
|
|
274
|
+
|
|
275
|
+
if (signal) {
|
|
276
|
+
signal.addEventListener('abort', () => {
|
|
277
|
+
xhr.abort();
|
|
278
|
+
reject(new Error('Upload cancelled'));
|
|
279
|
+
});
|
|
641
280
|
}
|
|
642
|
-
};
|
|
643
281
|
|
|
644
|
-
|
|
282
|
+
xhr.open('POST', '/api/upload');
|
|
283
|
+
xhr.send(formData);
|
|
284
|
+
});
|
|
645
285
|
}
|
|
646
286
|
}
|
|
647
287
|
```
|
|
648
|
-
|
|
649
|
-
## Features
|
|
650
|
-
|
|
651
|
-
- **Drag and Drop**: Native drag-and-drop support with visual feedback
|
|
652
|
-
- **Image Preview**: Automatic thumbnail generation for image files
|
|
653
|
-
- **Pausable Uploads**: Pause and resume uploads using AbortController
|
|
654
|
-
- **Progress Tracking**: Real-time upload progress for each file
|
|
655
|
-
- **File Management**: Add, remove, pause, resume, and retry uploads
|
|
656
|
-
- **View Modes**: Toggle between grid and list layouts
|
|
657
|
-
- **Validation**: File size and type validation with error messaging
|
|
658
|
-
- **Auto Upload**: Optional automatic upload on file add
|
|
659
|
-
- **Accessibility**: Full keyboard support and ARIA attributes
|