stickyflow 0.9.3 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/README.md +1 -1
- package/dist/binding/index.cjs +9 -9
- package/dist/binding/index.d.cts +4 -4
- package/dist/binding/index.d.ts +4 -4
- package/dist/binding/index.js +3 -3
- package/dist/{chunk-EURX7QT3.cjs → chunk-5G3BEXQU.cjs} +1300 -891
- package/dist/chunk-5G3BEXQU.cjs.map +1 -0
- package/dist/{chunk-AAP24GBG.js → chunk-BFQWCOEC.js} +3 -3
- package/dist/chunk-BFQWCOEC.js.map +1 -0
- package/dist/{chunk-3EOG34QN.cjs → chunk-F24JURN2.cjs} +561 -258
- package/dist/chunk-F24JURN2.cjs.map +1 -0
- package/dist/{chunk-2GKXPZRL.cjs → chunk-FXGXUWSI.cjs} +23 -23
- package/dist/chunk-FXGXUWSI.cjs.map +1 -0
- package/dist/{chunk-Q6FBISNP.js → chunk-G6IW2IX3.js} +601 -350
- package/dist/chunk-G6IW2IX3.js.map +1 -0
- package/dist/{chunk-G2N3KJYJ.js → chunk-Q6QLU6YQ.js} +662 -253
- package/dist/chunk-Q6QLU6YQ.js.map +1 -0
- package/dist/{chunk-C3LVKPWQ.js → chunk-RQYZNW2I.js} +532 -229
- package/dist/chunk-RQYZNW2I.js.map +1 -0
- package/dist/{chunk-XNNNIOJU.js → chunk-UB2ANTWF.js} +5 -5
- package/dist/{chunk-XNNNIOJU.js.map → chunk-UB2ANTWF.js.map} +1 -1
- package/dist/{chunk-C25NWWIH.cjs → chunk-UHKFJBY5.cjs} +605 -350
- package/dist/chunk-UHKFJBY5.cjs.map +1 -0
- package/dist/{chunk-MR32IJQO.cjs → chunk-WZA3DJJH.cjs} +15 -15
- package/dist/chunk-WZA3DJJH.cjs.map +1 -0
- package/dist/index.cjs +36 -36
- package/dist/index.d.cts +35 -30
- package/dist/index.d.ts +35 -30
- package/dist/index.js +5 -5
- package/dist/interaction/index.cjs +319 -352
- package/dist/interaction/index.cjs.map +1 -1
- package/dist/interaction/index.d.cts +3 -3
- package/dist/interaction/index.d.ts +3 -3
- package/dist/interaction/index.js +94 -127
- package/dist/interaction/index.js.map +1 -1
- package/dist/{render-DU4lYbRl.d.ts → render-BDO4S5uF.d.cts} +16 -0
- package/dist/{render-DU4lYbRl.d.cts → render-BDO4S5uF.d.ts} +16 -0
- package/dist/{runtime-DG8X3Fwf.d.cts → runtime-C-C5v9po.d.cts} +2 -2
- package/dist/{runtime-kqD1RS17.d.ts → runtime-lCAfU-1Q.d.ts} +2 -2
- package/dist/{runtimeTypes-vRaHOIHi.d.ts → runtimeTypes-B7p6b1Bi.d.cts} +2 -2
- package/dist/{runtimeTypes-CvjlBZds.d.cts → runtimeTypes-BDA_CfWh.d.ts} +2 -2
- package/dist/stickyflow-diagram.global.js +197 -44
- package/dist/stickyflow-diagram.global.js.map +1 -1
- package/dist/{types-B5jrEEcF.d.cts → types-CZJzycKw.d.cts} +1 -1
- package/dist/{types-B7IkZ0w4.d.ts → types-Dp8JVZLB.d.ts} +1 -1
- package/dist/viewer/index.cjs +9 -9
- package/dist/viewer/index.d.cts +4 -4
- package/dist/viewer/index.d.ts +4 -4
- package/dist/viewer/index.js +4 -4
- package/dist/web-component/index.cjs +6 -6
- package/dist/web-component/index.cjs.map +1 -1
- package/dist/web-component/index.d.cts +2 -2
- package/dist/web-component/index.d.ts +2 -2
- package/dist/web-component/index.js +4 -4
- package/dist/web-component/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-2GKXPZRL.cjs.map +0 -1
- package/dist/chunk-3EOG34QN.cjs.map +0 -1
- package/dist/chunk-AAP24GBG.js.map +0 -1
- package/dist/chunk-C25NWWIH.cjs.map +0 -1
- package/dist/chunk-C3LVKPWQ.js.map +0 -1
- package/dist/chunk-EURX7QT3.cjs.map +0 -1
- package/dist/chunk-G2N3KJYJ.js.map +0 -1
- package/dist/chunk-MR32IJQO.cjs.map +0 -1
- package/dist/chunk-Q6FBISNP.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkUHKFJBY5_cjs = require('./chunk-UHKFJBY5.cjs');
|
|
4
4
|
|
|
5
5
|
// src/runtime/eventing/emitter.ts
|
|
6
6
|
var Emitter = class {
|
|
@@ -41,7 +41,7 @@ function parseContractVersion(svg) {
|
|
|
41
41
|
return match ? Number(match[1]) : null;
|
|
42
42
|
}
|
|
43
43
|
function isContractCompatible(version) {
|
|
44
|
-
return version ===
|
|
44
|
+
return version === chunkUHKFJBY5_cjs.DOM_CONTRACT_VERSION;
|
|
45
45
|
}
|
|
46
46
|
var ROLES = /* @__PURE__ */ new Set([
|
|
47
47
|
"entity",
|
|
@@ -57,7 +57,7 @@ function sceneRole(domRole) {
|
|
|
57
57
|
return domRole === "entity" ? "shape" : domRole;
|
|
58
58
|
}
|
|
59
59
|
function symbolDeclaredBounds(el2) {
|
|
60
|
-
const raw = el2.getAttribute(
|
|
60
|
+
const raw = el2.getAttribute(chunkUHKFJBY5_cjs.SYMBOL_BOUNDS_ATTR);
|
|
61
61
|
if (!raw) {
|
|
62
62
|
return null;
|
|
63
63
|
}
|
|
@@ -65,7 +65,7 @@ function symbolDeclaredBounds(el2) {
|
|
|
65
65
|
return Number.isFinite(x) && Number.isFinite(y) && Number.isFinite(width) && Number.isFinite(height) ? { x, y, width, height } : null;
|
|
66
66
|
}
|
|
67
67
|
function pathGeometryOf(el2) {
|
|
68
|
-
const raw = el2.getAttribute(
|
|
68
|
+
const raw = el2.getAttribute(chunkUHKFJBY5_cjs.PATH_POINTS_ATTR);
|
|
69
69
|
if (!raw) {
|
|
70
70
|
return null;
|
|
71
71
|
}
|
|
@@ -80,12 +80,12 @@ function pathGeometryOf(el2) {
|
|
|
80
80
|
}
|
|
81
81
|
return {
|
|
82
82
|
points,
|
|
83
|
-
tension: Number(el2.getAttribute(
|
|
84
|
-
closed: el2.getAttribute(
|
|
83
|
+
tension: Number(el2.getAttribute(chunkUHKFJBY5_cjs.PATH_TENSION_ATTR)) || 0,
|
|
84
|
+
closed: el2.getAttribute(chunkUHKFJBY5_cjs.PATH_CLOSED_ATTR) === "true"
|
|
85
85
|
};
|
|
86
86
|
}
|
|
87
87
|
function isometricGeometryOf(el2) {
|
|
88
|
-
const raw = el2.getAttribute(
|
|
88
|
+
const raw = el2.getAttribute(chunkUHKFJBY5_cjs.ISOMETRIC_SIZE_ATTR);
|
|
89
89
|
if (raw === null) {
|
|
90
90
|
return null;
|
|
91
91
|
}
|
|
@@ -93,8 +93,8 @@ function isometricGeometryOf(el2) {
|
|
|
93
93
|
if (!Number.isFinite(width) || !Number.isFinite(height) || !Number.isFinite(depth)) {
|
|
94
94
|
return null;
|
|
95
95
|
}
|
|
96
|
-
const cornerRadius = Number(el2.getAttribute(
|
|
97
|
-
const [labelOffsetX, labelOffsetY] = (el2.getAttribute(
|
|
96
|
+
const cornerRadius = Number(el2.getAttribute(chunkUHKFJBY5_cjs.CORNER_RADIUS_ATTR)) || 0;
|
|
97
|
+
const [labelOffsetX, labelOffsetY] = (el2.getAttribute(chunkUHKFJBY5_cjs.ISOMETRIC_LABEL_OFFSET_ATTR) ?? "0,0").split(",").map(Number);
|
|
98
98
|
return {
|
|
99
99
|
width,
|
|
100
100
|
height,
|
|
@@ -298,7 +298,7 @@ function findIsometricApexCandidates(svg, excludeIds) {
|
|
|
298
298
|
}
|
|
299
299
|
const geometry = isometricGeometryOf(node);
|
|
300
300
|
const bounds = geometry?.bounds ?? node.getBBox();
|
|
301
|
-
results.push({ id, apex: { x: bounds.x + (geometry?.depth ?? 0) *
|
|
301
|
+
results.push({ id, apex: { x: bounds.x + (geometry?.depth ?? 0) * chunkUHKFJBY5_cjs.AXIS_COS, y: bounds.y } });
|
|
302
302
|
});
|
|
303
303
|
return results;
|
|
304
304
|
}
|
|
@@ -498,7 +498,7 @@ function updateHalo(halo, d) {
|
|
|
498
498
|
halo.setAttribute("d", d);
|
|
499
499
|
}
|
|
500
500
|
function axisArrowPlacements(object) {
|
|
501
|
-
const faces =
|
|
501
|
+
const faces = chunkUHKFJBY5_cjs.isometricFaces(object);
|
|
502
502
|
const apex = faces.top[0];
|
|
503
503
|
const right = faces.top[1];
|
|
504
504
|
const left = faces.top[3];
|
|
@@ -514,7 +514,7 @@ function reflect(point, through) {
|
|
|
514
514
|
return { x: through.x * 2 - point.x, y: through.y * 2 - point.y };
|
|
515
515
|
}
|
|
516
516
|
function quickDuplicatePlacements(object) {
|
|
517
|
-
const faces =
|
|
517
|
+
const faces = chunkUHKFJBY5_cjs.isometricFaces(object);
|
|
518
518
|
const placements = axisArrowPlacements(object);
|
|
519
519
|
const visualCenter = centroid([
|
|
520
520
|
faces.top[0],
|
|
@@ -713,7 +713,7 @@ function pointHandle(document, x, y, index, svg) {
|
|
|
713
713
|
handle.setAttribute("fill", "#ffffff");
|
|
714
714
|
handle.setAttribute("stroke", RING_COLOR3);
|
|
715
715
|
handle.setAttribute("stroke-width", String(screenPx(svg, POINT_STROKE_WIDTH_PX)));
|
|
716
|
-
handle.setAttribute(
|
|
716
|
+
handle.setAttribute(chunkUHKFJBY5_cjs.PATH_POINT_INDEX_ATTR, String(index));
|
|
717
717
|
handle.style.pointerEvents = "auto";
|
|
718
718
|
handle.style.cursor = "move";
|
|
719
719
|
return handle;
|
|
@@ -838,5 +838,5 @@ exports.updateAlignmentGuides = updateAlignmentGuides;
|
|
|
838
838
|
exports.updateAxisArrowGroup = updateAxisArrowGroup;
|
|
839
839
|
exports.updateHalo = updateHalo;
|
|
840
840
|
exports.updateQuickDuplicateBubbles = updateQuickDuplicateBubbles;
|
|
841
|
-
//# sourceMappingURL=chunk-
|
|
842
|
-
//# sourceMappingURL=chunk-
|
|
841
|
+
//# sourceMappingURL=chunk-WZA3DJJH.cjs.map
|
|
842
|
+
//# sourceMappingURL=chunk-WZA3DJJH.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/runtime/eventing/emitter.ts","../src/runtime/dom/contract.ts","../src/runtime/dom/svgNamespace.ts","../src/runtime/dom/alignmentGuideOverlay.ts","../src/runtime/dom/canvasObjectRoles.ts","../src/runtime/dom/selectionOverlay/dom.ts","../src/runtime/dom/changeOverlay.ts","../src/runtime/dom/domQuery.ts","../src/runtime/dom/selectionOverlay/scale.ts","../src/runtime/dom/selectionOverlay/quickDuplicate.ts","../src/runtime/dom/selectionOverlay/isometric.ts","../src/runtime/dom/selectionOverlay/link.ts","../src/runtime/dom/selectionOverlay/path.ts","../src/runtime/dom/selectionOverlay/resizeHandles.ts","../src/runtime/dom/selectionOverlay/shape.ts"],"names":["DOM_CONTRACT_VERSION","el","SYMBOL_BOUNDS_ATTR","PATH_POINTS_ATTR","PATH_TENSION_ATTR","PATH_CLOSED_ATTR","ISOMETRIC_SIZE_ATTR","CORNER_RADIUS_ATTR","ISOMETRIC_LABEL_OFFSET_ATTR","g","AXIS_COS","isometricFaces","RING_COLOR","HALO_EXTRA_WIDTH_PX","PATH_POINT_INDEX_ATTR"],"mappings":"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","file":"chunk-WZA3DJJH.cjs","sourcesContent":["export type Unsubscribe = () => void;\n\nexport class Emitter<EventMap extends object> {\n private handlers = new Map<keyof EventMap, Set<(event: never) => void>>();\n\n on<T extends keyof EventMap>(name: T, handler: (event: EventMap[T]) => void): Unsubscribe {\n const eventHandlers = this.handlers.get(name) ?? new Set<(event: never) => void>();\n this.handlers.set(name, eventHandlers);\n\n const storedHandler = handler as (event: never) => void;\n eventHandlers.add(storedHandler);\n return () => eventHandlers.delete(storedHandler);\n }\n\n emit<T extends keyof EventMap>(name: T, event: EventMap[T]): void {\n const registered = this.handlers.get(name);\n if (registered === undefined) {\n return;\n }\n\n for (const handler of [...registered]) {\n try {\n (handler as (event: EventMap[T]) => void)(event);\n } catch (error) {\n queueMicrotask(() => {\n throw error;\n });\n }\n }\n }\n\n clear(): void {\n this.handlers.clear();\n }\n}\n","import type { SceneRole } from '../../renderScene/scene';\nimport {\n CORNER_RADIUS_ATTR,\n ISOMETRIC_LABEL_OFFSET_ATTR,\n ISOMETRIC_SIZE_ATTR,\n PATH_CLOSED_ATTR,\n PATH_POINTS_ATTR,\n PATH_TENSION_ATTR,\n SYMBOL_BOUNDS_ATTR,\n} from '../../svg/domContract/attributes';\nimport { DOM_CONTRACT_VERSION } from '../../svg/domContract/version';\nimport type { OwnerRef } from './types';\n\nexport interface AttrElement {\n getAttribute(name: string): string | null;\n closest(selector: string): AttrElement | null;\n}\n\nexport function isCameraGesture(e: { ctrlKey: boolean; metaKey: boolean }): boolean {\n return e.ctrlKey || e.metaKey;\n}\n\nexport function parseContractVersion(svg: string): number | null {\n const match = /data-sf-contract=\"(\\d+)\"/.exec(svg);\n return match ? Number(match[1]) : null;\n}\n\nexport function isContractCompatible(version: number | null): boolean {\n return version === DOM_CONTRACT_VERSION;\n}\n\nconst ROLES: ReadonlySet<string> = new Set([\n 'entity',\n 'link',\n 'frame',\n 'swimlane',\n 'chart',\n 'path',\n 'widget',\n 'isometric',\n]);\n\nfunction sceneRole(domRole: string): SceneRole {\n return domRole === 'entity' ? 'shape' : (domRole as SceneRole);\n}\n\nexport function symbolDeclaredBounds(el: {\n getAttribute(name: string): string | null;\n}): { x: number; y: number; width: number; height: number } | null {\n const raw = el.getAttribute(SYMBOL_BOUNDS_ATTR);\n if (!raw) {\n return null;\n }\n const [x, y, width, height] = raw.split(',').map(Number);\n return Number.isFinite(x) && Number.isFinite(y) && Number.isFinite(width) && Number.isFinite(height)\n ? { x, y, width, height }\n : null;\n}\n\nexport interface PathGeometry {\n points: Array<[number, number]>;\n tension: number;\n closed: boolean;\n}\n\nexport function pathGeometryOf(el: { getAttribute(name: string): string | null }): PathGeometry | null {\n const raw = el.getAttribute(PATH_POINTS_ATTR);\n if (!raw) {\n return null;\n }\n let points: unknown;\n try {\n points = JSON.parse(raw);\n } catch {\n return null;\n }\n if (!Array.isArray(points) || !points.every(point => Array.isArray(point) && point.length === 2)) {\n return null;\n }\n return {\n points: points as Array<[number, number]>,\n tension: Number(el.getAttribute(PATH_TENSION_ATTR)) || 0,\n closed: el.getAttribute(PATH_CLOSED_ATTR) === 'true',\n };\n}\n\nexport interface IsometricGeometry {\n width: number;\n height: number;\n depth: number;\n cornerRadius: number;\n bounds: { x: number; y: number; width: number; height: number } | null;\n labelOffsetX: number;\n labelOffsetY: number;\n}\n\nexport function isometricGeometryOf(el: { getAttribute(name: string): string | null }): IsometricGeometry | null {\n const raw = el.getAttribute(ISOMETRIC_SIZE_ATTR);\n if (raw === null) {\n return null;\n }\n const [width, height, depth] = raw.split(',').map(Number);\n if (!Number.isFinite(width) || !Number.isFinite(height) || !Number.isFinite(depth)) {\n return null;\n }\n const cornerRadius = Number(el.getAttribute(CORNER_RADIUS_ATTR)) || 0;\n const [labelOffsetX, labelOffsetY] = (el.getAttribute(ISOMETRIC_LABEL_OFFSET_ATTR) ?? '0,0').split(',').map(Number);\n return {\n width,\n height,\n depth,\n cornerRadius,\n bounds: symbolDeclaredBounds(el),\n labelOffsetX: Number.isFinite(labelOffsetX) ? labelOffsetX : 0,\n labelOffsetY: Number.isFinite(labelOffsetY) ? labelOffsetY : 0,\n };\n}\n\nexport function resolveOwner(target: AttrElement | null): OwnerRef | null {\n const el = target?.closest('[data-sf-id]');\n if (!el) {\n return null;\n }\n const id = el.getAttribute('data-sf-id');\n const role = el.getAttribute('data-sf-role');\n if (!id || !role || !ROLES.has(role)) {\n return null;\n }\n return {\n role: sceneRole(role),\n id,\n kind: el.getAttribute('data-sf-kind') ?? undefined,\n label: el.getAttribute('aria-label') ?? undefined,\n };\n}\n","export const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n","import { SVG_NAMESPACE } from './svgNamespace';\n\nconst NS = SVG_NAMESPACE;\nconst DASH = '8 4';\n\nexport type GuideLine =\n | { orientation: 'vertical' | 'horizontal'; position: number; from: number; to: number }\n | { orientation: 'segment'; x1: number; y1: number; x2: number; y2: number };\n\nfunction el<K extends keyof SVGElementTagNameMap>(doc: Document, tag: K): SVGElementTagNameMap[K] {\n return doc.createElementNS(NS, tag) as SVGElementTagNameMap[K];\n}\n\nexport function updateAlignmentGuides(svg: SVGSVGElement, guides: GuideLine[], color: string): void {\n svg.querySelectorAll('[data-sf-alignment-guides]').forEach(g => {\n g.remove();\n });\n if (!guides.length) {\n return;\n }\n const doc = svg.ownerDocument;\n const g = el(doc, 'g');\n g.setAttribute('data-sf-alignment-guides', '');\n g.setAttribute('pointer-events', 'none');\n guides.forEach(guide => {\n const line = el(doc, 'line');\n if (guide.orientation === 'segment') {\n line.setAttribute('x1', String(guide.x1));\n line.setAttribute('y1', String(guide.y1));\n line.setAttribute('x2', String(guide.x2));\n line.setAttribute('y2', String(guide.y2));\n } else if (guide.orientation === 'vertical') {\n line.setAttribute('x1', String(guide.position));\n line.setAttribute('x2', String(guide.position));\n line.setAttribute('y1', String(guide.from));\n line.setAttribute('y2', String(guide.to));\n } else {\n line.setAttribute('y1', String(guide.position));\n line.setAttribute('y2', String(guide.position));\n line.setAttribute('x1', String(guide.from));\n line.setAttribute('x2', String(guide.to));\n }\n line.setAttribute('stroke', color);\n line.setAttribute('stroke-width', '1');\n line.setAttribute('stroke-dasharray', DASH);\n line.setAttribute('opacity', '0.8');\n line.setAttribute('vector-effect', 'non-scaling-stroke');\n g.appendChild(line);\n });\n svg.appendChild(g);\n}\n\nexport function clearAlignmentGuides(svg: SVGSVGElement): void {\n svg.querySelectorAll('[data-sf-alignment-guides]').forEach(g => {\n g.remove();\n });\n}\n","import type { SceneRole } from '../../renderScene/scene';\n\nexport const DERIVED_HEIGHT_ROLES: ReadonlySet<SceneRole> = new Set([]);\n","import { SVG_NAMESPACE } from '../svgNamespace';\n\nexport function svgElement<K extends keyof SVGElementTagNameMap>(document: Document, tag: K): SVGElementTagNameMap[K] {\n return document.createElementNS(SVG_NAMESPACE, tag) as SVGElementTagNameMap[K];\n}\n\nexport function selectionOverlayGroup(document: Document, id: string, primary: SVGGraphicsElement): SVGGElement {\n const group = svgElement(document, 'g');\n group.setAttribute('data-sf-selection-overlay', id);\n group.setAttribute('pointer-events', 'none');\n const transform = primary.getAttribute('transform');\n if (transform) {\n group.setAttribute('transform', transform);\n }\n return group;\n}\n","import { svgElement } from './selectionOverlay/dom';\n\nconst OVERLAY_ATTR = 'data-sf-change-overlay';\n\nexport const CHANGE_COLOR = '#f59e0b';\n\nexport const FLASH_DURATION_MS = 1300;\n\nexport const REDUCED_MOTION_DURATION_MS = 400;\n\nfunction changeOverlayGroup(document: Document, id: string, primary: SVGGraphicsElement): SVGGElement {\n const group = svgElement(document, 'g');\n group.setAttribute(OVERLAY_ATTR, id);\n group.setAttribute('pointer-events', 'none');\n const transform = primary.getAttribute('transform');\n if (transform) {\n group.setAttribute('transform', transform);\n }\n return group;\n}\n\nexport function startChangeFade(target: SVGGElement, reducedMotion: boolean): void {\n if (reducedMotion) {\n return;\n }\n target.animate([{ opacity: 1 }, { opacity: 0 }], {\n duration: FLASH_DURATION_MS,\n easing: 'linear',\n fill: 'forwards',\n });\n}\n\nexport function shapeChangeOverlay(\n document: Document,\n primary: SVGGraphicsElement,\n id: string,\n color: string = CHANGE_COLOR,\n): SVGGElement {\n const bounds = primary.getBBox();\n const group = changeOverlayGroup(document, id, primary);\n const ring = svgElement(document, 'rect');\n ring.setAttribute('x', String(bounds.x - 4));\n ring.setAttribute('y', String(bounds.y - 4));\n ring.setAttribute('width', String(bounds.width + 8));\n ring.setAttribute('height', String(bounds.height + 8));\n ring.setAttribute('fill', 'none');\n ring.setAttribute('stroke', color);\n ring.setAttribute('stroke-width', '3');\n group.appendChild(ring);\n return group;\n}\n\nexport function linkChangeOverlay(\n document: Document,\n primary: SVGPathElement,\n id: string,\n color: string = CHANGE_COLOR,\n): SVGGElement {\n const group = changeOverlayGroup(document, id, primary);\n const halo = svgElement(document, 'path');\n halo.setAttribute('d', primary.getAttribute('d') ?? '');\n halo.setAttribute('fill', 'none');\n halo.setAttribute('stroke', color);\n const baseWidth = Number(primary.getAttribute('stroke-width')) || 2;\n halo.setAttribute('stroke-width', String(baseWidth + 6));\n halo.setAttribute('stroke-linecap', 'round');\n halo.setAttribute('opacity', '0.6');\n group.appendChild(halo);\n return group;\n}\n","import { AXIS_COS } from '../../model/isometricObject';\nimport { isometricGeometryOf } from './contract';\n\nexport function findOwnerNode<Node extends SVGGraphicsElement = SVGGraphicsElement>(\n svg: SVGSVGElement,\n id: string,\n predicate: (el: Element) => boolean,\n): Node | null {\n const nodes = svg.querySelectorAll<Node>(`[data-sf-id=\"${CSS.escape(id)}\"]`);\n for (const el of nodes) {\n if (predicate(el)) {\n return el;\n }\n }\n return null;\n}\n\nexport function findAllOwnerNodes(svg: SVGSVGElement, id: string): SVGGraphicsElement[] {\n return Array.from(svg.querySelectorAll<SVGGraphicsElement>(`[data-sf-id=\"${CSS.escape(id)}\"]`));\n}\n\nexport const isPrimary = (el: Element): boolean => el.hasAttribute('data-sf-primary');\nexport const isTextLabel = (el: Element): boolean =>\n el.tagName.toLowerCase() === 'text' && !el.hasAttribute('data-sf-primary');\n\nexport function pointerUserPoint(svg: SVGSVGElement, event: PointerEvent): { x: number; y: number } | null {\n const ctm = svg.getScreenCTM();\n if (!ctm) {\n return null;\n }\n const point = new DOMPoint(event.clientX, event.clientY).matrixTransform(ctm.inverse());\n return { x: point.x, y: point.y };\n}\n\nexport function screenRectOf(el: SVGGraphicsElement): { left: number; top: number; width: number; height: number } {\n const bbox = el.getBBox();\n const ctm = el.getScreenCTM();\n if (!ctm) {\n return { left: 0, top: 0, width: 0, height: 0 };\n }\n const topLeft = new DOMPoint(bbox.x, bbox.y).matrixTransform(ctm);\n const bottomRight = new DOMPoint(bbox.x + bbox.width, bbox.y + bbox.height).matrixTransform(ctm);\n return { left: topLeft.x, top: topLeft.y, width: bottomRight.x - topLeft.x, height: bottomRight.y - topLeft.y };\n}\n\nexport function pxPerUnit(svg: SVGSVGElement): number {\n const rect = svg.getBoundingClientRect();\n const { width: viewBoxWidth, height: viewBoxHeight } = svg.viewBox.baseVal;\n if (rect.width <= 0 || viewBoxWidth <= 0) {\n return 1;\n }\n const horizontal = rect.width / viewBoxWidth;\n return rect.height > 0 && viewBoxHeight > 0 ? Math.min(horizontal, rect.height / viewBoxHeight) : horizontal;\n}\n\nexport function findIsometricApexCandidates(\n svg: SVGSVGElement,\n excludeIds: Set<string>,\n): Array<{ id: string; apex: { x: number; y: number } }> {\n const results: Array<{ id: string; apex: { x: number; y: number } }> = [];\n svg.querySelectorAll<SVGGraphicsElement>('[data-sf-primary][data-sf-id][data-sf-role=\"isometric\"]').forEach(node => {\n const id = node.getAttribute('data-sf-id');\n if (!id || excludeIds.has(id)) {\n return;\n }\n const geometry = isometricGeometryOf(node);\n const bounds = geometry?.bounds ?? node.getBBox();\n results.push({ id, apex: { x: bounds.x + (geometry?.depth ?? 0) * AXIS_COS, y: bounds.y } });\n });\n return results;\n}\n\nexport function findSnapCandidateBounds(\n svg: SVGSVGElement,\n excludeIds: Set<string>,\n): Array<{ x: number; y: number; width: number; height: number }> {\n const results: Array<{ x: number; y: number; width: number; height: number }> = [];\n svg.querySelectorAll<SVGGraphicsElement>('[data-sf-primary][data-sf-id]').forEach(node => {\n const id = node.getAttribute('data-sf-id');\n const role = node.getAttribute('data-sf-role');\n if (!id || role === 'link' || excludeIds.has(id)) {\n return;\n }\n const bbox = node.getBBox();\n results.push({ x: bbox.x, y: bbox.y, width: bbox.width, height: bbox.height });\n });\n return results;\n}\n","import { pxPerUnit } from '../domQuery';\n\nexport function screenPx(svg: SVGSVGElement, px: number): number {\n return px / pxPerUnit(svg);\n}\n","import { symbolDeclaredBounds } from '../contract';\nimport { selectionOverlayGroup, svgElement } from './dom';\nimport { screenPx } from './scale';\nimport type { OverlayBounds, QuickDuplicateDirection } from './types';\n\nexport const BUBBLE_RADIUS_PX = 6;\nconst BUBBLE_MARGIN_PX = 14;\nexport const PLUS_HALF_SIZE_PX = 3;\nexport const BUBBLE_STROKE_WIDTH_PX = 1.5;\n\nfunction quickDuplicatePositions(\n bounds: OverlayBounds,\n offset: number,\n): Array<[number, number, QuickDuplicateDirection]> {\n const centerX = bounds.x + bounds.width / 2;\n const centerY = bounds.y + bounds.height / 2;\n return [\n [centerX, bounds.y - offset, 'top'],\n [bounds.x + bounds.width + offset, centerY, 'right'],\n [centerX, bounds.y + bounds.height + offset, 'bottom'],\n [bounds.x - offset, centerY, 'left'],\n ];\n}\n\nexport function plusPath(x: number, y: number, halfSize: number): string {\n return `M ${x - halfSize} ${y} L ${x + halfSize} ${y} M ${x} ${y - halfSize} L ${x} ${y + halfSize}`;\n}\n\nconst BUBBLE_FILL = '#e8e8e8';\nconst BUBBLE_STROKE = '#ccc';\nconst BUBBLE_HOVER_FILL = '#9b42df';\nconst BUBBLE_HOVER_STROKE = '#7c2fb5';\nconst BUBBLE_HOVER_SCALE = 1.2;\n\nexport function duplicateBubble(\n document: Document,\n x: number,\n y: number,\n radius: number,\n strokeWidth: number,\n direction: string,\n): SVGCircleElement {\n const bubble = svgElement(document, 'circle');\n bubble.setAttribute('cx', String(x));\n bubble.setAttribute('cy', String(y));\n bubble.setAttribute('r', String(radius));\n bubble.setAttribute('fill', BUBBLE_FILL);\n bubble.setAttribute('stroke', BUBBLE_STROKE);\n bubble.setAttribute('stroke-width', String(strokeWidth));\n bubble.setAttribute('data-sf-quick-duplicate', direction);\n bubble.style.pointerEvents = 'auto';\n bubble.style.cursor = 'pointer';\n bubble.style.transition = 'r 120ms ease, fill 120ms ease, stroke 120ms ease';\n bubble.addEventListener('pointerenter', () => {\n bubble.setAttribute('r', String(radius * BUBBLE_HOVER_SCALE));\n bubble.setAttribute('fill', BUBBLE_HOVER_FILL);\n bubble.setAttribute('stroke', BUBBLE_HOVER_STROKE);\n const plus = bubble.nextElementSibling;\n plus?.setAttribute('stroke', '#ffffff');\n });\n bubble.addEventListener('pointerleave', () => {\n bubble.setAttribute('r', String(radius));\n bubble.setAttribute('fill', BUBBLE_FILL);\n bubble.setAttribute('stroke', BUBBLE_STROKE);\n const plus = bubble.nextElementSibling;\n plus?.setAttribute('stroke', '#999');\n });\n return bubble;\n}\n\nexport function duplicatePlus(\n document: Document,\n x: number,\n y: number,\n halfSize: number,\n strokeWidth: number,\n): SVGPathElement {\n const plus = svgElement(document, 'path');\n plus.setAttribute('d', plusPath(x, y, halfSize));\n plus.setAttribute('stroke', '#999');\n plus.setAttribute('stroke-width', String(strokeWidth));\n plus.setAttribute('stroke-linecap', 'round');\n return plus;\n}\n\nexport function quickDuplicateBubbles(\n document: Document,\n primary: SVGGraphicsElement,\n id: string,\n svg: SVGSVGElement,\n): SVGGElement {\n const group = selectionOverlayGroup(document, id, primary);\n const radius = screenPx(svg, BUBBLE_RADIUS_PX);\n const offset = radius + screenPx(svg, BUBBLE_MARGIN_PX);\n const halfSize = screenPx(svg, PLUS_HALF_SIZE_PX);\n const strokeWidth = screenPx(svg, BUBBLE_STROKE_WIDTH_PX);\n const bounds = symbolDeclaredBounds(primary) ?? primary.getBBox();\n for (const [x, y, direction] of quickDuplicatePositions(bounds, offset)) {\n group.append(\n duplicateBubble(document, x, y, radius, strokeWidth, direction),\n duplicatePlus(document, x, y, halfSize, strokeWidth),\n );\n }\n return group;\n}\n\nexport function updateQuickDuplicateBubbles(group: SVGGElement, bounds: OverlayBounds): void {\n const bubbles = group.querySelectorAll('circle[data-sf-quick-duplicate]');\n const firstRadius = Number(bubbles[0]?.getAttribute('r')) || BUBBLE_RADIUS_PX;\n const offset = firstRadius * ((BUBBLE_RADIUS_PX + BUBBLE_MARGIN_PX) / BUBBLE_RADIUS_PX);\n const halfSize = firstRadius * (PLUS_HALF_SIZE_PX / BUBBLE_RADIUS_PX);\n for (const [index, [x, y]] of quickDuplicatePositions(bounds, offset).entries()) {\n const bubble = bubbles[index];\n if (!bubble) {\n continue;\n }\n bubble.setAttribute('cx', String(x));\n bubble.setAttribute('cy', String(y));\n const plus = bubble.nextElementSibling;\n if (plus) {\n plus.setAttribute('d', plusPath(x, y, halfSize));\n }\n }\n}\n","import { isometricFaces } from '../../../model/isometricObject';\nimport { isometricGeometryOf, symbolDeclaredBounds } from '../contract';\nimport { selectionOverlayGroup, svgElement } from './dom';\nimport {\n BUBBLE_RADIUS_PX,\n BUBBLE_STROKE_WIDTH_PX,\n duplicateBubble,\n duplicatePlus,\n PLUS_HALF_SIZE_PX,\n} from './quickDuplicate';\nimport { screenPx } from './scale';\n\nconst RING_COLOR = '#9b42df';\nconst HALO_EXTRA_WIDTH_PX = 2;\nconst SHAFT_WIDTH_PX = 3.25;\nconst HIT_WIDTH_PX = 14;\nconst ARROW_LENGTH_PX = 34;\nconst ARROWHEAD_LENGTH_PX = 10.5;\nconst ARROWHEAD_WIDTH_PX = 8.5;\n\nexport type IsometricAxis = 'width' | 'height' | 'depth';\n\nexport interface Vec {\n x: number;\n y: number;\n}\n\nexport function normalizeVec(v: Vec): Vec {\n const length = Math.hypot(v.x, v.y) || 1;\n return { x: v.x / length, y: v.y / length };\n}\n\nfunction axisCursorUrl(direction: Vec): string {\n const angleDeg = (Math.atan2(direction.y, direction.x) * 180) / Math.PI;\n const svg =\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"26\" height=\"26\" viewBox=\"0 0 26 26\">` +\n `<g transform=\"rotate(${angleDeg} 13 13)\" stroke-linejoin=\"round\" stroke-linecap=\"round\">` +\n `<line x1=\"4\" y1=\"13\" x2=\"22\" y2=\"13\" stroke=\"white\" stroke-width=\"4.5\"/>` +\n `<line x1=\"4\" y1=\"13\" x2=\"22\" y2=\"13\" stroke=\"black\" stroke-width=\"1.6\"/>` +\n `<path d=\"M4 13 L9.5 8.5 L9.5 17.5 Z\" fill=\"black\" stroke=\"white\" stroke-width=\"1.5\"/>` +\n `<path d=\"M22 13 L16.5 8.5 L16.5 17.5 Z\" fill=\"black\" stroke=\"white\" stroke-width=\"1.5\"/>` +\n `</g></svg>`;\n return `url(\"data:image/svg+xml,${encodeURIComponent(svg)}\") 13 13, pointer`;\n}\n\nfunction centroid(points: readonly Vec[]): Vec {\n const sum = points.reduce((acc, p) => ({ x: acc.x + p.x, y: acc.y + p.y }), { x: 0, y: 0 });\n return { x: sum.x / points.length, y: sum.y / points.length };\n}\n\nexport const ISO_HALO_ATTR = 'data-sf-iso-halo';\n\ninterface ArrowElements {\n group: SVGGElement;\n hit: SVGLineElement;\n shaft: SVGLineElement;\n head: SVGPolygonElement;\n}\n\nfunction createAxisArrow(document: Document, axis: IsometricAxis, direction: Vec, svg: SVGSVGElement): ArrowElements {\n const group = svgElement(document, 'g');\n group.setAttribute('data-sf-resize-handle', `iso-${axis}`);\n group.style.cursor = axisCursorUrl(direction);\n\n const hit = svgElement(document, 'line');\n hit.setAttribute('stroke', 'transparent');\n hit.setAttribute('stroke-width', String(screenPx(svg, HIT_WIDTH_PX)));\n hit.setAttribute('stroke-linecap', 'round');\n hit.style.pointerEvents = 'stroke';\n group.appendChild(hit);\n\n const shaft = svgElement(document, 'line');\n shaft.setAttribute('stroke', RING_COLOR);\n shaft.setAttribute('stroke-width', String(screenPx(svg, SHAFT_WIDTH_PX)));\n shaft.setAttribute('stroke-linecap', 'round');\n shaft.style.pointerEvents = 'none';\n group.appendChild(shaft);\n\n const head = svgElement(document, 'polygon');\n head.setAttribute('fill', RING_COLOR);\n head.style.pointerEvents = 'none';\n group.appendChild(head);\n\n return { group, hit, shaft, head };\n}\n\nfunction positionAxisArrow(elements: ArrowElements, origin: Vec, direction: Vec, svg: SVGSVGElement): void {\n const length = screenPx(svg, ARROW_LENGTH_PX);\n const headLength = screenPx(svg, ARROWHEAD_LENGTH_PX);\n const headWidth = screenPx(svg, ARROWHEAD_WIDTH_PX);\n const tip: Vec = { x: origin.x + direction.x * length, y: origin.y + direction.y * length };\n const shaftEnd: Vec = {\n x: origin.x + direction.x * (length - headLength),\n y: origin.y + direction.y * (length - headLength),\n };\n const normal: Vec = { x: -direction.y, y: direction.x };\n const headLeft: Vec = { x: shaftEnd.x + (normal.x * headWidth) / 2, y: shaftEnd.y + (normal.y * headWidth) / 2 };\n const headRight: Vec = { x: shaftEnd.x - (normal.x * headWidth) / 2, y: shaftEnd.y - (normal.y * headWidth) / 2 };\n\n elements.hit.setAttribute('x1', String(origin.x));\n elements.hit.setAttribute('y1', String(origin.y));\n elements.hit.setAttribute('x2', String(tip.x));\n elements.hit.setAttribute('y2', String(tip.y));\n\n elements.shaft.setAttribute('x1', String(origin.x));\n elements.shaft.setAttribute('y1', String(origin.y));\n elements.shaft.setAttribute('x2', String(shaftEnd.x));\n elements.shaft.setAttribute('y2', String(shaftEnd.y));\n\n elements.head.setAttribute('points', `${tip.x},${tip.y} ${headLeft.x},${headLeft.y} ${headRight.x},${headRight.y}`);\n}\n\nfunction axisArrow(\n document: Document,\n origin: Vec,\n direction: Vec,\n axis: IsometricAxis,\n svg: SVGSVGElement,\n): SVGGElement {\n const elements = createAxisArrow(document, axis, direction, svg);\n positionAxisArrow(elements, origin, direction, svg);\n return elements.group;\n}\n\nexport function updateAxisArrowGroup(group: SVGGElement, origin: Vec, direction: Vec, svg: SVGSVGElement): void {\n const hit = group.querySelector('line:nth-child(1)') as SVGLineElement | null;\n const shaft = group.querySelector('line:nth-child(2)') as SVGLineElement | null;\n const head = group.querySelector('polygon') as SVGPolygonElement | null;\n if (!hit || !shaft || !head) {\n return;\n }\n positionAxisArrow({ group, hit, shaft, head }, origin, direction, svg);\n}\n\nexport function updateHalo(halo: SVGPathElement, d: string): void {\n halo.setAttribute('d', d);\n}\n\nexport interface IsometricSize {\n x: number;\n y: number;\n width: number;\n height: number;\n depth: number;\n}\n\nexport function axisArrowPlacements(object: IsometricSize): Record<IsometricAxis, { origin: Vec; direction: Vec }> {\n const faces = isometricFaces(object);\n const apex = faces.top[0];\n const right = faces.top[1];\n const left = faces.top[3];\n const bottom = faces.front[2];\n return {\n width: { origin: centroid(faces.right), direction: normalizeVec({ x: right.x - apex.x, y: right.y - apex.y }) },\n height: { origin: bottom, direction: { x: 0, y: 1 } },\n depth: { origin: centroid(faces.front), direction: normalizeVec({ x: left.x - apex.x, y: left.y - apex.y }) },\n };\n}\n\nconst DUPLICATE_MARGIN_PX = ARROW_LENGTH_PX + BUBBLE_RADIUS_PX + 10;\n\nexport type IsometricQuickDuplicateDirection =\n | 'iso-width-pos'\n | 'iso-width-neg'\n | 'iso-depth-pos'\n | 'iso-depth-neg'\n | 'iso-height-pos'\n | 'iso-height-neg';\n\nfunction reflect(point: Vec, through: Vec): Vec {\n return { x: through.x * 2 - point.x, y: through.y * 2 - point.y };\n}\n\nexport function quickDuplicatePlacements(\n object: IsometricSize,\n): Record<IsometricQuickDuplicateDirection, { origin: Vec; direction: Vec }> {\n const faces = isometricFaces(object);\n const placements = axisArrowPlacements(object);\n const visualCenter = centroid([\n faces.top[0],\n faces.top[1],\n faces.top[2],\n faces.top[3],\n faces.front[2],\n faces.front[3],\n faces.right[2],\n ]);\n return {\n 'iso-width-pos': placements.width,\n 'iso-width-neg': {\n origin: reflect(placements.width.origin, visualCenter),\n direction: { x: -placements.width.direction.x, y: -placements.width.direction.y },\n },\n 'iso-depth-pos': placements.depth,\n 'iso-depth-neg': {\n origin: reflect(placements.depth.origin, visualCenter),\n direction: { x: -placements.depth.direction.x, y: -placements.depth.direction.y },\n },\n 'iso-height-pos': placements.height,\n 'iso-height-neg': {\n origin: reflect(placements.height.origin, visualCenter),\n direction: { x: -placements.height.direction.x, y: -placements.height.direction.y },\n },\n };\n}\n\nexport const ISO_DUPLICATE_BUBBLES_ATTR = 'data-sf-iso-duplicate-bubbles';\n\nconst VISIBLE_FACE_DIRECTIONS: readonly IsometricQuickDuplicateDirection[] = [\n 'iso-height-neg',\n 'iso-depth-pos',\n 'iso-width-pos',\n];\n\nexport function isometricQuickDuplicateBubbles(\n document: Document,\n object: IsometricSize,\n svg: SVGSVGElement,\n): SVGGElement {\n const group = svgElement(document, 'g');\n group.setAttribute(ISO_DUPLICATE_BUBBLES_ATTR, '');\n const radius = screenPx(svg, BUBBLE_RADIUS_PX);\n const margin = screenPx(svg, DUPLICATE_MARGIN_PX);\n const halfSize = screenPx(svg, PLUS_HALF_SIZE_PX);\n const strokeWidth = screenPx(svg, BUBBLE_STROKE_WIDTH_PX);\n const placements = quickDuplicatePlacements(object);\n for (const direction of VISIBLE_FACE_DIRECTIONS) {\n const { origin, direction: dir } = placements[direction];\n const x = origin.x + dir.x * margin;\n const y = origin.y + dir.y * margin;\n group.append(\n duplicateBubble(document, x, y, radius, strokeWidth, direction),\n duplicatePlus(document, x, y, halfSize, strokeWidth),\n );\n }\n return group;\n}\n\nexport function isometricSelectionOverlay(\n document: Document,\n primary: SVGGraphicsElement,\n id: string,\n svg: SVGSVGElement,\n): SVGGElement {\n const bounds = symbolDeclaredBounds(primary) ?? primary.getBBox();\n const geometry = isometricGeometryOf(primary);\n const group = selectionOverlayGroup(document, id, primary);\n\n const halo = svgElement(document, 'path');\n halo.setAttribute(ISO_HALO_ATTR, '');\n halo.setAttribute('d', primary.getAttribute('d') ?? '');\n halo.setAttribute('fill', 'none');\n halo.setAttribute('stroke', RING_COLOR);\n const baseWidth = Number(primary.getAttribute('stroke-width')) || 2;\n halo.setAttribute('stroke-width', String(baseWidth + screenPx(svg, HALO_EXTRA_WIDTH_PX)));\n halo.setAttribute('opacity', '0.6');\n halo.style.pointerEvents = 'none';\n group.appendChild(halo);\n\n const placements = axisArrowPlacements({\n x: bounds.x,\n y: bounds.y,\n width: geometry?.width ?? bounds.width,\n height: geometry?.height ?? bounds.height,\n depth: geometry?.depth ?? 0,\n });\n group.appendChild(axisArrow(document, placements.width.origin, placements.width.direction, 'width', svg));\n group.appendChild(axisArrow(document, placements.height.origin, placements.height.direction, 'height', svg));\n group.appendChild(axisArrow(document, placements.depth.origin, placements.depth.direction, 'depth', svg));\n group.appendChild(\n isometricQuickDuplicateBubbles(\n document,\n {\n x: bounds.x,\n y: bounds.y,\n width: geometry?.width ?? bounds.width,\n height: geometry?.height ?? bounds.height,\n depth: geometry?.depth ?? 0,\n },\n svg,\n ),\n );\n return group;\n}\n","import { selectionOverlayGroup, svgElement } from './dom';\nimport { screenPx } from './scale';\nimport type { LinkEndpoint } from './types';\n\nconst RING_COLOR = '#9b42df';\nconst HALO_EXTRA_WIDTH_PX = 4;\nconst ENDPOINT_RADIUS_PX = 5;\nconst ENDPOINT_STROKE_WIDTH_PX = 1.5;\n\nfunction linkHalo(document: Document, primary: SVGPathElement, svg: SVGSVGElement): SVGPathElement {\n const halo = svgElement(document, 'path');\n halo.setAttribute('d', primary.getAttribute('d') ?? '');\n halo.setAttribute('fill', 'none');\n halo.setAttribute('stroke', RING_COLOR);\n const baseWidth = Number(primary.getAttribute('stroke-width')) || 2;\n halo.setAttribute('stroke-width', String(baseWidth + screenPx(svg, HALO_EXTRA_WIDTH_PX)));\n halo.setAttribute('stroke-linecap', 'round');\n halo.setAttribute('opacity', '0.5');\n return halo;\n}\n\nfunction endpointHandle(\n document: Document,\n primary: SVGPathElement,\n atLength: number,\n endpoint: LinkEndpoint,\n svg: SVGSVGElement,\n): SVGCircleElement {\n const point = primary.getPointAtLength(atLength);\n const handle = svgElement(document, 'circle');\n handle.setAttribute('cx', String(point.x));\n handle.setAttribute('cy', String(point.y));\n handle.setAttribute('r', String(screenPx(svg, ENDPOINT_RADIUS_PX)));\n handle.setAttribute('fill', RING_COLOR);\n handle.setAttribute('stroke', 'white');\n handle.setAttribute('stroke-width', String(screenPx(svg, ENDPOINT_STROKE_WIDTH_PX)));\n handle.setAttribute('data-sf-link-endpoint', endpoint);\n handle.style.pointerEvents = 'auto';\n handle.style.cursor = 'crosshair';\n return handle;\n}\n\nconst SEGMENT_LENGTH_PX = 22;\nconst SEGMENT_THICKNESS_PX = 8;\n\ninterface LinkSegmentData {\n ax: number;\n ay: number;\n bx: number;\n by: number;\n movable: boolean;\n}\n\nfunction readSegments(primary: SVGPathElement): LinkSegmentData[] {\n try {\n return JSON.parse(primary.getAttribute('data-sf-link-segments') ?? '[]') as LinkSegmentData[];\n } catch {\n return [];\n }\n}\n\nfunction segmentHandles(document: Document, primary: SVGPathElement, svg: SVGSVGElement): SVGRectElement[] {\n const handles: SVGRectElement[] = [];\n readSegments(primary).forEach((segment, index) => {\n if (!segment.movable) {\n return;\n }\n const horizontal = Math.abs(segment.bx - segment.ax) > Math.abs(segment.by - segment.ay);\n const length = screenPx(svg, SEGMENT_LENGTH_PX);\n const thickness = screenPx(svg, SEGMENT_THICKNESS_PX);\n const width = horizontal ? length : thickness;\n const height = horizontal ? thickness : length;\n const handle = svgElement(document, 'rect');\n handle.setAttribute('x', String((segment.ax + segment.bx) / 2 - width / 2));\n handle.setAttribute('y', String((segment.ay + segment.by) / 2 - height / 2));\n handle.setAttribute('width', String(width));\n handle.setAttribute('height', String(height));\n handle.setAttribute('rx', String(thickness / 2));\n handle.setAttribute('fill', 'white');\n handle.setAttribute('stroke', RING_COLOR);\n handle.setAttribute('stroke-width', String(screenPx(svg, ENDPOINT_STROKE_WIDTH_PX)));\n handle.setAttribute('data-sf-link-segment', String(index));\n handle.setAttribute('data-sf-link-segment-axis', horizontal ? 'y' : 'x');\n handle.style.pointerEvents = 'auto';\n handle.style.cursor = horizontal ? 'ns-resize' : 'ew-resize';\n handles.push(handle);\n });\n return handles;\n}\n\nexport function linkSelectionOverlay(\n document: Document,\n primary: SVGPathElement,\n id: string,\n svg: SVGSVGElement,\n): SVGGElement {\n const group = selectionOverlayGroup(document, id, primary);\n const length = primary.getTotalLength();\n group.append(\n linkHalo(document, primary, svg),\n ...segmentHandles(document, primary, svg),\n endpointHandle(document, primary, 0, 'from', svg),\n endpointHandle(document, primary, length, 'to', svg),\n );\n return group;\n}\n","import { PATH_POINT_INDEX_ATTR } from '../../../svg/domContract/attributes';\nimport { pathGeometryOf } from '../contract';\nimport { selectionOverlayGroup, svgElement } from './dom';\nimport { screenPx } from './scale';\n\nconst RING_COLOR = '#9b42df';\nconst HALO_EXTRA_WIDTH_PX = 4;\nconst POINT_RADIUS_PX = 5;\nconst POINT_STROKE_WIDTH_PX = 1.5;\n\nexport const PATH_HALO_ATTR = 'data-sf-path-halo';\n\nfunction pathHalo(document: Document, primary: SVGPathElement, svg: SVGSVGElement): SVGPathElement {\n const halo = svgElement(document, 'path');\n halo.setAttribute(PATH_HALO_ATTR, '');\n halo.setAttribute('d', primary.getAttribute('d') ?? '');\n halo.setAttribute('fill', 'none');\n halo.setAttribute('stroke', RING_COLOR);\n const baseWidth = Number(primary.getAttribute('stroke-width')) || 2;\n halo.setAttribute('stroke-width', String(baseWidth + screenPx(svg, HALO_EXTRA_WIDTH_PX)));\n halo.setAttribute('stroke-linecap', 'round');\n halo.setAttribute('opacity', '0.5');\n return halo;\n}\n\nfunction pointHandle(document: Document, x: number, y: number, index: number, svg: SVGSVGElement): SVGCircleElement {\n const handle = svgElement(document, 'circle');\n handle.setAttribute('cx', String(x));\n handle.setAttribute('cy', String(y));\n handle.setAttribute('r', String(screenPx(svg, POINT_RADIUS_PX)));\n handle.setAttribute('fill', '#ffffff');\n handle.setAttribute('stroke', RING_COLOR);\n handle.setAttribute('stroke-width', String(screenPx(svg, POINT_STROKE_WIDTH_PX)));\n handle.setAttribute(PATH_POINT_INDEX_ATTR, String(index));\n handle.style.pointerEvents = 'auto';\n handle.style.cursor = 'move';\n return handle;\n}\n\nexport function pathSelectionOverlay(\n document: Document,\n primary: SVGPathElement,\n id: string,\n svg: SVGSVGElement,\n): SVGGElement {\n const group = selectionOverlayGroup(document, id, primary);\n group.appendChild(pathHalo(document, primary, svg));\n const geometry = pathGeometryOf(primary);\n for (const [index, [x, y]] of (geometry?.points ?? []).entries()) {\n group.appendChild(pointHandle(document, x, y, index, svg));\n }\n return group;\n}\n","import { svgElement } from './dom';\nimport { screenPx } from './scale';\nimport type { OverlayBounds, ResizeHandle } from './types';\n\nconst HANDLE_SIZE_PX = 6;\nconst HANDLE_STROKE_WIDTH_PX = 1;\nconst HANDLE_STROKE = '#992dff';\nconst HANDLE_CURSORS: Record<ResizeHandle, string> = {\n 'top-left': 'nwse-resize',\n top: 'ns-resize',\n 'top-right': 'nesw-resize',\n right: 'ew-resize',\n 'bottom-right': 'nwse-resize',\n bottom: 'ns-resize',\n 'bottom-left': 'nesw-resize',\n left: 'ew-resize',\n};\n\nexport function resizeHandlePositions(bounds: OverlayBounds): Array<[number, number, ResizeHandle]> {\n const centerX = bounds.x + bounds.width / 2;\n const centerY = bounds.y + bounds.height / 2;\n return [\n [bounds.x, bounds.y, 'top-left'],\n [centerX, bounds.y, 'top'],\n [bounds.x + bounds.width, bounds.y, 'top-right'],\n [bounds.x + bounds.width, centerY, 'right'],\n [bounds.x + bounds.width, bounds.y + bounds.height, 'bottom-right'],\n [centerX, bounds.y + bounds.height, 'bottom'],\n [bounds.x, bounds.y + bounds.height, 'bottom-left'],\n [bounds.x, centerY, 'left'],\n ];\n}\n\nconst LOCKED_HEIGHT_HANDLES: ReadonlySet<ResizeHandle> = new Set(['top', 'bottom']);\n\nexport function renderResizeHandles(\n document: Document,\n bounds: OverlayBounds,\n svg: SVGSVGElement,\n lockHeight = false,\n): SVGRectElement[] {\n const size = screenPx(svg, HANDLE_SIZE_PX);\n const strokeWidth = screenPx(svg, HANDLE_STROKE_WIDTH_PX);\n const positions = lockHeight\n ? resizeHandlePositions(bounds).filter(([, , name]) => !LOCKED_HEIGHT_HANDLES.has(name))\n : resizeHandlePositions(bounds);\n return positions.map(([centerX, centerY, name]) => {\n const handle = svgElement(document, 'rect');\n handle.setAttribute('x', String(centerX - size / 2));\n handle.setAttribute('y', String(centerY - size / 2));\n handle.setAttribute('width', String(size));\n handle.setAttribute('height', String(size));\n handle.setAttribute('fill', 'white');\n handle.setAttribute('stroke', HANDLE_STROKE);\n handle.setAttribute('stroke-width', String(strokeWidth));\n handle.setAttribute('data-sf-resize-handle', name);\n handle.style.pointerEvents = 'auto';\n handle.style.cursor = lockHeight ? 'ew-resize' : HANDLE_CURSORS[name];\n return handle;\n });\n}\n","import { symbolDeclaredBounds } from '../contract';\nimport { selectionOverlayGroup, svgElement } from './dom';\nimport { renderResizeHandles } from './resizeHandles';\nimport { screenPx } from './scale';\n\nconst RING_COLOR = '#9b42df';\nconst RING_STROKE_WIDTH_PX = 3;\nconst RING_OFFSET_PX = 1;\n\nexport function shapeSelectionOverlay(\n document: Document,\n primary: SVGGraphicsElement,\n id: string,\n svg: SVGSVGElement,\n lockHeight = false,\n): SVGGElement {\n const bounds = symbolDeclaredBounds(primary) ?? primary.getBBox();\n const group = selectionOverlayGroup(document, id, primary);\n const offset = screenPx(svg, RING_OFFSET_PX);\n const ring = svgElement(document, 'rect');\n ring.setAttribute('x', String(bounds.x - offset));\n ring.setAttribute('y', String(bounds.y - offset));\n ring.setAttribute('width', String(bounds.width + offset * 2));\n ring.setAttribute('height', String(bounds.height + offset * 2));\n ring.setAttribute('fill', 'none');\n ring.setAttribute('stroke', RING_COLOR);\n ring.setAttribute('stroke-width', String(screenPx(svg, RING_STROKE_WIDTH_PX)));\n group.appendChild(ring);\n group.append(...renderResizeHandles(document, bounds, svg, lockHeight));\n return group;\n}\n"]}
|
package/dist/index.cjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkFXGXUWSI_cjs = require('./chunk-FXGXUWSI.cjs');
|
|
4
|
+
var chunk5G3BEXQU_cjs = require('./chunk-5G3BEXQU.cjs');
|
|
5
|
+
var chunkUHKFJBY5_cjs = require('./chunk-UHKFJBY5.cjs');
|
|
6
6
|
|
|
7
7
|
// src/model/shape/supportedTypes.ts
|
|
8
8
|
var SHAPE_TYPES = [
|
|
@@ -75,8 +75,8 @@ function flattenGroups(groups, buckets) {
|
|
|
75
75
|
|
|
76
76
|
// src/adapters/importJson/assembly.ts
|
|
77
77
|
function sflToImportJson(sfl) {
|
|
78
|
-
const state =
|
|
79
|
-
const collected =
|
|
78
|
+
const state = chunkUHKFJBY5_cjs.sflToCanvasState(sfl);
|
|
79
|
+
const collected = chunk5G3BEXQU_cjs.collectCanvasObjects(state);
|
|
80
80
|
const canvas = emptyBuckets();
|
|
81
81
|
const { groupBuckets, bucketFor } = createBucketResolver(indexGroupMembership(state.groups), canvas);
|
|
82
82
|
for (const shape of collected.shapes) {
|
|
@@ -107,127 +107,127 @@ function sflToImportJson(sfl) {
|
|
|
107
107
|
|
|
108
108
|
Object.defineProperty(exports, "buildBindingGraph", {
|
|
109
109
|
enumerable: true,
|
|
110
|
-
get: function () { return
|
|
110
|
+
get: function () { return chunkFXGXUWSI_cjs.buildBindingGraph; }
|
|
111
111
|
});
|
|
112
112
|
Object.defineProperty(exports, "createBindingRuntime", {
|
|
113
113
|
enumerable: true,
|
|
114
|
-
get: function () { return
|
|
114
|
+
get: function () { return chunkFXGXUWSI_cjs.createBindingRuntime; }
|
|
115
115
|
});
|
|
116
116
|
Object.defineProperty(exports, "createDataSource", {
|
|
117
117
|
enumerable: true,
|
|
118
|
-
get: function () { return
|
|
118
|
+
get: function () { return chunkFXGXUWSI_cjs.createDataSource; }
|
|
119
119
|
});
|
|
120
120
|
Object.defineProperty(exports, "interactiveElements", {
|
|
121
121
|
enumerable: true,
|
|
122
|
-
get: function () { return
|
|
122
|
+
get: function () { return chunkFXGXUWSI_cjs.interactiveElements; }
|
|
123
123
|
});
|
|
124
124
|
Object.defineProperty(exports, "renderBound", {
|
|
125
125
|
enumerable: true,
|
|
126
|
-
get: function () { return
|
|
126
|
+
get: function () { return chunkFXGXUWSI_cjs.renderBound; }
|
|
127
127
|
});
|
|
128
128
|
Object.defineProperty(exports, "decodeColor", {
|
|
129
129
|
enumerable: true,
|
|
130
|
-
get: function () { return
|
|
130
|
+
get: function () { return chunk5G3BEXQU_cjs.decodeColor; }
|
|
131
131
|
});
|
|
132
132
|
Object.defineProperty(exports, "decodeShadow", {
|
|
133
133
|
enumerable: true,
|
|
134
|
-
get: function () { return
|
|
134
|
+
get: function () { return chunk5G3BEXQU_cjs.decodeShadow; }
|
|
135
135
|
});
|
|
136
136
|
Object.defineProperty(exports, "defineComponent", {
|
|
137
137
|
enumerable: true,
|
|
138
|
-
get: function () { return
|
|
138
|
+
get: function () { return chunk5G3BEXQU_cjs.defineComponent; }
|
|
139
139
|
});
|
|
140
140
|
Object.defineProperty(exports, "render", {
|
|
141
141
|
enumerable: true,
|
|
142
|
-
get: function () { return
|
|
142
|
+
get: function () { return chunk5G3BEXQU_cjs.render; }
|
|
143
143
|
});
|
|
144
144
|
Object.defineProperty(exports, "renderCanvas", {
|
|
145
145
|
enumerable: true,
|
|
146
|
-
get: function () { return
|
|
146
|
+
get: function () { return chunk5G3BEXQU_cjs.renderCanvas; }
|
|
147
147
|
});
|
|
148
148
|
Object.defineProperty(exports, "sflToRenderInput", {
|
|
149
149
|
enumerable: true,
|
|
150
|
-
get: function () { return
|
|
150
|
+
get: function () { return chunk5G3BEXQU_cjs.sflToRenderInput; }
|
|
151
151
|
});
|
|
152
152
|
Object.defineProperty(exports, "AXIS_COS", {
|
|
153
153
|
enumerable: true,
|
|
154
|
-
get: function () { return
|
|
154
|
+
get: function () { return chunkUHKFJBY5_cjs.AXIS_COS; }
|
|
155
155
|
});
|
|
156
156
|
Object.defineProperty(exports, "AXIS_SIN", {
|
|
157
157
|
enumerable: true,
|
|
158
|
-
get: function () { return
|
|
158
|
+
get: function () { return chunkUHKFJBY5_cjs.AXIS_SIN; }
|
|
159
159
|
});
|
|
160
160
|
Object.defineProperty(exports, "CHART_TYPES", {
|
|
161
161
|
enumerable: true,
|
|
162
|
-
get: function () { return
|
|
162
|
+
get: function () { return chunkUHKFJBY5_cjs.CHART_TYPES; }
|
|
163
163
|
});
|
|
164
164
|
Object.defineProperty(exports, "COMPONENT_CATEGORIES", {
|
|
165
165
|
enumerable: true,
|
|
166
|
-
get: function () { return
|
|
166
|
+
get: function () { return chunkUHKFJBY5_cjs.COMPONENT_CATEGORIES; }
|
|
167
167
|
});
|
|
168
168
|
Object.defineProperty(exports, "DOM_CONTRACT_VERSION", {
|
|
169
169
|
enumerable: true,
|
|
170
|
-
get: function () { return
|
|
170
|
+
get: function () { return chunkUHKFJBY5_cjs.DOM_CONTRACT_VERSION; }
|
|
171
171
|
});
|
|
172
172
|
Object.defineProperty(exports, "canonicalize", {
|
|
173
173
|
enumerable: true,
|
|
174
|
-
get: function () { return
|
|
174
|
+
get: function () { return chunkUHKFJBY5_cjs.canonicalizeSource; }
|
|
175
175
|
});
|
|
176
176
|
Object.defineProperty(exports, "componentTypes", {
|
|
177
177
|
enumerable: true,
|
|
178
|
-
get: function () { return
|
|
178
|
+
get: function () { return chunkUHKFJBY5_cjs.componentTypes; }
|
|
179
179
|
});
|
|
180
180
|
Object.defineProperty(exports, "flattenPath", {
|
|
181
181
|
enumerable: true,
|
|
182
|
-
get: function () { return
|
|
182
|
+
get: function () { return chunkUHKFJBY5_cjs.flattenPath; }
|
|
183
183
|
});
|
|
184
184
|
Object.defineProperty(exports, "getComponentDescriptor", {
|
|
185
185
|
enumerable: true,
|
|
186
|
-
get: function () { return
|
|
186
|
+
get: function () { return chunkUHKFJBY5_cjs.getComponentDescriptor; }
|
|
187
187
|
});
|
|
188
188
|
Object.defineProperty(exports, "isChartObject", {
|
|
189
189
|
enumerable: true,
|
|
190
|
-
get: function () { return
|
|
190
|
+
get: function () { return chunkUHKFJBY5_cjs.isChartObject; }
|
|
191
191
|
});
|
|
192
192
|
Object.defineProperty(exports, "isDimensionObject", {
|
|
193
193
|
enumerable: true,
|
|
194
|
-
get: function () { return
|
|
194
|
+
get: function () { return chunkUHKFJBY5_cjs.isDimensionObject; }
|
|
195
195
|
});
|
|
196
196
|
Object.defineProperty(exports, "isGenericComponent", {
|
|
197
197
|
enumerable: true,
|
|
198
|
-
get: function () { return
|
|
198
|
+
get: function () { return chunkUHKFJBY5_cjs.isGenericComponent; }
|
|
199
199
|
});
|
|
200
200
|
Object.defineProperty(exports, "isIsometricObject", {
|
|
201
201
|
enumerable: true,
|
|
202
|
-
get: function () { return
|
|
202
|
+
get: function () { return chunkUHKFJBY5_cjs.isIsometricObject; }
|
|
203
203
|
});
|
|
204
204
|
Object.defineProperty(exports, "isPathObject", {
|
|
205
205
|
enumerable: true,
|
|
206
|
-
get: function () { return
|
|
206
|
+
get: function () { return chunkUHKFJBY5_cjs.isPathObject; }
|
|
207
207
|
});
|
|
208
208
|
Object.defineProperty(exports, "isSwimlaneObject", {
|
|
209
209
|
enumerable: true,
|
|
210
|
-
get: function () { return
|
|
210
|
+
get: function () { return chunkUHKFJBY5_cjs.isSwimlaneObject; }
|
|
211
211
|
});
|
|
212
212
|
Object.defineProperty(exports, "parse", {
|
|
213
213
|
enumerable: true,
|
|
214
|
-
get: function () { return
|
|
214
|
+
get: function () { return chunkUHKFJBY5_cjs.parseSource; }
|
|
215
215
|
});
|
|
216
216
|
Object.defineProperty(exports, "pathBounds", {
|
|
217
217
|
enumerable: true,
|
|
218
|
-
get: function () { return
|
|
218
|
+
get: function () { return chunkUHKFJBY5_cjs.pathBounds; }
|
|
219
219
|
});
|
|
220
220
|
Object.defineProperty(exports, "pathToSymbol", {
|
|
221
221
|
enumerable: true,
|
|
222
|
-
get: function () { return
|
|
222
|
+
get: function () { return chunkUHKFJBY5_cjs.pathToSymbol; }
|
|
223
223
|
});
|
|
224
224
|
Object.defineProperty(exports, "sflToCanvasState", {
|
|
225
225
|
enumerable: true,
|
|
226
|
-
get: function () { return
|
|
226
|
+
get: function () { return chunkUHKFJBY5_cjs.sflToCanvasState; }
|
|
227
227
|
});
|
|
228
228
|
Object.defineProperty(exports, "symbolToPath", {
|
|
229
229
|
enumerable: true,
|
|
230
|
-
get: function () { return
|
|
230
|
+
get: function () { return chunkUHKFJBY5_cjs.symbolToPath; }
|
|
231
231
|
});
|
|
232
232
|
exports.SHAPE_TYPES = SHAPE_TYPES;
|
|
233
233
|
exports.sflToImportJson = sflToImportJson;
|
package/dist/index.d.cts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { C as Component, G as GenericComponent, a as ComponentDescriptor, P as PathPoint, b as Point, R as RollingNumberComponent, c as RollingNumberComponentStyle, d as RulerComponent, T as TickScaleComponent, I as IsometricFace, D as Diagnostic, S as Shader, e as RenderInput, f as ShadowStyle, L as LinkStyle, g as Shape, h as Link, F as Frame, i as Swimlane, j as IsometricObject, k as FreeformPath, l as Chart } from './render-
|
|
2
|
-
export { B as Bounds, m as CHART_TYPES, n as ChartAxis, o as ChartRamp, p as ChartSeries, q as ChartType, r as ComponentDefinition, s as ComponentGroup, t as ComponentInteraction, u as ComponentPropertyDescriptor, v as ComponentSceneContext, w as ComponentSize, x as ComponentValue, y as ComponentValueDescriptor, z as ComponentValueType, A as Dimension, M as MeasureTextFactory, E as RenderDiagnostic, H as RenderNode, J as RenderOptions, K as RenderResult, N as RenderScene, O as SceneRole, Q as ShaderParameter, U as ShapeType, V as TextMetrics, W as defineComponent, X as render, Y as renderCanvas } from './render-
|
|
3
|
-
import { S as SflDocument, o as Side } from './runtimeTypes-
|
|
4
|
-
export { B as BindingDiagnostic, a as BindingGraph, b as BindingRuntime, c as BindingRuntimeOptions, d as BindingTarget, e as BindingType, f as BindingValue, g as BoundAssignment, h as BoundHandler, i as BoundProperty, j as DataSource, D as DataSourceContract, E as ElementInfo, k as ElementState, I as InteractiveElements, M as MutableDataSource, l as buildBindingGraph, m as createDataSource, n as interactiveElements } from './runtimeTypes-
|
|
5
|
-
export { R as RenderBoundOptions, c as createBindingRuntime, r as renderBound } from './runtime-
|
|
1
|
+
import { C as Component, G as GenericComponent, a as ComponentDescriptor, P as PathPoint, b as Point, R as RollingNumberComponent, c as RollingNumberComponentStyle, d as RulerComponent, T as TickScaleComponent, I as IsometricFace, D as Diagnostic, S as Shader, e as RenderInput, f as ShadowStyle, L as LinkStyle, g as Shape, h as Link, F as Frame, i as Swimlane, j as IsometricObject, k as FreeformPath, l as Chart } from './render-BDO4S5uF.cjs';
|
|
2
|
+
export { B as Bounds, m as CHART_TYPES, n as ChartAxis, o as ChartRamp, p as ChartSeries, q as ChartType, r as ComponentDefinition, s as ComponentGroup, t as ComponentInteraction, u as ComponentPropertyDescriptor, v as ComponentSceneContext, w as ComponentSize, x as ComponentValue, y as ComponentValueDescriptor, z as ComponentValueType, A as Dimension, M as MeasureTextFactory, E as RenderDiagnostic, H as RenderNode, J as RenderOptions, K as RenderResult, N as RenderScene, O as SceneRole, Q as ShaderParameter, U as ShapeType, V as TextMetrics, W as defineComponent, X as render, Y as renderCanvas } from './render-BDO4S5uF.cjs';
|
|
3
|
+
import { S as SflDocument, o as Side } from './runtimeTypes-B7p6b1Bi.cjs';
|
|
4
|
+
export { B as BindingDiagnostic, a as BindingGraph, b as BindingRuntime, c as BindingRuntimeOptions, d as BindingTarget, e as BindingType, f as BindingValue, g as BoundAssignment, h as BoundHandler, i as BoundProperty, j as DataSource, D as DataSourceContract, E as ElementInfo, k as ElementState, I as InteractiveElements, M as MutableDataSource, l as buildBindingGraph, m as createDataSource, n as interactiveElements } from './runtimeTypes-B7p6b1Bi.cjs';
|
|
5
|
+
export { R as RenderBoundOptions, c as createBindingRuntime, r as renderBound } from './runtime-C-C5v9po.cjs';
|
|
6
6
|
|
|
7
7
|
declare const COMPONENT_CATEGORIES: readonly [{
|
|
8
8
|
readonly id: "action";
|
|
@@ -199,11 +199,6 @@ interface SflChartSeries {
|
|
|
199
199
|
labelOffsetX?: number;
|
|
200
200
|
labelOffsetY?: number;
|
|
201
201
|
}
|
|
202
|
-
type SflChartObject = SflCanvasObject & {
|
|
203
|
-
objectType: 'chart';
|
|
204
|
-
chart: SflChartData;
|
|
205
|
-
};
|
|
206
|
-
declare function isChartObject(canvasObject: SflCanvasObject): canvasObject is SflChartObject;
|
|
207
202
|
|
|
208
203
|
interface SflDimensionData {
|
|
209
204
|
start: {
|
|
@@ -217,11 +212,6 @@ interface SflDimensionData {
|
|
|
217
212
|
offset: number;
|
|
218
213
|
unit?: string;
|
|
219
214
|
}
|
|
220
|
-
type SflDimensionObject = SflCanvasObject & {
|
|
221
|
-
objectType: 'dimension';
|
|
222
|
-
dimension: SflDimensionData;
|
|
223
|
-
};
|
|
224
|
-
declare function isDimensionObject(canvasObject: SflCanvasObject): canvasObject is SflDimensionObject;
|
|
225
215
|
|
|
226
216
|
interface SflIsometricData {
|
|
227
217
|
depth: number;
|
|
@@ -229,11 +219,6 @@ interface SflIsometricData {
|
|
|
229
219
|
footprint?: Array<[number, number]>;
|
|
230
220
|
form: 'box' | 'sphere';
|
|
231
221
|
}
|
|
232
|
-
type SflIsometricObject = SflCanvasObject & {
|
|
233
|
-
objectType: 'isometric';
|
|
234
|
-
isometric: SflIsometricData;
|
|
235
|
-
};
|
|
236
|
-
declare function isIsometricObject(canvasObject: SflCanvasObject): canvasObject is SflIsometricObject;
|
|
237
222
|
|
|
238
223
|
interface SflPathData {
|
|
239
224
|
points: Array<{
|
|
@@ -247,11 +232,6 @@ interface SflPathData {
|
|
|
247
232
|
closed?: boolean;
|
|
248
233
|
value?: number;
|
|
249
234
|
}
|
|
250
|
-
type SflPathObject = SflCanvasObject & {
|
|
251
|
-
objectType: 'path';
|
|
252
|
-
path: SflPathData;
|
|
253
|
-
};
|
|
254
|
-
declare function isPathObject(canvasObject: SflCanvasObject): canvasObject is SflPathObject;
|
|
255
235
|
|
|
256
236
|
interface SflSwimlaneData {
|
|
257
237
|
orientation: 'horizontal' | 'vertical';
|
|
@@ -262,11 +242,6 @@ interface SflSwimlaneData {
|
|
|
262
242
|
color?: string;
|
|
263
243
|
}>;
|
|
264
244
|
}
|
|
265
|
-
type SflSwimlaneObject = SflCanvasObject & {
|
|
266
|
-
objectType: 'swimlane';
|
|
267
|
-
swimlane: SflSwimlaneData;
|
|
268
|
-
};
|
|
269
|
-
declare function isSwimlaneObject(canvasObject: SflCanvasObject): canvasObject is SflSwimlaneObject;
|
|
270
245
|
|
|
271
246
|
type SflCanvasObjectType = 'shape' | 'frame' | 'swimlane' | 'path' | 'chart' | 'component' | 'isometric' | 'dimension';
|
|
272
247
|
interface SflSymbolDefinition {
|
|
@@ -324,6 +299,36 @@ interface SflGroupOut {
|
|
|
324
299
|
parentFrameId?: string;
|
|
325
300
|
}
|
|
326
301
|
|
|
302
|
+
type SflChartObject = SflCanvasObject & {
|
|
303
|
+
objectType: 'chart';
|
|
304
|
+
chart: SflChartData;
|
|
305
|
+
};
|
|
306
|
+
declare function isChartObject(canvasObject: SflCanvasObject): canvasObject is SflChartObject;
|
|
307
|
+
|
|
308
|
+
type SflDimensionObject = SflCanvasObject & {
|
|
309
|
+
objectType: 'dimension';
|
|
310
|
+
dimension: SflDimensionData;
|
|
311
|
+
};
|
|
312
|
+
declare function isDimensionObject(canvasObject: SflCanvasObject): canvasObject is SflDimensionObject;
|
|
313
|
+
|
|
314
|
+
type SflIsometricObject = SflCanvasObject & {
|
|
315
|
+
objectType: 'isometric';
|
|
316
|
+
isometric: SflIsometricData;
|
|
317
|
+
};
|
|
318
|
+
declare function isIsometricObject(canvasObject: SflCanvasObject): canvasObject is SflIsometricObject;
|
|
319
|
+
|
|
320
|
+
type SflPathObject = SflCanvasObject & {
|
|
321
|
+
objectType: 'path';
|
|
322
|
+
path: SflPathData;
|
|
323
|
+
};
|
|
324
|
+
declare function isPathObject(canvasObject: SflCanvasObject): canvasObject is SflPathObject;
|
|
325
|
+
|
|
326
|
+
type SflSwimlaneObject = SflCanvasObject & {
|
|
327
|
+
objectType: 'swimlane';
|
|
328
|
+
swimlane: SflSwimlaneData;
|
|
329
|
+
};
|
|
330
|
+
declare function isSwimlaneObject(canvasObject: SflCanvasObject): canvasObject is SflSwimlaneObject;
|
|
331
|
+
|
|
327
332
|
type SflDiagnostic = Diagnostic;
|
|
328
333
|
interface SflCanvasState {
|
|
329
334
|
canvasObjects: SflCanvasObject[];
|