snice 4.28.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 +1 -1
- package/dist/cdn/badge/snice-badge.min.js +1 -1
- package/dist/cdn/banner/snice-banner.js +1 -1
- package/dist/cdn/banner/snice-banner.min.js +1 -1
- package/dist/cdn/binpack/README.md +27 -0
- package/dist/cdn/binpack/snice-binpack.js +1037 -0
- package/dist/cdn/binpack/snice-binpack.js.map +1 -0
- package/dist/cdn/binpack/snice-binpack.min.js +13 -0
- package/dist/cdn/binpack/snice-binpack.min.js.map +1 -0
- package/dist/cdn/book/snice-book.js +1 -1
- package/dist/cdn/book/snice-book.min.js +1 -1
- package/dist/cdn/booking/snice-booking.js +1 -1
- package/dist/cdn/booking/snice-booking.min.js +1 -1
- package/dist/cdn/breadcrumbs/snice-breadcrumbs.js +1 -1
- package/dist/cdn/breadcrumbs/snice-breadcrumbs.min.js +1 -1
- package/dist/cdn/button/README.md +1 -1
- package/dist/cdn/button/snice-button.js +2 -2
- package/dist/cdn/button/snice-button.js.map +1 -1
- package/dist/cdn/button/snice-button.min.js +2 -2
- package/dist/cdn/button/snice-button.min.js.map +1 -1
- package/dist/cdn/calendar/snice-calendar.js +1 -1
- package/dist/cdn/calendar/snice-calendar.min.js +1 -1
- package/dist/cdn/camera/snice-camera.js +1 -1
- package/dist/cdn/camera/snice-camera.min.js +1 -1
- package/dist/cdn/camera-annotate/snice-camera-annotate.js +1 -1
- package/dist/cdn/camera-annotate/snice-camera-annotate.min.js +1 -1
- package/dist/cdn/candlestick/snice-candlestick.js +1 -1
- package/dist/cdn/candlestick/snice-candlestick.min.js +1 -1
- package/dist/cdn/card/snice-card.js +1 -1
- package/dist/cdn/card/snice-card.min.js +1 -1
- package/dist/cdn/carousel/snice-carousel.js +1 -1
- package/dist/cdn/carousel/snice-carousel.min.js +1 -1
- package/dist/cdn/cart/snice-cart.js +1 -1
- package/dist/cdn/cart/snice-cart.min.js +1 -1
- package/dist/cdn/chart/snice-chart.js +1 -1
- package/dist/cdn/chart/snice-chart.min.js +1 -1
- package/dist/cdn/chat/snice-chat.js +1 -1
- package/dist/cdn/chat/snice-chat.min.js +1 -1
- package/dist/cdn/checkbox/snice-checkbox.js +1 -1
- package/dist/cdn/checkbox/snice-checkbox.min.js +1 -1
- package/dist/cdn/chip/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 +2 -2
- package/dist/cdn/login/snice-login.js.map +1 -1
- package/dist/cdn/login/snice-login.min.js +2 -2
- package/dist/cdn/login/snice-login.min.js.map +1 -1
- package/dist/cdn/map/snice-map.js +1 -1
- package/dist/cdn/map/snice-map.min.js +1 -1
- package/dist/cdn/markdown/snice-markdown.js +1 -1
- package/dist/cdn/markdown/snice-markdown.min.js +1 -1
- package/dist/cdn/masonry/snice-masonry.js +1 -1
- package/dist/cdn/masonry/snice-masonry.min.js +1 -1
- package/dist/cdn/menu/snice-menu.js +1 -1
- package/dist/cdn/menu/snice-menu.min.js +1 -1
- package/dist/cdn/message-strip/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 +73 -5
- 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 +73 -4
- package/dist/cdn/runtime/snice-runtime.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.min.js +7 -7
- package/dist/cdn/runtime/snice-runtime.min.js.map +1 -1
- package/dist/cdn/sankey/snice-sankey.js +1 -1
- package/dist/cdn/sankey/snice-sankey.min.js +1 -1
- package/dist/cdn/segmented-control/snice-segmented-control.js +1 -1
- package/dist/cdn/segmented-control/snice-segmented-control.min.js +1 -1
- package/dist/cdn/select/snice-select.js +1 -1
- package/dist/cdn/select/snice-select.min.js +1 -1
- package/dist/cdn/skeleton/snice-skeleton.js +1 -1
- package/dist/cdn/skeleton/snice-skeleton.min.js +1 -1
- package/dist/cdn/slider/snice-slider.js +1 -1
- package/dist/cdn/slider/snice-slider.min.js +1 -1
- package/dist/cdn/sortable/snice-sortable.js +1 -1
- package/dist/cdn/sortable/snice-sortable.min.js +1 -1
- package/dist/cdn/sparkline/snice-sparkline.js +1 -1
- package/dist/cdn/sparkline/snice-sparkline.min.js +1 -1
- package/dist/cdn/spinner/snice-spinner.js +1 -1
- package/dist/cdn/spinner/snice-spinner.min.js +1 -1
- package/dist/cdn/split-button/snice-split-button.js +1 -1
- package/dist/cdn/split-button/snice-split-button.min.js +1 -1
- package/dist/cdn/split-pane/snice-split-pane.js +1 -1
- package/dist/cdn/split-pane/snice-split-pane.min.js +1 -1
- package/dist/cdn/spotlight/snice-spotlight.js +1 -1
- package/dist/cdn/spotlight/snice-spotlight.min.js +1 -1
- package/dist/cdn/spreadsheet/snice-spreadsheet.js +1 -1
- package/dist/cdn/spreadsheet/snice-spreadsheet.min.js +1 -1
- package/dist/cdn/stat-group/snice-stat-group.js +1 -1
- package/dist/cdn/stat-group/snice-stat-group.min.js +1 -1
- package/dist/cdn/step-input/snice-step-input.js +1 -1
- package/dist/cdn/step-input/snice-step-input.min.js +1 -1
- package/dist/cdn/stepper/snice-stepper.js +1 -1
- package/dist/cdn/stepper/snice-stepper.min.js +1 -1
- package/dist/cdn/switch/snice-switch.js +1 -1
- package/dist/cdn/switch/snice-switch.min.js +1 -1
- package/dist/cdn/table/README.md +1 -1
- package/dist/cdn/table/snice-table.js +2 -2
- package/dist/cdn/table/snice-table.js.map +1 -1
- package/dist/cdn/table/snice-table.min.js +2 -2
- package/dist/cdn/table/snice-table.min.js.map +1 -1
- package/dist/cdn/tabs/snice-tabs.js +1 -1
- package/dist/cdn/tabs/snice-tabs.min.js +1 -1
- package/dist/cdn/tag/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/binpack/snice-binpack.d.ts +82 -0
- package/dist/components/binpack/snice-binpack.js +970 -0
- package/dist/components/binpack/snice-binpack.js.map +1 -0
- package/dist/components/binpack/snice-binpack.types.d.ts +52 -0
- package/dist/components/button/snice-button.js +1 -1
- package/dist/components/button/snice-button.js.map +1 -1
- package/dist/create-request-handler.d.ts +42 -0
- package/dist/index.cjs +70 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.esm.js +70 -2
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +70 -1
- package/dist/index.iife.js.map +1 -1
- 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 +1 -1
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
<!-- AI: For
|
|
1
|
+
<!-- AI: For the AI-optimized version of this doc, see docs/ai/components/recipe.md -->
|
|
2
2
|
|
|
3
|
-
# Recipe
|
|
3
|
+
# Recipe
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
An interactive recipe card with ingredient scaling, step-by-step mode with per-step timers, ingredient checkboxes, and optional nutrition facts.
|
|
6
6
|
|
|
7
7
|
## Table of Contents
|
|
8
|
+
|
|
8
9
|
- [Properties](#properties)
|
|
9
10
|
- [Methods](#methods)
|
|
10
11
|
- [Events](#events)
|
|
@@ -27,104 +28,53 @@ The recipe component displays an interactive recipe card with a hero image, ingr
|
|
|
27
28
|
| `difficulty` | `'easy' \| 'medium' \| 'hard'` | `'medium'` | Difficulty level |
|
|
28
29
|
| `cuisine` | `string` | `''` | Cuisine type (displayed as a tag) |
|
|
29
30
|
| `variant` | `'card' \| 'full'` | `'full'` | Display variant |
|
|
30
|
-
| `ingredients` | `RecipeIngredient[]` | `[]` | Ingredient list |
|
|
31
|
-
| `steps` | `RecipeStep[]` | `[]` | Instruction steps |
|
|
32
|
-
| `nutrition` | `RecipeNutrition \| null` | `null` | Nutrition facts per serving |
|
|
33
|
-
| `tags` | `string[]` | `[]` | Recipe tags |
|
|
31
|
+
| `ingredients` | `RecipeIngredient[]` | `[]` | Ingredient list (JS only) |
|
|
32
|
+
| `steps` | `RecipeStep[]` | `[]` | Instruction steps (JS only) |
|
|
33
|
+
| `nutrition` | `RecipeNutrition \| null` | `null` | Nutrition facts per serving (JS only) |
|
|
34
|
+
| `tags` | `string[]` | `[]` | Recipe tags (JS only) |
|
|
34
35
|
|
|
35
|
-
###
|
|
36
|
+
### Type Interfaces
|
|
36
37
|
|
|
37
38
|
```typescript
|
|
38
39
|
interface RecipeIngredient {
|
|
39
40
|
name: string;
|
|
40
41
|
amount: number;
|
|
41
42
|
unit: string;
|
|
42
|
-
group?: string; // Group header
|
|
43
|
+
group?: string; // Group header (e.g. 'Sauce', 'Dough')
|
|
43
44
|
}
|
|
44
|
-
```
|
|
45
45
|
|
|
46
|
-
### RecipeStep Interface
|
|
47
|
-
|
|
48
|
-
```typescript
|
|
49
46
|
interface RecipeStep {
|
|
50
47
|
text: string;
|
|
51
48
|
image?: string; // Step photo URL
|
|
52
49
|
tip?: string; // Pro tip text
|
|
53
|
-
time?: number; // Timer duration in minutes
|
|
50
|
+
time?: number; // Timer duration in minutes
|
|
54
51
|
}
|
|
55
|
-
```
|
|
56
|
-
|
|
57
|
-
### RecipeNutrition Interface
|
|
58
52
|
|
|
59
|
-
```typescript
|
|
60
53
|
interface RecipeNutrition {
|
|
61
54
|
calories: number;
|
|
62
|
-
protein: number; //
|
|
63
|
-
carbs: number; //
|
|
64
|
-
fat: number; //
|
|
65
|
-
fiber?: number; //
|
|
66
|
-
sodium?: number; //
|
|
55
|
+
protein: number; // grams
|
|
56
|
+
carbs: number; // grams
|
|
57
|
+
fat: number; // grams
|
|
58
|
+
fiber?: number; // grams
|
|
59
|
+
sodium?: number; // mg
|
|
67
60
|
}
|
|
68
61
|
```
|
|
69
62
|
|
|
70
63
|
## Methods
|
|
71
64
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
#### `print(): void`
|
|
80
|
-
Open a print-friendly view of the recipe.
|
|
81
|
-
|
|
82
|
-
```typescript
|
|
83
|
-
recipe.print();
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
#### `reset(): void`
|
|
87
|
-
Reset all checked ingredients, completed steps, running timers, and serving count back to defaults.
|
|
88
|
-
|
|
89
|
-
```typescript
|
|
90
|
-
recipe.reset();
|
|
91
|
-
```
|
|
65
|
+
| Method | Arguments | Description |
|
|
66
|
+
|--------|-----------|-------------|
|
|
67
|
+
| `setServings()` | `count: number` | Adjust serving count; all ingredient quantities scale proportionally |
|
|
68
|
+
| `print()` | — | Open a print-friendly view |
|
|
69
|
+
| `reset()` | — | Reset checked ingredients, completed steps, timers, and serving count |
|
|
92
70
|
|
|
93
71
|
## Events
|
|
94
72
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
{
|
|
101
|
-
servings: number; // New serving count
|
|
102
|
-
previousServings: number; // Previous serving count
|
|
103
|
-
}
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
#### `recipe-step-complete`
|
|
107
|
-
Fired when a step is marked as complete or incomplete.
|
|
108
|
-
|
|
109
|
-
**Event Detail:**
|
|
110
|
-
```typescript
|
|
111
|
-
{
|
|
112
|
-
stepIndex: number; // Zero-based step index
|
|
113
|
-
completed: boolean; // Whether the step is now completed
|
|
114
|
-
}
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
#### `recipe-ingredient-check`
|
|
118
|
-
Fired when an ingredient checkbox is toggled.
|
|
119
|
-
|
|
120
|
-
**Event Detail:**
|
|
121
|
-
```typescript
|
|
122
|
-
{
|
|
123
|
-
ingredientIndex: number; // Zero-based ingredient index
|
|
124
|
-
checked: boolean; // Whether the ingredient is now checked
|
|
125
|
-
ingredient: RecipeIngredient; // The ingredient object
|
|
126
|
-
}
|
|
127
|
-
```
|
|
73
|
+
| Event | Detail | Description |
|
|
74
|
+
|-------|--------|-------------|
|
|
75
|
+
| `recipe-serving-change` | `{ servings: number, previousServings: number }` | Serving count changed |
|
|
76
|
+
| `recipe-step-complete` | `{ stepIndex: number, completed: boolean }` | Step marked complete or incomplete |
|
|
77
|
+
| `recipe-ingredient-check` | `{ ingredientIndex: number, checked: boolean, ingredient: RecipeIngredient }` | Ingredient checkbox toggled |
|
|
128
78
|
|
|
129
79
|
## CSS Parts
|
|
130
80
|
|
|
@@ -132,76 +82,71 @@ Fired when an ingredient checkbox is toggled.
|
|
|
132
82
|
|------|-------------|
|
|
133
83
|
| `container` | The outer recipe container |
|
|
134
84
|
| `hero` | The hero image area |
|
|
135
|
-
| `header` | Title and
|
|
85
|
+
| `header` | Title, description, and author section |
|
|
136
86
|
| `meta` | Metadata bar (prep time, cook time, servings, difficulty) |
|
|
137
87
|
| `content` | Main content area (ingredients + steps) |
|
|
138
88
|
| `ingredients` | Ingredients section |
|
|
139
89
|
| `steps` | Steps/instructions section |
|
|
140
90
|
| `nutrition` | Nutrition facts panel |
|
|
141
|
-
| `controls` |
|
|
91
|
+
| `controls` | Bottom control buttons (step-by-step, print, reset) |
|
|
142
92
|
|
|
143
93
|
## Basic Usage
|
|
144
94
|
|
|
95
|
+
```typescript
|
|
96
|
+
import 'snice/components/recipe/snice-recipe';
|
|
97
|
+
```
|
|
98
|
+
|
|
145
99
|
```html
|
|
146
100
|
<snice-recipe id="my-recipe"></snice-recipe>
|
|
147
|
-
|
|
148
|
-
<script type="module">
|
|
149
|
-
import 'snice/components/recipe/snice-recipe';
|
|
150
|
-
|
|
151
|
-
const recipe = document.getElementById('my-recipe');
|
|
152
|
-
recipe.title = 'Pasta Carbonara';
|
|
153
|
-
recipe.prepTime = 10;
|
|
154
|
-
recipe.cookTime = 20;
|
|
155
|
-
recipe.servings = 4;
|
|
156
|
-
recipe.ingredients = [
|
|
157
|
-
{ name: 'Spaghetti', amount: 400, unit: 'g' },
|
|
158
|
-
{ name: 'Pancetta', amount: 200, unit: 'g' }
|
|
159
|
-
];
|
|
160
|
-
recipe.steps = [
|
|
161
|
-
{ text: 'Boil pasta in salted water.', time: 10 },
|
|
162
|
-
{ text: 'Fry pancetta until crispy.' }
|
|
163
|
-
];
|
|
164
|
-
</script>
|
|
165
101
|
```
|
|
166
102
|
|
|
167
103
|
```typescript
|
|
168
|
-
|
|
104
|
+
const recipe = document.getElementById('my-recipe');
|
|
105
|
+
recipe.title = 'Pasta Carbonara';
|
|
106
|
+
recipe.prepTime = 10;
|
|
107
|
+
recipe.cookTime = 20;
|
|
108
|
+
recipe.servings = 4;
|
|
109
|
+
recipe.ingredients = [
|
|
110
|
+
{ name: 'Spaghetti', amount: 400, unit: 'g' },
|
|
111
|
+
{ name: 'Pancetta', amount: 200, unit: 'g' }
|
|
112
|
+
];
|
|
113
|
+
recipe.steps = [
|
|
114
|
+
{ text: 'Boil pasta in salted water.', time: 10 },
|
|
115
|
+
{ text: 'Fry pancetta until crispy.' }
|
|
116
|
+
];
|
|
169
117
|
```
|
|
170
118
|
|
|
171
119
|
## Examples
|
|
172
120
|
|
|
173
121
|
### Full Recipe with All Features
|
|
174
122
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
];
|
|
203
|
-
recipe.nutrition = { calories: 650, protein: 28, carbs: 72, fat: 24, fiber: 3 };
|
|
204
|
-
</script>
|
|
123
|
+
Set all properties for a complete recipe with grouped ingredients, step tips, timers, and nutrition.
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
recipe.title = 'Pasta Carbonara';
|
|
127
|
+
recipe.description = 'Classic Italian pasta with a creamy egg and cheese sauce.';
|
|
128
|
+
recipe.image = '/images/carbonara.jpg';
|
|
129
|
+
recipe.author = 'Chef Maria';
|
|
130
|
+
recipe.prepTime = 10;
|
|
131
|
+
recipe.cookTime = 20;
|
|
132
|
+
recipe.servings = 4;
|
|
133
|
+
recipe.difficulty = 'medium';
|
|
134
|
+
recipe.cuisine = 'Italian';
|
|
135
|
+
recipe.tags = ['pasta', 'italian', 'quick'];
|
|
136
|
+
recipe.ingredients = [
|
|
137
|
+
{ name: 'Spaghetti', amount: 400, unit: 'g' },
|
|
138
|
+
{ name: 'Pancetta', amount: 200, unit: 'g' },
|
|
139
|
+
{ name: 'Eggs', amount: 4, unit: '', group: 'Sauce' },
|
|
140
|
+
{ name: 'Parmesan', amount: 100, unit: 'g', group: 'Sauce' },
|
|
141
|
+
{ name: 'Black pepper', amount: 2, unit: 'tsp', group: 'Sauce' }
|
|
142
|
+
];
|
|
143
|
+
recipe.steps = [
|
|
144
|
+
{ text: 'Boil pasta in salted water.', time: 10 },
|
|
145
|
+
{ text: 'Fry pancetta until crispy.', tip: 'Use medium heat to render fat slowly.' },
|
|
146
|
+
{ text: 'Mix eggs and parmesan in a bowl.' },
|
|
147
|
+
{ text: 'Combine all ingredients off heat.', tip: 'The residual heat cooks the egg without scrambling.' }
|
|
148
|
+
];
|
|
149
|
+
recipe.nutrition = { calories: 650, protein: 28, carbs: 72, fat: 24, fiber: 3 };
|
|
205
150
|
```
|
|
206
151
|
|
|
207
152
|
### Card Variant
|
|
@@ -210,105 +155,51 @@ Use `variant="card"` for a compact card display.
|
|
|
210
155
|
|
|
211
156
|
```html
|
|
212
157
|
<snice-recipe id="salad" variant="card"></snice-recipe>
|
|
213
|
-
|
|
214
|
-
<script type="module">
|
|
215
|
-
const recipe = document.getElementById('salad');
|
|
216
|
-
recipe.title = 'Caesar Salad';
|
|
217
|
-
recipe.image = '/images/caesar-salad.jpg';
|
|
218
|
-
recipe.prepTime = 15;
|
|
219
|
-
recipe.cookTime = 0;
|
|
220
|
-
recipe.servings = 2;
|
|
221
|
-
recipe.difficulty = 'easy';
|
|
222
|
-
recipe.cuisine = 'American';
|
|
223
|
-
recipe.ingredients = [
|
|
224
|
-
{ name: 'Romaine lettuce', amount: 1, unit: 'head' },
|
|
225
|
-
{ name: 'Croutons', amount: 100, unit: 'g' },
|
|
226
|
-
{ name: 'Parmesan', amount: 50, unit: 'g' },
|
|
227
|
-
{ name: 'Caesar dressing', amount: 60, unit: 'ml' }
|
|
228
|
-
];
|
|
229
|
-
recipe.steps = [
|
|
230
|
-
{ text: 'Wash and chop the romaine lettuce.' },
|
|
231
|
-
{ text: 'Toss with dressing, croutons, and shaved parmesan.' }
|
|
232
|
-
];
|
|
233
|
-
</script>
|
|
234
158
|
```
|
|
235
159
|
|
|
236
|
-
###
|
|
160
|
+
### Grouped Ingredients
|
|
237
161
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
{ name: 'All-purpose flour', amount: 280, unit: 'g' },
|
|
248
|
-
{ name: 'Butter', amount: 230, unit: 'g' },
|
|
249
|
-
{ name: 'Sugar', amount: 200, unit: 'g' },
|
|
250
|
-
{ name: 'Chocolate chips', amount: 340, unit: 'g' },
|
|
251
|
-
{ name: 'Eggs', amount: 2, unit: '' }
|
|
252
|
-
];
|
|
253
|
-
recipe.steps = [
|
|
254
|
-
{ text: 'Cream butter and sugar together.' },
|
|
255
|
-
{ text: 'Add eggs and mix until combined.' },
|
|
256
|
-
{ text: 'Fold in flour and chocolate chips.' },
|
|
257
|
-
{ text: 'Scoop onto baking sheet and bake.', time: 12 }
|
|
258
|
-
];
|
|
259
|
-
|
|
260
|
-
recipe.addEventListener('recipe-serving-change', (e) => {
|
|
261
|
-
console.log(`Servings changed: ${e.detail.previousServings} -> ${e.detail.servings}`);
|
|
262
|
-
});
|
|
263
|
-
|
|
264
|
-
recipe.addEventListener('recipe-ingredient-check', (e) => {
|
|
265
|
-
console.log(`${e.detail.ingredient.name}: ${e.detail.checked ? 'checked' : 'unchecked'}`);
|
|
266
|
-
});
|
|
267
|
-
</script>
|
|
162
|
+
Use the `group` property on ingredients to create sections.
|
|
163
|
+
|
|
164
|
+
```typescript
|
|
165
|
+
recipe.ingredients = [
|
|
166
|
+
{ name: 'Bread flour', amount: 300, unit: 'g', group: 'Dough' },
|
|
167
|
+
{ name: 'Yeast', amount: 7, unit: 'g', group: 'Dough' },
|
|
168
|
+
{ name: 'Tomatoes', amount: 400, unit: 'g', group: 'Topping' },
|
|
169
|
+
{ name: 'Mozzarella', amount: 200, unit: 'g', group: 'Topping' }
|
|
170
|
+
];
|
|
268
171
|
```
|
|
269
172
|
|
|
270
|
-
###
|
|
173
|
+
### Event Handling
|
|
271
174
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
{ name: 'Olive oil', amount: 2, unit: 'tbsp', group: 'Dough' },
|
|
287
|
-
{ name: 'San Marzano tomatoes', amount: 400, unit: 'g', group: 'Topping' },
|
|
288
|
-
{ name: 'Fresh mozzarella', amount: 200, unit: 'g', group: 'Topping' },
|
|
289
|
-
{ name: 'Fresh basil', amount: 10, unit: 'leaves', group: 'Topping' }
|
|
290
|
-
];
|
|
291
|
-
recipe.steps = [
|
|
292
|
-
{ text: 'Mix flour, yeast, water, and olive oil. Knead for 10 minutes.', time: 10 },
|
|
293
|
-
{ text: 'Let dough rise for 1 hour.', time: 60, tip: 'Cover with a damp cloth in a warm spot.' },
|
|
294
|
-
{ text: 'Crush tomatoes and spread on stretched dough.' },
|
|
295
|
-
{ text: 'Add torn mozzarella and bake at 250C.', time: 15 },
|
|
296
|
-
{ text: 'Add fresh basil after baking.' }
|
|
297
|
-
];
|
|
298
|
-
</script>
|
|
175
|
+
Listen for events to track user interaction with the recipe.
|
|
176
|
+
|
|
177
|
+
```typescript
|
|
178
|
+
recipe.addEventListener('recipe-serving-change', (e) => {
|
|
179
|
+
console.log(`Servings: ${e.detail.previousServings} -> ${e.detail.servings}`);
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
recipe.addEventListener('recipe-ingredient-check', (e) => {
|
|
183
|
+
console.log(`${e.detail.ingredient.name}: ${e.detail.checked ? 'checked' : 'unchecked'}`);
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
recipe.addEventListener('recipe-step-complete', (e) => {
|
|
187
|
+
console.log(`Step ${e.detail.stepIndex}: ${e.detail.completed ? 'done' : 'undone'}`);
|
|
188
|
+
});
|
|
299
189
|
```
|
|
300
190
|
|
|
301
|
-
### Print
|
|
191
|
+
### Print
|
|
302
192
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
193
|
+
Use `print()` to open a print-friendly view.
|
|
194
|
+
|
|
195
|
+
```typescript
|
|
196
|
+
recipe.print();
|
|
306
197
|
```
|
|
307
198
|
|
|
308
199
|
## Accessibility
|
|
309
200
|
|
|
310
|
-
-
|
|
311
|
-
-
|
|
312
|
-
-
|
|
313
|
-
-
|
|
314
|
-
-
|
|
201
|
+
- Ingredient checkboxes and step toggles are keyboard accessible
|
|
202
|
+
- Serving size +/- buttons have `aria-label` attributes
|
|
203
|
+
- Step numbers announce completion state
|
|
204
|
+
- Timer buttons are keyboard focusable
|
|
205
|
+
- Print view produces a clean layout
|
|
@@ -1,28 +1,23 @@
|
|
|
1
|
-
<!-- AI: For
|
|
1
|
+
<!-- AI: For the AI-optimized version of this doc, see docs/ai/components/sankey.md -->
|
|
2
2
|
|
|
3
3
|
# Sankey
|
|
4
|
-
`<snice-sankey>`
|
|
5
4
|
|
|
6
5
|
An SVG-based Sankey diagram for visualizing flow between categories.
|
|
7
6
|
|
|
8
|
-
##
|
|
7
|
+
## Table of Contents
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
```html
|
|
17
|
-
<script src="snice-runtime.min.js"></script>
|
|
18
|
-
<script src="snice-sankey.min.js"></script>
|
|
19
|
-
```
|
|
9
|
+
- [Properties](#properties)
|
|
10
|
+
- [Events](#events)
|
|
11
|
+
- [CSS Parts](#css-parts)
|
|
12
|
+
- [Basic Usage](#basic-usage)
|
|
13
|
+
- [Examples](#examples)
|
|
14
|
+
- [Accessibility](#accessibility)
|
|
20
15
|
|
|
21
16
|
## Properties
|
|
22
17
|
|
|
23
18
|
| Property | Type | Default | Description |
|
|
24
19
|
|----------|------|---------|-------------|
|
|
25
|
-
| `data` | `SankeyData` | `{ nodes: [], links: [] }` | Nodes and links data (
|
|
20
|
+
| `data` | `SankeyData` | `{ nodes: [], links: [] }` | Nodes and links data (JS only) |
|
|
26
21
|
| `nodeWidth` (attr: `node-width`) | `number` | `20` | Width of node rectangles |
|
|
27
22
|
| `nodePadding` (attr: `node-padding`) | `number` | `10` | Vertical padding between nodes |
|
|
28
23
|
| `alignment` | `'left' \| 'right' \| 'center' \| 'justify'` | `'justify'` | Leaf node alignment |
|
|
@@ -30,35 +25,43 @@ import 'snice/components/sankey/snice-sankey';
|
|
|
30
25
|
| `showValues` (attr: `show-values`) | `boolean` | `true` | Show node values |
|
|
31
26
|
| `animation` | `boolean` | `false` | Animate on initial render |
|
|
32
27
|
|
|
28
|
+
### Type Interfaces
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
interface SankeyData {
|
|
32
|
+
nodes: SankeyNode[];
|
|
33
|
+
links: SankeyLink[];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
interface SankeyNode {
|
|
37
|
+
id: string;
|
|
38
|
+
label?: string; // Defaults to id
|
|
39
|
+
color?: string; // Auto-assigned if omitted
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
interface SankeyLink {
|
|
43
|
+
source: string; // Source node id
|
|
44
|
+
target: string; // Target node id
|
|
45
|
+
value: number; // Flow value (determines link width)
|
|
46
|
+
color?: string; // Defaults to source node color
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
33
50
|
## Events
|
|
34
51
|
|
|
35
52
|
| Event | Detail | Description |
|
|
36
53
|
|-------|--------|-------------|
|
|
37
54
|
| `sankey-node-click` | `{ node: SankeyNode }` | Node clicked |
|
|
38
55
|
| `sankey-link-click` | `{ link: SankeyLink }` | Link clicked |
|
|
39
|
-
| `sankey-hover` | `{ type: 'node' \| 'link', item } \| null` | Hover state changed |
|
|
56
|
+
| `sankey-hover` | `{ type: 'node' \| 'link', item } \| null` | Hover state changed (null on mouse leave) |
|
|
40
57
|
|
|
41
58
|
## CSS Parts
|
|
42
59
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
|
46
|
-
|
|
47
|
-
| `
|
|
48
|
-
| `chart` | `<div>` | The SVG chart area |
|
|
49
|
-
| `tooltip` | `<div>` | The hover tooltip showing node/link details |
|
|
50
|
-
|
|
51
|
-
```css
|
|
52
|
-
snice-sankey::part(base) {
|
|
53
|
-
border: 1px solid #e5e7eb;
|
|
54
|
-
border-radius: 8px;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
snice-sankey::part(tooltip) {
|
|
58
|
-
font-size: 0.875rem;
|
|
59
|
-
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
|
|
60
|
-
}
|
|
61
|
-
```
|
|
60
|
+
| Part | Description |
|
|
61
|
+
|------|-------------|
|
|
62
|
+
| `base` | The outer Sankey container |
|
|
63
|
+
| `chart` | The SVG chart area |
|
|
64
|
+
| `tooltip` | The hover tooltip |
|
|
62
65
|
|
|
63
66
|
## Basic Usage
|
|
64
67
|
|
|
@@ -86,9 +89,7 @@ sankey.data = {
|
|
|
86
89
|
|
|
87
90
|
### Energy Flow
|
|
88
91
|
|
|
89
|
-
|
|
90
|
-
<snice-sankey show-labels show-values animation style="height: 400px;"></snice-sankey>
|
|
91
|
-
```
|
|
92
|
+
A multi-level Sankey diagram showing energy sources flowing to consumers.
|
|
92
93
|
|
|
93
94
|
```typescript
|
|
94
95
|
sankey.data = {
|
|
@@ -108,36 +109,12 @@ sankey.data = {
|
|
|
108
109
|
};
|
|
109
110
|
```
|
|
110
111
|
|
|
111
|
-
### Budget Breakdown
|
|
112
|
-
|
|
113
|
-
```html
|
|
114
|
-
<snice-sankey show-labels show-values style="height: 300px;"></snice-sankey>
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
```typescript
|
|
118
|
-
sankey.data = {
|
|
119
|
-
nodes: [
|
|
120
|
-
{ id: 'salary', label: 'Salary', color: '#10b981' },
|
|
121
|
-
{ id: 'housing', label: 'Housing', color: '#ef4444' },
|
|
122
|
-
{ id: 'food', label: 'Food', color: '#f59e0b' },
|
|
123
|
-
{ id: 'savings', label: 'Savings', color: '#06b6d4' }
|
|
124
|
-
],
|
|
125
|
-
links: [
|
|
126
|
-
{ source: 'salary', target: 'housing', value: 1500 },
|
|
127
|
-
{ source: 'salary', target: 'food', value: 600 },
|
|
128
|
-
{ source: 'salary', target: 'savings', value: 900 }
|
|
129
|
-
]
|
|
130
|
-
};
|
|
131
|
-
```
|
|
132
|
-
|
|
133
112
|
### Alignment Options
|
|
134
113
|
|
|
135
|
-
Use
|
|
114
|
+
Use `alignment` to control how leaf nodes are positioned.
|
|
136
115
|
|
|
137
116
|
```html
|
|
138
117
|
<snice-sankey alignment="left" show-labels></snice-sankey>
|
|
139
|
-
<snice-sankey alignment="right" show-labels></snice-sankey>
|
|
140
|
-
<snice-sankey alignment="center" show-labels></snice-sankey>
|
|
141
118
|
<snice-sankey alignment="justify" show-labels></snice-sankey>
|
|
142
119
|
```
|
|
143
120
|
|
|
@@ -151,7 +128,7 @@ Use `node-width` and `node-padding` to adjust the layout.
|
|
|
151
128
|
|
|
152
129
|
### Animation
|
|
153
130
|
|
|
154
|
-
Set
|
|
131
|
+
Set `animation` for animated rendering on initial load.
|
|
155
132
|
|
|
156
133
|
```html
|
|
157
134
|
<snice-sankey animation show-labels show-values></snice-sankey>
|
|
@@ -159,6 +136,8 @@ Set the `animation` attribute for animated rendering.
|
|
|
159
136
|
|
|
160
137
|
### Event Handling
|
|
161
138
|
|
|
139
|
+
Listen for click and hover events on nodes and links.
|
|
140
|
+
|
|
162
141
|
```typescript
|
|
163
142
|
sankey.addEventListener('sankey-node-click', (e) => {
|
|
164
143
|
console.log('Node:', e.detail.node.label);
|
|
@@ -175,24 +154,9 @@ sankey.addEventListener('sankey-hover', (e) => {
|
|
|
175
154
|
});
|
|
176
155
|
```
|
|
177
156
|
|
|
178
|
-
##
|
|
179
|
-
|
|
180
|
-
```typescript
|
|
181
|
-
interface SankeyData {
|
|
182
|
-
nodes: SankeyNode[];
|
|
183
|
-
links: SankeyLink[];
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
interface SankeyNode {
|
|
187
|
-
id: string;
|
|
188
|
-
label?: string; // Defaults to id
|
|
189
|
-
color?: string; // Auto-assigned if omitted
|
|
190
|
-
}
|
|
157
|
+
## Accessibility
|
|
191
158
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
color?: string; // Defaults to source color
|
|
197
|
-
}
|
|
198
|
-
```
|
|
159
|
+
- SVG rendered with `role="img"` and `aria-label`
|
|
160
|
+
- Hover highlights connected nodes/links and dims others
|
|
161
|
+
- Tooltips show node/link details on hover
|
|
162
|
+
- Responsive sizing via `ResizeObserver`
|