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,41 +1,26 @@
|
|
|
1
|
-
<!-- AI: For
|
|
2
|
-
|
|
3
|
-
# Podcast Player Component
|
|
1
|
+
<!-- AI: For the AI-optimized version of this doc, see docs/ai/components/podcast-player.md -->
|
|
4
2
|
|
|
3
|
+
# Podcast Player
|
|
5
4
|
`<snice-podcast-player>`
|
|
6
5
|
|
|
7
6
|
A full-featured podcast player with playback controls, playback speed adjustment, episode list, chapter support, RSS feed parsing, sleep timer, and position memory via localStorage.
|
|
8
7
|
|
|
9
8
|
## Table of Contents
|
|
10
|
-
- [Importing](#importing)
|
|
11
9
|
- [Properties](#properties)
|
|
12
10
|
- [Methods](#methods)
|
|
13
11
|
- [Events](#events)
|
|
14
12
|
- [CSS Parts](#css-parts)
|
|
15
13
|
- [Basic Usage](#basic-usage)
|
|
16
14
|
- [Examples](#examples)
|
|
17
|
-
- [Types](#types)
|
|
18
15
|
- [Accessibility](#accessibility)
|
|
19
|
-
|
|
20
|
-
## Importing
|
|
21
|
-
|
|
22
|
-
**ESM (bundler)**
|
|
23
|
-
```typescript
|
|
24
|
-
import 'snice/components/podcast-player/snice-podcast-player';
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
**CDN**
|
|
28
|
-
```html
|
|
29
|
-
<script src="snice-runtime.min.js"></script>
|
|
30
|
-
<script src="snice-podcast-player.min.js"></script>
|
|
31
|
-
```
|
|
16
|
+
- [Data Types](#data-types)
|
|
32
17
|
|
|
33
18
|
## Properties
|
|
34
19
|
|
|
35
20
|
| Property | Type | Default | Description |
|
|
36
21
|
|----------|------|---------|-------------|
|
|
37
22
|
| `src` | `string` | `''` | Audio source URL for direct playback |
|
|
38
|
-
| `fromRss` (attr: `from-rss`) | `string` | `''` | RSS feed URL. Fetches and displays
|
|
23
|
+
| `fromRss` (attr: `from-rss`) | `string` | `''` | RSS feed URL. Fetches and displays episode list automatically |
|
|
39
24
|
| `title` | `string` | `''` | Episode title |
|
|
40
25
|
| `show` | `string` | `''` | Show or podcast name |
|
|
41
26
|
| `artwork` | `string` | `''` | Artwork image URL |
|
|
@@ -47,9 +32,9 @@ import 'snice/components/podcast-player/snice-podcast-player';
|
|
|
47
32
|
| `duration` | `number` | `0` | Episode duration in seconds |
|
|
48
33
|
| `volume` | `number` | `1` | Volume level (range: 0 to 1) |
|
|
49
34
|
| `muted` | `boolean` | `false` | Whether audio is muted |
|
|
50
|
-
| `state` | `PodcastPlayerState` | `'stopped'` | Current playback state (
|
|
51
|
-
| `episodes` | `PodcastEpisode[]` | `[]` | Array of episodes (set via
|
|
52
|
-
| `currentEpisodeIndex` (attr: `current-episode-index`) | `number` | `
|
|
35
|
+
| `state` | `PodcastPlayerState` | `'stopped'` | Current playback state (not a decorated property) |
|
|
36
|
+
| `episodes` | `PodcastEpisode[]` | `[]` | Array of episodes (set via JS) |
|
|
37
|
+
| `currentEpisodeIndex` (attr: `current-episode-index`) | `number` | `-1` | Index of the currently active episode |
|
|
53
38
|
| `sleepTimer` (attr: `sleep-timer`) | `number` | `0` | Sleep timer duration in minutes (0 = disabled) |
|
|
54
39
|
|
|
55
40
|
## Methods
|
|
@@ -70,10 +55,10 @@ import 'snice/components/podcast-player/snice-podcast-player';
|
|
|
70
55
|
| `podcast-play` | `{ player, episode }` | Fired when playback starts |
|
|
71
56
|
| `podcast-pause` | `{ player, episode }` | Fired when playback is paused |
|
|
72
57
|
| `podcast-ended` | `{ player, episode }` | Fired when the current episode ends |
|
|
73
|
-
| `podcast-time-update` | `{ player, currentTime, duration }` | Fired periodically during playback
|
|
58
|
+
| `podcast-time-update` | `{ player, currentTime, duration }` | Fired periodically during playback |
|
|
74
59
|
| `podcast-rate-change` | `{ player, rate }` | Fired when the playback speed changes |
|
|
75
60
|
| `podcast-episode-change` | `{ player, episode, index }` | Fired when a different episode is selected |
|
|
76
|
-
| `podcast-feed-loaded` | `{ player, feed: RSSFeedData }` | Fired when an RSS feed has been parsed
|
|
61
|
+
| `podcast-feed-loaded` | `{ player, feed: RSSFeedData }` | Fired when an RSS feed has been parsed |
|
|
77
62
|
|
|
78
63
|
## CSS Parts
|
|
79
64
|
|
|
@@ -91,10 +76,6 @@ snice-podcast-player::part(base) {
|
|
|
91
76
|
background: #1a1a2e;
|
|
92
77
|
color: white;
|
|
93
78
|
}
|
|
94
|
-
|
|
95
|
-
snice-podcast-player::part(controls) {
|
|
96
|
-
padding: 1rem;
|
|
97
|
-
}
|
|
98
79
|
```
|
|
99
80
|
|
|
100
81
|
## Basic Usage
|
|
@@ -108,33 +89,18 @@ import 'snice/components/podcast-player/snice-podcast-player';
|
|
|
108
89
|
src="/audio/episode.mp3"
|
|
109
90
|
title="Episode 1"
|
|
110
91
|
show="My Podcast"
|
|
92
|
+
artwork="/images/cover.jpg"
|
|
111
93
|
></snice-podcast-player>
|
|
112
94
|
```
|
|
113
95
|
|
|
114
96
|
## Examples
|
|
115
97
|
|
|
116
|
-
### Single Episode Playback
|
|
117
|
-
|
|
118
|
-
Play a single episode by setting the source URL directly.
|
|
119
|
-
|
|
120
|
-
```html
|
|
121
|
-
<snice-podcast-player
|
|
122
|
-
src="/audio/episode-42.mp3"
|
|
123
|
-
title="Episode 42: Web Components"
|
|
124
|
-
show="The Dev Podcast"
|
|
125
|
-
artwork="/images/dev-podcast-cover.jpg"
|
|
126
|
-
description="A deep dive into modern web component patterns."
|
|
127
|
-
></snice-podcast-player>
|
|
128
|
-
```
|
|
129
|
-
|
|
130
98
|
### RSS Feed Mode
|
|
131
99
|
|
|
132
|
-
Load an entire podcast from an RSS feed.
|
|
100
|
+
Load an entire podcast from an RSS feed.
|
|
133
101
|
|
|
134
102
|
```html
|
|
135
|
-
<snice-podcast-player
|
|
136
|
-
from-rss="https://example.com/podcast/feed.xml"
|
|
137
|
-
></snice-podcast-player>
|
|
103
|
+
<snice-podcast-player from-rss="https://example.com/podcast/feed.xml"></snice-podcast-player>
|
|
138
104
|
```
|
|
139
105
|
|
|
140
106
|
```typescript
|
|
@@ -146,55 +112,34 @@ player.addEventListener('podcast-feed-loaded', (e) => {
|
|
|
146
112
|
|
|
147
113
|
### Episode List with Chapters
|
|
148
114
|
|
|
149
|
-
Provide
|
|
150
|
-
|
|
151
|
-
```html
|
|
152
|
-
<snice-podcast-player></snice-podcast-player>
|
|
153
|
-
```
|
|
115
|
+
Provide episodes with chapter markers for enhanced navigation.
|
|
154
116
|
|
|
155
117
|
```typescript
|
|
156
118
|
player.show = 'Tech Weekly';
|
|
157
|
-
player.artwork = '/images/tech-weekly.jpg';
|
|
158
|
-
|
|
159
119
|
player.episodes = [
|
|
160
120
|
{
|
|
161
121
|
title: 'Episode 1: Getting Started',
|
|
162
122
|
src: '/audio/ep1.mp3',
|
|
163
123
|
duration: 1800,
|
|
164
|
-
pubDate: '2025-01-15',
|
|
165
124
|
chapters: [
|
|
166
125
|
{ title: 'Intro', startTime: 0 },
|
|
167
126
|
{ title: 'Main Topic', startTime: 120 },
|
|
168
|
-
{ title: 'Q&A', startTime: 1200 }
|
|
169
|
-
{ title: 'Outro', startTime: 1700 }
|
|
127
|
+
{ title: 'Q&A', startTime: 1200 }
|
|
170
128
|
]
|
|
171
129
|
},
|
|
172
|
-
{
|
|
173
|
-
title: 'Episode 2: Advanced Patterns',
|
|
174
|
-
src: '/audio/ep2.mp3',
|
|
175
|
-
duration: 2400,
|
|
176
|
-
pubDate: '2025-01-22'
|
|
177
|
-
},
|
|
178
|
-
{
|
|
179
|
-
title: 'Episode 3: Performance Tips',
|
|
180
|
-
src: '/audio/ep3.mp3',
|
|
181
|
-
duration: 2100,
|
|
182
|
-
pubDate: '2025-01-29'
|
|
183
|
-
}
|
|
130
|
+
{ title: 'Episode 2: Advanced Patterns', src: '/audio/ep2.mp3', duration: 2400 }
|
|
184
131
|
];
|
|
185
|
-
|
|
186
132
|
player.loadEpisode(0);
|
|
187
133
|
```
|
|
188
134
|
|
|
189
|
-
###
|
|
135
|
+
### Custom Skip and Speed
|
|
190
136
|
|
|
191
|
-
Customize skip intervals and playback speed
|
|
137
|
+
Customize skip intervals and initial playback speed.
|
|
192
138
|
|
|
193
139
|
```html
|
|
194
140
|
<snice-podcast-player
|
|
195
141
|
src="/audio/interview.mp3"
|
|
196
|
-
title="Interview
|
|
197
|
-
show="Book Club Podcast"
|
|
142
|
+
title="Interview"
|
|
198
143
|
skip-forward="15"
|
|
199
144
|
skip-back="10"
|
|
200
145
|
playback-rate="1.5"
|
|
@@ -206,22 +151,13 @@ Customize skip intervals and playback speed for different listening preferences.
|
|
|
206
151
|
Listen for playback events to integrate with analytics or custom UI.
|
|
207
152
|
|
|
208
153
|
```typescript
|
|
209
|
-
player.addEventListener('podcast-play', () =>
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
player.addEventListener('podcast-pause', () => {
|
|
214
|
-
console.log('Paused');
|
|
215
|
-
});
|
|
154
|
+
player.addEventListener('podcast-play', () => console.log('Playing'));
|
|
155
|
+
player.addEventListener('podcast-pause', () => console.log('Paused'));
|
|
156
|
+
player.addEventListener('podcast-ended', () => console.log('Finished'));
|
|
216
157
|
|
|
217
158
|
player.addEventListener('podcast-time-update', (e) => {
|
|
218
|
-
const
|
|
219
|
-
|
|
220
|
-
console.log(`Playing: ${percent}%`);
|
|
221
|
-
});
|
|
222
|
-
|
|
223
|
-
player.addEventListener('podcast-ended', () => {
|
|
224
|
-
console.log('Finished');
|
|
159
|
+
const percent = Math.round((e.detail.currentTime / e.detail.duration) * 100);
|
|
160
|
+
console.log(`Progress: ${percent}%`);
|
|
225
161
|
});
|
|
226
162
|
|
|
227
163
|
player.addEventListener('podcast-episode-change', (e) => {
|
|
@@ -229,9 +165,17 @@ player.addEventListener('podcast-episode-change', (e) => {
|
|
|
229
165
|
});
|
|
230
166
|
```
|
|
231
167
|
|
|
232
|
-
##
|
|
168
|
+
## Accessibility
|
|
169
|
+
|
|
170
|
+
- Playback controls (play/pause, skip forward/back) are keyboard accessible
|
|
171
|
+
- Progress bar supports seeking via click
|
|
172
|
+
- Playback speed selector cycles through common speeds (0.5x through 2x)
|
|
173
|
+
- Volume control provides mute toggle and level adjustment
|
|
174
|
+
- Episode list items are interactive and indicate the currently playing episode
|
|
175
|
+
- The player remembers playback position via localStorage, restoring it on reload
|
|
176
|
+
- Chapter markers provide named navigation points within an episode
|
|
233
177
|
|
|
234
|
-
|
|
178
|
+
## Data Types
|
|
235
179
|
|
|
236
180
|
```typescript
|
|
237
181
|
interface PodcastEpisode {
|
|
@@ -243,42 +187,20 @@ interface PodcastEpisode {
|
|
|
243
187
|
duration?: number; // Duration in seconds
|
|
244
188
|
chapters?: PodcastChapter[]; // Chapter markers
|
|
245
189
|
}
|
|
246
|
-
```
|
|
247
|
-
|
|
248
|
-
### PodcastChapter
|
|
249
190
|
|
|
250
|
-
```typescript
|
|
251
191
|
interface PodcastChapter {
|
|
252
|
-
title: string;
|
|
253
|
-
startTime: number;
|
|
254
|
-
endTime?: number;
|
|
255
|
-
artwork?: string;
|
|
192
|
+
title: string; // Chapter title
|
|
193
|
+
startTime: number; // Start time in seconds
|
|
194
|
+
endTime?: number; // End time in seconds
|
|
195
|
+
artwork?: string; // Chapter-specific artwork URL
|
|
256
196
|
}
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
### RSSFeedData
|
|
260
197
|
|
|
261
|
-
```typescript
|
|
262
198
|
interface RSSFeedData {
|
|
263
|
-
title: string;
|
|
264
|
-
artwork?: string;
|
|
265
|
-
description?: string;
|
|
266
|
-
episodes: PodcastEpisode[];
|
|
199
|
+
title: string;
|
|
200
|
+
artwork?: string;
|
|
201
|
+
description?: string;
|
|
202
|
+
episodes: PodcastEpisode[];
|
|
267
203
|
}
|
|
268
|
-
```
|
|
269
204
|
|
|
270
|
-
### PodcastPlayerState
|
|
271
|
-
|
|
272
|
-
```typescript
|
|
273
205
|
type PodcastPlayerState = 'playing' | 'paused' | 'stopped' | 'loading' | 'error';
|
|
274
206
|
```
|
|
275
|
-
|
|
276
|
-
## Accessibility
|
|
277
|
-
|
|
278
|
-
- Playback controls (play/pause, skip forward/back) are keyboard accessible
|
|
279
|
-
- The progress bar supports seeking via click or drag
|
|
280
|
-
- Playback speed selector allows choosing from common speed options (0.5x through 2x)
|
|
281
|
-
- Volume control provides mute toggle and level adjustment
|
|
282
|
-
- Episode list items are interactive and indicate the currently playing episode
|
|
283
|
-
- The player remembers playback position via localStorage, restoring it on reload
|
|
284
|
-
- Chapter markers provide named navigation points within an episode
|
|
@@ -1,77 +1,84 @@
|
|
|
1
|
-
<!-- AI: For
|
|
1
|
+
<!-- AI: For the AI-optimized version of this doc, see docs/ai/components/pricing-table.md -->
|
|
2
2
|
|
|
3
|
-
# Pricing Table
|
|
3
|
+
# Pricing Table
|
|
4
|
+
`<snice-pricing-table>`
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
A pricing comparison component with cards or table layout, monthly/annual billing toggle, highlighted plans, badges, and declarative child elements.
|
|
6
7
|
|
|
7
8
|
## Table of Contents
|
|
8
9
|
- [Properties](#properties)
|
|
10
|
+
- [Components](#components)
|
|
9
11
|
- [Events](#events)
|
|
10
12
|
- [CSS Parts](#css-parts)
|
|
11
13
|
- [Basic Usage](#basic-usage)
|
|
12
14
|
- [Examples](#examples)
|
|
13
|
-
- [Child Elements](#child-elements)
|
|
14
15
|
- [Accessibility](#accessibility)
|
|
16
|
+
- [Data Types](#data-types)
|
|
15
17
|
|
|
16
18
|
## Properties
|
|
17
19
|
|
|
18
20
|
| Property | Type | Default | Description |
|
|
19
21
|
|----------|------|---------|-------------|
|
|
20
|
-
| `plans` | `PricingPlan[]` | `[]` | Plan data array (for programmatic usage) |
|
|
22
|
+
| `plans` | `PricingPlan[]` | `[]` | Plan data array (set via JS for programmatic usage) |
|
|
21
23
|
| `variant` | `'cards' \| 'table'` | `'cards'` | Layout variant |
|
|
22
24
|
| `annual` | `boolean` | `false` | Whether to show annual pricing |
|
|
23
25
|
|
|
24
|
-
|
|
26
|
+
## Components
|
|
25
27
|
|
|
26
|
-
|
|
27
|
-
interface PricingPlan {
|
|
28
|
-
name: string;
|
|
29
|
-
price: number;
|
|
30
|
-
annualPrice?: number; // Enables the billing toggle when set
|
|
31
|
-
period?: string; // e.g. '/mo' (default: '/mo')
|
|
32
|
-
currency?: string; // e.g. '$' (default: '$')
|
|
33
|
-
description?: string;
|
|
34
|
-
features: PricingFeature[];
|
|
35
|
-
cta: string; // Call-to-action button text
|
|
36
|
-
ctaVariant?: 'primary' | 'secondary' | 'outline';
|
|
37
|
-
highlighted?: boolean; // Emphasize this plan
|
|
38
|
-
badge?: string; // e.g. 'Popular', 'Best Value'
|
|
39
|
-
}
|
|
28
|
+
### `<snice-plan>`
|
|
40
29
|
|
|
41
|
-
|
|
42
|
-
name: string;
|
|
43
|
-
included: boolean | string; // true/false for check/x, string for custom value
|
|
44
|
-
}
|
|
45
|
-
```
|
|
30
|
+
Declarative child element for defining plans.
|
|
46
31
|
|
|
47
|
-
|
|
32
|
+
| Attribute | Type | Description |
|
|
33
|
+
|-----------|------|-------------|
|
|
34
|
+
| `name` | `string` | Plan name |
|
|
35
|
+
| `price` | `string` | Monthly price |
|
|
36
|
+
| `annual-price` | `string` | Annual price (enables billing toggle) |
|
|
37
|
+
| `period` | `string` | Billing period label (default: '/mo') |
|
|
38
|
+
| `currency` | `string` | Currency symbol (default: '$') |
|
|
39
|
+
| `description` | `string` | Plan description |
|
|
40
|
+
| `cta` | `string` | Call-to-action button text |
|
|
41
|
+
| `cta-variant` | `'primary' \| 'secondary' \| 'outline'` | Button variant |
|
|
42
|
+
| `highlighted` | `boolean` | Emphasize this plan |
|
|
43
|
+
| `badge` | `string` | Badge text (e.g. 'Popular') |
|
|
48
44
|
|
|
49
|
-
|
|
50
|
-
Fired when a plan's call-to-action button is clicked.
|
|
45
|
+
### `<snice-feature>`
|
|
51
46
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
47
|
+
Declarative child element for defining plan features.
|
|
48
|
+
|
|
49
|
+
| Attribute | Type | Description |
|
|
50
|
+
|-----------|------|-------------|
|
|
51
|
+
| `excluded` | `boolean` | Mark feature as not included (shows X instead of check) |
|
|
52
|
+
| `value` | `string` | Custom display value (e.g. '1GB', '100GB') |
|
|
53
|
+
|
|
54
|
+
The text content of `<snice-feature>` is used as the feature name.
|
|
55
|
+
|
|
56
|
+
## Events
|
|
57
|
+
|
|
58
|
+
| Event | Detail | Description |
|
|
59
|
+
|-------|--------|-------------|
|
|
60
|
+
| `plan-select` | `{ plan: PricingPlan, index: number, billing: 'monthly' \| 'annual' }` | Fired when a plan's CTA button is clicked |
|
|
60
61
|
|
|
61
62
|
## CSS Parts
|
|
62
63
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
|
66
|
-
|
|
67
|
-
| `
|
|
68
|
-
| `
|
|
69
|
-
| `
|
|
70
|
-
| `
|
|
71
|
-
| `
|
|
64
|
+
Style internal elements from outside the shadow DOM using `::part()`.
|
|
65
|
+
|
|
66
|
+
| Part | Element | Description |
|
|
67
|
+
|------|---------|-------------|
|
|
68
|
+
| `base` | `<div>` | The outer container |
|
|
69
|
+
| `cards` | `<div>` | The cards layout container |
|
|
70
|
+
| `card` | `<div>` | Individual plan card |
|
|
71
|
+
| `cta` | `<button>` | Call-to-action button |
|
|
72
|
+
| `toggle` | `<div>` | Billing toggle switch area |
|
|
73
|
+
| `table-wrapper` | `<div>` | Table layout wrapper |
|
|
74
|
+
| `table` | `<table>` | The comparison table element |
|
|
72
75
|
|
|
73
76
|
## Basic Usage
|
|
74
77
|
|
|
78
|
+
```typescript
|
|
79
|
+
import 'snice/components/pricing-table/snice-pricing-table';
|
|
80
|
+
```
|
|
81
|
+
|
|
75
82
|
```html
|
|
76
83
|
<snice-pricing-table>
|
|
77
84
|
<snice-plan name="Free" price="0" cta="Get Started">
|
|
@@ -85,13 +92,9 @@ Fired when a plan's call-to-action button is clicked.
|
|
|
85
92
|
</snice-pricing-table>
|
|
86
93
|
```
|
|
87
94
|
|
|
88
|
-
```typescript
|
|
89
|
-
import 'snice/components/pricing-table/snice-pricing-table';
|
|
90
|
-
```
|
|
91
|
-
|
|
92
95
|
## Examples
|
|
93
96
|
|
|
94
|
-
### Cards
|
|
97
|
+
### Cards with Billing Toggle
|
|
95
98
|
|
|
96
99
|
Use `annual-price` on plans to enable the monthly/annual billing toggle.
|
|
97
100
|
|
|
@@ -101,26 +104,23 @@ Use `annual-price` on plans to enable the monthly/annual billing toggle.
|
|
|
101
104
|
<snice-feature>5 projects</snice-feature>
|
|
102
105
|
<snice-feature value="1GB">Storage</snice-feature>
|
|
103
106
|
<snice-feature excluded>Priority support</snice-feature>
|
|
104
|
-
<snice-feature excluded>API access</snice-feature>
|
|
105
107
|
</snice-plan>
|
|
106
108
|
<snice-plan name="Pro" price="29" annual-price="24" highlighted badge="Popular" cta="Start Trial" cta-variant="primary">
|
|
107
109
|
<snice-feature>Unlimited projects</snice-feature>
|
|
108
110
|
<snice-feature value="100GB">Storage</snice-feature>
|
|
109
111
|
<snice-feature>Priority support</snice-feature>
|
|
110
|
-
<snice-feature>API access</snice-feature>
|
|
111
112
|
</snice-plan>
|
|
112
113
|
<snice-plan name="Enterprise" price="99" annual-price="79" cta="Contact Sales">
|
|
113
114
|
<snice-feature>Unlimited projects</snice-feature>
|
|
114
115
|
<snice-feature value="Unlimited">Storage</snice-feature>
|
|
115
116
|
<snice-feature>Priority support</snice-feature>
|
|
116
|
-
<snice-feature>API access</snice-feature>
|
|
117
117
|
</snice-plan>
|
|
118
118
|
</snice-pricing-table>
|
|
119
119
|
```
|
|
120
120
|
|
|
121
121
|
### Table Layout
|
|
122
122
|
|
|
123
|
-
Use
|
|
123
|
+
Use `variant="table"` for a feature comparison table view.
|
|
124
124
|
|
|
125
125
|
```html
|
|
126
126
|
<snice-pricing-table variant="table">
|
|
@@ -129,7 +129,7 @@ Use the `variant="table"` attribute for a comparison table view.
|
|
|
129
129
|
<snice-feature value="5GB">Storage</snice-feature>
|
|
130
130
|
<snice-feature excluded>Analytics</snice-feature>
|
|
131
131
|
</snice-plan>
|
|
132
|
-
<snice-plan name="Business" price="49" cta="Choose Business" highlighted badge="Best Value"
|
|
132
|
+
<snice-plan name="Business" price="49" cta="Choose Business" highlighted badge="Best Value">
|
|
133
133
|
<snice-feature>50 users</snice-feature>
|
|
134
134
|
<snice-feature value="50GB">Storage</snice-feature>
|
|
135
135
|
<snice-feature>Analytics</snice-feature>
|
|
@@ -141,101 +141,58 @@ Use the `variant="table"` attribute for a comparison table view.
|
|
|
141
141
|
|
|
142
142
|
Set plans via JavaScript for dynamic pricing data.
|
|
143
143
|
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
highlighted: true,
|
|
169
|
-
badge: 'Popular',
|
|
170
|
-
features: [
|
|
171
|
-
{ name: 'Unlimited projects', included: true },
|
|
172
|
-
{ name: 'API access', included: true },
|
|
173
|
-
{ name: 'Storage', included: '100GB' }
|
|
174
|
-
]
|
|
175
|
-
}
|
|
176
|
-
];
|
|
177
|
-
|
|
178
|
-
table.addEventListener('plan-select', (e) => {
|
|
179
|
-
console.log(`Selected: ${e.detail.plan.name} (${e.detail.billing})`);
|
|
180
|
-
});
|
|
181
|
-
</script>
|
|
182
|
-
```
|
|
183
|
-
|
|
184
|
-
### Handling Plan Selection
|
|
185
|
-
|
|
186
|
-
```html
|
|
187
|
-
<snice-pricing-table id="plans">
|
|
188
|
-
<snice-plan name="Monthly" price="15" cta="Subscribe" cta-variant="primary">
|
|
189
|
-
<snice-feature>All features included</snice-feature>
|
|
190
|
-
<snice-feature>Email support</snice-feature>
|
|
191
|
-
</snice-plan>
|
|
192
|
-
<snice-plan name="Annual" price="12" cta="Save 20%" cta-variant="primary" highlighted badge="Save 20%">
|
|
193
|
-
<snice-feature>All features included</snice-feature>
|
|
194
|
-
<snice-feature>Priority support</snice-feature>
|
|
195
|
-
</snice-plan>
|
|
196
|
-
</snice-pricing-table>
|
|
197
|
-
|
|
198
|
-
<script type="module">
|
|
199
|
-
const table = document.getElementById('plans');
|
|
200
|
-
table.addEventListener('plan-select', (e) => {
|
|
201
|
-
const { plan, billing } = e.detail;
|
|
202
|
-
// Navigate to checkout
|
|
203
|
-
window.location.href = `/checkout?plan=${plan.name.toLowerCase()}&billing=${billing}`;
|
|
204
|
-
});
|
|
205
|
-
</script>
|
|
144
|
+
```typescript
|
|
145
|
+
table.plans = [
|
|
146
|
+
{
|
|
147
|
+
name: 'Free', price: 0, cta: 'Get Started',
|
|
148
|
+
features: [
|
|
149
|
+
{ name: '5 projects', included: true },
|
|
150
|
+
{ name: 'API access', included: false },
|
|
151
|
+
{ name: 'Storage', included: '1GB' }
|
|
152
|
+
]
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
name: 'Pro', price: 29, annualPrice: 24, cta: 'Start Trial',
|
|
156
|
+
ctaVariant: 'primary', highlighted: true, badge: 'Popular',
|
|
157
|
+
features: [
|
|
158
|
+
{ name: 'Unlimited projects', included: true },
|
|
159
|
+
{ name: 'API access', included: true },
|
|
160
|
+
{ name: 'Storage', included: '100GB' }
|
|
161
|
+
]
|
|
162
|
+
}
|
|
163
|
+
];
|
|
164
|
+
|
|
165
|
+
table.addEventListener('plan-select', (e) => {
|
|
166
|
+
console.log(`Selected: ${e.detail.plan.name} (${e.detail.billing})`);
|
|
167
|
+
});
|
|
206
168
|
```
|
|
207
169
|
|
|
208
|
-
##
|
|
209
|
-
|
|
210
|
-
The pricing table supports declarative usage via `<snice-plan>` and `<snice-feature>` child elements as an alternative to setting the `plans` property.
|
|
211
|
-
|
|
212
|
-
### `<snice-plan>`
|
|
213
|
-
|
|
214
|
-
| Attribute | Type | Description |
|
|
215
|
-
|-----------|------|-------------|
|
|
216
|
-
| `name` | `string` | Plan name |
|
|
217
|
-
| `price` | `string` | Monthly price |
|
|
218
|
-
| `annual-price` | `string` | Annual price (enables billing toggle) |
|
|
219
|
-
| `period` | `string` | Billing period label (default: '/mo') |
|
|
220
|
-
| `currency` | `string` | Currency symbol (default: '$') |
|
|
221
|
-
| `description` | `string` | Plan description |
|
|
222
|
-
| `cta` | `string` | Call-to-action button text |
|
|
223
|
-
| `cta-variant` | `'primary' \| 'secondary' \| 'outline'` | Button variant |
|
|
224
|
-
| `highlighted` | `boolean` | Emphasize this plan |
|
|
225
|
-
| `badge` | `string` | Badge text (e.g. 'Popular') |
|
|
226
|
-
|
|
227
|
-
### `<snice-feature>`
|
|
170
|
+
## Accessibility
|
|
228
171
|
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
172
|
+
- Tab through plans and activate CTA buttons with Enter or Space
|
|
173
|
+
- Plan names, prices, and feature inclusion states are announced to screen readers
|
|
174
|
+
- The billing toggle is keyboard accessible with `role="radiogroup"`
|
|
175
|
+
- Highlighted plans are visually distinguished through styling
|
|
233
176
|
|
|
234
|
-
|
|
177
|
+
## Data Types
|
|
235
178
|
|
|
236
|
-
|
|
179
|
+
```typescript
|
|
180
|
+
interface PricingPlan {
|
|
181
|
+
name: string;
|
|
182
|
+
price: number;
|
|
183
|
+
annualPrice?: number; // Enables billing toggle when set
|
|
184
|
+
period?: string; // e.g. '/mo' (default: '/mo')
|
|
185
|
+
currency?: string; // e.g. '$' (default: '$')
|
|
186
|
+
description?: string;
|
|
187
|
+
features: PricingFeature[];
|
|
188
|
+
cta: string; // Button text
|
|
189
|
+
ctaVariant?: 'primary' | 'secondary' | 'outline';
|
|
190
|
+
highlighted?: boolean;
|
|
191
|
+
badge?: string;
|
|
192
|
+
}
|
|
237
193
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
194
|
+
interface PricingFeature {
|
|
195
|
+
name: string;
|
|
196
|
+
included: boolean | string; // true/false for check/x, string for custom value
|
|
197
|
+
}
|
|
198
|
+
```
|