kritzel-stencil 0.0.157 → 0.0.159
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 +20957 -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 +1613 -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-BAplhrRJ.js +35593 -0
- package/dist/components/p-BAplhrRJ.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/{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} +1806 -90
- 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-2YFQA3SF.js +2 -0
- package/dist/stencil/p-2YFQA3SF.js.map +1 -0
- package/dist/stencil/p-2e85a4af.entry.js +10 -0
- package/dist/stencil/p-2e85a4af.entry.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/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +0 -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 @@
|
|
|
1
|
+
{"version":3,"file":"selection-group.class.js","sourceRoot":"","sources":["../../../src/classes/objects/selection-group.class.ts"],"names":[],"mappings":"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","sourcesContent":["import { KritzelCore } from '../core/core.class';\r\nimport { KritzelBaseObject } from './base-object.class';\r\n\r\ninterface UnchangedObjectSnapshot {\r\n id: string;\r\n translateX: number;\r\n translateY: number;\r\n rotation: number;\r\n width: number;\r\n height: number;\r\n totalWidth: number;\r\n totalHeight: number;\r\n scale: number;\r\n}\r\n\r\nexport class KritzelSelectionGroup extends KritzelBaseObject<HTMLElement> {\r\n override __class__: string = 'KritzelSelectionGroup';\r\n\r\n // Store only object IDs instead of full objects\r\n objectIds: string[] = [];\r\n \r\n // Store snapshots of object state for transformations (rotation, resize)\r\n unchangedObjectSnapshots: Map<string, UnchangedObjectSnapshot> = new Map();\r\n\r\n minX: number;\r\n maxX: number;\r\n\r\n minY: number;\r\n maxY: number;\r\n\r\n // Getter to retrieve actual objects from the store by their IDs\r\n get objects(): KritzelBaseObject<any>[] {\r\n return this.objectIds\r\n .map(id => {\r\n const found = this._core.store.state.objects.filter(obj => obj.id === id);\r\n return found.length > 0 ? found[0] : null;\r\n })\r\n .filter(obj => obj !== null) as KritzelBaseObject<any>[];\r\n }\r\n\r\n get length(): number {\r\n return this.objectIds.length;\r\n }\r\n\r\n static override create(core: KritzelCore): KritzelSelectionGroup {\r\n const object = new KritzelSelectionGroup();\r\n\r\n object._core = core;\r\n object.id = object.generateId();\r\n object.workspaceId = core.store.state.activeWorkspace.id;\r\n object.scale = core.store.state.scale;\r\n object.zIndex = 99999;\r\n\r\n return object;\r\n }\r\n\r\n addOrRemove(object: KritzelBaseObject<any>) {\r\n const index = this.objectIds.findIndex(id => id === object.id);\r\n if (index === -1) {\r\n this.objectIds.push(object.id);\r\n } else {\r\n this.objectIds.splice(index, 1);\r\n }\r\n\r\n this.captureUnchangedSnapshots();\r\n this.refreshObjectDimensions();\r\n }\r\n\r\n deselectAllChildren() {\r\n this.objects.forEach(obj => (obj.isSelected = false));\r\n }\r\n\r\n updateWorkspaceId(workspaceId: string) {\r\n this.workspaceId = workspaceId;\r\n this.objects.forEach(obj => (obj.workspaceId = workspaceId));\r\n }\r\n\r\n updateZIndices(startZIndex: number) {\r\n this.objects.forEach((obj, i) => {\r\n obj.zIndex = startZIndex + i;\r\n });\r\n }\r\n\r\n updatePosition(x: number, y: number) {\r\n this.objects.forEach(obj => {\r\n const deltaX = obj.translateX - this.translateX;\r\n const deltaY = obj.translateY - this.translateY;\r\n obj.updatePosition(x + deltaX, y + deltaY);\r\n });\r\n\r\n // Update snapshots\r\n this.unchangedObjectSnapshots.forEach(snapshot => {\r\n const deltaX = snapshot.translateX - this.translateX;\r\n const deltaY = snapshot.translateY - this.translateY;\r\n snapshot.translateX = x + deltaX;\r\n snapshot.translateY = x + deltaY;\r\n });\r\n\r\n this.translateX = x;\r\n this.translateY = y;\r\n\r\n this._core.store.state.objects.update(this);\r\n }\r\n\r\n /**\r\n * Capture snapshots of current object states for undo/redo operations\r\n */\r\n private captureUnchangedSnapshots(): void {\r\n this.unchangedObjectSnapshots.clear();\r\n this.objects.forEach(obj => {\r\n this.unchangedObjectSnapshots.set(obj.id, {\r\n id: obj.id,\r\n translateX: obj.translateX,\r\n translateY: obj.translateY,\r\n rotation: obj.rotation,\r\n width: obj.width,\r\n height: obj.height,\r\n totalWidth: obj.totalWidth,\r\n totalHeight: obj.totalHeight,\r\n scale: obj.scale,\r\n });\r\n });\r\n }\r\n\r\n override serialize() {\r\n const { _core, _elementRef, element, totalWidth, totalHeight, unchangedObjectSnapshots, ...remainingProps } = this as any;\r\n\r\n const clonedProps = structuredClone(remainingProps);\r\n\r\n if (element && typeof element === 'object' && 'nodeType' in element && element.nodeType === 1) {\r\n clonedProps.element = element.cloneNode(true) as HTMLElement;\r\n }\r\n\r\n // Convert Map to plain object for serialization\r\n clonedProps.unchangedObjectSnapshots = Object.fromEntries(this.unchangedObjectSnapshots);\r\n\r\n return clonedProps;\r\n }\r\n\r\n override deserialize<T>(object: any): T {\r\n // First, deserialize all base properties using parent's deserialize\r\n super.deserialize(object);\r\n\r\n // Restore the Map from serialized object\r\n if (object.unchangedObjectSnapshots) {\r\n this.unchangedObjectSnapshots = new Map(Object.entries(object.unchangedObjectSnapshots));\r\n }\r\n\r\n return this as unknown as T;\r\n }\r\n\r\n override update(): void {\r\n // Only update the selection group itself\r\n // Child objects are already updated during move/resize/rotate operations\r\n // Updating them again here would create redundant y.js updates\r\n this._core.store.state.objects.update(this);\r\n }\r\n\r\n override move(startX: number, startY: number, endX: number, endY: number): void {\r\n const deltaX = (startX - endX) / this._core.store.state.scale;\r\n const deltaY = (startY - endY) / this._core.store.state.scale;\r\n\r\n this.translateX += deltaX;\r\n this.translateY += deltaY;\r\n\r\n this._core.store.state.objects.transaction(() => {\r\n this._core.store.state.objects.update(this);\r\n\r\n this.objects.forEach(obj => {\r\n obj.move(startX, startY, endX, endY);\r\n });\r\n });\r\n\r\n // Update snapshots\r\n this.unchangedObjectSnapshots.forEach(snapshot => {\r\n snapshot.translateX += deltaX;\r\n snapshot.translateY += deltaY;\r\n });\r\n }\r\n\r\n override resize(x: number, y: number, width: number, height: number): void {\r\n const widthScaleFactor = width / this.width;\r\n const heightScaleFactor = height / this.height;\r\n\r\n const deltaX = x - this.translateX;\r\n const deltaY = y - this.translateY;\r\n\r\n this._core.store.state.objects.transaction(() => {\r\n this.objects.forEach(child => {\r\n const updatedWidth = child.width * widthScaleFactor;\r\n const updatedHeight = child.height * heightScaleFactor;\r\n\r\n const updatedX = child.translateX + deltaX + (child.translateX - this.translateX) * (widthScaleFactor - 1);\r\n const updatedY = child.translateY + deltaY + (child.translateY - this.translateY) * (heightScaleFactor - 1);\r\n\r\n child.resize(updatedX, updatedY, updatedWidth, updatedHeight);\r\n });\r\n\r\n // Refresh dimensions and update the SelectionGroup to propagate changes to other tabs\r\n this.refreshObjectDimensions();\r\n this.captureUnchangedSnapshots();\r\n this._core.store.state.objects.update(this);\r\n });\r\n }\r\n\r\n override rotate(value: number): void {\r\n this.rotation = value;\r\n\r\n const centerX = this.translateX + this.totalWidth / 2 / this.scale;\r\n const centerY = this.translateY + this.totalHeight / 2 / this.scale;\r\n\r\n const angle = value;\r\n const cos = Math.cos(angle);\r\n const sin = Math.sin(angle);\r\n\r\n this._core.store.state.objects.transaction(() => {\r\n // Update the SelectionGroup itself to propagate rotation to other tabs\r\n this._core.store.state.objects.update(this);\r\n\r\n this.objects.forEach(child => {\r\n const unchangedSnapshot = this.unchangedObjectSnapshots.get(child.id);\r\n if (!unchangedSnapshot) return;\r\n\r\n const offsetX = this.getOffsetXToCenterFromSnapshot(unchangedSnapshot);\r\n const offsetY = this.getOffsetYToCenterFromSnapshot(unchangedSnapshot);\r\n\r\n const rotatedX = cos * offsetX - sin * offsetY;\r\n const rotatedY = sin * offsetX + cos * offsetY;\r\n\r\n child.translateX = centerX + rotatedX - child.totalWidth / 2 / child.scale;\r\n child.translateY = centerY + rotatedY - child.totalHeight / 2 / child.scale;\r\n\r\n child.rotate(this.objects.length === 1 ? value : value + unchangedSnapshot.rotation);\r\n });\r\n });\r\n }\r\n\r\n override copy(): KritzelBaseObject<HTMLElement> {\r\n const selectionGroup = KritzelSelectionGroup.create(this._core);\r\n\r\n this.objects\r\n .sort((a, b) => a.zIndex - b.zIndex)\r\n .forEach(obj => {\r\n const copiedObject = obj.copy() as KritzelBaseObject<any>;\r\n selectionGroup.addOrRemove(copiedObject);\r\n });\r\n\r\n selectionGroup.captureUnchangedSnapshots();\r\n\r\n if (this.objects.length === 1) {\r\n selectionGroup.rotation = this.objects[0].rotation;\r\n }\r\n\r\n return selectionGroup;\r\n }\r\n\r\n refreshObjectDimensions() {\r\n if (this.objects.length === 1) {\r\n const obj = this.objects[0];\r\n this.minX = obj.boundingBox.x / this.scale;\r\n this.maxX = obj.boundingBox.x / this.scale + obj.boundingBox.width;\r\n this.minY = obj.boundingBox.y / this.scale;\r\n this.maxY = obj.boundingBox.y / this.scale + obj.boundingBox.height;\r\n\r\n this.translateX = (this.minX - this.padding) * this.scale;\r\n this.translateY = (this.minY - this.padding) * this.scale;\r\n\r\n this.width = (this.maxX - this.minX - this.padding) * this.scale;\r\n this.height = (this.maxY - this.minY - this.padding) * this.scale;\r\n } else {\r\n this.minX = Math.min(...this.objects.map(obj => obj.minXRotated));\r\n this.maxX = Math.max(...this.objects.map(obj => obj.maxXRotated));\r\n\r\n this.minY = Math.min(...this.objects.map(obj => obj.minYRotated));\r\n this.maxY = Math.max(...this.objects.map(obj => obj.maxYRotated));\r\n\r\n this.translateX = this.minX - this.padding;\r\n this.translateY = this.minY - this.padding;\r\n\r\n this.width = (this.maxX - this.minX - this.padding) * this.scale;\r\n this.height = (this.maxY - this.minY - this.padding) * this.scale;\r\n }\r\n\r\n this._core.store.state.objects.update(this);\r\n }\r\n\r\n private getOffsetXToCenterFromSnapshot(snapshot: UnchangedObjectSnapshot): number {\r\n const objCenterX = snapshot.translateX + snapshot.totalWidth / snapshot.scale / 2;\r\n const groupCenterX = this.translateX + this.totalWidth / this.scale / 2;\r\n return objCenterX - groupCenterX;\r\n }\r\n\r\n private getOffsetYToCenterFromSnapshot(snapshot: UnchangedObjectSnapshot): number {\r\n const objCenterY = snapshot.translateY + snapshot.totalHeight / snapshot.scale / 2;\r\n const groupCenterY = this.translateY + this.totalHeight / this.scale / 2;\r\n return objCenterY - groupCenterY;\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { KritzelToolRegistry } from "../registries/tool.registry";
|
|
2
|
+
import { KritzelBaseObject } from "./base-object.class";
|
|
3
|
+
import { KritzelKeyboardHelper } from "../../helpers/keyboard.helper";
|
|
4
|
+
import { KritzelDevicesHelper } from "../../helpers/devices.helper";
|
|
5
|
+
import { EditorState, TextSelection } from "prosemirror-state";
|
|
6
|
+
import { EditorView } from "prosemirror-view";
|
|
7
|
+
import { Schema } from "prosemirror-model";
|
|
8
|
+
import { schema } from "prosemirror-schema-basic";
|
|
9
|
+
import { addListNodes } from "prosemirror-schema-list";
|
|
10
|
+
import { keymap } from "prosemirror-keymap";
|
|
11
|
+
import { baseKeymap } from "prosemirror-commands";
|
|
12
|
+
export class KritzelText extends KritzelBaseObject {
|
|
13
|
+
__class__ = 'KritzelText';
|
|
14
|
+
fontFamily = 'Arial';
|
|
15
|
+
fontSize = 8;
|
|
16
|
+
fontColor = '#000000';
|
|
17
|
+
initialWidth = 1;
|
|
18
|
+
initialHeight = 1;
|
|
19
|
+
scale = 1;
|
|
20
|
+
scaleFactor = 1;
|
|
21
|
+
isDebugInfoVisible = true;
|
|
22
|
+
isEditable = true;
|
|
23
|
+
isEditing = false;
|
|
24
|
+
editor = null;
|
|
25
|
+
content = null;
|
|
26
|
+
_schema = new Schema({
|
|
27
|
+
nodes: addListNodes(schema.spec.nodes, 'paragraph block*', 'block'),
|
|
28
|
+
marks: schema.spec.marks,
|
|
29
|
+
});
|
|
30
|
+
uneditedObject = null;
|
|
31
|
+
rows = 1;
|
|
32
|
+
get isEmpty() {
|
|
33
|
+
if (!this.editor) {
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
const doc = this.editor.state.doc;
|
|
37
|
+
if (doc.content.size === 0) {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
const text = doc.textContent.trim();
|
|
41
|
+
return text.length === 0;
|
|
42
|
+
}
|
|
43
|
+
constructor(config) {
|
|
44
|
+
super();
|
|
45
|
+
if (config) {
|
|
46
|
+
this.translateX = config.translateX || 0;
|
|
47
|
+
this.translateY = config.translateY || 0;
|
|
48
|
+
this.fontSize = config.fontSize || 8;
|
|
49
|
+
this.fontFamily = config.fontFamily || 'Arial';
|
|
50
|
+
this.fontColor = config.fontColor || '#000000';
|
|
51
|
+
this.width = this.initialWidth / (this._core.store.state.scale < 0 ? this._core.store.state.scale : 1);
|
|
52
|
+
this.height = (this.fontSize * 1.2) / (this._core.store.state.scale < 0 ? this._core.store.state.scale : 1);
|
|
53
|
+
this.scale = config.scale || 1;
|
|
54
|
+
this.scaleFactor = config.scaleX ?? 1;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
static create(core, fontSize, fontFamily) {
|
|
58
|
+
const object = new KritzelText();
|
|
59
|
+
object._core = core;
|
|
60
|
+
object.id = object.generateId();
|
|
61
|
+
object.workspaceId = core.store.state.activeWorkspace.id;
|
|
62
|
+
object.fontSize = fontSize;
|
|
63
|
+
object.fontFamily = fontFamily;
|
|
64
|
+
object.translateX = 0;
|
|
65
|
+
object.translateY = 0;
|
|
66
|
+
object.width = object.initialWidth / (object._core.store.state.scale < 0 ? object._core.store.state.scale : 1);
|
|
67
|
+
object.height = (object.fontSize * 1.2) / (object._core.store.state.scale < 0 ? object._core.store.state.scale : 1);
|
|
68
|
+
object.backgroundColor = 'transparent';
|
|
69
|
+
object.initialWidth = object.width;
|
|
70
|
+
object.initialHeight = object.height;
|
|
71
|
+
object.scaleFactor = 1;
|
|
72
|
+
object.scale = object._core.store.state.scale;
|
|
73
|
+
object.zIndex = core.store.currentZIndex;
|
|
74
|
+
object.editor = object.createEditor();
|
|
75
|
+
return object;
|
|
76
|
+
}
|
|
77
|
+
mount(element) {
|
|
78
|
+
if (element === null || this.isInViewport() === false) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
if (this.isMounted && this.elementRef === element && this.editor.dom.parentElement === element) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
this.elementRef = element;
|
|
85
|
+
this.elementRef.style.fontFamily = this.fontFamily;
|
|
86
|
+
this.elementRef.style.fontSize = `${this.fontSize}pt`;
|
|
87
|
+
this.elementRef.style.color = this.fontColor;
|
|
88
|
+
this.elementRef.style.whiteSpace = 'pre-wrap';
|
|
89
|
+
this.elementRef.style.wordWrap = 'break-word';
|
|
90
|
+
this.elementRef.innerHTML = '';
|
|
91
|
+
this.elementRef.appendChild(this.editor.dom);
|
|
92
|
+
this.isMounted = true;
|
|
93
|
+
requestAnimationFrame(() => this.adjustSizeOnInput());
|
|
94
|
+
}
|
|
95
|
+
createEditor() {
|
|
96
|
+
const doc = this._schema.node('doc', null, [this._schema.node('paragraph')]);
|
|
97
|
+
return new EditorView(null, {
|
|
98
|
+
state: EditorState.create({
|
|
99
|
+
doc: doc,
|
|
100
|
+
plugins: [keymap(baseKeymap)],
|
|
101
|
+
}),
|
|
102
|
+
editable: () => false,
|
|
103
|
+
dispatchTransaction: transaction => {
|
|
104
|
+
const newState = this.editor.state.apply(transaction);
|
|
105
|
+
this.editor.updateState(newState);
|
|
106
|
+
if (transaction.docChanged) {
|
|
107
|
+
this.content = newState.doc.toJSON();
|
|
108
|
+
this.adjustSizeOnInput();
|
|
109
|
+
if (!transaction.getMeta('fromRemote')) {
|
|
110
|
+
this._core.store.state.objects.update(this, { temporary: true });
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
setContent(content) {
|
|
117
|
+
this.content = content;
|
|
118
|
+
if (this.editor && content) {
|
|
119
|
+
const newDoc = this.editor.state.schema.nodeFromJSON(content);
|
|
120
|
+
const tr = this.editor.state.tr.replaceWith(0, this.editor.state.doc.content.size, newDoc.content);
|
|
121
|
+
tr.setMeta('fromRemote', true);
|
|
122
|
+
this.editor.dispatch(tr);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
adjustSizeOnInput() {
|
|
126
|
+
const element = this.elementRef;
|
|
127
|
+
if (element && this.isMounted && element.scrollWidth > 0) {
|
|
128
|
+
const previousTotalWidth = this.totalWidth;
|
|
129
|
+
const previousTotalHeight = this.totalHeight;
|
|
130
|
+
const newWidth = element.scrollWidth;
|
|
131
|
+
const newHeight = element.scrollHeight;
|
|
132
|
+
this.width = newWidth * this.scaleFactor;
|
|
133
|
+
this.height = newHeight * this.scaleFactor;
|
|
134
|
+
if (this.rotation !== 0) {
|
|
135
|
+
const newTotalWidth = this.totalWidth;
|
|
136
|
+
const newTotalHeight = this.totalHeight;
|
|
137
|
+
const deltaWidth = (newTotalWidth - previousTotalWidth) / 2 / this.scale;
|
|
138
|
+
const deltaHeight = (newTotalHeight - previousTotalHeight) / 2 / this.scale;
|
|
139
|
+
if (deltaWidth !== 0 || deltaHeight !== 0) {
|
|
140
|
+
const cos = Math.cos(this.rotation);
|
|
141
|
+
const sin = Math.sin(this.rotation);
|
|
142
|
+
const rotatedDeltaX = cos * deltaWidth - sin * deltaHeight;
|
|
143
|
+
const rotatedDeltaY = sin * deltaWidth + cos * deltaHeight;
|
|
144
|
+
this.translateX += rotatedDeltaX - deltaWidth;
|
|
145
|
+
this.translateY += rotatedDeltaY - deltaHeight;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
resize(x, y, width, height) {
|
|
151
|
+
if (width <= 1 || height <= 1) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const originalWidth = this.width / this.scaleFactor;
|
|
155
|
+
const originalHeight = this.height / this.scaleFactor;
|
|
156
|
+
const scaleX = width / originalWidth;
|
|
157
|
+
const scaleY = height / originalHeight;
|
|
158
|
+
this.scaleFactor = Math.min(scaleX, scaleY);
|
|
159
|
+
this.width = originalWidth * this.scaleFactor;
|
|
160
|
+
this.height = originalHeight * this.scaleFactor;
|
|
161
|
+
this.translateX = x;
|
|
162
|
+
this.translateY = y;
|
|
163
|
+
this._core.store.state.objects.update(this);
|
|
164
|
+
}
|
|
165
|
+
focus(coords) {
|
|
166
|
+
if (this.editor) {
|
|
167
|
+
const doc = this.editor.state.doc;
|
|
168
|
+
if (coords.x && coords.y) {
|
|
169
|
+
const pos = this.editor.posAtCoords({ left: coords.x, top: coords.y });
|
|
170
|
+
if (pos) {
|
|
171
|
+
this.editor.dispatch(this.editor.state.tr.setSelection(TextSelection.create(doc, pos.pos)));
|
|
172
|
+
this.editor.focus();
|
|
173
|
+
if (KritzelDevicesHelper.isIOS()) {
|
|
174
|
+
this.scrollIntoViewOnIOS();
|
|
175
|
+
}
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
const end = Math.max(1, doc.content.size - 1);
|
|
180
|
+
this.editor.dispatch(this.editor.state.tr.setSelection(TextSelection.create(doc, end)));
|
|
181
|
+
this.editor.focus();
|
|
182
|
+
if (KritzelDevicesHelper.isIOS()) {
|
|
183
|
+
this.scrollIntoViewOnIOS();
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
scrollIntoViewOnIOS() {
|
|
188
|
+
setTimeout(() => {
|
|
189
|
+
if (this.editor && this.editor.dom) {
|
|
190
|
+
this.editor.dom.scrollIntoView({
|
|
191
|
+
behavior: 'smooth',
|
|
192
|
+
block: 'center',
|
|
193
|
+
inline: 'nearest'
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}, 300);
|
|
197
|
+
}
|
|
198
|
+
edit(event) {
|
|
199
|
+
KritzelKeyboardHelper.disableInteractiveWidget();
|
|
200
|
+
this.uneditedObject = this.clone();
|
|
201
|
+
this._core.store.setState('activeTool', KritzelToolRegistry.getTool('text'));
|
|
202
|
+
this.editor.setProps({ editable: () => true });
|
|
203
|
+
this.isEditing = true;
|
|
204
|
+
this._core.rerender();
|
|
205
|
+
this.adjustSizeOnInput();
|
|
206
|
+
this.focus({ x: event?.clientX, y: event?.clientY });
|
|
207
|
+
KritzelKeyboardHelper.enableInteractiveWidget();
|
|
208
|
+
}
|
|
209
|
+
save() {
|
|
210
|
+
requestAnimationFrame(() => this.adjustSizeOnInput());
|
|
211
|
+
this.content = this.editor.state.doc.toJSON();
|
|
212
|
+
this.editor.setProps({ editable: () => false });
|
|
213
|
+
this.editor.dom.blur();
|
|
214
|
+
this.isEditing = false;
|
|
215
|
+
this._core.store.state.objects.consolidateTemporaryItems();
|
|
216
|
+
this._core.store.state.objects.update(this);
|
|
217
|
+
this._core.engine.emitObjectsChange();
|
|
218
|
+
}
|
|
219
|
+
handlePointerDown(event) {
|
|
220
|
+
if (!this.isEditing) {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
event.stopPropagation();
|
|
224
|
+
}
|
|
225
|
+
handlePointerMove(event) {
|
|
226
|
+
if (!this.isEditing) {
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
event.stopPropagation();
|
|
230
|
+
}
|
|
231
|
+
handlePointerUp(event) {
|
|
232
|
+
if (!this.isEditing) {
|
|
233
|
+
return;
|
|
234
|
+
}
|
|
235
|
+
event.stopPropagation();
|
|
236
|
+
}
|
|
237
|
+
copy() {
|
|
238
|
+
const copiedObject = super.copy();
|
|
239
|
+
copiedObject.editor = copiedObject.createEditor();
|
|
240
|
+
if (this.content) {
|
|
241
|
+
copiedObject.setContent(this.content);
|
|
242
|
+
}
|
|
243
|
+
return copiedObject;
|
|
244
|
+
}
|
|
245
|
+
serialize() {
|
|
246
|
+
const { _core, _elementRef, _schema, element, totalWidth, totalHeight, editor, uneditedObject, ...remainingProps } = this;
|
|
247
|
+
const clonedProps = structuredClone(remainingProps);
|
|
248
|
+
if (element && typeof element === 'object' && 'nodeType' in element && element.nodeType === 1) {
|
|
249
|
+
clonedProps.element = element.cloneNode(true);
|
|
250
|
+
}
|
|
251
|
+
return clonedProps;
|
|
252
|
+
}
|
|
253
|
+
deserialize(object) {
|
|
254
|
+
super.deserialize(object);
|
|
255
|
+
if (object.content) {
|
|
256
|
+
this.setContent(object.content);
|
|
257
|
+
}
|
|
258
|
+
return this;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
//# sourceMappingURL=text.class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.class.js","sourceRoot":"","sources":["../../../src/classes/objects/text.class.ts"],"names":[],"mappings":"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","sourcesContent":["import { KritzelToolRegistry } from '../registries/tool.registry';\r\nimport { KritzelBaseObject } from './base-object.class';\r\nimport { KritzelCore } from '../core/core.class';\r\nimport { KritzelKeyboardHelper } from '../../helpers/keyboard.helper';\r\nimport { KritzelDevicesHelper } from '../../helpers/devices.helper';\r\nimport { EditorState, TextSelection } from 'prosemirror-state';\r\nimport { EditorView } from 'prosemirror-view';\r\nimport { Schema } from 'prosemirror-model';\r\nimport { schema } from 'prosemirror-schema-basic';\r\nimport { addListNodes } from 'prosemirror-schema-list';\r\nimport { keymap } from 'prosemirror-keymap';\r\nimport { baseKeymap } from 'prosemirror-commands';\r\nexport class KritzelText extends KritzelBaseObject<HTMLDivElement> {\r\n override __class__: string = 'KritzelText';\r\n\r\n fontFamily: string = 'Arial';\r\n fontSize: number = 8;\r\n fontColor: string = '#000000';\r\n initialWidth: number = 1;\r\n initialHeight: number = 1;\r\n\r\n scale: number = 1;\r\n scaleFactor: number = 1;\r\n\r\n isDebugInfoVisible: boolean = true;\r\n isEditable: boolean = true;\r\n isEditing: boolean = false;\r\n\r\n editor: EditorView | null = null;\r\n content: any = null;\r\n\r\n private readonly _schema: Schema = new Schema({\r\n nodes: addListNodes(schema.spec.nodes, 'paragraph block*', 'block'),\r\n marks: schema.spec.marks,\r\n });\r\n\r\n uneditedObject: KritzelText | null = null;\r\n\r\n readonly rows: number = 1;\r\n\r\n get isEmpty(): boolean {\r\n if (!this.editor) {\r\n return true;\r\n }\r\n\r\n const doc = this.editor.state.doc;\r\n\r\n if (doc.content.size === 0) {\r\n return true;\r\n }\r\n\r\n const text = doc.textContent.trim();\r\n return text.length === 0;\r\n }\r\n\r\n constructor(config?: {\r\n translateX?: number;\r\n translateY?: number;\r\n fontSize?: number;\r\n fontFamily?: string;\r\n fontColor?: string;\r\n height?: number;\r\n width?: number;\r\n scale?: number;\r\n initialWidth?: number;\r\n initialHeight?: number;\r\n scaleX?: number;\r\n scaleY?: number;\r\n }) {\r\n super();\r\n\r\n if (config) {\r\n this.translateX = config.translateX || 0;\r\n this.translateY = config.translateY || 0;\r\n this.fontSize = config.fontSize || 8;\r\n this.fontFamily = config.fontFamily || 'Arial';\r\n this.fontColor = config.fontColor || '#000000';\r\n this.width = this.initialWidth / (this._core.store.state.scale < 0 ? this._core.store.state.scale : 1);\r\n this.height = (this.fontSize * 1.2) / (this._core.store.state.scale < 0 ? this._core.store.state.scale : 1);\r\n this.scale = config.scale || 1;\r\n this.scaleFactor = config.scaleX ?? 1;\r\n }\r\n }\r\n\r\n static override create(core: KritzelCore, fontSize?: number, fontFamily?: string): KritzelText {\r\n const object = new KritzelText();\r\n\r\n object._core = core;\r\n object.id = object.generateId();\r\n object.workspaceId = core.store.state.activeWorkspace.id;\r\n object.fontSize = fontSize;\r\n object.fontFamily = fontFamily;\r\n object.translateX = 0;\r\n object.translateY = 0;\r\n object.width = object.initialWidth / (object._core.store.state.scale < 0 ? object._core.store.state.scale : 1);\r\n object.height = (object.fontSize * 1.2) / (object._core.store.state.scale < 0 ? object._core.store.state.scale : 1);\r\n object.backgroundColor = 'transparent';\r\n object.initialWidth = object.width;\r\n object.initialHeight = object.height;\r\n object.scaleFactor = 1;\r\n object.scale = object._core.store.state.scale;\r\n object.zIndex = core.store.currentZIndex;\r\n object.editor = object.createEditor();\r\n\r\n return object;\r\n }\r\n\r\n override mount(element: HTMLDivElement): void {\r\n if (element === null || this.isInViewport() === false) {\r\n return;\r\n }\r\n\r\n if (this.isMounted && this.elementRef === element && this.editor.dom.parentElement === element) {\r\n return;\r\n }\r\n\r\n this.elementRef = element;\r\n this.elementRef.style.fontFamily = this.fontFamily;\r\n this.elementRef.style.fontSize = `${this.fontSize}pt`;\r\n this.elementRef.style.color = this.fontColor;\r\n this.elementRef.style.whiteSpace = 'pre-wrap';\r\n this.elementRef.style.wordWrap = 'break-word';\r\n this.elementRef.innerHTML = '';\r\n this.elementRef.appendChild(this.editor.dom);\r\n\r\n this.isMounted = true;\r\n\r\n requestAnimationFrame(() => this.adjustSizeOnInput());\r\n }\r\n\r\n private createEditor(): EditorView {\r\n const doc = this._schema.node('doc', null, [this._schema.node('paragraph')]);\r\n\r\n return new EditorView(null, {\r\n state: EditorState.create({\r\n doc: doc,\r\n plugins: [keymap(baseKeymap)],\r\n }),\r\n editable: () => false,\r\n dispatchTransaction: transaction => {\r\n const newState = this.editor.state.apply(transaction);\r\n\r\n this.editor.updateState(newState);\r\n\r\n if (transaction.docChanged) {\r\n this.content = newState.doc.toJSON();\r\n this.adjustSizeOnInput();\r\n\r\n if (!transaction.getMeta('fromRemote')) {\r\n this._core.store.state.objects.update(this, { temporary: true });\r\n }\r\n }\r\n },\r\n });\r\n }\r\n\r\n public setContent(content: any): void {\r\n this.content = content;\r\n\r\n if (this.editor && content) {\r\n const newDoc = this.editor.state.schema.nodeFromJSON(content);\r\n const tr = this.editor.state.tr.replaceWith(0, this.editor.state.doc.content.size, newDoc.content);\r\n \r\n tr.setMeta('fromRemote', true);\r\n this.editor.dispatch(tr);\r\n }\r\n }\r\n\r\n adjustSizeOnInput(): void {\r\n const element = this.elementRef;\r\n\r\n if (element && this.isMounted && element.scrollWidth > 0) {\r\n const previousTotalWidth = this.totalWidth;\r\n const previousTotalHeight = this.totalHeight;\r\n\r\n const newWidth = element.scrollWidth;\r\n const newHeight = element.scrollHeight;\r\n\r\n this.width = newWidth * this.scaleFactor;\r\n this.height = newHeight * this.scaleFactor;\r\n\r\n if (this.rotation !== 0) {\r\n const newTotalWidth = this.totalWidth;\r\n const newTotalHeight = this.totalHeight;\r\n\r\n const deltaWidth = (newTotalWidth - previousTotalWidth) / 2 / this.scale;\r\n const deltaHeight = (newTotalHeight - previousTotalHeight) / 2 / this.scale;\r\n\r\n if (deltaWidth !== 0 || deltaHeight !== 0) {\r\n const cos = Math.cos(this.rotation);\r\n const sin = Math.sin(this.rotation);\r\n\r\n const rotatedDeltaX = cos * deltaWidth - sin * deltaHeight;\r\n const rotatedDeltaY = sin * deltaWidth + cos * deltaHeight;\r\n\r\n this.translateX += rotatedDeltaX - deltaWidth;\r\n this.translateY += rotatedDeltaY - deltaHeight;\r\n }\r\n }\r\n }\r\n }\r\n\r\n override resize(x: number, y: number, width: number, height: number): void {\r\n if (width <= 1 || height <= 1) {\r\n return;\r\n }\r\n\r\n const originalWidth = this.width / this.scaleFactor;\r\n const originalHeight = this.height / this.scaleFactor;\r\n\r\n const scaleX = width / originalWidth;\r\n const scaleY = height / originalHeight;\r\n\r\n this.scaleFactor = Math.min(scaleX, scaleY);\r\n\r\n this.width = originalWidth * this.scaleFactor;\r\n this.height = originalHeight * this.scaleFactor;\r\n\r\n this.translateX = x;\r\n this.translateY = y;\r\n\r\n this._core.store.state.objects.update(this);\r\n }\r\n\r\n focus(coords?: { x: number; y: number }): void {\r\n if (this.editor) {\r\n const doc = this.editor.state.doc;\r\n\r\n if (coords.x && coords.y) {\r\n const pos = this.editor.posAtCoords({ left: coords.x, top: coords.y });\r\n if (pos) {\r\n this.editor.dispatch(this.editor.state.tr.setSelection(TextSelection.create(doc, pos.pos)));\r\n this.editor.focus();\r\n \r\n if (KritzelDevicesHelper.isIOS()) {\r\n this.scrollIntoViewOnIOS();\r\n }\r\n return;\r\n }\r\n }\r\n\r\n const end = Math.max(1, doc.content.size - 1);\r\n this.editor.dispatch(this.editor.state.tr.setSelection(TextSelection.create(doc, end)));\r\n this.editor.focus();\r\n \r\n if (KritzelDevicesHelper.isIOS()) {\r\n this.scrollIntoViewOnIOS();\r\n }\r\n }\r\n }\r\n\r\n private scrollIntoViewOnIOS(): void {\r\n setTimeout(() => {\r\n if (this.editor && this.editor.dom) {\r\n this.editor.dom.scrollIntoView({\r\n behavior: 'smooth',\r\n block: 'center',\r\n inline: 'nearest'\r\n });\r\n }\r\n }, 300);\r\n }\r\n\r\n edit(event?: PointerEvent): void {\r\n KritzelKeyboardHelper.disableInteractiveWidget();\r\n\r\n this.uneditedObject = this.clone() as KritzelText;\r\n\r\n this._core.store.setState('activeTool', KritzelToolRegistry.getTool('text'));\r\n\r\n this.editor.setProps({ editable: () => true });\r\n\r\n this.isEditing = true;\r\n\r\n this._core.rerender();\r\n\r\n this.adjustSizeOnInput();\r\n\r\n this.focus({ x: event?.clientX, y: event?.clientY });\r\n\r\n KritzelKeyboardHelper.enableInteractiveWidget();\r\n }\r\n\r\n save(): void {\r\n requestAnimationFrame(() => this.adjustSizeOnInput());\r\n\r\n this.content = this.editor.state.doc.toJSON();\r\n\r\n this.editor.setProps({ editable: () => false });\r\n\r\n this.editor.dom.blur();\r\n\r\n this.isEditing = false;\r\n\r\n this._core.store.state.objects.consolidateTemporaryItems();\r\n\r\n this._core.store.state.objects.update(this);\r\n\r\n this._core.engine.emitObjectsChange();\r\n }\r\n\r\n handlePointerDown(event: PointerEvent): void {\r\n if (!this.isEditing) {\r\n return;\r\n }\r\n\r\n event.stopPropagation();\r\n }\r\n\r\n handlePointerMove(event: PointerEvent): void {\r\n if (!this.isEditing) {\r\n return;\r\n }\r\n\r\n event.stopPropagation();\r\n }\r\n\r\n handlePointerUp(event: PointerEvent): void {\r\n if (!this.isEditing) {\r\n return;\r\n }\r\n\r\n event.stopPropagation();\r\n }\r\n\r\n override copy(): KritzelText {\r\n const copiedObject = super.copy() as KritzelText;\r\n copiedObject.editor = copiedObject.createEditor();\r\n\r\n if (this.content) {\r\n copiedObject.setContent(this.content);\r\n }\r\n\r\n return copiedObject;\r\n }\r\n\r\n override serialize() {\r\n const { _core, _elementRef, _schema, element, totalWidth, totalHeight, editor, uneditedObject, ...remainingProps } = this as any;\r\n\r\n const clonedProps = structuredClone(remainingProps);\r\n\r\n if (element && typeof element === 'object' && 'nodeType' in element && element.nodeType === 1) {\r\n clonedProps.element = element.cloneNode(true) as HTMLElement;\r\n }\r\n\r\n return clonedProps;\r\n }\r\n\r\n override deserialize<KritzelText>(object: any): KritzelText {\r\n super.deserialize<KritzelText>(object);\r\n if (object.content) {\r\n this.setContent(object.content);\r\n }\r\n return this as unknown as KritzelText;\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import * as Y from "yjs";
|
|
2
|
+
import * as encoding from "lib0/encoding";
|
|
3
|
+
import * as decoding from "lib0/decoding";
|
|
4
|
+
/**
|
|
5
|
+
* BroadcastChannel sync provider for cross-tab synchronization
|
|
6
|
+
* This is a lightweight alternative to y-webrtc for browser-tab-only sync
|
|
7
|
+
*/
|
|
8
|
+
export class BroadcastSyncProvider {
|
|
9
|
+
doc;
|
|
10
|
+
channel;
|
|
11
|
+
_synced = false;
|
|
12
|
+
constructor(docName, doc, _options) {
|
|
13
|
+
this.doc = doc;
|
|
14
|
+
this.channel = new BroadcastChannel(docName);
|
|
15
|
+
// Handle incoming messages from other tabs
|
|
16
|
+
this.channel.onmessage = (event) => {
|
|
17
|
+
this.handleMessage(event.data);
|
|
18
|
+
};
|
|
19
|
+
// Listen to document updates and broadcast them
|
|
20
|
+
this.doc.on('update', this.handleDocUpdate);
|
|
21
|
+
// Send initial sync request
|
|
22
|
+
this.broadcastSync();
|
|
23
|
+
// Mark as synced after a short delay (to receive any pending updates)
|
|
24
|
+
setTimeout(() => {
|
|
25
|
+
this._synced = true;
|
|
26
|
+
}, 100);
|
|
27
|
+
console.info(`BroadcastChannel Provider initialized: ${docName}`);
|
|
28
|
+
}
|
|
29
|
+
handleDocUpdate = (update, origin) => {
|
|
30
|
+
// Don't broadcast updates that came from other tabs (to prevent loops)
|
|
31
|
+
if (origin !== this) {
|
|
32
|
+
const encoder = encoding.createEncoder();
|
|
33
|
+
encoding.writeVarUint(encoder, 0); // Message type: sync update
|
|
34
|
+
encoding.writeVarUint8Array(encoder, update);
|
|
35
|
+
this.channel.postMessage(encoding.toUint8Array(encoder));
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
handleMessage(message) {
|
|
39
|
+
const decoder = decoding.createDecoder(new Uint8Array(message));
|
|
40
|
+
const messageType = decoding.readVarUint(decoder);
|
|
41
|
+
switch (messageType) {
|
|
42
|
+
case 0: // Sync update
|
|
43
|
+
const update = decoding.readVarUint8Array(decoder);
|
|
44
|
+
Y.applyUpdate(this.doc, update, this);
|
|
45
|
+
break;
|
|
46
|
+
case 1: // Sync request
|
|
47
|
+
this.broadcastSync();
|
|
48
|
+
break;
|
|
49
|
+
case 2: // Sync response
|
|
50
|
+
const stateVector = decoding.readVarUint8Array(decoder);
|
|
51
|
+
const updateResponse = Y.encodeStateAsUpdate(this.doc, stateVector);
|
|
52
|
+
if (updateResponse.length > 0) {
|
|
53
|
+
const encoder = encoding.createEncoder();
|
|
54
|
+
encoding.writeVarUint(encoder, 0); // Send as regular update
|
|
55
|
+
encoding.writeVarUint8Array(encoder, updateResponse);
|
|
56
|
+
this.channel.postMessage(encoding.toUint8Array(encoder));
|
|
57
|
+
}
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
broadcastSync() {
|
|
62
|
+
// Broadcast our current state vector to request missing updates
|
|
63
|
+
const encoder = encoding.createEncoder();
|
|
64
|
+
encoding.writeVarUint(encoder, 2); // Message type: sync response
|
|
65
|
+
encoding.writeVarUint8Array(encoder, Y.encodeStateVector(this.doc));
|
|
66
|
+
this.channel.postMessage(encoding.toUint8Array(encoder));
|
|
67
|
+
}
|
|
68
|
+
async connect() {
|
|
69
|
+
// Wait for initial sync to complete
|
|
70
|
+
if (this._synced) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
return new Promise((resolve) => {
|
|
74
|
+
const checkSync = () => {
|
|
75
|
+
if (this._synced) {
|
|
76
|
+
resolve();
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
setTimeout(checkSync, 50);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
checkSync();
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
disconnect() {
|
|
86
|
+
// BroadcastChannel doesn't have explicit disconnect
|
|
87
|
+
}
|
|
88
|
+
destroy() {
|
|
89
|
+
this.doc.off('update', this.handleDocUpdate);
|
|
90
|
+
this.channel.close();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=broadcast-sync-provider.class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"broadcast-sync-provider.class.js","sourceRoot":"","sources":["../../../src/classes/providers/broadcast-sync-provider.class.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Y from 'yjs';\r\nimport * as encoding from 'lib0/encoding';\r\nimport * as decoding from 'lib0/decoding';\r\nimport { ISyncProvider } from '../../interfaces/sync-provider.interface';\r\n\r\n/**\r\n * BroadcastChannel sync provider for cross-tab synchronization\r\n * This is a lightweight alternative to y-webrtc for browser-tab-only sync\r\n */\r\nexport class BroadcastSyncProvider implements ISyncProvider {\r\n private readonly doc: Y.Doc;\r\n private readonly channel: BroadcastChannel;\r\n private _synced: boolean = false;\r\n\r\n constructor(docName: string, doc: Y.Doc, _options?: any) {\r\n this.doc = doc;\r\n this.channel = new BroadcastChannel(docName);\r\n\r\n // Handle incoming messages from other tabs\r\n this.channel.onmessage = (event) => {\r\n this.handleMessage(event.data);\r\n };\r\n\r\n // Listen to document updates and broadcast them\r\n this.doc.on('update', this.handleDocUpdate);\r\n\r\n // Send initial sync request\r\n this.broadcastSync();\r\n \r\n // Mark as synced after a short delay (to receive any pending updates)\r\n setTimeout(() => {\r\n this._synced = true;\r\n }, 100);\r\n\r\n console.info(`BroadcastChannel Provider initialized: ${docName}`);\r\n }\r\n\r\n private handleDocUpdate = (update: Uint8Array, origin: any) => {\r\n // Don't broadcast updates that came from other tabs (to prevent loops)\r\n if (origin !== this) {\r\n const encoder = encoding.createEncoder();\r\n encoding.writeVarUint(encoder, 0); // Message type: sync update\r\n encoding.writeVarUint8Array(encoder, update);\r\n this.channel.postMessage(encoding.toUint8Array(encoder));\r\n }\r\n };\r\n\r\n private handleMessage(message: ArrayBuffer) {\r\n const decoder = decoding.createDecoder(new Uint8Array(message));\r\n const messageType = decoding.readVarUint(decoder);\r\n\r\n switch (messageType) {\r\n case 0: // Sync update\r\n const update = decoding.readVarUint8Array(decoder);\r\n Y.applyUpdate(this.doc, update, this);\r\n break;\r\n case 1: // Sync request\r\n this.broadcastSync();\r\n break;\r\n case 2: // Sync response\r\n const stateVector = decoding.readVarUint8Array(decoder);\r\n const updateResponse = Y.encodeStateAsUpdate(this.doc, stateVector);\r\n if (updateResponse.length > 0) {\r\n const encoder = encoding.createEncoder();\r\n encoding.writeVarUint(encoder, 0); // Send as regular update\r\n encoding.writeVarUint8Array(encoder, updateResponse);\r\n this.channel.postMessage(encoding.toUint8Array(encoder));\r\n }\r\n break;\r\n }\r\n }\r\n\r\n private broadcastSync() {\r\n // Broadcast our current state vector to request missing updates\r\n const encoder = encoding.createEncoder();\r\n encoding.writeVarUint(encoder, 2); // Message type: sync response\r\n encoding.writeVarUint8Array(encoder, Y.encodeStateVector(this.doc));\r\n this.channel.postMessage(encoding.toUint8Array(encoder));\r\n }\r\n\r\n async connect(): Promise<void> {\r\n // Wait for initial sync to complete\r\n if (this._synced) {\r\n return;\r\n }\r\n \r\n return new Promise<void>((resolve) => {\r\n const checkSync = () => {\r\n if (this._synced) {\r\n resolve();\r\n } else {\r\n setTimeout(checkSync, 50);\r\n }\r\n };\r\n checkSync();\r\n });\r\n }\r\n\r\n disconnect(): void {\r\n // BroadcastChannel doesn't have explicit disconnect\r\n }\r\n\r\n destroy(): void {\r\n this.doc.off('update', this.handleDocUpdate);\r\n this.channel.close();\r\n }\r\n}\r\n"]}
|