stickyflow 0.5.0 → 0.7.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 (62) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/dist/binding/index.cjs +9 -9
  3. package/dist/binding/index.d.cts +4 -4
  4. package/dist/binding/index.d.ts +4 -4
  5. package/dist/binding/index.js +3 -3
  6. package/dist/{chunk-ZMLQIMJK.cjs → chunk-A73UJ5AQ.cjs} +1537 -738
  7. package/dist/chunk-A73UJ5AQ.cjs.map +1 -0
  8. package/dist/{chunk-VK3T6O5Z.cjs → chunk-BUOWM3LC.cjs} +745 -62
  9. package/dist/chunk-BUOWM3LC.cjs.map +1 -0
  10. package/dist/{chunk-L3VJXZFD.cjs → chunk-EKAWJFJQ.cjs} +15 -15
  11. package/dist/{chunk-L3VJXZFD.cjs.map → chunk-EKAWJFJQ.cjs.map} +1 -1
  12. package/dist/{chunk-BODZN3ZI.js → chunk-JCRPLPKV.js} +156 -23
  13. package/dist/chunk-JCRPLPKV.js.map +1 -0
  14. package/dist/{chunk-IEHE6WVN.js → chunk-JQK4IGXJ.js} +489 -51
  15. package/dist/chunk-JQK4IGXJ.js.map +1 -0
  16. package/dist/{chunk-XY2GZUHC.cjs → chunk-KXYSO6GC.cjs} +498 -50
  17. package/dist/chunk-KXYSO6GC.cjs.map +1 -0
  18. package/dist/{chunk-G7NRK5AG.js → chunk-MUKIGLR5.js} +717 -34
  19. package/dist/chunk-MUKIGLR5.js.map +1 -0
  20. package/dist/{chunk-TWDLOXRM.cjs → chunk-OWNVXKXN.cjs} +170 -37
  21. package/dist/chunk-OWNVXKXN.cjs.map +1 -0
  22. package/dist/{chunk-LTGF5OHP.js → chunk-SDMQRSRW.js} +941 -143
  23. package/dist/chunk-SDMQRSRW.js.map +1 -0
  24. package/dist/{chunk-7VW2XKVB.js → chunk-ZNHYW47T.js} +3 -3
  25. package/dist/{chunk-7VW2XKVB.js.map → chunk-ZNHYW47T.js.map} +1 -1
  26. package/dist/index.cjs +57 -29
  27. package/dist/index.d.cts +80 -7
  28. package/dist/index.d.ts +80 -7
  29. package/dist/index.js +5 -5
  30. package/dist/interaction/index.cjs +245 -235
  31. package/dist/interaction/index.cjs.map +1 -1
  32. package/dist/interaction/index.d.cts +3 -2
  33. package/dist/interaction/index.d.ts +3 -2
  34. package/dist/interaction/index.js +17 -7
  35. package/dist/interaction/index.js.map +1 -1
  36. package/dist/{render-CgX_y15a.d.ts → render-BU2uYzjG.d.cts} +40 -16
  37. package/dist/{render-CgX_y15a.d.cts → render-BU2uYzjG.d.ts} +40 -16
  38. package/dist/{runtime-reWgr7MP.d.cts → runtime-B7KiTmn8.d.cts} +2 -2
  39. package/dist/{runtime-DnUxca3Y.d.ts → runtime-BPzyD-Nd.d.ts} +2 -2
  40. package/dist/{runtimeTypes-D60w6nyF.d.cts → runtimeTypes-BIP70z72.d.cts} +3 -2
  41. package/dist/{runtimeTypes-CEBGueYM.d.ts → runtimeTypes-DalvhScn.d.ts} +3 -2
  42. package/dist/stickyflow-diagram.global.js +387 -36
  43. package/dist/stickyflow-diagram.global.js.map +1 -1
  44. package/dist/{types-DYLC_lsk.d.ts → types-DMWs27Hn.d.ts} +1 -1
  45. package/dist/{types-DvhMpqrL.d.cts → types-D_2NZ6lL.d.cts} +1 -1
  46. package/dist/viewer/index.cjs +9 -9
  47. package/dist/viewer/index.d.cts +5 -4
  48. package/dist/viewer/index.d.ts +5 -4
  49. package/dist/viewer/index.js +4 -4
  50. package/dist/web-component/index.cjs +6 -6
  51. package/dist/web-component/index.d.cts +2 -2
  52. package/dist/web-component/index.d.ts +2 -2
  53. package/dist/web-component/index.js +4 -4
  54. package/package.json +1 -1
  55. package/dist/chunk-BODZN3ZI.js.map +0 -1
  56. package/dist/chunk-G7NRK5AG.js.map +0 -1
  57. package/dist/chunk-IEHE6WVN.js.map +0 -1
  58. package/dist/chunk-LTGF5OHP.js.map +0 -1
  59. package/dist/chunk-TWDLOXRM.cjs.map +0 -1
  60. package/dist/chunk-VK3T6O5Z.cjs.map +0 -1
  61. package/dist/chunk-XY2GZUHC.cjs.map +0 -1
  62. package/dist/chunk-ZMLQIMJK.cjs.map +0 -1
@@ -1,4 +1,4 @@
1
- import { DOM_CONTRACT_VERSION, SYMBOL_BOUNDS_ATTR, PATH_POINTS_ATTR, PATH_CLOSED_ATTR, PATH_TENSION_ATTR, ISOMETRIC_SIZE_ATTR, CORNER_RADIUS_ATTR, ISOMETRIC_LABEL_OFFSET_ATTR, AXIS_COS, isometricFaces, PATH_POINT_INDEX_ATTR } from './chunk-IEHE6WVN.js';
1
+ import { DOM_CONTRACT_VERSION, SYMBOL_BOUNDS_ATTR, PATH_POINTS_ATTR, PATH_CLOSED_ATTR, PATH_TENSION_ATTR, ISOMETRIC_SIZE_ATTR, CORNER_RADIUS_ATTR, ISOMETRIC_LABEL_OFFSET_ATTR, AXIS_COS, isometricFaces, PATH_POINT_INDEX_ATTR } from './chunk-JQK4IGXJ.js';
2
2
 
3
3
  // src/runtime/eventing/emitter.ts
4
4
  var Emitter = class {
@@ -797,5 +797,5 @@ function shapeSelectionOverlay(document, primary, id, svg, lockHeight = false) {
797
797
  }
798
798
 
799
799
  export { CHANGE_COLOR, DERIVED_HEIGHT_ROLES, Emitter, FLASH_DURATION_MS, ISO_DUPLICATE_BUBBLES_ATTR, ISO_HALO_ATTR, PATH_HALO_ATTR, REDUCED_MOTION_DURATION_MS, SVG_NAMESPACE, axisArrowPlacements, clearAlignmentGuides, findAllOwnerNodes, findIsometricApexCandidates, findOwnerNode, findSnapCandidateBounds, isCameraGesture, isContractCompatible, isPrimary, isTextLabel, isometricGeometryOf, isometricSelectionOverlay, linkChangeOverlay, linkSelectionOverlay, parseContractVersion, pathGeometryOf, pathSelectionOverlay, pointerUserPoint, pxPerUnit, quickDuplicateBubbles, resizeHandlePositions, resolveOwner, screenRectOf, shapeChangeOverlay, shapeSelectionOverlay, startChangeFade, symbolDeclaredBounds, updateAlignmentGuides, updateAxisArrowGroup, updateHalo, updateQuickDuplicateBubbles };
800
- //# sourceMappingURL=chunk-7VW2XKVB.js.map
801
- //# sourceMappingURL=chunk-7VW2XKVB.js.map
800
+ //# sourceMappingURL=chunk-ZNHYW47T.js.map
801
+ //# sourceMappingURL=chunk-ZNHYW47T.js.map
@@ -1 +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":["el","g","RING_COLOR","HALO_EXTRA_WIDTH_PX"],"mappings":"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","file":"chunk-7VW2XKVB.js","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(\n svg: SVGSVGElement,\n id: string,\n predicate: (el: Element) => boolean,\n): SVGGraphicsElement | null {\n const nodes = svg.querySelectorAll(`[data-sf-id=\"${CSS.escape(id)}\"]`);\n for (const el of nodes) {\n if (predicate(el)) {\n return el as unknown as SVGGraphicsElement;\n }\n }\n return null;\n}\n\nexport function findAllOwnerNodes(svg: SVGSVGElement, id: string): SVGGraphicsElement[] {\n return Array.from(svg.querySelectorAll(`[data-sf-id=\"${CSS.escape(id)}\"]`)) as unknown as SVGGraphicsElement[];\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('[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 as unknown as SVGGraphicsElement).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('[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 as unknown as SVGGraphicsElement).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"]}
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":["el","g","RING_COLOR","HALO_EXTRA_WIDTH_PX"],"mappings":"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","file":"chunk-ZNHYW47T.js","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(\n svg: SVGSVGElement,\n id: string,\n predicate: (el: Element) => boolean,\n): SVGGraphicsElement | null {\n const nodes = svg.querySelectorAll(`[data-sf-id=\"${CSS.escape(id)}\"]`);\n for (const el of nodes) {\n if (predicate(el)) {\n return el as unknown as SVGGraphicsElement;\n }\n }\n return null;\n}\n\nexport function findAllOwnerNodes(svg: SVGSVGElement, id: string): SVGGraphicsElement[] {\n return Array.from(svg.querySelectorAll(`[data-sf-id=\"${CSS.escape(id)}\"]`)) as unknown as SVGGraphicsElement[];\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('[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 as unknown as SVGGraphicsElement).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('[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 as unknown as SVGGraphicsElement).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 chunkTWDLOXRM_cjs = require('./chunk-TWDLOXRM.cjs');
4
- var chunkZMLQIMJK_cjs = require('./chunk-ZMLQIMJK.cjs');
5
- var chunkXY2GZUHC_cjs = require('./chunk-XY2GZUHC.cjs');
3
+ var chunkOWNVXKXN_cjs = require('./chunk-OWNVXKXN.cjs');
4
+ var chunkA73UJ5AQ_cjs = require('./chunk-A73UJ5AQ.cjs');
5
+ var chunkKXYSO6GC_cjs = require('./chunk-KXYSO6GC.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 = chunkXY2GZUHC_cjs.sflToCanvasState(sfl);
79
- const collected = chunkZMLQIMJK_cjs.collectCanvasObjects(state);
78
+ const state = chunkKXYSO6GC_cjs.sflToCanvasState(sfl);
79
+ const collected = chunkA73UJ5AQ_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,99 +107,127 @@ function sflToImportJson(sfl) {
107
107
 
108
108
  Object.defineProperty(exports, "buildBindingGraph", {
109
109
  enumerable: true,
110
- get: function () { return chunkTWDLOXRM_cjs.buildBindingGraph; }
110
+ get: function () { return chunkOWNVXKXN_cjs.buildBindingGraph; }
111
111
  });
112
112
  Object.defineProperty(exports, "createBindingRuntime", {
113
113
  enumerable: true,
114
- get: function () { return chunkTWDLOXRM_cjs.createBindingRuntime; }
114
+ get: function () { return chunkOWNVXKXN_cjs.createBindingRuntime; }
115
115
  });
116
116
  Object.defineProperty(exports, "createDataSource", {
117
117
  enumerable: true,
118
- get: function () { return chunkTWDLOXRM_cjs.createDataSource; }
118
+ get: function () { return chunkOWNVXKXN_cjs.createDataSource; }
119
119
  });
120
120
  Object.defineProperty(exports, "interactiveElements", {
121
121
  enumerable: true,
122
- get: function () { return chunkTWDLOXRM_cjs.interactiveElements; }
122
+ get: function () { return chunkOWNVXKXN_cjs.interactiveElements; }
123
123
  });
124
124
  Object.defineProperty(exports, "renderBound", {
125
125
  enumerable: true,
126
- get: function () { return chunkTWDLOXRM_cjs.renderBound; }
126
+ get: function () { return chunkOWNVXKXN_cjs.renderBound; }
127
127
  });
128
128
  Object.defineProperty(exports, "decodeColor", {
129
129
  enumerable: true,
130
- get: function () { return chunkZMLQIMJK_cjs.decodeColor; }
130
+ get: function () { return chunkA73UJ5AQ_cjs.decodeColor; }
131
131
  });
132
132
  Object.defineProperty(exports, "decodeShadow", {
133
133
  enumerable: true,
134
- get: function () { return chunkZMLQIMJK_cjs.decodeShadow; }
134
+ get: function () { return chunkA73UJ5AQ_cjs.decodeShadow; }
135
135
  });
136
136
  Object.defineProperty(exports, "defineComponent", {
137
137
  enumerable: true,
138
- get: function () { return chunkZMLQIMJK_cjs.defineComponent; }
138
+ get: function () { return chunkA73UJ5AQ_cjs.defineComponent; }
139
139
  });
140
140
  Object.defineProperty(exports, "render", {
141
141
  enumerable: true,
142
- get: function () { return chunkZMLQIMJK_cjs.render; }
142
+ get: function () { return chunkA73UJ5AQ_cjs.render; }
143
143
  });
144
144
  Object.defineProperty(exports, "renderCanvas", {
145
145
  enumerable: true,
146
- get: function () { return chunkZMLQIMJK_cjs.renderCanvas; }
146
+ get: function () { return chunkA73UJ5AQ_cjs.renderCanvas; }
147
147
  });
148
148
  Object.defineProperty(exports, "sflToRenderInput", {
149
149
  enumerable: true,
150
- get: function () { return chunkZMLQIMJK_cjs.sflToRenderInput; }
150
+ get: function () { return chunkA73UJ5AQ_cjs.sflToRenderInput; }
151
151
  });
152
152
  Object.defineProperty(exports, "AXIS_COS", {
153
153
  enumerable: true,
154
- get: function () { return chunkXY2GZUHC_cjs.AXIS_COS; }
154
+ get: function () { return chunkKXYSO6GC_cjs.AXIS_COS; }
155
155
  });
156
156
  Object.defineProperty(exports, "AXIS_SIN", {
157
157
  enumerable: true,
158
- get: function () { return chunkXY2GZUHC_cjs.AXIS_SIN; }
158
+ get: function () { return chunkKXYSO6GC_cjs.AXIS_SIN; }
159
159
  });
160
160
  Object.defineProperty(exports, "CHART_TYPES", {
161
161
  enumerable: true,
162
- get: function () { return chunkXY2GZUHC_cjs.CHART_TYPES; }
162
+ get: function () { return chunkKXYSO6GC_cjs.CHART_TYPES; }
163
+ });
164
+ Object.defineProperty(exports, "COMPONENT_CATEGORIES", {
165
+ enumerable: true,
166
+ get: function () { return chunkKXYSO6GC_cjs.COMPONENT_CATEGORIES; }
163
167
  });
164
168
  Object.defineProperty(exports, "DOM_CONTRACT_VERSION", {
165
169
  enumerable: true,
166
- get: function () { return chunkXY2GZUHC_cjs.DOM_CONTRACT_VERSION; }
170
+ get: function () { return chunkKXYSO6GC_cjs.DOM_CONTRACT_VERSION; }
167
171
  });
168
172
  Object.defineProperty(exports, "canonicalize", {
169
173
  enumerable: true,
170
- get: function () { return chunkXY2GZUHC_cjs.canonicalizeSource; }
174
+ get: function () { return chunkKXYSO6GC_cjs.canonicalizeSource; }
175
+ });
176
+ Object.defineProperty(exports, "componentTypes", {
177
+ enumerable: true,
178
+ get: function () { return chunkKXYSO6GC_cjs.componentTypes; }
179
+ });
180
+ Object.defineProperty(exports, "flattenPath", {
181
+ enumerable: true,
182
+ get: function () { return chunkKXYSO6GC_cjs.flattenPath; }
171
183
  });
172
184
  Object.defineProperty(exports, "getComponentDescriptor", {
173
185
  enumerable: true,
174
- get: function () { return chunkXY2GZUHC_cjs.getComponentDescriptor; }
186
+ get: function () { return chunkKXYSO6GC_cjs.getComponentDescriptor; }
175
187
  });
176
188
  Object.defineProperty(exports, "isChartObject", {
177
189
  enumerable: true,
178
- get: function () { return chunkXY2GZUHC_cjs.isChartObject; }
190
+ get: function () { return chunkKXYSO6GC_cjs.isChartObject; }
191
+ });
192
+ Object.defineProperty(exports, "isDimensionObject", {
193
+ enumerable: true,
194
+ get: function () { return chunkKXYSO6GC_cjs.isDimensionObject; }
179
195
  });
180
196
  Object.defineProperty(exports, "isGenericComponent", {
181
197
  enumerable: true,
182
- get: function () { return chunkXY2GZUHC_cjs.isGenericComponent; }
198
+ get: function () { return chunkKXYSO6GC_cjs.isGenericComponent; }
183
199
  });
184
200
  Object.defineProperty(exports, "isIsometricObject", {
185
201
  enumerable: true,
186
- get: function () { return chunkXY2GZUHC_cjs.isIsometricObject; }
202
+ get: function () { return chunkKXYSO6GC_cjs.isIsometricObject; }
187
203
  });
188
204
  Object.defineProperty(exports, "isPathObject", {
189
205
  enumerable: true,
190
- get: function () { return chunkXY2GZUHC_cjs.isPathObject; }
206
+ get: function () { return chunkKXYSO6GC_cjs.isPathObject; }
191
207
  });
192
208
  Object.defineProperty(exports, "isSwimlaneObject", {
193
209
  enumerable: true,
194
- get: function () { return chunkXY2GZUHC_cjs.isSwimlaneObject; }
210
+ get: function () { return chunkKXYSO6GC_cjs.isSwimlaneObject; }
195
211
  });
196
212
  Object.defineProperty(exports, "parse", {
197
213
  enumerable: true,
198
- get: function () { return chunkXY2GZUHC_cjs.parseSource; }
214
+ get: function () { return chunkKXYSO6GC_cjs.parseSource; }
215
+ });
216
+ Object.defineProperty(exports, "pathBounds", {
217
+ enumerable: true,
218
+ get: function () { return chunkKXYSO6GC_cjs.pathBounds; }
219
+ });
220
+ Object.defineProperty(exports, "pathToSymbol", {
221
+ enumerable: true,
222
+ get: function () { return chunkKXYSO6GC_cjs.pathToSymbol; }
199
223
  });
200
224
  Object.defineProperty(exports, "sflToCanvasState", {
201
225
  enumerable: true,
202
- get: function () { return chunkXY2GZUHC_cjs.sflToCanvasState; }
226
+ get: function () { return chunkKXYSO6GC_cjs.sflToCanvasState; }
227
+ });
228
+ Object.defineProperty(exports, "symbolToPath", {
229
+ enumerable: true,
230
+ get: function () { return chunkKXYSO6GC_cjs.symbolToPath; }
203
231
  });
204
232
  exports.SHAPE_TYPES = SHAPE_TYPES;
205
233
  exports.sflToImportJson = sflToImportJson;