stickyflow 0.9.3 → 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 +20 -0
- package/README.md +1 -1
- 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-EURX7QT3.cjs → chunk-5G3BEXQU.cjs} +1300 -891
- package/dist/chunk-5G3BEXQU.cjs.map +1 -0
- package/dist/{chunk-AAP24GBG.js → chunk-BFQWCOEC.js} +3 -3
- package/dist/chunk-BFQWCOEC.js.map +1 -0
- package/dist/{chunk-3EOG34QN.cjs → chunk-F24JURN2.cjs} +561 -258
- package/dist/chunk-F24JURN2.cjs.map +1 -0
- package/dist/{chunk-2GKXPZRL.cjs → chunk-FXGXUWSI.cjs} +23 -23
- package/dist/chunk-FXGXUWSI.cjs.map +1 -0
- package/dist/{chunk-Q6FBISNP.js → chunk-G6IW2IX3.js} +601 -350
- package/dist/chunk-G6IW2IX3.js.map +1 -0
- package/dist/{chunk-G2N3KJYJ.js → chunk-Q6QLU6YQ.js} +662 -253
- package/dist/chunk-Q6QLU6YQ.js.map +1 -0
- package/dist/{chunk-C3LVKPWQ.js → chunk-RQYZNW2I.js} +532 -229
- package/dist/chunk-RQYZNW2I.js.map +1 -0
- package/dist/{chunk-XNNNIOJU.js → chunk-UB2ANTWF.js} +5 -5
- package/dist/{chunk-XNNNIOJU.js.map → chunk-UB2ANTWF.js.map} +1 -1
- package/dist/{chunk-C25NWWIH.cjs → chunk-UHKFJBY5.cjs} +605 -350
- package/dist/chunk-UHKFJBY5.cjs.map +1 -0
- package/dist/{chunk-MR32IJQO.cjs → chunk-WZA3DJJH.cjs} +15 -15
- package/dist/chunk-WZA3DJJH.cjs.map +1 -0
- package/dist/index.cjs +36 -36
- package/dist/index.d.cts +35 -30
- package/dist/index.d.ts +35 -30
- package/dist/index.js +5 -5
- package/dist/interaction/index.cjs +319 -352
- 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 +94 -127
- package/dist/interaction/index.js.map +1 -1
- package/dist/{render-DU4lYbRl.d.ts → render-BDO4S5uF.d.cts} +16 -0
- package/dist/{render-DU4lYbRl.d.cts → render-BDO4S5uF.d.ts} +16 -0
- package/dist/{runtime-DG8X3Fwf.d.cts → runtime-C-C5v9po.d.cts} +2 -2
- package/dist/{runtime-kqD1RS17.d.ts → runtime-lCAfU-1Q.d.ts} +2 -2
- package/dist/{runtimeTypes-vRaHOIHi.d.ts → runtimeTypes-B7p6b1Bi.d.cts} +2 -2
- package/dist/{runtimeTypes-CvjlBZds.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.cjs.map +1 -1
- 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/dist/web-component/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-2GKXPZRL.cjs.map +0 -1
- package/dist/chunk-3EOG34QN.cjs.map +0 -1
- package/dist/chunk-AAP24GBG.js.map +0 -1
- package/dist/chunk-C25NWWIH.cjs.map +0 -1
- package/dist/chunk-C3LVKPWQ.js.map +0 -1
- package/dist/chunk-EURX7QT3.cjs.map +0 -1
- package/dist/chunk-G2N3KJYJ.js.map +0 -1
- package/dist/chunk-MR32IJQO.cjs.map +0 -1
- package/dist/chunk-Q6FBISNP.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
|
}
|
|
@@ -457,16 +457,9 @@ function bindChartValueDrag(viewer, emitter) {
|
|
|
457
457
|
}
|
|
458
458
|
|
|
459
459
|
// src/runtime/interaction/colorEdit/color.ts
|
|
460
|
-
var HEX = /^#([0-9a-f]{3}|[0-9a-f]{6})$/i;
|
|
461
460
|
function normalizeHex(value) {
|
|
462
|
-
const
|
|
463
|
-
|
|
464
|
-
if (!HEX.test(withHash)) {
|
|
465
|
-
return null;
|
|
466
|
-
}
|
|
467
|
-
const body = withHash.slice(1);
|
|
468
|
-
const full = body.length === 3 ? body.split("").map((char) => char + char).join("") : body;
|
|
469
|
-
return `#${full.toLowerCase()}`;
|
|
461
|
+
const channels = chunkUHKFJBY5_cjs.parseHexRgb(value);
|
|
462
|
+
return channels && chunkUHKFJBY5_cjs.rgbToHex(...channels);
|
|
470
463
|
}
|
|
471
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;
|
|
472
465
|
var HEX_WITH_ALPHA = /^#([0-9a-f]{6})([0-9a-f]{2})$/i;
|
|
@@ -476,7 +469,7 @@ function parseColorAlpha(value) {
|
|
|
476
469
|
if (fn) {
|
|
477
470
|
const alpha = fn[4] === void 0 ? 1 : Number(fn[4]) / (fn[5] ? 100 : 1);
|
|
478
471
|
return {
|
|
479
|
-
hex:
|
|
472
|
+
hex: rgbToHex2({ r: Number(fn[1]), g: Number(fn[2]), b: Number(fn[3]) }),
|
|
480
473
|
alpha: Math.max(0, Math.min(1, alpha))
|
|
481
474
|
};
|
|
482
475
|
}
|
|
@@ -505,63 +498,28 @@ function clampChannel(value) {
|
|
|
505
498
|
return Math.max(0, Math.min(255, Math.round(value)));
|
|
506
499
|
}
|
|
507
500
|
function hexToRgb(hex) {
|
|
508
|
-
const
|
|
509
|
-
return {
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
const x = c * (1 - Math.abs(h / 60 % 2 - 1));
|
|
525
|
-
const m = v - c;
|
|
526
|
-
const sector = Math.floor(h / 60);
|
|
527
|
-
const table = [
|
|
528
|
-
[c, x, 0],
|
|
529
|
-
[x, c, 0],
|
|
530
|
-
[0, c, x],
|
|
531
|
-
[0, x, c],
|
|
532
|
-
[x, 0, c],
|
|
533
|
-
[c, 0, x]
|
|
534
|
-
];
|
|
535
|
-
const [r, g, b] = table[sector] ?? table[0];
|
|
536
|
-
return { r: Math.round((r + m) * 255), g: Math.round((g + m) * 255), b: Math.round((b + m) * 255) };
|
|
537
|
-
}
|
|
538
|
-
function rgbToHsv(rgb) {
|
|
539
|
-
const r = clampChannel(rgb.r) / 255;
|
|
540
|
-
const g = clampChannel(rgb.g) / 255;
|
|
541
|
-
const b = clampChannel(rgb.b) / 255;
|
|
542
|
-
const max = Math.max(r, g, b);
|
|
543
|
-
const min = Math.min(r, g, b);
|
|
544
|
-
const delta = max - min;
|
|
545
|
-
let h = 0;
|
|
546
|
-
if (delta !== 0) {
|
|
547
|
-
if (max === r) {
|
|
548
|
-
h = 60 * ((g - b) / delta % 6);
|
|
549
|
-
} else if (max === g) {
|
|
550
|
-
h = 60 * ((b - r) / delta + 2);
|
|
551
|
-
} else {
|
|
552
|
-
h = 60 * ((r - g) / delta + 4);
|
|
553
|
-
}
|
|
554
|
-
}
|
|
555
|
-
if (h < 0) {
|
|
556
|
-
h += 360;
|
|
557
|
-
}
|
|
558
|
-
return { h, s: max === 0 ? 0 : delta / max, v: max };
|
|
501
|
+
const [r, g, b] = chunkUHKFJBY5_cjs.parseHexRgb(hex) ?? [0, 0, 0];
|
|
502
|
+
return { r, g, b };
|
|
503
|
+
}
|
|
504
|
+
function rgbToHex2(rgb) {
|
|
505
|
+
return chunkUHKFJBY5_cjs.rgbToHex(clampChannel(rgb.r), clampChannel(rgb.g), clampChannel(rgb.b));
|
|
506
|
+
}
|
|
507
|
+
function hsvToRgb2(hsv) {
|
|
508
|
+
const { r, g, b } = chunkUHKFJBY5_cjs.hsvToRgb(
|
|
509
|
+
(hsv.h % 360 + 360) % 360,
|
|
510
|
+
Math.max(0, Math.min(1, hsv.s)),
|
|
511
|
+
Math.max(0, Math.min(1, hsv.v))
|
|
512
|
+
);
|
|
513
|
+
return { r, g, b };
|
|
514
|
+
}
|
|
515
|
+
function rgbToHsv2(rgb) {
|
|
516
|
+
return chunkUHKFJBY5_cjs.rgbToHsv(clampChannel(rgb.r), clampChannel(rgb.g), clampChannel(rgb.b));
|
|
559
517
|
}
|
|
560
518
|
function hexToHsv(hex) {
|
|
561
|
-
return
|
|
519
|
+
return rgbToHsv2(hexToRgb(hex));
|
|
562
520
|
}
|
|
563
521
|
function hsvToHex(hsv) {
|
|
564
|
-
return
|
|
522
|
+
return rgbToHex2(hsvToRgb2(hsv));
|
|
565
523
|
}
|
|
566
524
|
|
|
567
525
|
// src/runtime/interaction/colorEdit/gradientValue.ts
|
|
@@ -1002,9 +960,9 @@ function bindChannel(picker, channel) {
|
|
|
1002
960
|
return;
|
|
1003
961
|
}
|
|
1004
962
|
const next = { ...hexToRgb(activeHex(picker)), [channel]: value };
|
|
1005
|
-
const nextHsv =
|
|
963
|
+
const nextHsv = rgbToHsv2(next);
|
|
1006
964
|
picker.state.hsv = nextHsv.s === 0 ? { ...nextHsv, h: picker.state.hsv.h } : nextHsv;
|
|
1007
|
-
setActiveColor(picker,
|
|
965
|
+
setActiveColor(picker, rgbToHex2(next));
|
|
1008
966
|
picker.render();
|
|
1009
967
|
};
|
|
1010
968
|
const read = (event) => event.target.value;
|
|
@@ -1751,7 +1709,7 @@ var ColorEditSession = class {
|
|
|
1751
1709
|
const hasOverride = target.node.getAttribute("data-sf-color-override") === "true";
|
|
1752
1710
|
this.#open = openColorPopover({
|
|
1753
1711
|
seed: seedFrom(fill, readGradientValue(this.#svg, fill)),
|
|
1754
|
-
anchor:
|
|
1712
|
+
anchor: chunkWZA3DJJH_cjs.screenRectOf(target.node),
|
|
1755
1713
|
theme: resolveTheme(this.#theme),
|
|
1756
1714
|
allowGradient: !target.solidOnly,
|
|
1757
1715
|
onCommit: (color) => {
|
|
@@ -1833,7 +1791,7 @@ function resolveTarget(event, selector, pathOf, rules) {
|
|
|
1833
1791
|
return null;
|
|
1834
1792
|
}
|
|
1835
1793
|
const path = pathOf(node);
|
|
1836
|
-
const owner =
|
|
1794
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(node);
|
|
1837
1795
|
if (!path || !owner || !isEditablePath(path, rules) || requiresPriorSelection(node, owner)) {
|
|
1838
1796
|
return null;
|
|
1839
1797
|
}
|
|
@@ -1855,7 +1813,7 @@ function resolveZoneGradientTarget(event) {
|
|
|
1855
1813
|
if (!node) {
|
|
1856
1814
|
return null;
|
|
1857
1815
|
}
|
|
1858
|
-
const owner =
|
|
1816
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(node);
|
|
1859
1817
|
if (!owner) {
|
|
1860
1818
|
return null;
|
|
1861
1819
|
}
|
|
@@ -1891,7 +1849,7 @@ var ZoneGradientSession = class {
|
|
|
1891
1849
|
const beforeStops = sortStops(gradient.stops);
|
|
1892
1850
|
this.#open = openColorPopover({
|
|
1893
1851
|
seed: seedFrom(fill, gradient),
|
|
1894
|
-
anchor:
|
|
1852
|
+
anchor: chunkWZA3DJJH_cjs.screenRectOf(target.node),
|
|
1895
1853
|
theme: resolveTheme(this.#theme),
|
|
1896
1854
|
allowGradient: true,
|
|
1897
1855
|
lockStops: true,
|
|
@@ -1964,15 +1922,15 @@ function bindDeleteSelection(viewer, emitter) {
|
|
|
1964
1922
|
}
|
|
1965
1923
|
|
|
1966
1924
|
// src/runtime/interaction/events.ts
|
|
1967
|
-
var Emitter2 = class extends
|
|
1925
|
+
var Emitter2 = class extends chunkWZA3DJJH_cjs.Emitter {
|
|
1968
1926
|
};
|
|
1969
1927
|
|
|
1970
1928
|
// src/runtime/interaction/linkPreview/geometry.ts
|
|
1971
1929
|
function anchorPoint(bounds, side, other) {
|
|
1972
1930
|
if (side) {
|
|
1973
|
-
return
|
|
1931
|
+
return chunkUHKFJBY5_cjs.pointAtPort(bounds, { side, offset: 0.5 });
|
|
1974
1932
|
}
|
|
1975
|
-
return
|
|
1933
|
+
return chunkUHKFJBY5_cjs.edgePointToward(bounds, other);
|
|
1976
1934
|
}
|
|
1977
1935
|
function polylinePathData(points) {
|
|
1978
1936
|
if (points.length < 4) {
|
|
@@ -1989,7 +1947,7 @@ function previewPathData(points, segments, pathType, strokeWidth) {
|
|
|
1989
1947
|
return `M ${points[0]} ${points[1]} C ${points[2]} ${points[3]} ${points[4]} ${points[5]} ${points[6]} ${points[7]}`;
|
|
1990
1948
|
}
|
|
1991
1949
|
if (pathType === "orthogonal" && segments.length > 0) {
|
|
1992
|
-
return
|
|
1950
|
+
return chunkUHKFJBY5_cjs.roundedOrthogonalPathData(segments, Math.max(16, strokeWidth * 4));
|
|
1993
1951
|
}
|
|
1994
1952
|
return polylinePathData(points);
|
|
1995
1953
|
}
|
|
@@ -2009,8 +1967,8 @@ function previewLink(fromSide, toSide) {
|
|
|
2009
1967
|
function routePreviewLink(fromBounds, toBounds, fromSide, toSide, pathType) {
|
|
2010
1968
|
const from = anchorPoint(fromBounds, fromSide, toBounds);
|
|
2011
1969
|
const to = anchorPoint(toBounds, toSide, fromBounds);
|
|
2012
|
-
const { points, segments } =
|
|
2013
|
-
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) };
|
|
2014
1972
|
}
|
|
2015
1973
|
|
|
2016
1974
|
// src/runtime/interaction/linkPreview/discovery.ts
|
|
@@ -2042,7 +2000,7 @@ function resolveOppositeEndpoint(svg, path, canvasObjectId) {
|
|
|
2042
2000
|
if (!otherId) {
|
|
2043
2001
|
return null;
|
|
2044
2002
|
}
|
|
2045
|
-
const otherPrimary =
|
|
2003
|
+
const otherPrimary = chunkWZA3DJJH_cjs.findOwnerNode(svg, otherId, chunkWZA3DJJH_cjs.isPrimary);
|
|
2046
2004
|
return otherPrimary ? { draggedIsFrom, bounds: otherPrimary.getBBox() } : null;
|
|
2047
2005
|
}
|
|
2048
2006
|
function captureLiveLinkLabel(svg, draft, draggedBounds) {
|
|
@@ -2089,8 +2047,8 @@ function resolveOtherFacePoint(svg, path, canvasObjectId) {
|
|
|
2089
2047
|
if (!otherId || !face || !otherFace) {
|
|
2090
2048
|
return null;
|
|
2091
2049
|
}
|
|
2092
|
-
const otherPrimary =
|
|
2093
|
-
const otherGeometry = otherPrimary &&
|
|
2050
|
+
const otherPrimary = chunkWZA3DJJH_cjs.findOwnerNode(svg, otherId, chunkWZA3DJJH_cjs.isPrimary);
|
|
2051
|
+
const otherGeometry = otherPrimary && chunkWZA3DJJH_cjs.isometricGeometryOf(otherPrimary);
|
|
2094
2052
|
if (!otherGeometry?.bounds) {
|
|
2095
2053
|
return null;
|
|
2096
2054
|
}
|
|
@@ -2101,7 +2059,7 @@ function resolveOtherFacePoint(svg, path, canvasObjectId) {
|
|
|
2101
2059
|
height: otherGeometry.height,
|
|
2102
2060
|
depth: otherGeometry.depth
|
|
2103
2061
|
};
|
|
2104
|
-
return { otherPoint:
|
|
2062
|
+
return { otherPoint: chunkUHKFJBY5_cjs.isometricFaceCenter(otherObject, otherFace), draggedIsFrom, face };
|
|
2105
2063
|
}
|
|
2106
2064
|
function findLiveFaceLinks(svg, canvasObjectId) {
|
|
2107
2065
|
const escapedId = CSS.escape(canvasObjectId);
|
|
@@ -2120,7 +2078,7 @@ function findLiveFaceLinks(svg, canvasObjectId) {
|
|
|
2120
2078
|
|
|
2121
2079
|
// src/runtime/interaction/linkPreview/faceUpdate.ts
|
|
2122
2080
|
function updateLiveFaceLink(link, liveObject) {
|
|
2123
|
-
const draggedPoint =
|
|
2081
|
+
const draggedPoint = chunkUHKFJBY5_cjs.isometricFaceCenter(liveObject, link.face);
|
|
2124
2082
|
const from = link.draggedIsFrom ? draggedPoint : link.otherPoint;
|
|
2125
2083
|
const to = link.draggedIsFrom ? link.otherPoint : draggedPoint;
|
|
2126
2084
|
link.path.setAttribute("d", `M ${from.x} ${from.y} L ${to.x} ${to.y}`);
|
|
@@ -2144,7 +2102,7 @@ function updateLabelGap(link, points) {
|
|
|
2144
2102
|
if (!link.labelGapSize) {
|
|
2145
2103
|
return;
|
|
2146
2104
|
}
|
|
2147
|
-
const gap =
|
|
2105
|
+
const gap = chunkUHKFJBY5_cjs.labelGapDash(points, link.pathType, link.labelGapSize.width, link.labelGapSize.height);
|
|
2148
2106
|
if (gap) {
|
|
2149
2107
|
link.path.setAttribute("stroke-dasharray", `${gap.dashBefore} ${gap.gapLength} 1000000`);
|
|
2150
2108
|
} else {
|
|
@@ -2190,11 +2148,11 @@ function readIsometricSnapStep(svg) {
|
|
|
2190
2148
|
return step > 0 ? step : null;
|
|
2191
2149
|
}
|
|
2192
2150
|
function nearestIsometricLatticePoint(point, step) {
|
|
2193
|
-
const u = point.x / (
|
|
2194
|
-
const v = point.y / (
|
|
2151
|
+
const u = point.x / (chunkUHKFJBY5_cjs.AXIS_COS * step);
|
|
2152
|
+
const v = point.y / (chunkUHKFJBY5_cjs.AXIS_SIN * step);
|
|
2195
2153
|
const i = Math.round((u + v) / 2);
|
|
2196
2154
|
const j = Math.round((u - v) / 2);
|
|
2197
|
-
return { x: (i + j) *
|
|
2155
|
+
return { x: (i + j) * chunkUHKFJBY5_cjs.AXIS_COS * step, y: (i - j) * chunkUHKFJBY5_cjs.AXIS_SIN * step };
|
|
2198
2156
|
}
|
|
2199
2157
|
function snapToStep(value, step, min) {
|
|
2200
2158
|
return Math.max(min, Math.round(value / step) * step);
|
|
@@ -2207,21 +2165,21 @@ var LABEL_FONT_SIZE = 12;
|
|
|
2207
2165
|
var LABEL_LINE_HEIGHT = 1.2;
|
|
2208
2166
|
var LABEL_BASELINE_OFFSET = -LABEL_GAP - LABEL_HEIGHT + (LABEL_HEIGHT - LABEL_FONT_SIZE * LABEL_LINE_HEIGHT) / 2 + LABEL_FONT_SIZE;
|
|
2209
2167
|
function applyIsometricAxisPreview(nodes, object, cornerRadius, overlay, svg) {
|
|
2210
|
-
const faces =
|
|
2211
|
-
nodes.top?.setAttribute("d",
|
|
2212
|
-
nodes.front?.setAttribute("d",
|
|
2213
|
-
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));
|
|
2214
2172
|
const silhouette = [faces.top[0], faces.top[1], faces.right[2], faces.front[2], faces.front[3], faces.top[3]];
|
|
2215
|
-
const hullPath =
|
|
2173
|
+
const hullPath = chunkUHKFJBY5_cjs.roundedPolygonPath(silhouette, cornerRadius);
|
|
2216
2174
|
nodes.hull?.setAttribute("d", hullPath);
|
|
2217
2175
|
if (overlay.halo) {
|
|
2218
|
-
|
|
2176
|
+
chunkWZA3DJJH_cjs.updateHalo(overlay.halo, hullPath);
|
|
2219
2177
|
}
|
|
2220
|
-
const placements =
|
|
2178
|
+
const placements = chunkWZA3DJJH_cjs.axisArrowPlacements(object);
|
|
2221
2179
|
Object.keys(placements).forEach((axis) => {
|
|
2222
2180
|
const group = overlay.arrows[axis];
|
|
2223
2181
|
if (group) {
|
|
2224
|
-
|
|
2182
|
+
chunkWZA3DJJH_cjs.updateAxisArrowGroup(group, placements[axis].origin, placements[axis].direction, svg);
|
|
2225
2183
|
}
|
|
2226
2184
|
});
|
|
2227
2185
|
nodes.seams?.setAttribute(
|
|
@@ -2239,9 +2197,9 @@ function applyIsometricAxisPreview(nodes, object, cornerRadius, overlay, svg) {
|
|
|
2239
2197
|
x: footprintCenter.x + (point.x - footprintCenter.x) * shadowSpread,
|
|
2240
2198
|
y: footprintCenter.y + (point.y - footprintCenter.y) * shadowSpread
|
|
2241
2199
|
}));
|
|
2242
|
-
nodes.groundShadow.setAttribute("d",
|
|
2200
|
+
nodes.groundShadow.setAttribute("d", chunkUHKFJBY5_cjs.roundedPolygonPath(footprint, 0));
|
|
2243
2201
|
}
|
|
2244
|
-
const anchor =
|
|
2202
|
+
const anchor = chunkUHKFJBY5_cjs.isometricTopFaceCenter(object);
|
|
2245
2203
|
if (nodes.labelGuide) {
|
|
2246
2204
|
nodes.labelGuide.setAttribute("d", `M ${anchor.x} ${anchor.y - LABEL_GAP} L ${anchor.x} ${anchor.y}`);
|
|
2247
2205
|
}
|
|
@@ -2257,7 +2215,7 @@ function applyIsometricAxisPreview(nodes, object, cornerRadius, overlay, svg) {
|
|
|
2257
2215
|
// src/runtime/interaction/isometricAxisResize/state.ts
|
|
2258
2216
|
var AXES = ["width", "height", "depth"];
|
|
2259
2217
|
function collectNodes(svg, ownerId) {
|
|
2260
|
-
const all =
|
|
2218
|
+
const all = chunkWZA3DJJH_cjs.findAllOwnerNodes(svg, ownerId);
|
|
2261
2219
|
const bySuffix = (suffix) => all.find((el2) => el2.id.endsWith(suffix)) ?? null;
|
|
2262
2220
|
return {
|
|
2263
2221
|
top: bySuffix("-top"),
|
|
@@ -2270,46 +2228,56 @@ function collectNodes(svg, ownerId) {
|
|
|
2270
2228
|
labelGuide: bySuffix("-label-guide")
|
|
2271
2229
|
};
|
|
2272
2230
|
}
|
|
2273
|
-
function
|
|
2231
|
+
function findResizeHandle(event) {
|
|
2274
2232
|
const target = event.target;
|
|
2275
2233
|
const captureTarget = target?.closest?.("[data-sf-resize-handle]");
|
|
2276
2234
|
const handleAttr = captureTarget?.getAttribute("data-sf-resize-handle");
|
|
2277
2235
|
if (!captureTarget || !handleAttr?.startsWith("iso-")) {
|
|
2278
2236
|
return null;
|
|
2279
2237
|
}
|
|
2280
|
-
const axis = handleAttr.slice(4);
|
|
2281
2238
|
const overlay = captureTarget.closest("[data-sf-selection-overlay]");
|
|
2282
2239
|
const ownerId = overlay?.getAttribute("data-sf-selection-overlay");
|
|
2283
|
-
if (!ownerId) {
|
|
2240
|
+
if (!overlay || !ownerId) {
|
|
2241
|
+
return null;
|
|
2242
|
+
}
|
|
2243
|
+
return { captureTarget, axis: handleAttr.slice(4), overlay, ownerId };
|
|
2244
|
+
}
|
|
2245
|
+
function overlayPartsOf(overlay) {
|
|
2246
|
+
const overlayHalo = overlay.querySelector(`[${chunkWZA3DJJH_cjs.ISO_HALO_ATTR}]`) ?? null;
|
|
2247
|
+
const overlayArrows = Object.fromEntries(
|
|
2248
|
+
AXES.map((axis) => [
|
|
2249
|
+
axis,
|
|
2250
|
+
overlay.querySelector(`[data-sf-resize-handle="iso-${axis}"]`) ?? null
|
|
2251
|
+
])
|
|
2252
|
+
);
|
|
2253
|
+
const overlayDuplicateBubbles = overlay.querySelector(`[${chunkWZA3DJJH_cjs.ISO_DUPLICATE_BUBBLES_ATTR}]`) ?? null;
|
|
2254
|
+
if (overlayDuplicateBubbles) {
|
|
2255
|
+
overlayDuplicateBubbles.style.display = "none";
|
|
2256
|
+
}
|
|
2257
|
+
return { overlayHalo, overlayArrows, overlayDuplicateBubbles };
|
|
2258
|
+
}
|
|
2259
|
+
function createIsometricAxisDragState(svg, event) {
|
|
2260
|
+
const handle = findResizeHandle(event);
|
|
2261
|
+
if (!handle) {
|
|
2284
2262
|
return null;
|
|
2285
2263
|
}
|
|
2286
|
-
const
|
|
2287
|
-
const
|
|
2264
|
+
const { captureTarget, axis, overlay, ownerId } = handle;
|
|
2265
|
+
const primary = chunkWZA3DJJH_cjs.findOwnerNode(svg, ownerId, chunkWZA3DJJH_cjs.isPrimary);
|
|
2266
|
+
const owner = primary && chunkWZA3DJJH_cjs.resolveOwner(primary);
|
|
2288
2267
|
if (!primary || owner?.role !== "isometric") {
|
|
2289
2268
|
return null;
|
|
2290
2269
|
}
|
|
2291
|
-
const startUser =
|
|
2270
|
+
const startUser = chunkWZA3DJJH_cjs.pointerUserPoint(svg, event);
|
|
2292
2271
|
if (!startUser) {
|
|
2293
2272
|
return null;
|
|
2294
2273
|
}
|
|
2295
|
-
const geometry =
|
|
2274
|
+
const geometry = chunkWZA3DJJH_cjs.isometricGeometryOf(primary);
|
|
2296
2275
|
const bounds = geometry?.bounds ?? primary.getBBox();
|
|
2297
2276
|
const nodes = collectNodes(svg, ownerId);
|
|
2298
2277
|
[nodes.top, nodes.front, nodes.side].forEach((node) => {
|
|
2299
2278
|
node?.removeAttribute("clip-path");
|
|
2300
2279
|
});
|
|
2301
2280
|
captureTarget.setPointerCapture?.(event.pointerId);
|
|
2302
|
-
const overlayHalo = overlay?.querySelector(`[${chunkMR32IJQO_cjs.ISO_HALO_ATTR}]`) ?? null;
|
|
2303
|
-
const overlayArrows = Object.fromEntries(
|
|
2304
|
-
AXES.map((axis2) => [
|
|
2305
|
-
axis2,
|
|
2306
|
-
overlay?.querySelector(`[data-sf-resize-handle="iso-${axis2}"]`) ?? null
|
|
2307
|
-
])
|
|
2308
|
-
);
|
|
2309
|
-
const overlayDuplicateBubbles = overlay?.querySelector(`[${chunkMR32IJQO_cjs.ISO_DUPLICATE_BUBBLES_ATTR}]`) ?? null;
|
|
2310
|
-
if (overlayDuplicateBubbles) {
|
|
2311
|
-
overlayDuplicateBubbles.style.display = "none";
|
|
2312
|
-
}
|
|
2313
2281
|
const start = {
|
|
2314
2282
|
x: bounds.x,
|
|
2315
2283
|
y: bounds.y,
|
|
@@ -2323,11 +2291,9 @@ function createIsometricAxisDragState(svg, event) {
|
|
|
2323
2291
|
pointerId: event.pointerId,
|
|
2324
2292
|
startUser,
|
|
2325
2293
|
start,
|
|
2326
|
-
cornerRadius: geometry?.cornerRadius ?? Number(primary.getAttribute(
|
|
2294
|
+
cornerRadius: geometry?.cornerRadius ?? Number(primary.getAttribute(chunkUHKFJBY5_cjs.CORNER_RADIUS_ATTR)) ?? 0,
|
|
2327
2295
|
nodes,
|
|
2328
|
-
|
|
2329
|
-
overlayArrows,
|
|
2330
|
-
overlayDuplicateBubbles,
|
|
2296
|
+
...overlayPartsOf(overlay),
|
|
2331
2297
|
liveFaceLinks: findLiveFaceLinks(svg, ownerId),
|
|
2332
2298
|
moved: false,
|
|
2333
2299
|
current: start
|
|
@@ -2342,15 +2308,15 @@ function nextGeometry(drag, point, step) {
|
|
|
2342
2308
|
const dx = point.x - drag.startUser.x;
|
|
2343
2309
|
const dy = point.y - drag.startUser.y;
|
|
2344
2310
|
if (axis === "width") {
|
|
2345
|
-
const delta2 = dx *
|
|
2311
|
+
const delta2 = dx * chunkUHKFJBY5_cjs.AXIS_COS + dy * chunkUHKFJBY5_cjs.AXIS_SIN;
|
|
2346
2312
|
return { ...start, width: length(start.width + delta2, MIN_SIZE) };
|
|
2347
2313
|
}
|
|
2348
2314
|
if (axis === "height") {
|
|
2349
2315
|
return { ...start, height: length(start.height + dy, MIN_SIZE) };
|
|
2350
2316
|
}
|
|
2351
|
-
const delta = -dx *
|
|
2317
|
+
const delta = -dx * chunkUHKFJBY5_cjs.AXIS_COS + dy * chunkUHKFJBY5_cjs.AXIS_SIN;
|
|
2352
2318
|
const depth = length(start.depth + delta, 0);
|
|
2353
|
-
const x = start.x + (start.depth - depth) *
|
|
2319
|
+
const x = start.x + (start.depth - depth) * chunkUHKFJBY5_cjs.AXIS_COS;
|
|
2354
2320
|
return { ...start, x, depth };
|
|
2355
2321
|
}
|
|
2356
2322
|
var IsometricAxisResizeSession = class {
|
|
@@ -2362,7 +2328,7 @@ var IsometricAxisResizeSession = class {
|
|
|
2362
2328
|
this.#emitter = emitter;
|
|
2363
2329
|
}
|
|
2364
2330
|
pointerDown = (event) => {
|
|
2365
|
-
if (event.button !== 0 || this.#drag ||
|
|
2331
|
+
if (event.button !== 0 || this.#drag || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
2366
2332
|
return;
|
|
2367
2333
|
}
|
|
2368
2334
|
this.#drag = createIsometricAxisDragState(this.#svg, event);
|
|
@@ -2372,7 +2338,7 @@ var IsometricAxisResizeSession = class {
|
|
|
2372
2338
|
if (!drag || event.pointerId !== drag.pointerId) {
|
|
2373
2339
|
return;
|
|
2374
2340
|
}
|
|
2375
|
-
const point =
|
|
2341
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
2376
2342
|
if (!point) {
|
|
2377
2343
|
return;
|
|
2378
2344
|
}
|
|
@@ -2470,7 +2436,7 @@ function findLabelMark(event) {
|
|
|
2470
2436
|
);
|
|
2471
2437
|
}
|
|
2472
2438
|
function isLabelPointer(event) {
|
|
2473
|
-
return event.button === 0 && !
|
|
2439
|
+
return event.button === 0 && !chunkWZA3DJJH_cjs.isCameraGesture(event);
|
|
2474
2440
|
}
|
|
2475
2441
|
function findHull(svg, ownerId) {
|
|
2476
2442
|
return svg.querySelector(`[data-sf-id="${CSS.escape(ownerId)}"][data-sf-primary="true"]`);
|
|
@@ -2486,21 +2452,21 @@ function resolveIsometricLabelDrag(svg, event) {
|
|
|
2486
2452
|
if (!clicked) {
|
|
2487
2453
|
return null;
|
|
2488
2454
|
}
|
|
2489
|
-
const owner =
|
|
2455
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(clicked);
|
|
2490
2456
|
if (owner?.role !== "isometric") {
|
|
2491
2457
|
return null;
|
|
2492
2458
|
}
|
|
2493
2459
|
const hull = findHull(svg, owner.id);
|
|
2494
|
-
const geometry = hull ?
|
|
2460
|
+
const geometry = hull ? chunkWZA3DJJH_cjs.isometricGeometryOf(hull) : null;
|
|
2495
2461
|
if (!geometry?.bounds) {
|
|
2496
2462
|
return null;
|
|
2497
2463
|
}
|
|
2498
|
-
const start =
|
|
2464
|
+
const start = chunkWZA3DJJH_cjs.pointerUserPoint(svg, event);
|
|
2499
2465
|
if (!start) {
|
|
2500
2466
|
return null;
|
|
2501
2467
|
}
|
|
2502
2468
|
const anchorX = geometry.bounds.x + geometry.bounds.width / 2;
|
|
2503
|
-
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;
|
|
2504
2470
|
const text = findBySuffix(svg, `-${owner.id}-label`);
|
|
2505
2471
|
if (!text) {
|
|
2506
2472
|
return null;
|
|
@@ -2552,7 +2518,7 @@ var IsometricLabelDragSession = class {
|
|
|
2552
2518
|
if (!this.#drag || event.pointerId !== this.#drag.pointerId) {
|
|
2553
2519
|
return;
|
|
2554
2520
|
}
|
|
2555
|
-
const point =
|
|
2521
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
2556
2522
|
if (!point) {
|
|
2557
2523
|
return;
|
|
2558
2524
|
}
|
|
@@ -2627,7 +2593,7 @@ function isIsometricDirection(value) {
|
|
|
2627
2593
|
function bindIsometricQuickDuplicate(viewer, emitter) {
|
|
2628
2594
|
const svg = viewer.svg;
|
|
2629
2595
|
const onPointerDown = (event) => {
|
|
2630
|
-
if (event.button !== 0 ||
|
|
2596
|
+
if (event.button !== 0 || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
2631
2597
|
return;
|
|
2632
2598
|
}
|
|
2633
2599
|
const bubble = event.target?.closest("[data-sf-quick-duplicate]");
|
|
@@ -2638,7 +2604,7 @@ function bindIsometricQuickDuplicate(viewer, emitter) {
|
|
|
2638
2604
|
const overlay = bubble.closest("[data-sf-selection-overlay]");
|
|
2639
2605
|
const sourceId = overlay?.getAttribute("data-sf-selection-overlay");
|
|
2640
2606
|
const primary = sourceId ? svg.querySelector(`[data-sf-id="${CSS.escape(sourceId)}"][data-sf-primary="true"]`) : null;
|
|
2641
|
-
const owner = primary &&
|
|
2607
|
+
const owner = primary && chunkWZA3DJJH_cjs.resolveOwner(primary);
|
|
2642
2608
|
if (!owner) {
|
|
2643
2609
|
return;
|
|
2644
2610
|
}
|
|
@@ -2688,25 +2654,12 @@ function crossedEndpointDragThreshold(drag, event) {
|
|
|
2688
2654
|
}
|
|
2689
2655
|
|
|
2690
2656
|
// src/runtime/interaction/linkEndpoint/preview.ts
|
|
2691
|
-
function previewLink2(fromSide, toSide) {
|
|
2692
|
-
return {
|
|
2693
|
-
id: "preview",
|
|
2694
|
-
fromId: "",
|
|
2695
|
-
toId: "",
|
|
2696
|
-
layerGroup: "",
|
|
2697
|
-
orderKey: "",
|
|
2698
|
-
isVisible: true,
|
|
2699
|
-
isLocked: false,
|
|
2700
|
-
fromPoint: { kind: "side", side: fromSide, offset: 0.5 },
|
|
2701
|
-
toPoint: { kind: "side", side: toSide, offset: 0.5 }
|
|
2702
|
-
};
|
|
2703
|
-
}
|
|
2704
2657
|
function updateEndpointPreview(drag, draggedPoint, draggedSide) {
|
|
2705
2658
|
const fromPoint = drag.end === "from" ? draggedPoint : drag.fixedPoint;
|
|
2706
2659
|
const toPoint = drag.end === "to" ? draggedPoint : drag.fixedPoint;
|
|
2707
2660
|
const fromSide = drag.end === "from" ? draggedSide : drag.fixedSide;
|
|
2708
2661
|
const toSide = drag.end === "to" ? draggedSide : drag.fixedSide;
|
|
2709
|
-
const { points, segments } =
|
|
2662
|
+
const { points, segments } = chunkUHKFJBY5_cjs.calculateLinkRoute(previewLink(fromSide, toSide), fromPoint, toPoint, drag.pathType);
|
|
2710
2663
|
drag.path.setAttribute("d", previewPathData(points, segments, drag.pathType, drag.strokeWidth));
|
|
2711
2664
|
}
|
|
2712
2665
|
|
|
@@ -2728,7 +2681,7 @@ var LinkGhost = class {
|
|
|
2728
2681
|
constructor(svg, path) {
|
|
2729
2682
|
this.#svg = svg;
|
|
2730
2683
|
this.#path = path;
|
|
2731
|
-
this.#anchors = svg.ownerDocument.createElementNS(
|
|
2684
|
+
this.#anchors = svg.ownerDocument.createElementNS(chunkWZA3DJJH_cjs.SVG_NAMESPACE, "g");
|
|
2732
2685
|
this.#anchors.setAttribute("data-sf-link-target", "");
|
|
2733
2686
|
this.#anchors.setAttribute("pointer-events", "none");
|
|
2734
2687
|
}
|
|
@@ -2738,7 +2691,7 @@ var LinkGhost = class {
|
|
|
2738
2691
|
for (const name of RESTORED_ATTRIBUTES) {
|
|
2739
2692
|
this.#saved.set(name, this.#path.getAttribute(name));
|
|
2740
2693
|
}
|
|
2741
|
-
const dash = GHOST_DASH_PX /
|
|
2694
|
+
const dash = GHOST_DASH_PX / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg);
|
|
2742
2695
|
this.#path.setAttribute("stroke-dasharray", `${dash} ${dash}`);
|
|
2743
2696
|
this.#path.setAttribute("stroke-linecap", "round");
|
|
2744
2697
|
this.#path.setAttribute("opacity", GHOST_OPACITY);
|
|
@@ -2767,7 +2720,7 @@ var LinkGhost = class {
|
|
|
2767
2720
|
if (!bounds) {
|
|
2768
2721
|
return;
|
|
2769
2722
|
}
|
|
2770
|
-
const unit = 1 /
|
|
2723
|
+
const unit = 1 / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg);
|
|
2771
2724
|
const centers = [
|
|
2772
2725
|
[bounds.x + bounds.width / 2, bounds.y],
|
|
2773
2726
|
[bounds.x + bounds.width, bounds.y + bounds.height / 2],
|
|
@@ -2775,7 +2728,7 @@ var LinkGhost = class {
|
|
|
2775
2728
|
[bounds.x, bounds.y + bounds.height / 2]
|
|
2776
2729
|
];
|
|
2777
2730
|
for (const [cx, cy] of centers) {
|
|
2778
|
-
const dot = this.#svg.ownerDocument.createElementNS(
|
|
2731
|
+
const dot = this.#svg.ownerDocument.createElementNS(chunkWZA3DJJH_cjs.SVG_NAMESPACE, "circle");
|
|
2779
2732
|
dot.setAttribute("cx", String(cx));
|
|
2780
2733
|
dot.setAttribute("cy", String(cy));
|
|
2781
2734
|
dot.setAttribute("r", String(ANCHOR_RADIUS_PX * unit));
|
|
@@ -2795,7 +2748,7 @@ function collectEndpointCandidates(svg) {
|
|
|
2795
2748
|
if (element2.getAttribute("data-sf-role") === "link") {
|
|
2796
2749
|
continue;
|
|
2797
2750
|
}
|
|
2798
|
-
const owner =
|
|
2751
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(element2);
|
|
2799
2752
|
if (owner) {
|
|
2800
2753
|
candidates.push({ owner, bounds: element2.getBBox() });
|
|
2801
2754
|
}
|
|
@@ -2872,7 +2825,7 @@ function inferFixedSide(svg, reference, fixedPrimary) {
|
|
|
2872
2825
|
if (reference.declaredSide) {
|
|
2873
2826
|
return reference.declaredSide;
|
|
2874
2827
|
}
|
|
2875
|
-
const draggedPrimary = reference.draggedId ?
|
|
2828
|
+
const draggedPrimary = reference.draggedId ? chunkWZA3DJJH_cjs.findOwnerNode(svg, reference.draggedId, chunkWZA3DJJH_cjs.isPrimary) : null;
|
|
2876
2829
|
if (!draggedPrimary) {
|
|
2877
2830
|
return "right";
|
|
2878
2831
|
}
|
|
@@ -2880,7 +2833,7 @@ function inferFixedSide(svg, reference, fixedPrimary) {
|
|
|
2880
2833
|
}
|
|
2881
2834
|
function resolveFixedEndpoint(svg, path, draggedEnd) {
|
|
2882
2835
|
const reference = fixedEndpointReference(path, draggedEnd);
|
|
2883
|
-
const fixedPrimary = reference.fixedId ?
|
|
2836
|
+
const fixedPrimary = reference.fixedId ? chunkWZA3DJJH_cjs.findOwnerNode(svg, reference.fixedId, chunkWZA3DJJH_cjs.isPrimary) : null;
|
|
2884
2837
|
if (!fixedPrimary) {
|
|
2885
2838
|
return null;
|
|
2886
2839
|
}
|
|
@@ -2899,8 +2852,8 @@ function selectLinkEndpoint(svg, event) {
|
|
|
2899
2852
|
if (!target || !end || !linkId) {
|
|
2900
2853
|
return null;
|
|
2901
2854
|
}
|
|
2902
|
-
const path =
|
|
2903
|
-
const linkOwner = path &&
|
|
2855
|
+
const path = chunkWZA3DJJH_cjs.findOwnerNode(svg, linkId, chunkWZA3DJJH_cjs.isPrimary);
|
|
2856
|
+
const linkOwner = path && chunkWZA3DJJH_cjs.resolveOwner(path);
|
|
2904
2857
|
if (!path || !linkOwner) {
|
|
2905
2858
|
return null;
|
|
2906
2859
|
}
|
|
@@ -2942,8 +2895,8 @@ function nearestPort(bounds, point) {
|
|
|
2942
2895
|
let nearest = { side: "right", offset: 0.5 };
|
|
2943
2896
|
let nearestDistance = Infinity;
|
|
2944
2897
|
for (const side of SIDES2) {
|
|
2945
|
-
const offset = Math.max(0, Math.min(1,
|
|
2946
|
-
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 });
|
|
2947
2900
|
const distance = Math.hypot(candidate.x - point.x, candidate.y - point.y);
|
|
2948
2901
|
if (distance < nearestDistance) {
|
|
2949
2902
|
nearestDistance = distance;
|
|
@@ -3002,7 +2955,7 @@ function resolveLinkTarget(candidates, fixedPoint, point, unitsPerPx) {
|
|
|
3002
2955
|
}
|
|
3003
2956
|
const port = snapPort(candidate.bounds, point, unitsPerPx);
|
|
3004
2957
|
return {
|
|
3005
|
-
point:
|
|
2958
|
+
point: chunkUHKFJBY5_cjs.pointAtPort(candidate.bounds, port),
|
|
3006
2959
|
side: port.side,
|
|
3007
2960
|
hit: { owner: candidate.owner, side: port.side, offset: port.offset },
|
|
3008
2961
|
bounds: candidate.bounds
|
|
@@ -3026,7 +2979,7 @@ var LinkEndpointSession = class {
|
|
|
3026
2979
|
this.#emitter = emitter;
|
|
3027
2980
|
}
|
|
3028
2981
|
pointerDown = (event) => {
|
|
3029
|
-
if (event.button !== 0 || this.#drag ||
|
|
2982
|
+
if (event.button !== 0 || this.#drag || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
3030
2983
|
return;
|
|
3031
2984
|
}
|
|
3032
2985
|
this.#drag = createLinkEndpointDragState(this.#svg, event);
|
|
@@ -3040,7 +2993,7 @@ var LinkEndpointSession = class {
|
|
|
3040
2993
|
return;
|
|
3041
2994
|
}
|
|
3042
2995
|
drag.moved = true;
|
|
3043
|
-
const target = resolveEndpointTarget(drag, endpointPointerPosition(this.#svg, event), 1 /
|
|
2996
|
+
const target = resolveEndpointTarget(drag, endpointPointerPosition(this.#svg, event), 1 / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg));
|
|
3044
2997
|
updateEndpointPreview(drag, target.point, target.side);
|
|
3045
2998
|
drag.ghost.show(target.hit !== null, target.bounds);
|
|
3046
2999
|
};
|
|
@@ -3154,7 +3107,7 @@ var LinkSegmentSession = class {
|
|
|
3154
3107
|
this.#emitter = emitter;
|
|
3155
3108
|
}
|
|
3156
3109
|
pointerDown = (event) => {
|
|
3157
|
-
if (event.button !== 0 || this.#drag ||
|
|
3110
|
+
if (event.button !== 0 || this.#drag || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
3158
3111
|
return;
|
|
3159
3112
|
}
|
|
3160
3113
|
const target = event.target;
|
|
@@ -3164,12 +3117,12 @@ var LinkSegmentSession = class {
|
|
|
3164
3117
|
if (!handle || !overlay || !linkId) {
|
|
3165
3118
|
return;
|
|
3166
3119
|
}
|
|
3167
|
-
const path =
|
|
3168
|
-
const owner = path &&
|
|
3120
|
+
const path = chunkWZA3DJJH_cjs.findOwnerNode(this.#svg, linkId, chunkWZA3DJJH_cjs.isPrimary);
|
|
3121
|
+
const owner = path && chunkWZA3DJJH_cjs.resolveOwner(path);
|
|
3169
3122
|
const index = Number(handle.getAttribute("data-sf-link-segment"));
|
|
3170
3123
|
const segments = path ? parseSegments(path) : [];
|
|
3171
3124
|
const segment = segments[index];
|
|
3172
|
-
const point =
|
|
3125
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
3173
3126
|
if (!path || !owner || !segment || !point) {
|
|
3174
3127
|
return;
|
|
3175
3128
|
}
|
|
@@ -3177,7 +3130,7 @@ var LinkSegmentSession = class {
|
|
|
3177
3130
|
const guide = document.createElementNS(SVG_NAMESPACE2, "line");
|
|
3178
3131
|
guide.setAttribute("stroke", GUIDE_COLOR);
|
|
3179
3132
|
guide.setAttribute("stroke-dasharray", "4 4");
|
|
3180
|
-
guide.setAttribute("stroke-width", String(1 /
|
|
3133
|
+
guide.setAttribute("stroke-width", String(1 / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg)));
|
|
3181
3134
|
guide.setAttribute("visibility", "hidden");
|
|
3182
3135
|
overlay.appendChild(guide);
|
|
3183
3136
|
handle.setPointerCapture?.(event.pointerId);
|
|
@@ -3212,7 +3165,7 @@ var LinkSegmentSession = class {
|
|
|
3212
3165
|
return;
|
|
3213
3166
|
}
|
|
3214
3167
|
drag.moved = true;
|
|
3215
|
-
const point =
|
|
3168
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
3216
3169
|
if (!point) {
|
|
3217
3170
|
return;
|
|
3218
3171
|
}
|
|
@@ -3238,8 +3191,8 @@ var LinkSegmentSession = class {
|
|
|
3238
3191
|
doubleClick = (event) => {
|
|
3239
3192
|
const handle = event.target?.closest("[data-sf-link-segment]");
|
|
3240
3193
|
const linkId = handle?.closest("[data-sf-selection-overlay]")?.getAttribute("data-sf-selection-overlay");
|
|
3241
|
-
const path = linkId ?
|
|
3242
|
-
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);
|
|
3243
3196
|
if (!handle || !owner) {
|
|
3244
3197
|
return;
|
|
3245
3198
|
}
|
|
@@ -3262,7 +3215,7 @@ var LinkSegmentSession = class {
|
|
|
3262
3215
|
if (isSnapDisabled(this.#svg)) {
|
|
3263
3216
|
return { value: raw, snapped: null };
|
|
3264
3217
|
}
|
|
3265
|
-
const threshold = SNAP_PX /
|
|
3218
|
+
const threshold = SNAP_PX / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg);
|
|
3266
3219
|
let best = null;
|
|
3267
3220
|
for (const candidate of [drag.base, ...drag.candidates]) {
|
|
3268
3221
|
const closer = best === null || Math.abs(candidate - raw) < Math.abs(best - raw);
|
|
@@ -3275,7 +3228,7 @@ var LinkSegmentSession = class {
|
|
|
3275
3228
|
#preview(drag, snapped) {
|
|
3276
3229
|
const next = movedSegments(drag, drag.value);
|
|
3277
3230
|
const strokeWidth = Number(drag.path.getAttribute("stroke-width")) || 2;
|
|
3278
|
-
const data =
|
|
3231
|
+
const data = chunkUHKFJBY5_cjs.roundedOrthogonalPathData(pathSegments(next), Math.max(16, strokeWidth * 4));
|
|
3279
3232
|
drag.path.setAttribute("d", data);
|
|
3280
3233
|
drag.overlay.querySelector("path")?.setAttribute("d", data);
|
|
3281
3234
|
const segment = next[drag.index];
|
|
@@ -3449,8 +3402,8 @@ function nearestCandidates(bounds, candidates, limit = 50) {
|
|
|
3449
3402
|
|
|
3450
3403
|
// src/runtime/interaction/snapping/isometricDiagonal.ts
|
|
3451
3404
|
var AXES2 = [
|
|
3452
|
-
{ x:
|
|
3453
|
-
{ x: -
|
|
3405
|
+
{ x: chunkUHKFJBY5_cjs.AXIS_COS, y: chunkUHKFJBY5_cjs.AXIS_SIN },
|
|
3406
|
+
{ x: -chunkUHKFJBY5_cjs.AXIS_COS, y: chunkUHKFJBY5_cjs.AXIS_SIN }
|
|
3454
3407
|
];
|
|
3455
3408
|
var GUIDE_OVERHANG = 40;
|
|
3456
3409
|
function snapIsometricDiagonal(apex, rawDx, rawDy, candidates, threshold) {
|
|
@@ -3518,13 +3471,13 @@ function isometricApexOf(svg, drag, declared = false) {
|
|
|
3518
3471
|
if (lead.owner.role !== "isometric") {
|
|
3519
3472
|
return null;
|
|
3520
3473
|
}
|
|
3521
|
-
const primary =
|
|
3522
|
-
const geometry = primary &&
|
|
3474
|
+
const primary = chunkWZA3DJJH_cjs.findOwnerNode(svg, lead.owner.id, chunkWZA3DJJH_cjs.isPrimary);
|
|
3475
|
+
const geometry = primary && chunkWZA3DJJH_cjs.isometricGeometryOf(primary);
|
|
3523
3476
|
if (!geometry) {
|
|
3524
3477
|
return null;
|
|
3525
3478
|
}
|
|
3526
3479
|
const frame = declared && geometry.bounds ? geometry.bounds : lead.draggedBounds;
|
|
3527
|
-
return { x: frame.x + geometry.depth *
|
|
3480
|
+
return { x: frame.x + geometry.depth * chunkUHKFJBY5_cjs.AXIS_COS, y: frame.y };
|
|
3528
3481
|
}
|
|
3529
3482
|
function snapIsometricGrid(svg, drag, rawDx, rawDy) {
|
|
3530
3483
|
const step = readIsometricSnapStep(svg);
|
|
@@ -3541,8 +3494,8 @@ function snapIsometricMove(svg, drag, rawDx, rawDy) {
|
|
|
3541
3494
|
return null;
|
|
3542
3495
|
}
|
|
3543
3496
|
const excludedIds = new Set(drag.canvasObjects.map((canvasObject) => canvasObject.owner.id));
|
|
3544
|
-
const candidates =
|
|
3545
|
-
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));
|
|
3546
3499
|
return snap ? { dx: snap.dx, dy: snap.dy, guides: [snap.guide] } : null;
|
|
3547
3500
|
}
|
|
3548
3501
|
function snapMove(svg, drag, rawDx, rawDy) {
|
|
@@ -3559,9 +3512,9 @@ function snapMove(svg, drag, rawDx, rawDy) {
|
|
|
3559
3512
|
}
|
|
3560
3513
|
const leadBounds = offsetBounds(drag.canvasObjects[0].draggedBounds, rawDx, rawDy);
|
|
3561
3514
|
const excludedIds = new Set(drag.canvasObjects.map((canvasObject) => canvasObject.owner.id));
|
|
3562
|
-
const candidates = nearestCandidates(leadBounds,
|
|
3515
|
+
const candidates = nearestCandidates(leadBounds, chunkWZA3DJJH_cjs.findSnapCandidateBounds(svg, excludedIds));
|
|
3563
3516
|
const snap = computeSnap(leadBounds, candidates, {
|
|
3564
|
-
threshold: snapDistancePx(svg) /
|
|
3517
|
+
threshold: snapDistancePx(svg) / chunkWZA3DJJH_cjs.pxPerUnit(svg),
|
|
3565
3518
|
activeX: MOVE_ACTIVE_POINTS,
|
|
3566
3519
|
activeY: MOVE_ACTIVE_POINTS,
|
|
3567
3520
|
guideOverhang: GUIDE_OVERHANG2
|
|
@@ -3622,7 +3575,7 @@ function isCompositeOwner(owner) {
|
|
|
3622
3575
|
return owner !== null && owner !== void 0 && COMPOSITE_ROLES.has(owner.role);
|
|
3623
3576
|
}
|
|
3624
3577
|
function hasDerivedHeight(owner) {
|
|
3625
|
-
return owner !== null && owner !== void 0 &&
|
|
3578
|
+
return owner !== null && owner !== void 0 && chunkWZA3DJJH_cjs.DERIVED_HEIGHT_ROLES.has(owner.role);
|
|
3626
3579
|
}
|
|
3627
3580
|
|
|
3628
3581
|
// src/runtime/interaction/move/canvasObjectCapture.ts
|
|
@@ -3643,7 +3596,7 @@ function parentContainerBounds(svg, primary, groupIds) {
|
|
|
3643
3596
|
if (!parentId || groupIds.has(parentId)) {
|
|
3644
3597
|
return void 0;
|
|
3645
3598
|
}
|
|
3646
|
-
const container =
|
|
3599
|
+
const container = chunkWZA3DJJH_cjs.findOwnerNode(svg, parentId, chunkWZA3DJJH_cjs.isPrimary);
|
|
3647
3600
|
if (!container) {
|
|
3648
3601
|
return void 0;
|
|
3649
3602
|
}
|
|
@@ -3651,14 +3604,14 @@ function parentContainerBounds(svg, primary, groupIds) {
|
|
|
3651
3604
|
return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };
|
|
3652
3605
|
}
|
|
3653
3606
|
function captureCanvasObject(svg, owner, groupIds) {
|
|
3654
|
-
const nodes =
|
|
3655
|
-
const primary =
|
|
3607
|
+
const nodes = chunkWZA3DJJH_cjs.findAllOwnerNodes(svg, owner.id);
|
|
3608
|
+
const primary = chunkWZA3DJJH_cjs.findOwnerNode(svg, owner.id, chunkWZA3DJJH_cjs.isPrimary);
|
|
3656
3609
|
if (!nodes.length || !primary) {
|
|
3657
3610
|
return null;
|
|
3658
3611
|
}
|
|
3659
3612
|
const overlays = [...svg.querySelectorAll(`[data-sf-selection-overlay="${CSS.escape(owner.id)}"]`)];
|
|
3660
3613
|
const draggedBounds = primary.getBBox();
|
|
3661
|
-
const isometricGeometry = owner.role === "isometric" ?
|
|
3614
|
+
const isometricGeometry = owner.role === "isometric" ? chunkWZA3DJJH_cjs.isometricGeometryOf(primary) : null;
|
|
3662
3615
|
const isometricSize = isometricGeometry ? { width: isometricGeometry.width, height: isometricGeometry.height, depth: isometricGeometry.depth } : void 0;
|
|
3663
3616
|
return {
|
|
3664
3617
|
owner,
|
|
@@ -3700,7 +3653,7 @@ function captureInternalLinks(svg, groupIds) {
|
|
|
3700
3653
|
if (!linkId || !belongsToMoveGroup(path, groupIds)) {
|
|
3701
3654
|
continue;
|
|
3702
3655
|
}
|
|
3703
|
-
const nodes =
|
|
3656
|
+
const nodes = chunkWZA3DJJH_cjs.findAllOwnerNodes(svg, linkId);
|
|
3704
3657
|
if (nodes.length) {
|
|
3705
3658
|
links.push({ nodes, baseTransforms: nodes.map((node) => node.getAttribute("transform")) });
|
|
3706
3659
|
}
|
|
@@ -3734,7 +3687,7 @@ function containedChildren(viewer, owner) {
|
|
|
3734
3687
|
return [];
|
|
3735
3688
|
}
|
|
3736
3689
|
const nodes = viewer.svg.querySelectorAll(`[data-sf-parent-frame="${CSS.escape(owner.id)}"]`);
|
|
3737
|
-
return [...nodes].map((node) =>
|
|
3690
|
+
return [...nodes].map((node) => chunkWZA3DJJH_cjs.resolveOwner(node)).filter((ref) => ref !== null);
|
|
3738
3691
|
}
|
|
3739
3692
|
function selectedMoveGroup(viewer, owner) {
|
|
3740
3693
|
const selection = viewer.getSelection();
|
|
@@ -3751,7 +3704,7 @@ function isChartInteractiveMark(target) {
|
|
|
3751
3704
|
}
|
|
3752
3705
|
function createMoveDragState(viewer, event, startUser) {
|
|
3753
3706
|
const target = event.target;
|
|
3754
|
-
const owner =
|
|
3707
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(target);
|
|
3755
3708
|
if (!hasMovableGeometry(owner) || isChartInteractiveMark(target)) {
|
|
3756
3709
|
return null;
|
|
3757
3710
|
}
|
|
@@ -3785,7 +3738,7 @@ var MoveSession = class {
|
|
|
3785
3738
|
this.#emitter = emitter;
|
|
3786
3739
|
}
|
|
3787
3740
|
pointerDown = (event) => {
|
|
3788
|
-
if (event.button !== 0 || this.#drag ||
|
|
3741
|
+
if (event.button !== 0 || this.#drag || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
3789
3742
|
return;
|
|
3790
3743
|
}
|
|
3791
3744
|
this.#drag = createMoveDragState(this.#viewer, event, movePointerPosition(this.#svg, event));
|
|
@@ -3803,7 +3756,7 @@ var MoveSession = class {
|
|
|
3803
3756
|
const delta = snapMove(this.#svg, drag, rawDelta.dx, rawDelta.dy);
|
|
3804
3757
|
const clamped = clampMoveDelta(drag.canvasObjects, delta.dx, delta.dy);
|
|
3805
3758
|
applyMovePreview(drag, clamped.dx, clamped.dy);
|
|
3806
|
-
|
|
3759
|
+
chunkWZA3DJJH_cjs.updateAlignmentGuides(this.#svg, delta.guides, MOVE_GUIDE_COLOR);
|
|
3807
3760
|
};
|
|
3808
3761
|
pointerUp = (event) => {
|
|
3809
3762
|
const drag = this.#drag;
|
|
@@ -3812,7 +3765,7 @@ var MoveSession = class {
|
|
|
3812
3765
|
}
|
|
3813
3766
|
this.#drag = null;
|
|
3814
3767
|
event.target.releasePointerCapture?.(drag.pointerId);
|
|
3815
|
-
|
|
3768
|
+
chunkWZA3DJJH_cjs.clearAlignmentGuides(this.#svg);
|
|
3816
3769
|
emitMoveCompletion(this.#svg, this.#emitter, drag, event);
|
|
3817
3770
|
};
|
|
3818
3771
|
cancel() {
|
|
@@ -3958,9 +3911,9 @@ var START_POINT_RADIUS_PX = 6;
|
|
|
3958
3911
|
var POINT_STROKE_WIDTH_PX = 1.5;
|
|
3959
3912
|
function createPathDrawPreview(svg) {
|
|
3960
3913
|
const document2 = svg.ownerDocument;
|
|
3961
|
-
const group = document2.createElementNS(
|
|
3914
|
+
const group = document2.createElementNS(chunkWZA3DJJH_cjs.SVG_NAMESPACE, "g");
|
|
3962
3915
|
group.setAttribute("pointer-events", "none");
|
|
3963
|
-
const line = document2.createElementNS(
|
|
3916
|
+
const line = document2.createElementNS(chunkWZA3DJJH_cjs.SVG_NAMESPACE, "path");
|
|
3964
3917
|
line.setAttribute("fill", "none");
|
|
3965
3918
|
line.setAttribute("stroke", PREVIEW_COLOR);
|
|
3966
3919
|
line.setAttribute("stroke-linecap", "round");
|
|
@@ -3970,8 +3923,8 @@ function createPathDrawPreview(svg) {
|
|
|
3970
3923
|
}
|
|
3971
3924
|
function pointMarker(svg, point, highlighted) {
|
|
3972
3925
|
const document2 = svg.ownerDocument;
|
|
3973
|
-
const unit = 1 /
|
|
3974
|
-
const circle = document2.createElementNS(
|
|
3926
|
+
const unit = 1 / chunkWZA3DJJH_cjs.pxPerUnit(svg);
|
|
3927
|
+
const circle = document2.createElementNS(chunkWZA3DJJH_cjs.SVG_NAMESPACE, "circle");
|
|
3975
3928
|
circle.setAttribute("cx", String(point.x));
|
|
3976
3929
|
circle.setAttribute("cy", String(point.y));
|
|
3977
3930
|
circle.setAttribute("r", String((highlighted ? START_POINT_RADIUS_PX : POINT_RADIUS_PX) * unit));
|
|
@@ -3985,11 +3938,11 @@ function updatePathDrawPreview(svg, state) {
|
|
|
3985
3938
|
if (!previewLine || !previewGroup) {
|
|
3986
3939
|
return;
|
|
3987
3940
|
}
|
|
3988
|
-
const unit = 1 /
|
|
3941
|
+
const unit = 1 / chunkWZA3DJJH_cjs.pxPerUnit(svg);
|
|
3989
3942
|
previewLine.setAttribute("stroke-width", String(LINE_WIDTH_PX * unit));
|
|
3990
3943
|
previewLine.setAttribute("stroke-dasharray", `${DASH_PX * unit} ${GAP_PX * unit}`);
|
|
3991
3944
|
const live = state.cursor ? [...state.points, state.cursor] : state.points;
|
|
3992
|
-
previewLine.setAttribute("d",
|
|
3945
|
+
previewLine.setAttribute("d", chunkUHKFJBY5_cjs.freeformPathData({ points: live, tension: state.tension, closed: false }));
|
|
3993
3946
|
while (previewGroup.childNodes.length > 1) {
|
|
3994
3947
|
previewGroup.lastChild?.remove();
|
|
3995
3948
|
}
|
|
@@ -4049,12 +4002,12 @@ var PathDrawSession = class {
|
|
|
4049
4002
|
}
|
|
4050
4003
|
}
|
|
4051
4004
|
pointerDown = (event) => {
|
|
4052
|
-
if (!this.#state.active || event.button !== 0 ||
|
|
4005
|
+
if (!this.#state.active || event.button !== 0 || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
4053
4006
|
return;
|
|
4054
4007
|
}
|
|
4055
4008
|
event.stopPropagation();
|
|
4056
4009
|
event.preventDefault();
|
|
4057
|
-
const point =
|
|
4010
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
4058
4011
|
if (!point) {
|
|
4059
4012
|
return;
|
|
4060
4013
|
}
|
|
@@ -4073,14 +4026,14 @@ var PathDrawSession = class {
|
|
|
4073
4026
|
this.#state.cursor = resolved.point;
|
|
4074
4027
|
this.#state.willClose = false;
|
|
4075
4028
|
updatePathDrawPreview(this.#svg, this.#state);
|
|
4076
|
-
|
|
4029
|
+
chunkWZA3DJJH_cjs.clearAlignmentGuides(this.#svg);
|
|
4077
4030
|
};
|
|
4078
4031
|
pointerMove = (event) => {
|
|
4079
4032
|
if (!this.#state.active) {
|
|
4080
4033
|
return;
|
|
4081
4034
|
}
|
|
4082
4035
|
event.stopPropagation();
|
|
4083
|
-
const point =
|
|
4036
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
4084
4037
|
if (!point) {
|
|
4085
4038
|
return;
|
|
4086
4039
|
}
|
|
@@ -4089,9 +4042,9 @@ var PathDrawSession = class {
|
|
|
4089
4042
|
this.#state.willClose = resolved.willClose;
|
|
4090
4043
|
updatePathDrawPreview(this.#svg, this.#state);
|
|
4091
4044
|
if (resolved.guide) {
|
|
4092
|
-
|
|
4045
|
+
chunkWZA3DJJH_cjs.updateAlignmentGuides(this.#svg, [resolved.guide], GUIDE_COLOR2);
|
|
4093
4046
|
} else {
|
|
4094
|
-
|
|
4047
|
+
chunkWZA3DJJH_cjs.clearAlignmentGuides(this.#svg);
|
|
4095
4048
|
}
|
|
4096
4049
|
};
|
|
4097
4050
|
pointerUp = (event) => {
|
|
@@ -4126,10 +4079,10 @@ var PathDrawSession = class {
|
|
|
4126
4079
|
} else if (event.key === "Backspace" && this.#state.points.length > 0) {
|
|
4127
4080
|
event.preventDefault();
|
|
4128
4081
|
this.#state.points = this.#state.points.slice(0, -1);
|
|
4129
|
-
const closeSnapUnits = CLOSE_SNAP_PX /
|
|
4082
|
+
const closeSnapUnits = CLOSE_SNAP_PX / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg);
|
|
4130
4083
|
this.#state.willClose = this.#state.cursor ? isCloseToStart(this.#state.points, this.#state.cursor, closeSnapUnits) : false;
|
|
4131
4084
|
updatePathDrawPreview(this.#svg, this.#state);
|
|
4132
|
-
|
|
4085
|
+
chunkWZA3DJJH_cjs.clearAlignmentGuides(this.#svg);
|
|
4133
4086
|
}
|
|
4134
4087
|
};
|
|
4135
4088
|
keyUp = (event) => {
|
|
@@ -4138,7 +4091,7 @@ var PathDrawSession = class {
|
|
|
4138
4091
|
}
|
|
4139
4092
|
};
|
|
4140
4093
|
#resolvePoint(raw) {
|
|
4141
|
-
const closeSnapUnits = CLOSE_SNAP_PX /
|
|
4094
|
+
const closeSnapUnits = CLOSE_SNAP_PX / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg);
|
|
4142
4095
|
if (isCloseToStart(this.#state.points, raw, closeSnapUnits)) {
|
|
4143
4096
|
return { point: this.#state.points[0], willClose: true, guide: null };
|
|
4144
4097
|
}
|
|
@@ -4148,7 +4101,7 @@ var PathDrawSession = class {
|
|
|
4148
4101
|
return { point: raw, willClose: false, guide: null };
|
|
4149
4102
|
}
|
|
4150
4103
|
const angleSnapped = snapTo45Degrees(last, raw);
|
|
4151
|
-
const guideSnapUnits = GUIDE_SNAP_PX /
|
|
4104
|
+
const guideSnapUnits = GUIDE_SNAP_PX / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg);
|
|
4152
4105
|
const { point, guide } = snapToSessionGuides(last, angleSnapped, points.slice(0, -1), raw, guideSnapUnits);
|
|
4153
4106
|
return { point, willClose: false, guide };
|
|
4154
4107
|
}
|
|
@@ -4162,7 +4115,7 @@ var PathDrawSession = class {
|
|
|
4162
4115
|
}
|
|
4163
4116
|
#reset(callExit) {
|
|
4164
4117
|
this.#state.previewGroup?.remove();
|
|
4165
|
-
|
|
4118
|
+
chunkWZA3DJJH_cjs.clearAlignmentGuides(this.#svg);
|
|
4166
4119
|
const exit = this.#state.onExit;
|
|
4167
4120
|
this.#state = createIdlePathDrawState();
|
|
4168
4121
|
this.#shiftHeld = false;
|
|
@@ -4205,7 +4158,7 @@ function applyPathReshapePreview(drag, point) {
|
|
|
4205
4158
|
const points = drag.points.map(
|
|
4206
4159
|
(existing, index) => index === drag.pointIndex ? [point.x, point.y] : existing
|
|
4207
4160
|
);
|
|
4208
|
-
const d =
|
|
4161
|
+
const d = chunkUHKFJBY5_cjs.freeformPathData({
|
|
4209
4162
|
points: points.map(([x, y]) => ({ x, y })),
|
|
4210
4163
|
tension: drag.tension,
|
|
4211
4164
|
closed: drag.closed
|
|
@@ -4213,22 +4166,22 @@ function applyPathReshapePreview(drag, point) {
|
|
|
4213
4166
|
drag.pathNode.setAttribute("d", d);
|
|
4214
4167
|
drag.handle.setAttribute("cx", String(point.x));
|
|
4215
4168
|
drag.handle.setAttribute("cy", String(point.y));
|
|
4216
|
-
drag.overlay?.querySelector(`[${
|
|
4169
|
+
drag.overlay?.querySelector(`[${chunkWZA3DJJH_cjs.PATH_HALO_ATTR}]`)?.setAttribute("d", d);
|
|
4217
4170
|
return points;
|
|
4218
4171
|
}
|
|
4219
4172
|
|
|
4220
4173
|
// src/runtime/interaction/pathReshape/target.ts
|
|
4221
4174
|
function resolvePathReshapeTarget(svg, event) {
|
|
4222
|
-
const handle = event.target?.closest?.(`[${
|
|
4223
|
-
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;
|
|
4224
4177
|
const pointIndex = indexAttr !== null ? Number(indexAttr) : Number.NaN;
|
|
4225
4178
|
const ownerId = handle?.closest("[data-sf-selection-overlay]")?.getAttribute("data-sf-selection-overlay");
|
|
4226
4179
|
if (!handle || !Number.isInteger(pointIndex) || !ownerId) {
|
|
4227
4180
|
return null;
|
|
4228
4181
|
}
|
|
4229
|
-
const pathNode =
|
|
4230
|
-
const owner = pathNode &&
|
|
4231
|
-
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);
|
|
4232
4185
|
if (!pathNode || !owner || !geometry || pointIndex < 0 || pointIndex >= geometry.points.length) {
|
|
4233
4186
|
return null;
|
|
4234
4187
|
}
|
|
@@ -4271,7 +4224,7 @@ var PathReshapeSession = class {
|
|
|
4271
4224
|
this.#emitter = emitter;
|
|
4272
4225
|
}
|
|
4273
4226
|
pointerDown = (event) => {
|
|
4274
|
-
if (event.button !== 0 || this.#drag ||
|
|
4227
|
+
if (event.button !== 0 || this.#drag || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
4275
4228
|
return;
|
|
4276
4229
|
}
|
|
4277
4230
|
this.#drag = createPathReshapeDragState(this.#svg, event);
|
|
@@ -4282,7 +4235,7 @@ var PathReshapeSession = class {
|
|
|
4282
4235
|
return;
|
|
4283
4236
|
}
|
|
4284
4237
|
drag.moved = true;
|
|
4285
|
-
const point =
|
|
4238
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
4286
4239
|
if (point) {
|
|
4287
4240
|
applyPathReshapePreview(drag, point);
|
|
4288
4241
|
}
|
|
@@ -4297,7 +4250,7 @@ var PathReshapeSession = class {
|
|
|
4297
4250
|
if (!drag.moved) {
|
|
4298
4251
|
return;
|
|
4299
4252
|
}
|
|
4300
|
-
const point =
|
|
4253
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event) ?? {
|
|
4301
4254
|
x: drag.points[drag.pointIndex][0],
|
|
4302
4255
|
y: drag.points[drag.pointIndex][1]
|
|
4303
4256
|
};
|
|
@@ -4338,7 +4291,7 @@ function updatePieLabelDragPreview(drag, dx, dy) {
|
|
|
4338
4291
|
}
|
|
4339
4292
|
const from = { x: drag.tickStartX, y: drag.tickStartY };
|
|
4340
4293
|
const to = { x: drag.restX + dx, y: drag.restY + dy };
|
|
4341
|
-
const clipped =
|
|
4294
|
+
const clipped = chunkUHKFJBY5_cjs.clipSegmentToRect(from, to, drag.halfWidth, drag.halfHeight);
|
|
4342
4295
|
drag.tickElement.setAttribute("d", `M ${from.x} ${from.y} L ${clipped.x} ${clipped.y}`);
|
|
4343
4296
|
drag.tickElement.setAttribute("stroke", PREVIEW_TICK_COLOR);
|
|
4344
4297
|
drag.tickElement.setAttribute("stroke-width", PREVIEW_TICK_STROKE_WIDTH);
|
|
@@ -4364,7 +4317,7 @@ function restoreAttribute(element2, name, value) {
|
|
|
4364
4317
|
|
|
4365
4318
|
// src/runtime/interaction/pieGeometry.ts
|
|
4366
4319
|
function readPieGeometry(svg, ownerId) {
|
|
4367
|
-
const raw =
|
|
4320
|
+
const raw = chunkWZA3DJJH_cjs.findOwnerNode(svg, ownerId, chunkWZA3DJJH_cjs.isPrimary)?.getAttribute("data-sf-pie-geometry");
|
|
4368
4321
|
if (!raw) {
|
|
4369
4322
|
return null;
|
|
4370
4323
|
}
|
|
@@ -4383,7 +4336,7 @@ function findLabelMark2(event) {
|
|
|
4383
4336
|
return event.target?.closest?.(selector);
|
|
4384
4337
|
}
|
|
4385
4338
|
function isLabelPointer2(event) {
|
|
4386
|
-
return event.button === 0 && !
|
|
4339
|
+
return event.button === 0 && !chunkWZA3DJJH_cjs.isCameraGesture(event);
|
|
4387
4340
|
}
|
|
4388
4341
|
function findLabelSiblings(svg, ownerId, seriesId, mark) {
|
|
4389
4342
|
const selector = `[data-sf-id="${CSS.escape(ownerId)}"][data-sf-series="${CSS.escape(seriesId)}"][data-sf-mark="${mark}"]`;
|
|
@@ -4415,7 +4368,7 @@ function resolvePieLabelDrag(svg, event) {
|
|
|
4415
4368
|
if (!clicked) {
|
|
4416
4369
|
return null;
|
|
4417
4370
|
}
|
|
4418
|
-
const owner =
|
|
4371
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(clicked);
|
|
4419
4372
|
if (owner?.role !== "chart") {
|
|
4420
4373
|
return null;
|
|
4421
4374
|
}
|
|
@@ -4434,7 +4387,7 @@ function resolvePieLabelDrag(svg, event) {
|
|
|
4434
4387
|
const wedgeRadius = clicked.getAttribute("data-sf-pie-wedge-radius");
|
|
4435
4388
|
const explicitRadius = wedgeRadius === null ? Number.NaN : Number(wedgeRadius);
|
|
4436
4389
|
const outerRadius = Number.isFinite(explicitRadius) ? explicitRadius : geometry.outerRadius;
|
|
4437
|
-
const start =
|
|
4390
|
+
const start = chunkWZA3DJJH_cjs.pointerUserPoint(svg, event);
|
|
4438
4391
|
if (!start) {
|
|
4439
4392
|
return null;
|
|
4440
4393
|
}
|
|
@@ -4456,13 +4409,13 @@ function resolvePieLabelDrag(svg, event) {
|
|
|
4456
4409
|
outerRadius,
|
|
4457
4410
|
anchorX: geometry.centerX + outerRadius * Math.cos(midAngle),
|
|
4458
4411
|
anchorY: geometry.centerY + outerRadius * Math.sin(midAngle),
|
|
4459
|
-
tickStartX: geometry.centerX + (outerRadius +
|
|
4460
|
-
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),
|
|
4461
4414
|
restX,
|
|
4462
4415
|
restY,
|
|
4463
4416
|
startX: start.x,
|
|
4464
4417
|
startY: start.y,
|
|
4465
|
-
halfWidth:
|
|
4418
|
+
halfWidth: chunkUHKFJBY5_cjs.LABEL_WIDTH / 2,
|
|
4466
4419
|
halfHeight: fontSize * 1.2,
|
|
4467
4420
|
moved: false,
|
|
4468
4421
|
lastDx: 0,
|
|
@@ -4498,7 +4451,7 @@ var PieLabelDragSession = class {
|
|
|
4498
4451
|
if (!this.#drag || event.pointerId !== this.#drag.pointerId) {
|
|
4499
4452
|
return;
|
|
4500
4453
|
}
|
|
4501
|
-
const point =
|
|
4454
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
4502
4455
|
if (!point) {
|
|
4503
4456
|
return;
|
|
4504
4457
|
}
|
|
@@ -4530,8 +4483,8 @@ var PieLabelDragSession = class {
|
|
|
4530
4483
|
if (!drag.moved) {
|
|
4531
4484
|
return;
|
|
4532
4485
|
}
|
|
4533
|
-
const pathX =
|
|
4534
|
-
const pathY =
|
|
4486
|
+
const pathX = chunkUHKFJBY5_cjs.seriesLabelOffsetXProp(drag.seriesId);
|
|
4487
|
+
const pathY = chunkUHKFJBY5_cjs.seriesLabelOffsetYProp(drag.seriesId);
|
|
4535
4488
|
if (!pathX || !pathY) {
|
|
4536
4489
|
return;
|
|
4537
4490
|
}
|
|
@@ -4593,7 +4546,7 @@ function siblingNodes(svg, owner, path) {
|
|
|
4593
4546
|
});
|
|
4594
4547
|
}
|
|
4595
4548
|
function resolvePropertyDrag(svg, event, rules) {
|
|
4596
|
-
if (event.button !== 0 ||
|
|
4549
|
+
if (event.button !== 0 || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
4597
4550
|
return null;
|
|
4598
4551
|
}
|
|
4599
4552
|
const node = event.target?.closest?.('[data-sf-prop-kind="value"]');
|
|
@@ -4601,11 +4554,11 @@ function resolvePropertyDrag(svg, event, rules) {
|
|
|
4601
4554
|
return null;
|
|
4602
4555
|
}
|
|
4603
4556
|
const path = node.getAttribute("data-sf-prop");
|
|
4604
|
-
const owner =
|
|
4557
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(node);
|
|
4605
4558
|
if (!path || owner?.role !== "chart" || !isEditablePath(path, rules)) {
|
|
4606
4559
|
return null;
|
|
4607
4560
|
}
|
|
4608
|
-
const scale = parseValueScale(
|
|
4561
|
+
const scale = parseValueScale(chunkWZA3DJJH_cjs.findOwnerNode(svg, owner.id, chunkWZA3DJJH_cjs.isPrimary));
|
|
4609
4562
|
if (!scale) {
|
|
4610
4563
|
return null;
|
|
4611
4564
|
}
|
|
@@ -4874,7 +4827,7 @@ function resolvePropertyTarget(event, rules) {
|
|
|
4874
4827
|
return null;
|
|
4875
4828
|
}
|
|
4876
4829
|
const path = hit.getAttribute("data-sf-prop");
|
|
4877
|
-
const owner =
|
|
4830
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(hit);
|
|
4878
4831
|
if (!path || !owner || !isEditablePath(path, rules)) {
|
|
4879
4832
|
return null;
|
|
4880
4833
|
}
|
|
@@ -4913,7 +4866,7 @@ var PropertyEditingSession = class {
|
|
|
4913
4866
|
begin(target) {
|
|
4914
4867
|
this.cancel();
|
|
4915
4868
|
const { node } = target;
|
|
4916
|
-
const rect =
|
|
4869
|
+
const rect = chunkWZA3DJJH_cjs.screenRectOf(node);
|
|
4917
4870
|
const fontSize = Number.parseFloat(node.getAttribute("font-size") || "12");
|
|
4918
4871
|
const originalText = node.textContent ?? "";
|
|
4919
4872
|
const anchor = node.getAttribute("text-anchor");
|
|
@@ -5003,28 +4956,15 @@ function crossedDuplicateDragThreshold(drag, event) {
|
|
|
5003
4956
|
var PREVIEW_STROKE_PX = 2;
|
|
5004
4957
|
var NEW_LINK_PATH_TYPE = "orthogonal";
|
|
5005
4958
|
function createDuplicatePreviewPath(svg) {
|
|
5006
|
-
const path = svg.ownerDocument.createElementNS(
|
|
4959
|
+
const path = svg.ownerDocument.createElementNS(chunkWZA3DJJH_cjs.SVG_NAMESPACE, "path");
|
|
5007
4960
|
path.setAttribute("fill", "none");
|
|
5008
|
-
path.setAttribute("stroke-width", String(PREVIEW_STROKE_PX /
|
|
4961
|
+
path.setAttribute("stroke-width", String(PREVIEW_STROKE_PX / chunkWZA3DJJH_cjs.pxPerUnit(svg)));
|
|
5009
4962
|
path.style.pointerEvents = "none";
|
|
5010
4963
|
return path;
|
|
5011
4964
|
}
|
|
5012
|
-
function previewLink3(fromSide, toSide) {
|
|
5013
|
-
return {
|
|
5014
|
-
id: "preview",
|
|
5015
|
-
fromId: "",
|
|
5016
|
-
toId: "",
|
|
5017
|
-
layerGroup: "",
|
|
5018
|
-
orderKey: "",
|
|
5019
|
-
isVisible: true,
|
|
5020
|
-
isLocked: false,
|
|
5021
|
-
fromPoint: { kind: "side", side: fromSide, offset: 0.5 },
|
|
5022
|
-
toPoint: { kind: "side", side: toSide, offset: 0.5 }
|
|
5023
|
-
};
|
|
5024
|
-
}
|
|
5025
4965
|
function updateDuplicatePreview(drag, toPoint, toSide) {
|
|
5026
|
-
const link =
|
|
5027
|
-
const { points, segments } =
|
|
4966
|
+
const link = previewLink(drag.direction, toSide);
|
|
4967
|
+
const { points, segments } = chunkUHKFJBY5_cjs.calculateLinkRoute(link, drag.fixedPoint, toPoint, NEW_LINK_PATH_TYPE);
|
|
5028
4968
|
drag.previewPath.setAttribute("d", previewPathData(points, segments, NEW_LINK_PATH_TYPE, 2));
|
|
5029
4969
|
}
|
|
5030
4970
|
|
|
@@ -5035,7 +4975,7 @@ function duplicateCandidates(svg, sourceId) {
|
|
|
5035
4975
|
if (element2.getAttribute("data-sf-role") === "link") {
|
|
5036
4976
|
continue;
|
|
5037
4977
|
}
|
|
5038
|
-
const owner =
|
|
4978
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(element2);
|
|
5039
4979
|
if (owner && owner.id !== sourceId) {
|
|
5040
4980
|
candidates.push({ owner, bounds: element2.getBBox() });
|
|
5041
4981
|
}
|
|
@@ -5049,8 +4989,8 @@ function createQuickDuplicateDragState(svg, event, previewPath) {
|
|
|
5049
4989
|
if (!bubble || !direction || direction.startsWith("iso-") || !sourceId) {
|
|
5050
4990
|
return null;
|
|
5051
4991
|
}
|
|
5052
|
-
const primary =
|
|
5053
|
-
const sourceOwner = primary &&
|
|
4992
|
+
const primary = chunkWZA3DJJH_cjs.findOwnerNode(svg, sourceId, chunkWZA3DJJH_cjs.isPrimary);
|
|
4993
|
+
const sourceOwner = primary && chunkWZA3DJJH_cjs.resolveOwner(primary);
|
|
5054
4994
|
if (!primary || !sourceOwner) {
|
|
5055
4995
|
return null;
|
|
5056
4996
|
}
|
|
@@ -5058,7 +4998,7 @@ function createQuickDuplicateDragState(svg, event, previewPath) {
|
|
|
5058
4998
|
return {
|
|
5059
4999
|
sourceOwner,
|
|
5060
5000
|
direction,
|
|
5061
|
-
fixedPoint:
|
|
5001
|
+
fixedPoint: chunkUHKFJBY5_cjs.pointAtPort(primary.getBBox(), { side: direction, offset: 0.5 }),
|
|
5062
5002
|
previewPath,
|
|
5063
5003
|
ghost: new LinkGhost(svg, previewPath),
|
|
5064
5004
|
candidates: duplicateCandidates(svg, sourceId),
|
|
@@ -5086,7 +5026,7 @@ var QuickDuplicateSession = class {
|
|
|
5086
5026
|
this.#emitter = emitter;
|
|
5087
5027
|
}
|
|
5088
5028
|
pointerDown = (event) => {
|
|
5089
|
-
if (event.button !== 0 || this.#drag ||
|
|
5029
|
+
if (event.button !== 0 || this.#drag || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
5090
5030
|
return;
|
|
5091
5031
|
}
|
|
5092
5032
|
this.#drag = createQuickDuplicateDragState(this.#svg, event, createDuplicatePreviewPath(this.#svg));
|
|
@@ -5100,7 +5040,7 @@ var QuickDuplicateSession = class {
|
|
|
5100
5040
|
return;
|
|
5101
5041
|
}
|
|
5102
5042
|
this.beginPreview(drag);
|
|
5103
|
-
const target = resolveDuplicateTarget(drag, duplicatePointerPosition(this.#svg, event), 1 /
|
|
5043
|
+
const target = resolveDuplicateTarget(drag, duplicatePointerPosition(this.#svg, event), 1 / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg));
|
|
5104
5044
|
updateDuplicatePreview(drag, target.point, target.side);
|
|
5105
5045
|
drag.ghost.show(target.hit !== null, target.bounds);
|
|
5106
5046
|
};
|
|
@@ -5158,14 +5098,14 @@ function seriesShapes(svg, ownerId, series) {
|
|
|
5158
5098
|
return [...svg.querySelectorAll(selector)];
|
|
5159
5099
|
}
|
|
5160
5100
|
function updateRadarVertexDragPreview(svg, drag, value) {
|
|
5161
|
-
const point =
|
|
5101
|
+
const point = chunkUHKFJBY5_cjs.radarVertexPoint(drag.frame, drag.index, value);
|
|
5162
5102
|
drag.element.setAttribute("cx", String(point.x));
|
|
5163
5103
|
drag.element.setAttribute("cy", String(point.y));
|
|
5164
5104
|
const points = seriesVertices(svg, drag.owner.id, drag.series).map((vertex) => ({
|
|
5165
5105
|
x: Number(vertex.getAttribute("cx")),
|
|
5166
5106
|
y: Number(vertex.getAttribute("cy"))
|
|
5167
5107
|
}));
|
|
5168
|
-
const path =
|
|
5108
|
+
const path = chunkUHKFJBY5_cjs.radarSeriesPath(points, drag.frame.curved, drag.frame.tension);
|
|
5169
5109
|
for (const shape of seriesShapes(svg, drag.owner.id, drag.series)) {
|
|
5170
5110
|
shape.setAttribute("d", path);
|
|
5171
5111
|
}
|
|
@@ -5220,7 +5160,7 @@ function findVertex(event) {
|
|
|
5220
5160
|
return event.target?.closest?.('[data-sf-mark="radar-vertex"]');
|
|
5221
5161
|
}
|
|
5222
5162
|
function isVertexPointer(event) {
|
|
5223
|
-
return event.button === 0 && !
|
|
5163
|
+
return event.button === 0 && !chunkWZA3DJJH_cjs.isCameraGesture(event);
|
|
5224
5164
|
}
|
|
5225
5165
|
function resolveRadarVertexDrag(svg, event) {
|
|
5226
5166
|
if (!isVertexPointer(event)) {
|
|
@@ -5230,7 +5170,7 @@ function resolveRadarVertexDrag(svg, event) {
|
|
|
5230
5170
|
if (!element2) {
|
|
5231
5171
|
return null;
|
|
5232
5172
|
}
|
|
5233
|
-
const owner =
|
|
5173
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(element2);
|
|
5234
5174
|
if (owner?.role !== "chart") {
|
|
5235
5175
|
return null;
|
|
5236
5176
|
}
|
|
@@ -5239,7 +5179,7 @@ function resolveRadarVertexDrag(svg, event) {
|
|
|
5239
5179
|
if (!series || !Number.isInteger(index) || index < 0) {
|
|
5240
5180
|
return null;
|
|
5241
5181
|
}
|
|
5242
|
-
const frame = parseRadarFrame(
|
|
5182
|
+
const frame = parseRadarFrame(chunkWZA3DJJH_cjs.findOwnerNode(svg, owner.id, chunkWZA3DJJH_cjs.isPrimary));
|
|
5243
5183
|
if (!frame || index >= frame.count) {
|
|
5244
5184
|
return null;
|
|
5245
5185
|
}
|
|
@@ -5249,11 +5189,11 @@ function resolveRadarVertexDrag(svg, event) {
|
|
|
5249
5189
|
|
|
5250
5190
|
// src/runtime/interaction/radarVertexDrag/session.ts
|
|
5251
5191
|
function valueFrom(svg, event, drag) {
|
|
5252
|
-
const point =
|
|
5192
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(svg, event);
|
|
5253
5193
|
if (!point) {
|
|
5254
5194
|
return null;
|
|
5255
5195
|
}
|
|
5256
|
-
return
|
|
5196
|
+
return chunkUHKFJBY5_cjs.radarValueAtPoint(drag.frame, drag.index, point.x, point.y);
|
|
5257
5197
|
}
|
|
5258
5198
|
var RadarVertexDragSession = class {
|
|
5259
5199
|
#svg;
|
|
@@ -5285,7 +5225,7 @@ var RadarVertexDragSession = class {
|
|
|
5285
5225
|
if (!this.#readout) {
|
|
5286
5226
|
this.#readout = createValueReadout(this.#svg);
|
|
5287
5227
|
}
|
|
5288
|
-
const vertex =
|
|
5228
|
+
const vertex = chunkUHKFJBY5_cjs.radarVertexPoint(this.#drag.frame, this.#drag.index, value);
|
|
5289
5229
|
positionRadarReadout(this.#readout, vertex, this.#drag.frame.centerY, value);
|
|
5290
5230
|
}
|
|
5291
5231
|
cancel() {
|
|
@@ -5376,7 +5316,7 @@ function captureTextFit(text) {
|
|
|
5376
5316
|
fontSize,
|
|
5377
5317
|
lineHeight,
|
|
5378
5318
|
padding: Math.max(8, text.strokeWidth * 2),
|
|
5379
|
-
longestWord: Math.max(0, ...words.map((word) =>
|
|
5319
|
+
longestWord: Math.max(0, ...words.map((word) => chunkUHKFJBY5_cjs.estimateTextWidth(word, fontSize, bold)))
|
|
5380
5320
|
};
|
|
5381
5321
|
}
|
|
5382
5322
|
var COMMIT_PRECISION = 10;
|
|
@@ -5387,7 +5327,7 @@ function minWidthForText(fit) {
|
|
|
5387
5327
|
return roundUpForCommit(fit.longestWord + fit.padding * 2);
|
|
5388
5328
|
}
|
|
5389
5329
|
function minHeightForText(fit, width) {
|
|
5390
|
-
const lines =
|
|
5330
|
+
const lines = chunkUHKFJBY5_cjs.wrapText(fit.rawText, Math.max(0, width - fit.padding * 2), fit.fontSize);
|
|
5391
5331
|
return roundUpForCommit(lines.length * fit.fontSize * fit.lineHeight + fit.padding * 2);
|
|
5392
5332
|
}
|
|
5393
5333
|
|
|
@@ -5521,7 +5461,7 @@ function applyRectBounds(rect, kind, bounds) {
|
|
|
5521
5461
|
rect.setAttribute("width", String(bounds.width));
|
|
5522
5462
|
rect.setAttribute("height", String(bounds.height));
|
|
5523
5463
|
if (kind === "pill") {
|
|
5524
|
-
rect.setAttribute("rx", String(
|
|
5464
|
+
rect.setAttribute("rx", String(chunkUHKFJBY5_cjs.pillCornerRadius(bounds.width, bounds.height)));
|
|
5525
5465
|
}
|
|
5526
5466
|
}
|
|
5527
5467
|
function applyEllipseBounds(ellipse, bounds) {
|
|
@@ -5531,7 +5471,7 @@ function applyEllipseBounds(ellipse, bounds) {
|
|
|
5531
5471
|
ellipse.setAttribute("ry", String(bounds.height / 2));
|
|
5532
5472
|
}
|
|
5533
5473
|
function applySymbolBounds(path, bounds) {
|
|
5534
|
-
const raw = path.getAttribute(
|
|
5474
|
+
const raw = path.getAttribute(chunkUHKFJBY5_cjs.SYMBOL_POINTS_ATTR);
|
|
5535
5475
|
if (!raw) {
|
|
5536
5476
|
return false;
|
|
5537
5477
|
}
|
|
@@ -5539,22 +5479,22 @@ function applySymbolBounds(path, bounds) {
|
|
|
5539
5479
|
x: bounds.x + x * bounds.width,
|
|
5540
5480
|
y: bounds.y + y * bounds.height
|
|
5541
5481
|
}));
|
|
5542
|
-
const tension = Number(path.getAttribute(
|
|
5543
|
-
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 }));
|
|
5544
5484
|
return true;
|
|
5545
5485
|
}
|
|
5546
5486
|
function applyPathBounds(path, kind, bounds) {
|
|
5547
5487
|
if (kind === "symbol" && applySymbolBounds(path, bounds)) {
|
|
5548
5488
|
return;
|
|
5549
5489
|
}
|
|
5550
|
-
const pathData =
|
|
5490
|
+
const pathData = chunkUHKFJBY5_cjs.localShapePath(kind, bounds.x, bounds.y, bounds.width, bounds.height);
|
|
5551
5491
|
if (pathData) {
|
|
5552
5492
|
path.setAttribute("d", pathData);
|
|
5553
5493
|
}
|
|
5554
5494
|
}
|
|
5555
5495
|
function applyFrameBoundaryBounds(path, bounds) {
|
|
5556
|
-
const cornerRadius = Number(path.getAttribute(
|
|
5557
|
-
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);
|
|
5558
5498
|
const radii = {
|
|
5559
5499
|
topLeft: cornerRadius,
|
|
5560
5500
|
topRight: cornerRadius,
|
|
@@ -5564,7 +5504,7 @@ function applyFrameBoundaryBounds(path, bounds) {
|
|
|
5564
5504
|
if (squareCorner) {
|
|
5565
5505
|
radii[squareCorner] = 0;
|
|
5566
5506
|
}
|
|
5567
|
-
path.setAttribute("d",
|
|
5507
|
+
path.setAttribute("d", chunkUHKFJBY5_cjs.cornersRoundedRectPath(bounds.x, bounds.y, bounds.width, bounds.height, radii));
|
|
5568
5508
|
}
|
|
5569
5509
|
function applySingleNodeBounds(primary, kind, bounds) {
|
|
5570
5510
|
const tag = primary.tagName.toLowerCase();
|
|
@@ -5574,7 +5514,7 @@ function applySingleNodeBounds(primary, kind, bounds) {
|
|
|
5574
5514
|
applyEllipseBounds(primary, bounds);
|
|
5575
5515
|
} else if (tag === "foreignobject") {
|
|
5576
5516
|
applyRectBounds(primary, null, bounds);
|
|
5577
|
-
} else if (tag === "path" && primary.hasAttribute(
|
|
5517
|
+
} else if (tag === "path" && primary.hasAttribute(chunkUHKFJBY5_cjs.CORNER_RADIUS_ATTR)) {
|
|
5578
5518
|
applyFrameBoundaryBounds(primary, bounds);
|
|
5579
5519
|
} else if (tag === "path" && kind) {
|
|
5580
5520
|
applyPathBounds(primary, kind, bounds);
|
|
@@ -5613,7 +5553,7 @@ function updateSelectionRing(overlay, bounds) {
|
|
|
5613
5553
|
}
|
|
5614
5554
|
function updateSelectionOverlay(overlay, bounds) {
|
|
5615
5555
|
updateSelectionRing(overlay, bounds);
|
|
5616
|
-
for (const [centerX, centerY, name] of
|
|
5556
|
+
for (const [centerX, centerY, name] of chunkWZA3DJJH_cjs.resizeHandlePositions(bounds)) {
|
|
5617
5557
|
const handle = overlay.querySelector(`[data-sf-resize-handle="${name}"]`);
|
|
5618
5558
|
if (!handle) {
|
|
5619
5559
|
continue;
|
|
@@ -5630,7 +5570,7 @@ function replaceTextLines(textElement, lines, x, lineHeight) {
|
|
|
5630
5570
|
textElement.removeChild(textElement.firstChild);
|
|
5631
5571
|
}
|
|
5632
5572
|
lines.forEach((line, index) => {
|
|
5633
|
-
const tspan = document.createElementNS(
|
|
5573
|
+
const tspan = document.createElementNS(chunkWZA3DJJH_cjs.SVG_NAMESPACE, "tspan");
|
|
5634
5574
|
tspan.setAttribute("x", String(x));
|
|
5635
5575
|
if (index > 0) {
|
|
5636
5576
|
tspan.setAttribute("dy", `${lineHeight}px`);
|
|
@@ -5650,7 +5590,7 @@ function applyLiveText(textElement, rawText, bounds, strokeWidth) {
|
|
|
5650
5590
|
const height = Math.max(0, bounds.height - padding * 2);
|
|
5651
5591
|
const boxX = bounds.x + padding;
|
|
5652
5592
|
const boxY = bounds.y + padding;
|
|
5653
|
-
const lines =
|
|
5593
|
+
const lines = chunkUHKFJBY5_cjs.wrapText(rawText, width, fontSize);
|
|
5654
5594
|
const linePixels = fontSize * lineHeight;
|
|
5655
5595
|
const contentHeight = lines.length * linePixels;
|
|
5656
5596
|
const firstY = verticalAlign === "top" ? boxY + fontSize : verticalAlign === "bottom" ? boxY + height - contentHeight + fontSize : boxY + (height - contentHeight) / 2 + fontSize;
|
|
@@ -5663,7 +5603,7 @@ function applyLiveText(textElement, rawText, bounds, strokeWidth) {
|
|
|
5663
5603
|
|
|
5664
5604
|
// src/runtime/interaction/resize/preview.ts
|
|
5665
5605
|
function textBoundsFor(kind, bounds) {
|
|
5666
|
-
return kind === "person" ?
|
|
5606
|
+
return kind === "person" ? chunkUHKFJBY5_cjs.personLabelArea(bounds.x, bounds.y, bounds.width, bounds.height) : bounds;
|
|
5667
5607
|
}
|
|
5668
5608
|
function applyGeometryPreview(drag, bounds) {
|
|
5669
5609
|
if (drag.isComposite) {
|
|
@@ -5683,7 +5623,7 @@ function applyResizePreview(drag, bounds) {
|
|
|
5683
5623
|
applyLiveText(drag.text.el, drag.text.rawText, textBoundsFor(drag.kind, bounds), drag.text.strokeWidth);
|
|
5684
5624
|
}
|
|
5685
5625
|
if (drag.bubbles) {
|
|
5686
|
-
|
|
5626
|
+
chunkWZA3DJJH_cjs.updateQuickDuplicateBubbles(drag.bubbles, bounds);
|
|
5687
5627
|
}
|
|
5688
5628
|
updateLiveLinks(drag.liveLinks, bounds);
|
|
5689
5629
|
}
|
|
@@ -5704,9 +5644,9 @@ function snapResize(svg, drag, pointer) {
|
|
|
5704
5644
|
};
|
|
5705
5645
|
}
|
|
5706
5646
|
const axes = HANDLE_AXES[drag.handle];
|
|
5707
|
-
const candidates = nearestCandidates(proposed,
|
|
5647
|
+
const candidates = nearestCandidates(proposed, chunkWZA3DJJH_cjs.findSnapCandidateBounds(svg, /* @__PURE__ */ new Set([drag.owner.id])));
|
|
5708
5648
|
const snap = computeSnap(proposed, candidates, {
|
|
5709
|
-
threshold: snapDistancePx(svg) /
|
|
5649
|
+
threshold: snapDistancePx(svg) / chunkWZA3DJJH_cjs.pxPerUnit(svg),
|
|
5710
5650
|
activeX: resizeActivePoints(axes.x),
|
|
5711
5651
|
activeY: resizeActivePoints(axes.y),
|
|
5712
5652
|
guideOverhang: GUIDE_OVERHANG3
|
|
@@ -5747,13 +5687,13 @@ function selectResizeTarget(svg, event) {
|
|
|
5747
5687
|
if (!ownerId) {
|
|
5748
5688
|
return null;
|
|
5749
5689
|
}
|
|
5750
|
-
const primary =
|
|
5751
|
-
const owner = primary &&
|
|
5690
|
+
const primary = chunkWZA3DJJH_cjs.findOwnerNode(svg, ownerId, chunkWZA3DJJH_cjs.isPrimary);
|
|
5691
|
+
const owner = primary && chunkWZA3DJJH_cjs.resolveOwner(primary);
|
|
5752
5692
|
if (!primary || !hasEditableGeometry(owner)) {
|
|
5753
5693
|
return null;
|
|
5754
5694
|
}
|
|
5755
|
-
const nodes =
|
|
5756
|
-
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));
|
|
5757
5697
|
if (!geometryNodes.length) {
|
|
5758
5698
|
return null;
|
|
5759
5699
|
}
|
|
@@ -5771,7 +5711,7 @@ function selectResizeTarget(svg, event) {
|
|
|
5771
5711
|
|
|
5772
5712
|
// src/runtime/interaction/resize/textCapture.ts
|
|
5773
5713
|
function captureResizeText(nodes, primary) {
|
|
5774
|
-
const textElement = nodes.find(
|
|
5714
|
+
const textElement = nodes.find(chunkWZA3DJJH_cjs.isTextLabel);
|
|
5775
5715
|
const rawText = primary.getAttribute("aria-label");
|
|
5776
5716
|
if (!textElement || !rawText) {
|
|
5777
5717
|
return null;
|
|
@@ -5789,7 +5729,7 @@ function createResizeDragState(svg, event) {
|
|
|
5789
5729
|
if (!selection) {
|
|
5790
5730
|
return null;
|
|
5791
5731
|
}
|
|
5792
|
-
const startBounds =
|
|
5732
|
+
const startBounds = chunkWZA3DJJH_cjs.symbolDeclaredBounds(selection.primary) ?? selection.primary.getBBox();
|
|
5793
5733
|
const composite = isCompositeOwner(selection.owner);
|
|
5794
5734
|
const isContainer = CONTAINER_ROLES.has(selection.owner.role);
|
|
5795
5735
|
selection.captureTarget.setPointerCapture?.(event.pointerId);
|
|
@@ -5802,7 +5742,7 @@ function createResizeDragState(svg, event) {
|
|
|
5802
5742
|
isComposite: composite,
|
|
5803
5743
|
geometryNodes: selection.geometryNodes,
|
|
5804
5744
|
insets: selection.geometryNodes.map(
|
|
5805
|
-
(node) => node === selection.primary ? NO_INSET : insetWithin(startBounds,
|
|
5745
|
+
(node) => node === selection.primary ? NO_INSET : insetWithin(startBounds, chunkWZA3DJJH_cjs.symbolDeclaredBounds(node) ?? node.getBBox())
|
|
5806
5746
|
),
|
|
5807
5747
|
baseTransforms: selection.geometryNodes.map((node) => node.getAttribute("transform")),
|
|
5808
5748
|
overlay: selection.overlay,
|
|
@@ -5828,7 +5768,7 @@ var ResizeSession = class {
|
|
|
5828
5768
|
this.#emitter = emitter;
|
|
5829
5769
|
}
|
|
5830
5770
|
pointerDown = (event) => {
|
|
5831
|
-
if (event.button !== 0 || this.#drag ||
|
|
5771
|
+
if (event.button !== 0 || this.#drag || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
5832
5772
|
return;
|
|
5833
5773
|
}
|
|
5834
5774
|
this.#drag = createResizeDragState(this.#svg, event);
|
|
@@ -5843,7 +5783,7 @@ var ResizeSession = class {
|
|
|
5843
5783
|
const bounds = keepsProportions(drag, event.shiftKey) ? lockAspect(snapped.bounds, drag.startBounds, drag.handle) : snapped.bounds;
|
|
5844
5784
|
const { guides } = snapped;
|
|
5845
5785
|
applyResizePreview(drag, clampResizeToChildren(bounds, drag.childrenBounds));
|
|
5846
|
-
|
|
5786
|
+
chunkWZA3DJJH_cjs.updateAlignmentGuides(this.#svg, guides, RESIZE_GUIDE_COLOR);
|
|
5847
5787
|
};
|
|
5848
5788
|
pointerUp = (event) => {
|
|
5849
5789
|
const drag = this.#drag;
|
|
@@ -5852,7 +5792,7 @@ var ResizeSession = class {
|
|
|
5852
5792
|
}
|
|
5853
5793
|
this.#drag = null;
|
|
5854
5794
|
event.target?.releasePointerCapture?.(drag.pointerId);
|
|
5855
|
-
|
|
5795
|
+
chunkWZA3DJJH_cjs.clearAlignmentGuides(this.#svg);
|
|
5856
5796
|
if (!drag.moved) {
|
|
5857
5797
|
return;
|
|
5858
5798
|
}
|
|
@@ -5891,7 +5831,7 @@ function resolveSankeyNodeLabelTarget(event) {
|
|
|
5891
5831
|
if (!labelElement) {
|
|
5892
5832
|
return null;
|
|
5893
5833
|
}
|
|
5894
|
-
const owner =
|
|
5834
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(labelElement);
|
|
5895
5835
|
if (owner?.role !== "chart") {
|
|
5896
5836
|
return null;
|
|
5897
5837
|
}
|
|
@@ -5902,7 +5842,7 @@ function resolveSankeyNodeLabelTarget(event) {
|
|
|
5902
5842
|
return { owner, nodeId, labelElement };
|
|
5903
5843
|
}
|
|
5904
5844
|
function createSankeyNodeLabelEditor(target, emitter, onClose) {
|
|
5905
|
-
const rect =
|
|
5845
|
+
const rect = chunkWZA3DJJH_cjs.screenRectOf(target.labelElement);
|
|
5906
5846
|
if (rect.width <= 0 && rect.height <= 0) {
|
|
5907
5847
|
return null;
|
|
5908
5848
|
}
|
|
@@ -5959,7 +5899,7 @@ function clearSankeyNodeDragPreview(drag) {
|
|
|
5959
5899
|
// src/runtime/interaction/sankeyNode/target.ts
|
|
5960
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$/;
|
|
5961
5901
|
function isNodePointer(event) {
|
|
5962
|
-
return event.button === 0 && !
|
|
5902
|
+
return event.button === 0 && !chunkWZA3DJJH_cjs.isCameraGesture(event);
|
|
5963
5903
|
}
|
|
5964
5904
|
function findNodeRect(event) {
|
|
5965
5905
|
return event.target?.closest?.('[data-sf-mark="sankey-node"]');
|
|
@@ -6017,7 +5957,7 @@ function resolveSankeyNodeDrag(svg, event) {
|
|
|
6017
5957
|
if (!rect) {
|
|
6018
5958
|
return null;
|
|
6019
5959
|
}
|
|
6020
|
-
const owner =
|
|
5960
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(rect);
|
|
6021
5961
|
if (owner?.role !== "chart") {
|
|
6022
5962
|
return null;
|
|
6023
5963
|
}
|
|
@@ -6025,7 +5965,7 @@ function resolveSankeyNodeDrag(svg, event) {
|
|
|
6025
5965
|
if (!nodeId) {
|
|
6026
5966
|
return null;
|
|
6027
5967
|
}
|
|
6028
|
-
const start =
|
|
5968
|
+
const start = chunkWZA3DJJH_cjs.pointerUserPoint(svg, event);
|
|
6029
5969
|
if (!start) {
|
|
6030
5970
|
return null;
|
|
6031
5971
|
}
|
|
@@ -6071,7 +6011,7 @@ var SankeyNodeDragSession = class {
|
|
|
6071
6011
|
if (!this.#drag || event.pointerId !== this.#drag.pointerId) {
|
|
6072
6012
|
return;
|
|
6073
6013
|
}
|
|
6074
|
-
const point =
|
|
6014
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
6075
6015
|
if (!point) {
|
|
6076
6016
|
return;
|
|
6077
6017
|
}
|
|
@@ -6085,7 +6025,7 @@ var SankeyNodeDragSession = class {
|
|
|
6085
6025
|
const leadBounds = offsetBounds(drag.originalBounds, rawDx, rawDy);
|
|
6086
6026
|
const candidates = nearestCandidates(leadBounds, drag.siblingBounds);
|
|
6087
6027
|
const snap = computeSnap(leadBounds, candidates, {
|
|
6088
|
-
threshold: SNAP_THRESHOLD_PX /
|
|
6028
|
+
threshold: SNAP_THRESHOLD_PX / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg),
|
|
6089
6029
|
activeX: MOVE_ACTIVE_POINTS,
|
|
6090
6030
|
activeY: MOVE_ACTIVE_POINTS,
|
|
6091
6031
|
guideOverhang: GUIDE_OVERHANG4
|
|
@@ -6095,7 +6035,7 @@ var SankeyNodeDragSession = class {
|
|
|
6095
6035
|
drag.lastDx = dx;
|
|
6096
6036
|
drag.lastDy = dy;
|
|
6097
6037
|
updateSankeyNodeDragPreview(drag, dx, dy);
|
|
6098
|
-
|
|
6038
|
+
chunkWZA3DJJH_cjs.updateAlignmentGuides(
|
|
6099
6039
|
this.#svg,
|
|
6100
6040
|
[snap.x.guide, snap.y.guide].filter((guide) => guide !== null),
|
|
6101
6041
|
GUIDE_COLOR3
|
|
@@ -6106,7 +6046,7 @@ var SankeyNodeDragSession = class {
|
|
|
6106
6046
|
clearSankeyNodeDragPreview(this.#drag);
|
|
6107
6047
|
}
|
|
6108
6048
|
this.#drag = null;
|
|
6109
|
-
|
|
6049
|
+
chunkWZA3DJJH_cjs.clearAlignmentGuides(this.#svg);
|
|
6110
6050
|
}
|
|
6111
6051
|
finish(event) {
|
|
6112
6052
|
if (!this.#drag || event.pointerId !== this.#drag.pointerId) {
|
|
@@ -6116,7 +6056,7 @@ var SankeyNodeDragSession = class {
|
|
|
6116
6056
|
this.#drag = null;
|
|
6117
6057
|
event.target?.releasePointerCapture?.(drag.pointerId);
|
|
6118
6058
|
clearSankeyNodeDragPreview(drag);
|
|
6119
|
-
|
|
6059
|
+
chunkWZA3DJJH_cjs.clearAlignmentGuides(this.#svg);
|
|
6120
6060
|
if (!drag.moved) {
|
|
6121
6061
|
return;
|
|
6122
6062
|
}
|
|
@@ -6172,7 +6112,7 @@ function bindSankeyNode(viewer, emitter) {
|
|
|
6172
6112
|
var FALLBACK_WIDTH = 120;
|
|
6173
6113
|
var FALLBACK_HEIGHT = 28;
|
|
6174
6114
|
function centeredLabelRect(primaryNode) {
|
|
6175
|
-
const primaryRect =
|
|
6115
|
+
const primaryRect = chunkWZA3DJJH_cjs.screenRectOf(primaryNode);
|
|
6176
6116
|
return {
|
|
6177
6117
|
left: primaryRect.left + (primaryRect.width - FALLBACK_WIDTH) / 2,
|
|
6178
6118
|
top: primaryRect.top + (primaryRect.height - FALLBACK_HEIGHT) / 2,
|
|
@@ -6182,10 +6122,10 @@ function centeredLabelRect(primaryNode) {
|
|
|
6182
6122
|
}
|
|
6183
6123
|
function resolveTextEditRect(owner, textNode, primaryNode) {
|
|
6184
6124
|
if (owner.role === "shape") {
|
|
6185
|
-
return primaryNode ?
|
|
6125
|
+
return primaryNode ? chunkWZA3DJJH_cjs.screenRectOf(primaryNode) : null;
|
|
6186
6126
|
}
|
|
6187
6127
|
if (textNode) {
|
|
6188
|
-
return
|
|
6128
|
+
return chunkWZA3DJJH_cjs.screenRectOf(textNode);
|
|
6189
6129
|
}
|
|
6190
6130
|
return primaryNode ? centeredLabelRect(primaryNode) : null;
|
|
6191
6131
|
}
|
|
@@ -6205,8 +6145,8 @@ function textAlign(owner, textNode) {
|
|
|
6205
6145
|
return anchor === "end" ? "right" : "left";
|
|
6206
6146
|
}
|
|
6207
6147
|
function createActiveTextEditor(svg, owner, emitter, onClose) {
|
|
6208
|
-
const textNode =
|
|
6209
|
-
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);
|
|
6210
6150
|
const rect = resolveTextEditRect(owner, textNode, primaryNode);
|
|
6211
6151
|
if (!rect) {
|
|
6212
6152
|
return null;
|
|
@@ -6252,7 +6192,7 @@ function isFrameTitle(target) {
|
|
|
6252
6192
|
}
|
|
6253
6193
|
function resolveEditableTextOwner(event) {
|
|
6254
6194
|
const target = event.target;
|
|
6255
|
-
const owner =
|
|
6195
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(target);
|
|
6256
6196
|
if (!owner) {
|
|
6257
6197
|
return null;
|
|
6258
6198
|
}
|
|
@@ -6393,7 +6333,7 @@ function applyToken(target, lines, token) {
|
|
|
6393
6333
|
function maskSource(lines) {
|
|
6394
6334
|
let tokens;
|
|
6395
6335
|
try {
|
|
6396
|
-
tokens =
|
|
6336
|
+
tokens = chunkUHKFJBY5_cjs.tokenizeSource(lines.join("\n"));
|
|
6397
6337
|
} catch {
|
|
6398
6338
|
return null;
|
|
6399
6339
|
}
|
|
@@ -6425,7 +6365,7 @@ function braceDelta(masked) {
|
|
|
6425
6365
|
}
|
|
6426
6366
|
|
|
6427
6367
|
// src/runtime/interaction/sflPatch/scan/blocks.ts
|
|
6428
|
-
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/;
|
|
6429
6369
|
var VALID_IDENT = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
6430
6370
|
function blockEndIn(masked, startLine) {
|
|
6431
6371
|
let depth = 0;
|
|
@@ -6692,6 +6632,9 @@ function canvasObjectBlockKind(kind) {
|
|
|
6692
6632
|
if (kind === "text") {
|
|
6693
6633
|
return "Text";
|
|
6694
6634
|
}
|
|
6635
|
+
if (kind === "image") {
|
|
6636
|
+
return "Image";
|
|
6637
|
+
}
|
|
6695
6638
|
if (kind === "isometric") {
|
|
6696
6639
|
return "Isometric";
|
|
6697
6640
|
}
|
|
@@ -6726,7 +6669,7 @@ function resolveCanvasObjectInsertionTarget(sfl, lines, parentId) {
|
|
|
6726
6669
|
const modelRange = findFirstBlockOfKind(lines, "Model");
|
|
6727
6670
|
return modelRange ? { range: modelRange, origin: { x: 0, y: 0 } } : null;
|
|
6728
6671
|
}
|
|
6729
|
-
const parent =
|
|
6672
|
+
const parent = chunkUHKFJBY5_cjs.sflToCanvasState(sfl).canvasObjects.find((canvasObject) => canvasObject.id === parentId);
|
|
6730
6673
|
if (!parent) {
|
|
6731
6674
|
return null;
|
|
6732
6675
|
}
|
|
@@ -6810,18 +6753,7 @@ function findReferencingLinkRanges(lines, canvasObjectId) {
|
|
|
6810
6753
|
return ranges;
|
|
6811
6754
|
}
|
|
6812
6755
|
|
|
6813
|
-
// src/runtime/interaction/sflPatch/canvasObjectPatch/
|
|
6814
|
-
function containsRange(container, candidate) {
|
|
6815
|
-
const sameRange = container.start === candidate.start && container.end === candidate.end;
|
|
6816
|
-
return !sameRange && container.start <= candidate.start && container.end >= candidate.end;
|
|
6817
|
-
}
|
|
6818
|
-
function outermostRemovalRanges(ranges) {
|
|
6819
|
-
return ranges.filter(
|
|
6820
|
-
(candidate) => !ranges.some((container) => container !== candidate && containsRange(container, candidate))
|
|
6821
|
-
);
|
|
6822
|
-
}
|
|
6823
|
-
|
|
6824
|
-
// src/runtime/interaction/sflPatch/canvasObjectPatch/repeatCell.ts
|
|
6756
|
+
// src/runtime/interaction/sflPatch/canvasObjectPatch/madeBlocks.ts
|
|
6825
6757
|
var REPEAT_HEADER = /^(\s*)Repeat\s+[A-Za-z_]\w*\s*\{\s*$/;
|
|
6826
6758
|
var TEMPLATE_HEADER = /^\s*[A-Z]\w*\s+([A-Za-z_]\w*)\b[^{]*\{/;
|
|
6827
6759
|
var PROPERTY = /^\s*[A-Za-z_]\w*\s*:/;
|
|
@@ -6848,7 +6780,7 @@ function excludeRepeatCell(lines, id) {
|
|
|
6848
6780
|
const template = masked[i].match(TEMPLATE_HEADER);
|
|
6849
6781
|
if (template) {
|
|
6850
6782
|
seenTemplate = true;
|
|
6851
|
-
const made = id.match(new RegExp(`^${escaped(template[1])}_(\\d+)(?:_(\\d+))?$`));
|
|
6783
|
+
const made = id.match(new RegExp(`^${escaped(template[1])}_(\\d+)(?:_(\\d+))?(?:_[A-Za-z]\\w*)?$`));
|
|
6852
6784
|
if (made) {
|
|
6853
6785
|
cell = { col: Number(made[1]), row: made[2] === void 0 ? 0 : Number(made[2]) };
|
|
6854
6786
|
}
|
|
@@ -6877,13 +6809,48 @@ function excludeRepeatCell(lines, id) {
|
|
|
6877
6809
|
}
|
|
6878
6810
|
return null;
|
|
6879
6811
|
}
|
|
6812
|
+
var USE_HEADER = /^\s*Use\s+([A-Za-z_]\w*)\s*:/;
|
|
6813
|
+
function findUseBlock(lines, id) {
|
|
6814
|
+
const masked = maskLines(lines);
|
|
6815
|
+
if (masked === null) {
|
|
6816
|
+
return null;
|
|
6817
|
+
}
|
|
6818
|
+
let found = null;
|
|
6819
|
+
for (let start = 0; start < masked.length; start++) {
|
|
6820
|
+
const header = masked[start].match(USE_HEADER);
|
|
6821
|
+
if (header && id.startsWith(`${header[1]}_`) && (found === null || header[1].length > found.length)) {
|
|
6822
|
+
found = { start, end: blockEndLine(lines, start), length: header[1].length };
|
|
6823
|
+
}
|
|
6824
|
+
}
|
|
6825
|
+
return found && { start: found.start, end: found.end };
|
|
6826
|
+
}
|
|
6827
|
+
|
|
6828
|
+
// src/runtime/interaction/sflPatch/canvasObjectPatch/removalRanges.ts
|
|
6829
|
+
function containsRange(container, candidate) {
|
|
6830
|
+
const sameRange = container.start === candidate.start && container.end === candidate.end;
|
|
6831
|
+
return !sameRange && container.start <= candidate.start && container.end >= candidate.end;
|
|
6832
|
+
}
|
|
6833
|
+
function outermostRemovalRanges(ranges) {
|
|
6834
|
+
return ranges.filter(
|
|
6835
|
+
(candidate) => !ranges.some((container) => container !== candidate && containsRange(container, candidate))
|
|
6836
|
+
);
|
|
6837
|
+
}
|
|
6880
6838
|
|
|
6881
6839
|
// src/runtime/interaction/sflPatch/canvasObjectPatch/remove.ts
|
|
6882
6840
|
function removeCanvasObject(sfl, id, options = {}) {
|
|
6883
6841
|
const lines = sfl.split("\n");
|
|
6884
6842
|
const canvasObjectRange = findOwnerBlock(lines, id);
|
|
6885
6843
|
if (!canvasObjectRange) {
|
|
6886
|
-
|
|
6844
|
+
const cell = excludeRepeatCell(lines, id);
|
|
6845
|
+
if (cell) {
|
|
6846
|
+
return cell.join("\n");
|
|
6847
|
+
}
|
|
6848
|
+
const use = findUseBlock(lines, id);
|
|
6849
|
+
if (use) {
|
|
6850
|
+
lines.splice(use.start, use.end - use.start + 1);
|
|
6851
|
+
return lines.join("\n");
|
|
6852
|
+
}
|
|
6853
|
+
return sfl;
|
|
6887
6854
|
}
|
|
6888
6855
|
const ranges = [canvasObjectRange];
|
|
6889
6856
|
if (options.alsoRemoveLinks ?? true) {
|
|
@@ -7229,7 +7196,7 @@ function movePathPoints(lines, range, dx, dy) {
|
|
|
7229
7196
|
replacePropertyValue(lines, span, shifted);
|
|
7230
7197
|
}
|
|
7231
7198
|
function applyMoveChange(sfl, event) {
|
|
7232
|
-
const state =
|
|
7199
|
+
const state = chunkUHKFJBY5_cjs.sflToCanvasState(sfl);
|
|
7233
7200
|
const canvasObject = state.canvasObjects.find((candidate) => candidate.id === event.owner.id);
|
|
7234
7201
|
if (!canvasObject) {
|
|
7235
7202
|
return sfl;
|
|
@@ -7254,7 +7221,7 @@ function applyMoveChange(sfl, event) {
|
|
|
7254
7221
|
|
|
7255
7222
|
// src/runtime/interaction/sflPatch/changes/pathPointChange.ts
|
|
7256
7223
|
function applyPathPointChange(sfl, event) {
|
|
7257
|
-
const canvasObjects =
|
|
7224
|
+
const canvasObjects = chunkUHKFJBY5_cjs.sflToCanvasState(sfl).canvasObjects;
|
|
7258
7225
|
const canvasObject = canvasObjects.find((candidate) => candidate.id === event.owner.id);
|
|
7259
7226
|
if (!canvasObject) {
|
|
7260
7227
|
return sfl;
|
|
@@ -7408,7 +7375,7 @@ function resolveConnectionInsertionTarget(sfl, lines, options) {
|
|
|
7408
7375
|
if (!VALID_IDENT.test(options.id) || nameExists(lines, options.id)) {
|
|
7409
7376
|
return null;
|
|
7410
7377
|
}
|
|
7411
|
-
const canvasObjects =
|
|
7378
|
+
const canvasObjects = chunkUHKFJBY5_cjs.sflToCanvasState(sfl).canvasObjects;
|
|
7412
7379
|
const hasSource = canvasObjects.some((canvasObject) => canvasObject.id === options.fromId);
|
|
7413
7380
|
const hasTarget = canvasObjects.some((canvasObject) => canvasObject.id === options.toId);
|
|
7414
7381
|
if (!hasSource || !hasTarget) {
|
|
@@ -7472,13 +7439,13 @@ function isometricOffset(direction, object, gap) {
|
|
|
7472
7439
|
const { depth } = object.isometric;
|
|
7473
7440
|
switch (direction) {
|
|
7474
7441
|
case "iso-width-pos":
|
|
7475
|
-
return { dx: (width + gap) *
|
|
7442
|
+
return { dx: (width + gap) * chunkUHKFJBY5_cjs.AXIS_COS, dy: (width + gap) * chunkUHKFJBY5_cjs.AXIS_SIN };
|
|
7476
7443
|
case "iso-width-neg":
|
|
7477
|
-
return { dx: -(width + gap) *
|
|
7444
|
+
return { dx: -(width + gap) * chunkUHKFJBY5_cjs.AXIS_COS, dy: -(width + gap) * chunkUHKFJBY5_cjs.AXIS_SIN };
|
|
7478
7445
|
case "iso-depth-pos":
|
|
7479
|
-
return { dx: -(depth + gap) *
|
|
7446
|
+
return { dx: -(depth + gap) * chunkUHKFJBY5_cjs.AXIS_COS, dy: (depth + gap) * chunkUHKFJBY5_cjs.AXIS_SIN };
|
|
7480
7447
|
case "iso-depth-neg":
|
|
7481
|
-
return { dx: (depth + gap) *
|
|
7448
|
+
return { dx: (depth + gap) * chunkUHKFJBY5_cjs.AXIS_COS, dy: -(depth + gap) * chunkUHKFJBY5_cjs.AXIS_SIN };
|
|
7482
7449
|
case "iso-height-pos":
|
|
7483
7450
|
return { dx: 0, dy: height + gap };
|
|
7484
7451
|
case "iso-height-neg":
|
|
@@ -7541,7 +7508,7 @@ function resolveLinkInsertionTarget(sfl, lines, options) {
|
|
|
7541
7508
|
if (!VALID_IDENT.test(options.id) || nameExists(lines, options.id)) {
|
|
7542
7509
|
return null;
|
|
7543
7510
|
}
|
|
7544
|
-
const canvasObjects =
|
|
7511
|
+
const canvasObjects = chunkUHKFJBY5_cjs.sflToCanvasState(sfl).canvasObjects;
|
|
7545
7512
|
const hasSource = canvasObjects.some((canvasObject) => canvasObject.id === options.fromId);
|
|
7546
7513
|
const hasTarget = canvasObjects.some((canvasObject) => canvasObject.id === options.toId);
|
|
7547
7514
|
if (!hasSource || !hasTarget) {
|
|
@@ -7627,21 +7594,21 @@ function duplicateShape(sfl, input) {
|
|
|
7627
7594
|
|
|
7628
7595
|
// src/runtime/interaction/sflPatch/changes/quickDuplicateChange.ts
|
|
7629
7596
|
function applyQuickDuplicateChange(sfl, event, options) {
|
|
7630
|
-
const state =
|
|
7597
|
+
const state = chunkUHKFJBY5_cjs.sflToCanvasState(sfl);
|
|
7631
7598
|
const object = state.canvasObjects.find((candidate) => candidate.id === event.owner.id);
|
|
7632
7599
|
if (!object) {
|
|
7633
7600
|
return sfl;
|
|
7634
7601
|
}
|
|
7635
7602
|
const { direction } = event;
|
|
7636
7603
|
if (isIsometricDirection2(direction)) {
|
|
7637
|
-
return
|
|
7604
|
+
return chunkUHKFJBY5_cjs.isIsometricObject(object) ? duplicateIsometricObject(sfl, object, direction, options) : sfl;
|
|
7638
7605
|
}
|
|
7639
|
-
return
|
|
7606
|
+
return chunkUHKFJBY5_cjs.isIsometricObject(object) ? sfl : duplicateShape(sfl, { object, links: state.links, side: direction, options });
|
|
7640
7607
|
}
|
|
7641
7608
|
|
|
7642
7609
|
// src/runtime/interaction/sflPatch/changes/resizeChange.ts
|
|
7643
7610
|
function applyResizeChange(sfl, event) {
|
|
7644
|
-
const state =
|
|
7611
|
+
const state = chunkUHKFJBY5_cjs.sflToCanvasState(sfl);
|
|
7645
7612
|
const canvasObject = state.canvasObjects.find((candidate) => candidate.id === event.owner.id);
|
|
7646
7613
|
const parent = canvasObject?.parentFrameId ? state.canvasObjects.find((candidate) => candidate.id === canvasObject.parentFrameId) : void 0;
|
|
7647
7614
|
const originX = parent?.x ?? 0;
|