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

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 (48) 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/widgets/designerView/DomConverter.d.ts +1 -1
  4. package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtension.d.ts +56 -0
  5. package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtension.js +584 -0
  6. package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtension.js.map +1 -0
  7. package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtensionProvider.d.ts +12 -0
  8. package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtensionProvider.js +27 -0
  9. package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtensionProvider.js.map +1 -0
  10. package/dist/elements/widgets/designerView/extensions/svg/geometry/CssClipPathGeometryReader.d.ts +18 -0
  11. package/dist/elements/widgets/designerView/extensions/svg/geometry/CssClipPathGeometryReader.js +161 -0
  12. package/dist/elements/widgets/designerView/extensions/svg/geometry/CssClipPathGeometryReader.js.map +1 -0
  13. package/dist/elements/widgets/designerView/extensions/svg/geometry/CssOffsetPathGeometryReader.d.ts +18 -0
  14. package/dist/elements/widgets/designerView/extensions/svg/geometry/CssOffsetPathGeometryReader.js +150 -0
  15. package/dist/elements/widgets/designerView/extensions/svg/geometry/CssOffsetPathGeometryReader.js.map +1 -0
  16. package/dist/elements/widgets/designerView/extensions/svg/geometry/CssShapeOutsideGeometryReader.d.ts +17 -0
  17. package/dist/elements/widgets/designerView/extensions/svg/geometry/CssShapeOutsideGeometryReader.js +121 -0
  18. package/dist/elements/widgets/designerView/extensions/svg/geometry/CssShapeOutsideGeometryReader.js.map +1 -0
  19. package/dist/elements/widgets/designerView/extensions/svg/geometry/GeometryReaderFactory.d.ts +4 -0
  20. package/dist/elements/widgets/designerView/extensions/svg/geometry/GeometryReaderFactory.js +54 -0
  21. package/dist/elements/widgets/designerView/extensions/svg/geometry/GeometryReaderFactory.js.map +1 -0
  22. package/dist/elements/widgets/designerView/extensions/svg/geometry/IGeometry.d.ts +61 -0
  23. package/dist/elements/widgets/designerView/extensions/svg/geometry/IGeometry.js +17 -0
  24. package/dist/elements/widgets/designerView/extensions/svg/geometry/IGeometry.js.map +1 -0
  25. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgCircleGeometryReader.d.ts +8 -0
  26. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgCircleGeometryReader.js +37 -0
  27. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgCircleGeometryReader.js.map +1 -0
  28. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgEllipseGeometryReader.d.ts +8 -0
  29. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgEllipseGeometryReader.js +42 -0
  30. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgEllipseGeometryReader.js.map +1 -0
  31. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgLineGeometryReader.d.ts +8 -0
  32. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgLineGeometryReader.js +27 -0
  33. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgLineGeometryReader.js.map +1 -0
  34. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPathGeometryReader.d.ts +9 -0
  35. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPathGeometryReader.js +205 -0
  36. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPathGeometryReader.js.map +1 -0
  37. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPolygonGeometryReader.d.ts +8 -0
  38. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPolygonGeometryReader.js +27 -0
  39. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPolygonGeometryReader.js.map +1 -0
  40. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPolylineGeometryReader.d.ts +8 -0
  41. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPolylineGeometryReader.js +24 -0
  42. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPolylineGeometryReader.js.map +1 -0
  43. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgRectGeometryReader.d.ts +8 -0
  44. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgRectGeometryReader.js +36 -0
  45. package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgRectGeometryReader.js.map +1 -0
  46. package/dist/index-min.js +1 -1
  47. package/dist/index-min.js.map +2 -2
  48. package/package.json +1 -1
@@ -0,0 +1,27 @@
1
+ import { UnifiedGeometryExtension } from './UnifiedGeometryExtension.js';
2
+ import { isVisualSvgElement } from '../../../../helper/SvgHelper.js';
3
+ export class UnifiedGeometryExtensionProvider {
4
+ _customReader;
5
+ constructor(customReader) {
6
+ this._customReader = customReader;
7
+ }
8
+ shouldExtend(extensionManager, designerView, designItem) {
9
+ if (this._customReader)
10
+ return true;
11
+ const node = designItem.node;
12
+ if (node instanceof SVGPathElement ||
13
+ node instanceof SVGRectElement ||
14
+ node instanceof SVGLineElement ||
15
+ node instanceof SVGEllipseElement ||
16
+ node instanceof SVGCircleElement ||
17
+ node instanceof SVGPolygonElement ||
18
+ node instanceof SVGPolylineElement) {
19
+ return isVisualSvgElement(node);
20
+ }
21
+ return false;
22
+ }
23
+ getExtension(extensionManager, designerView, designItem) {
24
+ return new UnifiedGeometryExtension(extensionManager, designerView, designItem, this._customReader);
25
+ }
26
+ }
27
+ //# sourceMappingURL=UnifiedGeometryExtensionProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnifiedGeometryExtensionProvider.js","sourceRoot":"","sources":["../../../../../../src/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtensionProvider.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAGrE,MAAM,OAAO,gCAAgC;IAEnC,aAAa,CAAmB;IAExC,YAAY,YAA8B;QACxC,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACpC,CAAC;IAED,YAAY,CAAC,gBAAmC,EAAE,YAA6B,EAAE,UAAuB;QACtG,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QAEpC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;QAC7B,IAAI,IAAI,YAAY,cAAc;YAChC,IAAI,YAAY,cAAc;YAC9B,IAAI,YAAY,cAAc;YAC9B,IAAI,YAAY,iBAAiB;YACjC,IAAI,YAAY,gBAAgB;YAChC,IAAI,YAAY,iBAAiB;YACjC,IAAI,YAAY,kBAAkB,EAAE,CAAC;YACrC,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,YAAY,CAAC,gBAAmC,EAAE,YAA6B,EAAE,UAAuB;QACtG,OAAO,IAAI,wBAAwB,CAAC,gBAAgB,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACtG,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ import { IGeometry, IGeometryReader } from './IGeometry.js';
2
+ /**
3
+ * Reads and writes CSS `clip-path` property geometry.
4
+ * Supports: polygon(), circle(), ellipse(), path()
5
+ */
6
+ export declare class CssClipPathGeometryReader implements IGeometryReader {
7
+ read(element: Element): IGeometry;
8
+ serialize(geometry: IGeometry): {
9
+ attribute: string;
10
+ value: string;
11
+ }[];
12
+ private _parse;
13
+ private _parsePolygon;
14
+ private _parseCircle;
15
+ private _parseEllipse;
16
+ private _parsePath;
17
+ private _serializeGeometry;
18
+ }
@@ -0,0 +1,161 @@
1
+ import { SegmentType } from './IGeometry.js';
2
+ /**
3
+ * Reads and writes CSS `clip-path` property geometry.
4
+ * Supports: polygon(), circle(), ellipse(), path()
5
+ */
6
+ export class CssClipPathGeometryReader {
7
+ read(element) {
8
+ const style = getComputedStyle(element);
9
+ const raw = style.clipPath || element.getAttribute('style')?.match(/clip-path\s*:\s*([^;]+)/)?.[1] || '';
10
+ return this._parse(raw);
11
+ }
12
+ serialize(geometry) {
13
+ const value = this._serializeGeometry(geometry);
14
+ return [{ attribute: 'style:clipPath', value }];
15
+ }
16
+ _parse(raw) {
17
+ const trimmed = raw.trim();
18
+ if (trimmed.startsWith('polygon(')) {
19
+ return this._parsePolygon(trimmed);
20
+ }
21
+ if (trimmed.startsWith('circle(')) {
22
+ return this._parseCircle(trimmed);
23
+ }
24
+ if (trimmed.startsWith('ellipse(')) {
25
+ return this._parseEllipse(trimmed);
26
+ }
27
+ if (trimmed.startsWith('path(')) {
28
+ return this._parsePath(trimmed);
29
+ }
30
+ return { segments: [], closed: false };
31
+ }
32
+ _parsePolygon(raw) {
33
+ // polygon(x1 y1, x2 y2, ...)
34
+ const inner = raw.slice(8, -1).trim();
35
+ const segments = [];
36
+ const pairs = inner.split(',');
37
+ for (let i = 0; i < pairs.length; i++) {
38
+ const parts = pairs[i].trim().split(/\s+/);
39
+ if (parts.length >= 2) {
40
+ const x = parseFloat(parts[0]);
41
+ const y = parseFloat(parts[1]);
42
+ if (!isNaN(x) && !isNaN(y)) {
43
+ segments.push({
44
+ type: i === 0 ? SegmentType.Move : SegmentType.Line,
45
+ relative: false,
46
+ point: { x, y },
47
+ });
48
+ }
49
+ }
50
+ }
51
+ if (segments.length > 0) {
52
+ segments.push({ type: SegmentType.Close, relative: false, point: { ...segments[0].point } });
53
+ }
54
+ return { segments, closed: true };
55
+ }
56
+ _parseCircle(raw) {
57
+ // circle(r at cx cy)
58
+ const inner = raw.slice(7, -1).trim();
59
+ const atIdx = inner.indexOf(' at ');
60
+ let r = 50, cx = 50, cy = 50;
61
+ if (atIdx >= 0) {
62
+ r = parseFloat(inner.substring(0, atIdx));
63
+ const pos = inner.substring(atIdx + 4).trim().split(/\s+/);
64
+ cx = parseFloat(pos[0]) || 50;
65
+ cy = parseFloat(pos[1]) || 50;
66
+ }
67
+ else {
68
+ r = parseFloat(inner) || 50;
69
+ }
70
+ const segments = [
71
+ { type: SegmentType.Move, relative: false, point: { x: cx, y: cy - r } },
72
+ { type: SegmentType.Arc, relative: false, point: { x: cx + r, y: cy }, arc: { rx: r, ry: r, rotation: 0, largeArc: false, sweep: true } },
73
+ { type: SegmentType.Arc, relative: false, point: { x: cx, y: cy + r }, arc: { rx: r, ry: r, rotation: 0, largeArc: false, sweep: true } },
74
+ { type: SegmentType.Arc, relative: false, point: { x: cx - r, y: cy }, arc: { rx: r, ry: r, rotation: 0, largeArc: false, sweep: true } },
75
+ { type: SegmentType.Arc, relative: false, point: { x: cx, y: cy - r }, arc: { rx: r, ry: r, rotation: 0, largeArc: false, sweep: true } },
76
+ { type: SegmentType.Close, relative: false, point: { x: cx, y: cy - r } },
77
+ ];
78
+ return { segments, closed: true };
79
+ }
80
+ _parseEllipse(raw) {
81
+ // ellipse(rx ry at cx cy)
82
+ const inner = raw.slice(8, -1).trim();
83
+ const atIdx = inner.indexOf(' at ');
84
+ let rx = 50, ry = 25, cx = 50, cy = 50;
85
+ if (atIdx >= 0) {
86
+ const radii = inner.substring(0, atIdx).trim().split(/\s+/);
87
+ rx = parseFloat(radii[0]) || 50;
88
+ ry = parseFloat(radii[1]) || 25;
89
+ const pos = inner.substring(atIdx + 4).trim().split(/\s+/);
90
+ cx = parseFloat(pos[0]) || 50;
91
+ cy = parseFloat(pos[1]) || 50;
92
+ }
93
+ const segments = [
94
+ { type: SegmentType.Move, relative: false, point: { x: cx, y: cy - ry } },
95
+ { type: SegmentType.Arc, relative: false, point: { x: cx + rx, y: cy }, arc: { rx, ry, rotation: 0, largeArc: false, sweep: true } },
96
+ { type: SegmentType.Arc, relative: false, point: { x: cx, y: cy + ry }, arc: { rx, ry, rotation: 0, largeArc: false, sweep: true } },
97
+ { type: SegmentType.Arc, relative: false, point: { x: cx - rx, y: cy }, arc: { rx, ry, rotation: 0, largeArc: false, sweep: true } },
98
+ { type: SegmentType.Arc, relative: false, point: { x: cx, y: cy - ry }, arc: { rx, ry, rotation: 0, largeArc: false, sweep: true } },
99
+ { type: SegmentType.Close, relative: false, point: { x: cx, y: cy - ry } },
100
+ ];
101
+ return { segments, closed: true };
102
+ }
103
+ _parsePath(raw) {
104
+ // path("d string") — delegate to an internal SVG path parser
105
+ // Extract d string between quotes
106
+ const match = raw.match(/path\(\s*["']([^"']+)["']\s*\)/);
107
+ if (!match)
108
+ return { segments: [], closed: false };
109
+ // Create a temporary SVG path element to parse
110
+ const tempNs = 'http://www.w3.org/2000/svg';
111
+ const tempSvg = document.createElementNS(tempNs, 'svg');
112
+ const tempPath = document.createElementNS(tempNs, 'path');
113
+ tempPath.setAttribute('d', match[1]);
114
+ tempSvg.appendChild(tempPath);
115
+ // Temporarily attach for getPathData to work
116
+ tempSvg.style.position = 'absolute';
117
+ tempSvg.style.width = '0';
118
+ tempSvg.style.height = '0';
119
+ tempSvg.style.overflow = 'hidden';
120
+ document.body.appendChild(tempSvg);
121
+ try {
122
+ const { SvgPathGeometryReader } = require('./SvgPathGeometryReader.js');
123
+ const reader = new SvgPathGeometryReader();
124
+ return reader.read(tempPath);
125
+ }
126
+ catch {
127
+ return { segments: [], closed: false };
128
+ }
129
+ finally {
130
+ document.body.removeChild(tempSvg);
131
+ }
132
+ }
133
+ _serializeGeometry(geometry) {
134
+ // Detect the shape type from the segment structure
135
+ const nonClose = geometry.segments.filter(s => s.type !== SegmentType.Close);
136
+ if (nonClose.length === 0)
137
+ return 'none';
138
+ // If all non-move/close segments are arcs with equal rx/ry => circle or ellipse
139
+ const arcs = nonClose.filter(s => s.type === SegmentType.Arc);
140
+ if (arcs.length >= 3 && arcs[0].arc) {
141
+ // Compute center from cardinal points
142
+ const pts = nonClose;
143
+ const top = pts[0].point;
144
+ const right = pts[1].point;
145
+ const bottom = pts[2].point;
146
+ const left = pts[3].point;
147
+ const cx = (right.x + left.x) / 2;
148
+ const cy = (top.y + bottom.y) / 2;
149
+ const finalRx = Math.abs(right.x - left.x) / 2;
150
+ const finalRy = Math.abs(bottom.y - top.y) / 2;
151
+ if (Math.abs(finalRx - finalRy) < 0.01) {
152
+ return `circle(${finalRx}px at ${cx}px ${cy}px)`;
153
+ }
154
+ return `ellipse(${finalRx}px ${finalRy}px at ${cx}px ${cy}px)`;
155
+ }
156
+ // Otherwise serialize as polygon
157
+ const points = nonClose.map(s => `${s.point.x}px ${s.point.y}px`).join(', ');
158
+ return `polygon(${points})`;
159
+ }
160
+ }
161
+ //# sourceMappingURL=CssClipPathGeometryReader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CssClipPathGeometryReader.js","sourceRoot":"","sources":["../../../../../../../src/elements/widgets/designerView/extensions/svg/geometry/CssClipPathGeometryReader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgD,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE3F;;;GAGG;AACH,MAAM,OAAO,yBAAyB;IAEpC,IAAI,CAAC,OAAgB;QACnB,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,yBAAyB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzG,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,SAAS,CAAC,QAAmB;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAChD,OAAO,CAAC,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,CAAC;IAClD,CAAC;IAEO,MAAM,CAAC,GAAW;QACxB,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAE3B,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;IACzC,CAAC;IAEO,aAAa,CAAC,GAAW;QAC/B,6BAA6B;QAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAuB,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;gBACtB,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/B,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;oBAC3B,QAAQ,CAAC,IAAI,CAAC;wBACZ,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI;wBACnD,QAAQ,EAAE,KAAK;wBACf,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE;qBAChB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC/F,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACpC,CAAC;IAEO,YAAY,CAAC,GAAW;QAC9B,qBAAqB;QACrB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;QAC7B,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YAC1C,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3D,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9B,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC9B,CAAC;QACD,MAAM,QAAQ,GAAuB;YACnC,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE;YACxE,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACzI,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACzI,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACzI,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACzI,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE;SAC1E,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACpC,CAAC;IAEO,aAAa,CAAC,GAAW;QAC/B,0BAA0B;QAC1B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC;QACvC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC5D,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAChC,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3D,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9B,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAChC,CAAC;QACD,MAAM,QAAQ,GAAuB;YACnC,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;YACzE,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACpI,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACpI,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACpI,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACpI,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;SAC3E,CAAC;QACF,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IACpC,CAAC;IAEO,UAAU,CAAC,GAAW;QAC5B,6DAA6D;QAC7D,kCAAkC;QAClC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACnD,+CAA+C;QAC/C,MAAM,MAAM,GAAG,4BAA4B,CAAC;QAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACxD,MAAM,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1D,QAAQ,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACrC,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC9B,6CAA6C;QAC7C,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC;QAC1B,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAClC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAC;YACxE,MAAM,MAAM,GAAG,IAAI,qBAAqB,EAAE,CAAC;YAC3C,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;QACzC,CAAC;gBAAS,CAAC;YACT,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,QAAmB;QAC5C,mDAAmD;QACnD,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,KAAK,CAAC,CAAC;QAC7E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,MAAM,CAAC;QAEzC,gFAAgF;QAChF,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,GAAG,CAAC,CAAC;QAC9D,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YACpC,sCAAsC;YACtC,MAAM,GAAG,GAAG,QAAQ,CAAC;YACrB,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YACzB,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC3B,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC5B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;YAC1B,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YAE/C,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;gBACvC,OAAO,UAAU,OAAO,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC;YACnD,CAAC;YACD,OAAO,WAAW,OAAO,MAAM,OAAO,SAAS,EAAE,MAAM,EAAE,KAAK,CAAC;QACjE,CAAC;QAED,iCAAiC;QACjC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7E,OAAO,WAAW,MAAM,GAAG,CAAC;IAC9B,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ import { IGeometry, IGeometryReader } from './IGeometry.js';
2
+ /**
3
+ * Reads and writes CSS `offset-path` (formerly `motion-path`) property geometry.
4
+ * Supports: path(), polygon(), circle(), ellipse()
5
+ */
6
+ export declare class CssOffsetPathGeometryReader implements IGeometryReader {
7
+ read(element: Element): IGeometry;
8
+ serialize(geometry: IGeometry): {
9
+ attribute: string;
10
+ value: string;
11
+ }[];
12
+ private _parse;
13
+ private _parsePolygon;
14
+ private _parseCircle;
15
+ private _parseEllipse;
16
+ private _parsePath;
17
+ private _serializeGeometry;
18
+ }
@@ -0,0 +1,150 @@
1
+ import { SegmentType } from './IGeometry.js';
2
+ /**
3
+ * Reads and writes CSS `offset-path` (formerly `motion-path`) property geometry.
4
+ * Supports: path(), polygon(), circle(), ellipse()
5
+ */
6
+ export class CssOffsetPathGeometryReader {
7
+ read(element) {
8
+ const style = getComputedStyle(element);
9
+ const raw = style.offsetPath || element.getAttribute('style')?.match(/offset-path\s*:\s*([^;]+)/)?.[1] || '';
10
+ return this._parse(raw);
11
+ }
12
+ serialize(geometry) {
13
+ const value = this._serializeGeometry(geometry);
14
+ return [{ attribute: 'style:offsetPath', value }];
15
+ }
16
+ _parse(raw) {
17
+ const trimmed = raw.trim();
18
+ if (trimmed.startsWith('polygon(')) {
19
+ return this._parsePolygon(trimmed);
20
+ }
21
+ if (trimmed.startsWith('circle(')) {
22
+ return this._parseCircle(trimmed);
23
+ }
24
+ if (trimmed.startsWith('ellipse(')) {
25
+ return this._parseEllipse(trimmed);
26
+ }
27
+ if (trimmed.startsWith('path(')) {
28
+ return this._parsePath(trimmed);
29
+ }
30
+ return { segments: [], closed: false };
31
+ }
32
+ _parsePolygon(raw) {
33
+ const inner = raw.slice(8, -1).trim();
34
+ const segments = [];
35
+ const pairs = inner.split(',');
36
+ for (let i = 0; i < pairs.length; i++) {
37
+ const parts = pairs[i].trim().split(/\s+/);
38
+ if (parts.length >= 2) {
39
+ const x = parseFloat(parts[0]);
40
+ const y = parseFloat(parts[1]);
41
+ if (!isNaN(x) && !isNaN(y)) {
42
+ segments.push({
43
+ type: i === 0 ? SegmentType.Move : SegmentType.Line,
44
+ relative: false,
45
+ point: { x, y },
46
+ });
47
+ }
48
+ }
49
+ }
50
+ if (segments.length > 0) {
51
+ segments.push({ type: SegmentType.Close, relative: false, point: { ...segments[0].point } });
52
+ }
53
+ return { segments, closed: true };
54
+ }
55
+ _parseCircle(raw) {
56
+ const inner = raw.slice(7, -1).trim();
57
+ const atIdx = inner.indexOf(' at ');
58
+ let r = 50, cx = 50, cy = 50;
59
+ if (atIdx >= 0) {
60
+ r = parseFloat(inner.substring(0, atIdx));
61
+ const pos = inner.substring(atIdx + 4).trim().split(/\s+/);
62
+ cx = parseFloat(pos[0]) || 50;
63
+ cy = parseFloat(pos[1]) || 50;
64
+ }
65
+ else {
66
+ r = parseFloat(inner) || 50;
67
+ }
68
+ const segments = [
69
+ { type: SegmentType.Move, relative: false, point: { x: cx, y: cy - r } },
70
+ { type: SegmentType.Arc, relative: false, point: { x: cx + r, y: cy }, arc: { rx: r, ry: r, rotation: 0, largeArc: false, sweep: true } },
71
+ { type: SegmentType.Arc, relative: false, point: { x: cx, y: cy + r }, arc: { rx: r, ry: r, rotation: 0, largeArc: false, sweep: true } },
72
+ { type: SegmentType.Arc, relative: false, point: { x: cx - r, y: cy }, arc: { rx: r, ry: r, rotation: 0, largeArc: false, sweep: true } },
73
+ { type: SegmentType.Arc, relative: false, point: { x: cx, y: cy - r }, arc: { rx: r, ry: r, rotation: 0, largeArc: false, sweep: true } },
74
+ { type: SegmentType.Close, relative: false, point: { x: cx, y: cy - r } },
75
+ ];
76
+ return { segments, closed: true };
77
+ }
78
+ _parseEllipse(raw) {
79
+ const inner = raw.slice(8, -1).trim();
80
+ const atIdx = inner.indexOf(' at ');
81
+ let rx = 50, ry = 25, cx = 50, cy = 50;
82
+ if (atIdx >= 0) {
83
+ const radii = inner.substring(0, atIdx).trim().split(/\s+/);
84
+ rx = parseFloat(radii[0]) || 50;
85
+ ry = parseFloat(radii[1]) || 25;
86
+ const pos = inner.substring(atIdx + 4).trim().split(/\s+/);
87
+ cx = parseFloat(pos[0]) || 50;
88
+ cy = parseFloat(pos[1]) || 50;
89
+ }
90
+ const segments = [
91
+ { type: SegmentType.Move, relative: false, point: { x: cx, y: cy - ry } },
92
+ { type: SegmentType.Arc, relative: false, point: { x: cx + rx, y: cy }, arc: { rx, ry, rotation: 0, largeArc: false, sweep: true } },
93
+ { type: SegmentType.Arc, relative: false, point: { x: cx, y: cy + ry }, arc: { rx, ry, rotation: 0, largeArc: false, sweep: true } },
94
+ { type: SegmentType.Arc, relative: false, point: { x: cx - rx, y: cy }, arc: { rx, ry, rotation: 0, largeArc: false, sweep: true } },
95
+ { type: SegmentType.Arc, relative: false, point: { x: cx, y: cy - ry }, arc: { rx, ry, rotation: 0, largeArc: false, sweep: true } },
96
+ { type: SegmentType.Close, relative: false, point: { x: cx, y: cy - ry } },
97
+ ];
98
+ return { segments, closed: true };
99
+ }
100
+ _parsePath(raw) {
101
+ const match = raw.match(/path\(\s*["']([^"']+)["']\s*\)/);
102
+ if (!match)
103
+ return { segments: [], closed: false };
104
+ const tempNs = 'http://www.w3.org/2000/svg';
105
+ const tempSvg = document.createElementNS(tempNs, 'svg');
106
+ const tempPath = document.createElementNS(tempNs, 'path');
107
+ tempPath.setAttribute('d', match[1]);
108
+ tempSvg.appendChild(tempPath);
109
+ tempSvg.style.position = 'absolute';
110
+ tempSvg.style.width = '0';
111
+ tempSvg.style.height = '0';
112
+ tempSvg.style.overflow = 'hidden';
113
+ document.body.appendChild(tempSvg);
114
+ try {
115
+ const { SvgPathGeometryReader } = require('./SvgPathGeometryReader.js');
116
+ const reader = new SvgPathGeometryReader();
117
+ return reader.read(tempPath);
118
+ }
119
+ catch {
120
+ return { segments: [], closed: false };
121
+ }
122
+ finally {
123
+ document.body.removeChild(tempSvg);
124
+ }
125
+ }
126
+ _serializeGeometry(geometry) {
127
+ const nonClose = geometry.segments.filter(s => s.type !== SegmentType.Close);
128
+ if (nonClose.length === 0)
129
+ return 'none';
130
+ const arcs = nonClose.filter(s => s.type === SegmentType.Arc);
131
+ if (arcs.length >= 3 && arcs[0].arc) {
132
+ const pts = nonClose;
133
+ const top = pts[0].point;
134
+ const right = pts[1].point;
135
+ const bottom = pts[2].point;
136
+ const left = pts[3].point;
137
+ const cx = (right.x + left.x) / 2;
138
+ const cy = (top.y + bottom.y) / 2;
139
+ const finalRx = Math.abs(right.x - left.x) / 2;
140
+ const finalRy = Math.abs(bottom.y - top.y) / 2;
141
+ if (Math.abs(finalRx - finalRy) < 0.01) {
142
+ return `circle(${finalRx}px at ${cx}px ${cy}px)`;
143
+ }
144
+ return `ellipse(${finalRx}px ${finalRy}px at ${cx}px ${cy}px)`;
145
+ }
146
+ const points = nonClose.map(s => `${s.point.x}px ${s.point.y}px`).join(', ');
147
+ return `polygon(${points})`;
148
+ }
149
+ }
150
+ //# sourceMappingURL=CssOffsetPathGeometryReader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CssOffsetPathGeometryReader.js","sourceRoot":"","sources":["../../../../../../../src/elements/widgets/designerView/extensions/svg/geometry/CssOffsetPathGeometryReader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { IGeometry, IGeometryReader } from './IGeometry.js';
2
+ /**
3
+ * Reads and writes CSS `shape-outside` property geometry.
4
+ * Supports: polygon(), circle(), ellipse()
5
+ */
6
+ export declare class CssShapeOutsideGeometryReader implements IGeometryReader {
7
+ read(element: Element): IGeometry;
8
+ serialize(geometry: IGeometry): {
9
+ attribute: string;
10
+ value: string;
11
+ }[];
12
+ private _parse;
13
+ private _parsePolygon;
14
+ private _parseCircle;
15
+ private _parseEllipse;
16
+ private _serializeGeometry;
17
+ }
@@ -0,0 +1,121 @@
1
+ import { SegmentType } from './IGeometry.js';
2
+ /**
3
+ * Reads and writes CSS `shape-outside` property geometry.
4
+ * Supports: polygon(), circle(), ellipse()
5
+ */
6
+ export class CssShapeOutsideGeometryReader {
7
+ read(element) {
8
+ const style = getComputedStyle(element);
9
+ const raw = style.shapeOutside || element.getAttribute('style')?.match(/shape-outside\s*:\s*([^;]+)/)?.[1] || '';
10
+ return this._parse(raw);
11
+ }
12
+ serialize(geometry) {
13
+ const value = this._serializeGeometry(geometry);
14
+ return [{ attribute: 'style:shapeOutside', value }];
15
+ }
16
+ _parse(raw) {
17
+ const trimmed = raw.trim();
18
+ if (trimmed.startsWith('polygon(')) {
19
+ return this._parsePolygon(trimmed);
20
+ }
21
+ if (trimmed.startsWith('circle(')) {
22
+ return this._parseCircle(trimmed);
23
+ }
24
+ if (trimmed.startsWith('ellipse(')) {
25
+ return this._parseEllipse(trimmed);
26
+ }
27
+ return { segments: [], closed: false };
28
+ }
29
+ _parsePolygon(raw) {
30
+ const inner = raw.slice(8, -1).trim();
31
+ const segments = [];
32
+ const pairs = inner.split(',');
33
+ for (let i = 0; i < pairs.length; i++) {
34
+ const parts = pairs[i].trim().split(/\s+/);
35
+ if (parts.length >= 2) {
36
+ const x = parseFloat(parts[0]);
37
+ const y = parseFloat(parts[1]);
38
+ if (!isNaN(x) && !isNaN(y)) {
39
+ segments.push({
40
+ type: i === 0 ? SegmentType.Move : SegmentType.Line,
41
+ relative: false,
42
+ point: { x, y },
43
+ });
44
+ }
45
+ }
46
+ }
47
+ if (segments.length > 0) {
48
+ segments.push({ type: SegmentType.Close, relative: false, point: { ...segments[0].point } });
49
+ }
50
+ return { segments, closed: true };
51
+ }
52
+ _parseCircle(raw) {
53
+ const inner = raw.slice(7, -1).trim();
54
+ const atIdx = inner.indexOf(' at ');
55
+ let r = 50, cx = 50, cy = 50;
56
+ if (atIdx >= 0) {
57
+ r = parseFloat(inner.substring(0, atIdx));
58
+ const pos = inner.substring(atIdx + 4).trim().split(/\s+/);
59
+ cx = parseFloat(pos[0]) || 50;
60
+ cy = parseFloat(pos[1]) || 50;
61
+ }
62
+ else {
63
+ r = parseFloat(inner) || 50;
64
+ }
65
+ const segments = [
66
+ { type: SegmentType.Move, relative: false, point: { x: cx, y: cy - r } },
67
+ { type: SegmentType.Arc, relative: false, point: { x: cx + r, y: cy }, arc: { rx: r, ry: r, rotation: 0, largeArc: false, sweep: true } },
68
+ { type: SegmentType.Arc, relative: false, point: { x: cx, y: cy + r }, arc: { rx: r, ry: r, rotation: 0, largeArc: false, sweep: true } },
69
+ { type: SegmentType.Arc, relative: false, point: { x: cx - r, y: cy }, arc: { rx: r, ry: r, rotation: 0, largeArc: false, sweep: true } },
70
+ { type: SegmentType.Arc, relative: false, point: { x: cx, y: cy - r }, arc: { rx: r, ry: r, rotation: 0, largeArc: false, sweep: true } },
71
+ { type: SegmentType.Close, relative: false, point: { x: cx, y: cy - r } },
72
+ ];
73
+ return { segments, closed: true };
74
+ }
75
+ _parseEllipse(raw) {
76
+ const inner = raw.slice(8, -1).trim();
77
+ const atIdx = inner.indexOf(' at ');
78
+ let rx = 50, ry = 25, cx = 50, cy = 50;
79
+ if (atIdx >= 0) {
80
+ const radii = inner.substring(0, atIdx).trim().split(/\s+/);
81
+ rx = parseFloat(radii[0]) || 50;
82
+ ry = parseFloat(radii[1]) || 25;
83
+ const pos = inner.substring(atIdx + 4).trim().split(/\s+/);
84
+ cx = parseFloat(pos[0]) || 50;
85
+ cy = parseFloat(pos[1]) || 50;
86
+ }
87
+ const segments = [
88
+ { type: SegmentType.Move, relative: false, point: { x: cx, y: cy - ry } },
89
+ { type: SegmentType.Arc, relative: false, point: { x: cx + rx, y: cy }, arc: { rx, ry, rotation: 0, largeArc: false, sweep: true } },
90
+ { type: SegmentType.Arc, relative: false, point: { x: cx, y: cy + ry }, arc: { rx, ry, rotation: 0, largeArc: false, sweep: true } },
91
+ { type: SegmentType.Arc, relative: false, point: { x: cx - rx, y: cy }, arc: { rx, ry, rotation: 0, largeArc: false, sweep: true } },
92
+ { type: SegmentType.Arc, relative: false, point: { x: cx, y: cy - ry }, arc: { rx, ry, rotation: 0, largeArc: false, sweep: true } },
93
+ { type: SegmentType.Close, relative: false, point: { x: cx, y: cy - ry } },
94
+ ];
95
+ return { segments, closed: true };
96
+ }
97
+ _serializeGeometry(geometry) {
98
+ const nonClose = geometry.segments.filter(s => s.type !== SegmentType.Close);
99
+ if (nonClose.length === 0)
100
+ return 'none';
101
+ const arcs = nonClose.filter(s => s.type === SegmentType.Arc);
102
+ if (arcs.length >= 3 && arcs[0].arc) {
103
+ const pts = nonClose;
104
+ const top = pts[0].point;
105
+ const right = pts[1].point;
106
+ const bottom = pts[2].point;
107
+ const left = pts[3].point;
108
+ const cx = (right.x + left.x) / 2;
109
+ const cy = (top.y + bottom.y) / 2;
110
+ const finalRx = Math.abs(right.x - left.x) / 2;
111
+ const finalRy = Math.abs(bottom.y - top.y) / 2;
112
+ if (Math.abs(finalRx - finalRy) < 0.01) {
113
+ return `circle(${finalRx}px at ${cx}px ${cy}px)`;
114
+ }
115
+ return `ellipse(${finalRx}px ${finalRy}px at ${cx}px ${cy}px)`;
116
+ }
117
+ const points = nonClose.map(s => `${s.point.x}px ${s.point.y}px`).join(', ');
118
+ return `polygon(${points})`;
119
+ }
120
+ }
121
+ //# sourceMappingURL=CssShapeOutsideGeometryReader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CssShapeOutsideGeometryReader.js","sourceRoot":"","sources":["../../../../../../../src/elements/widgets/designerView/extensions/svg/geometry/CssShapeOutsideGeometryReader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { IGeometryReader } from './IGeometry.js';
2
+ export declare function getGeometryReader(element: Element): IGeometryReader | undefined;
3
+ export declare function registerGeometryReader(key: string, reader: IGeometryReader): void;
4
+ export declare function getCustomGeometryReader(key: string): IGeometryReader | null;
@@ -0,0 +1,54 @@
1
+ import { SvgPathGeometryReader } from './SvgPathGeometryReader.js';
2
+ import { SvgRectGeometryReader } from './SvgRectGeometryReader.js';
3
+ import { SvgLineGeometryReader } from './SvgLineGeometryReader.js';
4
+ import { SvgEllipseGeometryReader } from './SvgEllipseGeometryReader.js';
5
+ import { SvgCircleGeometryReader } from './SvgCircleGeometryReader.js';
6
+ import { SvgPolygonGeometryReader } from './SvgPolygonGeometryReader.js';
7
+ import { SvgPolylineGeometryReader } from './SvgPolylineGeometryReader.js';
8
+ const readerMap = new Map();
9
+ export function getGeometryReader(element) {
10
+ if (element instanceof SVGPathElement) {
11
+ if (!readerMap.has(SVGPathElement))
12
+ readerMap.set(SVGPathElement, new SvgPathGeometryReader());
13
+ return readerMap.get(SVGPathElement);
14
+ }
15
+ if (element instanceof SVGRectElement) {
16
+ if (!readerMap.has(SVGRectElement))
17
+ readerMap.set(SVGRectElement, new SvgRectGeometryReader());
18
+ return readerMap.get(SVGRectElement);
19
+ }
20
+ if (element instanceof SVGLineElement) {
21
+ if (!readerMap.has(SVGLineElement))
22
+ readerMap.set(SVGLineElement, new SvgLineGeometryReader());
23
+ return readerMap.get(SVGLineElement);
24
+ }
25
+ if (element instanceof SVGEllipseElement) {
26
+ if (!readerMap.has(SVGEllipseElement))
27
+ readerMap.set(SVGEllipseElement, new SvgEllipseGeometryReader());
28
+ return readerMap.get(SVGEllipseElement);
29
+ }
30
+ if (element instanceof SVGCircleElement) {
31
+ if (!readerMap.has(SVGCircleElement))
32
+ readerMap.set(SVGCircleElement, new SvgCircleGeometryReader());
33
+ return readerMap.get(SVGCircleElement);
34
+ }
35
+ if (element instanceof SVGPolygonElement) {
36
+ if (!readerMap.has(SVGPolygonElement))
37
+ readerMap.set(SVGPolygonElement, new SvgPolygonGeometryReader());
38
+ return readerMap.get(SVGPolygonElement);
39
+ }
40
+ if (element instanceof SVGPolylineElement) {
41
+ if (!readerMap.has(SVGPolylineElement))
42
+ readerMap.set(SVGPolylineElement, new SvgPolylineGeometryReader());
43
+ return readerMap.get(SVGPolylineElement);
44
+ }
45
+ return undefined;
46
+ }
47
+ const customReaders = new Map();
48
+ export function registerGeometryReader(key, reader) {
49
+ customReaders.set(key, reader);
50
+ }
51
+ export function getCustomGeometryReader(key) {
52
+ return customReaders.get(key) ?? null;
53
+ }
54
+ //# sourceMappingURL=GeometryReaderFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GeometryReaderFactory.js","sourceRoot":"","sources":["../../../../../../../src/elements/widgets/designerView/extensions/svg/geometry/GeometryReaderFactory.ts"],"names":[],"mappings":"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"}