stickyflow 0.10.0 → 0.11.1
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 +26 -0
- package/dist/binding/index.cjs +9 -9
- package/dist/binding/index.d.cts +4 -4
- package/dist/binding/index.d.ts +4 -4
- package/dist/binding/index.js +3 -3
- package/dist/{chunk-TECWZVIM.cjs → chunk-4KBU4CFU.cjs} +23 -23
- package/dist/{chunk-TECWZVIM.cjs.map → chunk-4KBU4CFU.cjs.map} +1 -1
- package/dist/{chunk-EGUPN56K.js → chunk-BFQWCOEC.js} +3 -3
- package/dist/{chunk-EGUPN56K.js.map → chunk-BFQWCOEC.js.map} +1 -1
- package/dist/{chunk-VPNOVRWP.js → chunk-DGAVCN4D.js} +262 -15
- package/dist/chunk-DGAVCN4D.js.map +1 -0
- package/dist/{chunk-5PJ55GPG.cjs → chunk-EHH6ZDK6.cjs} +1076 -713
- package/dist/chunk-EHH6ZDK6.cjs.map +1 -0
- package/dist/{chunk-HRU6VOEC.js → chunk-G6IW2IX3.js} +44 -7
- package/dist/chunk-G6IW2IX3.js.map +1 -0
- package/dist/{chunk-SDOHUNBW.js → chunk-TQIYK5OA.js} +435 -72
- package/dist/chunk-TQIYK5OA.js.map +1 -0
- package/dist/{chunk-L7CEX5JV.js → chunk-UD6IG2PG.js} +4 -4
- package/dist/{chunk-L7CEX5JV.js.map → chunk-UD6IG2PG.js.map} +1 -1
- package/dist/{chunk-LSEMXRB5.cjs → chunk-UHKFJBY5.cjs} +44 -7
- package/dist/chunk-UHKFJBY5.cjs.map +1 -0
- package/dist/{chunk-KRSX4UZ7.cjs → chunk-VYQ6N5SI.cjs} +293 -46
- package/dist/chunk-VYQ6N5SI.cjs.map +1 -0
- package/dist/{chunk-SCD3AHMY.cjs → chunk-WZA3DJJH.cjs} +15 -15
- package/dist/{chunk-SCD3AHMY.cjs.map → chunk-WZA3DJJH.cjs.map} +1 -1
- package/dist/index.cjs +36 -36
- package/dist/index.d.cts +5 -5
- package/dist/index.d.ts +5 -5
- package/dist/index.js +5 -5
- package/dist/interaction/index.cjs +308 -256
- package/dist/interaction/index.cjs.map +1 -1
- package/dist/interaction/index.d.cts +5 -4
- package/dist/interaction/index.d.ts +5 -4
- package/dist/interaction/index.js +74 -23
- package/dist/interaction/index.js.map +1 -1
- package/dist/{render-DU4lYbRl.d.cts → render-BDO4S5uF.d.cts} +16 -0
- package/dist/{render-DU4lYbRl.d.ts → render-BDO4S5uF.d.ts} +16 -0
- package/dist/{runtime-Bkv7QW7H.d.cts → runtime-C-C5v9po.d.cts} +2 -2
- package/dist/{runtime-DJ4K4_HZ.d.ts → runtime-lCAfU-1Q.d.ts} +2 -2
- package/dist/{runtimeTypes-C1shzoyr.d.ts → runtimeTypes-B7p6b1Bi.d.cts} +2 -2
- package/dist/{runtimeTypes-BvJBZLkr.d.cts → runtimeTypes-BDA_CfWh.d.ts} +2 -2
- package/dist/stickyflow-diagram.global.js +197 -44
- package/dist/stickyflow-diagram.global.js.map +1 -1
- package/dist/{types-B5jrEEcF.d.cts → types-CZJzycKw.d.cts} +1 -1
- package/dist/{types-B7IkZ0w4.d.ts → types-Dp8JVZLB.d.ts} +1 -1
- package/dist/viewer/index.cjs +9 -9
- package/dist/viewer/index.d.cts +4 -4
- package/dist/viewer/index.d.ts +4 -4
- package/dist/viewer/index.js +4 -4
- package/dist/web-component/index.cjs +6 -6
- package/dist/web-component/index.d.cts +2 -2
- package/dist/web-component/index.d.ts +2 -2
- package/dist/web-component/index.js +4 -4
- package/package.json +1 -1
- package/dist/chunk-5PJ55GPG.cjs.map +0 -1
- package/dist/chunk-HRU6VOEC.js.map +0 -1
- package/dist/chunk-KRSX4UZ7.cjs.map +0 -1
- package/dist/chunk-LSEMXRB5.cjs.map +0 -1
- package/dist/chunk-SDOHUNBW.js.map +0 -1
- package/dist/chunk-VPNOVRWP.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunkWZA3DJJH_cjs = require('../chunk-WZA3DJJH.cjs');
|
|
4
|
+
var chunkUHKFJBY5_cjs = require('../chunk-UHKFJBY5.cjs');
|
|
5
5
|
|
|
6
6
|
// src/runtime/interaction/chartValue/coordinates.ts
|
|
7
7
|
function pointerUserY(svg, event) {
|
|
@@ -70,13 +70,13 @@ function updateConnectedLine(svg, drag) {
|
|
|
70
70
|
}));
|
|
71
71
|
const line = findConnectedLine(svg, drag.owner.id, drag.series);
|
|
72
72
|
if (line) {
|
|
73
|
-
line.setAttribute("d",
|
|
73
|
+
line.setAttribute("d", chunkUHKFJBY5_cjs.linePathData(points, drag.lineTension));
|
|
74
74
|
}
|
|
75
75
|
const area = findConnectedLineArea(svg, drag.owner.id, drag.series);
|
|
76
76
|
if (area && points.length > 1) {
|
|
77
77
|
const first = points[0];
|
|
78
78
|
const last = points[points.length - 1];
|
|
79
|
-
const d = `${
|
|
79
|
+
const d = `${chunkUHKFJBY5_cjs.linePathData(points, drag.lineTension)} L ${last.x} ${drag.baseY} L ${first.x} ${drag.baseY} Z`;
|
|
80
80
|
area.setAttribute("d", d);
|
|
81
81
|
}
|
|
82
82
|
}
|
|
@@ -90,14 +90,14 @@ function setBarPath(svg, drag, d) {
|
|
|
90
90
|
function updateChartValuePreview(svg, drag, value) {
|
|
91
91
|
if (drag.isBar && drag.scale.horizontal) {
|
|
92
92
|
const width = Math.max(0, pixelForValue(value, drag.scale) - drag.barX);
|
|
93
|
-
setBarPath(svg, drag,
|
|
93
|
+
setBarPath(svg, drag, chunkUHKFJBY5_cjs.roundedBarPath(drag.barX, drag.barTop, width, drag.barHeight, drag.barRadius));
|
|
94
94
|
return;
|
|
95
95
|
}
|
|
96
96
|
const y = pixelForValue(value, drag.scale);
|
|
97
97
|
if (drag.isBar) {
|
|
98
98
|
const top = Math.min(y, drag.baseY);
|
|
99
99
|
const height = Math.max(0, Math.abs(drag.baseY - y));
|
|
100
|
-
setBarPath(svg, drag,
|
|
100
|
+
setBarPath(svg, drag, chunkUHKFJBY5_cjs.barShapePath(drag.barX, top, drag.barWidth, height, drag.barRadius));
|
|
101
101
|
return;
|
|
102
102
|
}
|
|
103
103
|
drag.element.setAttribute("cy", String(y));
|
|
@@ -120,24 +120,24 @@ function labelShift(placement, origin, top, height) {
|
|
|
120
120
|
}
|
|
121
121
|
function resizePill(pill, text, label, dy) {
|
|
122
122
|
const fontSize = parseFloat(text.getAttribute("font-size") ?? "12");
|
|
123
|
-
const size =
|
|
123
|
+
const size = chunkUHKFJBY5_cjs.barLabelSize(label, fontSize, true);
|
|
124
124
|
const stored = pill.dataset.sfPillY ?? (pill.getAttribute("d") ?? "").split(/\s+/)[2];
|
|
125
125
|
pill.dataset.sfPillY = stored;
|
|
126
126
|
const centerX = Number(text.getAttribute("x"));
|
|
127
|
-
pill.setAttribute("d",
|
|
127
|
+
pill.setAttribute("d", chunkUHKFJBY5_cjs.pillPath(centerX - size.width / 2, Number(stored), size.width, size.height));
|
|
128
128
|
pill.setAttribute("transform", `translate(0 ${dy})`);
|
|
129
129
|
}
|
|
130
130
|
function updateHorizontalBarLabel(label, drag, origin, value) {
|
|
131
|
-
const content =
|
|
131
|
+
const content = chunkUHKFJBY5_cjs.formatBarLabel(value, label.template);
|
|
132
132
|
(label.text.querySelector("tspan") ?? label.text).textContent = content;
|
|
133
133
|
if (label.placement === "axis") {
|
|
134
134
|
return true;
|
|
135
135
|
}
|
|
136
136
|
const fontSize = parseFloat(label.text.getAttribute("font-size") ?? "12");
|
|
137
|
-
const size =
|
|
137
|
+
const size = chunkUHKFJBY5_cjs.barLabelSize(content, fontSize, label.pill !== null);
|
|
138
138
|
const width = Math.max(0, pixelForValue(value, drag.scale) - origin.left);
|
|
139
139
|
const end = origin.left + width;
|
|
140
|
-
const center = label.placement === "outside" ? end +
|
|
140
|
+
const center = label.placement === "outside" ? end + chunkUHKFJBY5_cjs.BAR_LABEL.gap + size.width / 2 : label.placement === "inside" ? end - chunkUHKFJBY5_cjs.BAR_LABEL.gap - size.width / 2 : origin.left + width / 2;
|
|
141
141
|
const stored = label.text.dataset.sfLabelX ?? label.text.getAttribute("x") ?? "0";
|
|
142
142
|
label.text.dataset.sfLabelX = stored;
|
|
143
143
|
label.text.setAttribute("transform", `translate(${center - Number(stored)} 0)`);
|
|
@@ -145,7 +145,7 @@ function updateHorizontalBarLabel(label, drag, origin, value) {
|
|
|
145
145
|
const pillY = label.pill.dataset.sfPillY ?? (label.pill.getAttribute("d") ?? "").split(/\s+/)[2];
|
|
146
146
|
label.pill.dataset.sfPillY = pillY;
|
|
147
147
|
label.pill.removeAttribute("transform");
|
|
148
|
-
label.pill.setAttribute("d",
|
|
148
|
+
label.pill.setAttribute("d", chunkUHKFJBY5_cjs.pillPath(center - size.width / 2, Number(pillY), size.width, size.height));
|
|
149
149
|
}
|
|
150
150
|
return true;
|
|
151
151
|
}
|
|
@@ -161,7 +161,7 @@ function updateBarLabel(svg, drag, origin, value) {
|
|
|
161
161
|
const top = Math.min(y, drag.baseY);
|
|
162
162
|
const height = Math.abs(drag.baseY - y);
|
|
163
163
|
const dy = labelShift(label.placement, origin, top, height);
|
|
164
|
-
const content =
|
|
164
|
+
const content = chunkUHKFJBY5_cjs.formatBarLabel(value, label.template);
|
|
165
165
|
(label.text.querySelector("tspan") ?? label.text).textContent = content;
|
|
166
166
|
label.text.setAttribute("transform", `translate(0 ${dy})`);
|
|
167
167
|
if (label.pill) {
|
|
@@ -177,7 +177,7 @@ var HEIGHT = 18;
|
|
|
177
177
|
var GAP = 8;
|
|
178
178
|
var BACKGROUND = "rgba(15, 23, 42, 0.9)";
|
|
179
179
|
function element(svg, tag) {
|
|
180
|
-
return svg.ownerDocument.createElementNS(
|
|
180
|
+
return svg.ownerDocument.createElementNS(chunkWZA3DJJH_cjs.SVG_NAMESPACE, tag);
|
|
181
181
|
}
|
|
182
182
|
function createValueReadout(svg) {
|
|
183
183
|
const group = element(svg, "g");
|
|
@@ -273,7 +273,7 @@ function resolveChartValueDrag(svg, event) {
|
|
|
273
273
|
if (!target) {
|
|
274
274
|
return null;
|
|
275
275
|
}
|
|
276
|
-
const scale = parseValueScale(
|
|
276
|
+
const scale = parseValueScale(chunkWZA3DJJH_cjs.findOwnerNode(svg, target.owner.id, chunkWZA3DJJH_cjs.isPrimary));
|
|
277
277
|
const geometry = scale ? resolveChartValueGeometry(svg, target, scale) : null;
|
|
278
278
|
if (!scale || !geometry) {
|
|
279
279
|
return null;
|
|
@@ -293,13 +293,13 @@ function createChartValueDragState(target, scale, geometry, pointerId) {
|
|
|
293
293
|
};
|
|
294
294
|
}
|
|
295
295
|
function isChartValuePointer(event) {
|
|
296
|
-
return event.button === 0 && !
|
|
296
|
+
return event.button === 0 && !chunkWZA3DJJH_cjs.isCameraGesture(event);
|
|
297
297
|
}
|
|
298
298
|
function findChartValueMark(event) {
|
|
299
299
|
return event.target?.closest?.("[data-sf-value-index]");
|
|
300
300
|
}
|
|
301
301
|
function readChartValueTarget(mark) {
|
|
302
|
-
const owner =
|
|
302
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(mark);
|
|
303
303
|
if (owner?.role !== "chart") {
|
|
304
304
|
return null;
|
|
305
305
|
}
|
|
@@ -458,8 +458,8 @@ function bindChartValueDrag(viewer, emitter) {
|
|
|
458
458
|
|
|
459
459
|
// src/runtime/interaction/colorEdit/color.ts
|
|
460
460
|
function normalizeHex(value) {
|
|
461
|
-
const channels =
|
|
462
|
-
return channels &&
|
|
461
|
+
const channels = chunkUHKFJBY5_cjs.parseHexRgb(value);
|
|
462
|
+
return channels && chunkUHKFJBY5_cjs.rgbToHex(...channels);
|
|
463
463
|
}
|
|
464
464
|
var COLOR_FUNCTION = /^rgba?\(\s*(\d{1,3})\s*[, ]\s*(\d{1,3})\s*[, ]\s*(\d{1,3})\s*(?:[,/]\s*(\d*\.?\d+)(%?)\s*)?\)$/i;
|
|
465
465
|
var HEX_WITH_ALPHA = /^#([0-9a-f]{6})([0-9a-f]{2})$/i;
|
|
@@ -498,14 +498,14 @@ function clampChannel(value) {
|
|
|
498
498
|
return Math.max(0, Math.min(255, Math.round(value)));
|
|
499
499
|
}
|
|
500
500
|
function hexToRgb(hex) {
|
|
501
|
-
const [r, g, b] =
|
|
501
|
+
const [r, g, b] = chunkUHKFJBY5_cjs.parseHexRgb(hex) ?? [0, 0, 0];
|
|
502
502
|
return { r, g, b };
|
|
503
503
|
}
|
|
504
504
|
function rgbToHex2(rgb) {
|
|
505
|
-
return
|
|
505
|
+
return chunkUHKFJBY5_cjs.rgbToHex(clampChannel(rgb.r), clampChannel(rgb.g), clampChannel(rgb.b));
|
|
506
506
|
}
|
|
507
507
|
function hsvToRgb2(hsv) {
|
|
508
|
-
const { r, g, b } =
|
|
508
|
+
const { r, g, b } = chunkUHKFJBY5_cjs.hsvToRgb(
|
|
509
509
|
(hsv.h % 360 + 360) % 360,
|
|
510
510
|
Math.max(0, Math.min(1, hsv.s)),
|
|
511
511
|
Math.max(0, Math.min(1, hsv.v))
|
|
@@ -513,7 +513,7 @@ function hsvToRgb2(hsv) {
|
|
|
513
513
|
return { r, g, b };
|
|
514
514
|
}
|
|
515
515
|
function rgbToHsv2(rgb) {
|
|
516
|
-
return
|
|
516
|
+
return chunkUHKFJBY5_cjs.rgbToHsv(clampChannel(rgb.r), clampChannel(rgb.g), clampChannel(rgb.b));
|
|
517
517
|
}
|
|
518
518
|
function hexToHsv(hex) {
|
|
519
519
|
return rgbToHsv2(hexToRgb(hex));
|
|
@@ -836,6 +836,14 @@ function trackDrag(node, onMove, onEnd) {
|
|
|
836
836
|
var CHANNELS = ["r", "g", "b"];
|
|
837
837
|
var GAP_BELOW_ANCHOR = 6;
|
|
838
838
|
var VIEWPORT_MARGIN = 8;
|
|
839
|
+
function buildEyedropper(parent) {
|
|
840
|
+
const button = el("button", "sf-cp-eyedropper", parent);
|
|
841
|
+
button.type = "button";
|
|
842
|
+
button.title = "Pick a color from the screen";
|
|
843
|
+
button.setAttribute("aria-label", "Pick a color from the screen");
|
|
844
|
+
button.innerHTML = '<svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M2 22l1-1h3l9-9"/><path d="M3 21v-3l9-9"/><path d="M15 6l3.4-3.4a2.1 2.1 0 1 1 3 3L18 9l.4.4a2.1 2.1 0 1 1-3 3l-3.8-3.8a2.1 2.1 0 1 1 3-3l.4.4z"/></svg>';
|
|
845
|
+
return button;
|
|
846
|
+
}
|
|
839
847
|
function buildSolidControls(root) {
|
|
840
848
|
const area = el("div", "sf-cp-area", root);
|
|
841
849
|
const matrix = el("div", "sf-cp-matrix", area);
|
|
@@ -859,6 +867,7 @@ function buildSolidControls(root) {
|
|
|
859
867
|
const hexInput = el("input", "sf-cp-text", hexRow);
|
|
860
868
|
hexInput.type = "text";
|
|
861
869
|
hexInput.spellcheck = false;
|
|
870
|
+
const eyedropper = "EyeDropper" in window ? buildEyedropper(hexRow) : void 0;
|
|
862
871
|
return {
|
|
863
872
|
matrix,
|
|
864
873
|
matrixCursor,
|
|
@@ -869,7 +878,8 @@ function buildSolidControls(root) {
|
|
|
869
878
|
alphaRow,
|
|
870
879
|
alphaRange,
|
|
871
880
|
alphaNumber,
|
|
872
|
-
hexInput
|
|
881
|
+
hexInput,
|
|
882
|
+
eyedropper
|
|
873
883
|
};
|
|
874
884
|
}
|
|
875
885
|
function buildGradientControls(root, lockStops) {
|
|
@@ -1006,6 +1016,20 @@ function bindAngle(picker) {
|
|
|
1006
1016
|
angleNumber.addEventListener("input", (event) => applyAngle(picker, read(event)));
|
|
1007
1017
|
angleNumber.addEventListener("change", () => commit(picker));
|
|
1008
1018
|
}
|
|
1019
|
+
function bindEyedropper(picker) {
|
|
1020
|
+
const { eyedropper } = picker.view;
|
|
1021
|
+
eyedropper?.addEventListener("click", async () => {
|
|
1022
|
+
const Dropper = window.EyeDropper;
|
|
1023
|
+
try {
|
|
1024
|
+
const hex = normalizeHex((await new Dropper().open()).sRGBHex);
|
|
1025
|
+
if (hex) {
|
|
1026
|
+
applyHex(picker, hex);
|
|
1027
|
+
commit(picker);
|
|
1028
|
+
}
|
|
1029
|
+
} catch {
|
|
1030
|
+
}
|
|
1031
|
+
});
|
|
1032
|
+
}
|
|
1009
1033
|
function bindPickerEvents(picker) {
|
|
1010
1034
|
const { view } = picker;
|
|
1011
1035
|
const disposers = bindAreas(picker);
|
|
@@ -1017,6 +1041,7 @@ function bindPickerEvents(picker) {
|
|
|
1017
1041
|
}
|
|
1018
1042
|
bindAlpha(picker);
|
|
1019
1043
|
bindHex(picker);
|
|
1044
|
+
bindEyedropper(picker);
|
|
1020
1045
|
bindAngle(picker);
|
|
1021
1046
|
return disposers;
|
|
1022
1047
|
}
|
|
@@ -1314,6 +1339,25 @@ var FIELDS_CSS = `
|
|
|
1314
1339
|
}
|
|
1315
1340
|
|
|
1316
1341
|
.sf-cp-number,
|
|
1342
|
+
.sf-cp-eyedropper {
|
|
1343
|
+
flex: none;
|
|
1344
|
+
display: grid;
|
|
1345
|
+
place-items: center;
|
|
1346
|
+
width: 24px;
|
|
1347
|
+
height: 24px;
|
|
1348
|
+
margin-left: auto;
|
|
1349
|
+
padding: 0;
|
|
1350
|
+
border: 1px solid var(--sf-cp-field-border);
|
|
1351
|
+
border-radius: 6px;
|
|
1352
|
+
background: var(--sf-cp-field-bg);
|
|
1353
|
+
color: var(--sf-cp-fg);
|
|
1354
|
+
cursor: pointer;
|
|
1355
|
+
}
|
|
1356
|
+
|
|
1357
|
+
.sf-cp-eyedropper:hover {
|
|
1358
|
+
background: var(--sf-cp-hover);
|
|
1359
|
+
}
|
|
1360
|
+
|
|
1317
1361
|
.sf-cp-text {
|
|
1318
1362
|
flex: none;
|
|
1319
1363
|
width: 52px;
|
|
@@ -1709,7 +1753,7 @@ var ColorEditSession = class {
|
|
|
1709
1753
|
const hasOverride = target.node.getAttribute("data-sf-color-override") === "true";
|
|
1710
1754
|
this.#open = openColorPopover({
|
|
1711
1755
|
seed: seedFrom(fill, readGradientValue(this.#svg, fill)),
|
|
1712
|
-
anchor:
|
|
1756
|
+
anchor: chunkWZA3DJJH_cjs.screenRectOf(target.node),
|
|
1713
1757
|
theme: resolveTheme(this.#theme),
|
|
1714
1758
|
allowGradient: !target.solidOnly,
|
|
1715
1759
|
onCommit: (color) => {
|
|
@@ -1791,7 +1835,7 @@ function resolveTarget(event, selector, pathOf, rules) {
|
|
|
1791
1835
|
return null;
|
|
1792
1836
|
}
|
|
1793
1837
|
const path = pathOf(node);
|
|
1794
|
-
const owner =
|
|
1838
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(node);
|
|
1795
1839
|
if (!path || !owner || !isEditablePath(path, rules) || requiresPriorSelection(node, owner)) {
|
|
1796
1840
|
return null;
|
|
1797
1841
|
}
|
|
@@ -1813,7 +1857,7 @@ function resolveZoneGradientTarget(event) {
|
|
|
1813
1857
|
if (!node) {
|
|
1814
1858
|
return null;
|
|
1815
1859
|
}
|
|
1816
|
-
const owner =
|
|
1860
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(node);
|
|
1817
1861
|
if (!owner) {
|
|
1818
1862
|
return null;
|
|
1819
1863
|
}
|
|
@@ -1849,7 +1893,7 @@ var ZoneGradientSession = class {
|
|
|
1849
1893
|
const beforeStops = sortStops(gradient.stops);
|
|
1850
1894
|
this.#open = openColorPopover({
|
|
1851
1895
|
seed: seedFrom(fill, gradient),
|
|
1852
|
-
anchor:
|
|
1896
|
+
anchor: chunkWZA3DJJH_cjs.screenRectOf(target.node),
|
|
1853
1897
|
theme: resolveTheme(this.#theme),
|
|
1854
1898
|
allowGradient: true,
|
|
1855
1899
|
lockStops: true,
|
|
@@ -1922,15 +1966,15 @@ function bindDeleteSelection(viewer, emitter) {
|
|
|
1922
1966
|
}
|
|
1923
1967
|
|
|
1924
1968
|
// src/runtime/interaction/events.ts
|
|
1925
|
-
var Emitter2 = class extends
|
|
1969
|
+
var Emitter2 = class extends chunkWZA3DJJH_cjs.Emitter {
|
|
1926
1970
|
};
|
|
1927
1971
|
|
|
1928
1972
|
// src/runtime/interaction/linkPreview/geometry.ts
|
|
1929
1973
|
function anchorPoint(bounds, side, other) {
|
|
1930
1974
|
if (side) {
|
|
1931
|
-
return
|
|
1975
|
+
return chunkUHKFJBY5_cjs.pointAtPort(bounds, { side, offset: 0.5 });
|
|
1932
1976
|
}
|
|
1933
|
-
return
|
|
1977
|
+
return chunkUHKFJBY5_cjs.edgePointToward(bounds, other);
|
|
1934
1978
|
}
|
|
1935
1979
|
function polylinePathData(points) {
|
|
1936
1980
|
if (points.length < 4) {
|
|
@@ -1947,7 +1991,7 @@ function previewPathData(points, segments, pathType, strokeWidth) {
|
|
|
1947
1991
|
return `M ${points[0]} ${points[1]} C ${points[2]} ${points[3]} ${points[4]} ${points[5]} ${points[6]} ${points[7]}`;
|
|
1948
1992
|
}
|
|
1949
1993
|
if (pathType === "orthogonal" && segments.length > 0) {
|
|
1950
|
-
return
|
|
1994
|
+
return chunkUHKFJBY5_cjs.roundedOrthogonalPathData(segments, Math.max(16, strokeWidth * 4));
|
|
1951
1995
|
}
|
|
1952
1996
|
return polylinePathData(points);
|
|
1953
1997
|
}
|
|
@@ -1967,8 +2011,8 @@ function previewLink(fromSide, toSide) {
|
|
|
1967
2011
|
function routePreviewLink(fromBounds, toBounds, fromSide, toSide, pathType) {
|
|
1968
2012
|
const from = anchorPoint(fromBounds, fromSide, toBounds);
|
|
1969
2013
|
const to = anchorPoint(toBounds, toSide, fromBounds);
|
|
1970
|
-
const { points, segments } =
|
|
1971
|
-
return { points, segments, midpoint:
|
|
2014
|
+
const { points, segments } = chunkUHKFJBY5_cjs.calculateLinkRoute(previewLink(fromSide, toSide), from, to, pathType);
|
|
2015
|
+
return { points, segments, midpoint: chunkUHKFJBY5_cjs.getLineMidpoint(points, pathType, from, to) };
|
|
1972
2016
|
}
|
|
1973
2017
|
|
|
1974
2018
|
// src/runtime/interaction/linkPreview/discovery.ts
|
|
@@ -2000,7 +2044,7 @@ function resolveOppositeEndpoint(svg, path, canvasObjectId) {
|
|
|
2000
2044
|
if (!otherId) {
|
|
2001
2045
|
return null;
|
|
2002
2046
|
}
|
|
2003
|
-
const otherPrimary =
|
|
2047
|
+
const otherPrimary = chunkWZA3DJJH_cjs.findOwnerNode(svg, otherId, chunkWZA3DJJH_cjs.isPrimary);
|
|
2004
2048
|
return otherPrimary ? { draggedIsFrom, bounds: otherPrimary.getBBox() } : null;
|
|
2005
2049
|
}
|
|
2006
2050
|
function captureLiveLinkLabel(svg, draft, draggedBounds) {
|
|
@@ -2047,8 +2091,8 @@ function resolveOtherFacePoint(svg, path, canvasObjectId) {
|
|
|
2047
2091
|
if (!otherId || !face || !otherFace) {
|
|
2048
2092
|
return null;
|
|
2049
2093
|
}
|
|
2050
|
-
const otherPrimary =
|
|
2051
|
-
const otherGeometry = otherPrimary &&
|
|
2094
|
+
const otherPrimary = chunkWZA3DJJH_cjs.findOwnerNode(svg, otherId, chunkWZA3DJJH_cjs.isPrimary);
|
|
2095
|
+
const otherGeometry = otherPrimary && chunkWZA3DJJH_cjs.isometricGeometryOf(otherPrimary);
|
|
2052
2096
|
if (!otherGeometry?.bounds) {
|
|
2053
2097
|
return null;
|
|
2054
2098
|
}
|
|
@@ -2059,7 +2103,7 @@ function resolveOtherFacePoint(svg, path, canvasObjectId) {
|
|
|
2059
2103
|
height: otherGeometry.height,
|
|
2060
2104
|
depth: otherGeometry.depth
|
|
2061
2105
|
};
|
|
2062
|
-
return { otherPoint:
|
|
2106
|
+
return { otherPoint: chunkUHKFJBY5_cjs.isometricFaceCenter(otherObject, otherFace), draggedIsFrom, face };
|
|
2063
2107
|
}
|
|
2064
2108
|
function findLiveFaceLinks(svg, canvasObjectId) {
|
|
2065
2109
|
const escapedId = CSS.escape(canvasObjectId);
|
|
@@ -2078,7 +2122,7 @@ function findLiveFaceLinks(svg, canvasObjectId) {
|
|
|
2078
2122
|
|
|
2079
2123
|
// src/runtime/interaction/linkPreview/faceUpdate.ts
|
|
2080
2124
|
function updateLiveFaceLink(link, liveObject) {
|
|
2081
|
-
const draggedPoint =
|
|
2125
|
+
const draggedPoint = chunkUHKFJBY5_cjs.isometricFaceCenter(liveObject, link.face);
|
|
2082
2126
|
const from = link.draggedIsFrom ? draggedPoint : link.otherPoint;
|
|
2083
2127
|
const to = link.draggedIsFrom ? link.otherPoint : draggedPoint;
|
|
2084
2128
|
link.path.setAttribute("d", `M ${from.x} ${from.y} L ${to.x} ${to.y}`);
|
|
@@ -2102,7 +2146,7 @@ function updateLabelGap(link, points) {
|
|
|
2102
2146
|
if (!link.labelGapSize) {
|
|
2103
2147
|
return;
|
|
2104
2148
|
}
|
|
2105
|
-
const gap =
|
|
2149
|
+
const gap = chunkUHKFJBY5_cjs.labelGapDash(points, link.pathType, link.labelGapSize.width, link.labelGapSize.height);
|
|
2106
2150
|
if (gap) {
|
|
2107
2151
|
link.path.setAttribute("stroke-dasharray", `${gap.dashBefore} ${gap.gapLength} 1000000`);
|
|
2108
2152
|
} else {
|
|
@@ -2148,11 +2192,11 @@ function readIsometricSnapStep(svg) {
|
|
|
2148
2192
|
return step > 0 ? step : null;
|
|
2149
2193
|
}
|
|
2150
2194
|
function nearestIsometricLatticePoint(point, step) {
|
|
2151
|
-
const u = point.x / (
|
|
2152
|
-
const v = point.y / (
|
|
2195
|
+
const u = point.x / (chunkUHKFJBY5_cjs.AXIS_COS * step);
|
|
2196
|
+
const v = point.y / (chunkUHKFJBY5_cjs.AXIS_SIN * step);
|
|
2153
2197
|
const i = Math.round((u + v) / 2);
|
|
2154
2198
|
const j = Math.round((u - v) / 2);
|
|
2155
|
-
return { x: (i + j) *
|
|
2199
|
+
return { x: (i + j) * chunkUHKFJBY5_cjs.AXIS_COS * step, y: (i - j) * chunkUHKFJBY5_cjs.AXIS_SIN * step };
|
|
2156
2200
|
}
|
|
2157
2201
|
function snapToStep(value, step, min) {
|
|
2158
2202
|
return Math.max(min, Math.round(value / step) * step);
|
|
@@ -2165,21 +2209,21 @@ var LABEL_FONT_SIZE = 12;
|
|
|
2165
2209
|
var LABEL_LINE_HEIGHT = 1.2;
|
|
2166
2210
|
var LABEL_BASELINE_OFFSET = -LABEL_GAP - LABEL_HEIGHT + (LABEL_HEIGHT - LABEL_FONT_SIZE * LABEL_LINE_HEIGHT) / 2 + LABEL_FONT_SIZE;
|
|
2167
2211
|
function applyIsometricAxisPreview(nodes, object, cornerRadius, overlay, svg) {
|
|
2168
|
-
const faces =
|
|
2169
|
-
nodes.top?.setAttribute("d",
|
|
2170
|
-
nodes.front?.setAttribute("d",
|
|
2171
|
-
nodes.side?.setAttribute("d",
|
|
2212
|
+
const faces = chunkUHKFJBY5_cjs.isometricFaces(object);
|
|
2213
|
+
nodes.top?.setAttribute("d", chunkUHKFJBY5_cjs.roundedPolygonPath(faces.top, 0));
|
|
2214
|
+
nodes.front?.setAttribute("d", chunkUHKFJBY5_cjs.roundedPolygonPath(faces.front, 0));
|
|
2215
|
+
nodes.side?.setAttribute("d", chunkUHKFJBY5_cjs.roundedPolygonPath(faces.right, 0));
|
|
2172
2216
|
const silhouette = [faces.top[0], faces.top[1], faces.right[2], faces.front[2], faces.front[3], faces.top[3]];
|
|
2173
|
-
const hullPath =
|
|
2217
|
+
const hullPath = chunkUHKFJBY5_cjs.roundedPolygonPath(silhouette, cornerRadius);
|
|
2174
2218
|
nodes.hull?.setAttribute("d", hullPath);
|
|
2175
2219
|
if (overlay.halo) {
|
|
2176
|
-
|
|
2220
|
+
chunkWZA3DJJH_cjs.updateHalo(overlay.halo, hullPath);
|
|
2177
2221
|
}
|
|
2178
|
-
const placements =
|
|
2222
|
+
const placements = chunkWZA3DJJH_cjs.axisArrowPlacements(object);
|
|
2179
2223
|
Object.keys(placements).forEach((axis) => {
|
|
2180
2224
|
const group = overlay.arrows[axis];
|
|
2181
2225
|
if (group) {
|
|
2182
|
-
|
|
2226
|
+
chunkWZA3DJJH_cjs.updateAxisArrowGroup(group, placements[axis].origin, placements[axis].direction, svg);
|
|
2183
2227
|
}
|
|
2184
2228
|
});
|
|
2185
2229
|
nodes.seams?.setAttribute(
|
|
@@ -2197,9 +2241,9 @@ function applyIsometricAxisPreview(nodes, object, cornerRadius, overlay, svg) {
|
|
|
2197
2241
|
x: footprintCenter.x + (point.x - footprintCenter.x) * shadowSpread,
|
|
2198
2242
|
y: footprintCenter.y + (point.y - footprintCenter.y) * shadowSpread
|
|
2199
2243
|
}));
|
|
2200
|
-
nodes.groundShadow.setAttribute("d",
|
|
2244
|
+
nodes.groundShadow.setAttribute("d", chunkUHKFJBY5_cjs.roundedPolygonPath(footprint, 0));
|
|
2201
2245
|
}
|
|
2202
|
-
const anchor =
|
|
2246
|
+
const anchor = chunkUHKFJBY5_cjs.isometricTopFaceCenter(object);
|
|
2203
2247
|
if (nodes.labelGuide) {
|
|
2204
2248
|
nodes.labelGuide.setAttribute("d", `M ${anchor.x} ${anchor.y - LABEL_GAP} L ${anchor.x} ${anchor.y}`);
|
|
2205
2249
|
}
|
|
@@ -2215,7 +2259,7 @@ function applyIsometricAxisPreview(nodes, object, cornerRadius, overlay, svg) {
|
|
|
2215
2259
|
// src/runtime/interaction/isometricAxisResize/state.ts
|
|
2216
2260
|
var AXES = ["width", "height", "depth"];
|
|
2217
2261
|
function collectNodes(svg, ownerId) {
|
|
2218
|
-
const all =
|
|
2262
|
+
const all = chunkWZA3DJJH_cjs.findAllOwnerNodes(svg, ownerId);
|
|
2219
2263
|
const bySuffix = (suffix) => all.find((el2) => el2.id.endsWith(suffix)) ?? null;
|
|
2220
2264
|
return {
|
|
2221
2265
|
top: bySuffix("-top"),
|
|
@@ -2243,14 +2287,14 @@ function findResizeHandle(event) {
|
|
|
2243
2287
|
return { captureTarget, axis: handleAttr.slice(4), overlay, ownerId };
|
|
2244
2288
|
}
|
|
2245
2289
|
function overlayPartsOf(overlay) {
|
|
2246
|
-
const overlayHalo = overlay.querySelector(`[${
|
|
2290
|
+
const overlayHalo = overlay.querySelector(`[${chunkWZA3DJJH_cjs.ISO_HALO_ATTR}]`) ?? null;
|
|
2247
2291
|
const overlayArrows = Object.fromEntries(
|
|
2248
2292
|
AXES.map((axis) => [
|
|
2249
2293
|
axis,
|
|
2250
2294
|
overlay.querySelector(`[data-sf-resize-handle="iso-${axis}"]`) ?? null
|
|
2251
2295
|
])
|
|
2252
2296
|
);
|
|
2253
|
-
const overlayDuplicateBubbles = overlay.querySelector(`[${
|
|
2297
|
+
const overlayDuplicateBubbles = overlay.querySelector(`[${chunkWZA3DJJH_cjs.ISO_DUPLICATE_BUBBLES_ATTR}]`) ?? null;
|
|
2254
2298
|
if (overlayDuplicateBubbles) {
|
|
2255
2299
|
overlayDuplicateBubbles.style.display = "none";
|
|
2256
2300
|
}
|
|
@@ -2262,16 +2306,16 @@ function createIsometricAxisDragState(svg, event) {
|
|
|
2262
2306
|
return null;
|
|
2263
2307
|
}
|
|
2264
2308
|
const { captureTarget, axis, overlay, ownerId } = handle;
|
|
2265
|
-
const primary =
|
|
2266
|
-
const owner = primary &&
|
|
2309
|
+
const primary = chunkWZA3DJJH_cjs.findOwnerNode(svg, ownerId, chunkWZA3DJJH_cjs.isPrimary);
|
|
2310
|
+
const owner = primary && chunkWZA3DJJH_cjs.resolveOwner(primary);
|
|
2267
2311
|
if (!primary || owner?.role !== "isometric") {
|
|
2268
2312
|
return null;
|
|
2269
2313
|
}
|
|
2270
|
-
const startUser =
|
|
2314
|
+
const startUser = chunkWZA3DJJH_cjs.pointerUserPoint(svg, event);
|
|
2271
2315
|
if (!startUser) {
|
|
2272
2316
|
return null;
|
|
2273
2317
|
}
|
|
2274
|
-
const geometry =
|
|
2318
|
+
const geometry = chunkWZA3DJJH_cjs.isometricGeometryOf(primary);
|
|
2275
2319
|
const bounds = geometry?.bounds ?? primary.getBBox();
|
|
2276
2320
|
const nodes = collectNodes(svg, ownerId);
|
|
2277
2321
|
[nodes.top, nodes.front, nodes.side].forEach((node) => {
|
|
@@ -2291,7 +2335,7 @@ function createIsometricAxisDragState(svg, event) {
|
|
|
2291
2335
|
pointerId: event.pointerId,
|
|
2292
2336
|
startUser,
|
|
2293
2337
|
start,
|
|
2294
|
-
cornerRadius: geometry?.cornerRadius ?? Number(primary.getAttribute(
|
|
2338
|
+
cornerRadius: geometry?.cornerRadius ?? Number(primary.getAttribute(chunkUHKFJBY5_cjs.CORNER_RADIUS_ATTR)) ?? 0,
|
|
2295
2339
|
nodes,
|
|
2296
2340
|
...overlayPartsOf(overlay),
|
|
2297
2341
|
liveFaceLinks: findLiveFaceLinks(svg, ownerId),
|
|
@@ -2308,15 +2352,15 @@ function nextGeometry(drag, point, step) {
|
|
|
2308
2352
|
const dx = point.x - drag.startUser.x;
|
|
2309
2353
|
const dy = point.y - drag.startUser.y;
|
|
2310
2354
|
if (axis === "width") {
|
|
2311
|
-
const delta2 = dx *
|
|
2355
|
+
const delta2 = dx * chunkUHKFJBY5_cjs.AXIS_COS + dy * chunkUHKFJBY5_cjs.AXIS_SIN;
|
|
2312
2356
|
return { ...start, width: length(start.width + delta2, MIN_SIZE) };
|
|
2313
2357
|
}
|
|
2314
2358
|
if (axis === "height") {
|
|
2315
2359
|
return { ...start, height: length(start.height + dy, MIN_SIZE) };
|
|
2316
2360
|
}
|
|
2317
|
-
const delta = -dx *
|
|
2361
|
+
const delta = -dx * chunkUHKFJBY5_cjs.AXIS_COS + dy * chunkUHKFJBY5_cjs.AXIS_SIN;
|
|
2318
2362
|
const depth = length(start.depth + delta, 0);
|
|
2319
|
-
const x = start.x + (start.depth - depth) *
|
|
2363
|
+
const x = start.x + (start.depth - depth) * chunkUHKFJBY5_cjs.AXIS_COS;
|
|
2320
2364
|
return { ...start, x, depth };
|
|
2321
2365
|
}
|
|
2322
2366
|
var IsometricAxisResizeSession = class {
|
|
@@ -2328,7 +2372,7 @@ var IsometricAxisResizeSession = class {
|
|
|
2328
2372
|
this.#emitter = emitter;
|
|
2329
2373
|
}
|
|
2330
2374
|
pointerDown = (event) => {
|
|
2331
|
-
if (event.button !== 0 || this.#drag ||
|
|
2375
|
+
if (event.button !== 0 || this.#drag || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
2332
2376
|
return;
|
|
2333
2377
|
}
|
|
2334
2378
|
this.#drag = createIsometricAxisDragState(this.#svg, event);
|
|
@@ -2338,7 +2382,7 @@ var IsometricAxisResizeSession = class {
|
|
|
2338
2382
|
if (!drag || event.pointerId !== drag.pointerId) {
|
|
2339
2383
|
return;
|
|
2340
2384
|
}
|
|
2341
|
-
const point =
|
|
2385
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
2342
2386
|
if (!point) {
|
|
2343
2387
|
return;
|
|
2344
2388
|
}
|
|
@@ -2436,7 +2480,7 @@ function findLabelMark(event) {
|
|
|
2436
2480
|
);
|
|
2437
2481
|
}
|
|
2438
2482
|
function isLabelPointer(event) {
|
|
2439
|
-
return event.button === 0 && !
|
|
2483
|
+
return event.button === 0 && !chunkWZA3DJJH_cjs.isCameraGesture(event);
|
|
2440
2484
|
}
|
|
2441
2485
|
function findHull(svg, ownerId) {
|
|
2442
2486
|
return svg.querySelector(`[data-sf-id="${CSS.escape(ownerId)}"][data-sf-primary="true"]`);
|
|
@@ -2452,21 +2496,21 @@ function resolveIsometricLabelDrag(svg, event) {
|
|
|
2452
2496
|
if (!clicked) {
|
|
2453
2497
|
return null;
|
|
2454
2498
|
}
|
|
2455
|
-
const owner =
|
|
2499
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(clicked);
|
|
2456
2500
|
if (owner?.role !== "isometric") {
|
|
2457
2501
|
return null;
|
|
2458
2502
|
}
|
|
2459
2503
|
const hull = findHull(svg, owner.id);
|
|
2460
|
-
const geometry = hull ?
|
|
2504
|
+
const geometry = hull ? chunkWZA3DJJH_cjs.isometricGeometryOf(hull) : null;
|
|
2461
2505
|
if (!geometry?.bounds) {
|
|
2462
2506
|
return null;
|
|
2463
2507
|
}
|
|
2464
|
-
const start =
|
|
2508
|
+
const start = chunkWZA3DJJH_cjs.pointerUserPoint(svg, event);
|
|
2465
2509
|
if (!start) {
|
|
2466
2510
|
return null;
|
|
2467
2511
|
}
|
|
2468
2512
|
const anchorX = geometry.bounds.x + geometry.bounds.width / 2;
|
|
2469
|
-
const anchorY = geometry.bounds.y + geometry.bounds.width * (
|
|
2513
|
+
const anchorY = geometry.bounds.y + geometry.bounds.width * (chunkUHKFJBY5_cjs.AXIS_SIN / chunkUHKFJBY5_cjs.AXIS_COS) / 2;
|
|
2470
2514
|
const text = findBySuffix(svg, `-${owner.id}-label`);
|
|
2471
2515
|
if (!text) {
|
|
2472
2516
|
return null;
|
|
@@ -2518,7 +2562,7 @@ var IsometricLabelDragSession = class {
|
|
|
2518
2562
|
if (!this.#drag || event.pointerId !== this.#drag.pointerId) {
|
|
2519
2563
|
return;
|
|
2520
2564
|
}
|
|
2521
|
-
const point =
|
|
2565
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
2522
2566
|
if (!point) {
|
|
2523
2567
|
return;
|
|
2524
2568
|
}
|
|
@@ -2593,7 +2637,7 @@ function isIsometricDirection(value) {
|
|
|
2593
2637
|
function bindIsometricQuickDuplicate(viewer, emitter) {
|
|
2594
2638
|
const svg = viewer.svg;
|
|
2595
2639
|
const onPointerDown = (event) => {
|
|
2596
|
-
if (event.button !== 0 ||
|
|
2640
|
+
if (event.button !== 0 || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
2597
2641
|
return;
|
|
2598
2642
|
}
|
|
2599
2643
|
const bubble = event.target?.closest("[data-sf-quick-duplicate]");
|
|
@@ -2604,7 +2648,7 @@ function bindIsometricQuickDuplicate(viewer, emitter) {
|
|
|
2604
2648
|
const overlay = bubble.closest("[data-sf-selection-overlay]");
|
|
2605
2649
|
const sourceId = overlay?.getAttribute("data-sf-selection-overlay");
|
|
2606
2650
|
const primary = sourceId ? svg.querySelector(`[data-sf-id="${CSS.escape(sourceId)}"][data-sf-primary="true"]`) : null;
|
|
2607
|
-
const owner = primary &&
|
|
2651
|
+
const owner = primary && chunkWZA3DJJH_cjs.resolveOwner(primary);
|
|
2608
2652
|
if (!owner) {
|
|
2609
2653
|
return;
|
|
2610
2654
|
}
|
|
@@ -2659,7 +2703,7 @@ function updateEndpointPreview(drag, draggedPoint, draggedSide) {
|
|
|
2659
2703
|
const toPoint = drag.end === "to" ? draggedPoint : drag.fixedPoint;
|
|
2660
2704
|
const fromSide = drag.end === "from" ? draggedSide : drag.fixedSide;
|
|
2661
2705
|
const toSide = drag.end === "to" ? draggedSide : drag.fixedSide;
|
|
2662
|
-
const { points, segments } =
|
|
2706
|
+
const { points, segments } = chunkUHKFJBY5_cjs.calculateLinkRoute(previewLink(fromSide, toSide), fromPoint, toPoint, drag.pathType);
|
|
2663
2707
|
drag.path.setAttribute("d", previewPathData(points, segments, drag.pathType, drag.strokeWidth));
|
|
2664
2708
|
}
|
|
2665
2709
|
|
|
@@ -2681,7 +2725,7 @@ var LinkGhost = class {
|
|
|
2681
2725
|
constructor(svg, path) {
|
|
2682
2726
|
this.#svg = svg;
|
|
2683
2727
|
this.#path = path;
|
|
2684
|
-
this.#anchors = svg.ownerDocument.createElementNS(
|
|
2728
|
+
this.#anchors = svg.ownerDocument.createElementNS(chunkWZA3DJJH_cjs.SVG_NAMESPACE, "g");
|
|
2685
2729
|
this.#anchors.setAttribute("data-sf-link-target", "");
|
|
2686
2730
|
this.#anchors.setAttribute("pointer-events", "none");
|
|
2687
2731
|
}
|
|
@@ -2691,7 +2735,7 @@ var LinkGhost = class {
|
|
|
2691
2735
|
for (const name of RESTORED_ATTRIBUTES) {
|
|
2692
2736
|
this.#saved.set(name, this.#path.getAttribute(name));
|
|
2693
2737
|
}
|
|
2694
|
-
const dash = GHOST_DASH_PX /
|
|
2738
|
+
const dash = GHOST_DASH_PX / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg);
|
|
2695
2739
|
this.#path.setAttribute("stroke-dasharray", `${dash} ${dash}`);
|
|
2696
2740
|
this.#path.setAttribute("stroke-linecap", "round");
|
|
2697
2741
|
this.#path.setAttribute("opacity", GHOST_OPACITY);
|
|
@@ -2720,7 +2764,7 @@ var LinkGhost = class {
|
|
|
2720
2764
|
if (!bounds) {
|
|
2721
2765
|
return;
|
|
2722
2766
|
}
|
|
2723
|
-
const unit = 1 /
|
|
2767
|
+
const unit = 1 / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg);
|
|
2724
2768
|
const centers = [
|
|
2725
2769
|
[bounds.x + bounds.width / 2, bounds.y],
|
|
2726
2770
|
[bounds.x + bounds.width, bounds.y + bounds.height / 2],
|
|
@@ -2728,7 +2772,7 @@ var LinkGhost = class {
|
|
|
2728
2772
|
[bounds.x, bounds.y + bounds.height / 2]
|
|
2729
2773
|
];
|
|
2730
2774
|
for (const [cx, cy] of centers) {
|
|
2731
|
-
const dot = this.#svg.ownerDocument.createElementNS(
|
|
2775
|
+
const dot = this.#svg.ownerDocument.createElementNS(chunkWZA3DJJH_cjs.SVG_NAMESPACE, "circle");
|
|
2732
2776
|
dot.setAttribute("cx", String(cx));
|
|
2733
2777
|
dot.setAttribute("cy", String(cy));
|
|
2734
2778
|
dot.setAttribute("r", String(ANCHOR_RADIUS_PX * unit));
|
|
@@ -2748,7 +2792,7 @@ function collectEndpointCandidates(svg) {
|
|
|
2748
2792
|
if (element2.getAttribute("data-sf-role") === "link") {
|
|
2749
2793
|
continue;
|
|
2750
2794
|
}
|
|
2751
|
-
const owner =
|
|
2795
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(element2);
|
|
2752
2796
|
if (owner) {
|
|
2753
2797
|
candidates.push({ owner, bounds: element2.getBBox() });
|
|
2754
2798
|
}
|
|
@@ -2825,7 +2869,7 @@ function inferFixedSide(svg, reference, fixedPrimary) {
|
|
|
2825
2869
|
if (reference.declaredSide) {
|
|
2826
2870
|
return reference.declaredSide;
|
|
2827
2871
|
}
|
|
2828
|
-
const draggedPrimary = reference.draggedId ?
|
|
2872
|
+
const draggedPrimary = reference.draggedId ? chunkWZA3DJJH_cjs.findOwnerNode(svg, reference.draggedId, chunkWZA3DJJH_cjs.isPrimary) : null;
|
|
2829
2873
|
if (!draggedPrimary) {
|
|
2830
2874
|
return "right";
|
|
2831
2875
|
}
|
|
@@ -2833,7 +2877,7 @@ function inferFixedSide(svg, reference, fixedPrimary) {
|
|
|
2833
2877
|
}
|
|
2834
2878
|
function resolveFixedEndpoint(svg, path, draggedEnd) {
|
|
2835
2879
|
const reference = fixedEndpointReference(path, draggedEnd);
|
|
2836
|
-
const fixedPrimary = reference.fixedId ?
|
|
2880
|
+
const fixedPrimary = reference.fixedId ? chunkWZA3DJJH_cjs.findOwnerNode(svg, reference.fixedId, chunkWZA3DJJH_cjs.isPrimary) : null;
|
|
2837
2881
|
if (!fixedPrimary) {
|
|
2838
2882
|
return null;
|
|
2839
2883
|
}
|
|
@@ -2852,8 +2896,8 @@ function selectLinkEndpoint(svg, event) {
|
|
|
2852
2896
|
if (!target || !end || !linkId) {
|
|
2853
2897
|
return null;
|
|
2854
2898
|
}
|
|
2855
|
-
const path =
|
|
2856
|
-
const linkOwner = path &&
|
|
2899
|
+
const path = chunkWZA3DJJH_cjs.findOwnerNode(svg, linkId, chunkWZA3DJJH_cjs.isPrimary);
|
|
2900
|
+
const linkOwner = path && chunkWZA3DJJH_cjs.resolveOwner(path);
|
|
2857
2901
|
if (!path || !linkOwner) {
|
|
2858
2902
|
return null;
|
|
2859
2903
|
}
|
|
@@ -2895,8 +2939,8 @@ function nearestPort(bounds, point) {
|
|
|
2895
2939
|
let nearest = { side: "right", offset: 0.5 };
|
|
2896
2940
|
let nearestDistance = Infinity;
|
|
2897
2941
|
for (const side of SIDES2) {
|
|
2898
|
-
const offset = Math.max(0, Math.min(1,
|
|
2899
|
-
const candidate =
|
|
2942
|
+
const offset = Math.max(0, Math.min(1, chunkUHKFJBY5_cjs.relativeOffsetOnRectangleSide(bounds, side, point)));
|
|
2943
|
+
const candidate = chunkUHKFJBY5_cjs.pointAtPort(bounds, { side, offset });
|
|
2900
2944
|
const distance = Math.hypot(candidate.x - point.x, candidate.y - point.y);
|
|
2901
2945
|
if (distance < nearestDistance) {
|
|
2902
2946
|
nearestDistance = distance;
|
|
@@ -2955,7 +2999,7 @@ function resolveLinkTarget(candidates, fixedPoint, point, unitsPerPx) {
|
|
|
2955
2999
|
}
|
|
2956
3000
|
const port = snapPort(candidate.bounds, point, unitsPerPx);
|
|
2957
3001
|
return {
|
|
2958
|
-
point:
|
|
3002
|
+
point: chunkUHKFJBY5_cjs.pointAtPort(candidate.bounds, port),
|
|
2959
3003
|
side: port.side,
|
|
2960
3004
|
hit: { owner: candidate.owner, side: port.side, offset: port.offset },
|
|
2961
3005
|
bounds: candidate.bounds
|
|
@@ -2979,7 +3023,7 @@ var LinkEndpointSession = class {
|
|
|
2979
3023
|
this.#emitter = emitter;
|
|
2980
3024
|
}
|
|
2981
3025
|
pointerDown = (event) => {
|
|
2982
|
-
if (event.button !== 0 || this.#drag ||
|
|
3026
|
+
if (event.button !== 0 || this.#drag || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
2983
3027
|
return;
|
|
2984
3028
|
}
|
|
2985
3029
|
this.#drag = createLinkEndpointDragState(this.#svg, event);
|
|
@@ -2993,7 +3037,7 @@ var LinkEndpointSession = class {
|
|
|
2993
3037
|
return;
|
|
2994
3038
|
}
|
|
2995
3039
|
drag.moved = true;
|
|
2996
|
-
const target = resolveEndpointTarget(drag, endpointPointerPosition(this.#svg, event), 1 /
|
|
3040
|
+
const target = resolveEndpointTarget(drag, endpointPointerPosition(this.#svg, event), 1 / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg));
|
|
2997
3041
|
updateEndpointPreview(drag, target.point, target.side);
|
|
2998
3042
|
drag.ghost.show(target.hit !== null, target.bounds);
|
|
2999
3043
|
};
|
|
@@ -3107,7 +3151,7 @@ var LinkSegmentSession = class {
|
|
|
3107
3151
|
this.#emitter = emitter;
|
|
3108
3152
|
}
|
|
3109
3153
|
pointerDown = (event) => {
|
|
3110
|
-
if (event.button !== 0 || this.#drag ||
|
|
3154
|
+
if (event.button !== 0 || this.#drag || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
3111
3155
|
return;
|
|
3112
3156
|
}
|
|
3113
3157
|
const target = event.target;
|
|
@@ -3117,12 +3161,12 @@ var LinkSegmentSession = class {
|
|
|
3117
3161
|
if (!handle || !overlay || !linkId) {
|
|
3118
3162
|
return;
|
|
3119
3163
|
}
|
|
3120
|
-
const path =
|
|
3121
|
-
const owner = path &&
|
|
3164
|
+
const path = chunkWZA3DJJH_cjs.findOwnerNode(this.#svg, linkId, chunkWZA3DJJH_cjs.isPrimary);
|
|
3165
|
+
const owner = path && chunkWZA3DJJH_cjs.resolveOwner(path);
|
|
3122
3166
|
const index = Number(handle.getAttribute("data-sf-link-segment"));
|
|
3123
3167
|
const segments = path ? parseSegments(path) : [];
|
|
3124
3168
|
const segment = segments[index];
|
|
3125
|
-
const point =
|
|
3169
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
3126
3170
|
if (!path || !owner || !segment || !point) {
|
|
3127
3171
|
return;
|
|
3128
3172
|
}
|
|
@@ -3130,7 +3174,7 @@ var LinkSegmentSession = class {
|
|
|
3130
3174
|
const guide = document.createElementNS(SVG_NAMESPACE2, "line");
|
|
3131
3175
|
guide.setAttribute("stroke", GUIDE_COLOR);
|
|
3132
3176
|
guide.setAttribute("stroke-dasharray", "4 4");
|
|
3133
|
-
guide.setAttribute("stroke-width", String(1 /
|
|
3177
|
+
guide.setAttribute("stroke-width", String(1 / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg)));
|
|
3134
3178
|
guide.setAttribute("visibility", "hidden");
|
|
3135
3179
|
overlay.appendChild(guide);
|
|
3136
3180
|
handle.setPointerCapture?.(event.pointerId);
|
|
@@ -3165,7 +3209,7 @@ var LinkSegmentSession = class {
|
|
|
3165
3209
|
return;
|
|
3166
3210
|
}
|
|
3167
3211
|
drag.moved = true;
|
|
3168
|
-
const point =
|
|
3212
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
3169
3213
|
if (!point) {
|
|
3170
3214
|
return;
|
|
3171
3215
|
}
|
|
@@ -3191,8 +3235,8 @@ var LinkSegmentSession = class {
|
|
|
3191
3235
|
doubleClick = (event) => {
|
|
3192
3236
|
const handle = event.target?.closest("[data-sf-link-segment]");
|
|
3193
3237
|
const linkId = handle?.closest("[data-sf-selection-overlay]")?.getAttribute("data-sf-selection-overlay");
|
|
3194
|
-
const path = linkId ?
|
|
3195
|
-
const owner = path &&
|
|
3238
|
+
const path = linkId ? chunkWZA3DJJH_cjs.findOwnerNode(this.#svg, linkId, chunkWZA3DJJH_cjs.isPrimary) : null;
|
|
3239
|
+
const owner = path && chunkWZA3DJJH_cjs.resolveOwner(path);
|
|
3196
3240
|
if (!handle || !owner) {
|
|
3197
3241
|
return;
|
|
3198
3242
|
}
|
|
@@ -3215,7 +3259,7 @@ var LinkSegmentSession = class {
|
|
|
3215
3259
|
if (isSnapDisabled(this.#svg)) {
|
|
3216
3260
|
return { value: raw, snapped: null };
|
|
3217
3261
|
}
|
|
3218
|
-
const threshold = SNAP_PX /
|
|
3262
|
+
const threshold = SNAP_PX / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg);
|
|
3219
3263
|
let best = null;
|
|
3220
3264
|
for (const candidate of [drag.base, ...drag.candidates]) {
|
|
3221
3265
|
const closer = best === null || Math.abs(candidate - raw) < Math.abs(best - raw);
|
|
@@ -3228,7 +3272,7 @@ var LinkSegmentSession = class {
|
|
|
3228
3272
|
#preview(drag, snapped) {
|
|
3229
3273
|
const next = movedSegments(drag, drag.value);
|
|
3230
3274
|
const strokeWidth = Number(drag.path.getAttribute("stroke-width")) || 2;
|
|
3231
|
-
const data =
|
|
3275
|
+
const data = chunkUHKFJBY5_cjs.roundedOrthogonalPathData(pathSegments(next), Math.max(16, strokeWidth * 4));
|
|
3232
3276
|
drag.path.setAttribute("d", data);
|
|
3233
3277
|
drag.overlay.querySelector("path")?.setAttribute("d", data);
|
|
3234
3278
|
const segment = next[drag.index];
|
|
@@ -3402,8 +3446,8 @@ function nearestCandidates(bounds, candidates, limit = 50) {
|
|
|
3402
3446
|
|
|
3403
3447
|
// src/runtime/interaction/snapping/isometricDiagonal.ts
|
|
3404
3448
|
var AXES2 = [
|
|
3405
|
-
{ x:
|
|
3406
|
-
{ x: -
|
|
3449
|
+
{ x: chunkUHKFJBY5_cjs.AXIS_COS, y: chunkUHKFJBY5_cjs.AXIS_SIN },
|
|
3450
|
+
{ x: -chunkUHKFJBY5_cjs.AXIS_COS, y: chunkUHKFJBY5_cjs.AXIS_SIN }
|
|
3407
3451
|
];
|
|
3408
3452
|
var GUIDE_OVERHANG = 40;
|
|
3409
3453
|
function snapIsometricDiagonal(apex, rawDx, rawDy, candidates, threshold) {
|
|
@@ -3471,13 +3515,13 @@ function isometricApexOf(svg, drag, declared = false) {
|
|
|
3471
3515
|
if (lead.owner.role !== "isometric") {
|
|
3472
3516
|
return null;
|
|
3473
3517
|
}
|
|
3474
|
-
const primary =
|
|
3475
|
-
const geometry = primary &&
|
|
3518
|
+
const primary = chunkWZA3DJJH_cjs.findOwnerNode(svg, lead.owner.id, chunkWZA3DJJH_cjs.isPrimary);
|
|
3519
|
+
const geometry = primary && chunkWZA3DJJH_cjs.isometricGeometryOf(primary);
|
|
3476
3520
|
if (!geometry) {
|
|
3477
3521
|
return null;
|
|
3478
3522
|
}
|
|
3479
3523
|
const frame = declared && geometry.bounds ? geometry.bounds : lead.draggedBounds;
|
|
3480
|
-
return { x: frame.x + geometry.depth *
|
|
3524
|
+
return { x: frame.x + geometry.depth * chunkUHKFJBY5_cjs.AXIS_COS, y: frame.y };
|
|
3481
3525
|
}
|
|
3482
3526
|
function snapIsometricGrid(svg, drag, rawDx, rawDy) {
|
|
3483
3527
|
const step = readIsometricSnapStep(svg);
|
|
@@ -3494,8 +3538,8 @@ function snapIsometricMove(svg, drag, rawDx, rawDy) {
|
|
|
3494
3538
|
return null;
|
|
3495
3539
|
}
|
|
3496
3540
|
const excludedIds = new Set(drag.canvasObjects.map((canvasObject) => canvasObject.owner.id));
|
|
3497
|
-
const candidates =
|
|
3498
|
-
const snap = snapIsometricDiagonal(apex, rawDx, rawDy, candidates, snapDistancePx(svg) /
|
|
3541
|
+
const candidates = chunkWZA3DJJH_cjs.findIsometricApexCandidates(svg, excludedIds);
|
|
3542
|
+
const snap = snapIsometricDiagonal(apex, rawDx, rawDy, candidates, snapDistancePx(svg) / chunkWZA3DJJH_cjs.pxPerUnit(svg));
|
|
3499
3543
|
return snap ? { dx: snap.dx, dy: snap.dy, guides: [snap.guide] } : null;
|
|
3500
3544
|
}
|
|
3501
3545
|
function snapMove(svg, drag, rawDx, rawDy) {
|
|
@@ -3512,9 +3556,9 @@ function snapMove(svg, drag, rawDx, rawDy) {
|
|
|
3512
3556
|
}
|
|
3513
3557
|
const leadBounds = offsetBounds(drag.canvasObjects[0].draggedBounds, rawDx, rawDy);
|
|
3514
3558
|
const excludedIds = new Set(drag.canvasObjects.map((canvasObject) => canvasObject.owner.id));
|
|
3515
|
-
const candidates = nearestCandidates(leadBounds,
|
|
3559
|
+
const candidates = nearestCandidates(leadBounds, chunkWZA3DJJH_cjs.findSnapCandidateBounds(svg, excludedIds));
|
|
3516
3560
|
const snap = computeSnap(leadBounds, candidates, {
|
|
3517
|
-
threshold: snapDistancePx(svg) /
|
|
3561
|
+
threshold: snapDistancePx(svg) / chunkWZA3DJJH_cjs.pxPerUnit(svg),
|
|
3518
3562
|
activeX: MOVE_ACTIVE_POINTS,
|
|
3519
3563
|
activeY: MOVE_ACTIVE_POINTS,
|
|
3520
3564
|
guideOverhang: GUIDE_OVERHANG2
|
|
@@ -3575,7 +3619,7 @@ function isCompositeOwner(owner) {
|
|
|
3575
3619
|
return owner !== null && owner !== void 0 && COMPOSITE_ROLES.has(owner.role);
|
|
3576
3620
|
}
|
|
3577
3621
|
function hasDerivedHeight(owner) {
|
|
3578
|
-
return owner !== null && owner !== void 0 &&
|
|
3622
|
+
return owner !== null && owner !== void 0 && chunkWZA3DJJH_cjs.DERIVED_HEIGHT_ROLES.has(owner.role);
|
|
3579
3623
|
}
|
|
3580
3624
|
|
|
3581
3625
|
// src/runtime/interaction/move/canvasObjectCapture.ts
|
|
@@ -3596,7 +3640,7 @@ function parentContainerBounds(svg, primary, groupIds) {
|
|
|
3596
3640
|
if (!parentId || groupIds.has(parentId)) {
|
|
3597
3641
|
return void 0;
|
|
3598
3642
|
}
|
|
3599
|
-
const container =
|
|
3643
|
+
const container = chunkWZA3DJJH_cjs.findOwnerNode(svg, parentId, chunkWZA3DJJH_cjs.isPrimary);
|
|
3600
3644
|
if (!container) {
|
|
3601
3645
|
return void 0;
|
|
3602
3646
|
}
|
|
@@ -3604,14 +3648,14 @@ function parentContainerBounds(svg, primary, groupIds) {
|
|
|
3604
3648
|
return { x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height };
|
|
3605
3649
|
}
|
|
3606
3650
|
function captureCanvasObject(svg, owner, groupIds) {
|
|
3607
|
-
const nodes =
|
|
3608
|
-
const primary =
|
|
3651
|
+
const nodes = chunkWZA3DJJH_cjs.findAllOwnerNodes(svg, owner.id);
|
|
3652
|
+
const primary = chunkWZA3DJJH_cjs.findOwnerNode(svg, owner.id, chunkWZA3DJJH_cjs.isPrimary);
|
|
3609
3653
|
if (!nodes.length || !primary) {
|
|
3610
3654
|
return null;
|
|
3611
3655
|
}
|
|
3612
3656
|
const overlays = [...svg.querySelectorAll(`[data-sf-selection-overlay="${CSS.escape(owner.id)}"]`)];
|
|
3613
3657
|
const draggedBounds = primary.getBBox();
|
|
3614
|
-
const isometricGeometry = owner.role === "isometric" ?
|
|
3658
|
+
const isometricGeometry = owner.role === "isometric" ? chunkWZA3DJJH_cjs.isometricGeometryOf(primary) : null;
|
|
3615
3659
|
const isometricSize = isometricGeometry ? { width: isometricGeometry.width, height: isometricGeometry.height, depth: isometricGeometry.depth } : void 0;
|
|
3616
3660
|
return {
|
|
3617
3661
|
owner,
|
|
@@ -3653,7 +3697,7 @@ function captureInternalLinks(svg, groupIds) {
|
|
|
3653
3697
|
if (!linkId || !belongsToMoveGroup(path, groupIds)) {
|
|
3654
3698
|
continue;
|
|
3655
3699
|
}
|
|
3656
|
-
const nodes =
|
|
3700
|
+
const nodes = chunkWZA3DJJH_cjs.findAllOwnerNodes(svg, linkId);
|
|
3657
3701
|
if (nodes.length) {
|
|
3658
3702
|
links.push({ nodes, baseTransforms: nodes.map((node) => node.getAttribute("transform")) });
|
|
3659
3703
|
}
|
|
@@ -3687,7 +3731,7 @@ function containedChildren(viewer, owner) {
|
|
|
3687
3731
|
return [];
|
|
3688
3732
|
}
|
|
3689
3733
|
const nodes = viewer.svg.querySelectorAll(`[data-sf-parent-frame="${CSS.escape(owner.id)}"]`);
|
|
3690
|
-
return [...nodes].map((node) =>
|
|
3734
|
+
return [...nodes].map((node) => chunkWZA3DJJH_cjs.resolveOwner(node)).filter((ref) => ref !== null);
|
|
3691
3735
|
}
|
|
3692
3736
|
function selectedMoveGroup(viewer, owner) {
|
|
3693
3737
|
const selection = viewer.getSelection();
|
|
@@ -3704,7 +3748,7 @@ function isChartInteractiveMark(target) {
|
|
|
3704
3748
|
}
|
|
3705
3749
|
function createMoveDragState(viewer, event, startUser) {
|
|
3706
3750
|
const target = event.target;
|
|
3707
|
-
const owner =
|
|
3751
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(target);
|
|
3708
3752
|
if (!hasMovableGeometry(owner) || isChartInteractiveMark(target)) {
|
|
3709
3753
|
return null;
|
|
3710
3754
|
}
|
|
@@ -3738,7 +3782,7 @@ var MoveSession = class {
|
|
|
3738
3782
|
this.#emitter = emitter;
|
|
3739
3783
|
}
|
|
3740
3784
|
pointerDown = (event) => {
|
|
3741
|
-
if (event.button !== 0 || this.#drag ||
|
|
3785
|
+
if (event.button !== 0 || this.#drag || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
3742
3786
|
return;
|
|
3743
3787
|
}
|
|
3744
3788
|
this.#drag = createMoveDragState(this.#viewer, event, movePointerPosition(this.#svg, event));
|
|
@@ -3756,7 +3800,7 @@ var MoveSession = class {
|
|
|
3756
3800
|
const delta = snapMove(this.#svg, drag, rawDelta.dx, rawDelta.dy);
|
|
3757
3801
|
const clamped = clampMoveDelta(drag.canvasObjects, delta.dx, delta.dy);
|
|
3758
3802
|
applyMovePreview(drag, clamped.dx, clamped.dy);
|
|
3759
|
-
|
|
3803
|
+
chunkWZA3DJJH_cjs.updateAlignmentGuides(this.#svg, delta.guides, MOVE_GUIDE_COLOR);
|
|
3760
3804
|
};
|
|
3761
3805
|
pointerUp = (event) => {
|
|
3762
3806
|
const drag = this.#drag;
|
|
@@ -3765,7 +3809,7 @@ var MoveSession = class {
|
|
|
3765
3809
|
}
|
|
3766
3810
|
this.#drag = null;
|
|
3767
3811
|
event.target.releasePointerCapture?.(drag.pointerId);
|
|
3768
|
-
|
|
3812
|
+
chunkWZA3DJJH_cjs.clearAlignmentGuides(this.#svg);
|
|
3769
3813
|
emitMoveCompletion(this.#svg, this.#emitter, drag, event);
|
|
3770
3814
|
};
|
|
3771
3815
|
cancel() {
|
|
@@ -3911,9 +3955,9 @@ var START_POINT_RADIUS_PX = 6;
|
|
|
3911
3955
|
var POINT_STROKE_WIDTH_PX = 1.5;
|
|
3912
3956
|
function createPathDrawPreview(svg) {
|
|
3913
3957
|
const document2 = svg.ownerDocument;
|
|
3914
|
-
const group = document2.createElementNS(
|
|
3958
|
+
const group = document2.createElementNS(chunkWZA3DJJH_cjs.SVG_NAMESPACE, "g");
|
|
3915
3959
|
group.setAttribute("pointer-events", "none");
|
|
3916
|
-
const line = document2.createElementNS(
|
|
3960
|
+
const line = document2.createElementNS(chunkWZA3DJJH_cjs.SVG_NAMESPACE, "path");
|
|
3917
3961
|
line.setAttribute("fill", "none");
|
|
3918
3962
|
line.setAttribute("stroke", PREVIEW_COLOR);
|
|
3919
3963
|
line.setAttribute("stroke-linecap", "round");
|
|
@@ -3923,8 +3967,8 @@ function createPathDrawPreview(svg) {
|
|
|
3923
3967
|
}
|
|
3924
3968
|
function pointMarker(svg, point, highlighted) {
|
|
3925
3969
|
const document2 = svg.ownerDocument;
|
|
3926
|
-
const unit = 1 /
|
|
3927
|
-
const circle = document2.createElementNS(
|
|
3970
|
+
const unit = 1 / chunkWZA3DJJH_cjs.pxPerUnit(svg);
|
|
3971
|
+
const circle = document2.createElementNS(chunkWZA3DJJH_cjs.SVG_NAMESPACE, "circle");
|
|
3928
3972
|
circle.setAttribute("cx", String(point.x));
|
|
3929
3973
|
circle.setAttribute("cy", String(point.y));
|
|
3930
3974
|
circle.setAttribute("r", String((highlighted ? START_POINT_RADIUS_PX : POINT_RADIUS_PX) * unit));
|
|
@@ -3938,11 +3982,11 @@ function updatePathDrawPreview(svg, state) {
|
|
|
3938
3982
|
if (!previewLine || !previewGroup) {
|
|
3939
3983
|
return;
|
|
3940
3984
|
}
|
|
3941
|
-
const unit = 1 /
|
|
3985
|
+
const unit = 1 / chunkWZA3DJJH_cjs.pxPerUnit(svg);
|
|
3942
3986
|
previewLine.setAttribute("stroke-width", String(LINE_WIDTH_PX * unit));
|
|
3943
3987
|
previewLine.setAttribute("stroke-dasharray", `${DASH_PX * unit} ${GAP_PX * unit}`);
|
|
3944
3988
|
const live = state.cursor ? [...state.points, state.cursor] : state.points;
|
|
3945
|
-
previewLine.setAttribute("d",
|
|
3989
|
+
previewLine.setAttribute("d", chunkUHKFJBY5_cjs.freeformPathData({ points: live, tension: state.tension, closed: false }));
|
|
3946
3990
|
while (previewGroup.childNodes.length > 1) {
|
|
3947
3991
|
previewGroup.lastChild?.remove();
|
|
3948
3992
|
}
|
|
@@ -4002,12 +4046,12 @@ var PathDrawSession = class {
|
|
|
4002
4046
|
}
|
|
4003
4047
|
}
|
|
4004
4048
|
pointerDown = (event) => {
|
|
4005
|
-
if (!this.#state.active || event.button !== 0 ||
|
|
4049
|
+
if (!this.#state.active || event.button !== 0 || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
4006
4050
|
return;
|
|
4007
4051
|
}
|
|
4008
4052
|
event.stopPropagation();
|
|
4009
4053
|
event.preventDefault();
|
|
4010
|
-
const point =
|
|
4054
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
4011
4055
|
if (!point) {
|
|
4012
4056
|
return;
|
|
4013
4057
|
}
|
|
@@ -4026,14 +4070,14 @@ var PathDrawSession = class {
|
|
|
4026
4070
|
this.#state.cursor = resolved.point;
|
|
4027
4071
|
this.#state.willClose = false;
|
|
4028
4072
|
updatePathDrawPreview(this.#svg, this.#state);
|
|
4029
|
-
|
|
4073
|
+
chunkWZA3DJJH_cjs.clearAlignmentGuides(this.#svg);
|
|
4030
4074
|
};
|
|
4031
4075
|
pointerMove = (event) => {
|
|
4032
4076
|
if (!this.#state.active) {
|
|
4033
4077
|
return;
|
|
4034
4078
|
}
|
|
4035
4079
|
event.stopPropagation();
|
|
4036
|
-
const point =
|
|
4080
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
4037
4081
|
if (!point) {
|
|
4038
4082
|
return;
|
|
4039
4083
|
}
|
|
@@ -4042,9 +4086,9 @@ var PathDrawSession = class {
|
|
|
4042
4086
|
this.#state.willClose = resolved.willClose;
|
|
4043
4087
|
updatePathDrawPreview(this.#svg, this.#state);
|
|
4044
4088
|
if (resolved.guide) {
|
|
4045
|
-
|
|
4089
|
+
chunkWZA3DJJH_cjs.updateAlignmentGuides(this.#svg, [resolved.guide], GUIDE_COLOR2);
|
|
4046
4090
|
} else {
|
|
4047
|
-
|
|
4091
|
+
chunkWZA3DJJH_cjs.clearAlignmentGuides(this.#svg);
|
|
4048
4092
|
}
|
|
4049
4093
|
};
|
|
4050
4094
|
pointerUp = (event) => {
|
|
@@ -4079,10 +4123,10 @@ var PathDrawSession = class {
|
|
|
4079
4123
|
} else if (event.key === "Backspace" && this.#state.points.length > 0) {
|
|
4080
4124
|
event.preventDefault();
|
|
4081
4125
|
this.#state.points = this.#state.points.slice(0, -1);
|
|
4082
|
-
const closeSnapUnits = CLOSE_SNAP_PX /
|
|
4126
|
+
const closeSnapUnits = CLOSE_SNAP_PX / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg);
|
|
4083
4127
|
this.#state.willClose = this.#state.cursor ? isCloseToStart(this.#state.points, this.#state.cursor, closeSnapUnits) : false;
|
|
4084
4128
|
updatePathDrawPreview(this.#svg, this.#state);
|
|
4085
|
-
|
|
4129
|
+
chunkWZA3DJJH_cjs.clearAlignmentGuides(this.#svg);
|
|
4086
4130
|
}
|
|
4087
4131
|
};
|
|
4088
4132
|
keyUp = (event) => {
|
|
@@ -4091,7 +4135,7 @@ var PathDrawSession = class {
|
|
|
4091
4135
|
}
|
|
4092
4136
|
};
|
|
4093
4137
|
#resolvePoint(raw) {
|
|
4094
|
-
const closeSnapUnits = CLOSE_SNAP_PX /
|
|
4138
|
+
const closeSnapUnits = CLOSE_SNAP_PX / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg);
|
|
4095
4139
|
if (isCloseToStart(this.#state.points, raw, closeSnapUnits)) {
|
|
4096
4140
|
return { point: this.#state.points[0], willClose: true, guide: null };
|
|
4097
4141
|
}
|
|
@@ -4101,7 +4145,7 @@ var PathDrawSession = class {
|
|
|
4101
4145
|
return { point: raw, willClose: false, guide: null };
|
|
4102
4146
|
}
|
|
4103
4147
|
const angleSnapped = snapTo45Degrees(last, raw);
|
|
4104
|
-
const guideSnapUnits = GUIDE_SNAP_PX /
|
|
4148
|
+
const guideSnapUnits = GUIDE_SNAP_PX / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg);
|
|
4105
4149
|
const { point, guide } = snapToSessionGuides(last, angleSnapped, points.slice(0, -1), raw, guideSnapUnits);
|
|
4106
4150
|
return { point, willClose: false, guide };
|
|
4107
4151
|
}
|
|
@@ -4115,7 +4159,7 @@ var PathDrawSession = class {
|
|
|
4115
4159
|
}
|
|
4116
4160
|
#reset(callExit) {
|
|
4117
4161
|
this.#state.previewGroup?.remove();
|
|
4118
|
-
|
|
4162
|
+
chunkWZA3DJJH_cjs.clearAlignmentGuides(this.#svg);
|
|
4119
4163
|
const exit = this.#state.onExit;
|
|
4120
4164
|
this.#state = createIdlePathDrawState();
|
|
4121
4165
|
this.#shiftHeld = false;
|
|
@@ -4158,7 +4202,7 @@ function applyPathReshapePreview(drag, point) {
|
|
|
4158
4202
|
const points = drag.points.map(
|
|
4159
4203
|
(existing, index) => index === drag.pointIndex ? [point.x, point.y] : existing
|
|
4160
4204
|
);
|
|
4161
|
-
const d =
|
|
4205
|
+
const d = chunkUHKFJBY5_cjs.freeformPathData({
|
|
4162
4206
|
points: points.map(([x, y]) => ({ x, y })),
|
|
4163
4207
|
tension: drag.tension,
|
|
4164
4208
|
closed: drag.closed
|
|
@@ -4166,22 +4210,22 @@ function applyPathReshapePreview(drag, point) {
|
|
|
4166
4210
|
drag.pathNode.setAttribute("d", d);
|
|
4167
4211
|
drag.handle.setAttribute("cx", String(point.x));
|
|
4168
4212
|
drag.handle.setAttribute("cy", String(point.y));
|
|
4169
|
-
drag.overlay?.querySelector(`[${
|
|
4213
|
+
drag.overlay?.querySelector(`[${chunkWZA3DJJH_cjs.PATH_HALO_ATTR}]`)?.setAttribute("d", d);
|
|
4170
4214
|
return points;
|
|
4171
4215
|
}
|
|
4172
4216
|
|
|
4173
4217
|
// src/runtime/interaction/pathReshape/target.ts
|
|
4174
4218
|
function resolvePathReshapeTarget(svg, event) {
|
|
4175
|
-
const handle = event.target?.closest?.(`[${
|
|
4176
|
-
const indexAttr = handle?.getAttribute(
|
|
4219
|
+
const handle = event.target?.closest?.(`[${chunkUHKFJBY5_cjs.PATH_POINT_INDEX_ATTR}]`) ?? null;
|
|
4220
|
+
const indexAttr = handle?.getAttribute(chunkUHKFJBY5_cjs.PATH_POINT_INDEX_ATTR) ?? null;
|
|
4177
4221
|
const pointIndex = indexAttr !== null ? Number(indexAttr) : Number.NaN;
|
|
4178
4222
|
const ownerId = handle?.closest("[data-sf-selection-overlay]")?.getAttribute("data-sf-selection-overlay");
|
|
4179
4223
|
if (!handle || !Number.isInteger(pointIndex) || !ownerId) {
|
|
4180
4224
|
return null;
|
|
4181
4225
|
}
|
|
4182
|
-
const pathNode =
|
|
4183
|
-
const owner = pathNode &&
|
|
4184
|
-
const geometry = pathNode &&
|
|
4226
|
+
const pathNode = chunkWZA3DJJH_cjs.findOwnerNode(svg, ownerId, chunkWZA3DJJH_cjs.isPrimary);
|
|
4227
|
+
const owner = pathNode && chunkWZA3DJJH_cjs.resolveOwner(pathNode);
|
|
4228
|
+
const geometry = pathNode && chunkWZA3DJJH_cjs.pathGeometryOf(pathNode);
|
|
4185
4229
|
if (!pathNode || !owner || !geometry || pointIndex < 0 || pointIndex >= geometry.points.length) {
|
|
4186
4230
|
return null;
|
|
4187
4231
|
}
|
|
@@ -4224,7 +4268,7 @@ var PathReshapeSession = class {
|
|
|
4224
4268
|
this.#emitter = emitter;
|
|
4225
4269
|
}
|
|
4226
4270
|
pointerDown = (event) => {
|
|
4227
|
-
if (event.button !== 0 || this.#drag ||
|
|
4271
|
+
if (event.button !== 0 || this.#drag || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
4228
4272
|
return;
|
|
4229
4273
|
}
|
|
4230
4274
|
this.#drag = createPathReshapeDragState(this.#svg, event);
|
|
@@ -4235,7 +4279,7 @@ var PathReshapeSession = class {
|
|
|
4235
4279
|
return;
|
|
4236
4280
|
}
|
|
4237
4281
|
drag.moved = true;
|
|
4238
|
-
const point =
|
|
4282
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
4239
4283
|
if (point) {
|
|
4240
4284
|
applyPathReshapePreview(drag, point);
|
|
4241
4285
|
}
|
|
@@ -4250,7 +4294,7 @@ var PathReshapeSession = class {
|
|
|
4250
4294
|
if (!drag.moved) {
|
|
4251
4295
|
return;
|
|
4252
4296
|
}
|
|
4253
|
-
const point =
|
|
4297
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event) ?? {
|
|
4254
4298
|
x: drag.points[drag.pointIndex][0],
|
|
4255
4299
|
y: drag.points[drag.pointIndex][1]
|
|
4256
4300
|
};
|
|
@@ -4291,7 +4335,7 @@ function updatePieLabelDragPreview(drag, dx, dy) {
|
|
|
4291
4335
|
}
|
|
4292
4336
|
const from = { x: drag.tickStartX, y: drag.tickStartY };
|
|
4293
4337
|
const to = { x: drag.restX + dx, y: drag.restY + dy };
|
|
4294
|
-
const clipped =
|
|
4338
|
+
const clipped = chunkUHKFJBY5_cjs.clipSegmentToRect(from, to, drag.halfWidth, drag.halfHeight);
|
|
4295
4339
|
drag.tickElement.setAttribute("d", `M ${from.x} ${from.y} L ${clipped.x} ${clipped.y}`);
|
|
4296
4340
|
drag.tickElement.setAttribute("stroke", PREVIEW_TICK_COLOR);
|
|
4297
4341
|
drag.tickElement.setAttribute("stroke-width", PREVIEW_TICK_STROKE_WIDTH);
|
|
@@ -4317,7 +4361,7 @@ function restoreAttribute(element2, name, value) {
|
|
|
4317
4361
|
|
|
4318
4362
|
// src/runtime/interaction/pieGeometry.ts
|
|
4319
4363
|
function readPieGeometry(svg, ownerId) {
|
|
4320
|
-
const raw =
|
|
4364
|
+
const raw = chunkWZA3DJJH_cjs.findOwnerNode(svg, ownerId, chunkWZA3DJJH_cjs.isPrimary)?.getAttribute("data-sf-pie-geometry");
|
|
4321
4365
|
if (!raw) {
|
|
4322
4366
|
return null;
|
|
4323
4367
|
}
|
|
@@ -4336,7 +4380,7 @@ function findLabelMark2(event) {
|
|
|
4336
4380
|
return event.target?.closest?.(selector);
|
|
4337
4381
|
}
|
|
4338
4382
|
function isLabelPointer2(event) {
|
|
4339
|
-
return event.button === 0 && !
|
|
4383
|
+
return event.button === 0 && !chunkWZA3DJJH_cjs.isCameraGesture(event);
|
|
4340
4384
|
}
|
|
4341
4385
|
function findLabelSiblings(svg, ownerId, seriesId, mark) {
|
|
4342
4386
|
const selector = `[data-sf-id="${CSS.escape(ownerId)}"][data-sf-series="${CSS.escape(seriesId)}"][data-sf-mark="${mark}"]`;
|
|
@@ -4368,7 +4412,7 @@ function resolvePieLabelDrag(svg, event) {
|
|
|
4368
4412
|
if (!clicked) {
|
|
4369
4413
|
return null;
|
|
4370
4414
|
}
|
|
4371
|
-
const owner =
|
|
4415
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(clicked);
|
|
4372
4416
|
if (owner?.role !== "chart") {
|
|
4373
4417
|
return null;
|
|
4374
4418
|
}
|
|
@@ -4387,7 +4431,7 @@ function resolvePieLabelDrag(svg, event) {
|
|
|
4387
4431
|
const wedgeRadius = clicked.getAttribute("data-sf-pie-wedge-radius");
|
|
4388
4432
|
const explicitRadius = wedgeRadius === null ? Number.NaN : Number(wedgeRadius);
|
|
4389
4433
|
const outerRadius = Number.isFinite(explicitRadius) ? explicitRadius : geometry.outerRadius;
|
|
4390
|
-
const start =
|
|
4434
|
+
const start = chunkWZA3DJJH_cjs.pointerUserPoint(svg, event);
|
|
4391
4435
|
if (!start) {
|
|
4392
4436
|
return null;
|
|
4393
4437
|
}
|
|
@@ -4409,13 +4453,13 @@ function resolvePieLabelDrag(svg, event) {
|
|
|
4409
4453
|
outerRadius,
|
|
4410
4454
|
anchorX: geometry.centerX + outerRadius * Math.cos(midAngle),
|
|
4411
4455
|
anchorY: geometry.centerY + outerRadius * Math.sin(midAngle),
|
|
4412
|
-
tickStartX: geometry.centerX + (outerRadius +
|
|
4413
|
-
tickStartY: geometry.centerY + (outerRadius +
|
|
4456
|
+
tickStartX: geometry.centerX + (outerRadius + chunkUHKFJBY5_cjs.LEADER_INSET) * Math.cos(midAngle),
|
|
4457
|
+
tickStartY: geometry.centerY + (outerRadius + chunkUHKFJBY5_cjs.LEADER_INSET) * Math.sin(midAngle),
|
|
4414
4458
|
restX,
|
|
4415
4459
|
restY,
|
|
4416
4460
|
startX: start.x,
|
|
4417
4461
|
startY: start.y,
|
|
4418
|
-
halfWidth:
|
|
4462
|
+
halfWidth: chunkUHKFJBY5_cjs.LABEL_WIDTH / 2,
|
|
4419
4463
|
halfHeight: fontSize * 1.2,
|
|
4420
4464
|
moved: false,
|
|
4421
4465
|
lastDx: 0,
|
|
@@ -4451,7 +4495,7 @@ var PieLabelDragSession = class {
|
|
|
4451
4495
|
if (!this.#drag || event.pointerId !== this.#drag.pointerId) {
|
|
4452
4496
|
return;
|
|
4453
4497
|
}
|
|
4454
|
-
const point =
|
|
4498
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
4455
4499
|
if (!point) {
|
|
4456
4500
|
return;
|
|
4457
4501
|
}
|
|
@@ -4483,8 +4527,8 @@ var PieLabelDragSession = class {
|
|
|
4483
4527
|
if (!drag.moved) {
|
|
4484
4528
|
return;
|
|
4485
4529
|
}
|
|
4486
|
-
const pathX =
|
|
4487
|
-
const pathY =
|
|
4530
|
+
const pathX = chunkUHKFJBY5_cjs.seriesLabelOffsetXProp(drag.seriesId);
|
|
4531
|
+
const pathY = chunkUHKFJBY5_cjs.seriesLabelOffsetYProp(drag.seriesId);
|
|
4488
4532
|
if (!pathX || !pathY) {
|
|
4489
4533
|
return;
|
|
4490
4534
|
}
|
|
@@ -4546,7 +4590,7 @@ function siblingNodes(svg, owner, path) {
|
|
|
4546
4590
|
});
|
|
4547
4591
|
}
|
|
4548
4592
|
function resolvePropertyDrag(svg, event, rules) {
|
|
4549
|
-
if (event.button !== 0 ||
|
|
4593
|
+
if (event.button !== 0 || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
4550
4594
|
return null;
|
|
4551
4595
|
}
|
|
4552
4596
|
const node = event.target?.closest?.('[data-sf-prop-kind="value"]');
|
|
@@ -4554,11 +4598,11 @@ function resolvePropertyDrag(svg, event, rules) {
|
|
|
4554
4598
|
return null;
|
|
4555
4599
|
}
|
|
4556
4600
|
const path = node.getAttribute("data-sf-prop");
|
|
4557
|
-
const owner =
|
|
4601
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(node);
|
|
4558
4602
|
if (!path || owner?.role !== "chart" || !isEditablePath(path, rules)) {
|
|
4559
4603
|
return null;
|
|
4560
4604
|
}
|
|
4561
|
-
const scale = parseValueScale(
|
|
4605
|
+
const scale = parseValueScale(chunkWZA3DJJH_cjs.findOwnerNode(svg, owner.id, chunkWZA3DJJH_cjs.isPrimary));
|
|
4562
4606
|
if (!scale) {
|
|
4563
4607
|
return null;
|
|
4564
4608
|
}
|
|
@@ -4827,7 +4871,7 @@ function resolvePropertyTarget(event, rules) {
|
|
|
4827
4871
|
return null;
|
|
4828
4872
|
}
|
|
4829
4873
|
const path = hit.getAttribute("data-sf-prop");
|
|
4830
|
-
const owner =
|
|
4874
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(hit);
|
|
4831
4875
|
if (!path || !owner || !isEditablePath(path, rules)) {
|
|
4832
4876
|
return null;
|
|
4833
4877
|
}
|
|
@@ -4866,7 +4910,7 @@ var PropertyEditingSession = class {
|
|
|
4866
4910
|
begin(target) {
|
|
4867
4911
|
this.cancel();
|
|
4868
4912
|
const { node } = target;
|
|
4869
|
-
const rect =
|
|
4913
|
+
const rect = chunkWZA3DJJH_cjs.screenRectOf(node);
|
|
4870
4914
|
const fontSize = Number.parseFloat(node.getAttribute("font-size") || "12");
|
|
4871
4915
|
const originalText = node.textContent ?? "";
|
|
4872
4916
|
const anchor = node.getAttribute("text-anchor");
|
|
@@ -4956,15 +5000,15 @@ function crossedDuplicateDragThreshold(drag, event) {
|
|
|
4956
5000
|
var PREVIEW_STROKE_PX = 2;
|
|
4957
5001
|
var NEW_LINK_PATH_TYPE = "orthogonal";
|
|
4958
5002
|
function createDuplicatePreviewPath(svg) {
|
|
4959
|
-
const path = svg.ownerDocument.createElementNS(
|
|
5003
|
+
const path = svg.ownerDocument.createElementNS(chunkWZA3DJJH_cjs.SVG_NAMESPACE, "path");
|
|
4960
5004
|
path.setAttribute("fill", "none");
|
|
4961
|
-
path.setAttribute("stroke-width", String(PREVIEW_STROKE_PX /
|
|
5005
|
+
path.setAttribute("stroke-width", String(PREVIEW_STROKE_PX / chunkWZA3DJJH_cjs.pxPerUnit(svg)));
|
|
4962
5006
|
path.style.pointerEvents = "none";
|
|
4963
5007
|
return path;
|
|
4964
5008
|
}
|
|
4965
5009
|
function updateDuplicatePreview(drag, toPoint, toSide) {
|
|
4966
5010
|
const link = previewLink(drag.direction, toSide);
|
|
4967
|
-
const { points, segments } =
|
|
5011
|
+
const { points, segments } = chunkUHKFJBY5_cjs.calculateLinkRoute(link, drag.fixedPoint, toPoint, NEW_LINK_PATH_TYPE);
|
|
4968
5012
|
drag.previewPath.setAttribute("d", previewPathData(points, segments, NEW_LINK_PATH_TYPE, 2));
|
|
4969
5013
|
}
|
|
4970
5014
|
|
|
@@ -4975,7 +5019,7 @@ function duplicateCandidates(svg, sourceId) {
|
|
|
4975
5019
|
if (element2.getAttribute("data-sf-role") === "link") {
|
|
4976
5020
|
continue;
|
|
4977
5021
|
}
|
|
4978
|
-
const owner =
|
|
5022
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(element2);
|
|
4979
5023
|
if (owner && owner.id !== sourceId) {
|
|
4980
5024
|
candidates.push({ owner, bounds: element2.getBBox() });
|
|
4981
5025
|
}
|
|
@@ -4989,8 +5033,8 @@ function createQuickDuplicateDragState(svg, event, previewPath) {
|
|
|
4989
5033
|
if (!bubble || !direction || direction.startsWith("iso-") || !sourceId) {
|
|
4990
5034
|
return null;
|
|
4991
5035
|
}
|
|
4992
|
-
const primary =
|
|
4993
|
-
const sourceOwner = primary &&
|
|
5036
|
+
const primary = chunkWZA3DJJH_cjs.findOwnerNode(svg, sourceId, chunkWZA3DJJH_cjs.isPrimary);
|
|
5037
|
+
const sourceOwner = primary && chunkWZA3DJJH_cjs.resolveOwner(primary);
|
|
4994
5038
|
if (!primary || !sourceOwner) {
|
|
4995
5039
|
return null;
|
|
4996
5040
|
}
|
|
@@ -4998,7 +5042,7 @@ function createQuickDuplicateDragState(svg, event, previewPath) {
|
|
|
4998
5042
|
return {
|
|
4999
5043
|
sourceOwner,
|
|
5000
5044
|
direction,
|
|
5001
|
-
fixedPoint:
|
|
5045
|
+
fixedPoint: chunkUHKFJBY5_cjs.pointAtPort(primary.getBBox(), { side: direction, offset: 0.5 }),
|
|
5002
5046
|
previewPath,
|
|
5003
5047
|
ghost: new LinkGhost(svg, previewPath),
|
|
5004
5048
|
candidates: duplicateCandidates(svg, sourceId),
|
|
@@ -5026,7 +5070,7 @@ var QuickDuplicateSession = class {
|
|
|
5026
5070
|
this.#emitter = emitter;
|
|
5027
5071
|
}
|
|
5028
5072
|
pointerDown = (event) => {
|
|
5029
|
-
if (event.button !== 0 || this.#drag ||
|
|
5073
|
+
if (event.button !== 0 || this.#drag || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
5030
5074
|
return;
|
|
5031
5075
|
}
|
|
5032
5076
|
this.#drag = createQuickDuplicateDragState(this.#svg, event, createDuplicatePreviewPath(this.#svg));
|
|
@@ -5040,7 +5084,7 @@ var QuickDuplicateSession = class {
|
|
|
5040
5084
|
return;
|
|
5041
5085
|
}
|
|
5042
5086
|
this.beginPreview(drag);
|
|
5043
|
-
const target = resolveDuplicateTarget(drag, duplicatePointerPosition(this.#svg, event), 1 /
|
|
5087
|
+
const target = resolveDuplicateTarget(drag, duplicatePointerPosition(this.#svg, event), 1 / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg));
|
|
5044
5088
|
updateDuplicatePreview(drag, target.point, target.side);
|
|
5045
5089
|
drag.ghost.show(target.hit !== null, target.bounds);
|
|
5046
5090
|
};
|
|
@@ -5098,14 +5142,14 @@ function seriesShapes(svg, ownerId, series) {
|
|
|
5098
5142
|
return [...svg.querySelectorAll(selector)];
|
|
5099
5143
|
}
|
|
5100
5144
|
function updateRadarVertexDragPreview(svg, drag, value) {
|
|
5101
|
-
const point =
|
|
5145
|
+
const point = chunkUHKFJBY5_cjs.radarVertexPoint(drag.frame, drag.index, value);
|
|
5102
5146
|
drag.element.setAttribute("cx", String(point.x));
|
|
5103
5147
|
drag.element.setAttribute("cy", String(point.y));
|
|
5104
5148
|
const points = seriesVertices(svg, drag.owner.id, drag.series).map((vertex) => ({
|
|
5105
5149
|
x: Number(vertex.getAttribute("cx")),
|
|
5106
5150
|
y: Number(vertex.getAttribute("cy"))
|
|
5107
5151
|
}));
|
|
5108
|
-
const path =
|
|
5152
|
+
const path = chunkUHKFJBY5_cjs.radarSeriesPath(points, drag.frame.curved, drag.frame.tension);
|
|
5109
5153
|
for (const shape of seriesShapes(svg, drag.owner.id, drag.series)) {
|
|
5110
5154
|
shape.setAttribute("d", path);
|
|
5111
5155
|
}
|
|
@@ -5160,7 +5204,7 @@ function findVertex(event) {
|
|
|
5160
5204
|
return event.target?.closest?.('[data-sf-mark="radar-vertex"]');
|
|
5161
5205
|
}
|
|
5162
5206
|
function isVertexPointer(event) {
|
|
5163
|
-
return event.button === 0 && !
|
|
5207
|
+
return event.button === 0 && !chunkWZA3DJJH_cjs.isCameraGesture(event);
|
|
5164
5208
|
}
|
|
5165
5209
|
function resolveRadarVertexDrag(svg, event) {
|
|
5166
5210
|
if (!isVertexPointer(event)) {
|
|
@@ -5170,7 +5214,7 @@ function resolveRadarVertexDrag(svg, event) {
|
|
|
5170
5214
|
if (!element2) {
|
|
5171
5215
|
return null;
|
|
5172
5216
|
}
|
|
5173
|
-
const owner =
|
|
5217
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(element2);
|
|
5174
5218
|
if (owner?.role !== "chart") {
|
|
5175
5219
|
return null;
|
|
5176
5220
|
}
|
|
@@ -5179,7 +5223,7 @@ function resolveRadarVertexDrag(svg, event) {
|
|
|
5179
5223
|
if (!series || !Number.isInteger(index) || index < 0) {
|
|
5180
5224
|
return null;
|
|
5181
5225
|
}
|
|
5182
|
-
const frame = parseRadarFrame(
|
|
5226
|
+
const frame = parseRadarFrame(chunkWZA3DJJH_cjs.findOwnerNode(svg, owner.id, chunkWZA3DJJH_cjs.isPrimary));
|
|
5183
5227
|
if (!frame || index >= frame.count) {
|
|
5184
5228
|
return null;
|
|
5185
5229
|
}
|
|
@@ -5189,11 +5233,11 @@ function resolveRadarVertexDrag(svg, event) {
|
|
|
5189
5233
|
|
|
5190
5234
|
// src/runtime/interaction/radarVertexDrag/session.ts
|
|
5191
5235
|
function valueFrom(svg, event, drag) {
|
|
5192
|
-
const point =
|
|
5236
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(svg, event);
|
|
5193
5237
|
if (!point) {
|
|
5194
5238
|
return null;
|
|
5195
5239
|
}
|
|
5196
|
-
return
|
|
5240
|
+
return chunkUHKFJBY5_cjs.radarValueAtPoint(drag.frame, drag.index, point.x, point.y);
|
|
5197
5241
|
}
|
|
5198
5242
|
var RadarVertexDragSession = class {
|
|
5199
5243
|
#svg;
|
|
@@ -5225,7 +5269,7 @@ var RadarVertexDragSession = class {
|
|
|
5225
5269
|
if (!this.#readout) {
|
|
5226
5270
|
this.#readout = createValueReadout(this.#svg);
|
|
5227
5271
|
}
|
|
5228
|
-
const vertex =
|
|
5272
|
+
const vertex = chunkUHKFJBY5_cjs.radarVertexPoint(this.#drag.frame, this.#drag.index, value);
|
|
5229
5273
|
positionRadarReadout(this.#readout, vertex, this.#drag.frame.centerY, value);
|
|
5230
5274
|
}
|
|
5231
5275
|
cancel() {
|
|
@@ -5316,7 +5360,7 @@ function captureTextFit(text) {
|
|
|
5316
5360
|
fontSize,
|
|
5317
5361
|
lineHeight,
|
|
5318
5362
|
padding: Math.max(8, text.strokeWidth * 2),
|
|
5319
|
-
longestWord: Math.max(0, ...words.map((word) =>
|
|
5363
|
+
longestWord: Math.max(0, ...words.map((word) => chunkUHKFJBY5_cjs.estimateTextWidth(word, fontSize, bold)))
|
|
5320
5364
|
};
|
|
5321
5365
|
}
|
|
5322
5366
|
var COMMIT_PRECISION = 10;
|
|
@@ -5327,7 +5371,7 @@ function minWidthForText(fit) {
|
|
|
5327
5371
|
return roundUpForCommit(fit.longestWord + fit.padding * 2);
|
|
5328
5372
|
}
|
|
5329
5373
|
function minHeightForText(fit, width) {
|
|
5330
|
-
const lines =
|
|
5374
|
+
const lines = chunkUHKFJBY5_cjs.wrapText(fit.rawText, Math.max(0, width - fit.padding * 2), fit.fontSize);
|
|
5331
5375
|
return roundUpForCommit(lines.length * fit.fontSize * fit.lineHeight + fit.padding * 2);
|
|
5332
5376
|
}
|
|
5333
5377
|
|
|
@@ -5461,7 +5505,7 @@ function applyRectBounds(rect, kind, bounds) {
|
|
|
5461
5505
|
rect.setAttribute("width", String(bounds.width));
|
|
5462
5506
|
rect.setAttribute("height", String(bounds.height));
|
|
5463
5507
|
if (kind === "pill") {
|
|
5464
|
-
rect.setAttribute("rx", String(
|
|
5508
|
+
rect.setAttribute("rx", String(chunkUHKFJBY5_cjs.pillCornerRadius(bounds.width, bounds.height)));
|
|
5465
5509
|
}
|
|
5466
5510
|
}
|
|
5467
5511
|
function applyEllipseBounds(ellipse, bounds) {
|
|
@@ -5471,7 +5515,7 @@ function applyEllipseBounds(ellipse, bounds) {
|
|
|
5471
5515
|
ellipse.setAttribute("ry", String(bounds.height / 2));
|
|
5472
5516
|
}
|
|
5473
5517
|
function applySymbolBounds(path, bounds) {
|
|
5474
|
-
const raw = path.getAttribute(
|
|
5518
|
+
const raw = path.getAttribute(chunkUHKFJBY5_cjs.SYMBOL_POINTS_ATTR);
|
|
5475
5519
|
if (!raw) {
|
|
5476
5520
|
return false;
|
|
5477
5521
|
}
|
|
@@ -5479,22 +5523,22 @@ function applySymbolBounds(path, bounds) {
|
|
|
5479
5523
|
x: bounds.x + x * bounds.width,
|
|
5480
5524
|
y: bounds.y + y * bounds.height
|
|
5481
5525
|
}));
|
|
5482
|
-
const tension = Number(path.getAttribute(
|
|
5483
|
-
path.setAttribute("d",
|
|
5526
|
+
const tension = Number(path.getAttribute(chunkUHKFJBY5_cjs.SYMBOL_TENSION_ATTR)) || 0;
|
|
5527
|
+
path.setAttribute("d", chunkUHKFJBY5_cjs.freeformPathData({ points, tension, closed: true }));
|
|
5484
5528
|
return true;
|
|
5485
5529
|
}
|
|
5486
5530
|
function applyPathBounds(path, kind, bounds) {
|
|
5487
5531
|
if (kind === "symbol" && applySymbolBounds(path, bounds)) {
|
|
5488
5532
|
return;
|
|
5489
5533
|
}
|
|
5490
|
-
const pathData =
|
|
5534
|
+
const pathData = chunkUHKFJBY5_cjs.localShapePath(kind, bounds.x, bounds.y, bounds.width, bounds.height);
|
|
5491
5535
|
if (pathData) {
|
|
5492
5536
|
path.setAttribute("d", pathData);
|
|
5493
5537
|
}
|
|
5494
5538
|
}
|
|
5495
5539
|
function applyFrameBoundaryBounds(path, bounds) {
|
|
5496
|
-
const cornerRadius = Number(path.getAttribute(
|
|
5497
|
-
const squareCorner = path.getAttribute(
|
|
5540
|
+
const cornerRadius = Number(path.getAttribute(chunkUHKFJBY5_cjs.CORNER_RADIUS_ATTR) ?? 0);
|
|
5541
|
+
const squareCorner = path.getAttribute(chunkUHKFJBY5_cjs.SQUARE_CORNER_ATTR);
|
|
5498
5542
|
const radii = {
|
|
5499
5543
|
topLeft: cornerRadius,
|
|
5500
5544
|
topRight: cornerRadius,
|
|
@@ -5504,7 +5548,7 @@ function applyFrameBoundaryBounds(path, bounds) {
|
|
|
5504
5548
|
if (squareCorner) {
|
|
5505
5549
|
radii[squareCorner] = 0;
|
|
5506
5550
|
}
|
|
5507
|
-
path.setAttribute("d",
|
|
5551
|
+
path.setAttribute("d", chunkUHKFJBY5_cjs.cornersRoundedRectPath(bounds.x, bounds.y, bounds.width, bounds.height, radii));
|
|
5508
5552
|
}
|
|
5509
5553
|
function applySingleNodeBounds(primary, kind, bounds) {
|
|
5510
5554
|
const tag = primary.tagName.toLowerCase();
|
|
@@ -5514,7 +5558,7 @@ function applySingleNodeBounds(primary, kind, bounds) {
|
|
|
5514
5558
|
applyEllipseBounds(primary, bounds);
|
|
5515
5559
|
} else if (tag === "foreignobject") {
|
|
5516
5560
|
applyRectBounds(primary, null, bounds);
|
|
5517
|
-
} else if (tag === "path" && primary.hasAttribute(
|
|
5561
|
+
} else if (tag === "path" && primary.hasAttribute(chunkUHKFJBY5_cjs.CORNER_RADIUS_ATTR)) {
|
|
5518
5562
|
applyFrameBoundaryBounds(primary, bounds);
|
|
5519
5563
|
} else if (tag === "path" && kind) {
|
|
5520
5564
|
applyPathBounds(primary, kind, bounds);
|
|
@@ -5553,7 +5597,7 @@ function updateSelectionRing(overlay, bounds) {
|
|
|
5553
5597
|
}
|
|
5554
5598
|
function updateSelectionOverlay(overlay, bounds) {
|
|
5555
5599
|
updateSelectionRing(overlay, bounds);
|
|
5556
|
-
for (const [centerX, centerY, name] of
|
|
5600
|
+
for (const [centerX, centerY, name] of chunkWZA3DJJH_cjs.resizeHandlePositions(bounds)) {
|
|
5557
5601
|
const handle = overlay.querySelector(`[data-sf-resize-handle="${name}"]`);
|
|
5558
5602
|
if (!handle) {
|
|
5559
5603
|
continue;
|
|
@@ -5570,7 +5614,7 @@ function replaceTextLines(textElement, lines, x, lineHeight) {
|
|
|
5570
5614
|
textElement.removeChild(textElement.firstChild);
|
|
5571
5615
|
}
|
|
5572
5616
|
lines.forEach((line, index) => {
|
|
5573
|
-
const tspan = document.createElementNS(
|
|
5617
|
+
const tspan = document.createElementNS(chunkWZA3DJJH_cjs.SVG_NAMESPACE, "tspan");
|
|
5574
5618
|
tspan.setAttribute("x", String(x));
|
|
5575
5619
|
if (index > 0) {
|
|
5576
5620
|
tspan.setAttribute("dy", `${lineHeight}px`);
|
|
@@ -5590,7 +5634,7 @@ function applyLiveText(textElement, rawText, bounds, strokeWidth) {
|
|
|
5590
5634
|
const height = Math.max(0, bounds.height - padding * 2);
|
|
5591
5635
|
const boxX = bounds.x + padding;
|
|
5592
5636
|
const boxY = bounds.y + padding;
|
|
5593
|
-
const lines =
|
|
5637
|
+
const lines = chunkUHKFJBY5_cjs.wrapText(rawText, width, fontSize);
|
|
5594
5638
|
const linePixels = fontSize * lineHeight;
|
|
5595
5639
|
const contentHeight = lines.length * linePixels;
|
|
5596
5640
|
const firstY = verticalAlign === "top" ? boxY + fontSize : verticalAlign === "bottom" ? boxY + height - contentHeight + fontSize : boxY + (height - contentHeight) / 2 + fontSize;
|
|
@@ -5603,7 +5647,7 @@ function applyLiveText(textElement, rawText, bounds, strokeWidth) {
|
|
|
5603
5647
|
|
|
5604
5648
|
// src/runtime/interaction/resize/preview.ts
|
|
5605
5649
|
function textBoundsFor(kind, bounds) {
|
|
5606
|
-
return kind === "person" ?
|
|
5650
|
+
return kind === "person" ? chunkUHKFJBY5_cjs.personLabelArea(bounds.x, bounds.y, bounds.width, bounds.height) : bounds;
|
|
5607
5651
|
}
|
|
5608
5652
|
function applyGeometryPreview(drag, bounds) {
|
|
5609
5653
|
if (drag.isComposite) {
|
|
@@ -5611,6 +5655,10 @@ function applyGeometryPreview(drag, bounds) {
|
|
|
5611
5655
|
return;
|
|
5612
5656
|
}
|
|
5613
5657
|
drag.geometryNodes.forEach((node, index) => {
|
|
5658
|
+
if (node.tagName.toLowerCase() === "image") {
|
|
5659
|
+
applyCompositeScale([node], drag.startBounds, bounds, [drag.baseTransforms[index]]);
|
|
5660
|
+
return;
|
|
5661
|
+
}
|
|
5614
5662
|
applySingleNodeBounds(node, drag.kind, applyInset(bounds, drag.insets[index] ?? NO_INSET));
|
|
5615
5663
|
});
|
|
5616
5664
|
}
|
|
@@ -5623,7 +5671,7 @@ function applyResizePreview(drag, bounds) {
|
|
|
5623
5671
|
applyLiveText(drag.text.el, drag.text.rawText, textBoundsFor(drag.kind, bounds), drag.text.strokeWidth);
|
|
5624
5672
|
}
|
|
5625
5673
|
if (drag.bubbles) {
|
|
5626
|
-
|
|
5674
|
+
chunkWZA3DJJH_cjs.updateQuickDuplicateBubbles(drag.bubbles, bounds);
|
|
5627
5675
|
}
|
|
5628
5676
|
updateLiveLinks(drag.liveLinks, bounds);
|
|
5629
5677
|
}
|
|
@@ -5644,9 +5692,9 @@ function snapResize(svg, drag, pointer) {
|
|
|
5644
5692
|
};
|
|
5645
5693
|
}
|
|
5646
5694
|
const axes = HANDLE_AXES[drag.handle];
|
|
5647
|
-
const candidates = nearestCandidates(proposed,
|
|
5695
|
+
const candidates = nearestCandidates(proposed, chunkWZA3DJJH_cjs.findSnapCandidateBounds(svg, /* @__PURE__ */ new Set([drag.owner.id])));
|
|
5648
5696
|
const snap = computeSnap(proposed, candidates, {
|
|
5649
|
-
threshold: snapDistancePx(svg) /
|
|
5697
|
+
threshold: snapDistancePx(svg) / chunkWZA3DJJH_cjs.pxPerUnit(svg),
|
|
5650
5698
|
activeX: resizeActivePoints(axes.x),
|
|
5651
5699
|
activeY: resizeActivePoints(axes.y),
|
|
5652
5700
|
guideOverhang: GUIDE_OVERHANG3
|
|
@@ -5687,13 +5735,13 @@ function selectResizeTarget(svg, event) {
|
|
|
5687
5735
|
if (!ownerId) {
|
|
5688
5736
|
return null;
|
|
5689
5737
|
}
|
|
5690
|
-
const primary =
|
|
5691
|
-
const owner = primary &&
|
|
5738
|
+
const primary = chunkWZA3DJJH_cjs.findOwnerNode(svg, ownerId, chunkWZA3DJJH_cjs.isPrimary);
|
|
5739
|
+
const owner = primary && chunkWZA3DJJH_cjs.resolveOwner(primary);
|
|
5692
5740
|
if (!primary || !hasEditableGeometry(owner)) {
|
|
5693
5741
|
return null;
|
|
5694
5742
|
}
|
|
5695
|
-
const nodes =
|
|
5696
|
-
const geometryNodes = isCompositeOwner(owner) ? nodes : nodes.filter((node) => !
|
|
5743
|
+
const nodes = chunkWZA3DJJH_cjs.findAllOwnerNodes(svg, ownerId);
|
|
5744
|
+
const geometryNodes = isCompositeOwner(owner) ? nodes : nodes.filter((node) => !chunkWZA3DJJH_cjs.isTextLabel(node));
|
|
5697
5745
|
if (!geometryNodes.length) {
|
|
5698
5746
|
return null;
|
|
5699
5747
|
}
|
|
@@ -5711,7 +5759,7 @@ function selectResizeTarget(svg, event) {
|
|
|
5711
5759
|
|
|
5712
5760
|
// src/runtime/interaction/resize/textCapture.ts
|
|
5713
5761
|
function captureResizeText(nodes, primary) {
|
|
5714
|
-
const textElement = nodes.find(
|
|
5762
|
+
const textElement = nodes.find(chunkWZA3DJJH_cjs.isTextLabel);
|
|
5715
5763
|
const rawText = primary.getAttribute("aria-label");
|
|
5716
5764
|
if (!textElement || !rawText) {
|
|
5717
5765
|
return null;
|
|
@@ -5729,7 +5777,7 @@ function createResizeDragState(svg, event) {
|
|
|
5729
5777
|
if (!selection) {
|
|
5730
5778
|
return null;
|
|
5731
5779
|
}
|
|
5732
|
-
const startBounds =
|
|
5780
|
+
const startBounds = chunkWZA3DJJH_cjs.symbolDeclaredBounds(selection.primary) ?? selection.primary.getBBox();
|
|
5733
5781
|
const composite = isCompositeOwner(selection.owner);
|
|
5734
5782
|
const isContainer = CONTAINER_ROLES.has(selection.owner.role);
|
|
5735
5783
|
selection.captureTarget.setPointerCapture?.(event.pointerId);
|
|
@@ -5742,7 +5790,7 @@ function createResizeDragState(svg, event) {
|
|
|
5742
5790
|
isComposite: composite,
|
|
5743
5791
|
geometryNodes: selection.geometryNodes,
|
|
5744
5792
|
insets: selection.geometryNodes.map(
|
|
5745
|
-
(node) => node === selection.primary ? NO_INSET : insetWithin(startBounds,
|
|
5793
|
+
(node) => node === selection.primary ? NO_INSET : insetWithin(startBounds, chunkWZA3DJJH_cjs.symbolDeclaredBounds(node) ?? node.getBBox())
|
|
5746
5794
|
),
|
|
5747
5795
|
baseTransforms: selection.geometryNodes.map((node) => node.getAttribute("transform")),
|
|
5748
5796
|
overlay: selection.overlay,
|
|
@@ -5768,7 +5816,7 @@ var ResizeSession = class {
|
|
|
5768
5816
|
this.#emitter = emitter;
|
|
5769
5817
|
}
|
|
5770
5818
|
pointerDown = (event) => {
|
|
5771
|
-
if (event.button !== 0 || this.#drag ||
|
|
5819
|
+
if (event.button !== 0 || this.#drag || chunkWZA3DJJH_cjs.isCameraGesture(event)) {
|
|
5772
5820
|
return;
|
|
5773
5821
|
}
|
|
5774
5822
|
this.#drag = createResizeDragState(this.#svg, event);
|
|
@@ -5783,7 +5831,7 @@ var ResizeSession = class {
|
|
|
5783
5831
|
const bounds = keepsProportions(drag, event.shiftKey) ? lockAspect(snapped.bounds, drag.startBounds, drag.handle) : snapped.bounds;
|
|
5784
5832
|
const { guides } = snapped;
|
|
5785
5833
|
applyResizePreview(drag, clampResizeToChildren(bounds, drag.childrenBounds));
|
|
5786
|
-
|
|
5834
|
+
chunkWZA3DJJH_cjs.updateAlignmentGuides(this.#svg, guides, RESIZE_GUIDE_COLOR);
|
|
5787
5835
|
};
|
|
5788
5836
|
pointerUp = (event) => {
|
|
5789
5837
|
const drag = this.#drag;
|
|
@@ -5792,7 +5840,7 @@ var ResizeSession = class {
|
|
|
5792
5840
|
}
|
|
5793
5841
|
this.#drag = null;
|
|
5794
5842
|
event.target?.releasePointerCapture?.(drag.pointerId);
|
|
5795
|
-
|
|
5843
|
+
chunkWZA3DJJH_cjs.clearAlignmentGuides(this.#svg);
|
|
5796
5844
|
if (!drag.moved) {
|
|
5797
5845
|
return;
|
|
5798
5846
|
}
|
|
@@ -5831,7 +5879,7 @@ function resolveSankeyNodeLabelTarget(event) {
|
|
|
5831
5879
|
if (!labelElement) {
|
|
5832
5880
|
return null;
|
|
5833
5881
|
}
|
|
5834
|
-
const owner =
|
|
5882
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(labelElement);
|
|
5835
5883
|
if (owner?.role !== "chart") {
|
|
5836
5884
|
return null;
|
|
5837
5885
|
}
|
|
@@ -5842,7 +5890,7 @@ function resolveSankeyNodeLabelTarget(event) {
|
|
|
5842
5890
|
return { owner, nodeId, labelElement };
|
|
5843
5891
|
}
|
|
5844
5892
|
function createSankeyNodeLabelEditor(target, emitter, onClose) {
|
|
5845
|
-
const rect =
|
|
5893
|
+
const rect = chunkWZA3DJJH_cjs.screenRectOf(target.labelElement);
|
|
5846
5894
|
if (rect.width <= 0 && rect.height <= 0) {
|
|
5847
5895
|
return null;
|
|
5848
5896
|
}
|
|
@@ -5899,7 +5947,7 @@ function clearSankeyNodeDragPreview(drag) {
|
|
|
5899
5947
|
// src/runtime/interaction/sankeyNode/target.ts
|
|
5900
5948
|
var RIBBON_PATH = /^M\s+(-?[\d.]+)\s+(-?[\d.]+)\s+C\s+-?[\d.]+\s+-?[\d.]+\s+-?[\d.]+\s+(-?[\d.]+)\s+(-?[\d.]+)\s+-?[\d.]+\s+L\s+-?[\d.]+\s+(-?[\d.]+)\s+C\s+-?[\d.]+\s+-?[\d.]+\s+-?[\d.]+\s+(-?[\d.]+)\s+-?[\d.]+\s+-?[\d.]+\s+Z$/;
|
|
5901
5949
|
function isNodePointer(event) {
|
|
5902
|
-
return event.button === 0 && !
|
|
5950
|
+
return event.button === 0 && !chunkWZA3DJJH_cjs.isCameraGesture(event);
|
|
5903
5951
|
}
|
|
5904
5952
|
function findNodeRect(event) {
|
|
5905
5953
|
return event.target?.closest?.('[data-sf-mark="sankey-node"]');
|
|
@@ -5957,7 +6005,7 @@ function resolveSankeyNodeDrag(svg, event) {
|
|
|
5957
6005
|
if (!rect) {
|
|
5958
6006
|
return null;
|
|
5959
6007
|
}
|
|
5960
|
-
const owner =
|
|
6008
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(rect);
|
|
5961
6009
|
if (owner?.role !== "chart") {
|
|
5962
6010
|
return null;
|
|
5963
6011
|
}
|
|
@@ -5965,7 +6013,7 @@ function resolveSankeyNodeDrag(svg, event) {
|
|
|
5965
6013
|
if (!nodeId) {
|
|
5966
6014
|
return null;
|
|
5967
6015
|
}
|
|
5968
|
-
const start =
|
|
6016
|
+
const start = chunkWZA3DJJH_cjs.pointerUserPoint(svg, event);
|
|
5969
6017
|
if (!start) {
|
|
5970
6018
|
return null;
|
|
5971
6019
|
}
|
|
@@ -6011,7 +6059,7 @@ var SankeyNodeDragSession = class {
|
|
|
6011
6059
|
if (!this.#drag || event.pointerId !== this.#drag.pointerId) {
|
|
6012
6060
|
return;
|
|
6013
6061
|
}
|
|
6014
|
-
const point =
|
|
6062
|
+
const point = chunkWZA3DJJH_cjs.pointerUserPoint(this.#svg, event);
|
|
6015
6063
|
if (!point) {
|
|
6016
6064
|
return;
|
|
6017
6065
|
}
|
|
@@ -6025,7 +6073,7 @@ var SankeyNodeDragSession = class {
|
|
|
6025
6073
|
const leadBounds = offsetBounds(drag.originalBounds, rawDx, rawDy);
|
|
6026
6074
|
const candidates = nearestCandidates(leadBounds, drag.siblingBounds);
|
|
6027
6075
|
const snap = computeSnap(leadBounds, candidates, {
|
|
6028
|
-
threshold: SNAP_THRESHOLD_PX /
|
|
6076
|
+
threshold: SNAP_THRESHOLD_PX / chunkWZA3DJJH_cjs.pxPerUnit(this.#svg),
|
|
6029
6077
|
activeX: MOVE_ACTIVE_POINTS,
|
|
6030
6078
|
activeY: MOVE_ACTIVE_POINTS,
|
|
6031
6079
|
guideOverhang: GUIDE_OVERHANG4
|
|
@@ -6035,7 +6083,7 @@ var SankeyNodeDragSession = class {
|
|
|
6035
6083
|
drag.lastDx = dx;
|
|
6036
6084
|
drag.lastDy = dy;
|
|
6037
6085
|
updateSankeyNodeDragPreview(drag, dx, dy);
|
|
6038
|
-
|
|
6086
|
+
chunkWZA3DJJH_cjs.updateAlignmentGuides(
|
|
6039
6087
|
this.#svg,
|
|
6040
6088
|
[snap.x.guide, snap.y.guide].filter((guide) => guide !== null),
|
|
6041
6089
|
GUIDE_COLOR3
|
|
@@ -6046,7 +6094,7 @@ var SankeyNodeDragSession = class {
|
|
|
6046
6094
|
clearSankeyNodeDragPreview(this.#drag);
|
|
6047
6095
|
}
|
|
6048
6096
|
this.#drag = null;
|
|
6049
|
-
|
|
6097
|
+
chunkWZA3DJJH_cjs.clearAlignmentGuides(this.#svg);
|
|
6050
6098
|
}
|
|
6051
6099
|
finish(event) {
|
|
6052
6100
|
if (!this.#drag || event.pointerId !== this.#drag.pointerId) {
|
|
@@ -6056,7 +6104,7 @@ var SankeyNodeDragSession = class {
|
|
|
6056
6104
|
this.#drag = null;
|
|
6057
6105
|
event.target?.releasePointerCapture?.(drag.pointerId);
|
|
6058
6106
|
clearSankeyNodeDragPreview(drag);
|
|
6059
|
-
|
|
6107
|
+
chunkWZA3DJJH_cjs.clearAlignmentGuides(this.#svg);
|
|
6060
6108
|
if (!drag.moved) {
|
|
6061
6109
|
return;
|
|
6062
6110
|
}
|
|
@@ -6112,7 +6160,7 @@ function bindSankeyNode(viewer, emitter) {
|
|
|
6112
6160
|
var FALLBACK_WIDTH = 120;
|
|
6113
6161
|
var FALLBACK_HEIGHT = 28;
|
|
6114
6162
|
function centeredLabelRect(primaryNode) {
|
|
6115
|
-
const primaryRect =
|
|
6163
|
+
const primaryRect = chunkWZA3DJJH_cjs.screenRectOf(primaryNode);
|
|
6116
6164
|
return {
|
|
6117
6165
|
left: primaryRect.left + (primaryRect.width - FALLBACK_WIDTH) / 2,
|
|
6118
6166
|
top: primaryRect.top + (primaryRect.height - FALLBACK_HEIGHT) / 2,
|
|
@@ -6122,10 +6170,10 @@ function centeredLabelRect(primaryNode) {
|
|
|
6122
6170
|
}
|
|
6123
6171
|
function resolveTextEditRect(owner, textNode, primaryNode) {
|
|
6124
6172
|
if (owner.role === "shape") {
|
|
6125
|
-
return primaryNode ?
|
|
6173
|
+
return primaryNode ? chunkWZA3DJJH_cjs.screenRectOf(primaryNode) : null;
|
|
6126
6174
|
}
|
|
6127
6175
|
if (textNode) {
|
|
6128
|
-
return
|
|
6176
|
+
return chunkWZA3DJJH_cjs.screenRectOf(textNode);
|
|
6129
6177
|
}
|
|
6130
6178
|
return primaryNode ? centeredLabelRect(primaryNode) : null;
|
|
6131
6179
|
}
|
|
@@ -6145,8 +6193,8 @@ function textAlign(owner, textNode) {
|
|
|
6145
6193
|
return anchor === "end" ? "right" : "left";
|
|
6146
6194
|
}
|
|
6147
6195
|
function createActiveTextEditor(svg, owner, emitter, onClose) {
|
|
6148
|
-
const textNode =
|
|
6149
|
-
const primaryNode =
|
|
6196
|
+
const textNode = chunkWZA3DJJH_cjs.findOwnerNode(svg, owner.id, chunkWZA3DJJH_cjs.isTextLabel);
|
|
6197
|
+
const primaryNode = chunkWZA3DJJH_cjs.findOwnerNode(svg, owner.id, chunkWZA3DJJH_cjs.isPrimary);
|
|
6150
6198
|
const rect = resolveTextEditRect(owner, textNode, primaryNode);
|
|
6151
6199
|
if (!rect) {
|
|
6152
6200
|
return null;
|
|
@@ -6192,7 +6240,7 @@ function isFrameTitle(target) {
|
|
|
6192
6240
|
}
|
|
6193
6241
|
function resolveEditableTextOwner(event) {
|
|
6194
6242
|
const target = event.target;
|
|
6195
|
-
const owner =
|
|
6243
|
+
const owner = chunkWZA3DJJH_cjs.resolveOwner(target);
|
|
6196
6244
|
if (!owner) {
|
|
6197
6245
|
return null;
|
|
6198
6246
|
}
|
|
@@ -6333,7 +6381,7 @@ function applyToken(target, lines, token) {
|
|
|
6333
6381
|
function maskSource(lines) {
|
|
6334
6382
|
let tokens;
|
|
6335
6383
|
try {
|
|
6336
|
-
tokens =
|
|
6384
|
+
tokens = chunkUHKFJBY5_cjs.tokenizeSource(lines.join("\n"));
|
|
6337
6385
|
} catch {
|
|
6338
6386
|
return null;
|
|
6339
6387
|
}
|
|
@@ -6365,7 +6413,7 @@ function braceDelta(masked) {
|
|
|
6365
6413
|
}
|
|
6366
6414
|
|
|
6367
6415
|
// src/runtime/interaction/sflPatch/scan/blocks.ts
|
|
6368
|
-
var OWNER_HEADER = /^\s*(Entity|Shape|Text|Container|Chart|Path|Link|Isometric|Widget|Component|Connection|Shader)\s+([A-Za-z_][A-Za-z0-9_]*)\b/;
|
|
6416
|
+
var OWNER_HEADER = /^\s*(Entity|Shape|Text|Image|Container|Chart|Path|Link|Isometric|Widget|Component|Connection|Shader)\s+([A-Za-z_][A-Za-z0-9_]*)\b/;
|
|
6369
6417
|
var VALID_IDENT = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
6370
6418
|
function blockEndIn(masked, startLine) {
|
|
6371
6419
|
let depth = 0;
|
|
@@ -6632,6 +6680,9 @@ function canvasObjectBlockKind(kind) {
|
|
|
6632
6680
|
if (kind === "text") {
|
|
6633
6681
|
return "Text";
|
|
6634
6682
|
}
|
|
6683
|
+
if (kind === "image") {
|
|
6684
|
+
return "Image";
|
|
6685
|
+
}
|
|
6635
6686
|
if (kind === "isometric") {
|
|
6636
6687
|
return "Isometric";
|
|
6637
6688
|
}
|
|
@@ -6666,7 +6717,7 @@ function resolveCanvasObjectInsertionTarget(sfl, lines, parentId) {
|
|
|
6666
6717
|
const modelRange = findFirstBlockOfKind(lines, "Model");
|
|
6667
6718
|
return modelRange ? { range: modelRange, origin: { x: 0, y: 0 } } : null;
|
|
6668
6719
|
}
|
|
6669
|
-
const parent =
|
|
6720
|
+
const parent = chunkUHKFJBY5_cjs.sflToCanvasState(sfl).canvasObjects.find((canvasObject) => canvasObject.id === parentId);
|
|
6670
6721
|
if (!parent) {
|
|
6671
6722
|
return null;
|
|
6672
6723
|
}
|
|
@@ -7192,33 +7243,33 @@ function movePathPoints(lines, range, dx, dy) {
|
|
|
7192
7243
|
);
|
|
7193
7244
|
replacePropertyValue(lines, span, shifted);
|
|
7194
7245
|
}
|
|
7195
|
-
function
|
|
7196
|
-
const state =
|
|
7197
|
-
const canvasObject = state.canvasObjects.find((candidate) => candidate.id === event.owner.id);
|
|
7198
|
-
if (!canvasObject) {
|
|
7199
|
-
return sfl;
|
|
7200
|
-
}
|
|
7201
|
-
const parent = canvasObject.parentFrameId ? state.canvasObjects.find((candidate) => candidate.id === canvasObject.parentFrameId) : void 0;
|
|
7202
|
-
const originX = parent?.x ?? 0;
|
|
7203
|
-
const originY = parent?.y ?? 0;
|
|
7246
|
+
function applyMoveChanges(sfl, events) {
|
|
7247
|
+
const state = chunkUHKFJBY5_cjs.sflToCanvasState(sfl);
|
|
7204
7248
|
const lines = sfl.split("\n");
|
|
7205
|
-
const
|
|
7206
|
-
|
|
7207
|
-
|
|
7208
|
-
|
|
7209
|
-
|
|
7210
|
-
|
|
7211
|
-
|
|
7249
|
+
for (const event of events) {
|
|
7250
|
+
const canvasObject = state.canvasObjects.find((candidate) => candidate.id === event.owner.id);
|
|
7251
|
+
const range = canvasObject ? findOwnerBlock(lines, event.owner.id) : null;
|
|
7252
|
+
if (!canvasObject || !range) {
|
|
7253
|
+
continue;
|
|
7254
|
+
}
|
|
7255
|
+
if (event.owner.role === "path") {
|
|
7256
|
+
movePathPoints(lines, range, event.dx, event.dy);
|
|
7257
|
+
continue;
|
|
7258
|
+
}
|
|
7259
|
+
const parent = canvasObject.parentFrameId ? state.canvasObjects.find((candidate) => candidate.id === canvasObject.parentFrameId) : void 0;
|
|
7260
|
+
setOrInsertLayoutTuples(lines, range, [
|
|
7261
|
+
["position", canvasObject.x - (parent?.x ?? 0) + event.dx, canvasObject.y - (parent?.y ?? 0) + event.dy]
|
|
7262
|
+
]);
|
|
7212
7263
|
}
|
|
7213
|
-
setOrInsertLayoutTuples(lines, range, [
|
|
7214
|
-
["position", canvasObject.x - originX + event.dx, canvasObject.y - originY + event.dy]
|
|
7215
|
-
]);
|
|
7216
7264
|
return lines.join("\n");
|
|
7217
7265
|
}
|
|
7266
|
+
function applyMoveChange(sfl, event) {
|
|
7267
|
+
return applyMoveChanges(sfl, [event]);
|
|
7268
|
+
}
|
|
7218
7269
|
|
|
7219
7270
|
// src/runtime/interaction/sflPatch/changes/pathPointChange.ts
|
|
7220
7271
|
function applyPathPointChange(sfl, event) {
|
|
7221
|
-
const canvasObjects =
|
|
7272
|
+
const canvasObjects = chunkUHKFJBY5_cjs.sflToCanvasState(sfl).canvasObjects;
|
|
7222
7273
|
const canvasObject = canvasObjects.find((candidate) => candidate.id === event.owner.id);
|
|
7223
7274
|
if (!canvasObject) {
|
|
7224
7275
|
return sfl;
|
|
@@ -7372,7 +7423,7 @@ function resolveConnectionInsertionTarget(sfl, lines, options) {
|
|
|
7372
7423
|
if (!VALID_IDENT.test(options.id) || nameExists(lines, options.id)) {
|
|
7373
7424
|
return null;
|
|
7374
7425
|
}
|
|
7375
|
-
const canvasObjects =
|
|
7426
|
+
const canvasObjects = chunkUHKFJBY5_cjs.sflToCanvasState(sfl).canvasObjects;
|
|
7376
7427
|
const hasSource = canvasObjects.some((canvasObject) => canvasObject.id === options.fromId);
|
|
7377
7428
|
const hasTarget = canvasObjects.some((canvasObject) => canvasObject.id === options.toId);
|
|
7378
7429
|
if (!hasSource || !hasTarget) {
|
|
@@ -7436,13 +7487,13 @@ function isometricOffset(direction, object, gap) {
|
|
|
7436
7487
|
const { depth } = object.isometric;
|
|
7437
7488
|
switch (direction) {
|
|
7438
7489
|
case "iso-width-pos":
|
|
7439
|
-
return { dx: (width + gap) *
|
|
7490
|
+
return { dx: (width + gap) * chunkUHKFJBY5_cjs.AXIS_COS, dy: (width + gap) * chunkUHKFJBY5_cjs.AXIS_SIN };
|
|
7440
7491
|
case "iso-width-neg":
|
|
7441
|
-
return { dx: -(width + gap) *
|
|
7492
|
+
return { dx: -(width + gap) * chunkUHKFJBY5_cjs.AXIS_COS, dy: -(width + gap) * chunkUHKFJBY5_cjs.AXIS_SIN };
|
|
7442
7493
|
case "iso-depth-pos":
|
|
7443
|
-
return { dx: -(depth + gap) *
|
|
7494
|
+
return { dx: -(depth + gap) * chunkUHKFJBY5_cjs.AXIS_COS, dy: (depth + gap) * chunkUHKFJBY5_cjs.AXIS_SIN };
|
|
7444
7495
|
case "iso-depth-neg":
|
|
7445
|
-
return { dx: (depth + gap) *
|
|
7496
|
+
return { dx: (depth + gap) * chunkUHKFJBY5_cjs.AXIS_COS, dy: -(depth + gap) * chunkUHKFJBY5_cjs.AXIS_SIN };
|
|
7446
7497
|
case "iso-height-pos":
|
|
7447
7498
|
return { dx: 0, dy: height + gap };
|
|
7448
7499
|
case "iso-height-neg":
|
|
@@ -7505,7 +7556,7 @@ function resolveLinkInsertionTarget(sfl, lines, options) {
|
|
|
7505
7556
|
if (!VALID_IDENT.test(options.id) || nameExists(lines, options.id)) {
|
|
7506
7557
|
return null;
|
|
7507
7558
|
}
|
|
7508
|
-
const canvasObjects =
|
|
7559
|
+
const canvasObjects = chunkUHKFJBY5_cjs.sflToCanvasState(sfl).canvasObjects;
|
|
7509
7560
|
const hasSource = canvasObjects.some((canvasObject) => canvasObject.id === options.fromId);
|
|
7510
7561
|
const hasTarget = canvasObjects.some((canvasObject) => canvasObject.id === options.toId);
|
|
7511
7562
|
if (!hasSource || !hasTarget) {
|
|
@@ -7591,21 +7642,21 @@ function duplicateShape(sfl, input) {
|
|
|
7591
7642
|
|
|
7592
7643
|
// src/runtime/interaction/sflPatch/changes/quickDuplicateChange.ts
|
|
7593
7644
|
function applyQuickDuplicateChange(sfl, event, options) {
|
|
7594
|
-
const state =
|
|
7645
|
+
const state = chunkUHKFJBY5_cjs.sflToCanvasState(sfl);
|
|
7595
7646
|
const object = state.canvasObjects.find((candidate) => candidate.id === event.owner.id);
|
|
7596
7647
|
if (!object) {
|
|
7597
7648
|
return sfl;
|
|
7598
7649
|
}
|
|
7599
7650
|
const { direction } = event;
|
|
7600
7651
|
if (isIsometricDirection2(direction)) {
|
|
7601
|
-
return
|
|
7652
|
+
return chunkUHKFJBY5_cjs.isIsometricObject(object) ? duplicateIsometricObject(sfl, object, direction, options) : sfl;
|
|
7602
7653
|
}
|
|
7603
|
-
return
|
|
7654
|
+
return chunkUHKFJBY5_cjs.isIsometricObject(object) ? sfl : duplicateShape(sfl, { object, links: state.links, side: direction, options });
|
|
7604
7655
|
}
|
|
7605
7656
|
|
|
7606
7657
|
// src/runtime/interaction/sflPatch/changes/resizeChange.ts
|
|
7607
7658
|
function applyResizeChange(sfl, event) {
|
|
7608
|
-
const state =
|
|
7659
|
+
const state = chunkUHKFJBY5_cjs.sflToCanvasState(sfl);
|
|
7609
7660
|
const canvasObject = state.canvasObjects.find((candidate) => candidate.id === event.owner.id);
|
|
7610
7661
|
const parent = canvasObject?.parentFrameId ? state.canvasObjects.find((candidate) => candidate.id === canvasObject.parentFrameId) : void 0;
|
|
7611
7662
|
const originX = parent?.x ?? 0;
|
|
@@ -7795,6 +7846,7 @@ exports.applyChartValueChange = applyChartValueChange;
|
|
|
7795
7846
|
exports.applyLinkReconnectChange = applyLinkReconnectChange;
|
|
7796
7847
|
exports.applyLinkSegmentChange = applyLinkSegmentChange;
|
|
7797
7848
|
exports.applyMoveChange = applyMoveChange;
|
|
7849
|
+
exports.applyMoveChanges = applyMoveChanges;
|
|
7798
7850
|
exports.applyPathPointChange = applyPathPointChange;
|
|
7799
7851
|
exports.applyPropertyChange = applyPropertyChange;
|
|
7800
7852
|
exports.applyQuickDuplicateChange = applyQuickDuplicateChange;
|