kritzel-stencil 0.0.143 → 0.0.145
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/{index-Cg50mv2K.js → default-text-tool.config-D2dP2xyB.js} +15947 -1100
- package/dist/cjs/default-text-tool.config-D2dP2xyB.js.map +1 -0
- package/dist/cjs/{index-DcTwXs_q.js → index-Cj__YTlG.js} +9 -11
- package/dist/cjs/index-Cj__YTlG.js.map +1 -0
- package/dist/cjs/index.cjs.js +1369 -12
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/cjs/kritzel-brush-style.cjs.entry.js +1 -1
- package/dist/cjs/kritzel-color_22.cjs.entry.js +771 -720
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/stencil.cjs.js +3 -3
- package/dist/cjs/stencil.cjs.js.map +1 -1
- package/dist/collection/classes/core/core.class.js +263 -211
- package/dist/collection/classes/core/core.class.js.map +1 -1
- package/dist/collection/classes/core/store.class.js +21 -3
- package/dist/collection/classes/core/store.class.js.map +1 -1
- package/dist/collection/classes/core/viewport.class.js +8 -3
- package/dist/collection/classes/core/viewport.class.js.map +1 -1
- package/dist/collection/classes/core/workspace.class.js +2 -3
- package/dist/collection/classes/core/workspace.class.js.map +1 -1
- package/dist/collection/classes/handlers/context-menu.handler.js +11 -14
- package/dist/collection/classes/handlers/context-menu.handler.js.map +1 -1
- package/dist/collection/classes/handlers/key.handler.js +13 -13
- package/dist/collection/classes/handlers/key.handler.js.map +1 -1
- package/dist/collection/classes/handlers/move.handler.js +18 -10
- package/dist/collection/classes/handlers/move.handler.js.map +1 -1
- package/dist/collection/classes/handlers/resize.handler.js +20 -17
- package/dist/collection/classes/handlers/resize.handler.js.map +1 -1
- package/dist/collection/classes/handlers/rotation.handler.js +26 -23
- package/dist/collection/classes/handlers/rotation.handler.js.map +1 -1
- package/dist/collection/classes/handlers/selection.handler.js +32 -30
- package/dist/collection/classes/handlers/selection.handler.js.map +1 -1
- package/dist/collection/classes/objects/base-object.class.js +6 -15
- package/dist/collection/classes/objects/base-object.class.js.map +1 -1
- package/dist/collection/classes/objects/custom-element.class.js +2 -0
- package/dist/collection/classes/objects/custom-element.class.js.map +1 -1
- package/dist/collection/classes/objects/image.class.js +2 -0
- package/dist/collection/classes/objects/image.class.js.map +1 -1
- package/dist/collection/classes/objects/path.class.js +4 -0
- package/dist/collection/classes/objects/path.class.js.map +1 -1
- package/dist/collection/classes/objects/selection-box.class.js +3 -4
- package/dist/collection/classes/objects/selection-box.class.js.map +1 -1
- package/dist/collection/classes/objects/selection-group.class.js +109 -49
- package/dist/collection/classes/objects/selection-group.class.js.map +1 -1
- package/dist/collection/classes/objects/text.class.js +36 -42
- package/dist/collection/classes/objects/text.class.js.map +1 -1
- 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/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 +260 -1
- package/dist/collection/classes/structures/object-map.structure.js.map +1 -1
- package/dist/collection/classes/tools/brush-tool.class.js +48 -37
- package/dist/collection/classes/tools/brush-tool.class.js.map +1 -1
- package/dist/collection/classes/tools/eraser-tool.class.js +10 -12
- package/dist/collection/classes/tools/eraser-tool.class.js.map +1 -1
- package/dist/collection/classes/tools/image-tool.class.js +2 -10
- package/dist/collection/classes/tools/image-tool.class.js.map +1 -1
- package/dist/collection/classes/tools/selection-tool.class.js +11 -8
- package/dist/collection/classes/tools/selection-tool.class.js.map +1 -1
- package/dist/collection/classes/tools/text-tool.class.js +12 -18
- package/dist/collection/classes/tools/text-tool.class.js.map +1 -1
- package/dist/collection/collection-manifest.json +1 -1
- package/dist/collection/components/core/kritzel-cursor-trail/kritzel-cursor-trail.js +1 -1
- package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +36 -1
- package/dist/collection/components/core/kritzel-editor/kritzel-editor.js.map +1 -1
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +61 -35
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -1
- package/dist/collection/components/shared/kritzel-color/kritzel-color.js +2 -2
- package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.js +1 -1
- package/dist/collection/components/shared/kritzel-font/kritzel-font.js +1 -1
- package/dist/collection/components/shared/kritzel-font-family/kritzel-font-family.js +1 -1
- package/dist/collection/components/shared/kritzel-font-size/kritzel-font-size.js +1 -1
- package/dist/collection/components/shared/kritzel-menu/kritzel-menu.js +1 -1
- package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.js +2 -2
- package/dist/collection/components/shared/kritzel-portal/kritzel-portal.js +1 -1
- package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.js +1 -1
- package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.js +1 -1
- package/dist/collection/components/shared/kritzel-tooltip/kritzel-tooltip.js +4 -4
- package/dist/collection/components/ui/kritzel-context-menu/kritzel-context-menu.js +1 -1
- package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.js +2 -2
- package/dist/collection/components/ui/kritzel-control-text-config/kritzel-control-text-config.js +2 -2
- package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +3 -3
- package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js +1 -1
- package/dist/collection/configs/{default-engine-state.js → default-engine-config.js} +2 -8
- package/dist/collection/configs/default-engine-config.js.map +1 -0
- package/dist/collection/configs/default-sync.config.js +12 -0
- package/dist/collection/configs/default-sync.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/index.js +8 -1
- package/dist/collection/index.js.map +1 -1
- package/dist/collection/interfaces/debug-info.interface.js.map +1 -1
- package/dist/collection/interfaces/engine-state.interface.js.map +1 -1
- package/dist/collection/interfaces/object.interface.js.map +1 -1
- package/dist/collection/interfaces/selection-state.interface.js.map +1 -1
- 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/components/index.js +1361 -4
- package/dist/components/index.js.map +1 -1
- package/dist/components/kritzel-brush-style.js +4 -4
- package/dist/components/kritzel-color-palette.js +1 -1
- package/dist/components/kritzel-color.js +1 -1
- package/dist/components/kritzel-context-menu.js +1 -1
- package/dist/components/kritzel-control-brush-config.js +1 -1
- package/dist/components/kritzel-control-text-config.js +1 -1
- package/dist/components/kritzel-controls.js +1 -1
- package/dist/components/kritzel-cursor-trail.js +1 -1
- package/dist/components/kritzel-dropdown.js +1 -1
- package/dist/components/kritzel-editor.js +39 -27
- package/dist/components/kritzel-editor.js.map +1 -1
- package/dist/components/kritzel-engine.js +1 -1
- package/dist/components/kritzel-font-family.js +1 -1
- package/dist/components/kritzel-font-size.js +1 -1
- package/dist/components/kritzel-font.js +1 -1
- package/dist/components/kritzel-icon.js +1 -1
- package/dist/components/kritzel-menu-item.js +1 -1
- package/dist/components/kritzel-menu.js +1 -1
- package/dist/components/kritzel-portal.js +1 -1
- package/dist/components/kritzel-split-button.js +1 -1
- package/dist/components/kritzel-stroke-size.js +1 -1
- package/dist/components/kritzel-tooltip.js +1 -1
- package/dist/components/kritzel-utility-panel.js +1 -1
- package/dist/components/kritzel-workspace-manager.js +1 -1
- package/dist/components/{p-C_hSH2nN.js → p-8iFF5GHL.js} +6 -6
- package/dist/components/{p-C_hSH2nN.js.map → p-8iFF5GHL.js.map} +1 -1
- package/dist/components/{p-BycHaC-9.js → p-BCrMfH5n.js} +6 -6
- package/dist/components/{p-BycHaC-9.js.map → p-BCrMfH5n.js.map} +1 -1
- package/dist/components/{p-D_RcVGj0.js → p-BHDOht0m.js} +6 -6
- package/dist/components/{p-D_RcVGj0.js.map → p-BHDOht0m.js.map} +1 -1
- package/dist/components/{p-DqsgZIHC.js → p-BHT7_POQ.js} +6 -6
- package/dist/components/{p-DqsgZIHC.js.map → p-BHT7_POQ.js.map} +1 -1
- package/dist/components/{p-DzyZA2GT.js → p-BQ5cdSqE.js} +11 -11
- package/dist/components/{p-DzyZA2GT.js.map → p-BQ5cdSqE.js.map} +1 -1
- package/dist/components/{p-Co5lU_7h.js → p-BaHZYvfq.js} +13 -13
- package/dist/components/{p-Co5lU_7h.js.map → p-BaHZYvfq.js.map} +1 -1
- package/dist/components/{p-BJbN3vca.js → p-BctNMdxr.js} +8 -8
- package/dist/components/{p-BJbN3vca.js.map → p-BctNMdxr.js.map} +1 -1
- package/dist/components/{p-BAw249L9.js → p-BgRGxOIE.js} +20 -20
- package/dist/components/{p-BAw249L9.js.map → p-BgRGxOIE.js.map} +1 -1
- package/dist/components/{p-D27d2rKT.js → p-Bhtn9qay.js} +5 -5
- package/dist/components/{p-D27d2rKT.js.map → p-Bhtn9qay.js.map} +1 -1
- package/dist/components/{p-CEn1WeG3.js → p-Bit0z7Yg.js} +9 -9
- package/dist/components/{p-CEn1WeG3.js.map → p-Bit0z7Yg.js.map} +1 -1
- package/dist/components/{p-CGb-8cK4.js → p-BlI4vzRZ.js} +5 -5
- package/dist/components/{p-CGb-8cK4.js.map → p-BlI4vzRZ.js.map} +1 -1
- package/dist/components/p-ByRC-aCs.js +18262 -0
- package/dist/components/p-ByRC-aCs.js.map +1 -0
- package/dist/components/{p-fiFoOjv0.js → p-C3_LIgzd.js} +10 -10
- package/dist/components/{p-fiFoOjv0.js.map → p-C3_LIgzd.js.map} +1 -1
- package/dist/components/{p-DPxzgBs0.js → p-CIXPLjCu.js} +4 -4
- package/dist/components/{p-DPxzgBs0.js.map → p-CIXPLjCu.js.map} +1 -1
- package/dist/components/{p-CoFmi-t6.js → p-COGwCbe1.js} +116 -188
- package/dist/components/p-COGwCbe1.js.map +1 -0
- package/dist/components/{p-dcR2uxM3.js → p-CURq0twf.js} +6 -6
- package/dist/components/{p-dcR2uxM3.js.map → p-CURq0twf.js.map} +1 -1
- package/dist/components/{p-C9hrbrUN.js → p-CwkUrTy1.js} +5 -7
- package/dist/{cjs/index-DcTwXs_q.js.map → components/p-CwkUrTy1.js.map} +1 -1
- package/dist/components/{p-ByAzDzS5.js → p-D13ydJjo.js} +5 -5
- package/dist/components/{p-ByAzDzS5.js.map → p-D13ydJjo.js.map} +1 -1
- package/dist/components/{p-BFNwskCY.js → p-Dbp5YJIa.js} +5 -5
- package/dist/components/{p-BFNwskCY.js.map → p-Dbp5YJIa.js.map} +1 -1
- package/dist/components/{p-BEKicPnH.js → p-Dcf7tVJW.js} +5 -5
- package/dist/components/{p-BEKicPnH.js.map → p-Dcf7tVJW.js.map} +1 -1
- package/dist/components/{p-CieOx1XL.js → p-EBtkRix7.js} +8 -8
- package/dist/components/{p-CieOx1XL.js.map → p-EBtkRix7.js.map} +1 -1
- package/dist/components/{p-gCHmJzc2.js → p-NXPGXBZ2.js} +6 -6
- package/dist/components/{p-gCHmJzc2.js.map → p-NXPGXBZ2.js.map} +1 -1
- package/dist/components/{p-YqK8ch2R.js → p-n789Y3S-.js} +4 -5
- package/dist/components/p-n789Y3S-.js.map +1 -0
- package/dist/esm/{index-Bj5QIJYQ.js → default-text-tool.config-CsZAW1Cu.js} +15908 -1092
- package/dist/esm/default-text-tool.config-CsZAW1Cu.js.map +1 -0
- package/dist/esm/{index-Cw77zP6g.js → index-SGde3HXB.js} +9 -11
- package/dist/esm/index-SGde3HXB.js.map +1 -0
- package/dist/esm/index.js +1358 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/kritzel-brush-style.entry.js +1 -1
- package/dist/esm/kritzel-color_22.entry.js +736 -685
- package/dist/esm/loader.js +3 -3
- package/dist/esm/stencil.js +4 -4
- package/dist/esm/stencil.js.map +1 -1
- package/dist/stencil/index.esm.js +1 -1
- package/dist/stencil/index.esm.js.map +1 -1
- package/dist/stencil/p-27adbf9d.entry.js +2 -0
- package/dist/stencil/p-27adbf9d.entry.js.map +1 -0
- package/dist/stencil/p-CsZAW1Cu.js +2 -0
- package/dist/stencil/p-CsZAW1Cu.js.map +1 -0
- package/dist/stencil/{p-Cw77zP6g.js → p-SGde3HXB.js} +2 -2
- package/dist/stencil/p-SGde3HXB.js.map +1 -0
- package/dist/stencil/{p-8b831c94.entry.js → p-d702c5af.entry.js} +2 -2
- package/dist/stencil/stencil.esm.js +1 -1
- package/dist/stencil/stencil.esm.js.map +1 -1
- package/dist/types/classes/core/core.class.d.ts +34 -21
- package/dist/types/classes/core/store.class.d.ts +8 -0
- package/dist/types/classes/objects/base-object.class.d.ts +1 -5
- package/dist/types/classes/objects/path.class.d.ts +1 -0
- package/dist/types/classes/objects/selection-box.class.d.ts +2 -3
- package/dist/types/classes/objects/selection-group.class.d.ts +24 -5
- package/dist/types/classes/objects/text.class.d.ts +0 -3
- package/dist/types/classes/providers/broadcast-sync-provider.class.d.ts +18 -0
- package/dist/types/classes/providers/hocuspocus-sync-provider.class.d.ts +120 -0
- package/dist/types/classes/providers/indexeddb-sync-provider.class.d.ts +22 -0
- package/dist/types/classes/providers/websocket-sync-provider.class.d.ts +52 -0
- package/dist/types/classes/structures/app-state-map.structure.d.ts +30 -0
- package/dist/types/classes/structures/object-map.structure.d.ts +39 -1
- package/dist/types/components/core/kritzel-editor/kritzel-editor.d.ts +3 -0
- package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +2 -0
- package/dist/types/components.d.ts +6 -0
- package/dist/types/configs/{default-engine-state.d.ts → default-engine-config.d.ts} +1 -1
- package/dist/types/configs/default-sync.config.d.ts +5 -0
- package/dist/types/constants/core.constants.d.ts +0 -0
- package/dist/types/index.d.ts +8 -1
- package/dist/types/interfaces/debug-info.interface.d.ts +0 -1
- package/dist/types/interfaces/engine-state.interface.d.ts +1 -10
- package/dist/types/interfaces/object.interface.d.ts +1 -1
- package/dist/types/interfaces/selection-state.interface.d.ts +0 -4
- package/dist/types/interfaces/sync-config.interface.d.ts +22 -0
- package/dist/types/interfaces/sync-provider.interface.d.ts +29 -0
- package/dist/types/stencil-public-runtime.d.ts +1 -1
- package/package.json +6 -2
- package/dist/cjs/index-Cg50mv2K.js.map +0 -1
- package/dist/collection/classes/commands/add-object.command.js +0 -18
- package/dist/collection/classes/commands/add-object.command.js.map +0 -1
- package/dist/collection/classes/commands/add-selection-group.command.js +0 -24
- package/dist/collection/classes/commands/add-selection-group.command.js.map +0 -1
- package/dist/collection/classes/commands/base.command.js +0 -19
- package/dist/collection/classes/commands/base.command.js.map +0 -1
- package/dist/collection/classes/commands/batch.command.js +0 -15
- package/dist/collection/classes/commands/batch.command.js.map +0 -1
- package/dist/collection/classes/commands/move-selection-group.command.js +0 -44
- package/dist/collection/classes/commands/move-selection-group.command.js.map +0 -1
- package/dist/collection/classes/commands/remove-object.command.js +0 -18
- package/dist/collection/classes/commands/remove-object.command.js.map +0 -1
- package/dist/collection/classes/commands/remove-selection-group.command.js +0 -19
- package/dist/collection/classes/commands/remove-selection-group.command.js.map +0 -1
- package/dist/collection/classes/commands/resize-selection-group.command.js +0 -29
- package/dist/collection/classes/commands/resize-selection-group.command.js.map +0 -1
- package/dist/collection/classes/commands/rotate-selection-group.command.js +0 -29
- package/dist/collection/classes/commands/rotate-selection-group.command.js.map +0 -1
- package/dist/collection/classes/commands/update-object.command.js +0 -38
- package/dist/collection/classes/commands/update-object.command.js.map +0 -1
- package/dist/collection/classes/commands/update-viewport.command.js +0 -25
- package/dist/collection/classes/commands/update-viewport.command.js.map +0 -1
- package/dist/collection/classes/core/command-manager.class.js +0 -51
- package/dist/collection/classes/core/command-manager.class.js.map +0 -1
- package/dist/collection/classes/core/database.class.js +0 -236
- package/dist/collection/classes/core/database.class.js.map +0 -1
- package/dist/collection/classes/core/history.class.js +0 -51
- package/dist/collection/classes/core/history.class.js.map +0 -1
- package/dist/collection/classes/structures/circular-buffer.structure.js +0 -48
- package/dist/collection/classes/structures/circular-buffer.structure.js.map +0 -1
- package/dist/collection/configs/default-engine-state.js.map +0 -1
- package/dist/collection/interfaces/command.interface.js +0 -2
- package/dist/collection/interfaces/command.interface.js.map +0 -1
- package/dist/components/p-C9hrbrUN.js.map +0 -1
- package/dist/components/p-CoFmi-t6.js.map +0 -1
- package/dist/components/p-EO13AYoE.js +0 -3331
- package/dist/components/p-EO13AYoE.js.map +0 -1
- package/dist/components/p-YqK8ch2R.js.map +0 -1
- package/dist/esm/index-Bj5QIJYQ.js.map +0 -1
- package/dist/esm/index-Cw77zP6g.js.map +0 -1
- package/dist/stencil/p-Bj5QIJYQ.js +0 -2
- package/dist/stencil/p-Bj5QIJYQ.js.map +0 -1
- package/dist/stencil/p-Cw77zP6g.js.map +0 -1
- package/dist/stencil/p-b4185842.entry.js +0 -2
- package/dist/stencil/p-b4185842.entry.js.map +0 -1
- package/dist/types/classes/commands/add-object.command.d.ts +0 -9
- package/dist/types/classes/commands/add-selection-group.command.d.ts +0 -10
- package/dist/types/classes/commands/base.command.d.ts +0 -11
- package/dist/types/classes/commands/batch.command.d.ts +0 -8
- package/dist/types/classes/commands/move-selection-group.command.d.ts +0 -13
- package/dist/types/classes/commands/remove-object.command.d.ts +0 -9
- package/dist/types/classes/commands/remove-selection-group.command.d.ts +0 -8
- package/dist/types/classes/commands/resize-selection-group.command.d.ts +0 -20
- package/dist/types/classes/commands/rotate-selection-group.command.d.ts +0 -10
- package/dist/types/classes/commands/update-object.command.d.ts +0 -11
- package/dist/types/classes/commands/update-viewport.command.d.ts +0 -21
- package/dist/types/classes/core/command-manager.class.d.ts +0 -16
- package/dist/types/classes/core/database.class.d.ts +0 -29
- package/dist/types/classes/core/history.class.d.ts +0 -12
- package/dist/types/classes/structures/circular-buffer.structure.d.ts +0 -13
- package/dist/types/interfaces/command.interface.d.ts +0 -6
- /package/dist/stencil/{p-8b831c94.entry.js.map → p-d702c5af.entry.js.map} +0 -0
|
@@ -1,168 +1,131 @@
|
|
|
1
1
|
import { KritzelContextMenu } from "../../components/ui/kritzel-context-menu/kritzel-context-menu";
|
|
2
|
-
import {
|
|
2
|
+
import { DEFAULT_ENGINE_CONFIG } from "../../configs/default-engine-config";
|
|
3
3
|
import { ObjectHelper } from "../../helpers/object.helper";
|
|
4
|
-
import {
|
|
5
|
-
import { AddSelectionGroupCommand } from "../commands/add-selection-group.command";
|
|
6
|
-
import { BatchCommand } from "../commands/batch.command";
|
|
7
|
-
import { RemoveObjectCommand } from "../commands/remove-object.command";
|
|
8
|
-
import { RemoveSelectionGroupCommand } from "../commands/remove-selection-group.command";
|
|
9
|
-
import { UpdateObjectCommand } from "../commands/update-object.command";
|
|
10
|
-
import { KritzelDatabase } from "./database.class";
|
|
11
|
-
import { KritzelHistory } from "./history.class";
|
|
12
|
-
import { KrtizelSelectionBox } from "../objects/selection-box.class";
|
|
4
|
+
import { KritzelSelectionBox } from "../objects/selection-box.class";
|
|
13
5
|
import { KritzelSelectionGroup } from "../objects/selection-group.class";
|
|
14
6
|
import { KritzelToolRegistry } from "../registries/tool.registry";
|
|
15
|
-
import { KritzelReviver } from "./reviver.class";
|
|
16
7
|
import { KritzelStore } from "./store.class";
|
|
17
8
|
import { KritzelWorkspace } from "./workspace.class";
|
|
18
|
-
import {
|
|
9
|
+
import { KritzelObjectMap } from "../structures/object-map.structure";
|
|
10
|
+
import { KritzelAppStateMap } from "../structures/app-state-map.structure";
|
|
19
11
|
export class KritzelCore {
|
|
20
12
|
_kritzelEngine;
|
|
21
13
|
_store;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
_database;
|
|
14
|
+
_syncConfig;
|
|
15
|
+
_appStateMap;
|
|
25
16
|
get engine() {
|
|
26
17
|
return this._kritzelEngine;
|
|
27
18
|
}
|
|
28
|
-
get history() {
|
|
29
|
-
return this._history;
|
|
30
|
-
}
|
|
31
|
-
get commandManager() {
|
|
32
|
-
return this._commandManager;
|
|
33
|
-
}
|
|
34
|
-
get database() {
|
|
35
|
-
return this._database;
|
|
36
|
-
}
|
|
37
19
|
get store() {
|
|
38
20
|
return this._store;
|
|
39
21
|
}
|
|
22
|
+
get appStateMap() {
|
|
23
|
+
return this._appStateMap;
|
|
24
|
+
}
|
|
40
25
|
constructor(kritzelEngine) {
|
|
41
26
|
this._kritzelEngine = kritzelEngine;
|
|
42
|
-
this._store = new KritzelStore(
|
|
43
|
-
this.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
this.
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
if (existingWorkspace) {
|
|
64
|
-
this._store.state.activeWorkspace = existingWorkspace;
|
|
65
|
-
await this.updateWorkspace(this._store.state.activeWorkspace);
|
|
27
|
+
this._store = new KritzelStore(DEFAULT_ENGINE_CONFIG);
|
|
28
|
+
this._appStateMap = new KritzelAppStateMap();
|
|
29
|
+
}
|
|
30
|
+
setSyncConfig(config) {
|
|
31
|
+
this._syncConfig = config;
|
|
32
|
+
}
|
|
33
|
+
async initializeYjs() {
|
|
34
|
+
await this._appStateMap.initialize(this, this._syncConfig);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Load all workspaces from app state map
|
|
38
|
+
*/
|
|
39
|
+
loadWorkspacesFromAppState() {
|
|
40
|
+
return this._appStateMap.allWorkspaces();
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Save a workspace to app state map
|
|
44
|
+
*/
|
|
45
|
+
saveWorkspaceToAppState(workspace) {
|
|
46
|
+
if (this._appStateMap.has(workspace.id)) {
|
|
47
|
+
this._appStateMap.update(workspace);
|
|
66
48
|
}
|
|
67
49
|
else {
|
|
68
|
-
this.
|
|
69
|
-
await this.createWorkspace(this._store.state.activeWorkspace);
|
|
50
|
+
this._appStateMap.insert(workspace);
|
|
70
51
|
}
|
|
71
|
-
this._store.state.workspaces = await this.getWorkspaces();
|
|
72
|
-
const viewport = this._store.state.activeWorkspace.viewport ?? { translateX: 0, translateY: 0, scale: 1 };
|
|
73
|
-
this._store.state.translateX = viewport.translateX ?? 0;
|
|
74
|
-
this._store.state.translateY = viewport.translateY ?? 0;
|
|
75
|
-
this._store.state.scale = viewport.scale ?? 1;
|
|
76
|
-
await this.initializeWorkspaceObjects(this._store.state.activeWorkspace.id);
|
|
77
|
-
}
|
|
78
|
-
async initializeWorkspaceObjects(workspaceId) {
|
|
79
|
-
this._store.state.objectsMap.reset();
|
|
80
|
-
this._history.reset();
|
|
81
|
-
const objectsFromDb = await this._database.getAllByRange('objects', IDBKeyRange.bound([workspaceId], [workspaceId, '\uffff']));
|
|
82
|
-
const reviver = new KritzelReviver(this);
|
|
83
|
-
objectsFromDb.forEach(element => {
|
|
84
|
-
const revivedObject = reviver.revive(element);
|
|
85
|
-
this._store.state.objectsMap.insert(revivedObject);
|
|
86
|
-
});
|
|
87
|
-
this.rerender();
|
|
88
52
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
activeWorkspace.viewport = { translateX, translateY, scale };
|
|
95
|
-
activeWorkspace.updatedAt = new Date();
|
|
96
|
-
await this._database.update('workspaces', activeWorkspace);
|
|
53
|
+
/**
|
|
54
|
+
* Delete a workspace from app state map
|
|
55
|
+
*/
|
|
56
|
+
deleteWorkspaceFromAppState(workspaceId) {
|
|
57
|
+
this._appStateMap.remove(w => w.id === workspaceId);
|
|
97
58
|
}
|
|
98
|
-
async
|
|
99
|
-
|
|
100
|
-
|
|
59
|
+
async initializeWorkspace(workspace) {
|
|
60
|
+
// Load all workspaces from app state map
|
|
61
|
+
const workspaces = this.loadWorkspacesFromAppState();
|
|
62
|
+
// Find most recently updated workspace or use provided/fallback
|
|
63
|
+
const mostRecentWorkspace = workspaces.length > 0 ? [...workspaces].sort((a, b) => b.updatedAt.getTime() - a.updatedAt.getTime())[0] : null;
|
|
64
|
+
let activeWorkspace;
|
|
65
|
+
if (workspace) {
|
|
66
|
+
// Use provided workspace
|
|
67
|
+
activeWorkspace = workspace;
|
|
68
|
+
const existing = workspaces.find(w => w.id === workspace.id);
|
|
69
|
+
if (!existing) {
|
|
70
|
+
// New workspace, save it
|
|
71
|
+
activeWorkspace._core = this;
|
|
72
|
+
this.saveWorkspaceToAppState(activeWorkspace);
|
|
73
|
+
}
|
|
101
74
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
75
|
+
else if (mostRecentWorkspace) {
|
|
76
|
+
// Use most recent workspace
|
|
77
|
+
activeWorkspace = mostRecentWorkspace;
|
|
105
78
|
}
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
async updateObjectInDatabase(object) {
|
|
112
|
-
if (!this._database) {
|
|
113
|
-
throw new Error('Database not initialized');
|
|
79
|
+
else {
|
|
80
|
+
// Create fallback workspace
|
|
81
|
+
activeWorkspace = new KritzelWorkspace(ObjectHelper.generateUUID(), 'New Workspace');
|
|
82
|
+
activeWorkspace._core = this;
|
|
83
|
+
this.saveWorkspaceToAppState(activeWorkspace);
|
|
114
84
|
}
|
|
115
|
-
|
|
116
|
-
if (
|
|
117
|
-
|
|
85
|
+
// Destroy old ObjectMap if switching workspaces
|
|
86
|
+
if (this._store.state.objectsMap && this._store.state.objectsMap.isReady) {
|
|
87
|
+
this._store.state.objectsMap.destroy();
|
|
118
88
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
89
|
+
// Set active workspace
|
|
90
|
+
this._store.state.activeWorkspace = activeWorkspace;
|
|
91
|
+
this._store.state.workspaces = this.loadWorkspacesFromAppState();
|
|
92
|
+
// Set viewport from workspace
|
|
93
|
+
const viewport = activeWorkspace.viewport ?? { translateX: 0, translateY: 0, scale: 1 };
|
|
94
|
+
this._store.state.translateX = viewport.translateX ?? 0;
|
|
95
|
+
this._store.state.translateY = viewport.translateY ?? 0;
|
|
96
|
+
this._store.state.scale = viewport.scale ?? 1;
|
|
97
|
+
// Create new ObjectMap with its own Y.Doc for this workspace
|
|
98
|
+
const objectsMap = new KritzelObjectMap();
|
|
99
|
+
await objectsMap.initialize(this, activeWorkspace.id, this._syncConfig);
|
|
100
|
+
this._store.state.objectsMap = objectsMap;
|
|
101
|
+
this.rerender();
|
|
123
102
|
}
|
|
124
|
-
|
|
125
|
-
if (
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
const activeWorkspace = this._store.state.activeWorkspace;
|
|
129
|
-
if (!activeWorkspace) {
|
|
130
|
-
throw new Error('Workspace not initialized');
|
|
103
|
+
rerender() {
|
|
104
|
+
if (this._kritzelEngine) {
|
|
105
|
+
this._kritzelEngine.forceUpdate++;
|
|
131
106
|
}
|
|
132
|
-
activeWorkspace.updatedAt = new Date();
|
|
133
|
-
await this._database.batch([db => db.delete('objects', [activeWorkspace.id, objectId]), db => db.update('workspaces', activeWorkspace)]).catch(err => {
|
|
134
|
-
console.error('Error deleting object from database:', err);
|
|
135
|
-
});
|
|
136
107
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
108
|
+
findObjectById(id) {
|
|
109
|
+
for (const object of this._store.allObjects) {
|
|
110
|
+
if (object.id === id) {
|
|
111
|
+
return object;
|
|
112
|
+
}
|
|
140
113
|
}
|
|
141
|
-
|
|
142
|
-
return this._database.get('workspaces', id).then(rawWorkspace => (rawWorkspace ? reviver.revive(rawWorkspace) : null));
|
|
114
|
+
return null;
|
|
143
115
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
throw new Error('Database not initialized');
|
|
147
|
-
}
|
|
148
|
-
const reviver = new KritzelReviver(this);
|
|
149
|
-
return this._database.getAll('workspaces').then(rawWorkspaces => rawWorkspaces.map(ws => reviver.revive(ws)));
|
|
116
|
+
getWorkspaces() {
|
|
117
|
+
return this.loadWorkspacesFromAppState();
|
|
150
118
|
}
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
throw new Error('Database not initialized');
|
|
154
|
-
}
|
|
119
|
+
createWorkspace(workspace) {
|
|
120
|
+
workspace._core = this;
|
|
155
121
|
workspace.createdAt = new Date();
|
|
156
122
|
workspace.updatedAt = new Date();
|
|
157
|
-
|
|
158
|
-
this._store.state.workspaces.
|
|
123
|
+
this.saveWorkspaceToAppState(workspace);
|
|
124
|
+
this._store.state.workspaces = this.loadWorkspacesFromAppState();
|
|
159
125
|
}
|
|
160
|
-
|
|
161
|
-
if (!this._database) {
|
|
162
|
-
throw new Error('Database not initialized');
|
|
163
|
-
}
|
|
126
|
+
updateWorkspace(workspace) {
|
|
164
127
|
workspace.updatedAt = new Date();
|
|
165
|
-
|
|
128
|
+
this.saveWorkspaceToAppState(workspace);
|
|
166
129
|
const workspaces = this._store.state.workspaces;
|
|
167
130
|
const index = workspaces.findIndex(w => w.id === workspace.id);
|
|
168
131
|
if (index !== -1) {
|
|
@@ -170,126 +133,216 @@ export class KritzelCore {
|
|
|
170
133
|
this._store.state.workspaces = workspaces;
|
|
171
134
|
}
|
|
172
135
|
}
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
136
|
+
deleteWorkspace(workspace) {
|
|
137
|
+
// If deleting the active workspace, need to handle ObjectMap cleanup
|
|
138
|
+
if (this._store.state.activeWorkspace?.id === workspace.id) {
|
|
139
|
+
this._store.state.objectsMap?.destroy();
|
|
176
140
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
141
|
+
this.deleteWorkspaceFromAppState(workspace.id);
|
|
142
|
+
this._store.state.workspaces = this.loadWorkspacesFromAppState();
|
|
143
|
+
// Also delete the workspace's IndexedDB database
|
|
144
|
+
const dbName = `kritzel-workspace-${workspace.id}`;
|
|
145
|
+
window.indexedDB.deleteDatabase(dbName);
|
|
181
146
|
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
147
|
+
updateWorkspaceViewport(translateX, translateY, scale) {
|
|
148
|
+
const activeWorkspace = this._store.state.activeWorkspace;
|
|
149
|
+
if (!activeWorkspace) {
|
|
150
|
+
return;
|
|
185
151
|
}
|
|
152
|
+
activeWorkspace.viewport = { translateX, translateY, scale };
|
|
153
|
+
activeWorkspace.updatedAt = new Date();
|
|
154
|
+
this.saveWorkspaceToAppState(activeWorkspace);
|
|
186
155
|
}
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
156
|
+
addObject(object) {
|
|
157
|
+
this._store.state.objectsMap.insert(object);
|
|
158
|
+
}
|
|
159
|
+
removeObject(object) {
|
|
160
|
+
object.isMounted = false;
|
|
161
|
+
this._store.state.objectsMap.remove(o => o.id === object.id);
|
|
162
|
+
}
|
|
163
|
+
updateObject(object, updatedProperties) {
|
|
164
|
+
for (const key in updatedProperties) {
|
|
165
|
+
if (updatedProperties.hasOwnProperty(key)) {
|
|
166
|
+
object[key] = updatedProperties[key];
|
|
191
167
|
}
|
|
192
168
|
}
|
|
193
|
-
|
|
169
|
+
this._store.state.objectsMap.update(object);
|
|
194
170
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
171
|
+
addSelectionGroup(selectionGroup) {
|
|
172
|
+
this.removeSelectionGroup();
|
|
173
|
+
this.removeSelectionBox();
|
|
174
|
+
this._store.state.objectsMap.insert(selectionGroup);
|
|
175
|
+
}
|
|
176
|
+
removeSelectionGroup() {
|
|
177
|
+
const selectionGroup = this._store.selectionGroup;
|
|
178
|
+
if (selectionGroup) {
|
|
179
|
+
this._store.state.objectsMap.remove(object => object.id === selectionGroup.id);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
removeSelectionBox() {
|
|
183
|
+
const selectionBox = this._store.selectionBox;
|
|
184
|
+
if (selectionBox) {
|
|
185
|
+
this._store.state.objectsMap.remove(object => object.id === selectionBox.id);
|
|
198
186
|
}
|
|
199
187
|
}
|
|
188
|
+
deselectAllObjects() {
|
|
189
|
+
this.removeSelectionGroup();
|
|
190
|
+
this.rerender();
|
|
191
|
+
}
|
|
200
192
|
delete() {
|
|
201
|
-
|
|
193
|
+
const selectionGroup = this._store.selectionGroup;
|
|
194
|
+
if (!selectionGroup) {
|
|
202
195
|
return;
|
|
203
196
|
}
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
197
|
+
selectionGroup.objects.forEach(obj => this.removeObject(obj));
|
|
198
|
+
this.removeSelectionGroup();
|
|
199
|
+
this.rerender();
|
|
200
|
+
}
|
|
201
|
+
undo() {
|
|
202
|
+
this._store.state.objectsMap?.undo();
|
|
203
|
+
}
|
|
204
|
+
redo() {
|
|
205
|
+
this._store.state.objectsMap?.redo();
|
|
208
206
|
}
|
|
209
|
-
deleteObject(id
|
|
207
|
+
deleteObject(id) {
|
|
210
208
|
const object = this.findObjectById(id);
|
|
211
209
|
if (object) {
|
|
212
|
-
|
|
213
|
-
this.
|
|
210
|
+
this.removeObject(object);
|
|
211
|
+
this.rerender();
|
|
214
212
|
}
|
|
215
213
|
}
|
|
216
214
|
copy() {
|
|
217
|
-
|
|
215
|
+
const selectionGroup = this._store.selectionGroup;
|
|
216
|
+
if (selectionGroup) {
|
|
217
|
+
// Copy each object and store them in an array
|
|
218
|
+
this._store.state.copiedObjects = selectionGroup.objects.sort((a, b) => a.zIndex - b.zIndex).map(obj => obj.copy());
|
|
219
|
+
}
|
|
218
220
|
}
|
|
219
221
|
paste(x, y) {
|
|
220
222
|
const copiedObjects = this._store.state.copiedObjects;
|
|
221
|
-
copiedObjects.
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
const adjustedY = y !== undefined ? y : this._store.state.copiedObjects.translateY + 25 / this._store.state.scale;
|
|
225
|
-
this._store.state.copiedObjects.updatePosition(adjustedX, adjustedY);
|
|
226
|
-
this._store.state.copiedObjects.updateZIndices(this._store.currentZIndex);
|
|
223
|
+
if (!copiedObjects || copiedObjects.length === 0) {
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
227
226
|
const activeWorkspace = this._store.state.activeWorkspace;
|
|
228
|
-
if
|
|
229
|
-
|
|
227
|
+
// Check if we're pasting from a different workspace
|
|
228
|
+
const isDifferentWorkspace = copiedObjects.some(obj => obj.workspaceId !== activeWorkspace.id);
|
|
229
|
+
// Calculate the bounding box of all copied objects
|
|
230
|
+
const minX = Math.min(...copiedObjects.map(obj => obj.translateX));
|
|
231
|
+
const minY = Math.min(...copiedObjects.map(obj => obj.translateY));
|
|
232
|
+
// Determine the paste position
|
|
233
|
+
let pasteX;
|
|
234
|
+
let pasteY;
|
|
235
|
+
if (x !== undefined && y !== undefined) {
|
|
236
|
+
// Explicit position provided (e.g., right-click paste)
|
|
237
|
+
pasteX = x;
|
|
238
|
+
pasteY = y;
|
|
239
|
+
}
|
|
240
|
+
else if (isDifferentWorkspace) {
|
|
241
|
+
// Pasting to different workspace without explicit position
|
|
242
|
+
// Keep original position; will be centered by centerInViewport() later
|
|
243
|
+
pasteX = minX;
|
|
244
|
+
pasteY = minY;
|
|
245
|
+
}
|
|
246
|
+
else {
|
|
247
|
+
// Same workspace paste: offset by 25 pixels from original position
|
|
248
|
+
pasteX = minX + 25 / this._store.state.scale;
|
|
249
|
+
pasteY = minY + 25 / this._store.state.scale;
|
|
250
|
+
}
|
|
251
|
+
// Calculate the offset to apply to all objects
|
|
252
|
+
const offsetX = pasteX - minX;
|
|
253
|
+
const offsetY = pasteY - minY;
|
|
254
|
+
this.removeSelectionGroup();
|
|
255
|
+
this.removeSelectionBox();
|
|
256
|
+
// Create a new selection group for the pasted objects
|
|
257
|
+
const selectionGroup = KritzelSelectionGroup.create(this);
|
|
258
|
+
// First add all copied objects to the objectsMap with updated positions
|
|
259
|
+
copiedObjects.forEach((obj, i) => {
|
|
260
|
+
// Update workspace if pasting to a different workspace
|
|
261
|
+
if (obj.workspaceId !== activeWorkspace.id) {
|
|
262
|
+
obj.workspaceId = activeWorkspace.id;
|
|
263
|
+
}
|
|
264
|
+
// Update position
|
|
265
|
+
obj.updatePosition(obj.translateX + offsetX, obj.translateY + offsetY);
|
|
266
|
+
// Update z-index
|
|
267
|
+
obj.zIndex = this._store.currentZIndex + i;
|
|
268
|
+
// Add to objectsMap
|
|
269
|
+
this.addObject(obj);
|
|
270
|
+
// Add to selection group
|
|
271
|
+
selectionGroup.addOrRemove(obj);
|
|
272
|
+
});
|
|
273
|
+
// Mark selection group as selected
|
|
274
|
+
selectionGroup.isSelected = true;
|
|
275
|
+
// Set rotation for single object
|
|
276
|
+
if (copiedObjects.length === 1) {
|
|
277
|
+
selectionGroup.rotation = copiedObjects[0].rotation;
|
|
278
|
+
}
|
|
279
|
+
// Add the selection group
|
|
280
|
+
this.addSelectionGroup(selectionGroup);
|
|
281
|
+
// Handle cross-workspace paste: center objects in viewport
|
|
282
|
+
if (isDifferentWorkspace) {
|
|
230
283
|
if (x !== undefined && y !== undefined) {
|
|
231
|
-
|
|
284
|
+
// Position was explicitly provided, use it
|
|
285
|
+
selectionGroup.updatePosition(x, y);
|
|
232
286
|
}
|
|
233
287
|
else {
|
|
234
|
-
|
|
288
|
+
// Center the selection group in the viewport
|
|
289
|
+
selectionGroup.centerInViewport();
|
|
235
290
|
}
|
|
236
|
-
|
|
291
|
+
// Fit the viewport to show the pasted objects
|
|
292
|
+
this.engine.viewport.centerFitInViewport(selectionGroup);
|
|
237
293
|
}
|
|
238
|
-
const commands = [];
|
|
239
|
-
let previousSelectionGroup = null;
|
|
240
|
-
if (this._store.state.selectionGroup !== null) {
|
|
241
|
-
previousSelectionGroup = this._store.state.selectionGroup;
|
|
242
|
-
commands.push(new RemoveSelectionGroupCommand(this, this._store.state.selectionGroup));
|
|
243
|
-
}
|
|
244
|
-
const addCopiedObjectsCommands = this._store.state.copiedObjects.objects.map(obj => new AddObjectCommand(this, this, obj));
|
|
245
|
-
const addCopiedObjectsAsSelectionGroupCommand = new AddSelectionGroupCommand(this, this, this._store.state.copiedObjects, previousSelectionGroup);
|
|
246
|
-
commands.push(...addCopiedObjectsCommands, addCopiedObjectsAsSelectionGroupCommand);
|
|
247
|
-
this.commandManager.executeCommand(new BatchCommand(this, this, commands));
|
|
248
294
|
this._store.state.isSelecting = false;
|
|
249
|
-
|
|
295
|
+
// Update copiedObjects to the newly created objects for potential future pastes
|
|
296
|
+
const newSelectionGroup = this._store.selectionGroup;
|
|
297
|
+
if (newSelectionGroup) {
|
|
298
|
+
this._store.state.copiedObjects = newSelectionGroup.objects.sort((a, b) => a.zIndex - b.zIndex).map(obj => obj.copy());
|
|
299
|
+
}
|
|
250
300
|
this._store.setState('activeTool', KritzelToolRegistry.getTool('selection'));
|
|
301
|
+
this.rerender();
|
|
251
302
|
}
|
|
252
303
|
bringForward(object) {
|
|
253
|
-
const
|
|
304
|
+
const selectionGroup = this._store.selectionGroup;
|
|
305
|
+
const objects = object ? [object] : selectionGroup?.objects || [];
|
|
254
306
|
const allNonSelectionObjectsWithoutCurrent = this._store.allNonSelectionObjects.filter(o => objects.findIndex(obj => obj.id === o.id) === -1);
|
|
255
307
|
const max = allNonSelectionObjectsWithoutCurrent.length > 0 ? Math.max(...allNonSelectionObjectsWithoutCurrent.map(obj => obj.zIndex)) + 1 : 0;
|
|
256
|
-
|
|
257
|
-
if (obj.zIndex
|
|
258
|
-
|
|
308
|
+
objects.forEach(obj => {
|
|
309
|
+
if (obj.zIndex !== max) {
|
|
310
|
+
this.updateObject(obj, { zIndex: obj.zIndex + 1 });
|
|
259
311
|
}
|
|
260
|
-
return new UpdateObjectCommand(this, this, obj, { zIndex: obj.zIndex + 1 });
|
|
261
312
|
});
|
|
262
|
-
this.
|
|
313
|
+
this.rerender();
|
|
263
314
|
}
|
|
264
315
|
sendBackward(object) {
|
|
265
|
-
const
|
|
316
|
+
const selectionGroup = this._store.selectionGroup;
|
|
317
|
+
const objects = object ? [object] : selectionGroup?.objects || [];
|
|
266
318
|
const allNonSelectionObjectsWithoutCurrent = this._store.allNonSelectionObjects.filter(o => objects.findIndex(obj => obj.id === o.id) === -1);
|
|
267
319
|
const min = allNonSelectionObjectsWithoutCurrent.length > 0 ? Math.min(...allNonSelectionObjectsWithoutCurrent.map(obj => obj.zIndex)) - 1 : 0;
|
|
268
|
-
|
|
269
|
-
if (obj.zIndex
|
|
270
|
-
|
|
320
|
+
objects.forEach(obj => {
|
|
321
|
+
if (obj.zIndex !== min) {
|
|
322
|
+
this.updateObject(obj, { zIndex: obj.zIndex - 1 });
|
|
271
323
|
}
|
|
272
|
-
return new UpdateObjectCommand(this, this, obj, { zIndex: obj.zIndex - 1 });
|
|
273
324
|
});
|
|
274
|
-
this.
|
|
325
|
+
this.rerender();
|
|
275
326
|
}
|
|
276
327
|
bringToFront(object) {
|
|
277
|
-
const
|
|
328
|
+
const selectionGroup = this._store.selectionGroup;
|
|
329
|
+
const objects = object ? [object] : selectionGroup?.objects || [];
|
|
278
330
|
const allNonSelectionObjectsWithoutCurrent = this._store.allNonSelectionObjects.filter(o => objects.findIndex(obj => obj.id === o.id) === -1);
|
|
279
331
|
const max = Math.max(...allNonSelectionObjectsWithoutCurrent.map(obj => obj.zIndex)) + 1;
|
|
280
|
-
|
|
281
|
-
|
|
332
|
+
objects.forEach(obj => {
|
|
333
|
+
this.updateObject(obj, { zIndex: max });
|
|
282
334
|
});
|
|
283
|
-
this.
|
|
335
|
+
this.rerender();
|
|
284
336
|
}
|
|
285
337
|
sendToBack(object) {
|
|
286
|
-
const
|
|
338
|
+
const selectionGroup = this._store.selectionGroup;
|
|
339
|
+
const objects = object ? [object] : selectionGroup?.objects || [];
|
|
287
340
|
const allNonSelectionObjectsWithoutCurrent = this._store.allNonSelectionObjects.filter(o => objects.findIndex(obj => obj.id === o.id) === -1);
|
|
288
341
|
const min = Math.min(...allNonSelectionObjectsWithoutCurrent.map(obj => obj.zIndex)) - 1;
|
|
289
|
-
|
|
290
|
-
|
|
342
|
+
objects.forEach(obj => {
|
|
343
|
+
this.updateObject(obj, { zIndex: min });
|
|
291
344
|
});
|
|
292
|
-
this.
|
|
345
|
+
this.rerender();
|
|
293
346
|
}
|
|
294
347
|
selectObjects(objects) {
|
|
295
348
|
if (objects.length === 0) {
|
|
@@ -301,16 +354,16 @@ export class KritzelCore {
|
|
|
301
354
|
selectionGroup.addOrRemove(obj);
|
|
302
355
|
});
|
|
303
356
|
selectionGroup.isSelected = true;
|
|
304
|
-
this._store.state.selectionBox = selectionGroup;
|
|
305
357
|
if (objects.length === 1) {
|
|
306
358
|
selectionGroup.rotation = selectionGroup.objects[0].rotation;
|
|
307
359
|
}
|
|
308
|
-
this.
|
|
360
|
+
this.addSelectionGroup(selectionGroup);
|
|
361
|
+
this.rerender();
|
|
309
362
|
}
|
|
310
363
|
selectAllObjectsInViewport() {
|
|
311
364
|
const objectsInViewport = this._store.state.objectsMap
|
|
312
365
|
.filter(o => o.isInViewport())
|
|
313
|
-
.filter(o => !(o instanceof KritzelSelectionGroup) && !(o instanceof
|
|
366
|
+
.filter(o => !(o instanceof KritzelSelectionGroup) && !(o instanceof KritzelSelectionBox) && !(o instanceof KritzelContextMenu));
|
|
314
367
|
if (objectsInViewport.length > 0) {
|
|
315
368
|
const selectionGroup = KritzelSelectionGroup.create(this);
|
|
316
369
|
objectsInViewport.forEach(obj => {
|
|
@@ -322,30 +375,29 @@ export class KritzelCore {
|
|
|
322
375
|
if (objectsInViewport.length === 1) {
|
|
323
376
|
selectionGroup.rotation = selectionGroup.objects[0].rotation;
|
|
324
377
|
}
|
|
325
|
-
this.
|
|
378
|
+
this.addSelectionGroup(selectionGroup);
|
|
326
379
|
this._store.setState('activeTool', KritzelToolRegistry.getTool('selection'));
|
|
380
|
+
this.rerender();
|
|
327
381
|
}
|
|
328
382
|
}
|
|
329
383
|
clearSelection() {
|
|
330
|
-
|
|
331
|
-
this.
|
|
332
|
-
this._store.state.selectionGroup = null;
|
|
333
|
-
this._store.state.selectionBox = null;
|
|
384
|
+
this.removeSelectionGroup();
|
|
385
|
+
this._store.state.objectsMap.remove(o => o instanceof KritzelSelectionBox || o instanceof KritzelSelectionGroup);
|
|
334
386
|
this._store.state.isSelecting = false;
|
|
335
387
|
this._store.state.isResizeHandleSelected = false;
|
|
336
388
|
this._store.state.isRotationHandleSelected = false;
|
|
337
389
|
this.rerender();
|
|
338
390
|
}
|
|
339
391
|
resetActiveText() {
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
392
|
+
const activeText = this._store.activeText;
|
|
393
|
+
if (activeText) {
|
|
394
|
+
if (activeText.isEmpty) {
|
|
395
|
+
this.deleteObject(activeText.id);
|
|
343
396
|
}
|
|
344
397
|
else {
|
|
345
|
-
|
|
398
|
+
activeText.save();
|
|
346
399
|
}
|
|
347
400
|
}
|
|
348
|
-
this._store.state.activeText = null;
|
|
349
401
|
}
|
|
350
402
|
getObjectFromPointerEvent(event, selector = '.object') {
|
|
351
403
|
const shadowRoot = this._store.state.host?.shadowRoot;
|