stickyflow 0.8.0 → 0.9.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 (63) hide show
  1. package/CHANGELOG.md +11 -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-XPM3E7NV.cjs → chunk-B3YRZVMR.cjs} +23 -23
  8. package/dist/chunk-B3YRZVMR.cjs.map +1 -0
  9. package/dist/{chunk-CZW3ARXQ.js → chunk-BUVUJMWT.js} +5 -5
  10. package/dist/chunk-BUVUJMWT.js.map +1 -0
  11. package/dist/{chunk-LFEGZJWC.js → chunk-CM35H45Z.js} +3 -3
  12. package/dist/{chunk-LFEGZJWC.js.map → chunk-CM35H45Z.js.map} +1 -1
  13. package/dist/{chunk-GLZVHUSW.js → chunk-D2266VBZ.js} +393 -5
  14. package/dist/chunk-D2266VBZ.js.map +1 -0
  15. package/dist/{chunk-MAPNY7MJ.js → chunk-FS6L462E.js} +128 -15
  16. package/dist/chunk-FS6L462E.js.map +1 -0
  17. package/dist/{chunk-FQ7GMLCM.cjs → chunk-OUWGWDJ2.cjs} +15 -15
  18. package/dist/{chunk-FQ7GMLCM.cjs.map → chunk-OUWGWDJ2.cjs.map} +1 -1
  19. package/dist/{chunk-LNW5VIEA.cjs → chunk-QL7MNEMT.cjs} +393 -4
  20. package/dist/chunk-QL7MNEMT.cjs.map +1 -0
  21. package/dist/{chunk-IR2T47NW.cjs → chunk-SQBF2BKT.cjs} +257 -75
  22. package/dist/chunk-SQBF2BKT.cjs.map +1 -0
  23. package/dist/{chunk-VOYX6JMW.cjs → chunk-YSXD5IVZ.cjs} +778 -665
  24. package/dist/chunk-YSXD5IVZ.cjs.map +1 -0
  25. package/dist/{chunk-EDOPENSE.js → chunk-ZCGZJBAT.js} +228 -46
  26. package/dist/chunk-ZCGZJBAT.js.map +1 -0
  27. package/dist/index.cjs +36 -36
  28. package/dist/index.d.cts +5 -5
  29. package/dist/index.d.ts +5 -5
  30. package/dist/index.js +5 -5
  31. package/dist/interaction/index.cjs +232 -230
  32. package/dist/interaction/index.cjs.map +1 -1
  33. package/dist/interaction/index.d.cts +2 -2
  34. package/dist/interaction/index.d.ts +2 -2
  35. package/dist/interaction/index.js +4 -2
  36. package/dist/interaction/index.js.map +1 -1
  37. package/dist/{render-Bp2FLEzv.d.cts → render-DU4lYbRl.d.cts} +19 -11
  38. package/dist/{render-Bp2FLEzv.d.ts → render-DU4lYbRl.d.ts} +19 -11
  39. package/dist/{runtime-DIag-XBa.d.cts → runtime-DG8X3Fwf.d.cts} +2 -2
  40. package/dist/{runtime-CWIGxRcL.d.ts → runtime-kqD1RS17.d.ts} +2 -2
  41. package/dist/{runtimeTypes-C7sSLfOK.d.ts → runtimeTypes-CvjlBZds.d.cts} +7 -3
  42. package/dist/{runtimeTypes-BYODuxHk.d.cts → runtimeTypes-vRaHOIHi.d.ts} +7 -3
  43. package/dist/stickyflow-diagram.global.js +192 -40
  44. package/dist/stickyflow-diagram.global.js.map +1 -1
  45. package/dist/{types-D2w6D_wG.d.cts → types-B5jrEEcF.d.cts} +1 -1
  46. package/dist/{types-B9QM_H3R.d.ts → types-B7IkZ0w4.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.d.cts +2 -2
  53. package/dist/web-component/index.d.ts +2 -2
  54. package/dist/web-component/index.js +4 -4
  55. package/package.json +1 -1
  56. package/dist/chunk-CZW3ARXQ.js.map +0 -1
  57. package/dist/chunk-EDOPENSE.js.map +0 -1
  58. package/dist/chunk-GLZVHUSW.js.map +0 -1
  59. package/dist/chunk-IR2T47NW.cjs.map +0 -1
  60. package/dist/chunk-LNW5VIEA.cjs.map +0 -1
  61. package/dist/chunk-MAPNY7MJ.js.map +0 -1
  62. package/dist/chunk-VOYX6JMW.cjs.map +0 -1
  63. package/dist/chunk-XPM3E7NV.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/model/chart/supportedTypes.ts","../src/model/isometricObject/geometry.ts","../src/model/isometricObject/footprint.ts","../src/model/isometricObject/shading.ts","../src/model/path/curve.ts","../src/model/path/symbol.ts","../src/model/component/categories.ts","../src/model/component/supportedTypes.ts","../src/model/component/guards.ts","../src/model/component/builtIns.ts","../src/model/component/registry.ts","../src/model/component/format.ts","../src/model/component/theme.ts","../src/sflLanguage/lexing/cursor.ts","../src/sflLanguage/lexing/error.ts","../src/sflLanguage/lexing/characters.ts","../src/sflLanguage/lexing/tokenCreation.ts","../src/sflLanguage/lexing/identifiers.ts","../src/sflLanguage/lexing/lineBreak.ts","../src/sflLanguage/lexing/lineComment.ts","../src/sflLanguage/lexing/numbers.ts","../src/sflLanguage/lexing/operators.ts","../src/sflLanguage/lexing/punctuation.ts","../src/sflLanguage/lexing/spacing.ts","../src/sflLanguage/lexing/strings.ts","../src/sflLanguage/lexing/nextToken.ts","../src/sflLanguage/lexing/tokenizer.ts","../src/sflLanguage/parsing/error.ts","../src/sflLanguage/parsing/cursor.ts","../src/sflLanguage/ast.ts","../src/sflLanguage/parsing/values.ts","../src/sflLanguage/parsing/expressions.ts","../src/sflLanguage/parsing/properties.ts","../src/sflLanguage/parsing/blocks.ts","../src/sflLanguage/parsing/document.ts","../src/sflLanguage/parsing/parser.ts","../src/sflLanguage/emitting/blockEntries.ts","../src/sflLanguage/emitting/composition.ts","../src/sflLanguage/emitting/values.ts","../src/sflLanguage/emitting/expressions.ts","../src/sflLanguage/emitting/propertyOrder.ts","../src/sflLanguage/emitting/propertyBlock.ts","../src/sflLanguage/emitting/blocks.ts","../src/sflLanguage/emitting/document.ts","../src/sflLanguage/canonicalize.ts","../src/sflSemantic/canvasObjects/artifacts/chart/types.ts","../src/sflSemantic/canvasObjects/artifacts/dimension/types.ts","../src/sflSemantic/canvasObjects/artifacts/isometric/types.ts","../src/sflSemantic/canvasObjects/artifacts/path/types.ts","../src/sflSemantic/canvasObjects/artifacts/swimlane/types.ts","../src/sflLanguage/expansion/repeat.ts","../src/sflSemantic/ast/valueAccess.ts","../src/sflSemantic/canvasObjects/artifacts/links/endpointReader.ts","../src/sflSemantic/ast/blockEntries.ts","../src/sflSemantic/canvasObjects/processing/blockKinds.ts","../src/sflSemantic/canvasObjects/artifacts/links/nameIndex.ts","../src/sflSemantic/canvasObjects/artifacts/links/presentation.ts","../src/sflSemantic/canvasObjects/artifacts/connections/reader.ts","../src/sflSemantic/canvasObjects/artifacts/links/blockReader.ts","../src/sflSemantic/canvasObjects/artifacts/links/reader.ts","../src/sflSemantic/canvasObjects/artifacts/links/netExpansion.ts","../src/sflSemantic/canvasObjects/processing/layout/flow.ts","../src/sflSemantic/canvasObjects/artifacts/chart/values.ts","../src/sflSemantic/canvasObjects/artifacts/chart/axis.ts","../src/sflSemantic/canvasObjects/artifacts/chart/rules.ts","../src/sflSemantic/canvasObjects/artifacts/chart/seriesValues.ts","../src/sflSemantic/canvasObjects/artifacts/chart/series.ts","../src/sflSemantic/canvasObjects/artifacts/chart/zones.ts","../src/sflSemantic/canvasObjects/artifacts/chart/reader.ts","../src/sflSemantic/canvasObjects/artifacts/chart/resolver.ts","../src/sflSemantic/canvasObjects/artifacts/dimension/reader.ts","../src/sflSemantic/canvasObjects/artifacts/dimension/resolver.ts","../src/sflSemantic/canvasObjects/artifacts/isometric/reader.ts","../src/sflSemantic/canvasObjects/artifacts/isometric/resolver.ts","../src/sflSemantic/canvasObjects/artifacts/path/reader.ts","../src/sflSemantic/canvasObjects/artifacts/path/resolver.ts","../src/sflSemantic/canvasObjects/artifacts/swimlane/reader.ts","../src/sflSemantic/canvasObjects/artifacts/swimlane/resolver.ts","../src/sflSemantic/canvasObjects/processing/classification.ts","../src/sflSemantic/canvasObjects/processing/layout/geometry.ts","../src/sflSemantic/canvasObjects/processing/presentation.ts","../src/sflSemantic/canvasObjects/processing/resolver.ts","../src/sflSemantic/groups/members.ts","../src/sflSemantic/canvasTree/resolver.ts","../src/sflSemantic/definitions/shaders.ts","../src/sflSemantic/definitions/symbols.ts","../src/sflSemantic/definitions/collection.ts","../src/sflSemantic/definitions/compositionReferences.ts","../src/sflSemantic/definitions/inheritance.ts","../src/sflSemantic/definitions/propertyReaders.ts","../src/sflSemantic/diagnostics/charts.ts","../src/sflSemantic/diagnostics/components.ts","../src/sflSemantic/canvasState/resolution.ts","../src/sflSemantic/canvasState/resolver.ts","../src/sflSemantic/sflToCanvasState.ts","../src/svg/domContract/version.ts","../src/model/geometry/ports/rectangleCoordinates.ts","../src/model/geometry/ports/coordinates.ts","../src/renderScene/scene/bounds.ts","../src/renderScene/scene/order.ts","../src/renderScene/artifacts/link/roundedOrthogonalPathData.ts","../src/renderScene/charts/propPath.ts","../src/renderScene/scene/freeformPath.ts","../src/renderScene/charts/primitives/radarShape.ts","../src/svg/domContract/attributes.ts","../src/model/geometry/rectangle/edgePoint.ts","../src/renderScene/scene/tagging.ts","../src/renderScene/scene/numbers.ts","../src/renderScene/scene/textStyle.ts","../src/renderScene/scene/paint.ts","../src/renderScene/scene/roundedRectPath.ts","../src/renderScene/scene/roundedPolygonPath.ts","../src/renderScene/scene/textLayout.ts","../src/renderScene/artifacts/link/geometry/routing/sideNormal.ts","../src/renderScene/artifacts/link/geometry/routing/cubic.ts","../src/renderScene/artifacts/link/geometry/routing/curvedRoute.ts","../src/renderScene/artifacts/link/geometry/routing/orthogonalPlan.ts","../src/renderScene/artifacts/link/geometry/routing/orthogonalPoints.ts","../src/renderScene/artifacts/link/geometry/routing/orthogonalSegments.ts","../src/renderScene/artifacts/link/geometry/routing/rounding.ts","../src/renderScene/artifacts/link/geometry/routing/orthogonal.ts","../src/renderScene/artifacts/link/geometry/routing/waypoints.ts","../src/renderScene/artifacts/link/geometry/routing/orthogonalRoute.ts","../src/renderScene/artifacts/link/geometry/routing/sides.ts","../src/renderScene/artifacts/link/geometry/routing/straightRoute.ts","../src/renderScene/artifacts/link/geometry/routing.ts","../src/renderScene/artifacts/shape/geometry/roundedForms.ts","../src/renderScene/charts/primitives/barLabel.ts","../src/renderScene/charts/primitives/barShape.ts","../src/renderScene/charts/primitives/linePath.ts","../src/renderScene/charts/primitives/pieShape.ts","../src/model/color/conversion.ts","../src/model/color/interpolation.ts","../src/renderScene/charts/primitives/defaults.ts","../src/renderScene/charts/primitives/axis.ts","../src/renderScene/charts/primitives/barCategories.ts","../src/renderScene/charts/primitives/boxplot.ts","../src/renderScene/color.ts","../src/renderScene/charts/primitives/colors.ts","../src/renderScene/charts/primitives/errors.ts","../src/renderScene/charts/primitives/format.ts","../src/renderScene/charts/primitives/horizontalBars.ts","../src/renderScene/charts/primitives/labelTilt.ts","../src/renderScene/charts/primitives/segments.ts","../src/renderScene/charts/primitives/shadow.ts","../src/renderScene/charts/primitives/stacking.ts","../src/renderScene/charts/primitives/text.ts","../src/renderScene/charts/renderers/pie/geometry.ts","../src/renderScene/charts/renderers/pie/labels.ts","../src/renderScene/artifacts/link/geometry/label/pathMetrics.ts","../src/renderScene/artifacts/link/geometry/label/curvedGap.ts","../src/renderScene/artifacts/link/geometry/label/polylineGap.ts","../src/renderScene/artifacts/link/geometry/label/gap.ts","../src/renderScene/artifacts/link/geometry/markers/midpoint.ts","../src/renderScene/artifacts/shape/geometry/cloud.ts","../src/renderScene/artifacts/shape/geometry/pathCalculation.ts"],"names":["startsNumber","text","version","block","INDENT","round","radians","first","isStraight","distance","hexToRgb","rgbToHex","point","color","tick"],"mappings":"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","file":"chunk-D2266VBZ.js","sourcesContent":["export const CHART_TYPES = [\n 'bar',\n 'line',\n 'scatter',\n 'radar',\n 'radial',\n 'field',\n 'heatmap',\n 'boxplot',\n 'sankey',\n 'treemap',\n 'mekko',\n 'hexbin',\n 'pie',\n 'radialBar',\n 'polarArea',\n 'custom',\n] as const;\n\nexport type ChartType = (typeof CHART_TYPES)[number];\n\nexport function isChartType(value: string | undefined): value is ChartType {\n return value !== undefined && (CHART_TYPES as readonly string[]).includes(value);\n}\n","import type { Point } from '../geometry/types';\nimport type { IsometricFace, IsometricObject } from './types';\n\nexport interface IsometricFaces {\n top: [Point, Point, Point, Point];\n bottom: [Point, Point, Point, Point];\n front: [Point, Point, Point, Point];\n back: [Point, Point, Point, Point];\n left: [Point, Point, Point, Point];\n right: [Point, Point, Point, Point];\n}\n\nexport const VISIBLE_ISOMETRIC_FACES: ReadonlySet<IsometricFace> = new Set(['top', 'front', 'right']);\n\nconst AXIS_ANGLE = Math.PI / 6;\nexport const AXIS_COS = Math.cos(AXIS_ANGLE);\nexport const AXIS_SIN = Math.sin(AXIS_ANGLE);\n\nexport interface IsometricBoundsFrame {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport function isometricBounds(\n object: Pick<IsometricObject, 'x' | 'y' | 'width' | 'height' | 'depth'>,\n): IsometricBoundsFrame {\n const width = Math.max(0, object.width);\n const height = Math.max(0, object.height);\n const depth = Math.max(0, object.depth);\n return {\n x: object.x,\n y: object.y,\n width: (width + depth) * AXIS_COS,\n height: height + (width + depth) * AXIS_SIN,\n };\n}\n\nexport function isometricTopFaceCenter(object: Pick<IsometricObject, 'x' | 'y' | 'width' | 'height' | 'depth'>): Point {\n const width = Math.max(0, object.width);\n const depth = Math.max(0, object.depth);\n return {\n x: object.x + ((width + depth) * AXIS_COS) / 2,\n y: object.y + ((width + depth) * AXIS_SIN) / 2,\n };\n}\n\nfunction faceCenter(corners: readonly [Point, Point, Point, Point]): Point {\n return {\n x: (corners[0].x + corners[1].x + corners[2].x + corners[3].x) / 4,\n y: (corners[0].y + corners[1].y + corners[2].y + corners[3].y) / 4,\n };\n}\n\nexport function isometricFaceCenter(\n object: Pick<IsometricObject, 'x' | 'y' | 'width' | 'height' | 'depth'>,\n face: IsometricFace,\n): Point {\n return faceCenter(isometricFaces(object)[face]);\n}\n\nexport function isometricFaces(\n object: Pick<IsometricObject, 'x' | 'y' | 'width' | 'height' | 'depth'>,\n): IsometricFaces {\n const { x, y } = object;\n const width = Math.max(0, object.width);\n const height = Math.max(0, object.height);\n const depth = Math.max(0, object.depth);\n\n const apex = { x: x + depth * AXIS_COS, y };\n const toRight = { x: width * AXIS_COS, y: width * AXIS_SIN };\n const toLeft = { x: -depth * AXIS_COS, y: depth * AXIS_SIN };\n const down = { x: 0, y: height };\n\n const right = { x: apex.x + toRight.x, y: apex.y + toRight.y };\n const left = { x: apex.x + toLeft.x, y: apex.y + toLeft.y };\n const center = { x: apex.x + toRight.x + toLeft.x, y: apex.y + toRight.y + toLeft.y };\n const apexDown = { x: apex.x + down.x, y: apex.y + down.y };\n const bottom = { x: center.x + down.x, y: center.y + down.y };\n const bottomLeft = { x: left.x + down.x, y: left.y + down.y };\n const bottomRight = { x: right.x + down.x, y: right.y + down.y };\n\n return {\n top: [apex, right, center, left],\n bottom: [apexDown, bottomRight, bottom, bottomLeft],\n front: [left, center, bottom, bottomLeft],\n back: [apex, right, bottomRight, apexDown],\n right: [center, right, bottomRight, bottom],\n left: [apex, left, bottomLeft, apexDown],\n };\n}\n","import type { Point } from '../geometry/types';\nimport { AXIS_COS, AXIS_SIN } from './geometry';\nimport type { IsometricObject } from './types';\n\n// [along the width, along the depth], both from 0 to 1\nexport type FootprintPoint = [number, number];\n\nexport interface ExtrudedSide {\n points: [Point, Point, Point, Point];\n light: number;\n depth: number;\n smoothStart: boolean;\n smoothEnd: boolean;\n}\n\nexport interface ExtrudedFootprint {\n top: Point[];\n sides: ExtrudedSide[];\n}\n\ntype Frame = Pick<IsometricObject, 'x' | 'y' | 'width' | 'height' | 'depth'>;\n\nfunction signedArea(points: readonly FootprintPoint[]): number {\n let sum = 0;\n for (let i = 0; i < points.length; i += 1) {\n const [x1, y1] = points[i];\n const [x2, y2] = points[(i + 1) % points.length];\n sum += x1 * y2 - x2 * y1;\n }\n return sum / 2;\n}\n\nexport function cleanFootprint(points: readonly FootprintPoint[] | undefined): FootprintPoint[] {\n const clean = (points ?? []).filter(\n point => Array.isArray(point) && Number.isFinite(point[0]) && Number.isFinite(point[1]),\n );\n const unique = clean.filter((point, index) => {\n const next = clean[(index + 1) % clean.length];\n return point[0] !== next[0] || point[1] !== next[1];\n });\n return unique.length >= 3 ? unique : [];\n}\n\nconst ARC_STEP = Math.PI / 12;\n\nexport function roundFootprint(\n points: readonly FootprintPoint[],\n radius: number,\n width: number,\n depth: number,\n): FootprintPoint[] {\n if (!(radius > 0) || width <= 0 || depth <= 0) {\n return [...points];\n }\n const world = points.map(([u, v]) => ({ x: u * width, y: v * depth }));\n const rounded: FootprintPoint[] = [];\n for (let i = 0; i < world.length; i += 1) {\n const here = world[i];\n const before = world[(i - 1 + world.length) % world.length];\n const after = world[(i + 1) % world.length];\n const a = { x: before.x - here.x, y: before.y - here.y };\n const b = { x: after.x - here.x, y: after.y - here.y };\n const lengthA = Math.hypot(a.x, a.y);\n const lengthB = Math.hypot(b.x, b.y);\n const cos = (a.x * b.x + a.y * b.y) / (lengthA * lengthB);\n const angle = Math.acos(Math.max(-1, Math.min(1, cos)));\n if (!Number.isFinite(angle) || angle < 1e-3 || Math.PI - angle < 1e-3) {\n rounded.push(points[i]);\n continue;\n }\n const reach = Math.min(radius / Math.tan(angle / 2), Math.min(lengthA, lengthB) / 2);\n const effective = reach * Math.tan(angle / 2);\n const unitA = { x: a.x / lengthA, y: a.y / lengthA };\n const unitB = { x: b.x / lengthB, y: b.y / lengthB };\n const from = { x: here.x + unitA.x * reach, y: here.y + unitA.y * reach };\n const to = { x: here.x + unitB.x * reach, y: here.y + unitB.y * reach };\n const bisector = { x: unitA.x + unitB.x, y: unitA.y + unitB.y };\n const bisectorLength = Math.hypot(bisector.x, bisector.y);\n const centerDistance = effective / Math.sin(angle / 2);\n const center = {\n x: here.x + (bisector.x / bisectorLength) * centerDistance,\n y: here.y + (bisector.y / bisectorLength) * centerDistance,\n };\n const start = Math.atan2(from.y - center.y, from.x - center.x);\n let sweep = Math.atan2(to.y - center.y, to.x - center.x) - start;\n sweep -= 2 * Math.PI * Math.round(sweep / (2 * Math.PI));\n const steps = Math.max(2, Math.ceil(Math.abs(sweep) / ARC_STEP));\n for (let step = 0; step <= steps; step += 1) {\n const t = start + (sweep * step) / steps;\n rounded.push([(center.x + effective * Math.cos(t)) / width, (center.y + effective * Math.sin(t)) / depth]);\n }\n }\n return rounded;\n}\n\nexport function extrudeFootprint(\n frame: Frame,\n footprint: readonly FootprintPoint[],\n cornerRadius = 0,\n): ExtrudedFootprint {\n const width = Math.max(0, frame.width);\n const depth = Math.max(0, frame.depth);\n const height = Math.max(0, frame.height);\n const points = roundFootprint(cleanFootprint(footprint), cornerRadius, width, depth);\n const apexX = frame.x + depth * AXIS_COS;\n const project = ([u, v]: FootprintPoint, z: number): Point => ({\n x: apexX + (u * width - v * depth) * AXIS_COS,\n y: frame.y + (u * width + v * depth) * AXIS_SIN + z,\n });\n\n const top = points.map(point => project(point, 0));\n const turn = signedArea(points) >= 0 ? 1 : -1;\n const edges = points.map((from, i) => {\n const to = points[(i + 1) % points.length];\n const edgeU = (to[0] - from[0]) * width;\n const edgeV = (to[1] - from[1]) * depth;\n const length = Math.hypot(edgeU, edgeV);\n const normalU = length === 0 ? 0 : (edgeV / length) * turn;\n const normalV = length === 0 ? 0 : (-edgeU / length) * turn;\n return { from, to, length, normalU, normalV, visible: length > 0 && normalU + normalV > 1e-9 };\n });\n const sameWay = (a: (typeof edges)[number], b: (typeof edges)[number]) => {\n return a.visible && b.visible && a.normalU * b.normalU + a.normalV * b.normalV > Math.cos(0.5);\n };\n\n const sides: ExtrudedSide[] = [];\n edges.forEach((edge, i) => {\n if (!edge.visible) {\n return;\n }\n const before = edges[(i - 1 + edges.length) % edges.length];\n const after = edges[(i + 1) % edges.length];\n const { from, to } = edge;\n sides.push({\n points: [project(from, 0), project(to, 0), project(to, height), project(from, height)],\n light: 0.72 + 0.28 * Math.max(0, Math.min(1, edge.normalV / (Math.abs(edge.normalU) + Math.abs(edge.normalV)))),\n depth: (from[0] + to[0]) / 2 + (from[1] + to[1]) / 2,\n smoothStart: sameWay(before, edge),\n smoothEnd: sameWay(edge, after),\n });\n });\n sides.sort((a, b) => a.depth - b.depth);\n return { top, sides };\n}\n","function clamp255(value: number): number {\n return Math.max(0, Math.min(255, Math.round(value)));\n}\n\nfunction hexToRgb(hex: string): [number, number, number] | null {\n const match = /^#?([0-9a-fA-F]{6})$/.exec(hex.trim());\n if (!match) {\n return null;\n }\n const n = Number.parseInt(match[1], 16);\n return [(n >> 16) & 255, (n >> 8) & 255, n & 255];\n}\n\nfunction rgbToHex(r: number, g: number, b: number): string {\n return `#${[r, g, b].map(channel => clamp255(channel).toString(16).padStart(2, '0')).join('')}`;\n}\n\nfunction multiply(hex: string, factor: number): string {\n const rgb = hexToRgb(hex);\n if (!rgb) {\n return hex;\n }\n const [r, g, b] = rgb;\n return rgbToHex(r * factor, g * factor, b * factor);\n}\n\nexport function shadeFill(fill: string, factor: number): string {\n return multiply(fill, factor);\n}\n\nexport interface IsometricFaceFills {\n topFill: string;\n frontFill: string;\n sideFill: string;\n}\n\nexport function deriveFaceFills(fill: string): IsometricFaceFills {\n return {\n topFill: fill,\n frontFill: multiply(fill, 0.95),\n sideFill: multiply(fill, 0.88),\n };\n}\n","import type { Point } from '../geometry/types';\nimport type { PathPoint } from './types';\n\nexport interface PathCurve {\n points: readonly PathPoint[];\n tension: number;\n closed: boolean;\n}\n\nexport interface PathSegment {\n from: Point;\n to: Point;\n controls: [Point, Point] | null;\n}\n\nconst SAMPLES_PER_SEGMENT = 8;\n\nexport function pointTension(curve: PathCurve, point: PathPoint): number {\n return Math.max(0, point.tension ?? curve.tension);\n}\n\nexport function isStraight(curve: PathCurve): boolean {\n return curve.points.length < 3 || curve.points.every(point => pointTension(curve, point) <= 0);\n}\n\nfunction pointAt(curve: PathCurve, index: number): PathPoint {\n const { points } = curve;\n if (curve.closed) {\n return points[(index + points.length) % points.length];\n }\n return points[Math.max(0, Math.min(points.length - 1, index))];\n}\n\nexport function pathSegments(curve: PathCurve): PathSegment[] {\n const count = curve.closed ? curve.points.length : curve.points.length - 1;\n return Array.from({ length: Math.max(0, count) }, (_, index) => {\n const previous = pointAt(curve, index - 1);\n const from = pointAt(curve, index);\n const to = pointAt(curve, index + 1);\n const next = pointAt(curve, index + 2);\n const fromFactor = pointTension(curve, from) / 6;\n const toFactor = pointTension(curve, to) / 6;\n if (fromFactor === 0 && toFactor === 0) {\n return { from, to, controls: null };\n }\n const first = { x: from.x + (to.x - previous.x) * fromFactor, y: from.y + (to.y - previous.y) * fromFactor };\n const second = { x: to.x - (next.x - from.x) * toFactor, y: to.y - (next.y - from.y) * toFactor };\n return { from, to, controls: [first, second] as [Point, Point] };\n });\n}\n\nfunction bezierAt(segment: PathSegment & { controls: [Point, Point] }, t: number): Point {\n const { from, to, controls } = segment;\n const u = 1 - t;\n const weights = [u * u * u, 3 * u * u * t, 3 * u * t * t, t * t * t];\n const anchors = [from, controls[0], controls[1], to];\n return {\n x: anchors.reduce((sum, anchor, i) => sum + anchor.x * weights[i], 0),\n y: anchors.reduce((sum, anchor, i) => sum + anchor.y * weights[i], 0),\n };\n}\n\nexport function flattenPath(curve: PathCurve, samples = SAMPLES_PER_SEGMENT): Point[] {\n if (isStraight(curve)) {\n return curve.points.map(point => ({ x: point.x, y: point.y }));\n }\n const flat: Point[] = [];\n const segments = pathSegments(curve);\n segments.forEach(segment => {\n flat.push({ x: segment.from.x, y: segment.from.y });\n if (segment.controls) {\n const curved = { ...segment, controls: segment.controls };\n for (let step = 1; step < samples; step++) {\n flat.push(bezierAt(curved, step / samples));\n }\n }\n });\n const last = segments[segments.length - 1];\n if (!curve.closed && last) {\n flat.push({ x: last.to.x, y: last.to.y });\n }\n return flat;\n}\n","import type { PathPoint } from './types';\n\nexport interface PathFrame {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface PathSymbol {\n points: Array<[number, number] | [number, number, number]>;\n width: number;\n height: number;\n}\n\nexport function pathBounds(points: readonly PathPoint[]): PathFrame {\n const xs = points.map(point => point.x);\n const ys = points.map(point => point.y);\n const x = Math.min(...xs);\n const y = Math.min(...ys);\n return { x, y, width: Math.max(...xs) - x, height: Math.max(...ys) - y };\n}\n\nconst round = (value: number) => Math.round(value * 10_000) / 10_000;\n\nexport function pathToSymbol(points: readonly PathPoint[]): PathSymbol {\n if (points.length === 0) {\n return { points: [], width: 0, height: 0 };\n }\n const frame = pathBounds(points);\n const unit = (value: number, size: number) => (size === 0 ? 0 : round(value / size));\n return {\n width: frame.width,\n height: frame.height,\n points: points.map(point => {\n const x = unit(point.x - frame.x, frame.width);\n const y = unit(point.y - frame.y, frame.height);\n return point.tension === undefined ? [x, y] : [x, y, point.tension];\n }),\n };\n}\n\nexport function symbolToPath(\n points: ReadonlyArray<readonly [number, number] | readonly [number, number, number]>,\n frame: PathFrame,\n): PathPoint[] {\n return points.map(point => {\n const placed = { x: frame.x + point[0] * frame.width, y: frame.y + point[1] * frame.height };\n return point[2] === undefined ? placed : { ...placed, tension: point[2] };\n });\n}\n","// The shelves a component is filed on, in the order they are shown. A component names its shelf with `category`.\nexport const COMPONENT_CATEGORIES = [\n { id: 'action', label: 'Actions' },\n { id: 'selection', label: 'Selection' },\n { id: 'value', label: 'Value input' },\n { id: 'text', label: 'Text input' },\n { id: 'indicator', label: 'Indicators' },\n { id: 'instrument', label: 'Instruments' },\n { id: 'navigation', label: 'Navigation' },\n { id: 'container', label: 'Containers' },\n] as const;\n\nexport type ComponentCategory = (typeof COMPONENT_CATEGORIES)[number]['id'];\n","export const BUILT_IN_COMPONENT_TYPES = ['rollingNumber', 'tickScale', 'ruler'] as const;\n\nexport type BuiltInComponentType = (typeof BUILT_IN_COMPONENT_TYPES)[number];\n\nexport type ComponentType = string;\n\nexport function isBuiltInComponentType(value: string | undefined): value is BuiltInComponentType {\n return value !== undefined && (BUILT_IN_COMPONENT_TYPES as readonly string[]).includes(value);\n}\n","import { isBuiltInComponentType } from './supportedTypes';\nimport type { Component, GenericComponent } from './types';\n\nexport function isGenericComponent(component: Component): component is GenericComponent {\n return !isBuiltInComponentType(component.type);\n}\n","import type { ComponentDescriptor } from './descriptor';\n\nexport const BUILT_IN_DESCRIPTORS: readonly ComponentDescriptor[] = [\n {\n type: 'rollingNumber',\n group: 'readout',\n category: 'indicator',\n value: { type: 'number', writable: false, default: 0 },\n properties: {},\n interaction: 'none',\n pointerScale: false,\n size: { width: 160, height: 90 },\n },\n {\n type: 'tickScale',\n group: 'readout',\n category: 'instrument',\n value: { type: 'number', writable: false, default: 0 },\n properties: {},\n interaction: 'none',\n pointerScale: true,\n size: { width: 200, height: 200 },\n },\n {\n type: 'ruler',\n group: 'input',\n category: 'instrument',\n value: { type: 'number', writable: false, default: 0 },\n properties: {},\n interaction: 'scale',\n pointerScale: true,\n size: { width: 120, height: 360 },\n },\n {\n type: 'switch',\n group: 'input',\n category: 'selection',\n value: { type: 'boolean', writable: true, default: false },\n properties: {\n accent: { type: 'color', default: '#5a6bff' },\n track: { type: 'color', default: '#cbd5e1' },\n thumb: { type: 'color', default: '#ffffff' },\n animate: { type: 'number', default: 160, min: 0, max: 2000, step: 10 },\n },\n interaction: 'toggle',\n pointerScale: false,\n size: { width: 52, height: 30, minWidth: 36, minHeight: 20, aspect: 52 / 30 },\n role: 'switch',\n },\n {\n type: 'checkbox',\n group: 'input',\n category: 'selection',\n value: { type: 'boolean', writable: true, default: false },\n properties: {\n accent: { type: 'color', default: '#5a6bff' },\n stroke: { type: 'color', default: '#94a3b8' },\n check: { type: 'color', default: '#ffffff' },\n textColor: { type: 'color', default: '#0f172a' },\n fontSize: { type: 'number', default: 14, min: 6, max: 200 },\n animate: { type: 'number', default: 160, min: 0, max: 2000, step: 10 },\n },\n interaction: 'toggle',\n pointerScale: false,\n size: { width: 160, height: 24, minWidth: 18, minHeight: 18 },\n role: 'checkbox',\n },\n {\n type: 'toggleButton',\n group: 'input',\n category: 'action',\n value: { type: 'boolean', writable: true, default: false },\n properties: {\n accent: { type: 'color', default: '#5a6bff' },\n stroke: { type: 'color', default: '#94a3b8' },\n textColor: { type: 'color', default: '#0f172a' },\n onTextColor: { type: 'color', default: '#ffffff' },\n fontSize: { type: 'number', default: 14, min: 6, max: 200 },\n animate: { type: 'number', default: 160, min: 0, max: 2000, step: 10 },\n },\n interaction: 'toggle',\n pointerScale: false,\n size: { width: 120, height: 40, minWidth: 40, minHeight: 24 },\n role: 'button',\n },\n {\n type: 'button',\n group: 'action',\n category: 'action',\n properties: {\n accent: { type: 'color', default: '#5a6bff' },\n textColor: { type: 'color', default: '#ffffff' },\n radius: { type: 'number', default: 8, min: 0, max: 200 },\n fontSize: { type: 'number', default: 14, min: 6, max: 200 },\n animate: { type: 'number', default: 160, min: 0, max: 2000, step: 10 },\n },\n interaction: 'press',\n pointerScale: false,\n size: { width: 120, height: 40, minWidth: 40, minHeight: 24 },\n role: 'button',\n },\n {\n type: 'slider',\n group: 'input',\n category: 'value',\n value: { type: 'number', writable: true, default: 40 },\n properties: {\n variant: { type: 'enum', default: 'line', options: ['line', 'field'] },\n direction: { type: 'enum', default: 'horizontal', options: ['horizontal', 'vertical'] },\n ticks: { type: 'number', default: 0, min: 0, max: 200 },\n tickColor: { type: 'color', default: '#94a3b8' },\n min: { type: 'number', default: 0 },\n max: { type: 'number', default: 100 },\n step: { type: 'number', default: 0, min: 0 },\n surface: { type: 'color', default: '#eef1f6' },\n fill: { type: 'color', default: '#cbd5e1' },\n textColor: { type: 'color', default: '#0f172a' },\n fontSize: { type: 'number', default: 14, min: 6, max: 200 },\n display: { type: 'enum', default: 'value', options: ['none', 'value', 'percent'] },\n radius: { type: 'number', default: 10, min: 0, max: 200 },\n accent: { type: 'color', default: '#5a6bff' },\n track: { type: 'color', default: '#cbd5e1' },\n thumb: { type: 'color', default: '#ffffff' },\n trackHeight: { type: 'number', default: 6, min: 1, max: 80 },\n thumbSize: { type: 'number', default: 56, min: 20, max: 100, step: 5 },\n animate: { type: 'number', default: 0, min: 0, max: 2000, step: 10 },\n },\n interaction: 'slide',\n pointerScale: false,\n size: { width: 220, height: 28, minWidth: 60, minHeight: 12 },\n role: 'slider',\n },\n {\n type: 'range',\n group: 'input',\n category: 'value',\n value: { type: 'number', writable: true, default: 25 },\n properties: {\n variant: { type: 'enum', default: 'line', options: ['line', 'field'] },\n direction: { type: 'enum', default: 'horizontal', options: ['horizontal', 'vertical'] },\n ticks: { type: 'number', default: 0, min: 0, max: 200 },\n tickColor: { type: 'color', default: '#94a3b8' },\n valueEnd: { type: 'number', default: 75 },\n min: { type: 'number', default: 0 },\n max: { type: 'number', default: 100 },\n step: { type: 'number', default: 0, min: 0 },\n surface: { type: 'color', default: '#eef1f6' },\n fill: { type: 'color', default: '#cbd5e1' },\n textColor: { type: 'color', default: '#0f172a' },\n fontSize: { type: 'number', default: 14, min: 6, max: 200 },\n display: { type: 'enum', default: 'value', options: ['none', 'value', 'percent'] },\n radius: { type: 'number', default: 10, min: 0, max: 200 },\n accent: { type: 'color', default: '#5a6bff' },\n track: { type: 'color', default: '#cbd5e1' },\n thumb: { type: 'color', default: '#ffffff' },\n trackHeight: { type: 'number', default: 6, min: 1, max: 80 },\n thumbSize: { type: 'number', default: 56, min: 20, max: 100, step: 5 },\n animate: { type: 'number', default: 0, min: 0, max: 2000, step: 10 },\n },\n interaction: 'range',\n pointerScale: false,\n size: { width: 220, height: 28, minWidth: 60, minHeight: 12 },\n role: 'slider',\n },\n {\n type: 'progress',\n group: 'readout',\n category: 'indicator',\n value: { type: 'number', writable: false, default: 60 },\n properties: {\n min: { type: 'number', default: 0 },\n max: { type: 'number', default: 100 },\n variant: { type: 'enum', default: 'bar', options: ['bar', 'ring'] },\n direction: { type: 'enum', default: 'horizontal', options: ['horizontal', 'vertical'] },\n accent: { type: 'color', default: '#5a6bff' },\n track: { type: 'color', default: '#e2e8f0' },\n thickness: { type: 'number', default: 10, min: 1, max: 80 },\n rounded: { type: 'boolean', default: true },\n display: { type: 'enum', default: 'none', options: ['none', 'percent', 'value'] },\n textColor: { type: 'color', default: '#0f172a' },\n fontSize: { type: 'number', default: 14, min: 6, max: 200 },\n animate: { type: 'number', default: 300, min: 0, max: 2000, step: 10 },\n },\n interaction: 'none',\n pointerScale: false,\n size: { width: 220, height: 12, minWidth: 20, minHeight: 4 },\n role: 'progressbar',\n },\n {\n type: 'segmented',\n group: 'input',\n category: 'selection',\n value: { type: 'number', writable: true, default: 0 },\n properties: {\n options: { type: 'string', default: 'Day,Week,Month' },\n accent: { type: 'color', default: '#5a6bff' },\n track: { type: 'color', default: '#e2e8f0' },\n textColor: { type: 'color', default: '#475569' },\n activeTextColor: { type: 'color', default: '#ffffff' },\n radius: { type: 'number', default: 200, min: 0, max: 200 },\n inset: { type: 'number', default: 3, min: 0, max: 20 },\n fontSize: { type: 'number', default: 14, min: 6, max: 200 },\n animate: { type: 'number', default: 200, min: 0, max: 2000, step: 10 },\n },\n interaction: 'pick',\n pointerScale: false,\n size: { width: 300, height: 40, minWidth: 80, minHeight: 20 },\n role: 'radiogroup',\n },\n {\n type: 'knob',\n group: 'input',\n category: 'value',\n value: { type: 'number', writable: true, default: 40 },\n properties: {\n min: { type: 'number', default: 0 },\n max: { type: 'number', default: 100 },\n step: { type: 'number', default: 0, min: 0 },\n start: { type: 'number', default: 225, min: 0, max: 360 },\n sweep: { type: 'number', default: 270, min: 30, max: 360 },\n accent: { type: 'color', default: '#5a6bff' },\n track: { type: 'color', default: '#cbd5e1' },\n face: { type: 'color', default: '#f1f5f9' },\n dot: { type: 'color', default: '#0f172a' },\n thickness: { type: 'number', default: 8, min: 1, max: 80 },\n rounded: { type: 'boolean', default: true },\n display: { type: 'enum', default: 'value', options: ['none', 'value', 'percent'] },\n textColor: { type: 'color', default: '#0f172a' },\n fontSize: { type: 'number', default: 16, min: 6, max: 200 },\n animate: { type: 'number', default: 0, min: 0, max: 2000, step: 10 },\n },\n interaction: 'turn',\n pointerScale: false,\n size: { width: 96, height: 96, minWidth: 40, minHeight: 40, aspect: 1 },\n role: 'slider',\n },\n];\n","import { BUILT_IN_DESCRIPTORS } from './builtIns';\nimport type { ComponentDescriptor } from './descriptor';\n\nlet version = 0;\n\nconst descriptors = new Map<string, ComponentDescriptor>(\n BUILT_IN_DESCRIPTORS.map(descriptor => [descriptor.type, descriptor]),\n);\n\nconst TYPE_NAME = /^[A-Za-z][A-Za-z0-9]*$/;\n\nexport function registerComponentDescriptor(descriptor: ComponentDescriptor): () => void {\n if (!TYPE_NAME.test(descriptor.type)) {\n throw new Error(`'${descriptor.type}' is not a valid component type name.`);\n }\n if (descriptors.has(descriptor.type)) {\n throw new Error(`A component of type '${descriptor.type}' is already defined.`);\n }\n descriptors.set(descriptor.type, descriptor);\n version += 1;\n return () => {\n if (descriptors.get(descriptor.type) === descriptor) {\n descriptors.delete(descriptor.type);\n version += 1;\n }\n };\n}\n\nexport function componentRegistryVersion(): number {\n return version;\n}\n\nexport function getComponentDescriptor(type: string | undefined): ComponentDescriptor | undefined {\n return type === undefined ? undefined : descriptors.get(type);\n}\n\nexport function componentTypes(): string[] {\n return [...descriptors.keys()];\n}\n\nexport function isComponentType(value: string | undefined): boolean {\n return getComponentDescriptor(value) !== undefined;\n}\n","export function formatRollingNumber(value: string | number, digits: number | undefined): string {\n const text = String(value);\n if (digits === undefined) {\n return text;\n }\n if (!Number.isInteger(digits) || digits < 1) {\n return text;\n }\n return text.padStart(digits, '0');\n}\n","import type { RollingNumberComponentStyle } from './types';\n\nexport const DEFAULT_ROLLING_NUMBER_STYLE: Required<RollingNumberComponentStyle> = {\n color: '#000000',\n surface: 'rgba(255, 255, 255, 0.28)',\n divider: 'rgba(0, 0, 0, 0.2)',\n labelColor: 'rgba(0, 0, 0, 0.62)',\n fontFamily: \"'Roboto Mono', 'SFMono-Regular', Consolas, monospace\",\n variant: 'flip',\n motion: 'roll',\n fontWeight: '300',\n fontSize: 0,\n};\n\nexport function resolveRollingNumberStyle(style: RollingNumberComponentStyle): Required<RollingNumberComponentStyle> {\n return {\n color: style.color ?? DEFAULT_ROLLING_NUMBER_STYLE.color,\n surface: style.surface ?? DEFAULT_ROLLING_NUMBER_STYLE.surface,\n divider: style.divider ?? DEFAULT_ROLLING_NUMBER_STYLE.divider,\n labelColor: style.labelColor ?? DEFAULT_ROLLING_NUMBER_STYLE.labelColor,\n fontFamily: style.fontFamily ?? DEFAULT_ROLLING_NUMBER_STYLE.fontFamily,\n variant: style.variant ?? DEFAULT_ROLLING_NUMBER_STYLE.variant,\n motion: style.motion ?? DEFAULT_ROLLING_NUMBER_STYLE.motion,\n fontWeight: style.fontWeight ?? DEFAULT_ROLLING_NUMBER_STYLE.fontWeight,\n fontSize: style.fontSize ?? DEFAULT_ROLLING_NUMBER_STYLE.fontSize,\n };\n}\n","export interface SourcePosition {\n line: number;\n col: number;\n}\n\nexport class SourceCursor {\n private offset = 0;\n line = 1;\n col = 1;\n\n constructor(readonly input: string) {}\n\n get done(): boolean {\n return this.offset >= this.input.length;\n }\n\n peek(ahead = 0): string | undefined {\n return this.input[this.offset + ahead];\n }\n\n startsWith(value: string): boolean {\n return this.input.startsWith(value, this.offset);\n }\n\n position(): SourcePosition {\n return { line: this.line, col: this.col };\n }\n\n advance(): string {\n const character = this.input[this.offset];\n if (character === undefined) {\n throw new Error('Cannot advance beyond the end of the SFL source.');\n }\n this.offset++;\n if (character === '\\n' || (character === '\\r' && this.peek() !== '\\n')) {\n this.line++;\n this.col = 1;\n } else {\n this.col++;\n }\n return character;\n }\n}\n","export class SflLexError extends Error {\n constructor(\n message: string,\n public line: number,\n public col: number,\n ) {\n super(`SFL lex error (${line}:${col}): ${message}`);\n this.name = 'SflLexError';\n }\n}\n","export const isLetter = (character: string | undefined): character is string =>\n character !== undefined && /^[A-Za-z_]$/.test(character);\n\nexport const isDigit = (character: string | undefined): character is string =>\n character !== undefined && character >= '0' && character <= '9';\n\nexport const isIdentPart = (character: string | undefined): character is string =>\n character !== undefined && /^[A-Za-z0-9_]$/.test(character);\n","import type { SourceCursor, SourcePosition } from './cursor';\nimport type { Token, TokenType } from './types';\n\nexport function createToken(\n type: TokenType,\n value: string,\n start: SourcePosition,\n detail: Pick<Token, 'numberValue'> = {},\n): Token {\n return {\n type,\n value,\n line: start.line,\n col: start.col,\n endLine: start.line,\n endCol: start.col,\n ...detail,\n };\n}\n\nexport function withTokenEnd(token: Token, cursor: SourceCursor): Token {\n return {\n ...token,\n endLine: cursor.line,\n endCol: cursor.col,\n };\n}\n","import { isIdentPart, isLetter } from './characters';\nimport type { SourceCursor, SourcePosition } from './cursor';\nimport { createToken } from './tokenCreation';\nimport type { Token } from './types';\n\nexport function startsIdentifier(cursor: SourceCursor): boolean {\n return isLetter(cursor.peek());\n}\n\nexport function readIdentifier(cursor: SourceCursor, start: SourcePosition): Token {\n let value = '';\n while (isIdentPart(cursor.peek())) {\n value += cursor.advance();\n }\n\n return createToken('ident', value, start);\n}\n","import type { SourceCursor, SourcePosition } from './cursor';\nimport { createToken } from './tokenCreation';\nimport type { Token } from './types';\n\nexport function isLineBreak(character: string): boolean {\n return character === '\\r' || character === '\\n';\n}\n\nexport function readLineBreak(cursor: SourceCursor, start: SourcePosition): Token {\n const firstCharacter = cursor.advance();\n if (firstCharacter === '\\r' && cursor.peek() === '\\n') {\n cursor.advance();\n }\n\n return createToken('newline', '\\n', start);\n}\n","import type { SourceCursor } from './cursor';\n\nexport function startsLineComment(cursor: SourceCursor): boolean {\n return cursor.peek() === '/' && cursor.peek(1) === '/';\n}\n\nexport function consumeLineComment(cursor: SourceCursor): void {\n while (!cursor.done && cursor.peek() !== '\\n' && cursor.peek() !== '\\r') {\n cursor.advance();\n }\n}\n","import { isDigit } from './characters';\nimport type { SourceCursor, SourcePosition } from './cursor';\nimport { createToken } from './tokenCreation';\nimport type { Token } from './types';\n\nexport function startsNumber(cursor: SourceCursor): boolean {\n const character = cursor.peek();\n return isDigit(character) || (character === '-' && isDigit(cursor.peek(1)));\n}\n\nexport function readNumber(cursor: SourceCursor, start: SourcePosition): Token {\n let value = '';\n if (cursor.peek() === '-') {\n value += cursor.advance();\n }\n while (isDigit(cursor.peek())) {\n value += cursor.advance();\n }\n if (cursor.peek() === '.' && isDigit(cursor.peek(1))) {\n value += cursor.advance();\n while (isDigit(cursor.peek())) {\n value += cursor.advance();\n }\n }\n\n return createToken('number', value, start, { numberValue: Number(value) });\n}\n","import type { SourceCursor, SourcePosition } from './cursor';\nimport { createToken } from './tokenCreation';\nimport type { Token, TokenType } from './types';\n\nconst OPERATORS: Array<[string, TokenType]> = [\n ['<->', 'bind2'],\n ['<-', 'bind'],\n ['->', 'action'],\n ['&&', 'op'],\n ['||', 'op'],\n ['>=', 'op'],\n ['<=', 'op'],\n ['==', 'op'],\n ['!=', 'op'],\n ['+', 'op'],\n ['-', 'op'],\n ['*', 'op'],\n ['/', 'op'],\n ['>', 'op'],\n ['<', 'op'],\n ['!', 'op'],\n];\n\nconst startsNumber = (character: string | undefined): boolean => character !== undefined && /[\\d.]/.test(character);\n\nexport function readOperator(cursor: SourceCursor, start: SourcePosition): Token | null {\n const match = OPERATORS.find(([text]) => cursor.startsWith(text));\n if (!match) {\n return null;\n }\n const [text, type] = match;\n if (text === '-' && startsNumber(cursor.peek(1))) {\n return null;\n }\n for (let index = 0; index < text.length; index++) {\n cursor.advance();\n }\n return createToken(type, text, start);\n}\n","import type { SourceCursor, SourcePosition } from './cursor';\nimport { createToken } from './tokenCreation';\nimport type { Token, TokenType } from './types';\n\nconst PUNCTUATION: Partial<Record<string, TokenType>> = {\n '{': 'lbrace',\n '}': 'rbrace',\n '[': 'lbracket',\n ']': 'rbracket',\n '(': 'lparen',\n ')': 'rparen',\n ':': 'colon',\n ',': 'comma',\n ';': 'semi',\n '.': 'dot',\n '&': 'amp',\n};\n\nexport function readPunctuation(cursor: SourceCursor, start: SourcePosition): Token | null {\n const character = cursor.peek();\n const type = character ? PUNCTUATION[character] : undefined;\n if (!character || !type || (character === '&' && cursor.peek(1) === '&')) {\n return null;\n }\n\n cursor.advance();\n return createToken(type, character, start);\n}\n","import type { SourceCursor } from './cursor';\n\nexport function isSpacing(character: string): boolean {\n return character === ' ' || character === '\\t';\n}\n\nexport function consumeSpacing(cursor: SourceCursor): void {\n cursor.advance();\n}\n","import type { SourceCursor, SourcePosition } from './cursor';\nimport { SflLexError } from './error';\nimport { createToken } from './tokenCreation';\nimport type { Token } from './types';\n\nfunction indentationWidth(line: string): number {\n let width = 0;\n while (line[width] === ' ' || line[width] === '\\t') {\n width++;\n }\n return width;\n}\n\nfunction dedent(text: string): string {\n const lines = text.split('\\n');\n let margin = Infinity;\n for (const line of lines) {\n if (!line.trim()) {\n continue;\n }\n margin = Math.min(margin, indentationWidth(line));\n }\n if (!Number.isFinite(margin) || margin === 0) {\n return text;\n }\n return lines.map(line => (line.trim() ? line.slice(margin) : line)).join('\\n');\n}\n\nfunction readLongString(cursor: SourceCursor, start: SourcePosition): string {\n consumeLongStringDelimiter(cursor);\n let body = '';\n\n while (!cursor.done) {\n if (cursor.startsWith('\"\"\"')) {\n consumeLongStringDelimiter(cursor);\n return dedent(body.replace(/^\\r?\\n/, '').replace(/\\r?\\n[ \\t]*$/, ''));\n }\n body += cursor.advance();\n }\n throw new SflLexError('unterminated long string', start.line, start.col);\n}\n\nfunction consumeLongStringDelimiter(cursor: SourceCursor): void {\n cursor.advance();\n cursor.advance();\n cursor.advance();\n}\n\nfunction readShortString(cursor: SourceCursor, start: SourcePosition): string {\n cursor.advance();\n let value = '';\n while (!cursor.done) {\n const character = cursor.advance();\n if (character === '\"') {\n return value;\n }\n if (character === '\\n' || character === '\\r') {\n throw new SflLexError('newline in short string (use \"\"\" for multiline)', start.line, start.col);\n }\n value += character === '\\\\' ? readEscapedCharacter(cursor, start) : character;\n }\n throw new SflLexError('unterminated string', start.line, start.col);\n}\n\nfunction readEscapedCharacter(cursor: SourceCursor, start: SourcePosition): string {\n if (cursor.done) {\n throw new SflLexError('unterminated escape sequence', start.line, start.col);\n }\n const escaped = cursor.advance();\n switch (escaped) {\n case '\"':\n return '\"';\n case '\\\\':\n return '\\\\';\n case 'n':\n return '\\n';\n case 't':\n return '\\t';\n default:\n throw new SflLexError(`invalid escape '\\\\${escaped}'`, start.line, start.col);\n }\n}\n\nfunction readString(cursor: SourceCursor, start: SourcePosition): string {\n return cursor.startsWith('\"\"\"') ? readLongString(cursor, start) : readShortString(cursor, start);\n}\n\nexport function readStringToken(cursor: SourceCursor, start: SourcePosition): Token {\n return createToken('string', readString(cursor, start), start);\n}\n","import type { SourceCursor, SourcePosition } from './cursor';\nimport { SflLexError } from './error';\nimport { readIdentifier, startsIdentifier } from './identifiers';\nimport { isLineBreak, readLineBreak } from './lineBreak';\nimport { consumeLineComment, startsLineComment } from './lineComment';\nimport { readNumber, startsNumber } from './numbers';\nimport { readOperator } from './operators';\nimport { readPunctuation } from './punctuation';\nimport { consumeSpacing, isSpacing } from './spacing';\nimport { readStringToken } from './strings';\nimport type { Token } from './types';\n\nexport function readNextToken(cursor: SourceCursor): Token | null {\n const character = cursor.peek();\n if (character === undefined) {\n return null;\n }\n\n const start = cursor.position();\n if (isLineBreak(character)) {\n return readLineBreak(cursor, start);\n }\n if (consumeLexerTrivia(cursor, character)) {\n return null;\n }\n const token = readSymbolToken(cursor, character, start) ?? readWordToken(cursor, start);\n if (token) {\n return token;\n }\n\n throw new SflLexError(`unexpected character '${character}'`, start.line, start.col);\n}\n\nfunction consumeLexerTrivia(cursor: SourceCursor, character: string): boolean {\n if (isSpacing(character)) {\n consumeSpacing(cursor);\n return true;\n }\n if (startsLineComment(cursor)) {\n consumeLineComment(cursor);\n return true;\n }\n return false;\n}\n\nfunction readSymbolToken(cursor: SourceCursor, character: string, start: SourcePosition): Token | null {\n const punctuation = readPunctuation(cursor, start);\n if (punctuation) {\n return punctuation;\n }\n if (character === '\"') {\n return readStringToken(cursor, start);\n }\n return readOperator(cursor, start);\n}\n\nfunction readWordToken(cursor: SourceCursor, start: SourcePosition): Token | null {\n if (startsNumber(cursor)) {\n return readNumber(cursor, start);\n }\n if (startsIdentifier(cursor)) {\n return readIdentifier(cursor, start);\n }\n return null;\n}\n","import { SourceCursor } from './cursor';\nimport { readNextToken } from './nextToken';\nimport { createToken, withTokenEnd } from './tokenCreation';\nimport type { Token } from './types';\n\nexport function tokenizeSource(input: string): Token[] {\n const cursor = new SourceCursor(input);\n const tokens: Token[] = [];\n\n while (!cursor.done) {\n const token = readNextToken(cursor);\n if (token) {\n tokens.push(withTokenEnd(token, cursor));\n }\n }\n\n tokens.push(withTokenEnd(createToken('eof', '', cursor.position()), cursor));\n return tokens;\n}\n","export class SflParseError extends Error {\n constructor(\n message: string,\n public line: number,\n public col: number,\n ) {\n super(`SFL parse error (${line}:${col}): ${message}`);\n this.name = 'SflParseError';\n }\n}\n","import type { Token, TokenType } from '../lexing/types';\nimport { SflParseError } from './error';\n\nexport class TokenCursor {\n private position = 0;\n\n constructor(private readonly tokens: Token[]) {}\n\n peek(offset = 0): Token {\n return this.tokens[Math.min(this.position + offset, this.tokens.length - 1)];\n }\n\n at(type: TokenType): boolean {\n return this.peek().type === type;\n }\n\n next(): Token {\n return this.tokens[this.position++];\n }\n\n expect(type: TokenType, description: string): Token {\n const token = this.peek();\n if (token.type !== type) {\n throw new SflParseError(`expected ${description}, got '${token.value || token.type}'`, token.line, token.col);\n }\n return this.next();\n }\n\n expectNumber(description: string): number {\n const token = this.expect('number', description);\n if (token.numberValue === undefined) {\n throw new SflParseError(`expected ${description} to contain a numeric value`, token.line, token.col);\n }\n return token.numberValue;\n }\n\n skipNewlines(): void {\n while (this.at('newline')) {\n this.next();\n }\n }\n}\n","export const NAMED_BLOCK_KINDS = [\n 'Project',\n 'Model',\n 'Group',\n 'Entity',\n 'Container',\n 'Path',\n 'Chart',\n 'Widget',\n 'Component',\n 'Shape',\n 'Text',\n 'Isometric',\n 'Dimension',\n 'Link',\n 'Connection',\n 'Layout',\n 'Style',\n 'Shader',\n 'Axis',\n 'Series',\n 'Rule',\n 'Net',\n 'Symbol',\n 'Port',\n 'DataSource',\n 'Repeat',\n] as const;\n\nexport type NamedBlockKind = (typeof NAMED_BLOCK_KINDS)[number];\nexport type BlockKind = NamedBlockKind | 'data';\n\nexport const BLOCK_KINDS: readonly BlockKind[] = [...NAMED_BLOCK_KINDS, 'data'];\n\nexport type Side = 'top' | 'bottom' | 'left' | 'right';\n\nexport const SIDES: readonly Side[] = ['top', 'bottom', 'left', 'right'];\n\nexport interface SflDocument {\n version: string;\n blocks: SflBlock[];\n}\n\nexport interface SflBlock {\n kind: BlockKind;\n name: string;\n composition: string[];\n entries: SflEntry[];\n}\n\nexport type SflEntry =\n | { type: 'property'; property: SflProperty }\n | { type: 'block'; block: SflBlock }\n | { type: 'layout'; layout: SflLayout }\n | { type: 'style'; style: SflStyle }\n | { type: 'data'; data: SflBlock }\n | { type: 'fields'; fields: SflProperty[] }\n | { type: 'binding'; binding: SflBinding }\n | { type: 'handler'; handler: SflHandler };\n\nexport type BindingOperator = '<-' | '<->' | '->';\n\nexport type ExpressionOperator = '+' | '-' | '*' | '/' | '>' | '<' | '>=' | '<=' | '==' | '!=' | '&&' | '||';\n\nexport type SflExpr =\n | { kind: 'number'; value: number }\n | { kind: 'string'; value: string }\n | { kind: 'boolean'; value: boolean }\n | { kind: 'ref'; path: string[] }\n | { kind: 'unary'; operator: '!' | '-'; operand: SflExpr }\n | { kind: 'binary'; operator: ExpressionOperator; left: SflExpr; right: SflExpr }\n | { kind: 'call'; callee: string[]; args: SflExpr[] };\n\nexport interface SflBinding {\n key: string;\n operator: BindingOperator;\n expr: SflExpr;\n line: number;\n col: number;\n}\n\nexport interface SflAssignment {\n target: string[];\n expr: SflExpr;\n line: number;\n col: number;\n}\n\nexport interface SflHandler {\n event: string;\n assignments: SflAssignment[];\n line: number;\n col: number;\n}\n\nexport interface SflProperty {\n key: string;\n value: SflValue;\n}\n\nexport interface SflLayout {\n properties: SflProperty[];\n}\n\nexport interface SflStyle {\n properties: SflProperty[];\n bindings?: SflBinding[];\n}\n\nexport type SflValue =\n | SflStringValue\n | SflNumberValue\n | SflTupleValue\n | SflListValue\n | SflIdentValue\n | SflEndpointValue\n | SflExprValue;\n\n// A value that is computed, like `col * 25, row * 12`. It is only valid inside a `Repeat`, which works it out for every cell.\nexport interface SflExprValue {\n type: 'expr';\n items: SflExpr[];\n}\n\nexport interface SflStringValue {\n type: 'string';\n value: string;\n}\n\nexport interface SflNumberValue {\n type: 'number';\n value: number;\n}\n\nexport interface SflTupleValue {\n type: 'tuple';\n values: number[];\n}\n\nexport interface SflListValue {\n type: 'list';\n values: SflValue[];\n}\n\nexport interface SflIdentValue {\n type: 'ident';\n segments: string[];\n}\n\nexport interface SflEndpointValue {\n type: 'endpoint';\n segments: string[];\n side?: Side;\n fraction?: number;\n}\n\nexport const isSide = (s: string): s is Side => (SIDES as readonly string[]).includes(s);\nexport const isComponentBlockKind = (kind: string): boolean => kind === 'Component' || kind === 'Widget';\n\nexport const isBlockKind = (s: string): s is BlockKind => (BLOCK_KINDS as readonly string[]).includes(s);\nexport const isNamedBlockKind = (s: string): s is NamedBlockKind =>\n (NAMED_BLOCK_KINDS as readonly string[]).includes(s);\n","import { isSide, type SflExpr, type SflValue, type Side } from '../ast';\nimport type { TokenCursor } from './cursor';\nimport { SflParseError } from './error';\nimport { parseExpression } from './expressions';\n\nexport function parsePathSegments(cursor: TokenCursor): string[] {\n const segments = [cursor.expect('ident', 'path identifier').value];\n while (cursor.at('dot')) {\n cursor.next();\n segments.push(cursor.expect('ident', 'identifier after \".\"').value);\n }\n return segments;\n}\n\nexport function parseEndpoint(cursor: TokenCursor): SflValue {\n const segments = parsePathSegments(cursor);\n let side: Side | undefined;\n let fraction: number | undefined;\n\n if (cursor.at('comma')) {\n cursor.next();\n const sideToken = cursor.expect('ident', 'side after \",\"');\n if (!isSide(sideToken.value)) {\n throw new SflParseError(\n `expected a side (top/right/bottom/left), got '${sideToken.value}'`,\n sideToken.line,\n sideToken.col,\n );\n }\n side = sideToken.value;\n if (cursor.at('lparen')) {\n cursor.next();\n fraction = cursor.expectNumber('fraction inside \"(\"');\n cursor.expect('rparen', \"')'\");\n }\n }\n return { type: 'endpoint', segments, side, fraction };\n}\n\nfunction parseList(cursor: TokenCursor): SflValue {\n cursor.expect('lbracket', \"'['\");\n const values: SflValue[] = [];\n cursor.skipNewlines();\n if (!cursor.at('rbracket')) {\n values.push(parseValue(cursor, false));\n cursor.skipNewlines();\n while (cursor.at('comma')) {\n cursor.next();\n cursor.skipNewlines();\n if (cursor.at('rbracket')) {\n break;\n }\n values.push(parseValue(cursor, false));\n cursor.skipNewlines();\n }\n }\n cursor.expect('rbracket', \"']'\");\n return { type: 'list', values };\n}\n\nconst ARITHMETIC = new Set(['+', '-', '*', '/', '>', '<', '>=', '<=', '==', '!=', '&&', '||']);\n\n// A value is computed when, before the end of the line, it has an operator or a call, or a name after a comma, or it starts with one.\n// Nothing that was valid before has any of these, so the documents that are already written read as they did.\nfunction startsComputed(cursor: TokenCursor): boolean {\n const first = cursor.peek();\n if (first.type === 'op' && first.value === '-') {\n return true;\n }\n if (first.type !== 'number' && first.type !== 'ident' && first.type !== 'lparen') {\n return false;\n }\n for (let offset = 0; ; offset++) {\n const token = cursor.peek(offset);\n if (token.type === 'newline' || token.type === 'semi' || token.type === 'rbrace' || token.type === 'eof') {\n return false;\n }\n if (token.type === 'lparen' || (token.type === 'op' && ARITHMETIC.has(token.value))) {\n return true;\n }\n if (token.type === 'ident' && cursor.peek(offset - 1).type === 'comma') {\n return true;\n }\n if (offset === 0 && token.type === 'ident' && cursor.peek(1).type === 'comma') {\n return true;\n }\n }\n}\n\nfunction parseComputed(cursor: TokenCursor): SflValue {\n const items: SflExpr[] = [parseExpression(cursor)];\n while (cursor.at('comma')) {\n cursor.next();\n items.push(parseExpression(cursor));\n }\n return { type: 'expr', items };\n}\n\nexport function parseValue(cursor: TokenCursor, allowTuple = true): SflValue {\n if (allowTuple && startsComputed(cursor)) {\n return parseComputed(cursor);\n }\n const token = cursor.peek();\n switch (token.type) {\n case 'string':\n cursor.next();\n return { type: 'string', value: token.value };\n case 'lbracket':\n return parseList(cursor);\n case 'number': {\n const firstValue = cursor.expectNumber('number');\n if (!allowTuple || !cursor.at('comma')) {\n return { type: 'number', value: firstValue };\n }\n const values = [firstValue];\n while (cursor.at('comma')) {\n cursor.next();\n values.push(cursor.expectNumber('number in tuple'));\n }\n return { type: 'tuple', values };\n }\n case 'ident':\n return { type: 'ident', segments: parsePathSegments(cursor) };\n default:\n throw new SflParseError(`expected a value, got '${token.value || token.type}'`, token.line, token.col);\n }\n}\n","import type { ExpressionOperator, SflAssignment, SflBinding, SflExpr, SflHandler } from '../ast';\nimport type { TokenCursor } from './cursor';\nimport { SflParseError } from './error';\nimport { parsePathSegments } from './values';\n\nconst COMPARISONS = new Set(['>', '<', '>=', '<=', '==', '!=']);\n\nfunction atOperator(cursor: TokenCursor, operators: ReadonlySet<string>): boolean {\n const token = cursor.peek();\n return token.type === 'op' && operators.has(token.value);\n}\n\nfunction parseBinaryLevel(\n cursor: TokenCursor,\n operators: ReadonlySet<string>,\n parseOperand: (cursor: TokenCursor) => SflExpr,\n): SflExpr {\n let left = parseOperand(cursor);\n while (atOperator(cursor, operators)) {\n const operator = cursor.next().value as ExpressionOperator;\n left = { kind: 'binary', operator, left, right: parseOperand(cursor) };\n }\n return left;\n}\n\nconst OR = new Set(['||']);\nconst AND = new Set(['&&']);\nconst ADDITIVE = new Set(['+', '-']);\nconst MULTIPLICATIVE = new Set(['*', '/']);\n\nexport function parseExpression(cursor: TokenCursor): SflExpr {\n return parseBinaryLevel(cursor, OR, parseAnd);\n}\n\nfunction parseAnd(cursor: TokenCursor): SflExpr {\n return parseBinaryLevel(cursor, AND, parseComparison);\n}\n\nfunction parseComparison(cursor: TokenCursor): SflExpr {\n return parseBinaryLevel(cursor, COMPARISONS, parseAdditive);\n}\n\nfunction parseAdditive(cursor: TokenCursor): SflExpr {\n return parseBinaryLevel(cursor, ADDITIVE, parseMultiplicative);\n}\n\nfunction parseMultiplicative(cursor: TokenCursor): SflExpr {\n return parseBinaryLevel(cursor, MULTIPLICATIVE, parseUnary);\n}\n\nfunction parseUnary(cursor: TokenCursor): SflExpr {\n const token = cursor.peek();\n if (token.type === 'op' && (token.value === '!' || token.value === '-')) {\n cursor.next();\n return { kind: 'unary', operator: token.value, operand: parseUnary(cursor) };\n }\n return parsePrimary(cursor);\n}\n\nfunction parseCallArguments(cursor: TokenCursor): SflExpr[] {\n cursor.expect('lparen', \"'('\");\n const args: SflExpr[] = [];\n cursor.skipNewlines();\n while (!cursor.at('rparen')) {\n args.push(parseExpression(cursor));\n cursor.skipNewlines();\n if (cursor.at('comma')) {\n cursor.next();\n cursor.skipNewlines();\n } else if (!cursor.at('rparen')) {\n const token = cursor.peek();\n throw new SflParseError(`expected ',' or ')', got '${token.value || token.type}'`, token.line, token.col);\n }\n }\n cursor.expect('rparen', \"')'\");\n return args;\n}\n\nfunction parsePrimary(cursor: TokenCursor): SflExpr {\n const token = cursor.peek();\n switch (token.type) {\n case 'number':\n return { kind: 'number', value: cursor.expectNumber('number') };\n case 'string':\n cursor.next();\n return { kind: 'string', value: token.value };\n case 'lparen': {\n cursor.next();\n const inner = parseExpression(cursor);\n cursor.expect('rparen', \"')'\");\n return inner;\n }\n case 'ident': {\n const path = parsePathSegments(cursor);\n if (path.length === 1 && (path[0] === 'true' || path[0] === 'false')) {\n return { kind: 'boolean', value: path[0] === 'true' };\n }\n return cursor.at('lparen')\n ? { kind: 'call', callee: path, args: parseCallArguments(cursor) }\n : { kind: 'ref', path };\n }\n default:\n throw new SflParseError(`expected an expression, got '${token.value || token.type}'`, token.line, token.col);\n }\n}\n\nexport const BINDING_OPERATORS = ['bind', 'bind2', 'action'];\n\nexport function atBinding(cursor: TokenCursor): boolean {\n return (\n cursor.peek().type === 'ident' && cursor.peek(1).type === 'colon' && BINDING_OPERATORS.includes(cursor.peek(2).type)\n );\n}\n\nexport function parseBinding(cursor: TokenCursor): SflBinding {\n const key = cursor.expect('ident', 'bound property');\n cursor.expect('colon', \"':'\");\n const operator = cursor.next().value as SflBinding['operator'];\n const expr = parseExpression(cursor);\n const next = cursor.peek();\n if (!['newline', 'semi', 'rbrace', 'eof'].includes(next.type)) {\n throw new SflParseError(`unexpected '${next.value || next.type}' after binding`, next.line, next.col);\n }\n return { key: key.value, operator, expr, line: key.line, col: key.col };\n}\n\nexport function parseAssignment(cursor: TokenCursor): SflAssignment {\n const start = cursor.peek();\n const target = parsePathSegments(cursor);\n cursor.expect('bind', \"'<-'\");\n const expr = parseExpression(cursor);\n return { target, expr, line: start.line, col: start.col };\n}\n\nexport function atHandler(cursor: TokenCursor): boolean {\n const token = cursor.peek();\n return token.type === 'ident' && /^on[A-Z]/.test(token.value) && ['colon', 'lbrace'].includes(cursor.peek(1).type);\n}\n\nexport function parseHandler(cursor: TokenCursor): SflHandler {\n const event = cursor.expect('ident', 'event name');\n const assignments: SflAssignment[] = [];\n if (cursor.at('colon')) {\n cursor.next();\n assignments.push(parseAssignment(cursor));\n expectEnd(cursor, 'handler');\n } else {\n cursor.expect('lbrace', \"'{'\");\n cursor.skipNewlines();\n while (!cursor.at('rbrace')) {\n if (cursor.at('eof')) {\n throw new SflParseError(`unterminated handler '${event.value}'`, event.line, event.col);\n }\n assignments.push(parseAssignment(cursor));\n expectEnd(cursor, 'assignment');\n cursor.skipNewlines();\n }\n cursor.expect('rbrace', \"'}'\");\n }\n return { event: event.value, assignments, line: event.line, col: event.col };\n}\n\nfunction expectEnd(cursor: TokenCursor, what: string): void {\n const next = cursor.peek();\n if (!['newline', 'semi', 'rbrace', 'eof'].includes(next.type)) {\n throw new SflParseError(`unexpected '${next.value || next.type}' after ${what}`, next.line, next.col);\n }\n if (next.type === 'semi') {\n cursor.next();\n }\n}\n","import type { SflBinding, SflLayout, SflProperty, SflStyle } from '../ast';\nimport type { TokenCursor } from './cursor';\nimport { SflParseError } from './error';\nimport { atBinding, parseBinding } from './expressions';\nimport { parseEndpoint, parseValue } from './values';\n\nexport class PropertyParser {\n constructor(private readonly cursor: TokenCursor) {}\n\n parseLayout(): SflLayout {\n this.cursor.next();\n return { properties: this.parsePropertyBlock('layout') };\n }\n\n parseStyle(): SflStyle {\n this.cursor.next();\n this.cursor.skipNewlines();\n this.cursor.expect('lbrace', \"'{'\");\n const properties: SflProperty[] = [];\n const bindings: SflBinding[] = [];\n this.cursor.skipNewlines();\n while (!this.cursor.at('rbrace')) {\n if (this.cursor.at('eof')) {\n const token = this.cursor.peek();\n throw new SflParseError('unterminated style block', token.line, token.col);\n }\n if (atBinding(this.cursor)) {\n bindings.push(parseBinding(this.cursor));\n if (this.cursor.at('newline') || this.cursor.at('semi')) {\n this.cursor.next();\n }\n } else {\n properties.push(this.parseProperty());\n }\n this.cursor.skipNewlines();\n }\n this.cursor.expect('rbrace', \"'}'\");\n return bindings.length ? { properties, bindings } : { properties };\n }\n\n parseFields(): SflProperty[] {\n this.cursor.next();\n return this.parsePropertyBlock('fields');\n }\n\n parseProperty(): SflProperty {\n const key = this.cursor.expect('ident', 'property key').value;\n this.cursor.expect('colon', \"':'\");\n const value = key === 'from' || key === 'to' ? parseEndpoint(this.cursor) : parseValue(this.cursor);\n this.consumeTerminator();\n return { key, value };\n }\n\n private parsePropertyBlock(kind: 'layout' | 'style' | 'fields'): SflProperty[] {\n this.cursor.skipNewlines();\n this.cursor.expect('lbrace', \"'{'\");\n const properties: SflProperty[] = [];\n this.cursor.skipNewlines();\n while (!this.cursor.at('rbrace')) {\n if (this.cursor.at('eof')) {\n const token = this.cursor.peek();\n throw new SflParseError(`unterminated ${kind} block`, token.line, token.col);\n }\n properties.push(this.parseProperty());\n this.cursor.skipNewlines();\n }\n this.cursor.expect('rbrace', \"'}'\");\n return properties;\n }\n\n private consumeTerminator(): void {\n if (this.cursor.at('newline') || this.cursor.at('semi')) {\n this.cursor.next();\n return;\n }\n if (this.cursor.at('rbrace') || this.cursor.at('eof')) {\n return;\n }\n const token = this.cursor.peek();\n throw new SflParseError(`unexpected '${token.value || token.type}' after property value`, token.line, token.col);\n }\n}\n","import { isNamedBlockKind, type SflBlock, type SflEntry } from '../ast';\nimport type { TokenCursor } from './cursor';\nimport { SflParseError } from './error';\nimport { atBinding, atHandler, parseBinding, parseHandler } from './expressions';\nimport { PropertyParser } from './properties';\n\nexport class BlockParser {\n private readonly properties: PropertyParser;\n\n constructor(private readonly cursor: TokenCursor) {\n this.properties = new PropertyParser(cursor);\n }\n\n parseBlock(): SflBlock {\n const kind = this.cursor.expect('ident', 'block kind');\n if (!isNamedBlockKind(kind.value)) {\n throw new SflParseError(`unknown block kind '${kind.value}'`, kind.line, kind.col);\n }\n const name = this.cursor.expect('ident', 'block name');\n const composition = this.parseComposition();\n const entries = this.parseBlockEntries();\n return { kind: kind.value, name: name.value, composition, entries };\n }\n\n private parseComposition(): string[] {\n if (!this.cursor.at('colon')) {\n return [];\n }\n this.cursor.next();\n const composition = [this.cursor.expect('ident', 'reference name after \":\"').value];\n while (this.cursor.at('amp')) {\n this.cursor.next();\n composition.push(this.cursor.expect('ident', 'reference name after \"&\"').value);\n }\n return composition;\n }\n\n private parseBlockEntries(): SflEntry[] {\n return this.parseEntries(() => this.parseBlockEntry());\n }\n\n private parseDataEntries(): SflEntry[] {\n return this.parseEntries(() => this.parseDataEntry());\n }\n\n private parseEntries(parseEntry: () => SflEntry): SflEntry[] {\n this.cursor.skipNewlines();\n this.cursor.expect('lbrace', \"'{'\");\n const entries: SflEntry[] = [];\n this.cursor.skipNewlines();\n while (!this.cursor.at('rbrace')) {\n if (this.cursor.at('eof')) {\n const token = this.cursor.peek();\n throw new SflParseError('unterminated block (missing \"}\")', token.line, token.col);\n }\n entries.push(parseEntry());\n if (this.cursor.at('semi')) {\n this.cursor.next();\n }\n this.cursor.skipNewlines();\n }\n this.cursor.expect('rbrace', \"'}'\");\n return entries;\n }\n\n private parseBlockEntry(): SflEntry {\n const token = this.cursor.peek();\n if (token.type !== 'ident') {\n throw new SflParseError(\n `expected property, block, layout, or style — got '${token.value || token.type}'`,\n token.line,\n token.col,\n );\n }\n if (isNamedBlockKind(token.value) && this.cursor.peek(1).type === 'ident') {\n return { type: 'block', block: this.parseBlock() };\n }\n if (token.value === 'layout' && this.cursor.peek(1).type === 'lbrace') {\n return { type: 'layout', layout: this.properties.parseLayout() };\n }\n if (token.value === 'style' && this.cursor.peek(1).type === 'lbrace') {\n return { type: 'style', style: this.properties.parseStyle() };\n }\n if (token.value === 'fields' && this.cursor.peek(1).type === 'lbrace') {\n return { type: 'fields', fields: this.properties.parseFields() };\n }\n if (atBinding(this.cursor)) {\n return { type: 'binding', binding: parseBinding(this.cursor) };\n }\n if (atHandler(this.cursor)) {\n return { type: 'handler', handler: parseHandler(this.cursor) };\n }\n if (token.value === 'data' && this.cursor.peek(1).type === 'lbrace') {\n return { type: 'data', data: this.parseDataBlock() };\n }\n return { type: 'property', property: this.properties.parseProperty() };\n }\n\n private parseDataEntry(): SflEntry {\n const token = this.cursor.peek();\n if (token.type === 'ident' && !isNamedBlockKind(token.value) && this.looksLikeSeriesEntry()) {\n return { type: 'block', block: this.parseSeriesEntry() };\n }\n return this.parseBlockEntry();\n }\n\n private parseDataBlock(): SflBlock {\n this.cursor.next();\n return { kind: 'data', name: '', composition: [], entries: this.parseDataEntries() };\n }\n\n private looksLikeSeriesEntry(): boolean {\n if (this.cursor.peek(1).type === 'lbrace') {\n return true;\n }\n if (this.cursor.peek(1).type !== 'colon') {\n return false;\n }\n let offset = 2;\n if (this.cursor.peek(offset).type !== 'ident') {\n return false;\n }\n offset++;\n while (this.cursor.peek(offset).type === 'amp') {\n offset++;\n if (this.cursor.peek(offset).type !== 'ident') {\n return false;\n }\n offset++;\n }\n return this.cursor.peek(offset).type === 'lbrace';\n }\n\n private parseSeriesEntry(): SflBlock {\n const name = this.cursor.expect('ident', 'series name');\n const composition = this.parseComposition();\n const entries = this.parseBlockEntries();\n return { kind: 'Series', name: name.value, composition, entries };\n }\n}\n","import type { SflBlock, SflDocument } from '../ast';\nimport { BlockParser } from './blocks';\nimport type { TokenCursor } from './cursor';\nimport { SflParseError } from './error';\n\nexport class DocumentParser {\n private readonly blocks: BlockParser;\n\n constructor(private readonly cursor: TokenCursor) {\n this.blocks = new BlockParser(cursor);\n }\n\n parseDocument(): SflDocument {\n this.cursor.skipNewlines();\n const header = this.cursor.expect('ident', \"'sfl' header\");\n if (header.value !== 'sfl') {\n throw new SflParseError(`document must start with 'sfl', got '${header.value}'`, header.line, header.col);\n }\n const version = this.cursor.expect('number', 'version number');\n this.cursor.skipNewlines();\n\n const blocks: SflBlock[] = [];\n while (!this.cursor.at('eof')) {\n blocks.push(this.blocks.parseBlock());\n this.cursor.skipNewlines();\n }\n return { version: version.value, blocks };\n }\n}\n","import type { SflDocument } from '../ast';\nimport { tokenizeSource } from '../lexing/tokenizer';\nimport { TokenCursor } from './cursor';\nimport { DocumentParser } from './document';\n\nexport function parseSource(input: string): SflDocument {\n return new DocumentParser(new TokenCursor(tokenizeSource(input))).parseDocument();\n}\n","import type { SflBinding, SflBlock, SflHandler, SflLayout, SflProperty, SflStyle } from '../ast';\n\nexport interface BlockEntries {\n properties: SflProperty[];\n blocks: SflBlock[];\n layouts: SflLayout[];\n styles: SflStyle[];\n dataBlocks: SflBlock[];\n fields: SflProperty[][];\n bindings: SflBinding[];\n handlers: SflHandler[];\n}\n\nexport function collectBlockEntries(block: SflBlock): BlockEntries {\n const entries: BlockEntries = {\n properties: [],\n blocks: [],\n layouts: [],\n styles: [],\n dataBlocks: [],\n fields: [],\n bindings: [],\n handlers: [],\n };\n\n for (const entry of block.entries) {\n if (entry.type === 'property') {\n entries.properties.push(entry.property);\n } else if (entry.type === 'block') {\n entries.blocks.push(entry.block);\n } else if (entry.type === 'layout') {\n entries.layouts.push(entry.layout);\n } else if (entry.type === 'style') {\n entries.styles.push(entry.style);\n } else if (entry.type === 'fields') {\n entries.fields.push(entry.fields);\n } else if (entry.type === 'binding') {\n entries.bindings.push(entry.binding);\n } else if (entry.type === 'handler') {\n entries.handlers.push(entry.handler);\n } else {\n entries.dataBlocks.push(entry.data);\n }\n }\n\n return entries;\n}\n","export function emitComposition(composition: string[]): string {\n if (!composition.length) {\n return '';\n }\n return ` : ${composition.join(' & ')}`;\n}\n","import type { SflProperty, SflValue } from '../ast';\nimport { emitExpression } from './expressions';\n\nexport function formatNumber(value: number): string {\n if (Object.is(value, -0)) {\n return '0';\n }\n return String(value);\n}\n\nfunction emitString(value: string): string {\n const escaped = value\n .replace(/\\r\\n?/g, '\\n')\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\t/g, '\\\\t');\n return `\"${escaped}\"`;\n}\n\nexport function emitValue(value: SflValue): string {\n switch (value.type) {\n case 'string':\n return emitString(value.value);\n case 'number':\n return formatNumber(value.value);\n case 'tuple':\n return value.values.map(formatNumber).join(', ');\n case 'list':\n return `[${value.values.map(emitValue).join(', ')}]`;\n case 'ident':\n return value.segments.join('.');\n case 'expr':\n return value.items.map(item => emitExpression(item)).join(', ');\n case 'endpoint': {\n let output = value.segments.join('.');\n if (value.side) {\n output += `, ${value.side}`;\n if (value.fraction !== undefined) {\n output += ` (${formatNumber(value.fraction)})`;\n }\n }\n return output;\n }\n }\n}\n\nexport const emitProperty = (property: SflProperty): string => `${property.key}: ${emitValue(property.value)}`;\n","import type { SflAssignment, SflBinding, SflExpr, SflHandler } from '../ast';\nimport { emitValue } from './values';\n\nconst PRECEDENCE: Record<string, number> = {\n '||': 1,\n '&&': 2,\n '==': 3,\n '!=': 3,\n '>': 3,\n '<': 3,\n '>=': 3,\n '<=': 3,\n '+': 4,\n '-': 4,\n '*': 5,\n '/': 5,\n};\n\nexport function emitExpression(expr: SflExpr, parentPrecedence = 0): string {\n switch (expr.kind) {\n case 'number':\n return String(expr.value);\n case 'string':\n return emitValue({ type: 'string', value: expr.value });\n case 'boolean':\n return String(expr.value);\n case 'ref':\n return expr.path.join('.');\n case 'unary':\n return `${expr.operator}${emitExpression(expr.operand, 6)}`;\n case 'call':\n return `${expr.callee.join('.')}(${expr.args.map(arg => emitExpression(arg)).join(', ')})`;\n case 'binary': {\n const precedence = PRECEDENCE[expr.operator];\n const text = `${emitExpression(expr.left, precedence)} ${expr.operator} ${emitExpression(expr.right, precedence + 1)}`;\n return precedence < parentPrecedence ? `(${text})` : text;\n }\n }\n}\n\nconst emitAssignment = (assignment: SflAssignment): string =>\n `${assignment.target.join('.')} <- ${emitExpression(assignment.expr)}`;\n\nexport function emitHandler(handler: SflHandler, pad: string): string {\n if (handler.assignments.length === 1) {\n return `${pad}${handler.event}: ${emitAssignment(handler.assignments[0])}`;\n }\n const lines = handler.assignments.map(assignment => `${pad} ${emitAssignment(assignment)}`);\n return [`${pad}${handler.event} {`, ...lines, `${pad}}`].join('\\n');\n}\n\nexport const emitBinding = (binding: SflBinding): string =>\n `${binding.key}: ${binding.operator} ${emitExpression(binding.expr)}`;\n","const LAYOUT_ORDER = ['position', 'size', 'rotation', 'order'];\n\nconst STYLE_ORDER = [\n 'shape',\n 'fill',\n 'stroke',\n 'strokeWidth',\n 'strokeStyle',\n 'textColor',\n 'color',\n 'fontSize',\n 'fontWeight',\n 'fontFamily',\n 'textAlign',\n 'verticalAlign',\n 'cornerRadius',\n 'dash',\n 'shadow',\n 'opacity',\n 'blur',\n 'blend',\n 'icon',\n 'route',\n 'marker',\n 'markerStart',\n 'markerEnd',\n 'asset',\n];\n\nconst alphabetical = (a: string, b: string): number => (a < b ? -1 : a > b ? 1 : 0);\n\nexport function compareProps(a: string, b: string): number {\n const rank = (key: string) => (key === 'id' ? 0 : key === 'kind' ? 1 : key === 'text' ? 2 : 3);\n return rank(a) - rank(b) || alphabetical(a, b);\n}\n\nfunction compareByOrder(order: string[], a: string, b: string): number {\n const aIndex = order.indexOf(a);\n const bIndex = order.indexOf(b);\n const aRank = aIndex === -1 ? order.length : aIndex;\n const bRank = bIndex === -1 ? order.length : bIndex;\n return aRank - bRank || alphabetical(a, b);\n}\n\nexport const compareLayoutProps = (a: string, b: string): number => compareByOrder(LAYOUT_ORDER, a, b);\n\nexport const compareStyleProps = (a: string, b: string): number => compareByOrder(STYLE_ORDER, a, b);\n","import type { SflBinding, SflProperty } from '../ast';\nimport { emitBinding } from './expressions';\nimport { compareLayoutProps, compareStyleProps } from './propertyOrder';\nimport { emitProperty } from './values';\n\nconst INDENT = ' ';\n\nexport function emitPropertyBlock(\n name: 'layout' | 'style',\n properties: SflProperty[],\n depth: number,\n bindings: SflBinding[] = [],\n): string {\n const pad = INDENT.repeat(depth);\n const innerPad = INDENT.repeat(depth + 1);\n const compare = name === 'layout' ? compareLayoutProps : compareStyleProps;\n const lines = [...properties]\n .sort((left, right) => compare(left.key, right.key))\n .map(property => `${innerPad}${emitProperty(property)}`);\n lines.push(...bindings.map(binding => `${innerPad}${emitBinding(binding)}`));\n\n if (!lines.length) {\n return `${pad}${name} {\\n${pad}}`;\n }\n\n return `${pad}${name} {\\n${lines.join('\\n')}\\n${pad}}`;\n}\n","import type { BlockKind, SflBlock, SflProperty } from '../ast';\nimport { type BlockEntries, collectBlockEntries } from './blockEntries';\nimport { emitComposition } from './composition';\nimport { emitBinding, emitHandler } from './expressions';\nimport { emitPropertyBlock } from './propertyBlock';\nimport { compareLayoutProps, compareProps, compareStyleProps } from './propertyOrder';\nimport { emitProperty } from './values';\n\nconst INDENT = ' ';\nconst COMPACT_MAX_PROPS = 3;\n\nfunction propertyComparator(kind: BlockKind) {\n if (kind === 'Layout') {\n return compareLayoutProps;\n }\n if (kind === 'Style') {\n return compareStyleProps;\n }\n return compareProps;\n}\n\nexport function joinSiblingBlocks(blocks: SflBlock[], depth: number): string {\n const pad = INDENT.repeat(depth);\n const layouts = blocks.filter(block => block.kind === 'Layout');\n const styles = blocks.filter(block => block.kind === 'Style');\n const others = blocks.filter(block => block.kind !== 'Layout' && block.kind !== 'Style');\n const groups: string[] = [];\n\n if (layouts.length) {\n groups.push(`${pad}// Layout Definition\\n${layouts.map(block => emitBlock(block, depth)).join('\\n')}`);\n }\n if (styles.length) {\n groups.push(`${pad}// Style Definition\\n${styles.map(block => emitBlock(block, depth)).join('\\n')}`);\n }\n others.forEach(block => {\n groups.push(emitBlock(block, depth));\n });\n return groups.join('\\n\\n');\n}\n\nexport function emitBlock(block: SflBlock, depth: number): string {\n const pad = INDENT.repeat(depth);\n const header = `${block.kind} ${block.name}${emitComposition(block.composition)} {`;\n const entries = collectBlockEntries(block);\n const properties = orderedProperties(block.kind, entries.properties);\n if (usesCompactBlockForm(block.kind, entries, properties.length)) {\n return emitCompactBlock(pad, header, properties);\n }\n const body = emitExpandedBlockBody(entries, properties, depth);\n return emitExpandedBlock(pad, header, body);\n}\n\nfunction orderedProperties(kind: BlockKind, properties: SflProperty[]): SflProperty[] {\n return [...properties].sort((left, right) => propertyComparator(kind)(left.key, right.key));\n}\n\nfunction usesCompactBlockForm(kind: BlockKind, entries: BlockEntries, propertyCount: number): boolean {\n const supportsCompactForm = kind === 'Layout' || kind === 'Style';\n const hasNestedContent =\n entries.blocks.length > 0 ||\n entries.layouts.length > 0 ||\n entries.styles.length > 0 ||\n entries.dataBlocks.length > 0 ||\n entries.fields.length > 0 ||\n entries.bindings.length > 0 ||\n entries.handlers.length > 0;\n return supportsCompactForm && !hasNestedContent && propertyCount <= COMPACT_MAX_PROPS;\n}\n\nfunction emitCompactBlock(pad: string, header: string, properties: SflProperty[]): string {\n const body = properties.map(emitProperty).join('; ');\n return body ? `${pad}${header} ${body} }` : `${pad}${header} }`;\n}\n\nfunction emitExpandedBlockBody(entries: BlockEntries, properties: SflProperty[], depth: number): string {\n const primaryEntries = emitPrimaryBlockEntries(entries, properties, depth);\n const propertyBlocks = emitAttachedPropertyBlocks(entries, depth);\n return [primaryEntries, propertyBlocks].filter(Boolean).join('\\n');\n}\n\nfunction emitPrimaryBlockEntries(entries: BlockEntries, properties: SflProperty[], depth: number): string {\n const innerPad = INDENT.repeat(depth + 1);\n const propertyLines = [\n ...properties.map(property => `${innerPad}${emitProperty(property)}`),\n ...entries.bindings.map(binding => `${innerPad}${emitBinding(binding)}`),\n ...entries.handlers.map(handler => emitHandler(handler, innerPad)),\n ].join('\\n');\n const nestedBlocks = joinSiblingBlocks(entries.blocks, depth + 1);\n return [propertyLines, nestedBlocks].filter(Boolean).join('\\n\\n');\n}\n\nfunction emitAttachedPropertyBlocks(entries: BlockEntries, depth: number): string {\n const fields = entries.fields.map(properties => emitFieldsBlock(properties, depth + 1));\n const dataBlocks = entries.dataBlocks.map(data => emitDataBlock(data, depth + 1));\n const layouts = entries.layouts.map(layout => emitPropertyBlock('layout', layout.properties, depth + 1));\n const styles = entries.styles.map(style => emitPropertyBlock('style', style.properties, depth + 1, style.bindings));\n return [...fields, ...dataBlocks, ...layouts, ...styles].join('\\n');\n}\n\nfunction emitFieldsBlock(properties: SflProperty[], depth: number): string {\n const pad = INDENT.repeat(depth);\n const lines = properties.map(property => `${pad}${INDENT}${emitProperty(property)}`);\n return lines.length ? `${pad}fields {\\n${lines.join('\\n')}\\n${pad}}` : `${pad}fields {\\n${pad}}`;\n}\n\nfunction emitDataBlock(data: SflBlock, depth: number): string {\n const pad = INDENT.repeat(depth);\n const entries = collectBlockEntries(data);\n const properties = orderedProperties(data.kind, entries.properties);\n const body = emitExpandedBlockBody(entries, properties, depth);\n return emitExpandedBlock(pad, 'data {', body);\n}\n\nfunction emitExpandedBlock(pad: string, header: string, body: string): string {\n return body ? `${pad}${header}\\n${body}\\n${pad}}` : `${pad}${header}\\n${pad}}`;\n}\n","import type { SflDocument } from '../ast';\nimport { joinSiblingBlocks } from './blocks';\n\nexport function emitDocument(doc: SflDocument): string {\n const body = joinSiblingBlocks(doc.blocks, 0);\n const output = body ? `sfl ${doc.version}\\n\\n${body}` : `sfl ${doc.version}`;\n const trimmed = output\n .split('\\n')\n .map(line => line.replace(/[ \\t]+$/, ''))\n .join('\\n');\n return `${trimmed}\\n`;\n}\n","import { emitDocument } from './emitting/document';\nimport { parseSource } from './parsing/parser';\n\nexport function canonicalizeSource(sflText: string): string {\n return emitDocument(parseSource(sflText));\n}\n","import type { SflValue } from '../../../../sflLanguage/ast';\nimport type { SflCanvasObject } from '../../types';\n\nexport type ChartProperties = Map<string, SflValue>;\n\nexport interface SflChartData {\n chartType:\n | 'bar'\n | 'line'\n | 'scatter'\n | 'radar'\n | 'radial'\n | 'field'\n | 'heatmap'\n | 'boxplot'\n | 'sankey'\n | 'treemap'\n | 'mekko'\n | 'hexbin'\n | 'pie'\n | 'radialBar'\n | 'polarArea'\n | 'custom';\n categories?: string[];\n areaOpacity?: number;\n stacked?: 'none' | 'true' | 'percent' | 'waterfall';\n scale?: string;\n interpolate?: 'idw';\n idwPower?: number;\n isolines?: number[];\n zones?: Array<{ label: string; color?: string; offsetX?: number; offsetY?: number }>;\n boxWidth?: number;\n orientation?: 'horizontal' | 'vertical';\n lineTension?: number;\n highlightPoints?: number[];\n barCornerRadius?: number;\n showBoxplotPoints?: boolean;\n barBorderColor?: string;\n barBorderWidth?: number;\n barGroupGap?: number;\n barGlow?: number;\n barGap?: number;\n mekkoVaryHeight?: boolean;\n hexRadius?: number;\n innerRadius?: number;\n pieCornerRadius?: number;\n pieSliceGap?: number;\n ringThickness?: number;\n ringGap?: number;\n cellGap?: number;\n showValues?: boolean;\n squareCells?: boolean;\n headerColor?: string;\n tileGradient?: boolean;\n showColumnBackdrop?: boolean;\n labelPosition?: 'outside' | 'inside';\n labelOrientation?: 'horizontal' | 'vertical';\n labelColor?: string;\n linkGradient?: boolean;\n connectPoints?: boolean;\n reverseComparison?: boolean;\n axisX: { min: number; max: number; step: number; label?: string; unit?: string; thresholds?: number[] };\n axisY: { min: number; max: number; step: number; label?: string; unit?: string; thresholds?: number[] };\n series: SflChartSeries[];\n rules: Array<{ id: string; at: number; text?: string; color?: string; strokeWidth?: number; dash?: number[] }>;\n}\n\nexport interface SflChartSeries {\n id: string;\n label: string;\n color?: string;\n colors?: Array<string | null>;\n opacity?: number;\n group?: string;\n values: number[] | [number, number][] | [number, number, number][] | [number, number, number, number][];\n error?: Array<number | [number, number] | null>;\n source?: string;\n target?: string;\n size?: number;\n symbol?: { points: Array<[number, number]>; normalized?: boolean; tension?: number };\n stroke?: string;\n strokeWidth?: number;\n dash?: number[];\n offset?: number;\n labelOffsetX?: number;\n labelOffsetY?: number;\n}\n\nexport type ChartData = SflChartData;\nexport type ChartSeries = SflChartSeries;\n\nexport type SflChartObject = SflCanvasObject & {\n objectType: 'chart';\n chart: SflChartData;\n};\n\nexport function isChartObject(canvasObject: SflCanvasObject): canvasObject is SflChartObject {\n return canvasObject.objectType === 'chart' && canvasObject.chart !== undefined;\n}\n","import type { SflCanvasObject } from '../../types';\n\nexport interface SflDimensionData {\n start: { x: number; y: number };\n end: { x: number; y: number };\n offset: number;\n unit?: string;\n}\n\nexport type SflDimensionObject = SflCanvasObject & {\n objectType: 'dimension';\n dimension: SflDimensionData;\n};\n\nexport function isDimensionObject(canvasObject: SflCanvasObject): canvasObject is SflDimensionObject {\n return canvasObject.objectType === 'dimension' && canvasObject.dimension !== undefined;\n}\n","import type { SflCanvasObject } from '../../types';\n\nexport interface SflIsometricData {\n depth: number;\n icon?: string;\n footprint?: Array<[number, number]>;\n form: 'box' | 'sphere';\n}\n\nexport type SflIsometricObject = SflCanvasObject & {\n objectType: 'isometric';\n isometric: SflIsometricData;\n};\n\nexport function isIsometricObject(canvasObject: SflCanvasObject): canvasObject is SflIsometricObject {\n return canvasObject.objectType === 'isometric' && canvasObject.isometric !== undefined;\n}\n","import type { SflCanvasObject } from '../../types';\n\nexport interface SflPathData {\n points: Array<{ x: number; y: number; tension?: number }>;\n tension?: number;\n startMarker?: string;\n endMarker?: string;\n closed?: boolean;\n value?: number;\n}\n\nexport type SflPathObject = SflCanvasObject & {\n objectType: 'path';\n path: SflPathData;\n};\n\nexport function isPathObject(canvasObject: SflCanvasObject): canvasObject is SflPathObject {\n return canvasObject.objectType === 'path' && canvasObject.path !== undefined;\n}\n","import type { SflCanvasObject } from '../../types';\n\nexport interface SflSwimlaneData {\n orientation: 'horizontal' | 'vertical';\n lanes: Array<{ id: string; label: string; size: number; color?: string }>;\n}\n\nexport type SflSwimlaneObject = SflCanvasObject & {\n objectType: 'swimlane';\n swimlane: SflSwimlaneData;\n};\n\nexport function isSwimlaneObject(canvasObject: SflCanvasObject): canvasObject is SflSwimlaneObject {\n return canvasObject.objectType === 'swimlane' && canvasObject.swimlane !== undefined;\n}\n","import type { SflBlock, SflDocument, SflEntry, SflExpr, SflProperty, SflValue } from '../ast';\n\n// A `Repeat` block puts the blocks in it on a grid, once for every cell. This step turns it into those plain blocks, so the rest of the\n// package never sees a Repeat. The source text is not touched: the parser and the emitter keep the Repeat as it was written.\n\n// What a Repeat reads for itself. Any other computed property of it is a name the blocks in it can use, like a height worked out once.\nconst RESERVED = new Set(['columns', 'rows', 'count', 'step', 'origin', 'seed', 'jitter', 'chance', 'order', 'where']);\n\nconst MAX_CELLS = 20_000;\nconst MAX_VALUES = 1_000_000;\n\ntype Scalar = number | string | boolean;\n\nclass Random {\n private state: number;\n\n constructor(seed: number) {\n this.state = seed >>> 0;\n }\n\n // mulberry32: a small generator that gives the same numbers for the same seed, on every machine.\n next(): number {\n this.state = (this.state + 0x6d2b79f5) >>> 0;\n let t = this.state;\n t = Math.imul(t ^ (t >>> 15), t | 1);\n t ^= t + Math.imul(t ^ (t >>> 7), t | 61);\n return ((t ^ (t >>> 14)) >>> 0) / 4294967296;\n }\n}\n\ninterface Scope {\n vars: Map<string, Scalar>;\n random: Random;\n repeat: string;\n}\n\nfunction fail(scope: Scope, message: string): never {\n throw new Error(`Repeat ${scope.repeat}: ${message}`);\n}\n\nfunction numberOf(scope: Scope, value: Scalar, what: string): number {\n if (typeof value !== 'number' || !Number.isFinite(value)) {\n fail(scope, `${what} needs a number`);\n }\n return value;\n}\n\nfunction rgbOf(scope: Scope, value: Scalar): [number, number, number] {\n const match = typeof value === 'string' ? /^#([0-9a-f]{6})$/i.exec(value) : null;\n if (!match) {\n fail(scope, 'a color has to be written as \"#rrggbb\"');\n }\n const n = Number.parseInt(match[1], 16);\n return [(n >> 16) & 255, (n >> 8) & 255, n & 255];\n}\n\nconst hexOf = (rgb: number[]): string =>\n `#${rgb\n .map(channel =>\n Math.round(Math.max(0, Math.min(255, channel)))\n .toString(16)\n .padStart(2, '0'),\n )\n .join('')}`;\n\nfunction callFunction(scope: Scope, name: string, args: Scalar[]): Scalar {\n const number = (index: number) => numberOf(scope, args[index], `${name}()`);\n switch (name) {\n case 'random': {\n if (args.length === 0) {\n return scope.random.next();\n }\n const low = args.length === 1 ? 0 : number(0);\n const high = args.length === 1 ? number(0) : number(1);\n return low + scope.random.next() * (high - low);\n }\n case 'pick': {\n if (args.length === 0) {\n fail(scope, 'pick() needs at least one value');\n }\n return args[Math.floor(scope.random.next() * args.length)];\n }\n case 'exp':\n return Math.exp(number(0));\n case 'pow':\n return number(0) ** number(1);\n case 'dist':\n return Math.hypot(number(0) - number(2), number(1) - number(3));\n case 'mix': {\n const from = rgbOf(scope, args[0]);\n const to = rgbOf(scope, args[1]);\n const amount = Math.max(0, Math.min(1, number(2)));\n return hexOf(from.map((channel, index) => channel + (to[index] - channel) * amount));\n }\n case 'shade': {\n const factor = number(1);\n return hexOf(rgbOf(scope, args[0]).map(channel => channel * factor));\n }\n case 'floor':\n return Math.floor(number(0));\n case 'ceil':\n return Math.ceil(number(0));\n case 'round':\n return Math.round(number(0));\n case 'abs':\n return Math.abs(number(0));\n case 'sqrt':\n return Math.sqrt(number(0));\n case 'sin':\n return Math.sin(number(0));\n case 'cos':\n return Math.cos(number(0));\n case 'min':\n return Math.min(...args.map((_, index) => number(index)));\n case 'max':\n return Math.max(...args.map((_, index) => number(index)));\n case 'when':\n return args[0] ? args[1] : args[2];\n default:\n return fail(scope, `unknown function ${name}()`);\n }\n}\n\nfunction evaluate(scope: Scope, expr: SflExpr): Scalar {\n switch (expr.kind) {\n case 'number':\n case 'string':\n case 'boolean':\n return expr.value;\n case 'ref': {\n const name = expr.path.join('.');\n const value = scope.vars.get(name);\n if (value === undefined) {\n fail(scope, `unknown name ${name}`);\n }\n return value;\n }\n case 'unary': {\n const operand = evaluate(scope, expr.operand);\n return expr.operator === '-' ? -numberOf(scope, operand, 'a minus') : !operand;\n }\n case 'call':\n return callFunction(\n scope,\n expr.callee.join('.'),\n expr.args.map(arg => evaluate(scope, arg)),\n );\n case 'binary': {\n const left = evaluate(scope, expr.left);\n const right = evaluate(scope, expr.right);\n switch (expr.operator) {\n case '+':\n return typeof left === 'string' || typeof right === 'string'\n ? `${left}${right}`\n : numberOf(scope, left, '+') + numberOf(scope, right, '+');\n case '-':\n return numberOf(scope, left, '-') - numberOf(scope, right, '-');\n case '*':\n return numberOf(scope, left, '*') * numberOf(scope, right, '*');\n case '/':\n return numberOf(scope, left, '/') / numberOf(scope, right, '/');\n case '>':\n return numberOf(scope, left, '>') > numberOf(scope, right, '>');\n case '<':\n return numberOf(scope, left, '<') < numberOf(scope, right, '<');\n case '>=':\n return numberOf(scope, left, '>=') >= numberOf(scope, right, '>=');\n case '<=':\n return numberOf(scope, left, '<=') <= numberOf(scope, right, '<=');\n case '==':\n return left === right;\n case '!=':\n return left !== right;\n case '&&':\n return Boolean(left) && Boolean(right);\n case '||':\n return Boolean(left) || Boolean(right);\n }\n }\n }\n}\n\nconst round = (value: number) => Math.round(value * 1000) / 1000;\n\nfunction resolveValue(scope: Scope, value: SflValue): SflValue {\n if (value.type !== 'expr') {\n return value;\n }\n const results = value.items.map(item => evaluate(scope, item));\n if (results.length === 1) {\n const [only] = results;\n if (typeof only === 'number') {\n return { type: 'number', value: round(numberOf(scope, only, 'a value')) };\n }\n if (typeof only === 'string') {\n return { type: 'string', value: only };\n }\n return { type: 'ident', segments: [String(only)] };\n }\n return { type: 'tuple', values: results.map(result => round(numberOf(scope, result, 'a tuple'))) };\n}\n\nfunction propertiesOf(scope: Scope, properties: SflProperty[]): SflProperty[] {\n return properties.map(property => ({ key: property.key, value: resolveValue(scope, property.value) }));\n}\n\nfunction entryOf(scope: Scope, entry: SflEntry, suffix: string): SflEntry {\n switch (entry.type) {\n case 'property':\n return {\n type: 'property',\n property: { key: entry.property.key, value: resolveValue(scope, entry.property.value) },\n };\n case 'layout':\n return { type: 'layout', layout: { properties: propertiesOf(scope, entry.layout.properties) } };\n case 'style':\n return { type: 'style', style: { ...entry.style, properties: propertiesOf(scope, entry.style.properties) } };\n case 'block':\n return { type: 'block', block: instance(scope, entry.block, suffix) };\n default:\n return entry;\n }\n}\n\nfunction instance(scope: Scope, block: SflBlock, suffix: string): SflBlock {\n return {\n ...block,\n name: `${block.name}${suffix}`,\n entries: block.entries.map(entry => entryOf(scope, entry, suffix)),\n };\n}\n\nfunction propertyOf(block: SflBlock, key: string): SflValue | undefined {\n for (const entry of block.entries) {\n if (entry.type === 'property' && entry.property.key === key) {\n return entry.property.value;\n }\n }\n return undefined;\n}\n\nfunction numbersOf(block: SflBlock, key: string): number[] | undefined {\n for (const entry of block.entries) {\n if (entry.type === 'property' && entry.property.key === key) {\n const value = entry.property.value;\n if (value.type === 'number') {\n return [value.value];\n }\n if (value.type === 'tuple') {\n return value.values;\n }\n }\n }\n return undefined;\n}\n\nfunction expandRepeat(block: SflBlock): SflBlock[] {\n const scope: Scope = { vars: new Map(), random: new Random(0), repeat: block.name };\n const count = numbersOf(block, 'count')?.[0];\n const columns = Math.max(1, Math.floor(count ?? numbersOf(block, 'columns')?.[0] ?? 1));\n const rows = count === undefined ? Math.max(1, Math.floor(numbersOf(block, 'rows')?.[0] ?? 1)) : 1;\n const total = columns * rows;\n if (total > MAX_CELLS) {\n fail(scope, `${total} cells are too many, the limit is ${MAX_CELLS}`);\n }\n const [stepX = 0, stepY = stepX] = numbersOf(block, 'step') ?? [];\n const [originX = 0, originY = 0] = numbersOf(block, 'origin') ?? [];\n const seed = numbersOf(block, 'seed')?.[0] ?? 0;\n const jitter = numbersOf(block, 'jitter')?.[0] ?? 0;\n const chance = numbersOf(block, 'chance')?.[0] ?? 1;\n const diagonal =\n propertyOf(block, 'order')?.type === 'ident' &&\n (propertyOf(block, 'order') as { segments: string[] }).segments[0] === 'diagonal';\n const condition = propertyOf(block, 'where');\n const helpers = block.entries.flatMap(entry =>\n entry.type === 'property' && entry.property.value.type === 'expr' && !RESERVED.has(entry.property.key)\n ? [entry.property]\n : [],\n );\n const templates = block.entries.flatMap(entry => (entry.type === 'block' ? [entry.block] : []));\n if (templates.some(template => template.kind === 'Repeat')) {\n fail(scope, 'a Repeat cannot hold another Repeat');\n }\n if (total * Math.max(1, templates.length) > MAX_VALUES) {\n fail(scope, 'too many blocks');\n }\n\n // With order: diagonal the cells are made from the back to the front of an isometric scene, so what is nearer covers what is behind.\n const cells: Array<[number, number]> = [];\n for (let row = 0; row < rows; row++) {\n for (let col = 0; col < columns; col++) {\n cells.push([col, row]);\n }\n }\n if (diagonal) {\n cells.sort((a, b) => a[0] + a[1] - (b[0] + b[1]) || a[0] - b[0]);\n }\n\n const out: SflBlock[] = [];\n for (const [col, row] of cells) {\n {\n const index = row * columns + col;\n scope.random = new Random(Math.imul(seed + 1, 0x9e3779b1) ^ Math.imul(index + 1, 0x85ebca6b));\n if (chance < 1 && scope.random.next() >= chance) {\n continue;\n }\n const spread = () => (jitter > 0 ? (scope.random.next() * 2 - 1) * jitter : 0);\n scope.vars = new Map<string, Scalar>([\n ['col', col],\n ['row', row],\n ['index', index],\n ['count', total],\n ['columns', columns],\n ['rows', rows],\n ['x', round(originX + col * stepX + spread())],\n ['y', round(originY + row * stepY + spread())],\n ]);\n for (const helper of helpers) {\n const value = resolveValue(scope, helper.value);\n if (value.type === 'number' || value.type === 'string') {\n scope.vars.set(helper.key, value.value);\n } else if (value.type === 'ident') {\n scope.vars.set(helper.key, value.segments[0] === 'true' ? 1 : 0);\n } else {\n fail(scope, `${helper.key} needs a number`);\n }\n }\n if (condition && condition.type === 'expr') {\n const result = condition.items.map(item => evaluate(scope, item))[0];\n if (!result) {\n continue;\n }\n }\n const suffix = rows === 1 ? `_${col}` : `_${col}_${row}`;\n for (const template of templates) {\n out.push(instance(scope, template, suffix));\n }\n }\n }\n return out;\n}\n\nfunction expandBlocks(blocks: SflBlock[]): SflBlock[] {\n return blocks.flatMap(block => {\n if (block.kind === 'Repeat') {\n return expandRepeat(block);\n }\n if (!block.entries.some(entry => entry.type === 'block')) {\n return [block];\n }\n return [\n {\n ...block,\n entries: block.entries.flatMap((entry): SflEntry[] =>\n entry.type === 'block'\n ? (entry.block.kind === 'Repeat' ? expandRepeat(entry.block) : expandBlocks([entry.block])).map(child => ({\n type: 'block' as const,\n block: child,\n }))\n : [entry],\n ),\n },\n ];\n });\n}\n\nfunction checkNoComputed(blocks: SflBlock[]): void {\n for (const block of blocks) {\n for (const entry of block.entries) {\n const properties =\n entry.type === 'property'\n ? [entry.property]\n : entry.type === 'layout'\n ? entry.layout.properties\n : entry.type === 'style'\n ? entry.style.properties\n : [];\n for (const property of properties) {\n if (property.value.type === 'expr') {\n throw new Error(\n `${block.kind} ${block.name}: ${property.key} is computed, and only a Repeat can work out a computed value`,\n );\n }\n }\n if (entry.type === 'block') {\n checkNoComputed([entry.block]);\n }\n }\n }\n}\n\n// A document in which every Repeat is replaced by the blocks it makes. A document without a Repeat is returned as it is.\nexport function expandRepeats(doc: SflDocument): SflDocument {\n const has = (blocks: SflBlock[]): boolean =>\n blocks.some(\n block =>\n block.kind === 'Repeat' || block.entries.some(entry => (entry.type === 'block' ? has([entry.block]) : false)),\n );\n if (!has(doc.blocks)) {\n checkNoComputed(doc.blocks);\n return doc;\n }\n const expanded = { ...doc, blocks: expandBlocks(doc.blocks) };\n checkNoComputed(expanded.blocks);\n return expanded;\n}\n","import type { SflValue } from '../../sflLanguage/ast';\n\nexport function asString(value?: SflValue): string | undefined {\n if (!value) {\n return undefined;\n }\n if (value.type === 'string') {\n return value.value;\n }\n if (value.type === 'ident') {\n return value.segments.join('.');\n }\n if (value.type === 'number') {\n return String(value.value);\n }\n return undefined;\n}\n\nexport function asNumber(value?: SflValue): number | undefined {\n return value?.type === 'number' ? value.value : undefined;\n}\n\nexport function tupleValues(value?: SflValue): number[] | undefined {\n return value?.type === 'tuple' ? value.values : undefined;\n}\n\nexport function listNumbers(value?: SflValue): number[] | undefined {\n return value?.type === 'list'\n ? value.values.flatMap(item => (item.type === 'number' ? [item.value] : []))\n : undefined;\n}\n","import type { SflValue, Side } from '../../../../sflLanguage/ast';\nimport type { SflCanvasObject } from '../../types';\n\nexport interface LinkEndpointReference {\n id?: string;\n side?: Side;\n fraction?: number;\n port?: string;\n}\n\nexport interface LinkEndpointReaderContext {\n idByName: Map<string, string>;\n canvasObjectById: Map<string, SflCanvasObject>;\n}\n\nfunction namedPortReference(segments: string[], context: LinkEndpointReaderContext): LinkEndpointReference | null {\n if (segments.length < 2) {\n return null;\n }\n\n const portName = segments[segments.length - 1];\n const canvasObjectName = segments[segments.length - 2];\n const canvasObjectId = context.idByName.get(canvasObjectName);\n const canvasObject = canvasObjectId ? context.canvasObjectById.get(canvasObjectId) : undefined;\n if (!canvasObject?.symbol?.ports?.some(port => port.name === portName)) {\n return null;\n }\n\n return { id: canvasObjectId, port: portName };\n}\n\nexport function readLinkEndpoint(\n value: SflValue | undefined,\n context: LinkEndpointReaderContext,\n): LinkEndpointReference {\n if (value?.type !== 'endpoint') {\n return {};\n }\n\n const namedPort = namedPortReference(value.segments, context);\n if (namedPort) {\n return namedPort;\n }\n\n const endpointName = value.segments[value.segments.length - 1];\n return {\n id: context.idByName.get(endpointName) ?? endpointName,\n side: value.side,\n fraction: value.fraction,\n };\n}\n","import type { SflBlock, SflValue } from '../../sflLanguage/ast';\n\nexport function directProperties(block: SflBlock): Map<string, SflValue> {\n const properties = new Map<string, SflValue>();\n for (const entry of block.entries) {\n if (entry.type === 'property') {\n properties.set(entry.property.key, entry.property.value);\n }\n }\n return properties;\n}\n\nexport function styleProperties(block: SflBlock): Map<string, SflValue> {\n const properties = new Map<string, SflValue>();\n for (const entry of block.entries) {\n if (entry.type === 'style') {\n for (const property of entry.style.properties) {\n properties.set(property.key, property.value);\n }\n }\n }\n return properties;\n}\n\nexport function layoutProperties(block: SflBlock): Map<string, SflValue> {\n const properties = new Map<string, SflValue>();\n for (const entry of block.entries) {\n if (entry.type === 'layout') {\n for (const property of entry.layout.properties) {\n properties.set(property.key, property.value);\n }\n }\n }\n return properties;\n}\n\nexport function childBlocks(block: SflBlock): SflBlock[] {\n return block.entries.flatMap(entry => (entry.type === 'block' ? [entry.block] : []));\n}\n\nfunction dataEntryBlock(block: SflBlock): SflBlock | undefined {\n for (const entry of block.entries) {\n if (entry.type === 'data') {\n return entry.data;\n }\n }\n return undefined;\n}\n\nexport function contentChildren(block: SflBlock): SflBlock[] {\n const data = dataEntryBlock(block);\n return data ? [...childBlocks(block), ...childBlocks(data)] : childBlocks(block);\n}\n\nexport function contentProperty(block: SflBlock, key: string): SflValue | undefined {\n const direct = directProperties(block).get(key);\n if (direct !== undefined) {\n return direct;\n }\n const data = dataEntryBlock(block);\n return data ? directProperties(data).get(key) : undefined;\n}\n","import type { BlockKind } from '../../../sflLanguage/ast';\n\nexport const CANVAS_OBJECT_BLOCK_KINDS = [\n 'Entity',\n 'Shape',\n 'Text',\n 'Container',\n 'Path',\n 'Chart',\n 'Widget',\n 'Component',\n 'Isometric',\n 'Dimension',\n] as const satisfies readonly BlockKind[];\n\nexport type CanvasObjectBlockKind = (typeof CANVAS_OBJECT_BLOCK_KINDS)[number];\n\nconst canvasObjectBlockKinds: ReadonlySet<BlockKind> = new Set(CANVAS_OBJECT_BLOCK_KINDS);\n\nexport function isCanvasObjectBlockKind(kind: BlockKind): kind is CanvasObjectBlockKind {\n return canvasObjectBlockKinds.has(kind);\n}\n","import type { SflBlock } from '../../../../sflLanguage/ast';\nimport { childBlocks, directProperties } from '../../../ast/blockEntries';\nimport { asString } from '../../../ast/valueAccess';\nimport { isCanvasObjectBlockKind } from '../../processing/blockKinds';\n\nfunction indexLinkableNames(blocks: SflBlock[], idByName: Map<string, string>): void {\n for (const block of blocks) {\n if (isCanvasObjectBlockKind(block.kind)) {\n idByName.set(block.name, asString(directProperties(block).get('id')) ?? block.name);\n }\n\n indexLinkableNames(childBlocks(block), idByName);\n }\n}\n\nexport function buildLinkNameIndex(model: SflBlock | undefined): Map<string, string> {\n const idByName = new Map<string, string>();\n if (model) {\n indexLinkableNames(childBlocks(model), idByName);\n }\n return idByName;\n}\n","import type { SflValue } from '../../../../sflLanguage/ast';\nimport { asString } from '../../../ast/valueAccess';\n\nconst STRUCTURAL_LINK_PROPERTIES = new Set(['id', 'from', 'to', 'text', 'order', 'segments']);\n\nexport function readLinkPresentation(properties: Map<string, SflValue>): Record<string, string> {\n const presentation: Record<string, string> = {};\n\n for (const [key, value] of properties) {\n if (STRUCTURAL_LINK_PROPERTIES.has(key)) {\n continue;\n }\n\n const text = asString(value);\n if (text !== undefined) {\n presentation[key] = text;\n }\n }\n\n return presentation;\n}\n","import type { IsometricFace } from '../../../../model/isometricObject';\nimport type { SflBlock } from '../../../../sflLanguage/ast';\nimport { asNumber, asString } from '../../../ast/valueAccess';\nimport type { CanvasObjectResolutionContext } from '../../processing/resolver';\nimport type { SflCanvasObject } from '../../types';\nimport { readLinkEndpoint } from '../links/endpointReader';\nimport { buildLinkNameIndex } from '../links/nameIndex';\nimport { readLinkPresentation } from '../links/presentation';\nimport type { SflConnectionOut } from './types';\n\nconst FACES: ReadonlySet<string> = new Set(['top', 'bottom', 'front', 'back', 'left', 'right']);\n\nfunction readFace(value: string | undefined): IsometricFace {\n return value !== undefined && FACES.has(value) ? (value as IsometricFace) : 'front';\n}\n\nexport function readConnections(\n model: SflBlock | undefined,\n connectionBlocks: SflBlock[],\n canvasObjects: SflCanvasObject[],\n context: CanvasObjectResolutionContext,\n sourceIndexes: readonly number[] = [],\n): SflConnectionOut[] {\n const endpointContext = {\n idByName: buildLinkNameIndex(model),\n canvasObjectById: new Map(canvasObjects.map(canvasObject => [canvasObject.id, canvasObject])),\n };\n return connectionBlocks.map((block, index) => {\n const properties = context.mergedProps(block);\n return {\n id: asString(properties.get('id')) ?? block.name,\n fromId: readLinkEndpoint(properties.get('from'), endpointContext).id,\n toId: readLinkEndpoint(properties.get('to'), endpointContext).id,\n fromFace: readFace(asString(properties.get('fromFace'))),\n toFace: readFace(asString(properties.get('toFace'))),\n order: asNumber(properties.get('order')),\n sourceIndex: sourceIndexes[index],\n props: readLinkPresentation(properties),\n };\n });\n}\n","import type { SflBlock } from '../../../../sflLanguage/ast';\nimport { asNumber, asString, listNumbers } from '../../../ast/valueAccess';\nimport type { CanvasObjectResolutionContext } from '../../processing/resolver';\nimport { type LinkEndpointReaderContext, readLinkEndpoint } from './endpointReader';\nimport { readLinkPresentation } from './presentation';\nimport type { SflLinkOut } from './types';\n\nexport function readLinkBlock(\n block: SflBlock,\n canvasObjectContext: CanvasObjectResolutionContext,\n endpointContext: LinkEndpointReaderContext,\n): SflLinkOut {\n const properties = canvasObjectContext.mergedProps(block);\n const from = readLinkEndpoint(properties.get('from'), endpointContext);\n const to = readLinkEndpoint(properties.get('to'), endpointContext);\n\n return {\n id: asString(properties.get('id')) ?? block.name,\n fromId: from.id,\n toId: to.id,\n text: asString(properties.get('text')),\n fromSide: from.side,\n fromFraction: from.fraction,\n toSide: to.side,\n toFraction: to.fraction,\n fromPort: from.port,\n toPort: to.port,\n order: asNumber(properties.get('order')),\n segments: listNumbers(properties.get('segments')),\n props: readLinkPresentation(properties),\n };\n}\n","import type { SflBlock } from '../../../../sflLanguage/ast';\nimport type { CanvasObjectResolutionContext } from '../../processing/resolver';\nimport type { SflCanvasObject } from '../../types';\nimport { readLinkBlock } from './blockReader';\nimport type { LinkEndpointReaderContext } from './endpointReader';\nimport { buildLinkNameIndex } from './nameIndex';\nimport type { SflLinkOut } from './types';\n\nexport function readLinks(\n model: SflBlock | undefined,\n linkBlocks: SflBlock[],\n canvasObjects: SflCanvasObject[],\n context: CanvasObjectResolutionContext,\n sourceIndexes: readonly number[] = [],\n): SflLinkOut[] {\n const endpointContext: LinkEndpointReaderContext = {\n idByName: buildLinkNameIndex(model),\n canvasObjectById: new Map(canvasObjects.map(canvasObject => [canvasObject.id, canvasObject])),\n };\n\n return linkBlocks.map((block, index) => ({\n ...readLinkBlock(block, context, endpointContext),\n sourceIndex: sourceIndexes[index],\n }));\n}\n","import type { SflBlock } from '../../../../sflLanguage/ast';\nimport { asString } from '../../../ast/valueAccess';\nimport type { CanvasObjectResolutionContext } from '../../processing/resolver';\n\nfunction netMembers(block: SflBlock, context: CanvasObjectResolutionContext): string[][] {\n const membersValue = context.mergedProps(block).get('members');\n return membersValue?.type === 'list'\n ? membersValue.values.flatMap(value => (value.type === 'ident' ? [value.segments] : []))\n : [];\n}\n\nfunction netLink(block: SflBlock, from: string[], to: string[], index: number, text?: string): SflBlock {\n const entries: SflBlock['entries'] = [\n { type: 'property', property: { key: 'from', value: { type: 'endpoint', segments: from } } },\n { type: 'property', property: { key: 'to', value: { type: 'endpoint', segments: to } } },\n ];\n if (text) {\n entries.push({\n type: 'property',\n property: { key: 'text', value: { type: 'string', value: text } },\n });\n }\n return { kind: 'Link', name: `${block.name}_${index + 1}`, composition: [], entries };\n}\n\nexport function expandNetLinks(block: SflBlock, context: CanvasObjectResolutionContext): SflBlock[] {\n const members = netMembers(block, context);\n if (members.length < 2) {\n return [];\n }\n\n const text = asString(context.mergedProps(block).get('text'));\n return members.slice(1).map((member, index) => netLink(block, members[0], member, index, text));\n}\n","import type { SflBlock } from '../../../../sflLanguage/ast';\nimport { asNumber, asString } from '../../../ast/valueAccess';\nimport type { CanvasObjectResolutionContext } from '../resolver';\n\nexport type FlowPositioner = (size: number[]) => number[] | undefined;\n\nexport function createFlowPositioner(block: SflBlock, context: CanvasObjectResolutionContext): FlowPositioner {\n const axis = asString(context.layoutProp(block, 'flow'));\n const gap = asNumber(context.layoutProp(block, 'gap')) ?? 0;\n let cursor = 0;\n\n return (size: number[]): number[] | undefined => {\n if (axis !== 'horizontal' && axis !== 'vertical') {\n return undefined;\n }\n const position = axis === 'horizontal' ? [cursor, 0] : [0, cursor];\n cursor += (axis === 'horizontal' ? size[0] : size[1]) + gap;\n return position;\n };\n}\n","import type { SflValue } from '../../../../sflLanguage/ast';\nimport { asNumber, asString } from '../../../ast/valueAccess';\n\nexport function numberList(value?: SflValue): number[] | undefined {\n if (value?.type !== 'list') {\n return undefined;\n }\n const numbers = value.values.flatMap(item => {\n const number = asNumber(item);\n return number === undefined ? [] : [number];\n });\n return numbers.length > 0 ? numbers : undefined;\n}\n\nexport function stringList(value?: SflValue): string[] | undefined {\n if (value?.type !== 'list') {\n return undefined;\n }\n return value.values.flatMap(item => {\n const text = asString(item);\n return text === undefined ? [] : [text];\n });\n}\n\nexport function readBoolean(value?: SflValue): boolean | undefined {\n const text = asString(value);\n if (text === undefined) {\n return undefined;\n }\n return text === 'true';\n}\n","import type { SflBlock, SflValue } from '../../../../sflLanguage/ast';\nimport { directProperties } from '../../../ast/blockEntries';\nimport { asNumber, asString } from '../../../ast/valueAccess';\nimport type { ChartData } from './types';\nimport { numberList } from './values';\n\nexport function readAxis(block?: SflBlock): ChartData['axisX'] {\n const properties = block ? directProperties(block) : new Map<string, SflValue>();\n return {\n min: asNumber(properties.get('min')) ?? 0,\n max: asNumber(properties.get('max')) ?? 10,\n step: asNumber(properties.get('step')) ?? 1,\n label: asString(properties.get('label')),\n unit: asString(properties.get('unit')),\n thresholds: numberList(properties.get('thresholds')),\n };\n}\n","import type { SflBlock } from '../../../../sflLanguage/ast';\nimport { contentChildren, directProperties } from '../../../ast/blockEntries';\nimport { asNumber, asString } from '../../../ast/valueAccess';\nimport type { ChartData } from './types';\nimport { numberList } from './values';\n\nexport function readChartRules(block: SflBlock): ChartData['rules'] {\n return contentChildren(block)\n .filter(child => child.kind === 'Rule')\n .map(rule => {\n const properties = directProperties(rule);\n return {\n id: rule.name,\n at: asNumber(properties.get('at')) ?? 0,\n text: asString(properties.get('text')),\n color: asString(properties.get('color')),\n strokeWidth: asNumber(properties.get('strokeWidth')),\n dash: numberList(properties.get('dash')),\n };\n });\n}\n","import type { SflValue } from '../../../../sflLanguage/ast';\nimport { asNumber, asString } from '../../../ast/valueAccess';\nimport type { ChartSeries } from './types';\n\ntype SeriesValueShape = 'scalar' | 'tuple';\ntype SeriesError = NonNullable<ChartSeries['error']>[number];\n\nfunction asComponents(value: SflValue): number[] | undefined {\n if (value.type !== 'list' || value.values.length < 2) {\n return undefined;\n }\n const components = value.values.map(asNumber);\n return components.every((part): part is number => part !== undefined) ? components : undefined;\n}\n\nexport function readSeriesValues(value?: SflValue): ChartSeries['values'] {\n if (value?.type !== 'list') {\n return [];\n }\n const shape = firstSeriesValueShape(value.values);\n return shape === 'tuple' ? readTupleSeriesValues(value.values) : readScalarSeriesValues(value.values);\n}\n\nfunction firstSeriesValueShape(values: SflValue[]): SeriesValueShape | undefined {\n for (const value of values) {\n if (value.type === 'number') {\n return 'scalar';\n }\n if (asComponents(value)) {\n return 'tuple';\n }\n }\n return undefined;\n}\n\nfunction readScalarSeriesValues(values: SflValue[]): number[] {\n return values.flatMap(value => (value.type === 'number' ? [value.value] : []));\n}\n\nfunction readTupleSeriesValues(values: SflValue[]): ChartSeries['values'] {\n return values.flatMap(value => {\n const components = asComponents(value);\n return components ? [components] : [];\n }) as ChartSeries['values'];\n}\n\nexport function readSeriesErrors(value?: SflValue): ChartSeries['error'] {\n if (value?.type !== 'list') {\n return undefined;\n }\n return value.values.map(readSeriesError);\n}\n\nfunction readSeriesError(value: SflValue): SeriesError {\n if (value.type === 'ident' && value.segments.join('.') === 'none') {\n return null;\n }\n if (value.type === 'number') {\n return value.value;\n }\n return readSeriesErrorRange(value);\n}\n\nfunction readSeriesErrorRange(value: SflValue): [number, number] | null {\n if (value.type !== 'list' || value.values.length < 2) {\n return null;\n }\n const low = asNumber(value.values[0]);\n const high = asNumber(value.values[1]);\n return low !== undefined && high !== undefined ? [low, high] : null;\n}\n\nexport function readSeriesColors(value?: SflValue): ChartSeries['colors'] {\n if (value?.type !== 'list') {\n return undefined;\n }\n return value.values.map(readSeriesColor);\n}\n\nfunction readSeriesColor(value: SflValue): string | null {\n if (value.type === 'ident' && value.segments.join('.') === 'none') {\n return null;\n }\n return asString(value) ?? null;\n}\n\ntype SymbolDefinitions = Map<string, { points: Array<[number, number]>; tension?: number }>;\n\nexport function readSeriesSymbol(value: SflValue | undefined, symbolDefs: SymbolDefinitions): ChartSeries['symbol'] {\n if (value?.type === 'list') {\n const points = value.values.flatMap(readSeriesSymbolPoint);\n return points.length > 0 ? { points } : undefined;\n }\n const name = asString(value);\n const definition = name ? symbolDefs.get(name) : undefined;\n if (!definition) {\n return undefined;\n }\n return { points: definition.points, normalized: true, tension: definition.tension };\n}\n\nfunction readSeriesSymbolPoint(value: SflValue): Array<[number, number]> {\n if (value.type !== 'list' || value.values.length < 2) {\n return [];\n }\n const x = asNumber(value.values[0]);\n const y = asNumber(value.values[1]);\n return x === undefined || y === undefined ? [] : [[x, y]];\n}\n","import type { SflBlock } from '../../../../sflLanguage/ast';\nimport { asNumber, asString } from '../../../ast/valueAccess';\nimport { readSeriesColors, readSeriesErrors, readSeriesSymbol, readSeriesValues } from './seriesValues';\nimport type { ChartProperties, ChartSeries } from './types';\nimport { numberList } from './values';\n\ntype SymbolDefinitions = Map<string, { points: Array<[number, number]>; tension?: number }>;\n\nexport function readSeries(\n block: SflBlock,\n symbolDefs: SymbolDefinitions,\n mergedProps: (block: SflBlock) => ChartProperties,\n): ChartSeries {\n const properties = mergedProps(block);\n return {\n id: block.name,\n label: asString(properties.get('label')) ?? block.name,\n color: asString(properties.get('color')),\n colors: readSeriesColors(properties.get('colors')),\n opacity: asNumber(properties.get('opacity')),\n group: asString(properties.get('group')),\n values: readSeriesValues(properties.get('values')),\n error: readSeriesErrors(properties.get('error')),\n source: asString(properties.get('source')),\n target: asString(properties.get('target')),\n size: asNumber(properties.get('size')),\n symbol: readSeriesSymbol(properties.get('symbol'), symbolDefs),\n stroke: asString(properties.get('stroke')),\n strokeWidth: asNumber(properties.get('strokeWidth')),\n dash: numberList(properties.get('dash')),\n offset: asNumber(properties.get('offset')),\n labelOffsetX: asNumber(properties.get('labelOffsetX')),\n labelOffsetY: asNumber(properties.get('labelOffsetY')),\n };\n}\n","import type { SflValue } from '../../../../sflLanguage/ast';\nimport { asNumber, asString } from '../../../ast/valueAccess';\nimport type { ChartData } from './types';\n\nexport function readChartZones(value?: SflValue): ChartData['zones'] {\n if (value?.type !== 'list') {\n return undefined;\n }\n const zones = value.values.flatMap(item => {\n if (item.type !== 'list') {\n return [];\n }\n const label = asString(item.values[0]);\n if (label === undefined) {\n return [];\n }\n return [\n {\n label,\n color: asString(item.values[1]),\n offsetX: asNumber(item.values[2]),\n offsetY: asNumber(item.values[3]),\n },\n ];\n });\n return zones.length > 0 ? zones : undefined;\n}\n","import { isChartType } from '../../../../model/chart';\nimport type { SflBlock } from '../../../../sflLanguage/ast';\nimport { contentChildren, contentProperty } from '../../../ast/blockEntries';\nimport { asNumber, asString } from '../../../ast/valueAccess';\nimport { readAxis } from './axis';\nimport { readChartRules } from './rules';\nimport { readSeries } from './series';\nimport type { ChartData, ChartProperties } from './types';\nimport { numberList, readBoolean, stringList } from './values';\nimport { readChartZones } from './zones';\n\nconst STACKED_MODES: ReadonlyArray<NonNullable<ChartData['stacked']>> = ['none', 'true', 'percent', 'waterfall'];\n\nfunction asChartType(value: string | undefined): ChartData['chartType'] {\n return isChartType(value) ? value : 'bar';\n}\n\nfunction asStackedMode(value: string | undefined): ChartData['stacked'] {\n return STACKED_MODES.find(mode => mode === value);\n}\n\ntype SymbolDefinitions = Map<string, { points: Array<[number, number]>; tension?: number }>;\n\nexport function readChart(\n block: SflBlock,\n properties: ChartProperties,\n symbolDefs: SymbolDefinitions,\n mergedProps: (block: SflBlock) => ChartProperties,\n): ChartData {\n const children = contentChildren(block);\n const axes = children.filter(child => child.kind === 'Axis');\n const stacked = asString(properties.get('stacked'));\n return {\n chartType: asChartType(asString(properties.get('type'))),\n categories: stringList(contentProperty(block, 'categories')),\n areaOpacity: asNumber(properties.get('areaOpacity')),\n stacked: asStackedMode(stacked),\n scale: asString(properties.get('scale')),\n interpolate: asString(properties.get('interpolate')) === 'idw' ? 'idw' : undefined,\n idwPower: asNumber(properties.get('idwPower')),\n isolines: numberList(properties.get('isolines')),\n zones: readChartZones(properties.get('zones')),\n boxWidth: asNumber(properties.get('boxWidth')),\n orientation: asString(properties.get('orientation')) === 'horizontal' ? 'horizontal' : undefined,\n lineTension: asNumber(properties.get('lineTension')),\n highlightPoints: numberList(properties.get('highlightPoints')),\n barCornerRadius: asNumber(properties.get('barCornerRadius')),\n showBoxplotPoints: readBoolean(properties.get('showBoxplotPoints')),\n barBorderColor: asString(properties.get('barBorderColor')),\n barBorderWidth: asNumber(properties.get('barBorderWidth')),\n barGroupGap: asNumber(properties.get('barGroupGap')),\n barGlow: asNumber(properties.get('barGlow')),\n barGap: asNumber(properties.get('barGap')),\n mekkoVaryHeight: readBoolean(properties.get('mekkoVaryHeight')),\n hexRadius: asNumber(properties.get('hexRadius')),\n innerRadius: asNumber(properties.get('innerRadius')),\n pieCornerRadius: asNumber(properties.get('pieCornerRadius')),\n pieSliceGap: asNumber(properties.get('pieSliceGap')),\n ringThickness: asNumber(properties.get('ringThickness')),\n ringGap: asNumber(properties.get('ringGap')),\n cellGap: asNumber(properties.get('cellGap')),\n showValues: readBoolean(properties.get('showValues')),\n squareCells: readBoolean(properties.get('squareCells')),\n headerColor: asString(properties.get('headerColor')),\n tileGradient: readBoolean(properties.get('tileGradient')),\n showColumnBackdrop: readBoolean(properties.get('showColumnBackdrop')),\n labelPosition: asString(properties.get('labelPosition')) === 'inside' ? 'inside' : undefined,\n labelOrientation: asString(properties.get('labelOrientation')) === 'vertical' ? 'vertical' : undefined,\n labelColor: asString(properties.get('labelColor')),\n linkGradient: readBoolean(properties.get('linkGradient')),\n connectPoints: readBoolean(properties.get('connectPoints')),\n reverseComparison: readBoolean(properties.get('reverseComparison')),\n axisX: readAxis(axes.find(axis => axis.name === 'x')),\n axisY: readAxis(axes.find(axis => axis.name === 'y' || axis.name === 'value')),\n series: children.filter(child => child.kind === 'Series').map(child => readSeries(child, symbolDefs, mergedProps)),\n rules: readChartRules(block),\n };\n}\n","import type { SflBlock, SflValue } from '../../../../sflLanguage/ast';\nimport type { SflCanvasObjectBase, SflSymbolDefinition } from '../../types';\nimport { readChart } from './reader';\nimport type { SflChartObject } from './types';\n\nexport function resolveChartObject(\n base: SflCanvasObjectBase,\n block: SflBlock,\n properties: Map<string, SflValue>,\n symbolDefinitions: Map<string, SflSymbolDefinition>,\n mergedProperties: (block: SflBlock) => Map<string, SflValue>,\n): SflChartObject {\n return {\n ...base,\n objectType: 'chart',\n chart: readChart(block, properties, symbolDefinitions, mergedProperties),\n };\n}\n","import type { SflValue } from '../../../../sflLanguage/ast';\nimport { asNumber, asString, tupleValues } from '../../../ast/valueAccess';\nimport type { SflDimensionData } from './types';\n\ntype Properties = Map<string, SflValue>;\n\nfunction readPoint(value: SflValue | undefined, origin: { x: number; y: number }): { x: number; y: number } {\n const [x, y] = tupleValues(value) ?? [];\n return { x: origin.x + (x ?? 0), y: origin.y + (y ?? 0) };\n}\n\nexport function readDimension(properties: Properties, origin: { x: number; y: number }): SflDimensionData {\n return {\n start: readPoint(properties.get('start'), origin),\n end: readPoint(properties.get('end'), origin),\n offset: asNumber(properties.get('offset')) ?? 0,\n unit: asString(properties.get('unit')),\n };\n}\n","import type { SflValue } from '../../../../sflLanguage/ast';\nimport type { SflCanvasObjectBase } from '../../types';\nimport { readDimension } from './reader';\nimport type { SflDimensionObject } from './types';\n\nexport function resolveDimensionObject(\n base: SflCanvasObjectBase,\n properties: Map<string, SflValue>,\n origin: { x: number; y: number },\n): SflDimensionObject {\n return {\n ...base,\n objectType: 'dimension',\n dimension: readDimension(properties, origin),\n };\n}\n","import { flattenPath, type PathPoint } from '../../../../model/path';\nimport type { SflValue } from '../../../../sflLanguage/ast';\nimport { asNumber, asString } from '../../../ast/valueAccess';\nimport type { SflSymbolDefinition } from '../../types';\nimport type { SflIsometricData } from './types';\n\ntype Properties = Map<string, SflValue>;\n\nfunction readFootprintPoint(value: SflValue): PathPoint[] {\n if (value.type !== 'list' || value.values.length < 2) {\n return [];\n }\n const x = asNumber(value.values[0]);\n const y = asNumber(value.values[1]);\n const tension = value.values[2] === undefined ? undefined : asNumber(value.values[2]);\n if (x === undefined || y === undefined) {\n return [];\n }\n return [tension === undefined ? { x, y } : { x, y, tension }];\n}\n\nfunction asPolygon(points: PathPoint[], tension: number): Array<[number, number]> | undefined {\n const flat = flattenPath({ points, tension, closed: true });\n return flat.length >= 3 ? flat.map(point => [point.x, point.y] as [number, number]) : undefined;\n}\n\nfunction readFootprint(\n value: SflValue | undefined,\n symbolDefs: Map<string, SflSymbolDefinition>,\n): Array<[number, number]> | undefined {\n if (value?.type === 'list') {\n return asPolygon(value.values.flatMap(readFootprintPoint), 0);\n }\n const name = asString(value);\n const definition = name ? symbolDefs.get(name) : undefined;\n if (!definition) {\n return undefined;\n }\n const points = definition.points.map(([x, y], index) => {\n const tension = definition.pointTensions?.[index];\n return tension === undefined ? { x, y } : { x, y, tension };\n });\n return asPolygon(points, definition.tension ?? 0);\n}\n\nexport function readIsometric(\n properties: Properties,\n depth: number,\n symbolDefs: Map<string, SflSymbolDefinition>,\n): SflIsometricData {\n return {\n depth,\n icon: asString(properties.get('icon')),\n footprint: readFootprint(properties.get('symbol'), symbolDefs),\n form: asString(properties.get('shape')) === 'sphere' ? 'sphere' : 'box',\n };\n}\n","import type { SflBlock, SflValue } from '../../../../sflLanguage/ast';\nimport { tupleValues } from '../../../ast/valueAccess';\nimport type { SflCanvasObjectBase, SflSymbolDefinition } from '../../types';\nimport { readIsometric } from './reader';\nimport type { SflIsometricObject } from './types';\n\nexport function resolveIsometricObject(\n base: SflCanvasObjectBase,\n block: SflBlock,\n properties: Map<string, SflValue>,\n layoutProperty: (block: SflBlock, key: string) => SflValue | undefined,\n symbolDefinitions: Map<string, SflSymbolDefinition>,\n): SflIsometricObject {\n const size = tupleValues(layoutProperty(block, 'size'));\n return {\n ...base,\n objectType: 'isometric',\n isometric: readIsometric(properties, size?.[2] ?? 24, symbolDefinitions),\n };\n}\n","import type { SflValue } from '../../../../sflLanguage/ast';\nimport { asNumber, asString } from '../../../ast/valueAccess';\nimport type { SflPathData } from './types';\n\ntype Properties = Map<string, SflValue>;\n\nexport function readPath(p: Properties, origin: { x: number; y: number }): SflPathData {\n const pointsValue = p.get('points');\n const points =\n pointsValue?.type === 'list'\n ? pointsValue.values.flatMap(value => {\n if (value.type !== 'list' || value.values.length < 2) {\n return [];\n }\n const x = asNumber(value.values[0]);\n const y = asNumber(value.values[1]);\n const tension = value.values[2] === undefined ? undefined : asNumber(value.values[2]);\n if (x === undefined || y === undefined) {\n return [];\n }\n const point = { x: origin.x + x, y: origin.y + y };\n return [tension === undefined ? point : { ...point, tension }];\n })\n : [];\n\n return {\n points,\n tension: asNumber(p.get('tension')),\n startMarker: asString(p.get('startMarker')),\n endMarker: asString(p.get('endMarker')),\n closed: asString(p.get('closed')) === 'true',\n value: asNumber(p.get('value')),\n };\n}\n","import type { SflValue } from '../../../../sflLanguage/ast';\nimport type { SflCanvasObjectBase } from '../../types';\nimport { readPath } from './reader';\nimport type { SflPathObject } from './types';\n\nexport function resolvePathObject(\n base: SflCanvasObjectBase,\n properties: Map<string, SflValue>,\n origin: { x: number; y: number },\n): SflPathObject {\n return {\n ...base,\n objectType: 'path',\n path: readPath(properties, origin),\n };\n}\n","import type { SflValue } from '../../../../sflLanguage/ast';\nimport { asNumber, asString } from '../../../ast/valueAccess';\nimport type { SflSwimlaneData } from './types';\n\ntype Properties = Map<string, SflValue>;\n\nexport function readSwimlane(p: Properties): SflSwimlaneData {\n const orientation = asString(p.get('orientation')) === 'vertical' ? 'vertical' : 'horizontal';\n const lanesValue = p.get('lanes');\n const lanes =\n lanesValue?.type === 'list'\n ? lanesValue.values.flatMap((value, index) => {\n if (value.type !== 'list') {\n return [];\n }\n const label = asString(value.values[0]);\n const size = asNumber(value.values[1]);\n if (label === undefined || size === undefined) {\n return [];\n }\n const color = asString(value.values[2]);\n return [{ id: `lane-${index + 1}`, label, size, ...(color ? { color } : {}) }];\n })\n : [];\n const swimlaneData: SflSwimlaneData = { orientation, lanes };\n\n return swimlaneData;\n}\n","import type { SflValue } from '../../../../sflLanguage/ast';\nimport type { SflCanvasObjectBase } from '../../types';\nimport { readSwimlane } from './reader';\nimport type { SflSwimlaneObject } from './types';\n\nexport function resolveSwimlaneObject(base: SflCanvasObjectBase, properties: Map<string, SflValue>): SflSwimlaneObject {\n return {\n ...base,\n objectType: 'swimlane',\n swimlane: readSwimlane(properties),\n };\n}\n","import { isBuiltInComponentType } from '../../../model/component';\nimport { isComponentBlockKind, type SflBlock, type SflValue } from '../../../sflLanguage/ast';\nimport { asString } from '../../ast/valueAccess';\nimport type { SflCanvasObjectType, SflSymbolDefinition } from '../types';\n\nexport interface CanvasObjectClassification {\n objectType: SflCanvasObjectType;\n kind: string;\n shapeType: string | undefined;\n symbol: SflSymbolDefinition | undefined;\n}\n\nfunction declaredCanvasObjectKind(block: SflBlock, properties: Map<string, SflValue>): string {\n if (block.kind === 'Path') {\n return 'path';\n }\n if (block.kind === 'Chart') {\n return 'chart';\n }\n if (isComponentBlockKind(block.kind)) {\n return asString(properties.get('type')) ?? 'widget';\n }\n if (block.kind === 'Text') {\n return 'text';\n }\n if (block.kind === 'Isometric') {\n return 'isometric';\n }\n if (block.kind === 'Dimension') {\n return 'dimension';\n }\n\n return asString(properties.get('kind')) ?? '';\n}\n\nfunction canvasObjectTypeForKind(kind: string): SflCanvasObjectType {\n if (kind === 'frame') {\n return 'frame';\n }\n if (kind === 'swimlane') {\n return 'swimlane';\n }\n if (kind === 'path') {\n return 'path';\n }\n if (kind === 'chart') {\n return 'chart';\n }\n if (isBuiltInComponentType(kind)) {\n return 'component';\n }\n if (kind === 'isometric') {\n return 'isometric';\n }\n if (kind === 'dimension') {\n return 'dimension';\n }\n\n return 'shape';\n}\n\nexport function classifyCanvasObject(\n block: SflBlock,\n properties: Map<string, SflValue>,\n symbolDefinitions: Map<string, SflSymbolDefinition>,\n): CanvasObjectClassification {\n const kind = declaredCanvasObjectKind(block, properties);\n const shapeReference = asString(properties.get('shape'));\n const symbol = shapeReference ? symbolDefinitions.get(shapeReference) : undefined;\n\n return {\n objectType: isComponentBlockKind(block.kind) ? 'component' : canvasObjectTypeForKind(kind),\n kind,\n shapeType: symbol ? 'symbol' : shapeReference,\n symbol,\n };\n}\n","import type { SflBlock, SflValue } from '../../../../sflLanguage/ast';\nimport { asNumber, tupleValues } from '../../../ast/valueAccess';\n\ntype LayoutProperty = (block: SflBlock, key: string) => SflValue | undefined;\n\nexport interface CanvasObjectGeometry {\n x: number;\n y: number;\n width: number;\n height: number;\n rotation: number | undefined;\n order: number | undefined;\n}\n\nexport function readCanvasObjectGeometry(\n block: SflBlock,\n origin: { x: number; y: number },\n layoutProperty: LayoutProperty,\n positionOverride?: number[],\n): CanvasObjectGeometry {\n const position = positionOverride ?? tupleValues(layoutProperty(block, 'position')) ?? [0, 0];\n const size = tupleValues(layoutProperty(block, 'size')) ?? [0, 0];\n\n return {\n x: origin.x + (position[0] ?? 0),\n y: origin.y + (position[1] ?? 0),\n width: size[0] ?? 0,\n height: size[1] ?? 0,\n rotation: asNumber(layoutProperty(block, 'rotation')),\n order: asNumber(layoutProperty(block, 'order')),\n };\n}\n","import type { SflValue } from '../../../sflLanguage/ast';\nimport { asString } from '../../ast/valueAccess';\n\nconst STRUCTURAL_PROPERTIES = new Set(['id', 'kind', 'text', 'shape', 'parent', 'order', 'orientation', 'lanes']);\n\nexport function readCanvasObjectPresentation(properties: Map<string, SflValue>): Record<string, string> {\n const presentation: Record<string, string> = {};\n\n for (const [key, value] of properties) {\n if (STRUCTURAL_PROPERTIES.has(key)) {\n continue;\n }\n\n const text = asString(value);\n if (text !== undefined) {\n presentation[key] = text;\n }\n }\n\n return presentation;\n}\n","import type { Shader } from '../../../model/shader';\nimport type { SflBlock, SflValue } from '../../../sflLanguage/ast';\nimport { asNumber, asString } from '../../ast/valueAccess';\nimport { resolveChartObject } from '../artifacts/chart/resolver';\nimport { resolveDimensionObject } from '../artifacts/dimension/resolver';\nimport { resolveIsometricObject } from '../artifacts/isometric/resolver';\nimport { resolvePathObject } from '../artifacts/path/resolver';\nimport { resolveSwimlaneObject } from '../artifacts/swimlane/resolver';\nimport type {\n SflCanvasObject,\n SflCanvasObjectBase,\n SflComponentObject,\n SflFrameObject,\n SflShapeObject,\n SflSymbolDefinition,\n} from '../types';\nimport { classifyCanvasObject } from './classification';\nimport { readCanvasObjectGeometry } from './layout/geometry';\nimport { readCanvasObjectPresentation } from './presentation';\n\nexport interface CanvasObjectResolutionContext {\n mergedProps: (block: SflBlock) => Map<string, SflValue>;\n layoutProp: (block: SflBlock, key: string) => SflValue | undefined;\n symbolDefs: Map<string, SflSymbolDefinition>;\n shaderDefs: Map<string, Shader>;\n}\n\nexport function resolveCanvasObject(\n block: SflBlock,\n origin: { x: number; y: number },\n context: CanvasObjectResolutionContext,\n frameId?: string,\n positionOverride?: number[],\n): SflCanvasObject {\n const { mergedProps, layoutProp, symbolDefs } = context;\n const properties = mergedProps(block);\n const classification = classifyCanvasObject(block, properties, symbolDefs);\n const geometry = readCanvasObjectGeometry(block, origin, layoutProp, positionOverride);\n const base: SflCanvasObjectBase = {\n id: asString(properties.get('id')) ?? block.name,\n kind: classification.kind,\n text: asString(properties.get('text')),\n ...geometry,\n parentFrameId: frameId ?? asString(properties.get('parent')),\n props: readCanvasObjectPresentation(properties),\n };\n\n switch (classification.objectType) {\n case 'chart':\n return resolveChartObject(base, block, properties, symbolDefs, mergedProps);\n case 'isometric':\n return resolveIsometricObject(base, block, properties, layoutProp, symbolDefs);\n case 'path':\n return resolvePathObject(base, properties, origin);\n case 'dimension':\n return resolveDimensionObject(base, properties, origin);\n case 'swimlane':\n return resolveSwimlaneObject(base, properties);\n case 'frame':\n return { ...base, objectType: 'frame' } satisfies SflFrameObject;\n case 'component':\n return {\n ...base,\n objectType: 'component',\n component: {\n type: asString(properties.get('type')) ?? 'rollingNumber',\n value: asString(properties.get('value')) ?? '0',\n digits: asNumber(properties.get('digits')),\n duration: asNumber(properties.get('duration')),\n min: asNumber(properties.get('min')),\n max: asNumber(properties.get('max')),\n label: asString(properties.get('label')),\n },\n } satisfies SflComponentObject;\n case 'shape':\n return {\n ...base,\n objectType: 'shape',\n shapeType: classification.shapeType,\n symbol: classification.symbol,\n } satisfies SflShapeObject;\n }\n}\n","import type { SflBlock } from '../../sflLanguage/ast';\nimport { childBlocks, directProperties } from '../ast/blockEntries';\nimport { asString } from '../ast/valueAccess';\nimport { isCanvasObjectBlockKind } from '../canvasObjects/processing/blockKinds';\n\nexport function directGroupMemberIds(block: SflBlock): string[] {\n return childBlocks(block)\n .filter(child => isCanvasObjectBlockKind(child.kind))\n .map(child => asString(directProperties(child).get('id')) ?? child.name);\n}\n","import type { SflBlock } from '../../sflLanguage/ast';\nimport { childBlocks } from '../ast/blockEntries';\nimport { asString, tupleValues } from '../ast/valueAccess';\nimport { expandNetLinks } from '../canvasObjects/artifacts/links/netExpansion';\nimport { isCanvasObjectBlockKind } from '../canvasObjects/processing/blockKinds';\nimport { createFlowPositioner, type FlowPositioner } from '../canvasObjects/processing/layout/flow';\nimport { type CanvasObjectResolutionContext, resolveCanvasObject } from '../canvasObjects/processing/resolver';\nimport type { CanvasResolution } from '../canvasState/resolution';\nimport { directGroupMemberIds } from '../groups/members';\nimport type { SflCanvasObject, SflGroupOut } from '../types';\n\nexport interface CanvasTree {\n canvasObjects: SflCanvasObject[];\n groups: SflGroupOut[];\n linkBlocks: SflBlock[];\n connectionBlocks: SflBlock[];\n linkSourceIndexes: number[];\n connectionSourceIndexes: number[];\n}\n\ninterface CanvasLocation {\n origin: { x: number; y: number };\n frameId?: string;\n}\n\nclass CanvasTreeResolver {\n readonly #context: CanvasObjectResolutionContext;\n readonly #canvasObjects: SflCanvasObject[] = [];\n readonly #linkBlocks: SflBlock[] = [];\n readonly #connectionBlocks: SflBlock[] = [];\n readonly #linkSourceIndexes: number[] = [];\n readonly #connectionSourceIndexes: number[] = [];\n #sequence = 0;\n\n constructor(resolution: CanvasResolution) {\n this.#context = resolution.canvasObjectResolutionContext;\n }\n\n resolve(model: SflBlock | undefined): CanvasTree {\n const groups = model ? this.#resolveChildren(model, { origin: { x: 0, y: 0 } }) : [];\n return {\n canvasObjects: this.#canvasObjects,\n groups,\n linkBlocks: this.#linkBlocks,\n connectionBlocks: this.#connectionBlocks,\n linkSourceIndexes: this.#linkSourceIndexes,\n connectionSourceIndexes: this.#connectionSourceIndexes,\n };\n }\n\n #resolveChildren(block: SflBlock, location: CanvasLocation): SflGroupOut[] {\n const groups: SflGroupOut[] = [];\n const nextFlowPosition = createFlowPositioner(block, this.#context);\n\n for (const child of childBlocks(block)) {\n groups.push(...this.#resolveChild(child, location, nextFlowPosition));\n }\n return groups;\n }\n\n #resolveChild(child: SflBlock, location: CanvasLocation, nextFlowPosition: FlowPositioner): SflGroupOut[] {\n const sourceIndex = this.#sequence++;\n if (child.kind === 'Container') {\n return this.#resolveContainer(child, location, nextFlowPosition, sourceIndex);\n }\n if (isCanvasObjectBlockKind(child.kind)) {\n this.#resolveCanvasObject(child, location, nextFlowPosition, sourceIndex);\n return [];\n }\n\n switch (child.kind) {\n case 'Group':\n return [this.#resolveGroup(child, location)];\n case 'Link':\n this.#linkBlocks.push(child);\n this.#linkSourceIndexes.push(sourceIndex);\n return [];\n case 'Connection':\n this.#connectionBlocks.push(child);\n this.#connectionSourceIndexes.push(sourceIndex);\n return [];\n case 'Net': {\n const expanded = expandNetLinks(child, this.#context);\n this.#linkBlocks.push(...expanded);\n this.#linkSourceIndexes.push(...expanded.map(() => sourceIndex));\n return [];\n }\n default:\n return [];\n }\n }\n\n #resolveContainer(\n block: SflBlock,\n location: CanvasLocation,\n nextFlowPosition: FlowPositioner,\n sourceIndex: number,\n ): SflGroupOut[] {\n const canvasObject = this.#resolvePositionedCanvasObject(block, location, nextFlowPosition, sourceIndex);\n this.#canvasObjects.push(canvasObject);\n return this.#resolveChildren(block, {\n origin: { x: canvasObject.x, y: canvasObject.y },\n frameId: canvasObject.id,\n });\n }\n\n #resolveCanvasObject(\n block: SflBlock,\n location: CanvasLocation,\n nextFlowPosition: FlowPositioner,\n sourceIndex: number,\n ): void {\n this.#canvasObjects.push(this.#resolvePositionedCanvasObject(block, location, nextFlowPosition, sourceIndex));\n }\n\n #resolvePositionedCanvasObject(\n block: SflBlock,\n location: CanvasLocation,\n nextFlowPosition: FlowPositioner,\n sourceIndex: number,\n ): SflCanvasObject {\n const size = tupleValues(this.#context.layoutProp(block, 'size')) ?? [0, 0];\n return {\n ...resolveCanvasObject(block, location.origin, this.#context, location.frameId, nextFlowPosition(size)),\n sourceIndex,\n };\n }\n\n #resolveGroup(block: SflBlock, location: CanvasLocation): SflGroupOut {\n const properties = this.#context.mergedProps(block);\n return {\n id: asString(properties.get('id')) ?? block.name,\n name: asString(properties.get('text')) ?? block.name,\n color: asString(properties.get('color')),\n icon: asString(properties.get('icon')),\n canvasObjectIds: directGroupMemberIds(block),\n subGroups: this.#resolveChildren(block, location),\n parentFrameId: location.frameId ?? asString(properties.get('parent')),\n };\n }\n}\n\nexport function resolveCanvasTree(model: SflBlock | undefined, resolution: CanvasResolution): CanvasTree {\n return new CanvasTreeResolver(resolution).resolve(model);\n}\n","import type { Shader, ShaderParameter } from '../../model/shader';\nimport type { SflBlock } from '../../sflLanguage/ast';\nimport { directProperties } from '../ast/blockEntries';\nimport { asNumber, asString } from '../ast/valueAccess';\n\nexport function readShaderDefinition(block: SflBlock): Shader | undefined {\n const properties = directProperties(block);\n const program = asString(properties.get('program'));\n const surfacePadding = asNumber(properties.get('surfacePadding'));\n if (!program) {\n return undefined;\n }\n\n const parameters: Record<string, ShaderParameter> = {};\n for (const [key, value] of properties) {\n if (key === 'program' || key === 'surfacePadding') {\n continue;\n }\n const number = asNumber(value);\n const text = asString(value);\n if (number !== undefined) {\n parameters[key] = number;\n } else if (text !== undefined) {\n parameters[key] = text === 'true' ? true : text === 'false' ? false : text;\n }\n }\n return {\n name: block.name,\n program,\n ...(surfacePadding === undefined ? {} : { surfacePadding: Math.max(0, surfacePadding) }),\n parameters,\n };\n}\n","import type { SflBlock } from '../../sflLanguage/ast';\nimport { childBlocks, directProperties } from '../ast/blockEntries';\nimport { asNumber, tupleValues } from '../ast/valueAccess';\nimport type { SflSymbolDefinition } from '../canvasObjects/types';\n\ntype SymbolDefinition = SflSymbolDefinition;\n\nfunction readSymbolPoints(block: SflBlock): { points: Array<[number, number]>; tensions: Array<number | undefined> } {\n const value = directProperties(block).get('points');\n const points: Array<[number, number]> = [];\n const tensions: Array<number | undefined> = [];\n if (value?.type !== 'list') {\n return { points, tensions };\n }\n for (const item of value.values) {\n if (item.type !== 'list' || item.values.length < 2) {\n continue;\n }\n const x = asNumber(item.values[0]);\n const y = asNumber(item.values[1]);\n if (x === undefined || y === undefined) {\n continue;\n }\n points.push([x, y]);\n tensions.push(item.values[2] === undefined ? undefined : asNumber(item.values[2]));\n }\n return { points, tensions };\n}\n\nfunction readSymbolPorts(block: SflBlock): SymbolDefinition['ports'] {\n const ports = childBlocks(block)\n .filter(child => child.kind === 'Port')\n .flatMap(port => {\n const position = tupleValues(directProperties(port).get('at'));\n if (typeof position?.[0] !== 'number' || typeof position[1] !== 'number') {\n return [];\n }\n\n return [{ name: port.name, at: [position[0], position[1]] as [number, number] }];\n });\n return ports.length > 0 ? ports : undefined;\n}\n\nexport function readSymbolDefinition(block: SflBlock): SymbolDefinition | undefined {\n const { points, tensions } = readSymbolPoints(block);\n if (points.length < 2) {\n return undefined;\n }\n\n return {\n name: block.name,\n points,\n pointTensions: tensions.some(tension => tension !== undefined) ? tensions : undefined,\n tension: asNumber(directProperties(block).get('tension')),\n ports: readSymbolPorts(block),\n };\n}\n","import type { Shader } from '../../model/shader';\nimport type { SflBlock, SflDocument } from '../../sflLanguage/ast';\nimport { childBlocks } from '../ast/blockEntries';\nimport type { CanvasObjectResolutionContext } from '../canvasObjects/processing/resolver';\nimport { readShaderDefinition } from './shaders';\nimport { readSymbolDefinition } from './symbols';\n\nexport type BlockDefinitions = Map<string, SflBlock>;\n\nexport interface CanvasDefinitions {\n styles: BlockDefinitions;\n layouts: BlockDefinitions;\n symbols: CanvasObjectResolutionContext['symbolDefs'];\n shaders: Map<string, Shader>;\n model?: SflBlock;\n}\n\nfunction projectModel(block: SflBlock): SflBlock | undefined {\n return childBlocks(block).find(child => child.kind === 'Model');\n}\n\nexport function collectCanvasDefinitions(sflDocument: SflDocument): CanvasDefinitions {\n return {\n styles: collectStyleDefinitions(sflDocument),\n layouts: collectLayoutDefinitions(sflDocument),\n symbols: collectSymbolDefinitions(sflDocument),\n shaders: collectShaderDefinitions(sflDocument),\n model: findCanvasModel(sflDocument),\n };\n}\n\nfunction collectShaderDefinitions(sflDocument: SflDocument): Map<string, Shader> {\n const shaders = new Map<string, Shader>();\n for (const block of sflDocument.blocks) {\n if (block.kind !== 'Shader') {\n continue;\n }\n const shader = readShaderDefinition(block);\n if (shader) {\n shaders.set(block.name, shader);\n }\n }\n return shaders;\n}\n\nfunction collectStyleDefinitions(sflDocument: SflDocument): BlockDefinitions {\n const styles: BlockDefinitions = new Map();\n for (const block of sflDocument.blocks) {\n if (block.kind === 'Style') {\n styles.set(block.name, block);\n }\n }\n return styles;\n}\n\nfunction collectLayoutDefinitions(sflDocument: SflDocument): BlockDefinitions {\n const layouts: BlockDefinitions = new Map();\n for (const block of sflDocument.blocks) {\n if (block.kind === 'Layout') {\n layouts.set(block.name, block);\n }\n }\n return layouts;\n}\n\nfunction collectSymbolDefinitions(sflDocument: SflDocument): CanvasObjectResolutionContext['symbolDefs'] {\n const symbols: CanvasObjectResolutionContext['symbolDefs'] = new Map();\n for (const block of sflDocument.blocks) {\n if (block.kind !== 'Symbol') {\n continue;\n }\n const symbol = readSymbolDefinition(block);\n if (symbol) {\n symbols.set(block.name, symbol);\n }\n }\n return symbols;\n}\n\nfunction findCanvasModel(sflDocument: SflDocument): SflBlock | undefined {\n for (const block of sflDocument.blocks) {\n if (block.kind === 'Model') {\n return block;\n }\n if (block.kind === 'Project') {\n const model = projectModel(block);\n if (model) {\n return model;\n }\n }\n }\n return undefined;\n}\n","import type { SflBlock, SflDocument } from '../../sflLanguage/ast';\nimport { childBlocks } from '../ast/blockEntries';\nimport type { SflDiagnostic } from '../types';\n\nexport interface CompositionReferences {\n styleRef?: string;\n layoutRef?: string;\n}\n\nexport function classifyCompositionReferences(\n composition: string[],\n styleBlocks: Map<string, SflBlock>,\n layoutBlocks: Map<string, SflBlock>,\n): CompositionReferences {\n let styleRef: string | undefined;\n let layoutRef: string | undefined;\n for (const reference of composition) {\n if (styleBlocks.has(reference)) {\n styleRef = reference;\n } else if (layoutBlocks.has(reference)) {\n layoutRef = reference;\n }\n }\n return { styleRef, layoutRef };\n}\n\nfunction collectBlockDiagnostics(\n block: SflBlock,\n styleBlocks: Map<string, SflBlock>,\n layoutBlocks: Map<string, SflBlock>,\n diagnostics: SflDiagnostic[],\n): void {\n for (const reference of block.composition) {\n if (!styleBlocks.has(reference) && !layoutBlocks.has(reference)) {\n diagnostics.push({\n severity: 'warning',\n code: 'unresolved-style-or-layout',\n ownerId: block.name,\n message: `\"${reference}\" is not a Style or Layout defined at the top level of the document — \"${block.name}\" gets no shape, fill, or stroke from it.`,\n });\n }\n }\n for (const child of childBlocks(block)) {\n collectBlockDiagnostics(child, styleBlocks, layoutBlocks, diagnostics);\n }\n}\n\nexport function collectUnresolvedCompositionReferences(\n sflDocument: SflDocument,\n styleBlocks: Map<string, SflBlock>,\n layoutBlocks: Map<string, SflBlock>,\n): SflDiagnostic[] {\n const diagnostics: SflDiagnostic[] = [];\n for (const block of sflDocument.blocks) {\n collectBlockDiagnostics(block, styleBlocks, layoutBlocks, diagnostics);\n }\n return diagnostics;\n}\n","import type { SflBlock, SflValue } from '../../sflLanguage/ast';\nimport { directProperties } from '../ast/blockEntries';\nimport type { BlockDefinitions } from './collection';\n\nexport type ResolvedDefinitions = Map<string, Map<string, SflValue>>;\ntype ParentDefinitionName = (block: SflBlock) => string | undefined;\n\nexport function resolveDefinitionInheritance(\n definitions: BlockDefinitions,\n parentName: ParentDefinitionName,\n): ResolvedDefinitions {\n return new DefinitionInheritanceResolver(definitions, parentName).resolveAll();\n}\n\nclass DefinitionInheritanceResolver {\n readonly #definitions: BlockDefinitions;\n readonly #parentName: ParentDefinitionName;\n readonly #resolved: ResolvedDefinitions = new Map();\n\n constructor(definitions: BlockDefinitions, parentName: ParentDefinitionName) {\n this.#definitions = definitions;\n this.#parentName = parentName;\n }\n\n resolveAll(): ResolvedDefinitions {\n for (const name of this.#definitions.keys()) {\n this.#resolveDefinition(name, new Set());\n }\n return this.#resolved;\n }\n\n #resolveDefinition(name: string, ancestry: Set<string>): Map<string, SflValue> {\n const cached = this.#resolved.get(name);\n if (cached) {\n return cached;\n }\n\n const block = this.#definitions.get(name);\n if (!block || ancestry.has(name)) {\n return new Map();\n }\n\n const values = this.#inheritedProperties(block, new Set([...ancestry, name]));\n for (const [key, value] of directProperties(block)) {\n values.set(key, value);\n }\n this.#resolved.set(name, values);\n return values;\n }\n\n #inheritedProperties(block: SflBlock, ancestry: Set<string>): Map<string, SflValue> {\n const parent = this.#parentName(block);\n return parent ? new Map(this.#resolveDefinition(parent, ancestry)) : new Map();\n }\n}\n","import type { SflBlock, SflValue } from '../../sflLanguage/ast';\nimport { directProperties, layoutProperties, styleProperties } from '../ast/blockEntries';\nimport type { CanvasObjectResolutionContext } from '../canvasObjects/processing/resolver';\nimport type { CanvasDefinitions } from './collection';\nimport { classifyCompositionReferences } from './compositionReferences';\nimport { resolveDefinitionInheritance } from './inheritance';\n\nexport function createCanvasObjectPropertyReaders(definitions: CanvasDefinitions): CanvasObjectResolutionContext {\n const { styles, layouts, symbols, shaders } = definitions;\n const references = (block: SflBlock) => classifyCompositionReferences(block.composition, styles, layouts);\n const resolvedStyles = resolveDefinitionInheritance(styles, block => references(block).styleRef);\n const resolvedLayouts = resolveDefinitionInheritance(layouts, block => references(block).layoutRef);\n\n const mergedProps = (block: SflBlock): Map<string, SflValue> => {\n const merged = new Map(resolvedStyles.get(references(block).styleRef ?? '') ?? []);\n for (const [key, value] of directProperties(block)) {\n merged.set(key, value);\n }\n for (const [key, value] of styleProperties(block)) {\n merged.set(key, value);\n }\n return merged;\n };\n\n const layoutProp = (block: SflBlock, key: string): SflValue | undefined => {\n const localProperties = layoutProperties(block);\n if (localProperties.has(key)) {\n return localProperties.get(key);\n }\n\n const reference = references(block).layoutRef;\n return reference ? resolvedLayouts.get(reference)?.get(key) : undefined;\n };\n\n return { mergedProps, layoutProp, symbolDefs: symbols, shaderDefs: shaders };\n}\n","import { CHART_TYPES, type ChartType, isChartType } from '../../model/chart';\nimport type { SflBlock, SflDocument } from '../../sflLanguage/ast';\nimport { childBlocks, contentChildren, directProperties, styleProperties } from '../ast/blockEntries';\nimport { asString } from '../ast/valueAccess';\nimport type { SflDiagnostic } from '../types';\n\nconst NATIVE_CIRCULAR_CHART_TYPES: ReadonlySet<ChartType> = new Set(['radar', 'radial']);\nconst OPTIONAL_CIRCULAR_GRID_CHART_TYPES: ReadonlySet<ChartType> = new Set(['scatter', 'custom', 'hexbin']);\n\nexport function collectUnsupportedChartTypes(doc: SflDocument): SflDiagnostic[] {\n const diagnostics: SflDiagnostic[] = [];\n\n const visit = (block: SflBlock): void => {\n if (block.kind === 'Chart') {\n const declared = asString(directProperties(block).get('type'));\n if (declared !== undefined && !isChartType(declared)) {\n diagnostics.push({\n severity: 'warning',\n code: 'unsupported-chart-type',\n ownerId: block.name,\n message: `Unsupported chart type '${declared}' — drawn as a plain series plot. Supported: ${CHART_TYPES.join(', ')}.`,\n });\n }\n }\n for (const child of childBlocks(block)) {\n visit(child);\n }\n };\n\n for (const block of doc.blocks) {\n visit(block);\n }\n return diagnostics;\n}\n\nexport function collectEmptySeries(doc: SflDocument): SflDiagnostic[] {\n const diagnostics: SflDiagnostic[] = [];\n\n const visit = (block: SflBlock): void => {\n if (block.kind === 'Chart') {\n for (const series of contentChildren(block).filter(child => child.kind === 'Series')) {\n if (!directProperties(series).has('values')) {\n diagnostics.push({\n severity: 'warning',\n code: 'series-without-values',\n ownerId: series.name,\n message: `Series '${series.name}' has no values. If this was meant to be an Axis or Rule, it needs that keyword in front of the name — inside data{}, a bare name is read as a Series.`,\n });\n }\n }\n }\n for (const child of childBlocks(block)) {\n visit(child);\n }\n };\n\n for (const block of doc.blocks) {\n visit(block);\n }\n return diagnostics;\n}\n\nexport function collectUnsupportedGridShapes(doc: SflDocument): SflDiagnostic[] {\n const diagnostics: SflDiagnostic[] = [];\n\n const visit = (block: SflBlock): void => {\n if (block.kind === 'Chart') {\n const declared = asString(directProperties(block).get('type'));\n const chartType = isChartType(declared) ? declared : 'bar';\n const gridShape = asString(styleProperties(block).get('gridShape'));\n if (\n gridShape === 'circle' &&\n !OPTIONAL_CIRCULAR_GRID_CHART_TYPES.has(chartType) &&\n !NATIVE_CIRCULAR_CHART_TYPES.has(chartType)\n ) {\n diagnostics.push({\n severity: 'warning',\n code: 'unsupported-grid-shape',\n ownerId: block.name,\n message: `gridShape: circle isn't supported on '${chartType}' — drawn with the standard rectangular grid instead. Supported: ${[...OPTIONAL_CIRCULAR_GRID_CHART_TYPES].join(', ')}.`,\n });\n }\n }\n for (const child of childBlocks(block)) {\n visit(child);\n }\n };\n\n for (const block of doc.blocks) {\n visit(block);\n }\n return diagnostics;\n}\n","import { componentTypes, isComponentType } from '../../model/component';\nimport { isComponentBlockKind, type SflBlock, type SflDocument } from '../../sflLanguage/ast';\nimport { childBlocks, directProperties } from '../ast/blockEntries';\nimport { asString } from '../ast/valueAccess';\nimport type { SflDiagnostic } from '../types';\n\nexport function collectUnsupportedComponentTypes(sflDocument: SflDocument): SflDiagnostic[] {\n const diagnostics: SflDiagnostic[] = [];\n\n const visit = (block: SflBlock): void => {\n if (isComponentBlockKind(block.kind)) {\n const type = asString(directProperties(block).get('type')) ?? 'rollingNumber';\n if (!isComponentType(type)) {\n diagnostics.push({\n severity: 'warning',\n code: 'unsupported-component-type',\n ownerId: block.name,\n message: `Unsupported component type '${type}'. Supported: ${componentTypes().join(', ')}.`,\n });\n }\n }\n for (const child of childBlocks(block)) {\n visit(child);\n }\n };\n\n for (const block of sflDocument.blocks) {\n visit(block);\n }\n return diagnostics;\n}\n","import type { SflBlock, SflDocument } from '../../sflLanguage/ast';\nimport type { CanvasObjectResolutionContext } from '../canvasObjects/processing/resolver';\nimport { collectCanvasDefinitions } from '../definitions/collection';\nimport { collectUnresolvedCompositionReferences } from '../definitions/compositionReferences';\nimport { createCanvasObjectPropertyReaders } from '../definitions/propertyReaders';\nimport { collectEmptySeries, collectUnsupportedChartTypes, collectUnsupportedGridShapes } from '../diagnostics/charts';\nimport { collectUnsupportedComponentTypes } from '../diagnostics/components';\nimport type { SflDiagnostic } from '../types';\n\nexport interface CanvasResolution {\n model?: SflBlock;\n diagnostics: SflDiagnostic[];\n canvasObjectResolutionContext: CanvasObjectResolutionContext;\n}\n\nexport function createCanvasResolution(doc: SflDocument): CanvasResolution {\n const definitions = collectCanvasDefinitions(doc);\n\n return {\n model: definitions.model,\n diagnostics: [\n ...collectUnresolvedCompositionReferences(doc, definitions.styles, definitions.layouts),\n ...collectUnsupportedChartTypes(doc),\n ...collectUnsupportedGridShapes(doc),\n ...collectEmptySeries(doc),\n ...collectUnsupportedComponentTypes(doc),\n ],\n canvasObjectResolutionContext: createCanvasObjectPropertyReaders(definitions),\n };\n}\n","import type { SflDocument } from '../../sflLanguage/ast';\nimport { readConnections } from '../canvasObjects/artifacts/connections/reader';\nimport { readLinks } from '../canvasObjects/artifacts/links/reader';\nimport { resolveCanvasTree } from '../canvasTree/resolver';\nimport type { SflCanvasState } from '../types';\nimport { createCanvasResolution } from './resolution';\n\nexport function resolveCanvasState(document: SflDocument): SflCanvasState {\n const resolution = createCanvasResolution(document);\n const { canvasObjects, groups, linkBlocks, connectionBlocks, linkSourceIndexes, connectionSourceIndexes } =\n resolveCanvasTree(resolution.model, resolution);\n const links = readLinks(\n resolution.model,\n linkBlocks,\n canvasObjects,\n resolution.canvasObjectResolutionContext,\n linkSourceIndexes,\n );\n const connections = readConnections(\n resolution.model,\n connectionBlocks,\n canvasObjects,\n resolution.canvasObjectResolutionContext,\n connectionSourceIndexes,\n );\n\n return {\n canvasObjects,\n groups,\n links,\n connections,\n diagnostics: resolution.diagnostics,\n shaders: [...resolution.canvasObjectResolutionContext.shaderDefs.values()],\n };\n}\n","import { parse } from '../sflLanguage';\nimport { expandRepeats } from '../sflLanguage/expansion/repeat';\nimport { resolveCanvasState } from './canvasState/resolver';\nimport type { SflCanvasState } from './types';\n\nexport type {\n SflCanvasObject,\n SflCanvasState,\n SflChartObject,\n SflComponentObject,\n SflConnectionOut,\n SflDiagnostic,\n SflDimensionObject,\n SflGroupOut,\n SflIsometricObject,\n SflLinkOut,\n SflPathObject,\n SflSwimlaneObject,\n} from './types';\nexport {\n isChartObject,\n isDimensionObject,\n isIsometricObject,\n isPathObject,\n isSwimlaneObject,\n} from './types';\n\nexport function sflToCanvasState(source: string): SflCanvasState {\n return resolveCanvasState(expandRepeats(parse(source)));\n}\n","export const DOM_CONTRACT_VERSION = 1;\n","import type { Point, Rect } from '../types';\n\nconst DEGREES_TO_RADIANS = Math.PI / 180;\n\nfunction rotatePoint(point: Point, degrees: number): Point {\n const radians = degrees * DEGREES_TO_RADIANS;\n const cosine = Math.cos(radians);\n const sine = Math.sin(radians);\n return { x: point.x * cosine - point.y * sine, y: point.x * sine + point.y * cosine };\n}\n\nfunction rectangleCenter(rectangle: Rect): Point {\n return { x: rectangle.x + rectangle.width / 2, y: rectangle.y + rectangle.height / 2 };\n}\n\nexport function worldPointToRectangle(rectangle: Rect, worldPoint: Point): Point {\n const center = rectangleCenter(rectangle);\n const pointRelativeToCenter = { x: worldPoint.x - center.x, y: worldPoint.y - center.y };\n return rectangle.rotation ? rotatePoint(pointRelativeToCenter, -rectangle.rotation) : pointRelativeToCenter;\n}\n\nexport function rectanglePointToWorld(rectangle: Rect, rectanglePoint: Point): Point {\n const center = rectangleCenter(rectangle);\n const rotatedPoint = rectangle.rotation ? rotatePoint(rectanglePoint, rectangle.rotation) : rectanglePoint;\n return { x: center.x + rotatedPoint.x, y: center.y + rotatedPoint.y };\n}\n","import type { Point, Rect, Side } from '../types';\nimport { rectanglePointToWorld, worldPointToRectangle } from './rectangleCoordinates';\nimport type { Port } from './types';\n\nfunction portPointInRectangle(rectangle: Rect, port: Port): Point {\n const offset = Math.max(0, Math.min(1, port.offset));\n const halfWidth = rectangle.width / 2;\n const halfHeight = rectangle.height / 2;\n switch (port.side) {\n case 'top':\n return { x: (offset - 0.5) * rectangle.width, y: -halfHeight };\n case 'right':\n return { x: halfWidth, y: (offset - 0.5) * rectangle.height };\n case 'bottom':\n return { x: (offset - 0.5) * rectangle.width, y: halfHeight };\n case 'left':\n return { x: -halfWidth, y: (offset - 0.5) * rectangle.height };\n }\n}\n\nexport function pointAtPort(rectangle: Rect, port: Port): Point {\n return rectanglePointToWorld(rectangle, portPointInRectangle(rectangle, port));\n}\n\nexport function pointAtNormalizedPort(rectangle: Rect, normalizedPosition: [number, number]): Point {\n return rectanglePointToWorld(rectangle, {\n x: (normalizedPosition[0] - 0.5) * rectangle.width,\n y: (normalizedPosition[1] - 0.5) * rectangle.height,\n });\n}\n\nexport function relativeOffsetOnRectangleSide(rectangle: Rect, side: Side, worldPoint: Point): number {\n const rectanglePoint = worldPointToRectangle(rectangle, worldPoint);\n switch (side) {\n case 'top':\n case 'bottom':\n return (rectanglePoint.x + rectangle.width / 2) / rectangle.width;\n case 'left':\n case 'right':\n return (rectanglePoint.y + rectangle.height / 2) / rectangle.height;\n }\n}\n","import type { Bounds, Point } from './types';\n\nexport const EMPTY_BOUNDS: Bounds = { minX: 0, minY: 0, maxX: 100, maxY: 100 };\n\nexport interface BoundsFrame {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport function boxBounds(frame: BoundsFrame, extra = 0): Bounds {\n return {\n minX: frame.x - extra,\n minY: frame.y - extra,\n maxX: frame.x + frame.width + extra,\n maxY: frame.y + frame.height + extra,\n };\n}\n\nexport function rotatedBounds(frame: BoundsFrame, degrees: number, extra = 0): Bounds {\n if (!degrees) {\n return boxBounds(frame, extra);\n }\n\n return boundsAroundPoints(rotateFrameCorners(frame, degrees), extra);\n}\n\nfunction rotateFrameCorners(frame: BoundsFrame, degrees: number): Point[] {\n const centerX = frame.x + frame.width / 2;\n const centerY = frame.y + frame.height / 2;\n const angle = (degrees * Math.PI) / 180;\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n return frameCorners(frame).map(point => ({\n x: centerX + (point.x - centerX) * cos - (point.y - centerY) * sin,\n y: centerY + (point.x - centerX) * sin + (point.y - centerY) * cos,\n }));\n}\n\nfunction frameCorners(frame: BoundsFrame): Point[] {\n return [\n { x: frame.x, y: frame.y },\n { x: frame.x + frame.width, y: frame.y },\n { x: frame.x + frame.width, y: frame.y + frame.height },\n { x: frame.x, y: frame.y + frame.height },\n ];\n}\n\nfunction boundsAroundPoints(points: Point[], extra: number): Bounds {\n return {\n minX: Math.min(...points.map(point => point.x)) - extra,\n minY: Math.min(...points.map(point => point.y)) - extra,\n maxX: Math.max(...points.map(point => point.x)) + extra,\n maxY: Math.max(...points.map(point => point.y)) + extra,\n };\n}\n","interface StackableObject {\n order_key?: string;\n orderKey?: string;\n order?: number;\n sourceIndex?: number;\n}\n\nexport function stackRank(object: StackableObject): number {\n const key = object.order_key ?? object.orderKey;\n if (!key) {\n return object.order ?? 0;\n }\n\n let rank = 0;\n for (let index = 0; index < Math.min(key.length, 8); index++) {\n rank = rank * 128 + key.charCodeAt(index);\n }\n return rank;\n}\n\nexport function stackSequence(object: StackableObject, fallback: number): number {\n return object.sourceIndex ?? fallback;\n}\n","import type { PathSegment } from './geometry/routing/types';\n\nexport function roundedOrthogonalPathData(segments: PathSegment[], radius: number): string {\n if (segments.length === 0) {\n return '';\n }\n const raw = [segments[0].start, ...segments.map(segment => segment.end)];\n const points = raw.filter(\n (point, index) => index === 0 || point.x !== raw[index - 1].x || point.y !== raw[index - 1].y,\n );\n const corners = points.filter((point, index) => {\n if (index === 0 || index === points.length - 1) {\n return true;\n }\n const previous = points[index - 1];\n const next = points[index + 1];\n return !((previous.x === point.x && point.x === next.x) || (previous.y === point.y && point.y === next.y));\n });\n if (corners.length < 2) {\n return '';\n }\n\n let pathData = `M ${corners[0].x} ${corners[0].y}`;\n for (let index = 1; index < corners.length - 1; index++) {\n const previous = corners[index - 1];\n const corner = corners[index];\n const next = corners[index + 1];\n const incoming = Math.hypot(corner.x - previous.x, corner.y - previous.y);\n const outgoing = Math.hypot(next.x - corner.x, next.y - corner.y);\n if (incoming === 0 || outgoing === 0) {\n pathData += ` L ${corner.x} ${corner.y}`;\n continue;\n }\n const cornerRadius = Math.min(radius, incoming * 0.4, outgoing * 0.4);\n const before = {\n x: corner.x + ((previous.x - corner.x) / incoming) * cornerRadius,\n y: corner.y + ((previous.y - corner.y) / incoming) * cornerRadius,\n };\n const after = {\n x: corner.x + ((next.x - corner.x) / outgoing) * cornerRadius,\n y: corner.y + ((next.y - corner.y) / outgoing) * cornerRadius,\n };\n pathData += ` L ${before.x} ${before.y} Q ${corner.x} ${corner.y} ${after.x} ${after.y}`;\n }\n const last = corners[corners.length - 1];\n return `${pathData} L ${last.x} ${last.y}`;\n}\n","const IDENT = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\nfunction block(kind: string, id: string, property: string): string | undefined {\n return IDENT.test(id) ? `${kind}[${id}].${property}` : undefined;\n}\n\nexport const CHART_TITLE_PROP = 'text';\n\nexport function axisLabelProp(axis: 'x' | 'y'): string {\n return `Axis[${axis}].label`;\n}\n\nexport function categoryProp(index: number): string | undefined {\n return Number.isInteger(index) && index >= 0 ? `categories[${index}]` : undefined;\n}\n\nexport function seriesLabelProp(id: string): string | undefined {\n return block('Series', id, 'label');\n}\n\nexport function seriesColorProp(id: string): string | undefined {\n return block('Series', id, 'color');\n}\n\nexport function seriesLabelOffsetXProp(id: string): string | undefined {\n return block('Series', id, 'labelOffsetX');\n}\n\nexport function seriesLabelOffsetYProp(id: string): string | undefined {\n return block('Series', id, 'labelOffsetY');\n}\n\nexport function seriesValueProp(id: string, index: number): string | undefined {\n return Number.isInteger(index) && index >= 0 ? block('Series', id, `values[${index}]`) : undefined;\n}\n\nexport function seriesValueColorProp(id: string, index: number): string | undefined {\n return Number.isInteger(index) && index >= 0 ? block('Series', id, `colors[${index}]`) : undefined;\n}\n\nexport function ruleTextProp(id: string): string | undefined {\n return block('Rule', id, 'text');\n}\n\nexport function ruleAtProp(id: string): string | undefined {\n return block('Rule', id, 'at');\n}\n","import { isStraight, type PathPoint, pathSegments } from '../../model/path';\n\nexport interface FreeformPathGeometry {\n points: PathPoint[];\n tension: number;\n closed: boolean;\n}\n\nexport function freeformPathData(geometry: FreeformPathGeometry): string {\n if (geometry.points.length === 0) {\n return '';\n }\n if (isStraight(geometry)) {\n return linearPathData(geometry);\n }\n const first = geometry.points[0];\n const commands = [`M ${first.x} ${first.y}`];\n for (const { to, controls } of pathSegments(geometry)) {\n commands.push(\n controls\n ? `C ${controls[0].x} ${controls[0].y} ${controls[1].x} ${controls[1].y} ${to.x} ${to.y}`\n : `L ${to.x} ${to.y}`,\n );\n }\n if (geometry.closed) {\n commands.push('Z');\n }\n return commands.join(' ');\n}\n\nfunction linearPathData(geometry: FreeformPathGeometry): string {\n const [first, ...remaining] = geometry.points;\n const segments = remaining.map(point => `L ${point.x} ${point.y}`).join(' ');\n return `M ${first.x} ${first.y} ${segments}${geometry.closed ? ' Z' : ''}`;\n}\n","import { freeformPathData } from '../../scene/freeformPath';\n\nexport interface RadarPoint {\n x: number;\n y: number;\n}\n\nexport interface RadarFrame {\n centerX: number;\n centerY: number;\n radius: number;\n min: number;\n max: number;\n count: number;\n curved: boolean;\n tension?: number;\n}\n\nconst START_ANGLE = -Math.PI / 2;\nconst CURVED_TENSION = 0.5;\nconst LABEL_FREE_MARGIN = 6;\n\nexport function radarLabelSpace(fontSize: number): number {\n return Math.max(38, fontSize * 3.2);\n}\n\nexport function radarRadius(plotWidth: number, plotHeight: number, fontSize: number, hasLabels = true): number {\n const margin = hasLabels ? radarLabelSpace(fontSize) : LABEL_FREE_MARGIN;\n return Math.max(8, Math.min(plotWidth, plotHeight) / 2 - margin);\n}\n\nexport function radarCategoryCount(configuredCount: number, dataCount: number): number {\n return Math.max(3, configuredCount || dataCount);\n}\n\nexport function radarAngleAt(count: number, index: number): number {\n return START_ANGLE + (index * Math.PI * 2) / count;\n}\n\nexport function angleForAxisValue(min: number, max: number, value: number): number {\n const ratio = max === min ? 0 : (value - min) / (max - min);\n return START_ANGLE + ratio * Math.PI * 2;\n}\n\nexport function radarPointAt(frame: RadarFrame, index: number, pointRadius: number): RadarPoint {\n const angle = radarAngleAt(frame.count, index);\n return {\n x: frame.centerX + Math.cos(angle) * pointRadius,\n y: frame.centerY + Math.sin(angle) * pointRadius,\n };\n}\n\nexport function radarRadiusForValue(frame: RadarFrame, value: number): number {\n const range = frame.max - frame.min;\n const ratio = range === 0 ? 0 : Math.max(0, Math.min(1, (value - frame.min) / range));\n return ratio * frame.radius;\n}\n\nexport function radarVertexPoint(frame: RadarFrame, index: number, value: number): RadarPoint {\n return radarPointAt(frame, index, radarRadiusForValue(frame, value));\n}\n\nexport function radarValueAtPoint(frame: RadarFrame, index: number, px: number, py: number): number {\n const angle = radarAngleAt(frame.count, index);\n const projected = (px - frame.centerX) * Math.cos(angle) + (py - frame.centerY) * Math.sin(angle);\n const ratio = frame.radius === 0 ? 0 : Math.max(0, Math.min(1, projected / frame.radius));\n return frame.min + ratio * (frame.max - frame.min);\n}\n\nexport function radarSeriesPath(points: RadarPoint[], curved: boolean, tension = CURVED_TENSION): string {\n if (points.length === 0) {\n return '';\n }\n if (curved) {\n return freeformPathData({ points, tension, closed: true });\n }\n const commands = points.map((point, index) => `${index ? 'L ' : ''}${point.x} ${point.y}`);\n return `M ${commands.join(' ')} Z`;\n}\n","export const SYMBOL_POINTS_ATTR = 'data-sf-symbol-points';\nexport const SYMBOL_TENSION_ATTR = 'data-sf-symbol-tension';\nexport const SYMBOL_BOUNDS_ATTR = 'data-sf-symbol-bounds';\nexport const CORNER_RADIUS_ATTR = 'data-sf-corner-radius';\nexport const SQUARE_CORNER_ATTR = 'data-sf-square-corner';\nexport const PATH_POINTS_ATTR = 'data-sf-path-points';\nexport const PATH_TENSION_ATTR = 'data-sf-path-tension';\nexport const PATH_CLOSED_ATTR = 'data-sf-path-closed';\nexport const PATH_POINT_INDEX_ATTR = 'data-sf-path-point';\nexport const ISOMETRIC_SIZE_ATTR = 'data-sf-isometric-size';\nexport const ISOMETRIC_LABEL_OFFSET_ATTR = 'data-sf-isometric-label-offset';\n","import type { Point } from '../types';\n\nexport interface BoxLike {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport function elementCenter(rect: BoxLike): Point {\n return { x: rect.x + rect.width / 2, y: rect.y + rect.height / 2 };\n}\n\nexport function edgePointToward(rect: BoxLike, other: BoxLike): Point {\n const center = elementCenter(rect);\n const otherCenter = elementCenter(other);\n const angle = Math.atan2(otherCenter.y - center.y, otherCenter.x - center.x);\n if (angle >= -Math.PI / 4 && angle < Math.PI / 4) {\n return { x: rect.x + rect.width, y: center.y };\n }\n if (angle >= Math.PI / 4 && angle < (3 * Math.PI) / 4) {\n return { x: center.x, y: rect.y + rect.height };\n }\n if (angle >= (-3 * Math.PI) / 4 && angle < -Math.PI / 4) {\n return { x: center.x, y: rect.y };\n }\n return { x: rect.x, y: center.y };\n}\n","import type { RenderNode, SceneRole } from './types';\n\nexport function tag(\n nodes: RenderNode[],\n role: SceneRole,\n id: string,\n kind?: string,\n label?: string,\n parentFrameId?: string,\n): RenderNode[] {\n nodes.forEach((node, index) => {\n node.identity = {\n role,\n id,\n ...(kind ? { kind } : {}),\n ...(index === 0 ? { primary: true } : {}),\n ...(index === 0 && label ? { label } : {}),\n ...(index === 0 && parentFrameId ? { parentFrameId } : {}),\n };\n });\n return nodes;\n}\n","export function finite(value: unknown, fallback: number): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : fallback;\n}\n","export const DEFAULT_FONT = \"Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\";\n","import type { GradientColor, MeshGradientColor } from '../../model/color';\nimport type { RenderDiagnostic, ScenePaint } from './types';\n\nexport function paint(\n value: string | GradientColor | MeshGradientColor | null | undefined,\n diagnostics: RenderDiagnostic[],\n ownerId: string,\n): ScenePaint {\n if (!value) {\n return { kind: 'none' };\n }\n if (typeof value === 'string') {\n return { kind: 'solid', color: value };\n }\n if (value.type === 'gradient') {\n return {\n kind: 'linear-gradient',\n angle: value.angle,\n stops: value.stops.map(stop => ({ offset: stop.position, color: stop.color })),\n };\n }\n if (value.points.length === 0) {\n diagnostics.push({\n severity: 'warning',\n code: 'empty-mesh-gradient',\n ownerId,\n message: 'Mesh gradient has no color points.',\n });\n return { kind: 'none' };\n }\n return {\n kind: 'mesh-gradient',\n points: value.points.map(point => ({ x: point.x, y: point.y, color: point.color })),\n };\n}\n","export function topRoundedRectPath(x: number, y: number, width: number, height: number, radius: number): string {\n const clampedRadius = Math.max(0, Math.min(radius, width / 2, height));\n if (clampedRadius === 0) {\n return `M ${x} ${y} H ${x + width} V ${y + height} H ${x} Z`;\n }\n return `M ${x} ${y + clampedRadius} A ${clampedRadius} ${clampedRadius} 0 0 1 ${x + clampedRadius} ${y} H ${x + width - clampedRadius} A ${clampedRadius} ${clampedRadius} 0 0 1 ${x + width} ${y + clampedRadius} V ${y + height} H ${x} Z`;\n}\n\nexport function bottomRoundedRectPath(x: number, y: number, width: number, height: number, radius: number): string {\n const clampedRadius = Math.max(0, Math.min(radius, width / 2, height));\n if (clampedRadius === 0) {\n return `M ${x} ${y} H ${x + width} V ${y + height} H ${x} Z`;\n }\n return `M ${x} ${y} H ${x + width} V ${y + height - clampedRadius} A ${clampedRadius} ${clampedRadius} 0 0 1 ${x + width - clampedRadius} ${y + height} H ${x + clampedRadius} A ${clampedRadius} ${clampedRadius} 0 0 1 ${x} ${y + height - clampedRadius} Z`;\n}\n\nexport function leftRoundedRectPath(x: number, y: number, width: number, height: number, radius: number): string {\n const clampedRadius = Math.max(0, Math.min(radius, width / 2, height / 2));\n if (clampedRadius === 0) {\n return `M ${x} ${y} H ${x + width} V ${y + height} H ${x} Z`;\n }\n return `M ${x} ${y + clampedRadius} A ${clampedRadius} ${clampedRadius} 0 0 1 ${x + clampedRadius} ${y} H ${x + width} V ${y + height} H ${x + clampedRadius} A ${clampedRadius} ${clampedRadius} 0 0 1 ${x} ${y + height - clampedRadius} Z`;\n}\n\nexport function rightRoundedRectPath(x: number, y: number, width: number, height: number, radius: number): string {\n const clampedRadius = Math.max(0, Math.min(radius, width / 2, height / 2));\n if (clampedRadius === 0) {\n return `M ${x} ${y} H ${x + width} V ${y + height} H ${x} Z`;\n }\n return `M ${x} ${y} H ${x + width - clampedRadius} A ${clampedRadius} ${clampedRadius} 0 0 1 ${x + width} ${y + clampedRadius} V ${y + height - clampedRadius} A ${clampedRadius} ${clampedRadius} 0 0 1 ${x + width - clampedRadius} ${y + height} H ${x} Z`;\n}\n\nexport interface RectCornerRadii {\n topLeft: number;\n topRight: number;\n bottomRight: number;\n bottomLeft: number;\n}\n\nexport function cornersRoundedRectPath(\n x: number,\n y: number,\n width: number,\n height: number,\n radii: RectCornerRadii,\n): string {\n const max = Math.max(0, Math.min(width, height) / 2);\n const tl = Math.max(0, Math.min(radii.topLeft, max));\n const tr = Math.max(0, Math.min(radii.topRight, max));\n const br = Math.max(0, Math.min(radii.bottomRight, max));\n const bl = Math.max(0, Math.min(radii.bottomLeft, max));\n const arcTo = (r: number, toX: number, toY: number) => (r > 0 ? `A ${r} ${r} 0 0 1 ${toX} ${toY} ` : '');\n return (\n `M ${x + tl} ${y} H ${x + width - tr} ` +\n arcTo(tr, x + width, y + tr) +\n `V ${y + height - br} ` +\n arcTo(br, x + width - br, y + height) +\n `H ${x + bl} ` +\n arcTo(bl, x, y + height - bl) +\n `V ${y + tl} ` +\n arcTo(tl, x + tl, y) +\n 'Z'\n );\n}\n","import type { Point } from './types';\n\ninterface RoundedCorner {\n vertex: Point;\n start: Point;\n end: Point;\n}\n\nfunction distance(a: Point, b: Point): number {\n return Math.hypot(b.x - a.x, b.y - a.y);\n}\n\nfunction toward(from: Point, to: Point, distanceFromStart: number): Point {\n const length = distance(from, to);\n\n if (length === 0) {\n return from;\n }\n\n const ratio = distanceFromStart / length;\n\n return {\n x: from.x + (to.x - from.x) * ratio,\n y: from.y + (to.y - from.y) * ratio,\n };\n}\n\nfunction roundedCorner(previous: Point, vertex: Point, next: Point, requestedRadius: number): RoundedCorner {\n const radius = Math.max(0, Math.min(requestedRadius, distance(vertex, previous) / 2, distance(vertex, next) / 2));\n\n return {\n vertex,\n start: toward(vertex, previous, radius),\n end: toward(vertex, next, radius),\n };\n}\n\nexport function roundedPolygonPath(points: readonly Point[], radius: number | readonly number[]): string {\n if (points.length < 3) {\n return '';\n }\n\n const radiusAt = (index: number) => (typeof radius === 'number' ? radius : (radius[index] ?? 0));\n\n if (points.every((_, index) => radiusAt(index) <= 0)) {\n const [first, ...rest] = points;\n return `M ${first.x} ${first.y} ${rest.map(point => `L ${point.x} ${point.y}`).join(' ')} Z`;\n }\n\n const corners = points.map((vertex, index) =>\n roundedCorner(\n points[(index - 1 + points.length) % points.length],\n vertex,\n points[(index + 1) % points.length],\n radiusAt(index),\n ),\n );\n\n const commands = [`M ${corners[0].end.x} ${corners[0].end.y}`];\n\n for (let index = 1; index < corners.length; index++) {\n const corner = corners[index];\n commands.push(\n `L ${corner.start.x} ${corner.start.y}`,\n `Q ${corner.vertex.x} ${corner.vertex.y} ${corner.end.x} ${corner.end.y}`,\n );\n }\n\n const first = corners[0];\n commands.push(\n `L ${first.start.x} ${first.start.y}`,\n `Q ${first.vertex.x} ${first.vertex.y} ${first.end.x} ${first.end.y}`,\n 'Z',\n );\n\n return commands.join(' ');\n}\n","import type { TextMetrics } from './textMetrics';\n\nconst PLAIN_CHAR_FACTOR = 0.58;\nconst BOLD_CHAR_FACTOR = 0.64;\n\nexport function wrapText(text: string, width: number, fontSize: number, metrics?: TextMetrics): string[] {\n const maxChars = Math.max(1, Math.floor(width / Math.max(1, fontSize * PLAIN_CHAR_FACTOR)));\n const fits = metrics\n ? (line: string, word: string) =>\n metrics.measure(line, false) + metrics.spaceWidth + metrics.measure(word, false) <= width\n : (line: string, word: string) => `${line} ${word}`.length <= maxChars;\n const result: string[] = [];\n for (const rawLine of text.split('\\n')) {\n const words = rawLine.split(/\\s+/).filter(Boolean);\n if (!words.length) {\n result.push('');\n continue;\n }\n let line = '';\n for (const word of words) {\n if (!line) {\n line = word;\n } else if (fits(line, word)) {\n line += ` ${word}`;\n } else {\n result.push(line);\n line = word;\n }\n }\n result.push(line);\n }\n return result;\n}\n\nexport function ellipsizeToWidth(text: string, width: number, fontSize: number, bold: boolean): string {\n if (estimateTextWidth(text, fontSize, bold) <= width) {\n return text;\n }\n let end = text.length;\n while (end > 1 && estimateTextWidth(`${text.slice(0, end)}…`, fontSize, bold) > width) {\n end -= 1;\n }\n return `${text.slice(0, end)}…`;\n}\n\nexport function estimateTextWidth(text: string, fontSize: number, bold: boolean): number {\n return text.length * fontSize * (bold ? BOLD_CHAR_FACTOR : PLAIN_CHAR_FACTOR);\n}\n\nexport function heuristicRichMeasure(fontSize: number): TextMetrics {\n return {\n measure: (text: string, bold: boolean) => estimateTextWidth(text, fontSize, bold),\n spaceWidth: fontSize * PLAIN_CHAR_FACTOR,\n };\n}\n","import type { Side } from '../../../../../model/geometry/types';\n\nexport function sideNormal(side: Side): [number, number] {\n switch (side) {\n case 'top':\n return [0, -1];\n case 'right':\n return [1, 0];\n case 'bottom':\n return [0, 1];\n case 'left':\n return [-1, 0];\n }\n}\n","import type { Side } from '../../../../../model/geometry/types';\nimport { sideNormal } from './sideNormal';\n\nfunction controlDistances(\n from: { x: number; y: number },\n to: { x: number; y: number },\n fromNormal: [number, number],\n toNormal: [number, number],\n options?: { min?: number; max?: number; perpendicularScale?: number },\n): { fromDistance: number; toDistance: number } {\n const minimum = options?.min ?? 50;\n const maximum = options?.max ?? 240;\n const perpendicularScale = options?.perpendicularScale ?? 0.9;\n const deltaX = to.x - from.x;\n const deltaY = to.y - from.y;\n const alongFrom = Math.abs(deltaX * fromNormal[0] + deltaY * fromNormal[1]);\n const alongTo = Math.abs(deltaX * toNormal[0] + deltaY * toNormal[1]);\n const perpendicularFrom = Math.abs(deltaX * fromNormal[1] - deltaY * fromNormal[0]);\n const perpendicularTo = Math.abs(deltaX * toNormal[1] - deltaY * toNormal[0]);\n const parallel =\n (fromNormal[0] === toNormal[0] && fromNormal[1] === toNormal[1]) ||\n (fromNormal[0] === -toNormal[0] && fromNormal[1] === -toNormal[1]);\n\n let fromDistance = Math.max(minimum, Math.min(maximum, Math.max(alongFrom, perpendicularFrom * perpendicularScale)));\n let toDistance = Math.max(minimum, Math.min(maximum, Math.max(alongTo, perpendicularTo * perpendicularScale)));\n if (parallel) {\n fromDistance = Math.min(maximum, fromDistance + perpendicularFrom * 0.75);\n toDistance = Math.min(maximum, toDistance + perpendicularTo * 0.75);\n }\n return { fromDistance, toDistance };\n}\n\nexport function routeCubic(\n from: { x: number; y: number },\n to: { x: number; y: number },\n fromSide: Side,\n toSide: Side,\n options?: { min?: number; max?: number; perpendicularScale?: number },\n): { p0: [number, number]; p1: [number, number]; p2: [number, number]; p3: [number, number] } {\n const fromNormal = sideNormal(fromSide);\n const toNormal = sideNormal(toSide);\n const { fromDistance, toDistance } = controlDistances(from, to, fromNormal, toNormal, options);\n return {\n p0: [from.x, from.y],\n p1: [from.x + fromNormal[0] * fromDistance, from.y + fromNormal[1] * fromDistance],\n p2: [to.x + toNormal[0] * toDistance, to.y + toNormal[1] * toDistance],\n p3: [to.x, to.y],\n };\n}\n","import type { Side } from '../../../../../model/geometry/types';\nimport { routeCubic } from './cubic';\nimport type { LinkRoute, LinkRoutePoint } from './types';\n\nexport function calculateCurvedLinkRoute(\n from: LinkRoutePoint,\n to: LinkRoutePoint,\n fromSide: Side,\n toSide: Side,\n): LinkRoute {\n const { p0, p1, p2, p3 } = routeCubic(from, to, fromSide, toSide, {\n min: 35,\n max: 90,\n perpendicularScale: 0.5,\n });\n return { points: [...p0, ...p1, ...p2, ...p3], segments: [] };\n}\n","import type { Side } from '../../../../../model/geometry/types';\nimport type { LinkRoutePoint } from './types';\n\nexport interface RouteConnection {\n side: Side;\n normal: [number, number];\n stub: [number, number];\n}\n\nexport interface OrthogonalRouteDraft {\n from: LinkRoutePoint;\n to: LinkRoutePoint;\n fromConnection: RouteConnection;\n toConnection: RouteConnection;\n horizontalFirst: boolean;\n}\n\nexport function snapAlignedEndpoints(\n from: LinkRoutePoint,\n to: LinkRoutePoint,\n fromSide: Side,\n toSide: Side,\n): [LinkRoutePoint, LinkRoutePoint] {\n const threshold = 6;\n const verticalPair = ['top', 'bottom'].includes(fromSide) && ['top', 'bottom'].includes(toSide);\n const horizontalPair = ['left', 'right'].includes(fromSide) && ['left', 'right'].includes(toSide);\n if (verticalPair && Math.abs(to.x - from.x) < threshold) {\n return [from, { ...to, x: from.x }];\n }\n if (horizontalPair && Math.abs(to.y - from.y) < threshold) {\n return [from, { ...to, y: from.y }];\n }\n return [from, to];\n}\n\nexport function chooseInitialOrientation(\n from: LinkRoutePoint,\n to: LinkRoutePoint,\n endpointEdges?: { fromEdge?: Side; toEdge?: Side },\n): boolean {\n if (endpointEdges?.toEdge) {\n return endpointEdges.toEdge === 'left' || endpointEdges.toEdge === 'right';\n }\n if (endpointEdges?.fromEdge) {\n return endpointEdges.fromEdge === 'left' || endpointEdges.fromEdge === 'right';\n }\n return Math.abs(to.x - from.x) > Math.abs(to.y - from.y);\n}\n\nexport function stepOutDistances(\n from: LinkRoutePoint,\n to: LinkRoutePoint,\n fromNormal: [number, number],\n toNormal: [number, number],\n horizontalFirst: boolean,\n): [number, number] {\n let fromDistance = 40;\n let toDistance = 40;\n const axis = horizontalFirst ? 0 : 1;\n const delta = horizontalFirst ? to.x - from.x : to.y - from.y;\n if (fromNormal[axis] !== 0 && fromNormal[axis] === -toNormal[axis]) {\n const gap = delta * fromNormal[axis];\n if (gap > 0 && gap < fromDistance + toDistance) {\n fromDistance = gap / 2;\n toDistance = gap / 2;\n }\n } else if (fromNormal[axis] === 0) {\n const gap = delta * -toNormal[axis];\n if (gap > 0 && gap < toDistance) {\n toDistance = gap;\n }\n }\n return [fromDistance, toDistance];\n}\n\nexport function chooseBend(route: OrthogonalRouteDraft): [number, number] {\n const { fromConnection, toConnection, to, horizontalFirst } = route;\n const fromStub = fromConnection.stub;\n const toStub = toConnection.stub;\n let x = (fromStub[0] + toStub[0]) / 2;\n let y = (fromStub[1] + toStub[1]) / 2;\n const fromHorizontal = isHorizontalSide(fromConnection.side);\n const toHorizontal = isHorizontalSide(toConnection.side);\n if (fromHorizontal !== toHorizontal) {\n if (horizontalFirst) {\n x = (fromStub[0] - to.x) * toConnection.normal[0] >= 0 ? fromStub[0] : toStub[0];\n } else {\n y = (fromStub[1] - to.y) * toConnection.normal[1] >= 0 ? fromStub[1] : toStub[1];\n }\n } else if (fromConnection.side === toConnection.side) {\n if (horizontalFirst) {\n x = fromConnection.normal[0] < 0 ? Math.min(fromStub[0], toStub[0]) : Math.max(fromStub[0], toStub[0]);\n } else {\n y = fromConnection.normal[1] < 0 ? Math.min(fromStub[1], toStub[1]) : Math.max(fromStub[1], toStub[1]);\n }\n }\n return [x, y];\n}\n\nfunction isHorizontalSide(side: Side): boolean {\n return side === 'left' || side === 'right';\n}\n","import type { Side } from '../../../../../model/geometry/types';\nimport type { OrthogonalRouteDraft } from './orthogonalPlan';\nimport type { LinkRoutePoint } from './types';\n\nexport function segmentMidpoints(points: number[]): LinkRoutePoint[] {\n const midpoints: LinkRoutePoint[] = [];\n for (let index = 0; index < points.length - 2; index += 2) {\n midpoints.push({\n x: (points[index] + points[index + 2]) / 2,\n y: (points[index + 1] + points[index + 3]) / 2,\n });\n }\n return midpoints;\n}\n\nexport function baseOrthogonalPoints(route: OrthogonalRouteDraft, bend: [number, number]): number[] {\n const { from, to, fromConnection, toConnection, horizontalFirst } = route;\n const fromStub = fromConnection.stub;\n const toStub = toConnection.stub;\n const points = [from.x, from.y, fromStub[0], fromStub[1]];\n if (horizontalFirst) {\n points.push(bend[0], fromStub[1], bend[0], toStub[1]);\n } else {\n points.push(fromStub[0], bend[1], toStub[0], bend[1]);\n }\n points.push(toStub[0], toStub[1], to.x, to.y);\n return points;\n}\n\nexport function movableInnerSegments(horizontalFirst: boolean, fromSide: Side, toSide: Side): [boolean, boolean] {\n const fixedSides = horizontalFirst ? ['left', 'right'] : ['top', 'bottom'];\n return [!fixedSides.includes(fromSide), !fixedSides.includes(toSide)];\n}\n\nexport function offsetOrthogonalPoints(\n route: OrthogonalRouteDraft,\n bend: [number, number],\n segmentOffsets: number[] | undefined,\n movable: [boolean, boolean],\n): number[] {\n const { from, to, fromConnection, toConnection, horizontalFirst } = route;\n const fromStub = fromConnection.stub;\n const toStub = toConnection.stub;\n const first = movable[0] ? segmentOffsets?.[1] || 0 : 0;\n const middle = segmentOffsets?.[2] || 0;\n const last = movable[1] ? segmentOffsets?.[3] || 0 : 0;\n if (horizontalFirst) {\n const fromY = fromStub[1] + first;\n const bendX = bend[0] + middle;\n const toY = toStub[1] + last;\n return [from.x, from.y, fromStub[0], fromY, bendX, fromY, bendX, toY, toStub[0], toY, to.x, to.y];\n }\n const fromX = fromStub[0] + first;\n const bendY = bend[1] + middle;\n const toX = toStub[0] + last;\n return [from.x, from.y, fromX, fromStub[1], fromX, bendY, toX, bendY, toX, toStub[1], to.x, to.y];\n}\n","import type { LinkRoutePoint, PathSegment } from './types';\n\nexport function describeSegments(\n points: number[],\n originalMidpoints: LinkRoutePoint[],\n canMoveFirstInner: boolean,\n canMoveLastInner: boolean,\n): PathSegment[] {\n const totalSegments = (points.length - 2) / 2;\n return originalMidpoints.map((originalMidpoint, segmentIndex) => {\n const offset = segmentIndex * 2;\n const start = { x: points[offset], y: points[offset + 1] };\n const end = { x: points[offset + 2], y: points[offset + 3] };\n const midpoint = { x: (start.x + end.x) / 2, y: (start.y + end.y) / 2 };\n const isInner = segmentIndex > 0 && segmentIndex < totalSegments - 1;\n const isMovableEdge =\n segmentIndex === 1 ? canMoveFirstInner : segmentIndex === totalSegments - 2 ? canMoveLastInner : true;\n const hasLength = Math.hypot(end.x - start.x, end.y - start.y) >= 1;\n return {\n start,\n end,\n midpoint,\n originalMidpoint,\n isHorizontal: Math.abs(end.x - start.x) > Math.abs(end.y - start.y),\n canMove: isInner && isMovableEdge && hasLength,\n };\n });\n}\n","import type { Point } from '../../../../../model/geometry/types';\n\ninterface RoundedCorner {\n entry: Point;\n exit: Point;\n center: Point;\n radius: number;\n startAngle: number;\n angleSweep: number;\n}\n\nconst CORNER_SAMPLE_COUNT = 8;\n\nexport function roundOrthogonalPoints(coordinates: number[], maximumRadius: number): number[] {\n if (coordinates.length < 6) {\n return coordinates;\n }\n const points = coordinatePoints(coordinates);\n const roundedPoints = [points[0]];\n for (let index = 1; index < points.length - 1; index++) {\n const corner = createRoundedCorner(points[index - 1], points[index], points[index + 1], maximumRadius);\n roundedPoints.push(...(corner ? sampleRoundedCorner(corner) : [points[index]]));\n }\n roundedPoints.push(points[points.length - 1]);\n return roundedPoints.flatMap(point => [point.x, point.y]);\n}\n\nfunction createRoundedCorner(previous: Point, corner: Point, next: Point, maximumRadius: number): RoundedCorner | null {\n const incoming = { x: corner.x - previous.x, y: corner.y - previous.y };\n const outgoing = { x: next.x - corner.x, y: next.y - corner.y };\n const incomingIsAxisAligned = incoming.x === 0 || incoming.y === 0;\n const outgoingIsAxisAligned = outgoing.x === 0 || outgoing.y === 0;\n const isStraight = (incoming.x === 0 && outgoing.x === 0) || (incoming.y === 0 && outgoing.y === 0);\n if (!incomingIsAxisAligned || !outgoingIsAxisAligned || isStraight) {\n return null;\n }\n const radius = Math.min(maximumRadius, axisLength(incoming) * 0.4, axisLength(outgoing) * 0.4);\n if (radius <= 0) {\n return null;\n }\n const incomingDirection = axisDirection(incoming);\n const outgoingDirection = axisDirection(outgoing);\n const entry = offsetPoint(corner, incomingDirection, -radius);\n const exit = offsetPoint(corner, outgoingDirection, radius);\n const center = offsetPoint(entry, outgoingDirection, radius);\n const startAngle = Math.atan2(entry.y - center.y, entry.x - center.x);\n const endAngle = Math.atan2(exit.y - center.y, exit.x - center.x);\n return { entry, exit, center, radius, startAngle, angleSweep: normalizedAngleSweep(endAngle - startAngle) };\n}\n\nfunction offsetPoint(point: Point, direction: Point, distance: number): Point {\n return { x: point.x + direction.x * distance, y: point.y + direction.y * distance };\n}\n\nfunction axisLength(vector: Point): number {\n return Math.abs(vector.x) + Math.abs(vector.y);\n}\n\nfunction axisDirection(vector: Point): Point {\n return { x: vector.x !== 0 ? Math.sign(vector.x) : 0, y: vector.y !== 0 ? Math.sign(vector.y) : 0 };\n}\n\nfunction normalizedAngleSweep(angle: number): number {\n if (angle > Math.PI) {\n return angle - 2 * Math.PI;\n }\n if (angle < -Math.PI) {\n return angle + 2 * Math.PI;\n }\n return angle;\n}\n\nfunction sampleRoundedCorner(corner: RoundedCorner): Point[] {\n const points = [corner.entry];\n for (let sampleIndex = 1; sampleIndex < CORNER_SAMPLE_COUNT - 1; sampleIndex++) {\n const progress = sampleIndex / (CORNER_SAMPLE_COUNT - 1);\n const angle = corner.startAngle + corner.angleSweep * progress;\n points.push({\n x: corner.center.x + Math.cos(angle) * corner.radius,\n y: corner.center.y + Math.sin(angle) * corner.radius,\n });\n }\n points.push(corner.exit);\n return points;\n}\n\nfunction coordinatePoints(coordinates: number[]): Point[] {\n const points: Point[] = [];\n for (let index = 0; index < coordinates.length; index += 2) {\n points.push({ x: coordinates[index], y: coordinates[index + 1] });\n }\n return points;\n}\n","import type { Side } from '../../../../../model/geometry/types';\nimport {\n chooseBend,\n chooseInitialOrientation,\n type OrthogonalRouteDraft,\n type RouteConnection,\n snapAlignedEndpoints,\n stepOutDistances,\n} from './orthogonalPlan';\nimport {\n baseOrthogonalPoints,\n movableInnerSegments,\n offsetOrthogonalPoints,\n segmentMidpoints,\n} from './orthogonalPoints';\nimport { describeSegments } from './orthogonalSegments';\nimport { roundOrthogonalPoints } from './rounding';\nimport { sideNormal } from './sideNormal';\nimport type { LinkRoute, LinkRoutePoint } from './types';\n\ninterface OrthogonalRouteRequest {\n from: LinkRoutePoint;\n to: LinkRoutePoint;\n fromSide: Side;\n toSide: Side;\n segmentOffsets?: number[];\n endpointEdges?: { fromEdge?: Side; toEdge?: Side };\n}\n\nexport function routeOrthogonal(request: OrthogonalRouteRequest): LinkRoute {\n const routeDraft = createOrthogonalRouteDraft(request);\n const bend = chooseBend(routeDraft);\n const originalPoints = baseOrthogonalPoints(routeDraft, bend);\n const originalSegmentMidpoints = segmentMidpoints(originalPoints);\n const movableSegments = movableInnerSegments(routeDraft.horizontalFirst, request.fromSide, request.toSide);\n const points = offsetOrthogonalPoints(routeDraft, bend, request.segmentOffsets, movableSegments);\n const segments = describeSegments(points, originalSegmentMidpoints, movableSegments[0], movableSegments[1]);\n return { points: roundOrthogonalPoints(points, 10), segments };\n}\n\nfunction createOrthogonalRouteDraft(request: OrthogonalRouteRequest): OrthogonalRouteDraft {\n const [alignedFrom, alignedTo] = snapAlignedEndpoints(request.from, request.to, request.fromSide, request.toSide);\n const fromNormal = sideNormal(request.fromSide);\n const toNormal = sideNormal(request.toSide);\n const horizontalFirst = chooseInitialOrientation(alignedFrom, alignedTo, request.endpointEdges);\n const [fromDistance, toDistance] = stepOutDistances(alignedFrom, alignedTo, fromNormal, toNormal, horizontalFirst);\n return {\n from: alignedFrom,\n to: alignedTo,\n fromConnection: createRouteConnection(alignedFrom, request.fromSide, fromNormal, fromDistance),\n toConnection: createRouteConnection(alignedTo, request.toSide, toNormal, toDistance),\n horizontalFirst,\n };\n}\n\nfunction createRouteConnection(\n point: LinkRoutePoint,\n side: Side,\n normal: [number, number],\n distance: number,\n): RouteConnection {\n return { side, normal, stub: [point.x + normal[0] * distance, point.y + normal[1] * distance] };\n}\n","import { roundOrthogonalPoints } from './rounding';\nimport type { LinkRoute, LinkRoutePoint, PathSegment } from './types';\n\nconst ORTHOGONAL_EPSILON = 0.5;\n\nexport function pathFromWaypoints(from: LinkRoutePoint, waypoints: LinkRoutePoint[], to: LinkRoutePoint): LinkRoute {\n const corners = [from, ...waypoints, to];\n const points: number[] = [];\n for (const point of corners) {\n points.push(point.x, point.y);\n }\n\n const segments: PathSegment[] = [];\n for (let index = 0; index < points.length - 2; index += 2) {\n const start = { x: points[index], y: points[index + 1] };\n const end = { x: points[index + 2], y: points[index + 3] };\n const midpoint = { x: (start.x + end.x) / 2, y: (start.y + end.y) / 2 };\n segments.push({\n start,\n end,\n midpoint,\n originalMidpoint: midpoint,\n isHorizontal: Math.abs(end.x - start.x) > Math.abs(end.y - start.y),\n canMove: false,\n });\n }\n\n return { points: roundOrthogonalPoints(points, 10), segments };\n}\n\nexport function isAxisAligned(segments: PathSegment[]): boolean {\n return segments.every(segment => {\n const dx = Math.abs(segment.end.x - segment.start.x);\n const dy = Math.abs(segment.end.y - segment.start.y);\n return dx <= ORTHOGONAL_EPSILON || dy <= ORTHOGONAL_EPSILON;\n });\n}\n","import type { Side } from '../../../../../model/geometry/types';\nimport type { Link } from '../../../../../model/link';\nimport { routeOrthogonal } from './orthogonal';\nimport type { LinkRoute, LinkRoutePoint } from './types';\nimport { isAxisAligned, pathFromWaypoints } from './waypoints';\n\nexport function calculateOrthogonalLinkRoute(\n link: Link,\n from: LinkRoutePoint,\n to: LinkRoutePoint,\n fromSide: Side,\n toSide: Side,\n): LinkRoute {\n if (link.waypoints && link.waypoints.length > 0) {\n const waypointResult = pathFromWaypoints(from, link.waypoints, to);\n if (isAxisAligned(waypointResult.segments)) {\n return waypointResult;\n }\n }\n\n const endpointEdges = { fromEdge: fromSide, toEdge: toSide };\n const request = { from, to, fromSide, toSide, segmentOffsets: link.segmentOffsets, endpointEdges };\n const route = routeOrthogonal(request);\n if (isAxisAligned(route.segments)) {\n return route;\n }\n return routeOrthogonal({ ...request, segmentOffsets: undefined });\n}\n","import type { Side } from '../../../../../model/geometry/types';\nimport type { Link } from '../../../../../model/link';\nimport type { LinkRoutePoint } from './types';\n\nfunction facingSide(from: LinkRoutePoint, to: LinkRoutePoint): Side {\n const angle = Math.atan2(to.y - from.y, to.x - from.x);\n if (angle >= -Math.PI / 4 && angle < Math.PI / 4) {\n return 'right';\n }\n if (angle >= Math.PI / 4 && angle < (3 * Math.PI) / 4) {\n return 'bottom';\n }\n if (angle >= (-3 * Math.PI) / 4 && angle < -Math.PI / 4) {\n return 'top';\n }\n return 'left';\n}\n\nexport function connectionSides(\n link: Link,\n from: LinkRoutePoint,\n to: LinkRoutePoint,\n): { fromSide: Side; toSide: Side } {\n const fromSide = link.fromPoint?.kind === 'side' ? link.fromPoint.side : facingSide(from, to);\n const toSide = link.toPoint?.kind === 'side' ? link.toPoint.side : facingSide(to, from);\n return { fromSide, toSide };\n}\n","import type { LinkRoute, LinkRoutePoint } from './types';\n\nexport function calculateStraightLinkRoute(from: LinkRoutePoint, to: LinkRoutePoint): LinkRoute {\n return { points: [from.x, from.y, to.x, to.y], segments: [] };\n}\n","import type { Link, PathType } from '../../../../model/link';\nimport { calculateCurvedLinkRoute } from './routing/curvedRoute';\nimport { calculateOrthogonalLinkRoute } from './routing/orthogonalRoute';\nimport { connectionSides } from './routing/sides';\nimport { calculateStraightLinkRoute } from './routing/straightRoute';\nimport type { LinkRoute, LinkRoutePoint } from './routing/types';\n\nexport type { LinkRoute } from './routing/types';\nexport function calculateLinkRoute(\n link: Link,\n effectiveFrom: LinkRoutePoint,\n effectiveTo: LinkRoutePoint,\n pathType: PathType,\n): LinkRoute {\n const { fromSide, toSide } = connectionSides(link, effectiveFrom, effectiveTo);\n if (pathType === 'curved') {\n return calculateCurvedLinkRoute(effectiveFrom, effectiveTo, fromSide, toSide);\n }\n if (pathType === 'orthogonal') {\n return calculateOrthogonalLinkRoute(link, effectiveFrom, effectiveTo, fromSide, toSide);\n }\n return calculateStraightLinkRoute(effectiveFrom, effectiveTo);\n}\n","const KAPPA = 0.5523;\nconst CYLINDER_CAP_OF_HEIGHT = 0.22;\nconst CYLINDER_CAP_OF_WIDTH = 0.2;\nconst PERSON_BODY_IN_HEADS = 2;\nconst PERSON_NECK_IN_HEADS = 0.35;\nconst PERSON_WIDTH_IN_HEADS = 2 * PERSON_BODY_IN_HEADS;\nconst PERSON_HEIGHT_IN_HEADS = 2 + PERSON_NECK_IN_HEADS + PERSON_BODY_IN_HEADS;\n\nexport function cylinderPath(x: number, y: number, width: number, height: number): string {\n const cap = Math.min(height * CYLINDER_CAP_OF_HEIGHT, width * CYLINDER_CAP_OF_WIDTH);\n const rx = width / 2;\n const cx = x + rx;\n const left = x;\n const right = x + width;\n const lidY = y + cap;\n const floorY = y + height - cap;\n const lid =\n `M ${left} ${lidY} C ${left} ${lidY + KAPPA * cap} ${cx - KAPPA * rx} ${lidY + cap} ${cx} ${lidY + cap} ` +\n `C ${cx + KAPPA * rx} ${lidY + cap} ${right} ${lidY + KAPPA * cap} ${right} ${lidY} ` +\n `C ${right} ${lidY - KAPPA * cap} ${cx + KAPPA * rx} ${y} ${cx} ${y} ` +\n `C ${cx - KAPPA * rx} ${y} ${left} ${lidY - KAPPA * cap} ${left} ${lidY} Z`;\n const wall =\n `M ${left} ${lidY} L ${left} ${floorY} ` +\n `C ${left} ${floorY + KAPPA * cap} ${cx - KAPPA * rx} ${y + height} ${cx} ${y + height} ` +\n `C ${cx + KAPPA * rx} ${y + height} ${right} ${floorY + KAPPA * cap} ${right} ${floorY} ` +\n `L ${right} ${lidY}`;\n return `${lid} ${wall}`;\n}\n\ninterface PersonFigure {\n head: number;\n body: number;\n centerX: number;\n headCenterY: number;\n bottom: number;\n}\n\nfunction personFigure(x: number, y: number, width: number, height: number): PersonFigure {\n const scale = Math.min(width / PERSON_WIDTH_IN_HEADS, height / PERSON_HEIGHT_IN_HEADS);\n const head = scale;\n const body = scale * PERSON_BODY_IN_HEADS;\n const figureHeight = scale * PERSON_HEIGHT_IN_HEADS;\n const top = y + (height - figureHeight) / 2;\n return { head, body, centerX: x + width / 2, headCenterY: top + head, bottom: top + figureHeight };\n}\n\nexport function personLabelArea(x: number, y: number, width: number, height: number) {\n const { body, centerX, bottom } = personFigure(x, y, width, height);\n return { x: centerX - body, y: bottom - body, width: body * 2, height: body };\n}\n\nexport function personPath(x: number, y: number, width: number, height: number): string {\n const { head, body, centerX, headCenterY, bottom } = personFigure(x, y, width, height);\n const skull =\n `M ${centerX} ${headCenterY - head} ` +\n `C ${centerX + KAPPA * head} ${headCenterY - head} ${centerX + head} ${headCenterY - KAPPA * head} ${centerX + head} ${headCenterY} ` +\n `C ${centerX + head} ${headCenterY + KAPPA * head} ${centerX + KAPPA * head} ${headCenterY + head} ${centerX} ${headCenterY + head} ` +\n `C ${centerX - KAPPA * head} ${headCenterY + head} ${centerX - head} ${headCenterY + KAPPA * head} ${centerX - head} ${headCenterY} ` +\n `C ${centerX - head} ${headCenterY - KAPPA * head} ${centerX - KAPPA * head} ${headCenterY - head} ${centerX} ${headCenterY - head} Z`;\n const dome =\n `M ${centerX - body} ${bottom} ` +\n `C ${centerX - body} ${bottom - KAPPA * body} ${centerX - KAPPA * body} ${bottom - body} ${centerX} ${bottom - body} ` +\n `C ${centerX + KAPPA * body} ${bottom - body} ${centerX + body} ${bottom - KAPPA * body} ${centerX + body} ${bottom} Z`;\n return `${skull} ${dome}`;\n}\n","export const BAR_LABEL = { padX: 8, padY: 3, charWidth: 0.58, lineHeight: 1.2, gap: 4 } as const;\n\nexport interface BarLabelSize {\n width: number;\n height: number;\n lineHeight: number;\n padX: number;\n padY: number;\n}\n\nexport function formatBarLabel(value: number, template: string | undefined): string {\n return (template || '{value}').replace('{value}', String(Math.round(value * 100) / 100));\n}\n\nexport function barLabelSize(text: string, fontSize: number, pill: boolean): BarLabelSize {\n const padX = pill ? BAR_LABEL.padX : 0;\n const padY = pill ? BAR_LABEL.padY : 0;\n const lineHeight = fontSize * BAR_LABEL.lineHeight;\n return {\n width: text.length * fontSize * BAR_LABEL.charWidth + padX * 2,\n height: lineHeight + padY * 2,\n lineHeight,\n padX,\n padY,\n };\n}\n\nexport function pillPath(x: number, y: number, width: number, height: number): string {\n const r = height / 2;\n return (\n `M ${x + r} ${y} H ${x + width - r} A ${r} ${r} 0 0 1 ${x + width - r} ${y + height} ` +\n `H ${x + r} A ${r} ${r} 0 0 1 ${x + r} ${y} Z`\n );\n}\n","export function barShapePath(x: number, y: number, width: number, height: number, radius: number): string {\n const r = Math.max(0, Math.min(radius, width / 2, height));\n if (r === 0) {\n return `M ${x} ${y} H ${x + width} V ${y + height} H ${x} Z`;\n }\n return (\n `M ${x} ${y + r} ` +\n `Q ${x} ${y} ${x + r} ${y} ` +\n `H ${x + width - r} ` +\n `Q ${x + width} ${y} ${x + width} ${y + r} ` +\n `V ${y + height} ` +\n `H ${x} Z`\n );\n}\n\nexport function roundedBarPath(x: number, y: number, width: number, height: number, radius: number): string {\n const r = Math.max(0, Math.min(radius, width / 2, height / 2));\n if (r === 0) {\n return `M ${x} ${y} H ${x + width} V ${y + height} H ${x} Z`;\n }\n return (\n `M ${x + r} ${y} H ${x + width - r} Q ${x + width} ${y} ${x + width} ${y + r} ` +\n `V ${y + height - r} Q ${x + width} ${y + height} ${x + width - r} ${y + height} ` +\n `H ${x + r} Q ${x} ${y + height} ${x} ${y + height - r} V ${y + r} Q ${x} ${y} ${x + r} ${y} Z`\n );\n}\n\nexport function barPath(\n x: number,\n y: number,\n width: number,\n height: number,\n radius: number,\n roundedBottom: boolean,\n): string {\n return roundedBottom ? roundedBarPath(x, y, width, height, radius) : barShapePath(x, y, width, height, radius);\n}\n","import { freeformPathData } from '../../scene/freeformPath';\n\nexport interface LinePathPoint {\n x: number;\n y: number;\n}\n\nexport function linePathData(points: LinePathPoint[], tension: number): string {\n if (tension > 0) {\n return freeformPathData({ points, tension, closed: false });\n }\n const commands = points.map((point, index) => `${index ? 'L' : ''} ${point.x} ${point.y}`);\n return `M ${commands.join(' ')}`;\n}\n","export interface PiePoint {\n x: number;\n y: number;\n}\n\nexport interface PieGeometry {\n centerX: number;\n centerY: number;\n outerRadius: number;\n innerRadius: number;\n}\n\nexport function resolvePieRadii(\n plotWidth: number,\n plotHeight: number,\n configInnerRadius: number | undefined,\n configCornerRadius: number | undefined,\n): { outerRadius: number; innerRadius: number; cornerRadius: number } {\n const rawOuterRadius = Math.max(1, Math.min(plotWidth, plotHeight) / 2 - 4);\n const rawInnerRadius = Math.max(0, Math.min(configInnerRadius ?? 0, rawOuterRadius - 1));\n const cornerRadius = Math.max(0, Math.min(configCornerRadius ?? 0, rawOuterRadius / 2));\n const outerRadius = Math.max(1, rawOuterRadius - cornerRadius);\n const innerRadius = rawInnerRadius > 0 ? Math.min(rawInnerRadius + cornerRadius, outerRadius - 1) : 0;\n return { outerRadius, innerRadius, cornerRadius };\n}\n\nexport interface PieSliceAngles {\n start: number;\n end: number;\n}\n\nexport function pieArcPoint(geometry: PieGeometry, angle: number, radius: number): PiePoint {\n return {\n x: geometry.centerX + radius * Math.cos(angle),\n y: geometry.centerY + radius * Math.sin(angle),\n };\n}\n\nexport function clipSegmentToRect(from: PiePoint, to: PiePoint, halfWidth: number, halfHeight: number): PiePoint {\n const dx = to.x - from.x;\n const dy = to.y - from.y;\n let tMin = 0;\n let tMax = 1;\n if (Math.abs(dx) > 1e-6) {\n const tx1 = (to.x - halfWidth - from.x) / dx;\n const tx2 = (to.x + halfWidth - from.x) / dx;\n tMin = Math.max(tMin, Math.min(tx1, tx2));\n tMax = Math.min(tMax, Math.max(tx1, tx2));\n }\n if (Math.abs(dy) > 1e-6) {\n const ty1 = (to.y - halfHeight - from.y) / dy;\n const ty2 = (to.y + halfHeight - from.y) / dy;\n tMin = Math.max(tMin, Math.min(ty1, ty2));\n tMax = Math.min(tMax, Math.max(ty1, ty2));\n }\n const t = tMin <= tMax ? tMin : 1;\n return { x: from.x + t * dx, y: from.y + t * dy };\n}\n\nfunction largeArcFlag(a: number, b: number): number {\n return Math.abs(b - a) > Math.PI ? 1 : 0;\n}\n\nexport function gapInsetAngle(halfGap: number, radius: number): number {\n if (halfGap <= 0 || radius <= 0) {\n return 0;\n }\n return Math.asin(Math.min(1, halfGap / radius));\n}\n\nfunction insetAngles(angles: PieSliceAngles, inset: number): PieSliceAngles {\n return { start: angles.start + inset, end: angles.end - inset };\n}\n\nexport function pieApexRadius(halfGap: number, sweep: number, outerRadius: number): number {\n if (halfGap <= 0) {\n return 0;\n }\n const halfSweep = Math.min(Math.abs(sweep) / 2, Math.PI / 2);\n const denominator = Math.sin(halfSweep);\n return denominator <= 1e-6 ? outerRadius : Math.min(halfGap / denominator, outerRadius);\n}\n\nfunction apexSlicePath(geometry: PieGeometry, outerAngles: PieSliceAngles, apex: PiePoint): string {\n const start = pieArcPoint(geometry, outerAngles.start, geometry.outerRadius);\n const end = pieArcPoint(geometry, outerAngles.end, geometry.outerRadius);\n return [\n `M ${apex.x} ${apex.y}`,\n `L ${start.x} ${start.y}`,\n `A ${geometry.outerRadius} ${geometry.outerRadius} 0 ${largeArcFlag(outerAngles.start, outerAngles.end)} 1 ${end.x} ${end.y}`,\n 'Z',\n ].join(' ');\n}\n\nfunction donutSlicePath(\n geometry: PieGeometry,\n innerRadius: number,\n outerAngles: PieSliceAngles,\n innerAngles: PieSliceAngles,\n): string {\n const outerStart = pieArcPoint(geometry, outerAngles.start, geometry.outerRadius);\n const outerEnd = pieArcPoint(geometry, outerAngles.end, geometry.outerRadius);\n const innerEnd = pieArcPoint(geometry, innerAngles.end, innerRadius);\n const innerStart = pieArcPoint(geometry, innerAngles.start, innerRadius);\n return [\n `M ${outerStart.x} ${outerStart.y}`,\n `A ${geometry.outerRadius} ${geometry.outerRadius} 0 ${largeArcFlag(outerAngles.start, outerAngles.end)} 1 ${outerEnd.x} ${outerEnd.y}`,\n `L ${innerEnd.x} ${innerEnd.y}`,\n `A ${innerRadius} ${innerRadius} 0 ${largeArcFlag(innerAngles.start, innerAngles.end)} 0 ${innerStart.x} ${innerStart.y}`,\n 'Z',\n ].join(' ');\n}\n\nconst CORNER_ANGLE_HEADROOM = 0.82;\n\ninterface PieFillet {\n lineTangent: PiePoint;\n arcTangent: PiePoint;\n angle: number;\n}\n\nfunction pieFillet(\n geometry: PieGeometry,\n circleRadius: number,\n filletCenterRadius: number,\n edgeAngle: number,\n cornerRadius: number,\n sign: 1 | -1,\n): PieFillet {\n const ratio = Math.min(1, cornerRadius / filletCenterRadius);\n const angle = edgeAngle + sign * Math.asin(ratio);\n const d = Math.sqrt(Math.max(0, filletCenterRadius * filletCenterRadius - cornerRadius * cornerRadius));\n return {\n lineTangent: { x: geometry.centerX + d * Math.cos(edgeAngle), y: geometry.centerY + d * Math.sin(edgeAngle) },\n arcTangent: pieArcPoint(geometry, angle, circleRadius),\n angle,\n };\n}\n\nexport function maxPieCornerRadius(outerRadius: number, innerRadius: number, sweep: number): number {\n const halfSweep = Math.min(Math.abs(sweep) / 2, Math.PI / 2);\n const angleFactor = Math.sin(halfSweep * CORNER_ANGLE_HEADROOM);\n const outerLimit = (outerRadius * angleFactor) / (1 + angleFactor);\n const innerLimit = innerRadius > 0 ? innerRadius * angleFactor : Number.POSITIVE_INFINITY;\n const ringLimit = innerRadius > 0 ? (outerRadius - innerRadius) / 2 : outerRadius / 2;\n return Math.max(0, Math.min(outerLimit, innerLimit, ringLimit));\n}\n\nexport function maxApexCornerRadius(outerRadius: number, apexRadius: number, sweep: number): number {\n const halfSweep = Math.min(Math.abs(sweep) / 2, Math.PI / 2);\n const angleFactor = Math.sin(halfSweep * CORNER_ANGLE_HEADROOM);\n const outerLimit = (outerRadius * angleFactor) / (1 + angleFactor);\n const depthLimit = (outerRadius * outerRadius - apexRadius * apexRadius) / (2 * outerRadius);\n return Math.max(0, Math.min(outerLimit, depthLimit));\n}\n\nfunction roundedApexSlicePath(\n geometry: PieGeometry,\n outerAngles: PieSliceAngles,\n cornerRadius: number,\n apex: PiePoint,\n): string {\n const { outerRadius } = geometry;\n const outerFilletCenterRadius = outerRadius - cornerRadius;\n const start = pieFillet(geometry, outerRadius, outerFilletCenterRadius, outerAngles.start, cornerRadius, 1);\n const end = pieFillet(geometry, outerRadius, outerFilletCenterRadius, outerAngles.end, cornerRadius, -1);\n return [\n `M ${apex.x} ${apex.y}`,\n `L ${start.lineTangent.x} ${start.lineTangent.y}`,\n `A ${cornerRadius} ${cornerRadius} 0 0 1 ${start.arcTangent.x} ${start.arcTangent.y}`,\n `A ${outerRadius} ${outerRadius} 0 ${largeArcFlag(start.angle, end.angle)} 1 ${end.arcTangent.x} ${end.arcTangent.y}`,\n `A ${cornerRadius} ${cornerRadius} 0 0 1 ${end.lineTangent.x} ${end.lineTangent.y}`,\n 'Z',\n ].join(' ');\n}\n\nfunction roundedDonutSlicePath(\n geometry: PieGeometry,\n innerRadius: number,\n outerAngles: PieSliceAngles,\n innerAngles: PieSliceAngles,\n cornerRadius: number,\n): string {\n const { outerRadius } = geometry;\n const outerFilletCenterRadius = outerRadius - cornerRadius;\n const outerStart = pieFillet(geometry, outerRadius, outerFilletCenterRadius, outerAngles.start, cornerRadius, 1);\n const outerEnd = pieFillet(geometry, outerRadius, outerFilletCenterRadius, outerAngles.end, cornerRadius, -1);\n\n const innerFilletCenterRadius = innerRadius + cornerRadius;\n const innerStart = pieFillet(geometry, innerRadius, innerFilletCenterRadius, innerAngles.start, cornerRadius, 1);\n const innerEnd = pieFillet(geometry, innerRadius, innerFilletCenterRadius, innerAngles.end, cornerRadius, -1);\n\n return [\n `M ${outerStart.lineTangent.x} ${outerStart.lineTangent.y}`,\n `A ${cornerRadius} ${cornerRadius} 0 0 1 ${outerStart.arcTangent.x} ${outerStart.arcTangent.y}`,\n `A ${outerRadius} ${outerRadius} 0 ${largeArcFlag(outerStart.angle, outerEnd.angle)} 1 ${outerEnd.arcTangent.x} ${outerEnd.arcTangent.y}`,\n `A ${cornerRadius} ${cornerRadius} 0 0 1 ${outerEnd.lineTangent.x} ${outerEnd.lineTangent.y}`,\n `L ${innerEnd.lineTangent.x} ${innerEnd.lineTangent.y}`,\n `A ${cornerRadius} ${cornerRadius} 0 0 1 ${innerEnd.arcTangent.x} ${innerEnd.arcTangent.y}`,\n `A ${innerRadius} ${innerRadius} 0 ${largeArcFlag(innerEnd.angle, innerStart.angle)} 0 ${innerStart.arcTangent.x} ${innerStart.arcTangent.y}`,\n `A ${cornerRadius} ${cornerRadius} 0 0 1 ${innerStart.lineTangent.x} ${innerStart.lineTangent.y}`,\n 'Z',\n ].join(' ');\n}\n\nexport function pieUsesInnerArc(geometry: PieGeometry, angles: PieSliceAngles, gapPx: number): boolean {\n const halfGap = Math.max(0, gapPx) / 2;\n const apexRadius = pieApexRadius(halfGap, angles.end - angles.start, geometry.outerRadius);\n return geometry.innerRadius > 0 && geometry.innerRadius >= apexRadius;\n}\n\nexport function createPieSlicePath(geometry: PieGeometry, angles: PieSliceAngles, cornerRadius = 0, gapPx = 0): string {\n const halfGap = Math.max(0, gapPx) / 2;\n const outerAngles = insetAngles(angles, gapInsetAngle(halfGap, geometry.outerRadius));\n\n if (!pieUsesInnerArc(geometry, angles, gapPx)) {\n const apexRadius = pieApexRadius(halfGap, angles.end - angles.start, geometry.outerRadius);\n const apex = pieArcPoint(geometry, (angles.start + angles.end) / 2, apexRadius);\n return cornerRadius > 0\n ? roundedApexSlicePath(geometry, outerAngles, cornerRadius, apex)\n : apexSlicePath(geometry, outerAngles, apex);\n }\n\n const innerAngles = insetAngles(angles, gapInsetAngle(halfGap, geometry.innerRadius));\n return cornerRadius > 0\n ? roundedDonutSlicePath(geometry, geometry.innerRadius, outerAngles, innerAngles, cornerRadius)\n : donutSlicePath(geometry, geometry.innerRadius, outerAngles, innerAngles);\n}\n","export interface RGB {\n r: number;\n g: number;\n b: number;\n a?: number;\n}\n\nexport interface HSV {\n h: number;\n s: number;\n v: number;\n}\n\nexport const hexToRgb = (hex: string): RGB => {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})?$/i.exec(hex);\n if (!result) {\n return { r: 255, g: 255, b: 255, a: 1 };\n }\n return {\n r: parseInt(result[1], 16),\n g: parseInt(result[2], 16),\n b: parseInt(result[3], 16),\n a: result[4] === undefined ? 1 : parseInt(result[4], 16) / 255,\n };\n};\n\nexport const rgbToHex = (r: number, g: number, b: number, a?: number): string => {\n const channel = (x: number) => {\n const hex = Math.max(0, Math.min(255, Math.round(x))).toString(16);\n return hex.length === 1 ? `0${hex}` : hex;\n };\n const alphaChannel = a === undefined || a >= 1 ? '' : channel(a * 255);\n return `#${channel(r)}${channel(g)}${channel(b)}${alphaChannel}`;\n};\n\nexport const hsvToRgb = (h: number, s: number, v: number): RGB => {\n const c = v * s;\n const x = c * (1 - Math.abs(((h / 60) % 2) - 1));\n const m = v - c;\n\n let r = 0,\n g = 0,\n b = 0;\n\n if (h >= 0 && h < 60) {\n r = c;\n g = x;\n b = 0;\n } else if (h >= 60 && h < 120) {\n r = x;\n g = c;\n b = 0;\n } else if (h >= 120 && h < 180) {\n r = 0;\n g = c;\n b = x;\n } else if (h >= 180 && h < 240) {\n r = 0;\n g = x;\n b = c;\n } else if (h >= 240 && h < 300) {\n r = x;\n g = 0;\n b = c;\n } else if (h >= 300 && h < 360) {\n r = c;\n g = 0;\n b = x;\n }\n\n return {\n r: Math.round((r + m) * 255),\n g: Math.round((g + m) * 255),\n b: Math.round((b + m) * 255),\n };\n};\n\nexport const rgbToHsv = (r: number, g: number, b: number): HSV => {\n r /= 255;\n g /= 255;\n b /= 255;\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n\n let h = 0;\n if (delta !== 0) {\n if (max === r) {\n h = 60 * (((g - b) / delta) % 6);\n } else if (max === g) {\n h = 60 * ((b - r) / delta + 2);\n } else if (max === b) {\n h = 60 * ((r - g) / delta + 4);\n }\n }\n\n if (h < 0) {\n h += 360;\n }\n\n const s = max === 0 ? 0 : delta / max;\n const v = max;\n\n return { h, s, v };\n};\n","import { hexToRgb, rgbToHex } from './conversion';\n\nexport interface PositionedColorStop {\n position: number;\n color: string;\n}\n\nfunction mixHexColors(start: string, end: string, ratio: number): string {\n const startRgb = hexToRgb(start);\n const endRgb = hexToRgb(end);\n const startAlpha = startRgb.a ?? 1;\n const endAlpha = endRgb.a ?? 1;\n return rgbToHex(\n Math.round(startRgb.r + (endRgb.r - startRgb.r) * ratio),\n Math.round(startRgb.g + (endRgb.g - startRgb.g) * ratio),\n Math.round(startRgb.b + (endRgb.b - startRgb.b) * ratio),\n startAlpha + (endAlpha - startAlpha) * ratio,\n );\n}\n\nexport function interpolateHexColorStops(stops: PositionedColorStop[], position: number): string {\n const sortedStops = [...stops].sort((first, second) => first.position - second.position);\n const first = sortedStops[0];\n const last = sortedStops[sortedStops.length - 1];\n if (position <= first.position) {\n return first.color;\n }\n if (position >= last.position) {\n return last.color;\n }\n\n for (let index = 0; index < sortedStops.length - 1; index++) {\n const start = sortedStops[index];\n const end = sortedStops[index + 1];\n if (position >= start.position && position <= end.position) {\n const range = end.position - start.position;\n const ratio = range === 0 ? 0 : (position - start.position) / range;\n return mixHexColors(start.color, end.color, ratio);\n }\n }\n return last.color;\n}\n","import type { ChartZone } from '../../../model/chart';\n\nexport const CHART_COLORS = ['#7c3aed', '#0ea5e9', '#f97316', '#10b981', '#ec4899', '#eab308'];\nexport const DEFAULT_ZONE_FILL = '#94a3b8';\nexport const DEFAULT_HEATMAP_ZONES: ChartZone[] = [\n { label: 'Low', color: '#ddd6fe' },\n { label: 'Medium', color: '#a78bfa' },\n { label: 'High', color: '#6d28d9' },\n];\nexport const DEFAULT_HEX_RADIUS = 14;\n","import type { ChartAxis, ChartZone } from '../../../model/chart';\nimport { interpolateHexColorStops } from '../../../model/color';\nimport { DEFAULT_ZONE_FILL } from './defaults';\n\nexport function mapChartValue(value: number, axis: ChartAxis, extent: number): number {\n if (axis.max === axis.min) {\n return 0;\n }\n return ((value - axis.min) / (axis.max - axis.min)) * extent;\n}\n\nexport function chartTicks(axis: ChartAxis): number[] {\n if (!(axis.step > 0)) {\n return axis.min === axis.max ? [axis.min] : [axis.min, axis.max];\n }\n\n const ascending = axis.min <= axis.max;\n const step = ascending ? axis.step : -axis.step;\n const ticks: number[] = [];\n for (\n let value = axis.min;\n (ascending ? value <= axis.max + 1e-9 : value >= axis.max - 1e-9) && ticks.length < 1000;\n value += step\n ) {\n ticks.push(Math.round(value * 1000) / 1000);\n }\n return ticks;\n}\n\nexport function axisBands(axis: ChartAxis): number[] {\n const thresholds = [...(axis.thresholds ?? [])]\n .filter(threshold => threshold > axis.min && threshold < axis.max)\n .sort((a, b) => a - b);\n return [axis.min, ...thresholds, axis.max];\n}\n\nexport function zoneColorAtValue(value: number, bands: number[], zones: ChartZone[]): string {\n const bandCount = Math.max(0, bands.length - 1);\n const stops = zones.slice(0, bandCount).map((zone, index) => ({\n position: bands[index + 1] ?? bands[bands.length - 1],\n color: zone.color ?? DEFAULT_ZONE_FILL,\n }));\n if (!stops.length) {\n return DEFAULT_ZONE_FILL;\n }\n return interpolateHexColorStops(stops, value);\n}\n","import type { ChartSeries } from '../../../model/chart';\n\nexport function barCategoryCount(chart: { series: ChartSeries[]; config?: { categories?: string[] } }): number {\n return Math.max(1, chart.config?.categories?.length ?? 0, ...chart.series.map(series => series.values.length));\n}\n","interface BoxplotStats {\n min: number;\n q1: number;\n median: number;\n q3: number;\n max: number;\n}\n\nfunction quantile(sorted: number[], probability: number): number {\n if (sorted.length === 1) {\n return sorted[0];\n }\n\n const position = (sorted.length - 1) * probability;\n const lowerIndex = Math.floor(position);\n const upperIndex = Math.ceil(position);\n if (lowerIndex === upperIndex) {\n return sorted[lowerIndex];\n }\n return sorted[lowerIndex] + (position - lowerIndex) * (sorted[upperIndex] - sorted[lowerIndex]);\n}\n\nexport function computeBoxplotStats(values: number[]): BoxplotStats | null {\n if (!values?.length) {\n return null;\n }\n\n const sorted = [...values].sort((a, b) => a - b);\n return {\n min: sorted[0],\n q1: quantile(sorted, 0.25),\n median: quantile(sorted, 0.5),\n q3: quantile(sorted, 0.75),\n max: sorted[sorted.length - 1],\n };\n}\n","function hexToRgb(hex: string | undefined): [number, number, number] | undefined {\n if (hex?.[0] !== '#') {\n return undefined;\n }\n const channels =\n hex.length === 4\n ? hex\n .slice(1)\n .split('')\n .map(channel => parseInt(channel + channel, 16))\n : [1, 3, 5].map(index => parseInt(hex.slice(index, index + 2), 16));\n const [red, green, blue] = channels;\n return [red, green, blue].some(channel => Number.isNaN(channel)) ? undefined : [red, green, blue];\n}\n\nexport function colorWithAlpha(hex: string | undefined, alpha: number): string {\n const rgb = hexToRgb(hex);\n const clamped = Math.max(0, Math.min(1, alpha));\n if (!rgb) {\n return clamped <= 0 ? 'transparent' : (hex ?? 'transparent');\n }\n const [red, green, blue] = rgb;\n return `rgba(${red}, ${green}, ${blue}, ${clamped})`;\n}\n\nfunction rgbToHex(red: number, green: number, blue: number): string {\n const channel = (value: number) =>\n Math.round(Math.max(0, Math.min(255, value)))\n .toString(16)\n .padStart(2, '0');\n return `#${channel(red)}${channel(green)}${channel(blue)}`;\n}\n\nfunction rgbToHsl(red: number, green: number, blue: number): [number, number, number] {\n const r = red / 255;\n const g = green / 255;\n const b = blue / 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const lightness = (max + min) / 2;\n const delta = max - min;\n if (delta === 0) {\n return [0, 0, lightness];\n }\n const saturation = delta / (1 - Math.abs(2 * lightness - 1));\n let hue: number;\n if (max === r) {\n hue = ((g - b) / delta) % 6;\n } else if (max === g) {\n hue = (b - r) / delta + 2;\n } else {\n hue = (r - g) / delta + 4;\n }\n hue *= 60;\n if (hue < 0) {\n hue += 360;\n }\n return [hue, saturation, lightness];\n}\n\nfunction hslToRgb(hue: number, saturation: number, lightness: number): [number, number, number] {\n const chroma = (1 - Math.abs(2 * lightness - 1)) * saturation;\n const x = chroma * (1 - Math.abs(((hue / 60) % 2) - 1));\n const m = lightness - chroma / 2;\n let [r, g, b] = [0, 0, 0];\n if (hue < 60) {\n [r, g, b] = [chroma, x, 0];\n } else if (hue < 120) {\n [r, g, b] = [x, chroma, 0];\n } else if (hue < 180) {\n [r, g, b] = [0, chroma, x];\n } else if (hue < 240) {\n [r, g, b] = [0, x, chroma];\n } else if (hue < 300) {\n [r, g, b] = [x, 0, chroma];\n } else {\n [r, g, b] = [chroma, 0, x];\n }\n return [(r + m) * 255, (g + m) * 255, (b + m) * 255];\n}\n\nfunction relativeLuminance(red: number, green: number, blue: number): number {\n const linear = (channel: number) => {\n const normalized = channel / 255;\n return normalized <= 0.03928 ? normalized / 12.92 : ((normalized + 0.055) / 1.055) ** 2.4;\n };\n return 0.2126 * linear(red) + 0.7152 * linear(green) + 0.0722 * linear(blue);\n}\n\nfunction contrastRatio(luminanceA: number, luminanceB: number): number {\n const lighter = Math.max(luminanceA, luminanceB);\n const darker = Math.min(luminanceA, luminanceB);\n return (lighter + 0.05) / (darker + 0.05);\n}\n\nconst SAME_HUE_LIGHTNESS_GAP = 0.35;\nconst SAME_HUE_MIN_LIGHTNESS = 0.08;\nconst SAME_HUE_MAX_LIGHTNESS = 0.22;\nconst SAME_HUE_LIGHT_MIN_LIGHTNESS = 0.78;\nconst SAME_HUE_LIGHT_MAX_LIGHTNESS = 0.92;\nconst SAME_HUE_MIN_CONTRAST = 3;\n\nexport function contrastTextColor(hex: string | undefined): string {\n const rgb = hexToRgb(hex);\n if (!rgb) {\n return '#0f172a';\n }\n const [red, green, blue] = rgb;\n const fallback = (0.299 * red + 0.587 * green + 0.114 * blue) / 255 > 0.6 ? '#0f172a' : '#ffffff';\n const [hue, saturation, lightness] = rgbToHsl(red, green, blue);\n if (saturation === 0) {\n return fallback;\n }\n const targetLightness =\n lightness > 0.5\n ? Math.max(SAME_HUE_MIN_LIGHTNESS, Math.min(lightness - SAME_HUE_LIGHTNESS_GAP, SAME_HUE_MAX_LIGHTNESS))\n : Math.min(\n SAME_HUE_LIGHT_MAX_LIGHTNESS,\n Math.max(lightness + SAME_HUE_LIGHTNESS_GAP, SAME_HUE_LIGHT_MIN_LIGHTNESS),\n );\n const variant = hslToRgb(hue, saturation, targetLightness);\n const ratio = contrastRatio(relativeLuminance(red, green, blue), relativeLuminance(...variant));\n return ratio >= SAME_HUE_MIN_CONTRAST ? rgbToHex(...variant) : fallback;\n}\n\nexport function sameHueContrastColor(hex: string | undefined, fallback: string): string {\n const rgb = hexToRgb(hex);\n if (!rgb) {\n return fallback;\n }\n const [red, green, blue] = rgb;\n const [hue, saturation, lightness] = rgbToHsl(red, green, blue);\n if (saturation === 0) {\n return fallback;\n }\n const targetLightness =\n lightness > 0.5\n ? Math.max(SAME_HUE_MIN_LIGHTNESS, Math.min(lightness - SAME_HUE_LIGHTNESS_GAP, SAME_HUE_MAX_LIGHTNESS))\n : Math.min(\n SAME_HUE_LIGHT_MAX_LIGHTNESS,\n Math.max(lightness + SAME_HUE_LIGHTNESS_GAP, SAME_HUE_LIGHT_MIN_LIGHTNESS),\n );\n return rgbToHex(...hslToRgb(hue, saturation, targetLightness));\n}\n\nexport function isLightColor(hex: string | undefined): boolean {\n const rgb = hexToRgb(hex);\n return rgb ? rgbToHsl(...rgb)[2] > 0.5 : false;\n}\n\nexport function sameHueTint(hex: string | undefined, targetLightness: number): string | undefined {\n const rgb = hexToRgb(hex);\n if (!rgb) {\n return undefined;\n }\n const [hue, saturation] = rgbToHsl(...rgb);\n if (saturation === 0) {\n return undefined;\n }\n return rgbToHex(...hslToRgb(hue, saturation, targetLightness));\n}\n","import type { GradientColor, MeshGradientColor } from '../../../model/color';\n\nexport { contrastTextColor, isLightColor, sameHueContrastColor, sameHueTint } from '../../color';\n\nexport function representativeColor(\n value: string | GradientColor | MeshGradientColor | undefined,\n fallback: string,\n): string {\n if (!value) {\n return fallback;\n }\n if (typeof value === 'string') {\n return value;\n }\n if (value.type === 'gradient') {\n return value.stops[0]?.color ?? fallback;\n }\n return value.points[0]?.color ?? fallback;\n}\n","import type { Bounds, RenderNode } from '../../scene';\n\nconst ERROR_CAP_HALF = 5;\n\ninterface VerticalErrorWhisker {\n id: string;\n order: number;\n bounds: Bounds;\n geometry: {\n centerX: number;\n startY: number;\n endY: number;\n };\n color: string;\n valueReference: {\n seriesId: string;\n valueIndex: number;\n };\n}\n\nexport function errorBarRange(value: number, error: number | [number, number]): [number, number] {\n return Array.isArray(error) ? [value - error[0], value + error[1]] : [value - error, value + error];\n}\n\nexport function createVerticalErrorWhiskerNode(whisker: VerticalErrorWhisker): RenderNode {\n return {\n type: 'path',\n id: whisker.id,\n order: whisker.order,\n bounds: whisker.bounds,\n d: verticalErrorWhiskerPath(whisker.geometry),\n detail: {\n of: 'chartValue',\n series: whisker.valueReference.seriesId,\n valueIndex: whisker.valueReference.valueIndex,\n },\n style: { fill: { kind: 'none' }, stroke: { kind: 'solid', color: whisker.color }, strokeWidth: 1 },\n };\n}\n\nfunction verticalErrorWhiskerPath(geometry: VerticalErrorWhisker['geometry']): string {\n const { centerX, startY, endY } = geometry;\n const capStartX = centerX - ERROR_CAP_HALF;\n const capEndX = centerX + ERROR_CAP_HALF;\n return `M ${centerX} ${startY} L ${centerX} ${endY} M ${capStartX} ${startY} L ${capEndX} ${startY} M ${capStartX} ${endY} L ${capEndX} ${endY}`;\n}\n","export function formatFieldValue(value: number): string {\n return Number.isInteger(value) ? String(value) : value.toFixed(2).replace(/\\.?0+$/, '');\n}\n","import type { Chart, ChartSeries } from '../../../model/chart';\nimport { finite } from '../../scene';\nimport { barCategoryCount } from './barCategories';\n\nexport const CATEGORY_LABEL_ROW = 18;\n\ninterface BarSettings {\n categories?: string[];\n barGroupGap?: number;\n barThickness?: number;\n orientation?: string;\n}\n\nconst settings = (chart: Chart): BarSettings | undefined => chart.config as BarSettings | undefined;\n\nexport function isHorizontalBar(chart: Chart): boolean {\n return chart.chartType === 'bar' && settings(chart)?.orientation === 'horizontal';\n}\n\nexport interface HorizontalRows {\n count: number;\n slotHeight: number;\n groupGap: number;\n labelRow: number;\n barsHeight: number;\n offset: number;\n}\n\nexport function horizontalRows(chart: Chart, plot: { height: number }): HorizontalRows {\n const count = barCategoryCount({ series: chart.series as ChartSeries[], config: settings(chart) });\n const slotHeight = plot.height / count;\n const groupGap = Math.min(Math.max(0, finite(settings(chart)?.barGroupGap, 8)), Math.max(0, slotHeight - 1));\n const labelRow = chart.categoryAlign === 'left' ? CATEGORY_LABEL_ROW : 0;\n const available = Math.max(1, slotHeight - groupGap - labelRow);\n const thickness = finite(settings(chart)?.barThickness, 0);\n const barsHeight = thickness > 0 ? Math.min(available, thickness) : available;\n return { count, slotHeight, groupGap, labelRow, barsHeight, offset: (available - barsHeight) / 2 };\n}\n\nexport function rowTop(rows: HorizontalRows, plot: { y: number }, index: number): number {\n return plot.y + index * rows.slotHeight + rows.groupGap / 2 + rows.offset;\n}\n","import type { Chart } from '../../../model/chart';\nimport { finite } from '../../scene';\nimport { estimateTextWidth } from '../../scene/textLayout';\n\n// How far the labels along an axis stand up, in degrees: 0 lies flat, 90 stands. Anything else is cut to that range.\nexport function labelTilt(chart: Chart): number {\n return Math.min(90, Math.max(0, finite(chart.axisLabelAngle, 0)));\n}\n\nconst radians = (degrees: number) => (degrees * Math.PI) / 180;\n\nfunction labelFontSize(chart: Chart): number {\n return Math.max(9, finite(chart.axisFontSize ?? chart.fontSize, 12));\n}\n\n// The room that the longest of the labels needs when it stands at the tilt: its width along the slant plus its height across it.\nexport function tiltedLabelRoom(chart: Chart, labels: readonly string[], tilt: number): number {\n const fontSize = labelFontSize(chart);\n const widest = Math.max(0, ...labels.map(label => estimateTextWidth(label, fontSize, false)));\n return Math.ceil(widest * Math.sin(radians(tilt)) + (fontSize + 2) * Math.cos(radians(tilt)));\n}\n\n// A label above a row of cells: it starts at the point and runs up and to the right.\nexport function labelAboveFrame(chart: Chart, label: string, tilt: number, anchor: { x: number; y: number }) {\n const fontSize = labelFontSize(chart);\n const height = fontSize + 2;\n const width = Math.ceil(estimateTextWidth(label, fontSize, false)) + 4;\n const angle = radians(tilt);\n return {\n frame: {\n x: anchor.x - (height / 2) * Math.sin(angle),\n y: anchor.y - (height / 2) * Math.cos(angle),\n width,\n height,\n },\n rotation: -tilt,\n };\n}\n\n// A label below an axis: it ends at the point and runs down and to the left, as labels do that are tilted.\nexport function labelBelowFrame(chart: Chart, label: string, tilt: number, anchor: { x: number; y: number }) {\n const fontSize = labelFontSize(chart);\n const height = fontSize + 2;\n const width = Math.ceil(estimateTextWidth(label, fontSize, false)) + 4;\n const angle = radians(tilt);\n return {\n frame: {\n x: anchor.x - (width * Math.cos(angle) + (height / 2) * Math.sin(angle)),\n y: anchor.y + width * Math.sin(angle) - (height / 2) * Math.cos(angle),\n width,\n height,\n },\n rotation: -tilt,\n };\n}\n","import { roundedBarPath } from './barShape';\n\nexport interface SegmentFrame {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport function segmentedBarPath(\n frame: SegmentFrame,\n orientation: 'horizontal' | 'vertical',\n count: number,\n gap: number,\n radius: number,\n fraction: number,\n snap: boolean,\n): string {\n const horizontal = orientation === 'horizontal';\n const length = horizontal ? frame.width : frame.height;\n const segment = Math.max(1, (length - gap * (count - 1)) / count);\n const filled = Math.min(count, Math.max(0, fraction * count));\n const units = snap ? Math.round(filled) : filled;\n const parts: string[] = [];\n for (let index = 0; index < count; index++) {\n const visible = Math.min(1, Math.max(0, units - index)) * segment;\n if (visible < 0.5) {\n continue;\n }\n const offset = index * (segment + gap);\n parts.push(\n horizontal\n ? roundedBarPath(frame.x + offset, frame.y, visible, frame.height, radius)\n : roundedBarPath(frame.x, frame.y + frame.height - offset - visible, frame.width, visible, radius),\n );\n }\n return parts.join(' ');\n}\n","import type { ShadowStyle } from '../../../model/shadow';\nimport { finite } from '../../scene';\n\nexport interface ResolvedShadow {\n color: string;\n opacity: number;\n blur: number;\n dx: number;\n dy: number;\n}\n\nexport function resolveChartShadow(shadow: ShadowStyle | undefined): ResolvedShadow | undefined {\n if (!shadow?.enabled) {\n return undefined;\n }\n const angle = (finite(shadow.angle, 45) * Math.PI) / 180;\n const distance = finite(shadow.distance, 5);\n return {\n color: shadow.color ?? '#000000',\n opacity: finite(shadow.opacity, 0.25),\n blur: finite(shadow.blur, 10),\n dx: Math.cos(angle) * distance,\n dy: Math.sin(angle) * distance,\n };\n}\n","import type { Chart } from '../../../model/chart';\nimport { mapChartValue } from './axis';\n\ninterface StackedSegment {\n value: number;\n pixelStart: number;\n pixelEnd: number;\n}\n\nexport function stackedSegment(\n chart: Chart,\n mode: 'true' | 'percent' | 'waterfall',\n categoryIndex: number,\n seriesIndex: number,\n plotHeight: number,\n): StackedSegment {\n const value = (chart.series[seriesIndex].values as number[])[categoryIndex] ?? 0;\n if (mode === 'waterfall') {\n return waterfallSegment(chart, categoryIndex, seriesIndex, plotHeight, value);\n }\n if (mode === 'percent') {\n return percentSegment(chart, categoryIndex, seriesIndex, plotHeight, value);\n }\n return cumulativeSegment(chart, categoryIndex, seriesIndex, plotHeight, value);\n}\n\nfunction waterfallSegment(\n chart: Chart,\n categoryIndex: number,\n seriesIndex: number,\n plotHeight: number,\n value: number,\n): StackedSegment {\n let running = 0;\n for (let index = 0; index < categoryIndex; index++) {\n running += (chart.series[seriesIndex].values as number[])[index] ?? 0;\n }\n return mappedSegment(value, running, running + value, chart, plotHeight);\n}\n\nfunction percentSegment(\n chart: Chart,\n categoryIndex: number,\n seriesIndex: number,\n plotHeight: number,\n value: number,\n): StackedSegment {\n const total =\n chart.series.reduce((sum, series) => sum + Math.abs((series.values as number[])[categoryIndex] ?? 0), 0) || 1;\n let cumulative = 0;\n for (let index = 0; index < seriesIndex; index++) {\n cumulative += Math.abs((chart.series[index].values as number[])[categoryIndex] ?? 0);\n }\n const magnitude = Math.abs(value);\n return {\n value,\n pixelStart: (cumulative / total) * plotHeight,\n pixelEnd: ((cumulative + magnitude) / total) * plotHeight,\n };\n}\n\nfunction cumulativeSegment(\n chart: Chart,\n categoryIndex: number,\n seriesIndex: number,\n plotHeight: number,\n value: number,\n): StackedSegment {\n let cumulative = 0;\n for (let index = 0; index < seriesIndex; index++) {\n cumulative += (chart.series[index].values as number[])[categoryIndex] ?? 0;\n }\n return mappedSegment(value, cumulative, cumulative + value, chart, plotHeight);\n}\n\nfunction mappedSegment(value: number, start: number, end: number, chart: Chart, plotHeight: number): StackedSegment {\n return {\n value,\n pixelStart: mapChartValue(start, chart.axisY, plotHeight),\n pixelEnd: mapChartValue(end, chart.axisY, plotHeight),\n };\n}\n","import type { Chart } from '../../../model/chart';\nimport type { Bounds, SceneText } from '../../scene';\nimport { DEFAULT_FONT, finite } from '../../scene';\n\nexport interface ChartTextOptions {\n id: string;\n order: number;\n bounds: Bounds;\n frame: { x: number; y: number; width: number; height: number };\n text: string;\n chart: Chart;\n align?: 'left' | 'center' | 'right';\n rotation?: number;\n role?: 'axis' | 'legend';\n}\n\nexport function chartText(options: ChartTextOptions): SceneText {\n const { chart, frame } = options;\n return {\n type: 'text',\n id: options.id,\n order: options.order,\n bounds: options.bounds,\n ...frame,\n lines: [options.text],\n fontFamily: (options.role === 'axis' ? chart.axisFontFamily : undefined) ?? chart.fontFamily ?? DEFAULT_FONT,\n fontSize: Math.max(\n 9,\n finite(options.role === 'axis' ? (chart.axisFontSize ?? chart.fontSize) : chart.fontSize, 12),\n ),\n fontWeight: 'normal',\n color:\n (options.role === 'axis' ? chart.axisLabelColor : options.role === 'legend' ? chart.legendColor : undefined) ??\n chart.textColor ??\n '#0f172a',\n align: options.align ?? 'left',\n verticalAlign: 'top',\n lineHeight: 1.2,\n rotation: options.rotation,\n rotationCenter: options.rotation ? { x: frame.x, y: frame.y } : undefined,\n };\n}\n","import type { PieChart } from '../../../../model/chart';\nimport { finite } from '../../../scene';\nimport { pieArcPoint, resolvePieRadii } from '../../primitives/pieShape';\nimport type { ChartRenderContext } from '../types';\nimport type { PieGeometry } from './types';\n\nexport { pieArcPoint };\n\nexport function createPieGeometry(context: ChartRenderContext<PieChart>): PieGeometry {\n const { chart, plot } = context;\n const resolved = resolvePieRadii(plot.width, plot.height, chart.config?.innerRadius, chart.config?.pieCornerRadius);\n const outside = chart.config?.pieLabelPosition === 'outside' && chart.showAxisLabels !== false;\n const room = outside ? (chart.config?.pieLabelContent === 'inline' ? 0.6 : 0.7) : 1;\n const outerRadius = resolved.outerRadius * room;\n const innerRadius = resolved.innerRadius * room;\n const cornerRadius = resolved.cornerRadius;\n return {\n centerX: plot.x + plot.width / 2,\n centerY: plot.y + plot.height / 2,\n outerRadius,\n innerRadius,\n cornerRadius,\n total: chart.series.reduce((sum, series) => sum + Math.max(0, finite((series.values as number[])[0], 0)), 0) || 1,\n };\n}\n","import type { ChartSeries, PieChart } from '../../../../model/chart';\nimport type { RenderNode, SceneText } from '../../../scene';\nimport { DEFAULT_FONT, finite } from '../../../scene';\nimport {\n clipSegmentToRect,\n contrastTextColor,\n representativeColor,\n sameHueContrastColor,\n sameHueTint,\n} from '../../primitives';\nimport { seriesLabelProp, seriesValueProp } from '../../propPath';\nimport type { ChartRenderContext } from '../types';\nimport { pieArcPoint } from './geometry';\nimport type { PieGeometry } from './types';\n\nconst MIN_LABEL_SWEEP = (14 * Math.PI) / 180;\nexport const LABEL_WIDTH = 80;\nconst LABEL_RADIUS_FRACTION = 0.62;\nconst OUTSIDE_GAP = 14;\nexport const LEADER_INSET = 3;\nconst OUTSIDE_TINT_LIGHTNESS = 0.32;\nconst OUTSIDE_FALLBACK_COLOR = '#334155';\n\nexport interface PieLabelMark {\n seriesId: string;\n label: string;\n color: NonNullable<ChartSeries['color']>;\n share: number;\n start: number;\n end: number;\n labelOffsetX: number;\n labelOffsetY: number;\n shift: { dx: number; dy: number };\n}\n\nexport function renderPieLabels(\n context: ChartRenderContext<PieChart>,\n geometry: PieGeometry,\n marks: PieLabelMark[],\n): RenderNode[] {\n if (context.chart.showAxisLabels === false) {\n return [];\n }\n return marks\n .filter(mark => mark.end - mark.start >= MIN_LABEL_SWEEP)\n .flatMap(mark => createPieLabel(context, geometry, mark));\n}\n\nfunction labelTextPair(\n context: ChartRenderContext,\n mark: PieLabelMark,\n point: { x: number; y: number },\n color: string,\n fontSize: number,\n percent: number,\n outside: boolean,\n midAngle: number,\n): SceneText[] {\n const { chart, bounds, nextOrder } = context;\n const lineHeight = fontSize * 1.2;\n const content = chart.config?.pieLabelContent ?? 'both';\n const width = content === 'inline' ? LABEL_WIDTH * 1.9 : LABEL_WIDTH;\n const base = {\n bounds,\n x: point.x - width / 2,\n width,\n height: lineHeight,\n fontFamily: chart.fontFamily ?? DEFAULT_FONT,\n fontSize,\n align: 'center' as const,\n verticalAlign: 'middle' as const,\n lineHeight: 1.2,\n color,\n };\n const detail = (extra: Record<string, unknown>) => ({\n of: 'chartSeries' as const,\n series: mark.seriesId,\n mark: 'pie-label',\n pulled: outside || undefined,\n midAngle,\n ...extra,\n });\n const nameText: SceneText = {\n type: 'text',\n id: `chart-pie-label-name-${chart.id}-${mark.seriesId}`,\n order: nextOrder(),\n ...base,\n y: content === 'name' ? point.y - lineHeight / 2 : point.y - lineHeight,\n lines: [content === 'inline' ? `${mark.label}, ${percent}%` : mark.label],\n fontWeight: 'bold',\n detail: detail({}),\n prop: seriesLabelProp(mark.seriesId),\n };\n const valueText: SceneText = {\n type: 'text',\n id: `chart-pie-label-value-${chart.id}-${mark.seriesId}`,\n order: nextOrder(),\n ...base,\n y: content === 'percent' ? point.y - lineHeight / 2 : point.y,\n lines: [`${percent}%`],\n fontWeight: 'normal',\n detail: detail({}),\n prop: seriesValueProp(mark.seriesId, 0),\n propKind: 'value',\n };\n if (content === 'inline' || content === 'name') {\n return [nameText];\n }\n return content === 'percent' ? [valueText] : [nameText, valueText];\n}\n\nfunction createTick(\n context: ChartRenderContext,\n mark: PieLabelMark,\n tickStart: { x: number; y: number },\n tickEnd: { x: number; y: number },\n color: string,\n outside: boolean,\n): RenderNode {\n const { chart, bounds, nextOrder } = context;\n return {\n type: 'path',\n id: `chart-pie-label-tick-${chart.id}-${mark.seriesId}`,\n order: nextOrder(),\n bounds,\n d: `M ${tickStart.x} ${tickStart.y} L ${tickEnd.x} ${tickEnd.y}`,\n detail: { of: 'chartSeries', series: mark.seriesId, mark: 'pie-label-tick' },\n style: outside ? { stroke: { kind: 'solid', color }, strokeWidth: 1.5 } : { stroke: { kind: 'none' } },\n };\n}\n\nfunction createPieLabel(context: ChartRenderContext<PieChart>, base: PieGeometry, mark: PieLabelMark): RenderNode[] {\n const config = context.chart.config;\n const geometry = { ...base, centerX: base.centerX + mark.shift.dx, centerY: base.centerY + mark.shift.dy };\n const mid = (mark.start + mark.end) / 2;\n const fontSize = Math.max(9, finite(context.chart.fontSize, 12));\n const percent = Math.round(mark.share * 100);\n const lineHeight = fontSize * 1.2;\n const tickStart = pieArcPoint(geometry, mid, geometry.outerRadius + LEADER_INSET);\n\n const ringThickness = geometry.outerRadius - geometry.innerRadius;\n const tooThin = ringThickness < lineHeight * 2 + 6;\n const hasManualOffset = mark.labelOffsetX !== 0 || mark.labelOffsetY !== 0;\n const position = config?.pieLabelPosition ?? 'auto';\n const outside = hasManualOffset || position === 'outside' || (position === 'auto' && tooThin);\n\n if (outside) {\n const point = hasManualOffset\n ? addOffset(pieArcPoint(geometry, mid, geometry.outerRadius), mark.labelOffsetX, mark.labelOffsetY)\n : pieArcPoint(\n geometry,\n mid,\n geometry.outerRadius +\n OUTSIDE_GAP +\n (position === 'outside'\n ? Math.abs(Math.cos(mid)) * (config?.pieLabelContent === 'inline' ? LABEL_WIDTH * 0.95 : LABEL_WIDTH / 2)\n : 0),\n );\n const tickEnd = clipSegmentToRect(tickStart, point, LABEL_WIDTH / 2, lineHeight);\n const color =\n config?.pieLabelColor ??\n sameHueTint(representativeColor(mark.color, OUTSIDE_FALLBACK_COLOR), OUTSIDE_TINT_LIGHTNESS) ??\n OUTSIDE_FALLBACK_COLOR;\n const tick = createTick(context, mark, tickStart, tickEnd, color, true);\n return [tick, ...labelTextPair(context, mark, point, color, fontSize, percent, true, mid)];\n }\n\n const labelRadius = geometry.innerRadius + ringThickness * LABEL_RADIUS_FRACTION;\n const point = pieArcPoint(geometry, mid, labelRadius);\n const sliceColor = representativeColor(mark.color, '#0f172a');\n const color = config?.pieLabelColor ?? sameHueContrastColor(sliceColor, contrastTextColor(sliceColor));\n const tick = createTick(context, mark, tickStart, tickStart, color, false);\n return [tick, ...labelTextPair(context, mark, point, color, fontSize, percent, false, mid)];\n}\n\nfunction addOffset(point: { x: number; y: number }, dx: number, dy: number): { x: number; y: number } {\n return { x: point.x + dx, y: point.y + dy };\n}\n","import type { Point } from '../../../../../model/geometry/types';\n\nexport type { Point } from '../../../../../model/geometry/types';\n\nexport const lerpPoint = (a: Point, b: Point, t: number): Point => ({\n x: a.x + (b.x - a.x) * t,\n y: a.y + (b.y - a.y) * t,\n});\n\nexport function cubicBezierPoint(p0: Point, p1: Point, p2: Point, p3: Point, t: number): Point {\n const mt = 1 - t;\n return {\n x: mt * mt * mt * p0.x + 3 * mt * mt * t * p1.x + 3 * mt * t * t * p2.x + t * t * t * p3.x,\n y: mt * mt * mt * p0.y + 3 * mt * mt * t * p1.y + 3 * mt * t * t * p2.y + t * t * t * p3.y,\n };\n}\n\nexport function splitCubicBezier(p0: Point, p1: Point, p2: Point, p3: Point, t: number) {\n const a = lerpPoint(p0, p1, t);\n const b = lerpPoint(p1, p2, t);\n const c = lerpPoint(p2, p3, t);\n const d = lerpPoint(a, b, t);\n const e = lerpPoint(b, c, t);\n const f = lerpPoint(d, e, t);\n return { left: [p0, a, d, f], right: [f, e, c, p3] };\n}\n\nexport function pointAtArcLength(points: number[], targetLength: number): { point: Point; segmentIndex: number } {\n const lastIndex = points.length - 2;\n if (targetLength <= 0) {\n return { point: { x: points[0], y: points[1] }, segmentIndex: 0 };\n }\n\n let accumulated = 0;\n for (let index = 0; index < lastIndex; index += 2) {\n const start = { x: points[index], y: points[index + 1] };\n const end = { x: points[index + 2], y: points[index + 3] };\n const length = Math.hypot(end.x - start.x, end.y - start.y);\n if (accumulated + length >= targetLength) {\n const ratio = length === 0 ? 0 : (targetLength - accumulated) / length;\n return { point: lerpPoint(start, end, ratio), segmentIndex: index };\n }\n accumulated += length;\n }\n return { point: { x: points[lastIndex], y: points[lastIndex + 1] }, segmentIndex: lastIndex };\n}\n\nexport function polylineLength(points: number[]): number {\n let total = 0;\n for (let index = 0; index < points.length - 2; index += 2) {\n total += Math.hypot(points[index + 2] - points[index], points[index + 3] - points[index + 1]);\n }\n return total;\n}\n\nexport function bezierArcLength(p0: Point, p1: Point, p2: Point, p3: Point, samples = 40): number {\n let total = 0;\n let previous = p0;\n for (let index = 1; index <= samples; index++) {\n const point = cubicBezierPoint(p0, p1, p2, p3, index / samples);\n total += Math.hypot(point.x - previous.x, point.y - previous.y);\n previous = point;\n }\n return total;\n}\n","import { cubicBezierPoint, type Point, splitCubicBezier } from './pathMetrics';\nimport type { LabelGapClearance, LabelGapSplit } from './types';\n\nconst SAMPLES = 40;\n\nfunction sampledArcLengths(points: [Point, Point, Point, Point]): number[] {\n const lengths = [0];\n let previous = points[0];\n for (let index = 1; index <= SAMPLES; index++) {\n const point = cubicBezierPoint(...points, index / SAMPLES);\n lengths.push(lengths[index - 1] + Math.hypot(point.x - previous.x, point.y - previous.y));\n previous = point;\n }\n return lengths;\n}\n\nfunction parameterAtLength(lengths: number[], target: number): number {\n const total = lengths[SAMPLES];\n if (target <= 0) {\n return 0;\n }\n if (target >= total) {\n return 1;\n }\n for (let index = 1; index <= SAMPLES; index++) {\n if (lengths[index] >= target) {\n const fraction = (target - lengths[index - 1]) / (lengths[index] - lengths[index - 1] || 1);\n return (index - 1 + fraction) / SAMPLES;\n }\n }\n return 1;\n}\n\nfunction projectedGapHalfLength(\n points: [Point, Point, Point, Point],\n clearance: LabelGapClearance,\n maximum: number,\n): number {\n const [p0, p1, p2, p3] = points;\n const dx = 0.75 * (p1.x - p0.x) + 1.5 * (p2.x - p1.x) + 0.75 * (p3.x - p2.x);\n const dy = 0.75 * (p1.y - p0.y) + 1.5 * (p2.y - p1.y) + 0.75 * (p3.y - p2.y);\n const length = Math.hypot(dx, dy);\n const ux = length === 0 ? 1 : Math.abs(dx) / length;\n const uy = length === 0 ? 0 : Math.abs(dy) / length;\n return Math.min(clearance.halfWidth * ux + clearance.halfHeight * uy, maximum);\n}\n\nexport function splitCurvedPath(flatPoints: number[], clearance: LabelGapClearance): LabelGapSplit | null {\n if (flatPoints.length < 8) {\n return null;\n }\n const points = curvedControlPoints(flatPoints);\n const lengths = sampledArcLengths(points);\n const total = lengths[SAMPLES];\n if (total === 0) {\n return null;\n }\n\n const half = total / 2;\n const maximumGap = Math.max(0, half - clearance.minimumVisibleStub);\n const gapHalfLength = projectedGapHalfLength(points, clearance, maximumGap);\n const beforeParameter = parameterAtLength(lengths, half - gapHalfLength);\n const afterParameter = parameterAtLength(lengths, half + gapHalfLength);\n return {\n before: curvedPathBeforeGap(points, beforeParameter),\n after: curvedPathAfterGap(points, afterParameter),\n bezier: true,\n };\n}\n\nfunction curvedControlPoints(flatPoints: number[]): [Point, Point, Point, Point] {\n return [\n { x: flatPoints[0], y: flatPoints[1] },\n { x: flatPoints[2], y: flatPoints[3] },\n { x: flatPoints[4], y: flatPoints[5] },\n { x: flatPoints[6], y: flatPoints[7] },\n ];\n}\n\nfunction curvedPathBeforeGap(points: [Point, Point, Point, Point], parameter: number): number[] | null {\n if (parameter <= 0.01) {\n return null;\n }\n return splitCubicBezier(...points, parameter).left.flatMap(point => [point.x, point.y]);\n}\n\nfunction curvedPathAfterGap(points: [Point, Point, Point, Point], parameter: number): number[] | null {\n if (parameter >= 0.99) {\n return null;\n }\n return splitCubicBezier(...points, parameter).right.flatMap(point => [point.x, point.y]);\n}\n","import { type Point, pointAtArcLength, polylineLength } from './pathMetrics';\nimport type { LabelGapClearance, LabelGapSplit } from './types';\n\ntype PolylineGapPlacement = {\n beforeLength: number;\n afterLength: number;\n};\n\nexport function splitPolylinePath(points: number[], clearance: LabelGapClearance): LabelGapSplit | null {\n if (points.length < 4) {\n return null;\n }\n const total = polylineLength(points);\n if (total === 0) {\n return null;\n }\n\n const placement = polylineGapPlacement(points, total, clearance);\n return {\n before: polylineBeforeGap(points, placement.beforeLength),\n after: polylineAfterGap(points, placement.afterLength, total),\n bezier: false,\n };\n}\n\nfunction polylineGapPlacement(\n points: number[],\n totalLength: number,\n clearance: LabelGapClearance,\n): PolylineGapPlacement {\n const half = totalLength / 2;\n const midpoint = pointAtArcLength(points, half);\n const start = { x: points[midpoint.segmentIndex], y: points[midpoint.segmentIndex + 1] };\n const end = { x: points[midpoint.segmentIndex + 2], y: points[midpoint.segmentIndex + 3] };\n const gapHalfLength = projectedPolylineGap(start, end, clearance, half);\n return { beforeLength: half - gapHalfLength, afterLength: half + gapHalfLength };\n}\n\nfunction projectedPolylineGap(start: Point, end: Point, clearance: LabelGapClearance, halfLength: number): number {\n const segmentLength = Math.hypot(end.x - start.x, end.y - start.y);\n const horizontalShare = segmentLength === 0 ? 1 : Math.abs(end.x - start.x) / segmentLength;\n const verticalShare = segmentLength === 0 ? 0 : Math.abs(end.y - start.y) / segmentLength;\n const projectedClearance = clearance.halfWidth * horizontalShare + clearance.halfHeight * verticalShare;\n return Math.min(projectedClearance, Math.max(0, halfLength - clearance.minimumVisibleStub));\n}\n\nfunction polylineBeforeGap(points: number[], splitLength: number): number[] | null {\n if (splitLength <= 0.5) {\n return null;\n }\n const split = pointAtArcLength(points, splitLength);\n return [...points.slice(0, split.segmentIndex + 2), split.point.x, split.point.y];\n}\n\nfunction polylineAfterGap(points: number[], splitLength: number, totalLength: number): number[] | null {\n if (splitLength >= totalLength - 0.5) {\n return null;\n }\n const split = pointAtArcLength(points, splitLength);\n return [split.point.x, split.point.y, ...points.slice(split.segmentIndex + 2)];\n}\n","import type { PathType } from '../../../../../model/link';\nimport { splitCurvedPath } from './curvedGap';\nimport { bezierArcLength, type Point, polylineLength } from './pathMetrics';\nimport { splitPolylinePath } from './polylineGap';\nimport type { LabelGapClearance, LabelGapDash, LabelGapSplit } from './types';\n\nconst LABEL_GAP_PADDING = 3;\nconst MIN_VISIBLE_STUB = 10;\n\nfunction bezierPoints(points: number[]): [Point, Point, Point, Point] {\n return [\n { x: points[0], y: points[1] },\n { x: points[2], y: points[3] },\n { x: points[4], y: points[5] },\n { x: points[6], y: points[7] },\n ];\n}\n\nfunction pathLength(points: number[], bezier: boolean): number {\n if (bezier) {\n return bezierArcLength(...bezierPoints(points));\n }\n return polylineLength(points);\n}\n\nexport function splitPathAroundLabel(\n points: number[],\n pathType: PathType,\n gapWidth: number,\n gapHeight: number,\n): LabelGapSplit | null {\n const clearance: LabelGapClearance = {\n halfWidth: (gapWidth + LABEL_GAP_PADDING) / 2,\n halfHeight: (gapHeight + LABEL_GAP_PADDING) / 2,\n minimumVisibleStub: MIN_VISIBLE_STUB,\n };\n if (pathType === 'curved') {\n return splitCurvedPath(points, clearance);\n }\n return splitPolylinePath(points, clearance);\n}\n\nexport function labelGapDash(\n points: number[],\n pathType: PathType,\n gapWidth: number,\n gapHeight: number,\n): LabelGapDash | null {\n const split = splitPathAroundLabel(points, pathType, gapWidth, gapHeight);\n if (!split || (!split.before && !split.after)) {\n return null;\n }\n\n const totalLength = pathLength(points, split.bezier);\n const dashBefore = split.before ? pathLength(split.before, split.bezier) : 0;\n const afterLength = split.after ? pathLength(split.after, split.bezier) : 0;\n const gapLength = Math.max(0, totalLength - dashBefore - afterLength);\n if (gapLength <= 0) {\n return null;\n }\n return { dashBefore, gapLength };\n}\n","import type { PathType } from '../../../../../model/link';\nimport type { MarkerPoint } from './types';\n\nfunction curvedMidpoint(points: number[]): MarkerPoint {\n const [x0, y0, x1, y1, x2, y2, x3, y3] = points;\n const t = 0.5;\n const mt = 1 - t;\n return {\n x: mt * mt * mt * x0 + 3 * mt * mt * t * x1 + 3 * mt * t * t * x2 + t * t * t * x3,\n y: mt * mt * mt * y0 + 3 * mt * mt * t * y1 + 3 * mt * t * t * y2 + t * t * t * y3,\n };\n}\n\nfunction orthogonalMidpoint(points: number[], fallback: MarkerPoint): MarkerPoint {\n let totalLength = 0;\n const segments: Array<{ start: MarkerPoint; end: MarkerPoint; length: number }> = [];\n for (let index = 0; index < points.length - 2; index += 2) {\n const start = { x: points[index], y: points[index + 1] };\n const end = { x: points[index + 2], y: points[index + 3] };\n const length = Math.sqrt((end.x - start.x) ** 2 + (end.y - start.y) ** 2);\n totalLength += length;\n segments.push({ start, end, length });\n }\n const halfLength = totalLength / 2;\n let accumulatedLength = 0;\n for (const segment of segments) {\n if (accumulatedLength + segment.length >= halfLength) {\n const ratio = (halfLength - accumulatedLength) / segment.length;\n return {\n x: segment.start.x + ratio * (segment.end.x - segment.start.x),\n y: segment.start.y + ratio * (segment.end.y - segment.start.y),\n };\n }\n accumulatedLength += segment.length;\n }\n return fallback;\n}\n\nexport function getLineMidpoint(\n points: number[],\n pathType: PathType,\n effectiveFrom: MarkerPoint,\n effectiveTo: MarkerPoint,\n): MarkerPoint {\n if (pathType === 'curved') {\n return curvedMidpoint(points);\n }\n const fallback = {\n x: (effectiveFrom.x + effectiveTo.x) / 2,\n y: (effectiveFrom.y + effectiveTo.y) / 2,\n };\n if (pathType === 'orthogonal') {\n return orthogonalMidpoint(points, fallback);\n }\n return fallback;\n}\n","type Point = readonly [number, number];\ntype Lobe = readonly [centerX: number, centerY: number, radius: number];\ntype Curve = readonly [control1: Point, control2: Point, end: Point];\n\ninterface CloudOutline {\n start: Point;\n curves: readonly Curve[];\n}\n\ninterface LobeArc {\n lobe: Lobe;\n from: number;\n to: number;\n}\n\nconst CLOUD_LOBES: readonly Lobe[] = [\n [30, 64, 24],\n [52, 40, 22],\n [86, 32, 28],\n [118, 42, 24],\n [132, 64, 24],\n];\n\nconst QUARTER_TURN = Math.PI / 2;\nconst FULL_TURN = 4 * QUARTER_TURN;\nconst BOTTOM_ANGLE = Math.PI / 2;\nconst EPSILON = 1e-9;\n\nfunction pointOnLobe([centerX, centerY, radius]: Lobe, angle: number): Point {\n return [centerX + radius * Math.cos(angle), centerY + radius * Math.sin(angle)];\n}\n\nfunction angleOnLobe([centerX, centerY]: Lobe, point: Point): number {\n return Math.atan2(point[1] - centerY, point[0] - centerX);\n}\n\nfunction outerCusp(first: Lobe, second: Lobe, centroid: Point): Point {\n const dx = second[0] - first[0];\n const dy = second[1] - first[1];\n const distance = Math.hypot(dx, dy);\n const along = (first[2] ** 2 - second[2] ** 2 + distance ** 2) / (2 * distance);\n const across = Math.sqrt(Math.max(0, first[2] ** 2 - along ** 2));\n const footX = first[0] + (along * dx) / distance;\n const footY = first[1] + (along * dy) / distance;\n const candidates: Point[] = [\n [footX - (across * dy) / distance, footY + (across * dx) / distance],\n [footX + (across * dy) / distance, footY - (across * dx) / distance],\n ];\n const fromCentroid = (point: Point) => Math.hypot(point[0] - centroid[0], point[1] - centroid[1]);\n return fromCentroid(candidates[0]) > fromCentroid(candidates[1]) ? candidates[0] : candidates[1];\n}\n\nfunction lobeArcs(lobes: readonly Lobe[]): LobeArc[] {\n const centroid: Point = [\n lobes.reduce((sum, lobe) => sum + lobe[0], 0) / lobes.length,\n lobes.reduce((sum, lobe) => sum + lobe[1], 0) / lobes.length,\n ];\n return lobes.map((lobe, index) => {\n const from = index === 0 ? BOTTOM_ANGLE : angleOnLobe(lobe, outerCusp(lobes[index - 1], lobe, centroid));\n const isLast = index === lobes.length - 1;\n let to = isLast ? BOTTOM_ANGLE : angleOnLobe(lobe, outerCusp(lobe, lobes[index + 1], centroid));\n while (to <= from) {\n to += FULL_TURN;\n }\n return { lobe, from, to };\n });\n}\n\nfunction quarterStops(from: number, to: number): number[] {\n const stops: number[] = [];\n for (let turn = Math.floor(from / QUARTER_TURN) + 1; turn * QUARTER_TURN < to - EPSILON; turn++) {\n stops.push(turn * QUARTER_TURN);\n }\n return [...stops, to];\n}\n\nfunction arcCurves({ lobe, from, to }: LobeArc): { start: Point; curves: Curve[] } {\n const start = pointOnLobe(lobe, from);\n const curves: Curve[] = [];\n let angle = from;\n for (const stop of quarterStops(from, to)) {\n const reach = (4 / 3) * Math.tan((stop - angle) / 4) * lobe[2];\n const begin = pointOnLobe(lobe, angle);\n const end = pointOnLobe(lobe, stop);\n curves.push([\n [begin[0] - reach * Math.sin(angle), begin[1] + reach * Math.cos(angle)],\n [end[0] + reach * Math.sin(stop), end[1] - reach * Math.cos(stop)],\n end,\n ]);\n angle = stop;\n }\n return { start, curves };\n}\n\nfunction normalizedCloudOutline(): CloudOutline {\n const arcs = lobeArcs(CLOUD_LOBES).map(arcCurves);\n const start = arcs[0].start;\n const curves = arcs.flatMap(arc => arc.curves);\n const anchors = [start, ...curves.map(curve => curve[2])];\n const minX = Math.min(...anchors.map(point => point[0]));\n const maxX = Math.max(...anchors.map(point => point[0]));\n const minY = Math.min(...anchors.map(point => point[1]));\n const maxY = Math.max(...anchors.map(point => point[1]));\n const unit = (point: Point): Point => [(point[0] - minX) / (maxX - minX), (point[1] - minY) / (maxY - minY)];\n return {\n start: unit(start),\n curves: curves.map(([first, second, end]) => [unit(first), unit(second), unit(end)]),\n };\n}\n\nconst CLOUD_OUTLINE = normalizedCloudOutline();\n\nexport function cloudPath(x: number, y: number, width: number, height: number): string {\n const at = ([u, v]: Point) => `${x + u * width} ${y + v * height}`;\n const curves = CLOUD_OUTLINE.curves.map(([first, second, end]) => `C ${at(first)} ${at(second)} ${at(end)}`);\n return `M ${at(CLOUD_OUTLINE.start)} ${curves.join(' ')} Z`;\n}\n","import type { ShapeType } from '../../../../model/shape';\nimport { cloudPath } from './cloud';\nimport { cylinderPath, personPath } from './roundedForms';\n\nconst polygonPath = (points: number[]): string =>\n points.length < 4\n ? ''\n : `M ${points[0]} ${points[1]} ${points.slice(2).reduce((s, n, i) => s + (i % 2 ? ` ${n}` : ` L ${n}`), '')} Z`;\n\nconst DOCUMENT_WAVE_AMPLITUDE = 0.1;\nconst QUARTER_SINE_SLOPE = Math.PI / 6;\nconst NOTE_FOLD_RATIO = 0.25;\nconst PREDEFINED_PROCESS_BAR_RATIO = 0.15;\n\nexport function pillCornerRadius(width: number, height: number): number {\n return Math.min(width, height) / 2;\n}\n\nexport function localShapePath(type: ShapeType, x: number, y: number, width: number, height: number): string | null {\n const p = (...coords: number[]) => polygonPath(coords);\n switch (type) {\n case 'diamond':\n return p(x + width / 2, y, x + width, y + height / 2, x + width / 2, y + height, x, y + height / 2);\n case 'triangle':\n return p(x + width / 2, y, x, y + height, x + width, y + height);\n case 'parallelogram':\n return p(x + width * 0.15, y, x + width, y, x + width * 0.85, y + height, x, y + height);\n case 'trapezoid':\n return p(x + width * 0.2, y, x + width * 0.8, y, x + width, y + height, x, y + height);\n case 'hexagon': {\n const cut = Math.min(width, height) / 4;\n return p(\n x + cut,\n y,\n x + width - cut,\n y,\n x + width,\n y + height / 2,\n x + width - cut,\n y + height,\n x + cut,\n y + height,\n x,\n y + height / 2,\n );\n }\n case 'document': {\n const amplitude = height * DOCUMENT_WAVE_AMPLITUDE;\n const mid = y + height - amplitude;\n const quarter = width / 4;\n const slope = amplitude * QUARTER_SINE_SLOPE;\n return (\n `M ${x} ${y} L ${x + width} ${y} L ${x + width} ${mid} ` +\n `C ${x + width - quarter / 3} ${mid - slope} ${x + width - (quarter * 2) / 3} ${mid - amplitude} ${x + width - quarter} ${mid - amplitude} ` +\n `C ${x + width - quarter - quarter / 3} ${mid - amplitude} ${x + width / 2 + quarter / 3} ${mid - slope} ${x + width / 2} ${mid} ` +\n `C ${x + width / 2 - quarter / 3} ${mid + slope} ${x + width / 2 - (quarter * 2) / 3} ${mid + amplitude} ${x + quarter} ${mid + amplitude} ` +\n `C ${x + quarter - quarter / 3} ${mid + amplitude} ${x + quarter / 3} ${mid + slope} ${x} ${mid} Z`\n );\n }\n case 'note': {\n const fold = Math.min(width, height) * NOTE_FOLD_RATIO;\n return (\n `M ${x} ${y} L ${x + width - fold} ${y} L ${x + width} ${y + fold} L ${x + width} ${y + height} L ${x} ${y + height} Z ` +\n `M ${x + width} ${y + fold} L ${x + width - fold} ${y + fold} L ${x + width - fold} ${y}`\n );\n }\n case 'cloud':\n return cloudPath(x, y, width, height);\n case 'cylinder':\n return cylinderPath(x, y, width, height);\n case 'person':\n return personPath(x, y, width, height);\n case 'predefined_process': {\n const bar = Math.min(width, height) * PREDEFINED_PROCESS_BAR_RATIO;\n return (\n `M ${x} ${y} L ${x + width} ${y} L ${x + width} ${y + height} L ${x} ${y + height} Z ` +\n `M ${x + bar} ${y} L ${x + bar} ${y + height} M ${x + width - bar} ${y} L ${x + width - bar} ${y + height}`\n );\n }\n default:\n return null;\n }\n}\n"]}