snice 4.14.0 → 4.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/adapters/react/doc.d.ts +1 -0
- package/adapters/react/doc.d.ts.map +1 -1
- package/adapters/react/doc.js +1 -1
- package/adapters/react/doc.js.map +1 -1
- package/adapters/react/doc.tsx +2 -1
- package/adapters/react/input.d.ts +3 -0
- package/adapters/react/input.d.ts.map +1 -1
- package/adapters/react/input.js +1 -1
- package/adapters/react/input.js.map +1 -1
- package/adapters/react/input.tsx +4 -1
- package/adapters/react/modal.d.ts +2 -0
- package/adapters/react/modal.d.ts.map +1 -1
- package/adapters/react/modal.js +1 -1
- package/adapters/react/modal.js.map +1 -1
- package/adapters/react/modal.tsx +3 -1
- package/dist/cdn/accordion/snice-accordion.js +1 -1
- package/dist/cdn/accordion/snice-accordion.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/audio-recorder/snice-audio-recorder.js +1 -1
- package/dist/cdn/audio-recorder/snice-audio-recorder.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/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/book/README.md +2 -2
- package/dist/cdn/book/snice-book.js +29 -8
- package/dist/cdn/book/snice-book.js.map +1 -1
- package/dist/cdn/book/snice-book.min.js +3 -3
- package/dist/cdn/book/snice-book.min.js.map +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/chart/snice-chart.js +1 -1
- package/dist/cdn/chart/snice-chart.min.js +1 -1
- package/dist/cdn/chat/snice-chat.js +1 -1
- package/dist/cdn/chat/snice-chat.min.js +1 -1
- package/dist/cdn/checkbox/snice-checkbox.js +1 -1
- package/dist/cdn/checkbox/snice-checkbox.min.js +1 -1
- package/dist/cdn/chip/snice-chip.js +1 -1
- package/dist/cdn/chip/snice-chip.min.js +1 -1
- package/dist/cdn/code-block/snice-code-block.js +4 -4
- package/dist/cdn/code-block/snice-code-block.js.map +1 -1
- package/dist/cdn/code-block/snice-code-block.min.js +2 -2
- package/dist/cdn/code-block/snice-code-block.min.js.map +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/date-picker/README.md +1 -1
- package/dist/cdn/date-picker/snice-date-picker.js +49 -39
- package/dist/cdn/date-picker/snice-date-picker.js.map +1 -1
- package/dist/cdn/date-picker/snice-date-picker.min.js +4 -4
- package/dist/cdn/date-picker/snice-date-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/README.md +2 -2
- package/dist/cdn/doc/snice-doc.js +221 -35
- package/dist/cdn/doc/snice-doc.js.map +1 -1
- package/dist/cdn/doc/snice-doc.min.js +2 -2
- package/dist/cdn/doc/snice-doc.min.js.map +1 -1
- package/dist/cdn/draw/snice-draw.js +1 -1
- package/dist/cdn/draw/snice-draw.min.js +1 -1
- package/dist/cdn/drawer/snice-drawer.js +1 -1
- package/dist/cdn/drawer/snice-drawer.min.js +1 -1
- package/dist/cdn/empty-state/snice-empty-state.js +1 -1
- package/dist/cdn/empty-state/snice-empty-state.min.js +1 -1
- package/dist/cdn/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/funnel/snice-funnel.js +1 -1
- package/dist/cdn/funnel/snice-funnel.min.js +1 -1
- package/dist/cdn/gantt/snice-gantt.js +1 -1
- package/dist/cdn/gantt/snice-gantt.min.js +1 -1
- package/dist/cdn/gauge/snice-gauge.js +1 -1
- package/dist/cdn/gauge/snice-gauge.min.js +1 -1
- package/dist/cdn/heatmap/snice-heatmap.js +1 -1
- package/dist/cdn/heatmap/snice-heatmap.min.js +1 -1
- package/dist/cdn/image/snice-image.js +1 -1
- package/dist/cdn/image/snice-image.min.js +1 -1
- package/dist/cdn/input/README.md +2 -2
- package/dist/cdn/input/snice-input.js +21 -3
- package/dist/cdn/input/snice-input.js.map +1 -1
- package/dist/cdn/input/snice-input.min.js +3 -3
- package/dist/cdn/input/snice-input.min.js.map +1 -1
- package/dist/cdn/kanban/snice-kanban.js +1 -1
- package/dist/cdn/kanban/snice-kanban.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/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 +2 -2
- package/dist/cdn/link-preview/snice-link-preview.js.map +1 -1
- package/dist/cdn/link-preview/snice-link-preview.min.js +2 -2
- package/dist/cdn/link-preview/snice-link-preview.min.js.map +1 -1
- package/dist/cdn/list/snice-list.js +4 -4
- package/dist/cdn/list/snice-list.js.map +1 -1
- package/dist/cdn/list/snice-list.min.js +2 -2
- package/dist/cdn/list/snice-list.min.js.map +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 +2 -2
- package/dist/cdn/menu/snice-menu.js.map +1 -1
- package/dist/cdn/menu/snice-menu.min.js +2 -2
- package/dist/cdn/menu/snice-menu.min.js.map +1 -1
- package/dist/cdn/modal/README.md +2 -2
- package/dist/cdn/modal/snice-modal.js +34 -18
- package/dist/cdn/modal/snice-modal.js.map +1 -1
- package/dist/cdn/modal/snice-modal.min.js +24 -20
- package/dist/cdn/modal/snice-modal.min.js.map +1 -1
- package/dist/cdn/music-player/README.md +2 -2
- package/dist/cdn/music-player/snice-music-player.js +8 -1
- package/dist/cdn/music-player/snice-music-player.js.map +1 -1
- package/dist/cdn/music-player/snice-music-player.min.js +3 -3
- package/dist/cdn/music-player/snice-music-player.min.js.map +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/org-chart/snice-org-chart.js +1 -1
- package/dist/cdn/org-chart/snice-org-chart.min.js +1 -1
- package/dist/cdn/pagination/snice-pagination.js +1 -1
- package/dist/cdn/pagination/snice-pagination.min.js +1 -1
- package/dist/cdn/paint/snice-paint.js +1 -1
- package/dist/cdn/paint/snice-paint.min.js +1 -1
- package/dist/cdn/pdf-viewer/snice-pdf-viewer.js +1 -1
- package/dist/cdn/pdf-viewer/snice-pdf-viewer.min.js +1 -1
- package/dist/cdn/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/progress/snice-progress.js +1 -1
- package/dist/cdn/progress/snice-progress.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/README.md +2 -2
- package/dist/cdn/radio/snice-radio.js +23 -3
- package/dist/cdn/radio/snice-radio.js.map +1 -1
- package/dist/cdn/radio/snice-radio.min.js +3 -3
- package/dist/cdn/radio/snice-radio.min.js.map +1 -1
- package/dist/cdn/rating/snice-rating.js +1 -1
- package/dist/cdn/rating/snice-rating.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 +513 -46
- package/dist/cdn/runtime/snice-runtime.esm.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.esm.min.js +6 -6
- package/dist/cdn/runtime/snice-runtime.esm.min.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.js +6420 -5951
- package/dist/cdn/runtime/snice-runtime.js.map +1 -1
- package/dist/cdn/runtime/snice-runtime.min.js +18 -18
- 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/select/README.md +2 -2
- package/dist/cdn/select/snice-select.js +46 -92
- package/dist/cdn/select/snice-select.js.map +1 -1
- package/dist/cdn/select/snice-select.min.js +5 -13
- package/dist/cdn/select/snice-select.min.js.map +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-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/stepper/snice-stepper.js +1 -1
- package/dist/cdn/stepper/snice-stepper.min.js +1 -1
- package/dist/cdn/switch/README.md +1 -1
- package/dist/cdn/switch/snice-switch.js +33 -23
- package/dist/cdn/switch/snice-switch.js.map +1 -1
- package/dist/cdn/switch/snice-switch.min.js +3 -3
- package/dist/cdn/switch/snice-switch.min.js.map +1 -1
- package/dist/cdn/table/README.md +2 -2
- package/dist/cdn/table/snice-table.js +2876 -111
- package/dist/cdn/table/snice-table.js.map +1 -1
- package/dist/cdn/table/snice-table.min.js +187 -47
- package/dist/cdn/table/snice-table.min.js.map +1 -1
- package/dist/cdn/tabs/snice-tabs.js +1 -1
- package/dist/cdn/tabs/snice-tabs.min.js +1 -1
- package/dist/cdn/tag-input/snice-tag-input.js +1 -1
- package/dist/cdn/tag-input/snice-tag-input.min.js +1 -1
- package/dist/cdn/terminal/snice-terminal.js +1 -1
- package/dist/cdn/terminal/snice-terminal.min.js +1 -1
- package/dist/cdn/testimonial/snice-testimonial.js +1 -1
- package/dist/cdn/testimonial/snice-testimonial.min.js +1 -1
- package/dist/cdn/textarea/snice-textarea.js +1 -1
- package/dist/cdn/textarea/snice-textarea.min.js +1 -1
- package/dist/cdn/time-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 +3 -3
- package/dist/cdn/toast/snice-toast.js.map +1 -1
- package/dist/cdn/toast/snice-toast.min.js +2 -2
- 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/video-player/snice-video-player.js +1 -1
- package/dist/cdn/video-player/snice-video-player.min.js +1 -1
- package/dist/cdn/virtual-scroller/snice-virtual-scroller.js +1 -1
- package/dist/cdn/virtual-scroller/snice-virtual-scroller.min.js +1 -1
- package/dist/cdn/waterfall/snice-waterfall.js +1 -1
- package/dist/cdn/waterfall/snice-waterfall.min.js +1 -1
- package/dist/cdn/weather/snice-weather.js +1 -1
- package/dist/cdn/weather/snice-weather.min.js +1 -1
- package/dist/components/book/snice-book.d.ts +2 -0
- package/dist/components/book/snice-book.js +28 -7
- package/dist/components/book/snice-book.js.map +1 -1
- package/dist/components/book/snice-book.types.d.ts +7 -0
- package/dist/components/code-block/snice-code-block.js +3 -3
- package/dist/components/code-block/snice-code-block.js.map +1 -1
- package/dist/components/code-block/snice-code-block.types.d.ts +3 -3
- package/dist/components/date-picker/snice-date-picker.d.ts +2 -0
- package/dist/components/date-picker/snice-date-picker.js +49 -39
- package/dist/components/date-picker/snice-date-picker.js.map +1 -1
- package/dist/components/doc/snice-doc.d.ts +20 -0
- package/dist/components/doc/snice-doc.js +220 -34
- package/dist/components/doc/snice-doc.js.map +1 -1
- package/dist/components/input/snice-input.d.ts +3 -0
- package/dist/components/input/snice-input.js +20 -2
- package/dist/components/input/snice-input.js.map +1 -1
- package/dist/components/input/snice-input.types.d.ts +3 -0
- package/dist/components/link-preview/snice-link-preview.js +1 -1
- package/dist/components/link-preview/snice-link-preview.js.map +1 -1
- package/dist/components/list/snice-list.js +3 -3
- package/dist/components/list/snice-list.js.map +1 -1
- package/dist/components/menu/snice-menu.js +1 -1
- package/dist/components/menu/snice-menu.js.map +1 -1
- package/dist/components/modal/snice-modal.d.ts +2 -0
- package/dist/components/modal/snice-modal.js +33 -17
- package/dist/components/modal/snice-modal.js.map +1 -1
- package/dist/components/modal/snice-modal.types.d.ts +2 -0
- package/dist/components/music-player/snice-music-player.d.ts +1 -0
- package/dist/components/music-player/snice-music-player.js +7 -0
- package/dist/components/music-player/snice-music-player.js.map +1 -1
- package/dist/components/notification-center/snice-notification-center.d.ts +1 -1
- package/dist/components/notification-center/snice-notification-center.js.map +1 -1
- package/dist/components/notification-center/snice-notification-center.types.d.ts +1 -0
- package/dist/components/radio/snice-radio.d.ts +1 -0
- package/dist/components/radio/snice-radio.js +22 -2
- package/dist/components/radio/snice-radio.js.map +1 -1
- package/dist/components/select/snice-select.d.ts +2 -4
- package/dist/components/select/snice-select.js +46 -92
- package/dist/components/select/snice-select.js.map +1 -1
- package/dist/components/switch/snice-switch.d.ts +2 -0
- package/dist/components/switch/snice-switch.js +32 -22
- package/dist/components/switch/snice-switch.js.map +1 -1
- package/dist/components/table/snice-table.d.ts +2 -0
- package/dist/components/table/snice-table.js +17 -3
- package/dist/components/table/snice-table.js.map +1 -1
- package/dist/components/toast/snice-toast-container.js +2 -2
- package/dist/components/toast/snice-toast-container.js.map +1 -1
- package/dist/index.cjs +512 -43
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.esm.js +511 -44
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js +512 -43
- package/dist/index.iife.js.map +1 -1
- package/dist/symbols.cjs +1 -1
- package/dist/symbols.esm.js +1 -1
- package/dist/tooltip-observer.d.ts +11 -0
- package/dist/transitions.cjs +1 -1
- package/dist/transitions.esm.js +1 -1
- package/docs/ai/DEVELOPMENT.md +1 -1
- package/docs/ai/api.md +14 -10
- package/docs/ai/architecture.md +18 -5
- package/docs/ai/components/app-tiles.md +1 -1
- package/docs/ai/components/book.md +5 -6
- package/docs/ai/components/camera-annotate.md +3 -3
- package/docs/ai/components/candlestick.md +3 -3
- package/docs/ai/components/chart.md +1 -1
- package/docs/ai/components/code-block.md +3 -3
- package/docs/ai/components/doc.md +26 -15
- package/docs/ai/components/file-gallery.md +1 -1
- package/docs/ai/components/input.md +10 -0
- package/docs/ai/components/link-preview.md +1 -1
- package/docs/ai/components/list.md +2 -2
- package/docs/ai/components/markdown.md +13 -6
- package/docs/ai/components/modal.md +2 -0
- package/docs/ai/components/music-player.md +3 -2
- package/docs/ai/components/network-graph.md +5 -5
- package/docs/ai/components/notification-center.md +1 -0
- package/docs/ai/components/pdf-viewer.md +1 -1
- package/docs/ai/components/radio.md +2 -2
- package/docs/ai/components/sankey.md +3 -3
- package/docs/ai/components/select.md +1 -1
- package/docs/ai/components/tooltip.md +54 -0
- package/docs/ai/decorators.md +4 -4
- package/docs/code-block.md +4 -4
- package/docs/components/app-tiles.md +1 -1
- package/docs/components/book.md +3 -4
- package/docs/components/button.md +2 -2
- package/docs/components/camera-annotate.md +6 -6
- package/docs/components/candlestick.md +6 -6
- package/docs/components/chart.md +4 -6
- package/docs/components/checkbox.md +3 -3
- package/docs/components/chip.md +4 -4
- package/docs/components/code-block.md +4 -3
- package/docs/components/doc.md +99 -58
- package/docs/components/file-gallery.md +25 -3
- package/docs/components/input.md +20 -0
- package/docs/components/kpi.md +2 -3
- package/docs/components/link-preview.md +2 -2
- package/docs/components/list.md +3 -3
- package/docs/components/markdown.md +14 -36
- package/docs/components/modal.md +2 -0
- package/docs/components/music-player.md +3 -2
- package/docs/components/network-graph.md +7 -7
- package/docs/components/notification-center.md +1 -0
- package/docs/components/pdf-viewer.md +1 -1
- package/docs/components/sankey.md +6 -6
- package/docs/components/switch.md +1 -1
- package/docs/components/table.md +2 -2
- package/docs/components/tooltip.md +133 -0
- package/docs/controllers.md +3 -14
- package/docs/elements.md +0 -1
- package/docs/events.md +3 -0
- package/docs/request-response.md +2 -0
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* snice v4.
|
|
2
|
+
* snice v4.15.0
|
|
3
3
|
* Imperative TypeScript framework for building vanilla web components with decorators, differential rendering, routing, and controllers. No virtual DOM, no build complexity.
|
|
4
4
|
* (c) 2024
|
|
5
5
|
* Released under the MIT License.
|
|
@@ -64,8 +64,28 @@ var SniceDoc = (function (exports, snice) {
|
|
|
64
64
|
return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
|
|
65
65
|
};
|
|
66
66
|
|
|
67
|
-
var cssContent = ":host{display:block;font-family
|
|
67
|
+
var cssContent = ":host{display:block;font-family:var(--snice-doc-font-family, var(--snice-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif));font-size:var(--snice-doc-font-size, var(--snice-font-size-md, 16px));line-height:var(--snice-line-height-loose, 1.6);color:var(--snice-doc-text-color,var(--snice-color-text,#333));background:var(--snice-doc-background,var(--snice-color-background,#fff));height:100%;min-height:600px}.doc-wrapper{display:flex;flex-direction:column;height:100%}.toolbar{display:flex;gap:var(--snice-spacing-2xs,4px);padding:var(--snice-spacing-xs,8px) var(--snice-spacing-sm,12px);background:var(--snice-doc-toolbar-background,var(--snice-color-background-secondary,#f6f8fa));border-bottom:1px solid var(--snice-doc-border,var(--snice-color-border,#e1e4e8));flex-wrap:wrap;position:relative}.toolbar-btn{display:inline-flex;align-items:center;justify-content:center;padding:6px 12px;border:1px solid var(--snice-doc-border,var(--snice-color-border,#e1e4e8));background:var(--snice-doc-background,var(--snice-color-background,#fff));border-radius:var(--snice-border-radius-md,4px);cursor:pointer;font-weight:var(--snice-font-weight-semibold,600);font-size:var(--snice-font-size-sm, 14px);color:var(--snice-doc-text-color,var(--snice-color-text,#333));transition:all var(--snice-transition-fast, 150ms);min-width:32px;min-height:32px}.toolbar-btn:hover{background:var(--snice-doc-hover-background,var(--snice-color-background-hover,#e8eaed));border-color:var(--snice-doc-primary-color,var(--snice-color-primary,#0969da))}.toolbar-btn:active{transform:translateY(1px)}.toolbar-divider{width:1px;background:var(--snice-doc-border,var(--snice-color-border,#e1e4e8));margin:0 var(--snice-spacing-2xs,4px)}.doc-main{display:flex;flex:1;overflow:hidden}.doc-sidebar{width:200px;background:var(--snice-doc-sidebar-background,var(--snice-color-background-secondary,#f6f8fa));border-right:1px solid var(--snice-doc-border,var(--snice-color-border,#e1e4e8));padding:var(--snice-spacing-md,16px) 0;flex-shrink:0;transition:width .3s;position:relative}.doc-sidebar.collapsed{width:50px}.sidebar-toggle{position:absolute;top:10px;right:10px;background:var(--snice-doc-background,var(--snice-color-background,#fff));border:1px solid var(--snice-doc-border,var(--snice-color-border,#e1e4e8));border-radius:var(--snice-border-radius-md,4px);width:28px;height:28px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:var(--snice-font-size-sm, 14px);color:var(--snice-doc-text-color,var(--snice-color-text,#333));transition:background var(--snice-transition-fast, 150ms)}.sidebar-toggle:hover{background:var(--snice-doc-hover-background,var(--snice-color-background-hover,#e1e4e8))}.sidebar-header{font-weight:var(--snice-font-weight-semibold,600);font-size:var(--snice-font-size-xs, 12px);color:var(--snice-doc-muted-color,var(--snice-color-text-secondary,#666));text-transform:uppercase;padding:0 var(--snice-spacing-md,16px) var(--snice-spacing-xs,8px);margin-bottom:var(--snice-spacing-xs,8px);border-bottom:1px solid var(--snice-doc-border,var(--snice-color-border,#e1e4e8))}.sidebar-item{display:flex;align-items:center;gap:var(--snice-spacing-sm,12px);padding:10px var(--snice-spacing-md,16px);border:none;background:0 0;cursor:pointer;width:100%;text-align:left;font-size:var(--snice-font-size-sm, 14px);color:var(--snice-doc-text-color,var(--snice-color-text,#333));transition:background var(--snice-transition-fast, 150ms)}.sidebar-item:hover{background:var(--snice-doc-hover-background,var(--snice-color-background-hover,#f0f0f0))}.sidebar-icon{font-size:18px;width:24px;text-align:center}.doc-editor{flex:1;padding:60px 100px;overflow-y:auto;outline:0;max-width:850px;margin:0 auto;width:100%}.doc-editor:empty:before{content:attr(data-placeholder);color:var(--snice-doc-placeholder-color,var(--snice-color-text-tertiary,#999));pointer-events:none}.doc-editor p{margin:0 0 var(--snice-spacing-sm,12px);min-height:1.6em}.doc-editor h1{font-size:2em;font-weight:var(--snice-font-weight-bold,700);line-height:var(--snice-line-height-dense, 1.2);margin:var(--snice-spacing-lg,24px) 0 var(--snice-spacing-md,16px)}.doc-editor h2{font-size:1.5em;font-weight:var(--snice-font-weight-bold,700);line-height:1.3;margin:20px 0 var(--snice-spacing-sm,12px)}.doc-editor h3{font-size:1.25em;font-weight:var(--snice-font-weight-bold,700);line-height:1.4;margin:var(--snice-spacing-md,16px) 0 var(--snice-spacing-xs,8px)}.doc-editor ol,.doc-editor ul{margin:0 0 var(--snice-spacing-sm,12px);padding-left:30px}.doc-editor li{margin:var(--snice-spacing-2xs,4px) 0}.doc-editor code{font-family:var(--snice-font-family-mono, 'Monaco', 'Menlo', 'Consolas', monospace);font-size:.9em;background:var(--snice-doc-inline-code-background,var(--snice-color-background-tertiary,rgba(175,184,193,.2)));padding:2px 6px;border-radius:var(--snice-border-radius-sm,3px)}.doc-editor a{color:var(--snice-doc-link-color,var(--snice-color-primary,#0969da));text-decoration:underline}.doc-editor img{max-width:100%;height:auto;display:block;margin:var(--snice-spacing-md,16px) 0;border-radius:var(--snice-border-radius-md,4px)}.doc-editor table{border-collapse:collapse;width:100%;margin:var(--snice-spacing-md,16px) 0}.doc-editor table td,.doc-editor table th{border:1px solid var(--snice-doc-border,var(--snice-color-border,#e1e4e8));padding:var(--snice-spacing-xs,8px) var(--snice-spacing-sm,12px)}.doc-editor table th{background:var(--snice-doc-sidebar-background,var(--snice-color-background-secondary,#f6f8fa));font-weight:var(--snice-font-weight-semibold,600)}.doc-editor hr{margin:20px 0;border:none;border-top:1px solid var(--snice-doc-border,var(--snice-color-border,#e1e4e8))}.download-menu{position:absolute;right:var(--snice-spacing-sm,12px);top:100%;background:var(--snice-doc-background,var(--snice-color-background,#fff));border:1px solid var(--snice-doc-border,var(--snice-color-border,#e1e4e8));border-radius:var(--snice-border-radius-lg,6px);box-shadow:var(--snice-shadow-md,0 4px 12px rgba(0,0,0,.15));z-index:var(--snice-z-index-dropdown,100);min-width:160px;padding:var(--snice-spacing-2xs,4px)}.download-menu-item{display:block;width:100%;padding:var(--snice-spacing-xs,8px) var(--snice-spacing-sm,12px);border:none;background:0 0;text-align:left;font-size:var(--snice-font-size-sm, 14px);color:var(--snice-doc-text-color,var(--snice-color-text,#333));cursor:pointer;border-radius:var(--snice-border-radius-md,4px)}.download-menu-item:hover{background:var(--snice-doc-hover-background,var(--snice-color-background-hover,#e8eaed))}.toolbar-btn .icon--material{font-family:'Material Symbols Outlined',sans-serif;font-size:20px;font-weight:400;font-style:normal;line-height:1;letter-spacing:normal;text-transform:none;white-space:nowrap;word-wrap:normal;direction:ltr;-webkit-font-smoothing:antialiased}.toolbar-btn .icon--fa{font-size:var(--snice-font-size-sm, 14px)}:host([readonly]) .doc-sidebar,:host([readonly]) .toolbar{display:none}:host([readonly]) .doc-editor{cursor:default}";
|
|
68
68
|
|
|
69
|
+
const ICON_MAP = {
|
|
70
|
+
default: {
|
|
71
|
+
bold: 'B', italic: 'I', underline: 'U', strikethrough: 'S',
|
|
72
|
+
h1: 'H1', h2: 'H2', h3: 'H3', paragraph: 'P',
|
|
73
|
+
'bullet-list': '•', 'numbered-list': '1.',
|
|
74
|
+
link: '🔗', image: '🖼', table: '📊', divider: '―', download: '⬇'
|
|
75
|
+
},
|
|
76
|
+
material: {
|
|
77
|
+
bold: 'format_bold', italic: 'format_italic', underline: 'format_underlined', strikethrough: 'strikethrough_s',
|
|
78
|
+
h1: 'looks_one', h2: 'looks_two', h3: 'looks_3', paragraph: 'notes',
|
|
79
|
+
'bullet-list': 'format_list_bulleted', 'numbered-list': 'format_list_numbered',
|
|
80
|
+
link: 'link', image: 'image', table: 'table_chart', divider: 'horizontal_rule', download: 'download'
|
|
81
|
+
},
|
|
82
|
+
fontawesome: {
|
|
83
|
+
bold: 'fa-bold', italic: 'fa-italic', underline: 'fa-underline', strikethrough: 'fa-strikethrough',
|
|
84
|
+
h1: 'fa-heading', h2: 'fa-heading', h3: 'fa-heading', paragraph: 'fa-paragraph',
|
|
85
|
+
'bullet-list': 'fa-list-ul', 'numbered-list': 'fa-list-ol',
|
|
86
|
+
link: 'fa-link', image: 'fa-image', table: 'fa-table', divider: 'fa-minus', download: 'fa-download'
|
|
87
|
+
}
|
|
88
|
+
};
|
|
69
89
|
/**
|
|
70
90
|
* snice-doc - Simple document editor
|
|
71
91
|
*/
|
|
@@ -82,6 +102,9 @@ var SniceDoc = (function (exports, snice) {
|
|
|
82
102
|
let _readonly_decorators;
|
|
83
103
|
let _readonly_initializers = [];
|
|
84
104
|
let _readonly_extraInitializers = [];
|
|
105
|
+
let _icons_decorators;
|
|
106
|
+
let _icons_initializers = [];
|
|
107
|
+
let _icons_extraInitializers = [];
|
|
85
108
|
let _styles_decorators;
|
|
86
109
|
let _init_decorators;
|
|
87
110
|
let _cleanup_decorators;
|
|
@@ -91,7 +114,8 @@ var SniceDoc = (function (exports, snice) {
|
|
|
91
114
|
super(...arguments);
|
|
92
115
|
this.placeholder = (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _placeholder_initializers, 'Start typing...'));
|
|
93
116
|
this.readonly = (__runInitializers(this, _placeholder_extraInitializers), __runInitializers(this, _readonly_initializers, false));
|
|
94
|
-
this.
|
|
117
|
+
this.icons = (__runInitializers(this, _readonly_extraInitializers), __runInitializers(this, _icons_initializers, 'default'));
|
|
118
|
+
this.editor = __runInitializers(this, _icons_extraInitializers);
|
|
95
119
|
this.showFormatToolbar = false;
|
|
96
120
|
this.formatToolbarPosition = null;
|
|
97
121
|
this.savedSelection = null;
|
|
@@ -135,12 +159,10 @@ var SniceDoc = (function (exports, snice) {
|
|
|
135
159
|
const selection = window.getSelection();
|
|
136
160
|
if (selection && selection.rangeCount > 0) {
|
|
137
161
|
const range = selection.getRangeAt(0);
|
|
138
|
-
// Just save it - we'll validate when restoring
|
|
139
162
|
this.savedSelection = range.cloneRange();
|
|
140
163
|
}
|
|
141
164
|
};
|
|
142
165
|
this.saveSelectionBeforeAction = (e) => {
|
|
143
|
-
// Save selection before clicking toolbar/sidebar buttons
|
|
144
166
|
this.saveCurrentSelection();
|
|
145
167
|
};
|
|
146
168
|
this.handleSelectionChange = () => {
|
|
@@ -148,18 +170,17 @@ var SniceDoc = (function (exports, snice) {
|
|
|
148
170
|
if (!selection || selection.isCollapsed || selection.rangeCount === 0) {
|
|
149
171
|
return;
|
|
150
172
|
}
|
|
151
|
-
// Check if selection is within our editor
|
|
152
173
|
const range = selection.getRangeAt(0);
|
|
153
174
|
if (!this.editor.contains(range.commonAncestorContainer)) {
|
|
154
175
|
return;
|
|
155
176
|
}
|
|
156
|
-
// Could add floating toolbar here if desired
|
|
157
177
|
};
|
|
158
178
|
}
|
|
159
179
|
static {
|
|
160
180
|
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
161
181
|
_placeholder_decorators = [snice.property({ type: String })];
|
|
162
182
|
_readonly_decorators = [snice.property({ type: Boolean })];
|
|
183
|
+
_icons_decorators = [snice.property({ type: String })];
|
|
163
184
|
_styles_decorators = [snice.styles()];
|
|
164
185
|
_init_decorators = [snice.ready()];
|
|
165
186
|
_cleanup_decorators = [snice.dispose()];
|
|
@@ -168,6 +189,7 @@ var SniceDoc = (function (exports, snice) {
|
|
|
168
189
|
__esDecorate(this, null, _cleanup_decorators, { kind: "method", name: "cleanup", static: false, private: false, access: { has: obj => "cleanup" in obj, get: obj => obj.cleanup }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
169
190
|
__esDecorate(null, null, _placeholder_decorators, { kind: "field", name: "placeholder", static: false, private: false, access: { has: obj => "placeholder" in obj, get: obj => obj.placeholder, set: (obj, value) => { obj.placeholder = value; } }, metadata: _metadata }, _placeholder_initializers, _placeholder_extraInitializers);
|
|
170
191
|
__esDecorate(null, null, _readonly_decorators, { kind: "field", name: "readonly", static: false, private: false, access: { has: obj => "readonly" in obj, get: obj => obj.readonly, set: (obj, value) => { obj.readonly = value; } }, metadata: _metadata }, _readonly_initializers, _readonly_extraInitializers);
|
|
192
|
+
__esDecorate(null, null, _icons_decorators, { kind: "field", name: "icons", static: false, private: false, access: { has: obj => "icons" in obj, get: obj => obj.icons, set: (obj, value) => { obj.icons = value; } }, metadata: _metadata }, _icons_initializers, _icons_extraInitializers);
|
|
171
193
|
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
172
194
|
_classThis = _classDescriptor.value;
|
|
173
195
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
@@ -179,7 +201,6 @@ var SniceDoc = (function (exports, snice) {
|
|
|
179
201
|
init() {
|
|
180
202
|
this.initializeDOM();
|
|
181
203
|
document.addEventListener('selectionchange', this.handleSelectionChange);
|
|
182
|
-
// Save selection whenever editor loses focus
|
|
183
204
|
this.editor.addEventListener('blur', this.saveCurrentSelection);
|
|
184
205
|
}
|
|
185
206
|
cleanup() {
|
|
@@ -191,17 +212,14 @@ var SniceDoc = (function (exports, snice) {
|
|
|
191
212
|
return;
|
|
192
213
|
const wrapper = document.createElement('div');
|
|
193
214
|
wrapper.className = 'doc-wrapper';
|
|
194
|
-
// Create toolbar
|
|
195
215
|
const toolbar = this.createToolbar();
|
|
196
216
|
wrapper.appendChild(toolbar);
|
|
197
|
-
// Create editor
|
|
198
217
|
this.editor = document.createElement('div');
|
|
199
218
|
this.editor.className = 'doc-editor';
|
|
200
219
|
this.editor.contentEditable = String(!this.readonly);
|
|
201
220
|
this.editor.setAttribute('data-placeholder', this.placeholder);
|
|
202
|
-
// Add default paragraph
|
|
203
221
|
const p = document.createElement('p');
|
|
204
|
-
p.innerHTML = '<br>';
|
|
222
|
+
p.innerHTML = '<br>';
|
|
205
223
|
this.editor.appendChild(p);
|
|
206
224
|
this.editor.addEventListener('paste', this.handlePaste);
|
|
207
225
|
this.editor.addEventListener('keyup', this.saveCurrentSelection);
|
|
@@ -210,27 +228,53 @@ var SniceDoc = (function (exports, snice) {
|
|
|
210
228
|
wrapper.appendChild(this.editor);
|
|
211
229
|
this.shadowRoot.appendChild(wrapper);
|
|
212
230
|
}
|
|
231
|
+
createToolbarButton(icon, title) {
|
|
232
|
+
const btn = document.createElement('button');
|
|
233
|
+
btn.className = 'toolbar-btn';
|
|
234
|
+
btn.title = title;
|
|
235
|
+
const map = ICON_MAP[this.icons];
|
|
236
|
+
const iconValue = map[icon] || icon;
|
|
237
|
+
if (this.icons === 'material') {
|
|
238
|
+
const span = document.createElement('span');
|
|
239
|
+
span.className = 'icon--material';
|
|
240
|
+
span.setAttribute('part', 'icon');
|
|
241
|
+
span.textContent = iconValue;
|
|
242
|
+
btn.appendChild(span);
|
|
243
|
+
}
|
|
244
|
+
else if (this.icons === 'fontawesome') {
|
|
245
|
+
const i = document.createElement('i');
|
|
246
|
+
i.className = `icon--fa fa-solid ${iconValue}`;
|
|
247
|
+
i.setAttribute('part', 'icon');
|
|
248
|
+
btn.appendChild(i);
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
btn.textContent = iconValue;
|
|
252
|
+
}
|
|
253
|
+
return btn;
|
|
254
|
+
}
|
|
213
255
|
createToolbar() {
|
|
214
256
|
const toolbar = document.createElement('div');
|
|
215
257
|
toolbar.className = 'toolbar';
|
|
216
258
|
const tools = [
|
|
217
|
-
{ cmd: 'bold',
|
|
218
|
-
{ cmd: 'italic',
|
|
219
|
-
{ cmd: 'underline',
|
|
220
|
-
{ cmd: 'strikeThrough',
|
|
259
|
+
{ cmd: 'bold', icon: 'bold', title: 'Bold (Ctrl+B)' },
|
|
260
|
+
{ cmd: 'italic', icon: 'italic', title: 'Italic (Ctrl+I)' },
|
|
261
|
+
{ cmd: 'underline', icon: 'underline', title: 'Underline (Ctrl+U)' },
|
|
262
|
+
{ cmd: 'strikeThrough', icon: 'strikethrough', title: 'Strikethrough' },
|
|
263
|
+
{ cmd: 'divider' },
|
|
264
|
+
{ cmd: 'formatBlock', value: 'h1', icon: 'h1', title: 'Heading 1' },
|
|
265
|
+
{ cmd: 'formatBlock', value: 'h2', icon: 'h2', title: 'Heading 2' },
|
|
266
|
+
{ cmd: 'formatBlock', value: 'h3', icon: 'h3', title: 'Heading 3' },
|
|
267
|
+
{ cmd: 'formatBlock', value: 'p', icon: 'paragraph', title: 'Paragraph' },
|
|
221
268
|
{ cmd: 'divider' },
|
|
222
|
-
{ cmd: '
|
|
223
|
-
{ cmd: '
|
|
224
|
-
{ cmd: 'formatBlock', value: 'h3', label: 'H3', title: 'Heading 3' },
|
|
225
|
-
{ cmd: 'formatBlock', value: 'p', label: 'P', title: 'Paragraph' },
|
|
269
|
+
{ cmd: 'insertUnorderedList', icon: 'bullet-list', title: 'Bullet List' },
|
|
270
|
+
{ cmd: 'insertOrderedList', icon: 'numbered-list', title: 'Numbered List' },
|
|
226
271
|
{ cmd: 'divider' },
|
|
227
|
-
{ cmd: '
|
|
228
|
-
{ cmd: '
|
|
272
|
+
{ cmd: 'createLink', icon: 'link', title: 'Insert Link' },
|
|
273
|
+
{ cmd: 'insertImage', icon: 'image', title: 'Insert Image' },
|
|
274
|
+
{ cmd: 'insertTable', icon: 'table', title: 'Insert Table' },
|
|
275
|
+
{ cmd: 'insertDivider', icon: 'divider', title: 'Insert Divider' },
|
|
229
276
|
{ cmd: 'divider' },
|
|
230
|
-
{ cmd: '
|
|
231
|
-
{ cmd: 'insertImage', label: '🖼', title: 'Insert Image' },
|
|
232
|
-
{ cmd: 'insertTable', label: '📊', title: 'Insert Table' },
|
|
233
|
-
{ cmd: 'insertDivider', label: '―', title: 'Insert Divider' },
|
|
277
|
+
{ cmd: 'download', icon: 'download', title: 'Download' },
|
|
234
278
|
];
|
|
235
279
|
tools.forEach(tool => {
|
|
236
280
|
if (tool.cmd === 'divider') {
|
|
@@ -239,10 +283,7 @@ var SniceDoc = (function (exports, snice) {
|
|
|
239
283
|
toolbar.appendChild(divider);
|
|
240
284
|
}
|
|
241
285
|
else {
|
|
242
|
-
const btn =
|
|
243
|
-
btn.className = 'toolbar-btn';
|
|
244
|
-
btn.textContent = tool.label || '';
|
|
245
|
-
btn.title = tool.title || '';
|
|
286
|
+
const btn = this.createToolbarButton(tool.icon, tool.title);
|
|
246
287
|
btn.addEventListener('click', () => this.execCommand(tool.cmd, tool.value));
|
|
247
288
|
toolbar.appendChild(btn);
|
|
248
289
|
}
|
|
@@ -251,6 +292,10 @@ var SniceDoc = (function (exports, snice) {
|
|
|
251
292
|
return toolbar;
|
|
252
293
|
}
|
|
253
294
|
execCommand(cmd, value) {
|
|
295
|
+
if (cmd === 'download') {
|
|
296
|
+
this.showDownloadMenu();
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
254
299
|
this.editor.focus();
|
|
255
300
|
switch (cmd) {
|
|
256
301
|
case 'createLink':
|
|
@@ -270,6 +315,41 @@ var SniceDoc = (function (exports, snice) {
|
|
|
270
315
|
break;
|
|
271
316
|
}
|
|
272
317
|
}
|
|
318
|
+
showDownloadMenu() {
|
|
319
|
+
const existing = this.shadowRoot?.querySelector('.download-menu');
|
|
320
|
+
if (existing) {
|
|
321
|
+
existing.remove();
|
|
322
|
+
return;
|
|
323
|
+
}
|
|
324
|
+
const menu = document.createElement('div');
|
|
325
|
+
menu.className = 'download-menu';
|
|
326
|
+
const formats = [
|
|
327
|
+
{ format: 'html', label: 'HTML (.html)' },
|
|
328
|
+
{ format: 'markdown', label: 'Markdown (.md)' },
|
|
329
|
+
{ format: 'text', label: 'Plain Text (.txt)' },
|
|
330
|
+
];
|
|
331
|
+
formats.forEach(f => {
|
|
332
|
+
const item = document.createElement('button');
|
|
333
|
+
item.className = 'download-menu-item';
|
|
334
|
+
item.textContent = f.label;
|
|
335
|
+
item.addEventListener('click', () => {
|
|
336
|
+
this.downloadAs(f.format);
|
|
337
|
+
menu.remove();
|
|
338
|
+
});
|
|
339
|
+
menu.appendChild(item);
|
|
340
|
+
});
|
|
341
|
+
const toolbar = this.shadowRoot?.querySelector('.toolbar');
|
|
342
|
+
if (toolbar) {
|
|
343
|
+
toolbar.appendChild(menu);
|
|
344
|
+
}
|
|
345
|
+
const closeHandler = (e) => {
|
|
346
|
+
if (!menu.contains(e.target)) {
|
|
347
|
+
menu.remove();
|
|
348
|
+
document.removeEventListener('click', closeHandler);
|
|
349
|
+
}
|
|
350
|
+
};
|
|
351
|
+
setTimeout(() => document.addEventListener('click', closeHandler), 0);
|
|
352
|
+
}
|
|
273
353
|
showLinkDialog() {
|
|
274
354
|
const dialog = document.createElement('snice-modal');
|
|
275
355
|
dialog.setAttribute('title', 'Insert Link');
|
|
@@ -306,7 +386,6 @@ var SniceDoc = (function (exports, snice) {
|
|
|
306
386
|
content.appendChild(actions);
|
|
307
387
|
dialog.appendChild(content);
|
|
308
388
|
document.body.appendChild(dialog);
|
|
309
|
-
// Wait for components to be ready, then show modal
|
|
310
389
|
customElements.whenDefined('snice-modal').then(() => {
|
|
311
390
|
requestAnimationFrame(() => {
|
|
312
391
|
dialog.show();
|
|
@@ -352,7 +431,6 @@ var SniceDoc = (function (exports, snice) {
|
|
|
352
431
|
content.appendChild(actions);
|
|
353
432
|
dialog.appendChild(content);
|
|
354
433
|
document.body.appendChild(dialog);
|
|
355
|
-
// Wait for components to be ready, then show modal
|
|
356
434
|
customElements.whenDefined('snice-modal').then(() => {
|
|
357
435
|
requestAnimationFrame(() => {
|
|
358
436
|
dialog.show();
|
|
@@ -432,9 +510,7 @@ var SniceDoc = (function (exports, snice) {
|
|
|
432
510
|
content.appendChild(actions);
|
|
433
511
|
dialog.appendChild(content);
|
|
434
512
|
document.body.appendChild(dialog);
|
|
435
|
-
// Wait for components to be ready, then show modal
|
|
436
513
|
customElements.whenDefined('snice-modal').then(() => {
|
|
437
|
-
// Use connectedCallback to ensure the component is fully initialized
|
|
438
514
|
requestAnimationFrame(() => {
|
|
439
515
|
requestAnimationFrame(() => {
|
|
440
516
|
dialog.open = true;
|
|
@@ -489,7 +565,6 @@ var SniceDoc = (function (exports, snice) {
|
|
|
489
565
|
const selection = window.getSelection();
|
|
490
566
|
if (selection && selection.rangeCount > 0) {
|
|
491
567
|
const range = selection.getRangeAt(0);
|
|
492
|
-
// Check if the range is within the editor
|
|
493
568
|
if (!this.editor.contains(range.commonAncestorContainer)) {
|
|
494
569
|
this.editor.appendChild(hr);
|
|
495
570
|
}
|
|
@@ -526,12 +601,123 @@ var SniceDoc = (function (exports, snice) {
|
|
|
526
601
|
setHTML(html) {
|
|
527
602
|
this.editor.innerHTML = html;
|
|
528
603
|
}
|
|
604
|
+
/**
|
|
605
|
+
* Get document as plain text
|
|
606
|
+
*/
|
|
607
|
+
getText() {
|
|
608
|
+
return this.editor.innerText || '';
|
|
609
|
+
}
|
|
610
|
+
/**
|
|
611
|
+
* Get document as markdown
|
|
612
|
+
*/
|
|
613
|
+
getMarkdown() {
|
|
614
|
+
return this.nodeToMarkdown(this.editor).trim() + '\n';
|
|
615
|
+
}
|
|
616
|
+
/**
|
|
617
|
+
* Download document in specified format
|
|
618
|
+
*/
|
|
619
|
+
downloadAs(format, filename) {
|
|
620
|
+
let content;
|
|
621
|
+
let mimeType;
|
|
622
|
+
let ext;
|
|
623
|
+
switch (format) {
|
|
624
|
+
case 'html':
|
|
625
|
+
content = this.getHTML();
|
|
626
|
+
mimeType = 'text/html';
|
|
627
|
+
ext = 'html';
|
|
628
|
+
break;
|
|
629
|
+
case 'markdown':
|
|
630
|
+
content = this.getMarkdown();
|
|
631
|
+
mimeType = 'text/markdown';
|
|
632
|
+
ext = 'md';
|
|
633
|
+
break;
|
|
634
|
+
case 'text':
|
|
635
|
+
content = this.getText();
|
|
636
|
+
mimeType = 'text/plain';
|
|
637
|
+
ext = 'txt';
|
|
638
|
+
break;
|
|
639
|
+
}
|
|
640
|
+
const name = filename || `document.${ext}`;
|
|
641
|
+
const blob = new Blob([content], { type: mimeType });
|
|
642
|
+
const url = URL.createObjectURL(blob);
|
|
643
|
+
const a = document.createElement('a');
|
|
644
|
+
a.href = url;
|
|
645
|
+
a.download = name;
|
|
646
|
+
a.click();
|
|
647
|
+
URL.revokeObjectURL(url);
|
|
648
|
+
}
|
|
529
649
|
/**
|
|
530
650
|
* Clear document
|
|
531
651
|
*/
|
|
532
652
|
clear() {
|
|
533
653
|
this.editor.innerHTML = '<p><br></p>';
|
|
534
654
|
}
|
|
655
|
+
nodeToMarkdown(node) {
|
|
656
|
+
if (node.nodeType === Node.TEXT_NODE) {
|
|
657
|
+
return node.textContent || '';
|
|
658
|
+
}
|
|
659
|
+
if (node.nodeType !== Node.ELEMENT_NODE)
|
|
660
|
+
return '';
|
|
661
|
+
const el = node;
|
|
662
|
+
const tag = el.tagName.toLowerCase();
|
|
663
|
+
const children = Array.from(el.childNodes).map(n => this.nodeToMarkdown(n)).join('');
|
|
664
|
+
switch (tag) {
|
|
665
|
+
case 'h1': return `# ${children.trim()}\n\n`;
|
|
666
|
+
case 'h2': return `## ${children.trim()}\n\n`;
|
|
667
|
+
case 'h3': return `### ${children.trim()}\n\n`;
|
|
668
|
+
case 'h4': return `#### ${children.trim()}\n\n`;
|
|
669
|
+
case 'h5': return `##### ${children.trim()}\n\n`;
|
|
670
|
+
case 'h6': return `###### ${children.trim()}\n\n`;
|
|
671
|
+
case 'p': return `${children.trim()}\n\n`;
|
|
672
|
+
case 'br': return '\n';
|
|
673
|
+
case 'b':
|
|
674
|
+
case 'strong': return `**${children}**`;
|
|
675
|
+
case 'i':
|
|
676
|
+
case 'em': return `*${children}*`;
|
|
677
|
+
case 'u': return `<u>${children}</u>`;
|
|
678
|
+
case 's':
|
|
679
|
+
case 'strike':
|
|
680
|
+
case 'del': return `~~${children}~~`;
|
|
681
|
+
case 'a': return `[${children}](${el.href})`;
|
|
682
|
+
case 'img': return ``;
|
|
683
|
+
case 'ul': return this.listToMarkdown(el, false);
|
|
684
|
+
case 'ol': return this.listToMarkdown(el, true);
|
|
685
|
+
case 'li': return children.trim();
|
|
686
|
+
case 'hr': return '---\n\n';
|
|
687
|
+
case 'code': return `\`${children}\``;
|
|
688
|
+
case 'blockquote': return children.split('\n').filter(l => l.trim()).map(line => `> ${line}`).join('\n') + '\n\n';
|
|
689
|
+
case 'table': return this.tableToMarkdown(el);
|
|
690
|
+
case 'div': return children;
|
|
691
|
+
default: return children;
|
|
692
|
+
}
|
|
693
|
+
}
|
|
694
|
+
listToMarkdown(el, ordered) {
|
|
695
|
+
let result = '';
|
|
696
|
+
const items = el.querySelectorAll(':scope > li');
|
|
697
|
+
items.forEach((li, i) => {
|
|
698
|
+
const prefix = ordered ? `${i + 1}. ` : '- ';
|
|
699
|
+
const content = this.nodeToMarkdown(li);
|
|
700
|
+
result += `${prefix}${content}\n`;
|
|
701
|
+
});
|
|
702
|
+
return result + '\n';
|
|
703
|
+
}
|
|
704
|
+
tableToMarkdown(el) {
|
|
705
|
+
const rows = el.querySelectorAll('tr');
|
|
706
|
+
if (rows.length === 0)
|
|
707
|
+
return '';
|
|
708
|
+
let result = '';
|
|
709
|
+
let isFirst = true;
|
|
710
|
+
rows.forEach(row => {
|
|
711
|
+
const cells = row.querySelectorAll('td, th');
|
|
712
|
+
const cellTexts = Array.from(cells).map(cell => this.nodeToMarkdown(cell).trim());
|
|
713
|
+
result += `| ${cellTexts.join(' | ')} |\n`;
|
|
714
|
+
if (isFirst) {
|
|
715
|
+
result += `| ${cellTexts.map(() => '---').join(' | ')} |\n`;
|
|
716
|
+
isFirst = false;
|
|
717
|
+
}
|
|
718
|
+
});
|
|
719
|
+
return result + '\n';
|
|
720
|
+
}
|
|
535
721
|
});
|
|
536
722
|
return _classThis;
|
|
537
723
|
})();
|