kritzel-stencil 0.0.153 → 0.0.154
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/{default-text-tool.config-Cds94FE8.js → default-text-tool.config-BySzvIox.js} +53 -39
- package/dist/cjs/default-text-tool.config-BySzvIox.js.map +1 -0
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/kritzel-color_22.cjs.entry.js +110 -64
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/stencil.cjs.js +1 -1
- package/dist/collection/classes/core/core.class.js +16 -14
- package/dist/collection/classes/core/core.class.js.map +1 -1
- package/dist/collection/classes/core/store.class.js +8 -8
- package/dist/collection/classes/core/store.class.js.map +1 -1
- package/dist/collection/classes/core/viewport.class.js +1 -1
- package/dist/collection/classes/core/viewport.class.js.map +1 -1
- package/dist/collection/classes/handlers/context-menu.handler.js +1 -1
- package/dist/collection/classes/handlers/context-menu.handler.js.map +1 -1
- package/dist/collection/classes/handlers/move.handler.js +2 -0
- package/dist/collection/classes/handlers/move.handler.js.map +1 -1
- package/dist/collection/classes/handlers/resize.handler.js +2 -0
- package/dist/collection/classes/handlers/resize.handler.js.map +1 -1
- package/dist/collection/classes/handlers/rotation.handler.js +2 -0
- package/dist/collection/classes/handlers/rotation.handler.js.map +1 -1
- package/dist/collection/classes/handlers/selection.handler.js +7 -5
- package/dist/collection/classes/handlers/selection.handler.js.map +1 -1
- package/dist/collection/classes/objects/base-object.class.js +5 -5
- package/dist/collection/classes/objects/base-object.class.js.map +1 -1
- package/dist/collection/classes/objects/custom-element.class.js +1 -1
- package/dist/collection/classes/objects/custom-element.class.js.map +1 -1
- package/dist/collection/classes/objects/image.class.js +1 -1
- package/dist/collection/classes/objects/image.class.js.map +1 -1
- package/dist/collection/classes/objects/path.class.js +4 -4
- package/dist/collection/classes/objects/path.class.js.map +1 -1
- package/dist/collection/classes/objects/selection-group.class.js +10 -10
- package/dist/collection/classes/objects/selection-group.class.js.map +1 -1
- package/dist/collection/classes/objects/text.class.js +5 -4
- package/dist/collection/classes/objects/text.class.js.map +1 -1
- package/dist/collection/classes/structures/object-map.structure.js +10 -0
- package/dist/collection/classes/structures/object-map.structure.js.map +1 -1
- package/dist/collection/classes/tools/brush-tool.class.js +8 -6
- package/dist/collection/classes/tools/brush-tool.class.js.map +1 -1
- package/dist/collection/classes/tools/eraser-tool.class.js +2 -0
- package/dist/collection/classes/tools/eraser-tool.class.js.map +1 -1
- package/dist/collection/classes/tools/image-tool.class.js +1 -0
- package/dist/collection/classes/tools/image-tool.class.js.map +1 -1
- package/dist/collection/classes/tools/text-tool.class.js +2 -2
- package/dist/collection/classes/tools/text-tool.class.js.map +1 -1
- package/dist/collection/components/core/kritzel-editor/kritzel-editor.js +60 -4
- package/dist/collection/components/core/kritzel-editor/kritzel-editor.js.map +1 -1
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.js +80 -23
- package/dist/collection/components/core/kritzel-engine/kritzel-engine.js.map +1 -1
- package/dist/collection/components/shared/kritzel-color-palette/kritzel-color-palette.css +0 -5
- package/dist/collection/components/shared/kritzel-menu/kritzel-menu.css +0 -3
- package/dist/collection/components/shared/kritzel-menu-item/kritzel-menu-item.css +0 -2
- package/dist/collection/components/shared/kritzel-split-button/kritzel-split-button.css +0 -1
- package/dist/collection/components/shared/kritzel-stroke-size/kritzel-stroke-size.css +0 -4
- package/dist/collection/components/ui/kritzel-control-brush-config/kritzel-control-brush-config.css +0 -4
- package/dist/collection/components/ui/kritzel-controls/kritzel-controls.css +0 -5
- package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js +28 -3
- package/dist/collection/components/ui/kritzel-controls/kritzel-controls.js.map +1 -1
- package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.css +8 -2
- package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js +30 -1
- package/dist/collection/components/ui/kritzel-utility-panel/kritzel-utility-panel.js.map +1 -1
- package/dist/collection/configs/default-engine-config.js +1 -1
- package/dist/collection/configs/default-engine-config.js.map +1 -1
- package/dist/collection/interfaces/engine-state.interface.js.map +1 -1
- package/dist/collection/interfaces/undo-state.interface.js +2 -0
- package/dist/collection/interfaces/undo-state.interface.js.map +1 -0
- package/dist/components/index.js +3 -3
- package/dist/components/kritzel-color-palette.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-editor.js +30 -14
- package/dist/components/kritzel-editor.js.map +1 -1
- package/dist/components/kritzel-engine.js +1 -1
- package/dist/components/kritzel-menu-item.js +1 -1
- package/dist/components/kritzel-menu.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-utility-panel.js +1 -1
- package/dist/components/kritzel-workspace-manager.js +1 -1
- package/dist/components/{p-CcqEzr-v.js → p-1lIHoOlH.js} +14 -12
- package/dist/components/p-1lIHoOlH.js.map +1 -0
- package/dist/components/{p-BDHz9TkP.js → p-B4kxkVe-.js} +3 -3
- package/dist/components/p-B4kxkVe-.js.map +1 -0
- package/dist/components/{p-G8Xyn7XV.js → p-BQg4YML7.js} +3 -3
- package/dist/components/{p-G8Xyn7XV.js.map → p-BQg4YML7.js.map} +1 -1
- package/dist/components/{p-BDvBsqPy.js → p-BfaEHdtM.js} +108 -68
- package/dist/components/p-BfaEHdtM.js.map +1 -0
- package/dist/components/{p-BJ-T4laL.js → p-CBYBurdY.js} +26 -23
- package/dist/components/p-CBYBurdY.js.map +1 -0
- package/dist/components/{p-DnOeM6VQ.js → p-CK6no3mi.js} +4 -4
- package/dist/components/{p-DnOeM6VQ.js.map → p-CK6no3mi.js.map} +1 -1
- package/dist/components/{p-DKVBZiTy.js → p-CsA9M6me.js} +4 -4
- package/dist/components/p-CsA9M6me.js.map +1 -0
- package/dist/components/{p-CJzBIV7n.js → p-D1uj4A4F.js} +3 -3
- package/dist/components/p-D1uj4A4F.js.map +1 -0
- package/dist/components/{p-Cqpp9wKT.js → p-DAfkuR8U.js} +8 -5
- package/dist/components/p-DAfkuR8U.js.map +1 -0
- package/dist/components/{p-CRB1YGoc.js → p-Ddh40W3x.js} +5 -5
- package/dist/components/p-Ddh40W3x.js.map +1 -0
- package/dist/components/{p-DhDRFCsP.js → p-TdCTkEu0.js} +4 -4
- package/dist/components/p-TdCTkEu0.js.map +1 -0
- package/dist/esm/{default-text-tool.config-ClW1W-X4.js → default-text-tool.config-2YFQA3SF.js} +53 -39
- package/dist/esm/default-text-tool.config-2YFQA3SF.js.map +1 -0
- package/dist/esm/index.js +2 -2
- package/dist/esm/kritzel-color_22.entry.js +110 -64
- package/dist/esm/loader.js +1 -1
- package/dist/esm/stencil.js +1 -1
- package/dist/stencil/index.esm.js +1 -1
- package/dist/stencil/p-2YFQA3SF.js +2 -0
- package/dist/stencil/p-2YFQA3SF.js.map +1 -0
- package/dist/stencil/p-bb5b2f78.entry.js +10 -0
- package/dist/stencil/p-bb5b2f78.entry.js.map +1 -0
- package/dist/stencil/stencil.esm.js +1 -1
- package/dist/types/classes/core/store.class.d.ts +4 -3
- package/dist/types/classes/structures/object-map.structure.d.ts +2 -0
- package/dist/types/components/core/kritzel-editor/kritzel-editor.d.ts +8 -1
- package/dist/types/components/core/kritzel-engine/kritzel-engine.d.ts +4 -0
- package/dist/types/components/ui/kritzel-controls/kritzel-controls.d.ts +2 -0
- package/dist/types/components/ui/kritzel-utility-panel/kritzel-utility-panel.d.ts +2 -0
- package/dist/types/components.d.ts +28 -0
- package/dist/types/interfaces/engine-state.interface.d.ts +1 -1
- package/dist/types/interfaces/undo-state.interface.d.ts +6 -0
- package/package.json +1 -1
- package/dist/cjs/default-text-tool.config-Cds94FE8.js.map +0 -1
- package/dist/components/p-BDHz9TkP.js.map +0 -1
- package/dist/components/p-BDvBsqPy.js.map +0 -1
- package/dist/components/p-BJ-T4laL.js.map +0 -1
- package/dist/components/p-CJzBIV7n.js.map +0 -1
- package/dist/components/p-CRB1YGoc.js.map +0 -1
- package/dist/components/p-CcqEzr-v.js.map +0 -1
- package/dist/components/p-Cqpp9wKT.js.map +0 -1
- package/dist/components/p-DKVBZiTy.js.map +0 -1
- package/dist/components/p-DhDRFCsP.js.map +0 -1
- package/dist/esm/default-text-tool.config-ClW1W-X4.js.map +0 -1
- package/dist/stencil/p-843d013b.entry.js +0 -10
- package/dist/stencil/p-843d013b.entry.js.map +0 -1
- package/dist/stencil/p-ClW1W-X4.js +0 -2
- package/dist/stencil/p-ClW1W-X4.js.map +0 -1
|
@@ -48,7 +48,7 @@ export class KritzelCustomElement extends KritzelBaseObject {
|
|
|
48
48
|
this.element.style.height = `${height}px`;
|
|
49
49
|
}
|
|
50
50
|
// Update to sync changes to y.js and propagate to other tabs
|
|
51
|
-
this._core.store.state.
|
|
51
|
+
this._core.store.state.objects.update(this);
|
|
52
52
|
}
|
|
53
53
|
copy() {
|
|
54
54
|
const copiedObject = Object.create(Object.getPrototypeOf(this));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom-element.class.js","sourceRoot":"","sources":["../../../src/classes/objects/custom-element.class.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,OAAO,oBAAqB,SAAQ,iBAA8B;IAC7D,SAAS,GAAW,sBAAsB,CAAC;IAEpD,OAAO,CAAc;IAErB,aAAa,GAAY,IAAI,CAAC;IAE9B,YAAY,MAA4H;QACtI,KAAK,EAAE,CAAC;QAER,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;YACzC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;YAC/B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;YAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAED,MAAM,CAAU,MAAM,CAAC,IAAiB,EAAE,MAOzC;QACC,MAAM,MAAM,GAAG,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAEhD,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAA;QAGxD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEQ,KAAK,CAAC,OAAoB;QACjC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QAED,6EAA6E;QAC7E,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,aAAa,KAAK,OAAO,EAAE,CAAC;YAC5F,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;QAC1B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,gDAAgD;QAChD,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAEQ,MAAM,CAAC,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc;QACjE,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QAEpB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,KAAK,IAAI,CAAC;YACxC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC;QAC5C,CAAC;QAED,6DAA6D;QAC7D,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"custom-element.class.js","sourceRoot":"","sources":["../../../src/classes/objects/custom-element.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\nexport class KritzelCustomElement extends KritzelBaseObject<HTMLElement> {\r\n override __class__: string = 'KritzelCustomElement';\r\n\r\n element: HTMLElement;\r\n\r\n isInteractive: boolean = true;\r\n\r\n constructor(config?: { element: HTMLElement; translateX?: number; translateY?: number; scale?: number, height?: number; width?: number }) {\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.scale = config.scale || 1;\r\n this.element = config.element;\r\n this.height = config.height || 0;\r\n this.width = config.width || 0;\r\n }\r\n }\r\n\r\n static override create(core: KritzelCore, config?: {\r\n element: HTMLElement;\r\n translateX?: number;\r\n translateY?: number;\r\n scale?: number;\r\n height?: number;\r\n width?: number;\r\n }): KritzelBaseObject<Element> {\r\n const object = new KritzelCustomElement(config);\r\n\r\n object._core = core;\r\n object.id = object.generateId();\r\n object.workspaceId = core.store.state.activeWorkspace.id\r\n\r\n\r\n return object;\r\n }\r\n\r\n override mount(element: HTMLElement): void {\r\n if (element === null) {\r\n return;\r\n }\r\n\r\n // If already mounted to the same element and content is still attached, skip\r\n if (this.isMounted && this.elementRef === element && this.element.parentElement === element) {\r\n return;\r\n }\r\n\r\n this.elementRef = element;\r\n this.isMounted = true;\r\n \r\n // Clear existing content and append the element\r\n this.elementRef.innerHTML = '';\r\n this.elementRef.appendChild(this.element);\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 this.width = width;\r\n this.height = height;\r\n this.translateX = x;\r\n this.translateY = y;\r\n\r\n if (this.element) {\r\n this.element.style.width = `${width}px`;\r\n this.element.style.height = `${height}px`;\r\n }\r\n\r\n // Update to sync changes to y.js and propagate to other tabs\r\n this._core.store.state.objects.update(this);\r\n }\r\n\r\n override copy(): KritzelCustomElement {\r\n const copiedObject: KritzelCustomElement = Object.create(Object.getPrototypeOf(this));\r\n Object.assign(copiedObject, this);\r\n copiedObject.id = this.generateId();\r\n copiedObject.isMounted = false;\r\n copiedObject.element = this.element.cloneNode(true) as HTMLElement;\r\n return copiedObject;\r\n }\r\n\r\n}\r\n"]}
|
|
@@ -38,7 +38,7 @@ export class KritzelImage extends KritzelBaseObject {
|
|
|
38
38
|
this.translateX = x;
|
|
39
39
|
this.translateY = y;
|
|
40
40
|
// Update to sync changes to y.js and propagate to other tabs
|
|
41
|
-
this._core.store.state.
|
|
41
|
+
this._core.store.state.objects.update(this);
|
|
42
42
|
}
|
|
43
43
|
calculateScaledDimensions(img) {
|
|
44
44
|
let scaledWidth = img.width;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image.class.js","sourceRoot":"","sources":["../../../src/classes/objects/image.class.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,OAAO,YAAa,SAAQ,iBAAmC;IAC1D,SAAS,GAAW,cAAc,CAAC;IAE5C,GAAG,GAAW,EAAE,CAAC;IAEjB,QAAQ,GAAW,GAAG,CAAC;IACvB,SAAS,GAAW,GAAG,CAAC;IAExB,kBAAkB,GAAW,GAAG,CAAC;IAExB,kBAAkB,GAAY,IAAI,CAAC;IAE5C,YAAY,MAA8B;QACxC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,GAAG,GAAG,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,MAAM,EAAE,UAAU,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,UAAU,GAAG,MAAM,EAAE,UAAU,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,GAAG,MAAM,EAAE,KAAK,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,MAAM,CAAU,MAAM,CAAC,IAAiB;QACtC,MAAM,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;QAElC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAA;QACxD,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;QACb,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;QACb,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC;QACtB,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC;QACtB,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;QAC9C,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QAEzC,OAAO,MAAM,CAAC;IAChB,CAAC;IAEQ,MAAM,CAAC,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc;QACjE,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAEzC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;QACtC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC;QACxC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QAEpB,6DAA6D;QAC7D,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"image.class.js","sourceRoot":"","sources":["../../../src/classes/objects/image.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\nexport class KritzelImage extends KritzelBaseObject<HTMLImageElement> {\r\n override __class__: string = 'KritzelImage';\r\n\r\n src: string = '';\r\n\r\n maxWidth: number = 300;\r\n maxHeight: number = 300;\r\n\r\n maxCompressionSize: number = 300;\r\n\r\n override isDebugInfoVisible: boolean = true;\r\n\r\n constructor(config?: Partial<KritzelImage>) {\r\n super();\r\n this.src = config?.src || '';\r\n this.x = config?.x || 0;\r\n this.y = config?.y || 0;\r\n this.translateX = config?.translateX || 0;\r\n this.translateY = config?.translateY || 0;\r\n this.scale = config?.scale || 1;\r\n }\r\n\r\n static override create(core: KritzelCore): KritzelImage {\r\n const object = new KritzelImage();\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.x = 0;\r\n object.y = 0;\r\n object.translateX = 0;\r\n object.translateY = 0;\r\n object.scale = object._core.store.state.scale;\r\n object.zIndex = core.store.currentZIndex;\r\n\r\n return object;\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 scaleFactor = height / this.height;\r\n\r\n this.width = this.width * scaleFactor;\r\n this.height = this.height * scaleFactor;\r\n this.translateX = x;\r\n this.translateY = y;\r\n\r\n // Update to sync changes to y.js and propagate to other tabs\r\n this._core.store.state.objects.update(this);\r\n }\r\n\r\n calculateScaledDimensions(img: HTMLImageElement): { scaledWidth: number; scaledHeight: number } {\r\n let scaledWidth = img.width;\r\n let scaledHeight = img.height;\r\n\r\n if (img.width > this.maxWidth || img.height > this.maxHeight) {\r\n const widthRatio = this.maxWidth / img.width;\r\n const heightRatio = this.maxHeight / img.height;\r\n const scaleRatio = Math.min(widthRatio, heightRatio);\r\n\r\n scaledWidth = img.width * scaleRatio;\r\n scaledHeight = img.height * scaleRatio;\r\n }\r\n\r\n return { scaledWidth, scaledHeight };\r\n }\r\n}\r\n"]}
|
|
@@ -69,12 +69,12 @@ export class KritzelPath extends KritzelBaseObject {
|
|
|
69
69
|
this.translateX = x;
|
|
70
70
|
this.translateY = y;
|
|
71
71
|
this._adjustedPoints = null;
|
|
72
|
-
this._core.store.state.
|
|
72
|
+
this._core.store.state.objects.update(this);
|
|
73
73
|
}
|
|
74
74
|
rotate(value) {
|
|
75
75
|
this.rotation = value;
|
|
76
76
|
this._adjustedPoints = null;
|
|
77
|
-
this._core.store.state.
|
|
77
|
+
this._core.store.state.objects.update(this);
|
|
78
78
|
}
|
|
79
79
|
move(startX, startY, endX, endY) {
|
|
80
80
|
const deltaX = (startX - endX) / this._core.store.state.scale;
|
|
@@ -82,7 +82,7 @@ export class KritzelPath extends KritzelBaseObject {
|
|
|
82
82
|
this.translateX += deltaX;
|
|
83
83
|
this.translateY += deltaY;
|
|
84
84
|
this._adjustedPoints = null;
|
|
85
|
-
this._core.store.state.
|
|
85
|
+
this._core.store.state.objects.update(this);
|
|
86
86
|
}
|
|
87
87
|
hitTest(x, y) {
|
|
88
88
|
const halfStroke = this.strokeWidth / this.scale / 2;
|
|
@@ -158,7 +158,7 @@ export class KritzelPath extends KritzelBaseObject {
|
|
|
158
158
|
this.translateX = x;
|
|
159
159
|
this.translateY = y;
|
|
160
160
|
this._adjustedPoints = null;
|
|
161
|
-
this._core.store.state.
|
|
161
|
+
this._core.store.state.objects.update(this);
|
|
162
162
|
}
|
|
163
163
|
computeAdjustedPoints() {
|
|
164
164
|
if (!this.points?.length) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path.class.js","sourceRoot":"","sources":["../../../src/classes/objects/path.class.ts"],"names":[],"mappings":"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","sourcesContent":["import { getStroke } from 'perfect-freehand';\r\nimport { KritzelMathHelper } from '../../helpers/math.helper';\r\nimport { KritzelPathOptions } from '../../interfaces/path-options.interface';\r\nimport { KritzelBaseObject } from './base-object.class';\r\nimport { KritzelPolygon } from '../../interfaces/polygon.interface';\r\nimport { KritzelGeometryHelper } from '../../helpers/geometry.helper';\r\nimport { KritzelPoint } from '../../interfaces/point.interface';\r\nimport { KritzelCore } from '../core/core.class';\r\n\r\nexport class KritzelPath extends KritzelBaseObject<SVGElement> {\r\n override __class__: string = 'KritzelPath';\r\n\r\n points: number[][];\r\n d: string;\r\n stroke: string = 'none';\r\n strokeWidth: number;\r\n lineSlack: number = 0.5;\r\n fill: string;\r\n x: number = 0;\r\n y: number = 0;\r\n height: number = 0;\r\n width: number = 0;\r\n scale: number = 1;\r\n options: KritzelPathOptions | undefined;\r\n\r\n isVisible: boolean = true;\r\n isDebugInfoVisible: boolean = true;\r\n isCompleted: boolean = false;\r\n\r\n private _adjustedPoints?: number[][] = null;\r\n\r\n get viewBox(): string {\r\n return `${this.x} ${this.y} ${this.width} ${this.height}`;\r\n }\r\n\r\n constructor(config?: { points: number[][]; translateX?: number; translateY?: number; scale?: number; strokeWidth?: number; fill?: string; lineSlack?: number }) {\r\n super();\r\n this.options = config;\r\n this.points = config?.points ?? [];\r\n this.translateX = config?.translateX ?? 0;\r\n this.translateY = config?.translateY ?? 0;\r\n this.scale = config?.scale ?? 1;\r\n this.strokeWidth = config?.strokeWidth ?? 8;\r\n this.fill = config?.fill ?? '#000000';\r\n this.d = this.generateSvgPath();\r\n this.updateDimensions();\r\n }\r\n\r\n static override create(core: KritzelCore, options?: KritzelPathOptions): KritzelPath {\r\n const object = new KritzelPath();\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.options = options;\r\n object.points = options?.points ?? [];\r\n object.translateX = options?.translateX ?? 0;\r\n object.translateY = options?.translateY ?? 0;\r\n object.scale = options?.scale ?? 1;\r\n object.strokeWidth = options?.strokeWidth ?? 8;\r\n object.fill = options?.fill ?? '#000000';\r\n object.zIndex = core.store.currentZIndex;\r\n object.d = object.generateSvgPath();\r\n object.updateDimensions();\r\n\r\n return object;\r\n }\r\n\r\n override resize(x: number | null, y: number | null, width: number, height: number): void {\r\n if (width <= 1 || height <= 1) {\r\n return;\r\n }\r\n\r\n const scaleX = width / this.width;\r\n const scaleY = height / this.height;\r\n\r\n this.width = width;\r\n this.height = height;\r\n\r\n this.points = this.points.map(([x, y]) => [x * scaleX, y * scaleY]);\r\n this.d = this.generateSvgPath();\r\n\r\n this.width = Math.max(...this.points.map(p => p[0])) - Math.min(...this.points.map(p => p[0])) + this.strokeWidth;\r\n this.height = Math.max(...this.points.map(p => p[1])) - Math.min(...this.points.map(p => p[1])) + this.strokeWidth;\r\n\r\n this.x = Math.min(...this.points.map(p => p[0])) - this.strokeWidth / 2;\r\n this.y = Math.min(...this.points.map(p => p[1])) - this.strokeWidth / 2;\r\n\r\n this.translateX = x;\r\n this.translateY = y;\r\n\r\n this._adjustedPoints = null;\r\n\r\n this._core.store.state.objectsMap.update(this);\r\n }\r\n\r\n override rotate(value: number): void {\r\n this.rotation = value;\r\n this._adjustedPoints = null;\r\n\r\n this._core.store.state.objectsMap.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._adjustedPoints = null;\r\n\r\n this._core.store.state.objectsMap.update(this);\r\n }\r\n\r\n override hitTest(x: number, y: number): boolean {\r\n const halfStroke = this.strokeWidth / this.scale / 2;\r\n\r\n if (this._adjustedPoints === null) {\r\n this._adjustedPoints = this.computeAdjustedPoints();\r\n }\r\n\r\n if (this._adjustedPoints.length === 1) {\r\n const p1 = this._adjustedPoints[0];\r\n const distance = this.pointToLineSegmentDistance(x, y, p1[0], p1[1], p1[0], p1[1]);\r\n return distance <= halfStroke;\r\n }\r\n\r\n for (let i = 0; i < this._adjustedPoints.length - 1; i++) {\r\n const p1 = this._adjustedPoints[i];\r\n const p2 = this._adjustedPoints[i + 1];\r\n\r\n const distance = this.pointToLineSegmentDistance(x, y, p1[0], p1[1], p2[0], p2[1]);\r\n\r\n if (distance <= halfStroke) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n override hitTestPolygon(polygon: KritzelPolygon): boolean {\r\n const halfStroke = this.strokeWidth / this.scale / 2;\r\n\r\n if (this._adjustedPoints === null) {\r\n this._adjustedPoints = this.computeAdjustedPoints();\r\n }\r\n\r\n const polyPoints: KritzelPoint[] = [\r\n { x: polygon.bottomLeft.x, y: polygon.bottomLeft.y },\r\n { x: polygon.bottomRight.x, y: polygon.bottomRight.y },\r\n { x: polygon.topRight.x, y: polygon.topRight.y },\r\n { x: polygon.topLeft.x, y: polygon.topLeft.y },\r\n ];\r\n\r\n for (const [px, py] of this._adjustedPoints) {\r\n if (KritzelGeometryHelper.isPointInPolygon({ x: px, y: py }, polyPoints)) {\r\n return true;\r\n }\r\n }\r\n\r\n for (const pt of polyPoints) {\r\n if (this.hitTest(pt.x, pt.y)) {\r\n return true;\r\n }\r\n }\r\n\r\n for (let i = 0; i < this._adjustedPoints.length - 1; i++) {\r\n const p1 = { x: this._adjustedPoints[i][0], y: this._adjustedPoints[i][1] };\r\n const p2 = { x: this._adjustedPoints[i + 1][0], y: this._adjustedPoints[i + 1][1] };\r\n\r\n for (let j = 0; j < polyPoints.length; j++) {\r\n const q1 = polyPoints[j];\r\n const q2 = polyPoints[(j + 1) % polyPoints.length];\r\n\r\n if (KritzelGeometryHelper.intersectLines(p1, p2, q1, q2)) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < this._adjustedPoints.length - 1; i++) {\r\n const p1 = this._adjustedPoints[i];\r\n const p2 = this._adjustedPoints[i + 1];\r\n\r\n for (let j = 0; j < polyPoints.length; j++) {\r\n const q1 = polyPoints[j];\r\n const q2 = polyPoints[(j + 1) % polyPoints.length];\r\n\r\n const d1 = this.pointToLineSegmentDistance(q1.x, q1.y, p1[0], p1[1], p2[0], p2[1]);\r\n const d2 = this.pointToLineSegmentDistance(q2.x, q2.y, p1[0], p1[1], p2[0], p2[1]);\r\n const d3 = this.pointToLineSegmentDistance(p1[0], p1[1], q1.x, q1.y, q2.x, q2.y);\r\n const d4 = this.pointToLineSegmentDistance(p2[0], p2[1], q1.x, q1.y, q2.x, q2.y);\r\n\r\n const minD = Math.min(d1, d2, d3, d4);\r\n if (minD <= halfStroke) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n override updatePosition(x: number, y: number): void {\r\n this.translateX = x;\r\n this.translateY = y;\r\n this._adjustedPoints = null;\r\n this._core.store.state.objectsMap.update(this);\r\n }\r\n\r\n private computeAdjustedPoints(): number[][] {\r\n if (!this.points?.length) {\r\n return [];\r\n }\r\n\r\n const angle = this.rotation;\r\n const cos = Math.cos(angle);\r\n const sin = Math.sin(angle);\r\n\r\n const xs = this.points.map(p => p[0]);\r\n const ys = this.points.map(p => p[1]);\r\n const pivot = {\r\n x: (Math.min(...xs) + Math.max(...xs)) / 2,\r\n y: (Math.min(...ys) + Math.max(...ys)) / 2,\r\n };\r\n\r\n const { x: cx, y: cy } = pivot;\r\n\r\n const rotatedPoints = this.points.map(([x, y]) => {\r\n const dx = x - cx;\r\n const dy = y - cy;\r\n return [cx + dx * cos - dy * sin, cy + dx * sin + dy * cos];\r\n });\r\n\r\n return rotatedPoints.map(([px, py]) => [Math.abs(px - this.x) / this.scale + this.translateX, Math.abs(py - this.y) / this.scale + this.translateY]);\r\n }\r\n\r\n private pointToLineSegmentDistance(x: number, y: number, x1: number, y1: number, x2: number, y2: number): number {\r\n const A = x - x1;\r\n const B = y - y1;\r\n const C = x2 - x1;\r\n const D = y2 - y1;\r\n\r\n const dot = A * C + B * D;\r\n const len_sq = C * C + D * D;\r\n let param = -1;\r\n if (len_sq !== 0) {\r\n // in case of 0 length line\r\n param = dot / len_sq;\r\n }\r\n\r\n let xx, yy;\r\n\r\n if (param < 0) {\r\n xx = x1;\r\n yy = y1;\r\n } else if (param > 1) {\r\n xx = x2;\r\n yy = y2;\r\n } else {\r\n xx = x1 + param * C;\r\n yy = y1 + param * D;\r\n }\r\n\r\n const dx = x - xx;\r\n const dy = y - yy;\r\n return Math.sqrt(dx * dx + dy * dy);\r\n }\r\n\r\n private updateDimensions(): void {\r\n const rotatedPoints = this.points.map(([x, y]) => {\r\n const rotatedX = x * Math.cos(this.rotation) - y * Math.sin(this.rotation);\r\n const rotatedY = x * Math.sin(this.rotation) + y * Math.cos(this.rotation);\r\n return [rotatedX, rotatedY];\r\n });\r\n\r\n const minX = Math.min(...rotatedPoints.map(p => p[0] - this.strokeWidth / 2));\r\n const minY = Math.min(...rotatedPoints.map(p => p[1] - this.strokeWidth / 2));\r\n\r\n const maxX = Math.max(...rotatedPoints.map(p => p[0] + this.strokeWidth / 2));\r\n const maxY = Math.max(...rotatedPoints.map(p => p[1] + this.strokeWidth / 2));\r\n\r\n this.width = maxX - minX + this.lineSlack;\r\n this.height = maxY - minY + this.lineSlack;\r\n\r\n this.x = minX;\r\n this.y = minY;\r\n\r\n this.translateX = (this.x + this.translateX) / this.scale;\r\n this.translateY = (this.y + this.translateY) / this.scale;\r\n }\r\n\r\n private generateSvgPath(): string {\r\n const stroke = this.getStrokeFromPoints(this.points, this.strokeWidth);\r\n return this.getSvgPathFromStroke(stroke);\r\n }\r\n\r\n private getStrokeFromPoints(points: number[][], strokeWidth: number): number[][] {\r\n return getStroke(points, {\r\n size: strokeWidth,\r\n thinning: 0.5,\r\n smoothing: 0.5,\r\n streamline: 0.5,\r\n easing: t => t,\r\n simulatePressure: true,\r\n last: true,\r\n start: {\r\n cap: true,\r\n taper: 0,\r\n easing: t => t,\r\n },\r\n end: {\r\n cap: true,\r\n taper: 0,\r\n easing: t => t,\r\n },\r\n });\r\n }\r\n\r\n private getSvgPathFromStroke(points: number[][], closed = true) {\r\n const len = points.length;\r\n\r\n if (len < 4) {\r\n return ``;\r\n }\r\n\r\n let a = points[0];\r\n let b = points[1];\r\n const c = points[2];\r\n\r\n let result = `M${a[0].toFixed(2)},${a[1].toFixed(2)} Q${b[0].toFixed(2)},${b[1].toFixed(2)} ${KritzelMathHelper.average(b[0], c[0]).toFixed(\r\n 2,\r\n )},${KritzelMathHelper.average(b[1], c[1]).toFixed(2)} T`;\r\n\r\n for (let i = 2, max = len - 1; i < max; i++) {\r\n a = points[i];\r\n b = points[i + 1];\r\n result += `${KritzelMathHelper.average(a[0], b[0]).toFixed(2)},${KritzelMathHelper.average(a[1], b[1]).toFixed(2)} `;\r\n }\r\n\r\n if (closed) {\r\n result += 'Z';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n isLowRes(): boolean {\r\n if (!this._core) {\r\n return false;\r\n }\r\n\r\n const viewportScale = this._core.store.state.scale;\r\n const scaledWidth = this.boundingBox.width * viewportScale;\r\n const scaledHeight = this.boundingBox.height * viewportScale;\r\n\r\n return (scaledWidth * scaledHeight) < 500;\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"path.class.js","sourceRoot":"","sources":["../../../src/classes/objects/path.class.ts"],"names":[],"mappings":"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","sourcesContent":["import { getStroke } from 'perfect-freehand';\r\nimport { KritzelMathHelper } from '../../helpers/math.helper';\r\nimport { KritzelPathOptions } from '../../interfaces/path-options.interface';\r\nimport { KritzelBaseObject } from './base-object.class';\r\nimport { KritzelPolygon } from '../../interfaces/polygon.interface';\r\nimport { KritzelGeometryHelper } from '../../helpers/geometry.helper';\r\nimport { KritzelPoint } from '../../interfaces/point.interface';\r\nimport { KritzelCore } from '../core/core.class';\r\n\r\nexport class KritzelPath extends KritzelBaseObject<SVGElement> {\r\n override __class__: string = 'KritzelPath';\r\n\r\n points: number[][];\r\n d: string;\r\n stroke: string = 'none';\r\n strokeWidth: number;\r\n lineSlack: number = 0.5;\r\n fill: string;\r\n x: number = 0;\r\n y: number = 0;\r\n height: number = 0;\r\n width: number = 0;\r\n scale: number = 1;\r\n options: KritzelPathOptions | undefined;\r\n\r\n isVisible: boolean = true;\r\n isDebugInfoVisible: boolean = true;\r\n isCompleted: boolean = false;\r\n\r\n private _adjustedPoints?: number[][] = null;\r\n\r\n get viewBox(): string {\r\n return `${this.x} ${this.y} ${this.width} ${this.height}`;\r\n }\r\n\r\n constructor(config?: { points: number[][]; translateX?: number; translateY?: number; scale?: number; strokeWidth?: number; fill?: string; lineSlack?: number }) {\r\n super();\r\n this.options = config;\r\n this.points = config?.points ?? [];\r\n this.translateX = config?.translateX ?? 0;\r\n this.translateY = config?.translateY ?? 0;\r\n this.scale = config?.scale ?? 1;\r\n this.strokeWidth = config?.strokeWidth ?? 8;\r\n this.fill = config?.fill ?? '#000000';\r\n this.d = this.generateSvgPath();\r\n this.updateDimensions();\r\n }\r\n\r\n static override create(core: KritzelCore, options?: KritzelPathOptions): KritzelPath {\r\n const object = new KritzelPath();\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.options = options;\r\n object.points = options?.points ?? [];\r\n object.translateX = options?.translateX ?? 0;\r\n object.translateY = options?.translateY ?? 0;\r\n object.scale = options?.scale ?? 1;\r\n object.strokeWidth = options?.strokeWidth ?? 8;\r\n object.fill = options?.fill ?? '#000000';\r\n object.zIndex = core.store.currentZIndex;\r\n object.d = object.generateSvgPath();\r\n object.updateDimensions();\r\n\r\n return object;\r\n }\r\n\r\n override resize(x: number | null, y: number | null, width: number, height: number): void {\r\n if (width <= 1 || height <= 1) {\r\n return;\r\n }\r\n\r\n const scaleX = width / this.width;\r\n const scaleY = height / this.height;\r\n\r\n this.width = width;\r\n this.height = height;\r\n\r\n this.points = this.points.map(([x, y]) => [x * scaleX, y * scaleY]);\r\n this.d = this.generateSvgPath();\r\n\r\n this.width = Math.max(...this.points.map(p => p[0])) - Math.min(...this.points.map(p => p[0])) + this.strokeWidth;\r\n this.height = Math.max(...this.points.map(p => p[1])) - Math.min(...this.points.map(p => p[1])) + this.strokeWidth;\r\n\r\n this.x = Math.min(...this.points.map(p => p[0])) - this.strokeWidth / 2;\r\n this.y = Math.min(...this.points.map(p => p[1])) - this.strokeWidth / 2;\r\n\r\n this.translateX = x;\r\n this.translateY = y;\r\n\r\n this._adjustedPoints = null;\r\n\r\n this._core.store.state.objects.update(this);\r\n }\r\n\r\n override rotate(value: number): void {\r\n this.rotation = value;\r\n this._adjustedPoints = null;\r\n\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._adjustedPoints = null;\r\n\r\n this._core.store.state.objects.update(this);\r\n }\r\n\r\n override hitTest(x: number, y: number): boolean {\r\n const halfStroke = this.strokeWidth / this.scale / 2;\r\n\r\n if (this._adjustedPoints === null) {\r\n this._adjustedPoints = this.computeAdjustedPoints();\r\n }\r\n\r\n if (this._adjustedPoints.length === 1) {\r\n const p1 = this._adjustedPoints[0];\r\n const distance = this.pointToLineSegmentDistance(x, y, p1[0], p1[1], p1[0], p1[1]);\r\n return distance <= halfStroke;\r\n }\r\n\r\n for (let i = 0; i < this._adjustedPoints.length - 1; i++) {\r\n const p1 = this._adjustedPoints[i];\r\n const p2 = this._adjustedPoints[i + 1];\r\n\r\n const distance = this.pointToLineSegmentDistance(x, y, p1[0], p1[1], p2[0], p2[1]);\r\n\r\n if (distance <= halfStroke) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n override hitTestPolygon(polygon: KritzelPolygon): boolean {\r\n const halfStroke = this.strokeWidth / this.scale / 2;\r\n\r\n if (this._adjustedPoints === null) {\r\n this._adjustedPoints = this.computeAdjustedPoints();\r\n }\r\n\r\n const polyPoints: KritzelPoint[] = [\r\n { x: polygon.bottomLeft.x, y: polygon.bottomLeft.y },\r\n { x: polygon.bottomRight.x, y: polygon.bottomRight.y },\r\n { x: polygon.topRight.x, y: polygon.topRight.y },\r\n { x: polygon.topLeft.x, y: polygon.topLeft.y },\r\n ];\r\n\r\n for (const [px, py] of this._adjustedPoints) {\r\n if (KritzelGeometryHelper.isPointInPolygon({ x: px, y: py }, polyPoints)) {\r\n return true;\r\n }\r\n }\r\n\r\n for (const pt of polyPoints) {\r\n if (this.hitTest(pt.x, pt.y)) {\r\n return true;\r\n }\r\n }\r\n\r\n for (let i = 0; i < this._adjustedPoints.length - 1; i++) {\r\n const p1 = { x: this._adjustedPoints[i][0], y: this._adjustedPoints[i][1] };\r\n const p2 = { x: this._adjustedPoints[i + 1][0], y: this._adjustedPoints[i + 1][1] };\r\n\r\n for (let j = 0; j < polyPoints.length; j++) {\r\n const q1 = polyPoints[j];\r\n const q2 = polyPoints[(j + 1) % polyPoints.length];\r\n\r\n if (KritzelGeometryHelper.intersectLines(p1, p2, q1, q2)) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n for (let i = 0; i < this._adjustedPoints.length - 1; i++) {\r\n const p1 = this._adjustedPoints[i];\r\n const p2 = this._adjustedPoints[i + 1];\r\n\r\n for (let j = 0; j < polyPoints.length; j++) {\r\n const q1 = polyPoints[j];\r\n const q2 = polyPoints[(j + 1) % polyPoints.length];\r\n\r\n const d1 = this.pointToLineSegmentDistance(q1.x, q1.y, p1[0], p1[1], p2[0], p2[1]);\r\n const d2 = this.pointToLineSegmentDistance(q2.x, q2.y, p1[0], p1[1], p2[0], p2[1]);\r\n const d3 = this.pointToLineSegmentDistance(p1[0], p1[1], q1.x, q1.y, q2.x, q2.y);\r\n const d4 = this.pointToLineSegmentDistance(p2[0], p2[1], q1.x, q1.y, q2.x, q2.y);\r\n\r\n const minD = Math.min(d1, d2, d3, d4);\r\n if (minD <= halfStroke) {\r\n return true;\r\n }\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n override updatePosition(x: number, y: number): void {\r\n this.translateX = x;\r\n this.translateY = y;\r\n this._adjustedPoints = null;\r\n this._core.store.state.objects.update(this);\r\n }\r\n\r\n private computeAdjustedPoints(): number[][] {\r\n if (!this.points?.length) {\r\n return [];\r\n }\r\n\r\n const angle = this.rotation;\r\n const cos = Math.cos(angle);\r\n const sin = Math.sin(angle);\r\n\r\n const xs = this.points.map(p => p[0]);\r\n const ys = this.points.map(p => p[1]);\r\n const pivot = {\r\n x: (Math.min(...xs) + Math.max(...xs)) / 2,\r\n y: (Math.min(...ys) + Math.max(...ys)) / 2,\r\n };\r\n\r\n const { x: cx, y: cy } = pivot;\r\n\r\n const rotatedPoints = this.points.map(([x, y]) => {\r\n const dx = x - cx;\r\n const dy = y - cy;\r\n return [cx + dx * cos - dy * sin, cy + dx * sin + dy * cos];\r\n });\r\n\r\n return rotatedPoints.map(([px, py]) => [Math.abs(px - this.x) / this.scale + this.translateX, Math.abs(py - this.y) / this.scale + this.translateY]);\r\n }\r\n\r\n private pointToLineSegmentDistance(x: number, y: number, x1: number, y1: number, x2: number, y2: number): number {\r\n const A = x - x1;\r\n const B = y - y1;\r\n const C = x2 - x1;\r\n const D = y2 - y1;\r\n\r\n const dot = A * C + B * D;\r\n const len_sq = C * C + D * D;\r\n let param = -1;\r\n if (len_sq !== 0) {\r\n // in case of 0 length line\r\n param = dot / len_sq;\r\n }\r\n\r\n let xx, yy;\r\n\r\n if (param < 0) {\r\n xx = x1;\r\n yy = y1;\r\n } else if (param > 1) {\r\n xx = x2;\r\n yy = y2;\r\n } else {\r\n xx = x1 + param * C;\r\n yy = y1 + param * D;\r\n }\r\n\r\n const dx = x - xx;\r\n const dy = y - yy;\r\n return Math.sqrt(dx * dx + dy * dy);\r\n }\r\n\r\n private updateDimensions(): void {\r\n const rotatedPoints = this.points.map(([x, y]) => {\r\n const rotatedX = x * Math.cos(this.rotation) - y * Math.sin(this.rotation);\r\n const rotatedY = x * Math.sin(this.rotation) + y * Math.cos(this.rotation);\r\n return [rotatedX, rotatedY];\r\n });\r\n\r\n const minX = Math.min(...rotatedPoints.map(p => p[0] - this.strokeWidth / 2));\r\n const minY = Math.min(...rotatedPoints.map(p => p[1] - this.strokeWidth / 2));\r\n\r\n const maxX = Math.max(...rotatedPoints.map(p => p[0] + this.strokeWidth / 2));\r\n const maxY = Math.max(...rotatedPoints.map(p => p[1] + this.strokeWidth / 2));\r\n\r\n this.width = maxX - minX + this.lineSlack;\r\n this.height = maxY - minY + this.lineSlack;\r\n\r\n this.x = minX;\r\n this.y = minY;\r\n\r\n this.translateX = (this.x + this.translateX) / this.scale;\r\n this.translateY = (this.y + this.translateY) / this.scale;\r\n }\r\n\r\n private generateSvgPath(): string {\r\n const stroke = this.getStrokeFromPoints(this.points, this.strokeWidth);\r\n return this.getSvgPathFromStroke(stroke);\r\n }\r\n\r\n private getStrokeFromPoints(points: number[][], strokeWidth: number): number[][] {\r\n return getStroke(points, {\r\n size: strokeWidth,\r\n thinning: 0.5,\r\n smoothing: 0.5,\r\n streamline: 0.5,\r\n easing: t => t,\r\n simulatePressure: true,\r\n last: true,\r\n start: {\r\n cap: true,\r\n taper: 0,\r\n easing: t => t,\r\n },\r\n end: {\r\n cap: true,\r\n taper: 0,\r\n easing: t => t,\r\n },\r\n });\r\n }\r\n\r\n private getSvgPathFromStroke(points: number[][], closed = true) {\r\n const len = points.length;\r\n\r\n if (len < 4) {\r\n return ``;\r\n }\r\n\r\n let a = points[0];\r\n let b = points[1];\r\n const c = points[2];\r\n\r\n let result = `M${a[0].toFixed(2)},${a[1].toFixed(2)} Q${b[0].toFixed(2)},${b[1].toFixed(2)} ${KritzelMathHelper.average(b[0], c[0]).toFixed(\r\n 2,\r\n )},${KritzelMathHelper.average(b[1], c[1]).toFixed(2)} T`;\r\n\r\n for (let i = 2, max = len - 1; i < max; i++) {\r\n a = points[i];\r\n b = points[i + 1];\r\n result += `${KritzelMathHelper.average(a[0], b[0]).toFixed(2)},${KritzelMathHelper.average(a[1], b[1]).toFixed(2)} `;\r\n }\r\n\r\n if (closed) {\r\n result += 'Z';\r\n }\r\n\r\n return result;\r\n }\r\n\r\n isLowRes(): boolean {\r\n if (!this._core) {\r\n return false;\r\n }\r\n\r\n const viewportScale = this._core.store.state.scale;\r\n const scaledWidth = this.boundingBox.width * viewportScale;\r\n const scaledHeight = this.boundingBox.height * viewportScale;\r\n\r\n return (scaledWidth * scaledHeight) < 500;\r\n }\r\n}\r\n"]}
|
|
@@ -13,7 +13,7 @@ export class KritzelSelectionGroup extends KritzelBaseObject {
|
|
|
13
13
|
get objects() {
|
|
14
14
|
return this.objectIds
|
|
15
15
|
.map(id => {
|
|
16
|
-
const found = this._core.store.state.
|
|
16
|
+
const found = this._core.store.state.objects.filter(obj => obj.id === id);
|
|
17
17
|
return found.length > 0 ? found[0] : null;
|
|
18
18
|
})
|
|
19
19
|
.filter(obj => obj !== null);
|
|
@@ -68,7 +68,7 @@ export class KritzelSelectionGroup extends KritzelBaseObject {
|
|
|
68
68
|
});
|
|
69
69
|
this.translateX = x;
|
|
70
70
|
this.translateY = y;
|
|
71
|
-
this._core.store.state.
|
|
71
|
+
this._core.store.state.objects.update(this);
|
|
72
72
|
}
|
|
73
73
|
/**
|
|
74
74
|
* Capture snapshots of current object states for undo/redo operations
|
|
@@ -112,15 +112,15 @@ export class KritzelSelectionGroup extends KritzelBaseObject {
|
|
|
112
112
|
// Only update the selection group itself
|
|
113
113
|
// Child objects are already updated during move/resize/rotate operations
|
|
114
114
|
// Updating them again here would create redundant y.js updates
|
|
115
|
-
this._core.store.state.
|
|
115
|
+
this._core.store.state.objects.update(this);
|
|
116
116
|
}
|
|
117
117
|
move(startX, startY, endX, endY) {
|
|
118
118
|
const deltaX = (startX - endX) / this._core.store.state.scale;
|
|
119
119
|
const deltaY = (startY - endY) / this._core.store.state.scale;
|
|
120
120
|
this.translateX += deltaX;
|
|
121
121
|
this.translateY += deltaY;
|
|
122
|
-
this._core.store.state.
|
|
123
|
-
this._core.store.state.
|
|
122
|
+
this._core.store.state.objects.transaction(() => {
|
|
123
|
+
this._core.store.state.objects.update(this);
|
|
124
124
|
this.objects.forEach(obj => {
|
|
125
125
|
obj.move(startX, startY, endX, endY);
|
|
126
126
|
});
|
|
@@ -136,7 +136,7 @@ export class KritzelSelectionGroup extends KritzelBaseObject {
|
|
|
136
136
|
const heightScaleFactor = height / this.height;
|
|
137
137
|
const deltaX = x - this.translateX;
|
|
138
138
|
const deltaY = y - this.translateY;
|
|
139
|
-
this._core.store.state.
|
|
139
|
+
this._core.store.state.objects.transaction(() => {
|
|
140
140
|
this.objects.forEach(child => {
|
|
141
141
|
const updatedWidth = child.width * widthScaleFactor;
|
|
142
142
|
const updatedHeight = child.height * heightScaleFactor;
|
|
@@ -147,7 +147,7 @@ export class KritzelSelectionGroup extends KritzelBaseObject {
|
|
|
147
147
|
// Refresh dimensions and update the SelectionGroup to propagate changes to other tabs
|
|
148
148
|
this.refreshObjectDimensions();
|
|
149
149
|
this.captureUnchangedSnapshots();
|
|
150
|
-
this._core.store.state.
|
|
150
|
+
this._core.store.state.objects.update(this);
|
|
151
151
|
});
|
|
152
152
|
}
|
|
153
153
|
rotate(value) {
|
|
@@ -157,9 +157,9 @@ export class KritzelSelectionGroup extends KritzelBaseObject {
|
|
|
157
157
|
const angle = value;
|
|
158
158
|
const cos = Math.cos(angle);
|
|
159
159
|
const sin = Math.sin(angle);
|
|
160
|
-
this._core.store.state.
|
|
160
|
+
this._core.store.state.objects.transaction(() => {
|
|
161
161
|
// Update the SelectionGroup itself to propagate rotation to other tabs
|
|
162
|
-
this._core.store.state.
|
|
162
|
+
this._core.store.state.objects.update(this);
|
|
163
163
|
this.objects.forEach(child => {
|
|
164
164
|
const unchangedSnapshot = this.unchangedObjectSnapshots.get(child.id);
|
|
165
165
|
if (!unchangedSnapshot)
|
|
@@ -210,7 +210,7 @@ export class KritzelSelectionGroup extends KritzelBaseObject {
|
|
|
210
210
|
this.width = (this.maxX - this.minX - this.padding) * this.scale;
|
|
211
211
|
this.height = (this.maxY - this.minY - this.padding) * this.scale;
|
|
212
212
|
}
|
|
213
|
-
this._core.store.state.
|
|
213
|
+
this._core.store.state.objects.update(this);
|
|
214
214
|
}
|
|
215
215
|
getOffsetXToCenterFromSnapshot(snapshot) {
|
|
216
216
|
const objCenterX = snapshot.translateX + snapshot.totalWidth / snapshot.scale / 2;
|
|
@@ -1 +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.objectsMap.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.objectsMap.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.objectsMap.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.objectsMap.transaction(() => {\r\n this._core.store.state.objectsMap.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.objectsMap.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.objectsMap.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.objectsMap.transaction(() => {\r\n // Update the SelectionGroup itself to propagate rotation to other tabs\r\n this._core.store.state.objectsMap.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.objectsMap.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"]}
|
|
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"]}
|
|
@@ -107,7 +107,7 @@ export class KritzelText extends KritzelBaseObject {
|
|
|
107
107
|
this.content = newState.doc.toJSON();
|
|
108
108
|
this.adjustSizeOnInput();
|
|
109
109
|
if (!transaction.getMeta('fromRemote')) {
|
|
110
|
-
this._core.store.state.
|
|
110
|
+
this._core.store.state.objects.update(this, { temporary: true });
|
|
111
111
|
}
|
|
112
112
|
}
|
|
113
113
|
},
|
|
@@ -160,7 +160,7 @@ export class KritzelText extends KritzelBaseObject {
|
|
|
160
160
|
this.height = originalHeight * this.scaleFactor;
|
|
161
161
|
this.translateX = x;
|
|
162
162
|
this.translateY = y;
|
|
163
|
-
this._core.store.state.
|
|
163
|
+
this._core.store.state.objects.update(this);
|
|
164
164
|
}
|
|
165
165
|
focus(coords) {
|
|
166
166
|
if (this.editor) {
|
|
@@ -212,8 +212,9 @@ export class KritzelText extends KritzelBaseObject {
|
|
|
212
212
|
this.editor.setProps({ editable: () => false });
|
|
213
213
|
this.editor.dom.blur();
|
|
214
214
|
this.isEditing = false;
|
|
215
|
-
this._core.store.state.
|
|
216
|
-
this._core.store.state.
|
|
215
|
+
this._core.store.state.objects.consolidateTemporaryItems();
|
|
216
|
+
this._core.store.state.objects.update(this);
|
|
217
|
+
this._core.engine.emitObjectsChange();
|
|
217
218
|
}
|
|
218
219
|
handlePointerDown(event) {
|
|
219
220
|
if (!this.isEditing) {
|
|
@@ -1 +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.objectsMap.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.objectsMap.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.objectsMap.consolidateTemporaryItems();\r\n\r\n this._core.store.state.objectsMap.update(this);\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"]}
|
|
1
|
+
{"version":3,"file":"text.class.js","sourceRoot":"","sources":["../../../src/classes/objects/text.class.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,MAAM,OAAO,WAAY,SAAQ,iBAAiC;IACvD,SAAS,GAAW,aAAa,CAAC;IAE3C,UAAU,GAAW,OAAO,CAAC;IAC7B,QAAQ,GAAW,CAAC,CAAC;IACrB,SAAS,GAAW,SAAS,CAAC;IAC9B,YAAY,GAAW,CAAC,CAAC;IACzB,aAAa,GAAW,CAAC,CAAC;IAE1B,KAAK,GAAW,CAAC,CAAC;IAClB,WAAW,GAAW,CAAC,CAAC;IAExB,kBAAkB,GAAY,IAAI,CAAC;IACnC,UAAU,GAAY,IAAI,CAAC;IAC3B,SAAS,GAAY,KAAK,CAAC;IAE3B,MAAM,GAAsB,IAAI,CAAC;IACjC,OAAO,GAAQ,IAAI,CAAC;IAEH,OAAO,GAAW,IAAI,MAAM,CAAC;QAC5C,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,kBAAkB,EAAE,OAAO,CAAC;QACnE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK;KACzB,CAAC,CAAC;IAEH,cAAc,GAAuB,IAAI,CAAC;IAEjC,IAAI,GAAW,CAAC,CAAC;IAE1B,IAAI,OAAO;QACT,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QAElC,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,YAAY,MAaX;QACC,KAAK,EAAE,CAAC;QAER,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;YACzC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;YACzC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC;YAC/C,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,SAAS,CAAC;YAC/C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACvG,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5G,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;YAC/B,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,MAAM,CAAU,MAAM,CAAC,IAAiB,EAAE,QAAiB,EAAE,UAAmB;QAC9E,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAEjC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,CAAC;QACzD,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC3B,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;QAC/B,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC;QACtB,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC;QACtB,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,YAAY,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/G,MAAM,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpH,MAAM,CAAC,eAAe,GAAG,aAAa,CAAC;QACvC,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC;QACnC,MAAM,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC;QACrC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;QACvB,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC;QAC9C,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC;QACzC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;QAEtC,OAAO,MAAM,CAAC;IAChB,CAAC;IAEQ,KAAK,CAAC,OAAuB;QACpC,IAAI,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,KAAK,KAAK,EAAE,CAAC;YACtD,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,aAAa,KAAK,OAAO,EAAE,CAAC;YAC/F,OAAO;QACT,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QACnD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC;QACtD,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;QAC9C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,GAAG,YAAY,CAAC;QAC9C,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAE7C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,qBAAqB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACxD,CAAC;IAEO,YAAY;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAE7E,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE;YAC1B,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC;gBACxB,GAAG,EAAE,GAAG;gBACR,OAAO,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;aAC9B,CAAC;YACF,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK;YACrB,mBAAmB,EAAE,WAAW,CAAC,EAAE;gBACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBAEtD,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;gBAElC,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;oBAC3B,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;oBACrC,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBAEzB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;wBACvC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBACnE,CAAC;gBACH,CAAC;YACH,CAAC;SACF,CAAC,CAAC;IACL,CAAC;IAEM,UAAU,CAAC,OAAY;QAC5B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;YAC9D,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YAEnG,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,iBAAiB;QACf,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC;QAEhC,IAAI,OAAO,IAAI,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;YACzD,MAAM,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC;YAC3C,MAAM,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC;YAE7C,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC;YACrC,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;YAEvC,IAAI,CAAC,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC;YACzC,IAAI,CAAC,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC;YAE3C,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACxB,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC;gBACtC,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC;gBAExC,MAAM,UAAU,GAAG,CAAC,aAAa,GAAG,kBAAkB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;gBACzE,MAAM,WAAW,GAAG,CAAC,cAAc,GAAG,mBAAmB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;gBAE5E,IAAI,UAAU,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;oBAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAEpC,MAAM,aAAa,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,WAAW,CAAC;oBAC3D,MAAM,aAAa,GAAG,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,WAAW,CAAC;oBAE3D,IAAI,CAAC,UAAU,IAAI,aAAa,GAAG,UAAU,CAAC;oBAC9C,IAAI,CAAC,UAAU,IAAI,aAAa,GAAG,WAAW,CAAC;gBACjD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAEQ,MAAM,CAAC,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc;QACjE,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;YAC9B,OAAO;QACT,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;QACpD,MAAM,cAAc,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;QAEtD,MAAM,MAAM,GAAG,KAAK,GAAG,aAAa,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,GAAG,cAAc,CAAC;QAEvC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAE5C,IAAI,CAAC,KAAK,GAAG,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC;QAC9C,IAAI,CAAC,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC;QAEhD,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QAEpB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,MAAiC;QACrC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;YAElC,IAAI,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC;gBACzB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;gBACvE,IAAI,GAAG,EAAE,CAAC;oBACR,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;oBAC5F,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;oBAEpB,IAAI,oBAAoB,CAAC,KAAK,EAAE,EAAE,CAAC;wBACjC,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBAC7B,CAAC;oBACD,OAAO;gBACT,CAAC;YACH,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YACxF,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAEpB,IAAI,oBAAoB,CAAC,KAAK,EAAE,EAAE,CAAC;gBACjC,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAEO,mBAAmB;QACzB,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;gBACnC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC;oBAC7B,QAAQ,EAAE,QAAQ;oBAClB,KAAK,EAAE,QAAQ;oBACf,MAAM,EAAE,SAAS;iBAClB,CAAC,CAAC;YACL,CAAC;QACH,CAAC,EAAE,GAAG,CAAC,CAAC;IACV,CAAC;IAED,IAAI,CAAC,KAAoB;QACvB,qBAAqB,CAAC,wBAAwB,EAAE,CAAC;QAEjD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,EAAiB,CAAC;QAElD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,EAAE,mBAAmB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAE7E,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAE/C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAEtB,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAEzB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;QAErD,qBAAqB,CAAC,uBAAuB,EAAE,CAAC;IAClD,CAAC;IAED,IAAI;QACF,qBAAqB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAEtD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAE9C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;QAEhD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAEvB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAEvB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,yBAAyB,EAAE,CAAC;QAE3D,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE5C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;IACxC,CAAC;IAED,iBAAiB,CAAC,KAAmB;QACnC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,KAAK,CAAC,eAAe,EAAE,CAAC;IAC1B,CAAC;IAED,iBAAiB,CAAC,KAAmB;QACnC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,KAAK,CAAC,eAAe,EAAE,CAAC;IAC1B,CAAC;IAED,eAAe,CAAC,KAAmB;QACjC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO;QACT,CAAC;QAED,KAAK,CAAC,eAAe,EAAE,CAAC;IAC1B,CAAC;IAEQ,IAAI;QACX,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAiB,CAAC;QACjD,YAAY,CAAC,MAAM,GAAG,YAAY,CAAC,YAAY,EAAE,CAAC;QAElD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAEQ,SAAS;QAChB,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,cAAc,EAAE,GAAG,IAAW,CAAC;QAEjI,MAAM,WAAW,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;QAEpD,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,UAAU,IAAI,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC9F,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAgB,CAAC;QAC/D,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAEQ,WAAW,CAAc,MAAW;QAC3C,KAAK,CAAC,WAAW,CAAc,MAAM,CAAC,CAAC;QACvC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,IAA8B,CAAC;IACxC,CAAC;CACF","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"]}
|
|
@@ -23,6 +23,14 @@ export class KritzelObjectMap {
|
|
|
23
23
|
get workspaceId() {
|
|
24
24
|
return this._workspaceId;
|
|
25
25
|
}
|
|
26
|
+
get undoState() {
|
|
27
|
+
return {
|
|
28
|
+
canUndo: this._undoManager ? this._undoManager.canUndo() : false,
|
|
29
|
+
canRedo: this._undoManager ? this._undoManager.canRedo() : false,
|
|
30
|
+
undoStackSize: this._undoManager ? this._undoManager.undoStack.length : 0,
|
|
31
|
+
redoStackSize: this._undoManager ? this._undoManager.redoStack.length : 0,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
26
34
|
constructor() {
|
|
27
35
|
this.map = new Map();
|
|
28
36
|
}
|
|
@@ -206,11 +214,13 @@ export class KritzelObjectMap {
|
|
|
206
214
|
undo() {
|
|
207
215
|
if (this._undoManager && this._undoManager.canUndo()) {
|
|
208
216
|
this._undoManager.undo();
|
|
217
|
+
this._core.engine.emitObjectsChange();
|
|
209
218
|
}
|
|
210
219
|
}
|
|
211
220
|
redo() {
|
|
212
221
|
if (this._undoManager && this._undoManager.canRedo()) {
|
|
213
222
|
this._undoManager.redo();
|
|
223
|
+
this._core.engine.emitObjectsChange();
|
|
214
224
|
}
|
|
215
225
|
}
|
|
216
226
|
canUndo() {
|