@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.
- package/dist/elements/helper/getBoxQuads.js +6 -4
- package/dist/elements/helper/getBoxQuads.js.map +1 -1
- package/dist/elements/widgets/designerView/DomConverter.d.ts +1 -1
- package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtension.d.ts +56 -0
- package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtension.js +584 -0
- package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtension.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtensionProvider.d.ts +12 -0
- package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtensionProvider.js +27 -0
- package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtensionProvider.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/CssClipPathGeometryReader.d.ts +18 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/CssClipPathGeometryReader.js +161 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/CssClipPathGeometryReader.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/CssOffsetPathGeometryReader.d.ts +18 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/CssOffsetPathGeometryReader.js +150 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/CssOffsetPathGeometryReader.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/CssShapeOutsideGeometryReader.d.ts +17 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/CssShapeOutsideGeometryReader.js +121 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/CssShapeOutsideGeometryReader.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/GeometryReaderFactory.d.ts +4 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/GeometryReaderFactory.js +54 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/GeometryReaderFactory.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/IGeometry.d.ts +61 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/IGeometry.js +17 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/IGeometry.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgCircleGeometryReader.d.ts +8 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgCircleGeometryReader.js +37 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgCircleGeometryReader.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgEllipseGeometryReader.d.ts +8 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgEllipseGeometryReader.js +42 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgEllipseGeometryReader.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgLineGeometryReader.d.ts +8 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgLineGeometryReader.js +27 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgLineGeometryReader.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPathGeometryReader.d.ts +9 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPathGeometryReader.js +205 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPathGeometryReader.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPolygonGeometryReader.d.ts +8 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPolygonGeometryReader.js +27 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPolygonGeometryReader.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPolylineGeometryReader.d.ts +8 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPolylineGeometryReader.js +24 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgPolylineGeometryReader.js.map +1 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgRectGeometryReader.d.ts +8 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgRectGeometryReader.js +36 -0
- package/dist/elements/widgets/designerView/extensions/svg/geometry/SvgRectGeometryReader.js.map +1 -0
- package/dist/index-min.js +1 -1
- package/dist/index-min.js.map +2 -2
- 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
|
package/dist/elements/widgets/designerView/extensions/svg/UnifiedGeometryExtensionProvider.js.map
ADDED
|
@@ -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"}
|
package/dist/elements/widgets/designerView/extensions/svg/geometry/CssClipPathGeometryReader.d.ts
ADDED
|
@@ -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
|
+
}
|
package/dist/elements/widgets/designerView/extensions/svg/geometry/CssClipPathGeometryReader.js
ADDED
|
@@ -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
|
package/dist/elements/widgets/designerView/extensions/svg/geometry/CssClipPathGeometryReader.js.map
ADDED
|
@@ -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"}
|
package/dist/elements/widgets/designerView/extensions/svg/geometry/CssOffsetPathGeometryReader.d.ts
ADDED
|
@@ -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
|
+
}
|
package/dist/elements/widgets/designerView/extensions/svg/geometry/CssOffsetPathGeometryReader.js
ADDED
|
@@ -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
|
+
}
|
package/dist/elements/widgets/designerView/extensions/svg/geometry/CssShapeOutsideGeometryReader.js
ADDED
|
@@ -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
|
package/dist/elements/widgets/designerView/extensions/svg/geometry/GeometryReaderFactory.js.map
ADDED
|
@@ -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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"}
|