stickyflow 0.10.0 → 0.11.0
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/CHANGELOG.md +14 -0
- package/dist/binding/index.cjs +9 -9
- package/dist/binding/index.d.cts +4 -4
- package/dist/binding/index.d.ts +4 -4
- package/dist/binding/index.js +3 -3
- package/dist/{chunk-5PJ55GPG.cjs → chunk-5G3BEXQU.cjs} +1069 -713
- package/dist/chunk-5G3BEXQU.cjs.map +1 -0
- package/dist/{chunk-EGUPN56K.js → chunk-BFQWCOEC.js} +3 -3
- package/dist/{chunk-EGUPN56K.js.map → chunk-BFQWCOEC.js.map} +1 -1
- package/dist/{chunk-KRSX4UZ7.cjs → chunk-F24JURN2.cjs} +293 -46
- package/dist/chunk-F24JURN2.cjs.map +1 -0
- package/dist/{chunk-TECWZVIM.cjs → chunk-FXGXUWSI.cjs} +23 -23
- package/dist/{chunk-TECWZVIM.cjs.map → chunk-FXGXUWSI.cjs.map} +1 -1
- package/dist/{chunk-HRU6VOEC.js → chunk-G6IW2IX3.js} +44 -7
- package/dist/chunk-G6IW2IX3.js.map +1 -0
- package/dist/{chunk-SDOHUNBW.js → chunk-Q6QLU6YQ.js} +428 -72
- package/dist/chunk-Q6QLU6YQ.js.map +1 -0
- package/dist/{chunk-VPNOVRWP.js → chunk-RQYZNW2I.js} +262 -15
- package/dist/chunk-RQYZNW2I.js.map +1 -0
- package/dist/{chunk-L7CEX5JV.js → chunk-UB2ANTWF.js} +4 -4
- package/dist/{chunk-L7CEX5JV.js.map → chunk-UB2ANTWF.js.map} +1 -1
- package/dist/{chunk-LSEMXRB5.cjs → chunk-UHKFJBY5.cjs} +44 -7
- package/dist/chunk-UHKFJBY5.cjs.map +1 -0
- package/dist/{chunk-SCD3AHMY.cjs → chunk-WZA3DJJH.cjs} +15 -15
- package/dist/{chunk-SCD3AHMY.cjs.map → chunk-WZA3DJJH.cjs.map} +1 -1
- package/dist/index.cjs +36 -36
- package/dist/index.d.cts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +5 -5
- package/dist/interaction/index.cjs +240 -237
- package/dist/interaction/index.cjs.map +1 -1
- package/dist/interaction/index.d.cts +3 -3
- package/dist/interaction/index.d.ts +3 -3
- package/dist/interaction/index.js +6 -3
- package/dist/interaction/index.js.map +1 -1
- package/dist/{render-DU4lYbRl.d.cts → render-BDO4S5uF.d.cts} +16 -0
- package/dist/{render-DU4lYbRl.d.ts → render-BDO4S5uF.d.ts} +16 -0
- package/dist/{runtime-Bkv7QW7H.d.cts → runtime-C-C5v9po.d.cts} +2 -2
- package/dist/{runtime-DJ4K4_HZ.d.ts → runtime-lCAfU-1Q.d.ts} +2 -2
- package/dist/{runtimeTypes-C1shzoyr.d.ts → runtimeTypes-B7p6b1Bi.d.cts} +2 -2
- package/dist/{runtimeTypes-BvJBZLkr.d.cts → runtimeTypes-BDA_CfWh.d.ts} +2 -2
- package/dist/stickyflow-diagram.global.js +197 -44
- package/dist/stickyflow-diagram.global.js.map +1 -1
- package/dist/{types-B5jrEEcF.d.cts → types-CZJzycKw.d.cts} +1 -1
- package/dist/{types-B7IkZ0w4.d.ts → types-Dp8JVZLB.d.ts} +1 -1
- package/dist/viewer/index.cjs +9 -9
- package/dist/viewer/index.d.cts +4 -4
- package/dist/viewer/index.d.ts +4 -4
- package/dist/viewer/index.js +4 -4
- package/dist/web-component/index.cjs +6 -6
- package/dist/web-component/index.d.cts +2 -2
- package/dist/web-component/index.d.ts +2 -2
- package/dist/web-component/index.js +4 -4
- package/package.json +1 -1
- package/dist/chunk-5PJ55GPG.cjs.map +0 -1
- package/dist/chunk-HRU6VOEC.js.map +0 -1
- package/dist/chunk-KRSX4UZ7.cjs.map +0 -1
- package/dist/chunk-LSEMXRB5.cjs.map +0 -1
- package/dist/chunk-SDOHUNBW.js.map +0 -1
- package/dist/chunk-VPNOVRWP.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunkWZA3DJJH_cjs = require('../chunk-WZA3DJJH.cjs');
|
|
4
|
+
var chunkUHKFJBY5_cjs = require('../chunk-UHKFJBY5.cjs');
|
|
5
5
|
|
|
6
6
|
// src/runtime/interaction/chartValue/coordinates.ts
|
|
7
7
|
function pointerUserY(svg, event) {
|
|
@@ -70,13 +70,13 @@ function updateConnectedLine(svg, drag) {
|
|
|
70
70
|
}));
|
|
71
71
|
const line = findConnectedLine(svg, drag.owner.id, drag.series);
|
|
72
72
|
if (line) {
|
|
73
|
-
line.setAttribute("d",
|
|
73
|
+
line.setAttribute("d", chunkUHKFJBY5_cjs.linePathData(points, drag.lineTension));
|
|
74
74
|
}
|
|
75
75
|
const area = findConnectedLineArea(svg, drag.owner.id, drag.series);
|
|
76
76
|
if (area && points.length > 1) {
|
|
77
77
|
const first = points[0];
|
|
78
78
|
const last = points[points.length - 1];
|
|
79
|
-
const d = `${
|
|
79
|
+
const d = `${chunkUHKFJBY5_cjs.linePathData(points, drag.lineTension)} L ${last.x} ${drag.baseY} L ${first.x} ${drag.baseY} Z`;
|
|
80
80
|
area.setAttribute("d", d);
|
|
81
81
|
}
|
|
82
82
|
}
|
|
@@ -90,14 +90,14 @@ function setBarPath(svg, drag, d) {
|
|
|
90
90
|
function updateChartValuePreview(svg, drag, value) {
|
|
91
91
|
if (drag.isBar && drag.scale.horizontal) {
|
|
92
92
|
const width = Math.max(0, pixelForValue(value, drag.scale) - drag.barX);
|
|
93
|
-
setBarPath(svg, drag,
|
|
93
|
+
setBarPath(svg, drag, chunkUHKFJBY5_cjs.roundedBarPath(drag.barX, drag.barTop, width, drag.barHeight, drag.barRadius));
|
|
94
94
|
return;
|
|
95
95
|
}
|
|
96
96
|
const y = pixelForValue(value, drag.scale);
|
|
97
97
|
if (drag.isBar) {
|
|
98
98
|
const top = Math.min(y, drag.baseY);
|
|
99
99
|
const height = Math.max(0, Math.abs(drag.baseY - y));
|
|
100
|
-
setBarPath(svg, drag,
|
|
100
|
+
setBarPath(svg, drag, chunkUHKFJBY5_cjs.barShapePath(drag.barX, top, drag.barWidth, height, drag.barRadius));
|
|
101
101
|
return;
|
|
102
102
|
}
|
|
103
103
|
drag.element.setAttribute("cy", String(y));
|
|
@@ -120,24 +120,24 @@ function labelShift(placement, origin, top, height) {
|
|
|
120
120
|
}
|
|
121
121
|
function resizePill(pill, text, label, dy) {
|
|
122
122
|
const fontSize = parseFloat(text.getAttribute("font-size") ?? "12");
|
|
123
|
-
const size =
|
|
123
|
+
const size = chunkUHKFJBY5_cjs.barLabelSize(label, fontSize, true);
|
|
124
124
|
const stored = pill.dataset.sfPillY ?? (pill.getAttribute("d") ?? "").split(/\s+/)[2];
|
|
125
125
|
pill.dataset.sfPillY = stored;
|
|
126
126
|
const centerX = Number(text.getAttribute("x"));
|
|
127
|
-
pill.setAttribute("d",
|
|
127
|
+
pill.setAttribute("d", chunkUHKFJBY5_cjs.pillPath(centerX - size.width / 2, Number(stored), size.width, size.height));
|
|
128
128
|
pill.setAttribute("transform", `translate(0 ${dy})`);
|
|
129
129
|
}
|
|
130
130
|
function updateHorizontalBarLabel(label, drag, origin, value) {
|
|
131
|
-
const content =
|
|
131
|
+
const content = chunkUHKFJBY5_cjs.formatBarLabel(value, label.template);
|
|
132
132
|
(label.text.querySelector("tspan") ?? label.text).textContent = content;
|
|
133
133
|
if (label.placement === "axis") {
|
|
134
134
|
return true;
|
|
135
135
|
}
|
|
136
136
|
const fontSize = parseFloat(label.text.getAttribute("font-size") ?? "12");
|
|
137
|
-
const size =
|
|
137
|
+
const size = chunkUHKFJBY5_cjs.barLabelSize(content, fontSize, label.pill !== null);
|
|
138
138
|
const width = Math.max(0, pixelForValue(value, drag.scale) - origin.left);
|
|
139
139
|
const end = origin.left + width;
|
|
140
|
-
const center = label.placement === "outside" ? end +
|
|
140
|
+
const center = label.placement === "outside" ? end + chunkUHKFJBY5_cjs.BAR_LABEL.gap + size.width / 2 : label.placement === "inside" ? end - chunkUHKFJBY5_cjs.BAR_LABEL.gap - size.width / 2 : origin.left + width / 2;
|
|
141
141
|
const stored = label.text.dataset.sfLabelX ?? label.text.getAttribute("x") ?? "0";
|
|
142
142
|
label.text.dataset.sfLabelX = stored;
|
|
143
143
|
label.text.setAttribute("transform", `translate(${center - Number(stored)} 0)`);
|
|
@@ -145,7 +145,7 @@ function updateHorizontalBarLabel(label, drag, origin, value) {
|
|
|
145
145
|
const pillY = label.pill.dataset.sfPillY ?? (label.pill.getAttribute("d") ?? "").split(/\s+/)[2];
|
|
146
146
|
label.pill.dataset.sfPillY = pillY;
|
|
147
147
|
label.pill.removeAttribute("transform");
|
|
148
|
-
label.pill.setAttribute("d",
|
|
148
|
+
label.pill.setAttribute("d", chunkUHKFJBY5_cjs.pillPath(center - size.width / 2, Number(pillY), size.width, size.height));
|
|
149
149
|
}
|
|
150
150
|
return true;
|
|
151
151
|
}
|
|
@@ -161,7 +161,7 @@ function updateBarLabel(svg, drag, origin, value) {
|
|
|
161
161
|
const top = Math.min(y, drag.baseY);
|
|
162
162
|
const height = Math.abs(drag.baseY - y);
|
|
163
163
|
const dy = labelShift(label.placement, origin, top, height);
|
|
164
|
-
const content =
|
|
164
|
+
const content = chunkUHKFJBY5_cjs.formatBarLabel(value, label.template);
|
|
165
165
|
(label.text.querySelector("tspan") ?? label.text).textContent = content;
|
|
166
166
|
label.text.setAttribute("transform", `translate(0 ${dy})`);
|
|
167
167
|
if (label.pill) {
|
|
@@ -177,7 +177,7 @@ var HEIGHT = 18;
|
|
|
177
177
|
var GAP = 8;
|
|
178
178
|
var BACKGROUND = "rgba(15, 23, 42, 0.9)";
|
|
179
179
|
function element(svg, tag) {
|
|
180
|
-
return svg.ownerDocument.createElementNS(
|
|
180
|
+
return svg.ownerDocument.createElementNS(chunkWZA3DJJH_cjs.SVG_NAMESPACE, tag);
|
|
181
181
|
}
|
|
182
182
|
function createValueReadout(svg) {
|
|
183
183
|
const group = element(svg, "g");
|
|
@@ -273,7 +273,7 @@ function resolveChartValueDrag(svg, event) {
|
|
|
273
273
|
if (!target) {
|
|
274
274
|
return null;
|
|
275
275
|
}
|
|
276
|
-
const scale = parseValueScale(
|
|
276
|
+
const scale = parseValueScale(chunkWZA3DJJH_cjs.findOwnerNode(svg, target.owner.id, chunkWZA3DJJH_cjs.isPrimary));
|
|
277
277
|
const geometry = scale ? resolveChartValueGeometry(svg, target, scale) : null;
|
|
278
278
|
if (!scale || !geometry) {
|
|
279
279
|
return null;
|
|
@@ -293,13 +293,13 @@ function createChartValueDragState(target, scale, geometry, pointerId) {
|
|
|
293
293
|
};
|
|
294
294
|
}
|
|
295
295
|
function isChartValuePointer(event) {
|
|
296
|
-
return event.button === 0 && !
|
|
296
|
+
return event.button === 0 && !chunkWZA3DJJH_cjs.isCameraGesture(event);
|
|
297
297
|
}
|
|
298
298
|
function findChartValueMark(event) {
|
|
299
299
|
return event.target?.closest?.("[data-sf-value-index]");
|
|
300
300
|
}
|
|
301
301
|
function readChartValueTarget(mark) {
|
|
302
|
-
const owner =
|
|
302
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(mark);
|
|
303
303
|
if (owner?.role !== "chart") {
|
|
304
304
|
return null;
|
|
305
305
|
}
|
|
@@ -458,8 +458,8 @@ function bindChartValueDrag(viewer, emitter) {
|
|
|
458
458
|
|
|
459
459
|
// src/runtime/interaction/colorEdit/color.ts
|
|
460
460
|
function normalizeHex(value) {
|
|
461
|
-
const channels =
|
|
462
|
-
return channels &&
|
|
461
|
+
const channels = chunkUHKFJBY5_cjs.parseHexRgb(value);
|
|
462
|
+
return channels && chunkUHKFJBY5_cjs.rgbToHex(...channels);
|
|
463
463
|
}
|
|
464
464
|
var COLOR_FUNCTION = /^rgba?\(\s*(\d{1,3})\s*[, ]\s*(\d{1,3})\s*[, ]\s*(\d{1,3})\s*(?:[,/]\s*(\d*\.?\d+)(%?)\s*)?\)$/i;
|
|
465
465
|
var HEX_WITH_ALPHA = /^#([0-9a-f]{6})([0-9a-f]{2})$/i;
|
|
@@ -498,14 +498,14 @@ function clampChannel(value) {
|
|
|
498
498
|
return Math.max(0, Math.min(255, Math.round(value)));
|
|
499
499
|
}
|
|
500
500
|
function hexToRgb(hex) {
|
|
501
|
-
const [r, g, b] =
|
|
501
|
+
const [r, g, b] = chunkUHKFJBY5_cjs.parseHexRgb(hex) ?? [0, 0, 0];
|
|
502
502
|
return { r, g, b };
|
|
503
503
|
}
|
|
504
504
|
function rgbToHex2(rgb) {
|
|
505
|
-
return
|
|
505
|
+
return chunkUHKFJBY5_cjs.rgbToHex(clampChannel(rgb.r), clampChannel(rgb.g), clampChannel(rgb.b));
|
|
506
506
|
}
|
|
507
507
|
function hsvToRgb2(hsv) {
|
|
508
|
-
const { r, g, b } =
|
|
508
|
+
const { r, g, b } = chunkUHKFJBY5_cjs.hsvToRgb(
|
|
509
509
|
(hsv.h % 360 + 360) % 360,
|
|
510
510
|
Math.max(0, Math.min(1, hsv.s)),
|
|
511
511
|
Math.max(0, Math.min(1, hsv.v))
|
|
@@ -513,7 +513,7 @@ function hsvToRgb2(hsv) {
|
|
|
513
513
|
return { r, g, b };
|
|
514
514
|
}
|
|
515
515
|
function rgbToHsv2(rgb) {
|
|
516
|
-
return
|
|
516
|
+
return chunkUHKFJBY5_cjs.rgbToHsv(clampChannel(rgb.r), clampChannel(rgb.g), clampChannel(rgb.b));
|
|
517
517
|
}
|
|
518
518
|
function hexToHsv(hex) {
|
|
519
519
|
return rgbToHsv2(hexToRgb(hex));
|
|
@@ -1709,7 +1709,7 @@ var ColorEditSession = class {
|
|
|
1709
1709
|
const hasOverride = target.node.getAttribute("data-sf-color-override") === "true";
|
|
1710
1710
|
this.#open = openColorPopover({
|
|
1711
1711
|
seed: seedFrom(fill, readGradientValue(this.#svg, fill)),
|
|
1712
|
-
anchor:
|
|
1712
|
+
anchor: chunkWZA3DJJH_cjs.screenRectOf(target.node),
|
|
1713
1713
|
theme: resolveTheme(this.#theme),
|
|
1714
1714
|
allowGradient: !target.solidOnly,
|
|
1715
1715
|
onCommit: (color) => {
|
|
@@ -1791,7 +1791,7 @@ function resolveTarget(event, selector, pathOf, rules) {
|
|
|
1791
1791
|
return null;
|
|
1792
1792
|
}
|
|
1793
1793
|
const path = pathOf(node);
|
|
1794
|
-
const owner =
|
|
1794
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(node);
|
|
1795
1795
|
if (!path || !owner || !isEditablePath(path, rules) || requiresPriorSelection(node, owner)) {
|
|
1796
1796
|
return null;
|
|
1797
1797
|
}
|
|
@@ -1813,7 +1813,7 @@ function resolveZoneGradientTarget(event) {
|
|
|
1813
1813
|
if (!node) {
|
|
1814
1814
|
return null;
|
|
1815
1815
|
}
|
|
1816
|
-
const owner =
|
|
1816
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(node);
|
|
1817
1817
|
if (!owner) {
|
|
1818
1818
|
return null;
|
|
1819
1819
|
}
|
|
@@ -1849,7 +1849,7 @@ var ZoneGradientSession = class {
|
|
|
1849
1849
|
const beforeStops = sortStops(gradient.stops);
|
|
1850
1850
|
this.#open = openColorPopover({
|
|
1851
1851
|
seed: seedFrom(fill, gradient),
|
|
1852
|
-
anchor:
|
|
1852
|
+
anchor: chunkWZA3DJJH_cjs.screenRectOf(target.node),
|
|
1853
1853
|
theme: resolveTheme(this.#theme),
|
|
1854
1854
|
allowGradient: true,
|
|
1855
1855
|
lockStops: true,
|
|
@@ -1922,15 +1922,15 @@ function bindDeleteSelection(viewer, emitter) {
|
|
|
1922
1922
|
}
|
|
1923
1923
|
|
|
1924
1924
|
// src/runtime/interaction/events.ts
|
|
1925
|
-
var Emitter2 = class extends
|
|
1925
|
+
var Emitter2 = class extends chunkWZA3DJJH_cjs.Emitter {
|
|
1926
1926
|
};
|
|
1927
1927
|
|
|
1928
1928
|
// src/runtime/interaction/linkPreview/geometry.ts
|
|
1929
1929
|
function anchorPoint(bounds, side, other) {
|
|
1930
1930
|
if (side) {
|
|
1931
|
-
return
|
|
1931
|
+
return chunkUHKFJBY5_cjs.pointAtPort(bounds, { side, offset: 0.5 });
|
|
1932
1932
|
}
|
|
1933
|
-
return
|
|
1933
|
+
return chunkUHKFJBY5_cjs.edgePointToward(bounds, other);
|
|
1934
1934
|
}
|
|
1935
1935
|
function polylinePathData(points) {
|
|
1936
1936
|
if (points.length < 4) {
|
|
@@ -1947,7 +1947,7 @@ function previewPathData(points, segments, pathType, strokeWidth) {
|
|
|
1947
1947
|
return `M ${points[0]} ${points[1]} C ${points[2]} ${points[3]} ${points[4]} ${points[5]} ${points[6]} ${points[7]}`;
|
|
1948
1948
|
}
|
|
1949
1949
|
if (pathType === "orthogonal" && segments.length > 0) {
|
|
1950
|
-
return
|
|
1950
|
+
return chunkUHKFJBY5_cjs.roundedOrthogonalPathData(segments, Math.max(16, strokeWidth * 4));
|
|
1951
1951
|
}
|
|
1952
1952
|
return polylinePathData(points);
|
|
1953
1953
|
}
|
|
@@ -1967,8 +1967,8 @@ function previewLink(fromSide, toSide) {
|
|
|
1967
1967
|
function routePreviewLink(fromBounds, toBounds, fromSide, toSide, pathType) {
|
|
1968
1968
|
const from = anchorPoint(fromBounds, fromSide, toBounds);
|
|
1969
1969
|
const to = anchorPoint(toBounds, toSide, fromBounds);
|
|
1970
|
-
const { points, segments } =
|
|
1971
|
-
return { points, segments, midpoint:
|
|
1970
|
+
const { points, segments } = chunkUHKFJBY5_cjs.calculateLinkRoute(previewLink(fromSide, toSide), from, to, pathType);
|
|
1971
|
+
return { points, segments, midpoint: chunkUHKFJBY5_cjs.getLineMidpoint(points, pathType, from, to) };
|
|
1972
1972
|
}
|
|
1973
1973
|
|
|
1974
1974
|
// src/runtime/interaction/linkPreview/discovery.ts
|
|
@@ -2000,7 +2000,7 @@ function resolveOppositeEndpoint(svg, path, canvasObjectId) {
|
|
|
2000
2000
|
if (!otherId) {
|
|
2001
2001
|
return null;
|
|
2002
2002
|
}
|
|
2003
|
-
const otherPrimary =
|
|
2003
|
+
const otherPrimary = chunkWZA3DJJH_cjs.findOwnerNode(svg, otherId, chunkWZA3DJJH_cjs.isPrimary);
|
|
2004
2004
|
return otherPrimary ? { draggedIsFrom, bounds: otherPrimary.getBBox() } : null;
|
|
2005
2005
|
}
|
|
2006
2006
|
function captureLiveLinkLabel(svg, draft, draggedBounds) {
|
|
@@ -2047,8 +2047,8 @@ function resolveOtherFacePoint(svg, path, canvasObjectId) {
|
|
|
2047
2047
|
if (!otherId || !face || !otherFace) {
|
|
2048
2048
|
return null;
|
|
2049
2049
|
}
|
|
2050
|
-
const otherPrimary =
|
|
2051
|
-
const otherGeometry = otherPrimary &&
|
|
2050
|
+
const otherPrimary = chunkWZA3DJJH_cjs.findOwnerNode(svg, otherId, chunkWZA3DJJH_cjs.isPrimary);
|
|
2051
|
+
const otherGeometry = otherPrimary && chunkWZA3DJJH_cjs.isometricGeometryOf(otherPrimary);
|
|
2052
2052
|
if (!otherGeometry?.bounds) {
|
|
2053
2053
|
return null;
|
|
2054
2054
|
}
|
|
@@ -2059,7 +2059,7 @@ function resolveOtherFacePoint(svg, path, canvasObjectId) {
|
|
|
2059
2059
|
height: otherGeometry.height,
|
|
2060
2060
|
depth: otherGeometry.depth
|
|
2061
2061
|
};
|
|
2062
|
-
return { otherPoint:
|
|
2062
|
+
return { otherPoint: chunkUHKFJBY5_cjs.isometricFaceCenter(otherObject, otherFace), draggedIsFrom, face };
|
|
2063
2063
|
}
|
|
2064
2064
|
function findLiveFaceLinks(svg, canvasObjectId) {
|
|
2065
2065
|
const escapedId = CSS.escape(canvasObjectId);
|
|
@@ -2078,7 +2078,7 @@ function findLiveFaceLinks(svg, canvasObjectId) {
|
|
|
2078
2078
|
|
|
2079
2079
|
// src/runtime/interaction/linkPreview/faceUpdate.ts
|
|
2080
2080
|
function updateLiveFaceLink(link, liveObject) {
|
|
2081
|
-
const draggedPoint =
|
|
2081
|
+
const draggedPoint = chunkUHKFJBY5_cjs.isometricFaceCenter(liveObject, link.face);
|
|
2082
2082
|
const from = link.draggedIsFrom ? draggedPoint : link.otherPoint;
|
|
2083
2083
|
const to = link.draggedIsFrom ? link.otherPoint : draggedPoint;
|
|
2084
2084
|
link.path.setAttribute("d", `M ${from.x} ${from.y} L ${to.x} ${to.y}`);
|
|
@@ -2102,7 +2102,7 @@ function updateLabelGap(link, points) {
|
|
|
2102
2102
|
if (!link.labelGapSize) {
|
|
2103
2103
|
return;
|
|
2104
2104
|
}
|
|
2105
|
-
const gap =
|
|
2105
|
+
const gap = chunkUHKFJBY5_cjs.labelGapDash(points, link.pathType, link.labelGapSize.width, link.labelGapSize.height);
|
|
2106
2106
|
if (gap) {
|
|
2107
2107
|
link.path.setAttribute("stroke-dasharray", `${gap.dashBefore} ${gap.gapLength} 1000000`);
|
|
2108
2108
|
} else {
|
|
@@ -2148,11 +2148,11 @@ function readIsometricSnapStep(svg) {
|
|
|
2148
2148
|
return step > 0 ? step : null;
|
|
2149
2149
|
}
|
|
2150
2150
|
function nearestIsometricLatticePoint(point, step) {
|
|
2151
|
-
const u = point.x / (
|
|
2152
|
-
const v = point.y / (
|
|
2151
|
+
const u = point.x / (chunkUHKFJBY5_cjs.AXIS_COS * step);
|
|
2152
|
+
const v = point.y / (chunkUHKFJBY5_cjs.AXIS_SIN * step);
|
|
2153
2153
|
const i = Math.round((u + v) / 2);
|
|
2154
2154
|
const j = Math.round((u - v) / 2);
|
|
2155
|
-
return { x: (i + j) *
|
|
2155
|
+
return { x: (i + j) * chunkUHKFJBY5_cjs.AXIS_COS * step, y: (i - j) * chunkUHKFJBY5_cjs.AXIS_SIN * step };
|
|
2156
2156
|
}
|
|
2157
2157
|
function snapToStep(value, step, min) {
|
|
2158
2158
|
return Math.max(min, Math.round(value / step) * step);
|
|
@@ -2165,21 +2165,21 @@ var LABEL_FONT_SIZE = 12;
|
|
|
2165
2165
|
var LABEL_LINE_HEIGHT = 1.2;
|
|
2166
2166
|
var LABEL_BASELINE_OFFSET = -LABEL_GAP - LABEL_HEIGHT + (LABEL_HEIGHT - LABEL_FONT_SIZE * LABEL_LINE_HEIGHT) / 2 + LABEL_FONT_SIZE;
|
|
2167
2167
|
function applyIsometricAxisPreview(nodes, object, cornerRadius, overlay, svg) {
|
|
2168
|
-
const faces =
|
|
2169
|
-
nodes.top?.setAttribute("d",
|
|
2170
|
-
nodes.front?.setAttribute("d",
|
|
2171
|
-
nodes.side?.setAttribute("d",
|
|
2168
|
+
const faces = chunkUHKFJBY5_cjs.isometricFaces(object);
|
|
2169
|
+
nodes.top?.setAttribute("d", chunkUHKFJBY5_cjs.roundedPolygonPath(faces.top, 0));
|
|
2170
|
+
nodes.front?.setAttribute("d", chunkUHKFJBY5_cjs.roundedPolygonPath(faces.front, 0));
|
|
2171
|
+
nodes.side?.setAttribute("d", chunkUHKFJBY5_cjs.roundedPolygonPath(faces.right, 0));
|
|
2172
2172
|
const silhouette = [faces.top[0], faces.top[1], faces.right[2], faces.front[2], faces.front[3], faces.top[3]];
|
|
2173
|
-
const hullPath =
|
|
2173
|
+
const hullPath = chunkUHKFJBY5_cjs.roundedPolygonPath(silhouette, cornerRadius);
|
|
2174
2174
|
nodes.hull?.setAttribute("d", hullPath);
|
|
2175
2175
|
if (overlay.halo) {
|
|
2176
|
-
|
|
2176
|
+
chunkWZA3DJJH_cjs.updateHalo(overlay.halo, hullPath);
|
|
2177
2177
|
}
|
|
2178
|
-
const placements =
|
|
2178
|
+
const placements = chunkWZA3DJJH_cjs.axisArrowPlacements(object);
|
|
2179
2179
|
Object.keys(placements).forEach((axis) => {
|
|
2180
2180
|
const group = overlay.arrows[axis];
|
|
2181
2181
|
if (group) {
|
|
2182
|
-
|
|
2182
|
+
chunkWZA3DJJH_cjs.updateAxisArrowGroup(group, placements[axis].origin, placements[axis].direction, svg);
|
|
2183
2183
|
}
|
|
2184
2184
|
});
|
|
2185
2185
|
nodes.seams?.setAttribute(
|
|
@@ -2197,9 +2197,9 @@ function applyIsometricAxisPreview(nodes, object, cornerRadius, overlay, svg) {
|
|
|
2197
2197
|
x: footprintCenter.x + (point.x - footprintCenter.x) * shadowSpread,
|
|
2198
2198
|
y: footprintCenter.y + (point.y - footprintCenter.y) * shadowSpread
|
|
2199
2199
|
}));
|
|
2200
|
-
nodes.groundShadow.setAttribute("d",
|
|
2200
|
+
nodes.groundShadow.setAttribute("d", chunkUHKFJBY5_cjs.roundedPolygonPath(footprint, 0));
|
|
2201
2201
|
}
|
|
2202
|
-
const anchor =
|
|
2202
|
+
const anchor = chunkUHKFJBY5_cjs.isometricTopFaceCenter(object);
|
|
2203
2203
|
if (nodes.labelGuide) {
|
|
2204
2204
|
nodes.labelGuide.setAttribute("d", `M ${anchor.x} ${anchor.y - LABEL_GAP} L ${anchor.x} ${anchor.y}`);
|
|
2205
2205
|
}
|
|
@@ -2215,7 +2215,7 @@ function applyIsometricAxisPreview(nodes, object, cornerRadius, overlay, svg) {
|
|
|
2215
2215
|
// src/runtime/interaction/isometricAxisResize/state.ts
|
|
2216
2216
|
var AXES = ["width", "height", "depth"];
|
|
2217
2217
|
function collectNodes(svg, ownerId) {
|
|
2218
|
-
const all =
|
|
2218
|
+
const all = chunkWZA3DJJH_cjs.findAllOwnerNodes(svg, ownerId);
|
|
2219
2219
|
const bySuffix = (suffix) => all.find((el2) => el2.id.endsWith(suffix)) ?? null;
|
|
2220
2220
|
return {
|
|
2221
2221
|
top: bySuffix("-top"),
|
|
@@ -2243,14 +2243,14 @@ function findResizeHandle(event) {
|
|
|
2243
2243
|
return { captureTarget, axis: handleAttr.slice(4), overlay, ownerId };
|
|
2244
2244
|
}
|
|
2245
2245
|
function overlayPartsOf(overlay) {
|
|
2246
|
-
const overlayHalo = overlay.querySelector(`[${
|
|
2246
|
+
const overlayHalo = overlay.querySelector(`[${chunkWZA3DJJH_cjs.ISO_HALO_ATTR}]`) ?? null;
|
|
2247
2247
|
const overlayArrows = Object.fromEntries(
|
|
2248
2248
|
AXES.map((axis) => [
|
|
2249
2249
|
axis,
|
|
2250
2250
|
overlay.querySelector(`[data-sf-resize-handle="iso-${axis}"]`) ?? null
|
|
2251
2251
|
])
|
|
2252
2252
|
);
|
|
2253
|
-
const overlayDuplicateBubbles = overlay.querySelector(`[${
|
|
2253
|
+
const overlayDuplicateBubbles = overlay.querySelector(`[${chunkWZA3DJJH_cjs.ISO_DUPLICATE_BUBBLES_ATTR}]`) ?? null;
|
|
2254
2254
|
if (overlayDuplicateBubbles) {
|
|
2255
2255
|
overlayDuplicateBubbles.style.display = "none";
|
|
2256
2256
|
}
|
|
@@ -2262,16 +2262,16 @@ function createIsometricAxisDragState(svg, event) {
|
|
|
2262
2262
|
return null;
|
|
2263
2263
|
}
|
|
2264
2264
|
const { captureTarget, axis, overlay, ownerId } = handle;
|
|
2265
|
-
const primary =
|
|
2266
|
-
const owner = primary &&
|
|
2265
|
+
const primary = chunkWZA3DJJH_cjs.findOwnerNode(svg, ownerId, chunkWZA3DJJH_cjs.isPrimary);
|
|
2266
|
+
const owner = primary && chunkWZA3DJJH_cjs.resolveOwner(primary);
|
|
2267
2267
|
if (!primary || owner?.role !== "isometric") {
|
|
2268
2268
|
return null;
|
|
2269
2269
|
}
|
|
2270
|
-
const startUser =
|
|
2270
|
+
const startUser = chunkWZA3DJJH_cjs.pointerUserPoint(svg, event);
|
|
2271
2271
|
if (!startUser) {
|
|
2272
2272
|
return null;
|
|
2273
2273
|
}
|
|
2274
|
-
const geometry =
|
|
2274
|
+
const geometry = chunkWZA3DJJH_cjs.isometricGeometryOf(primary);
|
|
2275
2275
|
const bounds = geometry?.bounds ?? primary.getBBox();
|
|
2276
2276
|
const nodes = collectNodes(svg, ownerId);
|
|
2277
2277
|
[nodes.top, nodes.front, nodes.side].forEach((node) => {
|
|
@@ -2291,7 +2291,7 @@ function createIsometricAxisDragState(svg, event) {
|
|
|
2291
2291
|
pointerId: event.pointerId,
|
|
2292
2292
|
startUser,
|
|
2293
2293
|
start,
|
|
2294
|
-
cornerRadius: geometry?.cornerRadius ?? Number(primary.getAttribute(
|
|
2294
|
+
cornerRadius: geometry?.cornerRadius ?? Number(primary.getAttribute(chunkUHKFJBY5_cjs.CORNER_RADIUS_ATTR)) ?? 0,
|
|
2295
2295
|
nodes,
|
|
2296
2296
|
...overlayPartsOf(overlay),
|
|
2297
2297
|
liveFaceLinks: findLiveFaceLinks(svg, ownerId),
|
|
@@ -2308,15 +2308,15 @@ function nextGeometry(drag, point, step) {
|
|
|
2308
2308
|
const dx = point.x - drag.startUser.x;
|
|
2309
2309
|
const dy = point.y - drag.startUser.y;
|
|
2310
2310
|
if (axis === "width") {
|
|
2311
|
-
const delta2 = dx *
|
|
2311
|
+
const delta2 = dx * chunkUHKFJBY5_cjs.AXIS_COS + dy * chunkUHKFJBY5_cjs.AXIS_SIN;
|
|
2312
2312
|
return { ...start, width: length(start.width + delta2, MIN_SIZE) };
|
|
2313
2313
|
}
|
|
2314
2314
|
if (axis === "height") {
|
|
2315
2315
|
return { ...start, height: length(start.height + dy, MIN_SIZE) };
|
|
2316
2316
|
}
|
|
2317
|
-
const delta = -dx *
|
|
2317
|
+
const delta = -dx * chunkUHKFJBY5_cjs.AXIS_COS + dy * chunkUHKFJBY5_cjs.AXIS_SIN;
|
|
2318
2318
|
const depth = length(start.depth + delta, 0);
|
|
2319
|
-
const x = start.x + (start.depth - depth) *
|
|
2319
|
+
const x = start.x + (start.depth - depth) * chunkUHKFJBY5_cjs.AXIS_COS;
|
|
2320
2320
|
return { ...start, x, depth };
|
|
2321
2321
|
}
|
|
2322
2322
|
var IsometricAxisResizeSession = class {
|
|
@@ -2328,7 +2328,7 @@ var IsometricAxisResizeSession = class {
|
|
|
2328
2328
|
this.#emitter = emitter;
|
|
2329
2329
|
}
|
|
2330
2330
|
pointerDown = (event) => {
|
|
2331
|
-
if (event.button !== 0 || this.#drag ||
|
|
2331
|
+
if (event.button !== 0 || this.#drag || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
2332
2332
|
return;
|
|
2333
2333
|
}
|
|
2334
2334
|
this.#drag = createIsometricAxisDragState(this.#svg, event);
|
|
@@ -2338,7 +2338,7 @@ var IsometricAxisResizeSession = class {
|
|
|
2338
2338
|
if (!drag || event.pointerId !== drag.pointerId) {
|
|
2339
2339
|
return;
|
|
2340
2340
|
}
|
|
2341
|
-
const point =
|
|
2341
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
2342
2342
|
if (!point) {
|
|
2343
2343
|
return;
|
|
2344
2344
|
}
|
|
@@ -2436,7 +2436,7 @@ function findLabelMark(event) {
|
|
|
2436
2436
|
);
|
|
2437
2437
|
}
|
|
2438
2438
|
function isLabelPointer(event) {
|
|
2439
|
-
return event.button === 0 && !
|
|
2439
|
+
return event.button === 0 && !chunkWZA3DJJH_cjs.isCameraGesture(event);
|
|
2440
2440
|
}
|
|
2441
2441
|
function findHull(svg, ownerId) {
|
|
2442
2442
|
return svg.querySelector(`[data-sf-id="${CSS.escape(ownerId)}"][data-sf-primary="true"]`);
|
|
@@ -2452,21 +2452,21 @@ function resolveIsometricLabelDrag(svg, event) {
|
|
|
2452
2452
|
if (!clicked) {
|
|
2453
2453
|
return null;
|
|
2454
2454
|
}
|
|
2455
|
-
const owner =
|
|
2455
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(clicked);
|
|
2456
2456
|
if (owner?.role !== "isometric") {
|
|
2457
2457
|
return null;
|
|
2458
2458
|
}
|
|
2459
2459
|
const hull = findHull(svg, owner.id);
|
|
2460
|
-
const geometry = hull ?
|
|
2460
|
+
const geometry = hull ? chunkWZA3DJJH_cjs.isometricGeometryOf(hull) : null;
|
|
2461
2461
|
if (!geometry?.bounds) {
|
|
2462
2462
|
return null;
|
|
2463
2463
|
}
|
|
2464
|
-
const start =
|
|
2464
|
+
const start = chunkWZA3DJJH_cjs.pointerUserPoint(svg, event);
|
|
2465
2465
|
if (!start) {
|
|
2466
2466
|
return null;
|
|
2467
2467
|
}
|
|
2468
2468
|
const anchorX = geometry.bounds.x + geometry.bounds.width / 2;
|
|
2469
|
-
const anchorY = geometry.bounds.y + geometry.bounds.width * (
|
|
2469
|
+
const anchorY = geometry.bounds.y + geometry.bounds.width * (chunkUHKFJBY5_cjs.AXIS_SIN / chunkUHKFJBY5_cjs.AXIS_COS) / 2;
|
|
2470
2470
|
const text = findBySuffix(svg, `-${owner.id}-label`);
|
|
2471
2471
|
if (!text) {
|
|
2472
2472
|
return null;
|
|
@@ -2518,7 +2518,7 @@ var IsometricLabelDragSession = class {
|
|
|
2518
2518
|
if (!this.#drag || event.pointerId !== this.#drag.pointerId) {
|
|
2519
2519
|
return;
|
|
2520
2520
|
}
|
|
2521
|
-
const point =
|
|
2521
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
2522
2522
|
if (!point) {
|
|
2523
2523
|
return;
|
|
2524
2524
|
}
|
|
@@ -2593,7 +2593,7 @@ function isIsometricDirection(value) {
|
|
|
2593
2593
|
function bindIsometricQuickDuplicate(viewer, emitter) {
|
|
2594
2594
|
const svg = viewer.svg;
|
|
2595
2595
|
const onPointerDown = (event) => {
|
|
2596
|
-
if (event.button !== 0 ||
|
|
2596
|
+
if (event.button !== 0 || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
2597
2597
|
return;
|
|
2598
2598
|
}
|
|
2599
2599
|
const bubble = event.target?.closest("[data-sf-quick-duplicate]");
|
|
@@ -2604,7 +2604,7 @@ function bindIsometricQuickDuplicate(viewer, emitter) {
|
|
|
2604
2604
|
const overlay = bubble.closest("[data-sf-selection-overlay]");
|
|
2605
2605
|
const sourceId = overlay?.getAttribute("data-sf-selection-overlay");
|
|
2606
2606
|
const primary = sourceId ? svg.querySelector(`[data-sf-id="${CSS.escape(sourceId)}"][data-sf-primary="true"]`) : null;
|
|
2607
|
-
const owner = primary &&
|
|
2607
|
+
const owner = primary && chunkWZA3DJJH_cjs.resolveOwner(primary);
|
|
2608
2608
|
if (!owner) {
|
|
2609
2609
|
return;
|
|
2610
2610
|
}
|
|
@@ -2659,7 +2659,7 @@ function updateEndpointPreview(drag, draggedPoint, draggedSide) {
|
|
|
2659
2659
|
const toPoint = drag.end === "to" ? draggedPoint : drag.fixedPoint;
|
|
2660
2660
|
const fromSide = drag.end === "from" ? draggedSide : drag.fixedSide;
|
|
2661
2661
|
const toSide = drag.end === "to" ? draggedSide : drag.fixedSide;
|
|
2662
|
-
const { points, segments } =
|
|
2662
|
+
const { points, segments } = chunkUHKFJBY5_cjs.calculateLinkRoute(previewLink(fromSide, toSide), fromPoint, toPoint, drag.pathType);
|
|
2663
2663
|
drag.path.setAttribute("d", previewPathData(points, segments, drag.pathType, drag.strokeWidth));
|
|
2664
2664
|
}
|
|
2665
2665
|
|
|
@@ -2681,7 +2681,7 @@ var LinkGhost = class {
|
|
|
2681
2681
|
constructor(svg, path) {
|
|
2682
2682
|
this.#svg = svg;
|
|
2683
2683
|
this.#path = path;
|
|
2684
|
-
this.#anchors = svg.ownerDocument.createElementNS(
|
|
2684
|
+
this.#anchors = svg.ownerDocument.createElementNS(chunkWZA3DJJH_cjs.SVG_NAMESPACE, "g");
|
|
2685
2685
|
this.#anchors.setAttribute("data-sf-link-target", "");
|
|
2686
2686
|
this.#anchors.setAttribute("pointer-events", "none");
|
|
2687
2687
|
}
|
|
@@ -2691,7 +2691,7 @@ var LinkGhost = class {
|
|
|
2691
2691
|
for (const name of RESTORED_ATTRIBUTES) {
|
|
2692
2692
|
this.#saved.set(name, this.#path.getAttribute(name));
|
|
2693
2693
|
}
|
|
2694
|
-
const dash = GHOST_DASH_PX /
|
|
2694
|
+
const dash = GHOST_DASH_PX / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg);
|
|
2695
2695
|
this.#path.setAttribute("stroke-dasharray", `${dash} ${dash}`);
|
|
2696
2696
|
this.#path.setAttribute("stroke-linecap", "round");
|
|
2697
2697
|
this.#path.setAttribute("opacity", GHOST_OPACITY);
|
|
@@ -2720,7 +2720,7 @@ var LinkGhost = class {
|
|
|
2720
2720
|
if (!bounds) {
|
|
2721
2721
|
return;
|
|
2722
2722
|
}
|
|
2723
|
-
const unit = 1 /
|
|
2723
|
+
const unit = 1 / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg);
|
|
2724
2724
|
const centers = [
|
|
2725
2725
|
[bounds.x + bounds.width / 2, bounds.y],
|
|
2726
2726
|
[bounds.x + bounds.width, bounds.y + bounds.height / 2],
|
|
@@ -2728,7 +2728,7 @@ var LinkGhost = class {
|
|
|
2728
2728
|
[bounds.x, bounds.y + bounds.height / 2]
|
|
2729
2729
|
];
|
|
2730
2730
|
for (const [cx, cy] of centers) {
|
|
2731
|
-
const dot = this.#svg.ownerDocument.createElementNS(
|
|
2731
|
+
const dot = this.#svg.ownerDocument.createElementNS(chunkWZA3DJJH_cjs.SVG_NAMESPACE, "circle");
|
|
2732
2732
|
dot.setAttribute("cx", String(cx));
|
|
2733
2733
|
dot.setAttribute("cy", String(cy));
|
|
2734
2734
|
dot.setAttribute("r", String(ANCHOR_RADIUS_PX * unit));
|
|
@@ -2748,7 +2748,7 @@ function collectEndpointCandidates(svg) {
|
|
|
2748
2748
|
if (element2.getAttribute("data-sf-role") === "link") {
|
|
2749
2749
|
continue;
|
|
2750
2750
|
}
|
|
2751
|
-
const owner =
|
|
2751
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(element2);
|
|
2752
2752
|
if (owner) {
|
|
2753
2753
|
candidates.push({ owner, bounds: element2.getBBox() });
|
|
2754
2754
|
}
|
|
@@ -2825,7 +2825,7 @@ function inferFixedSide(svg, reference, fixedPrimary) {
|
|
|
2825
2825
|
if (reference.declaredSide) {
|
|
2826
2826
|
return reference.declaredSide;
|
|
2827
2827
|
}
|
|
2828
|
-
const draggedPrimary = reference.draggedId ?
|
|
2828
|
+
const draggedPrimary = reference.draggedId ? chunkWZA3DJJH_cjs.findOwnerNode(svg, reference.draggedId, chunkWZA3DJJH_cjs.isPrimary) : null;
|
|
2829
2829
|
if (!draggedPrimary) {
|
|
2830
2830
|
return "right";
|
|
2831
2831
|
}
|
|
@@ -2833,7 +2833,7 @@ function inferFixedSide(svg, reference, fixedPrimary) {
|
|
|
2833
2833
|
}
|
|
2834
2834
|
function resolveFixedEndpoint(svg, path, draggedEnd) {
|
|
2835
2835
|
const reference = fixedEndpointReference(path, draggedEnd);
|
|
2836
|
-
const fixedPrimary = reference.fixedId ?
|
|
2836
|
+
const fixedPrimary = reference.fixedId ? chunkWZA3DJJH_cjs.findOwnerNode(svg, reference.fixedId, chunkWZA3DJJH_cjs.isPrimary) : null;
|
|
2837
2837
|
if (!fixedPrimary) {
|
|
2838
2838
|
return null;
|
|
2839
2839
|
}
|
|
@@ -2852,8 +2852,8 @@ function selectLinkEndpoint(svg, event) {
|
|
|
2852
2852
|
if (!target || !end || !linkId) {
|
|
2853
2853
|
return null;
|
|
2854
2854
|
}
|
|
2855
|
-
const path =
|
|
2856
|
-
const linkOwner = path &&
|
|
2855
|
+
const path = chunkWZA3DJJH_cjs.findOwnerNode(svg, linkId, chunkWZA3DJJH_cjs.isPrimary);
|
|
2856
|
+
const linkOwner = path && chunkWZA3DJJH_cjs.resolveOwner(path);
|
|
2857
2857
|
if (!path || !linkOwner) {
|
|
2858
2858
|
return null;
|
|
2859
2859
|
}
|
|
@@ -2895,8 +2895,8 @@ function nearestPort(bounds, point) {
|
|
|
2895
2895
|
let nearest = { side: "right", offset: 0.5 };
|
|
2896
2896
|
let nearestDistance = Infinity;
|
|
2897
2897
|
for (const side of SIDES2) {
|
|
2898
|
-
const offset = Math.max(0, Math.min(1,
|
|
2899
|
-
const candidate =
|
|
2898
|
+
const offset = Math.max(0, Math.min(1, chunkUHKFJBY5_cjs.relativeOffsetOnRectangleSide(bounds, side, point)));
|
|
2899
|
+
const candidate = chunkUHKFJBY5_cjs.pointAtPort(bounds, { side, offset });
|
|
2900
2900
|
const distance = Math.hypot(candidate.x - point.x, candidate.y - point.y);
|
|
2901
2901
|
if (distance < nearestDistance) {
|
|
2902
2902
|
nearestDistance = distance;
|
|
@@ -2955,7 +2955,7 @@ function resolveLinkTarget(candidates, fixedPoint, point, unitsPerPx) {
|
|
|
2955
2955
|
}
|
|
2956
2956
|
const port = snapPort(candidate.bounds, point, unitsPerPx);
|
|
2957
2957
|
return {
|
|
2958
|
-
point:
|
|
2958
|
+
point: chunkUHKFJBY5_cjs.pointAtPort(candidate.bounds, port),
|
|
2959
2959
|
side: port.side,
|
|
2960
2960
|
hit: { owner: candidate.owner, side: port.side, offset: port.offset },
|
|
2961
2961
|
bounds: candidate.bounds
|
|
@@ -2979,7 +2979,7 @@ var LinkEndpointSession = class {
|
|
|
2979
2979
|
this.#emitter = emitter;
|
|
2980
2980
|
}
|
|
2981
2981
|
pointerDown = (event) => {
|
|
2982
|
-
if (event.button !== 0 || this.#drag ||
|
|
2982
|
+
if (event.button !== 0 || this.#drag || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
2983
2983
|
return;
|
|
2984
2984
|
}
|
|
2985
2985
|
this.#drag = createLinkEndpointDragState(this.#svg, event);
|
|
@@ -2993,7 +2993,7 @@ var LinkEndpointSession = class {
|
|
|
2993
2993
|
return;
|
|
2994
2994
|
}
|
|
2995
2995
|
drag.moved = true;
|
|
2996
|
-
const target = resolveEndpointTarget(drag, endpointPointerPosition(this.#svg, event), 1 /
|
|
2996
|
+
const target = resolveEndpointTarget(drag, endpointPointerPosition(this.#svg, event), 1 / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg));
|
|
2997
2997
|
updateEndpointPreview(drag, target.point, target.side);
|
|
2998
2998
|
drag.ghost.show(target.hit !== null, target.bounds);
|
|
2999
2999
|
};
|
|
@@ -3107,7 +3107,7 @@ var LinkSegmentSession = class {
|
|
|
3107
3107
|
this.#emitter = emitter;
|
|
3108
3108
|
}
|
|
3109
3109
|
pointerDown = (event) => {
|
|
3110
|
-
if (event.button !== 0 || this.#drag ||
|
|
3110
|
+
if (event.button !== 0 || this.#drag || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
3111
3111
|
return;
|
|
3112
3112
|
}
|
|
3113
3113
|
const target = event.target;
|
|
@@ -3117,12 +3117,12 @@ var LinkSegmentSession = class {
|
|
|
3117
3117
|
if (!handle || !overlay || !linkId) {
|
|
3118
3118
|
return;
|
|
3119
3119
|
}
|
|
3120
|
-
const path =
|
|
3121
|
-
const owner = path &&
|
|
3120
|
+
const path = chunkWZA3DJJH_cjs.findOwnerNode(this.#svg, linkId, chunkWZA3DJJH_cjs.isPrimary);
|
|
3121
|
+
const owner = path && chunkWZA3DJJH_cjs.resolveOwner(path);
|
|
3122
3122
|
const index = Number(handle.getAttribute("data-sf-link-segment"));
|
|
3123
3123
|
const segments = path ? parseSegments(path) : [];
|
|
3124
3124
|
const segment = segments[index];
|
|
3125
|
-
const point =
|
|
3125
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
3126
3126
|
if (!path || !owner || !segment || !point) {
|
|
3127
3127
|
return;
|
|
3128
3128
|
}
|
|
@@ -3130,7 +3130,7 @@ var LinkSegmentSession = class {
|
|
|
3130
3130
|
const guide = document.createElementNS(SVG_NAMESPACE2, "line");
|
|
3131
3131
|
guide.setAttribute("stroke", GUIDE_COLOR);
|
|
3132
3132
|
guide.setAttribute("stroke-dasharray", "4 4");
|
|
3133
|
-
guide.setAttribute("stroke-width", String(1 /
|
|
3133
|
+
guide.setAttribute("stroke-width", String(1 / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg)));
|
|
3134
3134
|
guide.setAttribute("visibility", "hidden");
|
|
3135
3135
|
overlay.appendChild(guide);
|
|
3136
3136
|
handle.setPointerCapture?.(event.pointerId);
|
|
@@ -3165,7 +3165,7 @@ var LinkSegmentSession = class {
|
|
|
3165
3165
|
return;
|
|
3166
3166
|
}
|
|
3167
3167
|
drag.moved = true;
|
|
3168
|
-
const point =
|
|
3168
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
3169
3169
|
if (!point) {
|
|
3170
3170
|
return;
|
|
3171
3171
|
}
|
|
@@ -3191,8 +3191,8 @@ var LinkSegmentSession = class {
|
|
|
3191
3191
|
doubleClick = (event) => {
|
|
3192
3192
|
const handle = event.target?.closest("[data-sf-link-segment]");
|
|
3193
3193
|
const linkId = handle?.closest("[data-sf-selection-overlay]")?.getAttribute("data-sf-selection-overlay");
|
|
3194
|
-
const path = linkId ?
|
|
3195
|
-
const owner = path &&
|
|
3194
|
+
const path = linkId ? chunkWZA3DJJH_cjs.findOwnerNode(this.#svg, linkId, chunkWZA3DJJH_cjs.isPrimary) : null;
|
|
3195
|
+
const owner = path && chunkWZA3DJJH_cjs.resolveOwner(path);
|
|
3196
3196
|
if (!handle || !owner) {
|
|
3197
3197
|
return;
|
|
3198
3198
|
}
|
|
@@ -3215,7 +3215,7 @@ var LinkSegmentSession = class {
|
|
|
3215
3215
|
if (isSnapDisabled(this.#svg)) {
|
|
3216
3216
|
return { value: raw, snapped: null };
|
|
3217
3217
|
}
|
|
3218
|
-
const threshold = SNAP_PX /
|
|
3218
|
+
const threshold = SNAP_PX / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg);
|
|
3219
3219
|
let best = null;
|
|
3220
3220
|
for (const candidate of [drag.base, ...drag.candidates]) {
|
|
3221
3221
|
const closer = best === null || Math.abs(candidate - raw) < Math.abs(best - raw);
|
|
@@ -3228,7 +3228,7 @@ var LinkSegmentSession = class {
|
|
|
3228
3228
|
#preview(drag, snapped) {
|
|
3229
3229
|
const next = movedSegments(drag, drag.value);
|
|
3230
3230
|
const strokeWidth = Number(drag.path.getAttribute("stroke-width")) || 2;
|
|
3231
|
-
const data =
|
|
3231
|
+
const data = chunkUHKFJBY5_cjs.roundedOrthogonalPathData(pathSegments(next), Math.max(16, strokeWidth * 4));
|
|
3232
3232
|
drag.path.setAttribute("d", data);
|
|
3233
3233
|
drag.overlay.querySelector("path")?.setAttribute("d", data);
|
|
3234
3234
|
const segment = next[drag.index];
|
|
@@ -3402,8 +3402,8 @@ function nearestCandidates(bounds, candidates, limit = 50) {
|
|
|
3402
3402
|
|
|
3403
3403
|
// src/runtime/interaction/snapping/isometricDiagonal.ts
|
|
3404
3404
|
var AXES2 = [
|
|
3405
|
-
{ x:
|
|
3406
|
-
{ x: -
|
|
3405
|
+
{ x: chunkUHKFJBY5_cjs.AXIS_COS, y: chunkUHKFJBY5_cjs.AXIS_SIN },
|
|
3406
|
+
{ x: -chunkUHKFJBY5_cjs.AXIS_COS, y: chunkUHKFJBY5_cjs.AXIS_SIN }
|
|
3407
3407
|
];
|
|
3408
3408
|
var GUIDE_OVERHANG = 40;
|
|
3409
3409
|
function snapIsometricDiagonal(apex, rawDx, rawDy, candidates, threshold) {
|
|
@@ -3471,13 +3471,13 @@ function isometricApexOf(svg, drag, declared = false) {
|
|
|
3471
3471
|
if (lead.owner.role !== "isometric") {
|
|
3472
3472
|
return null;
|
|
3473
3473
|
}
|
|
3474
|
-
const primary =
|
|
3475
|
-
const geometry = primary &&
|
|
3474
|
+
const primary = chunkWZA3DJJH_cjs.findOwnerNode(svg, lead.owner.id, chunkWZA3DJJH_cjs.isPrimary);
|
|
3475
|
+
const geometry = primary && chunkWZA3DJJH_cjs.isometricGeometryOf(primary);
|
|
3476
3476
|
if (!geometry) {
|
|
3477
3477
|
return null;
|
|
3478
3478
|
}
|
|
3479
3479
|
const frame = declared && geometry.bounds ? geometry.bounds : lead.draggedBounds;
|
|
3480
|
-
return { x: frame.x + geometry.depth *
|
|
3480
|
+
return { x: frame.x + geometry.depth * chunkUHKFJBY5_cjs.AXIS_COS, y: frame.y };
|
|
3481
3481
|
}
|
|
3482
3482
|
function snapIsometricGrid(svg, drag, rawDx, rawDy) {
|
|
3483
3483
|
const step = readIsometricSnapStep(svg);
|
|
@@ -3494,8 +3494,8 @@ function snapIsometricMove(svg, drag, rawDx, rawDy) {
|
|
|
3494
3494
|
return null;
|
|
3495
3495
|
}
|
|
3496
3496
|
const excludedIds = new Set(drag.canvasObjects.map((canvasObject) => canvasObject.owner.id));
|
|
3497
|
-
const candidates =
|
|
3498
|
-
const snap = snapIsometricDiagonal(apex, rawDx, rawDy, candidates, snapDistancePx(svg) /
|
|
3497
|
+
const candidates = chunkWZA3DJJH_cjs.findIsometricApexCandidates(svg, excludedIds);
|
|
3498
|
+
const snap = snapIsometricDiagonal(apex, rawDx, rawDy, candidates, snapDistancePx(svg) / chunkWZA3DJJH_cjs.pxPerUnit(svg));
|
|
3499
3499
|
return snap ? { dx: snap.dx, dy: snap.dy, guides: [snap.guide] } : null;
|
|
3500
3500
|
}
|
|
3501
3501
|
function snapMove(svg, drag, rawDx, rawDy) {
|
|
@@ -3512,9 +3512,9 @@ function snapMove(svg, drag, rawDx, rawDy) {
|
|
|
3512
3512
|
}
|
|
3513
3513
|
const leadBounds = offsetBounds(drag.canvasObjects[0].draggedBounds, rawDx, rawDy);
|
|
3514
3514
|
const excludedIds = new Set(drag.canvasObjects.map((canvasObject) => canvasObject.owner.id));
|
|
3515
|
-
const candidates = nearestCandidates(leadBounds,
|
|
3515
|
+
const candidates = nearestCandidates(leadBounds, chunkWZA3DJJH_cjs.findSnapCandidateBounds(svg, excludedIds));
|
|
3516
3516
|
const snap = computeSnap(leadBounds, candidates, {
|
|
3517
|
-
threshold: snapDistancePx(svg) /
|
|
3517
|
+
threshold: snapDistancePx(svg) / chunkWZA3DJJH_cjs.pxPerUnit(svg),
|
|
3518
3518
|
activeX: MOVE_ACTIVE_POINTS,
|
|
3519
3519
|
activeY: MOVE_ACTIVE_POINTS,
|
|
3520
3520
|
guideOverhang: GUIDE_OVERHANG2
|
|
@@ -3575,7 +3575,7 @@ function isCompositeOwner(owner) {
|
|
|
3575
3575
|
return owner !== null && owner !== void 0 && COMPOSITE_ROLES.has(owner.role);
|
|
3576
3576
|
}
|
|
3577
3577
|
function hasDerivedHeight(owner) {
|
|
3578
|
-
return owner !== null && owner !== void 0 &&
|
|
3578
|
+
return owner !== null && owner !== void 0 && chunkWZA3DJJH_cjs.DERIVED_HEIGHT_ROLES.has(owner.role);
|
|
3579
3579
|
}
|
|
3580
3580
|
|
|
3581
3581
|
// src/runtime/interaction/move/canvasObjectCapture.ts
|
|
@@ -3596,7 +3596,7 @@ function parentContainerBounds(svg, primary, groupIds) {
|
|
|
3596
3596
|
if (!parentId || groupIds.has(parentId)) {
|
|
3597
3597
|
return void 0;
|
|
3598
3598
|
}
|
|
3599
|
-
const container =
|
|
3599
|
+
const container = chunkWZA3DJJH_cjs.findOwnerNode(svg, parentId, chunkWZA3DJJH_cjs.isPrimary);
|
|
3600
3600
|
if (!container) {
|
|
3601
3601
|
return void 0;
|
|
3602
3602
|
}
|
|
@@ -3604,14 +3604,14 @@ function parentContainerBounds(svg, primary, groupIds) {
|
|
|
3604
3604
|
return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };
|
|
3605
3605
|
}
|
|
3606
3606
|
function captureCanvasObject(svg, owner, groupIds) {
|
|
3607
|
-
const nodes =
|
|
3608
|
-
const primary =
|
|
3607
|
+
const nodes = chunkWZA3DJJH_cjs.findAllOwnerNodes(svg, owner.id);
|
|
3608
|
+
const primary = chunkWZA3DJJH_cjs.findOwnerNode(svg, owner.id, chunkWZA3DJJH_cjs.isPrimary);
|
|
3609
3609
|
if (!nodes.length || !primary) {
|
|
3610
3610
|
return null;
|
|
3611
3611
|
}
|
|
3612
3612
|
const overlays = [...svg.querySelectorAll(`[data-sf-selection-overlay="${CSS.escape(owner.id)}"]`)];
|
|
3613
3613
|
const draggedBounds = primary.getBBox();
|
|
3614
|
-
const isometricGeometry = owner.role === "isometric" ?
|
|
3614
|
+
const isometricGeometry = owner.role === "isometric" ? chunkWZA3DJJH_cjs.isometricGeometryOf(primary) : null;
|
|
3615
3615
|
const isometricSize = isometricGeometry ? { width: isometricGeometry.width, height: isometricGeometry.height, depth: isometricGeometry.depth } : void 0;
|
|
3616
3616
|
return {
|
|
3617
3617
|
owner,
|
|
@@ -3653,7 +3653,7 @@ function captureInternalLinks(svg, groupIds) {
|
|
|
3653
3653
|
if (!linkId || !belongsToMoveGroup(path, groupIds)) {
|
|
3654
3654
|
continue;
|
|
3655
3655
|
}
|
|
3656
|
-
const nodes =
|
|
3656
|
+
const nodes = chunkWZA3DJJH_cjs.findAllOwnerNodes(svg, linkId);
|
|
3657
3657
|
if (nodes.length) {
|
|
3658
3658
|
links.push({ nodes, baseTransforms: nodes.map((node) => node.getAttribute("transform")) });
|
|
3659
3659
|
}
|
|
@@ -3687,7 +3687,7 @@ function containedChildren(viewer, owner) {
|
|
|
3687
3687
|
return [];
|
|
3688
3688
|
}
|
|
3689
3689
|
const nodes = viewer.svg.querySelectorAll(`[data-sf-parent-frame="${CSS.escape(owner.id)}"]`);
|
|
3690
|
-
return [...nodes].map((node) =>
|
|
3690
|
+
return [...nodes].map((node) => chunkWZA3DJJH_cjs.resolveOwner(node)).filter((ref) => ref !== null);
|
|
3691
3691
|
}
|
|
3692
3692
|
function selectedMoveGroup(viewer, owner) {
|
|
3693
3693
|
const selection = viewer.getSelection();
|
|
@@ -3704,7 +3704,7 @@ function isChartInteractiveMark(target) {
|
|
|
3704
3704
|
}
|
|
3705
3705
|
function createMoveDragState(viewer, event, startUser) {
|
|
3706
3706
|
const target = event.target;
|
|
3707
|
-
const owner =
|
|
3707
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(target);
|
|
3708
3708
|
if (!hasMovableGeometry(owner) || isChartInteractiveMark(target)) {
|
|
3709
3709
|
return null;
|
|
3710
3710
|
}
|
|
@@ -3738,7 +3738,7 @@ var MoveSession = class {
|
|
|
3738
3738
|
this.#emitter = emitter;
|
|
3739
3739
|
}
|
|
3740
3740
|
pointerDown = (event) => {
|
|
3741
|
-
if (event.button !== 0 || this.#drag ||
|
|
3741
|
+
if (event.button !== 0 || this.#drag || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
3742
3742
|
return;
|
|
3743
3743
|
}
|
|
3744
3744
|
this.#drag = createMoveDragState(this.#viewer, event, movePointerPosition(this.#svg, event));
|
|
@@ -3756,7 +3756,7 @@ var MoveSession = class {
|
|
|
3756
3756
|
const delta = snapMove(this.#svg, drag, rawDelta.dx, rawDelta.dy);
|
|
3757
3757
|
const clamped = clampMoveDelta(drag.canvasObjects, delta.dx, delta.dy);
|
|
3758
3758
|
applyMovePreview(drag, clamped.dx, clamped.dy);
|
|
3759
|
-
|
|
3759
|
+
chunkWZA3DJJH_cjs.updateAlignmentGuides(this.#svg, delta.guides, MOVE_GUIDE_COLOR);
|
|
3760
3760
|
};
|
|
3761
3761
|
pointerUp = (event) => {
|
|
3762
3762
|
const drag = this.#drag;
|
|
@@ -3765,7 +3765,7 @@ var MoveSession = class {
|
|
|
3765
3765
|
}
|
|
3766
3766
|
this.#drag = null;
|
|
3767
3767
|
event.target.releasePointerCapture?.(drag.pointerId);
|
|
3768
|
-
|
|
3768
|
+
chunkWZA3DJJH_cjs.clearAlignmentGuides(this.#svg);
|
|
3769
3769
|
emitMoveCompletion(this.#svg, this.#emitter, drag, event);
|
|
3770
3770
|
};
|
|
3771
3771
|
cancel() {
|
|
@@ -3911,9 +3911,9 @@ var START_POINT_RADIUS_PX = 6;
|
|
|
3911
3911
|
var POINT_STROKE_WIDTH_PX = 1.5;
|
|
3912
3912
|
function createPathDrawPreview(svg) {
|
|
3913
3913
|
const document2 = svg.ownerDocument;
|
|
3914
|
-
const group = document2.createElementNS(
|
|
3914
|
+
const group = document2.createElementNS(chunkWZA3DJJH_cjs.SVG_NAMESPACE, "g");
|
|
3915
3915
|
group.setAttribute("pointer-events", "none");
|
|
3916
|
-
const line = document2.createElementNS(
|
|
3916
|
+
const line = document2.createElementNS(chunkWZA3DJJH_cjs.SVG_NAMESPACE, "path");
|
|
3917
3917
|
line.setAttribute("fill", "none");
|
|
3918
3918
|
line.setAttribute("stroke", PREVIEW_COLOR);
|
|
3919
3919
|
line.setAttribute("stroke-linecap", "round");
|
|
@@ -3923,8 +3923,8 @@ function createPathDrawPreview(svg) {
|
|
|
3923
3923
|
}
|
|
3924
3924
|
function pointMarker(svg, point, highlighted) {
|
|
3925
3925
|
const document2 = svg.ownerDocument;
|
|
3926
|
-
const unit = 1 /
|
|
3927
|
-
const circle = document2.createElementNS(
|
|
3926
|
+
const unit = 1 / chunkWZA3DJJH_cjs.pxPerUnit(svg);
|
|
3927
|
+
const circle = document2.createElementNS(chunkWZA3DJJH_cjs.SVG_NAMESPACE, "circle");
|
|
3928
3928
|
circle.setAttribute("cx", String(point.x));
|
|
3929
3929
|
circle.setAttribute("cy", String(point.y));
|
|
3930
3930
|
circle.setAttribute("r", String((highlighted ? START_POINT_RADIUS_PX : POINT_RADIUS_PX) * unit));
|
|
@@ -3938,11 +3938,11 @@ function updatePathDrawPreview(svg, state) {
|
|
|
3938
3938
|
if (!previewLine || !previewGroup) {
|
|
3939
3939
|
return;
|
|
3940
3940
|
}
|
|
3941
|
-
const unit = 1 /
|
|
3941
|
+
const unit = 1 / chunkWZA3DJJH_cjs.pxPerUnit(svg);
|
|
3942
3942
|
previewLine.setAttribute("stroke-width", String(LINE_WIDTH_PX * unit));
|
|
3943
3943
|
previewLine.setAttribute("stroke-dasharray", `${DASH_PX * unit} ${GAP_PX * unit}`);
|
|
3944
3944
|
const live = state.cursor ? [...state.points, state.cursor] : state.points;
|
|
3945
|
-
previewLine.setAttribute("d",
|
|
3945
|
+
previewLine.setAttribute("d", chunkUHKFJBY5_cjs.freeformPathData({ points: live, tension: state.tension, closed: false }));
|
|
3946
3946
|
while (previewGroup.childNodes.length > 1) {
|
|
3947
3947
|
previewGroup.lastChild?.remove();
|
|
3948
3948
|
}
|
|
@@ -4002,12 +4002,12 @@ var PathDrawSession = class {
|
|
|
4002
4002
|
}
|
|
4003
4003
|
}
|
|
4004
4004
|
pointerDown = (event) => {
|
|
4005
|
-
if (!this.#state.active || event.button !== 0 ||
|
|
4005
|
+
if (!this.#state.active || event.button !== 0 || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
4006
4006
|
return;
|
|
4007
4007
|
}
|
|
4008
4008
|
event.stopPropagation();
|
|
4009
4009
|
event.preventDefault();
|
|
4010
|
-
const point =
|
|
4010
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
4011
4011
|
if (!point) {
|
|
4012
4012
|
return;
|
|
4013
4013
|
}
|
|
@@ -4026,14 +4026,14 @@ var PathDrawSession = class {
|
|
|
4026
4026
|
this.#state.cursor = resolved.point;
|
|
4027
4027
|
this.#state.willClose = false;
|
|
4028
4028
|
updatePathDrawPreview(this.#svg, this.#state);
|
|
4029
|
-
|
|
4029
|
+
chunkWZA3DJJH_cjs.clearAlignmentGuides(this.#svg);
|
|
4030
4030
|
};
|
|
4031
4031
|
pointerMove = (event) => {
|
|
4032
4032
|
if (!this.#state.active) {
|
|
4033
4033
|
return;
|
|
4034
4034
|
}
|
|
4035
4035
|
event.stopPropagation();
|
|
4036
|
-
const point =
|
|
4036
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
4037
4037
|
if (!point) {
|
|
4038
4038
|
return;
|
|
4039
4039
|
}
|
|
@@ -4042,9 +4042,9 @@ var PathDrawSession = class {
|
|
|
4042
4042
|
this.#state.willClose = resolved.willClose;
|
|
4043
4043
|
updatePathDrawPreview(this.#svg, this.#state);
|
|
4044
4044
|
if (resolved.guide) {
|
|
4045
|
-
|
|
4045
|
+
chunkWZA3DJJH_cjs.updateAlignmentGuides(this.#svg, [resolved.guide], GUIDE_COLOR2);
|
|
4046
4046
|
} else {
|
|
4047
|
-
|
|
4047
|
+
chunkWZA3DJJH_cjs.clearAlignmentGuides(this.#svg);
|
|
4048
4048
|
}
|
|
4049
4049
|
};
|
|
4050
4050
|
pointerUp = (event) => {
|
|
@@ -4079,10 +4079,10 @@ var PathDrawSession = class {
|
|
|
4079
4079
|
} else if (event.key === "Backspace" && this.#state.points.length > 0) {
|
|
4080
4080
|
event.preventDefault();
|
|
4081
4081
|
this.#state.points = this.#state.points.slice(0, -1);
|
|
4082
|
-
const closeSnapUnits = CLOSE_SNAP_PX /
|
|
4082
|
+
const closeSnapUnits = CLOSE_SNAP_PX / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg);
|
|
4083
4083
|
this.#state.willClose = this.#state.cursor ? isCloseToStart(this.#state.points, this.#state.cursor, closeSnapUnits) : false;
|
|
4084
4084
|
updatePathDrawPreview(this.#svg, this.#state);
|
|
4085
|
-
|
|
4085
|
+
chunkWZA3DJJH_cjs.clearAlignmentGuides(this.#svg);
|
|
4086
4086
|
}
|
|
4087
4087
|
};
|
|
4088
4088
|
keyUp = (event) => {
|
|
@@ -4091,7 +4091,7 @@ var PathDrawSession = class {
|
|
|
4091
4091
|
}
|
|
4092
4092
|
};
|
|
4093
4093
|
#resolvePoint(raw) {
|
|
4094
|
-
const closeSnapUnits = CLOSE_SNAP_PX /
|
|
4094
|
+
const closeSnapUnits = CLOSE_SNAP_PX / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg);
|
|
4095
4095
|
if (isCloseToStart(this.#state.points, raw, closeSnapUnits)) {
|
|
4096
4096
|
return { point: this.#state.points[0], willClose: true, guide: null };
|
|
4097
4097
|
}
|
|
@@ -4101,7 +4101,7 @@ var PathDrawSession = class {
|
|
|
4101
4101
|
return { point: raw, willClose: false, guide: null };
|
|
4102
4102
|
}
|
|
4103
4103
|
const angleSnapped = snapTo45Degrees(last, raw);
|
|
4104
|
-
const guideSnapUnits = GUIDE_SNAP_PX /
|
|
4104
|
+
const guideSnapUnits = GUIDE_SNAP_PX / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg);
|
|
4105
4105
|
const { point, guide } = snapToSessionGuides(last, angleSnapped, points.slice(0, -1), raw, guideSnapUnits);
|
|
4106
4106
|
return { point, willClose: false, guide };
|
|
4107
4107
|
}
|
|
@@ -4115,7 +4115,7 @@ var PathDrawSession = class {
|
|
|
4115
4115
|
}
|
|
4116
4116
|
#reset(callExit) {
|
|
4117
4117
|
this.#state.previewGroup?.remove();
|
|
4118
|
-
|
|
4118
|
+
chunkWZA3DJJH_cjs.clearAlignmentGuides(this.#svg);
|
|
4119
4119
|
const exit = this.#state.onExit;
|
|
4120
4120
|
this.#state = createIdlePathDrawState();
|
|
4121
4121
|
this.#shiftHeld = false;
|
|
@@ -4158,7 +4158,7 @@ function applyPathReshapePreview(drag, point) {
|
|
|
4158
4158
|
const points = drag.points.map(
|
|
4159
4159
|
(existing, index) => index === drag.pointIndex ? [point.x, point.y] : existing
|
|
4160
4160
|
);
|
|
4161
|
-
const d =
|
|
4161
|
+
const d = chunkUHKFJBY5_cjs.freeformPathData({
|
|
4162
4162
|
points: points.map(([x, y]) => ({ x, y })),
|
|
4163
4163
|
tension: drag.tension,
|
|
4164
4164
|
closed: drag.closed
|
|
@@ -4166,22 +4166,22 @@ function applyPathReshapePreview(drag, point) {
|
|
|
4166
4166
|
drag.pathNode.setAttribute("d", d);
|
|
4167
4167
|
drag.handle.setAttribute("cx", String(point.x));
|
|
4168
4168
|
drag.handle.setAttribute("cy", String(point.y));
|
|
4169
|
-
drag.overlay?.querySelector(`[${
|
|
4169
|
+
drag.overlay?.querySelector(`[${chunkWZA3DJJH_cjs.PATH_HALO_ATTR}]`)?.setAttribute("d", d);
|
|
4170
4170
|
return points;
|
|
4171
4171
|
}
|
|
4172
4172
|
|
|
4173
4173
|
// src/runtime/interaction/pathReshape/target.ts
|
|
4174
4174
|
function resolvePathReshapeTarget(svg, event) {
|
|
4175
|
-
const handle = event.target?.closest?.(`[${
|
|
4176
|
-
const indexAttr = handle?.getAttribute(
|
|
4175
|
+
const handle = event.target?.closest?.(`[${chunkUHKFJBY5_cjs.PATH_POINT_INDEX_ATTR}]`) ?? null;
|
|
4176
|
+
const indexAttr = handle?.getAttribute(chunkUHKFJBY5_cjs.PATH_POINT_INDEX_ATTR) ?? null;
|
|
4177
4177
|
const pointIndex = indexAttr !== null ? Number(indexAttr) : Number.NaN;
|
|
4178
4178
|
const ownerId = handle?.closest("[data-sf-selection-overlay]")?.getAttribute("data-sf-selection-overlay");
|
|
4179
4179
|
if (!handle || !Number.isInteger(pointIndex) || !ownerId) {
|
|
4180
4180
|
return null;
|
|
4181
4181
|
}
|
|
4182
|
-
const pathNode =
|
|
4183
|
-
const owner = pathNode &&
|
|
4184
|
-
const geometry = pathNode &&
|
|
4182
|
+
const pathNode = chunkWZA3DJJH_cjs.findOwnerNode(svg, ownerId, chunkWZA3DJJH_cjs.isPrimary);
|
|
4183
|
+
const owner = pathNode && chunkWZA3DJJH_cjs.resolveOwner(pathNode);
|
|
4184
|
+
const geometry = pathNode && chunkWZA3DJJH_cjs.pathGeometryOf(pathNode);
|
|
4185
4185
|
if (!pathNode || !owner || !geometry || pointIndex < 0 || pointIndex >= geometry.points.length) {
|
|
4186
4186
|
return null;
|
|
4187
4187
|
}
|
|
@@ -4224,7 +4224,7 @@ var PathReshapeSession = class {
|
|
|
4224
4224
|
this.#emitter = emitter;
|
|
4225
4225
|
}
|
|
4226
4226
|
pointerDown = (event) => {
|
|
4227
|
-
if (event.button !== 0 || this.#drag ||
|
|
4227
|
+
if (event.button !== 0 || this.#drag || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
4228
4228
|
return;
|
|
4229
4229
|
}
|
|
4230
4230
|
this.#drag = createPathReshapeDragState(this.#svg, event);
|
|
@@ -4235,7 +4235,7 @@ var PathReshapeSession = class {
|
|
|
4235
4235
|
return;
|
|
4236
4236
|
}
|
|
4237
4237
|
drag.moved = true;
|
|
4238
|
-
const point =
|
|
4238
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
4239
4239
|
if (point) {
|
|
4240
4240
|
applyPathReshapePreview(drag, point);
|
|
4241
4241
|
}
|
|
@@ -4250,7 +4250,7 @@ var PathReshapeSession = class {
|
|
|
4250
4250
|
if (!drag.moved) {
|
|
4251
4251
|
return;
|
|
4252
4252
|
}
|
|
4253
|
-
const point =
|
|
4253
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event) ?? {
|
|
4254
4254
|
x: drag.points[drag.pointIndex][0],
|
|
4255
4255
|
y: drag.points[drag.pointIndex][1]
|
|
4256
4256
|
};
|
|
@@ -4291,7 +4291,7 @@ function updatePieLabelDragPreview(drag, dx, dy) {
|
|
|
4291
4291
|
}
|
|
4292
4292
|
const from = { x: drag.tickStartX, y: drag.tickStartY };
|
|
4293
4293
|
const to = { x: drag.restX + dx, y: drag.restY + dy };
|
|
4294
|
-
const clipped =
|
|
4294
|
+
const clipped = chunkUHKFJBY5_cjs.clipSegmentToRect(from, to, drag.halfWidth, drag.halfHeight);
|
|
4295
4295
|
drag.tickElement.setAttribute("d", `M ${from.x} ${from.y} L ${clipped.x} ${clipped.y}`);
|
|
4296
4296
|
drag.tickElement.setAttribute("stroke", PREVIEW_TICK_COLOR);
|
|
4297
4297
|
drag.tickElement.setAttribute("stroke-width", PREVIEW_TICK_STROKE_WIDTH);
|
|
@@ -4317,7 +4317,7 @@ function restoreAttribute(element2, name, value) {
|
|
|
4317
4317
|
|
|
4318
4318
|
// src/runtime/interaction/pieGeometry.ts
|
|
4319
4319
|
function readPieGeometry(svg, ownerId) {
|
|
4320
|
-
const raw =
|
|
4320
|
+
const raw = chunkWZA3DJJH_cjs.findOwnerNode(svg, ownerId, chunkWZA3DJJH_cjs.isPrimary)?.getAttribute("data-sf-pie-geometry");
|
|
4321
4321
|
if (!raw) {
|
|
4322
4322
|
return null;
|
|
4323
4323
|
}
|
|
@@ -4336,7 +4336,7 @@ function findLabelMark2(event) {
|
|
|
4336
4336
|
return event.target?.closest?.(selector);
|
|
4337
4337
|
}
|
|
4338
4338
|
function isLabelPointer2(event) {
|
|
4339
|
-
return event.button === 0 && !
|
|
4339
|
+
return event.button === 0 && !chunkWZA3DJJH_cjs.isCameraGesture(event);
|
|
4340
4340
|
}
|
|
4341
4341
|
function findLabelSiblings(svg, ownerId, seriesId, mark) {
|
|
4342
4342
|
const selector = `[data-sf-id="${CSS.escape(ownerId)}"][data-sf-series="${CSS.escape(seriesId)}"][data-sf-mark="${mark}"]`;
|
|
@@ -4368,7 +4368,7 @@ function resolvePieLabelDrag(svg, event) {
|
|
|
4368
4368
|
if (!clicked) {
|
|
4369
4369
|
return null;
|
|
4370
4370
|
}
|
|
4371
|
-
const owner =
|
|
4371
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(clicked);
|
|
4372
4372
|
if (owner?.role !== "chart") {
|
|
4373
4373
|
return null;
|
|
4374
4374
|
}
|
|
@@ -4387,7 +4387,7 @@ function resolvePieLabelDrag(svg, event) {
|
|
|
4387
4387
|
const wedgeRadius = clicked.getAttribute("data-sf-pie-wedge-radius");
|
|
4388
4388
|
const explicitRadius = wedgeRadius === null ? Number.NaN : Number(wedgeRadius);
|
|
4389
4389
|
const outerRadius = Number.isFinite(explicitRadius) ? explicitRadius : geometry.outerRadius;
|
|
4390
|
-
const start =
|
|
4390
|
+
const start = chunkWZA3DJJH_cjs.pointerUserPoint(svg, event);
|
|
4391
4391
|
if (!start) {
|
|
4392
4392
|
return null;
|
|
4393
4393
|
}
|
|
@@ -4409,13 +4409,13 @@ function resolvePieLabelDrag(svg, event) {
|
|
|
4409
4409
|
outerRadius,
|
|
4410
4410
|
anchorX: geometry.centerX + outerRadius * Math.cos(midAngle),
|
|
4411
4411
|
anchorY: geometry.centerY + outerRadius * Math.sin(midAngle),
|
|
4412
|
-
tickStartX: geometry.centerX + (outerRadius +
|
|
4413
|
-
tickStartY: geometry.centerY + (outerRadius +
|
|
4412
|
+
tickStartX: geometry.centerX + (outerRadius + chunkUHKFJBY5_cjs.LEADER_INSET) * Math.cos(midAngle),
|
|
4413
|
+
tickStartY: geometry.centerY + (outerRadius + chunkUHKFJBY5_cjs.LEADER_INSET) * Math.sin(midAngle),
|
|
4414
4414
|
restX,
|
|
4415
4415
|
restY,
|
|
4416
4416
|
startX: start.x,
|
|
4417
4417
|
startY: start.y,
|
|
4418
|
-
halfWidth:
|
|
4418
|
+
halfWidth: chunkUHKFJBY5_cjs.LABEL_WIDTH / 2,
|
|
4419
4419
|
halfHeight: fontSize * 1.2,
|
|
4420
4420
|
moved: false,
|
|
4421
4421
|
lastDx: 0,
|
|
@@ -4451,7 +4451,7 @@ var PieLabelDragSession = class {
|
|
|
4451
4451
|
if (!this.#drag || event.pointerId !== this.#drag.pointerId) {
|
|
4452
4452
|
return;
|
|
4453
4453
|
}
|
|
4454
|
-
const point =
|
|
4454
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
4455
4455
|
if (!point) {
|
|
4456
4456
|
return;
|
|
4457
4457
|
}
|
|
@@ -4483,8 +4483,8 @@ var PieLabelDragSession = class {
|
|
|
4483
4483
|
if (!drag.moved) {
|
|
4484
4484
|
return;
|
|
4485
4485
|
}
|
|
4486
|
-
const pathX =
|
|
4487
|
-
const pathY =
|
|
4486
|
+
const pathX = chunkUHKFJBY5_cjs.seriesLabelOffsetXProp(drag.seriesId);
|
|
4487
|
+
const pathY = chunkUHKFJBY5_cjs.seriesLabelOffsetYProp(drag.seriesId);
|
|
4488
4488
|
if (!pathX || !pathY) {
|
|
4489
4489
|
return;
|
|
4490
4490
|
}
|
|
@@ -4546,7 +4546,7 @@ function siblingNodes(svg, owner, path) {
|
|
|
4546
4546
|
});
|
|
4547
4547
|
}
|
|
4548
4548
|
function resolvePropertyDrag(svg, event, rules) {
|
|
4549
|
-
if (event.button !== 0 ||
|
|
4549
|
+
if (event.button !== 0 || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
4550
4550
|
return null;
|
|
4551
4551
|
}
|
|
4552
4552
|
const node = event.target?.closest?.('[data-sf-prop-kind="value"]');
|
|
@@ -4554,11 +4554,11 @@ function resolvePropertyDrag(svg, event, rules) {
|
|
|
4554
4554
|
return null;
|
|
4555
4555
|
}
|
|
4556
4556
|
const path = node.getAttribute("data-sf-prop");
|
|
4557
|
-
const owner =
|
|
4557
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(node);
|
|
4558
4558
|
if (!path || owner?.role !== "chart" || !isEditablePath(path, rules)) {
|
|
4559
4559
|
return null;
|
|
4560
4560
|
}
|
|
4561
|
-
const scale = parseValueScale(
|
|
4561
|
+
const scale = parseValueScale(chunkWZA3DJJH_cjs.findOwnerNode(svg, owner.id, chunkWZA3DJJH_cjs.isPrimary));
|
|
4562
4562
|
if (!scale) {
|
|
4563
4563
|
return null;
|
|
4564
4564
|
}
|
|
@@ -4827,7 +4827,7 @@ function resolvePropertyTarget(event, rules) {
|
|
|
4827
4827
|
return null;
|
|
4828
4828
|
}
|
|
4829
4829
|
const path = hit.getAttribute("data-sf-prop");
|
|
4830
|
-
const owner =
|
|
4830
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(hit);
|
|
4831
4831
|
if (!path || !owner || !isEditablePath(path, rules)) {
|
|
4832
4832
|
return null;
|
|
4833
4833
|
}
|
|
@@ -4866,7 +4866,7 @@ var PropertyEditingSession = class {
|
|
|
4866
4866
|
begin(target) {
|
|
4867
4867
|
this.cancel();
|
|
4868
4868
|
const { node } = target;
|
|
4869
|
-
const rect =
|
|
4869
|
+
const rect = chunkWZA3DJJH_cjs.screenRectOf(node);
|
|
4870
4870
|
const fontSize = Number.parseFloat(node.getAttribute("font-size") || "12");
|
|
4871
4871
|
const originalText = node.textContent ?? "";
|
|
4872
4872
|
const anchor = node.getAttribute("text-anchor");
|
|
@@ -4956,15 +4956,15 @@ function crossedDuplicateDragThreshold(drag, event) {
|
|
|
4956
4956
|
var PREVIEW_STROKE_PX = 2;
|
|
4957
4957
|
var NEW_LINK_PATH_TYPE = "orthogonal";
|
|
4958
4958
|
function createDuplicatePreviewPath(svg) {
|
|
4959
|
-
const path = svg.ownerDocument.createElementNS(
|
|
4959
|
+
const path = svg.ownerDocument.createElementNS(chunkWZA3DJJH_cjs.SVG_NAMESPACE, "path");
|
|
4960
4960
|
path.setAttribute("fill", "none");
|
|
4961
|
-
path.setAttribute("stroke-width", String(PREVIEW_STROKE_PX /
|
|
4961
|
+
path.setAttribute("stroke-width", String(PREVIEW_STROKE_PX / chunkWZA3DJJH_cjs.pxPerUnit(svg)));
|
|
4962
4962
|
path.style.pointerEvents = "none";
|
|
4963
4963
|
return path;
|
|
4964
4964
|
}
|
|
4965
4965
|
function updateDuplicatePreview(drag, toPoint, toSide) {
|
|
4966
4966
|
const link = previewLink(drag.direction, toSide);
|
|
4967
|
-
const { points, segments } =
|
|
4967
|
+
const { points, segments } = chunkUHKFJBY5_cjs.calculateLinkRoute(link, drag.fixedPoint, toPoint, NEW_LINK_PATH_TYPE);
|
|
4968
4968
|
drag.previewPath.setAttribute("d", previewPathData(points, segments, NEW_LINK_PATH_TYPE, 2));
|
|
4969
4969
|
}
|
|
4970
4970
|
|
|
@@ -4975,7 +4975,7 @@ function duplicateCandidates(svg, sourceId) {
|
|
|
4975
4975
|
if (element2.getAttribute("data-sf-role") === "link") {
|
|
4976
4976
|
continue;
|
|
4977
4977
|
}
|
|
4978
|
-
const owner =
|
|
4978
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(element2);
|
|
4979
4979
|
if (owner && owner.id !== sourceId) {
|
|
4980
4980
|
candidates.push({ owner, bounds: element2.getBBox() });
|
|
4981
4981
|
}
|
|
@@ -4989,8 +4989,8 @@ function createQuickDuplicateDragState(svg, event, previewPath) {
|
|
|
4989
4989
|
if (!bubble || !direction || direction.startsWith("iso-") || !sourceId) {
|
|
4990
4990
|
return null;
|
|
4991
4991
|
}
|
|
4992
|
-
const primary =
|
|
4993
|
-
const sourceOwner = primary &&
|
|
4992
|
+
const primary = chunkWZA3DJJH_cjs.findOwnerNode(svg, sourceId, chunkWZA3DJJH_cjs.isPrimary);
|
|
4993
|
+
const sourceOwner = primary && chunkWZA3DJJH_cjs.resolveOwner(primary);
|
|
4994
4994
|
if (!primary || !sourceOwner) {
|
|
4995
4995
|
return null;
|
|
4996
4996
|
}
|
|
@@ -4998,7 +4998,7 @@ function createQuickDuplicateDragState(svg, event, previewPath) {
|
|
|
4998
4998
|
return {
|
|
4999
4999
|
sourceOwner,
|
|
5000
5000
|
direction,
|
|
5001
|
-
fixedPoint:
|
|
5001
|
+
fixedPoint: chunkUHKFJBY5_cjs.pointAtPort(primary.getBBox(), { side: direction, offset: 0.5 }),
|
|
5002
5002
|
previewPath,
|
|
5003
5003
|
ghost: new LinkGhost(svg, previewPath),
|
|
5004
5004
|
candidates: duplicateCandidates(svg, sourceId),
|
|
@@ -5026,7 +5026,7 @@ var QuickDuplicateSession = class {
|
|
|
5026
5026
|
this.#emitter = emitter;
|
|
5027
5027
|
}
|
|
5028
5028
|
pointerDown = (event) => {
|
|
5029
|
-
if (event.button !== 0 || this.#drag ||
|
|
5029
|
+
if (event.button !== 0 || this.#drag || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
5030
5030
|
return;
|
|
5031
5031
|
}
|
|
5032
5032
|
this.#drag = createQuickDuplicateDragState(this.#svg, event, createDuplicatePreviewPath(this.#svg));
|
|
@@ -5040,7 +5040,7 @@ var QuickDuplicateSession = class {
|
|
|
5040
5040
|
return;
|
|
5041
5041
|
}
|
|
5042
5042
|
this.beginPreview(drag);
|
|
5043
|
-
const target = resolveDuplicateTarget(drag, duplicatePointerPosition(this.#svg, event), 1 /
|
|
5043
|
+
const target = resolveDuplicateTarget(drag, duplicatePointerPosition(this.#svg, event), 1 / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg));
|
|
5044
5044
|
updateDuplicatePreview(drag, target.point, target.side);
|
|
5045
5045
|
drag.ghost.show(target.hit !== null, target.bounds);
|
|
5046
5046
|
};
|
|
@@ -5098,14 +5098,14 @@ function seriesShapes(svg, ownerId, series) {
|
|
|
5098
5098
|
return [...svg.querySelectorAll(selector)];
|
|
5099
5099
|
}
|
|
5100
5100
|
function updateRadarVertexDragPreview(svg, drag, value) {
|
|
5101
|
-
const point =
|
|
5101
|
+
const point = chunkUHKFJBY5_cjs.radarVertexPoint(drag.frame, drag.index, value);
|
|
5102
5102
|
drag.element.setAttribute("cx", String(point.x));
|
|
5103
5103
|
drag.element.setAttribute("cy", String(point.y));
|
|
5104
5104
|
const points = seriesVertices(svg, drag.owner.id, drag.series).map((vertex) => ({
|
|
5105
5105
|
x: Number(vertex.getAttribute("cx")),
|
|
5106
5106
|
y: Number(vertex.getAttribute("cy"))
|
|
5107
5107
|
}));
|
|
5108
|
-
const path =
|
|
5108
|
+
const path = chunkUHKFJBY5_cjs.radarSeriesPath(points, drag.frame.curved, drag.frame.tension);
|
|
5109
5109
|
for (const shape of seriesShapes(svg, drag.owner.id, drag.series)) {
|
|
5110
5110
|
shape.setAttribute("d", path);
|
|
5111
5111
|
}
|
|
@@ -5160,7 +5160,7 @@ function findVertex(event) {
|
|
|
5160
5160
|
return event.target?.closest?.('[data-sf-mark="radar-vertex"]');
|
|
5161
5161
|
}
|
|
5162
5162
|
function isVertexPointer(event) {
|
|
5163
|
-
return event.button === 0 && !
|
|
5163
|
+
return event.button === 0 && !chunkWZA3DJJH_cjs.isCameraGesture(event);
|
|
5164
5164
|
}
|
|
5165
5165
|
function resolveRadarVertexDrag(svg, event) {
|
|
5166
5166
|
if (!isVertexPointer(event)) {
|
|
@@ -5170,7 +5170,7 @@ function resolveRadarVertexDrag(svg, event) {
|
|
|
5170
5170
|
if (!element2) {
|
|
5171
5171
|
return null;
|
|
5172
5172
|
}
|
|
5173
|
-
const owner =
|
|
5173
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(element2);
|
|
5174
5174
|
if (owner?.role !== "chart") {
|
|
5175
5175
|
return null;
|
|
5176
5176
|
}
|
|
@@ -5179,7 +5179,7 @@ function resolveRadarVertexDrag(svg, event) {
|
|
|
5179
5179
|
if (!series || !Number.isInteger(index) || index < 0) {
|
|
5180
5180
|
return null;
|
|
5181
5181
|
}
|
|
5182
|
-
const frame = parseRadarFrame(
|
|
5182
|
+
const frame = parseRadarFrame(chunkWZA3DJJH_cjs.findOwnerNode(svg, owner.id, chunkWZA3DJJH_cjs.isPrimary));
|
|
5183
5183
|
if (!frame || index >= frame.count) {
|
|
5184
5184
|
return null;
|
|
5185
5185
|
}
|
|
@@ -5189,11 +5189,11 @@ function resolveRadarVertexDrag(svg, event) {
|
|
|
5189
5189
|
|
|
5190
5190
|
// src/runtime/interaction/radarVertexDrag/session.ts
|
|
5191
5191
|
function valueFrom(svg, event, drag) {
|
|
5192
|
-
const point =
|
|
5192
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(svg, event);
|
|
5193
5193
|
if (!point) {
|
|
5194
5194
|
return null;
|
|
5195
5195
|
}
|
|
5196
|
-
return
|
|
5196
|
+
return chunkUHKFJBY5_cjs.radarValueAtPoint(drag.frame, drag.index, point.x, point.y);
|
|
5197
5197
|
}
|
|
5198
5198
|
var RadarVertexDragSession = class {
|
|
5199
5199
|
#svg;
|
|
@@ -5225,7 +5225,7 @@ var RadarVertexDragSession = class {
|
|
|
5225
5225
|
if (!this.#readout) {
|
|
5226
5226
|
this.#readout = createValueReadout(this.#svg);
|
|
5227
5227
|
}
|
|
5228
|
-
const vertex =
|
|
5228
|
+
const vertex = chunkUHKFJBY5_cjs.radarVertexPoint(this.#drag.frame, this.#drag.index, value);
|
|
5229
5229
|
positionRadarReadout(this.#readout, vertex, this.#drag.frame.centerY, value);
|
|
5230
5230
|
}
|
|
5231
5231
|
cancel() {
|
|
@@ -5316,7 +5316,7 @@ function captureTextFit(text) {
|
|
|
5316
5316
|
fontSize,
|
|
5317
5317
|
lineHeight,
|
|
5318
5318
|
padding: Math.max(8, text.strokeWidth * 2),
|
|
5319
|
-
longestWord: Math.max(0, ...words.map((word) =>
|
|
5319
|
+
longestWord: Math.max(0, ...words.map((word) => chunkUHKFJBY5_cjs.estimateTextWidth(word, fontSize, bold)))
|
|
5320
5320
|
};
|
|
5321
5321
|
}
|
|
5322
5322
|
var COMMIT_PRECISION = 10;
|
|
@@ -5327,7 +5327,7 @@ function minWidthForText(fit) {
|
|
|
5327
5327
|
return roundUpForCommit(fit.longestWord + fit.padding * 2);
|
|
5328
5328
|
}
|
|
5329
5329
|
function minHeightForText(fit, width) {
|
|
5330
|
-
const lines =
|
|
5330
|
+
const lines = chunkUHKFJBY5_cjs.wrapText(fit.rawText, Math.max(0, width - fit.padding * 2), fit.fontSize);
|
|
5331
5331
|
return roundUpForCommit(lines.length * fit.fontSize * fit.lineHeight + fit.padding * 2);
|
|
5332
5332
|
}
|
|
5333
5333
|
|
|
@@ -5461,7 +5461,7 @@ function applyRectBounds(rect, kind, bounds) {
|
|
|
5461
5461
|
rect.setAttribute("width", String(bounds.width));
|
|
5462
5462
|
rect.setAttribute("height", String(bounds.height));
|
|
5463
5463
|
if (kind === "pill") {
|
|
5464
|
-
rect.setAttribute("rx", String(
|
|
5464
|
+
rect.setAttribute("rx", String(chunkUHKFJBY5_cjs.pillCornerRadius(bounds.width, bounds.height)));
|
|
5465
5465
|
}
|
|
5466
5466
|
}
|
|
5467
5467
|
function applyEllipseBounds(ellipse, bounds) {
|
|
@@ -5471,7 +5471,7 @@ function applyEllipseBounds(ellipse, bounds) {
|
|
|
5471
5471
|
ellipse.setAttribute("ry", String(bounds.height / 2));
|
|
5472
5472
|
}
|
|
5473
5473
|
function applySymbolBounds(path, bounds) {
|
|
5474
|
-
const raw = path.getAttribute(
|
|
5474
|
+
const raw = path.getAttribute(chunkUHKFJBY5_cjs.SYMBOL_POINTS_ATTR);
|
|
5475
5475
|
if (!raw) {
|
|
5476
5476
|
return false;
|
|
5477
5477
|
}
|
|
@@ -5479,22 +5479,22 @@ function applySymbolBounds(path, bounds) {
|
|
|
5479
5479
|
x: bounds.x + x * bounds.width,
|
|
5480
5480
|
y: bounds.y + y * bounds.height
|
|
5481
5481
|
}));
|
|
5482
|
-
const tension = Number(path.getAttribute(
|
|
5483
|
-
path.setAttribute("d",
|
|
5482
|
+
const tension = Number(path.getAttribute(chunkUHKFJBY5_cjs.SYMBOL_TENSION_ATTR)) || 0;
|
|
5483
|
+
path.setAttribute("d", chunkUHKFJBY5_cjs.freeformPathData({ points, tension, closed: true }));
|
|
5484
5484
|
return true;
|
|
5485
5485
|
}
|
|
5486
5486
|
function applyPathBounds(path, kind, bounds) {
|
|
5487
5487
|
if (kind === "symbol" && applySymbolBounds(path, bounds)) {
|
|
5488
5488
|
return;
|
|
5489
5489
|
}
|
|
5490
|
-
const pathData =
|
|
5490
|
+
const pathData = chunkUHKFJBY5_cjs.localShapePath(kind, bounds.x, bounds.y, bounds.width, bounds.height);
|
|
5491
5491
|
if (pathData) {
|
|
5492
5492
|
path.setAttribute("d", pathData);
|
|
5493
5493
|
}
|
|
5494
5494
|
}
|
|
5495
5495
|
function applyFrameBoundaryBounds(path, bounds) {
|
|
5496
|
-
const cornerRadius = Number(path.getAttribute(
|
|
5497
|
-
const squareCorner = path.getAttribute(
|
|
5496
|
+
const cornerRadius = Number(path.getAttribute(chunkUHKFJBY5_cjs.CORNER_RADIUS_ATTR) ?? 0);
|
|
5497
|
+
const squareCorner = path.getAttribute(chunkUHKFJBY5_cjs.SQUARE_CORNER_ATTR);
|
|
5498
5498
|
const radii = {
|
|
5499
5499
|
topLeft: cornerRadius,
|
|
5500
5500
|
topRight: cornerRadius,
|
|
@@ -5504,7 +5504,7 @@ function applyFrameBoundaryBounds(path, bounds) {
|
|
|
5504
5504
|
if (squareCorner) {
|
|
5505
5505
|
radii[squareCorner] = 0;
|
|
5506
5506
|
}
|
|
5507
|
-
path.setAttribute("d",
|
|
5507
|
+
path.setAttribute("d", chunkUHKFJBY5_cjs.cornersRoundedRectPath(bounds.x, bounds.y, bounds.width, bounds.height, radii));
|
|
5508
5508
|
}
|
|
5509
5509
|
function applySingleNodeBounds(primary, kind, bounds) {
|
|
5510
5510
|
const tag = primary.tagName.toLowerCase();
|
|
@@ -5514,7 +5514,7 @@ function applySingleNodeBounds(primary, kind, bounds) {
|
|
|
5514
5514
|
applyEllipseBounds(primary, bounds);
|
|
5515
5515
|
} else if (tag === "foreignobject") {
|
|
5516
5516
|
applyRectBounds(primary, null, bounds);
|
|
5517
|
-
} else if (tag === "path" && primary.hasAttribute(
|
|
5517
|
+
} else if (tag === "path" && primary.hasAttribute(chunkUHKFJBY5_cjs.CORNER_RADIUS_ATTR)) {
|
|
5518
5518
|
applyFrameBoundaryBounds(primary, bounds);
|
|
5519
5519
|
} else if (tag === "path" && kind) {
|
|
5520
5520
|
applyPathBounds(primary, kind, bounds);
|
|
@@ -5553,7 +5553,7 @@ function updateSelectionRing(overlay, bounds) {
|
|
|
5553
5553
|
}
|
|
5554
5554
|
function updateSelectionOverlay(overlay, bounds) {
|
|
5555
5555
|
updateSelectionRing(overlay, bounds);
|
|
5556
|
-
for (const [centerX, centerY, name] of
|
|
5556
|
+
for (const [centerX, centerY, name] of chunkWZA3DJJH_cjs.resizeHandlePositions(bounds)) {
|
|
5557
5557
|
const handle = overlay.querySelector(`[data-sf-resize-handle="${name}"]`);
|
|
5558
5558
|
if (!handle) {
|
|
5559
5559
|
continue;
|
|
@@ -5570,7 +5570,7 @@ function replaceTextLines(textElement, lines, x, lineHeight) {
|
|
|
5570
5570
|
textElement.removeChild(textElement.firstChild);
|
|
5571
5571
|
}
|
|
5572
5572
|
lines.forEach((line, index) => {
|
|
5573
|
-
const tspan = document.createElementNS(
|
|
5573
|
+
const tspan = document.createElementNS(chunkWZA3DJJH_cjs.SVG_NAMESPACE, "tspan");
|
|
5574
5574
|
tspan.setAttribute("x", String(x));
|
|
5575
5575
|
if (index > 0) {
|
|
5576
5576
|
tspan.setAttribute("dy", `${lineHeight}px`);
|
|
@@ -5590,7 +5590,7 @@ function applyLiveText(textElement, rawText, bounds, strokeWidth) {
|
|
|
5590
5590
|
const height = Math.max(0, bounds.height - padding * 2);
|
|
5591
5591
|
const boxX = bounds.x + padding;
|
|
5592
5592
|
const boxY = bounds.y + padding;
|
|
5593
|
-
const lines =
|
|
5593
|
+
const lines = chunkUHKFJBY5_cjs.wrapText(rawText, width, fontSize);
|
|
5594
5594
|
const linePixels = fontSize * lineHeight;
|
|
5595
5595
|
const contentHeight = lines.length * linePixels;
|
|
5596
5596
|
const firstY = verticalAlign === "top" ? boxY + fontSize : verticalAlign === "bottom" ? boxY + height - contentHeight + fontSize : boxY + (height - contentHeight) / 2 + fontSize;
|
|
@@ -5603,7 +5603,7 @@ function applyLiveText(textElement, rawText, bounds, strokeWidth) {
|
|
|
5603
5603
|
|
|
5604
5604
|
// src/runtime/interaction/resize/preview.ts
|
|
5605
5605
|
function textBoundsFor(kind, bounds) {
|
|
5606
|
-
return kind === "person" ?
|
|
5606
|
+
return kind === "person" ? chunkUHKFJBY5_cjs.personLabelArea(bounds.x, bounds.y, bounds.width, bounds.height) : bounds;
|
|
5607
5607
|
}
|
|
5608
5608
|
function applyGeometryPreview(drag, bounds) {
|
|
5609
5609
|
if (drag.isComposite) {
|
|
@@ -5623,7 +5623,7 @@ function applyResizePreview(drag, bounds) {
|
|
|
5623
5623
|
applyLiveText(drag.text.el, drag.text.rawText, textBoundsFor(drag.kind, bounds), drag.text.strokeWidth);
|
|
5624
5624
|
}
|
|
5625
5625
|
if (drag.bubbles) {
|
|
5626
|
-
|
|
5626
|
+
chunkWZA3DJJH_cjs.updateQuickDuplicateBubbles(drag.bubbles, bounds);
|
|
5627
5627
|
}
|
|
5628
5628
|
updateLiveLinks(drag.liveLinks, bounds);
|
|
5629
5629
|
}
|
|
@@ -5644,9 +5644,9 @@ function snapResize(svg, drag, pointer) {
|
|
|
5644
5644
|
};
|
|
5645
5645
|
}
|
|
5646
5646
|
const axes = HANDLE_AXES[drag.handle];
|
|
5647
|
-
const candidates = nearestCandidates(proposed,
|
|
5647
|
+
const candidates = nearestCandidates(proposed, chunkWZA3DJJH_cjs.findSnapCandidateBounds(svg, /* @__PURE__ */ new Set([drag.owner.id])));
|
|
5648
5648
|
const snap = computeSnap(proposed, candidates, {
|
|
5649
|
-
threshold: snapDistancePx(svg) /
|
|
5649
|
+
threshold: snapDistancePx(svg) / chunkWZA3DJJH_cjs.pxPerUnit(svg),
|
|
5650
5650
|
activeX: resizeActivePoints(axes.x),
|
|
5651
5651
|
activeY: resizeActivePoints(axes.y),
|
|
5652
5652
|
guideOverhang: GUIDE_OVERHANG3
|
|
@@ -5687,13 +5687,13 @@ function selectResizeTarget(svg, event) {
|
|
|
5687
5687
|
if (!ownerId) {
|
|
5688
5688
|
return null;
|
|
5689
5689
|
}
|
|
5690
|
-
const primary =
|
|
5691
|
-
const owner = primary &&
|
|
5690
|
+
const primary = chunkWZA3DJJH_cjs.findOwnerNode(svg, ownerId, chunkWZA3DJJH_cjs.isPrimary);
|
|
5691
|
+
const owner = primary && chunkWZA3DJJH_cjs.resolveOwner(primary);
|
|
5692
5692
|
if (!primary || !hasEditableGeometry(owner)) {
|
|
5693
5693
|
return null;
|
|
5694
5694
|
}
|
|
5695
|
-
const nodes =
|
|
5696
|
-
const geometryNodes = isCompositeOwner(owner) ? nodes : nodes.filter((node) => !
|
|
5695
|
+
const nodes = chunkWZA3DJJH_cjs.findAllOwnerNodes(svg, ownerId);
|
|
5696
|
+
const geometryNodes = isCompositeOwner(owner) ? nodes : nodes.filter((node) => !chunkWZA3DJJH_cjs.isTextLabel(node));
|
|
5697
5697
|
if (!geometryNodes.length) {
|
|
5698
5698
|
return null;
|
|
5699
5699
|
}
|
|
@@ -5711,7 +5711,7 @@ function selectResizeTarget(svg, event) {
|
|
|
5711
5711
|
|
|
5712
5712
|
// src/runtime/interaction/resize/textCapture.ts
|
|
5713
5713
|
function captureResizeText(nodes, primary) {
|
|
5714
|
-
const textElement = nodes.find(
|
|
5714
|
+
const textElement = nodes.find(chunkWZA3DJJH_cjs.isTextLabel);
|
|
5715
5715
|
const rawText = primary.getAttribute("aria-label");
|
|
5716
5716
|
if (!textElement || !rawText) {
|
|
5717
5717
|
return null;
|
|
@@ -5729,7 +5729,7 @@ function createResizeDragState(svg, event) {
|
|
|
5729
5729
|
if (!selection) {
|
|
5730
5730
|
return null;
|
|
5731
5731
|
}
|
|
5732
|
-
const startBounds =
|
|
5732
|
+
const startBounds = chunkWZA3DJJH_cjs.symbolDeclaredBounds(selection.primary) ?? selection.primary.getBBox();
|
|
5733
5733
|
const composite = isCompositeOwner(selection.owner);
|
|
5734
5734
|
const isContainer = CONTAINER_ROLES.has(selection.owner.role);
|
|
5735
5735
|
selection.captureTarget.setPointerCapture?.(event.pointerId);
|
|
@@ -5742,7 +5742,7 @@ function createResizeDragState(svg, event) {
|
|
|
5742
5742
|
isComposite: composite,
|
|
5743
5743
|
geometryNodes: selection.geometryNodes,
|
|
5744
5744
|
insets: selection.geometryNodes.map(
|
|
5745
|
-
(node) => node === selection.primary ? NO_INSET : insetWithin(startBounds,
|
|
5745
|
+
(node) => node === selection.primary ? NO_INSET : insetWithin(startBounds, chunkWZA3DJJH_cjs.symbolDeclaredBounds(node) ?? node.getBBox())
|
|
5746
5746
|
),
|
|
5747
5747
|
baseTransforms: selection.geometryNodes.map((node) => node.getAttribute("transform")),
|
|
5748
5748
|
overlay: selection.overlay,
|
|
@@ -5768,7 +5768,7 @@ var ResizeSession = class {
|
|
|
5768
5768
|
this.#emitter = emitter;
|
|
5769
5769
|
}
|
|
5770
5770
|
pointerDown = (event) => {
|
|
5771
|
-
if (event.button !== 0 || this.#drag ||
|
|
5771
|
+
if (event.button !== 0 || this.#drag || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
5772
5772
|
return;
|
|
5773
5773
|
}
|
|
5774
5774
|
this.#drag = createResizeDragState(this.#svg, event);
|
|
@@ -5783,7 +5783,7 @@ var ResizeSession = class {
|
|
|
5783
5783
|
const bounds = keepsProportions(drag, event.shiftKey) ? lockAspect(snapped.bounds, drag.startBounds, drag.handle) : snapped.bounds;
|
|
5784
5784
|
const { guides } = snapped;
|
|
5785
5785
|
applyResizePreview(drag, clampResizeToChildren(bounds, drag.childrenBounds));
|
|
5786
|
-
|
|
5786
|
+
chunkWZA3DJJH_cjs.updateAlignmentGuides(this.#svg, guides, RESIZE_GUIDE_COLOR);
|
|
5787
5787
|
};
|
|
5788
5788
|
pointerUp = (event) => {
|
|
5789
5789
|
const drag = this.#drag;
|
|
@@ -5792,7 +5792,7 @@ var ResizeSession = class {
|
|
|
5792
5792
|
}
|
|
5793
5793
|
this.#drag = null;
|
|
5794
5794
|
event.target?.releasePointerCapture?.(drag.pointerId);
|
|
5795
|
-
|
|
5795
|
+
chunkWZA3DJJH_cjs.clearAlignmentGuides(this.#svg);
|
|
5796
5796
|
if (!drag.moved) {
|
|
5797
5797
|
return;
|
|
5798
5798
|
}
|
|
@@ -5831,7 +5831,7 @@ function resolveSankeyNodeLabelTarget(event) {
|
|
|
5831
5831
|
if (!labelElement) {
|
|
5832
5832
|
return null;
|
|
5833
5833
|
}
|
|
5834
|
-
const owner =
|
|
5834
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(labelElement);
|
|
5835
5835
|
if (owner?.role !== "chart") {
|
|
5836
5836
|
return null;
|
|
5837
5837
|
}
|
|
@@ -5842,7 +5842,7 @@ function resolveSankeyNodeLabelTarget(event) {
|
|
|
5842
5842
|
return { owner, nodeId, labelElement };
|
|
5843
5843
|
}
|
|
5844
5844
|
function createSankeyNodeLabelEditor(target, emitter, onClose) {
|
|
5845
|
-
const rect =
|
|
5845
|
+
const rect = chunkWZA3DJJH_cjs.screenRectOf(target.labelElement);
|
|
5846
5846
|
if (rect.width <= 0 && rect.height <= 0) {
|
|
5847
5847
|
return null;
|
|
5848
5848
|
}
|
|
@@ -5899,7 +5899,7 @@ function clearSankeyNodeDragPreview(drag) {
|
|
|
5899
5899
|
// src/runtime/interaction/sankeyNode/target.ts
|
|
5900
5900
|
var RIBBON_PATH = /^M\s+(-?[\d.]+)\s+(-?[\d.]+)\s+C\s+-?[\d.]+\s+-?[\d.]+\s+-?[\d.]+\s+(-?[\d.]+)\s+(-?[\d.]+)\s+-?[\d.]+\s+L\s+-?[\d.]+\s+(-?[\d.]+)\s+C\s+-?[\d.]+\s+-?[\d.]+\s+-?[\d.]+\s+(-?[\d.]+)\s+-?[\d.]+\s+-?[\d.]+\s+Z$/;
|
|
5901
5901
|
function isNodePointer(event) {
|
|
5902
|
-
return event.button === 0 && !
|
|
5902
|
+
return event.button === 0 && !chunkWZA3DJJH_cjs.isCameraGesture(event);
|
|
5903
5903
|
}
|
|
5904
5904
|
function findNodeRect(event) {
|
|
5905
5905
|
return event.target?.closest?.('[data-sf-mark="sankey-node"]');
|
|
@@ -5957,7 +5957,7 @@ function resolveSankeyNodeDrag(svg, event) {
|
|
|
5957
5957
|
if (!rect) {
|
|
5958
5958
|
return null;
|
|
5959
5959
|
}
|
|
5960
|
-
const owner =
|
|
5960
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(rect);
|
|
5961
5961
|
if (owner?.role !== "chart") {
|
|
5962
5962
|
return null;
|
|
5963
5963
|
}
|
|
@@ -5965,7 +5965,7 @@ function resolveSankeyNodeDrag(svg, event) {
|
|
|
5965
5965
|
if (!nodeId) {
|
|
5966
5966
|
return null;
|
|
5967
5967
|
}
|
|
5968
|
-
const start =
|
|
5968
|
+
const start = chunkWZA3DJJH_cjs.pointerUserPoint(svg, event);
|
|
5969
5969
|
if (!start) {
|
|
5970
5970
|
return null;
|
|
5971
5971
|
}
|
|
@@ -6011,7 +6011,7 @@ var SankeyNodeDragSession = class {
|
|
|
6011
6011
|
if (!this.#drag || event.pointerId !== this.#drag.pointerId) {
|
|
6012
6012
|
return;
|
|
6013
6013
|
}
|
|
6014
|
-
const point =
|
|
6014
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
6015
6015
|
if (!point) {
|
|
6016
6016
|
return;
|
|
6017
6017
|
}
|
|
@@ -6025,7 +6025,7 @@ var SankeyNodeDragSession = class {
|
|
|
6025
6025
|
const leadBounds = offsetBounds(drag.originalBounds, rawDx, rawDy);
|
|
6026
6026
|
const candidates = nearestCandidates(leadBounds, drag.siblingBounds);
|
|
6027
6027
|
const snap = computeSnap(leadBounds, candidates, {
|
|
6028
|
-
threshold: SNAP_THRESHOLD_PX /
|
|
6028
|
+
threshold: SNAP_THRESHOLD_PX / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg),
|
|
6029
6029
|
activeX: MOVE_ACTIVE_POINTS,
|
|
6030
6030
|
activeY: MOVE_ACTIVE_POINTS,
|
|
6031
6031
|
guideOverhang: GUIDE_OVERHANG4
|
|
@@ -6035,7 +6035,7 @@ var SankeyNodeDragSession = class {
|
|
|
6035
6035
|
drag.lastDx = dx;
|
|
6036
6036
|
drag.lastDy = dy;
|
|
6037
6037
|
updateSankeyNodeDragPreview(drag, dx, dy);
|
|
6038
|
-
|
|
6038
|
+
chunkWZA3DJJH_cjs.updateAlignmentGuides(
|
|
6039
6039
|
this.#svg,
|
|
6040
6040
|
[snap.x.guide, snap.y.guide].filter((guide) => guide !== null),
|
|
6041
6041
|
GUIDE_COLOR3
|
|
@@ -6046,7 +6046,7 @@ var SankeyNodeDragSession = class {
|
|
|
6046
6046
|
clearSankeyNodeDragPreview(this.#drag);
|
|
6047
6047
|
}
|
|
6048
6048
|
this.#drag = null;
|
|
6049
|
-
|
|
6049
|
+
chunkWZA3DJJH_cjs.clearAlignmentGuides(this.#svg);
|
|
6050
6050
|
}
|
|
6051
6051
|
finish(event) {
|
|
6052
6052
|
if (!this.#drag || event.pointerId !== this.#drag.pointerId) {
|
|
@@ -6056,7 +6056,7 @@ var SankeyNodeDragSession = class {
|
|
|
6056
6056
|
this.#drag = null;
|
|
6057
6057
|
event.target?.releasePointerCapture?.(drag.pointerId);
|
|
6058
6058
|
clearSankeyNodeDragPreview(drag);
|
|
6059
|
-
|
|
6059
|
+
chunkWZA3DJJH_cjs.clearAlignmentGuides(this.#svg);
|
|
6060
6060
|
if (!drag.moved) {
|
|
6061
6061
|
return;
|
|
6062
6062
|
}
|
|
@@ -6112,7 +6112,7 @@ function bindSankeyNode(viewer, emitter) {
|
|
|
6112
6112
|
var FALLBACK_WIDTH = 120;
|
|
6113
6113
|
var FALLBACK_HEIGHT = 28;
|
|
6114
6114
|
function centeredLabelRect(primaryNode) {
|
|
6115
|
-
const primaryRect =
|
|
6115
|
+
const primaryRect = chunkWZA3DJJH_cjs.screenRectOf(primaryNode);
|
|
6116
6116
|
return {
|
|
6117
6117
|
left: primaryRect.left + (primaryRect.width - FALLBACK_WIDTH) / 2,
|
|
6118
6118
|
top: primaryRect.top + (primaryRect.height - FALLBACK_HEIGHT) / 2,
|
|
@@ -6122,10 +6122,10 @@ function centeredLabelRect(primaryNode) {
|
|
|
6122
6122
|
}
|
|
6123
6123
|
function resolveTextEditRect(owner, textNode, primaryNode) {
|
|
6124
6124
|
if (owner.role === "shape") {
|
|
6125
|
-
return primaryNode ?
|
|
6125
|
+
return primaryNode ? chunkWZA3DJJH_cjs.screenRectOf(primaryNode) : null;
|
|
6126
6126
|
}
|
|
6127
6127
|
if (textNode) {
|
|
6128
|
-
return
|
|
6128
|
+
return chunkWZA3DJJH_cjs.screenRectOf(textNode);
|
|
6129
6129
|
}
|
|
6130
6130
|
return primaryNode ? centeredLabelRect(primaryNode) : null;
|
|
6131
6131
|
}
|
|
@@ -6145,8 +6145,8 @@ function textAlign(owner, textNode) {
|
|
|
6145
6145
|
return anchor === "end" ? "right" : "left";
|
|
6146
6146
|
}
|
|
6147
6147
|
function createActiveTextEditor(svg, owner, emitter, onClose) {
|
|
6148
|
-
const textNode =
|
|
6149
|
-
const primaryNode =
|
|
6148
|
+
const textNode = chunkWZA3DJJH_cjs.findOwnerNode(svg, owner.id, chunkWZA3DJJH_cjs.isTextLabel);
|
|
6149
|
+
const primaryNode = chunkWZA3DJJH_cjs.findOwnerNode(svg, owner.id, chunkWZA3DJJH_cjs.isPrimary);
|
|
6150
6150
|
const rect = resolveTextEditRect(owner, textNode, primaryNode);
|
|
6151
6151
|
if (!rect) {
|
|
6152
6152
|
return null;
|
|
@@ -6192,7 +6192,7 @@ function isFrameTitle(target) {
|
|
|
6192
6192
|
}
|
|
6193
6193
|
function resolveEditableTextOwner(event) {
|
|
6194
6194
|
const target = event.target;
|
|
6195
|
-
const owner =
|
|
6195
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(target);
|
|
6196
6196
|
if (!owner) {
|
|
6197
6197
|
return null;
|
|
6198
6198
|
}
|
|
@@ -6333,7 +6333,7 @@ function applyToken(target, lines, token) {
|
|
|
6333
6333
|
function maskSource(lines) {
|
|
6334
6334
|
let tokens;
|
|
6335
6335
|
try {
|
|
6336
|
-
tokens =
|
|
6336
|
+
tokens = chunkUHKFJBY5_cjs.tokenizeSource(lines.join("\n"));
|
|
6337
6337
|
} catch {
|
|
6338
6338
|
return null;
|
|
6339
6339
|
}
|
|
@@ -6365,7 +6365,7 @@ function braceDelta(masked) {
|
|
|
6365
6365
|
}
|
|
6366
6366
|
|
|
6367
6367
|
// src/runtime/interaction/sflPatch/scan/blocks.ts
|
|
6368
|
-
var OWNER_HEADER = /^\s*(Entity|Shape|Text|Container|Chart|Path|Link|Isometric|Widget|Component|Connection|Shader)\s+([A-Za-z_][A-Za-z0-9_]*)\b/;
|
|
6368
|
+
var OWNER_HEADER = /^\s*(Entity|Shape|Text|Image|Container|Chart|Path|Link|Isometric|Widget|Component|Connection|Shader)\s+([A-Za-z_][A-Za-z0-9_]*)\b/;
|
|
6369
6369
|
var VALID_IDENT = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
6370
6370
|
function blockEndIn(masked, startLine) {
|
|
6371
6371
|
let depth = 0;
|
|
@@ -6632,6 +6632,9 @@ function canvasObjectBlockKind(kind) {
|
|
|
6632
6632
|
if (kind === "text") {
|
|
6633
6633
|
return "Text";
|
|
6634
6634
|
}
|
|
6635
|
+
if (kind === "image") {
|
|
6636
|
+
return "Image";
|
|
6637
|
+
}
|
|
6635
6638
|
if (kind === "isometric") {
|
|
6636
6639
|
return "Isometric";
|
|
6637
6640
|
}
|
|
@@ -6666,7 +6669,7 @@ function resolveCanvasObjectInsertionTarget(sfl, lines, parentId) {
|
|
|
6666
6669
|
const modelRange = findFirstBlockOfKind(lines, "Model");
|
|
6667
6670
|
return modelRange ? { range: modelRange, origin: { x: 0, y: 0 } } : null;
|
|
6668
6671
|
}
|
|
6669
|
-
const parent =
|
|
6672
|
+
const parent = chunkUHKFJBY5_cjs.sflToCanvasState(sfl).canvasObjects.find((canvasObject) => canvasObject.id === parentId);
|
|
6670
6673
|
if (!parent) {
|
|
6671
6674
|
return null;
|
|
6672
6675
|
}
|
|
@@ -7193,7 +7196,7 @@ function movePathPoints(lines, range, dx, dy) {
|
|
|
7193
7196
|
replacePropertyValue(lines, span, shifted);
|
|
7194
7197
|
}
|
|
7195
7198
|
function applyMoveChange(sfl, event) {
|
|
7196
|
-
const state =
|
|
7199
|
+
const state = chunkUHKFJBY5_cjs.sflToCanvasState(sfl);
|
|
7197
7200
|
const canvasObject = state.canvasObjects.find((candidate) => candidate.id === event.owner.id);
|
|
7198
7201
|
if (!canvasObject) {
|
|
7199
7202
|
return sfl;
|
|
@@ -7218,7 +7221,7 @@ function applyMoveChange(sfl, event) {
|
|
|
7218
7221
|
|
|
7219
7222
|
// src/runtime/interaction/sflPatch/changes/pathPointChange.ts
|
|
7220
7223
|
function applyPathPointChange(sfl, event) {
|
|
7221
|
-
const canvasObjects =
|
|
7224
|
+
const canvasObjects = chunkUHKFJBY5_cjs.sflToCanvasState(sfl).canvasObjects;
|
|
7222
7225
|
const canvasObject = canvasObjects.find((candidate) => candidate.id === event.owner.id);
|
|
7223
7226
|
if (!canvasObject) {
|
|
7224
7227
|
return sfl;
|
|
@@ -7372,7 +7375,7 @@ function resolveConnectionInsertionTarget(sfl, lines, options) {
|
|
|
7372
7375
|
if (!VALID_IDENT.test(options.id) || nameExists(lines, options.id)) {
|
|
7373
7376
|
return null;
|
|
7374
7377
|
}
|
|
7375
|
-
const canvasObjects =
|
|
7378
|
+
const canvasObjects = chunkUHKFJBY5_cjs.sflToCanvasState(sfl).canvasObjects;
|
|
7376
7379
|
const hasSource = canvasObjects.some((canvasObject) => canvasObject.id === options.fromId);
|
|
7377
7380
|
const hasTarget = canvasObjects.some((canvasObject) => canvasObject.id === options.toId);
|
|
7378
7381
|
if (!hasSource || !hasTarget) {
|
|
@@ -7436,13 +7439,13 @@ function isometricOffset(direction, object, gap) {
|
|
|
7436
7439
|
const { depth } = object.isometric;
|
|
7437
7440
|
switch (direction) {
|
|
7438
7441
|
case "iso-width-pos":
|
|
7439
|
-
return { dx: (width + gap) *
|
|
7442
|
+
return { dx: (width + gap) * chunkUHKFJBY5_cjs.AXIS_COS, dy: (width + gap) * chunkUHKFJBY5_cjs.AXIS_SIN };
|
|
7440
7443
|
case "iso-width-neg":
|
|
7441
|
-
return { dx: -(width + gap) *
|
|
7444
|
+
return { dx: -(width + gap) * chunkUHKFJBY5_cjs.AXIS_COS, dy: -(width + gap) * chunkUHKFJBY5_cjs.AXIS_SIN };
|
|
7442
7445
|
case "iso-depth-pos":
|
|
7443
|
-
return { dx: -(depth + gap) *
|
|
7446
|
+
return { dx: -(depth + gap) * chunkUHKFJBY5_cjs.AXIS_COS, dy: (depth + gap) * chunkUHKFJBY5_cjs.AXIS_SIN };
|
|
7444
7447
|
case "iso-depth-neg":
|
|
7445
|
-
return { dx: (depth + gap) *
|
|
7448
|
+
return { dx: (depth + gap) * chunkUHKFJBY5_cjs.AXIS_COS, dy: -(depth + gap) * chunkUHKFJBY5_cjs.AXIS_SIN };
|
|
7446
7449
|
case "iso-height-pos":
|
|
7447
7450
|
return { dx: 0, dy: height + gap };
|
|
7448
7451
|
case "iso-height-neg":
|
|
@@ -7505,7 +7508,7 @@ function resolveLinkInsertionTarget(sfl, lines, options) {
|
|
|
7505
7508
|
if (!VALID_IDENT.test(options.id) || nameExists(lines, options.id)) {
|
|
7506
7509
|
return null;
|
|
7507
7510
|
}
|
|
7508
|
-
const canvasObjects =
|
|
7511
|
+
const canvasObjects = chunkUHKFJBY5_cjs.sflToCanvasState(sfl).canvasObjects;
|
|
7509
7512
|
const hasSource = canvasObjects.some((canvasObject) => canvasObject.id === options.fromId);
|
|
7510
7513
|
const hasTarget = canvasObjects.some((canvasObject) => canvasObject.id === options.toId);
|
|
7511
7514
|
if (!hasSource || !hasTarget) {
|
|
@@ -7591,21 +7594,21 @@ function duplicateShape(sfl, input) {
|
|
|
7591
7594
|
|
|
7592
7595
|
// src/runtime/interaction/sflPatch/changes/quickDuplicateChange.ts
|
|
7593
7596
|
function applyQuickDuplicateChange(sfl, event, options) {
|
|
7594
|
-
const state =
|
|
7597
|
+
const state = chunkUHKFJBY5_cjs.sflToCanvasState(sfl);
|
|
7595
7598
|
const object = state.canvasObjects.find((candidate) => candidate.id === event.owner.id);
|
|
7596
7599
|
if (!object) {
|
|
7597
7600
|
return sfl;
|
|
7598
7601
|
}
|
|
7599
7602
|
const { direction } = event;
|
|
7600
7603
|
if (isIsometricDirection2(direction)) {
|
|
7601
|
-
return
|
|
7604
|
+
return chunkUHKFJBY5_cjs.isIsometricObject(object) ? duplicateIsometricObject(sfl, object, direction, options) : sfl;
|
|
7602
7605
|
}
|
|
7603
|
-
return
|
|
7606
|
+
return chunkUHKFJBY5_cjs.isIsometricObject(object) ? sfl : duplicateShape(sfl, { object, links: state.links, side: direction, options });
|
|
7604
7607
|
}
|
|
7605
7608
|
|
|
7606
7609
|
// src/runtime/interaction/sflPatch/changes/resizeChange.ts
|
|
7607
7610
|
function applyResizeChange(sfl, event) {
|
|
7608
|
-
const state =
|
|
7611
|
+
const state = chunkUHKFJBY5_cjs.sflToCanvasState(sfl);
|
|
7609
7612
|
const canvasObject = state.canvasObjects.find((candidate) => candidate.id === event.owner.id);
|
|
7610
7613
|
const parent = canvasObject?.parentFrameId ? state.canvasObjects.find((candidate) => candidate.id === canvasObject.parentFrameId) : void 0;
|
|
7611
7614
|
const originX = parent?.x ?? 0;
|