@node-projects/web-component-designer 0.1.348 → 0.1.351

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.
Files changed (135) hide show
  1. package/dist/elements/documentContainer.js +4 -0
  2. package/dist/elements/documentContainer.js.map +1 -1
  3. package/dist/elements/helper/CssCombiner.d.ts +9 -0
  4. package/dist/elements/helper/CssCombiner.js +147 -7
  5. package/dist/elements/helper/CssCombiner.js.map +1 -1
  6. package/dist/elements/helper/Helper.js +3 -1
  7. package/dist/elements/helper/Helper.js.map +1 -1
  8. package/dist/elements/helper/LayoutHelper.js +44 -4
  9. package/dist/elements/helper/LayoutHelper.js.map +1 -1
  10. package/dist/elements/helper/PathDataPolyfill.d.ts +1 -1
  11. package/dist/elements/helper/PathDataPolyfill.js +11 -49
  12. package/dist/elements/helper/PathDataPolyfill.js.map +1 -1
  13. package/dist/elements/helper/PopupHelper.d.ts +1 -0
  14. package/dist/elements/helper/PopupHelper.js +51 -0
  15. package/dist/elements/helper/PopupHelper.js.map +1 -0
  16. package/dist/elements/helper/QuadEdgeHandleHelper.d.ts +5 -0
  17. package/dist/elements/helper/QuadEdgeHandleHelper.js +42 -0
  18. package/dist/elements/helper/QuadEdgeHandleHelper.js.map +1 -0
  19. package/dist/elements/helper/SelectionHelper.d.ts +2 -2
  20. package/dist/elements/helper/SelectionHelper.js +22 -9
  21. package/dist/elements/helper/SelectionHelper.js.map +1 -1
  22. package/dist/elements/item/DesignItem.d.ts +1 -1
  23. package/dist/elements/services/DefaultServiceBootstrap.js +8 -3
  24. package/dist/elements/services/DefaultServiceBootstrap.js.map +1 -1
  25. package/dist/elements/services/GlobalContext.js +1 -1
  26. package/dist/elements/services/GlobalContext.js.map +1 -1
  27. package/dist/elements/services/InstanceServiceContainer.d.ts +2 -0
  28. package/dist/elements/services/InstanceServiceContainer.js +1 -0
  29. package/dist/elements/services/InstanceServiceContainer.js.map +1 -1
  30. package/dist/elements/services/ServiceContainer.d.ts +2 -0
  31. package/dist/elements/services/ServiceContainer.js.map +1 -1
  32. package/dist/elements/services/collaborationService/CollaborationNodeIndex.d.ts +4 -0
  33. package/dist/elements/services/collaborationService/CollaborationNodeIndex.js +46 -0
  34. package/dist/elements/services/collaborationService/CollaborationNodeIndex.js.map +1 -0
  35. package/dist/elements/services/collaborationService/DefaultCollaborationService.d.ts +45 -0
  36. package/dist/elements/services/collaborationService/DefaultCollaborationService.js +298 -0
  37. package/dist/elements/services/collaborationService/DefaultCollaborationService.js.map +1 -0
  38. package/dist/elements/services/collaborationService/ICollaborationService.d.ts +102 -0
  39. package/dist/elements/services/collaborationService/ICollaborationService.js +2 -0
  40. package/dist/elements/services/collaborationService/ICollaborationService.js.map +1 -0
  41. package/dist/elements/services/collaborationService/WebRtcTabCollaborationTransport.d.ts +95 -0
  42. package/dist/elements/services/collaborationService/WebRtcTabCollaborationTransport.js +571 -0
  43. package/dist/elements/services/collaborationService/WebRtcTabCollaborationTransport.js.map +1 -0
  44. package/dist/elements/services/copyPasteService/CopyPasteAsJsonService.d.ts +3 -0
  45. package/dist/elements/services/copyPasteService/CopyPasteAsJsonService.js +41 -27
  46. package/dist/elements/services/copyPasteService/CopyPasteAsJsonService.js.map +1 -1
  47. package/dist/elements/services/copyPasteService/CopyPasteService.js +1 -1
  48. package/dist/elements/services/copyPasteService/CopyPasteService.js.map +1 -1
  49. package/dist/elements/services/copyPasteService/PasteFormatSnapshot.d.ts +18 -0
  50. package/dist/elements/services/copyPasteService/PasteFormatSnapshot.js +87 -0
  51. package/dist/elements/services/copyPasteService/PasteFormatSnapshot.js.map +1 -0
  52. package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService.d.ts +4 -2
  53. package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService.js +29 -9
  54. package/dist/elements/services/htmlWriterService/FormatingHtmlWriterService.js.map +1 -1
  55. package/dist/elements/services/htmlWriterService/HtmlWriterService.d.ts +6 -2
  56. package/dist/elements/services/htmlWriterService/HtmlWriterService.js +48 -22
  57. package/dist/elements/services/htmlWriterService/HtmlWriterService.js.map +1 -1
  58. package/dist/elements/services/placementService/AbsolutePlacementService.js +1 -1
  59. package/dist/elements/services/placementService/AbsolutePlacementService.js.map +1 -1
  60. package/dist/elements/services/placementService/DefaultPlacementService.js +1 -1
  61. package/dist/elements/services/placementService/DefaultPlacementService.js.map +1 -1
  62. package/dist/elements/services/propertiesService/IEditorTypesService.d.ts +1 -1
  63. package/dist/elements/services/undoService/ChangeGroup.d.ts +3 -1
  64. package/dist/elements/services/undoService/ChangeGroup.js +3 -1
  65. package/dist/elements/services/undoService/ChangeGroup.js.map +1 -1
  66. package/dist/elements/services/undoService/IUndoChangeEvent.d.ts +8 -0
  67. package/dist/elements/services/undoService/IUndoChangeEvent.js +2 -0
  68. package/dist/elements/services/undoService/IUndoChangeEvent.js.map +1 -0
  69. package/dist/elements/services/undoService/IUndoService.d.ts +7 -4
  70. package/dist/elements/services/undoService/UndoService.d.ts +8 -4
  71. package/dist/elements/services/undoService/UndoService.js +14 -5
  72. package/dist/elements/services/undoService/UndoService.js.map +1 -1
  73. package/dist/elements/widgets/designerView/DomConverter.d.ts +1 -1
  74. package/dist/elements/widgets/designerView/designerCanvas.js +12 -2
  75. package/dist/elements/widgets/designerView/designerCanvas.js.map +1 -1
  76. package/dist/elements/widgets/designerView/extensions/CollaborationCursorOverlayExtension.d.ts +11 -0
  77. package/dist/elements/widgets/designerView/extensions/CollaborationCursorOverlayExtension.js +72 -0
  78. package/dist/elements/widgets/designerView/extensions/CollaborationCursorOverlayExtension.js.map +1 -0
  79. package/dist/elements/widgets/designerView/extensions/CollaborationCursorOverlayExtensionProvider.d.ts +10 -0
  80. package/dist/elements/widgets/designerView/extensions/CollaborationCursorOverlayExtensionProvider.js +22 -0
  81. package/dist/elements/widgets/designerView/extensions/CollaborationCursorOverlayExtensionProvider.js.map +1 -0
  82. package/dist/elements/widgets/designerView/extensions/CollaborationOverlayExtension.d.ts +10 -0
  83. package/dist/elements/widgets/designerView/extensions/CollaborationOverlayExtension.js +116 -0
  84. package/dist/elements/widgets/designerView/extensions/CollaborationOverlayExtension.js.map +1 -0
  85. package/dist/elements/widgets/designerView/extensions/CollaborationOverlayExtensionProvider.d.ts +10 -0
  86. package/dist/elements/widgets/designerView/extensions/CollaborationOverlayExtensionProvider.js +31 -0
  87. package/dist/elements/widgets/designerView/extensions/CollaborationOverlayExtensionProvider.js.map +1 -0
  88. package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtension.d.ts +30 -2
  89. package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtension.js +390 -9
  90. package/dist/elements/widgets/designerView/extensions/EditText/EditTextExtension.js.map +1 -1
  91. package/dist/elements/widgets/designerView/extensions/ExtensionManager.d.ts +1 -0
  92. package/dist/elements/widgets/designerView/extensions/ExtensionManager.js +10 -0
  93. package/dist/elements/widgets/designerView/extensions/ExtensionManager.js.map +1 -1
  94. package/dist/elements/widgets/designerView/extensions/ProjectiveTransformExtension.d.ts +33 -0
  95. package/dist/elements/widgets/designerView/extensions/ProjectiveTransformExtension.js +337 -0
  96. package/dist/elements/widgets/designerView/extensions/ProjectiveTransformExtension.js.map +1 -0
  97. package/dist/elements/widgets/designerView/extensions/ProjectiveTransformExtensionProvider.d.ts +10 -0
  98. package/dist/elements/widgets/designerView/extensions/ProjectiveTransformExtensionProvider.js +22 -0
  99. package/dist/elements/widgets/designerView/extensions/ProjectiveTransformExtensionProvider.js.map +1 -0
  100. package/dist/elements/widgets/designerView/extensions/QuadEdgeHandleHelper.d.ts +5 -0
  101. package/dist/elements/widgets/designerView/extensions/QuadEdgeHandleHelper.js +42 -0
  102. package/dist/elements/widgets/designerView/extensions/QuadEdgeHandleHelper.js.map +1 -0
  103. package/dist/elements/widgets/designerView/extensions/RotateExtension.d.ts +3 -2
  104. package/dist/elements/widgets/designerView/extensions/RotateExtension.js +46 -13
  105. package/dist/elements/widgets/designerView/extensions/RotateExtension.js.map +1 -1
  106. package/dist/elements/widgets/designerView/extensions/SkewExtension.d.ts +30 -0
  107. package/dist/elements/widgets/designerView/extensions/SkewExtension.js +291 -0
  108. package/dist/elements/widgets/designerView/extensions/SkewExtension.js.map +1 -0
  109. package/dist/elements/widgets/designerView/extensions/SkewExtensionProvider.d.ts +10 -0
  110. package/dist/elements/widgets/designerView/extensions/SkewExtensionProvider.js +20 -0
  111. package/dist/elements/widgets/designerView/extensions/SkewExtensionProvider.js.map +1 -0
  112. package/dist/elements/widgets/designerView/extensions/contextMenu/CollaborationCommentsContextMenu.d.ts +9 -0
  113. package/dist/elements/widgets/designerView/extensions/contextMenu/CollaborationCommentsContextMenu.js +72 -0
  114. package/dist/elements/widgets/designerView/extensions/contextMenu/CollaborationCommentsContextMenu.js.map +1 -0
  115. package/dist/elements/widgets/designerView/extensions/contextMenu/PasteFormatContextMenu.d.ts +11 -0
  116. package/dist/elements/widgets/designerView/extensions/contextMenu/PasteFormatContextMenu.js +62 -0
  117. package/dist/elements/widgets/designerView/extensions/contextMenu/PasteFormatContextMenu.js.map +1 -0
  118. package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtension.d.ts +20 -0
  119. package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtension.js +412 -19
  120. package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtension.js.map +1 -1
  121. package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtensionProvider.d.ts +1 -0
  122. package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtensionProvider.js +16 -0
  123. package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtensionProvider.js.map +1 -1
  124. package/dist/elements/widgets/designerView/tools/DrawPathTool.d.ts +14 -6
  125. package/dist/elements/widgets/designerView/tools/DrawPathTool.js +57 -39
  126. package/dist/elements/widgets/designerView/tools/DrawPathTool.js.map +1 -1
  127. package/dist/elements/widgets/designerView/tools/ITool.d.ts +1 -1
  128. package/dist/index-min.js +13 -6
  129. package/dist/index-min.js.map +4 -4
  130. package/dist/index.d.ts +25 -2
  131. package/dist/index.js +23 -2
  132. package/dist/index.js.map +1 -1
  133. package/package.json +1 -1
  134. package/tests/CssCombiner.test.ts +340 -0
  135. package/tests/PasteFormatSnapshot.test.ts +92 -0
@@ -0,0 +1,30 @@
1
+ import { IDesignItem } from '../../../item/IDesignItem.js';
2
+ import { IDesignerCanvas } from '../IDesignerCanvas.js';
3
+ import { AbstractExtension } from './AbstractExtension.js';
4
+ import { IExtensionManager } from './IExtensionManger.js';
5
+ export declare class SkewExtension extends AbstractExtension {
6
+ private _skewXLine?;
7
+ private _skewYLine?;
8
+ private _skewXCircle?;
9
+ private _skewYCircle?;
10
+ private _skewXReferencePoint;
11
+ private _skewYReferencePoint;
12
+ private _activeAxis;
13
+ private _baseTransform;
14
+ private _skewX;
15
+ private _skewY;
16
+ constructor(extensionManager: IExtensionManager, designerView: IDesignerCanvas, extendedItem: IDesignItem);
17
+ extend(cache: Record<string | symbol, any>, event?: Event): void;
18
+ refresh(cache: Record<string | symbol, any>, event?: Event): void;
19
+ private _handlePointerEvent;
20
+ private _readPersistedTransform;
21
+ private _getSkewReferencePoint;
22
+ private _setPreviewTransform;
23
+ private _commitTransform;
24
+ private _getSkewAngle;
25
+ private _buildTransform;
26
+ private _parseTransform;
27
+ private _splitTransformFunctions;
28
+ private _parseAngle;
29
+ dispose(): void;
30
+ }
@@ -0,0 +1,291 @@
1
+ import { hasCommandKey } from '../../../helper/KeyboardHelper.js';
2
+ import { roundValue } from '../../../helper/LayoutHelper.js';
3
+ import { getElementSize } from '../../../helper/getBoxQuads.js';
4
+ import { AbstractExtension } from './AbstractExtension.js';
5
+ import { getEdgeOffsetPoint, getQuadCenter } from '../../../helper/QuadEdgeHandleHelper.js';
6
+ export class SkewExtension extends AbstractExtension {
7
+ _skewXLine;
8
+ _skewYLine;
9
+ _skewXCircle;
10
+ _skewYCircle;
11
+ _skewXReferencePoint = { x: 0, y: 0 };
12
+ _skewYReferencePoint = { x: 0, y: 0 };
13
+ _activeAxis = null;
14
+ _baseTransform = '';
15
+ _skewX = 0;
16
+ _skewY = 0;
17
+ constructor(extensionManager, designerView, extendedItem) {
18
+ super(extensionManager, designerView, extendedItem);
19
+ }
20
+ extend(cache, event) {
21
+ this.refresh(cache, event);
22
+ }
23
+ refresh(cache, event) {
24
+ const quad = this.extendedItem.element.getBoxQuads({ box: 'border', relativeTo: this.designerCanvas.canvas })[0];
25
+ if (!quad) {
26
+ return;
27
+ }
28
+ const points = [quad.p1, quad.p2, quad.p3, quad.p4];
29
+ if (points.some(point => !Number.isFinite(point.x) || !Number.isFinite(point.y))) {
30
+ this.remove();
31
+ return;
32
+ }
33
+ const zoomFactor = this.designerCanvas.zoomFactor;
34
+ if (!this._valuesHaveChanges(zoomFactor, ...points.flatMap(point => [point.x, point.y]))) {
35
+ return;
36
+ }
37
+ const quadCenter = getQuadCenter(quad);
38
+ const skewXHandleCanvas = getEdgeOffsetPoint(quad.p1, quad.p2, quadCenter, 56 / zoomFactor, { x: 0, y: -1 });
39
+ const skewXLineStartCanvas = getEdgeOffsetPoint(quad.p1, quad.p2, quadCenter, 48 / zoomFactor, { x: 0, y: -1 });
40
+ const skewXLineEndCanvas = getEdgeOffsetPoint(quad.p1, quad.p2, quadCenter, 38 / zoomFactor, { x: 0, y: -1 });
41
+ const skewYHandleCanvas = getEdgeOffsetPoint(quad.p2, quad.p3, quadCenter, 30 / zoomFactor, { x: 1, y: 0 });
42
+ const skewYLineStartCanvas = getEdgeOffsetPoint(quad.p2, quad.p3, quadCenter, 22 / zoomFactor, { x: 1, y: 0 });
43
+ const skewYLineEndCanvas = getEdgeOffsetPoint(quad.p2, quad.p3, quadCenter, 6 / zoomFactor, { x: 1, y: 0 });
44
+ this._skewXLine = this._drawLine(skewXLineStartCanvas.x, skewXLineStartCanvas.y, skewXLineEndCanvas.x, skewXLineEndCanvas.y, 'svg-primary-skew-line', this._skewXLine);
45
+ this._skewYLine = this._drawLine(skewYLineStartCanvas.x, skewYLineStartCanvas.y, skewYLineEndCanvas.x, skewYLineEndCanvas.y, 'svg-primary-skew-line', this._skewYLine);
46
+ this._skewXLine.style.strokeWidth = (1 / zoomFactor).toString();
47
+ this._skewYLine.style.strokeWidth = (1 / zoomFactor).toString();
48
+ if (!this._skewXCircle) {
49
+ this._skewXCircle = this._drawCircle(skewXHandleCanvas.x, skewXHandleCanvas.y, 5 / zoomFactor, 'svg-primary-skew', this._skewXCircle);
50
+ this._skewXCircle.addEventListener('pointerdown', event => this._handlePointerEvent('x', event));
51
+ this._skewXCircle.addEventListener('pointermove', event => this._handlePointerEvent('x', event));
52
+ this._skewXCircle.addEventListener('pointerup', event => this._handlePointerEvent('x', event));
53
+ }
54
+ else {
55
+ this._skewXCircle = this._drawCircle(skewXHandleCanvas.x, skewXHandleCanvas.y, 5 / zoomFactor, 'svg-primary-skew', this._skewXCircle);
56
+ }
57
+ this._skewXCircle.style.strokeWidth = (1 / zoomFactor).toString();
58
+ this._skewXCircle.style.cursor = 'ew-resize';
59
+ if (!this._skewYCircle) {
60
+ this._skewYCircle = this._drawCircle(skewYHandleCanvas.x, skewYHandleCanvas.y, 5 / zoomFactor, 'svg-primary-skew', this._skewYCircle);
61
+ this._skewYCircle.addEventListener('pointerdown', event => this._handlePointerEvent('y', event));
62
+ this._skewYCircle.addEventListener('pointermove', event => this._handlePointerEvent('y', event));
63
+ this._skewYCircle.addEventListener('pointerup', event => this._handlePointerEvent('y', event));
64
+ }
65
+ else {
66
+ this._skewYCircle = this._drawCircle(skewYHandleCanvas.x, skewYHandleCanvas.y, 5 / zoomFactor, 'svg-primary-skew', this._skewYCircle);
67
+ }
68
+ this._skewYCircle.style.strokeWidth = (1 / zoomFactor).toString();
69
+ this._skewYCircle.style.cursor = 'ns-resize';
70
+ this._skewYCircle.style.fill = '#eaf5ff';
71
+ }
72
+ _handlePointerEvent(axis, event) {
73
+ event.stopPropagation();
74
+ const target = event.target;
75
+ switch (event.type) {
76
+ case 'pointerdown':
77
+ target.setPointerCapture(event.pointerId);
78
+ this._readPersistedTransform();
79
+ if (axis === 'x') {
80
+ this._skewXReferencePoint = this._getSkewReferencePoint('x');
81
+ }
82
+ else {
83
+ this._skewYReferencePoint = this._getSkewReferencePoint('y');
84
+ }
85
+ this._activeAxis = axis;
86
+ break;
87
+ case 'pointermove':
88
+ if (this._activeAxis === axis && event.buttons > 0) {
89
+ const angle = this._getSkewAngle(axis, event);
90
+ if (axis === 'x') {
91
+ this._skewX = angle;
92
+ }
93
+ else {
94
+ this._skewY = angle;
95
+ }
96
+ this._setPreviewTransform();
97
+ }
98
+ break;
99
+ case 'pointerup':
100
+ if (this._activeAxis === axis) {
101
+ target.releasePointerCapture(event.pointerId);
102
+ const angle = this._getSkewAngle(axis, event);
103
+ if (axis === 'x') {
104
+ this._skewX = angle;
105
+ }
106
+ else {
107
+ this._skewY = angle;
108
+ }
109
+ this._commitTransform();
110
+ this._activeAxis = null;
111
+ }
112
+ break;
113
+ }
114
+ }
115
+ _readPersistedTransform() {
116
+ const { baseTransform, skewX, skewY } = this._parseTransform(this.extendedItem.getStyleFromSheetOrLocal('transform') ?? '');
117
+ this._baseTransform = baseTransform;
118
+ this._skewX = skewX;
119
+ this._skewY = skewY;
120
+ }
121
+ _getSkewReferencePoint(axis) {
122
+ const element = this.extendedItem.element;
123
+ const size = getElementSize(this.extendedItem.element);
124
+ const zoomFactor = this.designerCanvas.zoomFactor;
125
+ const fallback = axis === 'x'
126
+ ? { x: size.width / 2, y: -56 / zoomFactor }
127
+ : { x: size.width + 30 / zoomFactor, y: size.height / 2 };
128
+ const inlineTransform = element.style.transform;
129
+ try {
130
+ element.style.transform = this._buildTransform(this._baseTransform, axis === 'x' ? 0 : this._skewX, axis === 'y' ? 0 : this._skewY);
131
+ const quad = element.getBoxQuads({ box: 'border', relativeTo: this.designerCanvas.canvas })[0];
132
+ if (!quad) {
133
+ return fallback;
134
+ }
135
+ const quadCenter = getQuadCenter(quad);
136
+ const handlePoint = axis === 'x'
137
+ ? getEdgeOffsetPoint(quad.p1, quad.p2, quadCenter, 56 / zoomFactor, { x: 0, y: -1 })
138
+ : getEdgeOffsetPoint(quad.p2, quad.p3, quadCenter, 30 / zoomFactor, { x: 1, y: 0 });
139
+ const localPoint = element.convertPointFromNode(handlePoint, this.designerCanvas.canvas);
140
+ if (!Number.isFinite(localPoint.x) || !Number.isFinite(localPoint.y)) {
141
+ return fallback;
142
+ }
143
+ return { x: localPoint.x, y: localPoint.y };
144
+ }
145
+ finally {
146
+ element.style.transform = inlineTransform;
147
+ }
148
+ }
149
+ _setPreviewTransform() {
150
+ this.extendedItem.element.style.transform = this._buildTransform(this._baseTransform, this._skewX, this._skewY);
151
+ }
152
+ _commitTransform() {
153
+ const finalTransform = this._buildTransform(this._baseTransform, this._skewX, this._skewY);
154
+ if (finalTransform) {
155
+ this.extendedItem.updateStyleInSheetOrLocal('transform', finalTransform);
156
+ }
157
+ else if (this.extendedItem.hasStyle('transform')) {
158
+ this.extendedItem.removeStyle('transform');
159
+ }
160
+ else {
161
+ this.extendedItem.updateStyleInSheetOrLocal('transform', null);
162
+ }
163
+ const element = this.extendedItem.element;
164
+ if (this.extendedItem.hasStyle('transform')) {
165
+ element.style.transform = this.extendedItem.getStyle('transform') ?? '';
166
+ }
167
+ else {
168
+ element.style.transform = '';
169
+ }
170
+ }
171
+ _getSkewAngle(axis, event) {
172
+ const element = this.extendedItem.element;
173
+ element.style.transform = this._buildTransform(this._baseTransform, axis === 'x' ? 0 : this._skewX, axis === 'y' ? 0 : this._skewY);
174
+ const mousePoint = this.designerCanvas.getNormalizedEventCoordinates(event);
175
+ const localPoint = element.convertPointFromNode({ x: mousePoint.x, y: mousePoint.y }, this.designerCanvas.canvas);
176
+ const computedStyle = getComputedStyle(element);
177
+ const transformOrigin = computedStyle.transformOrigin.split(' ');
178
+ const origin = { x: parseFloat(transformOrigin[0]), y: parseFloat(transformOrigin[1]) };
179
+ const size = getElementSize(element);
180
+ let angle;
181
+ if (axis === 'x') {
182
+ let referenceY = this._skewXReferencePoint.y - origin.y;
183
+ if (Math.abs(referenceY) < 0.5) {
184
+ referenceY = -Math.max(size.height / 2, 1);
185
+ }
186
+ angle = Math.atan((localPoint.x - origin.x) / referenceY) * 180 / Math.PI;
187
+ }
188
+ else {
189
+ let referenceX = this._skewYReferencePoint.x - origin.x;
190
+ if (Math.abs(referenceX) < 0.5) {
191
+ referenceX = Math.max(size.width / 2, 1);
192
+ }
193
+ angle = Math.atan((localPoint.y - origin.y) / referenceX) * 180 / Math.PI;
194
+ }
195
+ angle = Math.max(-80, Math.min(80, angle));
196
+ if (!hasCommandKey(event)) {
197
+ angle = Math.round(angle / 15) * 15;
198
+ }
199
+ return parseFloat(roundValue(this.extendedItem, angle));
200
+ }
201
+ _buildTransform(baseTransform, skewX, skewY) {
202
+ const transforms = [];
203
+ if (baseTransform?.trim()) {
204
+ transforms.push(baseTransform.trim());
205
+ }
206
+ if (Math.abs(skewX) > 0.001) {
207
+ transforms.push(`skewX(${skewX}deg)`);
208
+ }
209
+ if (Math.abs(skewY) > 0.001) {
210
+ transforms.push(`skewY(${skewY}deg)`);
211
+ }
212
+ return transforms.join(' ').trim();
213
+ }
214
+ _parseTransform(transform) {
215
+ if (!transform || transform === 'none') {
216
+ return { baseTransform: '', skewX: 0, skewY: 0 };
217
+ }
218
+ let skewX = 0;
219
+ let skewY = 0;
220
+ const baseTransforms = [];
221
+ for (const part of this._splitTransformFunctions(transform)) {
222
+ const functionName = part.slice(0, part.indexOf('(')).trim().toLowerCase();
223
+ const argumentsText = part.slice(part.indexOf('(') + 1, -1);
224
+ const argumentsList = argumentsText.split(',').map(value => value.trim());
225
+ if (functionName === 'skewx') {
226
+ skewX = this._parseAngle(argumentsList[0]);
227
+ }
228
+ else if (functionName === 'skewy') {
229
+ skewY = this._parseAngle(argumentsList[0]);
230
+ }
231
+ else if (functionName === 'skew') {
232
+ skewX = this._parseAngle(argumentsList[0]);
233
+ if (argumentsList.length > 1) {
234
+ skewY = this._parseAngle(argumentsList[1]);
235
+ }
236
+ }
237
+ else {
238
+ baseTransforms.push(part);
239
+ }
240
+ }
241
+ return { baseTransform: baseTransforms.join(' ').trim(), skewX, skewY };
242
+ }
243
+ _splitTransformFunctions(transform) {
244
+ const parts = [];
245
+ let startIndex = -1;
246
+ let depth = 0;
247
+ for (let index = 0; index < transform.length; index++) {
248
+ const character = transform[index];
249
+ if (character === '(') {
250
+ depth++;
251
+ }
252
+ else if (character === ')') {
253
+ depth--;
254
+ if (depth === 0 && startIndex !== -1) {
255
+ parts.push(transform.slice(startIndex, index + 1).trim());
256
+ startIndex = -1;
257
+ }
258
+ }
259
+ else if (depth === 0 && startIndex === -1 && character.trim()) {
260
+ startIndex = index;
261
+ }
262
+ }
263
+ if (!parts.length && transform.trim()) {
264
+ parts.push(transform.trim());
265
+ }
266
+ return parts;
267
+ }
268
+ _parseAngle(value) {
269
+ if (!value) {
270
+ return 0;
271
+ }
272
+ const numericValue = parseFloat(value);
273
+ if (isNaN(numericValue)) {
274
+ return 0;
275
+ }
276
+ if (value.endsWith('rad')) {
277
+ return numericValue * 180 / Math.PI;
278
+ }
279
+ if (value.endsWith('grad')) {
280
+ return numericValue * 0.9;
281
+ }
282
+ if (value.endsWith('turn')) {
283
+ return numericValue * 360;
284
+ }
285
+ return numericValue;
286
+ }
287
+ dispose() {
288
+ this._removeAllOverlays();
289
+ }
290
+ }
291
+ //# sourceMappingURL=SkewExtension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkewExtension.js","sourceRoot":"","sources":["../../../../../src/elements/widgets/designerView/extensions/SkewExtension.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { IDesignerExtensionProvider } from './IDesignerExtensionProvider.js';
2
+ import { IDesignItem } from '../../../item/IDesignItem.js';
3
+ import { IDesignerCanvas } from '../IDesignerCanvas.js';
4
+ import { IDesignerExtension } from './IDesignerExtension.js';
5
+ import { IExtensionManager } from './IExtensionManger.js';
6
+ export declare class SkewExtensionProvider implements IDesignerExtensionProvider {
7
+ shouldExtend(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): boolean;
8
+ getExtension(extensionManager: IExtensionManager, designerCanvas: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
9
+ static readonly style: CSSStyleSheet;
10
+ }
@@ -0,0 +1,20 @@
1
+ import { SkewExtension } from './SkewExtension.js';
2
+ import { css } from '@node-projects/base-custom-webcomponent';
3
+ export class SkewExtensionProvider {
4
+ shouldExtend(extensionManager, designerCanvas, designItem) {
5
+ if (designerCanvas.readOnly)
6
+ return false;
7
+ if (designItem.element instanceof SVGElement || designItem.element instanceof HTMLTemplateElement) {
8
+ return false;
9
+ }
10
+ return !designItem.isRootItem;
11
+ }
12
+ getExtension(extensionManager, designerCanvas, designItem) {
13
+ return new SkewExtension(extensionManager, designerCanvas, designItem);
14
+ }
15
+ static style = css `
16
+ .svg-primary-skew { stroke: #3899ec; fill: white; stroke-width: 1; pointer-events: auto; }
17
+ .svg-primary-skew-line { stroke: #3899ec; fill: none; stroke-width: 1; }
18
+ `;
19
+ }
20
+ //# sourceMappingURL=SkewExtensionProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkewExtensionProvider.js","sourceRoot":"","sources":["../../../../../src/elements/widgets/designerView/extensions/SkewExtensionProvider.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,EAAE,GAAG,EAAE,MAAM,yCAAyC,CAAC;AAE9D,MAAM,OAAO,qBAAqB;IAChC,YAAY,CAAC,gBAAmC,EAAE,cAA+B,EAAE,UAAuB;QACxG,IAAI,cAAc,CAAC,QAAQ;YACzB,OAAO,KAAK,CAAC;QACf,IAAI,UAAU,CAAC,OAAO,YAAY,UAAU,IAAI,UAAU,CAAC,OAAO,YAAY,mBAAmB,EAAE,CAAC;YAClG,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC;IAChC,CAAC;IAED,YAAY,CAAC,gBAAmC,EAAE,cAA+B,EAAE,UAAuB;QACxG,OAAO,IAAI,aAAa,CAAC,gBAAgB,EAAE,cAAc,EAAE,UAAU,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,CAAU,KAAK,GAAG,GAAG,CAAA;;;GAG1B,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { IContextMenuItem } from '../../../../helper/contextMenu/IContextMenuItem.js';
2
+ import { IDesignItem } from '../../../../item/IDesignItem.js';
3
+ import { IDesignerCanvas } from '../../IDesignerCanvas.js';
4
+ import { ContextmenuInitiator, IContextMenuExtension } from './IContextMenuExtension.js';
5
+ export declare class CollaborationCommentsContextMenu implements IContextMenuExtension {
6
+ shouldProvideContextmenu(event: MouseEvent, designerView: IDesignerCanvas, designItem: IDesignItem, initiator: ContextmenuInitiator): boolean;
7
+ provideContextMenuItems(event: MouseEvent, designerCanvas: IDesignerCanvas, designItem: IDesignItem): IContextMenuItem[];
8
+ private createCommentMenuItem;
9
+ }
@@ -0,0 +1,72 @@
1
+ import { getCollaborationNodeIndex } from '../../../../services/collaborationService/CollaborationNodeIndex.js';
2
+ function truncateText(text, maxLength) {
3
+ if (!text || text.length <= maxLength)
4
+ return text;
5
+ return text.substring(0, Math.max(0, maxLength - 1)) + '…';
6
+ }
7
+ function createCommentId() {
8
+ return globalThis.crypto?.randomUUID?.() ?? `comment-${Date.now()}-${Math.floor(Math.random() * 100000)}`;
9
+ }
10
+ export class CollaborationCommentsContextMenu {
11
+ shouldProvideContextmenu(event, designerView, designItem, initiator) {
12
+ return !!designerView.instanceServiceContainer.collaborationService && !!designItem && !designItem.isRootItem;
13
+ }
14
+ provideContextMenuItems(event, designerCanvas, designItem) {
15
+ const collaborationService = designerCanvas.instanceServiceContainer.collaborationService;
16
+ const targetNodeIndex = getCollaborationNodeIndex(designItem);
17
+ if (targetNodeIndex == null)
18
+ return [];
19
+ const comments = collaborationService.comments.filter(x => x.targetNodeIndex === targetNodeIndex);
20
+ const localPeerId = collaborationService.session?.peerId ?? 'local';
21
+ const items = [
22
+ {
23
+ title: 'add comment',
24
+ action: () => {
25
+ const value = globalThis.prompt?.('Add comment', '')?.trim();
26
+ if (!value)
27
+ return;
28
+ const now = Date.now();
29
+ collaborationService.upsertComment({
30
+ id: createCommentId(),
31
+ text: value,
32
+ authorPeerId: localPeerId,
33
+ targetNodeIndex,
34
+ targetDesignItemId: designItem.id,
35
+ createdAt: now,
36
+ updatedAt: now,
37
+ resolved: false
38
+ });
39
+ }
40
+ }
41
+ ];
42
+ if (comments.length) {
43
+ items.push({ title: '-' });
44
+ items.push({
45
+ title: `comments (${comments.length})`,
46
+ children: comments.map(comment => this.createCommentMenuItem(comment, collaborationService, designItem))
47
+ });
48
+ }
49
+ return items;
50
+ }
51
+ createCommentMenuItem(comment, collaborationService, designItem) {
52
+ return {
53
+ title: `${comment.resolved ? 'resolved' : 'open'}: ${truncateText(comment.text, 36)}`,
54
+ children: [
55
+ {
56
+ title: comment.resolved ? 'reopen' : 'resolve',
57
+ action: () => collaborationService.upsertComment({
58
+ ...comment,
59
+ targetDesignItemId: designItem.id,
60
+ resolved: !comment.resolved,
61
+ updatedAt: Date.now()
62
+ })
63
+ },
64
+ {
65
+ title: 'remove',
66
+ action: () => collaborationService.removeComment(comment.id)
67
+ }
68
+ ]
69
+ };
70
+ }
71
+ }
72
+ //# sourceMappingURL=CollaborationCommentsContextMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CollaborationCommentsContextMenu.js","sourceRoot":"","sources":["../../../../../../src/elements/widgets/designerView/extensions/contextMenu/CollaborationCommentsContextMenu.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { IContextMenuItem } from '../../../../helper/contextMenu/IContextMenuItem.js';
2
+ import { IDesignItem } from '../../../../item/IDesignItem.js';
3
+ import { IDesignerCanvas } from '../../IDesignerCanvas.js';
4
+ import { ContextmenuInitiator, IContextMenuExtension } from './IContextMenuExtension.js';
5
+ export declare class PasteFormatContextMenu implements IContextMenuExtension {
6
+ shouldProvideContextmenu(event: MouseEvent, designerCanvas: IDesignerCanvas, designItem: IDesignItem, initiator: ContextmenuInitiator): boolean;
7
+ provideContextMenuItems(event: MouseEvent, designerCanvas: IDesignerCanvas, designItem: IDesignItem): IContextMenuItem[];
8
+ private _createPasteFormatItem;
9
+ private _getTargetDesignItems;
10
+ private _pasteFormat;
11
+ }
@@ -0,0 +1,62 @@
1
+ import { NodeType } from '../../../../item/NodeType.js';
2
+ import { createPasteFormatSnapshotFromEntries, getPasteFormatEntries } from '../../../../services/copyPasteService/PasteFormatSnapshot.js';
3
+ export class PasteFormatContextMenu {
4
+ shouldProvideContextmenu(event, designerCanvas, designItem, initiator) {
5
+ return !designerCanvas.readOnly
6
+ && this._getTargetDesignItems(designerCanvas).length > 0;
7
+ }
8
+ provideContextMenuItems(event, designerCanvas, designItem) {
9
+ return [{
10
+ title: 'paste format',
11
+ children: [
12
+ this._createPasteFormatItem(designerCanvas, 'all'),
13
+ { title: '-' },
14
+ this._createPasteFormatItem(designerCanvas, 'border'),
15
+ this._createPasteFormatItem(designerCanvas, 'background'),
16
+ this._createPasteFormatItem(designerCanvas, 'text')
17
+ ]
18
+ }];
19
+ }
20
+ _createPasteFormatItem(designerCanvas, kind) {
21
+ return {
22
+ title: kind,
23
+ action: () => {
24
+ void this._pasteFormat(designerCanvas, kind);
25
+ }
26
+ };
27
+ }
28
+ _getTargetDesignItems(designerCanvas) {
29
+ return designerCanvas.instanceServiceContainer.selectionService.selectedElements?.filter(x => x?.nodeType === NodeType.Element && !x.isRootItem) ?? [];
30
+ }
31
+ async _pasteFormat(designerCanvas, kind) {
32
+ const [pasteDesignItems] = await designerCanvas.serviceContainer.copyPasteService.getPasteItems(designerCanvas.serviceContainer, designerCanvas.instanceServiceContainer);
33
+ const pasteSource = pasteDesignItems?.find(x => x?.nodeType === NodeType.Element && x.hasStyles && !x.isRootItem);
34
+ const snapshot = pasteSource ? createPasteFormatSnapshotFromEntries(pasteSource.styles()) : null;
35
+ if (!snapshot) {
36
+ return;
37
+ }
38
+ const entries = getPasteFormatEntries(snapshot, kind);
39
+ const targets = this._getTargetDesignItems(designerCanvas);
40
+ if (!entries.length || !targets.length) {
41
+ return;
42
+ }
43
+ const group = targets[0].openGroup(`paste format: ${kind}`);
44
+ let changed = false;
45
+ for (const target of targets) {
46
+ for (const entry of entries) {
47
+ if (target.getStyle(entry.name) === entry.value) {
48
+ continue;
49
+ }
50
+ target.setStyle(entry.name, entry.value);
51
+ changed = true;
52
+ }
53
+ }
54
+ if (changed) {
55
+ group.commit();
56
+ }
57
+ else {
58
+ group.abort();
59
+ }
60
+ }
61
+ }
62
+ //# sourceMappingURL=PasteFormatContextMenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PasteFormatContextMenu.js","sourceRoot":"","sources":["../../../../../../src/elements/widgets/designerView/extensions/contextMenu/PasteFormatContextMenu.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,oCAAoC,EAAE,qBAAqB,EAAmB,MAAM,8DAA8D,CAAC;AAI5J,MAAM,OAAO,sBAAsB;IAC1B,wBAAwB,CAAC,KAAiB,EAAE,cAA+B,EAAE,UAAuB,EAAE,SAA+B;QAC1I,OAAO,CAAC,cAAc,CAAC,QAAQ;eAC1B,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC7D,CAAC;IAEM,uBAAuB,CAAC,KAAiB,EAAE,cAA+B,EAAE,UAAuB;QACxG,OAAO,CAAC;gBACN,KAAK,EAAE,cAAc;gBACrB,QAAQ,EAAE;oBACR,IAAI,CAAC,sBAAsB,CAAC,cAAc,EAAE,KAAK,CAAC;oBAClD,EAAE,KAAK,EAAE,GAAG,EAAE;oBACd,IAAI,CAAC,sBAAsB,CAAC,cAAc,EAAE,QAAQ,CAAC;oBACrD,IAAI,CAAC,sBAAsB,CAAC,cAAc,EAAE,YAAY,CAAC;oBACzD,IAAI,CAAC,sBAAsB,CAAC,cAAc,EAAE,MAAM,CAAC;iBACpD;aACF,CAAC,CAAC;IACL,CAAC;IAEO,sBAAsB,CAAC,cAA+B,EAAE,IAAqB;QACnF,OAAO;YACL,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,GAAG,EAAE;gBACX,KAAK,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YAC/C,CAAC;SACF,CAAC;IACJ,CAAC;IAEO,qBAAqB,CAAC,cAA+B;QAC3D,OAAO,cAAc,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IACzJ,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,cAA+B,EAAE,IAAqB;QAC/E,MAAM,CAAC,gBAAgB,CAAC,GAAG,MAAM,cAAc,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,aAAa,CAAC,cAAc,CAAC,gBAAgB,EAAE,cAAc,CAAC,wBAAwB,CAAC,CAAC;QAC1K,MAAM,WAAW,GAAG,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QAClH,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,CAAC,oCAAoC,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACjG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO;QACT,CAAC;QAED,MAAM,OAAO,GAAG,qBAAqB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,CAAC;QAC3D,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACvC,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;QAC5D,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC;oBAChD,SAAS;gBACX,CAAC;gBAED,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;gBACzC,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;QAED,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;CACF"}
@@ -11,6 +11,7 @@ export declare class UnifiedGeometryExtension extends AbstractExtension {
11
11
  private _reader;
12
12
  private _dragState;
13
13
  private _options;
14
+ private _overlayStructureSignature;
14
15
  private _eventCleanups;
15
16
  /** Map from 'anchor-{index}', 'cp1-{index}', 'cp2-{index}' to overlay circle */
16
17
  private _overlayCircles;
@@ -21,18 +22,35 @@ export declare class UnifiedGeometryExtension extends AbstractExtension {
21
22
  refresh(): void;
22
23
  dispose(): void;
23
24
  private _cleanupAll;
25
+ private _getOverlayStructureSignature;
26
+ private _hasOverlayStructureMismatch;
27
+ private _getRefreshValues;
24
28
  /** Convert an SVG-element-local coordinate to overlay (canvas) coordinate
25
29
  * using the getBoxQuads polyfill convertPointFromNode */
26
30
  private _toOverlay;
27
31
  /** Convert overlay (canvas) coordinate back to SVG-element-local coordinate */
28
32
  private _fromOverlay;
33
+ private _getSvgOverlayTransform;
34
+ private _mapSvgPointToOverlay;
35
+ private _mapOverlayPointToSvg;
36
+ private _toElementReferenceBoxPoint;
37
+ private _fromElementReferenceBoxPoint;
38
+ private _getSvgGeometryBBoxOffset;
29
39
  private _drawOverlays;
40
+ private _updateOverlayAppearance;
30
41
  private _addTrackedListener;
31
42
  private _drawAnchorCircle;
32
43
  private _drawControlCircle;
33
44
  private _onPointerDown;
34
45
  private _onPointerMove;
35
46
  private _dragSingleHandle;
47
+ private _dragRectCorner;
48
+ private _setRectCornerPoints;
49
+ private _dragCircleCardinal;
50
+ private _dragEllipseCardinal;
51
+ private _normalizeCardinalIndex;
52
+ private _setCardinalArcPoints;
53
+ private _shouldRenderAnchorHandle;
36
54
  private _dragWholeShape;
37
55
  /** Update existing overlay circle/line positions without removing/recreating them.
38
56
  * This preserves pointer capture during drag. */
@@ -51,6 +69,8 @@ export declare class UnifiedGeometryExtension extends AbstractExtension {
51
69
  private _convertToLine;
52
70
  private _convertToQuadratic;
53
71
  private _convertToCubic;
72
+ private _convertToArc;
73
+ private _invertArc;
54
74
  private _evalCubicBezier;
55
75
  private _evalQuadraticBezier;
56
76
  }