@node-projects/web-component-designer 0.1.343 → 0.1.345

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 (50) hide show
  1. package/dist/elements/helper/getBoxQuads.js +6 -4
  2. package/dist/elements/helper/getBoxQuads.js.map +1 -1
  3. package/dist/elements/services/demoProviderService/SimpleDemoProviderService.js +1 -1
  4. package/dist/elements/services/demoProviderService/SimpleDemoProviderService.js.map +1 -1
  5. package/dist/elements/widgets/designerView/DomConverter.d.ts +1 -1
  6. package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtension.d.ts +56 -0
  7. package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtension.js +584 -0
  8. package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtension.js.map +1 -0
  9. package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtensionProvider.d.ts +12 -0
  10. package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtensionProvider.js +27 -0
  11. package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtensionProvider.js.map +1 -0
  12. package/dist/elements/widgets/designerView/extensions/svg/geometry/CssClipPathGeometryReader.d.ts +18 -0
  13. package/dist/elements/widgets/designerView/extensions/svg/geometry/CssClipPathGeometryReader.js +161 -0
  14. package/dist/elements/widgets/designerView/extensions/svg/geometry/CssClipPathGeometryReader.js.map +1 -0
  15. package/dist/elements/widgets/designerView/extensions/svg/geometry/CssOffsetPathGeometryReader.d.ts +18 -0
  16. package/dist/elements/widgets/designerView/extensions/svg/geometry/CssOffsetPathGeometryReader.js +150 -0
  17. package/dist/elements/widgets/designerView/extensions/svg/geometry/CssOffsetPathGeometryReader.js.map +1 -0
  18. package/dist/elements/widgets/designerView/extensions/svg/geometry/CssShapeOutsideGeometryReader.d.ts +17 -0
  19. package/dist/elements/widgets/designerView/extensions/svg/geometry/CssShapeOutsideGeometryReader.js +121 -0
  20. package/dist/elements/widgets/designerView/extensions/svg/geometry/CssShapeOutsideGeometryReader.js.map +1 -0
  21. package/dist/elements/widgets/designerView/extensions/svg/geometry/GeometryReaderFactory.d.ts +4 -0
  22. package/dist/elements/widgets/designerView/extensions/svg/geometry/GeometryReaderFactory.js +54 -0
  23. package/dist/elements/widgets/designerView/extensions/svg/geometry/GeometryReaderFactory.js.map +1 -0
  24. package/dist/elements/widgets/designerView/extensions/svg/geometry/IGeometry.d.ts +61 -0
  25. package/dist/elements/widgets/designerView/extensions/svg/geometry/IGeometry.js +17 -0
  26. package/dist/elements/widgets/designerView/extensions/svg/geometry/IGeometry.js.map +1 -0
  27. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgCircleGeometryReader.d.ts +8 -0
  28. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgCircleGeometryReader.js +37 -0
  29. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgCircleGeometryReader.js.map +1 -0
  30. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgEllipseGeometryReader.d.ts +8 -0
  31. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgEllipseGeometryReader.js +42 -0
  32. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgEllipseGeometryReader.js.map +1 -0
  33. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgLineGeometryReader.d.ts +8 -0
  34. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgLineGeometryReader.js +27 -0
  35. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgLineGeometryReader.js.map +1 -0
  36. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPathGeometryReader.d.ts +9 -0
  37. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPathGeometryReader.js +205 -0
  38. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPathGeometryReader.js.map +1 -0
  39. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPolygonGeometryReader.d.ts +8 -0
  40. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPolygonGeometryReader.js +27 -0
  41. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPolygonGeometryReader.js.map +1 -0
  42. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPolylineGeometryReader.d.ts +8 -0
  43. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPolylineGeometryReader.js +24 -0
  44. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPolylineGeometryReader.js.map +1 -0
  45. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgRectGeometryReader.d.ts +8 -0
  46. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgRectGeometryReader.js +36 -0
  47. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgRectGeometryReader.js.map +1 -0
  48. package/dist/index-min.js +1 -1
  49. package/dist/index-min.js.map +2 -2
  50. package/package.json +1 -1
@@ -0,0 +1,584 @@
1
+ import { AbstractExtension } from '../AbstractExtension.js';
2
+ import { EventNames } from '../../../../../enums/EventNames.js';
3
+ import { ContextMenu } from '../../../../helper/contextMenu/ContextMenu.js';
4
+ import { OverlayLayer } from '../OverlayLayer.js';
5
+ import { SegmentType } from './geometry/IGeometry.js';
6
+ import { getGeometryReader } from './geometry/GeometryReaderFactory.js';
7
+ export class UnifiedGeometryExtension extends AbstractExtension {
8
+ _geometry = null;
9
+ _reader;
10
+ _dragState = null;
11
+ _options;
12
+ _eventCleanups = [];
13
+ /** Map from 'anchor-{index}', 'cp1-{index}', 'cp2-{index}' to overlay circle */
14
+ _overlayCircles = new Map();
15
+ /** Lines for control point connections */
16
+ _overlayLines = [];
17
+ constructor(extensionManager, designerView, extendedItem, reader, options) {
18
+ super(extensionManager, designerView, extendedItem);
19
+ this._reader = reader ?? getGeometryReader(extendedItem.element);
20
+ this._options = options ?? {};
21
+ }
22
+ extend() {
23
+ this._cleanupAll();
24
+ if (!this._reader)
25
+ return;
26
+ this._geometry = this._reader.read(this.extendedItem.element);
27
+ this._drawOverlays();
28
+ }
29
+ refresh() {
30
+ this._cleanupAll();
31
+ if (!this._reader)
32
+ return;
33
+ this._geometry = this._reader.read(this.extendedItem.element);
34
+ this._drawOverlays();
35
+ }
36
+ dispose() {
37
+ this._cleanupAll();
38
+ this._geometry = null;
39
+ this._dragState = null;
40
+ }
41
+ _cleanupAll() {
42
+ for (const cleanup of this._eventCleanups) {
43
+ try {
44
+ cleanup();
45
+ }
46
+ catch { /* ignore */ }
47
+ }
48
+ this._eventCleanups = [];
49
+ this._overlayCircles.clear();
50
+ this._overlayLines = [];
51
+ this._removeAllOverlays();
52
+ }
53
+ /** Convert an SVG-element-local coordinate to overlay (canvas) coordinate
54
+ * using the getBoxQuads polyfill convertPointFromNode */
55
+ _toOverlay(p) {
56
+ const tp = this.designerCanvas.canvas.convertPointFromNode({ x: p.x, y: p.y }, this.extendedItem.element);
57
+ return { x: tp.x, y: tp.y };
58
+ }
59
+ /** Convert overlay (canvas) coordinate back to SVG-element-local coordinate */
60
+ _fromOverlay(p) {
61
+ const tp = this.extendedItem.element.convertPointFromNode({ x: p.x, y: p.y }, this.designerCanvas.canvas);
62
+ return { x: tp.x, y: tp.y };
63
+ }
64
+ _drawOverlays() {
65
+ if (!this._geometry)
66
+ return;
67
+ let prevAnchor = null;
68
+ for (let i = 0; i < this._geometry.segments.length; i++) {
69
+ const seg = this._geometry.segments[i];
70
+ if (seg.type === SegmentType.Close) {
71
+ prevAnchor = this._geometry.segments[0]?.point ?? null;
72
+ continue;
73
+ }
74
+ // Draw control point handles and dashed lines for bezier segments
75
+ if (seg.cp1) {
76
+ const cp1Overlay = this._toOverlay(seg.cp1);
77
+ if (prevAnchor) {
78
+ const prevOverlay = this._toOverlay(prevAnchor);
79
+ const line = this._drawLine(prevOverlay.x, prevOverlay.y, cp1Overlay.x, cp1Overlay.y, 'svg-control-line');
80
+ line.style.strokeDasharray = (4 / this.designerCanvas.scaleFactor).toString();
81
+ this._overlayLines.push(line);
82
+ }
83
+ this._drawControlCircle(cp1Overlay, i, 'cp1');
84
+ }
85
+ if (seg.cp2) {
86
+ const cp2Overlay = this._toOverlay(seg.cp2);
87
+ const anchorOverlay = this._toOverlay(seg.point);
88
+ const line = this._drawLine(anchorOverlay.x, anchorOverlay.y, cp2Overlay.x, cp2Overlay.y, 'svg-control-line');
89
+ line.style.strokeDasharray = (4 / this.designerCanvas.scaleFactor).toString();
90
+ this._overlayLines.push(line);
91
+ this._drawControlCircle(cp2Overlay, i, 'cp2');
92
+ }
93
+ // Draw the anchor point
94
+ const overlayPt = this._toOverlay(seg.point);
95
+ this._drawAnchorCircle(overlayPt, i, seg);
96
+ prevAnchor = seg.point;
97
+ }
98
+ }
99
+ _addTrackedListener(el, event, handler) {
100
+ el.addEventListener(event, handler);
101
+ this._eventCleanups.push(() => el.removeEventListener(event, handler));
102
+ }
103
+ _drawAnchorCircle(overlayPt, segIndex, seg) {
104
+ const r = 5 / this.designerCanvas.scaleFactor;
105
+ const circle = this._drawCircle(overlayPt.x, overlayPt.y, r, 'svg-path', undefined, OverlayLayer.Foreground);
106
+ circle.style.strokeWidth = (1 / this.designerCanvas.zoomFactor).toString();
107
+ circle.style.cursor = 'move';
108
+ this._overlayCircles.set(`anchor-${segIndex}`, circle);
109
+ const onDown = (e) => this._onPointerDown(e, circle, segIndex, 'anchor');
110
+ const onMove = (e) => this._onPointerMove(e, circle, segIndex, 'anchor');
111
+ const onUp = (e) => this._onPointerUp(e, segIndex);
112
+ const onCtx = (e) => {
113
+ e.preventDefault();
114
+ this._showContextMenu(e, segIndex, seg);
115
+ };
116
+ this._addTrackedListener(circle, EventNames.PointerDown, onDown);
117
+ this._addTrackedListener(circle, EventNames.PointerMove, onMove);
118
+ this._addTrackedListener(circle, EventNames.PointerUp, onUp);
119
+ this._addTrackedListener(circle, EventNames.ContextMenu, onCtx);
120
+ }
121
+ _drawControlCircle(overlayPt, segIndex, handleType) {
122
+ const r = 4 / this.designerCanvas.scaleFactor;
123
+ const circle = this._drawCircle(overlayPt.x, overlayPt.y, r, 'svg-control-point', undefined, OverlayLayer.Foreground);
124
+ circle.style.strokeWidth = (1 / this.designerCanvas.zoomFactor).toString();
125
+ circle.style.cursor = 'move';
126
+ this._overlayCircles.set(`${handleType}-${segIndex}`, circle);
127
+ const onDown = (e) => this._onPointerDown(e, circle, segIndex, handleType);
128
+ const onMove = (e) => this._onPointerMove(e, circle, segIndex, handleType);
129
+ const onUp = (e) => this._onPointerUp(e, segIndex);
130
+ this._addTrackedListener(circle, EventNames.PointerDown, onDown);
131
+ this._addTrackedListener(circle, EventNames.PointerMove, onMove);
132
+ this._addTrackedListener(circle, EventNames.PointerUp, onUp);
133
+ }
134
+ // -- Pointer event handlers --
135
+ _onPointerDown(event, circle, segIndex, handleType) {
136
+ event.stopPropagation();
137
+ event.preventDefault();
138
+ event.target.setPointerCapture(event.pointerId);
139
+ const cursorPos = this.designerCanvas.getNormalizedEventCoordinates(event);
140
+ if (!this._geometry)
141
+ return;
142
+ const seg = this._geometry.segments[segIndex];
143
+ let originalPoint;
144
+ if (handleType === 'anchor') {
145
+ originalPoint = { ...seg.point };
146
+ }
147
+ else if (handleType === 'cp1') {
148
+ originalPoint = { ...seg.cp1 };
149
+ }
150
+ else {
151
+ originalPoint = { ...seg.cp2 };
152
+ }
153
+ const originalSegments = this._geometry.segments.map(s => ({
154
+ point: { ...s.point },
155
+ cp1: s.cp1 ? { ...s.cp1 } : undefined,
156
+ cp2: s.cp2 ? { ...s.cp2 } : undefined,
157
+ }));
158
+ this._dragState = {
159
+ startCursorPos: cursorPos,
160
+ segmentIndex: segIndex,
161
+ handleType,
162
+ originalPoint,
163
+ originalSegments,
164
+ startScrollOffset: this.designerCanvas.canvasOffset,
165
+ };
166
+ }
167
+ _onPointerMove(event, circle, segIndex, handleType) {
168
+ event.stopPropagation();
169
+ event.preventDefault();
170
+ if (!this._dragState || !this._geometry || event.buttons === 0)
171
+ return;
172
+ if (this._dragState.segmentIndex !== segIndex || this._dragState.handleType !== handleType)
173
+ return;
174
+ const cursorPos = this.designerCanvas.getNormalizedEventCoordinates(event);
175
+ let dx = cursorPos.x - this._dragState.startCursorPos.x;
176
+ let dy = cursorPos.y - this._dragState.startCursorPos.y;
177
+ // Shift key: constrain to axis
178
+ if (event.shiftKey) {
179
+ if (Math.abs(dx) >= Math.abs(dy)) {
180
+ dy = 0;
181
+ }
182
+ else {
183
+ dx = 0;
184
+ }
185
+ }
186
+ // Alt key + anchor drag: move entire shape
187
+ if (event.altKey && handleType === 'anchor' && this._options.allowShapeDrag !== false) {
188
+ this._dragWholeShape(dx, dy);
189
+ }
190
+ else {
191
+ this._dragSingleHandle(segIndex, handleType, dx, dy);
192
+ }
193
+ // Update geometry model
194
+ this._applyGeometryToElement();
195
+ // Update overlay positions in-place (no recreate to preserve pointer capture)
196
+ this._updateOverlayPositions();
197
+ this.designerCanvas.extensionManager.refreshAllExtensions([this.extendedItem], this);
198
+ }
199
+ _dragSingleHandle(segIndex, handleType, dx, dy) {
200
+ const origOverlay = this._toOverlay(this._dragState.originalPoint);
201
+ const newOverlay = { x: origOverlay.x + dx, y: origOverlay.y + dy };
202
+ const newLocal = this._fromOverlay(newOverlay);
203
+ const seg = this._geometry.segments[segIndex];
204
+ if (handleType === 'anchor') {
205
+ seg.point.x = newLocal.x;
206
+ seg.point.y = newLocal.y;
207
+ }
208
+ else if (handleType === 'cp1') {
209
+ seg.cp1.x = newLocal.x;
210
+ seg.cp1.y = newLocal.y;
211
+ }
212
+ else {
213
+ seg.cp2.x = newLocal.x;
214
+ seg.cp2.y = newLocal.y;
215
+ }
216
+ }
217
+ _dragWholeShape(dx, dy) {
218
+ if (!this._dragState?.originalSegments || !this._geometry)
219
+ return;
220
+ for (let i = 0; i < this._geometry.segments.length; i++) {
221
+ const orig = this._dragState.originalSegments[i];
222
+ const seg = this._geometry.segments[i];
223
+ const origOverlay = this._toOverlay(orig.point);
224
+ const newOverlay = { x: origOverlay.x + dx, y: origOverlay.y + dy };
225
+ const newLocal = this._fromOverlay(newOverlay);
226
+ seg.point.x = newLocal.x;
227
+ seg.point.y = newLocal.y;
228
+ if (seg.cp1 && orig.cp1) {
229
+ const origCp1Overlay = this._toOverlay(orig.cp1);
230
+ const newCp1Overlay = { x: origCp1Overlay.x + dx, y: origCp1Overlay.y + dy };
231
+ const newCp1Local = this._fromOverlay(newCp1Overlay);
232
+ seg.cp1.x = newCp1Local.x;
233
+ seg.cp1.y = newCp1Local.y;
234
+ }
235
+ if (seg.cp2 && orig.cp2) {
236
+ const origCp2Overlay = this._toOverlay(orig.cp2);
237
+ const newCp2Overlay = { x: origCp2Overlay.x + dx, y: origCp2Overlay.y + dy };
238
+ const newCp2Local = this._fromOverlay(newCp2Overlay);
239
+ seg.cp2.x = newCp2Local.x;
240
+ seg.cp2.y = newCp2Local.y;
241
+ }
242
+ }
243
+ }
244
+ /** Update existing overlay circle/line positions without removing/recreating them.
245
+ * This preserves pointer capture during drag. */
246
+ _updateOverlayPositions() {
247
+ if (!this._geometry)
248
+ return;
249
+ let prevAnchor = null;
250
+ let lineIdx = 0;
251
+ for (let i = 0; i < this._geometry.segments.length; i++) {
252
+ const seg = this._geometry.segments[i];
253
+ if (seg.type === SegmentType.Close) {
254
+ prevAnchor = this._geometry.segments[0]?.point ?? null;
255
+ continue;
256
+ }
257
+ if (seg.cp1) {
258
+ const cp1Overlay = this._toOverlay(seg.cp1);
259
+ if (prevAnchor && lineIdx < this._overlayLines.length) {
260
+ const prevOverlay = this._toOverlay(prevAnchor);
261
+ const line = this._overlayLines[lineIdx++];
262
+ line.setAttribute('x1', prevOverlay.x.toString());
263
+ line.setAttribute('y1', prevOverlay.y.toString());
264
+ line.setAttribute('x2', cp1Overlay.x.toString());
265
+ line.setAttribute('y2', cp1Overlay.y.toString());
266
+ }
267
+ const cp1Circle = this._overlayCircles.get(`cp1-${i}`);
268
+ if (cp1Circle) {
269
+ cp1Circle.setAttribute('cx', cp1Overlay.x.toString());
270
+ cp1Circle.setAttribute('cy', cp1Overlay.y.toString());
271
+ }
272
+ }
273
+ if (seg.cp2) {
274
+ const cp2Overlay = this._toOverlay(seg.cp2);
275
+ const anchorOverlay = this._toOverlay(seg.point);
276
+ if (lineIdx < this._overlayLines.length) {
277
+ const line = this._overlayLines[lineIdx++];
278
+ line.setAttribute('x1', anchorOverlay.x.toString());
279
+ line.setAttribute('y1', anchorOverlay.y.toString());
280
+ line.setAttribute('x2', cp2Overlay.x.toString());
281
+ line.setAttribute('y2', cp2Overlay.y.toString());
282
+ }
283
+ const cp2Circle = this._overlayCircles.get(`cp2-${i}`);
284
+ if (cp2Circle) {
285
+ cp2Circle.setAttribute('cx', cp2Overlay.x.toString());
286
+ cp2Circle.setAttribute('cy', cp2Overlay.y.toString());
287
+ }
288
+ }
289
+ const overlayPt = this._toOverlay(seg.point);
290
+ const anchorCircle = this._overlayCircles.get(`anchor-${i}`);
291
+ if (anchorCircle) {
292
+ anchorCircle.setAttribute('cx', overlayPt.x.toString());
293
+ anchorCircle.setAttribute('cy', overlayPt.y.toString());
294
+ }
295
+ prevAnchor = seg.point;
296
+ }
297
+ }
298
+ _onPointerUp(event, segIndex) {
299
+ event.stopPropagation();
300
+ event.target.releasePointerCapture(event.pointerId);
301
+ if (this._dragState && this._geometry) {
302
+ // Commit via designItem for undo support (follows PathExtension pattern)
303
+ this._commitGeometryChange();
304
+ this._dragState = null;
305
+ }
306
+ }
307
+ // -- Geometry manipulation --
308
+ /** Set attributes directly on the DOM element for live visual feedback during drag */
309
+ _applyGeometryToElement() {
310
+ if (!this._reader || !this._geometry)
311
+ return;
312
+ const attrs = this._reader.serialize(this._geometry);
313
+ for (const attr of attrs) {
314
+ this.extendedItem.element.setAttribute(attr.attribute, attr.value);
315
+ }
316
+ }
317
+ /** Commit geometry change through the designItem undo system.
318
+ * group.commit() will trigger refreshAllExtensions which redraws overlays. */
319
+ _commitGeometryChange() {
320
+ if (!this._reader || !this._geometry)
321
+ return;
322
+ const attrs = this._reader.serialize(this._geometry);
323
+ const group = this.extendedItem.openGroup('editGeometry');
324
+ for (const attr of attrs) {
325
+ this.extendedItem.setAttribute(attr.attribute, attr.value);
326
+ }
327
+ group.commit();
328
+ }
329
+ // -- Context menu --
330
+ _showContextMenu(event, segIndex, seg) {
331
+ if (!this._geometry)
332
+ return;
333
+ const items = [];
334
+ const isPath = this.extendedItem.element instanceof SVGPathElement;
335
+ const nonCloseSegments = this._geometry.segments.filter(s => s.type !== SegmentType.Close);
336
+ // Delete point (only if not the only point)
337
+ if (nonCloseSegments.length > 2) {
338
+ items.push({
339
+ title: 'Delete point', action: () => {
340
+ if (!this._geometry)
341
+ return;
342
+ this._geometry.segments.splice(segIndex, 1);
343
+ if (segIndex === 0 && this._geometry.segments.length > 0 && this._geometry.segments[0].type !== SegmentType.Close) {
344
+ this._geometry.segments[0].type = SegmentType.Move;
345
+ }
346
+ this._applyGeometryToElement();
347
+ this._commitGeometryChange();
348
+ }
349
+ });
350
+ }
351
+ // Insert point after
352
+ if (isPath) {
353
+ const nextSeg = this._findNextNonCloseSegment(segIndex);
354
+ if (nextSeg !== null) {
355
+ items.push({
356
+ title: 'Insert point after', action: () => {
357
+ this._insertPointAfter(segIndex);
358
+ this._applyGeometryToElement();
359
+ this._commitGeometryChange();
360
+ }
361
+ });
362
+ }
363
+ }
364
+ // Close / Open path
365
+ if (isPath && this._geometry.segments.length > 0) {
366
+ const hasClose = this._geometry.segments.some(s => s.type === SegmentType.Close);
367
+ const lastNonCloseIdx = this._findLastNonCloseIndex();
368
+ if (segIndex === lastNonCloseIdx || (hasClose && seg.type !== SegmentType.Close)) {
369
+ items.push({ title: '---' });
370
+ if (hasClose) {
371
+ items.push({
372
+ title: 'Open path', action: () => {
373
+ if (!this._geometry)
374
+ return;
375
+ this._geometry.segments = this._geometry.segments.filter(s => s.type !== SegmentType.Close);
376
+ this._geometry.closed = false;
377
+ this._applyGeometryToElement();
378
+ this._commitGeometryChange();
379
+ }
380
+ });
381
+ }
382
+ else {
383
+ items.push({
384
+ title: 'Close path', action: () => {
385
+ if (!this._geometry)
386
+ return;
387
+ this._geometry.segments.push({ type: SegmentType.Close, relative: false, point: this._geometry.segments[0].point });
388
+ this._geometry.closed = true;
389
+ this._applyGeometryToElement();
390
+ this._commitGeometryChange();
391
+ }
392
+ });
393
+ }
394
+ }
395
+ }
396
+ // Segment type conversion (only for path elements)
397
+ if (isPath && segIndex > 0 && seg.type !== SegmentType.Move && seg.type !== SegmentType.Close) {
398
+ items.push({ title: '---' });
399
+ if (seg.type !== SegmentType.Line && seg.type !== SegmentType.HorizontalLine && seg.type !== SegmentType.VerticalLine) {
400
+ items.push({
401
+ title: 'Convert to line', action: () => {
402
+ this._convertToLine(segIndex);
403
+ this._applyGeometryToElement();
404
+ this._commitGeometryChange();
405
+ }
406
+ });
407
+ }
408
+ if (seg.type !== SegmentType.QuadraticBezier) {
409
+ items.push({
410
+ title: 'Convert to quadratic bézier', action: () => {
411
+ this._convertToQuadratic(segIndex);
412
+ this._applyGeometryToElement();
413
+ this._commitGeometryChange();
414
+ }
415
+ });
416
+ }
417
+ if (seg.type !== SegmentType.CubicBezier) {
418
+ items.push({
419
+ title: 'Convert to cubic bézier', action: () => {
420
+ this._convertToCubic(segIndex);
421
+ this._applyGeometryToElement();
422
+ this._commitGeometryChange();
423
+ }
424
+ });
425
+ }
426
+ }
427
+ if (items.length > 0) {
428
+ ContextMenu.show(items, event);
429
+ }
430
+ }
431
+ _findLastNonCloseIndex() {
432
+ if (!this._geometry)
433
+ return -1;
434
+ for (let i = this._geometry.segments.length - 1; i >= 0; i--) {
435
+ if (this._geometry.segments[i].type !== SegmentType.Close)
436
+ return i;
437
+ }
438
+ return -1;
439
+ }
440
+ _findNextNonCloseSegment(segIndex) {
441
+ if (!this._geometry)
442
+ return null;
443
+ for (let i = segIndex + 1; i < this._geometry.segments.length; i++) {
444
+ if (this._geometry.segments[i].type !== SegmentType.Close)
445
+ return i;
446
+ }
447
+ return null;
448
+ }
449
+ _findPreviousAnchor(segIndex) {
450
+ if (!this._geometry)
451
+ return null;
452
+ for (let i = segIndex - 1; i >= 0; i--) {
453
+ const s = this._geometry.segments[i];
454
+ if (s.type !== SegmentType.Close)
455
+ return s.point;
456
+ }
457
+ return null;
458
+ }
459
+ _insertPointAfter(segIndex) {
460
+ if (!this._geometry)
461
+ return;
462
+ const seg = this._geometry.segments[segIndex];
463
+ const nextIdx = this._findNextNonCloseSegment(segIndex);
464
+ if (nextIdx === null)
465
+ return;
466
+ const nextSeg = this._geometry.segments[nextIdx];
467
+ let newPoint;
468
+ switch (nextSeg.type) {
469
+ case SegmentType.CubicBezier: {
470
+ // Evaluate cubic bezier at t=0.5 using De Casteljau
471
+ const p0 = seg.point;
472
+ const p1 = nextSeg.cp1;
473
+ const p2 = nextSeg.cp2;
474
+ const p3 = nextSeg.point;
475
+ newPoint = this._evalCubicBezier(p0, p1, p2, p3, 0.5);
476
+ break;
477
+ }
478
+ case SegmentType.QuadraticBezier: {
479
+ // Evaluate quadratic bezier at t=0.5
480
+ const p0 = seg.point;
481
+ const p1 = nextSeg.cp1;
482
+ const p2 = nextSeg.point;
483
+ newPoint = this._evalQuadraticBezier(p0, p1, p2, 0.5);
484
+ break;
485
+ }
486
+ default: {
487
+ // Linear midpoint
488
+ newPoint = {
489
+ x: (seg.point.x + nextSeg.point.x) / 2,
490
+ y: (seg.point.y + nextSeg.point.y) / 2,
491
+ };
492
+ break;
493
+ }
494
+ }
495
+ const newSeg = {
496
+ type: SegmentType.Line,
497
+ relative: seg.relative,
498
+ point: newPoint,
499
+ };
500
+ this._geometry.segments.splice(segIndex + 1, 0, newSeg);
501
+ }
502
+ _convertToLine(segIndex) {
503
+ if (!this._geometry)
504
+ return;
505
+ const seg = this._geometry.segments[segIndex];
506
+ seg.type = SegmentType.Line;
507
+ delete seg.cp1;
508
+ delete seg.cp2;
509
+ delete seg.arc;
510
+ }
511
+ _convertToQuadratic(segIndex) {
512
+ if (!this._geometry)
513
+ return;
514
+ const seg = this._geometry.segments[segIndex];
515
+ const prevPt = this._findPreviousAnchor(segIndex);
516
+ if (!prevPt)
517
+ return;
518
+ const endPt = seg.point;
519
+ // Generate control point perpendicular to the midpoint
520
+ const mpx = (prevPt.x + endPt.x) / 2;
521
+ const mpy = (prevPt.y + endPt.y) / 2;
522
+ const dist = Math.sqrt(Math.pow(endPt.x - prevPt.x, 2) + Math.pow(endPt.y - prevPt.y, 2));
523
+ const offset = Math.max(20, dist * 0.25);
524
+ const theta = Math.atan2(endPt.y - prevPt.y, endPt.x - prevPt.x) - Math.PI / 2;
525
+ seg.type = SegmentType.QuadraticBezier;
526
+ seg.cp1 = {
527
+ x: mpx + offset * Math.cos(theta),
528
+ y: mpy + offset * Math.sin(theta),
529
+ };
530
+ delete seg.cp2;
531
+ delete seg.arc;
532
+ }
533
+ _convertToCubic(segIndex) {
534
+ if (!this._geometry)
535
+ return;
536
+ const seg = this._geometry.segments[segIndex];
537
+ const prevPt = this._findPreviousAnchor(segIndex);
538
+ if (!prevPt)
539
+ return;
540
+ const endPt = seg.point;
541
+ if (seg.type === SegmentType.QuadraticBezier && seg.cp1) {
542
+ // Elevate quadratic to cubic: C_cp1 = P0 + 2/3*(Q_cp1 - P0), C_cp2 = P3 + 2/3*(Q_cp1 - P3)
543
+ seg.type = SegmentType.CubicBezier;
544
+ const qcp = seg.cp1;
545
+ seg.cp1 = {
546
+ x: prevPt.x + (2 / 3) * (qcp.x - prevPt.x),
547
+ y: prevPt.y + (2 / 3) * (qcp.y - prevPt.y),
548
+ };
549
+ seg.cp2 = {
550
+ x: endPt.x + (2 / 3) * (qcp.x - endPt.x),
551
+ y: endPt.y + (2 / 3) * (qcp.y - endPt.y),
552
+ };
553
+ }
554
+ else {
555
+ // Generate default control points at 1/3 and 2/3 along the line
556
+ seg.type = SegmentType.CubicBezier;
557
+ seg.cp1 = {
558
+ x: prevPt.x + (endPt.x - prevPt.x) / 3,
559
+ y: prevPt.y + (endPt.y - prevPt.y) / 3,
560
+ };
561
+ seg.cp2 = {
562
+ x: prevPt.x + 2 * (endPt.x - prevPt.x) / 3,
563
+ y: prevPt.y + 2 * (endPt.y - prevPt.y) / 3,
564
+ };
565
+ }
566
+ delete seg.arc;
567
+ }
568
+ // -- Bezier evaluation --
569
+ _evalCubicBezier(p0, p1, p2, p3, t) {
570
+ const mt = 1 - t;
571
+ return {
572
+ x: mt * mt * mt * p0.x + 3 * mt * mt * t * p1.x + 3 * mt * t * t * p2.x + t * t * t * p3.x,
573
+ y: mt * mt * mt * p0.y + 3 * mt * mt * t * p1.y + 3 * mt * t * t * p2.y + t * t * t * p3.y,
574
+ };
575
+ }
576
+ _evalQuadraticBezier(p0, p1, p2, t) {
577
+ const mt = 1 - t;
578
+ return {
579
+ x: mt * mt * p0.x + 2 * mt * t * p1.x + t * t * p2.x,
580
+ y: mt * mt * p0.y + 2 * mt * t * p1.y + t * t * p2.y,
581
+ };
582
+ }
583
+ }
584
+ //# sourceMappingURL=UnifiedGeometryExtension.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnifiedGeometryExtension.js","sourceRoot":"","sources":["../../../../../../src/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtension.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
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
+ import { IGeometryReader } from './geometry/IGeometry.js';
7
+ export declare class UnifiedGeometryExtensionProvider implements IDesignerExtensionProvider {
8
+ private _customReader?;
9
+ constructor(customReader?: IGeometryReader);
10
+ shouldExtend(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): boolean;
11
+ getExtension(extensionManager: IExtensionManager, designerView: IDesignerCanvas, designItem: IDesignItem): IDesignerExtension;
12
+ }