kritzel-stencil 0.0.157 → 0.0.158
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/dist/cjs/app-globals-V2Kpy_OQ.js +8 -0
- package/dist/cjs/app-globals-V2Kpy_OQ.js.map +1 -0
- package/dist/cjs/default-text-tool.config-BySzvIox.js +31267 -0
- package/dist/cjs/default-text-tool.config-BySzvIox.js.map +1 -0
- package/dist/cjs/index-Cj__YTlG.js +1650 -0
- package/dist/cjs/index-Cj__YTlG.js.map +1 -0
- package/dist/cjs/index.cjs.js +1465 -0
- package/dist/cjs/index.cjs.js.map +1 -0
- package/dist/cjs/kritzel-brush-style.cjs.entry.js +32 -0
- package/dist/cjs/kritzel-brush-style.entry.cjs.js.map +1 -0
- package/dist/cjs/kritzel-color_22.cjs.entry.js +20974 -0
- package/dist/cjs/loader.cjs.js +14 -0
- package/dist/cjs/loader.cjs.js.map +1 -0
- package/dist/cjs/stencil.cjs.js +26 -0
- package/dist/cjs/stencil.cjs.js.map +1 -0
- package/dist/collection/classes/core/core.class.js +470 -0
- package/dist/collection/classes/core/core.class.js.map +1 -0
- package/dist/collection/classes/core/reviver.class.js +71 -0
- package/dist/collection/classes/core/reviver.class.js.map +1 -0
- package/dist/collection/classes/core/store.class.js +72 -0
- package/dist/collection/classes/core/store.class.js.map +1 -0
- package/dist/collection/classes/core/viewport.class.js +190 -0
- package/dist/collection/classes/core/viewport.class.js.map +1 -0
- package/dist/collection/classes/core/workspace.class.js +41 -0
- package/dist/collection/classes/core/workspace.class.js.map +1 -0
- package/dist/collection/classes/handlers/base.handler.js +8 -0
- package/dist/collection/classes/handlers/base.handler.js.map +1 -0
- package/dist/collection/classes/handlers/context-menu.handler.js +62 -0
- package/dist/collection/classes/handlers/context-menu.handler.js.map +1 -0
- package/dist/collection/classes/handlers/hover.handler.js +19 -0
- package/dist/collection/classes/handlers/hover.handler.js.map +1 -0
- package/dist/collection/classes/handlers/key.handler.js +58 -0
- package/dist/collection/classes/handlers/key.handler.js.map +1 -0
- package/dist/collection/classes/handlers/move.handler.js +149 -0
- package/dist/collection/classes/handlers/move.handler.js.map +1 -0
- package/dist/collection/classes/handlers/resize.handler.js +184 -0
- package/dist/collection/classes/handlers/resize.handler.js.map +1 -0
- package/dist/collection/classes/handlers/rotation.handler.js +116 -0
- package/dist/collection/classes/handlers/rotation.handler.js.map +1 -0
- package/dist/collection/classes/handlers/selection.handler.js +246 -0
- package/dist/collection/classes/handlers/selection.handler.js.map +1 -0
- package/dist/collection/classes/objects/base-object.class.js +232 -0
- package/dist/collection/classes/objects/base-object.class.js.map +1 -0
- package/dist/collection/classes/objects/custom-element.class.js +62 -0
- package/dist/collection/classes/objects/custom-element.class.js.map +1 -0
- package/dist/collection/classes/objects/image.class.js +56 -0
- package/dist/collection/classes/objects/image.class.js.map +1 -0
- package/dist/collection/classes/objects/path.class.js +284 -0
- package/dist/collection/classes/objects/path.class.js.map +1 -0
- package/dist/collection/classes/objects/selection-box.class.js +19 -0
- package/dist/collection/classes/objects/selection-box.class.js.map +1 -0
- package/dist/collection/classes/objects/selection-group.class.js +226 -0
- package/dist/collection/classes/objects/selection-group.class.js.map +1 -0
- package/dist/collection/classes/objects/text.class.js +261 -0
- package/dist/collection/classes/objects/text.class.js.map +1 -0
- package/dist/collection/classes/providers/broadcast-sync-provider.class.js +93 -0
- package/dist/collection/classes/providers/broadcast-sync-provider.class.js.map +1 -0
- package/dist/collection/classes/providers/hocuspocus-sync-provider.class.js +232 -0
- package/dist/collection/classes/providers/hocuspocus-sync-provider.class.js.map +1 -0
- package/dist/collection/classes/providers/indexeddb-sync-provider.class.js +35 -0
- package/dist/collection/classes/providers/indexeddb-sync-provider.class.js.map +1 -0
- package/dist/collection/classes/providers/websocket-sync-provider.class.js +89 -0
- package/dist/collection/classes/providers/websocket-sync-provider.class.js.map +1 -0
- package/dist/{stencil/icon-registry.class-BtT8riKh.js → collection/classes/registries/icon-registry.class.js} +2 -6
- package/dist/collection/classes/registries/icon-registry.class.js.map +1 -0
- package/dist/collection/classes/registries/tool.registry.js +18 -0
- package/dist/collection/classes/registries/tool.registry.js.map +1 -0
- package/dist/collection/classes/structures/app-state-map.structure.js +189 -0
- package/dist/collection/classes/structures/app-state-map.structure.js.map +1 -0
- package/dist/collection/classes/structures/object-map.structure.js +328 -0
- package/dist/collection/classes/structures/object-map.structure.js.map +1 -0
- package/dist/collection/classes/structures/quadtree.structure.js +113 -0
- package/dist/collection/classes/structures/quadtree.structure.js.map +1 -0
- package/dist/collection/classes/tools/base-tool.class.js +38 -0
- package/dist/collection/classes/tools/base-tool.class.js.map +1 -0
- package/dist/collection/classes/tools/brush-tool.class.js +133 -0
- package/dist/collection/classes/tools/brush-tool.class.js.map +1 -0
- package/dist/collection/classes/tools/eraser-tool.class.js +85 -0
- package/dist/collection/classes/tools/eraser-tool.class.js.map +1 -0
- package/dist/collection/classes/tools/image-tool.class.js +83 -0
- package/dist/collection/classes/tools/image-tool.class.js.map +1 -0
- package/dist/collection/classes/tools/selection-tool.class.js +164 -0
- package/dist/collection/classes/tools/selection-tool.class.js.map +1 -0
- package/dist/collection/classes/tools/text-tool.class.js +108 -0
- package/dist/collection/classes/tools/text-tool.class.js.map +1 -0
- package/dist/collection/collection-manifest.json +34 -0
- package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.css +10 -0
- package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.js +153 -0
- package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.js.map +1 -0
- package/dist/collection/components/core/kritzel-editor/kritzel-editor.css +34 -0
- package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +928 -0
- package/dist/collection/components/core/kritzel-editor/kritzel-editor.js.map +1 -0
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.css +73 -0
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +1630 -0
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -0
- package/dist/collection/components/shared/kritzel-brush-style/kritzel-brush-style.css +44 -0
- package/dist/collection/components/shared/kritzel-brush-style/kritzel-brush-style.js +98 -0
- package/dist/collection/components/shared/kritzel-brush-style/kritzel-brush-style.js.map +1 -0
- package/dist/collection/components/shared/kritzel-color/kritzel-color.css +21 -0
- package/dist/collection/components/shared/kritzel-color/kritzel-color.js +107 -0
- package/dist/collection/components/shared/kritzel-color/kritzel-color.js.map +1 -0
- package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.css +46 -0
- package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.js +145 -0
- package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.js.map +1 -0
- package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.css +53 -0
- package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.js +218 -0
- package/dist/collection/components/shared/kritzel-dropdown/kritzel-dropdown.js.map +1 -0
- package/dist/collection/components/shared/kritzel-font/kritzel-font.css +10 -0
- package/dist/collection/components/shared/kritzel-font/kritzel-font.js +90 -0
- package/dist/collection/components/shared/kritzel-font/kritzel-font.js.map +1 -0
- package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.css +48 -0
- package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.js +114 -0
- package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.js.map +1 -0
- package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.css +30 -0
- package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.js +110 -0
- package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.js.map +1 -0
- package/dist/collection/components/shared/kritzel-icon/kritzel-icon.css +18 -0
- package/dist/collection/components/shared/kritzel-icon/kritzel-icon.js +94 -0
- package/dist/collection/components/shared/kritzel-icon/kritzel-icon.js.map +1 -0
- package/dist/collection/components/shared/kritzel-menu/kritzel-menu.css +27 -0
- package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js +291 -0
- package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js.map +1 -0
- package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.css +145 -0
- package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js +280 -0
- package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js.map +1 -0
- package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js +310 -0
- package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js.map +1 -0
- package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.css +78 -0
- package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js +406 -0
- package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js.map +1 -0
- package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.css +28 -0
- package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js +89 -0
- package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js.map +1 -0
- package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.css +17 -0
- package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js +251 -0
- package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js.map +1 -0
- package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.css +55 -0
- package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js +172 -0
- package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js.map +1 -0
- package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.css +19 -0
- package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js +135 -0
- package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js.map +1 -0
- package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.css +19 -0
- package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.js +115 -0
- package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.js.map +1 -0
- package/dist/collection/components/ui/kritzel-controls/kritzel-controls.css +127 -0
- package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +312 -0
- package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js.map +1 -0
- package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.css +44 -0
- package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js +111 -0
- package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js.map +1 -0
- package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.css +5 -0
- package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.js +255 -0
- package/dist/collection/components/ui/kritzel-workspace-manager/kritzel-workspace-manager.js.map +1 -0
- package/dist/collection/configs/default-brush-tool.config.js +60 -0
- package/dist/collection/configs/default-brush-tool.config.js.map +1 -0
- package/dist/collection/configs/default-engine-config.js +53 -0
- package/dist/collection/configs/default-engine-config.js.map +1 -0
- package/dist/collection/configs/default-sync.config.js +10 -0
- package/dist/collection/configs/default-sync.config.js.map +1 -0
- package/dist/collection/configs/default-text-tool.config.js +32 -0
- package/dist/collection/configs/default-text-tool.config.js.map +1 -0
- package/dist/collection/constants/core.constants.js +2 -0
- package/dist/collection/constants/core.constants.js.map +1 -0
- package/dist/collection/constants/engine.constants.js +3 -0
- package/dist/collection/constants/engine.constants.js.map +1 -0
- package/dist/collection/enums/event-button.enum.js +7 -0
- package/dist/collection/enums/event-button.enum.js.map +1 -0
- package/dist/collection/enums/handle-type.enum.js +8 -0
- package/dist/collection/enums/handle-type.enum.js.map +1 -0
- package/dist/collection/helpers/class.helper.js +6 -0
- package/dist/collection/helpers/class.helper.js.map +1 -0
- package/dist/collection/helpers/devices.helper.js +26 -0
- package/dist/collection/helpers/devices.helper.js.map +1 -0
- package/dist/collection/helpers/event.helper.js +51 -0
- package/dist/collection/helpers/event.helper.js.map +1 -0
- package/dist/collection/helpers/geometry.helper.js +53 -0
- package/dist/collection/helpers/geometry.helper.js.map +1 -0
- package/dist/collection/helpers/html.helper.js +64 -0
- package/dist/{stencil/html.helper-C6qB08BS.js.map → collection/helpers/html.helper.js.map} +1 -1
- package/dist/collection/helpers/keyboard.helper.js +49 -0
- package/dist/collection/helpers/keyboard.helper.js.map +1 -0
- package/dist/collection/helpers/math.helper.js +6 -0
- package/dist/collection/helpers/math.helper.js.map +1 -0
- package/dist/collection/helpers/object.helper.js +12 -0
- package/dist/collection/helpers/object.helper.js.map +1 -0
- package/dist/collection/index.js +30 -0
- package/dist/collection/index.js.map +1 -0
- package/dist/collection/interfaces/bounding-box.interface.js +2 -0
- package/dist/collection/interfaces/bounding-box.interface.js.map +1 -0
- package/dist/collection/interfaces/clonable.interface.js +2 -0
- package/dist/collection/interfaces/clonable.interface.js.map +1 -0
- package/dist/collection/interfaces/context-menu-item.interface.js +2 -0
- package/dist/collection/interfaces/context-menu-item.interface.js.map +1 -0
- package/dist/collection/interfaces/debug-info.interface.js +2 -0
- package/dist/collection/interfaces/debug-info.interface.js.map +1 -0
- package/dist/collection/interfaces/engine-state.interface.js +2 -0
- package/dist/collection/interfaces/engine-state.interface.js.map +1 -0
- package/dist/collection/interfaces/menu-item.interface.js +2 -0
- package/dist/collection/interfaces/menu-item.interface.js.map +1 -0
- package/dist/collection/interfaces/object.interface.js +2 -0
- package/dist/collection/interfaces/object.interface.js.map +1 -0
- package/dist/collection/interfaces/path-options.interface.js +2 -0
- package/dist/collection/interfaces/path-options.interface.js.map +1 -0
- package/dist/collection/interfaces/point.interface.js +2 -0
- package/dist/collection/interfaces/point.interface.js.map +1 -0
- package/dist/collection/interfaces/polygon.interface.js +2 -0
- package/dist/collection/interfaces/polygon.interface.js.map +1 -0
- package/dist/collection/interfaces/selection-state.interface.js +2 -0
- package/dist/collection/interfaces/selection-state.interface.js.map +1 -0
- package/dist/collection/interfaces/serializable.interface.js +2 -0
- package/dist/collection/interfaces/serializable.interface.js.map +1 -0
- package/dist/collection/interfaces/shortcut.interface.js +2 -0
- package/dist/collection/interfaces/shortcut.interface.js.map +1 -0
- package/dist/collection/interfaces/sync-config.interface.js +2 -0
- package/dist/collection/interfaces/sync-config.interface.js.map +1 -0
- package/dist/collection/interfaces/sync-provider.interface.js +2 -0
- package/dist/collection/interfaces/sync-provider.interface.js.map +1 -0
- package/dist/collection/interfaces/tool.interface.js +2 -0
- package/dist/collection/interfaces/tool.interface.js.map +1 -0
- package/dist/collection/interfaces/toolbar-control.interface.js +2 -0
- package/dist/collection/interfaces/toolbar-control.interface.js.map +1 -0
- package/dist/collection/interfaces/undo-state.interface.js +2 -0
- package/dist/collection/interfaces/undo-state.interface.js.map +1 -0
- package/dist/collection/types/deep-readonly.type.js +2 -0
- package/dist/collection/types/deep-readonly.type.js.map +1 -0
- package/dist/collection/types/state.types.js +2 -0
- package/dist/collection/types/state.types.js.map +1 -0
- package/dist/components/index.js +1477 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/kritzel-brush-style.js +67 -0
- package/dist/components/kritzel-brush-style.js.map +1 -0
- package/dist/components/kritzel-color-palette.js +9 -0
- package/dist/components/kritzel-color-palette.js.map +1 -0
- package/dist/components/kritzel-color.js +9 -0
- package/dist/components/kritzel-color.js.map +1 -0
- package/dist/components/kritzel-context-menu.js +9 -0
- package/dist/components/kritzel-context-menu.js.map +1 -0
- package/dist/components/kritzel-control-brush-config.js +9 -0
- package/dist/components/kritzel-control-brush-config.js.map +1 -0
- package/dist/components/kritzel-control-text-config.js +9 -0
- package/dist/components/kritzel-control-text-config.js.map +1 -0
- package/dist/components/kritzel-controls.js +9 -0
- package/dist/components/kritzel-controls.js.map +1 -0
- package/dist/components/kritzel-cursor-trail.js +9 -0
- package/dist/components/kritzel-cursor-trail.js.map +1 -0
- package/dist/components/kritzel-dropdown.js +9 -0
- package/dist/components/kritzel-dropdown.js.map +1 -0
- package/dist/components/kritzel-editor.js +516 -0
- package/dist/components/kritzel-editor.js.map +1 -0
- package/dist/components/kritzel-engine.js +9 -0
- package/dist/components/kritzel-engine.js.map +1 -0
- package/dist/components/kritzel-font-family.js +9 -0
- package/dist/components/kritzel-font-family.js.map +1 -0
- package/dist/components/kritzel-font-size.js +9 -0
- package/dist/components/kritzel-font-size.js.map +1 -0
- package/dist/components/kritzel-font.js +9 -0
- package/dist/components/kritzel-font.js.map +1 -0
- package/dist/components/kritzel-icon.js +9 -0
- package/dist/components/kritzel-icon.js.map +1 -0
- package/dist/components/kritzel-menu-item.js +9 -0
- package/dist/components/kritzel-menu-item.js.map +1 -0
- package/dist/components/kritzel-menu.js +9 -0
- package/dist/components/kritzel-menu.js.map +1 -0
- package/dist/components/kritzel-portal.js +9 -0
- package/dist/components/kritzel-portal.js.map +1 -0
- package/dist/components/kritzel-split-button.js +9 -0
- package/dist/components/kritzel-split-button.js.map +1 -0
- package/dist/components/kritzel-stroke-size.js +9 -0
- package/dist/components/kritzel-stroke-size.js.map +1 -0
- package/dist/components/kritzel-tooltip.js +9 -0
- package/dist/components/kritzel-tooltip.js.map +1 -0
- package/dist/components/kritzel-utility-panel.js +9 -0
- package/dist/components/kritzel-utility-panel.js.map +1 -0
- package/dist/components/kritzel-workspace-manager.js +9 -0
- package/dist/components/kritzel-workspace-manager.js.map +1 -0
- package/dist/{stencil/kritzel-controls.entry.js → components/p-1lIHoOlH.js} +115 -17
- package/dist/components/p-1lIHoOlH.js.map +1 -0
- package/dist/{stencil/object.helper-B0kd2rUI.js → components/p-B0kd2rUI.js} +2 -2
- package/dist/components/p-B0kd2rUI.js.map +1 -0
- package/dist/components/p-B4kxkVe-.js +55 -0
- package/dist/components/p-B4kxkVe-.js.map +1 -0
- package/dist/components/p-BQg4YML7.js +106 -0
- package/dist/components/p-BQg4YML7.js.map +1 -0
- package/dist/{stencil/kritzel-font-family.entry.js → components/p-BgznZoBH.js} +37 -9
- package/dist/components/p-BgznZoBH.js.map +1 -0
- package/dist/components/p-Bhtn9qay.js +98 -0
- package/dist/components/p-Bhtn9qay.js.map +1 -0
- package/dist/{stencil/kritzel-context-menu-GdU9xEKC.js → components/p-C2sWlNsJ.js} +41 -12
- package/dist/components/p-C2sWlNsJ.js.map +1 -0
- package/dist/{stencil/html.helper-C6qB08BS.js → components/p-C6qB08BS.js} +2 -2
- package/dist/components/p-C6qB08BS.js.map +1 -0
- package/dist/{stencil/text-tool.class-C0GbC5zQ.js → components/p-CBYBurdY.js} +25 -729
- package/dist/components/p-CBYBurdY.js.map +1 -0
- package/dist/{stencil/kritzel-dropdown.entry.js → components/p-CIXPLjCu.js} +39 -9
- package/dist/components/p-CIXPLjCu.js.map +1 -0
- package/dist/{stencil/kritzel-workspace-manager.entry.js → components/p-CK6no3mi.js} +68 -13
- package/dist/components/p-CK6no3mi.js.map +1 -0
- package/dist/{stencil/kritzel-cursor-trail.entry.js → components/p-CLt3HMl6.js} +33 -10
- package/dist/components/p-CLt3HMl6.js.map +1 -0
- package/dist/{stencil/kritzel-tooltip.entry.js → components/p-CTP479Lf.js} +39 -11
- package/dist/components/p-CTP479Lf.js.map +1 -0
- package/dist/{stencil/kritzel-menu-item.entry.js → components/p-CsA9M6me.js} +174 -16
- package/dist/components/p-CsA9M6me.js.map +1 -0
- package/dist/components/p-CwkUrTy1.js +1367 -0
- package/dist/components/p-CwkUrTy1.js.map +1 -0
- package/dist/{stencil/kritzel-color-palette.entry.js → components/p-D1uj4A4F.js} +39 -9
- package/dist/components/p-D1uj4A4F.js.map +1 -0
- package/dist/{stencil/kritzel-color.entry.js → components/p-D4yvhd1d.js} +30 -8
- package/dist/components/p-D4yvhd1d.js.map +1 -0
- package/dist/{stencil/kritzel-portal.entry.js → components/p-D5Wq4x4r.js} +37 -11
- package/dist/components/p-D5Wq4x4r.js.map +1 -0
- package/dist/{stencil/event-button.enum-D8W6LE-c.js → components/p-D8W6LE-c.js} +2 -2
- package/dist/components/p-D8W6LE-c.js.map +1 -0
- package/dist/{stencil/kritzel-utility-panel.entry.js → components/p-DAfkuR8U.js} +38 -11
- package/dist/components/p-DAfkuR8U.js.map +1 -0
- package/dist/components/p-DDmSxM5f.js +57 -0
- package/dist/{stencil/kritzel-font-size.entry.esm.js.map → components/p-DDmSxM5f.js.map} +1 -1
- package/dist/components/p-Ddh40W3x.js +103 -0
- package/dist/components/p-Ddh40W3x.js.map +1 -0
- package/dist/components/p-DjTEcPMZ.js +35610 -0
- package/dist/components/p-DjTEcPMZ.js.map +1 -0
- package/dist/{stencil/kritzel-split-button.entry.js → components/p-TdCTkEu0.js} +72 -18
- package/dist/components/p-TdCTkEu0.js.map +1 -0
- package/dist/{stencil/devices.helper-l10It7Nm.js → components/p-l10It7Nm.js} +2 -2
- package/dist/components/p-l10It7Nm.js.map +1 -0
- package/dist/{stencil/workspace.class-n789Y3S-.js → components/p-n789Y3S-.js} +2 -2
- package/dist/components/p-n789Y3S-.js.map +1 -0
- package/dist/components/p-uuRJU2R1.js +46 -0
- package/dist/components/p-uuRJU2R1.js.map +1 -0
- package/dist/esm/app-globals-DQuL1Twl.js +6 -0
- package/dist/esm/app-globals-DQuL1Twl.js.map +1 -0
- package/dist/esm/default-text-tool.config-2YFQA3SF.js +31208 -0
- package/dist/esm/default-text-tool.config-2YFQA3SF.js.map +1 -0
- package/dist/esm/index-SGde3HXB.js +1623 -0
- package/dist/esm/index-SGde3HXB.js.map +1 -0
- package/dist/esm/index.js +1449 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/{stencil → esm}/kritzel-brush-style.entry.js +3 -3
- package/dist/esm/kritzel-brush-style.entry.js.map +1 -0
- package/dist/{stencil/kritzel-engine.entry.js → esm/kritzel-color_22.entry.js} +1805 -72
- package/dist/esm/loader.js +12 -0
- package/dist/esm/loader.js.map +1 -0
- package/dist/esm/stencil.js +22 -0
- package/dist/esm/stencil.js.map +1 -0
- package/dist/index.cjs.js +1 -0
- package/dist/index.js +1 -0
- package/dist/stencil/index.esm.js +2 -18
- package/dist/stencil/index.esm.js.map +1 -1
- package/dist/stencil/loader.esm.js.map +1 -1
- package/dist/stencil/p-14102a0c.entry.js +10 -0
- package/dist/stencil/p-14102a0c.entry.js.map +1 -0
- package/dist/stencil/p-2YFQA3SF.js +2 -0
- package/dist/stencil/p-2YFQA3SF.js.map +1 -0
- package/dist/stencil/p-DQuL1Twl.js +2 -0
- package/dist/stencil/p-DQuL1Twl.js.map +1 -0
- package/dist/stencil/p-SGde3HXB.js +3 -0
- package/dist/stencil/p-SGde3HXB.js.map +1 -0
- package/dist/stencil/p-d702c5af.entry.js +2 -0
- package/dist/stencil/p-d702c5af.entry.js.map +1 -0
- package/dist/stencil/stencil.esm.js +2 -48
- package/dist/stencil/stencil.esm.js.map +1 -1
- package/package.json +1 -1
- package/dist/stencil/default-text-tool.config-DKpRP4XR.js +0 -1441
- package/dist/stencil/default-text-tool.config-DKpRP4XR.js.map +0 -1
- package/dist/stencil/devices.helper-l10It7Nm.js.map +0 -1
- package/dist/stencil/engine.constants-DsjjAmnl.js +0 -7
- package/dist/stencil/engine.constants-DsjjAmnl.js.map +0 -1
- package/dist/stencil/event-button.enum-D8W6LE-c.js.map +0 -1
- package/dist/stencil/icon-registry.class-BtT8riKh.js.map +0 -1
- package/dist/stencil/index-DniO_INI.js +0 -4395
- package/dist/stencil/index-DniO_INI.js.map +0 -1
- package/dist/stencil/kritzel-color-palette.entry.esm.js.map +0 -1
- package/dist/stencil/kritzel-color.entry.esm.js.map +0 -1
- package/dist/stencil/kritzel-context-menu-BYgOEy-i.js +0 -66
- package/dist/stencil/kritzel-context-menu-BYgOEy-i.js.map +0 -1
- package/dist/stencil/kritzel-context-menu-GdU9xEKC.js.map +0 -1
- package/dist/stencil/kritzel-context-menu.entry.esm.js.map +0 -1
- package/dist/stencil/kritzel-context-menu.entry.js +0 -3
- package/dist/stencil/kritzel-control-brush-config.entry.esm.js.map +0 -1
- package/dist/stencil/kritzel-control-brush-config.entry.js +0 -54
- package/dist/stencil/kritzel-control-text-config.entry.esm.js.map +0 -1
- package/dist/stencil/kritzel-control-text-config.entry.js +0 -42
- package/dist/stencil/kritzel-controls.entry.esm.js.map +0 -1
- package/dist/stencil/kritzel-cursor-trail.entry.esm.js.map +0 -1
- package/dist/stencil/kritzel-dropdown.entry.esm.js.map +0 -1
- package/dist/stencil/kritzel-editor.entry.esm.js.map +0 -1
- package/dist/stencil/kritzel-editor.entry.js +0 -248
- package/dist/stencil/kritzel-engine.entry.esm.js.map +0 -1
- package/dist/stencil/kritzel-font-family.entry.esm.js.map +0 -1
- package/dist/stencil/kritzel-font-size.entry.js +0 -28
- package/dist/stencil/kritzel-font.entry.esm.js.map +0 -1
- package/dist/stencil/kritzel-font.entry.js +0 -23
- package/dist/stencil/kritzel-icon.entry.esm.js.map +0 -1
- package/dist/stencil/kritzel-icon.entry.js +0 -29
- package/dist/stencil/kritzel-menu-item.entry.esm.js.map +0 -1
- package/dist/stencil/kritzel-menu.entry.esm.js.map +0 -1
- package/dist/stencil/kritzel-menu.entry.js +0 -72
- package/dist/stencil/kritzel-portal.entry.esm.js.map +0 -1
- package/dist/stencil/kritzel-split-button.entry.esm.js.map +0 -1
- package/dist/stencil/kritzel-stroke-size.entry.esm.js.map +0 -1
- package/dist/stencil/kritzel-stroke-size.entry.js +0 -27
- package/dist/stencil/kritzel-tooltip.entry.esm.js.map +0 -1
- package/dist/stencil/kritzel-utility-panel.entry.esm.js.map +0 -1
- package/dist/stencil/kritzel-workspace-manager.entry.esm.js.map +0 -1
- package/dist/stencil/object.helper-B0kd2rUI.js.map +0 -1
- package/dist/stencil/sync-config.interface-lKfyG1EN.js +0 -19839
- package/dist/stencil/sync-config.interface-lKfyG1EN.js.map +0 -1
- package/dist/stencil/text-tool.class-C0GbC5zQ.js.map +0 -1
- package/dist/stencil/workspace.class-n789Y3S-.js.map +0 -1
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { HocuspocusProvider, HocuspocusProviderWebsocket } from "@hocuspocus/provider";
|
|
2
|
+
/**
|
|
3
|
+
* Hocuspocus sync provider for real-time collaboration
|
|
4
|
+
* Supports multiplexing - multiple documents can share the same WebSocket connection
|
|
5
|
+
*/
|
|
6
|
+
export class HocuspocusSyncProvider {
|
|
7
|
+
provider;
|
|
8
|
+
isConnected = false;
|
|
9
|
+
isSynced = false;
|
|
10
|
+
usesSharedSocket = false;
|
|
11
|
+
// Static shared WebSocket instance for multiplexing
|
|
12
|
+
static sharedWebSocketProvider = null;
|
|
13
|
+
constructor(docName, doc, options) {
|
|
14
|
+
const name = options?.name || docName;
|
|
15
|
+
const url = options?.url || 'ws://localhost:1234';
|
|
16
|
+
// Use provided websocketProvider or the static shared one
|
|
17
|
+
const websocketProvider = options?.websocketProvider || HocuspocusSyncProvider.sharedWebSocketProvider;
|
|
18
|
+
if (websocketProvider) {
|
|
19
|
+
// Multiplexing mode - use shared WebSocket connection
|
|
20
|
+
this.usesSharedSocket = true;
|
|
21
|
+
const config = {
|
|
22
|
+
websocketProvider,
|
|
23
|
+
name,
|
|
24
|
+
document: doc,
|
|
25
|
+
token: options?.token || null,
|
|
26
|
+
onConnect: () => {
|
|
27
|
+
this.isConnected = true;
|
|
28
|
+
if (!options?.quiet) {
|
|
29
|
+
console.info(`Hocuspocus connected: ${name}`);
|
|
30
|
+
}
|
|
31
|
+
if (options?.onConnect) {
|
|
32
|
+
options.onConnect();
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
onDisconnect: () => {
|
|
36
|
+
this.isConnected = false;
|
|
37
|
+
this.isSynced = false;
|
|
38
|
+
if (!options?.quiet) {
|
|
39
|
+
console.info(`Hocuspocus disconnected: ${name}`);
|
|
40
|
+
}
|
|
41
|
+
if (options?.onDisconnect) {
|
|
42
|
+
options.onDisconnect();
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
onSynced: () => {
|
|
46
|
+
this.isSynced = true;
|
|
47
|
+
if (!options?.quiet) {
|
|
48
|
+
console.info(`Hocuspocus synced: ${name}`);
|
|
49
|
+
}
|
|
50
|
+
if (options?.onSynced) {
|
|
51
|
+
options.onSynced();
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
// Add optional settings
|
|
56
|
+
if (options?.forceSyncInterval !== undefined) {
|
|
57
|
+
config.forceSyncInterval = options.forceSyncInterval;
|
|
58
|
+
}
|
|
59
|
+
if (options?.onAuthenticationFailed) {
|
|
60
|
+
config.onAuthenticationFailed = options.onAuthenticationFailed;
|
|
61
|
+
}
|
|
62
|
+
if (options?.onStatus) {
|
|
63
|
+
config.onStatus = options.onStatus;
|
|
64
|
+
}
|
|
65
|
+
this.provider = new HocuspocusProvider(config);
|
|
66
|
+
// Must call attach() explicitly when using shared socket
|
|
67
|
+
this.provider.attach();
|
|
68
|
+
if (!options?.quiet) {
|
|
69
|
+
console.info(`Hocuspocus Provider initialized (multiplexed): ${name}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
// Standalone mode - create own WebSocket connection
|
|
74
|
+
this.usesSharedSocket = false;
|
|
75
|
+
const config = {
|
|
76
|
+
url,
|
|
77
|
+
name,
|
|
78
|
+
document: doc,
|
|
79
|
+
token: options?.token || null,
|
|
80
|
+
onConnect: () => {
|
|
81
|
+
this.isConnected = true;
|
|
82
|
+
if (!options?.quiet) {
|
|
83
|
+
console.info(`Hocuspocus connected: ${name}`);
|
|
84
|
+
}
|
|
85
|
+
if (options?.onConnect) {
|
|
86
|
+
options.onConnect();
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
onDisconnect: () => {
|
|
90
|
+
this.isConnected = false;
|
|
91
|
+
this.isSynced = false;
|
|
92
|
+
if (!options?.quiet) {
|
|
93
|
+
console.info(`Hocuspocus disconnected: ${name}`);
|
|
94
|
+
}
|
|
95
|
+
if (options?.onDisconnect) {
|
|
96
|
+
options.onDisconnect();
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
onSynced: () => {
|
|
100
|
+
this.isSynced = true;
|
|
101
|
+
if (!options?.quiet) {
|
|
102
|
+
console.info(`Hocuspocus synced: ${name}`);
|
|
103
|
+
}
|
|
104
|
+
if (options?.onSynced) {
|
|
105
|
+
options.onSynced();
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
// Add optional settings
|
|
110
|
+
if (options?.forceSyncInterval !== undefined) {
|
|
111
|
+
config.forceSyncInterval = options.forceSyncInterval;
|
|
112
|
+
}
|
|
113
|
+
if (options?.onAuthenticationFailed) {
|
|
114
|
+
config.onAuthenticationFailed = options.onAuthenticationFailed;
|
|
115
|
+
}
|
|
116
|
+
if (options?.onStatus) {
|
|
117
|
+
config.onStatus = options.onStatus;
|
|
118
|
+
}
|
|
119
|
+
if (options?.WebSocketPolyfill) {
|
|
120
|
+
config.WebSocketPolyfill = options.WebSocketPolyfill;
|
|
121
|
+
}
|
|
122
|
+
this.provider = new HocuspocusProvider(config);
|
|
123
|
+
if (!options?.quiet) {
|
|
124
|
+
console.info(`Hocuspocus Provider initialized: ${url}/${name}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Create a shared WebSocket connection for multiplexing
|
|
130
|
+
* Call this once to create a shared connection that multiple providers can use
|
|
131
|
+
*/
|
|
132
|
+
static createSharedWebSocket(options) {
|
|
133
|
+
if (HocuspocusSyncProvider.sharedWebSocketProvider) {
|
|
134
|
+
console.warn('Shared WebSocket already exists. Returning existing instance.');
|
|
135
|
+
return HocuspocusSyncProvider.sharedWebSocketProvider;
|
|
136
|
+
}
|
|
137
|
+
const config = {
|
|
138
|
+
url: options.url,
|
|
139
|
+
};
|
|
140
|
+
if (options.WebSocketPolyfill) {
|
|
141
|
+
config.WebSocketPolyfill = options.WebSocketPolyfill;
|
|
142
|
+
}
|
|
143
|
+
if (options.onConnect) {
|
|
144
|
+
config.onConnect = options.onConnect;
|
|
145
|
+
}
|
|
146
|
+
if (options.onDisconnect) {
|
|
147
|
+
config.onDisconnect = options.onDisconnect;
|
|
148
|
+
}
|
|
149
|
+
if (options.onStatus) {
|
|
150
|
+
config.onStatus = options.onStatus;
|
|
151
|
+
}
|
|
152
|
+
HocuspocusSyncProvider.sharedWebSocketProvider = new HocuspocusProviderWebsocket(config);
|
|
153
|
+
console.info(`Shared Hocuspocus WebSocket created: ${options.url}`);
|
|
154
|
+
return HocuspocusSyncProvider.sharedWebSocketProvider;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Destroy the shared WebSocket connection
|
|
158
|
+
* Call this when you're done with all multiplexed providers
|
|
159
|
+
*/
|
|
160
|
+
static destroySharedWebSocket() {
|
|
161
|
+
if (HocuspocusSyncProvider.sharedWebSocketProvider) {
|
|
162
|
+
HocuspocusSyncProvider.sharedWebSocketProvider.destroy();
|
|
163
|
+
HocuspocusSyncProvider.sharedWebSocketProvider = null;
|
|
164
|
+
console.info('Shared Hocuspocus WebSocket destroyed');
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Get the shared WebSocket provider instance (if it exists)
|
|
169
|
+
*/
|
|
170
|
+
static getSharedWebSocket() {
|
|
171
|
+
return HocuspocusSyncProvider.sharedWebSocketProvider;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Static factory method for creating HocuspocusSyncProvider with configuration options
|
|
175
|
+
* Returns a ProviderFactory that can be used in sync configuration
|
|
176
|
+
*/
|
|
177
|
+
static with(options) {
|
|
178
|
+
return {
|
|
179
|
+
create: (docName, doc) => {
|
|
180
|
+
return new HocuspocusSyncProvider(docName, doc, options);
|
|
181
|
+
},
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
async connect() {
|
|
185
|
+
if (this.isSynced) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
return new Promise((resolve, reject) => {
|
|
189
|
+
const timeout = setTimeout(() => {
|
|
190
|
+
reject(new Error('Hocuspocus connection timeout'));
|
|
191
|
+
}, 10000); // 10 second timeout
|
|
192
|
+
const syncHandler = () => {
|
|
193
|
+
clearTimeout(timeout);
|
|
194
|
+
this.provider.off('synced', syncHandler);
|
|
195
|
+
resolve();
|
|
196
|
+
};
|
|
197
|
+
this.provider.on('synced', syncHandler);
|
|
198
|
+
// If already synced, resolve immediately
|
|
199
|
+
if (this.provider.isSynced) {
|
|
200
|
+
clearTimeout(timeout);
|
|
201
|
+
this.provider.off('synced', syncHandler);
|
|
202
|
+
resolve();
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
// Connect if not already connected (standalone mode only)
|
|
206
|
+
if (!this.isConnected && !this.usesSharedSocket) {
|
|
207
|
+
this.provider.connect();
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
disconnect() {
|
|
212
|
+
if (this.provider) {
|
|
213
|
+
if (this.usesSharedSocket) {
|
|
214
|
+
// Detach from shared socket instead of disconnecting
|
|
215
|
+
this.provider.detach();
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
this.provider.disconnect();
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
this.isConnected = false;
|
|
222
|
+
this.isSynced = false;
|
|
223
|
+
}
|
|
224
|
+
destroy() {
|
|
225
|
+
if (this.provider) {
|
|
226
|
+
this.provider.destroy();
|
|
227
|
+
}
|
|
228
|
+
this.isConnected = false;
|
|
229
|
+
this.isSynced = false;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=hocuspocus-sync-provider.class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hocuspocus-sync-provider.class.js","sourceRoot":"","sources":["../../../src/classes/providers/hocuspocus-sync-provider.class.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Y from 'yjs';\r\nimport { HocuspocusProvider, HocuspocusProviderWebsocket } from '@hocuspocus/provider';\r\nimport { ISyncProvider, ProviderFactory } from '../../interfaces/sync-provider.interface';\r\n\r\n/**\r\n * Options for Hocuspocus sync provider\r\n */\r\nexport interface HocuspocusOptions {\r\n /**\r\n * Hocuspocus server URL (optional, defaults to ws://localhost:1234)\r\n */\r\n url?: string;\r\n\r\n /**\r\n * Document name (optional, defaults to docName)\r\n */\r\n name?: string;\r\n\r\n /**\r\n * Authentication token (optional)\r\n */\r\n token?: string | (() => string) | (() => Promise<string>);\r\n\r\n /**\r\n * Shared WebSocket provider for multiplexing (optional)\r\n * If provided, multiple documents will share the same WebSocket connection\r\n */\r\n websocketProvider?: HocuspocusProviderWebsocket;\r\n\r\n /**\r\n * Quiet mode - suppress console output (optional, defaults to false)\r\n */\r\n quiet?: boolean;\r\n\r\n /**\r\n * Callback when connected (optional)\r\n */\r\n onConnect?: () => void;\r\n\r\n /**\r\n * Callback when disconnected (optional)\r\n */\r\n onDisconnect?: () => void;\r\n\r\n /**\r\n * Callback when synced (optional)\r\n */\r\n onSynced?: () => void;\r\n\r\n /**\r\n * Callback when authentication failed (optional)\r\n */\r\n onAuthenticationFailed?: (data: any) => void;\r\n\r\n /**\r\n * Callback when connection status changes (optional)\r\n */\r\n onStatus?: (data: { status: string }) => void;\r\n\r\n /**\r\n * Force sync interval in milliseconds (optional, false to disable)\r\n */\r\n forceSyncInterval?: false | number;\r\n\r\n /**\r\n * WebSocket polyfill for Node.js environments (optional)\r\n */\r\n WebSocketPolyfill?: any;\r\n}\r\n\r\n/**\r\n * Options for creating a shared WebSocket connection\r\n */\r\nexport interface HocuspocusWebSocketOptions {\r\n /**\r\n * Hocuspocus server URL\r\n */\r\n url: string;\r\n\r\n /**\r\n * WebSocket polyfill for Node.js environments (optional)\r\n */\r\n WebSocketPolyfill?: any;\r\n\r\n /**\r\n * Callback when WebSocket connects (optional)\r\n */\r\n onConnect?: () => void;\r\n\r\n /**\r\n * Callback when WebSocket disconnects (optional)\r\n */\r\n onDisconnect?: () => void;\r\n\r\n /**\r\n * Callback when connection status changes (optional)\r\n */\r\n onStatus?: (data: { status: string }) => void;\r\n}\r\n\r\n/**\r\n * Hocuspocus sync provider for real-time collaboration\r\n * Supports multiplexing - multiple documents can share the same WebSocket connection\r\n */\r\nexport class HocuspocusSyncProvider implements ISyncProvider {\r\n private provider: HocuspocusProvider;\r\n private isConnected: boolean = false;\r\n private isSynced: boolean = false;\r\n private usesSharedSocket: boolean = false;\r\n\r\n // Static shared WebSocket instance for multiplexing\r\n private static sharedWebSocketProvider: HocuspocusProviderWebsocket | null = null;\r\n\r\n constructor(docName: string, doc: Y.Doc, options?: HocuspocusOptions) {\r\n const name = options?.name || docName;\r\n const url = options?.url || 'ws://localhost:1234';\r\n\r\n // Use provided websocketProvider or the static shared one\r\n const websocketProvider = options?.websocketProvider || HocuspocusSyncProvider.sharedWebSocketProvider;\r\n\r\n if (websocketProvider) {\r\n // Multiplexing mode - use shared WebSocket connection\r\n this.usesSharedSocket = true;\r\n\r\n const config: any = {\r\n websocketProvider,\r\n name,\r\n document: doc,\r\n token: options?.token || null,\r\n onConnect: () => {\r\n this.isConnected = true;\r\n if (!options?.quiet) {\r\n console.info(`Hocuspocus connected: ${name}`);\r\n }\r\n if (options?.onConnect) {\r\n options.onConnect();\r\n }\r\n },\r\n onDisconnect: () => {\r\n this.isConnected = false;\r\n this.isSynced = false;\r\n if (!options?.quiet) {\r\n console.info(`Hocuspocus disconnected: ${name}`);\r\n }\r\n if (options?.onDisconnect) {\r\n options.onDisconnect();\r\n }\r\n },\r\n onSynced: () => {\r\n this.isSynced = true;\r\n if (!options?.quiet) {\r\n console.info(`Hocuspocus synced: ${name}`);\r\n }\r\n if (options?.onSynced) {\r\n options.onSynced();\r\n }\r\n },\r\n };\r\n\r\n // Add optional settings\r\n if (options?.forceSyncInterval !== undefined) {\r\n config.forceSyncInterval = options.forceSyncInterval;\r\n }\r\n\r\n if (options?.onAuthenticationFailed) {\r\n config.onAuthenticationFailed = options.onAuthenticationFailed;\r\n }\r\n\r\n if (options?.onStatus) {\r\n config.onStatus = options.onStatus;\r\n }\r\n\r\n this.provider = new HocuspocusProvider(config);\r\n\r\n // Must call attach() explicitly when using shared socket\r\n this.provider.attach();\r\n\r\n if (!options?.quiet) {\r\n console.info(`Hocuspocus Provider initialized (multiplexed): ${name}`);\r\n }\r\n } else {\r\n // Standalone mode - create own WebSocket connection\r\n this.usesSharedSocket = false;\r\n\r\n const config: any = {\r\n url,\r\n name,\r\n document: doc,\r\n token: options?.token || null,\r\n onConnect: () => {\r\n this.isConnected = true;\r\n if (!options?.quiet) {\r\n console.info(`Hocuspocus connected: ${name}`);\r\n }\r\n if (options?.onConnect) {\r\n options.onConnect();\r\n }\r\n },\r\n onDisconnect: () => {\r\n this.isConnected = false;\r\n this.isSynced = false;\r\n if (!options?.quiet) {\r\n console.info(`Hocuspocus disconnected: ${name}`);\r\n }\r\n if (options?.onDisconnect) {\r\n options.onDisconnect();\r\n }\r\n },\r\n onSynced: () => {\r\n this.isSynced = true;\r\n if (!options?.quiet) {\r\n console.info(`Hocuspocus synced: ${name}`);\r\n }\r\n if (options?.onSynced) {\r\n options.onSynced();\r\n }\r\n },\r\n };\r\n\r\n // Add optional settings\r\n if (options?.forceSyncInterval !== undefined) {\r\n config.forceSyncInterval = options.forceSyncInterval;\r\n }\r\n\r\n if (options?.onAuthenticationFailed) {\r\n config.onAuthenticationFailed = options.onAuthenticationFailed;\r\n }\r\n\r\n if (options?.onStatus) {\r\n config.onStatus = options.onStatus;\r\n }\r\n\r\n if (options?.WebSocketPolyfill) {\r\n config.WebSocketPolyfill = options.WebSocketPolyfill;\r\n }\r\n\r\n this.provider = new HocuspocusProvider(config);\r\n\r\n if (!options?.quiet) {\r\n console.info(`Hocuspocus Provider initialized: ${url}/${name}`);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Create a shared WebSocket connection for multiplexing\r\n * Call this once to create a shared connection that multiple providers can use\r\n */\r\n static createSharedWebSocket(options: HocuspocusWebSocketOptions): HocuspocusProviderWebsocket {\r\n if (HocuspocusSyncProvider.sharedWebSocketProvider) {\r\n console.warn('Shared WebSocket already exists. Returning existing instance.');\r\n return HocuspocusSyncProvider.sharedWebSocketProvider;\r\n }\r\n\r\n const config: any = {\r\n url: options.url,\r\n };\r\n\r\n if (options.WebSocketPolyfill) {\r\n config.WebSocketPolyfill = options.WebSocketPolyfill;\r\n }\r\n\r\n if (options.onConnect) {\r\n config.onConnect = options.onConnect;\r\n }\r\n\r\n if (options.onDisconnect) {\r\n config.onDisconnect = options.onDisconnect;\r\n }\r\n\r\n if (options.onStatus) {\r\n config.onStatus = options.onStatus;\r\n }\r\n\r\n HocuspocusSyncProvider.sharedWebSocketProvider = new HocuspocusProviderWebsocket(config);\r\n console.info(`Shared Hocuspocus WebSocket created: ${options.url}`);\r\n\r\n return HocuspocusSyncProvider.sharedWebSocketProvider;\r\n }\r\n\r\n /**\r\n * Destroy the shared WebSocket connection\r\n * Call this when you're done with all multiplexed providers\r\n */\r\n static destroySharedWebSocket(): void {\r\n if (HocuspocusSyncProvider.sharedWebSocketProvider) {\r\n HocuspocusSyncProvider.sharedWebSocketProvider.destroy();\r\n HocuspocusSyncProvider.sharedWebSocketProvider = null;\r\n console.info('Shared Hocuspocus WebSocket destroyed');\r\n }\r\n }\r\n\r\n /**\r\n * Get the shared WebSocket provider instance (if it exists)\r\n */\r\n static getSharedWebSocket(): HocuspocusProviderWebsocket | null {\r\n return HocuspocusSyncProvider.sharedWebSocketProvider;\r\n }\r\n\r\n /**\r\n * Static factory method for creating HocuspocusSyncProvider with configuration options\r\n * Returns a ProviderFactory that can be used in sync configuration\r\n */\r\n static with(options?: HocuspocusOptions): ProviderFactory {\r\n return {\r\n create: (docName: string, doc: Y.Doc) => {\r\n return new HocuspocusSyncProvider(docName, doc, options);\r\n },\r\n };\r\n }\r\n\r\n async connect(): Promise<void> {\r\n if (this.isSynced) {\r\n return;\r\n }\r\n\r\n return new Promise<void>((resolve, reject) => {\r\n const timeout = setTimeout(() => {\r\n reject(new Error('Hocuspocus connection timeout'));\r\n }, 10000); // 10 second timeout\r\n\r\n const syncHandler = () => {\r\n clearTimeout(timeout);\r\n this.provider.off('synced', syncHandler);\r\n resolve();\r\n };\r\n\r\n this.provider.on('synced', syncHandler);\r\n\r\n // If already synced, resolve immediately\r\n if (this.provider.isSynced) {\r\n clearTimeout(timeout);\r\n this.provider.off('synced', syncHandler);\r\n resolve();\r\n return;\r\n }\r\n\r\n // Connect if not already connected (standalone mode only)\r\n if (!this.isConnected && !this.usesSharedSocket) {\r\n this.provider.connect();\r\n }\r\n });\r\n }\r\n\r\n disconnect(): void {\r\n if (this.provider) {\r\n if (this.usesSharedSocket) {\r\n // Detach from shared socket instead of disconnecting\r\n this.provider.detach();\r\n } else {\r\n this.provider.disconnect();\r\n }\r\n }\r\n this.isConnected = false;\r\n this.isSynced = false;\r\n }\r\n\r\n destroy(): void {\r\n if (this.provider) {\r\n this.provider.destroy();\r\n }\r\n this.isConnected = false;\r\n this.isSynced = false;\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { IndexeddbPersistence } from "y-indexeddb";
|
|
2
|
+
/**
|
|
3
|
+
* IndexedDB sync provider for local persistence
|
|
4
|
+
*/
|
|
5
|
+
export class IndexedDBSyncProvider {
|
|
6
|
+
provider;
|
|
7
|
+
isConnected = false;
|
|
8
|
+
constructor(docName, doc, options) {
|
|
9
|
+
const dbName = options?.name || docName;
|
|
10
|
+
this.provider = new IndexeddbPersistence(dbName, doc);
|
|
11
|
+
console.info(`IndexedDB Persistence initialized: ${dbName}`);
|
|
12
|
+
}
|
|
13
|
+
async connect() {
|
|
14
|
+
if (this.isConnected) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
return new Promise(resolve => {
|
|
18
|
+
this.provider.on('synced', () => {
|
|
19
|
+
this.isConnected = true;
|
|
20
|
+
resolve();
|
|
21
|
+
});
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
disconnect() {
|
|
25
|
+
// IndexedDB doesn't need explicit disconnect
|
|
26
|
+
this.isConnected = false;
|
|
27
|
+
}
|
|
28
|
+
destroy() {
|
|
29
|
+
if (this.provider) {
|
|
30
|
+
this.provider.destroy();
|
|
31
|
+
}
|
|
32
|
+
this.isConnected = false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=indexeddb-sync-provider.class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexeddb-sync-provider.class.js","sourceRoot":"","sources":["../../../src/classes/providers/indexeddb-sync-provider.class.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAanD;;GAEG;AACH,MAAM,OAAO,qBAAqB;IACxB,QAAQ,CAAuB;IAC/B,WAAW,GAAY,KAAK,CAAC;IAErC,YAAY,OAAe,EAAE,GAAU,EAAE,OAA0B;QACjE,MAAM,MAAM,GAAG,OAAO,EAAE,IAAI,IAAI,OAAO,CAAC;QACxC,IAAI,CAAC,QAAQ,GAAG,IAAI,oBAAoB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,sCAAsC,MAAM,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,OAAO,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE;YACjC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;gBAC9B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBACxB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,UAAU;QACR,6CAA6C;QAC7C,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;CACF","sourcesContent":["import * as Y from 'yjs';\r\nimport { IndexeddbPersistence } from 'y-indexeddb';\r\nimport { ISyncProvider } from '../../interfaces/sync-provider.interface';\r\n\r\n/**\r\n * Options for IndexedDB sync provider\r\n */\r\nexport interface IndexedDBOptions {\r\n /**\r\n * Custom database name (optional)\r\n */\r\n name?: string;\r\n}\r\n\r\n/**\r\n * IndexedDB sync provider for local persistence\r\n */\r\nexport class IndexedDBSyncProvider implements ISyncProvider {\r\n private provider: IndexeddbPersistence;\r\n private isConnected: boolean = false;\r\n\r\n constructor(docName: string, doc: Y.Doc, options?: IndexedDBOptions) {\r\n const dbName = options?.name || docName;\r\n this.provider = new IndexeddbPersistence(dbName, doc);\r\n console.info(`IndexedDB Persistence initialized: ${dbName}`);\r\n }\r\n\r\n async connect(): Promise<void> {\r\n if (this.isConnected) {\r\n return;\r\n }\r\n\r\n return new Promise<void>(resolve => {\r\n this.provider.on('synced', () => {\r\n this.isConnected = true;\r\n resolve();\r\n });\r\n });\r\n }\r\n\r\n disconnect(): void {\r\n // IndexedDB doesn't need explicit disconnect\r\n this.isConnected = false;\r\n }\r\n\r\n destroy(): void {\r\n if (this.provider) {\r\n this.provider.destroy();\r\n }\r\n this.isConnected = false;\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { WebsocketProvider } from "y-websocket";
|
|
2
|
+
/**
|
|
3
|
+
* WebSocket sync provider for real-time collaboration
|
|
4
|
+
*/
|
|
5
|
+
export class WebSocketSyncProvider {
|
|
6
|
+
provider;
|
|
7
|
+
isConnected = false;
|
|
8
|
+
constructor(docName, doc, options) {
|
|
9
|
+
const url = options?.url || 'ws://localhost:1234';
|
|
10
|
+
const roomName = options?.roomName || docName;
|
|
11
|
+
this.provider = new WebsocketProvider(url, roomName, doc, {
|
|
12
|
+
params: options?.params,
|
|
13
|
+
protocols: options?.protocols,
|
|
14
|
+
WebSocketPolyfill: options?.WebSocketPolyfill,
|
|
15
|
+
awareness: options?.awareness,
|
|
16
|
+
maxBackoffTime: options?.maxBackoffTime,
|
|
17
|
+
disableBc: true,
|
|
18
|
+
});
|
|
19
|
+
this.setupEventListeners();
|
|
20
|
+
console.info(`WebSocket Provider initialized: ${url}/${roomName}`);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Static factory method for creating WebSocketSyncProvider with configuration options
|
|
24
|
+
* Returns a ProviderFactory that can be used in sync configuration
|
|
25
|
+
*/
|
|
26
|
+
static with(options) {
|
|
27
|
+
return {
|
|
28
|
+
create: (docName, doc) => {
|
|
29
|
+
return new WebSocketSyncProvider(docName, doc, options);
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
setupEventListeners() {
|
|
34
|
+
this.provider.on('status', ({ status }) => {
|
|
35
|
+
if (status === 'connected') {
|
|
36
|
+
this.isConnected = true;
|
|
37
|
+
console.info('WebSocket connected');
|
|
38
|
+
}
|
|
39
|
+
else if (status === 'disconnected') {
|
|
40
|
+
this.isConnected = false;
|
|
41
|
+
console.info('WebSocket disconnected');
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
this.provider.on('sync', (synced) => {
|
|
45
|
+
if (synced) {
|
|
46
|
+
console.info('WebSocket synced');
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
async connect() {
|
|
51
|
+
if (this.isConnected) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
return new Promise((resolve, reject) => {
|
|
55
|
+
const timeout = setTimeout(() => {
|
|
56
|
+
reject(new Error('WebSocket connection timeout'));
|
|
57
|
+
}, 10000); // 10 second timeout
|
|
58
|
+
const statusHandler = ({ status }) => {
|
|
59
|
+
if (status === 'connected') {
|
|
60
|
+
clearTimeout(timeout);
|
|
61
|
+
this.provider.off('status', statusHandler);
|
|
62
|
+
this.isConnected = true;
|
|
63
|
+
resolve();
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
this.provider.on('status', statusHandler);
|
|
67
|
+
// If already connected, resolve immediately
|
|
68
|
+
if (this.provider.wsconnected) {
|
|
69
|
+
clearTimeout(timeout);
|
|
70
|
+
this.provider.off('status', statusHandler);
|
|
71
|
+
this.isConnected = true;
|
|
72
|
+
resolve();
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
disconnect() {
|
|
77
|
+
if (this.provider) {
|
|
78
|
+
this.provider.disconnect();
|
|
79
|
+
}
|
|
80
|
+
this.isConnected = false;
|
|
81
|
+
}
|
|
82
|
+
destroy() {
|
|
83
|
+
if (this.provider) {
|
|
84
|
+
this.provider.destroy();
|
|
85
|
+
}
|
|
86
|
+
this.isConnected = false;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=websocket-sync-provider.class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-sync-provider.class.js","sourceRoot":"","sources":["../../../src/classes/providers/websocket-sync-provider.class.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Y from 'yjs';\r\nimport { WebsocketProvider } from 'y-websocket';\r\nimport { ISyncProvider, ProviderFactory } from '../../interfaces/sync-provider.interface';\r\n\r\n/**\r\n * Options for WebSocket sync provider\r\n */\r\nexport interface WebSocketOptions {\r\n /**\r\n * WebSocket server URL (optional, defaults to ws://localhost:1234)\r\n */\r\n url?: string;\r\n\r\n /**\r\n * Room/document name (optional, defaults to docName)\r\n */\r\n roomName?: string;\r\n\r\n /**\r\n * Connection parameters (optional)\r\n */\r\n params?: Record<string, string>;\r\n\r\n /**\r\n * WebSocket protocols (optional)\r\n */\r\n protocols?: string[];\r\n\r\n /**\r\n * Custom WebSocket constructor (optional, for Node.js environments)\r\n */\r\n WebSocketPolyfill?: any;\r\n\r\n /**\r\n * Awareness protocol options (optional)\r\n */\r\n awareness?: any;\r\n\r\n /**\r\n * Maximum number of connection attempts (optional, defaults to Infinity)\r\n */\r\n maxBackoffTime?: number;\r\n}\r\n\r\n/**\r\n * WebSocket sync provider for real-time collaboration\r\n */\r\nexport class WebSocketSyncProvider implements ISyncProvider {\r\n private provider: WebsocketProvider;\r\n private isConnected: boolean = false;\r\n\r\n constructor(docName: string, doc: Y.Doc, options?: WebSocketOptions) {\r\n const url = options?.url || 'ws://localhost:1234';\r\n const roomName = options?.roomName || docName;\r\n\r\n this.provider = new WebsocketProvider(url, roomName, doc, {\r\n params: options?.params,\r\n protocols: options?.protocols,\r\n WebSocketPolyfill: options?.WebSocketPolyfill,\r\n awareness: options?.awareness,\r\n maxBackoffTime: options?.maxBackoffTime,\r\n disableBc: true,\r\n });\r\n\r\n this.setupEventListeners();\r\n console.info(`WebSocket Provider initialized: ${url}/${roomName}`);\r\n }\r\n\r\n /**\r\n * Static factory method for creating WebSocketSyncProvider with configuration options\r\n * Returns a ProviderFactory that can be used in sync configuration\r\n */\r\n static with(options?: WebSocketOptions): ProviderFactory {\r\n return {\r\n create: (docName: string, doc: Y.Doc) => {\r\n return new WebSocketSyncProvider(docName, doc, options);\r\n },\r\n };\r\n }\r\n\r\n private setupEventListeners(): void {\r\n this.provider.on('status', ({ status }: { status: string }) => {\r\n if (status === 'connected') {\r\n this.isConnected = true;\r\n console.info('WebSocket connected');\r\n } else if (status === 'disconnected') {\r\n this.isConnected = false;\r\n console.info('WebSocket disconnected');\r\n }\r\n });\r\n\r\n this.provider.on('sync', (synced: boolean) => {\r\n if (synced) {\r\n console.info('WebSocket synced');\r\n }\r\n });\r\n }\r\n\r\n async connect(): Promise<void> {\r\n if (this.isConnected) {\r\n return;\r\n }\r\n\r\n return new Promise<void>((resolve, reject) => {\r\n const timeout = setTimeout(() => {\r\n reject(new Error('WebSocket connection timeout'));\r\n }, 10000); // 10 second timeout\r\n\r\n const statusHandler = ({ status }: { status: string }) => {\r\n if (status === 'connected') {\r\n clearTimeout(timeout);\r\n this.provider.off('status', statusHandler);\r\n this.isConnected = true;\r\n resolve();\r\n }\r\n };\r\n\r\n this.provider.on('status', statusHandler);\r\n\r\n // If already connected, resolve immediately\r\n if (this.provider.wsconnected) {\r\n clearTimeout(timeout);\r\n this.provider.off('status', statusHandler);\r\n this.isConnected = true;\r\n resolve();\r\n }\r\n });\r\n }\r\n\r\n disconnect(): void {\r\n if (this.provider) {\r\n this.provider.disconnect();\r\n }\r\n this.isConnected = false;\r\n }\r\n\r\n destroy(): void {\r\n if (this.provider) {\r\n this.provider.destroy();\r\n }\r\n this.isConnected = false;\r\n }\r\n}\r\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
class KritzelIconRegistry {
|
|
1
|
+
export class KritzelIconRegistry {
|
|
2
2
|
static registry = new Map();
|
|
3
3
|
static register(name, svgContent) {
|
|
4
4
|
if (this.registry.has(name)) {
|
|
@@ -44,8 +44,4 @@ KritzelIconRegistry.registerIcons({
|
|
|
44
44
|
'x': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-x-icon lucide-x"><path d="M18 6 6 18"/><path d="m6 6 12 12"/></svg>',
|
|
45
45
|
'check': '<svg width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-check-icon lucide-check"><path d="M20 6 9 17l-5-5"/></svg>'
|
|
46
46
|
});
|
|
47
|
-
|
|
48
|
-
export { KritzelIconRegistry as K };
|
|
49
|
-
//# sourceMappingURL=icon-registry.class-BtT8riKh.js.map
|
|
50
|
-
|
|
51
|
-
//# sourceMappingURL=icon-registry.class-BtT8riKh.js.map
|
|
47
|
+
//# sourceMappingURL=icon-registry.class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icon-registry.class.js","sourceRoot":"","sources":["../../../src/classes/registries/icon-registry.class.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,mBAAmB;IACtB,MAAM,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE7C,MAAM,CAAC,QAAQ,CAAC,IAAY,EAAE,UAAkB;QACrD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,wBAAwB,IAAI,kDAAkD,CAAC,CAAC;QAC/F,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACtC,CAAC;IAEM,MAAM,CAAC,GAAG,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAEM,MAAM,CAAC,aAAa,CAAC,KAAgC;QAC1D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;gBACtD,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,GAAG,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;;AAGH,mBAAmB,CAAC,aAAa,CAAC;IAChC,QAAQ,EAAE,4SAA4S;IACtT,KAAK,EAAE,wSAAwS;IAC/S,aAAa,EAAE,2TAA2T;IAC1U,QAAQ,EAAE,qSAAqS;IAC/S,MAAM,EAAE,8QAA8Q;IACtR,OAAO,EAAE,sSAAsS;IAC/S,cAAc,EAAE,oLAAoL;IACpM,YAAY,EAAE,sLAAsL;IACpM,MAAM,EAAE,mUAAmU;IAC3U,OAAO,EAAE,6aAA6a;IACtb,KAAK,EAAE,+VAA+V;IACtW,QAAQ,EAAE,6YAA6Y;IACvZ,gBAAgB,EAAE,kSAAkS;IACpT,cAAc,EAAE,qSAAqS;IACrT,YAAY,EAAE,0bAA0b;IACxc,UAAU,EAAE,gVAAgV;IAC5V,MAAM,EAAE,iRAAiR;IACzR,MAAM,EAAE,mRAAmR;IAC3R,MAAM,EAAE,iPAAiP;IACzP,mBAAmB,EAAE,8TAA8T;IACnV,GAAG,EAAE,8OAA8O;IACnP,OAAO,EAAE,qOAAqO;CAC/O,CAAC,CAAC","sourcesContent":["export class KritzelIconRegistry {\r\n private static registry = new Map<string, string>();\r\n\r\n public static register(name: string, svgContent: string): void {\r\n if (this.registry.has(name)) {\r\n console.warn(`[IconRegistry] Icon \"${name}\" is already registered. It will be overwritten.`);\r\n }\r\n this.registry.set(name, svgContent);\r\n }\r\n\r\n public static get(name: string): string | undefined {\r\n return this.registry.get(name);\r\n }\r\n\r\n public static registerIcons(icons: { [key: string]: string }): void {\r\n for (const name in icons) {\r\n if (Object.prototype.hasOwnProperty.call(icons, name)) {\r\n this.register(name, icons[name]);\r\n }\r\n }\r\n }\r\n\r\n public static has(name: string): boolean {\r\n return this.registry.has(name);\r\n }\r\n}\r\n\r\nKritzelIconRegistry.registerIcons({\r\n 'cursor': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M4.037 4.688a.495.495 0 0 1 .651-.651l16 6.5a.5.5 0 0 1-.063.947l-6.124 1.58a2 2 0 0 0-1.438 1.435l-1.579 6.126a.5.5 0 0 1-.947.063z\"/></svg>',\r\n 'pen': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z\"/></svg>',\r\n 'highlighter': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-highlighter-icon lucide-highlighter\"><path d=\"m9 11-6 6v3h9l3-3\"/><path d=\"m22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4\"/></svg>',\r\n 'eraser': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m7 21-4.3-4.3c-1-1-1-2.5 0-3.4l9.6-9.6c1-1 2.5-1 3.4 0l5.6 5.6c1 1 1 2.5 0 3.4L13 21\"/><path d=\"M22 21H7\"/><path d=\"m5 11 9 9\"/></svg>',\r\n 'type': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"4 7 4 4 20 4 20 7\"/><line x1=\"9\" x2=\"15\" y1=\"20\" y2=\"20\"/><line x1=\"12\" x2=\"12\" y1=\"4\" y2=\"20\"/></svg>',\r\n 'image': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect width=\"18\" height=\"18\" x=\"3\" y=\"3\" rx=\"2\" ry=\"2\"/><circle cx=\"9\" cy=\"9\" r=\"2\"/><path d=\"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\"/></svg>',\r\n 'chevron-down': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m6 9 6 6 6-6\"/></svg>',\r\n 'chevron-up': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"m18 15-6-6-6 6\"/></svg>',\r\n 'copy': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-copy-icon lucide-copy\"><rect width=\"14\" height=\"14\" x=\"8\" y=\"8\" rx=\"2\" ry=\"2\"/><path d=\"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\"/></svg>',\r\n 'paste': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-clipboard-paste-icon lucide-clipboard-paste\"><path d=\"M11 14h10\"/><path d=\"M16 4h2a2 2 0 0 1 2 2v1.344\"/><path d=\"m17 18 4-4-4-4\"/><path d=\"M8 4H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 1.793-1.113\"/><rect x=\"8\" y=\"2\" width=\"8\" height=\"4\" rx=\"1\"/></svg>',\r\n 'cut': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-scissors-icon lucide-scissors\"><circle cx=\"6\" cy=\"6\" r=\"3\"/><path d=\"M8.12 8.12 12 12\"/><path d=\"M20 4 8.12 15.88\"/><circle cx=\"6\" cy=\"18\" r=\"3\"/><path d=\"M14.8 14.8 20 20\"/></svg>',\r\n 'delete': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-trash2-icon lucide-trash-2\"><path d=\"M3 6h18\"/><path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\"/><path d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\"/><line x1=\"10\" x2=\"10\" y1=\"11\" y2=\"17\"/><line x1=\"14\" x2=\"14\" y1=\"11\" y2=\"17\"/></svg>',\r\n 'bring-to-front': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-arrow-up-to-line-icon lucide-arrow-up-to-line\"><path d=\"M5 3h14\"/><path d=\"m18 13-6-6-6 6\"/><path d=\"M12 7v14\"/></svg>',\r\n 'send-to-back': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-arrow-down-to-line-icon lucide-arrow-down-to-line\"><path d=\"M12 17V3\"/><path d=\"m6 11 6 6 6-6\"/><path d=\"M19 21H5\"/></svg>',\r\n 'select-all': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-square-mouse-pointer-icon lucide-square-mouse-pointer\"><path d=\"M12.034 12.681a.498.498 0 0 1 .647-.647l9 3.5a.5.5 0 0 1-.033.943l-3.444 1.068a1 1 0 0 0-.66.66l-1.067 3.443a.5.5 0 0 1-.943.033z\"/><path d=\"M21 11V5a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h6\"/></svg>',\r\n 'download': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-download-icon lucide-download\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"/><polyline points=\"7 10 12 15 17 10\"/><line x1=\"12\" x2=\"12\" y1=\"15\" y2=\"3\"/></svg>',\r\n 'undo': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-undo-icon lucide-undo\"><path d=\"M3 7v6h6\"/><path d=\"M21 17a9 9 0 0 0-9-9 9 9 0 0 0-6 2.3L3 13\"/></svg>',\r\n 'redo': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-redo-icon lucide-redo\"><path d=\"M21 7v6h-6\"/><path d=\"M3 17a9 9 0 0 1 9-9 9 9 0 0 1 6 2.3l3 2.7\"/></svg>',\r\n 'plus': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-plus-icon lucide-plus\"><path d=\"M5 12h14\"/><path d=\"M12 5v14\"/></svg>',\r\n 'ellipsis-vertical': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-ellipsis-vertical-icon lucide-ellipsis-vertical\"><circle cx=\"12\" cy=\"12\" r=\"1\"/><circle cx=\"12\" cy=\"5\" r=\"1\"/><circle cx=\"12\" cy=\"19\" r=\"1\"/></svg>',\r\n 'x': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-x-icon lucide-x\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg>',\r\n 'check': '<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"lucide lucide-check-icon lucide-check\"><path d=\"M20 6 9 17l-5-5\"/></svg>'\r\n});"]}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export class KritzelToolRegistry {
|
|
2
|
+
static registry = {};
|
|
3
|
+
static registerTool(toolName, constructor, core) {
|
|
4
|
+
const toolInstance = new constructor(core);
|
|
5
|
+
toolInstance.name = toolName;
|
|
6
|
+
this.registry[toolName] = toolInstance;
|
|
7
|
+
return toolInstance;
|
|
8
|
+
}
|
|
9
|
+
static getTool(toolName) {
|
|
10
|
+
const toolInstance = this.registry[toolName];
|
|
11
|
+
if (!toolInstance) {
|
|
12
|
+
console.warn(`Unknown tool: ${toolName}`);
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
return toolInstance;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=tool.registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.registry.js","sourceRoot":"","sources":["../../../src/classes/registries/tool.registry.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,mBAAmB;IACxB,MAAM,CAAC,QAAQ,GAAoC,EAAE,CAAC;IAE5D,MAAM,CAAC,YAAY,CAAC,QAAgB,EAAE,WAAuD,EAAE,IAAiB;QAC9G,MAAM,YAAY,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;QAC3C,YAAY,CAAC,IAAI,GAAG,QAAQ,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC;QACvC,OAAO,YAAY,CAAC;IACtB,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,QAAgB;QAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE7C,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,OAAO,CAAC,IAAI,CAAC,iBAAiB,QAAQ,EAAE,CAAC,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC","sourcesContent":["import { KritzelCore } from \"../core/core.class\";\r\nimport { KritzelBaseTool } from \"../tools/base-tool.class\";\r\n\r\nexport class KritzelToolRegistry {\r\nprivate static registry: Record<string, KritzelBaseTool> = {};\r\n\r\n static registerTool(toolName: string, constructor: new (core: KritzelCore) => KritzelBaseTool, core: KritzelCore): KritzelBaseTool {\r\n const toolInstance = new constructor(core);\r\n toolInstance.name = toolName;\r\n this.registry[toolName] = toolInstance;\r\n return toolInstance;\r\n }\r\n\r\n static getTool(toolName: string): KritzelBaseTool | null {\r\n const toolInstance = this.registry[toolName];\r\n\r\n if (!toolInstance) {\r\n console.warn(`Unknown tool: ${toolName}`);\r\n return null;\r\n }\r\n\r\n return toolInstance;\r\n }\r\n}\r\n"]}
|