snice 4.29.0 → 4.30.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -10
- package/adapters/react/SniceProvider.d.ts +71 -0
- package/adapters/react/SniceProvider.js +49 -0
- package/adapters/react/SniceProvider.js.map +1 -0
- package/adapters/react/SniceRouter.d.ts +44 -0
- package/adapters/react/SniceRouter.js +190 -0
- package/adapters/react/SniceRouter.js.map +1 -0
- package/adapters/react/components.d.ts +2 -0
- package/adapters/react/components.d.ts.map +1 -1
- package/adapters/react/components.js +1 -0
- package/adapters/react/components.js.map +1 -1
- package/adapters/react/components.ts +2 -0
- package/adapters/react/grid.d.ts +36 -0
- package/adapters/react/grid.d.ts.map +1 -0
- package/adapters/react/grid.js +24 -0
- package/adapters/react/grid.js.map +1 -0
- package/adapters/react/grid.tsx +44 -0
- package/adapters/react/index.d.ts +5 -0
- package/adapters/react/index.d.ts.map +1 -1
- package/adapters/react/index.js +3 -2
- package/adapters/react/index.js.map +1 -1
- package/adapters/react/index.ts +6 -3
- package/adapters/react/matchRoute.d.ts +16 -0
- package/adapters/react/matchRoute.js +32 -0
- package/adapters/react/matchRoute.js.map +1 -0
- package/adapters/react/types.d.ts +1 -15
- package/adapters/react/types.d.ts.map +1 -1
- package/adapters/react/types.ts +1 -15
- package/adapters/react/useRequestHandler.js +1 -1
- package/adapters/react/useRequestHandler.js.map +1 -1
- package/bin/snice.js +8 -13
- package/bin/templates/{pwa → default}/index.html +1 -1
- package/bin/templates/{pwa → default}/src/components/app-header.ts +36 -18
- package/bin/templates/{pwa → default}/src/components/notification-badge.ts +2 -21
- package/bin/templates/{pwa → default}/src/components/search-bar.ts +12 -12
- package/bin/templates/default/src/context.ts +17 -0
- package/bin/templates/{pwa → default}/src/controllers/notification-controller.ts +10 -15
- package/bin/templates/{pwa → default}/src/daemons/notifications.ts +0 -12
- package/bin/templates/{pwa → default}/src/main.ts +1 -7
- package/bin/templates/{pwa → default}/src/middleware/error.ts +1 -8
- package/bin/templates/{pwa → default}/src/pages/dashboard.ts +17 -18
- package/bin/templates/{pwa → default}/src/pages/data.ts +24 -24
- package/bin/templates/{pwa → default}/src/pages/login.ts +3 -6
- package/bin/templates/{pwa → default}/src/pages/notifications.ts +21 -19
- package/bin/templates/{pwa → default}/src/pages/profile.ts +10 -12
- package/bin/templates/{pwa → default}/src/pages/settings.ts +22 -22
- package/bin/templates/default/src/router.ts +13 -0
- package/bin/templates/default/src/styles/global.css +16 -0
- package/bin/templates/{pwa → default}/tsconfig.json +2 -1
- package/bin/templates/react/README.md +124 -0
- package/bin/templates/react/global.d.ts +10 -0
- package/bin/templates/react/index.html +15 -0
- package/bin/templates/react/package.json +31 -0
- package/bin/templates/react/src/App.tsx +112 -0
- package/bin/templates/react/src/components/AppHeader.tsx +85 -0
- package/bin/templates/react/src/components/AppLayout.tsx +11 -0
- package/bin/templates/react/src/components/NotificationBadge.tsx +13 -0
- package/bin/templates/react/src/components/SearchBar.tsx +63 -0
- package/bin/templates/react/src/daemons/notifications.ts +136 -0
- package/bin/templates/react/src/fetcher.ts +15 -0
- package/bin/templates/react/src/guards/auth.ts +6 -0
- package/bin/templates/react/src/main.tsx +27 -0
- package/bin/templates/react/src/middleware/auth.ts +16 -0
- package/bin/templates/react/src/middleware/error.ts +29 -0
- package/bin/templates/react/src/middleware/retry.ts +31 -0
- package/bin/templates/react/src/pages/DashboardPage.tsx +111 -0
- package/bin/templates/react/src/pages/DataPage.tsx +119 -0
- package/bin/templates/react/src/pages/LoginPage.tsx +46 -0
- package/bin/templates/react/src/pages/NotificationsPage.tsx +119 -0
- package/bin/templates/react/src/pages/ProfilePage.tsx +92 -0
- package/bin/templates/react/src/pages/SettingsPage.tsx +165 -0
- package/bin/templates/react/src/services/auth.ts +48 -0
- package/bin/templates/react/src/services/jwt.ts +35 -0
- package/bin/templates/react/src/services/storage.ts +24 -0
- package/bin/templates/react/src/styles/global.css +382 -0
- package/bin/templates/react/src/types/auth.ts +21 -0
- package/bin/templates/react/src/types/notifications.ts +9 -0
- package/bin/templates/react/tests/helpers/test-utils.ts +79 -0
- package/bin/templates/react/tests/middleware/auth.test.ts +67 -0
- package/bin/templates/react/tests/middleware/error.test.ts +105 -0
- package/bin/templates/react/tests/middleware/retry.test.ts +103 -0
- package/bin/templates/react/tests/services/auth.test.ts +89 -0
- package/bin/templates/react/tests/services/jwt.test.ts +76 -0
- package/bin/templates/react/tests/services/storage.test.ts +69 -0
- package/bin/templates/{base → react}/tsconfig.json +4 -6
- package/bin/templates/react/vite.config.ts +18 -0
- package/bin/templates/react/vitest.config.ts +18 -0
- package/dist/cdn/accordion/snice-accordion.js +1 -1
- package/dist/cdn/accordion/snice-accordion.min.js +1 -1
- package/dist/cdn/action-bar/snice-action-bar.js +1 -1
- package/dist/cdn/action-bar/snice-action-bar.min.js +1 -1
- 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/snice-binpack.js +1 -1
- package/dist/cdn/binpack/snice-binpack.min.js +1 -1
- 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/snice-button.js +1 -1
- package/dist/cdn/button/snice-button.min.js +1 -1
- package/dist/cdn/calendar/snice-calendar.js +1 -1
- package/dist/cdn/calendar/snice-calendar.min.js +1 -1
- package/dist/cdn/camera/snice-camera.js +1 -1
- package/dist/cdn/camera/snice-camera.min.js +1 -1
- package/dist/cdn/camera-annotate/snice-camera-annotate.js +1 -1
- package/dist/cdn/camera-annotate/snice-camera-annotate.min.js +1 -1
- package/dist/cdn/candlestick/snice-candlestick.js +1 -1
- package/dist/cdn/candlestick/snice-candlestick.min.js +1 -1
- package/dist/cdn/card/snice-card.js +1 -1
- package/dist/cdn/card/snice-card.min.js +1 -1
- package/dist/cdn/carousel/snice-carousel.js +1 -1
- package/dist/cdn/carousel/snice-carousel.min.js +1 -1
- package/dist/cdn/cart/snice-cart.js +1 -1
- package/dist/cdn/cart/snice-cart.min.js +1 -1
- package/dist/cdn/chart/snice-chart.js +1 -1
- package/dist/cdn/chart/snice-chart.min.js +1 -1
- package/dist/cdn/chat/snice-chat.js +1 -1
- package/dist/cdn/chat/snice-chat.min.js +1 -1
- package/dist/cdn/checkbox/snice-checkbox.js +1 -1
- package/dist/cdn/checkbox/snice-checkbox.min.js +1 -1
- package/dist/cdn/chip/README.md +2 -2
- package/dist/cdn/chip/snice-chip.js +2 -2
- package/dist/cdn/chip/snice-chip.js.map +1 -1
- package/dist/cdn/chip/snice-chip.min.js +3 -3
- package/dist/cdn/chip/snice-chip.min.js.map +1 -1
- package/dist/cdn/code-block/snice-code-block.js +1 -1
- package/dist/cdn/code-block/snice-code-block.min.js +1 -1
- package/dist/cdn/color-display/snice-color-display.js +1 -1
- package/dist/cdn/color-display/snice-color-display.min.js +1 -1
- package/dist/cdn/color-picker/snice-color-picker.js +1 -1
- package/dist/cdn/color-picker/snice-color-picker.min.js +1 -1
- package/dist/cdn/command-palette/snice-command-palette.js +1 -1
- package/dist/cdn/command-palette/snice-command-palette.min.js +1 -1
- package/dist/cdn/comments/snice-comments.js +1 -1
- package/dist/cdn/comments/snice-comments.min.js +1 -1
- package/dist/cdn/countdown/snice-countdown.js +1 -1
- package/dist/cdn/countdown/snice-countdown.min.js +1 -1
- package/dist/cdn/cropper/snice-cropper.js +1 -1
- package/dist/cdn/cropper/snice-cropper.min.js +1 -1
- package/dist/cdn/data-card/snice-data-card.js +1 -1
- package/dist/cdn/data-card/snice-data-card.min.js +1 -1
- package/dist/cdn/date-picker/README.md +1 -1
- package/dist/cdn/date-picker/snice-date-picker.js +2 -2
- package/dist/cdn/date-picker/snice-date-picker.js.map +1 -1
- package/dist/cdn/date-picker/snice-date-picker.min.js +2 -2
- package/dist/cdn/date-picker/snice-date-picker.min.js.map +1 -1
- package/dist/cdn/date-range-picker/README.md +1 -1
- package/dist/cdn/date-range-picker/snice-date-range-picker.js +2 -2
- package/dist/cdn/date-range-picker/snice-date-range-picker.js.map +1 -1
- package/dist/cdn/date-range-picker/snice-date-range-picker.min.js +11 -11
- package/dist/cdn/date-range-picker/snice-date-range-picker.min.js.map +1 -1
- package/dist/cdn/date-time-picker/README.md +1 -1
- package/dist/cdn/date-time-picker/snice-date-time-picker.js +2 -2
- package/dist/cdn/date-time-picker/snice-date-time-picker.js.map +1 -1
- package/dist/cdn/date-time-picker/snice-date-time-picker.min.js +2 -2
- package/dist/cdn/date-time-picker/snice-date-time-picker.min.js.map +1 -1
- package/dist/cdn/diff/snice-diff.js +1 -1
- package/dist/cdn/diff/snice-diff.min.js +1 -1
- package/dist/cdn/divider/snice-divider.js +1 -1
- package/dist/cdn/divider/snice-divider.min.js +1 -1
- package/dist/cdn/doc/snice-doc.js +1 -1
- package/dist/cdn/doc/snice-doc.min.js +1 -1
- package/dist/cdn/draw/README.md +2 -2
- package/dist/cdn/draw/snice-draw.js +26 -4
- package/dist/cdn/draw/snice-draw.js.map +1 -1
- package/dist/cdn/draw/snice-draw.min.js +3 -3
- package/dist/cdn/draw/snice-draw.min.js.map +1 -1
- package/dist/cdn/drawer/snice-drawer.js +1 -1
- package/dist/cdn/drawer/snice-drawer.min.js +1 -1
- package/dist/cdn/empty-state/snice-empty-state.js +1 -1
- package/dist/cdn/empty-state/snice-empty-state.min.js +1 -1
- package/dist/cdn/estimate/snice-estimate.js +1 -1
- package/dist/cdn/estimate/snice-estimate.min.js +1 -1
- package/dist/cdn/file-gallery/snice-file-gallery.js +1 -1
- package/dist/cdn/file-gallery/snice-file-gallery.min.js +1 -1
- package/dist/cdn/file-upload/snice-file-upload.js +1 -1
- package/dist/cdn/file-upload/snice-file-upload.min.js +1 -1
- package/dist/cdn/flip-card/snice-flip-card.js +1 -1
- package/dist/cdn/flip-card/snice-flip-card.min.js +1 -1
- package/dist/cdn/flow/snice-flow.js +1 -1
- package/dist/cdn/flow/snice-flow.min.js +1 -1
- package/dist/cdn/form-layout/snice-form-layout.js +1 -1
- package/dist/cdn/form-layout/snice-form-layout.min.js +1 -1
- package/dist/cdn/funnel/snice-funnel.js +1 -1
- package/dist/cdn/funnel/snice-funnel.min.js +1 -1
- package/dist/cdn/gantt/snice-gantt.js +1 -1
- package/dist/cdn/gantt/snice-gantt.min.js +1 -1
- package/dist/cdn/gauge/snice-gauge.js +1 -1
- package/dist/cdn/gauge/snice-gauge.min.js +1 -1
- package/dist/cdn/grid/README.md +27 -0
- package/dist/cdn/grid/snice-grid.js +862 -0
- package/dist/cdn/grid/snice-grid.js.map +1 -0
- package/dist/cdn/grid/snice-grid.min.js +13 -0
- package/dist/cdn/grid/snice-grid.min.js.map +1 -0
- package/dist/cdn/heatmap/snice-heatmap.js +1 -1
- package/dist/cdn/heatmap/snice-heatmap.min.js +1 -1
- package/dist/cdn/image/snice-image.js +1 -1
- package/dist/cdn/image/snice-image.min.js +1 -1
- package/dist/cdn/input/snice-input.js +1 -1
- package/dist/cdn/input/snice-input.min.js +1 -1
- package/dist/cdn/invoice/snice-invoice.js +1 -1
- package/dist/cdn/invoice/snice-invoice.min.js +1 -1
- package/dist/cdn/kanban/snice-kanban.js +1 -1
- package/dist/cdn/kanban/snice-kanban.min.js +1 -1
- package/dist/cdn/key-value/snice-key-value.js +1 -1
- package/dist/cdn/key-value/snice-key-value.min.js +1 -1
- package/dist/cdn/kpi/snice-kpi.js +1 -1
- package/dist/cdn/kpi/snice-kpi.min.js +1 -1
- package/dist/cdn/layout/snice-layout.js +1 -1
- package/dist/cdn/layout/snice-layout.min.js +1 -1
- package/dist/cdn/leaderboard/snice-leaderboard.js +1 -1
- package/dist/cdn/leaderboard/snice-leaderboard.min.js +1 -1
- package/dist/cdn/link/snice-link.js +1 -1
- package/dist/cdn/link/snice-link.min.js +1 -1
- package/dist/cdn/link-preview/snice-link-preview.js +1 -1
- package/dist/cdn/link-preview/snice-link-preview.min.js +1 -1
- package/dist/cdn/list/snice-list.js +1 -1
- package/dist/cdn/list/snice-list.min.js +1 -1
- package/dist/cdn/location/snice-location.js +1 -1
- package/dist/cdn/location/snice-location.min.js +1 -1
- package/dist/cdn/login/snice-login.js +1 -1
- package/dist/cdn/login/snice-login.min.js +1 -1
- package/dist/cdn/map/snice-map.js +1 -1
- package/dist/cdn/map/snice-map.min.js +1 -1
- package/dist/cdn/markdown/snice-markdown.js +1 -1
- package/dist/cdn/markdown/snice-markdown.min.js +1 -1
- package/dist/cdn/masonry/snice-masonry.js +1 -1
- package/dist/cdn/masonry/snice-masonry.min.js +1 -1
- package/dist/cdn/menu/snice-menu.js +1 -1
- package/dist/cdn/menu/snice-menu.min.js +1 -1
- package/dist/cdn/message-strip/README.md +2 -2
- package/dist/cdn/message-strip/snice-message-strip.js +2 -2
- package/dist/cdn/message-strip/snice-message-strip.js.map +1 -1
- package/dist/cdn/message-strip/snice-message-strip.min.js +6 -6
- package/dist/cdn/message-strip/snice-message-strip.min.js.map +1 -1
- package/dist/cdn/metric-table/snice-metric-table.js +1 -1
- package/dist/cdn/metric-table/snice-metric-table.min.js +1 -1
- package/dist/cdn/modal/snice-modal.js +1 -1
- package/dist/cdn/modal/snice-modal.min.js +1 -1
- package/dist/cdn/music-player/snice-music-player.js +1 -1
- package/dist/cdn/music-player/snice-music-player.min.js +1 -1
- package/dist/cdn/nav/snice-nav.js +1 -1
- package/dist/cdn/nav/snice-nav.min.js +1 -1
- package/dist/cdn/network-graph/snice-network-graph.js +1 -1
- package/dist/cdn/network-graph/snice-network-graph.min.js +1 -1
- package/dist/cdn/notification-center/snice-notification-center.js +1 -1
- package/dist/cdn/notification-center/snice-notification-center.min.js +1 -1
- package/dist/cdn/order-tracker/snice-order-tracker.js +1 -1
- package/dist/cdn/order-tracker/snice-order-tracker.min.js +1 -1
- package/dist/cdn/org-chart/snice-org-chart.js +1 -1
- package/dist/cdn/org-chart/snice-org-chart.min.js +1 -1
- package/dist/cdn/pagination/snice-pagination.js +1 -1
- package/dist/cdn/pagination/snice-pagination.min.js +1 -1
- package/dist/cdn/paint/README.md +2 -2
- package/dist/cdn/paint/snice-paint.js +26 -3
- package/dist/cdn/paint/snice-paint.js.map +1 -1
- package/dist/cdn/paint/snice-paint.min.js +3 -3
- package/dist/cdn/paint/snice-paint.min.js.map +1 -1
- package/dist/cdn/pdf-viewer/snice-pdf-viewer.js +1 -1
- package/dist/cdn/pdf-viewer/snice-pdf-viewer.min.js +1 -1
- package/dist/cdn/permission-matrix/snice-permission-matrix.js +1 -1
- package/dist/cdn/permission-matrix/snice-permission-matrix.min.js +1 -1
- package/dist/cdn/podcast-player/snice-podcast-player.js +1 -1
- package/dist/cdn/podcast-player/snice-podcast-player.min.js +1 -1
- package/dist/cdn/pricing-table/snice-pricing-table.js +1 -1
- package/dist/cdn/pricing-table/snice-pricing-table.min.js +1 -1
- package/dist/cdn/product-card/README.md +1 -1
- package/dist/cdn/product-card/snice-product-card.js +1 -1
- package/dist/cdn/product-card/snice-product-card.min.js +1 -1
- package/dist/cdn/progress/snice-progress.js +1 -1
- package/dist/cdn/progress/snice-progress.min.js +1 -1
- package/dist/cdn/progress-ring/snice-progress-ring.js +1 -1
- package/dist/cdn/progress-ring/snice-progress-ring.min.js +1 -1
- package/dist/cdn/qr-code/snice-qr-code.js +1 -1
- package/dist/cdn/qr-code/snice-qr-code.min.js +1 -1
- package/dist/cdn/qr-reader/snice-qr-reader.js +1 -1
- package/dist/cdn/qr-reader/snice-qr-reader.min.js +1 -1
- package/dist/cdn/radio/snice-radio.js +1 -1
- package/dist/cdn/radio/snice-radio.min.js +1 -1
- package/dist/cdn/range-slider/snice-range-slider.js +1 -1
- package/dist/cdn/range-slider/snice-range-slider.min.js +1 -1
- package/dist/cdn/rating/snice-rating.js +1 -1
- package/dist/cdn/rating/snice-rating.min.js +1 -1
- package/dist/cdn/receipt/snice-receipt.js +1 -1
- package/dist/cdn/receipt/snice-receipt.min.js +1 -1
- package/dist/cdn/recipe/snice-recipe.js +1 -1
- package/dist/cdn/recipe/snice-recipe.min.js +1 -1
- package/dist/cdn/runtime/README.md +2 -2
- package/dist/cdn/runtime/snice-runtime.esm.js +40 -15
- package/dist/cdn/runtime/snice-runtime.esm.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.esm.min.js +7 -7
- package/dist/cdn/runtime/snice-runtime.esm.min.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.js +40 -15
- package/dist/cdn/runtime/snice-runtime.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.min.js +6 -6
- 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/snice-table.js +1 -1
- package/dist/cdn/table/snice-table.min.js +1 -1
- package/dist/cdn/tabs/snice-tabs.js +1 -1
- package/dist/cdn/tabs/snice-tabs.min.js +1 -1
- package/dist/cdn/tag/README.md +1 -1
- package/dist/cdn/tag/snice-tag.js +2 -2
- package/dist/cdn/tag/snice-tag.js.map +1 -1
- package/dist/cdn/tag/snice-tag.min.js +3 -3
- package/dist/cdn/tag/snice-tag.min.js.map +1 -1
- package/dist/cdn/tag-input/README.md +2 -2
- package/dist/cdn/tag-input/snice-tag-input.js +2 -2
- package/dist/cdn/tag-input/snice-tag-input.js.map +1 -1
- package/dist/cdn/tag-input/snice-tag-input.min.js +2 -2
- package/dist/cdn/tag-input/snice-tag-input.min.js.map +1 -1
- package/dist/cdn/terminal/snice-terminal.js +1 -1
- package/dist/cdn/terminal/snice-terminal.min.js +1 -1
- package/dist/cdn/testimonial/snice-testimonial.js +1 -1
- package/dist/cdn/testimonial/snice-testimonial.min.js +1 -1
- package/dist/cdn/textarea/snice-textarea.js +1 -1
- package/dist/cdn/textarea/snice-textarea.min.js +1 -1
- package/dist/cdn/time-picker/README.md +1 -1
- package/dist/cdn/time-picker/snice-time-picker.js +2 -2
- package/dist/cdn/time-picker/snice-time-picker.js.map +1 -1
- package/dist/cdn/time-picker/snice-time-picker.min.js +2 -2
- package/dist/cdn/time-picker/snice-time-picker.min.js.map +1 -1
- package/dist/cdn/time-range-picker/snice-time-range-picker.js +1 -1
- package/dist/cdn/time-range-picker/snice-time-range-picker.min.js +1 -1
- package/dist/cdn/timeline/snice-timeline.js +1 -1
- package/dist/cdn/timeline/snice-timeline.min.js +1 -1
- package/dist/cdn/timer/snice-timer.js +1 -1
- package/dist/cdn/timer/snice-timer.min.js +1 -1
- package/dist/cdn/toast/README.md +1 -1
- package/dist/cdn/toast/snice-toast.js +7 -3
- package/dist/cdn/toast/snice-toast.js.map +1 -1
- package/dist/cdn/toast/snice-toast.min.js +6 -6
- package/dist/cdn/toast/snice-toast.min.js.map +1 -1
- package/dist/cdn/tooltip/snice-tooltip.js +1 -1
- package/dist/cdn/tooltip/snice-tooltip.min.js +1 -1
- package/dist/cdn/tree/snice-tree.js +1 -1
- package/dist/cdn/tree/snice-tree.min.js +1 -1
- package/dist/cdn/treemap/snice-treemap.js +1 -1
- package/dist/cdn/treemap/snice-treemap.min.js +1 -1
- package/dist/cdn/user-card/snice-user-card.js +1 -1
- package/dist/cdn/user-card/snice-user-card.min.js +1 -1
- package/dist/cdn/video-player/snice-video-player.js +1 -1
- package/dist/cdn/video-player/snice-video-player.min.js +1 -1
- package/dist/cdn/virtual-scroller/snice-virtual-scroller.js +1 -1
- package/dist/cdn/virtual-scroller/snice-virtual-scroller.min.js +1 -1
- package/dist/cdn/waterfall/README.md +1 -1
- package/dist/cdn/waterfall/snice-waterfall.js +1 -1
- package/dist/cdn/waterfall/snice-waterfall.min.js +1 -1
- package/dist/cdn/weather/snice-weather.js +1 -1
- package/dist/cdn/weather/snice-weather.min.js +1 -1
- package/dist/cdn/work-order/snice-work-order.js +1 -1
- package/dist/cdn/work-order/snice-work-order.min.js +1 -1
- package/dist/components/chip/snice-chip.js +1 -1
- package/dist/components/chip/snice-chip.js.map +1 -1
- package/dist/components/date-picker/snice-date-picker.js +1 -1
- package/dist/components/date-picker/snice-date-picker.js.map +1 -1
- package/dist/components/date-range-picker/snice-date-range-picker.js +1 -1
- package/dist/components/date-range-picker/snice-date-range-picker.js.map +1 -1
- package/dist/components/date-time-picker/snice-date-time-picker.js +1 -1
- package/dist/components/date-time-picker/snice-date-time-picker.js.map +1 -1
- package/dist/components/draw/snice-draw.d.ts +2 -0
- package/dist/components/draw/snice-draw.js +25 -3
- package/dist/components/draw/snice-draw.js.map +1 -1
- package/dist/components/grid/snice-grid.d.ts +73 -0
- package/dist/components/grid/snice-grid.js +795 -0
- package/dist/components/grid/snice-grid.js.map +1 -0
- package/dist/components/grid/snice-grid.types.d.ts +41 -0
- package/dist/components/message-strip/snice-message-strip.js +1 -1
- package/dist/components/message-strip/snice-message-strip.js.map +1 -1
- package/dist/components/paint/snice-paint.d.ts +2 -0
- package/dist/components/paint/snice-paint.js +25 -2
- package/dist/components/paint/snice-paint.js.map +1 -1
- package/dist/components/tag/snice-tag.js +1 -1
- package/dist/components/tag/snice-tag.js.map +1 -1
- package/dist/components/tag-input/snice-tag-input.js +1 -1
- package/dist/components/tag-input/snice-tag-input.js.map +1 -1
- package/dist/components/theme/theme.css +15 -0
- package/dist/components/time-picker/snice-time-picker.js +1 -1
- package/dist/components/time-picker/snice-time-picker.js.map +1 -1
- package/dist/components/toast/snice-toast-container.js +4 -0
- package/dist/components/toast/snice-toast-container.js.map +1 -1
- package/dist/components/toast/snice-toast.js +2 -2
- package/dist/index.cjs +37 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.esm.js +37 -12
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +37 -12
- package/dist/index.iife.js.map +1 -1
- package/dist/react/SniceProvider.d.ts +71 -0
- package/dist/react/SniceProvider.js +49 -0
- package/dist/react/SniceProvider.js.map +1 -0
- package/dist/react/SniceRouter.d.ts +44 -0
- package/dist/react/SniceRouter.js +190 -0
- package/dist/react/SniceRouter.js.map +1 -0
- package/dist/react/index.d.ts +3 -0
- package/dist/react/index.js +14 -0
- package/dist/react/index.js.map +1 -0
- package/dist/react/matchRoute.d.ts +16 -0
- package/dist/react/matchRoute.js +32 -0
- package/dist/react/matchRoute.js.map +1 -0
- package/dist/react/useRequestHandler.js +1 -1
- package/dist/react/useRequestHandler.js.map +1 -1
- package/dist/symbols.cjs +1 -1
- package/dist/symbols.esm.js +1 -1
- package/dist/transitions.cjs +1 -1
- package/dist/transitions.esm.js +1 -1
- package/dist/types/guard.d.ts +4 -11
- package/docs/ai/README.md +7 -7
- package/docs/ai/components/grid.md +116 -0
- package/docs/ai/patterns.md +24 -0
- package/docs/ai/react-integration.md +97 -0
- package/docs/components/grid.md +249 -0
- package/docs/plans/2026-03-10-grid-component-design.md +138 -0
- package/docs/plans/2026-03-10-grid-component-plan.md +716 -0
- package/docs/plans/2026-03-10-react-integration-plan.md +1178 -0
- package/docs/react-integration.md +508 -0
- package/docs/request-response.md +7 -21
- package/package.json +1 -1
- package/bin/templates/base/README.md +0 -33
- package/bin/templates/base/global.d.ts +0 -14
- package/bin/templates/base/index.html +0 -13
- package/bin/templates/base/package.json +0 -21
- package/bin/templates/base/src/components/counter-button.ts +0 -88
- package/bin/templates/base/src/components/counter-button.types.ts +0 -7
- package/bin/templates/base/src/components/feature-card.ts +0 -59
- package/bin/templates/base/src/components/feature-card.types.ts +0 -5
- package/bin/templates/base/src/controllers/counter-controller.ts +0 -24
- package/bin/templates/base/src/main.ts +0 -24
- package/bin/templates/base/src/pages/about-page.ts +0 -68
- package/bin/templates/base/src/pages/home-page.ts +0 -105
- package/bin/templates/base/src/pages/not-found-page.ts +0 -55
- package/bin/templates/base/src/router.ts +0 -9
- package/bin/templates/base/src/styles/global.css +0 -27
- package/bin/templates/base/src/types/api-response.ts +0 -5
- package/bin/templates/base/src/types/status.ts +0 -1
- package/bin/templates/base/src/types/theme.ts +0 -1
- package/bin/templates/base/src/types/user.ts +0 -5
- package/bin/templates/base/vite.config.ts +0 -38
- package/bin/templates/pwa/public/vite.svg +0 -1
- package/bin/templates/pwa/src/router.ts +0 -20
- package/bin/templates/pwa/src/styles/global.css +0 -64
- /package/bin/templates/{pwa → default}/README.md +0 -0
- /package/bin/templates/{pwa → default}/global.d.ts +0 -0
- /package/bin/templates/{pwa → default}/package.json +0 -0
- /package/bin/templates/{pwa → default}/public/icons/.gitkeep +0 -0
- /package/bin/templates/{base → default}/public/vite.svg +0 -0
- /package/bin/templates/{pwa → default}/src/fetcher.ts +0 -0
- /package/bin/templates/{pwa → default}/src/guards/auth.ts +0 -0
- /package/bin/templates/{pwa → default}/src/middleware/auth.ts +0 -0
- /package/bin/templates/{pwa → default}/src/middleware/retry.ts +0 -0
- /package/bin/templates/{pwa → default}/src/services/auth.ts +0 -0
- /package/bin/templates/{pwa → default}/src/services/jwt.ts +0 -0
- /package/bin/templates/{pwa → default}/src/services/storage.ts +0 -0
- /package/bin/templates/{pwa → default}/src/types/auth.ts +0 -0
- /package/bin/templates/{pwa → default}/src/types/notifications.ts +0 -0
- /package/bin/templates/{pwa → default}/tests/helpers/test-utils.ts +0 -0
- /package/bin/templates/{pwa → default}/tests/middleware/auth.test.ts +0 -0
- /package/bin/templates/{pwa → default}/tests/middleware/error.test.ts +0 -0
- /package/bin/templates/{pwa → default}/tests/middleware/retry.test.ts +0 -0
- /package/bin/templates/{pwa → default}/tests/services/auth.test.ts +0 -0
- /package/bin/templates/{pwa → default}/tests/services/jwt.test.ts +0 -0
- /package/bin/templates/{pwa → default}/tests/services/storage.test.ts +0 -0
- /package/bin/templates/{pwa → default}/vite.config.ts +0 -0
- /package/bin/templates/{pwa → default}/vitest.config.ts +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* snice v4.
|
|
2
|
+
* snice v4.30.1
|
|
3
3
|
* A decorator-driven web component library with differential rendering, routing, controllers, and 130+ ready-made UI components. Use as much or as little as you want. Zero dependencies, works anywhere.
|
|
4
4
|
* (c) 2024
|
|
5
5
|
* Released under the MIT License.
|
|
6
6
|
*/
|
|
7
|
-
void 0===globalThis.Snice&&console.warn("[snice] snice-runtime.min.js must be loaded before snice-draw.min.js");var SniceDraw=function(t,e){"use strict";function i(t,e,i,s,r,n){function a(t){if(void 0!==t&&"function"!=typeof t)throw new TypeError("Function expected");return t}for(var o,h=s.kind,l="getter"===h?"get":"setter"===h?"set":"value",c=!e&&t?s.static?t:t.prototype:null,d=e||(c?Object.getOwnPropertyDescriptor(c,s.name):{}),u=!1,p=i.length-1;p>=0;p--){var g={};for(var m in s)g[m]="access"===m?{}:s[m];for(var m in s.access)g.access[m]=s.access[m];g.addInitializer=function(t){if(u)throw new TypeError("Cannot add initializers after decoration has completed");n.push(a(t||null))};var y=(0,i[p])("accessor"===h?{get:d.get,set:d.set}:d[l],g);if("accessor"===h){if(void 0===y)continue;if(null===y||"object"!=typeof y)throw new TypeError("Object expected");(o=a(y.get))&&(d.get=o),(o=a(y.set))&&(d.set=o),(o=a(y.init))&&r.unshift(o)}else(o=a(y))&&("field"===h?r.unshift(o):d[l]=o)}c&&Object.defineProperty(c,s.name,d),u=!0}function s(t,e,i){for(var s=arguments.length>2,r=0;r<e.length;r++)i=s?e[r].call(t,i):e[r].call(t);return s?i:void 0}"function"==typeof SuppressedError&&SuppressedError;const r=t=>t*(2-t);class n{constructor(t,e){this.x=t,this.y=e}update(t){return this.x=t.x,this.y=t.y,this}moveByAngle(t,e,i){const s=t+Math.PI/2;return i?(this.x=this.x+Math.sin(s)*e*r(1-i),this.y=this.y-Math.cos(s)*e*r(1-i)):(this.x=this.x+Math.sin(s)*e,this.y=this.y-Math.cos(s)*e),this}equalsTo(t){return this.x===t.x&&this.y===t.y}getDifferenceTo(t){return new n(this.x-t.x,this.y-t.y)}getDistanceTo(t){const e=this.getDifferenceTo(t);return Math.sqrt(Math.pow(e.x,2)+Math.pow(e.y,2))}getAngleTo(t){const e=this.getDifferenceTo(t);return Math.atan2(e.y,e.x)}toObject(){return{x:this.x,y:this.y}}}class a{constructor(t={}){const e=t.initialPoint||{x:0,y:0};this.radius=t.radius||30,this._isEnabled=!1!==t.enabled,this.pointer=new n(e.x,e.y),this.brush=new n(e.x,e.y),this.angle=0,this.distance=0,this._hasMoved=!1}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}isEnabled(){return this._isEnabled}setRadius(t){this.radius=t}getRadius(){return this.radius}getBrushCoordinates(){return this.brush.toObject()}getPointerCoordinates(){return this.pointer.toObject()}getBrush(){return this.brush}getPointer(){return this.pointer}getAngle(){return this.angle}getDistance(){return this.distance}brushHasMoved(){return this._hasMoved}update(t,e={}){if(this._hasMoved=!1,this.pointer.equalsTo(t)&&!e.both&&!e.friction)return!1;if(this.pointer.update(t),e.both)return this._hasMoved=!0,this.brush.update(t),!0;if(this._isEnabled){this.distance=this.pointer.getDistanceTo(this.brush),this.angle=this.pointer.getAngleTo(this.brush);const t=Math.round(10*(this.distance-this.radius))/10>0,i=e.friction&&e.friction<1&&e.friction>0?e.friction:void 0;t&&(this.brush.moveByAngle(this.angle,this.distance-this.radius,i),this._hasMoved=!0)}else this.distance=0,this.angle=0,this.brush.update(t),this._hasMoved=!0;return!0}}let o=(()=>{let t,r,n,o,h,l,c,d,u,p,g,m,y,w,v,f,b,x,k,P,D,S,C,M,E,B,R,z,I,T,q=[e.element("snice-draw")],j=[],A=HTMLElement,U=[],W=[],_=[],L=[],O=[],F=[],N=[],$=[],X=[],Y=[],H=[],J=[],Q=[],G=[],K=[],V=[],Z=[],tt=[],et=[],it=[],st=[],rt=[],nt=[],at=[],ot=[],ht=[],lt=[],ct=[],dt=[],ut=[],pt=[],gt=[],mt=[];return class extends A{static{r=this}static{const a="function"==typeof Symbol&&Symbol.metadata?Object.create(A[Symbol.metadata]??null):void 0;n=[e.property({type:Number})],o=[e.property({type:Number})],h=[e.property({type:String})],l=[e.property({type:String})],c=[e.property({type:Number,attribute:"stroke-width"})],d=[e.property({type:String,attribute:"background-color"})],u=[e.property({type:Boolean})],p=[e.property({type:Number,attribute:"lazy-radius"})],g=[e.property({type:Number})],m=[e.property({type:Number})],y=[e.property({type:Boolean,attribute:"auto-polygon"})],w=[e.property({type:Number,attribute:"polygon-curve-points"})],v=[e.property({type:Boolean,attribute:"auto-circle"})],f=[e.property({type:Number,attribute:"circle-points"})],b=[e.property({type:Boolean})],x=[e.query(".draw-canvas")],k=[e.styles()],P=[e.ready()],D=[e.dispose()],S=[e.render()],C=[e.on("pointerdown",{target:"canvas"})],M=[e.on("pointermove",{target:"canvas"})],E=[e.on("pointerup",{target:"canvas"})],B=[e.dispatch("draw-start",{bubbles:!0,composed:!0})],R=[e.dispatch("draw-end",{bubbles:!0,composed:!0})],z=[e.dispatch("draw-clear",{bubbles:!0,composed:!0})],I=[e.dispatch("draw-undo",{bubbles:!0,composed:!0})],T=[e.dispatch("draw-redo",{bubbles:!0,composed:!0})],i(this,null,k,{kind:"method",name:"styles",static:!1,private:!1,access:{has:t=>"styles"in t,get:t=>t.styles},metadata:a},null,U),i(this,null,P,{kind:"method",name:"onReady",static:!1,private:!1,access:{has:t=>"onReady"in t,get:t=>t.onReady},metadata:a},null,U),i(this,null,D,{kind:"method",name:"onDispose",static:!1,private:!1,access:{has:t=>"onDispose"in t,get:t=>t.onDispose},metadata:a},null,U),i(this,null,S,{kind:"method",name:"render",static:!1,private:!1,access:{has:t=>"render"in t,get:t=>t.render},metadata:a},null,U),i(this,null,C,{kind:"method",name:"handlePointerDown",static:!1,private:!1,access:{has:t=>"handlePointerDown"in t,get:t=>t.handlePointerDown},metadata:a},null,U),i(this,null,M,{kind:"method",name:"handlePointerMove",static:!1,private:!1,access:{has:t=>"handlePointerMove"in t,get:t=>t.handlePointerMove},metadata:a},null,U),i(this,null,E,{kind:"method",name:"handlePointerUp",static:!1,private:!1,access:{has:t=>"handlePointerUp"in t,get:t=>t.handlePointerUp},metadata:a},null,U),i(this,null,B,{kind:"method",name:"emitDrawStart",static:!1,private:!1,access:{has:t=>"emitDrawStart"in t,get:t=>t.emitDrawStart},metadata:a},null,U),i(this,null,R,{kind:"method",name:"emitDrawEnd",static:!1,private:!1,access:{has:t=>"emitDrawEnd"in t,get:t=>t.emitDrawEnd},metadata:a},null,U),i(this,null,z,{kind:"method",name:"emitDrawClear",static:!1,private:!1,access:{has:t=>"emitDrawClear"in t,get:t=>t.emitDrawClear},metadata:a},null,U),i(this,null,I,{kind:"method",name:"emitDrawUndo",static:!1,private:!1,access:{has:t=>"emitDrawUndo"in t,get:t=>t.emitDrawUndo},metadata:a},null,U),i(this,null,T,{kind:"method",name:"emitDrawRedo",static:!1,private:!1,access:{has:t=>"emitDrawRedo"in t,get:t=>t.emitDrawRedo},metadata:a},null,U),i(null,null,n,{kind:"field",name:"width",static:!1,private:!1,access:{has:t=>"width"in t,get:t=>t.width,set:(t,e)=>{t.width=e}},metadata:a},W,_),i(null,null,o,{kind:"field",name:"height",static:!1,private:!1,access:{has:t=>"height"in t,get:t=>t.height,set:(t,e)=>{t.height=e}},metadata:a},L,O),i(null,null,h,{kind:"field",name:"tool",static:!1,private:!1,access:{has:t=>"tool"in t,get:t=>t.tool,set:(t,e)=>{t.tool=e}},metadata:a},F,N),i(null,null,l,{kind:"field",name:"color",static:!1,private:!1,access:{has:t=>"color"in t,get:t=>t.color,set:(t,e)=>{t.color=e}},metadata:a},$,X),i(null,null,c,{kind:"field",name:"strokeWidth",static:!1,private:!1,access:{has:t=>"strokeWidth"in t,get:t=>t.strokeWidth,set:(t,e)=>{t.strokeWidth=e}},metadata:a},Y,H),i(null,null,d,{kind:"field",name:"backgroundColor",static:!1,private:!1,access:{has:t=>"backgroundColor"in t,get:t=>t.backgroundColor,set:(t,e)=>{t.backgroundColor=e}},metadata:a},J,Q),i(null,null,u,{kind:"field",name:"lazy",static:!1,private:!1,access:{has:t=>"lazy"in t,get:t=>t.lazy,set:(t,e)=>{t.lazy=e}},metadata:a},G,K),i(null,null,p,{kind:"field",name:"lazyRadius",static:!1,private:!1,access:{has:t=>"lazyRadius"in t,get:t=>t.lazyRadius,set:(t,e)=>{t.lazyRadius=e}},metadata:a},V,Z),i(null,null,g,{kind:"field",name:"friction",static:!1,private:!1,access:{has:t=>"friction"in t,get:t=>t.friction,set:(t,e)=>{t.friction=e}},metadata:a},tt,et),i(null,null,m,{kind:"field",name:"smoothing",static:!1,private:!1,access:{has:t=>"smoothing"in t,get:t=>t.smoothing,set:(t,e)=>{t.smoothing=e}},metadata:a},it,st),i(null,null,y,{kind:"field",name:"autoPolygon",static:!1,private:!1,access:{has:t=>"autoPolygon"in t,get:t=>t.autoPolygon,set:(t,e)=>{t.autoPolygon=e}},metadata:a},rt,nt),i(null,null,w,{kind:"field",name:"polygonCurvePoints",static:!1,private:!1,access:{has:t=>"polygonCurvePoints"in t,get:t=>t.polygonCurvePoints,set:(t,e)=>{t.polygonCurvePoints=e}},metadata:a},at,ot),i(null,null,v,{kind:"field",name:"autoCircle",static:!1,private:!1,access:{has:t=>"autoCircle"in t,get:t=>t.autoCircle,set:(t,e)=>{t.autoCircle=e}},metadata:a},ht,lt),i(null,null,f,{kind:"field",name:"circlePoints",static:!1,private:!1,access:{has:t=>"circlePoints"in t,get:t=>t.circlePoints,set:(t,e)=>{t.circlePoints=e}},metadata:a},ct,dt),i(null,null,b,{kind:"field",name:"disabled",static:!1,private:!1,access:{has:t=>"disabled"in t,get:t=>t.disabled,set:(t,e)=>{t.disabled=e}},metadata:a},ut,pt),i(null,null,x,{kind:"field",name:"canvasElement",static:!1,private:!1,access:{has:t=>"canvasElement"in t,get:t=>t.canvasElement,set:(t,e)=>{t.canvasElement=e}},metadata:a},gt,mt),i(null,t={value:r},q,{kind:"class",name:r.name,metadata:a},null,j),r=t.value,a&&Object.defineProperty(r,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:a}),s(r,j)}constructor(){super(),this.width=(s(this,U),s(this,W,800)),this.height=(s(this,_),s(this,L,600)),this.tool=(s(this,O),s(this,F,"pen")),this.color=(s(this,N),s(this,$,"#000000")),this.strokeWidth=(s(this,X),s(this,Y,2)),this.backgroundColor=(s(this,H),s(this,J,"#ffffff")),this.lazy=(s(this,Q),s(this,G,!1)),this.lazyRadius=(s(this,K),s(this,V,60)),this.friction=(s(this,Z),s(this,tt,.1)),this.smoothing=(s(this,et),s(this,it,.5)),this.autoPolygon=(s(this,st),s(this,rt,!1)),this.polygonCurvePoints=(s(this,nt),s(this,at,10)),this.autoCircle=(s(this,ot),s(this,ht,!1)),this.circlePoints=(s(this,lt),s(this,ct,50)),this.disabled=(s(this,dt),s(this,ut,!1)),this.canvasElement=(s(this,pt),s(this,gt,void 0)),this.canvas=(s(this,mt),null),this.ctx=null,this.isDrawing=!1,this.isPressing=!1,this.currentStroke=[],this.strokes=[],this.undoneStrokes=[],this.lastPoint=null,this.rafId=null,this.mouseX=0,this.mouseY=0,this.drawBrush=new a({radius:this.lazyRadius,enabled:this.lazy})}styles(){return e.css`${':host{display:block;width:100%;height:100%;position:relative;user-select:none;-webkit-user-select:none}.draw-container{position:relative;width:100%;height:100%;overflow:hidden;background:var(--draw-bg,var(--snice-color-background,hsl(0 0% 100%)));border-radius:var(--draw-border-radius,0);touch-action:none}.draw-canvas{display:block;width:100%;height:100%;cursor:crosshair}.draw-canvas.disabled{cursor:not-allowed;opacity:.5}.draw-canvas.tool-pen{cursor:url(\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><circle cx="12" cy="12" r="2" fill="black"/></svg>\') 12 12,crosshair}.draw-canvas.tool-eraser{cursor:url(\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect x="8" y="8" width="8" height="8" fill="white" stroke="black"/></svg>\') 12 12,crosshair}.lazy-brush-point{position:absolute;width:8px;height:8px;margin:-4px 0 0 -4px;border-radius:50%;background:var(--primary-color,var(--snice-color-primary,hsl(207 90% 54%)));pointer-events:none;opacity:0;transition:opacity .2s}.lazy-brush-point.active{opacity:.6}.lazy-brush-radius{position:absolute;border:1px dashed var(--primary-color,var(--snice-color-primary,hsl(207 90% 54%)));border-radius:50%;pointer-events:none;opacity:0;transition:opacity .2s}.lazy-brush-radius.active{opacity:.3}'}`}onReady(){requestAnimationFrame(()=>{this.initCanvas(),this.startLoop()})}onDispose(){this.stopLoop()}render(){return e.html`
|
|
7
|
+
void 0===globalThis.Snice&&console.warn("[snice] snice-runtime.min.js must be loaded before snice-draw.min.js");var SniceDraw=function(t,e){"use strict";function i(t,e,i,s,n,r){function a(t){if(void 0!==t&&"function"!=typeof t)throw new TypeError("Function expected");return t}for(var o,h=s.kind,l="getter"===h?"get":"setter"===h?"set":"value",c=!e&&t?s.static?t:t.prototype:null,d=e||(c?Object.getOwnPropertyDescriptor(c,s.name):{}),u=!1,p=i.length-1;p>=0;p--){var g={};for(var m in s)g[m]="access"===m?{}:s[m];for(var m in s.access)g.access[m]=s.access[m];g.addInitializer=function(t){if(u)throw new TypeError("Cannot add initializers after decoration has completed");r.push(a(t||null))};var y=(0,i[p])("accessor"===h?{get:d.get,set:d.set}:d[l],g);if("accessor"===h){if(void 0===y)continue;if(null===y||"object"!=typeof y)throw new TypeError("Object expected");(o=a(y.get))&&(d.get=o),(o=a(y.set))&&(d.set=o),(o=a(y.init))&&n.unshift(o)}else(o=a(y))&&("field"===h?n.unshift(o):d[l]=o)}c&&Object.defineProperty(c,s.name,d),u=!0}function s(t,e,i){for(var s=arguments.length>2,n=0;n<e.length;n++)i=s?e[n].call(t,i):e[n].call(t);return s?i:void 0}"function"==typeof SuppressedError&&SuppressedError;const n=t=>t*(2-t);class r{constructor(t,e){this.x=t,this.y=e}update(t){return this.x=t.x,this.y=t.y,this}moveByAngle(t,e,i){const s=t+Math.PI/2;return i?(this.x=this.x+Math.sin(s)*e*n(1-i),this.y=this.y-Math.cos(s)*e*n(1-i)):(this.x=this.x+Math.sin(s)*e,this.y=this.y-Math.cos(s)*e),this}equalsTo(t){return this.x===t.x&&this.y===t.y}getDifferenceTo(t){return new r(this.x-t.x,this.y-t.y)}getDistanceTo(t){const e=this.getDifferenceTo(t);return Math.sqrt(Math.pow(e.x,2)+Math.pow(e.y,2))}getAngleTo(t){const e=this.getDifferenceTo(t);return Math.atan2(e.y,e.x)}toObject(){return{x:this.x,y:this.y}}}class a{constructor(t={}){const e=t.initialPoint||{x:0,y:0};this.radius=t.radius||30,this._isEnabled=!1!==t.enabled,this.pointer=new r(e.x,e.y),this.brush=new r(e.x,e.y),this.angle=0,this.distance=0,this._hasMoved=!1}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}isEnabled(){return this._isEnabled}setRadius(t){this.radius=t}getRadius(){return this.radius}getBrushCoordinates(){return this.brush.toObject()}getPointerCoordinates(){return this.pointer.toObject()}getBrush(){return this.brush}getPointer(){return this.pointer}getAngle(){return this.angle}getDistance(){return this.distance}brushHasMoved(){return this._hasMoved}update(t,e={}){if(this._hasMoved=!1,this.pointer.equalsTo(t)&&!e.both&&!e.friction)return!1;if(this.pointer.update(t),e.both)return this._hasMoved=!0,this.brush.update(t),!0;if(this._isEnabled){this.distance=this.pointer.getDistanceTo(this.brush),this.angle=this.pointer.getAngleTo(this.brush);const t=Math.round(10*(this.distance-this.radius))/10>0,i=e.friction&&e.friction<1&&e.friction>0?e.friction:void 0;t&&(this.brush.moveByAngle(this.angle,this.distance-this.radius,i),this._hasMoved=!0)}else this.distance=0,this.angle=0,this.brush.update(t),this._hasMoved=!0;return!0}}let o=(()=>{let t,n,r,o,h,l,c,d,u,p,g,m,y,w,v,f,b,x,k,P,D,S,C,M,E,B,R,z,I,T,_=[e.element("snice-draw")],q=[],j=HTMLElement,A=[],U=[],W=[],L=[],O=[],Q=[],F=[],N=[],$=[],X=[],Y=[],H=[],J=[],G=[],K=[],V=[],Z=[],tt=[],et=[],it=[],st=[],nt=[],rt=[],at=[],ot=[],ht=[],lt=[],ct=[],dt=[],ut=[],pt=[],gt=[],mt=[];return class extends j{static{n=this}static{const a="function"==typeof Symbol&&Symbol.metadata?Object.create(j[Symbol.metadata]??null):void 0;r=[e.property({type:Number})],o=[e.property({type:Number})],h=[e.property({type:String})],l=[e.property({type:String})],c=[e.property({type:Number,attribute:"stroke-width"})],d=[e.property({type:String,attribute:"background-color"})],u=[e.property({type:Boolean})],p=[e.property({type:Number,attribute:"lazy-radius"})],g=[e.property({type:Number})],m=[e.property({type:Number})],y=[e.property({type:Boolean,attribute:"auto-polygon"})],w=[e.property({type:Number,attribute:"polygon-curve-points"})],v=[e.property({type:Boolean,attribute:"auto-circle"})],f=[e.property({type:Number,attribute:"circle-points"})],b=[e.property({type:Boolean})],x=[e.query(".draw-canvas")],k=[e.styles()],P=[e.ready()],D=[e.dispose()],S=[e.render()],C=[e.on("pointerdown",{target:"canvas"})],M=[e.on("pointermove",{target:"canvas"})],E=[e.on("pointerup",{target:"canvas"})],B=[e.dispatch("draw-start",{bubbles:!0,composed:!0})],R=[e.dispatch("draw-end",{bubbles:!0,composed:!0})],z=[e.dispatch("draw-clear",{bubbles:!0,composed:!0})],I=[e.dispatch("draw-undo",{bubbles:!0,composed:!0})],T=[e.dispatch("draw-redo",{bubbles:!0,composed:!0})],i(this,null,k,{kind:"method",name:"styles",static:!1,private:!1,access:{has:t=>"styles"in t,get:t=>t.styles},metadata:a},null,A),i(this,null,P,{kind:"method",name:"onReady",static:!1,private:!1,access:{has:t=>"onReady"in t,get:t=>t.onReady},metadata:a},null,A),i(this,null,D,{kind:"method",name:"onDispose",static:!1,private:!1,access:{has:t=>"onDispose"in t,get:t=>t.onDispose},metadata:a},null,A),i(this,null,S,{kind:"method",name:"render",static:!1,private:!1,access:{has:t=>"render"in t,get:t=>t.render},metadata:a},null,A),i(this,null,C,{kind:"method",name:"handlePointerDown",static:!1,private:!1,access:{has:t=>"handlePointerDown"in t,get:t=>t.handlePointerDown},metadata:a},null,A),i(this,null,M,{kind:"method",name:"handlePointerMove",static:!1,private:!1,access:{has:t=>"handlePointerMove"in t,get:t=>t.handlePointerMove},metadata:a},null,A),i(this,null,E,{kind:"method",name:"handlePointerUp",static:!1,private:!1,access:{has:t=>"handlePointerUp"in t,get:t=>t.handlePointerUp},metadata:a},null,A),i(this,null,B,{kind:"method",name:"emitDrawStart",static:!1,private:!1,access:{has:t=>"emitDrawStart"in t,get:t=>t.emitDrawStart},metadata:a},null,A),i(this,null,R,{kind:"method",name:"emitDrawEnd",static:!1,private:!1,access:{has:t=>"emitDrawEnd"in t,get:t=>t.emitDrawEnd},metadata:a},null,A),i(this,null,z,{kind:"method",name:"emitDrawClear",static:!1,private:!1,access:{has:t=>"emitDrawClear"in t,get:t=>t.emitDrawClear},metadata:a},null,A),i(this,null,I,{kind:"method",name:"emitDrawUndo",static:!1,private:!1,access:{has:t=>"emitDrawUndo"in t,get:t=>t.emitDrawUndo},metadata:a},null,A),i(this,null,T,{kind:"method",name:"emitDrawRedo",static:!1,private:!1,access:{has:t=>"emitDrawRedo"in t,get:t=>t.emitDrawRedo},metadata:a},null,A),i(null,null,r,{kind:"field",name:"width",static:!1,private:!1,access:{has:t=>"width"in t,get:t=>t.width,set:(t,e)=>{t.width=e}},metadata:a},U,W),i(null,null,o,{kind:"field",name:"height",static:!1,private:!1,access:{has:t=>"height"in t,get:t=>t.height,set:(t,e)=>{t.height=e}},metadata:a},L,O),i(null,null,h,{kind:"field",name:"tool",static:!1,private:!1,access:{has:t=>"tool"in t,get:t=>t.tool,set:(t,e)=>{t.tool=e}},metadata:a},Q,F),i(null,null,l,{kind:"field",name:"color",static:!1,private:!1,access:{has:t=>"color"in t,get:t=>t.color,set:(t,e)=>{t.color=e}},metadata:a},N,$),i(null,null,c,{kind:"field",name:"strokeWidth",static:!1,private:!1,access:{has:t=>"strokeWidth"in t,get:t=>t.strokeWidth,set:(t,e)=>{t.strokeWidth=e}},metadata:a},X,Y),i(null,null,d,{kind:"field",name:"backgroundColor",static:!1,private:!1,access:{has:t=>"backgroundColor"in t,get:t=>t.backgroundColor,set:(t,e)=>{t.backgroundColor=e}},metadata:a},H,J),i(null,null,u,{kind:"field",name:"lazy",static:!1,private:!1,access:{has:t=>"lazy"in t,get:t=>t.lazy,set:(t,e)=>{t.lazy=e}},metadata:a},G,K),i(null,null,p,{kind:"field",name:"lazyRadius",static:!1,private:!1,access:{has:t=>"lazyRadius"in t,get:t=>t.lazyRadius,set:(t,e)=>{t.lazyRadius=e}},metadata:a},V,Z),i(null,null,g,{kind:"field",name:"friction",static:!1,private:!1,access:{has:t=>"friction"in t,get:t=>t.friction,set:(t,e)=>{t.friction=e}},metadata:a},tt,et),i(null,null,m,{kind:"field",name:"smoothing",static:!1,private:!1,access:{has:t=>"smoothing"in t,get:t=>t.smoothing,set:(t,e)=>{t.smoothing=e}},metadata:a},it,st),i(null,null,y,{kind:"field",name:"autoPolygon",static:!1,private:!1,access:{has:t=>"autoPolygon"in t,get:t=>t.autoPolygon,set:(t,e)=>{t.autoPolygon=e}},metadata:a},nt,rt),i(null,null,w,{kind:"field",name:"polygonCurvePoints",static:!1,private:!1,access:{has:t=>"polygonCurvePoints"in t,get:t=>t.polygonCurvePoints,set:(t,e)=>{t.polygonCurvePoints=e}},metadata:a},at,ot),i(null,null,v,{kind:"field",name:"autoCircle",static:!1,private:!1,access:{has:t=>"autoCircle"in t,get:t=>t.autoCircle,set:(t,e)=>{t.autoCircle=e}},metadata:a},ht,lt),i(null,null,f,{kind:"field",name:"circlePoints",static:!1,private:!1,access:{has:t=>"circlePoints"in t,get:t=>t.circlePoints,set:(t,e)=>{t.circlePoints=e}},metadata:a},ct,dt),i(null,null,b,{kind:"field",name:"disabled",static:!1,private:!1,access:{has:t=>"disabled"in t,get:t=>t.disabled,set:(t,e)=>{t.disabled=e}},metadata:a},ut,pt),i(null,null,x,{kind:"field",name:"canvasElement",static:!1,private:!1,access:{has:t=>"canvasElement"in t,get:t=>t.canvasElement,set:(t,e)=>{t.canvasElement=e}},metadata:a},gt,mt),i(null,t={value:n},_,{kind:"class",name:n.name,metadata:a},null,q),n=t.value,a&&Object.defineProperty(n,Symbol.metadata,{enumerable:!0,configurable:!0,writable:!0,value:a}),s(n,q)}constructor(){super(),this.width=(s(this,A),s(this,U,800)),this.height=(s(this,W),s(this,L,600)),this.tool=(s(this,O),s(this,Q,"pen")),this.color=(s(this,F),s(this,N,"#000000")),this.strokeWidth=(s(this,$),s(this,X,2)),this.backgroundColor=(s(this,Y),s(this,H,"#ffffff")),this.lazy=(s(this,J),s(this,G,!1)),this.lazyRadius=(s(this,K),s(this,V,60)),this.friction=(s(this,Z),s(this,tt,.1)),this.smoothing=(s(this,et),s(this,it,.5)),this.autoPolygon=(s(this,st),s(this,nt,!1)),this.polygonCurvePoints=(s(this,rt),s(this,at,10)),this.autoCircle=(s(this,ot),s(this,ht,!1)),this.circlePoints=(s(this,lt),s(this,ct,50)),this.disabled=(s(this,dt),s(this,ut,!1)),this.canvasElement=(s(this,pt),s(this,gt,void 0)),this.canvas=(s(this,mt),null),this.ctx=null,this.isDrawing=!1,this.isPressing=!1,this.currentStroke=[],this.strokes=[],this.undoneStrokes=[],this._commandQueue=[],this.lastPoint=null,this.rafId=null,this.mouseX=0,this.mouseY=0,this.drawBrush=new a({radius:this.lazyRadius,enabled:this.lazy})}styles(){return e.css`${':host{display:block;width:100%;height:100%;position:relative;user-select:none;-webkit-user-select:none}.draw-container{position:relative;width:100%;height:100%;overflow:hidden;background:var(--draw-bg,var(--snice-color-background,hsl(0 0% 100%)));border-radius:var(--draw-border-radius,0);touch-action:none}.draw-canvas{display:block;width:100%;height:100%;cursor:crosshair}.draw-canvas.disabled{cursor:not-allowed;opacity:.5}.draw-canvas.tool-pen{cursor:url(\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><circle cx="12" cy="12" r="2" fill="black"/></svg>\') 12 12,crosshair}.draw-canvas.tool-eraser{cursor:url(\'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><rect x="8" y="8" width="8" height="8" fill="white" stroke="black"/></svg>\') 12 12,crosshair}.lazy-brush-point{position:absolute;width:8px;height:8px;margin:-4px 0 0 -4px;border-radius:50%;background:var(--primary-color,var(--snice-color-primary,hsl(207 90% 54%)));pointer-events:none;opacity:0;transition:opacity .2s}.lazy-brush-point.active{opacity:.6}.lazy-brush-radius{position:absolute;border:1px dashed var(--primary-color,var(--snice-color-primary,hsl(207 90% 54%)));border-radius:50%;pointer-events:none;opacity:0;transition:opacity .2s}.lazy-brush-radius.active{opacity:.3}'}`}onReady(){requestAnimationFrame(()=>{this.initCanvas(),this.startLoop()})}onDispose(){this.stopLoop()}render(){return e.html`
|
|
8
8
|
<div class="draw-container" part="base">
|
|
9
9
|
<canvas
|
|
10
10
|
width="${this.width}"
|
|
@@ -13,5 +13,5 @@ void 0===globalThis.Snice&&console.warn("[snice] snice-runtime.min.js must be lo
|
|
|
13
13
|
part="canvas">
|
|
14
14
|
</canvas>
|
|
15
15
|
</div>
|
|
16
|
-
`}initCanvas(){if(this.canvas=this.canvasElement||null,!this.canvas)return;const t=this.canvas.getBoundingClientRect(),e=t.width,i=t.height,s=window.devicePixelRatio||1;this.canvas.width=e*s,this.canvas.height=i*s,this.width=e,this.height=i,this.ctx=this.canvas.getContext("2d",{willReadFrequently:!0}),this.ctx&&(this.ctx.scale(s,s),this.ctx.imageSmoothingEnabled=!0,this.ctx.imageSmoothingQuality="high",this.ctx.fillStyle=this.backgroundColor,this.ctx.fillRect(0,0,this.width,this.height),this.
|
|
16
|
+
`}initCanvas(){if(this.canvas=this.canvasElement||null,!this.canvas)return;const t=this.canvas.getBoundingClientRect(),e=t.width,i=t.height,s=window.devicePixelRatio||1;this.canvas.width=e*s,this.canvas.height=i*s,this.width=e,this.height=i,this.ctx=this.canvas.getContext("2d",{willReadFrequently:!0}),this.ctx&&(this.ctx.scale(s,s),this.ctx.imageSmoothingEnabled=!0,this.ctx.imageSmoothingQuality="high",this.ctx.fillStyle=this.backgroundColor,this.ctx.fillRect(0,0,this.width,this.height),this._flushQueue())}handlePointerDown(t){if(this.disabled)return;t.preventDefault();const e=this.getPointerPosition(t);this.mouseX=e.x,this.mouseY=e.y,this.drawBrush.update(e,{both:!0}),this.isPressing=!0,this.canvas?.setPointerCapture(t.pointerId),this.emitDrawStart(e)}handlePointerMove(t){if(this.disabled)return;t.preventDefault();const e=this.getPointerPosition(t);this.mouseX=e.x,this.mouseY=e.y}handlePointerUp(t){if(this.isPressing){if(t.preventDefault(),this.isPressing=!1,this.isDrawing=!1,this.currentStroke.length>0){const t=this.autoPolygon||this.autoCircle?this.processPolygon([...this.currentStroke]):[...this.currentStroke],e={id:this.generateId(),tool:this.tool,color:this.color,width:this.strokeWidth,points:t,timestamp:Date.now()};this.strokes.push(e),this.currentStroke=[],this.redraw(),this.emitDrawEnd(e)}this.canvas?.releasePointerCapture(t.pointerId)}}getPointerPosition(t){if(!this.canvas)return{x:0,y:0,pressure:0};const e=this.canvas.getBoundingClientRect();return{x:(t.clientX-e.left)*(this.width/e.width),y:(t.clientY-e.top)*(this.height/e.height),pressure:t.pressure}}startLoop(){const t=()=>{this.updateLazyBrush(),this.rafId=requestAnimationFrame(t)};t()}stopLoop(){null!==this.rafId&&(cancelAnimationFrame(this.rafId),this.rafId=null)}midPointBtw(t,e){return{x:t.x+(e.x-t.x)/2,y:t.y+(e.y-t.y)/2}}updateLazyBrush(){if(this.ctx&&(this.drawBrush.update({x:this.mouseX,y:this.mouseY},{friction:this.isDrawing?this.friction:1}),this.drawBrush.isEnabled(),this.drawBrush.brushHasMoved(),this.isPressing&&!this.isDrawing&&(this.isDrawing=!0,this.currentStroke=[],this.undoneStrokes=[],this.currentStroke.push(this.drawBrush.getBrushCoordinates())),this.isDrawing&&(this.ctx.fillStyle=this.backgroundColor,this.ctx.fillRect(0,0,this.width,this.height),this.strokes.forEach(t=>{this.drawStroke(t)}),this.currentStroke.push(this.drawBrush.getBrushCoordinates()),this.currentStroke.length>1))){this.ctx.lineJoin="round",this.ctx.lineCap="round",this.ctx.strokeStyle="eraser"===this.tool?this.backgroundColor:this.color,this.ctx.lineWidth=2*this.strokeWidth;let t=this.currentStroke[0],e=this.currentStroke[1];this.ctx.moveTo(e.x,e.y),this.ctx.beginPath();for(let i=1,s=this.currentStroke.length;i<s;i++){const s=this.midPointBtw(t,e);this.ctx.quadraticCurveTo(t.x,t.y,s.x,s.y),t=this.currentStroke[i],e=this.currentStroke[i+1]}this.ctx.lineTo(t.x,t.y),this.ctx.stroke()}}redraw(){this.ctx&&(this.ctx.fillStyle=this.backgroundColor,this.ctx.fillRect(0,0,this.width,this.height),this.strokes.forEach(t=>{this.drawStroke(t)}))}_flushQueue(){const t=this._commandQueue;this._commandQueue=[];for(const[e,i]of t)this[e](...i)}drawStroke(t){if(!this.ctx||0===t.points.length)return;if(this.ctx.lineJoin="round",this.ctx.lineCap="round",this.ctx.strokeStyle="eraser"===t.tool?this.backgroundColor:t.color,this.ctx.lineWidth=2*t.width,1===t.points.length)return this.ctx.beginPath(),this.ctx.arc(t.points[0].x,t.points[0].y,t.width,0,2*Math.PI),void this.ctx.fill();let e=t.points[0],i=t.points[1];this.ctx.moveTo(i.x,i.y),this.ctx.beginPath();for(let s=1,n=t.points.length;s<n;s++){const n=this.midPointBtw(e,i);this.ctx.quadraticCurveTo(e.x,e.y,n.x,n.y),e=t.points[s],i=t.points[s+1]}this.ctx.lineTo(e.x,e.y),this.ctx.stroke()}clear(){this.ctx?(this.strokes=[],this.undoneStrokes=[],this.ctx.fillStyle=this.backgroundColor,this.ctx.fillRect(0,0,this.width,this.height),this.emitDrawClear()):this._commandQueue.push(["clear",[]])}undo(){if(!this.ctx)return void this._commandQueue.push(["undo",[]]);if(0===this.strokes.length)return;const t=this.strokes.pop();t&&(this.undoneStrokes.push(t),this.redraw(),this.emitDrawUndo())}redo(){if(!this.ctx)return void this._commandQueue.push(["redo",[]]);if(0===this.undoneStrokes.length)return;const t=this.undoneStrokes.pop();t&&(this.strokes.push(t),this.drawStroke(t),this.emitDrawRedo())}toDataURL(t="image/png",e=.92){return this.canvas?this.canvas.toDataURL(t,e):""}async toBlob(t="image/png",e=.92){if(!this.canvas)throw new Error("Canvas not initialized");return new Promise((i,s)=>{this.canvas?.toBlob(t=>{t?i(t):s(new Error("Failed to create blob"))},t,e)})}download(t=`drawing-${Date.now()}.png`){const e=this.toDataURL(),i=document.createElement("a");i.href=e,i.download=t,i.click()}async loadImage(t){if(!this.ctx)throw new Error("Canvas not initialized");return new Promise((e,i)=>{const s=new Image;s.crossOrigin="anonymous",s.onload=()=>{this.ctx.drawImage(s,0,0,this.width,this.height),e()},s.onerror=()=>i(new Error("Failed to load image")),s.src=t})}getStrokes(){return[...this.strokes]}setStrokes(t){this.ctx?(this.strokes=[...t],this.undoneStrokes=[],this.redraw()):this._commandQueue.push(["setStrokes",[t]])}generateId(){return`stroke-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}processPolygon(t){if(this.autoCircle&&t.length>=4)return this.createWobblyCircle(t);if(!this.autoPolygon||t.length<4)return t;const e=this.simplifyPoints(t,5),i=this.findFirstIntersection(e);if(i)return this.trimAtIntersection(t,i);{const e=t[0],i=t[t.length-1];if(Math.sqrt(Math.pow(i.x-e.x,2)+Math.pow(i.y-e.y,2))>20){const s=this.createClosingCurve(i,e,this.polygonCurvePoints);return[...t,...s]}}return t}simplifyPoints(t,e){const i=[];for(let s=0;s<t.length;s+=e)i.push(t[s]);return i[i.length-1]!==t[t.length-1]&&i.push(t[t.length-1]),i}findFirstIntersection(t){for(let e=0;e<t.length-1;e++){const i=t[e],s=t[e+1];for(let n=e+2;n<t.length-1;n++){const r=t[n],a=t[n+1];if(0===e&&n===t.length-2)continue;const o=this.lineIntersection(i,s,r,a);if(o)return{i:e,j:n,point:o}}}return null}lineIntersection(t,e,i,s){const n=t.x,r=t.y,a=e.x,o=e.y,h=i.x,l=i.y,c=s.x,d=s.y,u=(n-a)*(l-d)-(r-o)*(h-c);if(Math.abs(u)<1e-4)return null;const p=((n-h)*(l-d)-(r-l)*(h-c))/u,g=-((n-a)*(r-l)-(r-o)*(n-h))/u;return p>=0&&p<=1&&g>=0&&g<=1?{x:n+p*(a-n),y:r+p*(o-r),pressure:0}:null}trimAtIntersection(t,e){const i=Math.min(5*e.j,t.length-1);return[...t.slice(0,i+1),e.point]}createClosingCurve(t,e,i){if(i<2)return[e];const s=[],n=(t.x+e.x)/2,r=(t.y+e.y)/2,a=e.x-t.x,o=e.y-t.y,h=-o,l=a,c=Math.sqrt(a*a+o*o),d=.2*c,u=n+h/c*d,p=r+l/c*d;for(let n=1;n<=i;n++){const r=n/(i+1),a=Math.pow(1-r,2)*t.x+2*(1-r)*r*u+Math.pow(r,2)*e.x,o=Math.pow(1-r,2)*t.y+2*(1-r)*r*p+Math.pow(r,2)*e.y;s.push({x:a,y:o,pressure:0})}return s.push(e),s}createWobblyCircle(t){if(t.length<4)return t;const e=Math.max(3,Math.floor(t.length/80));let i=[];for(let s=0;s<t.length;s+=e){const n=t.slice(s,Math.min(s+e,t.length));let r=0,a=0;for(const t of n)r+=t.x,a+=t.y;i.push({x:r/n.length,y:a/n.length,pressure:0})}let s=this.removeSharpAngles(i,20);const n=s[0],r=s[s.length-1];let a;if(Math.sqrt(Math.pow(r.x-n.x,2)+Math.pow(r.y-n.y,2))<10)a=[...s,n];else{const t=this.createClosingCurve(r,n,this.circlePoints);a=[...s,...t]}let o=a;for(let t=0;t<4;t++){const t=[],e=o.length;for(let i=0;i<e;i++){const s=o[i],n=o[(i+1)%e];t.push({x:.75*s.x+.25*n.x,y:.75*s.y+.25*n.y,pressure:0}),t.push({x:.25*s.x+.75*n.x,y:.25*s.y+.75*n.y,pressure:0})}o=t}return o.length>0&&o.push({...o[0]}),o}removeSharpAngles(t,e){if(t.length<3)return t;const i=[t[0]],s=e*Math.PI/180;for(let e=1;e<t.length-1;e++){const n=t[e-1],r=t[e],a=t[e+1],o=r.x-n.x,h=r.y-n.y,l=a.x-r.x,c=a.y-r.y,d=Math.sqrt(o*o+h*h),u=Math.sqrt(l*l+c*c);if(0===d||0===u)continue;const p=(o*l+h*c)/(d*u);Math.acos(Math.max(-1,Math.min(1,p)))>=s&&i.push(r)}return i.push(t[t.length-1]),i}emitDrawStart(t){return{draw:this,point:t}}emitDrawEnd(t){return{draw:this,stroke:t}}emitDrawClear(){return{draw:this}}emitDrawUndo(){return{draw:this}}emitDrawRedo(){return{draw:this}}},n})();return t.SniceDraw=o,t}({},Snice);
|
|
17
17
|
//# sourceMappingURL=snice-draw.min.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snice-draw.min.js","sources":["../../../node_modules/tslib/tslib.es6.mjs","../../components/draw/snice-draw.js"],"sourcesContent":["/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","import { __esDecorate, __runInitializers } from 'tslib';\nimport { element, property, query, styles, ready, dispose, render, on, dispatch, css, html } from 'snice';\n\nvar drawStyles = \":host{display:block;width:100%;height:100%;position:relative;user-select:none;-webkit-user-select:none}.draw-container{position:relative;width:100%;height:100%;overflow:hidden;background:var(--draw-bg,var(--snice-color-background,hsl(0 0% 100%)));border-radius:var(--draw-border-radius,0);touch-action:none}.draw-canvas{display:block;width:100%;height:100%;cursor:crosshair}.draw-canvas.disabled{cursor:not-allowed;opacity:.5}.draw-canvas.tool-pen{cursor:url('data:image/svg+xml;utf8,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"2\\\" fill=\\\"black\\\"/></svg>') 12 12,crosshair}.draw-canvas.tool-eraser{cursor:url('data:image/svg+xml;utf8,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"8\\\" y=\\\"8\\\" width=\\\"8\\\" height=\\\"8\\\" fill=\\\"white\\\" stroke=\\\"black\\\"/></svg>') 12 12,crosshair}.lazy-brush-point{position:absolute;width:8px;height:8px;margin:-4px 0 0 -4px;border-radius:50%;background:var(--primary-color,var(--snice-color-primary,hsl(207 90% 54%)));pointer-events:none;opacity:0;transition:opacity .2s}.lazy-brush-point.active{opacity:.6}.lazy-brush-radius{position:absolute;border:1px dashed var(--primary-color,var(--snice-color-primary,hsl(207 90% 54%)));border-radius:50%;pointer-events:none;opacity:0;transition:opacity .2s}.lazy-brush-radius.active{opacity:.3}\";\n\nconst ease = (t) => t * (2 - t);\nclass DrawPoint {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n update(point) {\n this.x = point.x;\n this.y = point.y;\n return this;\n }\n moveByAngle(angle, distance, friction) {\n const angleRotated = angle + Math.PI / 2;\n if (friction) {\n this.x = this.x + Math.sin(angleRotated) * distance * ease(1 - friction);\n this.y = this.y - Math.cos(angleRotated) * distance * ease(1 - friction);\n }\n else {\n this.x = this.x + Math.sin(angleRotated) * distance;\n this.y = this.y - Math.cos(angleRotated) * distance;\n }\n return this;\n }\n equalsTo(point) {\n return this.x === point.x && this.y === point.y;\n }\n getDifferenceTo(point) {\n return new DrawPoint(this.x - point.x, this.y - point.y);\n }\n getDistanceTo(point) {\n const diff = this.getDifferenceTo(point);\n return Math.sqrt(Math.pow(diff.x, 2) + Math.pow(diff.y, 2));\n }\n getAngleTo(point) {\n const diff = this.getDifferenceTo(point);\n return Math.atan2(diff.y, diff.x);\n }\n toObject() {\n return { x: this.x, y: this.y };\n }\n}\nclass DrawBrush {\n constructor(options = {}) {\n const initialPoint = options.initialPoint || { x: 0, y: 0 };\n this.radius = options.radius || 30;\n this._isEnabled = options.enabled === false ? false : true;\n this.pointer = new DrawPoint(initialPoint.x, initialPoint.y);\n this.brush = new DrawPoint(initialPoint.x, initialPoint.y);\n this.angle = 0;\n this.distance = 0;\n this._hasMoved = false;\n }\n enable() {\n this._isEnabled = true;\n }\n disable() {\n this._isEnabled = false;\n }\n isEnabled() {\n return this._isEnabled;\n }\n setRadius(radius) {\n this.radius = radius;\n }\n getRadius() {\n return this.radius;\n }\n getBrushCoordinates() {\n return this.brush.toObject();\n }\n getPointerCoordinates() {\n return this.pointer.toObject();\n }\n getBrush() {\n return this.brush;\n }\n getPointer() {\n return this.pointer;\n }\n getAngle() {\n return this.angle;\n }\n getDistance() {\n return this.distance;\n }\n brushHasMoved() {\n return this._hasMoved;\n }\n update(newPointerPoint, options = {}) {\n this._hasMoved = false;\n if (this.pointer.equalsTo(newPointerPoint) && !options.both && !options.friction) {\n return false;\n }\n this.pointer.update(newPointerPoint);\n if (options.both) {\n this._hasMoved = true;\n this.brush.update(newPointerPoint);\n return true;\n }\n if (this._isEnabled) {\n this.distance = this.pointer.getDistanceTo(this.brush);\n this.angle = this.pointer.getAngleTo(this.brush);\n const isOutside = Math.round((this.distance - this.radius) * 10) / 10 > 0;\n const friction = options.friction && options.friction < 1 && options.friction > 0\n ? options.friction\n : undefined;\n if (isOutside) {\n this.brush.moveByAngle(this.angle, this.distance - this.radius, friction);\n this._hasMoved = true;\n }\n }\n else {\n this.distance = 0;\n this.angle = 0;\n this.brush.update(newPointerPoint);\n this._hasMoved = true;\n }\n return true;\n }\n}\nlet SniceDraw = (() => {\n let _classDecorators = [element('snice-draw')];\n let _classDescriptor;\n let _classExtraInitializers = [];\n let _classThis;\n let _classSuper = HTMLElement;\n let _instanceExtraInitializers = [];\n let _width_decorators;\n let _width_initializers = [];\n let _width_extraInitializers = [];\n let _height_decorators;\n let _height_initializers = [];\n let _height_extraInitializers = [];\n let _tool_decorators;\n let _tool_initializers = [];\n let _tool_extraInitializers = [];\n let _color_decorators;\n let _color_initializers = [];\n let _color_extraInitializers = [];\n let _strokeWidth_decorators;\n let _strokeWidth_initializers = [];\n let _strokeWidth_extraInitializers = [];\n let _backgroundColor_decorators;\n let _backgroundColor_initializers = [];\n let _backgroundColor_extraInitializers = [];\n let _lazy_decorators;\n let _lazy_initializers = [];\n let _lazy_extraInitializers = [];\n let _lazyRadius_decorators;\n let _lazyRadius_initializers = [];\n let _lazyRadius_extraInitializers = [];\n let _friction_decorators;\n let _friction_initializers = [];\n let _friction_extraInitializers = [];\n let _smoothing_decorators;\n let _smoothing_initializers = [];\n let _smoothing_extraInitializers = [];\n let _autoPolygon_decorators;\n let _autoPolygon_initializers = [];\n let _autoPolygon_extraInitializers = [];\n let _polygonCurvePoints_decorators;\n let _polygonCurvePoints_initializers = [];\n let _polygonCurvePoints_extraInitializers = [];\n let _autoCircle_decorators;\n let _autoCircle_initializers = [];\n let _autoCircle_extraInitializers = [];\n let _circlePoints_decorators;\n let _circlePoints_initializers = [];\n let _circlePoints_extraInitializers = [];\n let _disabled_decorators;\n let _disabled_initializers = [];\n let _disabled_extraInitializers = [];\n let _canvasElement_decorators;\n let _canvasElement_initializers = [];\n let _canvasElement_extraInitializers = [];\n let _styles_decorators;\n let _onReady_decorators;\n let _onDispose_decorators;\n let _render_decorators;\n let _handlePointerDown_decorators;\n let _handlePointerMove_decorators;\n let _handlePointerUp_decorators;\n let _emitDrawStart_decorators;\n let _emitDrawEnd_decorators;\n let _emitDrawClear_decorators;\n let _emitDrawUndo_decorators;\n let _emitDrawRedo_decorators;\n (class extends _classSuper {\n static { _classThis = this; }\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;\n _width_decorators = [property({ type: Number })];\n _height_decorators = [property({ type: Number })];\n _tool_decorators = [property({ type: String })];\n _color_decorators = [property({ type: String })];\n _strokeWidth_decorators = [property({ type: Number, attribute: 'stroke-width' })];\n _backgroundColor_decorators = [property({ type: String, attribute: 'background-color' })];\n _lazy_decorators = [property({ type: Boolean })];\n _lazyRadius_decorators = [property({ type: Number, attribute: 'lazy-radius' })];\n _friction_decorators = [property({ type: Number })];\n _smoothing_decorators = [property({ type: Number })];\n _autoPolygon_decorators = [property({ type: Boolean, attribute: 'auto-polygon' })];\n _polygonCurvePoints_decorators = [property({ type: Number, attribute: 'polygon-curve-points' })];\n _autoCircle_decorators = [property({ type: Boolean, attribute: 'auto-circle' })];\n _circlePoints_decorators = [property({ type: Number, attribute: 'circle-points' })];\n _disabled_decorators = [property({ type: Boolean })];\n _canvasElement_decorators = [query('.draw-canvas')];\n _styles_decorators = [styles()];\n _onReady_decorators = [ready()];\n _onDispose_decorators = [dispose()];\n _render_decorators = [render()];\n _handlePointerDown_decorators = [on('pointerdown', { target: 'canvas' })];\n _handlePointerMove_decorators = [on('pointermove', { target: 'canvas' })];\n _handlePointerUp_decorators = [on('pointerup', { target: 'canvas' })];\n _emitDrawStart_decorators = [dispatch('draw-start', { bubbles: true, composed: true })];\n _emitDrawEnd_decorators = [dispatch('draw-end', { bubbles: true, composed: true })];\n _emitDrawClear_decorators = [dispatch('draw-clear', { bubbles: true, composed: true })];\n _emitDrawUndo_decorators = [dispatch('draw-undo', { bubbles: true, composed: true })];\n _emitDrawRedo_decorators = [dispatch('draw-redo', { bubbles: true, composed: true })];\n __esDecorate(this, null, _styles_decorators, { kind: \"method\", name: \"styles\", static: false, private: false, access: { has: obj => \"styles\" in obj, get: obj => obj.styles }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _onReady_decorators, { kind: \"method\", name: \"onReady\", static: false, private: false, access: { has: obj => \"onReady\" in obj, get: obj => obj.onReady }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _onDispose_decorators, { kind: \"method\", name: \"onDispose\", static: false, private: false, access: { has: obj => \"onDispose\" in obj, get: obj => obj.onDispose }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _render_decorators, { kind: \"method\", name: \"render\", static: false, private: false, access: { has: obj => \"render\" in obj, get: obj => obj.render }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _handlePointerDown_decorators, { kind: \"method\", name: \"handlePointerDown\", static: false, private: false, access: { has: obj => \"handlePointerDown\" in obj, get: obj => obj.handlePointerDown }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _handlePointerMove_decorators, { kind: \"method\", name: \"handlePointerMove\", static: false, private: false, access: { has: obj => \"handlePointerMove\" in obj, get: obj => obj.handlePointerMove }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _handlePointerUp_decorators, { kind: \"method\", name: \"handlePointerUp\", static: false, private: false, access: { has: obj => \"handlePointerUp\" in obj, get: obj => obj.handlePointerUp }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _emitDrawStart_decorators, { kind: \"method\", name: \"emitDrawStart\", static: false, private: false, access: { has: obj => \"emitDrawStart\" in obj, get: obj => obj.emitDrawStart }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _emitDrawEnd_decorators, { kind: \"method\", name: \"emitDrawEnd\", static: false, private: false, access: { has: obj => \"emitDrawEnd\" in obj, get: obj => obj.emitDrawEnd }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _emitDrawClear_decorators, { kind: \"method\", name: \"emitDrawClear\", static: false, private: false, access: { has: obj => \"emitDrawClear\" in obj, get: obj => obj.emitDrawClear }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _emitDrawUndo_decorators, { kind: \"method\", name: \"emitDrawUndo\", static: false, private: false, access: { has: obj => \"emitDrawUndo\" in obj, get: obj => obj.emitDrawUndo }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _emitDrawRedo_decorators, { kind: \"method\", name: \"emitDrawRedo\", static: false, private: false, access: { has: obj => \"emitDrawRedo\" in obj, get: obj => obj.emitDrawRedo }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(null, null, _width_decorators, { kind: \"field\", name: \"width\", static: false, private: false, access: { has: obj => \"width\" in obj, get: obj => obj.width, set: (obj, value) => { obj.width = value; } }, metadata: _metadata }, _width_initializers, _width_extraInitializers);\n __esDecorate(null, null, _height_decorators, { kind: \"field\", name: \"height\", static: false, private: false, access: { has: obj => \"height\" in obj, get: obj => obj.height, set: (obj, value) => { obj.height = value; } }, metadata: _metadata }, _height_initializers, _height_extraInitializers);\n __esDecorate(null, null, _tool_decorators, { kind: \"field\", name: \"tool\", static: false, private: false, access: { has: obj => \"tool\" in obj, get: obj => obj.tool, set: (obj, value) => { obj.tool = value; } }, metadata: _metadata }, _tool_initializers, _tool_extraInitializers);\n __esDecorate(null, null, _color_decorators, { kind: \"field\", name: \"color\", static: false, private: false, access: { has: obj => \"color\" in obj, get: obj => obj.color, set: (obj, value) => { obj.color = value; } }, metadata: _metadata }, _color_initializers, _color_extraInitializers);\n __esDecorate(null, null, _strokeWidth_decorators, { kind: \"field\", name: \"strokeWidth\", static: false, private: false, access: { has: obj => \"strokeWidth\" in obj, get: obj => obj.strokeWidth, set: (obj, value) => { obj.strokeWidth = value; } }, metadata: _metadata }, _strokeWidth_initializers, _strokeWidth_extraInitializers);\n __esDecorate(null, null, _backgroundColor_decorators, { kind: \"field\", name: \"backgroundColor\", static: false, private: false, access: { has: obj => \"backgroundColor\" in obj, get: obj => obj.backgroundColor, set: (obj, value) => { obj.backgroundColor = value; } }, metadata: _metadata }, _backgroundColor_initializers, _backgroundColor_extraInitializers);\n __esDecorate(null, null, _lazy_decorators, { kind: \"field\", name: \"lazy\", static: false, private: false, access: { has: obj => \"lazy\" in obj, get: obj => obj.lazy, set: (obj, value) => { obj.lazy = value; } }, metadata: _metadata }, _lazy_initializers, _lazy_extraInitializers);\n __esDecorate(null, null, _lazyRadius_decorators, { kind: \"field\", name: \"lazyRadius\", static: false, private: false, access: { has: obj => \"lazyRadius\" in obj, get: obj => obj.lazyRadius, set: (obj, value) => { obj.lazyRadius = value; } }, metadata: _metadata }, _lazyRadius_initializers, _lazyRadius_extraInitializers);\n __esDecorate(null, null, _friction_decorators, { kind: \"field\", name: \"friction\", static: false, private: false, access: { has: obj => \"friction\" in obj, get: obj => obj.friction, set: (obj, value) => { obj.friction = value; } }, metadata: _metadata }, _friction_initializers, _friction_extraInitializers);\n __esDecorate(null, null, _smoothing_decorators, { kind: \"field\", name: \"smoothing\", static: false, private: false, access: { has: obj => \"smoothing\" in obj, get: obj => obj.smoothing, set: (obj, value) => { obj.smoothing = value; } }, metadata: _metadata }, _smoothing_initializers, _smoothing_extraInitializers);\n __esDecorate(null, null, _autoPolygon_decorators, { kind: \"field\", name: \"autoPolygon\", static: false, private: false, access: { has: obj => \"autoPolygon\" in obj, get: obj => obj.autoPolygon, set: (obj, value) => { obj.autoPolygon = value; } }, metadata: _metadata }, _autoPolygon_initializers, _autoPolygon_extraInitializers);\n __esDecorate(null, null, _polygonCurvePoints_decorators, { kind: \"field\", name: \"polygonCurvePoints\", static: false, private: false, access: { has: obj => \"polygonCurvePoints\" in obj, get: obj => obj.polygonCurvePoints, set: (obj, value) => { obj.polygonCurvePoints = value; } }, metadata: _metadata }, _polygonCurvePoints_initializers, _polygonCurvePoints_extraInitializers);\n __esDecorate(null, null, _autoCircle_decorators, { kind: \"field\", name: \"autoCircle\", static: false, private: false, access: { has: obj => \"autoCircle\" in obj, get: obj => obj.autoCircle, set: (obj, value) => { obj.autoCircle = value; } }, metadata: _metadata }, _autoCircle_initializers, _autoCircle_extraInitializers);\n __esDecorate(null, null, _circlePoints_decorators, { kind: \"field\", name: \"circlePoints\", static: false, private: false, access: { has: obj => \"circlePoints\" in obj, get: obj => obj.circlePoints, set: (obj, value) => { obj.circlePoints = value; } }, metadata: _metadata }, _circlePoints_initializers, _circlePoints_extraInitializers);\n __esDecorate(null, null, _disabled_decorators, { kind: \"field\", name: \"disabled\", static: false, private: false, access: { has: obj => \"disabled\" in obj, get: obj => obj.disabled, set: (obj, value) => { obj.disabled = value; } }, metadata: _metadata }, _disabled_initializers, _disabled_extraInitializers);\n __esDecorate(null, null, _canvasElement_decorators, { kind: \"field\", name: \"canvasElement\", static: false, private: false, access: { has: obj => \"canvasElement\" in obj, get: obj => obj.canvasElement, set: (obj, value) => { obj.canvasElement = value; } }, metadata: _metadata }, _canvasElement_initializers, _canvasElement_extraInitializers);\n __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: \"class\", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);\n _classThis = _classDescriptor.value;\n if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n __runInitializers(_classThis, _classExtraInitializers);\n }\n constructor() {\n super();\n this.width = (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _width_initializers, 800));\n this.height = (__runInitializers(this, _width_extraInitializers), __runInitializers(this, _height_initializers, 600));\n this.tool = (__runInitializers(this, _height_extraInitializers), __runInitializers(this, _tool_initializers, 'pen'));\n this.color = (__runInitializers(this, _tool_extraInitializers), __runInitializers(this, _color_initializers, '#000000'));\n this.strokeWidth = (__runInitializers(this, _color_extraInitializers), __runInitializers(this, _strokeWidth_initializers, 2));\n this.backgroundColor = (__runInitializers(this, _strokeWidth_extraInitializers), __runInitializers(this, _backgroundColor_initializers, '#ffffff'));\n this.lazy = (__runInitializers(this, _backgroundColor_extraInitializers), __runInitializers(this, _lazy_initializers, false));\n this.lazyRadius = (__runInitializers(this, _lazy_extraInitializers), __runInitializers(this, _lazyRadius_initializers, 60));\n this.friction = (__runInitializers(this, _lazyRadius_extraInitializers), __runInitializers(this, _friction_initializers, 0.1));\n this.smoothing = (__runInitializers(this, _friction_extraInitializers), __runInitializers(this, _smoothing_initializers, 0.5));\n this.autoPolygon = (__runInitializers(this, _smoothing_extraInitializers), __runInitializers(this, _autoPolygon_initializers, false));\n this.polygonCurvePoints = (__runInitializers(this, _autoPolygon_extraInitializers), __runInitializers(this, _polygonCurvePoints_initializers, 10));\n this.autoCircle = (__runInitializers(this, _polygonCurvePoints_extraInitializers), __runInitializers(this, _autoCircle_initializers, false));\n this.circlePoints = (__runInitializers(this, _autoCircle_extraInitializers), __runInitializers(this, _circlePoints_initializers, 50));\n this.disabled = (__runInitializers(this, _circlePoints_extraInitializers), __runInitializers(this, _disabled_initializers, false));\n this.canvasElement = (__runInitializers(this, _disabled_extraInitializers), __runInitializers(this, _canvasElement_initializers, void 0));\n this.canvas = (__runInitializers(this, _canvasElement_extraInitializers), null);\n this.ctx = null;\n this.isDrawing = false;\n this.isPressing = false;\n this.currentStroke = [];\n this.strokes = [];\n this.undoneStrokes = [];\n this.lastPoint = null;\n this.rafId = null;\n this.mouseX = 0;\n this.mouseY = 0;\n this.drawBrush = new DrawBrush({\n radius: this.lazyRadius,\n enabled: this.lazy\n });\n }\n styles() {\n return css /*css*/ `${drawStyles}`;\n }\n onReady() {\n requestAnimationFrame(() => {\n this.initCanvas();\n this.startLoop();\n });\n }\n onDispose() {\n this.stopLoop();\n }\n render() {\n return html /*html*/ `\n <div class=\"draw-container\" part=\"base\">\n <canvas\n width=\"${this.width}\"\n height=\"${this.height}\"\n class=\"draw-canvas tool-${this.tool} ${this.disabled ? 'disabled' : ''}\"\n part=\"canvas\">\n </canvas>\n </div>\n `;\n }\n initCanvas() {\n this.canvas = this.canvasElement || null;\n if (!this.canvas)\n return;\n // Get the actual display size from the container\n const rect = this.canvas.getBoundingClientRect();\n const displayWidth = rect.width;\n const displayHeight = rect.height;\n // Handle high DPI displays\n const dpr = window.devicePixelRatio || 1;\n // Set canvas buffer size (accounting for DPI)\n this.canvas.width = displayWidth * dpr;\n this.canvas.height = displayHeight * dpr;\n // Store logical dimensions for coordinate mapping\n this.width = displayWidth;\n this.height = displayHeight;\n this.ctx = this.canvas.getContext('2d', { willReadFrequently: true });\n if (!this.ctx)\n return;\n // Scale canvas drawing to match DPI\n this.ctx.scale(dpr, dpr);\n // Enable anti-aliasing for smooth lines\n this.ctx.imageSmoothingEnabled = true;\n this.ctx.imageSmoothingQuality = 'high';\n // Set background\n this.ctx.fillStyle = this.backgroundColor;\n this.ctx.fillRect(0, 0, this.width, this.height);\n // Redraw existing strokes\n this.redraw();\n }\n handlePointerDown(e) {\n if (this.disabled)\n return;\n e.preventDefault();\n const point = this.getPointerPosition(e);\n this.mouseX = point.x;\n this.mouseY = point.y;\n // Update brush to pointer position immediately\n this.drawBrush.update(point, { both: true });\n this.isPressing = true;\n this.canvas?.setPointerCapture(e.pointerId);\n this.emitDrawStart(point);\n }\n handlePointerMove(e) {\n if (this.disabled)\n return;\n e.preventDefault();\n const point = this.getPointerPosition(e);\n this.mouseX = point.x;\n this.mouseY = point.y;\n }\n handlePointerUp(e) {\n if (!this.isPressing)\n return;\n e.preventDefault();\n this.isPressing = false;\n this.isDrawing = false;\n if (this.currentStroke.length > 0) {\n // Process polygon/circle if auto-polygon or auto-circle is enabled\n const points = (this.autoPolygon || this.autoCircle)\n ? this.processPolygon([...this.currentStroke])\n : [...this.currentStroke];\n const stroke = {\n id: this.generateId(),\n tool: this.tool,\n color: this.color,\n width: this.strokeWidth,\n points,\n timestamp: Date.now()\n };\n this.strokes.push(stroke);\n this.currentStroke = [];\n // Redraw immediately to show the processed polygon/circle\n this.redraw();\n this.emitDrawEnd(stroke);\n }\n this.canvas?.releasePointerCapture(e.pointerId);\n }\n getPointerPosition(e) {\n if (!this.canvas)\n return { x: 0, y: 0, pressure: 0 };\n const rect = this.canvas.getBoundingClientRect();\n // Map from screen coordinates to logical canvas coordinates\n const x = (e.clientX - rect.left) * (this.width / rect.width);\n const y = (e.clientY - rect.top) * (this.height / rect.height);\n return {\n x,\n y,\n pressure: e.pressure\n };\n }\n startLoop() {\n const loop = () => {\n this.updateLazyBrush();\n this.rafId = requestAnimationFrame(loop);\n };\n loop();\n }\n stopLoop() {\n if (this.rafId !== null) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n }\n midPointBtw(p1, p2) {\n return {\n x: p1.x + (p2.x - p1.x) / 2,\n y: p1.y + (p2.y - p1.y) / 2\n };\n }\n updateLazyBrush() {\n if (!this.ctx)\n return;\n this.drawBrush.update({ x: this.mouseX, y: this.mouseY }, { friction: this.isDrawing ? this.friction : 1 });\n !this.drawBrush.isEnabled();\n this.drawBrush.brushHasMoved();\n // Start drawing if pressing and not yet drawing\n if (this.isPressing && !this.isDrawing) {\n this.isDrawing = true;\n this.currentStroke = [];\n this.undoneStrokes = [];\n this.currentStroke.push(this.drawBrush.getBrushCoordinates());\n }\n if (this.isDrawing) {\n // Clear canvas and fill background\n this.ctx.fillStyle = this.backgroundColor;\n this.ctx.fillRect(0, 0, this.width, this.height);\n // Redraw all completed strokes\n this.strokes.forEach(stroke => {\n this.drawStroke(stroke);\n });\n // Add current point\n this.currentStroke.push(this.drawBrush.getBrushCoordinates());\n // Draw current stroke with smoothing\n if (this.currentStroke.length > 1) {\n this.ctx.lineJoin = 'round';\n this.ctx.lineCap = 'round';\n this.ctx.strokeStyle = this.tool === 'eraser' ? this.backgroundColor : this.color;\n this.ctx.lineWidth = this.strokeWidth * 2;\n let p1 = this.currentStroke[0];\n let p2 = this.currentStroke[1];\n this.ctx.moveTo(p2.x, p2.y);\n this.ctx.beginPath();\n for (let i = 1, len = this.currentStroke.length; i < len; i++) {\n const midPoint = this.midPointBtw(p1, p2);\n this.ctx.quadraticCurveTo(p1.x, p1.y, midPoint.x, midPoint.y);\n p1 = this.currentStroke[i];\n p2 = this.currentStroke[i + 1];\n }\n // Draw last line as straight line while waiting for next point\n this.ctx.lineTo(p1.x, p1.y);\n this.ctx.stroke();\n }\n }\n }\n redraw() {\n if (!this.ctx)\n return;\n // Clear and set background\n this.ctx.fillStyle = this.backgroundColor;\n this.ctx.fillRect(0, 0, this.width, this.height);\n // Redraw all strokes\n this.strokes.forEach(stroke => {\n this.drawStroke(stroke);\n });\n }\n drawStroke(stroke) {\n if (!this.ctx || stroke.points.length === 0)\n return;\n this.ctx.lineJoin = 'round';\n this.ctx.lineCap = 'round';\n this.ctx.strokeStyle = stroke.tool === 'eraser' ? this.backgroundColor : stroke.color;\n this.ctx.lineWidth = stroke.width * 2;\n if (stroke.points.length === 1) {\n // Single point - just draw a dot\n this.ctx.beginPath();\n this.ctx.arc(stroke.points[0].x, stroke.points[0].y, stroke.width, 0, Math.PI * 2);\n this.ctx.fill();\n return;\n }\n let p1 = stroke.points[0];\n let p2 = stroke.points[1];\n this.ctx.moveTo(p2.x, p2.y);\n this.ctx.beginPath();\n for (let i = 1, len = stroke.points.length; i < len; i++) {\n const midPoint = this.midPointBtw(p1, p2);\n this.ctx.quadraticCurveTo(p1.x, p1.y, midPoint.x, midPoint.y);\n p1 = stroke.points[i];\n p2 = stroke.points[i + 1];\n }\n this.ctx.lineTo(p1.x, p1.y);\n this.ctx.stroke();\n }\n clear() {\n if (!this.ctx)\n return;\n this.strokes = [];\n this.undoneStrokes = [];\n this.ctx.fillStyle = this.backgroundColor;\n this.ctx.fillRect(0, 0, this.width, this.height);\n this.emitDrawClear();\n }\n undo() {\n if (this.strokes.length === 0)\n return;\n const stroke = this.strokes.pop();\n if (stroke) {\n this.undoneStrokes.push(stroke);\n this.redraw();\n this.emitDrawUndo();\n }\n }\n redo() {\n if (this.undoneStrokes.length === 0)\n return;\n const stroke = this.undoneStrokes.pop();\n if (stroke) {\n this.strokes.push(stroke);\n this.drawStroke(stroke);\n this.emitDrawRedo();\n }\n }\n toDataURL(type = 'image/png', quality = 0.92) {\n if (!this.canvas)\n return '';\n return this.canvas.toDataURL(type, quality);\n }\n async toBlob(type = 'image/png', quality = 0.92) {\n if (!this.canvas)\n throw new Error('Canvas not initialized');\n return new Promise((resolve, reject) => {\n this.canvas?.toBlob((blob) => {\n if (blob)\n resolve(blob);\n else\n reject(new Error('Failed to create blob'));\n }, type, quality);\n });\n }\n download(filename = `drawing-${Date.now()}.png`) {\n const dataURL = this.toDataURL();\n const a = document.createElement('a');\n a.href = dataURL;\n a.download = filename;\n a.click();\n }\n async loadImage(url) {\n if (!this.ctx)\n throw new Error('Canvas not initialized');\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.onload = () => {\n this.ctx.drawImage(img, 0, 0, this.width, this.height);\n resolve();\n };\n img.onerror = () => reject(new Error('Failed to load image'));\n img.src = url;\n });\n }\n getStrokes() {\n return [...this.strokes];\n }\n setStrokes(strokes) {\n this.strokes = [...strokes];\n this.undoneStrokes = [];\n this.redraw();\n }\n generateId() {\n return `stroke-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n // Polygon processing methods\n processPolygon(points) {\n // Auto-circle mode takes precedence\n if (this.autoCircle && points.length >= 4) {\n return this.createWobblyCircle(points);\n }\n if (!this.autoPolygon || points.length < 4)\n return points;\n // Simplify to line segments (sample every Nth point for performance)\n const simplified = this.simplifyPoints(points, 5);\n // Check for self-intersection\n const intersection = this.findFirstIntersection(simplified);\n if (intersection) {\n // Trim at intersection point\n return this.trimAtIntersection(points, intersection);\n }\n else {\n // Check if shape should be closed\n const start = points[0];\n const end = points[points.length - 1];\n const distance = Math.sqrt(Math.pow(end.x - start.x, 2) + Math.pow(end.y - start.y, 2));\n // If start and end are far apart (more than 20px), close the shape with a curve\n if (distance > 20) {\n const curvePoints = this.createClosingCurve(end, start, this.polygonCurvePoints);\n return [...points, ...curvePoints];\n }\n }\n return points;\n }\n simplifyPoints(points, step) {\n const simplified = [];\n for (let i = 0; i < points.length; i += step) {\n simplified.push(points[i]);\n }\n // Always include the last point\n if (simplified[simplified.length - 1] !== points[points.length - 1]) {\n simplified.push(points[points.length - 1]);\n }\n return simplified;\n }\n findFirstIntersection(points) {\n // Check each line segment against all others\n for (let i = 0; i < points.length - 1; i++) {\n const p1 = points[i];\n const p2 = points[i + 1];\n // Start checking from i+2 to avoid adjacent segments\n for (let j = i + 2; j < points.length - 1; j++) {\n const p3 = points[j];\n const p4 = points[j + 1];\n // Don't check the last segment against the first (they should connect)\n if (i === 0 && j === points.length - 2)\n continue;\n const intersection = this.lineIntersection(p1, p2, p3, p4);\n if (intersection) {\n return { i, j, point: intersection };\n }\n }\n }\n return null;\n }\n lineIntersection(p1, p2, p3, p4) {\n const x1 = p1.x, y1 = p1.y;\n const x2 = p2.x, y2 = p2.y;\n const x3 = p3.x, y3 = p3.y;\n const x4 = p4.x, y4 = p4.y;\n const denom = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\n if (Math.abs(denom) < 0.0001)\n return null; // Parallel lines\n const t = ((x1 - x3) * (y3 - y4) - (y1 - y3) * (x3 - x4)) / denom;\n const u = -((x1 - x2) * (y1 - y3) - (y1 - y2) * (x1 - x3)) / denom;\n if (t >= 0 && t <= 1 && u >= 0 && u <= 1) {\n return {\n x: x1 + t * (x2 - x1),\n y: y1 + t * (y2 - y1),\n pressure: 0\n };\n }\n return null;\n }\n trimAtIntersection(points, intersection) {\n // Find the actual indices in the full point array based on simplified indices\n const step = 5;\n const actualJ = Math.min(intersection.j * step, points.length - 1);\n // Keep points from the intersection forward to close the shape properly\n // This preserves the drawn shape and just adds the intersection point to close it\n return [...points.slice(0, actualJ + 1), intersection.point];\n }\n createClosingCurve(start, end, numPoints) {\n if (numPoints < 2)\n return [end];\n const curvePoints = [];\n // Calculate control point for the curve\n // Use a point perpendicular to the line between start and end\n const midX = (start.x + end.x) / 2;\n const midY = (start.y + end.y) / 2;\n // Vector from start to end\n const dx = end.x - start.x;\n const dy = end.y - start.y;\n // Perpendicular vector (rotated 90 degrees)\n const perpX = -dy;\n const perpY = dx;\n // Control point is offset from midpoint along perpendicular\n // Offset is proportional to distance to create a natural curve\n const distance = Math.sqrt(dx * dx + dy * dy);\n const offset = distance * 0.2; // 20% of distance\n const controlX = midX + (perpX / distance) * offset;\n const controlY = midY + (perpY / distance) * offset;\n // Interpolate points along the quadratic Bezier curve\n for (let i = 1; i <= numPoints; i++) {\n const t = i / (numPoints + 1);\n // Quadratic Bezier formula: B(t) = (1-t)²P0 + 2(1-t)tP1 + t²P2\n const x = Math.pow(1 - t, 2) * start.x +\n 2 * (1 - t) * t * controlX +\n Math.pow(t, 2) * end.x;\n const y = Math.pow(1 - t, 2) * start.y +\n 2 * (1 - t) * t * controlY +\n Math.pow(t, 2) * end.y;\n curvePoints.push({ x, y, pressure: 0 });\n }\n // Add the end point\n curvePoints.push(end);\n return curvePoints;\n }\n createWobblyCircle(points) {\n if (points.length < 4)\n return points;\n // Group points into time-based clusters and take median of each cluster\n // This preserves the shape better than simple downsampling\n const clusterSize = Math.max(3, Math.floor(points.length / 80)); // Target ~80 clusters\n let sampled = [];\n for (let i = 0; i < points.length; i += clusterSize) {\n const cluster = points.slice(i, Math.min(i + clusterSize, points.length));\n // Find median point in cluster (centroid)\n let sumX = 0, sumY = 0;\n for (const p of cluster) {\n sumX += p.x;\n sumY += p.y;\n }\n sampled.push({\n x: sumX / cluster.length,\n y: sumY / cluster.length,\n pressure: 0\n });\n }\n // Remove points that create sharp angles\n let filtered = this.removeSharpAngles(sampled, 20); // Remove angles < 20 degrees\n // Close the shape first by connecting end to start\n const start = filtered[0];\n const end = filtered[filtered.length - 1];\n const distance = Math.sqrt(Math.pow(end.x - start.x, 2) + Math.pow(end.y - start.y, 2));\n let closed;\n if (distance < 10) {\n // Already close, just connect directly\n closed = [...filtered, start];\n }\n else {\n // Add smooth closing curve\n const curvePoints = this.createClosingCurve(end, start, this.circlePoints);\n closed = [...filtered, ...curvePoints];\n }\n // Now apply Chaikin's corner-cutting algorithm to the closed shape\n let smoothed = closed;\n const iterations = 4; // Number of smoothing passes\n for (let iter = 0; iter < iterations; iter++) {\n const newPoints = [];\n const len = smoothed.length;\n // Process as a closed loop\n for (let i = 0; i < len; i++) {\n const p0 = smoothed[i];\n const p1 = smoothed[(i + 1) % len]; // Wrap around for closed shape\n // Create two new points at 1/4 and 3/4 along each segment\n newPoints.push({\n x: 0.75 * p0.x + 0.25 * p1.x,\n y: 0.75 * p0.y + 0.25 * p1.y,\n pressure: 0\n });\n newPoints.push({\n x: 0.25 * p0.x + 0.75 * p1.x,\n y: 0.25 * p0.y + 0.75 * p1.y,\n pressure: 0\n });\n }\n smoothed = newPoints;\n }\n // Ensure the shape is perfectly closed by duplicating the first point at the end\n if (smoothed.length > 0) {\n smoothed.push({ ...smoothed[0] });\n }\n return smoothed;\n }\n removeSharpAngles(points, minAngleDegrees) {\n if (points.length < 3)\n return points;\n const filtered = [points[0]]; // Always keep first point\n const minAngleRad = (minAngleDegrees * Math.PI) / 180;\n for (let i = 1; i < points.length - 1; i++) {\n const prev = points[i - 1];\n const curr = points[i];\n const next = points[i + 1];\n // Calculate vectors\n const v1x = curr.x - prev.x;\n const v1y = curr.y - prev.y;\n const v2x = next.x - curr.x;\n const v2y = next.y - curr.y;\n // Calculate magnitudes\n const mag1 = Math.sqrt(v1x * v1x + v1y * v1y);\n const mag2 = Math.sqrt(v2x * v2x + v2y * v2y);\n if (mag1 === 0 || mag2 === 0) {\n // Skip points that are too close together\n continue;\n }\n // Calculate angle using dot product\n const dot = v1x * v2x + v1y * v2y;\n const cosAngle = dot / (mag1 * mag2);\n const angle = Math.acos(Math.max(-1, Math.min(1, cosAngle))); // Clamp to avoid NaN\n // Keep point if angle is large enough (smoother turn)\n if (angle >= minAngleRad) {\n filtered.push(curr);\n }\n }\n filtered.push(points[points.length - 1]); // Always keep last point\n return filtered;\n }\n emitDrawStart(point) {\n return { draw: this, point };\n }\n emitDrawEnd(stroke) {\n return { draw: this, stroke };\n }\n emitDrawClear() {\n return { draw: this };\n }\n emitDrawUndo() {\n return { draw: this };\n }\n emitDrawRedo() {\n return { draw: this };\n }\n });\n return _classThis;\n})();\n\nexport { SniceDraw };\n//# sourceMappingURL=snice-draw.js.map\n"],"names":["__esDecorate","ctor","descriptorIn","decorators","contextIn","initializers","extraInitializers","accept","f","TypeError","_","kind","key","target","prototype","descriptor","Object","getOwnPropertyDescriptor","name","done","i","length","context","p","access","addInitializer","push","result","get","set","init","unshift","defineProperty","__runInitializers","thisArg","value","useValue","arguments","call","SuppressedError","ease","t","DrawPoint","constructor","x","y","this","update","point","moveByAngle","angle","distance","friction","angleRotated","Math","PI","sin","cos","equalsTo","getDifferenceTo","getDistanceTo","diff","sqrt","pow","getAngleTo","atan2","toObject","DrawBrush","options","initialPoint","radius","_isEnabled","enabled","pointer","brush","_hasMoved","enable","disable","isEnabled","setRadius","getRadius","getBrushCoordinates","getPointerCoordinates","getBrush","getPointer","getAngle","getDistance","brushHasMoved","newPointerPoint","both","isOutside","round","undefined","SniceDraw","_classDescriptor","_classThis","_width_decorators","_height_decorators","_tool_decorators","_color_decorators","_strokeWidth_decorators","_backgroundColor_decorators","_lazy_decorators","_lazyRadius_decorators","_friction_decorators","_smoothing_decorators","_autoPolygon_decorators","_polygonCurvePoints_decorators","_autoCircle_decorators","_circlePoints_decorators","_disabled_decorators","_canvasElement_decorators","_styles_decorators","_onReady_decorators","_onDispose_decorators","_render_decorators","_handlePointerDown_decorators","_handlePointerMove_decorators","_handlePointerUp_decorators","_emitDrawStart_decorators","_emitDrawEnd_decorators","_emitDrawClear_decorators","_emitDrawUndo_decorators","_emitDrawRedo_decorators","_classDecorators","element","_classExtraInitializers","_classSuper","HTMLElement","_instanceExtraInitializers","_width_initializers","_width_extraInitializers","_height_initializers","_height_extraInitializers","_tool_initializers","_tool_extraInitializers","_color_initializers","_color_extraInitializers","_strokeWidth_initializers","_strokeWidth_extraInitializers","_backgroundColor_initializers","_backgroundColor_extraInitializers","_lazy_initializers","_lazy_extraInitializers","_lazyRadius_initializers","_lazyRadius_extraInitializers","_friction_initializers","_friction_extraInitializers","_smoothing_initializers","_smoothing_extraInitializers","_autoPolygon_initializers","_autoPolygon_extraInitializers","_polygonCurvePoints_initializers","_polygonCurvePoints_extraInitializers","_autoCircle_initializers","_autoCircle_extraInitializers","_circlePoints_initializers","_circlePoints_extraInitializers","_disabled_initializers","_disabled_extraInitializers","_canvasElement_initializers","_canvasElement_extraInitializers","_metadata","Symbol","metadata","create","property","type","Number","String","attribute","Boolean","query","styles","ready","dispose","render","on","dispatch","bubbles","composed","static","private","has","obj","onReady","onDispose","handlePointerDown","handlePointerMove","handlePointerUp","emitDrawStart","emitDrawEnd","emitDrawClear","emitDrawUndo","emitDrawRedo","width","height","tool","color","strokeWidth","backgroundColor","lazy","lazyRadius","smoothing","autoPolygon","polygonCurvePoints","autoCircle","circlePoints","disabled","canvasElement","enumerable","configurable","writable","super","canvas","ctx","isDrawing","isPressing","currentStroke","strokes","undoneStrokes","lastPoint","rafId","mouseX","mouseY","drawBrush","css","requestAnimationFrame","initCanvas","startLoop","stopLoop","html","rect","getBoundingClientRect","displayWidth","displayHeight","dpr","window","devicePixelRatio","getContext","willReadFrequently","scale","imageSmoothingEnabled","imageSmoothingQuality","fillStyle","fillRect","redraw","e","preventDefault","getPointerPosition","setPointerCapture","pointerId","points","processPolygon","stroke","id","generateId","timestamp","Date","now","releasePointerCapture","pressure","clientX","left","clientY","top","loop","updateLazyBrush","cancelAnimationFrame","midPointBtw","p1","p2","forEach","drawStroke","lineJoin","lineCap","strokeStyle","lineWidth","moveTo","beginPath","len","midPoint","quadraticCurveTo","lineTo","arc","fill","clear","undo","pop","redo","toDataURL","quality","toBlob","Error","Promise","resolve","reject","blob","download","filename","dataURL","a","document","createElement","href","click","loadImage","url","img","Image","crossOrigin","onload","drawImage","onerror","src","getStrokes","setStrokes","random","toString","substr","createWobblyCircle","simplified","simplifyPoints","intersection","findFirstIntersection","trimAtIntersection","start","end","curvePoints","createClosingCurve","step","j","p3","p4","lineIntersection","x1","y1","x2","y2","x3","y3","x4","y4","denom","abs","u","actualJ","min","slice","numPoints","midX","midY","dx","dy","perpX","perpY","offset","controlX","controlY","clusterSize","max","floor","sampled","cluster","sumX","sumY","filtered","removeSharpAngles","closed","smoothed","iter","newPoints","p0","minAngleDegrees","minAngleRad","prev","curr","next","v1x","v1y","v2x","v2y","mag1","mag2","cosAngle","acos","draw"],"mappings":"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","x_google_ignoreList":[0]}
|
|
1
|
+
{"version":3,"file":"snice-draw.min.js","sources":["../../../node_modules/tslib/tslib.es6.mjs","../../components/draw/snice-draw.js"],"sourcesContent":["/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","import { __esDecorate, __runInitializers } from 'tslib';\nimport { element, property, query, styles, ready, dispose, render, on, dispatch, css, html } from 'snice';\n\nvar drawStyles = \":host{display:block;width:100%;height:100%;position:relative;user-select:none;-webkit-user-select:none}.draw-container{position:relative;width:100%;height:100%;overflow:hidden;background:var(--draw-bg,var(--snice-color-background,hsl(0 0% 100%)));border-radius:var(--draw-border-radius,0);touch-action:none}.draw-canvas{display:block;width:100%;height:100%;cursor:crosshair}.draw-canvas.disabled{cursor:not-allowed;opacity:.5}.draw-canvas.tool-pen{cursor:url('data:image/svg+xml;utf8,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"2\\\" fill=\\\"black\\\"/></svg>') 12 12,crosshair}.draw-canvas.tool-eraser{cursor:url('data:image/svg+xml;utf8,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\"><rect x=\\\"8\\\" y=\\\"8\\\" width=\\\"8\\\" height=\\\"8\\\" fill=\\\"white\\\" stroke=\\\"black\\\"/></svg>') 12 12,crosshair}.lazy-brush-point{position:absolute;width:8px;height:8px;margin:-4px 0 0 -4px;border-radius:50%;background:var(--primary-color,var(--snice-color-primary,hsl(207 90% 54%)));pointer-events:none;opacity:0;transition:opacity .2s}.lazy-brush-point.active{opacity:.6}.lazy-brush-radius{position:absolute;border:1px dashed var(--primary-color,var(--snice-color-primary,hsl(207 90% 54%)));border-radius:50%;pointer-events:none;opacity:0;transition:opacity .2s}.lazy-brush-radius.active{opacity:.3}\";\n\nconst ease = (t) => t * (2 - t);\nclass DrawPoint {\n constructor(x, y) {\n this.x = x;\n this.y = y;\n }\n update(point) {\n this.x = point.x;\n this.y = point.y;\n return this;\n }\n moveByAngle(angle, distance, friction) {\n const angleRotated = angle + Math.PI / 2;\n if (friction) {\n this.x = this.x + Math.sin(angleRotated) * distance * ease(1 - friction);\n this.y = this.y - Math.cos(angleRotated) * distance * ease(1 - friction);\n }\n else {\n this.x = this.x + Math.sin(angleRotated) * distance;\n this.y = this.y - Math.cos(angleRotated) * distance;\n }\n return this;\n }\n equalsTo(point) {\n return this.x === point.x && this.y === point.y;\n }\n getDifferenceTo(point) {\n return new DrawPoint(this.x - point.x, this.y - point.y);\n }\n getDistanceTo(point) {\n const diff = this.getDifferenceTo(point);\n return Math.sqrt(Math.pow(diff.x, 2) + Math.pow(diff.y, 2));\n }\n getAngleTo(point) {\n const diff = this.getDifferenceTo(point);\n return Math.atan2(diff.y, diff.x);\n }\n toObject() {\n return { x: this.x, y: this.y };\n }\n}\nclass DrawBrush {\n constructor(options = {}) {\n const initialPoint = options.initialPoint || { x: 0, y: 0 };\n this.radius = options.radius || 30;\n this._isEnabled = options.enabled === false ? false : true;\n this.pointer = new DrawPoint(initialPoint.x, initialPoint.y);\n this.brush = new DrawPoint(initialPoint.x, initialPoint.y);\n this.angle = 0;\n this.distance = 0;\n this._hasMoved = false;\n }\n enable() {\n this._isEnabled = true;\n }\n disable() {\n this._isEnabled = false;\n }\n isEnabled() {\n return this._isEnabled;\n }\n setRadius(radius) {\n this.radius = radius;\n }\n getRadius() {\n return this.radius;\n }\n getBrushCoordinates() {\n return this.brush.toObject();\n }\n getPointerCoordinates() {\n return this.pointer.toObject();\n }\n getBrush() {\n return this.brush;\n }\n getPointer() {\n return this.pointer;\n }\n getAngle() {\n return this.angle;\n }\n getDistance() {\n return this.distance;\n }\n brushHasMoved() {\n return this._hasMoved;\n }\n update(newPointerPoint, options = {}) {\n this._hasMoved = false;\n if (this.pointer.equalsTo(newPointerPoint) && !options.both && !options.friction) {\n return false;\n }\n this.pointer.update(newPointerPoint);\n if (options.both) {\n this._hasMoved = true;\n this.brush.update(newPointerPoint);\n return true;\n }\n if (this._isEnabled) {\n this.distance = this.pointer.getDistanceTo(this.brush);\n this.angle = this.pointer.getAngleTo(this.brush);\n const isOutside = Math.round((this.distance - this.radius) * 10) / 10 > 0;\n const friction = options.friction && options.friction < 1 && options.friction > 0\n ? options.friction\n : undefined;\n if (isOutside) {\n this.brush.moveByAngle(this.angle, this.distance - this.radius, friction);\n this._hasMoved = true;\n }\n }\n else {\n this.distance = 0;\n this.angle = 0;\n this.brush.update(newPointerPoint);\n this._hasMoved = true;\n }\n return true;\n }\n}\nlet SniceDraw = (() => {\n let _classDecorators = [element('snice-draw')];\n let _classDescriptor;\n let _classExtraInitializers = [];\n let _classThis;\n let _classSuper = HTMLElement;\n let _instanceExtraInitializers = [];\n let _width_decorators;\n let _width_initializers = [];\n let _width_extraInitializers = [];\n let _height_decorators;\n let _height_initializers = [];\n let _height_extraInitializers = [];\n let _tool_decorators;\n let _tool_initializers = [];\n let _tool_extraInitializers = [];\n let _color_decorators;\n let _color_initializers = [];\n let _color_extraInitializers = [];\n let _strokeWidth_decorators;\n let _strokeWidth_initializers = [];\n let _strokeWidth_extraInitializers = [];\n let _backgroundColor_decorators;\n let _backgroundColor_initializers = [];\n let _backgroundColor_extraInitializers = [];\n let _lazy_decorators;\n let _lazy_initializers = [];\n let _lazy_extraInitializers = [];\n let _lazyRadius_decorators;\n let _lazyRadius_initializers = [];\n let _lazyRadius_extraInitializers = [];\n let _friction_decorators;\n let _friction_initializers = [];\n let _friction_extraInitializers = [];\n let _smoothing_decorators;\n let _smoothing_initializers = [];\n let _smoothing_extraInitializers = [];\n let _autoPolygon_decorators;\n let _autoPolygon_initializers = [];\n let _autoPolygon_extraInitializers = [];\n let _polygonCurvePoints_decorators;\n let _polygonCurvePoints_initializers = [];\n let _polygonCurvePoints_extraInitializers = [];\n let _autoCircle_decorators;\n let _autoCircle_initializers = [];\n let _autoCircle_extraInitializers = [];\n let _circlePoints_decorators;\n let _circlePoints_initializers = [];\n let _circlePoints_extraInitializers = [];\n let _disabled_decorators;\n let _disabled_initializers = [];\n let _disabled_extraInitializers = [];\n let _canvasElement_decorators;\n let _canvasElement_initializers = [];\n let _canvasElement_extraInitializers = [];\n let _styles_decorators;\n let _onReady_decorators;\n let _onDispose_decorators;\n let _render_decorators;\n let _handlePointerDown_decorators;\n let _handlePointerMove_decorators;\n let _handlePointerUp_decorators;\n let _emitDrawStart_decorators;\n let _emitDrawEnd_decorators;\n let _emitDrawClear_decorators;\n let _emitDrawUndo_decorators;\n let _emitDrawRedo_decorators;\n (class extends _classSuper {\n static { _classThis = this; }\n static {\n const _metadata = typeof Symbol === \"function\" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;\n _width_decorators = [property({ type: Number })];\n _height_decorators = [property({ type: Number })];\n _tool_decorators = [property({ type: String })];\n _color_decorators = [property({ type: String })];\n _strokeWidth_decorators = [property({ type: Number, attribute: 'stroke-width' })];\n _backgroundColor_decorators = [property({ type: String, attribute: 'background-color' })];\n _lazy_decorators = [property({ type: Boolean })];\n _lazyRadius_decorators = [property({ type: Number, attribute: 'lazy-radius' })];\n _friction_decorators = [property({ type: Number })];\n _smoothing_decorators = [property({ type: Number })];\n _autoPolygon_decorators = [property({ type: Boolean, attribute: 'auto-polygon' })];\n _polygonCurvePoints_decorators = [property({ type: Number, attribute: 'polygon-curve-points' })];\n _autoCircle_decorators = [property({ type: Boolean, attribute: 'auto-circle' })];\n _circlePoints_decorators = [property({ type: Number, attribute: 'circle-points' })];\n _disabled_decorators = [property({ type: Boolean })];\n _canvasElement_decorators = [query('.draw-canvas')];\n _styles_decorators = [styles()];\n _onReady_decorators = [ready()];\n _onDispose_decorators = [dispose()];\n _render_decorators = [render()];\n _handlePointerDown_decorators = [on('pointerdown', { target: 'canvas' })];\n _handlePointerMove_decorators = [on('pointermove', { target: 'canvas' })];\n _handlePointerUp_decorators = [on('pointerup', { target: 'canvas' })];\n _emitDrawStart_decorators = [dispatch('draw-start', { bubbles: true, composed: true })];\n _emitDrawEnd_decorators = [dispatch('draw-end', { bubbles: true, composed: true })];\n _emitDrawClear_decorators = [dispatch('draw-clear', { bubbles: true, composed: true })];\n _emitDrawUndo_decorators = [dispatch('draw-undo', { bubbles: true, composed: true })];\n _emitDrawRedo_decorators = [dispatch('draw-redo', { bubbles: true, composed: true })];\n __esDecorate(this, null, _styles_decorators, { kind: \"method\", name: \"styles\", static: false, private: false, access: { has: obj => \"styles\" in obj, get: obj => obj.styles }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _onReady_decorators, { kind: \"method\", name: \"onReady\", static: false, private: false, access: { has: obj => \"onReady\" in obj, get: obj => obj.onReady }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _onDispose_decorators, { kind: \"method\", name: \"onDispose\", static: false, private: false, access: { has: obj => \"onDispose\" in obj, get: obj => obj.onDispose }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _render_decorators, { kind: \"method\", name: \"render\", static: false, private: false, access: { has: obj => \"render\" in obj, get: obj => obj.render }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _handlePointerDown_decorators, { kind: \"method\", name: \"handlePointerDown\", static: false, private: false, access: { has: obj => \"handlePointerDown\" in obj, get: obj => obj.handlePointerDown }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _handlePointerMove_decorators, { kind: \"method\", name: \"handlePointerMove\", static: false, private: false, access: { has: obj => \"handlePointerMove\" in obj, get: obj => obj.handlePointerMove }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _handlePointerUp_decorators, { kind: \"method\", name: \"handlePointerUp\", static: false, private: false, access: { has: obj => \"handlePointerUp\" in obj, get: obj => obj.handlePointerUp }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _emitDrawStart_decorators, { kind: \"method\", name: \"emitDrawStart\", static: false, private: false, access: { has: obj => \"emitDrawStart\" in obj, get: obj => obj.emitDrawStart }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _emitDrawEnd_decorators, { kind: \"method\", name: \"emitDrawEnd\", static: false, private: false, access: { has: obj => \"emitDrawEnd\" in obj, get: obj => obj.emitDrawEnd }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _emitDrawClear_decorators, { kind: \"method\", name: \"emitDrawClear\", static: false, private: false, access: { has: obj => \"emitDrawClear\" in obj, get: obj => obj.emitDrawClear }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _emitDrawUndo_decorators, { kind: \"method\", name: \"emitDrawUndo\", static: false, private: false, access: { has: obj => \"emitDrawUndo\" in obj, get: obj => obj.emitDrawUndo }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(this, null, _emitDrawRedo_decorators, { kind: \"method\", name: \"emitDrawRedo\", static: false, private: false, access: { has: obj => \"emitDrawRedo\" in obj, get: obj => obj.emitDrawRedo }, metadata: _metadata }, null, _instanceExtraInitializers);\n __esDecorate(null, null, _width_decorators, { kind: \"field\", name: \"width\", static: false, private: false, access: { has: obj => \"width\" in obj, get: obj => obj.width, set: (obj, value) => { obj.width = value; } }, metadata: _metadata }, _width_initializers, _width_extraInitializers);\n __esDecorate(null, null, _height_decorators, { kind: \"field\", name: \"height\", static: false, private: false, access: { has: obj => \"height\" in obj, get: obj => obj.height, set: (obj, value) => { obj.height = value; } }, metadata: _metadata }, _height_initializers, _height_extraInitializers);\n __esDecorate(null, null, _tool_decorators, { kind: \"field\", name: \"tool\", static: false, private: false, access: { has: obj => \"tool\" in obj, get: obj => obj.tool, set: (obj, value) => { obj.tool = value; } }, metadata: _metadata }, _tool_initializers, _tool_extraInitializers);\n __esDecorate(null, null, _color_decorators, { kind: \"field\", name: \"color\", static: false, private: false, access: { has: obj => \"color\" in obj, get: obj => obj.color, set: (obj, value) => { obj.color = value; } }, metadata: _metadata }, _color_initializers, _color_extraInitializers);\n __esDecorate(null, null, _strokeWidth_decorators, { kind: \"field\", name: \"strokeWidth\", static: false, private: false, access: { has: obj => \"strokeWidth\" in obj, get: obj => obj.strokeWidth, set: (obj, value) => { obj.strokeWidth = value; } }, metadata: _metadata }, _strokeWidth_initializers, _strokeWidth_extraInitializers);\n __esDecorate(null, null, _backgroundColor_decorators, { kind: \"field\", name: \"backgroundColor\", static: false, private: false, access: { has: obj => \"backgroundColor\" in obj, get: obj => obj.backgroundColor, set: (obj, value) => { obj.backgroundColor = value; } }, metadata: _metadata }, _backgroundColor_initializers, _backgroundColor_extraInitializers);\n __esDecorate(null, null, _lazy_decorators, { kind: \"field\", name: \"lazy\", static: false, private: false, access: { has: obj => \"lazy\" in obj, get: obj => obj.lazy, set: (obj, value) => { obj.lazy = value; } }, metadata: _metadata }, _lazy_initializers, _lazy_extraInitializers);\n __esDecorate(null, null, _lazyRadius_decorators, { kind: \"field\", name: \"lazyRadius\", static: false, private: false, access: { has: obj => \"lazyRadius\" in obj, get: obj => obj.lazyRadius, set: (obj, value) => { obj.lazyRadius = value; } }, metadata: _metadata }, _lazyRadius_initializers, _lazyRadius_extraInitializers);\n __esDecorate(null, null, _friction_decorators, { kind: \"field\", name: \"friction\", static: false, private: false, access: { has: obj => \"friction\" in obj, get: obj => obj.friction, set: (obj, value) => { obj.friction = value; } }, metadata: _metadata }, _friction_initializers, _friction_extraInitializers);\n __esDecorate(null, null, _smoothing_decorators, { kind: \"field\", name: \"smoothing\", static: false, private: false, access: { has: obj => \"smoothing\" in obj, get: obj => obj.smoothing, set: (obj, value) => { obj.smoothing = value; } }, metadata: _metadata }, _smoothing_initializers, _smoothing_extraInitializers);\n __esDecorate(null, null, _autoPolygon_decorators, { kind: \"field\", name: \"autoPolygon\", static: false, private: false, access: { has: obj => \"autoPolygon\" in obj, get: obj => obj.autoPolygon, set: (obj, value) => { obj.autoPolygon = value; } }, metadata: _metadata }, _autoPolygon_initializers, _autoPolygon_extraInitializers);\n __esDecorate(null, null, _polygonCurvePoints_decorators, { kind: \"field\", name: \"polygonCurvePoints\", static: false, private: false, access: { has: obj => \"polygonCurvePoints\" in obj, get: obj => obj.polygonCurvePoints, set: (obj, value) => { obj.polygonCurvePoints = value; } }, metadata: _metadata }, _polygonCurvePoints_initializers, _polygonCurvePoints_extraInitializers);\n __esDecorate(null, null, _autoCircle_decorators, { kind: \"field\", name: \"autoCircle\", static: false, private: false, access: { has: obj => \"autoCircle\" in obj, get: obj => obj.autoCircle, set: (obj, value) => { obj.autoCircle = value; } }, metadata: _metadata }, _autoCircle_initializers, _autoCircle_extraInitializers);\n __esDecorate(null, null, _circlePoints_decorators, { kind: \"field\", name: \"circlePoints\", static: false, private: false, access: { has: obj => \"circlePoints\" in obj, get: obj => obj.circlePoints, set: (obj, value) => { obj.circlePoints = value; } }, metadata: _metadata }, _circlePoints_initializers, _circlePoints_extraInitializers);\n __esDecorate(null, null, _disabled_decorators, { kind: \"field\", name: \"disabled\", static: false, private: false, access: { has: obj => \"disabled\" in obj, get: obj => obj.disabled, set: (obj, value) => { obj.disabled = value; } }, metadata: _metadata }, _disabled_initializers, _disabled_extraInitializers);\n __esDecorate(null, null, _canvasElement_decorators, { kind: \"field\", name: \"canvasElement\", static: false, private: false, access: { has: obj => \"canvasElement\" in obj, get: obj => obj.canvasElement, set: (obj, value) => { obj.canvasElement = value; } }, metadata: _metadata }, _canvasElement_initializers, _canvasElement_extraInitializers);\n __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: \"class\", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);\n _classThis = _classDescriptor.value;\n if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });\n __runInitializers(_classThis, _classExtraInitializers);\n }\n constructor() {\n super();\n this.width = (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _width_initializers, 800));\n this.height = (__runInitializers(this, _width_extraInitializers), __runInitializers(this, _height_initializers, 600));\n this.tool = (__runInitializers(this, _height_extraInitializers), __runInitializers(this, _tool_initializers, 'pen'));\n this.color = (__runInitializers(this, _tool_extraInitializers), __runInitializers(this, _color_initializers, '#000000'));\n this.strokeWidth = (__runInitializers(this, _color_extraInitializers), __runInitializers(this, _strokeWidth_initializers, 2));\n this.backgroundColor = (__runInitializers(this, _strokeWidth_extraInitializers), __runInitializers(this, _backgroundColor_initializers, '#ffffff'));\n this.lazy = (__runInitializers(this, _backgroundColor_extraInitializers), __runInitializers(this, _lazy_initializers, false));\n this.lazyRadius = (__runInitializers(this, _lazy_extraInitializers), __runInitializers(this, _lazyRadius_initializers, 60));\n this.friction = (__runInitializers(this, _lazyRadius_extraInitializers), __runInitializers(this, _friction_initializers, 0.1));\n this.smoothing = (__runInitializers(this, _friction_extraInitializers), __runInitializers(this, _smoothing_initializers, 0.5));\n this.autoPolygon = (__runInitializers(this, _smoothing_extraInitializers), __runInitializers(this, _autoPolygon_initializers, false));\n this.polygonCurvePoints = (__runInitializers(this, _autoPolygon_extraInitializers), __runInitializers(this, _polygonCurvePoints_initializers, 10));\n this.autoCircle = (__runInitializers(this, _polygonCurvePoints_extraInitializers), __runInitializers(this, _autoCircle_initializers, false));\n this.circlePoints = (__runInitializers(this, _autoCircle_extraInitializers), __runInitializers(this, _circlePoints_initializers, 50));\n this.disabled = (__runInitializers(this, _circlePoints_extraInitializers), __runInitializers(this, _disabled_initializers, false));\n this.canvasElement = (__runInitializers(this, _disabled_extraInitializers), __runInitializers(this, _canvasElement_initializers, void 0));\n this.canvas = (__runInitializers(this, _canvasElement_extraInitializers), null);\n this.ctx = null;\n this.isDrawing = false;\n this.isPressing = false;\n this.currentStroke = [];\n this.strokes = [];\n this.undoneStrokes = [];\n this._commandQueue = [];\n this.lastPoint = null;\n this.rafId = null;\n this.mouseX = 0;\n this.mouseY = 0;\n this.drawBrush = new DrawBrush({\n radius: this.lazyRadius,\n enabled: this.lazy\n });\n }\n styles() {\n return css /*css*/ `${drawStyles}`;\n }\n onReady() {\n requestAnimationFrame(() => {\n this.initCanvas();\n this.startLoop();\n });\n }\n onDispose() {\n this.stopLoop();\n }\n render() {\n return html /*html*/ `\n <div class=\"draw-container\" part=\"base\">\n <canvas\n width=\"${this.width}\"\n height=\"${this.height}\"\n class=\"draw-canvas tool-${this.tool} ${this.disabled ? 'disabled' : ''}\"\n part=\"canvas\">\n </canvas>\n </div>\n `;\n }\n initCanvas() {\n this.canvas = this.canvasElement || null;\n if (!this.canvas)\n return;\n // Get the actual display size from the container\n const rect = this.canvas.getBoundingClientRect();\n const displayWidth = rect.width;\n const displayHeight = rect.height;\n // Handle high DPI displays\n const dpr = window.devicePixelRatio || 1;\n // Set canvas buffer size (accounting for DPI)\n this.canvas.width = displayWidth * dpr;\n this.canvas.height = displayHeight * dpr;\n // Store logical dimensions for coordinate mapping\n this.width = displayWidth;\n this.height = displayHeight;\n this.ctx = this.canvas.getContext('2d', { willReadFrequently: true });\n if (!this.ctx)\n return;\n // Scale canvas drawing to match DPI\n this.ctx.scale(dpr, dpr);\n // Enable anti-aliasing for smooth lines\n this.ctx.imageSmoothingEnabled = true;\n this.ctx.imageSmoothingQuality = 'high';\n // Set background\n this.ctx.fillStyle = this.backgroundColor;\n this.ctx.fillRect(0, 0, this.width, this.height);\n // Flush any commands queued before canvas was ready\n this._flushQueue();\n }\n handlePointerDown(e) {\n if (this.disabled)\n return;\n e.preventDefault();\n const point = this.getPointerPosition(e);\n this.mouseX = point.x;\n this.mouseY = point.y;\n // Update brush to pointer position immediately\n this.drawBrush.update(point, { both: true });\n this.isPressing = true;\n this.canvas?.setPointerCapture(e.pointerId);\n this.emitDrawStart(point);\n }\n handlePointerMove(e) {\n if (this.disabled)\n return;\n e.preventDefault();\n const point = this.getPointerPosition(e);\n this.mouseX = point.x;\n this.mouseY = point.y;\n }\n handlePointerUp(e) {\n if (!this.isPressing)\n return;\n e.preventDefault();\n this.isPressing = false;\n this.isDrawing = false;\n if (this.currentStroke.length > 0) {\n // Process polygon/circle if auto-polygon or auto-circle is enabled\n const points = (this.autoPolygon || this.autoCircle)\n ? this.processPolygon([...this.currentStroke])\n : [...this.currentStroke];\n const stroke = {\n id: this.generateId(),\n tool: this.tool,\n color: this.color,\n width: this.strokeWidth,\n points,\n timestamp: Date.now()\n };\n this.strokes.push(stroke);\n this.currentStroke = [];\n // Redraw immediately to show the processed polygon/circle\n this.redraw();\n this.emitDrawEnd(stroke);\n }\n this.canvas?.releasePointerCapture(e.pointerId);\n }\n getPointerPosition(e) {\n if (!this.canvas)\n return { x: 0, y: 0, pressure: 0 };\n const rect = this.canvas.getBoundingClientRect();\n // Map from screen coordinates to logical canvas coordinates\n const x = (e.clientX - rect.left) * (this.width / rect.width);\n const y = (e.clientY - rect.top) * (this.height / rect.height);\n return {\n x,\n y,\n pressure: e.pressure\n };\n }\n startLoop() {\n const loop = () => {\n this.updateLazyBrush();\n this.rafId = requestAnimationFrame(loop);\n };\n loop();\n }\n stopLoop() {\n if (this.rafId !== null) {\n cancelAnimationFrame(this.rafId);\n this.rafId = null;\n }\n }\n midPointBtw(p1, p2) {\n return {\n x: p1.x + (p2.x - p1.x) / 2,\n y: p1.y + (p2.y - p1.y) / 2\n };\n }\n updateLazyBrush() {\n if (!this.ctx)\n return;\n this.drawBrush.update({ x: this.mouseX, y: this.mouseY }, { friction: this.isDrawing ? this.friction : 1 });\n !this.drawBrush.isEnabled();\n this.drawBrush.brushHasMoved();\n // Start drawing if pressing and not yet drawing\n if (this.isPressing && !this.isDrawing) {\n this.isDrawing = true;\n this.currentStroke = [];\n this.undoneStrokes = [];\n this.currentStroke.push(this.drawBrush.getBrushCoordinates());\n }\n if (this.isDrawing) {\n // Clear canvas and fill background\n this.ctx.fillStyle = this.backgroundColor;\n this.ctx.fillRect(0, 0, this.width, this.height);\n // Redraw all completed strokes\n this.strokes.forEach(stroke => {\n this.drawStroke(stroke);\n });\n // Add current point\n this.currentStroke.push(this.drawBrush.getBrushCoordinates());\n // Draw current stroke with smoothing\n if (this.currentStroke.length > 1) {\n this.ctx.lineJoin = 'round';\n this.ctx.lineCap = 'round';\n this.ctx.strokeStyle = this.tool === 'eraser' ? this.backgroundColor : this.color;\n this.ctx.lineWidth = this.strokeWidth * 2;\n let p1 = this.currentStroke[0];\n let p2 = this.currentStroke[1];\n this.ctx.moveTo(p2.x, p2.y);\n this.ctx.beginPath();\n for (let i = 1, len = this.currentStroke.length; i < len; i++) {\n const midPoint = this.midPointBtw(p1, p2);\n this.ctx.quadraticCurveTo(p1.x, p1.y, midPoint.x, midPoint.y);\n p1 = this.currentStroke[i];\n p2 = this.currentStroke[i + 1];\n }\n // Draw last line as straight line while waiting for next point\n this.ctx.lineTo(p1.x, p1.y);\n this.ctx.stroke();\n }\n }\n }\n redraw() {\n if (!this.ctx)\n return;\n // Clear and set background\n this.ctx.fillStyle = this.backgroundColor;\n this.ctx.fillRect(0, 0, this.width, this.height);\n // Redraw all strokes\n this.strokes.forEach(stroke => {\n this.drawStroke(stroke);\n });\n }\n _flushQueue() {\n const queue = this._commandQueue;\n this._commandQueue = [];\n for (const [method, args] of queue) {\n this[method](...args);\n }\n }\n drawStroke(stroke) {\n if (!this.ctx || stroke.points.length === 0)\n return;\n this.ctx.lineJoin = 'round';\n this.ctx.lineCap = 'round';\n this.ctx.strokeStyle = stroke.tool === 'eraser' ? this.backgroundColor : stroke.color;\n this.ctx.lineWidth = stroke.width * 2;\n if (stroke.points.length === 1) {\n // Single point - just draw a dot\n this.ctx.beginPath();\n this.ctx.arc(stroke.points[0].x, stroke.points[0].y, stroke.width, 0, Math.PI * 2);\n this.ctx.fill();\n return;\n }\n let p1 = stroke.points[0];\n let p2 = stroke.points[1];\n this.ctx.moveTo(p2.x, p2.y);\n this.ctx.beginPath();\n for (let i = 1, len = stroke.points.length; i < len; i++) {\n const midPoint = this.midPointBtw(p1, p2);\n this.ctx.quadraticCurveTo(p1.x, p1.y, midPoint.x, midPoint.y);\n p1 = stroke.points[i];\n p2 = stroke.points[i + 1];\n }\n this.ctx.lineTo(p1.x, p1.y);\n this.ctx.stroke();\n }\n clear() {\n if (!this.ctx) {\n this._commandQueue.push(['clear', []]);\n return;\n }\n this.strokes = [];\n this.undoneStrokes = [];\n this.ctx.fillStyle = this.backgroundColor;\n this.ctx.fillRect(0, 0, this.width, this.height);\n this.emitDrawClear();\n }\n undo() {\n if (!this.ctx) {\n this._commandQueue.push(['undo', []]);\n return;\n }\n if (this.strokes.length === 0)\n return;\n const stroke = this.strokes.pop();\n if (stroke) {\n this.undoneStrokes.push(stroke);\n this.redraw();\n this.emitDrawUndo();\n }\n }\n redo() {\n if (!this.ctx) {\n this._commandQueue.push(['redo', []]);\n return;\n }\n if (this.undoneStrokes.length === 0)\n return;\n const stroke = this.undoneStrokes.pop();\n if (stroke) {\n this.strokes.push(stroke);\n this.drawStroke(stroke);\n this.emitDrawRedo();\n }\n }\n toDataURL(type = 'image/png', quality = 0.92) {\n if (!this.canvas)\n return '';\n return this.canvas.toDataURL(type, quality);\n }\n async toBlob(type = 'image/png', quality = 0.92) {\n if (!this.canvas)\n throw new Error('Canvas not initialized');\n return new Promise((resolve, reject) => {\n this.canvas?.toBlob((blob) => {\n if (blob)\n resolve(blob);\n else\n reject(new Error('Failed to create blob'));\n }, type, quality);\n });\n }\n download(filename = `drawing-${Date.now()}.png`) {\n const dataURL = this.toDataURL();\n const a = document.createElement('a');\n a.href = dataURL;\n a.download = filename;\n a.click();\n }\n async loadImage(url) {\n if (!this.ctx)\n throw new Error('Canvas not initialized');\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.onload = () => {\n this.ctx.drawImage(img, 0, 0, this.width, this.height);\n resolve();\n };\n img.onerror = () => reject(new Error('Failed to load image'));\n img.src = url;\n });\n }\n getStrokes() {\n return [...this.strokes];\n }\n setStrokes(strokes) {\n if (!this.ctx) {\n this._commandQueue.push(['setStrokes', [strokes]]);\n return;\n }\n this.strokes = [...strokes];\n this.undoneStrokes = [];\n this.redraw();\n }\n generateId() {\n return `stroke-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n }\n // Polygon processing methods\n processPolygon(points) {\n // Auto-circle mode takes precedence\n if (this.autoCircle && points.length >= 4) {\n return this.createWobblyCircle(points);\n }\n if (!this.autoPolygon || points.length < 4)\n return points;\n // Simplify to line segments (sample every Nth point for performance)\n const simplified = this.simplifyPoints(points, 5);\n // Check for self-intersection\n const intersection = this.findFirstIntersection(simplified);\n if (intersection) {\n // Trim at intersection point\n return this.trimAtIntersection(points, intersection);\n }\n else {\n // Check if shape should be closed\n const start = points[0];\n const end = points[points.length - 1];\n const distance = Math.sqrt(Math.pow(end.x - start.x, 2) + Math.pow(end.y - start.y, 2));\n // If start and end are far apart (more than 20px), close the shape with a curve\n if (distance > 20) {\n const curvePoints = this.createClosingCurve(end, start, this.polygonCurvePoints);\n return [...points, ...curvePoints];\n }\n }\n return points;\n }\n simplifyPoints(points, step) {\n const simplified = [];\n for (let i = 0; i < points.length; i += step) {\n simplified.push(points[i]);\n }\n // Always include the last point\n if (simplified[simplified.length - 1] !== points[points.length - 1]) {\n simplified.push(points[points.length - 1]);\n }\n return simplified;\n }\n findFirstIntersection(points) {\n // Check each line segment against all others\n for (let i = 0; i < points.length - 1; i++) {\n const p1 = points[i];\n const p2 = points[i + 1];\n // Start checking from i+2 to avoid adjacent segments\n for (let j = i + 2; j < points.length - 1; j++) {\n const p3 = points[j];\n const p4 = points[j + 1];\n // Don't check the last segment against the first (they should connect)\n if (i === 0 && j === points.length - 2)\n continue;\n const intersection = this.lineIntersection(p1, p2, p3, p4);\n if (intersection) {\n return { i, j, point: intersection };\n }\n }\n }\n return null;\n }\n lineIntersection(p1, p2, p3, p4) {\n const x1 = p1.x, y1 = p1.y;\n const x2 = p2.x, y2 = p2.y;\n const x3 = p3.x, y3 = p3.y;\n const x4 = p4.x, y4 = p4.y;\n const denom = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\n if (Math.abs(denom) < 0.0001)\n return null; // Parallel lines\n const t = ((x1 - x3) * (y3 - y4) - (y1 - y3) * (x3 - x4)) / denom;\n const u = -((x1 - x2) * (y1 - y3) - (y1 - y2) * (x1 - x3)) / denom;\n if (t >= 0 && t <= 1 && u >= 0 && u <= 1) {\n return {\n x: x1 + t * (x2 - x1),\n y: y1 + t * (y2 - y1),\n pressure: 0\n };\n }\n return null;\n }\n trimAtIntersection(points, intersection) {\n // Find the actual indices in the full point array based on simplified indices\n const step = 5;\n const actualJ = Math.min(intersection.j * step, points.length - 1);\n // Keep points from the intersection forward to close the shape properly\n // This preserves the drawn shape and just adds the intersection point to close it\n return [...points.slice(0, actualJ + 1), intersection.point];\n }\n createClosingCurve(start, end, numPoints) {\n if (numPoints < 2)\n return [end];\n const curvePoints = [];\n // Calculate control point for the curve\n // Use a point perpendicular to the line between start and end\n const midX = (start.x + end.x) / 2;\n const midY = (start.y + end.y) / 2;\n // Vector from start to end\n const dx = end.x - start.x;\n const dy = end.y - start.y;\n // Perpendicular vector (rotated 90 degrees)\n const perpX = -dy;\n const perpY = dx;\n // Control point is offset from midpoint along perpendicular\n // Offset is proportional to distance to create a natural curve\n const distance = Math.sqrt(dx * dx + dy * dy);\n const offset = distance * 0.2; // 20% of distance\n const controlX = midX + (perpX / distance) * offset;\n const controlY = midY + (perpY / distance) * offset;\n // Interpolate points along the quadratic Bezier curve\n for (let i = 1; i <= numPoints; i++) {\n const t = i / (numPoints + 1);\n // Quadratic Bezier formula: B(t) = (1-t)²P0 + 2(1-t)tP1 + t²P2\n const x = Math.pow(1 - t, 2) * start.x +\n 2 * (1 - t) * t * controlX +\n Math.pow(t, 2) * end.x;\n const y = Math.pow(1 - t, 2) * start.y +\n 2 * (1 - t) * t * controlY +\n Math.pow(t, 2) * end.y;\n curvePoints.push({ x, y, pressure: 0 });\n }\n // Add the end point\n curvePoints.push(end);\n return curvePoints;\n }\n createWobblyCircle(points) {\n if (points.length < 4)\n return points;\n // Group points into time-based clusters and take median of each cluster\n // This preserves the shape better than simple downsampling\n const clusterSize = Math.max(3, Math.floor(points.length / 80)); // Target ~80 clusters\n let sampled = [];\n for (let i = 0; i < points.length; i += clusterSize) {\n const cluster = points.slice(i, Math.min(i + clusterSize, points.length));\n // Find median point in cluster (centroid)\n let sumX = 0, sumY = 0;\n for (const p of cluster) {\n sumX += p.x;\n sumY += p.y;\n }\n sampled.push({\n x: sumX / cluster.length,\n y: sumY / cluster.length,\n pressure: 0\n });\n }\n // Remove points that create sharp angles\n let filtered = this.removeSharpAngles(sampled, 20); // Remove angles < 20 degrees\n // Close the shape first by connecting end to start\n const start = filtered[0];\n const end = filtered[filtered.length - 1];\n const distance = Math.sqrt(Math.pow(end.x - start.x, 2) + Math.pow(end.y - start.y, 2));\n let closed;\n if (distance < 10) {\n // Already close, just connect directly\n closed = [...filtered, start];\n }\n else {\n // Add smooth closing curve\n const curvePoints = this.createClosingCurve(end, start, this.circlePoints);\n closed = [...filtered, ...curvePoints];\n }\n // Now apply Chaikin's corner-cutting algorithm to the closed shape\n let smoothed = closed;\n const iterations = 4; // Number of smoothing passes\n for (let iter = 0; iter < iterations; iter++) {\n const newPoints = [];\n const len = smoothed.length;\n // Process as a closed loop\n for (let i = 0; i < len; i++) {\n const p0 = smoothed[i];\n const p1 = smoothed[(i + 1) % len]; // Wrap around for closed shape\n // Create two new points at 1/4 and 3/4 along each segment\n newPoints.push({\n x: 0.75 * p0.x + 0.25 * p1.x,\n y: 0.75 * p0.y + 0.25 * p1.y,\n pressure: 0\n });\n newPoints.push({\n x: 0.25 * p0.x + 0.75 * p1.x,\n y: 0.25 * p0.y + 0.75 * p1.y,\n pressure: 0\n });\n }\n smoothed = newPoints;\n }\n // Ensure the shape is perfectly closed by duplicating the first point at the end\n if (smoothed.length > 0) {\n smoothed.push({ ...smoothed[0] });\n }\n return smoothed;\n }\n removeSharpAngles(points, minAngleDegrees) {\n if (points.length < 3)\n return points;\n const filtered = [points[0]]; // Always keep first point\n const minAngleRad = (minAngleDegrees * Math.PI) / 180;\n for (let i = 1; i < points.length - 1; i++) {\n const prev = points[i - 1];\n const curr = points[i];\n const next = points[i + 1];\n // Calculate vectors\n const v1x = curr.x - prev.x;\n const v1y = curr.y - prev.y;\n const v2x = next.x - curr.x;\n const v2y = next.y - curr.y;\n // Calculate magnitudes\n const mag1 = Math.sqrt(v1x * v1x + v1y * v1y);\n const mag2 = Math.sqrt(v2x * v2x + v2y * v2y);\n if (mag1 === 0 || mag2 === 0) {\n // Skip points that are too close together\n continue;\n }\n // Calculate angle using dot product\n const dot = v1x * v2x + v1y * v2y;\n const cosAngle = dot / (mag1 * mag2);\n const angle = Math.acos(Math.max(-1, Math.min(1, cosAngle))); // Clamp to avoid NaN\n // Keep point if angle is large enough (smoother turn)\n if (angle >= minAngleRad) {\n filtered.push(curr);\n }\n }\n filtered.push(points[points.length - 1]); // Always keep last point\n return filtered;\n }\n emitDrawStart(point) {\n return { draw: this, point };\n }\n emitDrawEnd(stroke) {\n return { draw: this, stroke };\n }\n emitDrawClear() {\n return { draw: this };\n }\n emitDrawUndo() {\n return { draw: this };\n }\n emitDrawRedo() {\n return { draw: this };\n }\n });\n return _classThis;\n})();\n\nexport { SniceDraw };\n//# sourceMappingURL=snice-draw.js.map\n"],"names":["__esDecorate","ctor","descriptorIn","decorators","contextIn","initializers","extraInitializers","accept","f","TypeError","_","kind","key","target","prototype","descriptor","Object","getOwnPropertyDescriptor","name","done","i","length","context","p","access","addInitializer","push","result","get","set","init","unshift","defineProperty","__runInitializers","thisArg","value","useValue","arguments","call","SuppressedError","ease","t","DrawPoint","constructor","x","y","this","update","point","moveByAngle","angle","distance","friction","angleRotated","Math","PI","sin","cos","equalsTo","getDifferenceTo","getDistanceTo","diff","sqrt","pow","getAngleTo","atan2","toObject","DrawBrush","options","initialPoint","radius","_isEnabled","enabled","pointer","brush","_hasMoved","enable","disable","isEnabled","setRadius","getRadius","getBrushCoordinates","getPointerCoordinates","getBrush","getPointer","getAngle","getDistance","brushHasMoved","newPointerPoint","both","isOutside","round","undefined","SniceDraw","_classDescriptor","_classThis","_width_decorators","_height_decorators","_tool_decorators","_color_decorators","_strokeWidth_decorators","_backgroundColor_decorators","_lazy_decorators","_lazyRadius_decorators","_friction_decorators","_smoothing_decorators","_autoPolygon_decorators","_polygonCurvePoints_decorators","_autoCircle_decorators","_circlePoints_decorators","_disabled_decorators","_canvasElement_decorators","_styles_decorators","_onReady_decorators","_onDispose_decorators","_render_decorators","_handlePointerDown_decorators","_handlePointerMove_decorators","_handlePointerUp_decorators","_emitDrawStart_decorators","_emitDrawEnd_decorators","_emitDrawClear_decorators","_emitDrawUndo_decorators","_emitDrawRedo_decorators","_classDecorators","element","_classExtraInitializers","_classSuper","HTMLElement","_instanceExtraInitializers","_width_initializers","_width_extraInitializers","_height_initializers","_height_extraInitializers","_tool_initializers","_tool_extraInitializers","_color_initializers","_color_extraInitializers","_strokeWidth_initializers","_strokeWidth_extraInitializers","_backgroundColor_initializers","_backgroundColor_extraInitializers","_lazy_initializers","_lazy_extraInitializers","_lazyRadius_initializers","_lazyRadius_extraInitializers","_friction_initializers","_friction_extraInitializers","_smoothing_initializers","_smoothing_extraInitializers","_autoPolygon_initializers","_autoPolygon_extraInitializers","_polygonCurvePoints_initializers","_polygonCurvePoints_extraInitializers","_autoCircle_initializers","_autoCircle_extraInitializers","_circlePoints_initializers","_circlePoints_extraInitializers","_disabled_initializers","_disabled_extraInitializers","_canvasElement_initializers","_canvasElement_extraInitializers","_metadata","Symbol","metadata","create","property","type","Number","String","attribute","Boolean","query","styles","ready","dispose","render","on","dispatch","bubbles","composed","static","private","has","obj","onReady","onDispose","handlePointerDown","handlePointerMove","handlePointerUp","emitDrawStart","emitDrawEnd","emitDrawClear","emitDrawUndo","emitDrawRedo","width","height","tool","color","strokeWidth","backgroundColor","lazy","lazyRadius","smoothing","autoPolygon","polygonCurvePoints","autoCircle","circlePoints","disabled","canvasElement","enumerable","configurable","writable","super","canvas","ctx","isDrawing","isPressing","currentStroke","strokes","undoneStrokes","_commandQueue","lastPoint","rafId","mouseX","mouseY","drawBrush","css","requestAnimationFrame","initCanvas","startLoop","stopLoop","html","rect","getBoundingClientRect","displayWidth","displayHeight","dpr","window","devicePixelRatio","getContext","willReadFrequently","scale","imageSmoothingEnabled","imageSmoothingQuality","fillStyle","fillRect","_flushQueue","e","preventDefault","getPointerPosition","setPointerCapture","pointerId","points","processPolygon","stroke","id","generateId","timestamp","Date","now","redraw","releasePointerCapture","pressure","clientX","left","clientY","top","loop","updateLazyBrush","cancelAnimationFrame","midPointBtw","p1","p2","forEach","drawStroke","lineJoin","lineCap","strokeStyle","lineWidth","moveTo","beginPath","len","midPoint","quadraticCurveTo","lineTo","queue","method","args","arc","fill","clear","undo","pop","redo","toDataURL","quality","toBlob","Error","Promise","resolve","reject","blob","download","filename","dataURL","a","document","createElement","href","click","loadImage","url","img","Image","crossOrigin","onload","drawImage","onerror","src","getStrokes","setStrokes","random","toString","substr","createWobblyCircle","simplified","simplifyPoints","intersection","findFirstIntersection","trimAtIntersection","start","end","curvePoints","createClosingCurve","step","j","p3","p4","lineIntersection","x1","y1","x2","y2","x3","y3","x4","y4","denom","abs","u","actualJ","min","slice","numPoints","midX","midY","dx","dy","perpX","perpY","offset","controlX","controlY","clusterSize","max","floor","sampled","cluster","sumX","sumY","filtered","removeSharpAngles","closed","smoothed","iter","newPoints","p0","minAngleDegrees","minAngleRad","prev","curr","next","v1x","v1y","v2x","v2y","mag1","mag2","cosAngle","acos","draw"],"mappings":";;;;;;yJAiEO,SAASA,EAAaC,EAAMC,EAAcC,EAAYC,EAAWC,EAAcC,GACpF,SAASC,EAAOC,GAAK,QAAU,IAANA,GAA6B,mBAANA,EAAkB,MAAM,IAAIC,UAAU,qBAAsB,OAAOD,CAAG,CAKtH,IAJA,IAGIE,EAHAC,EAAOP,EAAUO,KAAMC,EAAe,WAATD,EAAoB,MAAiB,WAATA,EAAoB,MAAQ,QACrFE,GAAUX,GAAgBD,EAAOG,EAAkB,OAAIH,EAAOA,EAAKa,UAAY,KAC/EC,EAAab,IAAiBW,EAASG,OAAOC,yBAAyBJ,EAAQT,EAAUc,MAAQ,IAC9FC,GAAO,EACLC,EAAIjB,EAAWkB,OAAS,EAAGD,GAAK,EAAGA,IAAK,CAC7C,IAAIE,EAAU,CAAA,EACd,IAAK,IAAIC,KAAKnB,EAAWkB,EAAQC,GAAW,WAANA,EAAiB,CAAA,EAAKnB,EAAUmB,GACtE,IAAK,IAAIA,KAAKnB,EAAUoB,OAAQF,EAAQE,OAAOD,GAAKnB,EAAUoB,OAAOD,GACrED,EAAQG,eAAiB,SAAUjB,GAAK,GAAIW,EAAM,MAAM,IAAIV,UAAU,0DAA2DH,EAAkBoB,KAAKnB,EAAOC,GAAK,MAAQ,EAC5K,IAAImB,GAAS,EAAIxB,EAAWiB,IAAa,aAATT,EAAsB,CAAEiB,IAAKb,EAAWa,IAAKC,IAAKd,EAAWc,KAAQd,EAAWH,GAAMU,GACtH,GAAa,aAATX,EAAqB,CACrB,QAAe,IAAXgB,EAAmB,SACvB,GAAe,OAAXA,GAAqC,iBAAXA,EAAqB,MAAM,IAAIlB,UAAU,oBACnEC,EAAIH,EAAOoB,EAAOC,QAAMb,EAAWa,IAAMlB,IACzCA,EAAIH,EAAOoB,EAAOE,QAAMd,EAAWc,IAAMnB,IACzCA,EAAIH,EAAOoB,EAAOG,QAAOzB,EAAa0B,QAAQrB,EACtD,MACSA,EAAIH,EAAOoB,MACH,UAAThB,EAAkBN,EAAa0B,QAAQrB,GACtCK,EAAWH,GAAOF,EAE/B,CACIG,GAAQG,OAAOgB,eAAenB,EAAQT,EAAUc,KAAMH,GAC1DI,GAAO,CACT,CAEO,SAASc,EAAkBC,EAAS7B,EAAc8B,GAEvD,IADA,IAAIC,EAAWC,UAAUhB,OAAS,EACzBD,EAAI,EAAGA,EAAIf,EAAagB,OAAQD,IACrCe,EAAQC,EAAW/B,EAAae,GAAGkB,KAAKJ,EAASC,GAAS9B,EAAae,GAAGkB,KAAKJ,GAEnF,OAAOE,EAAWD,OAAQ,CAC5B,CAoOkD,mBAApBI,iBAAiCA,gBClU/D,MAAMC,EAAQC,GAAMA,GAAK,EAAIA,GAC7B,MAAMC,EACF,WAAAC,CAAYC,EAAGC,GACXC,KAAKF,EAAIA,EACTE,KAAKD,EAAIA,CACb,CACA,MAAAE,CAAOC,GAGH,OAFAF,KAAKF,EAAII,EAAMJ,EACfE,KAAKD,EAAIG,EAAMH,EACRC,IACX,CACA,WAAAG,CAAYC,EAAOC,EAAUC,GACzB,MAAMC,EAAeH,EAAQI,KAAKC,GAAK,EASvC,OARIH,GACAN,KAAKF,EAAIE,KAAKF,EAAIU,KAAKE,IAAIH,GAAgBF,EAAWX,EAAK,EAAIY,GAC/DN,KAAKD,EAAIC,KAAKD,EAAIS,KAAKG,IAAIJ,GAAgBF,EAAWX,EAAK,EAAIY,KAG/DN,KAAKF,EAAIE,KAAKF,EAAIU,KAAKE,IAAIH,GAAgBF,EAC3CL,KAAKD,EAAIC,KAAKD,EAAIS,KAAKG,IAAIJ,GAAgBF,GAExCL,IACX,CACA,QAAAY,CAASV,GACL,OAAOF,KAAKF,IAAMI,EAAMJ,GAAKE,KAAKD,IAAMG,EAAMH,CAClD,CACA,eAAAc,CAAgBX,GACZ,OAAO,IAAIN,EAAUI,KAAKF,EAAII,EAAMJ,EAAGE,KAAKD,EAAIG,EAAMH,EAC1D,CACA,aAAAe,CAAcZ,GACV,MAAMa,EAAOf,KAAKa,gBAAgBX,GAClC,OAAOM,KAAKQ,KAAKR,KAAKS,IAAIF,EAAKjB,EAAG,GAAKU,KAAKS,IAAIF,EAAKhB,EAAG,GAC5D,CACA,UAAAmB,CAAWhB,GACP,MAAMa,EAAOf,KAAKa,gBAAgBX,GAClC,OAAOM,KAAKW,MAAMJ,EAAKhB,EAAGgB,EAAKjB,EACnC,CACA,QAAAsB,GACI,MAAO,CAAEtB,EAAGE,KAAKF,EAAGC,EAAGC,KAAKD,EAChC,EAEJ,MAAMsB,EACF,WAAAxB,CAAYyB,EAAU,IAClB,MAAMC,EAAeD,EAAQC,cAAgB,CAAEzB,EAAG,EAAGC,EAAG,GACxDC,KAAKwB,OAASF,EAAQE,QAAU,GAChCxB,KAAKyB,YAAiC,IAApBH,EAAQI,QAC1B1B,KAAK2B,QAAU,IAAI/B,EAAU2B,EAAazB,EAAGyB,EAAaxB,GAC1DC,KAAK4B,MAAQ,IAAIhC,EAAU2B,EAAazB,EAAGyB,EAAaxB,GACxDC,KAAKI,MAAQ,EACbJ,KAAKK,SAAW,EAChBL,KAAK6B,WAAY,CACrB,CACA,MAAAC,GACI9B,KAAKyB,YAAa,CACtB,CACA,OAAAM,GACI/B,KAAKyB,YAAa,CACtB,CACA,SAAAO,GACI,OAAOhC,KAAKyB,UAChB,CACA,SAAAQ,CAAUT,GACNxB,KAAKwB,OAASA,CAClB,CACA,SAAAU,GACI,OAAOlC,KAAKwB,MAChB,CACA,mBAAAW,GACI,OAAOnC,KAAK4B,MAAMR,UACtB,CACA,qBAAAgB,GACI,OAAOpC,KAAK2B,QAAQP,UACxB,CACA,QAAAiB,GACI,OAAOrC,KAAK4B,KAChB,CACA,UAAAU,GACI,OAAOtC,KAAK2B,OAChB,CACA,QAAAY,GACI,OAAOvC,KAAKI,KAChB,CACA,WAAAoC,GACI,OAAOxC,KAAKK,QAChB,CACA,aAAAoC,GACI,OAAOzC,KAAK6B,SAChB,CACA,MAAA5B,CAAOyC,EAAiBpB,EAAU,IAE9B,GADAtB,KAAK6B,WAAY,EACb7B,KAAK2B,QAAQf,SAAS8B,KAAqBpB,EAAQqB,OAASrB,EAAQhB,SACpE,OAAO,EAGX,GADAN,KAAK2B,QAAQ1B,OAAOyC,GAChBpB,EAAQqB,KAGR,OAFA3C,KAAK6B,WAAY,EACjB7B,KAAK4B,MAAM3B,OAAOyC,IACX,EAEX,GAAI1C,KAAKyB,WAAY,CACjBzB,KAAKK,SAAWL,KAAK2B,QAAQb,cAAcd,KAAK4B,OAChD5B,KAAKI,MAAQJ,KAAK2B,QAAQT,WAAWlB,KAAK4B,OAC1C,MAAMgB,EAAYpC,KAAKqC,MAAsC,IAA/B7C,KAAKK,SAAWL,KAAKwB,SAAgB,GAAK,EAClElB,EAAWgB,EAAQhB,UAAYgB,EAAQhB,SAAW,GAAKgB,EAAQhB,SAAW,EAC1EgB,EAAQhB,cACRwC,EACFF,IACA5C,KAAK4B,MAAMzB,YAAYH,KAAKI,MAAOJ,KAAKK,SAAWL,KAAKwB,OAAQlB,GAChEN,KAAK6B,WAAY,EAEzB,MAEI7B,KAAKK,SAAW,EAChBL,KAAKI,MAAQ,EACbJ,KAAK4B,MAAM3B,OAAOyC,GAClB1C,KAAK6B,WAAY,EAErB,OAAO,CACX,EAED,IAACkB,EAAY,MACZ,IACIC,EAEAC,EAGAC,EAGAC,EAGAC,EAGAC,EAGAC,EAGAC,EAGAC,EAGAC,EAGAC,EAGAC,EAGAC,EAGAC,EAGAC,EAGAC,EAGAC,EAGAC,EAGAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAjEAC,EAAmB,CAACC,UAAQ,eAE5BC,EAA0B,GAE1BC,EAAcC,YACdC,EAA6B,GAE7BC,EAAsB,GACtBC,EAA2B,GAE3BC,EAAuB,GACvBC,EAA4B,GAE5BC,EAAqB,GACrBC,EAA0B,GAE1BC,EAAsB,GACtBC,EAA2B,GAE3BC,EAA4B,GAC5BC,EAAiC,GAEjCC,EAAgC,GAChCC,EAAqC,GAErCC,EAAqB,GACrBC,EAA0B,GAE1BC,EAA2B,GAC3BC,EAAgC,GAEhCC,GAAyB,GACzBC,GAA8B,GAE9BC,GAA0B,GAC1BC,GAA+B,GAE/BC,GAA4B,GAC5BC,GAAiC,GAEjCC,GAAmC,GACnCC,GAAwC,GAExCC,GAA2B,GAC3BC,GAAgC,GAEhCC,GAA6B,GAC7BC,GAAkC,GAElCC,GAAyB,GACzBC,GAA8B,GAE9BC,GAA8B,GAC9BC,GAAmC,GA4pBvC,OA/oBA,cAAelC,SACFhC,EAAajD,IAAK,QAEvB,MAAMoH,EAA8B,mBAAXC,QAAyBA,OAAOC,SAAWpJ,OAAOqJ,OAAOtC,EAAYoC,OAAOC,WAAa,WAAQ,EAC1HpE,EAAoB,CAACsE,EAAAA,SAAS,CAAEC,KAAMC,UACtCvE,EAAqB,CAACqE,EAAAA,SAAS,CAAEC,KAAMC,UACvCtE,EAAmB,CAACoE,EAAAA,SAAS,CAAEC,KAAME,UACrCtE,EAAoB,CAACmE,EAAAA,SAAS,CAAEC,KAAME,UACtCrE,EAA0B,CAACkE,EAAAA,SAAS,CAAEC,KAAMC,OAAQE,UAAW,kBAC/DrE,EAA8B,CAACiE,EAAAA,SAAS,CAAEC,KAAME,OAAQC,UAAW,sBACnEpE,EAAmB,CAACgE,EAAAA,SAAS,CAAEC,KAAMI,WACrCpE,EAAyB,CAAC+D,EAAAA,SAAS,CAAEC,KAAMC,OAAQE,UAAW,iBAC9DlE,EAAuB,CAAC8D,EAAAA,SAAS,CAAEC,KAAMC,UACzC/D,EAAwB,CAAC6D,EAAAA,SAAS,CAAEC,KAAMC,UAC1C9D,EAA0B,CAAC4D,EAAAA,SAAS,CAAEC,KAAMI,QAASD,UAAW,kBAChE/D,EAAiC,CAAC2D,EAAAA,SAAS,CAAEC,KAAMC,OAAQE,UAAW,0BACtE9D,EAAyB,CAAC0D,EAAAA,SAAS,CAAEC,KAAMI,QAASD,UAAW,iBAC/D7D,EAA2B,CAACyD,EAAAA,SAAS,CAAEC,KAAMC,OAAQE,UAAW,mBAChE5D,EAAuB,CAACwD,EAAAA,SAAS,CAAEC,KAAMI,WACzC5D,EAA4B,CAAC6D,QAAM,iBACnC5D,EAAqB,CAAC6D,EAAAA,UACtB5D,EAAsB,CAAC6D,EAAAA,SACvB5D,EAAwB,CAAC6D,EAAAA,WACzB5D,EAAqB,CAAC6D,EAAAA,UACtB5D,EAAgC,CAAC6D,EAAAA,GAAG,cAAe,CAAEpK,OAAQ,YAC7DwG,EAAgC,CAAC4D,EAAAA,GAAG,cAAe,CAAEpK,OAAQ,YAC7DyG,EAA8B,CAAC2D,EAAAA,GAAG,YAAa,CAAEpK,OAAQ,YACzD0G,EAA4B,CAAC2D,EAAAA,SAAS,aAAc,CAAEC,SAAS,EAAMC,UAAU,KAC/E5D,EAA0B,CAAC0D,EAAAA,SAAS,WAAY,CAAEC,SAAS,EAAMC,UAAU,KAC3E3D,EAA4B,CAACyD,EAAAA,SAAS,aAAc,CAAEC,SAAS,EAAMC,UAAU,KAC/E1D,EAA2B,CAACwD,EAAAA,SAAS,YAAa,CAAEC,SAAS,EAAMC,UAAU,KAC7EzD,EAA2B,CAACuD,EAAAA,SAAS,YAAa,CAAEC,SAAS,EAAMC,UAAU,KAC7EpL,EAAa8C,KAAM,KAAMkE,EAAoB,CAAErG,KAAM,SAAUO,KAAM,SAAUmK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,WAAYA,EAAK5J,IAAK4J,GAAOA,EAAIX,QAAUT,SAAUF,GAAa,KAAMjC,GAC5MjI,EAAa8C,KAAM,KAAMmE,EAAqB,CAAEtG,KAAM,SAAUO,KAAM,UAAWmK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,YAAaA,EAAK5J,IAAK4J,GAAOA,EAAIC,SAAWrB,SAAUF,GAAa,KAAMjC,GAChNjI,EAAa8C,KAAM,KAAMoE,EAAuB,CAAEvG,KAAM,SAAUO,KAAM,YAAamK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,cAAeA,EAAK5J,IAAK4J,GAAOA,EAAIE,WAAatB,SAAUF,GAAa,KAAMjC,GACxNjI,EAAa8C,KAAM,KAAMqE,EAAoB,CAAExG,KAAM,SAAUO,KAAM,SAAUmK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,WAAYA,EAAK5J,IAAK4J,GAAOA,EAAIR,QAAUZ,SAAUF,GAAa,KAAMjC,GAC5MjI,EAAa8C,KAAM,KAAMsE,EAA+B,CAAEzG,KAAM,SAAUO,KAAM,oBAAqBmK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,sBAAuBA,EAAK5J,IAAK4J,GAAOA,EAAIG,mBAAqBvB,SAAUF,GAAa,KAAMjC,GACxPjI,EAAa8C,KAAM,KAAMuE,EAA+B,CAAE1G,KAAM,SAAUO,KAAM,oBAAqBmK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,sBAAuBA,EAAK5J,IAAK4J,GAAOA,EAAII,mBAAqBxB,SAAUF,GAAa,KAAMjC,GACxPjI,EAAa8C,KAAM,KAAMwE,EAA6B,CAAE3G,KAAM,SAAUO,KAAM,kBAAmBmK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,oBAAqBA,EAAK5J,IAAK4J,GAAOA,EAAIK,iBAAmBzB,SAAUF,GAAa,KAAMjC,GAChPjI,EAAa8C,KAAM,KAAMyE,EAA2B,CAAE5G,KAAM,SAAUO,KAAM,gBAAiBmK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,kBAAmBA,EAAK5J,IAAK4J,GAAOA,EAAIM,eAAiB1B,SAAUF,GAAa,KAAMjC,GACxOjI,EAAa8C,KAAM,KAAM0E,EAAyB,CAAE7G,KAAM,SAAUO,KAAM,cAAemK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,gBAAiBA,EAAK5J,IAAK4J,GAAOA,EAAIO,aAAe3B,SAAUF,GAAa,KAAMjC,GAChOjI,EAAa8C,KAAM,KAAM2E,EAA2B,CAAE9G,KAAM,SAAUO,KAAM,gBAAiBmK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,kBAAmBA,EAAK5J,IAAK4J,GAAOA,EAAIQ,eAAiB5B,SAAUF,GAAa,KAAMjC,GACxOjI,EAAa8C,KAAM,KAAM4E,EAA0B,CAAE/G,KAAM,SAAUO,KAAM,eAAgBmK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,iBAAkBA,EAAK5J,IAAK4J,GAAOA,EAAIS,cAAgB7B,SAAUF,GAAa,KAAMjC,GACpOjI,EAAa8C,KAAM,KAAM6E,EAA0B,CAAEhH,KAAM,SAAUO,KAAM,eAAgBmK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,iBAAkBA,EAAK5J,IAAK4J,GAAOA,EAAIU,cAAgB9B,SAAUF,GAAa,KAAMjC,GACpOjI,EAAa,KAAM,KAAMgG,EAAmB,CAAErF,KAAM,QAASO,KAAM,QAASmK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,UAAWA,EAAK5J,IAAK4J,GAAOA,EAAIW,MAAOtK,IAAK,CAAC2J,EAAKrJ,KAAYqJ,EAAIW,MAAQhK,IAAYiI,SAAUF,GAAahC,EAAqBC,GACnQnI,EAAa,KAAM,KAAMiG,EAAoB,CAAEtF,KAAM,QAASO,KAAM,SAAUmK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,WAAYA,EAAK5J,IAAK4J,GAAOA,EAAIY,OAAQvK,IAAK,CAAC2J,EAAKrJ,KAAYqJ,EAAIY,OAASjK,IAAYiI,SAAUF,GAAa9B,EAAsBC,GACzQrI,EAAa,KAAM,KAAMkG,EAAkB,CAAEvF,KAAM,QAASO,KAAM,OAAQmK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,SAAUA,EAAK5J,IAAK4J,GAAOA,EAAIa,KAAMxK,IAAK,CAAC2J,EAAKrJ,KAAYqJ,EAAIa,KAAOlK,IAAYiI,SAAUF,GAAa5B,EAAoBC,GAC7PvI,EAAa,KAAM,KAAMmG,EAAmB,CAAExF,KAAM,QAASO,KAAM,QAASmK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,UAAWA,EAAK5J,IAAK4J,GAAOA,EAAIc,MAAOzK,IAAK,CAAC2J,EAAKrJ,KAAYqJ,EAAIc,MAAQnK,IAAYiI,SAAUF,GAAa1B,EAAqBC,GACnQzI,EAAa,KAAM,KAAMoG,EAAyB,CAAEzF,KAAM,QAASO,KAAM,cAAemK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,gBAAiBA,EAAK5J,IAAK4J,GAAOA,EAAIe,YAAa1K,IAAK,CAAC2J,EAAKrJ,KAAYqJ,EAAIe,YAAcpK,IAAYiI,SAAUF,GAAaxB,EAA2BC,GACvS3I,EAAa,KAAM,KAAMqG,EAA6B,CAAE1F,KAAM,QAASO,KAAM,kBAAmBmK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,oBAAqBA,EAAK5J,IAAK4J,GAAOA,EAAIgB,gBAAiB3K,IAAK,CAAC2J,EAAKrJ,KAAYqJ,EAAIgB,gBAAkBrK,IAAYiI,SAAUF,GAAatB,EAA+BC,GAC/T7I,EAAa,KAAM,KAAMsG,EAAkB,CAAE3F,KAAM,QAASO,KAAM,OAAQmK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,SAAUA,EAAK5J,IAAK4J,GAAOA,EAAIiB,KAAM5K,IAAK,CAAC2J,EAAKrJ,KAAYqJ,EAAIiB,KAAOtK,IAAYiI,SAAUF,GAAapB,EAAoBC,GAC7P/I,EAAa,KAAM,KAAMuG,EAAwB,CAAE5F,KAAM,QAASO,KAAM,aAAcmK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,eAAgBA,EAAK5J,IAAK4J,GAAOA,EAAIkB,WAAY7K,IAAK,CAAC2J,EAAKrJ,KAAYqJ,EAAIkB,WAAavK,IAAYiI,SAAUF,GAAalB,EAA0BC,GACjSjJ,EAAa,KAAM,KAAMwG,EAAsB,CAAE7F,KAAM,QAASO,KAAM,WAAYmK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,aAAcA,EAAK5J,IAAK4J,GAAOA,EAAIpI,SAAUvB,IAAK,CAAC2J,EAAKrJ,KAAYqJ,EAAIpI,SAAWjB,IAAYiI,SAAUF,GAAahB,GAAwBC,IACrRnJ,EAAa,KAAM,KAAMyG,EAAuB,CAAE9F,KAAM,QAASO,KAAM,YAAamK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,cAAeA,EAAK5J,IAAK4J,GAAOA,EAAImB,UAAW9K,IAAK,CAAC2J,EAAKrJ,KAAYqJ,EAAImB,UAAYxK,IAAYiI,SAAUF,GAAad,GAAyBC,IAC3RrJ,EAAa,KAAM,KAAM0G,EAAyB,CAAE/F,KAAM,QAASO,KAAM,cAAemK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,gBAAiBA,EAAK5J,IAAK4J,GAAOA,EAAIoB,YAAa/K,IAAK,CAAC2J,EAAKrJ,KAAYqJ,EAAIoB,YAAczK,IAAYiI,SAAUF,GAAaZ,GAA2BC,IACvSvJ,EAAa,KAAM,KAAM2G,EAAgC,CAAEhG,KAAM,QAASO,KAAM,qBAAsBmK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,uBAAwBA,EAAK5J,IAAK4J,GAAOA,EAAIqB,mBAAoBhL,IAAK,CAAC2J,EAAKrJ,KAAYqJ,EAAIqB,mBAAqB1K,IAAYiI,SAAUF,GAAaV,GAAkCC,IACjVzJ,EAAa,KAAM,KAAM4G,EAAwB,CAAEjG,KAAM,QAASO,KAAM,aAAcmK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,eAAgBA,EAAK5J,IAAK4J,GAAOA,EAAIsB,WAAYjL,IAAK,CAAC2J,EAAKrJ,KAAYqJ,EAAIsB,WAAa3K,IAAYiI,SAAUF,GAAaR,GAA0BC,IACjS3J,EAAa,KAAM,KAAM6G,EAA0B,CAAElG,KAAM,QAASO,KAAM,eAAgBmK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,iBAAkBA,EAAK5J,IAAK4J,GAAOA,EAAIuB,aAAclL,IAAK,CAAC2J,EAAKrJ,KAAYqJ,EAAIuB,aAAe5K,IAAYiI,SAAUF,GAAaN,GAA4BC,IAC7S7J,EAAa,KAAM,KAAM8G,EAAsB,CAAEnG,KAAM,QAASO,KAAM,WAAYmK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,aAAcA,EAAK5J,IAAK4J,GAAOA,EAAIwB,SAAUnL,IAAK,CAAC2J,EAAKrJ,KAAYqJ,EAAIwB,SAAW7K,IAAYiI,SAAUF,GAAaJ,GAAwBC,IACrR/J,EAAa,KAAM,KAAM+G,EAA2B,CAAEpG,KAAM,QAASO,KAAM,gBAAiBmK,QAAQ,EAAOC,SAAS,EAAO9J,OAAQ,CAAE+J,IAAKC,GAAO,kBAAmBA,EAAK5J,IAAK4J,GAAOA,EAAIyB,cAAepL,IAAK,CAAC2J,EAAKrJ,KAAYqJ,EAAIyB,cAAgB9K,IAAYiI,SAAUF,GAAaF,GAA6BC,IACnTjK,EAAa,KAAM8F,EAAmB,CAAE3D,MAAO4D,GAAc6B,EAAkB,CAAEjH,KAAM,QAASO,KAAM6E,EAAW7E,KAAMkJ,SAAUF,GAAa,KAAMpC,GACpJ/B,EAAaD,EAAiB3D,MAC1B+H,GAAWlJ,OAAOgB,eAAe+D,EAAYoE,OAAOC,SAAU,CAAE8C,YAAY,EAAMC,cAAc,EAAMC,UAAU,EAAMjL,MAAO+H,IACjIjI,EAAkB8D,EAAY+B,EAC1C,CACQ,WAAAnF,GACI0K,QACAvK,KAAKqJ,OAASlK,EAAkBa,KAAMmF,GAA6BhG,EAAkBa,KAAMoF,EAAqB,MAChHpF,KAAKsJ,QAAUnK,EAAkBa,KAAMqF,GAA2BlG,EAAkBa,KAAMsF,EAAsB,MAChHtF,KAAKuJ,MAAQpK,EAAkBa,KAAMuF,GAA4BpG,EAAkBa,KAAMwF,EAAoB,QAC7GxF,KAAKwJ,OAASrK,EAAkBa,KAAMyF,GAA0BtG,EAAkBa,KAAM0F,EAAqB,YAC7G1F,KAAKyJ,aAAetK,EAAkBa,KAAM2F,GAA2BxG,EAAkBa,KAAM4F,EAA2B,IAC1H5F,KAAK0J,iBAAmBvK,EAAkBa,KAAM6F,GAAiC1G,EAAkBa,KAAM8F,EAA+B,YACxI9F,KAAK2J,MAAQxK,EAAkBa,KAAM+F,GAAqC5G,EAAkBa,KAAMgG,GAAoB,IACtHhG,KAAK4J,YAAczK,EAAkBa,KAAMiG,GAA0B9G,EAAkBa,KAAMkG,EAA0B,KACvHlG,KAAKM,UAAYnB,EAAkBa,KAAMmG,GAAgChH,EAAkBa,KAAMoG,GAAwB,KACzHpG,KAAK6J,WAAa1K,EAAkBa,KAAMqG,IAA8BlH,EAAkBa,KAAMsG,GAAyB,KACzHtG,KAAK8J,aAAe3K,EAAkBa,KAAMuG,IAA+BpH,EAAkBa,KAAMwG,IAA2B,IAC9HxG,KAAK+J,oBAAsB5K,EAAkBa,KAAMyG,IAAiCtH,EAAkBa,KAAM0G,GAAkC,KAC9I1G,KAAKgK,YAAc7K,EAAkBa,KAAM2G,IAAwCxH,EAAkBa,KAAM4G,IAA0B,IACrI5G,KAAKiK,cAAgB9K,EAAkBa,KAAM6G,IAAgC1H,EAAkBa,KAAM8G,GAA4B,KACjI9G,KAAKkK,UAAY/K,EAAkBa,KAAM+G,IAAkC5H,EAAkBa,KAAMgH,IAAwB,IAC3HhH,KAAKmK,eAAiBhL,EAAkBa,KAAMiH,IAA8B9H,EAAkBa,KAAMkH,QAA6B,IACjIlH,KAAKwK,QAAUrL,EAAkBa,KAAMmH,IAAmC,MAC1EnH,KAAKyK,IAAM,KACXzK,KAAK0K,WAAY,EACjB1K,KAAK2K,YAAa,EAClB3K,KAAK4K,cAAgB,GACrB5K,KAAK6K,QAAU,GACf7K,KAAK8K,cAAgB,GACrB9K,KAAK+K,cAAgB,GACrB/K,KAAKgL,UAAY,KACjBhL,KAAKiL,MAAQ,KACbjL,KAAKkL,OAAS,EACdlL,KAAKmL,OAAS,EACdnL,KAAKoL,UAAY,IAAI/J,EAAU,CAC3BG,OAAQxB,KAAK4J,WACblI,QAAS1B,KAAK2J,MAEtB,CACA,MAAA5B,GACI,OAAOsD,EAAAA,GAAY,GAlSd,01CAmST,CACA,OAAA1C,GACI2C,sBAAsB,KAClBtL,KAAKuL,aACLvL,KAAKwL,aAEb,CACA,SAAA5C,GACI5I,KAAKyL,UACT,CACA,MAAAvD,GACI,OAAOwD,MAAc;;;mBAGd1L,KAAKqJ;oBACJrJ,KAAKsJ;oCACWtJ,KAAKuJ,QAAQvJ,KAAKkK,SAAW,WAAa;;;;KAKtE,CACA,UAAAqB,GAEI,GADAvL,KAAKwK,OAASxK,KAAKmK,eAAiB,MAC/BnK,KAAKwK,OACN,OAEJ,MAAMmB,EAAO3L,KAAKwK,OAAOoB,wBACnBC,EAAeF,EAAKtC,MACpByC,EAAgBH,EAAKrC,OAErByC,EAAMC,OAAOC,kBAAoB,EAEvCjM,KAAKwK,OAAOnB,MAAQwC,EAAeE,EACnC/L,KAAKwK,OAAOlB,OAASwC,EAAgBC,EAErC/L,KAAKqJ,MAAQwC,EACb7L,KAAKsJ,OAASwC,EACd9L,KAAKyK,IAAMzK,KAAKwK,OAAO0B,WAAW,KAAM,CAAEC,oBAAoB,IACzDnM,KAAKyK,MAGVzK,KAAKyK,IAAI2B,MAAML,EAAKA,GAEpB/L,KAAKyK,IAAI4B,uBAAwB,EACjCrM,KAAKyK,IAAI6B,sBAAwB,OAEjCtM,KAAKyK,IAAI8B,UAAYvM,KAAK0J,gBAC1B1J,KAAKyK,IAAI+B,SAAS,EAAG,EAAGxM,KAAKqJ,MAAOrJ,KAAKsJ,QAEzCtJ,KAAKyM,cACT,CACA,iBAAA5D,CAAkB6D,GACd,GAAI1M,KAAKkK,SACL,OACJwC,EAAEC,iBACF,MAAMzM,EAAQF,KAAK4M,mBAAmBF,GACtC1M,KAAKkL,OAAShL,EAAMJ,EACpBE,KAAKmL,OAASjL,EAAMH,EAEpBC,KAAKoL,UAAUnL,OAAOC,EAAO,CAAEyC,MAAM,IACrC3C,KAAK2K,YAAa,EAClB3K,KAAKwK,QAAQqC,kBAAkBH,EAAEI,WACjC9M,KAAKgJ,cAAc9I,EACvB,CACA,iBAAA4I,CAAkB4D,GACd,GAAI1M,KAAKkK,SACL,OACJwC,EAAEC,iBACF,MAAMzM,EAAQF,KAAK4M,mBAAmBF,GACtC1M,KAAKkL,OAAShL,EAAMJ,EACpBE,KAAKmL,OAASjL,EAAMH,CACxB,CACA,eAAAgJ,CAAgB2D,GACZ,GAAK1M,KAAK2K,WAAV,CAKA,GAHA+B,EAAEC,iBACF3M,KAAK2K,YAAa,EAClB3K,KAAK0K,WAAY,EACb1K,KAAK4K,cAAcrM,OAAS,EAAG,CAE/B,MAAMwO,EAAU/M,KAAK8J,aAAe9J,KAAKgK,WACnChK,KAAKgN,eAAe,IAAIhN,KAAK4K,gBAC7B,IAAI5K,KAAK4K,eACTqC,EAAS,CACXC,GAAIlN,KAAKmN,aACT5D,KAAMvJ,KAAKuJ,KACXC,MAAOxJ,KAAKwJ,MACZH,MAAOrJ,KAAKyJ,YACZsD,SACAK,UAAWC,KAAKC,OAEpBtN,KAAK6K,QAAQjM,KAAKqO,GAClBjN,KAAK4K,cAAgB,GAErB5K,KAAKuN,SACLvN,KAAKiJ,YAAYgE,EACrB,CACAjN,KAAKwK,QAAQgD,sBAAsBd,EAAEI,UAvBjC,CAwBR,CACA,kBAAAF,CAAmBF,GACf,IAAK1M,KAAKwK,OACN,MAAO,CAAE1K,EAAG,EAAGC,EAAG,EAAG0N,SAAU,GACnC,MAAM9B,EAAO3L,KAAKwK,OAAOoB,wBAIzB,MAAO,CACH9L,GAHO4M,EAAEgB,QAAU/B,EAAKgC,OAAS3N,KAAKqJ,MAAQsC,EAAKtC,OAInDtJ,GAHO2M,EAAEkB,QAAUjC,EAAKkC,MAAQ7N,KAAKsJ,OAASqC,EAAKrC,QAInDmE,SAAUf,EAAEe,SAEpB,CACA,SAAAjC,GACI,MAAMsC,EAAO,KACT9N,KAAK+N,kBACL/N,KAAKiL,MAAQK,sBAAsBwC,IAEvCA,GACJ,CACA,QAAArC,GACuB,OAAfzL,KAAKiL,QACL+C,qBAAqBhO,KAAKiL,OAC1BjL,KAAKiL,MAAQ,KAErB,CACA,WAAAgD,CAAYC,EAAIC,GACZ,MAAO,CACHrO,EAAGoO,EAAGpO,GAAKqO,EAAGrO,EAAIoO,EAAGpO,GAAK,EAC1BC,EAAGmO,EAAGnO,GAAKoO,EAAGpO,EAAImO,EAAGnO,GAAK,EAElC,CACA,eAAAgO,GACI,GAAK/N,KAAKyK,MAEVzK,KAAKoL,UAAUnL,OAAO,CAAEH,EAAGE,KAAKkL,OAAQnL,EAAGC,KAAKmL,QAAU,CAAE7K,SAAUN,KAAK0K,UAAY1K,KAAKM,SAAW,IACtGN,KAAKoL,UAAUpJ,YAChBhC,KAAKoL,UAAU3I,gBAEXzC,KAAK2K,aAAe3K,KAAK0K,YACzB1K,KAAK0K,WAAY,EACjB1K,KAAK4K,cAAgB,GACrB5K,KAAK8K,cAAgB,GACrB9K,KAAK4K,cAAchM,KAAKoB,KAAKoL,UAAUjJ,wBAEvCnC,KAAK0K,YAEL1K,KAAKyK,IAAI8B,UAAYvM,KAAK0J,gBAC1B1J,KAAKyK,IAAI+B,SAAS,EAAG,EAAGxM,KAAKqJ,MAAOrJ,KAAKsJ,QAEzCtJ,KAAK6K,QAAQuD,QAAQnB,IACjBjN,KAAKqO,WAAWpB,KAGpBjN,KAAK4K,cAAchM,KAAKoB,KAAKoL,UAAUjJ,uBAEnCnC,KAAK4K,cAAcrM,OAAS,IAAG,CAC/ByB,KAAKyK,IAAI6D,SAAW,QACpBtO,KAAKyK,IAAI8D,QAAU,QACnBvO,KAAKyK,IAAI+D,YAA4B,WAAdxO,KAAKuJ,KAAoBvJ,KAAK0J,gBAAkB1J,KAAKwJ,MAC5ExJ,KAAKyK,IAAIgE,UAA+B,EAAnBzO,KAAKyJ,YAC1B,IAAIyE,EAAKlO,KAAK4K,cAAc,GACxBuD,EAAKnO,KAAK4K,cAAc,GAC5B5K,KAAKyK,IAAIiE,OAAOP,EAAGrO,EAAGqO,EAAGpO,GACzBC,KAAKyK,IAAIkE,YACT,IAAK,IAAIrQ,EAAI,EAAGsQ,EAAM5O,KAAK4K,cAAcrM,OAAQD,EAAIsQ,EAAKtQ,IAAK,CAC3D,MAAMuQ,EAAW7O,KAAKiO,YAAYC,EAAIC,GACtCnO,KAAKyK,IAAIqE,iBAAiBZ,EAAGpO,EAAGoO,EAAGnO,EAAG8O,EAAS/O,EAAG+O,EAAS9O,GAC3DmO,EAAKlO,KAAK4K,cAActM,GACxB6P,EAAKnO,KAAK4K,cAActM,EAAI,EAChC,CAEA0B,KAAKyK,IAAIsE,OAAOb,EAAGpO,EAAGoO,EAAGnO,GACzBC,KAAKyK,IAAIwC,QACb,CAER,CACA,MAAAM,GACSvN,KAAKyK,MAGVzK,KAAKyK,IAAI8B,UAAYvM,KAAK0J,gBAC1B1J,KAAKyK,IAAI+B,SAAS,EAAG,EAAGxM,KAAKqJ,MAAOrJ,KAAKsJ,QAEzCtJ,KAAK6K,QAAQuD,QAAQnB,IACjBjN,KAAKqO,WAAWpB,KAExB,CACA,WAAAR,GACI,MAAMuC,EAAQhP,KAAK+K,cACnB/K,KAAK+K,cAAgB,GACrB,IAAK,MAAOkE,EAAQC,KAASF,EACzBhP,KAAKiP,MAAWC,EAExB,CACA,UAAAb,CAAWpB,GACP,IAAKjN,KAAKyK,KAAgC,IAAzBwC,EAAOF,OAAOxO,OAC3B,OAKJ,GAJAyB,KAAKyK,IAAI6D,SAAW,QACpBtO,KAAKyK,IAAI8D,QAAU,QACnBvO,KAAKyK,IAAI+D,YAA8B,WAAhBvB,EAAO1D,KAAoBvJ,KAAK0J,gBAAkBuD,EAAOzD,MAChFxJ,KAAKyK,IAAIgE,UAA2B,EAAfxB,EAAO5D,MACC,IAAzB4D,EAAOF,OAAOxO,OAKd,OAHAyB,KAAKyK,IAAIkE,YACT3O,KAAKyK,IAAI0E,IAAIlC,EAAOF,OAAO,GAAGjN,EAAGmN,EAAOF,OAAO,GAAGhN,EAAGkN,EAAO5D,MAAO,EAAa,EAAV7I,KAAKC,SAC3ET,KAAKyK,IAAI2E,OAGb,IAAIlB,EAAKjB,EAAOF,OAAO,GACnBoB,EAAKlB,EAAOF,OAAO,GACvB/M,KAAKyK,IAAIiE,OAAOP,EAAGrO,EAAGqO,EAAGpO,GACzBC,KAAKyK,IAAIkE,YACT,IAAK,IAAIrQ,EAAI,EAAGsQ,EAAM3B,EAAOF,OAAOxO,OAAQD,EAAIsQ,EAAKtQ,IAAK,CACtD,MAAMuQ,EAAW7O,KAAKiO,YAAYC,EAAIC,GACtCnO,KAAKyK,IAAIqE,iBAAiBZ,EAAGpO,EAAGoO,EAAGnO,EAAG8O,EAAS/O,EAAG+O,EAAS9O,GAC3DmO,EAAKjB,EAAOF,OAAOzO,GACnB6P,EAAKlB,EAAOF,OAAOzO,EAAI,EAC3B,CACA0B,KAAKyK,IAAIsE,OAAOb,EAAGpO,EAAGoO,EAAGnO,GACzBC,KAAKyK,IAAIwC,QACb,CACA,KAAAoC,GACSrP,KAAKyK,KAIVzK,KAAK6K,QAAU,GACf7K,KAAK8K,cAAgB,GACrB9K,KAAKyK,IAAI8B,UAAYvM,KAAK0J,gBAC1B1J,KAAKyK,IAAI+B,SAAS,EAAG,EAAGxM,KAAKqJ,MAAOrJ,KAAKsJ,QACzCtJ,KAAKkJ,iBAPDlJ,KAAK+K,cAAcnM,KAAK,CAAC,QAAS,IAQ1C,CACA,IAAA0Q,GACI,IAAKtP,KAAKyK,IAEN,YADAzK,KAAK+K,cAAcnM,KAAK,CAAC,OAAQ,KAGrC,GAA4B,IAAxBoB,KAAK6K,QAAQtM,OACb,OACJ,MAAM0O,EAASjN,KAAK6K,QAAQ0E,MACxBtC,IACAjN,KAAK8K,cAAclM,KAAKqO,GACxBjN,KAAKuN,SACLvN,KAAKmJ,eAEb,CACA,IAAAqG,GACI,IAAKxP,KAAKyK,IAEN,YADAzK,KAAK+K,cAAcnM,KAAK,CAAC,OAAQ,KAGrC,GAAkC,IAA9BoB,KAAK8K,cAAcvM,OACnB,OACJ,MAAM0O,EAASjN,KAAK8K,cAAcyE,MAC9BtC,IACAjN,KAAK6K,QAAQjM,KAAKqO,GAClBjN,KAAKqO,WAAWpB,GAChBjN,KAAKoJ,eAEb,CACA,SAAAqG,CAAUhI,EAAO,YAAaiI,EAAU,KACpC,OAAK1P,KAAKwK,OAEHxK,KAAKwK,OAAOiF,UAAUhI,EAAMiI,GADxB,EAEf,CACA,YAAMC,CAAOlI,EAAO,YAAaiI,EAAU,KACvC,IAAK1P,KAAKwK,OACN,MAAM,IAAIoF,MAAM,0BACpB,OAAO,IAAIC,QAAQ,CAACC,EAASC,KACzB/P,KAAKwK,QAAQmF,OAAQK,IACbA,EACAF,EAAQE,GAERD,EAAO,IAAIH,MAAM,2BACtBnI,EAAMiI,IAEjB,CACA,QAAAO,CAASC,EAAW,WAAW7C,KAAKC,aAChC,MAAM6C,EAAUnQ,KAAKyP,YACfW,EAAIC,SAASC,cAAc,KACjCF,EAAEG,KAAOJ,EACTC,EAAEH,SAAWC,EACbE,EAAEI,OACN,CACA,eAAMC,CAAUC,GACZ,IAAK1Q,KAAKyK,IACN,MAAM,IAAImF,MAAM,0BACpB,OAAO,IAAIC,QAAQ,CAACC,EAASC,KACzB,MAAMY,EAAM,IAAIC,MAChBD,EAAIE,YAAc,YAClBF,EAAIG,OAAS,KACT9Q,KAAKyK,IAAIsG,UAAUJ,EAAK,EAAG,EAAG3Q,KAAKqJ,MAAOrJ,KAAKsJ,QAC/CwG,KAEJa,EAAIK,QAAU,IAAMjB,EAAO,IAAIH,MAAM,yBACrCe,EAAIM,IAAMP,GAElB,CACA,UAAAQ,GACI,MAAO,IAAIlR,KAAK6K,QACpB,CACA,UAAAsG,CAAWtG,GACF7K,KAAKyK,KAIVzK,KAAK6K,QAAU,IAAIA,GACnB7K,KAAK8K,cAAgB,GACrB9K,KAAKuN,UALDvN,KAAK+K,cAAcnM,KAAK,CAAC,aAAc,CAACiM,IAMhD,CACA,UAAAsC,GACI,MAAO,UAAUE,KAAKC,SAAS9M,KAAK4Q,SAASC,SAAS,IAAIC,OAAO,EAAG,IACxE,CAEA,cAAAtE,CAAeD,GAEX,GAAI/M,KAAKgK,YAAc+C,EAAOxO,QAAU,EACpC,OAAOyB,KAAKuR,mBAAmBxE,GAEnC,IAAK/M,KAAK8J,aAAeiD,EAAOxO,OAAS,EACrC,OAAOwO,EAEX,MAAMyE,EAAaxR,KAAKyR,eAAe1E,EAAQ,GAEzC2E,EAAe1R,KAAK2R,sBAAsBH,GAChD,GAAIE,EAEA,OAAO1R,KAAK4R,mBAAmB7E,EAAQ2E,GAEtC,CAED,MAAMG,EAAQ9E,EAAO,GACf+E,EAAM/E,EAAOA,EAAOxO,OAAS,GAGnC,GAFiBiC,KAAKQ,KAAKR,KAAKS,IAAI6Q,EAAIhS,EAAI+R,EAAM/R,EAAG,GAAKU,KAAKS,IAAI6Q,EAAI/R,EAAI8R,EAAM9R,EAAG,IAErE,GAAI,CACf,MAAMgS,EAAc/R,KAAKgS,mBAAmBF,EAAKD,EAAO7R,KAAK+J,oBAC7D,MAAO,IAAIgD,KAAWgF,EAC1B,CACJ,CACA,OAAOhF,CACX,CACA,cAAA0E,CAAe1E,EAAQkF,GACnB,MAAMT,EAAa,GACnB,IAAK,IAAIlT,EAAI,EAAGA,EAAIyO,EAAOxO,OAAQD,GAAK2T,EACpCT,EAAW5S,KAAKmO,EAAOzO,IAM3B,OAHIkT,EAAWA,EAAWjT,OAAS,KAAOwO,EAAOA,EAAOxO,OAAS,IAC7DiT,EAAW5S,KAAKmO,EAAOA,EAAOxO,OAAS,IAEpCiT,CACX,CACA,qBAAAG,CAAsB5E,GAElB,IAAK,IAAIzO,EAAI,EAAGA,EAAIyO,EAAOxO,OAAS,EAAGD,IAAK,CACxC,MAAM4P,EAAKnB,EAAOzO,GACZ6P,EAAKpB,EAAOzO,EAAI,GAEtB,IAAK,IAAI4T,EAAI5T,EAAI,EAAG4T,EAAInF,EAAOxO,OAAS,EAAG2T,IAAK,CAC5C,MAAMC,EAAKpF,EAAOmF,GACZE,EAAKrF,EAAOmF,EAAI,GAEtB,GAAU,IAAN5T,GAAW4T,IAAMnF,EAAOxO,OAAS,EACjC,SACJ,MAAMmT,EAAe1R,KAAKqS,iBAAiBnE,EAAIC,EAAIgE,EAAIC,GACvD,GAAIV,EACA,MAAO,CAAEpT,IAAG4T,IAAGhS,MAAOwR,EAE9B,CACJ,CACA,OAAO,IACX,CACA,gBAAAW,CAAiBnE,EAAIC,EAAIgE,EAAIC,GACzB,MAAME,EAAKpE,EAAGpO,EAAGyS,EAAKrE,EAAGnO,EACnByS,EAAKrE,EAAGrO,EAAG2S,EAAKtE,EAAGpO,EACnB2S,EAAKP,EAAGrS,EAAG6S,EAAKR,EAAGpS,EACnB6S,EAAKR,EAAGtS,EAAG+S,EAAKT,EAAGrS,EACnB+S,GAASR,EAAKE,IAAOG,EAAKE,IAAON,EAAKE,IAAOC,EAAKE,GACxD,GAAIpS,KAAKuS,IAAID,GAAS,KAClB,OAAO,KACX,MAAMnT,IAAM2S,EAAKI,IAAOC,EAAKE,IAAON,EAAKI,IAAOD,EAAKE,IAAOE,EACtDE,KAAOV,EAAKE,IAAOD,EAAKI,IAAOJ,EAAKE,IAAOH,EAAKI,IAAOI,EAC7D,OAAInT,GAAK,GAAKA,GAAK,GAAKqT,GAAK,GAAKA,GAAK,EAC5B,CACHlT,EAAGwS,EAAK3S,GAAK6S,EAAKF,GAClBvS,EAAGwS,EAAK5S,GAAK8S,EAAKF,GAClB9E,SAAU,GAGX,IACX,CACA,kBAAAmE,CAAmB7E,EAAQ2E,GAEvB,MACMuB,EAAUzS,KAAK0S,IADR,EACYxB,EAAaQ,EAAUnF,EAAOxO,OAAS,GAGhE,MAAO,IAAIwO,EAAOoG,MAAM,EAAGF,EAAU,GAAIvB,EAAaxR,MAC1D,CACA,kBAAA8R,CAAmBH,EAAOC,EAAKsB,GAC3B,GAAIA,EAAY,EACZ,MAAO,CAACtB,GACZ,MAAMC,EAAc,GAGdsB,GAAQxB,EAAM/R,EAAIgS,EAAIhS,GAAK,EAC3BwT,GAAQzB,EAAM9R,EAAI+R,EAAI/R,GAAK,EAE3BwT,EAAKzB,EAAIhS,EAAI+R,EAAM/R,EACnB0T,EAAK1B,EAAI/R,EAAI8R,EAAM9R,EAEnB0T,GAASD,EACTE,EAAQH,EAGRlT,EAAWG,KAAKQ,KAAKuS,EAAKA,EAAKC,EAAKA,GACpCG,EAAoB,GAAXtT,EACTuT,EAAWP,EAAQI,EAAQpT,EAAYsT,EACvCE,EAAWP,EAAQI,EAAQrT,EAAYsT,EAE7C,IAAK,IAAIrV,EAAI,EAAGA,GAAK8U,EAAW9U,IAAK,CACjC,MAAMqB,EAAIrB,GAAK8U,EAAY,GAErBtT,EAAIU,KAAKS,IAAI,EAAItB,EAAG,GAAKkS,EAAM/R,EACjC,GAAK,EAAIH,GAAKA,EAAIiU,EAClBpT,KAAKS,IAAItB,EAAG,GAAKmS,EAAIhS,EACnBC,EAAIS,KAAKS,IAAI,EAAItB,EAAG,GAAKkS,EAAM9R,EACjC,GAAK,EAAIJ,GAAKA,EAAIkU,EAClBrT,KAAKS,IAAItB,EAAG,GAAKmS,EAAI/R,EACzBgS,EAAYnT,KAAK,CAAEkB,IAAGC,IAAG0N,SAAU,GACvC,CAGA,OADAsE,EAAYnT,KAAKkT,GACVC,CACX,CACA,kBAAAR,CAAmBxE,GACf,GAAIA,EAAOxO,OAAS,EAChB,OAAOwO,EAGX,MAAM+G,EAActT,KAAKuT,IAAI,EAAGvT,KAAKwT,MAAMjH,EAAOxO,OAAS,KAC3D,IAAI0V,EAAU,GACd,IAAK,IAAI3V,EAAI,EAAGA,EAAIyO,EAAOxO,OAAQD,GAAKwV,EAAa,CACjD,MAAMI,EAAUnH,EAAOoG,MAAM7U,EAAGkC,KAAK0S,IAAI5U,EAAIwV,EAAa/G,EAAOxO,SAEjE,IAAI4V,EAAO,EAAGC,EAAO,EACrB,IAAK,MAAM3V,KAAKyV,EACZC,GAAQ1V,EAAEqB,EACVsU,GAAQ3V,EAAEsB,EAEdkU,EAAQrV,KAAK,CACTkB,EAAGqU,EAAOD,EAAQ3V,OAClBwB,EAAGqU,EAAOF,EAAQ3V,OAClBkP,SAAU,GAElB,CAEA,IAAI4G,EAAWrU,KAAKsU,kBAAkBL,EAAS,IAE/C,MAAMpC,EAAQwC,EAAS,GACjBvC,EAAMuC,EAASA,EAAS9V,OAAS,GAEvC,IAAIgW,EACJ,GAFiB/T,KAAKQ,KAAKR,KAAKS,IAAI6Q,EAAIhS,EAAI+R,EAAM/R,EAAG,GAAKU,KAAKS,IAAI6Q,EAAI/R,EAAI8R,EAAM9R,EAAG,IAErE,GAEXwU,EAAS,IAAIF,EAAUxC,OAEtB,CAED,MAAME,EAAc/R,KAAKgS,mBAAmBF,EAAKD,EAAO7R,KAAKiK,cAC7DsK,EAAS,IAAIF,KAAatC,EAC9B,CAEA,IAAIyC,EAAWD,EAEf,IAAK,IAAIE,EAAO,EAAGA,EADA,EACmBA,IAAQ,CAC1C,MAAMC,EAAY,GACZ9F,EAAM4F,EAASjW,OAErB,IAAK,IAAID,EAAI,EAAGA,EAAIsQ,EAAKtQ,IAAK,CAC1B,MAAMqW,EAAKH,EAASlW,GACd4P,EAAKsG,GAAUlW,EAAI,GAAKsQ,GAE9B8F,EAAU9V,KAAK,CACXkB,EAAG,IAAO6U,EAAG7U,EAAI,IAAOoO,EAAGpO,EAC3BC,EAAG,IAAO4U,EAAG5U,EAAI,IAAOmO,EAAGnO,EAC3B0N,SAAU,IAEdiH,EAAU9V,KAAK,CACXkB,EAAG,IAAO6U,EAAG7U,EAAI,IAAOoO,EAAGpO,EAC3BC,EAAG,IAAO4U,EAAG5U,EAAI,IAAOmO,EAAGnO,EAC3B0N,SAAU,GAElB,CACA+G,EAAWE,CACf,CAKA,OAHIF,EAASjW,OAAS,GAClBiW,EAAS5V,KAAK,IAAK4V,EAAS,KAEzBA,CACX,CACA,iBAAAF,CAAkBvH,EAAQ6H,GACtB,GAAI7H,EAAOxO,OAAS,EAChB,OAAOwO,EACX,MAAMsH,EAAW,CAACtH,EAAO,IACnB8H,EAAeD,EAAkBpU,KAAKC,GAAM,IAClD,IAAK,IAAInC,EAAI,EAAGA,EAAIyO,EAAOxO,OAAS,EAAGD,IAAK,CACxC,MAAMwW,EAAO/H,EAAOzO,EAAI,GAClByW,EAAOhI,EAAOzO,GACd0W,EAAOjI,EAAOzO,EAAI,GAElB2W,EAAMF,EAAKjV,EAAIgV,EAAKhV,EACpBoV,EAAMH,EAAKhV,EAAI+U,EAAK/U,EACpBoV,EAAMH,EAAKlV,EAAIiV,EAAKjV,EACpBsV,EAAMJ,EAAKjV,EAAIgV,EAAKhV,EAEpBsV,EAAO7U,KAAKQ,KAAKiU,EAAMA,EAAMC,EAAMA,GACnCI,EAAO9U,KAAKQ,KAAKmU,EAAMA,EAAMC,EAAMA,GACzC,GAAa,IAATC,GAAuB,IAATC,EAEd,SAGJ,MACMC,GADMN,EAAME,EAAMD,EAAME,IACNC,EAAOC,GACjB9U,KAAKgV,KAAKhV,KAAKuT,OAAQvT,KAAK0S,IAAI,EAAGqC,MAEpCV,GACTR,EAASzV,KAAKmW,EAEtB,CAEA,OADAV,EAASzV,KAAKmO,EAAOA,EAAOxO,OAAS,IAC9B8V,CACX,CACA,aAAArL,CAAc9I,GACV,MAAO,CAAEuV,KAAMzV,KAAME,QACzB,CACA,WAAA+I,CAAYgE,GACR,MAAO,CAAEwI,KAAMzV,KAAMiN,SACzB,CACA,aAAA/D,GACI,MAAO,CAAEuM,KAAMzV,KACnB,CACA,YAAAmJ,GACI,MAAO,CAAEsM,KAAMzV,KACnB,CACA,YAAAoJ,GACI,MAAO,CAAEqM,KAAMzV,KACnB,GAEGiD,CACV,EAntBe","x_google_ignoreList":[0]}
|