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.
Files changed (66) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +1 -1
  3. package/dist/binding/index.cjs +9 -9
  4. package/dist/binding/index.d.cts +4 -4
  5. package/dist/binding/index.d.ts +4 -4
  6. package/dist/binding/index.js +3 -3
  7. package/dist/{chunk-EURX7QT3.cjs → chunk-5G3BEXQU.cjs} +1300 -891
  8. package/dist/chunk-5G3BEXQU.cjs.map +1 -0
  9. package/dist/{chunk-AAP24GBG.js → chunk-BFQWCOEC.js} +3 -3
  10. package/dist/chunk-BFQWCOEC.js.map +1 -0
  11. package/dist/{chunk-3EOG34QN.cjs → chunk-F24JURN2.cjs} +561 -258
  12. package/dist/chunk-F24JURN2.cjs.map +1 -0
  13. package/dist/{chunk-2GKXPZRL.cjs → chunk-FXGXUWSI.cjs} +23 -23
  14. package/dist/chunk-FXGXUWSI.cjs.map +1 -0
  15. package/dist/{chunk-Q6FBISNP.js → chunk-G6IW2IX3.js} +601 -350
  16. package/dist/chunk-G6IW2IX3.js.map +1 -0
  17. package/dist/{chunk-G2N3KJYJ.js → chunk-Q6QLU6YQ.js} +662 -253
  18. package/dist/chunk-Q6QLU6YQ.js.map +1 -0
  19. package/dist/{chunk-C3LVKPWQ.js → chunk-RQYZNW2I.js} +532 -229
  20. package/dist/chunk-RQYZNW2I.js.map +1 -0
  21. package/dist/{chunk-XNNNIOJU.js → chunk-UB2ANTWF.js} +5 -5
  22. package/dist/{chunk-XNNNIOJU.js.map → chunk-UB2ANTWF.js.map} +1 -1
  23. package/dist/{chunk-C25NWWIH.cjs → chunk-UHKFJBY5.cjs} +605 -350
  24. package/dist/chunk-UHKFJBY5.cjs.map +1 -0
  25. package/dist/{chunk-MR32IJQO.cjs → chunk-WZA3DJJH.cjs} +15 -15
  26. package/dist/chunk-WZA3DJJH.cjs.map +1 -0
  27. package/dist/index.cjs +36 -36
  28. package/dist/index.d.cts +35 -30
  29. package/dist/index.d.ts +35 -30
  30. package/dist/index.js +5 -5
  31. package/dist/interaction/index.cjs +319 -352
  32. package/dist/interaction/index.cjs.map +1 -1
  33. package/dist/interaction/index.d.cts +3 -3
  34. package/dist/interaction/index.d.ts +3 -3
  35. package/dist/interaction/index.js +94 -127
  36. package/dist/interaction/index.js.map +1 -1
  37. package/dist/{render-DU4lYbRl.d.ts → render-BDO4S5uF.d.cts} +16 -0
  38. package/dist/{render-DU4lYbRl.d.cts → render-BDO4S5uF.d.ts} +16 -0
  39. package/dist/{runtime-DG8X3Fwf.d.cts → runtime-C-C5v9po.d.cts} +2 -2
  40. package/dist/{runtime-kqD1RS17.d.ts → runtime-lCAfU-1Q.d.ts} +2 -2
  41. package/dist/{runtimeTypes-vRaHOIHi.d.ts → runtimeTypes-B7p6b1Bi.d.cts} +2 -2
  42. package/dist/{runtimeTypes-CvjlBZds.d.cts → runtimeTypes-BDA_CfWh.d.ts} +2 -2
  43. package/dist/stickyflow-diagram.global.js +197 -44
  44. package/dist/stickyflow-diagram.global.js.map +1 -1
  45. package/dist/{types-B5jrEEcF.d.cts → types-CZJzycKw.d.cts} +1 -1
  46. package/dist/{types-B7IkZ0w4.d.ts → types-Dp8JVZLB.d.ts} +1 -1
  47. package/dist/viewer/index.cjs +9 -9
  48. package/dist/viewer/index.d.cts +4 -4
  49. package/dist/viewer/index.d.ts +4 -4
  50. package/dist/viewer/index.js +4 -4
  51. package/dist/web-component/index.cjs +6 -6
  52. package/dist/web-component/index.cjs.map +1 -1
  53. package/dist/web-component/index.d.cts +2 -2
  54. package/dist/web-component/index.d.ts +2 -2
  55. package/dist/web-component/index.js +4 -4
  56. package/dist/web-component/index.js.map +1 -1
  57. package/package.json +1 -1
  58. package/dist/chunk-2GKXPZRL.cjs.map +0 -1
  59. package/dist/chunk-3EOG34QN.cjs.map +0 -1
  60. package/dist/chunk-AAP24GBG.js.map +0 -1
  61. package/dist/chunk-C25NWWIH.cjs.map +0 -1
  62. package/dist/chunk-C3LVKPWQ.js.map +0 -1
  63. package/dist/chunk-EURX7QT3.cjs.map +0 -1
  64. package/dist/chunk-G2N3KJYJ.js.map +0 -1
  65. package/dist/chunk-MR32IJQO.cjs.map +0 -1
  66. package/dist/chunk-Q6FBISNP.js.map +0 -1
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkC25NWWIH_cjs = require('./chunk-C25NWWIH.cjs');
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 === chunkC25NWWIH_cjs.DOM_CONTRACT_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(chunkC25NWWIH_cjs.SYMBOL_BOUNDS_ATTR);
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(chunkC25NWWIH_cjs.PATH_POINTS_ATTR);
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(chunkC25NWWIH_cjs.PATH_TENSION_ATTR)) || 0,
84
- closed: el2.getAttribute(chunkC25NWWIH_cjs.PATH_CLOSED_ATTR) === "true"
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(chunkC25NWWIH_cjs.ISOMETRIC_SIZE_ATTR);
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(chunkC25NWWIH_cjs.CORNER_RADIUS_ATTR)) || 0;
97
- const [labelOffsetX, labelOffsetY] = (el2.getAttribute(chunkC25NWWIH_cjs.ISOMETRIC_LABEL_OFFSET_ATTR) ?? "0,0").split(",").map(Number);
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) * chunkC25NWWIH_cjs.AXIS_COS, y: bounds.y } });
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 = chunkC25NWWIH_cjs.isometricFaces(object);
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 = chunkC25NWWIH_cjs.isometricFaces(object);
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(chunkC25NWWIH_cjs.PATH_POINT_INDEX_ATTR, String(index));
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-MR32IJQO.cjs.map
842
- //# sourceMappingURL=chunk-MR32IJQO.cjs.map
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 chunk2GKXPZRL_cjs = require('./chunk-2GKXPZRL.cjs');
4
- var chunkEURX7QT3_cjs = require('./chunk-EURX7QT3.cjs');
5
- var chunkC25NWWIH_cjs = require('./chunk-C25NWWIH.cjs');
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 = chunkC25NWWIH_cjs.sflToCanvasState(sfl);
79
- const collected = chunkEURX7QT3_cjs.collectCanvasObjects(state);
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 chunk2GKXPZRL_cjs.buildBindingGraph; }
110
+ get: function () { return chunkFXGXUWSI_cjs.buildBindingGraph; }
111
111
  });
112
112
  Object.defineProperty(exports, "createBindingRuntime", {
113
113
  enumerable: true,
114
- get: function () { return chunk2GKXPZRL_cjs.createBindingRuntime; }
114
+ get: function () { return chunkFXGXUWSI_cjs.createBindingRuntime; }
115
115
  });
116
116
  Object.defineProperty(exports, "createDataSource", {
117
117
  enumerable: true,
118
- get: function () { return chunk2GKXPZRL_cjs.createDataSource; }
118
+ get: function () { return chunkFXGXUWSI_cjs.createDataSource; }
119
119
  });
120
120
  Object.defineProperty(exports, "interactiveElements", {
121
121
  enumerable: true,
122
- get: function () { return chunk2GKXPZRL_cjs.interactiveElements; }
122
+ get: function () { return chunkFXGXUWSI_cjs.interactiveElements; }
123
123
  });
124
124
  Object.defineProperty(exports, "renderBound", {
125
125
  enumerable: true,
126
- get: function () { return chunk2GKXPZRL_cjs.renderBound; }
126
+ get: function () { return chunkFXGXUWSI_cjs.renderBound; }
127
127
  });
128
128
  Object.defineProperty(exports, "decodeColor", {
129
129
  enumerable: true,
130
- get: function () { return chunkEURX7QT3_cjs.decodeColor; }
130
+ get: function () { return chunk5G3BEXQU_cjs.decodeColor; }
131
131
  });
132
132
  Object.defineProperty(exports, "decodeShadow", {
133
133
  enumerable: true,
134
- get: function () { return chunkEURX7QT3_cjs.decodeShadow; }
134
+ get: function () { return chunk5G3BEXQU_cjs.decodeShadow; }
135
135
  });
136
136
  Object.defineProperty(exports, "defineComponent", {
137
137
  enumerable: true,
138
- get: function () { return chunkEURX7QT3_cjs.defineComponent; }
138
+ get: function () { return chunk5G3BEXQU_cjs.defineComponent; }
139
139
  });
140
140
  Object.defineProperty(exports, "render", {
141
141
  enumerable: true,
142
- get: function () { return chunkEURX7QT3_cjs.render; }
142
+ get: function () { return chunk5G3BEXQU_cjs.render; }
143
143
  });
144
144
  Object.defineProperty(exports, "renderCanvas", {
145
145
  enumerable: true,
146
- get: function () { return chunkEURX7QT3_cjs.renderCanvas; }
146
+ get: function () { return chunk5G3BEXQU_cjs.renderCanvas; }
147
147
  });
148
148
  Object.defineProperty(exports, "sflToRenderInput", {
149
149
  enumerable: true,
150
- get: function () { return chunkEURX7QT3_cjs.sflToRenderInput; }
150
+ get: function () { return chunk5G3BEXQU_cjs.sflToRenderInput; }
151
151
  });
152
152
  Object.defineProperty(exports, "AXIS_COS", {
153
153
  enumerable: true,
154
- get: function () { return chunkC25NWWIH_cjs.AXIS_COS; }
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 chunkC25NWWIH_cjs.AXIS_SIN; }
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 chunkC25NWWIH_cjs.CHART_TYPES; }
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 chunkC25NWWIH_cjs.COMPONENT_CATEGORIES; }
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 chunkC25NWWIH_cjs.DOM_CONTRACT_VERSION; }
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 chunkC25NWWIH_cjs.canonicalizeSource; }
174
+ get: function () { return chunkUHKFJBY5_cjs.canonicalizeSource; }
175
175
  });
176
176
  Object.defineProperty(exports, "componentTypes", {
177
177
  enumerable: true,
178
- get: function () { return chunkC25NWWIH_cjs.componentTypes; }
178
+ get: function () { return chunkUHKFJBY5_cjs.componentTypes; }
179
179
  });
180
180
  Object.defineProperty(exports, "flattenPath", {
181
181
  enumerable: true,
182
- get: function () { return chunkC25NWWIH_cjs.flattenPath; }
182
+ get: function () { return chunkUHKFJBY5_cjs.flattenPath; }
183
183
  });
184
184
  Object.defineProperty(exports, "getComponentDescriptor", {
185
185
  enumerable: true,
186
- get: function () { return chunkC25NWWIH_cjs.getComponentDescriptor; }
186
+ get: function () { return chunkUHKFJBY5_cjs.getComponentDescriptor; }
187
187
  });
188
188
  Object.defineProperty(exports, "isChartObject", {
189
189
  enumerable: true,
190
- get: function () { return chunkC25NWWIH_cjs.isChartObject; }
190
+ get: function () { return chunkUHKFJBY5_cjs.isChartObject; }
191
191
  });
192
192
  Object.defineProperty(exports, "isDimensionObject", {
193
193
  enumerable: true,
194
- get: function () { return chunkC25NWWIH_cjs.isDimensionObject; }
194
+ get: function () { return chunkUHKFJBY5_cjs.isDimensionObject; }
195
195
  });
196
196
  Object.defineProperty(exports, "isGenericComponent", {
197
197
  enumerable: true,
198
- get: function () { return chunkC25NWWIH_cjs.isGenericComponent; }
198
+ get: function () { return chunkUHKFJBY5_cjs.isGenericComponent; }
199
199
  });
200
200
  Object.defineProperty(exports, "isIsometricObject", {
201
201
  enumerable: true,
202
- get: function () { return chunkC25NWWIH_cjs.isIsometricObject; }
202
+ get: function () { return chunkUHKFJBY5_cjs.isIsometricObject; }
203
203
  });
204
204
  Object.defineProperty(exports, "isPathObject", {
205
205
  enumerable: true,
206
- get: function () { return chunkC25NWWIH_cjs.isPathObject; }
206
+ get: function () { return chunkUHKFJBY5_cjs.isPathObject; }
207
207
  });
208
208
  Object.defineProperty(exports, "isSwimlaneObject", {
209
209
  enumerable: true,
210
- get: function () { return chunkC25NWWIH_cjs.isSwimlaneObject; }
210
+ get: function () { return chunkUHKFJBY5_cjs.isSwimlaneObject; }
211
211
  });
212
212
  Object.defineProperty(exports, "parse", {
213
213
  enumerable: true,
214
- get: function () { return chunkC25NWWIH_cjs.parseSource; }
214
+ get: function () { return chunkUHKFJBY5_cjs.parseSource; }
215
215
  });
216
216
  Object.defineProperty(exports, "pathBounds", {
217
217
  enumerable: true,
218
- get: function () { return chunkC25NWWIH_cjs.pathBounds; }
218
+ get: function () { return chunkUHKFJBY5_cjs.pathBounds; }
219
219
  });
220
220
  Object.defineProperty(exports, "pathToSymbol", {
221
221
  enumerable: true,
222
- get: function () { return chunkC25NWWIH_cjs.pathToSymbol; }
222
+ get: function () { return chunkUHKFJBY5_cjs.pathToSymbol; }
223
223
  });
224
224
  Object.defineProperty(exports, "sflToCanvasState", {
225
225
  enumerable: true,
226
- get: function () { return chunkC25NWWIH_cjs.sflToCanvasState; }
226
+ get: function () { return chunkUHKFJBY5_cjs.sflToCanvasState; }
227
227
  });
228
228
  Object.defineProperty(exports, "symbolToPath", {
229
229
  enumerable: true,
230
- get: function () { return chunkC25NWWIH_cjs.symbolToPath; }
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-DU4lYbRl.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-DU4lYbRl.cjs';
3
- import { S as SflDocument, o as Side } from './runtimeTypes-CvjlBZds.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-CvjlBZds.cjs';
5
- export { R as RenderBoundOptions, c as createBindingRuntime, r as renderBound } from './runtime-DG8X3Fwf.cjs';
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[];