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
package/docs/components/draw.md
CHANGED
|
@@ -1,72 +1,84 @@
|
|
|
1
|
-
<!-- AI: For
|
|
1
|
+
<!-- AI: For the AI-optimized version of this doc, see docs/ai/components/draw.md -->
|
|
2
2
|
|
|
3
3
|
# Draw Component
|
|
4
|
+
`<snice-draw>`
|
|
4
5
|
|
|
5
|
-
Canvas drawing with smooth lazy-brush technology.
|
|
6
|
+
Canvas drawing with smooth lazy-brush technology, auto-polygon, and auto-circle detection.
|
|
6
7
|
|
|
7
|
-
##
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
| `strokeWidth` | `number` | `2` | Brush width |
|
|
16
|
-
| `backgroundColor` | `string` | `'#ffffff'` | Canvas background |
|
|
17
|
-
| `lazy` | `boolean` | `false` | Enable lazy brush |
|
|
18
|
-
| `lazyRadius` | `number` | `60` | Lazy brush radius |
|
|
19
|
-
| `friction` | `number` | `0.1` | Lazy brush friction |
|
|
20
|
-
| `smoothing` | `number` | `0.5` | Line smoothing (0-1) |
|
|
21
|
-
| `autoPolygon` | `boolean` | `false` | Enable auto-polygon |
|
|
22
|
-
| `polygonCurvePoints` | `number` | `10` | Polygon curve smoothness (2-30) |
|
|
23
|
-
| `disabled` | `boolean` | `false` | Disable drawing |
|
|
24
|
-
|
|
25
|
-
## Methods
|
|
26
|
-
|
|
27
|
-
### `clear(): void`
|
|
28
|
-
Clear the entire canvas.
|
|
29
|
-
|
|
30
|
-
### `undo(): void`
|
|
31
|
-
Undo last stroke.
|
|
32
|
-
|
|
33
|
-
### `redo(): void`
|
|
34
|
-
Redo previously undone stroke.
|
|
8
|
+
## Table of Contents
|
|
9
|
+
- [Properties](#properties)
|
|
10
|
+
- [Methods](#methods)
|
|
11
|
+
- [Events](#events)
|
|
12
|
+
- [CSS Parts](#css-parts)
|
|
13
|
+
- [Basic Usage](#basic-usage)
|
|
14
|
+
- [Examples](#examples)
|
|
15
|
+
- [Accessibility](#accessibility)
|
|
35
16
|
|
|
36
|
-
|
|
37
|
-
Export as data URL.
|
|
17
|
+
## Properties
|
|
38
18
|
|
|
39
|
-
|
|
40
|
-
|
|
19
|
+
| Property | Attribute | Type | Default | Description |
|
|
20
|
+
|----------|-----------|------|---------|-------------|
|
|
21
|
+
| `width` | `width` | `number` | `800` | Canvas width |
|
|
22
|
+
| `height` | `height` | `number` | `600` | Canvas height |
|
|
23
|
+
| `tool` | `tool` | `DrawTool` | `'pen'` | Drawing tool (`'pen'` \| `'eraser'` \| `'line'` \| `'rectangle'` \| `'circle'` \| `'text'`) |
|
|
24
|
+
| `color` | `color` | `string` | `'#000000'` | Brush color |
|
|
25
|
+
| `strokeWidth` | `stroke-width` | `number` | `2` | Brush width |
|
|
26
|
+
| `backgroundColor` | `background-color` | `string` | `'#ffffff'` | Canvas background |
|
|
27
|
+
| `lazy` | `lazy` | `boolean` | `false` | Enable lazy brush |
|
|
28
|
+
| `lazyRadius` | `lazy-radius` | `number` | `60` | Lazy brush radius |
|
|
29
|
+
| `friction` | `friction` | `number` | `0.1` | Lazy brush friction |
|
|
30
|
+
| `smoothing` | `smoothing` | `number` | `0.5` | Line smoothing (0-1) |
|
|
31
|
+
| `autoPolygon` | `auto-polygon` | `boolean` | `false` | Enable auto-polygon shape completion |
|
|
32
|
+
| `polygonCurvePoints` | `polygon-curve-points` | `number` | `10` | Polygon curve smoothness (2-30) |
|
|
33
|
+
| `autoCircle` | `auto-circle` | `boolean` | `false` | Enable auto-circle detection |
|
|
34
|
+
| `circlePoints` | `circle-points` | `number` | `50` | Circle closing curve smoothness |
|
|
35
|
+
| `disabled` | `disabled` | `boolean` | `false` | Disable drawing |
|
|
36
|
+
|
|
37
|
+
### Types
|
|
41
38
|
|
|
42
|
-
|
|
43
|
-
|
|
39
|
+
```typescript
|
|
40
|
+
type DrawTool = 'pen' | 'eraser' | 'line' | 'rectangle' | 'circle' | 'text';
|
|
44
41
|
|
|
45
|
-
|
|
46
|
-
|
|
42
|
+
interface DrawStroke {
|
|
43
|
+
id: string; // Unique identifier
|
|
44
|
+
tool: DrawTool; // Tool used
|
|
45
|
+
color: string; // Hex color
|
|
46
|
+
width: number; // Stroke width
|
|
47
|
+
points: Point[]; // Array of {x, y, pressure?}
|
|
48
|
+
timestamp: number; // Creation time (ms)
|
|
49
|
+
}
|
|
50
|
+
```
|
|
47
51
|
|
|
48
|
-
|
|
49
|
-
Get all strokes.
|
|
52
|
+
## Methods
|
|
50
53
|
|
|
51
|
-
|
|
52
|
-
|
|
54
|
+
| Method | Arguments | Description |
|
|
55
|
+
|--------|-----------|-------------|
|
|
56
|
+
| `clear()` | -- | Clear the entire canvas |
|
|
57
|
+
| `undo()` | -- | Undo last stroke |
|
|
58
|
+
| `redo()` | -- | Redo previously undone stroke |
|
|
59
|
+
| `toDataURL()` | `type?: string, quality?: number` | Export as data URL |
|
|
60
|
+
| `toBlob()` | `type?: string, quality?: number` | Export as Blob |
|
|
61
|
+
| `download()` | `filename?: string` | Download drawing |
|
|
62
|
+
| `loadImage()` | `url: string` | Load image onto canvas |
|
|
63
|
+
| `getStrokes()` | -- | Get all strokes |
|
|
64
|
+
| `setStrokes()` | `strokes: DrawStroke[]` | Set strokes (for loading saved drawings) |
|
|
53
65
|
|
|
54
66
|
## Events
|
|
55
67
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
68
|
+
| Event | Detail | Description |
|
|
69
|
+
|-------|--------|-------------|
|
|
70
|
+
| `draw-start` | -- | Drawing started |
|
|
71
|
+
| `draw-end` | `{ stroke }` | Drawing ended (stroke complete) |
|
|
72
|
+
| `draw-clear` | -- | Canvas cleared |
|
|
73
|
+
| `draw-undo` | -- | Undo performed |
|
|
74
|
+
| `draw-redo` | -- | Redo performed |
|
|
61
75
|
|
|
62
76
|
## CSS Parts
|
|
63
77
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
|
67
|
-
|
|
68
|
-
| `base` | `<div>` | Outer draw container |
|
|
69
|
-
| `canvas` | `<canvas>` | Drawing canvas element |
|
|
78
|
+
| Part | Description |
|
|
79
|
+
|------|-------------|
|
|
80
|
+
| `base` | Outer draw container |
|
|
81
|
+
| `canvas` | Drawing canvas element |
|
|
70
82
|
|
|
71
83
|
```css
|
|
72
84
|
snice-draw::part(base) {
|
|
@@ -81,31 +93,25 @@ snice-draw::part(canvas) {
|
|
|
81
93
|
|
|
82
94
|
## Basic Usage
|
|
83
95
|
|
|
96
|
+
```typescript
|
|
97
|
+
import 'snice/components/draw/snice-draw';
|
|
98
|
+
```
|
|
99
|
+
|
|
84
100
|
```html
|
|
85
101
|
<snice-draw id="draw" width="800" height="600"></snice-draw>
|
|
86
102
|
```
|
|
87
103
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
// Undo/redo
|
|
93
|
-
draw.undo();
|
|
94
|
-
draw.redo();
|
|
95
|
-
|
|
96
|
-
// Download
|
|
97
|
-
draw.download('my-drawing.png');
|
|
104
|
+
**CDN**
|
|
105
|
+
```html
|
|
106
|
+
<script src="snice-runtime.min.js"></script>
|
|
107
|
+
<script src="snice-draw.min.js"></script>
|
|
98
108
|
```
|
|
99
109
|
|
|
100
110
|
## Examples
|
|
101
111
|
|
|
102
|
-
###
|
|
112
|
+
### Custom Colors and Stroke Width
|
|
103
113
|
|
|
104
|
-
|
|
105
|
-
<snice-draw width="800" height="600"></snice-draw>
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
### Custom Colors
|
|
114
|
+
Use the `color` and `stroke-width` properties to customize the brush.
|
|
109
115
|
|
|
110
116
|
```typescript
|
|
111
117
|
draw.color = '#ff0000';
|
|
@@ -114,6 +120,8 @@ draw.strokeWidth = 5;
|
|
|
114
120
|
|
|
115
121
|
### Toolbar Integration
|
|
116
122
|
|
|
123
|
+
Build a custom toolbar with tool and color controls.
|
|
124
|
+
|
|
117
125
|
```html
|
|
118
126
|
<div>
|
|
119
127
|
<button onclick="draw.tool = 'pen'">Pen</button>
|
|
@@ -127,198 +135,84 @@ draw.strokeWidth = 5;
|
|
|
127
135
|
<snice-draw id="draw"></snice-draw>
|
|
128
136
|
```
|
|
129
137
|
|
|
130
|
-
### Lazy Brush
|
|
138
|
+
### Lazy Brush
|
|
131
139
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
140
|
+
Enable lazy brush for smooth, organic lines by making the brush lag behind the cursor.
|
|
141
|
+
|
|
142
|
+
```html
|
|
143
|
+
<snice-draw lazy lazy-radius="60" friction="0.1" smoothing="0.5"></snice-draw>
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
- Larger radius = smoother, slower response
|
|
147
|
+
- Smaller radius = more control, less smoothing
|
|
148
|
+
- Disable for pixel-perfect control
|
|
149
|
+
|
|
150
|
+
### Auto-Polygon
|
|
135
151
|
|
|
136
|
-
|
|
137
|
-
draw.lazyRadius = 60;
|
|
152
|
+
Enable auto-polygon to automatically close drawn shapes.
|
|
138
153
|
|
|
139
|
-
|
|
140
|
-
draw
|
|
154
|
+
```html
|
|
155
|
+
<snice-draw auto-polygon polygon-curve-points="15"></snice-draw>
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
When you finish drawing, it detects self-intersections and trims at the first crossing point. If start and end points are far apart (>20px), it connects them with a smooth curve. The `polygon-curve-points` value (2-30) controls curve smoothness.
|
|
159
|
+
|
|
160
|
+
### Auto-Circle
|
|
161
|
+
|
|
162
|
+
Enable auto-circle to detect and smooth circular strokes.
|
|
163
|
+
|
|
164
|
+
```html
|
|
165
|
+
<snice-draw auto-circle circle-points="50"></snice-draw>
|
|
141
166
|
```
|
|
142
167
|
|
|
168
|
+
When enabled, strokes are analyzed and converted into smooth circles. The `circle-points` value controls the smoothness of the closing curve.
|
|
169
|
+
|
|
143
170
|
### Export Drawing
|
|
144
171
|
|
|
172
|
+
Use `toDataURL()`, `toBlob()`, or `download()` to export the canvas.
|
|
173
|
+
|
|
145
174
|
```javascript
|
|
146
|
-
// As data URL
|
|
147
175
|
const dataURL = draw.toDataURL('image/png');
|
|
148
|
-
|
|
149
|
-
// As blob
|
|
150
176
|
const blob = await draw.toBlob('image/png', 0.9);
|
|
151
|
-
|
|
152
|
-
// Download
|
|
153
177
|
draw.download('my-artwork.png');
|
|
154
178
|
```
|
|
155
179
|
|
|
156
180
|
### Save and Load
|
|
157
181
|
|
|
158
|
-
|
|
182
|
+
Use `getStrokes()` and `setStrokes()` to persist drawings.
|
|
159
183
|
|
|
160
184
|
```javascript
|
|
161
|
-
// Save
|
|
185
|
+
// Save
|
|
162
186
|
const strokes = draw.getStrokes();
|
|
163
187
|
localStorage.setItem('drawing', JSON.stringify(strokes));
|
|
164
188
|
|
|
165
|
-
// Load
|
|
189
|
+
// Load
|
|
166
190
|
const saved = JSON.parse(localStorage.getItem('drawing'));
|
|
167
191
|
draw.setStrokes(saved);
|
|
168
|
-
|
|
169
|
-
// Access individual strokes by ID
|
|
170
|
-
const strokes = draw.getStrokes();
|
|
171
|
-
console.log(strokes[0].id); // e.g., "stroke-1735216842123-x7k9m2p"
|
|
172
|
-
|
|
173
|
-
// Filter strokes
|
|
174
|
-
const penStrokes = strokes.filter(s => s.tool === 'pen');
|
|
175
|
-
|
|
176
|
-
// Remove specific stroke
|
|
177
|
-
const filtered = strokes.filter(s => s.id !== 'stroke-id-to-remove');
|
|
178
|
-
draw.setStrokes(filtered);
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
**Stroke Structure:**
|
|
182
|
-
|
|
183
|
-
```typescript
|
|
184
|
-
interface DrawStroke {
|
|
185
|
-
id: string; // Unique identifier
|
|
186
|
-
tool: DrawTool; // 'pen' | 'eraser' | etc
|
|
187
|
-
color: string; // Hex color
|
|
188
|
-
width: number; // Stroke width
|
|
189
|
-
points: Point[]; // Array of {x, y, pressure?}
|
|
190
|
-
timestamp: number; // Creation time (ms)
|
|
191
|
-
}
|
|
192
192
|
```
|
|
193
193
|
|
|
194
194
|
### Load Background Image
|
|
195
195
|
|
|
196
|
+
Use `loadImage()` to load a background image onto the canvas.
|
|
197
|
+
|
|
196
198
|
```javascript
|
|
197
199
|
await draw.loadImage('background.jpg');
|
|
198
200
|
```
|
|
199
201
|
|
|
200
202
|
### Event Handling
|
|
201
203
|
|
|
204
|
+
Listen for drawing events to build auto-save or analytics.
|
|
205
|
+
|
|
202
206
|
```javascript
|
|
203
207
|
draw.addEventListener('draw-end', (e) => {
|
|
204
208
|
const stroke = e.detail.stroke;
|
|
205
209
|
console.log(`Drew ${stroke.points.length} points`);
|
|
206
|
-
|
|
207
|
-
// Auto-save
|
|
208
|
-
saveDrawing();
|
|
209
210
|
});
|
|
210
211
|
```
|
|
211
212
|
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
```javascript
|
|
215
|
-
document.addEventListener('keydown', (e) => {
|
|
216
|
-
if (e.ctrlKey || e.metaKey) {
|
|
217
|
-
if (e.key === 'z') {
|
|
218
|
-
e.preventDefault();
|
|
219
|
-
if (e.shiftKey) {
|
|
220
|
-
draw.redo();
|
|
221
|
-
} else {
|
|
222
|
-
draw.undo();
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
});
|
|
227
|
-
```
|
|
228
|
-
|
|
229
|
-
## Tools
|
|
230
|
-
|
|
231
|
-
- `'pen'` - Draw with brush
|
|
232
|
-
- `'eraser'` - Erase strokes
|
|
233
|
-
- `'line'` - Draw straight lines
|
|
234
|
-
- `'rectangle'` - Draw rectangles
|
|
235
|
-
- `'circle'` - Draw circles
|
|
236
|
-
- `'text'` - Add text
|
|
237
|
-
|
|
238
|
-
## Lazy Brush
|
|
239
|
-
|
|
240
|
-
The lazy brush creates smooth, organic lines by making the brush lag behind your cursor within a configurable radius. This eliminates jitter and produces professional-looking strokes.
|
|
241
|
-
|
|
242
|
-
**How it works:**
|
|
243
|
-
1. Cursor moves freely
|
|
244
|
-
2. Brush follows within `lazyRadius`
|
|
245
|
-
3. Creates smooth curves
|
|
246
|
-
4. Reduces hand tremor effects
|
|
247
|
-
|
|
248
|
-
**Tips:**
|
|
249
|
-
- Larger radius = smoother, slower response
|
|
250
|
-
- Smaller radius = more control, less smoothing
|
|
251
|
-
- Disable for pixel-perfect control
|
|
252
|
-
|
|
253
|
-
## Auto-Polygon
|
|
254
|
-
|
|
255
|
-
Auto-polygon automatically processes completed strokes into closed shapes. When you finish drawing (release the mouse/pointer), it analyzes the stroke and applies smart shape completion.
|
|
256
|
-
|
|
257
|
-
**Features:**
|
|
258
|
-
|
|
259
|
-
1. **Self-Intersection Detection**
|
|
260
|
-
- Detects when your stroke crosses itself
|
|
261
|
-
- Automatically trims at the first intersection point
|
|
262
|
-
- Creates a clean closed shape without excess
|
|
263
|
-
|
|
264
|
-
2. **Auto-Close Open Shapes**
|
|
265
|
-
- If start and end points are far apart (>20px)
|
|
266
|
-
- Connects them with a smooth quadratic curve
|
|
267
|
-
- Curve adapts to the gap distance
|
|
268
|
-
|
|
269
|
-
**Properties:**
|
|
270
|
-
|
|
271
|
-
- `autoPolygon` - Enable/disable the feature (default: `false`)
|
|
272
|
-
- `polygonCurvePoints` - Curve smoothness, 2-30 (default: `10`)
|
|
273
|
-
- Lower values (2-5): Sharp, direct connection
|
|
274
|
-
- Medium values (10-15): Balanced smooth curve
|
|
275
|
-
- Higher values (20-30): Very smooth, organic curve
|
|
276
|
-
|
|
277
|
-
**Example:**
|
|
278
|
-
|
|
279
|
-
```typescript
|
|
280
|
-
// Enable auto-polygon
|
|
281
|
-
draw.autoPolygon = true;
|
|
282
|
-
|
|
283
|
-
// Adjust curve smoothness
|
|
284
|
-
draw.polygonCurvePoints = 15; // Smoother curves
|
|
285
|
-
```
|
|
286
|
-
|
|
287
|
-
```html
|
|
288
|
-
<snice-draw
|
|
289
|
-
auto-polygon
|
|
290
|
-
polygon-curve-points="15">
|
|
291
|
-
</snice-draw>
|
|
292
|
-
```
|
|
293
|
-
|
|
294
|
-
**Use Cases:**
|
|
295
|
-
|
|
296
|
-
- Sketching closed shapes quickly
|
|
297
|
-
- Drawing polygons without precision
|
|
298
|
-
- Creating organic forms that auto-complete
|
|
299
|
-
- UI wireframing and mockups
|
|
300
|
-
- Diagram creation
|
|
213
|
+
## Accessibility
|
|
301
214
|
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
The algorithm processes strokes on `pointerup`:
|
|
305
|
-
|
|
306
|
-
1. Simplify points (sample every 5th point for performance)
|
|
307
|
-
2. Check for self-intersections using line-line intersection
|
|
308
|
-
3. If intersection found: trim and close at that point
|
|
309
|
-
4. If no intersection and gap >20px: generate curve points
|
|
310
|
-
5. Use quadratic Bezier with perpendicular control point
|
|
311
|
-
6. Insert interpolated points for smooth rendering
|
|
312
|
-
|
|
313
|
-
## Browser Support
|
|
314
|
-
|
|
315
|
-
- Modern browsers with Canvas API
|
|
316
|
-
- Pointer Events API for touch support
|
|
215
|
+
- Pointer Events API for touch and stylus support
|
|
317
216
|
- Works on desktop and mobile
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
- Optimized canvas rendering
|
|
322
|
-
- Efficient stroke storage
|
|
323
|
-
- Smooth 60fps drawing
|
|
324
|
-
- Touch and stylus pressure support
|
|
217
|
+
- Pressure-sensitive stylus support
|
|
218
|
+
- `disabled` property prevents all drawing interaction
|