stickyflow 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/dist/binding/index.cjs +9 -9
  3. package/dist/binding/index.d.cts +4 -4
  4. package/dist/binding/index.d.ts +4 -4
  5. package/dist/binding/index.js +3 -3
  6. package/dist/{chunk-ZMLQIMJK.cjs → chunk-A73UJ5AQ.cjs} +1537 -738
  7. package/dist/chunk-A73UJ5AQ.cjs.map +1 -0
  8. package/dist/{chunk-VK3T6O5Z.cjs → chunk-BUOWM3LC.cjs} +745 -62
  9. package/dist/chunk-BUOWM3LC.cjs.map +1 -0
  10. package/dist/{chunk-L3VJXZFD.cjs → chunk-EKAWJFJQ.cjs} +15 -15
  11. package/dist/{chunk-L3VJXZFD.cjs.map → chunk-EKAWJFJQ.cjs.map} +1 -1
  12. package/dist/{chunk-BODZN3ZI.js → chunk-JCRPLPKV.js} +156 -23
  13. package/dist/chunk-JCRPLPKV.js.map +1 -0
  14. package/dist/{chunk-IEHE6WVN.js → chunk-JQK4IGXJ.js} +489 -51
  15. package/dist/chunk-JQK4IGXJ.js.map +1 -0
  16. package/dist/{chunk-XY2GZUHC.cjs → chunk-KXYSO6GC.cjs} +498 -50
  17. package/dist/chunk-KXYSO6GC.cjs.map +1 -0
  18. package/dist/{chunk-G7NRK5AG.js → chunk-MUKIGLR5.js} +717 -34
  19. package/dist/chunk-MUKIGLR5.js.map +1 -0
  20. package/dist/{chunk-TWDLOXRM.cjs → chunk-OWNVXKXN.cjs} +170 -37
  21. package/dist/chunk-OWNVXKXN.cjs.map +1 -0
  22. package/dist/{chunk-LTGF5OHP.js → chunk-SDMQRSRW.js} +941 -143
  23. package/dist/chunk-SDMQRSRW.js.map +1 -0
  24. package/dist/{chunk-7VW2XKVB.js → chunk-ZNHYW47T.js} +3 -3
  25. package/dist/{chunk-7VW2XKVB.js.map → chunk-ZNHYW47T.js.map} +1 -1
  26. package/dist/index.cjs +57 -29
  27. package/dist/index.d.cts +80 -7
  28. package/dist/index.d.ts +80 -7
  29. package/dist/index.js +5 -5
  30. package/dist/interaction/index.cjs +245 -235
  31. package/dist/interaction/index.cjs.map +1 -1
  32. package/dist/interaction/index.d.cts +3 -2
  33. package/dist/interaction/index.d.ts +3 -2
  34. package/dist/interaction/index.js +17 -7
  35. package/dist/interaction/index.js.map +1 -1
  36. package/dist/{render-CgX_y15a.d.ts → render-BU2uYzjG.d.cts} +40 -16
  37. package/dist/{render-CgX_y15a.d.cts → render-BU2uYzjG.d.ts} +40 -16
  38. package/dist/{runtime-reWgr7MP.d.cts → runtime-B7KiTmn8.d.cts} +2 -2
  39. package/dist/{runtime-DnUxca3Y.d.ts → runtime-BPzyD-Nd.d.ts} +2 -2
  40. package/dist/{runtimeTypes-D60w6nyF.d.cts → runtimeTypes-BIP70z72.d.cts} +3 -2
  41. package/dist/{runtimeTypes-CEBGueYM.d.ts → runtimeTypes-DalvhScn.d.ts} +3 -2
  42. package/dist/stickyflow-diagram.global.js +387 -36
  43. package/dist/stickyflow-diagram.global.js.map +1 -1
  44. package/dist/{types-DYLC_lsk.d.ts → types-DMWs27Hn.d.ts} +1 -1
  45. package/dist/{types-DvhMpqrL.d.cts → types-D_2NZ6lL.d.cts} +1 -1
  46. package/dist/viewer/index.cjs +9 -9
  47. package/dist/viewer/index.d.cts +5 -4
  48. package/dist/viewer/index.d.ts +5 -4
  49. package/dist/viewer/index.js +4 -4
  50. package/dist/web-component/index.cjs +6 -6
  51. package/dist/web-component/index.d.cts +2 -2
  52. package/dist/web-component/index.d.ts +2 -2
  53. package/dist/web-component/index.js +4 -4
  54. package/package.json +1 -1
  55. package/dist/chunk-BODZN3ZI.js.map +0 -1
  56. package/dist/chunk-G7NRK5AG.js.map +0 -1
  57. package/dist/chunk-IEHE6WVN.js.map +0 -1
  58. package/dist/chunk-LTGF5OHP.js.map +0 -1
  59. package/dist/chunk-TWDLOXRM.cjs.map +0 -1
  60. package/dist/chunk-VK3T6O5Z.cjs.map +0 -1
  61. package/dist/chunk-XY2GZUHC.cjs.map +0 -1
  62. package/dist/chunk-ZMLQIMJK.cjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/renderInput/styleDecoding/colorToken.ts","../src/renderInput/styleDecoding/color.ts","../src/renderInput/styleDecoding/shadow.ts","../src/renderInput/styleDecoding/ramp.ts","../src/renderInput/fromSfl/canvasObjects/values.ts","../src/renderInput/fromSfl/canvasObjects/chartBase.ts","../src/renderInput/fromSfl/canvasObjects/chartConfigs.ts","../src/renderInput/fromSfl/canvasObjects/chart.ts","../src/renderInput/fromSfl/canvasObjects/genericComponent.ts","../src/renderInput/fromSfl/canvasObjects/component.ts","../src/renderInput/fromSfl/canvasObjects/connection.ts","../src/renderInput/fromSfl/canvasObjects/frame.ts","../src/renderInput/fromSfl/canvasObjects/isometric.ts","../src/renderInput/fromSfl/canvasObjects/link.ts","../src/renderInput/fromSfl/canvasObjects/path.ts","../src/renderInput/fromSfl/canvasObjects/shape.ts","../src/renderInput/fromSfl/canvasObjects/swimlane.ts","../src/renderInput/fromSfl/canvasObjects/collect.ts","../src/renderInput/fromSfl/endpoint.ts","../src/renderInput/fromSfl/links.ts","../src/renderInput/fromSfl/index.ts","../src/renderScene/artifacts/component/placeholder.ts","../src/renderScene/artifacts/component/builtIn.ts","../src/renderScene/artifacts/component/controlParts.ts","../src/renderScene/artifacts/component/button.ts","../src/renderScene/artifacts/component/checkbox.ts","../src/renderScene/artifacts/component/switch.ts","../src/renderScene/artifacts/component/toggleButton.ts","../src/renderScene/artifacts/component/registry.ts","../src/renderScene/artifacts/component/build.ts","../src/renderScene/artifacts/container/style.ts","../src/renderScene/artifacts/container/titleTab.ts","../src/renderScene/artifacts/container/frame.ts","../src/renderScene/scene/shadow.ts","../src/renderScene/artifacts/container/swimlane/dividers.ts","../src/renderScene/artifacts/container/swimlane/labels.ts","../src/renderScene/artifacts/container/swimlane/layout.ts","../src/renderScene/artifacts/container/swimlane/index.ts","../src/renderScene/artifacts/containers.ts","../src/renderScene/artifacts/isometric.ts","../src/renderScene/artifacts/link/endpointLabels.ts","../src/renderScene/artifacts/link/label.ts","../src/renderScene/scene/linkPaint.ts","../src/renderScene/scene/linkStroke.ts","../src/renderScene/artifacts/link/layout.ts","../src/renderScene/artifacts/link/markers.ts","../src/renderScene/artifacts/link/path.ts","../src/renderScene/artifacts/link/weight.ts","../src/renderScene/artifacts/link.ts","../src/renderScene/artifacts/path.ts","../src/renderScene/artifacts/shape/geometry/base.ts","../src/renderScene/artifacts/shape/geometry/simple.ts","../src/renderScene/artifacts/shape/geometry/index.ts","../src/renderScene/artifacts/shape/style.ts","../src/renderScene/scene/richTextLayout.ts","../src/renderScene/artifacts/shape/text.ts","../src/renderScene/artifacts/shape.ts","../src/renderScene/charts/decorations/axisLabels.ts","../src/renderScene/charts/decorations/boxplotYAxis.ts","../src/renderScene/charts/decorations/legend.ts","../src/renderScene/charts/decorations/layout.ts","../src/renderScene/charts/decorations/categoricalXAxis.ts","../src/renderScene/charts/decorations/numericXAxis.ts","../src/renderScene/charts/decorations/numericYAxis.ts","../src/renderScene/charts/decorations/axes.ts","../src/renderScene/charts/field/idw.ts","../src/renderScene/charts/field/grid.ts","../src/renderScene/charts/gridSupport.ts","../src/renderScene/charts/decorations/gridDots.ts","../src/renderScene/charts/decorations/gridLineStyle.ts","../src/renderScene/charts/decorations/gridCircle.ts","../src/renderScene/charts/decorations/grid.ts","../src/renderScene/charts/decorations/rules.ts","../src/renderScene/charts/chartBackdrop.ts","../src/renderScene/charts/renderers/bar/glass.ts","../src/renderScene/charts/renderers/bar/glow.ts","../src/renderScene/charts/renderers/bar/labels.ts","../src/renderScene/charts/renderers/bar/track.ts","../src/renderScene/charts/renderers/bar/grouped.ts","../src/renderScene/charts/renderers/bar/horizontal.ts","../src/renderScene/charts/renderers/bar/stacked.ts","../src/renderScene/charts/renderers/bar.ts","../src/renderScene/charts/renderers/boxplot/layout.ts","../src/renderScene/charts/renderers/boxplot/geometry.ts","../src/renderScene/charts/renderers/boxplot/points.ts","../src/renderScene/charts/renderers/boxplot/shapes.ts","../src/renderScene/charts/renderers/boxplot/series.ts","../src/renderScene/charts/renderers/boxplot.ts","../src/renderScene/charts/renderers/custom.ts","../src/renderScene/charts/renderers/field/data.ts","../src/renderScene/charts/renderers/field/legend.ts","../src/renderScene/charts/field/colorRamp.ts","../src/renderScene/charts/field/isolines.ts","../src/renderScene/charts/renderers/field/scalar.ts","../src/renderScene/charts/renderers/field/vectors.ts","../src/renderScene/charts/renderers/field.ts","../src/renderScene/charts/renderers/heatmap/cells.ts","../src/renderScene/charts/renderers/heatmap/headers.ts","../src/renderScene/charts/renderers/heatmap/layout.ts","../src/renderScene/charts/renderers/heatmap/legend.ts","../src/renderScene/charts/renderers/heatmap.ts","../src/renderScene/charts/geometry/hexbin.ts","../src/renderScene/charts/geometry/sankey/columns.ts","../src/renderScene/charts/geometry/sankey/constants.ts","../src/renderScene/charts/geometry/sankey/graph.ts","../src/renderScene/charts/geometry/sankey/nodeGeometry.ts","../src/renderScene/charts/geometry/sankey/links.ts","../src/renderScene/charts/geometry/sankey/nodes.ts","../src/renderScene/charts/geometry/sankey/layout.ts","../src/renderScene/charts/geometry/treemap.ts","../src/renderScene/charts/renderers/hexbin.ts","../src/renderScene/charts/renderers/cartesianPoints.ts","../src/renderScene/charts/renderers/line/area.ts","../src/renderScene/charts/renderers/line/highlights.ts","../src/renderScene/charts/renderers/line/marks.ts","../src/renderScene/charts/renderers/line/path.ts","../src/renderScene/charts/renderers/line/series.ts","../src/renderScene/charts/renderers/line.ts","../src/renderScene/charts/renderers/mekko/grid.ts","../src/renderScene/charts/renderers/mekko/labels.ts","../src/renderScene/charts/renderers/mekko/layout.ts","../src/renderScene/charts/renderers/mekko/segments.ts","../src/renderScene/charts/renderers/mekko.ts","../src/renderScene/charts/renderers/pie/center.ts","../src/renderScene/charts/renderers/pie/slices.ts","../src/renderScene/charts/renderers/pie.ts","../src/renderScene/charts/renderers/polarArea.ts","../src/renderScene/charts/renderers/radar/geometry.ts","../src/renderScene/charts/renderers/radar/grid.ts","../src/renderScene/charts/renderers/radar/labels.ts","../src/renderScene/charts/renderers/radar/series.ts","../src/renderScene/charts/renderers/radar.ts","../src/renderScene/charts/renderers/radialBar.ts","../src/renderScene/charts/renderers/sankey/links.ts","../src/renderScene/charts/renderers/sankey/nodes.ts","../src/renderScene/charts/renderers/sankey/prepare.ts","../src/renderScene/charts/renderers/sankey.ts","../src/renderScene/charts/renderers/scatter.ts","../src/renderScene/charts/renderers/treemap/layout.ts","../src/renderScene/charts/renderers/treemap/legend.ts","../src/renderScene/charts/renderers/treemap/tiles.ts","../src/renderScene/charts/renderers/treemap.ts","../src/renderScene/charts/renderers/dispatch.ts","../src/renderScene/charts/cartesianChart.ts","../src/renderScene/charts/chartFrame.ts","../src/renderScene/charts/chartLegend.ts","../src/renderScene/charts/chartRenderContext.ts","../src/renderScene/charts/chartRenderOrder.ts","../src/renderScene/charts/chartTitle.ts","../src/renderScene/charts/chartFoundation.ts","../src/renderScene/charts/polarChart.ts","../src/renderScene/charts/undecoratedChart.ts","../src/renderScene/charts/buildChart.ts","../src/renderScene/charts/artifacts.ts","../src/renderScene/scene/build.ts","../src/svg/format.ts","../src/svg/clipDefinitions.ts","../src/svg/filterDefinitions.ts","../src/svg/markerBodies.ts","../src/svg/markerDefinitions.ts","../src/svg/paintDefinitions.ts","../src/svg/definitions.ts","../src/svg/linkHitAreas.ts","../src/svg/attributes.ts","../src/svg/contract.ts","../src/svg/text.ts","../src/svg/nodes.ts","../src/svg/document.ts","../src/svg/renderScene.ts","../src/render.ts"],"names":["object","labelX","numberProperty","fill","render","fontFamily","isHorizontalBoxplot","radians","seriesColor","barPath","labelNodes","isSeriesMax","markOf","pixelPoints","labelNode","TOP","labelPlacement","fullCirclePath","start","layoutOf","ringNodes","ROW_GAP","bandRatio","tiles","paint"],"mappings":"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","file":"chunk-LTGF5OHP.js","sourcesContent":["export const COLOR_TOKEN_PATTERN = String.raw`rgba?\\([^)]*\\)|#[0-9a-fA-F]+|[a-zA-Z][\\w-]*`;\n","import { COLOR_TOKEN_PATTERN } from './colorToken';\n\nexport interface GradientStop {\n position: number;\n color: string;\n}\n\nexport interface GradientFill {\n type: 'gradient';\n angle: number;\n stops: GradientStop[];\n}\n\nexport interface MeshPoint {\n id: string;\n x: number;\n y: number;\n color: string;\n}\n\nexport interface MeshFill {\n type: 'mesh';\n points: MeshPoint[];\n}\n\nexport type DecodedColor = string | GradientFill | MeshFill;\n\nfunction decodeGradient(source: string): GradientFill | undefined {\n const match = source.match(/^gradient\\(\\s*([-\\d.]+)\\s*,\\s*(.*)\\)\\s*$/);\n if (!match) {\n return undefined;\n }\n\n const stops: GradientStop[] = [];\n const stopPattern = new RegExp(`(${COLOR_TOKEN_PATTERN})\\\\s+([-\\\\d.]+)%`, 'g');\n for (const stop of match[2].matchAll(stopPattern)) {\n stops.push({ color: stop[1], position: Number(stop[2]) });\n }\n return { type: 'gradient', angle: Number(match[1]), stops };\n}\n\nfunction decodeMesh(source: string): MeshFill | undefined {\n const match = source.match(/^mesh\\(\\s*(.*)\\)\\s*$/);\n if (!match) {\n return undefined;\n }\n\n const points: MeshPoint[] = [];\n const pointPattern = new RegExp(`(${COLOR_TOKEN_PATTERN})\\\\s+([-\\\\d.]+)\\\\s*,\\\\s*([-\\\\d.]+)`, 'g');\n let index = 0;\n for (const point of match[1].matchAll(pointPattern)) {\n points.push({\n id: `mp-${Date.now()}-${index++}`,\n color: point[1],\n x: Number(point[2]),\n y: Number(point[3]),\n });\n }\n return { type: 'mesh', points };\n}\n\nexport function decodeColor(source?: string): DecodedColor | undefined {\n if (source === undefined || source === null || source === '') {\n return undefined;\n }\n return decodeGradient(source) ?? decodeMesh(source) ?? source;\n}\n","import type { ShadowStyle } from '../../model/shadow';\n\nfunction applyShadowProperty(shadow: ShadowStyle, key: string, value: string): void {\n switch (key) {\n case 'color':\n shadow.color = value;\n break;\n case 'opacity':\n shadow.opacity = Number(value);\n break;\n case 'blur':\n shadow.blur = Number(value);\n break;\n case 'angle':\n shadow.angle = Number(value);\n break;\n case 'distance':\n shadow.distance = Number(value);\n break;\n }\n}\n\nexport function decodeShadow(source?: string): ShadowStyle | undefined {\n if (!source) {\n return undefined;\n }\n if (source === 'on') {\n return { enabled: true };\n }\n const match = source.match(/^shadow\\((.*)\\)\\s*$/);\n if (!match) {\n return undefined;\n }\n\n const shadow: ShadowStyle = { enabled: true };\n for (const part of match[1].split(',')) {\n const keyValue = part.split(':');\n if (keyValue.length !== 2) {\n continue;\n }\n applyShadowProperty(shadow, keyValue[0].trim(), keyValue[1].trim());\n }\n return shadow;\n}\n","import { COLOR_TOKEN_PATTERN } from './colorToken';\n\nexport interface RampStop {\n position: number;\n color: string;\n}\n\nexport interface DecodedRamp {\n type: 'ramp';\n stops: RampStop[];\n}\n\nexport function decodeRamp(source?: string): DecodedRamp | undefined {\n if (!source) {\n return undefined;\n }\n const match = source.match(/^ramp\\(\\s*(.*)\\)\\s*$/);\n if (!match) {\n return undefined;\n }\n\n const stops: RampStop[] = [];\n const stopPattern = new RegExp(`(${COLOR_TOKEN_PATTERN})\\\\s+([-\\\\d.]+)`, 'g');\n for (const stop of match[1].matchAll(stopPattern)) {\n stops.push({ color: stop[1], position: Number(stop[2]) });\n }\n return { type: 'ramp', stops };\n}\n","import { decodeColor, type GradientFill } from '../../styleDecoding';\n\nexport const numOf = (value?: string): number | undefined => (value === undefined ? undefined : Number(value));\n\nexport function safeJson(value: string): unknown {\n try {\n return JSON.parse(value);\n } catch {\n return undefined;\n }\n}\n\nexport function dashArray(value?: string): number[] | undefined {\n if (value === undefined) {\n return undefined;\n }\n const parsed = safeJson(value);\n if (!Array.isArray(parsed)) {\n return undefined;\n }\n const numbers = parsed.filter((entry): entry is number => typeof entry === 'number' && Number.isFinite(entry));\n return numbers.length === parsed.length ? numbers : undefined;\n}\n\nexport function solidColor(value?: string): string | undefined {\n const decoded = decodeColor(value);\n return typeof decoded === 'string' ? decoded : undefined;\n}\n\nconst CSS_COLOR = /^(?:#[0-9a-f]{3,8}|rgba?\\([\\d.,%\\s]+\\)|[a-z][\\w-]*)$/i;\n\nexport function cssColor(value?: string): string | undefined {\n return value && CSS_COLOR.test(value) ? value : undefined;\n}\n\nexport function oneOf<T extends string>(value: string | undefined, allowed: readonly T[], fallback: T): T {\n return allowed.includes(value as T) ? (value as T) : fallback;\n}\n\nexport const FONT_WEIGHTS = ['normal', 'bold'] as const;\nexport const SHAPE_FONT_WEIGHTS = [\n 'normal',\n 'bold',\n '100',\n '200',\n '300',\n '400',\n '500',\n '600',\n '700',\n '800',\n '900',\n] as const;\nexport const LABEL_POSITIONS = ['top', 'bottom', 'left', 'right'] as const;\nexport const PATH_MARKERS = ['none', 'arrow', 'filled_arrow'] as const;\nexport const BORDER_STYLES = ['none', 'single', 'double'] as const;\n\nexport function strokePaint(value?: string): string | GradientFill | undefined {\n const decoded = decodeColor(value);\n if (decoded === undefined || typeof decoded === 'string') {\n return decoded;\n }\n return decoded.type === 'gradient' ? decoded : undefined;\n}\n\nexport const TEXT_ALIGNS = ['left', 'center', 'right'] as const;\nexport const VERTICAL_ALIGNS = ['top', 'middle', 'bottom'] as const;\nexport const STROKE_STYLES = ['solid', 'dashed', 'dotted'] as const;\nexport const PATH_TYPES = ['straight', 'curved', 'orthogonal'] as const;\n\nexport function optionalOneOf<T extends string>(value: string | undefined, allowed: readonly T[]): T | undefined {\n return value !== undefined && allowed.includes(value as T) ? (value as T) : undefined;\n}\n\nexport const SHAPE_STROKE_STYLES = ['solid', 'dashed', 'dotted', 'double'] as const;\nexport const MARKER_TYPES = [\n 'none',\n 'arrow',\n 'filled_arrow',\n 'circle',\n 'filled_circle',\n 'diamond',\n 'filled_diamond',\n 'bar',\n 'triangle',\n 'one',\n 'zero_one',\n 'many',\n 'one_many',\n 'zero_many',\n] as const;\n","import type { ChartBase } from '../../../model/chart';\nimport type { SflCanvasObject } from '../../../sflSemantic/sflToCanvasState';\nimport { decodeColor, decodeShadow } from '../../styleDecoding';\nimport { numOf, solidColor } from './values';\n\ntype Props = SflCanvasObject['props'];\n\nfunction decodeImageFill(source: string | undefined): { url: string; overlay?: string } | undefined {\n const match = source?.match(/^image\\(\\s*([^,)]+?)\\s*(?:,\\s*(.+?))?\\s*\\)$/);\n return match ? { url: match[1], overlay: match[2] } : undefined;\n}\n\nfunction legendPositionOf(value: string | undefined): ChartBase['legendPosition'] {\n return value === 'bottom' ||\n value === 'bottomLeft' ||\n value === 'bottomRight' ||\n value === 'left' ||\n value === 'right'\n ? value\n : 'top';\n}\n\nfunction lineStyleOf(value: string | undefined): 'solid' | 'dashed' | 'dotted' {\n return value === 'dashed' || value === 'dotted' ? value : 'solid';\n}\n\nfunction dataOf(e: SflCanvasObject): Pick<ChartBase, 'axisX' | 'axisY' | 'series' | 'rules'> {\n return {\n axisX: e.chart?.axisX ?? { min: 0, max: 4, step: 1 },\n axisY: e.chart?.axisY ?? { min: 0, max: 500, step: 100 },\n series: (e.chart?.series ?? []).map(s => ({\n ...s,\n color: decodeColor(s.color),\n colors: s.colors?.map(c => (c === null ? null : (decodeColor(c) ?? null))),\n strokeWidth: s.strokeWidth,\n })),\n rules: (e.chart?.rules ?? []).map(r => ({\n id: r.id,\n at: r.at,\n text: r.text,\n color: r.color,\n strokeWidth: r.strokeWidth,\n dash: r.dash,\n })),\n };\n}\n\nfunction frameOf(\n p: Props,\n): Pick<ChartBase, 'fillColor' | 'fillImage' | 'strokeColor' | 'strokeWidth' | 'cornerRadius' | 'shadowStyle'> {\n const image = decodeImageFill(p.fill);\n return {\n fillColor: image ? '#111418' : (decodeColor(p.fill) ?? '#ffffff'),\n fillImage: image,\n strokeColor: solidColor(p.stroke) ?? '#475569',\n strokeWidth: numOf(p.strokeWidth) ?? 1,\n cornerRadius: numOf(p.cornerRadius) ?? 12,\n shadowStyle: decodeShadow(p.shadow),\n };\n}\n\nfunction gridOf(\n p: Props,\n): Pick<\n ChartBase,\n 'gridColor' | 'gridWidth' | 'gridShape' | 'gridLineStyle' | 'gridRoundedCorners' | 'gridAxes' | 'showGrid'\n> {\n return {\n gridColor: p.gridColor ?? '#e2e8f0',\n gridWidth: numOf(p.gridWidth) ?? 1,\n gridShape: p.gridShape === 'circle' ? ('circle' as const) : ('rect' as const),\n gridLineStyle: lineStyleOf(p.gridLineStyle),\n gridRoundedCorners: p.gridRoundedCorners === 'true',\n gridAxes: p.gridAxes === 'x' || p.gridAxes === 'y' ? p.gridAxes : undefined,\n showGrid: p.showGrid !== 'false',\n };\n}\n\nfunction axesOf(\n p: Props,\n): Pick<\n ChartBase,\n | 'axisLabelColor'\n | 'axisLineWidth'\n | 'axisLineColor'\n | 'axisLineStyle'\n | 'tickLength'\n | 'axisFontSize'\n | 'axisFontFamily'\n | 'showValueAxis'\n | 'categoryAlign'\n | 'showAxisLabels'\n> {\n return {\n axisLabelColor: p.axisLabelColor,\n axisLineWidth: numOf(p.axisLineWidth),\n axisLineColor: p.axisLineColor,\n axisLineStyle: p.axisLineStyle === 'dashed' || p.axisLineStyle === 'dotted' ? p.axisLineStyle : undefined,\n tickLength: numOf(p.tickLength),\n axisFontSize: numOf(p.axisFontSize),\n axisFontFamily: p.axisFontFamily,\n showValueAxis: p.showValueAxis !== 'false',\n categoryAlign: p.categoryAlign === 'left' || p.categoryAlign === 'inside' ? p.categoryAlign : undefined,\n showAxisLabels: p.showAxisLabels !== 'false',\n };\n}\n\nfunction textOf(\n p: Props,\n): Pick<ChartBase, 'textColor' | 'titleSize' | 'titleWeight' | 'titleColor' | 'fontSize' | 'fontFamily'> {\n return {\n textColor: p.textColor ?? '#0f172a',\n titleSize: numOf(p.titleSize),\n titleWeight: p.titleWeight === 'normal' ? ('normal' as const) : undefined,\n titleColor: p.titleColor,\n fontSize: numOf(p.fontSize) ?? 12,\n fontFamily: p.fontFamily ?? \"Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\",\n };\n}\n\nfunction legendOf(p: Props): Pick<ChartBase, 'legendColor' | 'showLegend' | 'legendPosition'> {\n return {\n legendColor: p.legendColor,\n showLegend: p.showLegend === 'true',\n legendPosition: legendPositionOf(p.legendPosition),\n };\n}\n\nexport function chartBase(e: SflCanvasObject): ChartBase {\n const p = e.props;\n return {\n id: e.id,\n title: e.text ?? null,\n x: e.x,\n y: e.y,\n width: e.width,\n height: e.height,\n ...dataOf(e),\n ...frameOf(p),\n ...gridOf(p),\n ...axesOf(p),\n ...textOf(p),\n ...legendOf(p),\n order: e.order,\n sourceIndex: e.sourceIndex,\n };\n}\n","import type {\n BarChartConfig,\n BoxplotChartConfig,\n CustomChartConfig,\n FieldChartConfig,\n HeatmapChartConfig,\n HexbinChartConfig,\n LineChartConfig,\n MekkoChartConfig,\n PieChartConfig,\n PolarAreaChartConfig,\n RadarChartConfig,\n RadialBarChartConfig,\n RadialChartConfig,\n SankeyChartConfig,\n ScatterChartConfig,\n TreemapChartConfig,\n} from '../../../model/chart';\nimport type { SflCanvasObject } from '../../../sflSemantic/sflToCanvasState';\nimport { decodeColor, decodeRamp } from '../../styleDecoding';\nimport { numOf } from './values';\n\ntype ChartSource = SflCanvasObject['chart'];\ntype ChartProps = SflCanvasObject['props'];\n\nexport function barConfig(source: ChartSource, p: ChartProps): BarChartConfig {\n return {\n categories: source?.categories,\n barCornerRadius: source?.barCornerRadius,\n barBorderColor: decodeColor(source?.barBorderColor),\n barBorderWidth: source?.barBorderWidth,\n barGroupGap: source?.barGroupGap,\n barGap: source?.barGap,\n barGlow: source?.barGlow,\n barSegments: numOf(p.barSegments),\n barSegmentGap: numOf(p.barSegmentGap),\n barSegmentSnap: p.barSegmentSnap === 'false' ? false : undefined,\n barGlassBlur: numOf(p.barGlassBlur),\n barGlassSaturation: numOf(p.barGlassSaturation),\n barGlassTint: p.barGlassTint,\n barThickness: numOf(p.barThickness),\n orientation: source?.orientation,\n barTrack: p.barTrack === 'true',\n barRoundedBottom: p.barRoundedBottom === 'true',\n barLabelMaxOnly: p.barLabelMaxOnly === 'true',\n barTrackColor: p.barTrackColor,\n barTrackHatch: p.barTrackHatch === 'true',\n barTrackHatchColor: p.barTrackHatchColor,\n barTrackHatchAngle: numOf(p.barTrackHatchAngle),\n barTrackHatchSpacing: numOf(p.barTrackHatchSpacing),\n barTrackHatchWidth: numOf(p.barTrackHatchWidth),\n stacked: source?.stacked ?? 'true',\n showBarLabels: p.showBarLabels === 'true',\n barLabelPosition:\n p.barLabelPosition === 'inside' || p.barLabelPosition === 'center' || p.barLabelPosition === 'axis'\n ? p.barLabelPosition\n : undefined,\n barLabelFontSize: numOf(p.barLabelFontSize),\n barLabelFontFamily: p.barLabelFontFamily,\n barLabelFontWeight: p.barLabelFontWeight === 'bold' ? 'bold' : undefined,\n barLabelColor: p.barLabelColor,\n barLabelPill: p.barLabelPill === 'true',\n barLabelPillColor: p.barLabelPillColor,\n barLabelBorderColor: p.barLabelBorderColor,\n barLabelBorderWidth: numOf(p.barLabelBorderWidth),\n barLabelFormat: p.barLabelFormat,\n };\n}\n\nexport function lineConfig(source: ChartSource, p: ChartProps): LineChartConfig {\n return {\n categories: source?.categories,\n areaOpacity: source?.areaOpacity,\n lineTension: source?.lineTension,\n lineWidth: numOf(p.lineWidth),\n lineGlow: numOf(p.lineGlow),\n pointSize: numOf(p.pointSize),\n pointFill: p.pointFill,\n pointStrokeWidth: numOf(p.pointStrokeWidth),\n highlightPoints: source?.highlightPoints,\n highlightSize: numOf(p.highlightSize),\n highlightColor: p.highlightColor,\n highlightGuide: p.highlightGuide === 'true',\n highlightLabels: p.highlightLabels === 'true',\n highlightLabelColor: p.highlightLabelColor,\n highlightLabelFormat: p.highlightLabelFormat,\n };\n}\n\nexport function scatterConfig(source: ChartSource, p: ChartProps): ScatterChartConfig {\n return {\n categories: source?.categories,\n pointSize: numOf(p.pointSize),\n pointOpacity: numOf(p.pointOpacity),\n pointStrokeWidth: numOf(p.pointStrokeWidth),\n pointStrokeColor: p.pointStrokeColor,\n };\n}\n\nexport function boxplotConfig(source: ChartSource, p: ChartProps): BoxplotChartConfig {\n return {\n boxWidth: source?.boxWidth,\n orientation: source?.orientation,\n barCornerRadius: source?.barCornerRadius,\n showBoxplotPoints: source?.showBoxplotPoints,\n barBorderColor: source?.barBorderColor,\n barBorderWidth: source?.barBorderWidth,\n boxWhiskerWidth: numOf(p.boxWhiskerWidth),\n boxMedianWidth: numOf(p.boxMedianWidth),\n boxMedianColor: p.boxMedianColor,\n boxWhiskerColor: p.boxWhiskerColor,\n boxCapSize: numOf(p.boxCapSize),\n boxPointSize: numOf(p.boxPointSize),\n boxPointOpacity: numOf(p.boxPointOpacity),\n boxJitter: numOf(p.boxJitter),\n };\n}\n\nexport function fieldConfig(source: ChartSource): FieldChartConfig {\n return {\n scale: decodeRamp(source?.scale),\n interpolate: source?.interpolate,\n idwPower: source?.idwPower,\n isolines: source?.isolines,\n };\n}\n\nexport function heatmapConfig(source: ChartSource, p: ChartProps): HeatmapChartConfig {\n return {\n categories: source?.categories,\n zones: source?.zones,\n cellGap: source?.cellGap,\n showValues: source?.showValues,\n squareCells: source?.squareCells,\n barCornerRadius: source?.barCornerRadius,\n cellShape: p.cellShape === 'circle' ? 'circle' : p.cellShape === 'square' ? 'square' : undefined,\n cellStrokeColor: p.cellStrokeColor,\n cellStrokeWidth: numOf(p.cellStrokeWidth),\n cellValueSize: numOf(p.cellValueSize),\n cellValueColor: p.cellValueColor,\n };\n}\n\nexport function hexbinConfig(source: ChartSource, p: ChartProps): HexbinChartConfig {\n return {\n hexRadius: source?.hexRadius,\n scale: decodeRamp(source?.scale),\n hexGap: numOf(p.hexGap),\n hexStrokeWidth: numOf(p.hexStrokeWidth),\n hexStrokeColor: p.hexStrokeColor,\n hexMinOpacity: numOf(p.hexMinOpacity),\n };\n}\n\nexport function mekkoConfig(source: ChartSource, p: ChartProps): MekkoChartConfig {\n return {\n categories: source?.categories,\n barCornerRadius: source?.barCornerRadius,\n mekkoVaryHeight: source?.mekkoVaryHeight,\n tileGradient: source?.tileGradient,\n showColumnBackdrop: source?.showColumnBackdrop,\n mekkoColumnGap: numOf(p.mekkoColumnGap),\n mekkoSegmentGap: numOf(p.mekkoSegmentGap),\n mekkoRoundAll: p.mekkoRoundAll === undefined ? undefined : String(p.mekkoRoundAll) !== 'false',\n mekkoSegmentStrokeColor: p.mekkoSegmentStrokeColor,\n mekkoSegmentStrokeWidth: numOf(p.mekkoSegmentStrokeWidth),\n mekkoLabelSize: numOf(p.mekkoLabelSize),\n mekkoValueSize: numOf(p.mekkoValueSize),\n mekkoTextColor: p.mekkoTextColor,\n showMekkoTotals: p.showMekkoTotals === undefined ? undefined : String(p.showMekkoTotals) !== 'false',\n mekkoValueFormat:\n p.mekkoValueFormat === 'percent' ? 'percent' : p.mekkoValueFormat === 'value' ? 'value' : undefined,\n };\n}\n\nexport function pieConfig(source: ChartSource, p: ChartProps): PieChartConfig {\n return {\n innerRadius: source?.innerRadius,\n pieCornerRadius: source?.pieCornerRadius,\n pieSliceGap: source?.pieSliceGap,\n pieStartAngle: numOf(p.pieStartAngle),\n pieSweep: numOf(p.pieSweep),\n pieExplode: numOf(p.pieExplode),\n pieGlow: numOf(p.pieGlow),\n pieStroke: p.pieStroke,\n pieStrokeWidth: numOf(p.pieStrokeWidth),\n pieLabelPosition:\n p.pieLabelPosition === 'inside' || p.pieLabelPosition === 'outside' ? p.pieLabelPosition : undefined,\n pieLabelContent:\n p.pieLabelContent === 'percent' || p.pieLabelContent === 'name' || p.pieLabelContent === 'inline'\n ? p.pieLabelContent\n : undefined,\n pieLabelColor: p.pieLabelColor,\n pieCenterText: p.pieCenterText,\n pieCenterSize: numOf(p.pieCenterSize),\n pieCenterColor: p.pieCenterColor,\n };\n}\n\nexport function polarAreaConfig(source: ChartSource, p: ChartProps): PolarAreaChartConfig {\n return {\n innerRadius: source?.innerRadius,\n pieCornerRadius: source?.pieCornerRadius,\n pieSliceGap: source?.pieSliceGap,\n pieStartAngle: numOf(p.pieStartAngle),\n pieStroke: p.pieStroke,\n pieStrokeWidth: numOf(p.pieStrokeWidth),\n polarTrackOpacity: numOf(p.polarTrackOpacity),\n polarRings: p.polarRings === undefined ? undefined : String(p.polarRings) !== 'false',\n polarTrackStroke: p.polarTrackStroke,\n polarTrackStrokeWidth: numOf(p.polarTrackStrokeWidth),\n polarTrackDash: p.polarTrackDash,\n polarValueSize: numOf(p.polarValueSize),\n polarNameSize: numOf(p.polarNameSize),\n polarValueFirst: p.polarValueFirst === undefined ? undefined : String(p.polarValueFirst) !== 'false',\n polarOutsideLabels: p.polarOutsideLabels === undefined ? undefined : String(p.polarOutsideLabels) !== 'false',\n };\n}\n\nfunction radarStyle(\n p: ChartProps,\n): Pick<RadarChartConfig, 'radarStrokeWidth' | 'radarPointSize' | 'radarSpokes' | 'radarTension'> {\n return {\n radarStrokeWidth: numOf(p.radarStrokeWidth),\n radarPointSize: numOf(p.radarPointSize),\n radarTension: numOf(p.radarTension),\n radarSpokes: p.radarSpokes === undefined ? undefined : String(p.radarSpokes) !== 'false',\n };\n}\n\nexport function radarConfig(source: ChartSource, p: ChartProps): RadarChartConfig {\n return {\n categories: source?.categories,\n areaOpacity: source?.areaOpacity,\n ...radarStyle(p),\n };\n}\n\nexport function radialConfig(source: ChartSource, p: ChartProps): RadialChartConfig {\n return {\n categories: source?.categories,\n areaOpacity: source?.areaOpacity,\n ...radarStyle(p),\n };\n}\n\nexport function radialBarConfig(source: ChartSource, p: ChartProps): RadialBarChartConfig {\n return {\n ringThickness: source?.ringThickness,\n ringGap: source?.ringGap,\n ringTrackOpacity: numOf(p.ringTrackOpacity),\n ringCap: p.ringCap === 'butt' ? 'butt' : p.ringCap === 'round' ? 'round' : undefined,\n ringStartAngle: numOf(p.ringStartAngle),\n ringSweep: numOf(p.ringSweep),\n };\n}\n\nexport function sankeyConfig(source: ChartSource, p: ChartProps): SankeyChartConfig {\n return {\n zones: source?.zones,\n barCornerRadius: source?.barCornerRadius,\n labelPosition: source?.labelPosition,\n labelOrientation: source?.labelOrientation,\n labelColor: source?.labelColor,\n linkGradient: source?.linkGradient,\n sankeyNodeWidth: numOf(p.sankeyNodeWidth),\n sankeyNodeGap: numOf(p.sankeyNodeGap),\n sankeyLinkOpacity: numOf(p.sankeyLinkOpacity),\n sankeyLinkCurve: numOf(p.sankeyLinkCurve),\n sankeyLabelSize: numOf(p.sankeyLabelSize),\n };\n}\n\nexport function treemapConfig(source: ChartSource, p: ChartProps): TreemapChartConfig {\n return {\n zones: source?.zones,\n cellGap: source?.cellGap,\n barCornerRadius: source?.barCornerRadius,\n headerColor: source?.headerColor,\n tileGradient: source?.tileGradient,\n tileStrokeColor: p.tileStrokeColor,\n tileStrokeWidth: numOf(p.tileStrokeWidth),\n tileLabelSize: numOf(p.tileLabelSize),\n tileValueSize: numOf(p.tileValueSize),\n tileTextColor: p.tileTextColor,\n tileLabelPadding: numOf(p.tileLabelPadding),\n showTileValues: p.showTileValues === undefined ? undefined : String(p.showTileValues) !== 'false',\n headerHeight: numOf(p.headerHeight),\n };\n}\n\nexport function customConfig(source: ChartSource, p: ChartProps): CustomChartConfig {\n return {\n categories: source?.categories,\n zones: source?.zones,\n orientation: source?.orientation,\n connectPoints: source?.connectPoints,\n reverseComparison: source?.reverseComparison,\n customConnectorWidth: numOf(p.customConnectorWidth),\n customConnectorOpacity: numOf(p.customConnectorOpacity),\n customConnectorDash: p.customConnectorDash,\n customBeforeFill: p.customBeforeFill,\n customBeforeStroke: p.customBeforeStroke,\n customBeforeStrokeWidth: numOf(p.customBeforeStrokeWidth),\n customLabelSize: numOf(p.customLabelSize),\n customLabelColor: p.customLabelColor,\n };\n}\n","import type { Chart, ChartBase, TypedChart } from '../../../model/chart';\nimport type { SflCanvasObject } from '../../../sflSemantic/sflToCanvasState';\nimport { chartBase } from './chartBase';\nimport {\n barConfig,\n boxplotConfig,\n customConfig,\n fieldConfig,\n heatmapConfig,\n hexbinConfig,\n lineConfig,\n mekkoConfig,\n pieConfig,\n polarAreaConfig,\n radarConfig,\n radialBarConfig,\n radialConfig,\n sankeyConfig,\n scatterConfig,\n treemapConfig,\n} from './chartConfigs';\n\nexport function chartObject(e: SflCanvasObject): Chart {\n const base = chartBase(e);\n const source = e.chart;\n const p = e.props;\n const chartType = source?.chartType ?? 'bar';\n switch (chartType) {\n case 'bar':\n return typedChart(base, chartType, barConfig(source, p));\n case 'line':\n return typedChart(base, chartType, lineConfig(source, p));\n case 'scatter':\n return typedChart(base, chartType, scatterConfig(source, p));\n case 'boxplot':\n return typedChart(base, chartType, boxplotConfig(source, p));\n case 'field':\n return typedChart(base, chartType, fieldConfig(source));\n case 'heatmap':\n return typedChart(base, chartType, heatmapConfig(source, p));\n case 'hexbin':\n return typedChart(base, chartType, hexbinConfig(source, p));\n case 'mekko':\n return typedChart(base, chartType, mekkoConfig(source, p));\n case 'pie':\n return typedChart(base, chartType, pieConfig(source, p));\n case 'polarArea':\n return typedChart(base, chartType, polarAreaConfig(source, p));\n case 'radar':\n return typedChart(base, chartType, radarConfig(source, p));\n case 'radial':\n return typedChart(base, chartType, radialConfig(source, p));\n case 'radialBar':\n return typedChart(base, chartType, radialBarConfig(source, p));\n case 'sankey':\n return typedChart(base, chartType, sankeyConfig(source, p));\n case 'treemap':\n return typedChart(base, chartType, treemapConfig(source, p));\n case 'custom':\n return typedChart(base, chartType, customConfig(source, p));\n }\n}\n\nfunction typedChart<TType extends Chart['chartType'], TConfig extends object>(\n base: ChartBase,\n chartType: TType,\n config: TConfig,\n): TypedChart<TType, TConfig> {\n return { ...base, chartType, config };\n}\n","import {\n type ComponentDescriptor,\n type ComponentPropertyDescriptor,\n type ComponentValue,\n type ComponentValueDescriptor,\n type GenericComponent,\n getComponentDescriptor,\n} from '../../../model/component';\nimport type { SflComponentObject } from '../../../sflSemantic/canvasObjects/types';\nimport { cssColor } from './values';\n\nfunction numberProperty(\n descriptor: Extract<ComponentPropertyDescriptor, { type: 'number' }>,\n raw: string | undefined,\n): number {\n const value = Number(raw);\n if (raw === undefined || raw === '' || !Number.isFinite(value)) {\n return descriptor.default;\n }\n const atLeast = descriptor.min === undefined ? value : Math.max(descriptor.min, value);\n return descriptor.max === undefined ? atLeast : Math.min(descriptor.max, atLeast);\n}\n\nfunction readProperty(descriptor: ComponentPropertyDescriptor, raw: string | undefined): ComponentValue {\n switch (descriptor.type) {\n case 'number':\n return numberProperty(descriptor, raw);\n case 'boolean':\n return raw === undefined ? descriptor.default : raw === 'true';\n case 'color':\n return cssColor(raw) ?? descriptor.default;\n case 'enum':\n return raw !== undefined && descriptor.options.includes(raw) ? raw : descriptor.default;\n case 'string':\n return raw ?? descriptor.default;\n }\n}\n\nexport function readComponentProperties(\n descriptor: ComponentDescriptor | undefined,\n props: Record<string, string>,\n): Record<string, ComponentValue> {\n const properties: Record<string, ComponentValue> = {};\n for (const [key, property] of Object.entries(descriptor?.properties ?? {})) {\n properties[key] = readProperty(property, props[key]);\n }\n return properties;\n}\n\nexport function readComponentValue(descriptor: ComponentValueDescriptor | undefined, raw: string): ComponentValue {\n if (!descriptor) {\n return '';\n }\n if (descriptor.type === 'boolean') {\n return raw === 'true';\n }\n if (descriptor.type === 'number') {\n const value = Number(raw);\n return Number.isFinite(value) ? value : (descriptor.default as number);\n }\n return raw;\n}\n\nexport function genericComponentObject(canvasObject: SflComponentObject): GenericComponent {\n const descriptor = getComponentDescriptor(canvasObject.component.type);\n return {\n id: canvasObject.id,\n type: canvasObject.component.type,\n value: descriptor\n ? readComponentValue(descriptor.value, canvasObject.component.value)\n : canvasObject.component.value,\n disabled: canvasObject.props.disabled === 'true',\n label: canvasObject.component.label,\n x: canvasObject.x,\n y: canvasObject.y,\n width: canvasObject.width,\n height: canvasObject.height,\n rotation: canvasObject.rotation,\n order: canvasObject.order,\n sourceIndex: canvasObject.sourceIndex,\n parentFrameId: canvasObject.parentFrameId,\n properties: readComponentProperties(descriptor, canvasObject.props),\n };\n}\n","import {\n type BuiltInComponentType,\n type Component,\n isBuiltInComponentType,\n type RollingNumberComponent,\n type RulerComponent,\n type TickScaleComponent,\n} from '../../../model/component';\nimport type { SflComponentObject } from '../../../sflSemantic/canvasObjects/types';\nimport { genericComponentObject } from './genericComponent';\nimport { cssColor } from './values';\n\nconst CSS_FONT_FAMILY = /^[\\w\\s,'\"-]+$/;\n\nfunction fontFamily(value: string | undefined): string | undefined {\n return value && CSS_FONT_FAMILY.test(value) ? value : undefined;\n}\n\nconst FONT_WEIGHT = /^(?:[1-9]00|normal|bold)$/;\n\nfunction variant(value: string | undefined): 'flip' | 'plain' | undefined {\n return value === 'plain' || value === 'flip' ? value : undefined;\n}\n\nfunction motion(value: string | undefined): 'roll' | 'fade' | undefined {\n return value === 'roll' || value === 'fade' ? value : undefined;\n}\n\nfunction positiveNumber(value: string | undefined): number | undefined {\n const number = Number(value);\n return value !== undefined && Number.isFinite(number) && number > 0 ? number : undefined;\n}\n\nfunction fontWeight(value: string | undefined): string | undefined {\n return value && FONT_WEIGHT.test(value) ? value : undefined;\n}\n\nconst TICK_SCALE_NUMBERS = [\n 'ticks',\n 'major',\n 'radius',\n 'length',\n 'thickness',\n 'round',\n 'start',\n 'sweep',\n 'intensity',\n] as const;\nconst TICK_SCALE_COLORS = ['color', 'accent'] as const;\n\nfunction tickScaleObject(canvasObject: SflComponentObject): TickScaleComponent {\n const properties = canvasObject.props;\n const parameters: Record<string, string | number> = {};\n for (const key of TICK_SCALE_NUMBERS) {\n const value = Number(properties[key]);\n if (properties[key] !== undefined && Number.isFinite(value)) {\n parameters[key] = value;\n }\n }\n for (const key of TICK_SCALE_COLORS) {\n const value = cssColor(properties[key]);\n if (value) {\n parameters[key] = value;\n }\n }\n return {\n id: canvasObject.id,\n type: 'tickScale',\n value: canvasObject.component.value,\n max: canvasObject.component.max,\n label: canvasObject.component.label,\n x: canvasObject.x,\n y: canvasObject.y,\n width: canvasObject.width,\n height: canvasObject.height,\n rotation: canvasObject.rotation,\n order: canvasObject.order,\n sourceIndex: canvasObject.sourceIndex,\n parentFrameId: canvasObject.parentFrameId,\n parameters,\n labels:\n properties.labels === 'true'\n ? {\n size:\n Number.isFinite(Number(properties.labelSize)) && properties.labelSize !== undefined\n ? Number(properties.labelSize)\n : undefined,\n color: cssColor(properties.labelColor),\n offset:\n Number.isFinite(Number(properties.labelOffset)) && properties.labelOffset !== undefined\n ? Number(properties.labelOffset)\n : undefined,\n weight: fontWeight(properties.labelWeight),\n fontFamily: fontFamily(properties.labelFont),\n }\n : undefined,\n };\n}\n\nconst RULER_NUMBERS = [\n 'ticks',\n 'major',\n 'length',\n 'thickness',\n 'round',\n 'dent',\n 'spread',\n 'inset',\n 'line',\n 'gap',\n 'intensity',\n] as const;\nconst RULER_COLORS = ['color', 'accent', 'glow'] as const;\nconst RULER_DEFAULTS = { color: '#8f95c4', accent: '#d9f270', glow: '#3ddc84' };\nconst RULER_OPTIONAL_COLORS = ['core', 'peak'] as const;\n\nfunction rulerObject(canvasObject: SflComponentObject): RulerComponent {\n const properties = canvasObject.props;\n const parameters: Record<string, string | number> = {};\n for (const key of RULER_NUMBERS) {\n const value = Number(properties[key]);\n if (properties[key] !== undefined && Number.isFinite(value)) {\n parameters[key] = value;\n }\n }\n for (const key of RULER_COLORS) {\n parameters[key] = cssColor(properties[key]) ?? RULER_DEFAULTS[key];\n }\n for (const key of RULER_OPTIONAL_COLORS) {\n const value = cssColor(properties[key]);\n if (value) {\n parameters[key] = value;\n }\n }\n parameters.axis = properties.axis === 'horizontal' ? 'horizontal' : 'vertical';\n if (properties.knob) {\n parameters.knob = properties.knob;\n }\n return {\n id: canvasObject.id,\n type: 'ruler',\n value: canvasObject.component.value,\n min: canvasObject.component.min,\n max: canvasObject.component.max,\n label: canvasObject.component.label,\n x: canvasObject.x,\n y: canvasObject.y,\n width: canvasObject.width,\n height: canvasObject.height,\n rotation: canvasObject.rotation,\n order: canvasObject.order,\n sourceIndex: canvasObject.sourceIndex,\n parentFrameId: canvasObject.parentFrameId,\n parameters,\n labels:\n properties.labels === 'true'\n ? {\n size:\n Number.isFinite(Number(properties.labelSize)) && properties.labelSize !== undefined\n ? Number(properties.labelSize)\n : undefined,\n color: cssColor(properties.labelColor),\n offset:\n Number.isFinite(Number(properties.labelOffset)) && properties.labelOffset !== undefined\n ? Number(properties.labelOffset)\n : undefined,\n weight: fontWeight(properties.labelWeight),\n fontFamily: fontFamily(properties.labelFont),\n }\n : undefined,\n };\n}\n\nfunction rollingNumberObject(canvasObject: SflComponentObject): RollingNumberComponent {\n const properties = canvasObject.props;\n return {\n id: canvasObject.id,\n type: 'rollingNumber',\n value: canvasObject.component.value,\n digits: canvasObject.component.digits,\n duration: canvasObject.component.duration,\n label: canvasObject.component.label,\n x: canvasObject.x,\n y: canvasObject.y,\n width: canvasObject.width,\n height: canvasObject.height,\n rotation: canvasObject.rotation,\n order: canvasObject.order,\n sourceIndex: canvasObject.sourceIndex,\n parentFrameId: canvasObject.parentFrameId,\n style: {\n color: cssColor(properties.color),\n surface: cssColor(properties.surface),\n divider: cssColor(properties.divider),\n labelColor: cssColor(properties.labelColor),\n fontFamily: fontFamily(properties.fontFamily),\n variant: variant(properties.variant),\n motion: motion(properties.motion),\n fontWeight: fontWeight(properties.fontWeight),\n fontSize: positiveNumber(properties.fontSize),\n },\n };\n}\n\nconst BUILT_IN_OBJECTS: Record<BuiltInComponentType, (canvasObject: SflComponentObject) => Component> = {\n rollingNumber: rollingNumberObject,\n tickScale: tickScaleObject,\n ruler: rulerObject,\n};\n\nexport function componentObject(canvasObject: SflComponentObject): Component {\n const type = canvasObject.component.type;\n return isBuiltInComponentType(type) ? BUILT_IN_OBJECTS[type](canvasObject) : genericComponentObject(canvasObject);\n}\n","import type { Connection } from '../../../model/connection';\nimport type { SflConnectionOut } from '../../../sflSemantic/sflToCanvasState';\nimport { numOf, optionalOneOf, PATH_TYPES, STROKE_STYLES, strokePaint } from './values';\n\nexport function connectionObject(c: SflConnectionOut): Connection {\n const p = c.props;\n return {\n id: c.id,\n fromId: c.fromId,\n toId: c.toId,\n fromFace: c.fromFace,\n toFace: c.toFace,\n order: c.order,\n sourceIndex: c.sourceIndex,\n style: {\n pathType: optionalOneOf(p.route, PATH_TYPES) ?? 'straight',\n color: strokePaint(p.stroke),\n strokeWidth: numOf(p.strokeWidth),\n strokeStyle: optionalOneOf(p.strokeStyle, STROKE_STYLES),\n opacity: p.opacity !== undefined ? numOf(p.opacity) : undefined,\n },\n };\n}\n","import type { Frame } from '../../../model/frame';\nimport type { SflCanvasObject } from '../../../sflSemantic/sflToCanvasState';\nimport { dashArray, FONT_WEIGHTS, LABEL_POSITIONS, numOf, oneOf } from './values';\n\nexport function frameObject(e: SflCanvasObject): Frame {\n const p = e.props;\n return {\n id: e.id,\n title: e.text ?? null,\n x: e.x,\n y: e.y,\n width: e.width,\n height: e.height,\n fillColor: p.fill ?? 'rgba(155, 66, 223, 0.05)',\n strokeColor: p.stroke ?? '#9b42df',\n strokeWidth: numOf(p.strokeWidth) ?? 2,\n cornerRadius: numOf(p.cornerRadius) ?? 12,\n textColor: p.textColor ?? '#ffffff',\n fontSize: numOf(p.fontSize) ?? 14,\n fontWeight: oneOf(p.fontWeight, FONT_WEIGHTS, 'bold'),\n fontFamily: p.fontFamily,\n dash: dashArray(p.dash),\n showLabel: p.showLabel !== 'false',\n labelPosition: oneOf(p.labelPosition, LABEL_POSITIONS, 'top'),\n shadow: p.shadow !== 'false',\n order: e.order,\n sourceIndex: e.sourceIndex,\n };\n}\n","import type { IsometricObject } from '../../../model/isometricObject';\nimport type { SflIsometricObject } from '../../../sflSemantic/sflToCanvasState';\nimport { decodeShadow } from '../../styleDecoding';\nimport { numOf, solidColor } from './values';\n\nexport function isometricObject(canvasObject: SflIsometricObject): IsometricObject {\n const presentation = canvasObject.props;\n const shadowStyle = decodeShadow(presentation.shadow);\n\n return {\n id: canvasObject.id,\n x: canvasObject.x,\n y: canvasObject.y,\n width: canvasObject.width,\n height: canvasObject.height,\n depth: canvasObject.isometric.depth,\n rotation: canvasObject.rotation,\n order: canvasObject.order,\n sourceIndex: canvasObject.sourceIndex,\n text: canvasObject.text,\n icon: canvasObject.isometric.icon,\n fill: solidColor(presentation.fill) ?? '#f8fafc',\n strokeColor: solidColor(presentation.stroke) ?? '#111827',\n strokeWidth: numOf(presentation.strokeWidth) ?? 1,\n cornerRadius: numOf(presentation.cornerRadius) ?? 8,\n hasShadow: shadowStyle?.enabled ?? false,\n shadowStyle,\n labelOffsetX: numOf(presentation.labelOffsetX) ?? 0,\n labelOffsetY: numOf(presentation.labelOffsetY) ?? 0,\n labelBackground: solidColor(presentation.labelBackground),\n parentFrameId: canvasObject.parentFrameId,\n };\n}\n","import type { Link } from '../../../model/link';\nimport type { SflLinkOut } from '../../../sflSemantic/sflToCanvasState';\nimport { decodeShadow } from '../../styleDecoding';\nimport { MARKER_TYPES, numOf, optionalOneOf, PATH_TYPES, STROKE_STYLES, strokePaint } from './values';\n\nexport function linkObject(l: SflLinkOut): Link {\n const p = l.props;\n return {\n id: l.id,\n fromId: l.fromId,\n toId: l.toId,\n text: l.text ?? '',\n showText: p.showText !== 'false',\n weight: numOf(p.weight),\n showWeight: p.showWeight !== 'false',\n style: {\n pathType: optionalOneOf(p.route, PATH_TYPES),\n color: strokePaint(p.stroke),\n strokeWidth: numOf(p.strokeWidth),\n strokeStyle: optionalOneOf(p.strokeStyle, STROKE_STYLES),\n opacity: p.opacity !== undefined ? numOf(p.opacity) : undefined,\n fontSize: numOf(p.fontSize),\n fontFamily: p.fontFamily,\n startLabel: p.startLabel,\n endLabel: p.endLabel,\n shadow: decodeShadow(p.shadow),\n },\n startMarker: optionalOneOf(p.markerStart, MARKER_TYPES),\n endMarker: optionalOneOf(p.markerEnd, MARKER_TYPES),\n segmentOffsets: l.segments,\n fromPoint: l.fromPort\n ? { kind: 'port' as const, port: l.fromPort }\n : l.fromSide\n ? { kind: 'side' as const, side: l.fromSide, offset: l.fromFraction }\n : undefined,\n toPoint: l.toPort\n ? { kind: 'port' as const, port: l.toPort }\n : l.toSide\n ? { kind: 'side' as const, side: l.toSide, offset: l.toFraction }\n : undefined,\n order: l.order,\n sourceIndex: l.sourceIndex,\n };\n}\n","import type { FreeformPath } from '../../../model/path';\nimport type { SflCanvasObject } from '../../../sflSemantic/sflToCanvasState';\nimport { dashArray, numOf, oneOf, PATH_MARKERS, solidColor } from './values';\n\nexport function pathObject(e: SflCanvasObject): FreeformPath {\n const p = e.props;\n return {\n id: e.id,\n x: e.x,\n y: e.y,\n width: e.width,\n height: e.height,\n points: e.path?.points ?? [],\n value: e.path?.value,\n tension: e.path?.tension ?? 0,\n startMarker: oneOf(e.path?.startMarker, PATH_MARKERS, 'none'),\n endMarker: oneOf(e.path?.endMarker, PATH_MARKERS, 'none'),\n closed: e.path?.closed ?? false,\n strokeColor: solidColor(p.stroke) ?? '#7c3aed',\n strokeWidth: numOf(p.strokeWidth) ?? 2,\n dash: dashArray(p.dash) ?? [],\n opacity: numOf(p.opacity) ?? 1,\n fillColor: solidColor(p.fill) ?? 'transparent',\n order: e.order,\n sourceIndex: e.sourceIndex,\n };\n}\n","import type { Shader } from '../../../model/shader';\nimport type { ShapeType } from '../../../model/shape';\nimport type { SflCanvasObject } from '../../../sflSemantic/sflToCanvasState';\nimport { decodeColor, decodeShadow } from '../../styleDecoding';\nimport {\n dashArray,\n numOf,\n oneOf,\n optionalOneOf,\n SHAPE_FONT_WEIGHTS,\n SHAPE_STROKE_STYLES,\n strokePaint,\n TEXT_ALIGNS,\n VERTICAL_ALIGNS,\n} from './values';\n\nfunction shapeTypeOf(value: string | undefined): ShapeType {\n return (value || 'rectangle') as ShapeType;\n}\n\nexport function shapeObject(e: SflCanvasObject, shaders: ReadonlyMap<string, Shader>) {\n const p = e.props;\n const isText = e.kind === 'text';\n return {\n id: e.id,\n type: 'shape',\n text: e.text ?? null,\n shapeType: shapeTypeOf(e.shapeType),\n symbol: e.symbol,\n x: e.x,\n y: e.y,\n width: e.width,\n height: e.height,\n w: e.width,\n h: e.height,\n rotation: e.rotation ?? 0,\n fillColor: decodeColor(p.fill ?? (isText ? 'none' : undefined)),\n strokeColor: strokePaint(p.stroke ?? (isText ? 'none' : undefined)),\n isText: isText || undefined,\n strokeWidth: numOf(p.strokeWidth),\n textColor: p.textColor,\n fontSize: numOf(p.fontSize),\n fontWeight: p.fontWeight === undefined ? undefined : oneOf(p.fontWeight, SHAPE_FONT_WEIGHTS, 'normal'),\n letterSpacing: numOf(p.letterSpacing),\n lineHeight: numOf(p.lineHeight),\n fontFamily: p.fontFamily,\n textAlign: optionalOneOf(p.textAlign, TEXT_ALIGNS),\n textVerticalAlign: optionalOneOf(p.verticalAlign, VERTICAL_ALIGNS),\n cornerRadius: numOf(p.cornerRadius),\n shadowStyle: decodeShadow(p.shadow),\n dash: dashArray(p.dash),\n strokeStyle: optionalOneOf(p.strokeStyle, SHAPE_STROKE_STYLES),\n opacity: numOf(p.opacity),\n parentFrameId: e.parentFrameId,\n order: e.order,\n sourceIndex: e.sourceIndex,\n shader: p.shader ? shaders.get(p.shader) : undefined,\n };\n}\n","import type { Swimlane } from '../../../model/swimlane';\nimport type { SflCanvasObject } from '../../../sflSemantic/sflToCanvasState';\nimport { decodeShadow } from '../../styleDecoding';\nimport { dashArray, FONT_WEIGHTS, numOf, oneOf } from './values';\n\nexport function swimlaneObject(e: SflCanvasObject): Swimlane {\n const p = e.props;\n return {\n id: e.id,\n title: e.text ?? null,\n x: e.x,\n y: e.y,\n width: e.width,\n height: e.height,\n orientation: e.swimlane?.orientation ?? 'horizontal',\n lanes: e.swimlane?.lanes ?? [],\n fillColor: p.fill ?? 'rgba(107, 114, 128, 0.05)',\n strokeColor: p.stroke ?? '#6b7280',\n strokeWidth: numOf(p.strokeWidth) ?? 2,\n cornerRadius: numOf(p.cornerRadius) ?? 12,\n dash: dashArray(p.dash),\n shadowStyle: decodeShadow(p.shadow),\n textColor: p.textColor ?? '#6b7280',\n fontSize: numOf(p.fontSize) ?? 22,\n fontWeight: oneOf(p.fontWeight, FONT_WEIGHTS, 'bold'),\n fontFamily: p.fontFamily,\n showLaneLabels: p.showLaneLabels !== 'false',\n order: e.order,\n sourceIndex: e.sourceIndex,\n };\n}\n","import type { Chart } from '../../../model/chart';\nimport type { Component } from '../../../model/component';\nimport type { Connection } from '../../../model/connection';\nimport type { Frame } from '../../../model/frame';\nimport type { IsometricObject } from '../../../model/isometricObject';\nimport type { Link } from '../../../model/link';\nimport type { FreeformPath } from '../../../model/path';\nimport type { Shape } from '../../../model/shape';\nimport type { Swimlane } from '../../../model/swimlane';\nimport { isIsometricObject, type SflCanvasState, type SflComponentObject } from '../../../sflSemantic/sflToCanvasState';\nimport { chartObject } from './chart';\nimport { componentObject } from './component';\nimport { connectionObject } from './connection';\nimport { frameObject } from './frame';\nimport { isometricObject } from './isometric';\nimport { linkObject } from './link';\nimport { pathObject } from './path';\nimport { shapeObject } from './shape';\nimport { swimlaneObject } from './swimlane';\n\nexport interface CollectedCanvasObjects {\n shapes: Shape[];\n frames: Frame[];\n swimlanes: Swimlane[];\n isometricObjects: IsometricObject[];\n paths: FreeformPath[];\n charts: Chart[];\n components: Component[];\n links: Link[];\n connections: Connection[];\n}\n\nconst byOrder = <T extends { order?: number }>(items: readonly T[]): T[] =>\n [...items].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n\nexport function collectCanvasObjects(state: SflCanvasState): CollectedCanvasObjects {\n const canvasObjects = byOrder(state.canvasObjects);\n const shaders = new Map((state.shaders ?? []).map(shader => [shader.name, shader]));\n return {\n shapes: canvasObjects\n .filter(canvasObject => canvasObject.objectType === 'shape')\n .map(shape => shapeObject(shape, shaders)),\n frames: canvasObjects.filter(canvasObject => canvasObject.objectType === 'frame').map(frameObject),\n swimlanes: canvasObjects.filter(canvasObject => canvasObject.objectType === 'swimlane').map(swimlaneObject),\n isometricObjects: canvasObjects.filter(isIsometricObject).map(isometricObject),\n paths: canvasObjects.filter(canvasObject => canvasObject.objectType === 'path').map(pathObject),\n charts: canvasObjects.filter(canvasObject => canvasObject.objectType === 'chart').map(chartObject),\n components: canvasObjects\n .filter(\n (canvasObject): canvasObject is SflComponentObject =>\n canvasObject.objectType === 'component' && canvasObject.component !== undefined,\n )\n .map(componentObject),\n links: byOrder(state.links).map(linkObject),\n connections: byOrder(state.connections).map(connectionObject),\n };\n}\n","import { pointAtNormalizedPort } from '../../model/geometry/ports';\nimport { edgePointToward, elementCenter } from '../../model/geometry/rectangle';\nimport type { Point } from '../../model/geometry/types';\nimport type { Link } from '../../model/link';\nimport type { PositionedCanvasObject } from './types';\n\ntype LinkEndpoint = NonNullable<Link['fromPoint']>;\ntype LinkEnd = 'from' | 'to';\n\ninterface SelectedLinkEndpoint {\n canvasObjectId: string | undefined;\n oppositeCanvasObjectId: string | undefined;\n explicit: LinkEndpoint | undefined;\n}\n\nfunction sidePoint(canvasObject: PositionedCanvasObject, endpoint: Extract<LinkEndpoint, { side: unknown }>): Point {\n const offset = endpoint.offset ?? 0.5;\n switch (endpoint.side) {\n case 'top':\n return { x: canvasObject.x + canvasObject.width * offset, y: canvasObject.y };\n case 'right':\n return { x: canvasObject.x + canvasObject.width, y: canvasObject.y + canvasObject.height * offset };\n case 'bottom':\n return { x: canvasObject.x + canvasObject.width * offset, y: canvasObject.y + canvasObject.height };\n case 'left':\n return { x: canvasObject.x, y: canvasObject.y + canvasObject.height * offset };\n }\n}\n\nfunction namedPortPoint(\n canvasObject: PositionedCanvasObject,\n endpoint: Extract<LinkEndpoint, { kind: 'port' }>,\n): Point {\n const port = canvasObject.symbol?.ports?.find(candidate => candidate.name === endpoint.port);\n if (!port) {\n return elementCenter(canvasObject);\n }\n return pointAtNormalizedPort(\n {\n x: canvasObject.x,\n y: canvasObject.y,\n width: canvasObject.width,\n height: canvasObject.height,\n rotation: canvasObject.rotation ?? undefined,\n },\n port.at,\n );\n}\n\nexport function resolveLinkEndpoint(link: Link, end: LinkEnd, canvasObjects: PositionedCanvasObject[]): Point {\n const selected = selectLinkEndpoint(link, end);\n const absolutePoint = explicitAbsolutePoint(selected.explicit);\n if (absolutePoint) {\n return absolutePoint;\n }\n const canvasObject = findPositionedCanvasObject(canvasObjects, selected.canvasObjectId);\n if (!canvasObject) {\n return { x: 0, y: 0 };\n }\n const anchoredPoint = explicitAnchorPoint(canvasObject, selected.explicit);\n if (anchoredPoint) {\n return anchoredPoint;\n }\n return automaticEndpointPoint(\n canvasObject,\n findPositionedCanvasObject(canvasObjects, selected.oppositeCanvasObjectId),\n );\n}\n\nfunction selectLinkEndpoint(link: Link, end: LinkEnd): SelectedLinkEndpoint {\n return end === 'from'\n ? { canvasObjectId: link.fromId, oppositeCanvasObjectId: link.toId, explicit: link.fromPoint }\n : { canvasObjectId: link.toId, oppositeCanvasObjectId: link.fromId, explicit: link.toPoint };\n}\n\nfunction explicitAbsolutePoint(endpoint: LinkEndpoint | undefined): Point | null {\n return endpoint?.kind === 'absolute' ? { x: endpoint.x, y: endpoint.y } : null;\n}\n\nfunction explicitAnchorPoint(canvasObject: PositionedCanvasObject, endpoint: LinkEndpoint | undefined): Point | null {\n if (endpoint?.kind === 'port') {\n return namedPortPoint(canvasObject, endpoint);\n }\n if (endpoint?.kind === 'side') {\n return sidePoint(canvasObject, endpoint);\n }\n return null;\n}\n\nfunction automaticEndpointPoint(\n canvasObject: PositionedCanvasObject,\n opposite: PositionedCanvasObject | undefined,\n): Point {\n return opposite ? edgePointToward(canvasObject, opposite) : elementCenter(canvasObject);\n}\n\nfunction findPositionedCanvasObject(\n canvasObjects: PositionedCanvasObject[],\n id: string | undefined,\n): PositionedCanvasObject | undefined {\n return canvasObjects.find(candidate => candidate.id === id);\n}\n","import type { Connection } from '../../model/connection';\nimport type { Point } from '../../model/geometry/types';\nimport { type IsometricObject, isometricFaceCenter, VISIBLE_ISOMETRIC_FACES } from '../../model/isometricObject';\nimport type { Link } from '../../model/link';\nimport type { RenderInputLink } from '../types';\nimport type { CollectedCanvasObjects } from './canvasObjects/collect';\nimport { resolveLinkEndpoint } from './endpoint';\nimport type { PositionedCanvasObject } from './types';\n\nconst ISOMETRIC_SEQUENCE_BASE = 15_000;\n\nfunction positionedCanvasObjects(canvasObjects: CollectedCanvasObjects): PositionedCanvasObject[] {\n return [\n ...canvasObjects.shapes,\n ...canvasObjects.frames,\n ...canvasObjects.swimlanes,\n ...canvasObjects.paths,\n ...canvasObjects.charts,\n ];\n}\n\nfunction connectionEndpointPoint(object: IsometricObject | undefined, face: Connection['fromFace']): Point {\n return object ? isometricFaceCenter(object, face) : { x: 0, y: 0 };\n}\n\ninterface StackPosition {\n rank: number;\n sequence: number;\n}\n\nfunction isometricStackPosition(\n isometricObjects: IsometricObject[],\n id: string | undefined,\n): StackPosition | undefined {\n const index = isometricObjects.findIndex(object => object.id === id);\n if (index < 0) {\n return undefined;\n }\n const object = isometricObjects[index];\n return { rank: object.order ?? 0, sequence: object.sourceIndex ?? ISOMETRIC_SEQUENCE_BASE + index };\n}\n\nfunction connectionStack(\n isometricObjects: IsometricObject[],\n connection: Connection,\n): Pick<Connection, 'order' | 'sourceIndex'> {\n if (typeof connection.order === 'number') {\n return { order: connection.order, sourceIndex: connection.sourceIndex };\n }\n const behind = [\n VISIBLE_ISOMETRIC_FACES.has(connection.fromFace)\n ? undefined\n : isometricStackPosition(isometricObjects, connection.fromId),\n VISIBLE_ISOMETRIC_FACES.has(connection.toFace)\n ? undefined\n : isometricStackPosition(isometricObjects, connection.toId),\n ].filter((position): position is StackPosition => position !== undefined);\n if (!behind.length) {\n return { sourceIndex: connection.sourceIndex };\n }\n const lowest = behind.reduce((best, position) =>\n position.rank < best.rank || (position.rank === best.rank && position.sequence < best.sequence) ? position : best,\n );\n return { order: lowest.rank, sourceIndex: lowest.sequence - 0.5 };\n}\n\nfunction createRenderInputConnections(canvasObjects: CollectedCanvasObjects): RenderInputLink[] {\n const isometricById = new Map(canvasObjects.isometricObjects.map(object => [object.id, object]));\n return canvasObjects.connections.map(connection => {\n const link: Link = {\n id: connection.id,\n fromId: connection.fromId,\n toId: connection.toId,\n fromPoint: { kind: 'face', face: connection.fromFace },\n toPoint: { kind: 'face', face: connection.toFace },\n style: connection.style,\n ...connectionStack(canvasObjects.isometricObjects, connection),\n };\n return {\n link,\n from: connectionEndpointPoint(isometricById.get(connection.fromId ?? ''), connection.fromFace),\n to: connectionEndpointPoint(isometricById.get(connection.toId ?? ''), connection.toFace),\n kind: 'connection',\n };\n });\n}\n\nexport function createRenderInputLinks(canvasObjects: CollectedCanvasObjects): RenderInputLink[] {\n const positionedObjects = positionedCanvasObjects(canvasObjects);\n const links = canvasObjects.links.map(link => ({\n link,\n from: resolveLinkEndpoint(link, 'from', positionedObjects),\n to: resolveLinkEndpoint(link, 'to', positionedObjects),\n }));\n return [...links, ...createRenderInputConnections(canvasObjects)];\n}\n","import { sflToCanvasState } from '../../sflSemantic/sflToCanvasState';\nimport type { RenderInput } from '../types';\nimport { collectCanvasObjects } from './canvasObjects/collect';\nimport { createRenderInputLinks } from './links';\n\nexport function sflToRenderInput(sfl: string): RenderInput {\n const state = sflToCanvasState(sfl);\n const canvasObjects = collectCanvasObjects(state);\n return {\n shapes: canvasObjects.shapes,\n frames: canvasObjects.frames,\n swimlanes: canvasObjects.swimlanes,\n isometricObjects: canvasObjects.isometricObjects,\n paths: canvasObjects.paths,\n charts: canvasObjects.charts,\n components: canvasObjects.components,\n links: createRenderInputLinks(canvasObjects),\n diagnostics: state.diagnostics,\n };\n}\n","import type { Component } from '../../../model/component';\nimport { DEFAULT_FONT, finite, type RenderNode, rotatedBounds } from '../../scene';\n\nconst STROKE = '#94a3b8';\n\nexport function buildPlaceholder(component: Component, index: number): RenderNode[] {\n const x = finite(component.x, 0);\n const y = finite(component.y, 0);\n const width = Math.max(0, finite(component.width, 120));\n const height = Math.max(0, finite(component.height, 60));\n const rotation = finite(component.rotation, 0);\n const order = 10_000 + index;\n const bounds = rotatedBounds({ x, y, width, height }, rotation, 2);\n return [\n {\n id: `widget-${component.id}`,\n type: 'rect',\n order,\n bounds,\n x,\n y,\n width,\n height,\n rx: 6,\n rotation,\n style: { fill: { kind: 'none' }, stroke: { kind: 'solid', color: STROKE }, strokeWidth: 1, dash: [4, 3] },\n },\n {\n id: `widget-${component.id}-label`,\n type: 'text',\n order: order + 0.1,\n bounds,\n x,\n y,\n width,\n height,\n lines: [component.type],\n fontFamily: DEFAULT_FONT,\n fontSize: 12,\n fontWeight: 'normal',\n color: STROKE,\n align: 'center',\n verticalAlign: 'middle',\n lineHeight: 1.3,\n rotation,\n },\n ];\n}\n","import {\n formatRollingNumber,\n type RollingNumberComponent,\n type RulerComponent,\n resolveRollingNumberStyle,\n type TickScaleComponent,\n} from '../../../model/component';\nimport { DEFAULT_FONT, finite, type RenderNode, rotatedBounds } from '../../scene';\n\nexport function buildRollingNumber(component: RollingNumberComponent, index: number): RenderNode[] {\n const x = finite(component.x, 0);\n const y = finite(component.y, 0);\n const width = Math.max(0, finite(component.width, 160));\n const height = Math.max(0, finite(component.height, 90));\n const rotation = finite(component.rotation, 0);\n return [\n {\n id: `widget-${component.id}`,\n type: 'rolling-number',\n order: 10_000 + index,\n bounds: rotatedBounds({ x, y, width, height }, rotation, 2),\n x,\n y,\n width,\n height,\n rotation,\n value: formatRollingNumber(component.value, component.digits),\n digits: component.digits,\n duration: Math.max(0, finite(component.duration, 420)),\n label: component.label,\n componentStyle: resolveRollingNumberStyle(component.style),\n },\n ];\n}\n\nexport function buildTickScale(component: TickScaleComponent, index: number): RenderNode[] {\n const x = finite(component.x, 0);\n const y = finite(component.y, 0);\n const width = Math.max(0, finite(component.width, 200));\n const height = Math.max(0, finite(component.height, 200));\n const rotation = finite(component.rotation, 0);\n const max = finite(component.max, 100) || 100;\n const progress = Math.min(1, Math.max(0, finite(Number(component.value), 0) / max));\n const nodes: RenderNode[] = [\n {\n id: `widget-${component.id}`,\n type: 'shader-surface',\n order: 10_000 + index,\n bounds: rotatedBounds({ x, y, width, height }, rotation, 2),\n x,\n y,\n width,\n height,\n rotation,\n shader: { name: component.id, program: 'tickScale', parameters: { ...component.parameters, progress, max } },\n mask: 'ellipse',\n },\n ];\n if (component.labels) {\n nodes.push(...buildTickLabels(component, { x, y, width, height, rotation, max, order: 10_000 + index }));\n }\n return nodes;\n}\n\nfunction buildTickLabels(\n component: TickScaleComponent,\n box: { x: number; y: number; width: number; height: number; rotation: number; max: number; order: number },\n): RenderNode[] {\n const labels = component.labels ?? {};\n const ticks = Math.max(1, finite(Number(component.parameters.ticks), 48));\n const major = Math.max(1, finite(Number(component.parameters.major), 5));\n const start = (finite(Number(component.parameters.start), 225) * Math.PI) / 180;\n const sweep = (finite(Number(component.parameters.sweep), 270) * Math.PI) / 180;\n const radius = finite(Number(component.parameters.radius), 0.9) + finite(labels.offset, 0.08);\n const fontSize = finite(labels.size, 12);\n const centerX = box.x + box.width / 2;\n const centerY = box.y + box.height / 2;\n const count = Math.floor(ticks / major);\n const nodes: RenderNode[] = [];\n for (let step = 0; step <= count; step += 1) {\n const fraction = (step * major) / ticks;\n const angle = start - fraction * sweep;\n const labelX = centerX + Math.cos(angle) * radius * (box.width / 2);\n const labelY = centerY - Math.sin(angle) * radius * (box.height / 2);\n const labelBox = { x: labelX - 24, y: labelY - fontSize, width: 48, height: fontSize * 2 };\n nodes.push({\n id: `widget-${component.id}-label-${step}`,\n type: 'text',\n order: box.order + 0.1,\n bounds: rotatedBounds(labelBox, 0, 2),\n ...labelBox,\n lines: [String(Math.round(box.max * fraction * 10) / 10)],\n fontFamily: labels.fontFamily || DEFAULT_FONT,\n fontSize,\n fontWeight: (labels.weight ?? 'normal') as 'normal',\n color: labels.color || '#8f95c4',\n align: 'center',\n verticalAlign: 'middle',\n lineHeight: 1.3,\n });\n }\n return nodes;\n}\n\nexport function buildRuler(component: RulerComponent, index: number): RenderNode[] {\n const x = finite(component.x, 0);\n const y = finite(component.y, 0);\n const width = Math.max(0, finite(component.width, 120));\n const height = Math.max(0, finite(component.height, 360));\n const rotation = finite(component.rotation, 0);\n const min = finite(component.min, 0);\n const max = finite(component.max, 100);\n const progress =\n max === min ? 0 : Math.min(1, Math.max(0, (finite(Number(component.value), min) - min) / (max - min)));\n const nodes: RenderNode[] = [\n {\n id: `widget-${component.id}`,\n type: 'shader-surface',\n order: 10_000 + index,\n bounds: rotatedBounds({ x, y, width, height }, rotation, 2),\n x,\n y,\n width,\n height,\n rotation,\n shader: { name: component.id, program: 'ruler', parameters: { ...component.parameters, progress, min, max } },\n mask: 'rect',\n },\n ];\n if (component.labels) {\n nodes.push(...buildRulerLabels(component, { x, y, width, height, min, max, order: 10_000 + index }));\n }\n return nodes;\n}\n\nfunction buildRulerLabels(\n component: RulerComponent,\n box: { x: number; y: number; width: number; height: number; min: number; max: number; order: number },\n): RenderNode[] {\n const labels = component.labels ?? {};\n const horizontal = component.parameters.axis === 'horizontal';\n const ticks = Math.max(1, finite(Number(component.parameters.ticks), 50));\n const major = Math.max(1, finite(Number(component.parameters.major), 5));\n const inset =\n finite(Number(component.parameters.inset), 0.05) > 0 ? finite(Number(component.parameters.inset), 0.05) : 0.05;\n const line =\n finite(Number(component.parameters.line), 0.7) > 0 ? finite(Number(component.parameters.line), 0.7) : 0.7;\n const across = horizontal ? box.height : box.width;\n const tickLength =\n (finite(Number(component.parameters.length), 0.1) > 0 ? finite(Number(component.parameters.length), 0.1) : 0.1) *\n across *\n 1.9;\n const edge = line * across - 0.12 * across - tickLength - finite(labels.offset, 0.04) * across;\n const fontSize = finite(labels.size, 12);\n const count = Math.floor(ticks / major);\n const nodes: RenderNode[] = [];\n for (let step = 0; step <= count; step += 1) {\n const fraction = (step * major) / ticks;\n const along = inset + (1 - 2 * inset) * fraction;\n const labelBox = horizontal\n ? { x: box.x + box.width * along - 24, y: box.y + edge - fontSize * 2, width: 48, height: fontSize * 2 }\n : { x: box.x + edge - 48, y: box.y + box.height * (1 - along) - fontSize, width: 48, height: fontSize * 2 };\n nodes.push({\n id: `widget-${component.id}-label-${step}`,\n type: 'text',\n order: box.order + 0.1,\n bounds: rotatedBounds(labelBox, 0, 2),\n ...labelBox,\n lines: [String(Math.round((box.min + (box.max - box.min) * fraction) * 10) / 10)],\n fontFamily: labels.fontFamily || DEFAULT_FONT,\n fontSize,\n fontWeight: (labels.weight ?? 'normal') as 'normal',\n color: labels.color || '#8f95c4',\n align: horizontal ? 'center' : 'right',\n verticalAlign: 'middle',\n lineHeight: 1.3,\n });\n }\n return nodes;\n}\n","import type { GenericComponent } from '../../../model/component';\nimport { DEFAULT_FONT, finite, type RenderNode, rotatedBounds, type SceneStyle } from '../../scene';\n\nconst DISABLED_INK = '#94a3b8';\n\nexport interface ControlBox {\n x: number;\n y: number;\n width: number;\n height: number;\n order: number;\n}\n\nexport function controlBox(\n component: GenericComponent,\n index: number,\n fallback: { width: number; height: number },\n): ControlBox {\n return {\n x: finite(component.x, 0),\n y: finite(component.y, 0),\n width: Math.max(1, finite(component.width, fallback.width)),\n height: Math.max(1, finite(component.height, fallback.height)),\n order: 10_000 + index,\n };\n}\n\nexport const textProperty = (component: GenericComponent, key: string): string =>\n String(component.properties[key] ?? '');\n\nexport const numberProperty = (component: GenericComponent, key: string): number =>\n Number(component.properties[key] ?? 0);\n\nexport const solid = (color: string) => ({ kind: 'solid', color }) as const;\n\nexport const ink = (component: GenericComponent, color: string): string => (component.disabled ? DISABLED_INK : color);\n\nexport function fade(component: GenericComponent, style: SceneStyle): SceneStyle {\n return component.disabled ? { ...style, opacity: 0.4 } : style;\n}\n\nexport function hitArea(component: GenericComponent, box: ControlBox): RenderNode {\n return {\n id: `widget-${component.id}`,\n type: 'rect',\n order: box.order,\n bounds: rotatedBounds(box, 0, 0),\n x: box.x,\n y: box.y,\n width: box.width,\n height: box.height,\n style: { fill: { kind: 'none' }, stroke: { kind: 'none' }, pointerEvents: 'all' },\n };\n}\n\nexport function labelText(\n component: GenericComponent,\n part: string,\n area: { x: number; y: number; width: number; height: number },\n label: { text: string; color: string; fontSize: number; align: 'left' | 'center' },\n order: number,\n): RenderNode {\n return {\n id: `widget-${component.id}-${part}`,\n type: 'text',\n order,\n bounds: rotatedBounds(area, 0, 0),\n x: area.x,\n y: area.y,\n width: area.width,\n height: area.height,\n lines: [label.text],\n fontFamily: DEFAULT_FONT,\n fontSize: label.fontSize,\n fontWeight: '600',\n color: label.color,\n align: label.align,\n verticalAlign: 'middle',\n lineHeight: 1.3,\n };\n}\n","import type { GenericComponent } from '../../../model/component';\nimport { type RenderNode, rotatedBounds } from '../../scene';\nimport { controlBox, fade, hitArea, ink, labelText, numberProperty, solid, textProperty } from './controlParts';\n\nexport function buildButton(component: GenericComponent, index: number): RenderNode[] {\n const box = controlBox(component, index, { width: 120, height: 40 });\n const nodes: RenderNode[] = [\n hitArea(component, box),\n {\n id: `widget-${component.id}-face`,\n type: 'rect',\n order: box.order + 0.1,\n bounds: rotatedBounds(box, 0, 0),\n x: box.x,\n y: box.y,\n width: box.width,\n height: box.height,\n rx: Math.min(numberProperty(component, 'radius'), box.height / 2),\n style: fade(component, { fill: solid(textProperty(component, 'accent')), stroke: { kind: 'none' } }),\n },\n ];\n if (component.label) {\n const label = {\n text: component.label,\n color: ink(component, textProperty(component, 'textColor')),\n fontSize: numberProperty(component, 'fontSize'),\n align: 'center',\n } as const;\n nodes.push(labelText(component, 'label', box, label, box.order + 0.2));\n }\n return nodes;\n}\n","import type { GenericComponent } from '../../../model/component';\nimport { type RenderNode, rotatedBounds } from '../../scene';\nimport {\n type ControlBox,\n controlBox,\n fade,\n hitArea,\n ink,\n labelText,\n numberProperty,\n solid,\n textProperty,\n} from './controlParts';\n\nconst CORNER_RATIO = 0.22;\nconst LABEL_GAP_RATIO = 0.5;\nconst CHECK_MARK = [\n [0.24, 0.52],\n [0.43, 0.72],\n [0.78, 0.3],\n] as const;\n\ninterface Square {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nfunction checkPath(square: Square): string {\n const [first, ...rest] = CHECK_MARK.map(([u, v]) => `${square.x + u * square.width} ${square.y + v * square.width}`);\n return `M ${first} ${rest.map(point => `L ${point}`).join(' ')}`;\n}\n\nfunction boxNode(component: GenericComponent, box: ControlBox, square: Square): RenderNode {\n const on = component.value === true;\n return {\n id: `widget-${component.id}-box`,\n type: 'rect',\n order: box.order + 0.1,\n bounds: rotatedBounds(square, 0, 2),\n ...square,\n rx: square.width * CORNER_RATIO,\n style: fade(component, {\n fill: on ? solid(textProperty(component, 'accent')) : { kind: 'none' },\n stroke: solid(on ? textProperty(component, 'accent') : textProperty(component, 'stroke')),\n strokeWidth: 1.5,\n }),\n };\n}\n\nfunction checkNode(component: GenericComponent, box: ControlBox, square: Square): RenderNode {\n return {\n id: `widget-${component.id}-check`,\n type: 'path',\n order: box.order + 0.2,\n bounds: rotatedBounds(square, 0, 0),\n d: checkPath(square),\n style: fade(component, {\n fill: { kind: 'none' },\n stroke: solid(textProperty(component, 'check')),\n strokeWidth: Math.max(1.5, square.width * 0.12),\n lineCap: 'round',\n lineJoin: 'round',\n }),\n };\n}\n\nfunction labelNode(component: GenericComponent, box: ControlBox, side: number, text: string): RenderNode {\n const gap = side * LABEL_GAP_RATIO;\n const area = { x: box.x + side + gap, y: box.y, width: Math.max(0, box.width - side - gap), height: box.height };\n const label = {\n text,\n color: ink(component, textProperty(component, 'textColor')),\n fontSize: numberProperty(component, 'fontSize'),\n align: 'left',\n } as const;\n return labelText(component, 'label', area, label, box.order + 0.3);\n}\n\nexport function buildCheckbox(component: GenericComponent, index: number): RenderNode[] {\n const box = controlBox(component, index, { width: 160, height: 24 });\n const side = Math.min(box.height, box.width);\n const square = { x: box.x, y: box.y + (box.height - side) / 2, width: side, height: side };\n return [\n hitArea(component, box),\n boxNode(component, box, square),\n ...(component.value === true ? [checkNode(component, box, square)] : []),\n ...(component.label ? [labelNode(component, box, side, component.label)] : []),\n ];\n}\n","import type { GenericComponent } from '../../../model/component';\nimport { type RenderNode, rotatedBounds } from '../../scene';\nimport { controlBox, fade, hitArea, solid, textProperty } from './controlParts';\n\nconst PADDING_RATIO = 0.12;\n\nexport function buildSwitch(component: GenericComponent, index: number): RenderNode[] {\n const box = controlBox(component, index, { width: 52, height: 30 });\n const on = component.value === true;\n const padding = box.height * PADDING_RATIO;\n const radius = box.height / 2 - padding;\n const centerX = on ? box.x + box.width - box.height / 2 : box.x + box.height / 2;\n const thumb = { x: centerX - radius, y: box.y + padding, width: radius * 2, height: radius * 2 };\n return [\n hitArea(component, box),\n {\n id: `widget-${component.id}-track`,\n type: 'rect',\n order: box.order + 0.1,\n bounds: rotatedBounds(box, 0, 0),\n x: box.x,\n y: box.y,\n width: box.width,\n height: box.height,\n rx: box.height / 2,\n style: fade(component, {\n fill: solid(textProperty(component, on ? 'accent' : 'track')),\n stroke: { kind: 'none' },\n }),\n },\n {\n id: `widget-${component.id}-thumb`,\n type: 'ellipse',\n order: box.order + 0.2,\n bounds: rotatedBounds(thumb, 0, 0),\n cx: centerX,\n cy: box.y + box.height / 2,\n rx: radius,\n ry: radius,\n style: fade(component, {\n fill: solid(textProperty(component, 'thumb')),\n stroke: { kind: 'none' },\n shadow: { color: '#000000', opacity: 0.25, blur: 2, dx: 0, dy: 1 },\n }),\n },\n ];\n}\n","import type { GenericComponent } from '../../../model/component';\nimport { type RenderNode, rotatedBounds } from '../../scene';\nimport { controlBox, fade, hitArea, ink, labelText, numberProperty, solid, textProperty } from './controlParts';\n\nexport function buildToggleButton(component: GenericComponent, index: number): RenderNode[] {\n const box = controlBox(component, index, { width: 120, height: 40 });\n const on = component.value === true;\n const nodes: RenderNode[] = [\n hitArea(component, box),\n {\n id: `widget-${component.id}-face`,\n type: 'rect',\n order: box.order + 0.1,\n bounds: rotatedBounds(box, 0, 2),\n x: box.x,\n y: box.y,\n width: box.width,\n height: box.height,\n rx: box.height / 2,\n style: fade(component, {\n fill: on ? solid(textProperty(component, 'accent')) : { kind: 'none' },\n stroke: solid(on ? textProperty(component, 'accent') : textProperty(component, 'stroke')),\n strokeWidth: 1.5,\n }),\n },\n ];\n if (component.label) {\n const label = {\n text: component.label,\n color: ink(component, textProperty(component, on ? 'onTextColor' : 'textColor')),\n fontSize: numberProperty(component, 'fontSize'),\n align: 'center',\n } as const;\n nodes.push(labelText(component, 'label', box, label, box.order + 0.2));\n }\n return nodes;\n}\n","import type { Component, ComponentType } from '../../../model/component';\nimport type { RenderNode } from '../../scene';\nimport { buildRollingNumber, buildRuler, buildTickScale } from './builtIn';\nimport { buildButton } from './button';\nimport { buildCheckbox } from './checkbox';\nimport { buildSwitch } from './switch';\nimport { buildToggleButton } from './toggleButton';\n\nexport type ComponentBuilder = (component: Component, index: number) => RenderNode[];\n\nconst asComponentBuilder =\n <T extends Component>(build: (component: T, index: number) => RenderNode[]): ComponentBuilder =>\n (component, index) =>\n build(component as T, index);\n\nconst builders = new Map<ComponentType, ComponentBuilder>([\n ['rollingNumber', asComponentBuilder(buildRollingNumber)],\n ['tickScale', asComponentBuilder(buildTickScale)],\n ['ruler', asComponentBuilder(buildRuler)],\n ['switch', asComponentBuilder(buildSwitch)],\n ['checkbox', asComponentBuilder(buildCheckbox)],\n ['toggleButton', asComponentBuilder(buildToggleButton)],\n ['button', asComponentBuilder(buildButton)],\n]);\n\nexport function registerComponentBuilder(type: ComponentType, builder: ComponentBuilder): () => void {\n builders.set(type, builder);\n return () => {\n if (builders.get(type) === builder) {\n builders.delete(type);\n }\n };\n}\n\nexport function getComponentBuilder(type: ComponentType): ComponentBuilder | undefined {\n return builders.get(type);\n}\n","import { type Component, getComponentDescriptor, isGenericComponent } from '../../../model/component';\nimport type { RenderNode, SceneAria } from '../../scene';\nimport { tag } from '../../scene/tagging';\nimport { buildPlaceholder } from './placeholder';\nimport { getComponentBuilder } from './registry';\n\nfunction ariaOf(component: Component): SceneAria | undefined {\n const role = getComponentDescriptor(component.type)?.role;\n if (!role || !isGenericComponent(component)) {\n return undefined;\n }\n const flag = typeof component.value === 'boolean' ? component.value : undefined;\n return {\n role,\n ...(flag === undefined ? {} : role === 'button' ? { pressed: flag } : { checked: flag }),\n ...(component.disabled ? { disabled: true } : {}),\n };\n}\n\nfunction labelOf(component: Component): string {\n return component.label ?? (isGenericComponent(component) ? component.id : String(component.value));\n}\n\nexport function buildComponents(components: readonly Component[]): RenderNode[] {\n return components.flatMap((component, index) => {\n const build = getComponentBuilder(component.type) ?? buildPlaceholder;\n const nodes = tag(\n build(component, index),\n 'widget',\n component.id,\n component.type,\n labelOf(component),\n component.parentFrameId,\n );\n const aria = ariaOf(component);\n const primary = nodes.find(node => node.identity?.primary);\n if (aria && primary?.identity) {\n primary.identity.aria = aria;\n }\n return nodes;\n });\n}\n","import type { SceneStyle } from '../../scene';\n\nexport function simpleContainerStyle(fill: string, stroke: string, strokeWidth: number, dash?: number[]): SceneStyle {\n return {\n fill: { kind: 'solid', color: fill || 'transparent' },\n stroke: { kind: 'solid', color: stroke },\n strokeWidth,\n dash: dash?.length ? dash : undefined,\n };\n}\n","import type { Bounds, RenderNode } from '../../scene';\nimport { boxBounds, DEFAULT_FONT } from '../../scene';\nimport {\n bottomRoundedRectPath,\n leftRoundedRectPath,\n rightRoundedRectPath,\n topRoundedRectPath,\n} from '../../scene/roundedRectPath';\n\nexport type TitleTabPosition = 'top' | 'bottom' | 'left' | 'right';\n\nexport interface TitleTabInput {\n tabId: string;\n titleId: string;\n x: number;\n y: number;\n width: number;\n height: number;\n cornerRadius: number;\n strokeWidth: number;\n title: string;\n color: string;\n textColor: string;\n fontFamily?: string;\n fontSize: number;\n fontWeight: 'normal' | 'bold';\n labelPosition: TitleTabPosition;\n order: number;\n}\n\ninterface TabBox {\n x: number;\n y: number;\n width: number;\n height: number;\n path: string;\n}\n\nconst TAB_RADIUS = 8;\n\nfunction tabBox(input: TitleTabInput, thickness: number, length: number): TabBox {\n const inset = input.strokeWidth / 2;\n switch (input.labelPosition) {\n case 'bottom': {\n const x = input.x - inset;\n const y = input.y + input.height;\n return {\n x,\n y,\n width: length,\n height: thickness,\n path: bottomRoundedRectPath(x, y, length, thickness, TAB_RADIUS),\n };\n }\n case 'left': {\n const x = input.x - thickness;\n const y = input.y - inset;\n return { x, y, width: thickness, height: length, path: leftRoundedRectPath(x, y, thickness, length, TAB_RADIUS) };\n }\n case 'right': {\n const x = input.x + input.width;\n const y = input.y - inset;\n return {\n x,\n y,\n width: thickness,\n height: length,\n path: rightRoundedRectPath(x, y, thickness, length, TAB_RADIUS),\n };\n }\n default: {\n const x = input.x - inset;\n const y = input.y - thickness;\n return { x, y, width: length, height: thickness, path: topRoundedRectPath(x, y, length, thickness, TAB_RADIUS) };\n }\n }\n}\n\nexport function renderTitleTab(input: TitleTabInput): RenderNode[] {\n const thickness = Math.max(32, input.fontSize + 18);\n const padding = 16;\n const length = Math.max(120, input.title.length * input.fontSize * 0.62 + padding * 2);\n const box = tabBox(input, thickness, length);\n const bounds = boxBounds(box, 6);\n const vertical = input.labelPosition === 'left' || input.labelPosition === 'right';\n return [\n {\n type: 'path',\n id: input.tabId,\n order: input.order + 0.1,\n bounds,\n d: box.path,\n style: {\n fill: { kind: 'solid', color: input.color },\n stroke: { kind: 'none' },\n },\n },\n vertical ? verticalTitleText(input, box, padding, bounds) : horizontalTitleText(input, box, padding, bounds),\n ];\n}\n\nfunction horizontalTitleText(input: TitleTabInput, box: TabBox, padding: number, bounds: Bounds): RenderNode {\n return {\n type: 'text',\n id: input.titleId,\n order: input.order + 0.2,\n bounds,\n x: box.x + padding,\n y: box.y,\n width: Math.max(0, box.width - padding * 2),\n height: box.height,\n lines: [input.title],\n fontFamily: input.fontFamily ?? DEFAULT_FONT,\n fontSize: input.fontSize,\n fontWeight: input.fontWeight,\n color: input.textColor,\n align: 'left',\n verticalAlign: 'middle',\n lineHeight: 1.2,\n };\n}\n\nfunction verticalTitleText(input: TitleTabInput, box: TabBox, padding: number, bounds: Bounds): RenderNode {\n const centerX = box.x + box.width / 2;\n const centerY = box.y + box.height / 2;\n const textThickness = input.fontSize * 1.4;\n const textLength = Math.max(1, box.height - padding * 2);\n return {\n type: 'text',\n id: input.titleId,\n order: input.order + 0.2,\n bounds,\n x: centerX - textLength / 2,\n y: centerY - textThickness / 2,\n width: textLength,\n height: textThickness,\n lines: [input.title],\n fontFamily: input.fontFamily ?? DEFAULT_FONT,\n fontSize: input.fontSize,\n fontWeight: input.fontWeight,\n color: input.textColor,\n align: 'center',\n verticalAlign: 'middle',\n lineHeight: 1.2,\n rotation: -90,\n rotationCenter: { x: centerX, y: centerY },\n };\n}\n","import type { Frame } from '../../../model/frame';\nimport type { RenderNode } from '../../scene';\nimport { boxBounds } from '../../scene';\nimport { cornersRoundedRectPath, type RectCornerRadii } from '../../scene/roundedRectPath';\nimport { simpleContainerStyle } from './style';\nimport { renderTitleTab, type TitleTabPosition } from './titleTab';\n\nconst SQUARED_CORNER_BY_LABEL_POSITION: Record<TitleTabPosition, keyof RectCornerRadii> = {\n top: 'topLeft',\n bottom: 'bottomLeft',\n left: 'topLeft',\n right: 'topRight',\n};\n\nfunction frameBoundaryNode(frame: Frame, order: number, hasTab: boolean): RenderNode {\n const shadow = frame.shadow ?? true;\n const bounds = boxBounds(\n { x: frame.x, y: frame.y, width: frame.width, height: frame.height },\n frame.strokeWidth + (shadow ? 20 : 4),\n );\n const style = {\n ...simpleContainerStyle(frame.fillColor, frame.strokeColor, frame.strokeWidth, frame.dash),\n shadow: shadow ? { color: '#000000', opacity: 0.2, blur: 12, dx: 0, dy: 4 } : undefined,\n };\n if (!hasTab) {\n return {\n type: 'rect',\n id: `frame-${frame.id}`,\n order,\n bounds,\n x: frame.x,\n y: frame.y,\n width: frame.width,\n height: frame.height,\n rx: frame.cornerRadius,\n style,\n };\n }\n const squared = SQUARED_CORNER_BY_LABEL_POSITION[frame.labelPosition ?? 'top'];\n const radii: RectCornerRadii = {\n topLeft: frame.cornerRadius,\n topRight: frame.cornerRadius,\n bottomRight: frame.cornerRadius,\n bottomLeft: frame.cornerRadius,\n [squared]: 0,\n };\n return {\n type: 'path',\n id: `frame-${frame.id}`,\n order,\n bounds,\n d: cornersRoundedRectPath(frame.x, frame.y, frame.width, frame.height, radii),\n detail: { of: 'frameBoundary', cornerRadius: frame.cornerRadius, squareCorner: squared },\n style,\n };\n}\n\nexport function buildFrame(frame: Frame, index: number): RenderNode[] {\n if (frame.isVisible === false) {\n return [];\n }\n const order = index;\n const hasTab = (frame.showLabel ?? true) && Boolean(frame.title);\n const nodes: RenderNode[] = [frameBoundaryNode(frame, order, hasTab)];\n if (hasTab && frame.title) {\n nodes.push(\n ...renderTitleTab({\n tabId: `frame-tab-${frame.id}`,\n titleId: `frame-title-${frame.id}`,\n x: frame.x,\n y: frame.y,\n width: frame.width,\n height: frame.height,\n cornerRadius: frame.cornerRadius,\n strokeWidth: frame.strokeWidth,\n title: frame.title,\n color: frame.strokeColor,\n textColor: frame.textColor,\n fontFamily: frame.fontFamily,\n fontSize: frame.fontSize,\n fontWeight: frame.fontWeight,\n labelPosition: frame.labelPosition ?? 'top',\n order,\n }),\n );\n }\n return nodes;\n}\n","import type { ShadowStyle } from '../../model/shadow';\n\nexport interface ResolvedShadow {\n color: string;\n opacity: number;\n blur: number;\n dx: number;\n dy: number;\n}\n\nexport const DEFAULT_SHADOW_STYLE: ShadowStyle = {\n enabled: false,\n color: '#000000',\n opacity: 0.3,\n blur: 10,\n angle: 45,\n distance: 4,\n};\n\nexport function getShadowOffset(angle: number, distance: number): { x: number; y: number } {\n const rad = (angle * Math.PI) / 180;\n return {\n x: Math.cos(rad) * distance,\n y: Math.sin(rad) * distance,\n };\n}\n\nexport function resolveShadow(shadow: ShadowStyle | undefined): ResolvedShadow | undefined {\n if (!shadow?.enabled) {\n return undefined;\n }\n const offset = getShadowOffset(shadow.angle ?? 45, shadow.distance ?? 5);\n return {\n color: shadow.color ?? '#000000',\n opacity: shadow.opacity ?? 0.25,\n blur: shadow.blur ?? 10,\n dx: offset.x,\n dy: offset.y,\n };\n}\n","import type { RenderNode } from '../../../scene';\nimport type { SwimlaneRenderContext } from './types';\n\nfunction dividerPath(context: SwimlaneRenderContext, offset: number): string {\n const { swimlane } = context;\n if (swimlane.orientation === 'horizontal') {\n return `M ${swimlane.x} ${swimlane.y + offset} H ${swimlane.x + swimlane.width}`;\n }\n return `M ${swimlane.x + offset} ${swimlane.y} V ${swimlane.y + swimlane.height}`;\n}\n\nexport function renderLaneDividers(context: SwimlaneRenderContext): RenderNode[] {\n return context.lanes.slice(1).map((lane, index) => ({\n type: 'path',\n id: `swimlane-divider-${context.swimlane.id}-${index}`,\n order: context.order + 0.1 + index / 100,\n bounds: context.bounds,\n d: dividerPath(context, lane.offset),\n style: {\n fill: { kind: 'none' },\n stroke: { kind: 'solid', color: context.swimlane.strokeColor },\n strokeWidth: context.swimlane.strokeWidth,\n },\n }));\n}\n","import type { RenderNode, SceneText } from '../../../scene';\nimport { DEFAULT_FONT, rotatedBounds } from '../../../scene';\nimport type { PositionedLane, SwimlaneRenderContext } from './types';\n\nfunction labelBase(context: SwimlaneRenderContext, lane: PositionedLane, index: number) {\n return {\n type: 'text' as const,\n id: `swimlane-label-${context.swimlane.id}-${lane.id}`,\n order: context.order + 0.5 + index / 100,\n lines: [lane.label],\n fontFamily: context.swimlane.fontFamily ?? DEFAULT_FONT,\n fontSize: context.swimlane.fontSize,\n fontWeight: context.swimlane.fontWeight,\n color: context.swimlane.textColor,\n lineHeight: 1.2,\n };\n}\n\nfunction horizontalLabel(context: SwimlaneRenderContext, lane: PositionedLane, index: number): SceneText {\n const thickness = context.swimlane.fontSize * 1.4;\n const centerX = context.swimlane.x + 10 + thickness / 2;\n const centerY = context.swimlane.y + lane.offset + lane.size / 2;\n const width = Math.max(20, lane.size - 16);\n const x = centerX - width / 2;\n const y = centerY - thickness / 2;\n return {\n ...labelBase(context, lane, index),\n bounds: rotatedBounds({ x, y, width, height: thickness }, -90, 12),\n x,\n y,\n width,\n height: thickness,\n align: 'center',\n verticalAlign: 'middle',\n rotation: -90,\n rotationCenter: { x: centerX, y: centerY },\n };\n}\n\nfunction verticalLabel(context: SwimlaneRenderContext, lane: PositionedLane, index: number): SceneText {\n return {\n ...labelBase(context, lane, index),\n bounds: context.bounds,\n x: context.swimlane.x + lane.offset + 8,\n y: context.swimlane.y + 8,\n width: Math.max(0, lane.size - 16),\n height: Math.max(0, context.swimlane.height - 16),\n align: 'left',\n verticalAlign: 'top',\n };\n}\n\nexport function renderLaneLabels(context: SwimlaneRenderContext): RenderNode[] {\n if (!context.swimlane.showLaneLabels) {\n return [];\n }\n const render = context.swimlane.orientation === 'horizontal' ? horizontalLabel : verticalLabel;\n return context.lanes.map((lane, index) => render(context, lane, index));\n}\n","import type { Lane, Swimlane } from '../../../../model/swimlane';\nimport { boxBounds } from '../../../scene';\nimport type { PositionedLane, SwimlaneRenderContext } from './types';\n\nfunction normalizeLanes(swimlane: Swimlane): Lane[] {\n const targetSize = swimlane.orientation === 'horizontal' ? swimlane.height : swimlane.width;\n const total = swimlane.lanes.reduce((sum, lane) => sum + lane.size, 0);\n if (total <= 0 || targetSize <= 0) {\n return swimlane.lanes;\n }\n return swimlane.lanes.map(lane => ({ ...lane, size: lane.size * (targetSize / total) }));\n}\n\nfunction positionLanes(swimlane: Swimlane): PositionedLane[] {\n let offset = 0;\n return normalizeLanes(swimlane).map(lane => {\n const positioned = { ...lane, offset };\n offset += lane.size;\n return positioned;\n });\n}\n\nexport function createSwimlaneRenderContext(swimlane: Swimlane, index: number): SwimlaneRenderContext {\n return {\n swimlane,\n order: 5_000 + index,\n bounds: boxBounds(\n { x: swimlane.x, y: swimlane.y, width: swimlane.width, height: swimlane.height },\n swimlane.strokeWidth + 4,\n ),\n lanes: positionLanes(swimlane),\n };\n}\n","import type { Swimlane } from '../../../../model/swimlane';\nimport type { RenderNode } from '../../../scene';\nimport { resolveShadow } from '../../../scene/shadow';\nimport { simpleContainerStyle } from '../style';\nimport { renderLaneDividers } from './dividers';\nimport { renderLaneLabels } from './labels';\nimport { createSwimlaneRenderContext } from './layout';\n\nexport function buildSwimlane(swimlane: Swimlane, index: number): RenderNode[] {\n if (swimlane.isVisible === false) {\n return [];\n }\n const context = createSwimlaneRenderContext(swimlane, index);\n return [\n {\n type: 'rect',\n id: `swimlane-${swimlane.id}`,\n order: context.order,\n bounds: context.bounds,\n x: swimlane.x,\n y: swimlane.y,\n width: swimlane.width,\n height: swimlane.height,\n rx: swimlane.cornerRadius,\n style: {\n ...simpleContainerStyle(swimlane.fillColor, swimlane.strokeColor, swimlane.strokeWidth, swimlane.dash),\n shadow: resolveShadow(swimlane.shadowStyle),\n },\n },\n ...renderLaneDividers(context),\n ...renderLaneLabels(context),\n ];\n}\n","import type { RenderInput } from '../../renderInput/types';\nimport type { RenderNode } from '../scene';\nimport { tag } from '../scene/tagging';\nimport { buildFrame } from './container/frame';\nimport { buildSwimlane } from './container/swimlane';\n\nexport {\n bottomRoundedRectPath,\n leftRoundedRectPath,\n rightRoundedRectPath,\n topRoundedRectPath,\n} from '../scene/roundedRectPath';\nexport { buildFrame } from './container/frame';\nexport { simpleContainerStyle } from './container/style';\nexport { buildSwimlane } from './container/swimlane';\n\nexport function buildContainers(input: Pick<RenderInput, 'frames' | 'swimlanes'>): RenderNode[] {\n return [\n ...input.frames.flatMap((frame, index) =>\n tag(buildFrame(frame, index), 'frame', frame.id, undefined, frame.title ?? undefined),\n ),\n ...input.swimlanes.flatMap((swimlane, index) => tag(buildSwimlane(swimlane, index), 'swimlane', swimlane.id)),\n ];\n}\n","import {\n deriveFaceFills,\n type IsometricObject,\n isometricBounds,\n isometricFaces,\n isometricTopFaceCenter,\n} from '../../model/isometricObject';\nimport type { RenderNode, ScenePath, SceneRect, SceneText } from '../scene';\nimport { DEFAULT_FONT, finite, rotatedBounds } from '../scene';\nimport { roundedPolygonPath } from '../scene/roundedPolygonPath';\nimport { tag } from '../scene/tagging';\n\ntype Faces = ReturnType<typeof isometricFaces>;\ntype Point = { x: number; y: number };\ntype HullClip = { type: 'path'; d: string };\n\ninterface IsometricContext {\n object: IsometricObject;\n index: number;\n order: number;\n rotation: number;\n rotationCenter: Point;\n box: ReturnType<typeof isometricBounds>;\n strokeWidth: number;\n common: {\n type: 'path';\n bounds: ReturnType<typeof rotatedBounds>;\n rotation: number;\n rotationCenter: Point;\n style: NonNullable<ScenePath['style']>;\n };\n}\n\nfunction isometricContext(object: IsometricObject, index: number): IsometricContext {\n const strokeWidth = Math.max(0, finite(object.strokeWidth, 1));\n const rotation = finite(object.rotation, 0);\n const box = isometricBounds(object);\n const rotationCenter = { x: box.x + box.width / 2, y: box.y + box.height / 2 };\n return {\n object,\n index,\n order: 15_000 + index,\n rotation,\n rotationCenter,\n box,\n strokeWidth,\n common: {\n type: 'path' as const,\n bounds: rotatedBounds(box, rotation, strokeWidth + 2),\n rotation,\n rotationCenter,\n style: {\n stroke: { kind: 'solid' as const, color: object.strokeColor ?? '#111827' },\n strokeWidth,\n lineJoin: 'round' as const,\n },\n },\n };\n}\n\nfunction groundShadowNode(context: IsometricContext, faces: Faces): ScenePath | undefined {\n const { object, index, rotation, rotationCenter } = context;\n if (!object.hasShadow) {\n return undefined;\n }\n const height = Math.max(0, object.height);\n const heightFactor = 0.6 + Math.min(1, height / 150) * 0.7;\n const shadowDrop = height + finite(object.shadowStyle?.distance, 0);\n const contactFootprint = faces.top.map(point => ({ x: point.x, y: point.y + shadowDrop }));\n const footprintCenter = {\n x: contactFootprint.reduce((sum, point) => sum + point.x, 0) / contactFootprint.length,\n y: contactFootprint.reduce((sum, point) => sum + point.y, 0) / contactFootprint.length,\n };\n const shadowSpread = 1.3;\n const footprint = contactFootprint.map(point => ({\n x: footprintCenter.x + (point.x - footprintCenter.x) * shadowSpread,\n y: footprintCenter.y + (point.y - footprintCenter.y) * shadowSpread,\n }));\n const footprintXs = footprint.map(point => point.x);\n const footprintYs = footprint.map(point => point.y);\n return {\n type: 'path',\n id: `isometric-${object.id}-ground-shadow`,\n order: 14_000 + index,\n bounds: {\n minX: Math.min(...footprintXs),\n minY: Math.min(...footprintYs),\n maxX: Math.max(...footprintXs),\n maxY: Math.max(...footprintYs),\n },\n d: roundedPolygonPath(footprint, 0),\n rotation,\n rotationCenter,\n style: {\n fill: { kind: 'solid', color: object.shadowStyle?.color ?? '#000000' },\n stroke: { kind: 'none' },\n opacity: Math.min(1, (object.shadowStyle?.opacity ?? 0.18) * heightFactor),\n blur: finite(object.shadowStyle?.blur, 8),\n pointerEvents: 'none',\n },\n };\n}\n\nfunction faceNodes(context: IsometricContext, faces: Faces, hullClip: HullClip): ScenePath[] {\n const { object, order, common } = context;\n const noStroke = { ...common.style, stroke: { kind: 'none' as const } };\n const faceFills = deriveFaceFills(object.fill ?? '#f8fafc');\n const colorProp = { prop: 'style.fill', propKind: 'color' as const, propSolidOnly: true };\n const face = (name: string, offset: number, points: Faces['top'], color: string): ScenePath => ({\n ...common,\n id: `isometric-${object.id}-${name}`,\n order: order + offset,\n d: roundedPolygonPath(points, 0),\n style: { ...noStroke, fill: { kind: 'solid', color }, clip: hullClip },\n ...colorProp,\n });\n return [\n face('top', 0, faces.top, faceFills.topFill),\n face('front', 0.1, faces.front, faceFills.frontFill),\n face('side', 0.2, faces.right, faceFills.sideFill),\n ];\n}\n\nfunction seamsNode(context: IsometricContext, faces: Faces, hullClip: HullClip): ScenePath {\n const { object, order, common, strokeWidth } = context;\n return {\n ...common,\n id: `isometric-${object.id}-seams`,\n order: order + 0.22,\n d: `M ${faces.top[3].x} ${faces.top[3].y} L ${faces.top[2].x} ${faces.top[2].y} L ${faces.top[1].x} ${faces.top[1].y} M ${faces.top[2].x} ${faces.top[2].y} L ${faces.front[2].x} ${faces.front[2].y}`,\n style: {\n ...common.style,\n fill: { kind: 'none' },\n stroke: { kind: 'solid', color: '#cbd5e1' },\n strokeWidth: Math.min(strokeWidth, 1),\n clip: hullClip,\n },\n };\n}\n\nfunction hullNode(context: IsometricContext, hullPath: string, cornerRadius: number): ScenePath {\n const { object, order, common, box } = context;\n return {\n ...common,\n id: `isometric-${object.id}-hull`,\n order: order + 0.24,\n d: hullPath,\n detail: {\n of: 'isometricGeometry',\n width: Math.max(0, object.width),\n height: Math.max(0, object.height),\n depth: Math.max(0, object.depth),\n cornerRadius,\n bounds: box,\n labelOffsetX: finite(object.labelOffsetX, 0),\n labelOffsetY: finite(object.labelOffsetY, 0),\n },\n style: { ...common.style, fill: { kind: 'none' } },\n };\n}\n\nconst LABEL_HEIGHT = 20;\nconst LABEL_GAP = 12;\nconst LABEL_PADDING_X = 6;\nconst LABEL_PADDING_Y = 3;\nconst LABEL_CHAR_WIDTH = 6.5;\n\ninterface LabelPlacement {\n anchor: Point;\n centerX: number;\n topY: number;\n bottomY: number;\n}\n\nfunction labelPlacement(context: IsometricContext): LabelPlacement {\n const { object } = context;\n const anchor = isometricTopFaceCenter(object);\n const bottomY = anchor.y - LABEL_GAP + finite(object.labelOffsetY, 0);\n return { anchor, centerX: anchor.x + finite(object.labelOffsetX, 0), topY: bottomY - LABEL_HEIGHT, bottomY };\n}\n\nfunction labelTextNode(context: IsometricContext, placement: LabelPlacement, text: string): SceneText {\n const { object, order, rotation, rotationCenter, box } = context;\n const { centerX, topY, bottomY } = placement;\n return {\n type: 'text',\n id: `isometric-${object.id}-label`,\n order: order + 0.3,\n bounds: { minX: centerX - box.width / 2, minY: topY, maxX: centerX + box.width / 2, maxY: bottomY },\n x: centerX - box.width / 2,\n y: topY,\n width: box.width,\n height: LABEL_HEIGHT,\n lines: [text],\n fontFamily: DEFAULT_FONT,\n fontSize: 12,\n fontWeight: 'normal',\n color: '#111827',\n align: 'center',\n verticalAlign: 'middle',\n lineHeight: 1.2,\n rotation,\n rotationCenter,\n mark: 'isometric-label',\n };\n}\n\nfunction labelGuideNode(context: IsometricContext, placement: LabelPlacement): ScenePath {\n const { object, order, rotation, rotationCenter } = context;\n const { anchor, centerX, bottomY } = placement;\n return {\n type: 'path',\n id: `isometric-${object.id}-label-guide`,\n order: order + 0.25,\n bounds: {\n minX: Math.min(anchor.x, centerX),\n minY: Math.min(anchor.y, bottomY),\n maxX: Math.max(anchor.x, centerX),\n maxY: Math.max(anchor.y, bottomY),\n },\n d: `M ${anchor.x} ${anchor.y} L ${centerX} ${bottomY}`,\n rotation,\n rotationCenter,\n style: {\n fill: { kind: 'none' },\n stroke: { kind: 'solid', color: '#cbd5e1' },\n strokeWidth: 1,\n lineCap: 'round',\n pointerEvents: 'none',\n },\n };\n}\n\nfunction labelBackgroundNode(\n context: IsometricContext,\n placement: LabelPlacement,\n text: string,\n background: string,\n): SceneRect {\n const { object, order, rotation } = context;\n const { centerX, topY, bottomY } = placement;\n const width = Math.max(24, text.length * LABEL_CHAR_WIDTH + LABEL_PADDING_X * 2);\n return {\n type: 'rect',\n id: `isometric-${object.id}-label-background`,\n order: order + 0.28,\n x: centerX - width / 2,\n y: topY - LABEL_PADDING_Y,\n width,\n height: LABEL_HEIGHT + LABEL_PADDING_Y * 2,\n rx: 4,\n bounds: {\n minX: centerX - width / 2,\n minY: topY - LABEL_PADDING_Y,\n maxX: centerX + width / 2,\n maxY: bottomY + LABEL_PADDING_Y,\n },\n rotation,\n mark: 'isometric-label',\n style: { fill: { kind: 'solid', color: background }, stroke: { kind: 'none' } },\n };\n}\n\nfunction labelNodes(context: IsometricContext, text: string): RenderNode[] {\n const placement = labelPlacement(context);\n const label = labelTextNode(context, placement, text);\n const guide = labelGuideNode(context, placement);\n const background = context.object.labelBackground;\n if (!background) {\n return [guide, label];\n }\n return [guide, labelBackgroundNode(context, placement, text, background), label];\n}\n\nexport function buildIsometricObject(object: IsometricObject, index: number): RenderNode[] {\n const context = isometricContext(object, index);\n const faces = isometricFaces(object);\n const cornerRadius = Math.max(0, finite(object.cornerRadius, 8));\n const silhouette = [faces.top[0], faces.top[1], faces.right[2], faces.front[2], faces.front[3], faces.top[3]];\n const hullPath = roundedPolygonPath(silhouette, cornerRadius);\n const hullClip: HullClip = { type: 'path', d: hullPath };\n\n const groundShadow = groundShadowNode(context, faces);\n const seams = seamsNode(context, faces, hullClip);\n const hull = hullNode(context, hullPath, cornerRadius);\n const facesNodes = faceNodes(context, faces, hullClip);\n const objectNodes: RenderNode[] = groundShadow\n ? [hull, ...facesNodes, groundShadow, seams]\n : [hull, ...facesNodes, seams];\n\n return object.text ? [...objectNodes, ...labelNodes(context, object.text)] : objectNodes;\n}\n\nexport function buildIsometricObjects(objects: readonly IsometricObject[]): RenderNode[] {\n return objects.flatMap((object, index) =>\n tag(\n buildIsometricObject(object, index),\n 'isometric',\n object.id,\n 'isometric',\n object.text ?? 'Isometric object',\n object.parentFrameId,\n ),\n );\n}\n","import type { Point, RenderNode } from '../../scene';\nimport { DEFAULT_FONT, finite } from '../../scene';\nimport type { LinkRenderContext } from './types';\n\nfunction endpointLabelPosition(points: number[], end: 'start' | 'end'): Point {\n const index = end === 'start' ? 0 : points.length - 2;\n const neighbor = end === 'start' ? 2 : points.length - 4;\n const x = points[index];\n const y = points[index + 1];\n const dx = points[neighbor] - x;\n const dy = points[neighbor + 1] - y;\n const length = Math.hypot(dx, dy) || 1;\n const ux = dx / length;\n const uy = dy / length;\n return { x: x + ux * 20 - uy * 13, y: y + uy * 20 + ux * 13 };\n}\n\nfunction renderEndpointLabel(context: LinkRenderContext, end: 'start' | 'end', labelIndex: number): RenderNode[] {\n const label = (end === 'start' ? context.link.style?.startLabel : context.link.style?.endLabel)?.trim();\n if (!label) {\n return [];\n }\n const fontSize = finite(context.link.style?.fontSize, 10);\n const position = endpointLabelPosition(context.points, end);\n const width = 90;\n return [\n {\n type: 'text',\n id: `link-${end}-label-${context.link.id}`,\n order: context.order + 0.55 + labelIndex * 0.01,\n bounds: context.bounds,\n x: position.x - width / 2,\n y: position.y - fontSize,\n width,\n height: fontSize * 2,\n lines: [label],\n fontFamily: context.link.style?.fontFamily ?? DEFAULT_FONT,\n fontSize,\n fontWeight: 'normal',\n color: context.color,\n align: 'center',\n verticalAlign: 'middle',\n lineHeight: 1.4,\n },\n ];\n}\n\nexport function renderEndpointLabels(context: LinkRenderContext): RenderNode[] {\n return [...renderEndpointLabel(context, 'start', 0), ...renderEndpointLabel(context, 'end', 1)];\n}\n","import type { RenderNode } from '../../scene';\nimport { DEFAULT_FONT } from '../../scene';\nimport type { LinkRenderContext } from './types';\n\nexport function renderMainLabel(context: LinkRenderContext): RenderNode[] {\n if (!context.label.visible) {\n return [];\n }\n return [\n {\n type: 'text',\n id: `link-text-${context.link.id}`,\n order: context.order + 0.5,\n bounds: context.bounds,\n x: context.midpoint.x - context.label.width / 2,\n y: context.midpoint.y - context.label.fontSize,\n width: context.label.width,\n height: context.label.fontSize * 2,\n lines: context.label.lines,\n fontFamily: context.link.style?.fontFamily ?? DEFAULT_FONT,\n fontSize: context.label.fontSize,\n fontWeight: 'normal',\n color: context.color,\n align: 'center',\n verticalAlign: 'middle',\n lineHeight: 1.4,\n },\n ];\n}\n","import type { GradientColor } from '../../model/color';\nimport { interpolateHexColorStops } from '../../model/color';\nimport { relativePositionOnAxis } from '../../model/geometry/axisPosition';\nimport type { LinkStyle } from '../../model/link';\n\ntype LinkColor = LinkStyle['color'] | { type: 'solid'; color: string } | null | undefined;\n\nexport function getLinkStrokeColor(colorValue: LinkColor): string | undefined {\n if (!colorValue) {\n return undefined;\n }\n if (typeof colorValue === 'string') {\n return colorValue;\n }\n if (colorValue.type === 'gradient') {\n return colorValue.stops?.[0]?.color;\n }\n if (colorValue.type === 'solid') {\n return colorValue.color;\n }\n return undefined;\n}\n\nexport function getLinkEndpointColor(colorValue: LinkColor, end: 'start' | 'end'): string | undefined {\n if (isGradientWithStops(colorValue)) {\n return end === 'start' ? colorValue.stops[0].color : colorValue.stops[colorValue.stops.length - 1].color;\n }\n return getLinkStrokeColor(colorValue);\n}\n\nexport function getLinkColorAtPoint(\n colorValue: LinkColor,\n points: number[],\n point: { x: number; y: number },\n): string | undefined {\n if (!isGradientWithStops(colorValue)) {\n return getLinkStrokeColor(colorValue);\n }\n if (points.length < 4) {\n return colorValue.stops[0]?.color;\n }\n\n const axisStart = { x: points[0], y: points[1] };\n const axisEnd = { x: points[points.length - 2], y: points[points.length - 1] };\n const relativePosition = relativePositionOnAxis(axisStart, axisEnd, point);\n return interpolateHexColorStops(colorValue.stops, relativePosition * 100);\n}\n\nfunction isGradientWithStops(colorValue: LinkColor): colorValue is GradientColor {\n return Boolean(\n colorValue && typeof colorValue === 'object' && colorValue.type === 'gradient' && colorValue.stops?.length,\n );\n}\n","import type { GradientColor } from '../../model/color';\nimport type { StrokeStyle } from '../../model/link';\n\nexport const getLinkGradientStrokeProps = (colorValue: string | GradientColor | null | undefined, points: number[]) => {\n if (!colorValue || typeof colorValue === 'string' || colorValue.type !== 'gradient') {\n return {};\n }\n\n if (points.length < 4) {\n return {};\n }\n\n const colorStops: (number | string)[] = [];\n colorValue.stops.forEach(stop => {\n colorStops.push(stop.position / 100);\n colorStops.push(stop.color);\n });\n\n return {\n strokeLinearGradientStartPoint: { x: points[0], y: points[1] },\n strokeLinearGradientEndPoint: { x: points[points.length - 2], y: points[points.length - 1] },\n strokeLinearGradientColorStops: colorStops,\n };\n};\n\nexport const getDashArray = (strokeWidth: number, strokeStyle: StrokeStyle): number[] | undefined => {\n switch (strokeStyle) {\n case 'dashed':\n return [strokeWidth * 8, strokeWidth * 4];\n case 'dotted':\n return [strokeWidth * 2, strokeWidth * 3];\n case 'solid':\n default:\n return undefined;\n }\n};\n","import type { RenderInput } from '../../../renderInput/types';\nimport type { MeasureTextFactory, SceneStyle } from '../../scene';\nimport { DEFAULT_FONT, finite } from '../../scene';\nimport { getLinkStrokeColor } from '../../scene/linkPaint';\nimport { getDashArray } from '../../scene/linkStroke';\nimport { resolveShadow } from '../../scene/shadow';\nimport { wrapText } from '../../scene/textLayout';\nimport { calculateLinkRoute, getLineMidpoint, labelGapDash } from './geometry';\nimport type { LinkLabelLayout, LinkRenderContext } from './types';\n\nfunction linkBounds(points: number[], padding: number) {\n const xs = points.filter((_, index) => index % 2 === 0);\n const ys = points.filter((_, index) => index % 2 === 1);\n return {\n minX: Math.min(...xs) - padding,\n minY: Math.min(...ys) - padding,\n maxX: Math.max(...xs) + padding,\n maxY: Math.max(...ys) + padding,\n };\n}\n\nfunction labelLayout(link: RenderInput['links'][number]['link'], measureText?: MeasureTextFactory): LinkLabelLayout {\n const visible = Boolean(link.showText && link.text);\n const fontSize = finite(link.style?.fontSize, 10);\n const width = Math.min(250, Math.max(fontSize * 2, (link.text?.length ?? 0) * fontSize * 0.65 + 10));\n const metrics = measureText?.(link.style?.fontFamily ?? DEFAULT_FONT, fontSize);\n const lines = visible ? wrapText(link.text ?? '', width, fontSize, metrics) : [];\n return { visible, fontSize, width, height: lines.length * fontSize * 1.4, lines };\n}\n\nfunction linkStyle(\n item: RenderInput['links'][number],\n strokeWidth: number,\n color: string,\n dash: number[] | undefined,\n): SceneStyle {\n const link = item.link;\n const stroke =\n typeof link.style?.color === 'object' && link.style.color.type === 'gradient'\n ? {\n kind: 'linear-gradient' as const,\n angle: 0,\n stops: link.style.color.stops.map(stop => ({ offset: stop.position, color: stop.color })),\n }\n : { kind: 'solid' as const, color };\n return {\n fill: { kind: 'none' },\n stroke,\n strokeWidth,\n dash,\n lineCap: 'round',\n lineJoin: 'round',\n opacity: finite(link.style?.opacity, 1),\n shadow: resolveShadow(link.style?.shadow),\n };\n}\n\nexport function createLinkRenderContext(\n item: RenderInput['links'][number],\n index: number,\n measureText?: MeasureTextFactory,\n): LinkRenderContext {\n const { link, from, to } = item;\n const pathType = link.style?.pathType ?? 'orthogonal';\n const { points, segments } = calculateLinkRoute(link, from, to, pathType);\n const strokeWidth = finite(link.style?.strokeWidth, 2);\n const color = getLinkStrokeColor(link.style?.color) || '#64748b';\n const label = labelLayout(link, measureText);\n const contentDash = getDashArray(strokeWidth, link.style?.strokeStyle ?? 'solid');\n const gap = label.visible && !contentDash ? labelGapDash(points, pathType, label.width, label.height) : null;\n const dash = gap ? [gap.dashBefore, gap.gapLength, 1e6] : contentDash;\n return {\n link,\n pathType,\n points,\n segments,\n midpoint: getLineMidpoint(points, pathType, from, to),\n strokeWidth,\n bounds: linkBounds(points, strokeWidth + 14),\n color,\n order: 20_000 + index,\n style: linkStyle(item, strokeWidth, color, dash),\n label,\n hasLabelGap: Boolean(gap),\n };\n}\n","import type { Link, MarkerType } from '../../../model/link';\n\nexport function markerForEnd(link: Link, end: 'start' | 'end'): MarkerType {\n const explicit = end === 'start' ? link.startMarker : link.endMarker;\n if (explicit) {\n return explicit;\n }\n const direction = link.style?.arrowDirection ?? 'forward';\n if (direction === 'bidirectional') {\n return 'arrow';\n }\n if (end === 'start' && direction === 'backward') {\n return 'arrow';\n }\n if (end === 'end' && direction === 'forward') {\n return 'arrow';\n }\n return 'none';\n}\n","import type { PathType } from '../../../model/link';\nimport type { SceneLinkSegment, ScenePath } from '../../scene';\nimport type { PathSegment } from './geometry/routing/types';\nimport { markerForEnd } from './markers';\nimport { roundedOrthogonalPathData } from './roundedOrthogonalPathData';\nimport type { LinkRenderContext } from './types';\n\nfunction polylinePathData(points: number[]): string {\n let path = `M ${points[0]} ${points[1]}`;\n for (let index = 2; index < points.length; index += 2) {\n path += ` L ${points[index]} ${points[index + 1]}`;\n }\n return path;\n}\n\nfunction pathData(points: number[], pathType: PathType, segments: PathSegment[], strokeWidth: number): string {\n if (points.length < 4) {\n return '';\n }\n if (pathType === 'curved' && points.length >= 8) {\n return `M ${points[0]} ${points[1]} C ${points[2]} ${points[3]} ${points[4]} ${points[5]} ${points[6]} ${points[7]}`;\n }\n if (pathType === 'orthogonal' && segments.length > 0) {\n return roundedOrthogonalPathData(segments, Math.max(16, strokeWidth * 4));\n }\n return polylinePathData(points);\n}\n\nconst round = (value: number): number => Math.round(value * 100) / 100;\n\nfunction movableSegments(pathType: PathType, segments: PathSegment[]): SceneLinkSegment[] | undefined {\n if (pathType !== 'orthogonal' || !segments.some(segment => segment.canMove)) {\n return undefined;\n }\n return segments.map(segment => ({\n ax: round(segment.start.x),\n ay: round(segment.start.y),\n bx: round(segment.end.x),\n by: round(segment.end.y),\n ox: round(segment.originalMidpoint.x),\n oy: round(segment.originalMidpoint.y),\n movable: segment.canMove,\n }));\n}\n\nexport function renderLinkPath(context: LinkRenderContext): ScenePath {\n const { link } = context;\n return {\n type: 'path',\n id: `link-${link.id}`,\n order: context.order,\n bounds: context.bounds,\n d: pathData(context.points, context.pathType, context.segments, context.strokeWidth),\n style: context.style,\n markerStart: markerForEnd(link, 'start'),\n markerEnd: markerForEnd(link, 'end'),\n detail: {\n of: 'link',\n fromId: link.fromId,\n toId: link.toId,\n route: context.pathType,\n fromSide: link.fromPoint?.kind === 'side' ? link.fromPoint.side : undefined,\n toSide: link.toPoint?.kind === 'side' ? link.toPoint.side : undefined,\n fromFace: link.fromPoint?.kind === 'face' ? link.fromPoint.face : undefined,\n toFace: link.toPoint?.kind === 'face' ? link.toPoint.face : undefined,\n labelGap: context.hasLabelGap,\n segments: movableSegments(context.pathType, context.segments),\n },\n };\n}\n","import type { RenderNode } from '../../scene';\nimport type { LinkRenderContext } from './types';\n\nexport function renderWeightBadge(context: LinkRenderContext): RenderNode[] {\n const { link } = context;\n if (link.weight === undefined || link.weight === null || link.showWeight === false) {\n return [];\n }\n const text = link.weight.toFixed(1);\n const width = Math.max(30, text.length * 8 + 12);\n const height = 16;\n const y = context.midpoint.y + (context.label.visible ? context.label.height / 2 + 10 : 0);\n return [\n {\n type: 'rect',\n id: `link-weight-badge-${link.id}`,\n order: context.order + 0.6,\n bounds: context.bounds,\n x: context.midpoint.x - width / 2,\n y: y - height / 2,\n width,\n height,\n rx: height / 2,\n style: { fill: { kind: 'solid', color: context.color }, stroke: { kind: 'none' }, opacity: 0.92 },\n },\n {\n type: 'text',\n id: `link-weight-${link.id}`,\n order: context.order + 0.61,\n bounds: context.bounds,\n x: context.midpoint.x - width / 2,\n y: y - height / 2,\n width,\n height,\n lines: [text],\n fontFamily: 'Arial, sans-serif',\n fontSize: 10,\n fontWeight: 'bold',\n color: '#ffffff',\n align: 'center',\n verticalAlign: 'middle',\n lineHeight: 1,\n },\n ];\n}\n","import type { RenderInput } from '../../renderInput/types';\nimport type { MeasureTextFactory, RenderNode } from '../scene';\nimport { tag } from '../scene/tagging';\nimport { renderEndpointLabels } from './link/endpointLabels';\nimport { renderMainLabel } from './link/label';\nimport { createLinkRenderContext } from './link/layout';\nimport { renderLinkPath } from './link/path';\nimport { renderWeightBadge } from './link/weight';\n\nexport function buildLink(\n item: RenderInput['links'][number],\n index: number,\n measureText?: MeasureTextFactory,\n): RenderNode[] {\n if (item.link.isVisible === false) {\n return [];\n }\n const context = createLinkRenderContext(item, index, measureText);\n return [\n renderLinkPath(context),\n ...renderMainLabel(context),\n ...renderWeightBadge(context),\n ...renderEndpointLabels(context),\n ];\n}\n\nexport function buildLinks(links: RenderInput['links'], measureText?: MeasureTextFactory): RenderNode[] {\n return links.flatMap((item, index) =>\n tag(\n buildLink(item, index, measureText),\n 'link',\n item.link.id,\n item.kind,\n item.link.text || `${item.link.fromId} → ${item.link.toId}`,\n ),\n );\n}\n","import type { FreeformPath } from '../../model/path';\nimport type { RenderNode } from '../scene';\nimport { finite, freeformPathData } from '../scene';\nimport { tag } from '../scene/tagging';\n\nexport function buildFreeformPath(path: FreeformPath, index: number): RenderNode[] {\n if (path.isVisible === false || path.points.length < 2) {\n return [];\n }\n const strokeWidth = finite(path.strokeWidth, 2);\n const extra = strokeWidth + 12;\n const bounds = {\n minX: Math.min(...path.points.map(point => point.x)) - extra,\n minY: Math.min(...path.points.map(point => point.y)) - extra,\n maxX: Math.max(...path.points.map(point => point.x)) + extra,\n maxY: Math.max(...path.points.map(point => point.y)) + extra,\n };\n const tension = finite(path.tension, 0);\n const closed = path.closed === true;\n return [\n {\n type: 'path',\n id: `path-${path.id}`,\n order: 30_000 + index,\n bounds,\n d: freeformPathData({ points: path.points, tension, closed }),\n markerStart: path.startMarker,\n markerEnd: path.endMarker,\n detail: {\n of: 'pathGeometry',\n points: path.points.map(point => [point.x, point.y]),\n tension,\n closed,\n },\n style: {\n fill: path.closed ? { kind: 'solid', color: path.fillColor ?? 'transparent' } : { kind: 'none' },\n stroke: { kind: 'solid', color: path.strokeColor ?? '#7c3aed' },\n strokeWidth,\n dash: path.dash?.length ? path.dash : undefined,\n lineCap: 'round',\n lineJoin: 'round',\n opacity: finite(path.opacity, 1),\n },\n },\n ];\n}\n\nexport function buildFreeformPaths(paths: readonly FreeformPath[]): RenderNode[] {\n return paths.flatMap((path, index) => tag(buildFreeformPath(path, index), 'path', path.id, 'path', 'Path'));\n}\n","import type { ShapeRenderContext } from '../types';\n\nexport function shapeNodeBase(context: ShapeRenderContext) {\n return {\n id: context.id,\n order: context.order,\n bounds: context.bounds,\n rotation: context.rotation,\n style: context.style,\n };\n}\n","import type { RenderNode } from '../../../scene';\nimport { finite, freeformPathData } from '../../../scene';\nimport type { ShapeRenderContext } from '../types';\nimport { shapeNodeBase } from './base';\nimport { localShapePath, pillCornerRadius } from './pathCalculation';\n\nexport function renderPath(context: ShapeRenderContext): RenderNode[] {\n const path = localShapePath(context.shape.shapeType, context.x, context.y, context.width, context.height);\n if (!path) {\n return [];\n }\n return [{ ...shapeNodeBase(context), type: 'path', d: path, rotationCenter: context.rotationCenter }];\n}\n\nexport function renderBoundedPath(context: ShapeRenderContext): RenderNode[] {\n return renderPath(context).map(node => ({\n ...node,\n detail: {\n of: 'declaredBounds',\n bounds: { x: context.x, y: context.y, width: context.width, height: context.height },\n },\n }));\n}\n\nexport function renderRectangle(context: ShapeRenderContext): RenderNode[] {\n const rx =\n context.shape.shapeType === 'pill'\n ? pillCornerRadius(context.width, context.height)\n : context.shape.shapeType === 'rounded_rectangle'\n ? finite(context.shape.cornerRadius, 8)\n : 0;\n return [\n {\n ...shapeNodeBase(context),\n type: 'rect',\n x: context.x,\n y: context.y,\n width: context.width,\n height: context.height,\n rx,\n },\n ];\n}\n\nexport function renderEllipse(context: ShapeRenderContext): RenderNode[] {\n return [\n {\n ...shapeNodeBase(context),\n type: 'ellipse',\n cx: context.x + context.width / 2,\n cy: context.y + context.height / 2,\n rx: context.width / 2,\n ry: context.height / 2,\n },\n ];\n}\n\nexport function renderSymbol(context: ShapeRenderContext): RenderNode[] {\n if (!context.shape.symbol || context.shape.symbol.points.length < 2) {\n return renderRectangle(context);\n }\n const tension = finite(context.shape.symbol.tension, 0);\n const points = context.shape.symbol.points.map(([x, y]) => ({\n x: context.x + x * context.width,\n y: context.y + y * context.height,\n }));\n return [\n {\n ...shapeNodeBase(context),\n type: 'path',\n d: freeformPathData({ points, tension, closed: true }),\n rotationCenter: context.rotationCenter,\n detail: {\n of: 'symbolGeometry',\n points: context.shape.symbol.points,\n tension,\n declaredBounds: { x: context.x, y: context.y, width: context.width, height: context.height },\n },\n },\n ];\n}\n","import type { ShapeType } from '../../../../model/shape';\nimport type { RenderNode } from '../../../scene';\nimport type { ShapeGeometryRenderer, ShapeRenderContext } from '../types';\nimport { renderBoundedPath, renderEllipse, renderPath, renderRectangle, renderSymbol } from './simple';\n\nconst GEOMETRY_RENDERERS: Record<ShapeType, ShapeGeometryRenderer> = {\n cloud: renderPath,\n cylinder: renderPath,\n diamond: renderPath,\n document: renderPath,\n hexagon: renderPath,\n note: renderPath,\n oval: renderEllipse,\n circle: renderEllipse,\n parallelogram: renderPath,\n person: renderBoundedPath,\n pill: renderRectangle,\n predefined_process: renderPath,\n rectangle: renderRectangle,\n rounded_rectangle: renderRectangle,\n symbol: renderSymbol,\n trapezoid: renderPath,\n triangle: renderPath,\n};\n\nexport function renderShapeGeometry(context: ShapeRenderContext): RenderNode[] {\n const renderer = GEOMETRY_RENDERERS[context.shape.shapeType] ?? renderRectangle;\n return renderer(context);\n}\n","import type { Shape, ShapeType } from '../../../model/shape';\nimport type { RenderDiagnostic, SceneStyle } from '../../scene';\nimport { finite, paint } from '../../scene';\n\nconst REMOVED_SHAPE_HINTS: Record<string, string> = {\n container_rectangle: \" (use 'rectangle' with strokeStyle: dashed)\",\n};\n\nconst COMMON_SHAPE_DEFAULTS = {\n strokeColor: '#cbd5e1',\n strokeWidth: 2,\n fillColor: '#ffffff',\n dash: [],\n strokeStyle: 'solid' as const,\n fontSize: 14,\n fontWeight: 'normal' as const,\n textAlign: 'center' as const,\n textVerticalAlign: 'middle' as const,\n lineHeight: 1.3,\n hasShadow: false,\n opacity: 1,\n};\n\ninterface ShapeRenderDefaults {\n strokeColor: string;\n strokeWidth: number;\n fillColor: string;\n dash: readonly number[];\n strokeStyle: 'solid';\n fontSize: number;\n fontWeight: 'normal';\n textAlign: 'center';\n textVerticalAlign: 'middle';\n lineHeight: number;\n hasShadow: boolean;\n opacity: number;\n cornerRadius?: number;\n rotation?: number;\n}\n\nconst SHAPE_RENDER_DEFAULTS = {\n rectangle: COMMON_SHAPE_DEFAULTS,\n rounded_rectangle: { ...COMMON_SHAPE_DEFAULTS, cornerRadius: 8 },\n triangle: { ...COMMON_SHAPE_DEFAULTS, rotation: 0 },\n diamond: { ...COMMON_SHAPE_DEFAULTS, rotation: 0 },\n hexagon: { ...COMMON_SHAPE_DEFAULTS, rotation: 0 },\n oval: { ...COMMON_SHAPE_DEFAULTS, rotation: 0 },\n circle: { ...COMMON_SHAPE_DEFAULTS, rotation: 0 },\n document: { ...COMMON_SHAPE_DEFAULTS, rotation: 0 },\n parallelogram: { ...COMMON_SHAPE_DEFAULTS, rotation: 0 },\n trapezoid: { ...COMMON_SHAPE_DEFAULTS, rotation: 0 },\n cylinder: { ...COMMON_SHAPE_DEFAULTS, rotation: 0 },\n note: { ...COMMON_SHAPE_DEFAULTS, rotation: 0 },\n cloud: { ...COMMON_SHAPE_DEFAULTS, rotation: 0 },\n predefined_process: { ...COMMON_SHAPE_DEFAULTS, rotation: 0 },\n pill: COMMON_SHAPE_DEFAULTS,\n person: { ...COMMON_SHAPE_DEFAULTS, rotation: 0 },\n symbol: { ...COMMON_SHAPE_DEFAULTS, rotation: 0 },\n} as const satisfies Record<ShapeType, ShapeRenderDefaults>;\n\nexport function shapeDefaults(\n shape: Shape,\n diagnostics: RenderDiagnostic[],\n): (typeof SHAPE_RENDER_DEFAULTS)[keyof typeof SHAPE_RENDER_DEFAULTS] {\n const defaults = SHAPE_RENDER_DEFAULTS[shape.shapeType as keyof typeof SHAPE_RENDER_DEFAULTS];\n if (defaults) {\n return defaults;\n }\n diagnostics.push({\n severity: 'warning',\n code: 'unknown-shape-type',\n ownerId: shape.id,\n message: `Unknown shapeType '${shape.shapeType}'${REMOVED_SHAPE_HINTS[shape.shapeType] ?? ''}, falling back to rectangle defaults.`,\n });\n return SHAPE_RENDER_DEFAULTS.rectangle;\n}\n\nfunction shapeDash(shape: Shape, strokeWidth: number): number[] | undefined {\n if (shape.strokeStyle === 'dotted') {\n return [0.001, strokeWidth * 2];\n }\n if (shape.strokeStyle === 'dashed') {\n return [strokeWidth * 4, strokeWidth * 2];\n }\n return shape.dash?.length ? shape.dash : undefined;\n}\n\nexport function shapeStyle(shape: Shape, diagnostics: RenderDiagnostic[]): SceneStyle {\n const defaults = shapeDefaults(shape, diagnostics);\n const strokeWidth = finite(shape.strokeWidth, defaults.strokeWidth);\n const shadow =\n shape.shadowStyle ??\n (shape.hasShadow\n ? { enabled: true, color: '#000000', opacity: 0.25, blur: 10, angle: 45, distance: 5 }\n : undefined);\n const angle = (finite(shadow?.angle, 45) * Math.PI) / 180;\n return {\n fill: paint(shape.fillColor, diagnostics, shape.id),\n stroke: paint(shape.strokeColor, diagnostics, shape.id),\n strokeWidth,\n dash: shapeDash(shape, strokeWidth),\n lineCap: shape.strokeStyle === 'dotted' ? 'round' : 'butt',\n opacity: finite(shape.opacity, defaults.opacity),\n shadow: shadow?.enabled\n ? {\n color: shadow.color ?? '#000000',\n opacity: finite(shadow.opacity, 0.25),\n blur: finite(shadow.blur, 10),\n dx: Math.cos(angle) * finite(shadow.distance, 5),\n dy: Math.sin(angle) * finite(shadow.distance, 5),\n }\n : undefined,\n };\n}\n","export interface TextRun {\n text: string;\n bold: boolean;\n}\n\nconst BOLD_PATTERN = /\\*\\*([^*]+)\\*\\*/g;\n\nexport function hasBoldMarkup(text: string): boolean {\n return /\\*\\*[^*]+\\*\\*/.test(text);\n}\n\nexport function parseRichLine(line: string): TextRun[] {\n const runs: TextRun[] = [];\n let lastIndex = 0;\n BOLD_PATTERN.lastIndex = 0;\n let match: RegExpExecArray | null;\n // biome-ignore lint/suspicious/noAssignInExpressions: canonical RegExp.exec loop\n while ((match = BOLD_PATTERN.exec(line))) {\n if (match.index > lastIndex) {\n runs.push({ text: line.slice(lastIndex, match.index), bold: false });\n }\n if (match[1]) {\n runs.push({ text: match[1], bold: true });\n }\n lastIndex = BOLD_PATTERN.lastIndex;\n }\n if (lastIndex < line.length) {\n runs.push({ text: line.slice(lastIndex), bold: false });\n }\n return runs.length ? runs : [{ text: line, bold: false }];\n}\n\nexport function parseRichText(text: string): TextRun[][] {\n return text.split('\\n').map(parseRichLine);\n}\n\nexport interface RichWord {\n text: string;\n bold: boolean;\n}\n\nfunction runsToWords(runs: TextRun[]): RichWord[] {\n const words: RichWord[] = [];\n for (const run of runs) {\n for (const word of run.text.split(/\\s+/)) {\n if (word) {\n words.push({ text: word, bold: run.bold });\n }\n }\n }\n return words;\n}\n\nexport function wrapRichLine(\n runs: TextRun[],\n maxWidth: number,\n measure: (text: string, bold: boolean) => number,\n spaceWidth: number,\n): RichWord[][] {\n const words = runsToWords(runs);\n if (!words.length) {\n return [[]];\n }\n const lines: RichWord[][] = [];\n let current: RichWord[] = [];\n let currentWidth = 0;\n for (const word of words) {\n const wordWidth = measure(word.text, word.bold);\n const addedWidth = current.length ? spaceWidth + wordWidth : wordWidth;\n if (current.length && currentWidth + addedWidth > maxWidth) {\n lines.push(current);\n current = [word];\n currentWidth = wordWidth;\n } else {\n current.push(word);\n currentWidth += addedWidth;\n }\n }\n lines.push(current);\n return lines;\n}\n\nexport function wrapRichText(\n text: string,\n maxWidth: number,\n measure: (text: string, bold: boolean) => number,\n spaceWidth: number,\n): RichWord[][] {\n return parseRichText(text).flatMap(runs => wrapRichLine(runs, Math.max(1, maxWidth), measure, spaceWidth));\n}\n","import type { MeasureTextFactory, SceneText } from '../../scene';\nimport { DEFAULT_FONT, finite } from '../../scene';\nimport { hasBoldMarkup, wrapRichText } from '../../scene/richTextLayout';\nimport { heuristicRichMeasure, wrapText } from '../../scene/textLayout';\nimport { personLabelArea } from './geometry/roundedForms';\nimport { shapeDefaults } from './style';\nimport type { ShapeRenderContext } from './types';\n\nexport function renderShapeText(\n context: ShapeRenderContext,\n strokeWidth: number,\n measureText?: MeasureTextFactory,\n): SceneText | null {\n const { shape, bounds, order, rotation, rotationCenter, x, y, width, height } = context;\n if (!shape.text) {\n return null;\n }\n const fontSize = finite(shape.fontSize, shapeDefaults(shape, []).fontSize);\n const padding = shape.isText ? 0 : Math.max(8, strokeWidth * 2);\n const area = shape.shapeType === 'person' ? personLabelArea(x, y, width, height) : { x, y, width, height };\n const textWidth = Math.max(0, area.width - padding * 2);\n const fontFamily = shape.fontFamily || DEFAULT_FONT;\n const metrics = measureText?.(fontFamily, fontSize);\n const textNode: SceneText = {\n type: 'text',\n id: `shape-text-${shape.id}`,\n order: order + 0.5,\n bounds,\n x: area.x + padding,\n y: area.y + padding,\n width: textWidth,\n height: Math.max(0, area.height - padding * 2),\n lines: wrapText(shape.text, textWidth, fontSize, metrics),\n fontFamily,\n fontSize,\n fontWeight: shape.fontWeight ?? 'normal',\n letterSpacing: shape.letterSpacing,\n color: shape.textColor || '#111827',\n align: shape.textAlign ?? 'center',\n verticalAlign: shape.textVerticalAlign ?? 'middle',\n lineHeight: finite(shape.lineHeight, 1.3),\n rotation,\n rotationCenter,\n };\n if (hasBoldMarkup(shape.text)) {\n const { measure, spaceWidth } = metrics ?? heuristicRichMeasure(fontSize);\n textNode.richLines = wrapRichText(shape.text, textWidth, measure, spaceWidth);\n }\n return textNode;\n}\n","import type { Shape } from '../../model/shape';\nimport type { MeasureTextFactory, RenderDiagnostic, RenderNode, SceneStyle } from '../scene';\nimport { finite, rotatedBounds } from '../scene';\nimport { tag } from '../scene/tagging';\nimport { renderShapeGeometry } from './shape/geometry';\nimport { shapeStyle } from './shape/style';\nimport { renderShapeText } from './shape/text';\nimport type { ShapeRenderContext } from './shape/types';\n\nfunction renderDoubleStroke(context: ShapeRenderContext, strokeWidth: number): RenderNode[] {\n const insetWidth = Math.max(0, context.width - 2 * strokeWidth);\n const insetHeight = Math.max(0, context.height - 2 * strokeWidth);\n const ring: SceneStyle = {\n ...context.style,\n fill: { kind: 'none' },\n strokeWidth: Math.max(1, strokeWidth / 3),\n dash: undefined,\n shadow: undefined,\n };\n const nodes = renderShapeGeometry({ ...context, style: ring });\n if (insetWidth <= 0 || insetHeight <= 0) {\n return nodes;\n }\n\n const inset = {\n ...context,\n x: context.x + strokeWidth,\n y: context.y + strokeWidth,\n width: insetWidth,\n height: insetHeight,\n };\n nodes.push(\n ...renderShapeGeometry({\n ...inset,\n id: `${context.id}-fill`,\n style: { ...context.style, stroke: { kind: 'none' }, strokeWidth: 0, dash: undefined },\n }),\n ...renderShapeGeometry({ ...inset, id: `${context.id}-inner`, style: ring }),\n );\n return nodes;\n}\n\nfunction createRenderContext(\n shape: Shape,\n index: number,\n diagnostics: RenderDiagnostic[],\n): { context: ShapeRenderContext; strokeWidth: number } {\n const x = finite(shape.x, 0);\n const y = finite(shape.y, 0);\n const width = Math.max(0, finite(shape.width, 100));\n const height = Math.max(0, finite(shape.height, 100));\n const rotation = finite(shape.rotation, 0);\n const strokeWidth = finite(shape.strokeWidth, 2);\n return {\n strokeWidth,\n context: {\n shape,\n id: `shape-${shape.id}`,\n order: 10_000 + index,\n bounds: rotatedBounds({ x, y, width, height }, rotation, strokeWidth + (shape.hasShadow ? 20 : 2)),\n rotation,\n rotationCenter: { x: x + width / 2, y: y + height / 2 },\n style: shapeStyle(shape, diagnostics),\n x,\n y,\n width,\n height,\n },\n };\n}\n\nfunction renderShaderSurface(context: ShapeRenderContext): RenderNode | undefined {\n if (!context.shape.shader || (context.shape.shapeType !== 'circle' && context.shape.shapeType !== 'oval')) {\n return undefined;\n }\n return {\n id: `${context.id}-shader`,\n type: 'shader-surface',\n order: context.order,\n bounds: context.bounds,\n x: context.x,\n y: context.y,\n width: context.width,\n height: context.height,\n rotation: context.rotation,\n shader: context.shape.shader,\n mask: 'ellipse',\n fillColor: context.style.fill?.kind === 'solid' ? context.style.fill.color : undefined,\n };\n}\n\nexport function buildShape(\n shape: Shape,\n index: number,\n diagnostics: RenderDiagnostic[],\n measureText?: MeasureTextFactory,\n): RenderNode[] {\n if (shape.isVisible === false) {\n return [];\n }\n const { context, strokeWidth } = createRenderContext(shape, index, diagnostics);\n const nodes =\n shape.strokeStyle === 'double' ? renderDoubleStroke(context, strokeWidth || 1) : renderShapeGeometry(context);\n const shader = renderShaderSurface(context);\n if (shader) {\n for (const node of nodes) {\n if (node.type === 'ellipse' || node.type === 'path' || node.type === 'rect') {\n node.style = { ...node.style, pointerEvents: 'all' };\n }\n }\n nodes.push(shader);\n }\n const text = renderShapeText(context, strokeWidth, measureText);\n if (text) {\n nodes.push(text);\n }\n return nodes;\n}\n\nexport function buildShapes(\n shapes: readonly Shape[],\n diagnostics: RenderDiagnostic[],\n measureText?: MeasureTextFactory,\n): RenderNode[] {\n return shapes.flatMap((shape, index) =>\n tag(\n buildShape(shape, index, diagnostics, measureText),\n 'shape',\n shape.id,\n shape.shapeType,\n shape.text || shape.shapeType,\n shape.parentFrameId ?? undefined,\n ),\n );\n}\n","import type { Chart } from '../../../model/chart';\nimport type { RenderNode } from '../../scene';\nimport { chartText } from '../primitives';\nimport { axisLabelProp } from '../propPath';\nimport type { ChartLayout } from './layout';\n\nfunction buildXAxisLabel(chart: Chart, layout: ChartLayout, order: number): RenderNode | null {\n if (!chart.axisX.label) {\n return null;\n }\n return {\n ...chartText({\n role: 'axis',\n id: `chart-x-label-${chart.id}`,\n order,\n bounds: layout.bounds,\n frame: { x: layout.plot.x, y: chart.y + chart.height - 18, width: layout.plot.width, height: 18 },\n text: chart.axisX.label,\n chart,\n align: 'center',\n }),\n prop: axisLabelProp('x'),\n };\n}\n\nfunction buildYAxisLabel(chart: Chart, layout: ChartLayout, order: number): RenderNode | null {\n if (!chart.axisY.label || chart.showValueAxis === false) {\n return null;\n }\n return {\n ...chartText({\n role: 'axis',\n id: `chart-y-label-${chart.id}`,\n order,\n bounds: layout.bounds,\n frame: {\n x: chart.x + 12,\n y: layout.plot.y + layout.plot.height,\n width: layout.plot.height,\n height: 18,\n },\n text: chart.axisY.label,\n chart,\n align: 'center',\n rotation: -90,\n }),\n prop: axisLabelProp('y'),\n };\n}\n\nexport function buildAxisLabels(chart: Chart, layout: ChartLayout, order: number): RenderNode[] {\n const labels: RenderNode[] = [];\n const xLabel = buildXAxisLabel(chart, layout, order);\n if (xLabel) {\n labels.push(xLabel);\n }\n const yLabel = buildYAxisLabel(chart, layout, order + labels.length);\n if (yLabel) {\n labels.push(yLabel);\n }\n return labels;\n}\n","import type { Chart } from '../../../model/chart';\nimport type { RenderNode } from '../../scene';\nimport { chartText } from '../primitives';\nimport { seriesLabelProp } from '../propPath';\nimport type { ChartLayout } from './layout';\n\nexport function buildBoxplotSeriesYAxisTicks(chart: Chart, layout: ChartLayout, order: number): RenderNode[] {\n const count = Math.max(1, chart.series.length);\n const slotWidth = layout.plot.height / count;\n\n return chart.series.map((series, index) => {\n const centerY = layout.plot.y + (index + 0.5) * slotWidth;\n return {\n ...chartText({\n role: 'axis',\n id: `chart-y-tick-${chart.id}-${index}`,\n order: order + index,\n bounds: layout.bounds,\n frame: { x: chart.x, y: centerY - 9, width: layout.padLeft - 8, height: 18 },\n text: series.label || series.id,\n chart,\n align: 'right',\n }),\n prop: seriesLabelProp(series.id),\n };\n });\n}\n","import type { Chart, ChartSeries } from '../../../model/chart';\nimport type { Bounds, RenderDiagnostic, RenderNode } from '../../scene';\nimport { finite, paint } from '../../scene';\nimport { CHART_COLORS, chartText, representativeColor } from '../primitives';\nimport { seriesColorProp, seriesLabelProp } from '../propPath';\nimport type { ChartLayout } from './layout';\n\nexport interface ChartLegendRender {\n chart: Chart;\n plot: ChartLayout['plot'];\n bounds: Bounds;\n order: number;\n diagnostics: RenderDiagnostic[];\n}\n\ninterface ChartLegendItem {\n series: ChartSeries;\n seriesIndex: number;\n x: number;\n y: number;\n width: number;\n order: number;\n}\n\nconst CHARTS_WITH_OWN_LEGEND = new Set(['heatmap', 'boxplot', 'sankey', 'treemap', 'mekko']);\n\nexport function buildLegend(render: ChartLegendRender): RenderNode[] {\n if (!usesStandardLegend(render.chart)) {\n return [];\n }\n return createLegendItems(render).flatMap(item => renderLegendItem(render, item));\n}\n\nfunction usesStandardLegend(chart: Chart): boolean {\n const isConnectedCustom = chart.chartType === 'custom' && Boolean(chart.config?.connectPoints);\n return chart.showLegend !== false && !CHARTS_WITH_OWN_LEGEND.has(chart.chartType) && !isConnectedCustom;\n}\n\nfunction legendSeries(chart: Chart): ChartSeries[] {\n return chart.chartType === 'field'\n ? chart.series.filter(item => (item.values[0] as number[] | undefined)?.length === 4)\n : chart.series;\n}\n\nexport const LEGEND_ROW_HEIGHT = 22;\nexport const LEGEND_COLUMN_GAP = 16;\n\nexport function isStackedLegendPosition(position: Chart['legendPosition']): boolean {\n return position === 'bottomLeft' || position === 'bottomRight';\n}\n\nfunction legendItemWidths(chart: Chart): number[] {\n return legendSeries(chart).map(item => Math.max(42, item.label.length * finite(chart.fontSize, 12) * 0.58 + 22));\n}\n\nexport function stackedLegendColumnWidth(chart: Chart): number {\n const widths = legendItemWidths(chart);\n return widths.length ? Math.max(...widths) : 0;\n}\n\nfunction legendStartX(chart: Chart, plot: ChartLegendRender['plot'], totalWidth: number): number {\n if (chart.legendPosition === 'bottom') {\n return plot.x + (plot.width - totalWidth) / 2;\n }\n return plot.x + plot.width - totalWidth;\n}\n\nfunction legendY(chart: Chart, plot: ChartLegendRender['plot']): number {\n return (chart.legendPosition ?? 'top') === 'top' ? chart.y + 16 : plot.y + plot.height + 16;\n}\n\nfunction createStackedLegendItems(render: ChartLegendRender): ChartLegendItem[] {\n const { chart, plot, order } = render;\n const series = legendSeries(chart);\n const widths = legendItemWidths(chart);\n const maxWidth = Math.max(...widths);\n const x =\n chart.legendPosition === 'bottomLeft'\n ? plot.x - LEGEND_COLUMN_GAP - maxWidth\n : plot.x + plot.width + LEGEND_COLUMN_GAP;\n const lastY = plot.y + plot.height - 15;\n return series.map((item, seriesIndex) => ({\n series: item,\n seriesIndex,\n x,\n y: lastY - (series.length - 1 - seriesIndex) * LEGEND_ROW_HEIGHT,\n width: widths[seriesIndex],\n order: order + (series.length - 1 - seriesIndex) * 2,\n }));\n}\n\nfunction createRowLegendItems(render: ChartLegendRender): ChartLegendItem[] {\n const { chart, plot, order } = render;\n const series = legendSeries(chart);\n const widths = legendItemWidths(chart);\n const totalWidth = widths.reduce((sum, width) => sum + width, 0);\n const y = legendY(chart, plot);\n let x = legendStartX(chart, plot, totalWidth);\n return series.map((item, seriesIndex) => {\n const width = widths[seriesIndex];\n const itemX = x;\n x += width;\n return { series: item, seriesIndex, x: itemX, y, width, order: order + (series.length - 1 - seriesIndex) * 2 };\n });\n}\n\nfunction createLegendItems(render: ChartLegendRender): ChartLegendItem[] {\n return isStackedLegendPosition(render.chart.legendPosition)\n ? createStackedLegendItems(render)\n : createRowLegendItems(render);\n}\n\nfunction renderLegendItem(render: ChartLegendRender, item: ChartLegendItem): RenderNode[] {\n return [createLegendSwatch(render, item), createLegendLabel(render, item)];\n}\n\nfunction createLegendSwatch(render: ChartLegendRender, item: ChartLegendItem): RenderNode {\n const { chart, bounds, diagnostics } = render;\n const fallback = CHART_COLORS[item.seriesIndex % CHART_COLORS.length];\n const solidOnly = chart.chartType === 'line';\n const color = solidOnly ? representativeColor(item.series.color, fallback) : (item.series.color ?? fallback);\n return {\n type: 'rect',\n id: `chart-legend-swatch-${chart.id}-${item.series.id}`,\n order: item.order,\n bounds,\n x: item.x,\n y: item.y,\n width: 10,\n height: 10,\n rx: 3,\n prop: seriesColorProp(item.series.id),\n propKind: 'color',\n propSolidOnly: solidOnly,\n style: { fill: paint(color, diagnostics, chart.id) },\n };\n}\n\nfunction createLegendLabel(render: ChartLegendRender, item: ChartLegendItem): RenderNode {\n const { chart, bounds } = render;\n return {\n ...chartText({\n role: 'legend',\n id: `chart-legend-${chart.id}-${item.series.id}`,\n order: item.order + 1,\n bounds,\n frame: { x: item.x + 15, y: item.y - 3, width: item.width - 15, height: 18 },\n text: item.series.label,\n chart,\n }),\n prop: seriesLabelProp(item.series.id),\n };\n}\n","import type { Chart } from '../../../model/chart';\nimport type { Bounds } from '../../scene';\nimport { boxBounds, finite } from '../../scene';\nimport { isHorizontalBar } from '../primitives';\nimport { isStackedLegendPosition, LEGEND_COLUMN_GAP, LEGEND_ROW_HEIGHT, stackedLegendColumnWidth } from './legend';\n\nexport const CARTESIAN_VALUE_TYPES = new Set(['bar', 'line', 'scatter', 'boxplot', 'hexbin', 'custom', 'field']);\nconst CHARTS_WITHOUT_CARTESIAN_DECORATIONS = new Set([\n 'heatmap',\n 'sankey',\n 'treemap',\n 'mekko',\n 'pie',\n 'radialBar',\n 'polarArea',\n]);\n\nexport function hasCartesianDecorations(chart: Chart): boolean {\n return !CHARTS_WITHOUT_CARTESIAN_DECORATIONS.has(chart.chartType);\n}\n\nexport function tickOffset(chart: Chart): number {\n return hasCartesianDecorations(chart) ? Math.max(0, finite(chart.tickLength, 0)) : 0;\n}\n\nfunction isHorizontalBoxplot(chart: Chart): boolean {\n return chart.chartType === 'boxplot' && chart.config?.orientation === 'horizontal';\n}\n\nfunction boxplotCategoryLabelWidth(chart: Chart): number {\n const fontSize = finite(chart.fontSize, 12);\n const longest = Math.max(0, ...chart.series.map(series => (series.label || series.id).length));\n return longest * fontSize * 0.58 + 16;\n}\n\nconst TREEMAP_SIDE_LEGEND_WIDTH = 66;\n\nfunction treemapSideLegendSide(chart: Chart, showLegend: boolean): 'left' | 'right' | null {\n if (chart.chartType !== 'treemap' || !showLegend) {\n return null;\n }\n return chart.legendPosition === 'left' ? 'left' : chart.legendPosition === 'right' ? 'right' : null;\n}\n\nexport interface ChartLayout {\n bounds: Bounds;\n plot: { x: number; y: number; width: number; height: number };\n showLabels: boolean;\n showLegend: boolean;\n padLeft: number;\n}\n\nfunction barCategoryLabelWidth(chart: Chart): number {\n const fontSize = finite(chart.axisFontSize ?? chart.fontSize, 12);\n const categories = (chart.config as { categories?: string[] } | undefined)?.categories ?? [];\n return Math.max(0, ...categories.map(category => category.length)) * fontSize * 0.58 + 16;\n}\n\nfunction leftLabelWidth(chart: Chart): number {\n if (isHorizontalBoxplot(chart)) {\n return boxplotCategoryLabelWidth(chart);\n }\n if (isHorizontalBar(chart)) {\n return chart.categoryAlign === 'left' || chart.categoryAlign === 'inside' ? 20 : barCategoryLabelWidth(chart);\n }\n if (chart.showValueAxis === false) {\n return 20;\n }\n return chart.axisY.label ? 60 : 46;\n}\n\nexport function decorations(chart: Chart): ChartLayout {\n const showLabels = chart.showAxisLabels !== false;\n const showLegend = chart.showLegend !== false;\n const legendPosition = chart.legendPosition ?? 'top';\n const legendAtTop = legendPosition === 'top';\n const hasLegendItems = showLegend && chart.series.length > 0;\n const legendStacked = hasLegendItems && isStackedLegendPosition(legendPosition);\n const sideColumnWidth = legendStacked ? stackedLegendColumnWidth(chart) + LEGEND_COLUMN_GAP : 0;\n const treemapSide = treemapSideLegendSide(chart, showLegend);\n\n const tick = tickOffset(chart);\n const padLeft =\n tick +\n (showLabels ? leftLabelWidth(chart) : 12) +\n (legendPosition === 'bottomLeft' ? sideColumnWidth : 0) +\n (treemapSide === 'left' ? TREEMAP_SIDE_LEGEND_WIDTH : 0);\n const padRight =\n 24 +\n (legendPosition === 'bottomRight' ? sideColumnWidth : 0) +\n (treemapSide === 'right' ? TREEMAP_SIDE_LEGEND_WIDTH : 0);\n const valueRow =\n chart.chartType === 'bar' && chart.config?.showBarLabels === true && chart.config.barLabelPosition === 'axis';\n const horizontalValueAxis = isHorizontalBar(chart) && chart.showValueAxis !== false;\n const basePadBottom = showLabels\n ? isHorizontalBar(chart)\n ? horizontalValueAxis\n ? 34\n : 12\n : (chart.axisX.label ? 52 : 34) + (valueRow ? 18 : 0)\n : 12;\n const hasColorBar = chart.chartType === 'field' && showLegend && Boolean(chart.config?.scale?.stops.length);\n const legendAtBottomRow = hasLegendItems && !legendAtTop && !legendStacked;\n const padBottom = tick + basePadBottom + (hasColorBar ? 44 : 0) + (legendAtBottomRow ? 16 + LEGEND_ROW_HEIGHT : 0);\n const titleHeight = chart.title ? Math.max(44, 20 + finite(chart.titleSize, 14) * 1.6) : 0;\n const padTop = titleHeight || (legendAtTop && hasLegendItems ? 44 : 24);\n\n return {\n bounds: boxBounds(\n { x: chart.x, y: chart.y, width: chart.width, height: chart.height },\n finite(chart.strokeWidth, 1) + 2,\n ),\n plot: {\n x: chart.x + padLeft,\n y: chart.y + padTop,\n width: Math.max(1, chart.width - padLeft - padRight),\n height: Math.max(1, chart.height - padTop - padBottom),\n },\n showLabels,\n showLegend,\n padLeft,\n };\n}\n","import type { TypedChart } from '../../../model/chart';\nimport type { RenderNode } from '../../scene';\nimport { finite } from '../../scene';\nimport { barCategoryCount, chartText } from '../primitives';\nimport { categoryProp, seriesLabelProp } from '../propPath';\nimport { type ChartLayout, tickOffset } from './layout';\n\nfunction categoryLabels(chart: TypedChart, count: number): string[] {\n if (chart.config?.categories?.length) {\n return chart.config.categories;\n }\n return Array.from({ length: count }, (_value, index) => String(index + 1));\n}\n\nexport function buildCategoricalXAxisTicks(chart: TypedChart, layout: ChartLayout, order: number): RenderNode[] {\n const count = barCategoryCount(chart);\n const slotWidth = layout.plot.width / count;\n const labels = categoryLabels(chart, count);\n\n const editable = Boolean(chart.config?.categories?.length);\n const left = chart.categoryAlign === 'left';\n const groupGap = left\n ? Math.min(\n Math.max(0, finite((chart.config as { barGroupGap?: number } | undefined)?.barGroupGap, 8)),\n Math.max(0, slotWidth - 1),\n )\n : 0;\n\n return Array.from({ length: count }, (_value, index) => {\n const centerX = layout.plot.x + (index + 0.5) * slotWidth;\n return {\n ...chartText({\n role: 'axis',\n id: `chart-x-tick-${chart.id}-${index}`,\n order: order + index,\n bounds: layout.bounds,\n frame: {\n x: left ? layout.plot.x + index * slotWidth + groupGap / 2 : centerX - slotWidth / 2,\n y: layout.plot.y + layout.plot.height + 4 + tickOffset(chart),\n width: left ? slotWidth - groupGap : slotWidth,\n height: 18,\n },\n text: labels[index] ?? String(index + 1),\n chart,\n align: left ? 'left' : 'center',\n }),\n prop: editable ? categoryProp(index) : undefined,\n };\n });\n}\n\nexport function buildSeriesXAxisTicks(chart: TypedChart, layout: ChartLayout, order: number): RenderNode[] {\n const count = Math.max(1, chart.series.length);\n const slotWidth = layout.plot.width / count;\n\n return chart.series.map((series, index) => {\n const centerX = layout.plot.x + (index + 0.5) * slotWidth;\n return {\n ...chartText({\n role: 'axis',\n id: `chart-x-tick-${chart.id}-${index}`,\n order: order + index,\n bounds: layout.bounds,\n frame: {\n x: centerX - slotWidth / 2,\n y: layout.plot.y + layout.plot.height + 4 + tickOffset(chart),\n width: slotWidth,\n height: 18,\n },\n text: series.label || series.id,\n chart,\n align: 'center',\n }),\n prop: seriesLabelProp(series.id),\n };\n });\n}\n","import type { Chart } from '../../../model/chart';\nimport type { RenderNode } from '../../scene';\nimport { chartText, chartTicks, mapChartValue } from '../primitives';\nimport { type ChartLayout, tickOffset } from './layout';\n\nexport function buildNumericXAxisTicks(chart: Chart, layout: ChartLayout, order: number): RenderNode[] {\n return chartTicks(chart.axisX).map((tick, index) => {\n const x = layout.plot.x + mapChartValue(tick, chart.axisX, layout.plot.width);\n return chartText({\n role: 'axis',\n id: `chart-x-tick-${chart.id}-${tick}`,\n order: order + index,\n bounds: layout.bounds,\n frame: { x: x - 20, y: layout.plot.y + layout.plot.height + 10 + tickOffset(chart), width: 40, height: 18 },\n text: String(tick),\n chart,\n align: 'center',\n });\n });\n}\n","import type { Chart } from '../../../model/chart';\nimport type { RenderNode } from '../../scene';\nimport { chartText, chartTicks, mapChartValue } from '../primitives';\nimport { type ChartLayout, tickOffset } from './layout';\n\nexport function buildNumericYAxisTicks(chart: Chart, layout: ChartLayout, order: number): RenderNode[] {\n return chartTicks(chart.axisY).map((tick, index) => {\n const y = layout.plot.y + layout.plot.height - mapChartValue(tick, chart.axisY, layout.plot.height);\n return chartText({\n role: 'axis',\n id: `chart-y-tick-${chart.id}-${tick}`,\n order: order + index,\n bounds: layout.bounds,\n frame: { x: chart.x, y: y - 6, width: layout.padLeft - 14 - tickOffset(chart), height: 18 },\n text: String(tick),\n chart,\n align: 'right',\n });\n });\n}\n","import type { Chart } from '../../../model/chart';\nimport type { RenderNode, SceneStyle } from '../../scene';\nimport { finite } from '../../scene';\nimport {\n barCategoryCount,\n chartText,\n chartTicks,\n horizontalRows,\n isHorizontalBar,\n mapChartValue,\n rowTop,\n} from '../primitives';\nimport { categoryProp } from '../propPath';\nimport { buildAxisLabels } from './axisLabels';\nimport { buildBoxplotSeriesYAxisTicks } from './boxplotYAxis';\nimport { buildCategoricalXAxisTicks, buildSeriesXAxisTicks } from './categoricalXAxis';\nimport { type ChartLayout, hasCartesianDecorations } from './layout';\nimport { buildNumericXAxisTicks } from './numericXAxis';\nimport { buildNumericYAxisTicks } from './numericYAxis';\n\nfunction isHorizontalBoxplot(chart: Chart): boolean {\n return chart.chartType === 'boxplot' && chart.config?.orientation === 'horizontal';\n}\n\nfunction buildXAxisTicks(chart: Chart, layout: ChartLayout, order: number): RenderNode[] {\n if (chart.chartType === 'bar') {\n return buildCategoricalXAxisTicks(chart, layout, order);\n }\n if (chart.chartType === 'boxplot' && !isHorizontalBoxplot(chart)) {\n return buildSeriesXAxisTicks(chart, layout, order);\n }\n return buildNumericXAxisTicks(chart, layout, order);\n}\n\nfunction buildYAxisTicks(chart: Chart, layout: ChartLayout, order: number): RenderNode[] {\n if (isHorizontalBoxplot(chart)) {\n return buildBoxplotSeriesYAxisTicks(chart, layout, order);\n }\n return chart.showValueAxis === false ? [] : buildNumericYAxisTicks(chart, layout, order);\n}\n\nfunction xTickPositions(chart: Chart, layout: ChartLayout): number[] {\n const { plot } = layout;\n if (chart.chartType === 'bar') {\n const count = barCategoryCount(chart);\n return Array.from({ length: count }, (_value, index) => plot.x + ((index + 0.5) * plot.width) / count);\n }\n return chartTicks(chart.axisX).map(tick => plot.x + mapChartValue(tick, chart.axisX, plot.width));\n}\n\nfunction axisLineDash(chart: Chart, width: number): Pick<SceneStyle, 'dash' | 'lineCap'> {\n if (chart.axisLineStyle === 'dashed') {\n return { dash: [width * 3, width * 2] };\n }\n return chart.axisLineStyle === 'dotted' ? { dash: [0.1, width * 3], lineCap: 'round' } : {};\n}\n\nfunction buildAxisLines(chart: Chart, layout: ChartLayout, order: number): RenderNode[] {\n const lineWidth = finite(chart.axisLineWidth, 0);\n const tickLength = finite(chart.tickLength, 0);\n if (lineWidth <= 0 && tickLength <= 0) {\n return [];\n }\n const { plot, bounds } = layout;\n const bottom = plot.y + plot.height;\n const style: SceneStyle = {\n fill: { kind: 'none' },\n stroke: { kind: 'solid', color: chart.axisLineColor ?? chart.gridColor ?? '#94a3b8' },\n strokeWidth: lineWidth > 0 ? lineWidth : 1,\n pointerEvents: 'none',\n ...axisLineDash(chart, lineWidth > 0 ? lineWidth : 1),\n };\n const nodes: RenderNode[] = [];\n const add = (id: string, d: string) =>\n nodes.push({ type: 'path', id: `chart-axis-${id}-${chart.id}`, order: order + nodes.length, bounds, d, style });\n if (lineWidth > 0) {\n if (chart.showValueAxis !== false) {\n add('line-y', `M ${plot.x} ${plot.y} L ${plot.x} ${bottom}`);\n }\n add('line-x', `M ${plot.x} ${bottom} L ${plot.x + plot.width} ${bottom}`);\n }\n if (tickLength > 0 && isHorizontalBar(chart)) {\n chartTicks(chart.axisY).forEach(tick => {\n const x = plot.x + mapChartValue(tick, chart.axisY, plot.width);\n add(`tick-v-${tick}`, `M ${x} ${bottom} L ${x} ${bottom + tickLength}`);\n });\n const rows = horizontalRows(chart, plot);\n for (let index = 0; index < rows.count; index++) {\n const y = rowTop(rows, plot, index) + rows.labelRow + rows.barsHeight / 2;\n add(`tick-c-${index}`, `M ${plot.x - tickLength} ${y} L ${plot.x} ${y}`);\n }\n }\n if (tickLength > 0 && !isHorizontalBoxplot(chart) && !isHorizontalBar(chart)) {\n chartTicks(chart.axisY).forEach(tick => {\n const y = bottom - mapChartValue(tick, chart.axisY, plot.height);\n add(`tick-y-${tick}`, `M ${plot.x - tickLength} ${y} L ${plot.x} ${y}`);\n });\n xTickPositions(chart, layout).forEach((x, index) => {\n add(`tick-x-${index}`, `M ${x} ${bottom} L ${x} ${bottom + tickLength}`);\n });\n }\n return nodes;\n}\n\nfunction categoryNames(chart: Chart, count: number): string[] {\n const names = (chart.config as { categories?: string[] } | undefined)?.categories;\n return Array.from({ length: count }, (_value, index) => names?.[index] ?? String(index + 1));\n}\n\nfunction buildHorizontalBarAxes(chart: Chart, layout: ChartLayout, order: number): RenderNode[] {\n const { plot, bounds } = layout;\n const rows = horizontalRows(chart, plot);\n const above = chart.categoryAlign === 'left';\n const inside = chart.categoryAlign === 'inside';\n const editable = Boolean((chart.config as { categories?: string[] } | undefined)?.categories?.length);\n const nodes: RenderNode[] = categoryNames(chart, rows.count).map((name, index) => {\n const top = rowTop(rows, plot, index);\n return {\n ...chartText({\n role: 'axis',\n id: `chart-y-category-${chart.id}-${index}`,\n order: order + index,\n bounds,\n frame: above\n ? { x: plot.x, y: top, width: plot.width, height: rows.labelRow }\n : inside\n ? { x: plot.x + 14, y: top + rows.barsHeight / 2 - 9, width: plot.width - 28, height: 18 }\n : { x: chart.x + 8, y: top + rows.barsHeight / 2 - 9, width: plot.x - chart.x - 16, height: 18 },\n text: name,\n chart,\n align: above || inside ? 'left' : 'right',\n }),\n prop: editable ? categoryProp(index) : undefined,\n };\n });\n if (chart.showValueAxis !== false) {\n chartTicks(chart.axisY).forEach((tick, index) => {\n const x = plot.x + mapChartValue(tick, chart.axisY, plot.width);\n nodes.push(\n chartText({\n role: 'axis',\n id: `chart-x-tick-${chart.id}-${tick}`,\n order: order + rows.count + index,\n bounds,\n frame: { x: x - 20, y: plot.y + plot.height + 4 + finite(chart.tickLength, 0), width: 40, height: 18 },\n text: String(tick),\n chart,\n align: 'center',\n }),\n );\n });\n }\n return nodes;\n}\n\nexport function buildChartAxes(chart: Chart, layout: ChartLayout, order: number): RenderNode[] {\n if (!hasCartesianDecorations(chart)) {\n return [];\n }\n const lines = buildAxisLines(chart, layout, order);\n if (!layout.showLabels) {\n return lines;\n }\n order += lines.length;\n if (isHorizontalBar(chart)) {\n return [...lines, ...buildHorizontalBarAxes(chart, layout, order)];\n }\n\n const xTicks = buildXAxisTicks(chart, layout, order);\n const yTicks = buildYAxisTicks(chart, layout, order + xTicks.length);\n const labels = buildAxisLabels(chart, layout, order + xTicks.length + yTicks.length);\n return [...lines, ...xTicks, ...yTicks, ...labels];\n}\n","import type { FieldSample } from './types';\n\nexport function idwInterpolate(samples: FieldSample[], pointX: number, pointY: number, power: number): number {\n let weightedSum = 0;\n let weightSum = 0;\n for (const sample of samples) {\n const deltaX = sample.x - pointX;\n const deltaY = sample.y - pointY;\n const distanceSquared = deltaX * deltaX + deltaY * deltaY;\n if (distanceSquared === 0) {\n return sample.value;\n }\n const weight = 1 / distanceSquared ** (power / 2);\n weightedSum += weight * sample.value;\n weightSum += weight;\n }\n return weightSum === 0 ? 0 : weightedSum / weightSum;\n}\n","import type { Chart } from '../../../model/chart';\nimport type { SceneStyle } from '../../scene';\nimport { idwInterpolate } from './idw';\nimport type { FieldGrid, FieldSample } from './types';\n\nexport const FIELD_GRID_MAX_CELLS = 32;\n\nexport function fieldSurfaceClip(\n chart: Chart,\n plot: { x: number; y: number; width: number; height: number },\n): SceneStyle['clip'] {\n return { type: 'rect', x: plot.x, y: plot.y, width: plot.width, height: plot.height, rx: chart.cornerRadius ?? 12 };\n}\n\nexport function computeFieldGrid(samples: FieldSample[], width: number, height: number, power: number): FieldGrid {\n const aspect = width > 0 && height > 0 ? width / height : 1;\n const cols = Math.max(\n 2,\n Math.min(FIELD_GRID_MAX_CELLS, Math.round(Math.sqrt(FIELD_GRID_MAX_CELLS * FIELD_GRID_MAX_CELLS * aspect))),\n );\n const rows = Math.max(2, Math.round(cols / aspect));\n const grid = new Float32Array(cols * rows);\n for (let row = 0; row < rows; row++) {\n const pointY = height * (row / (rows - 1));\n for (let column = 0; column < cols; column++) {\n const pointX = width * (column / (cols - 1));\n grid[row * cols + column] = samples.length ? idwInterpolate(samples, pointX, pointY, power) : 0;\n }\n }\n return { grid, cols, rows };\n}\n","import type { ChartType } from '../../model/chart';\n\nexport const CIRCULAR_GRID_CHART_TYPES: ReadonlySet<ChartType> = new Set(['scatter', 'custom', 'hexbin']);\n","import type { Chart } from '../../../model/chart';\nimport type { Bounds, RenderNode, SceneStyle } from '../../scene';\n\nexport function createGridDot(\n chart: Chart,\n id: string,\n order: number,\n bounds: Bounds,\n x: number,\n y: number,\n width: number,\n clip: SceneStyle['clip'],\n): RenderNode {\n const radius = Math.max(1, width * 1.5);\n const style = { fill: { kind: 'solid' as const, color: chart.gridColor ?? '#e2e8f0' }, clip };\n if (chart.gridRoundedCorners === true) {\n return { type: 'ellipse', id, order, bounds, cx: x, cy: y, rx: radius, ry: radius, style };\n }\n const size = radius * 2;\n return { type: 'rect', id, order, bounds, x: x - radius, y: y - radius, width: size, height: size, style };\n}\n","import type { Chart } from '../../../model/chart';\nimport type { SceneStyle } from '../../scene';\n\nexport function gridLineDashStyle(chart: Chart, width: number): Pick<SceneStyle, 'dash' | 'lineCap'> {\n if (chart.gridLineStyle !== 'dashed') {\n return {};\n }\n const rounded = chart.gridRoundedCorners === true;\n return { dash: [width * 3, width * 2], lineCap: rounded ? 'round' : 'butt' };\n}\n","import type { Chart } from '../../../model/chart';\nimport type { Bounds, RenderNode, SceneStyle } from '../../scene';\nimport { finite } from '../../scene';\nimport { chartTicks } from '../primitives';\nimport { angleForAxisValue } from '../primitives/radarShape';\nimport { createGridDot } from './gridDots';\nimport { gridLineDashStyle } from './gridLineStyle';\nimport type { ChartLayout } from './layout';\n\nexport function buildCircularChartGrid(\n chart: Chart,\n plot: ChartLayout['plot'],\n bounds: Bounds,\n order: number,\n): RenderNode[] {\n const centerX = plot.x + plot.width / 2;\n const centerY = plot.y + plot.height / 2;\n const radius = Math.max(0, Math.min(plot.width, plot.height) / 2);\n const width = finite(chart.gridWidth, 1);\n\n if (chart.gridLineStyle === 'dotted') {\n return buildDottedCircularGrid(chart, bounds, order, centerX, centerY, radius, width);\n }\n\n const style: SceneStyle = {\n fill: { kind: 'none' },\n stroke: { kind: 'solid', color: chart.gridColor ?? '#e2e8f0' },\n strokeWidth: width,\n ...gridLineDashStyle(chart, width),\n };\n\n const nodes: RenderNode[] = [];\n chartTicks(chart.axisY)\n .filter(tick => tick > chart.axisY.min)\n .forEach(tick => {\n const ringRadius = radius * ringRatio(chart, tick);\n nodes.push({\n type: 'ellipse',\n id: `chart-grid-ring-${chart.id}-${tick}`,\n order: order + nodes.length,\n bounds,\n cx: centerX,\n cy: centerY,\n rx: ringRadius,\n ry: ringRadius,\n style,\n });\n });\n\n chartTicks(chart.axisX).forEach(tick => {\n const angle = angleForAxisValue(chart.axisX.min, chart.axisX.max, tick);\n const edgeX = centerX + Math.cos(angle) * radius;\n const edgeY = centerY + Math.sin(angle) * radius;\n nodes.push({\n type: 'path',\n id: `chart-grid-spoke-${chart.id}-${tick}`,\n order: order + nodes.length,\n bounds,\n d: `M ${centerX} ${centerY} L ${edgeX} ${edgeY}`,\n style,\n });\n });\n\n return nodes;\n}\n\nfunction buildDottedCircularGrid(\n chart: Chart,\n bounds: Bounds,\n order: number,\n centerX: number,\n centerY: number,\n radius: number,\n width: number,\n): RenderNode[] {\n const yTicks = chartTicks(chart.axisY).filter(tick => tick > chart.axisY.min);\n const xTicks = chartTicks(chart.axisX);\n const nodes: RenderNode[] = [];\n yTicks.forEach(yTick => {\n const ringRadius = radius * ringRatio(chart, yTick);\n xTicks.forEach(xTick => {\n const angle = angleForAxisValue(chart.axisX.min, chart.axisX.max, xTick);\n const x = centerX + Math.cos(angle) * ringRadius;\n const y = centerY + Math.sin(angle) * ringRadius;\n const id = `chart-grid-dot-${chart.id}-${xTick}-${yTick}`;\n nodes.push(createGridDot(chart, id, order + nodes.length, bounds, x, y, width, undefined));\n });\n });\n return nodes;\n}\n\nfunction ringRatio(chart: Chart, tick: number): number {\n const range = chart.axisY.max - chart.axisY.min;\n return range === 0 ? 0 : Math.max(0, Math.min(1, (tick - chart.axisY.min) / range));\n}\n","import type { Chart } from '../../../model/chart';\nimport type { Bounds, RenderNode, SceneStyle } from '../../scene';\nimport { finite } from '../../scene';\nimport { fieldSurfaceClip } from '../field/grid';\nimport { CIRCULAR_GRID_CHART_TYPES } from '../gridSupport';\nimport { chartTicks, isHorizontalBar, mapChartValue } from '../primitives';\nimport { buildCircularChartGrid } from './gridCircle';\nimport { createGridDot } from './gridDots';\nimport { gridLineDashStyle } from './gridLineStyle';\nimport { type ChartLayout, hasCartesianDecorations } from './layout';\n\nexport function buildChartGrid(chart: Chart, plot: ChartLayout['plot'], bounds: Bounds, order: number): RenderNode[] {\n if (chart.showGrid === false || !hasCartesianDecorations(chart)) {\n return [];\n }\n\n if (chart.gridShape === 'circle' && CIRCULAR_GRID_CHART_TYPES.has(chart.chartType)) {\n return buildCircularChartGrid(chart, plot, bounds, order);\n }\n\n const width = finite(chart.gridWidth, 1);\n if (isHorizontalBar(chart)) {\n return buildHorizontalBarGrid(chart, plot, bounds, order, width);\n }\n const clip = chart.chartType === 'field' ? fieldSurfaceClip(chart, plot) : undefined;\n if (chart.gridLineStyle === 'dotted') {\n return buildDottedRectGrid(chart, plot, bounds, order, width, clip);\n }\n\n const style: SceneStyle = {\n fill: { kind: 'none' },\n stroke: { kind: 'solid', color: chart.gridColor ?? '#e2e8f0' },\n strokeWidth: width,\n ...gridLineDashStyle(chart, width),\n clip,\n };\n\n const nodes: RenderNode[] = [];\n (chart.gridAxes === 'y' ? [] : chartTicks(chart.axisX)).forEach(tick => {\n const x = plot.x + mapChartValue(tick, chart.axisX, plot.width);\n nodes.push({\n type: 'path',\n id: `chart-grid-x-${chart.id}-${tick}`,\n order: order + nodes.length,\n bounds,\n d: `M ${x} ${plot.y} L ${x} ${plot.y + plot.height}`,\n style,\n });\n });\n (chart.gridAxes === 'x' ? [] : chartTicks(chart.axisY)).forEach(tick => {\n const y = plot.y + plot.height - mapChartValue(tick, chart.axisY, plot.height);\n nodes.push({\n type: 'path',\n id: `chart-grid-y-${chart.id}-${tick}`,\n order: order + nodes.length,\n bounds,\n d: `M ${plot.x} ${y} L ${plot.x + plot.width} ${y}`,\n style,\n });\n });\n return nodes;\n}\n\nfunction buildHorizontalBarGrid(\n chart: Chart,\n plot: ChartLayout['plot'],\n bounds: Bounds,\n order: number,\n width: number,\n): RenderNode[] {\n if (chart.gridAxes === 'y') {\n return [];\n }\n const style: SceneStyle = {\n fill: { kind: 'none' },\n stroke: { kind: 'solid', color: chart.gridColor ?? '#e2e8f0' },\n strokeWidth: width,\n ...(chart.gridLineStyle === 'dotted'\n ? { dash: [0.1, width * 3], lineCap: 'round' as const }\n : gridLineDashStyle(chart, width)),\n };\n return chartTicks(chart.axisY).map((tick, index) => {\n const x = plot.x + mapChartValue(tick, chart.axisY, plot.width);\n return {\n type: 'path',\n id: `chart-grid-x-${chart.id}-${tick}`,\n order: order + index,\n bounds,\n d: `M ${x} ${plot.y} L ${x} ${plot.y + plot.height}`,\n style,\n };\n });\n}\n\nfunction buildDottedRectGrid(\n chart: Chart,\n plot: ChartLayout['plot'],\n bounds: Bounds,\n order: number,\n width: number,\n clip: SceneStyle['clip'],\n): RenderNode[] {\n const xTicks = chartTicks(chart.axisX);\n const yTicks = chartTicks(chart.axisY);\n const nodes: RenderNode[] = [];\n xTicks.forEach(xTick => {\n const x = plot.x + mapChartValue(xTick, chart.axisX, plot.width);\n yTicks.forEach(yTick => {\n const y = plot.y + plot.height - mapChartValue(yTick, chart.axisY, plot.height);\n const id = `chart-grid-dot-${chart.id}-${xTick}-${yTick}`;\n nodes.push(createGridDot(chart, id, order + nodes.length, bounds, x, y, width, clip));\n });\n });\n return nodes;\n}\n","import type { Chart, ChartRule } from '../../../model/chart';\nimport type { Bounds, RenderNode } from '../../scene';\nimport { finite } from '../../scene';\nimport { chartText, mapChartValue } from '../primitives';\nimport { ruleAtProp, ruleTextProp } from '../propPath';\nimport type { ChartLayout } from './layout';\n\nexport interface ChartRulesRender {\n chart: Chart;\n plot: ChartLayout['plot'];\n bounds: Bounds;\n order: number;\n}\n\ninterface ChartRuleMark {\n rule: ChartRule;\n color: string;\n y: number;\n lineOrder: number;\n labelOrder?: number;\n}\n\nexport function buildChartRules(render: ChartRulesRender): RenderNode[] {\n if (!render.chart.rules?.length) {\n return [];\n }\n return createChartRuleMarks(render).flatMap(mark => renderChartRule(render, mark));\n}\n\nfunction createChartRuleMarks(render: ChartRulesRender): ChartRuleMark[] {\n let nextOrder = render.order;\n return (render.chart.rules ?? []).map(rule => {\n const lineOrder = nextOrder++;\n const labelOrder = rule.text ? nextOrder++ : undefined;\n return {\n rule,\n color: rule.color || render.chart.strokeColor || '#475569',\n y: render.plot.y + render.plot.height - mapChartValue(rule.at, render.chart.axisY, render.plot.height),\n lineOrder,\n labelOrder,\n };\n });\n}\n\nfunction renderChartRule(render: ChartRulesRender, mark: ChartRuleMark): RenderNode[] {\n const nodes = [createChartRuleLine(render, mark)];\n if (mark.rule.text && mark.labelOrder !== undefined) {\n nodes.push(createChartRuleLabel(render, mark));\n }\n return nodes;\n}\n\nfunction createChartRuleLine(render: ChartRulesRender, mark: ChartRuleMark): RenderNode {\n return {\n type: 'path',\n id: `chart-rule-${render.chart.id}-${mark.rule.id}`,\n order: mark.lineOrder,\n bounds: render.bounds,\n d: `M ${render.plot.x} ${mark.y} L ${render.plot.x + render.plot.width} ${mark.y}`,\n prop: ruleAtProp(mark.rule.id),\n propKind: 'value',\n style: {\n fill: { kind: 'none' },\n stroke: { kind: 'solid', color: mark.color },\n strokeWidth: mark.rule.strokeWidth ?? 1,\n dash: mark.rule.dash,\n },\n };\n}\n\nfunction createChartRuleLabel(render: ChartRulesRender, mark: ChartRuleMark): RenderNode {\n const fontSize = Math.max(9, finite(render.chart.fontSize, 12) - 2);\n return {\n ...chartText({\n id: `chart-rule-label-${render.chart.id}-${mark.rule.id}`,\n order: mark.labelOrder ?? mark.lineOrder + 1,\n bounds: render.bounds,\n frame: { x: render.plot.x + 4, y: mark.y - fontSize - 2, width: 160, height: fontSize + 2 },\n text: mark.rule.text ?? '',\n chart: render.chart,\n }),\n color: mark.color,\n prop: ruleTextProp(mark.rule.id),\n };\n}\n","import type { Chart } from '../../model/chart';\nimport type { Bounds, RenderNode } from '../scene';\nimport { finite } from '../scene';\nimport type { ChartRenderOrder } from './chartRenderOrder';\n\nexport function chartImageRect(chart: Chart): { x: number; y: number; width: number; height: number; rx: number } {\n const inset = finite(chart.strokeWidth, 1) / 2;\n return {\n x: chart.x + inset,\n y: chart.y + inset,\n width: Math.max(1, chart.width - inset * 2),\n height: Math.max(1, chart.height - inset * 2),\n rx: Math.max(0, finite(chart.cornerRadius, 12) - inset),\n };\n}\n\nexport function buildChartBackdrop(chart: Chart, bounds: Bounds, order: ChartRenderOrder): RenderNode[] {\n if (!chart.fillImage) {\n return [];\n }\n const rect = chartImageRect(chart);\n const nodes: RenderNode[] = [\n {\n type: 'image',\n id: `chart-image-${chart.id}`,\n order: order.next(),\n bounds,\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n href: chart.fillImage.url,\n style: { clip: { type: 'rect', ...rect }, pointerEvents: 'none' },\n },\n ];\n if (chart.fillImage.overlay) {\n nodes.push({\n type: 'rect',\n id: `chart-image-overlay-${chart.id}`,\n order: order.next(),\n bounds,\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n rx: rect.rx,\n style: { fill: { kind: 'solid', color: chart.fillImage.overlay }, pointerEvents: 'none' },\n });\n }\n return nodes;\n}\n","import type { RenderNode } from '../../../scene';\nimport { finite } from '../../../scene';\nimport { chartImageRect } from '../../chartBackdrop';\nimport { buildChartGrid } from '../../decorations/grid';\nimport type { ChartRenderContext } from '../types';\n\nexport function createGlassBackdropNodes(context: ChartRenderContext, id: string, d: string): RenderNode[] {\n const { chart, bounds, nextOrder } = context;\n const blur = finite(chart.config?.barGlassBlur, 0);\n if (blur <= 0 || !chart.fillImage) {\n return [];\n }\n const rect = chartImageRect(chart);\n const nodes: RenderNode[] = [\n {\n type: 'image',\n id: `chart-bar-glass-${chart.id}-${id}`,\n order: nextOrder(),\n bounds,\n x: rect.x,\n y: rect.y,\n width: rect.width,\n height: rect.height,\n href: chart.fillImage.url,\n style: {\n blur,\n saturate: finite(chart.config?.barGlassSaturation, 1),\n clip: { type: 'path', d },\n pointerEvents: 'none',\n },\n },\n ];\n if (chart.fillImage.overlay) {\n nodes.push({\n type: 'path',\n id: `chart-bar-glass-overlay-${chart.id}-${id}`,\n order: nextOrder(),\n bounds,\n d,\n style: { fill: { kind: 'solid', color: chart.fillImage.overlay }, pointerEvents: 'none' },\n });\n }\n if (chart.config?.barGlassTint) {\n nodes.push({\n type: 'path',\n id: `chart-bar-glass-tint-${chart.id}-${id}`,\n order: nextOrder(),\n bounds,\n d,\n style: { fill: { kind: 'solid', color: chart.config.barGlassTint }, pointerEvents: 'none' },\n });\n }\n nodes.push(\n ...buildChartGrid(chart, context.plot, bounds, 0).map(node => ({\n ...node,\n id: `${node.id}-glass-${id}`,\n order: nextOrder(),\n style: {\n ...('style' in node ? node.style : {}),\n clip: { type: 'path' as const, d },\n pointerEvents: 'none' as const,\n },\n })),\n );\n return nodes;\n}\n","import type { ChartSeries } from '../../../../model/chart';\nimport type { RenderNode } from '../../../scene';\nimport { paint } from '../../../scene';\nimport { representativeColor } from '../../primitives';\nimport type { ChartRenderContext } from '../types';\n\nexport function createBarGlowNode(\n context: ChartRenderContext,\n id: string,\n d: string,\n color: NonNullable<ChartSeries['color']>,\n glow: number,\n bounds: RenderNode['bounds'] = context.bounds,\n): RenderNode {\n const { chart, diagnostics, nextOrder } = context;\n return {\n type: 'path',\n id,\n order: nextOrder(),\n bounds,\n d,\n style: {\n fill: paint(color, diagnostics, chart.id),\n shadow: { color: representativeColor(color, '#ffffff'), opacity: 0.9, blur: glow, dx: 0, dy: 0 },\n pointerEvents: 'none',\n },\n };\n}\n","import type { RenderNode } from '../../../scene';\nimport { finite, paint } from '../../../scene';\nimport { BAR_LABEL, barLabelSize, CATEGORY_LABEL_ROW, chartText, formatBarLabel, pillPath } from '../../primitives';\nimport type { BarLabelSize } from '../../primitives/barLabel';\nimport type { ChartRenderContext } from '../types';\n\nexport type BarLabelPlacement = 'outside' | 'inside' | 'center' | 'axis';\n\nexport interface BarLabelTarget {\n id: string;\n value: number;\n frame: { x: number; y: number; width: number; height: number };\n placement: BarLabelPlacement;\n horizontal?: boolean;\n}\n\ninterface LabelBox extends BarLabelSize {\n left: number;\n top: number;\n}\n\nexport function barLabelsEnabled(context: ChartRenderContext): boolean {\n return context.chart.config?.showBarLabels === true;\n}\n\nfunction resolvePlacement(target: BarLabelTarget, size: BarLabelSize): BarLabelPlacement {\n const fits = target.frame.height >= size.height + BAR_LABEL.gap * 2;\n return target.placement !== 'outside' && !fits ? 'outside' : target.placement;\n}\n\nfunction labelTop(placement: BarLabelPlacement, frame: BarLabelTarget['frame'], height: number): number {\n if (placement === 'outside') {\n return frame.y - height - BAR_LABEL.gap;\n }\n return placement === 'inside' ? frame.y + BAR_LABEL.gap : frame.y + frame.height / 2 - height / 2;\n}\n\nfunction createPillNode(context: ChartRenderContext, id: string, box: LabelBox, color: string): RenderNode {\n const { chart, bounds, diagnostics, nextOrder } = context;\n const config = chart.config;\n return {\n type: 'path',\n id: `${id}-pill`,\n order: nextOrder(),\n bounds,\n d: pillPath(box.left, box.top, box.width, box.height),\n style: {\n fill: config?.barLabelPillColor ? paint(config.barLabelPillColor, diagnostics, chart.id) : { kind: 'none' },\n stroke: paint(config?.barLabelBorderColor ?? color, diagnostics, chart.id),\n strokeWidth: finite(config?.barLabelBorderWidth, 1),\n pointerEvents: 'none',\n },\n };\n}\n\nfunction createTextNode(\n context: ChartRenderContext,\n id: string,\n box: LabelBox,\n text: string,\n placement: BarLabelPlacement,\n fontSize: number,\n color: string,\n): RenderNode {\n const { chart, bounds, nextOrder } = context;\n const config = chart.config;\n return {\n ...chartText({\n id,\n order: nextOrder(),\n bounds,\n frame: { x: box.left, y: box.top + box.padY, width: box.width, height: box.lineHeight },\n text,\n chart,\n align: 'center',\n }),\n mark: `bar-label|${placement}|${config?.barLabelFormat ?? ''}`,\n color,\n fontSize,\n fontFamily: config?.barLabelFontFamily ?? chart.fontFamily ?? 'Inter, sans-serif',\n fontWeight: config?.barLabelFontWeight ?? 'normal',\n };\n}\n\nfunction createAxisValueNode(\n context: ChartRenderContext,\n target: BarLabelTarget,\n text: string,\n fontSize: number,\n): RenderNode {\n const { chart, plot, bounds, nextOrder } = context;\n const config = chart.config;\n const top = plot.y + plot.height + 4 + 16 + Math.max(0, chart.tickLength ?? 0);\n return {\n ...chartText({\n id: target.id,\n order: nextOrder(),\n bounds,\n frame: target.horizontal\n ? chart.categoryAlign === 'inside'\n ? {\n x: plot.x,\n y: target.frame.y + target.frame.height / 2 - fontSize * 0.6,\n width: plot.width - 14,\n height: fontSize * 1.2,\n }\n : { x: plot.x, y: target.frame.y - CATEGORY_LABEL_ROW, width: plot.width, height: fontSize * 1.2 }\n : { x: target.frame.x, y: top, width: target.frame.width, height: fontSize * 1.2 },\n text,\n chart,\n align: target.horizontal ? 'right' : chart.categoryAlign === 'left' ? 'left' : 'center',\n }),\n mark: `bar-label|axis|${config?.barLabelFormat ?? ''}`,\n color: config?.barLabelColor ?? chart.textColor ?? '#0f172a',\n fontSize,\n fontFamily: config?.barLabelFontFamily ?? chart.fontFamily ?? 'Inter, sans-serif',\n fontWeight: config?.barLabelFontWeight ?? 'normal',\n };\n}\n\nfunction horizontalPlacement(target: BarLabelTarget, size: BarLabelSize): BarLabelPlacement {\n const requested = target.placement === 'axis' ? 'outside' : target.placement;\n const fits = target.frame.width >= size.width + BAR_LABEL.gap * 2;\n return requested !== 'outside' && !fits ? 'outside' : requested;\n}\n\nfunction horizontalBox(target: BarLabelTarget, size: BarLabelSize, placement: BarLabelPlacement): LabelBox {\n const { frame } = target;\n const left =\n placement === 'outside'\n ? frame.x + frame.width + BAR_LABEL.gap\n : placement === 'inside'\n ? frame.x + frame.width - size.width - BAR_LABEL.gap\n : frame.x + frame.width / 2 - size.width / 2;\n return { ...size, left, top: frame.y + frame.height / 2 - size.height / 2 };\n}\n\nexport function createBarLabelNodes(context: ChartRenderContext, target: BarLabelTarget): RenderNode[] {\n const { chart } = context;\n const config = chart.config;\n const fontSize = Math.max(8, finite(config?.barLabelFontSize, finite(chart.fontSize, 12)));\n const text = formatBarLabel(target.value, config?.barLabelFormat);\n if (target.placement === 'axis') {\n return [createAxisValueNode(context, target, text, fontSize)];\n }\n const pill = config?.barLabelPill === true;\n const size = barLabelSize(text, fontSize, pill);\n const placement = target.horizontal ? horizontalPlacement(target, size) : resolvePlacement(target, size);\n const box: LabelBox = target.horizontal\n ? horizontalBox(target, size, placement)\n : {\n ...size,\n left: target.frame.x + target.frame.width / 2 - size.width / 2,\n top: labelTop(placement, target.frame, size.height),\n };\n const color = config?.barLabelColor ?? chart.textColor ?? '#0f172a';\n\n const nodes: RenderNode[] = [];\n if (pill) {\n nodes.push(createPillNode(context, target.id, box, color));\n }\n nodes.push(createTextNode(context, target.id, box, text, placement, fontSize, color));\n return nodes;\n}\n","import type { RenderNode } from '../../../scene';\nimport { finite, paint } from '../../../scene';\nimport { roundedBarPath } from '../../primitives/barShape';\nimport { segmentedBarPath } from '../../primitives/segments';\nimport type { ChartRenderContext } from '../types';\n\nconst DEFAULT_HATCH = { angle: 45, spacing: 7, width: 1.5 };\nconst MIN_HATCH_SPACING = 2;\n\nfunction hatchPath(x: number, y: number, width: number, height: number, angle: number, spacing: number): string {\n const radians = (angle * Math.PI) / 180;\n const direction = { x: Math.cos(radians), y: Math.sin(radians) };\n const normal = { x: -direction.y, y: direction.x };\n const center = { x: x + width / 2, y: y + height / 2 };\n const reach = Math.hypot(width, height) / 2;\n const segments: string[] = [];\n for (let offset = -reach; offset <= reach; offset += spacing) {\n const cx = center.x + normal.x * offset;\n const cy = center.y + normal.y * offset;\n segments.push(\n `M ${cx - direction.x * reach} ${cy - direction.y * reach} L ${cx + direction.x * reach} ${cy + direction.y * reach}`,\n );\n }\n return segments.join(' ');\n}\n\nexport function barTrackClip(\n context: ChartRenderContext,\n frame: { x: number; y: number; width: number; height: number },\n): { type: 'path'; d: string } | undefined {\n if (!barTrackEnabled(context)) {\n return undefined;\n }\n return {\n type: 'path',\n d: roundedBarPath(frame.x, frame.y, frame.width, frame.height, context.chart.config?.barCornerRadius ?? 2),\n };\n}\n\nexport function barTrackEnabled(context: ChartRenderContext): boolean {\n return context.chart.config?.barTrack === true;\n}\n\nexport function createBarTrackNodes(\n context: ChartRenderContext,\n id: string,\n frame: { x: number; y: number; width: number; height: number },\n orientation: 'horizontal' | 'vertical' = 'vertical',\n): RenderNode[] {\n const { chart, bounds, diagnostics, nextOrder } = context;\n const config = chart.config;\n const radius = config?.barCornerRadius ?? 2;\n const segments = finite(config?.barSegments, 0);\n const d =\n segments > 0\n ? segmentedBarPath(frame, orientation, segments, finite(config?.barSegmentGap, 4), radius, 1, true)\n : roundedBarPath(frame.x, frame.y, frame.width, frame.height, radius);\n const nodes: RenderNode[] = [\n {\n type: 'path',\n id: `chart-bar-track-${chart.id}-${id}`,\n order: nextOrder(),\n bounds,\n d,\n style: {\n fill: paint(config?.barTrackColor ?? chart.gridColor ?? '#e2e8f0', diagnostics, chart.id),\n pointerEvents: 'none',\n },\n },\n ];\n if (config?.barTrackHatch) {\n nodes.push({\n type: 'path',\n id: `chart-bar-track-hatch-${chart.id}-${id}`,\n order: nextOrder(),\n bounds,\n d: hatchPath(\n frame.x,\n frame.y,\n frame.width,\n frame.height,\n finite(config.barTrackHatchAngle, DEFAULT_HATCH.angle),\n Math.max(MIN_HATCH_SPACING, finite(config.barTrackHatchSpacing, DEFAULT_HATCH.spacing)),\n ),\n style: {\n fill: { kind: 'none' },\n stroke: paint(config.barTrackHatchColor ?? chart.gridColor ?? '#cbd5e1', diagnostics, chart.id),\n strokeWidth: finite(config.barTrackHatchWidth, DEFAULT_HATCH.width),\n pointerEvents: 'none',\n clip: { type: 'path', d },\n },\n });\n }\n return nodes;\n}\n","import type { ChartSeries } from '../../../../model/chart';\nimport type { RenderNode } from '../../../scene';\nimport { finite, paint } from '../../../scene';\nimport {\n barCategoryCount,\n barPath,\n CHART_COLORS,\n createVerticalErrorWhiskerNode,\n errorBarRange,\n mapChartValue,\n resolveChartShadow,\n segmentedBarPath,\n} from '../../primitives';\nimport { seriesValueColorProp, seriesValueProp } from '../../propPath';\nimport type { ChartRenderContext } from '../types';\nimport { createGlassBackdropNodes } from './glass';\nimport { createBarGlowNode } from './glow';\nimport { barLabelsEnabled, createBarLabelNodes } from './labels';\nimport { barTrackClip, barTrackEnabled, createBarTrackNodes } from './track';\n\ninterface GroupedBarLayout {\n slotWidth: number;\n seriesWidth: number;\n groupGap: number;\n barGap: number;\n}\n\ninterface GroupedBarMark {\n seriesId: string;\n valueIndex: number;\n value: number;\n error: number | [number, number] | null | undefined;\n color: NonNullable<ChartSeries['color']>;\n hasColorOverride: boolean;\n frame: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n}\n\nexport function renderGroupedBars(context: ChartRenderContext): RenderNode[] {\n const layout = createGroupedBarLayout(context);\n const marks = context.chart.series.flatMap((series, seriesIndex) =>\n createSeriesBarMarks(context, layout, series, seriesIndex),\n );\n const tracks = barTrackEnabled(context)\n ? marks.flatMap(mark =>\n createBarTrackNodes(context, `${mark.seriesId}-${mark.valueIndex}`, {\n x: mark.frame.x,\n y: context.plot.y,\n width: mark.frame.width,\n height: context.plot.height,\n }),\n )\n : [];\n const bars = marks.flatMap(mark => renderGroupedBarMark(context, mark));\n const labels = barLabelsEnabled(context) ? marks.flatMap(mark => createGroupedLabel(context, mark, marks)) : [];\n return [...tracks, ...bars, ...marks.flatMap(mark => createGroupedGlow(context, mark)), ...labels];\n}\n\nfunction isSeriesMax(mark: GroupedBarMark, marks: GroupedBarMark[]): boolean {\n const values = marks.filter(entry => entry.seriesId === mark.seriesId).map(entry => entry.value);\n return mark.value >= Math.max(...values);\n}\n\nfunction createGroupedLabel(context: ChartRenderContext, mark: GroupedBarMark, marks: GroupedBarMark[]): RenderNode[] {\n const { chart } = context;\n if (chart.config?.barLabelMaxOnly && !isSeriesMax(mark, marks)) {\n return [];\n }\n return createBarLabelNodes(context, {\n id: `chart-bar-label-${chart.id}-${mark.seriesId}-${mark.valueIndex}`,\n value: mark.value,\n frame: mark.frame,\n placement: chart.config?.barLabelPosition ?? 'outside',\n });\n}\n\nfunction groupedShape(context: ChartRenderContext, frame: GroupedBarMark['frame']): string {\n const { chart, plot } = context;\n const config = chart.config;\n const radius = config?.barCornerRadius ?? 2;\n const segments = finite(config?.barSegments, 0);\n if (segments > 0) {\n return segmentedBarPath(\n { x: frame.x, y: plot.y, width: frame.width, height: plot.height },\n 'vertical',\n segments,\n finite(config?.barSegmentGap, 4),\n radius,\n frame.height / plot.height,\n config?.barSegmentSnap !== false,\n );\n }\n return barPath(frame.x, frame.y, frame.width, frame.height, radius, config?.barRoundedBottom === true);\n}\n\nfunction createGroupedGlow(context: ChartRenderContext, mark: GroupedBarMark): RenderNode[] {\n const { chart } = context;\n const glow = finite(chart.config?.barGlow, 0);\n if (glow <= 0 || mark.frame.height <= 0) {\n return [];\n }\n const d = groupedShape(context, mark.frame);\n return [\n createBarGlowNode(context, `chart-bar-glow-${chart.id}-${mark.seriesId}-${mark.valueIndex}`, d, mark.color, glow),\n ];\n}\n\nfunction createGroupedBarLayout(context: ChartRenderContext): GroupedBarLayout {\n const { chart, plot } = context;\n const valueCount = barCategoryCount(chart);\n const slotWidth = plot.width / valueCount;\n const groupGap = Math.min(Math.max(0, finite(chart.config?.barGroupGap, 8)), Math.max(0, slotWidth - 1));\n const barGap = Math.max(0, finite(chart.config?.barGap, 2));\n return {\n slotWidth,\n seriesWidth: Math.max(1, (slotWidth - groupGap) / Math.max(1, chart.series.length)),\n groupGap,\n barGap,\n };\n}\n\nfunction createSeriesBarMarks(\n context: ChartRenderContext,\n layout: GroupedBarLayout,\n series: ChartSeries,\n seriesIndex: number,\n): GroupedBarMark[] {\n const { chart, plot } = context;\n const seriesColor = series.color ?? CHART_COLORS[seriesIndex % CHART_COLORS.length];\n return series.values.map((value, valueIndex) => {\n const numericValue = Array.isArray(value) ? value[1] : value;\n const height = Math.max(0, mapChartValue(numericValue, chart.axisY, plot.height));\n return {\n seriesId: series.id,\n valueIndex,\n value: numericValue,\n error: series.error?.[valueIndex],\n color: series.colors?.[valueIndex] ?? seriesColor,\n hasColorOverride: series.colors?.[valueIndex] != null,\n frame: {\n x: plot.x + valueIndex * layout.slotWidth + layout.groupGap / 2 + seriesIndex * layout.seriesWidth,\n y: plot.y + plot.height - height,\n width: Math.max(1, layout.seriesWidth - layout.barGap),\n height,\n },\n };\n });\n}\n\nfunction renderGroupedBarMark(context: ChartRenderContext, mark: GroupedBarMark): RenderNode[] {\n const nodes = createGroupedBarNodes(context, mark);\n const errorNode = createGroupedBarError(context, mark);\n if (errorNode) {\n nodes.push(errorNode);\n }\n return nodes;\n}\n\nfunction plotClipPath(plot: { x: number; y: number; width: number; height: number }): string {\n const { x, y, width, height } = plot;\n return `M ${x} ${y} H ${x + width} V ${y + height} H ${x} Z`;\n}\n\nfunction createGroupedBarNodes(context: ChartRenderContext, mark: GroupedBarMark): RenderNode[] {\n const { chart, plot, bounds, diagnostics, nextOrder } = context;\n const radius = chart.config?.barCornerRadius ?? 2;\n const { x, width } = mark.frame;\n const path = groupedShape(context, mark.frame);\n const fill = paint(mark.color, diagnostics, chart.id);\n const stroke = paint(chart.config?.barBorderColor || '#000000', diagnostics, chart.id);\n const strokeWidth = finite(chart.config?.barBorderWidth, 0);\n const shadow = resolveChartShadow(chart.shadowStyle);\n\n const shadowCaster: RenderNode | undefined = shadow\n ? {\n type: 'path',\n id: `chart-bar-shadow-${chart.id}-${mark.seriesId}-${mark.valueIndex}`,\n order: nextOrder(),\n bounds,\n d: path,\n style: {\n fill,\n stroke,\n strokeWidth,\n shadow,\n clip: barTrackClip(context, { x, y: plot.y, width, height: plot.height }) ?? {\n type: 'path',\n d: plotClipPath(plot),\n },\n },\n }\n : undefined;\n\n const bar: RenderNode = {\n type: 'path',\n id: `chart-bar-${chart.id}-${mark.seriesId}-${mark.valueIndex}`,\n order: nextOrder(),\n bounds,\n d: path,\n detail: {\n of: 'chartValue',\n series: mark.seriesId,\n valueIndex: mark.valueIndex,\n mark: 'bar',\n radius,\n colorProp: seriesValueColorProp(mark.seriesId, mark.valueIndex),\n hasColorOverride: mark.hasColorOverride,\n },\n prop: seriesValueProp(mark.seriesId, mark.valueIndex),\n style: { fill, stroke, strokeWidth, innerShadow: shadow },\n };\n\n const glass = createGlassBackdropNodes(context, `${mark.seriesId}-${mark.valueIndex}`, path);\n return shadowCaster ? [shadowCaster, ...glass, bar] : [...glass, bar];\n}\n\nfunction createGroupedBarError(context: ChartRenderContext, mark: GroupedBarMark): RenderNode | null {\n if (mark.error == null) {\n return null;\n }\n const { chart, plot, bounds, nextOrder } = context;\n const [lower, upper] = errorBarRange(mark.value, mark.error);\n return createVerticalErrorWhiskerNode({\n id: `chart-bar-error-${chart.id}-${mark.seriesId}-${mark.valueIndex}`,\n order: nextOrder(),\n bounds,\n geometry: {\n centerX: mark.frame.x + mark.frame.width / 2,\n startY: plot.y + plot.height - mapChartValue(lower, chart.axisY, plot.height),\n endY: plot.y + plot.height - mapChartValue(upper, chart.axisY, plot.height),\n },\n color: chart.textColor ?? '#0f172a',\n valueReference: { seriesId: mark.seriesId, valueIndex: mark.valueIndex },\n });\n}\n","import type { ChartSeries } from '../../../../model/chart';\nimport type { RenderNode } from '../../../scene';\nimport { finite, paint } from '../../../scene';\nimport {\n CHART_COLORS,\n horizontalRows,\n mapChartValue,\n resolveChartShadow,\n roundedBarPath,\n rowTop,\n segmentedBarPath,\n stackedSegment,\n} from '../../primitives';\nimport { seriesValueColorProp } from '../../propPath';\nimport type { ChartRenderContext } from '../types';\nimport { createGlassBackdropNodes } from './glass';\nimport { createBarGlowNode } from './glow';\nimport { barLabelsEnabled, createBarLabelNodes } from './labels';\nimport { barTrackClip, barTrackEnabled, createBarTrackNodes } from './track';\n\ninterface Frame {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\ntype Rows = ReturnType<typeof horizontalRows>;\n\ninterface Layers {\n tracks: RenderNode[];\n bars: RenderNode[];\n glows: RenderNode[];\n labels: RenderNode[];\n}\n\nfunction barFrame(\n context: ChartRenderContext,\n rows: Rows,\n seriesIndex: number,\n valueIndex: number,\n value: number,\n): Frame {\n const { chart, plot } = context;\n const top = rowTop(rows, plot, valueIndex) + rows.labelRow;\n if (context.stackedMode) {\n const segment = stackedSegment(chart, context.stackedMode, valueIndex, seriesIndex, plot.width);\n const start = Math.min(segment.pixelStart, segment.pixelEnd);\n return {\n x: plot.x + start,\n y: top,\n width: Math.max(1, Math.abs(segment.pixelEnd - segment.pixelStart)),\n height: rows.barsHeight,\n };\n }\n const barGap = Math.max(0, finite(chart.config?.barGap, 2));\n const seriesHeight = rows.barsHeight / Math.max(1, chart.series.length);\n const width = Math.max(0, mapChartValue(value, chart.axisY, plot.width));\n return { x: plot.x, y: top + seriesIndex * seriesHeight, width, height: Math.max(1, seriesHeight - barGap) };\n}\n\nfunction barPath(context: ChartRenderContext, frame: Frame): string {\n const { chart, plot } = context;\n const config = chart.config;\n const segments = context.stackedMode && chart.series.length > 1 ? 0 : finite(config?.barSegments, 0);\n if (segments > 0) {\n return segmentedBarPath(\n { x: plot.x, y: frame.y, width: plot.width, height: frame.height },\n 'horizontal',\n segments,\n finite(config?.barSegmentGap, 4),\n config?.barCornerRadius ?? 2,\n frame.width / plot.width,\n config?.barSegmentSnap !== false,\n );\n }\n return roundedBarPath(frame.x, frame.y, frame.width, frame.height, config?.barCornerRadius ?? 2);\n}\n\ninterface BarMark {\n id: string;\n series: ChartSeries;\n seriesIndex: number;\n valueIndex: number;\n value: number;\n frame: Frame;\n trackFrame: Frame;\n bounds: { minX: number; maxX: number; minY: number; maxY: number };\n path: string;\n color: NonNullable<ChartSeries['color']>;\n}\n\nfunction markOf(\n context: ChartRenderContext,\n rows: Rows,\n series: ChartSeries,\n seriesIndex: number,\n valueIndex: number,\n value: number,\n): BarMark {\n const { plot } = context;\n const frame = barFrame(context, rows, seriesIndex, valueIndex, value);\n return {\n id: `${series.id}-${valueIndex}`,\n series,\n seriesIndex,\n valueIndex,\n value,\n frame,\n trackFrame: { x: plot.x, y: frame.y, width: plot.width, height: frame.height },\n bounds: {\n minX: frame.x,\n maxX: frame.x + Math.max(frame.width, 1),\n minY: frame.y,\n maxY: frame.y + frame.height,\n },\n path: barPath(context, frame),\n color: series.colors?.[valueIndex] ?? series.color ?? CHART_COLORS[seriesIndex % CHART_COLORS.length],\n };\n}\n\nfunction barNodes(context: ChartRenderContext, mark: BarMark): RenderNode[] {\n const { chart, diagnostics, nextOrder } = context;\n const config = chart.config;\n const stroke = paint(config?.barBorderColor || '#000000', diagnostics, chart.id);\n const strokeWidth = finite(config?.barBorderWidth, 0);\n const shadow = resolveChartShadow(chart.shadowStyle);\n const fill = paint(mark.color, diagnostics, chart.id);\n const nodes: RenderNode[] = [...createGlassBackdropNodes(context, mark.id, mark.path)];\n if (shadow) {\n nodes.push({\n type: 'path',\n id: `chart-bar-shadow-${chart.id}-${mark.id}`,\n order: nextOrder(),\n bounds: mark.bounds,\n d: mark.path,\n style: { fill, stroke, strokeWidth, shadow, clip: barTrackClip(context, mark.trackFrame) },\n });\n }\n nodes.push({\n type: 'path',\n id: `chart-bar-${chart.id}-${mark.id}`,\n order: nextOrder(),\n bounds: mark.bounds,\n d: mark.path,\n detail: {\n of: 'chartValue',\n series: mark.series.id,\n valueIndex: mark.valueIndex,\n mark: 'bar',\n radius: config?.barCornerRadius ?? 2,\n colorProp: seriesValueColorProp(mark.series.id, mark.valueIndex),\n hasColorOverride: mark.series.colors?.[mark.valueIndex] != null,\n },\n style: { fill, stroke, strokeWidth, innerShadow: shadow },\n });\n return nodes;\n}\n\nfunction labelNodes(context: ChartRenderContext, mark: BarMark, highest: number): RenderNode[] {\n const { chart } = context;\n const config = chart.config;\n const showLabel = barLabelsEnabled(context) && (!config?.barLabelMaxOnly || mark.value >= highest);\n const lastSeries = mark.seriesIndex === chart.series.length - 1;\n if (!showLabel || (context.stackedMode && !lastSeries && config?.barLabelPosition === 'outside')) {\n return [];\n }\n return createBarLabelNodes(context, {\n id: `chart-bar-label-${chart.id}-${mark.id}`,\n value: mark.value,\n frame: mark.frame,\n placement: config?.barLabelPosition ?? 'outside',\n horizontal: true,\n });\n}\n\nfunction pushBar(\n context: ChartRenderContext,\n rows: Rows,\n layers: Layers,\n series: ChartSeries,\n seriesIndex: number,\n valueIndex: number,\n value: number,\n highest: number,\n): void {\n const { chart } = context;\n const mark = markOf(context, rows, series, seriesIndex, valueIndex, value);\n if (barTrackEnabled(context) && (!context.stackedMode || seriesIndex === 0)) {\n layers.tracks.push(...createBarTrackNodes(context, mark.id, mark.trackFrame, 'horizontal'));\n }\n layers.bars.push(...barNodes(context, mark));\n const glow = finite(chart.config?.barGlow, 0);\n if (glow > 0 && mark.frame.width > 0) {\n layers.glows.push(\n createBarGlowNode(context, `chart-bar-glow-${chart.id}-${mark.id}`, mark.path, mark.color, glow, mark.bounds),\n );\n }\n layers.labels.push(...labelNodes(context, mark, highest));\n}\n\nexport function renderHorizontalBars(context: ChartRenderContext): RenderNode[] {\n const rows = horizontalRows(context.chart, context.plot);\n const layers: Layers = { tracks: [], bars: [], glows: [], labels: [] };\n context.chart.series.forEach((series, seriesIndex) => {\n const numeric = series.values.map(value => (typeof value === 'number' ? value : value[1]));\n const highest = Math.max(...numeric);\n numeric.forEach((value, valueIndex) => {\n pushBar(context, rows, layers, series, seriesIndex, valueIndex, value, highest);\n });\n });\n return [...layers.tracks, ...layers.bars, ...layers.glows, ...layers.labels];\n}\n","import type { ChartSeries } from '../../../../model/chart';\nimport type { RenderNode } from '../../../scene';\nimport { finite, paint } from '../../../scene';\nimport {\n barCategoryCount,\n barPath,\n CHART_COLORS,\n resolveChartShadow,\n segmentedBarPath,\n stackedSegment,\n} from '../../primitives';\nimport { seriesValueColorProp, seriesValueProp } from '../../propPath';\nimport type { ChartRenderContext, StackedMode } from '../types';\nimport { createGlassBackdropNodes } from './glass';\nimport { createBarGlowNode } from './glow';\nimport { barLabelsEnabled, createBarLabelNodes } from './labels';\nimport { barTrackClip, barTrackEnabled, createBarTrackNodes } from './track';\n\ninterface Layers {\n tracks: RenderNode[];\n bars: RenderNode[];\n glows: RenderNode[];\n labels: RenderNode[];\n}\n\ninterface Slot {\n slotWidth: number;\n groupGap: number;\n barWidth: number;\n cornerRadius: number;\n outerSeriesIndex: number | null;\n}\n\nfunction slotOf(context: ChartRenderContext, mode: StackedMode): Slot {\n const { chart, plot } = context;\n const slotWidth = plot.width / barCategoryCount(chart);\n const groupGap = Math.min(Math.max(0, finite(chart.config?.barGroupGap, 8)), Math.max(0, slotWidth - 1));\n return {\n slotWidth,\n groupGap,\n barWidth: Math.max(1, slotWidth - groupGap),\n cornerRadius: chart.config?.barCornerRadius ?? 2,\n outerSeriesIndex: mode === 'waterfall' ? null : chart.series.length - 1,\n };\n}\n\nfunction pathOf(context: ChartRenderContext, x: number, y: number, height: number, slot: Slot, radius: number): string {\n const { chart, plot } = context;\n const segments = chart.series.length === 1 ? finite(chart.config?.barSegments, 0) : 0;\n if (segments > 0) {\n return segmentedBarPath(\n { x, y: plot.y, width: slot.barWidth, height: plot.height },\n 'vertical',\n segments,\n finite(chart.config?.barSegmentGap, 4),\n radius,\n height / plot.height,\n chart.config?.barSegmentSnap !== false,\n );\n }\n return barPath(x, y, slot.barWidth, height, radius, chart.config?.barRoundedBottom === true);\n}\n\nfunction pushLabel(\n context: ChartRenderContext,\n layers: Layers,\n series: ChartSeries,\n seriesIndex: number,\n valueIndex: number,\n slot: Slot,\n frame: { x: number; y: number; width: number; height: number },\n): void {\n const { chart } = context;\n const config = chart.config;\n const visible =\n barLabelsEnabled(context) &&\n !(config?.barLabelMaxOnly && !isSeriesMax(series.values, valueIndex)) &&\n (config?.barLabelPosition !== 'axis' || seriesIndex === slot.outerSeriesIndex);\n if (!visible) {\n return;\n }\n const requested = config?.barLabelPosition ?? 'outside';\n const value = series.values[valueIndex];\n layers.labels.push(\n ...createBarLabelNodes(context, {\n id: `chart-bar-label-${chart.id}-${series.id}-${valueIndex}`,\n value: Array.isArray(value) ? value[1] : (value ?? 0),\n frame,\n placement: requested === 'outside' && seriesIndex !== slot.outerSeriesIndex ? 'center' : requested,\n }),\n );\n}\n\ninterface SegmentMark {\n series: ChartSeries;\n valueIndex: number;\n radius: number;\n color: NonNullable<ChartSeries['color']>;\n x: number;\n y: number;\n height: number;\n path: string;\n column: { x: number; y: number; width: number; height: number };\n}\n\nfunction markOf(\n context: ChartRenderContext,\n mode: StackedMode,\n slot: Slot,\n series: ChartSeries,\n seriesIndex: number,\n valueIndex: number,\n): SegmentMark {\n const { chart, plot } = context;\n const segment = stackedSegment(chart, mode, valueIndex, seriesIndex, plot.height);\n const radius = slot.outerSeriesIndex === null || seriesIndex === slot.outerSeriesIndex ? slot.cornerRadius : 0;\n const x = plot.x + valueIndex * slot.slotWidth + slot.groupGap / 2;\n const y = plot.y + plot.height - Math.max(segment.pixelStart, segment.pixelEnd);\n const height = Math.max(1, Math.abs(segment.pixelEnd - segment.pixelStart));\n return {\n series,\n valueIndex,\n radius,\n color: series.colors?.[valueIndex] ?? series.color ?? CHART_COLORS[seriesIndex % CHART_COLORS.length],\n x,\n y,\n height,\n path: pathOf(context, x, y, height, slot, radius),\n column: { x, y: plot.y, width: slot.barWidth, height: plot.height },\n };\n}\n\nfunction segmentNodes(context: ChartRenderContext, mark: SegmentMark): RenderNode[] {\n const { chart, plot, bounds, diagnostics, nextOrder } = context;\n const { series, valueIndex, path } = mark;\n const fill = paint(mark.color, diagnostics, chart.id);\n const stroke = paint(chart.config?.barBorderColor || '#000000', diagnostics, chart.id);\n const strokeWidth = finite(chart.config?.barBorderWidth, 0);\n const shadow = resolveChartShadow(chart.shadowStyle);\n const nodes: RenderNode[] = [];\n if (shadow) {\n const plotClip = `M ${plot.x} ${plot.y} H ${plot.x + plot.width} V ${plot.y + plot.height} H ${plot.x} Z`;\n nodes.push({\n type: 'path',\n id: `chart-bar-shadow-${chart.id}-${series.id}-${valueIndex}`,\n order: nextOrder(),\n bounds,\n d: path,\n style: {\n fill,\n stroke,\n strokeWidth,\n shadow,\n clip: barTrackClip(context, mark.column) ?? { type: 'path', d: plotClip },\n },\n });\n }\n nodes.push(...createGlassBackdropNodes(context, `${series.id}-${valueIndex}`, path));\n nodes.push({\n type: 'path',\n id: `chart-bar-${chart.id}-${series.id}-${valueIndex}`,\n order: nextOrder(),\n bounds,\n d: path,\n detail: {\n of: 'chartValue',\n series: series.id,\n valueIndex,\n mark: 'bar',\n radius: mark.radius,\n colorProp: seriesValueColorProp(series.id, valueIndex),\n hasColorOverride: series.colors?.[valueIndex] != null,\n },\n prop: seriesValueProp(series.id, valueIndex),\n style: { fill, stroke, strokeWidth, innerShadow: shadow },\n });\n return nodes;\n}\n\nfunction pushSegment(\n context: ChartRenderContext,\n mode: StackedMode,\n layers: Layers,\n slot: Slot,\n series: ChartSeries,\n seriesIndex: number,\n valueIndex: number,\n): void {\n const { chart } = context;\n const mark = markOf(context, mode, slot, series, seriesIndex, valueIndex);\n if (seriesIndex === 0 && barTrackEnabled(context)) {\n layers.tracks.push(...createBarTrackNodes(context, String(valueIndex), mark.column));\n }\n layers.bars.push(...segmentNodes(context, mark));\n const frame = { x: mark.x, y: mark.y, width: slot.barWidth, height: mark.height };\n pushLabel(context, layers, series, seriesIndex, valueIndex, slot, frame);\n const glow = finite(chart.config?.barGlow, 0);\n if (glow > 0) {\n layers.glows.push(\n createBarGlowNode(context, `chart-bar-glow-${chart.id}-${series.id}-${valueIndex}`, mark.path, mark.color, glow),\n );\n }\n}\n\nexport function renderStackedBars(context: ChartRenderContext, mode: StackedMode): RenderNode[] {\n const { chart } = context;\n const layers: Layers = { tracks: [], bars: [], glows: [], labels: [] };\n const slot = slotOf(context, mode);\n const valueCount = barCategoryCount(chart);\n for (let valueIndex = 0; valueIndex < valueCount; valueIndex++) {\n chart.series.forEach((series, seriesIndex) => {\n pushSegment(context, mode, layers, slot, series, seriesIndex, valueIndex);\n });\n }\n return [...layers.tracks, ...layers.bars, ...layers.glows, ...layers.labels];\n}\n\nfunction isSeriesMax(values: ReadonlyArray<number | readonly number[]>, index: number): boolean {\n const numeric = values.map(value => (typeof value === 'number' ? value : value[1]));\n return numeric[index] >= Math.max(...numeric);\n}\n","import type { RenderNode } from '../../scene';\nimport { isHorizontalBar } from '../primitives';\nimport { renderGroupedBars } from './bar/grouped';\nimport { renderHorizontalBars } from './bar/horizontal';\nimport { renderStackedBars } from './bar/stacked';\nimport type { ChartRenderContext } from './types';\n\nexport function renderBar(context: ChartRenderContext): RenderNode[] {\n if (isHorizontalBar(context.chart)) {\n return renderHorizontalBars(context);\n }\n if (context.stackedMode) {\n return renderStackedBars(context, context.stackedMode);\n }\n return renderGroupedBars(context);\n}\n","import { finite } from '../../../scene';\nimport { representativeColor } from '../../primitives';\nimport type { ChartRenderContext } from '../types';\nimport type { BoxplotLayout } from './types';\n\nexport function createBoxplotLayout(context: ChartRenderContext): BoxplotLayout {\n const { chart, plot } = context;\n const orientation = chart.config?.orientation ?? 'vertical';\n const boxCount = Math.max(1, chart.series.length);\n const slotWidth = (orientation === 'horizontal' ? plot.height : plot.width) / boxCount;\n const borderColor = representativeColor(chart.config?.barBorderColor, '#000000');\n const widthFraction = Math.min(1, Math.max(0.05, chart.config?.boxWidth ?? 0.6));\n return {\n orientation,\n slotWidth,\n boxWidth: Math.max(4, slotWidth * widthFraction),\n cornerRadius: chart.config?.barCornerRadius ?? 2,\n showPoints: chart.config?.showBoxplotPoints ?? true,\n borderColor,\n borderWidth: finite(chart.config?.barBorderWidth, 1),\n whiskerWidth: Math.max(0, finite(chart.config?.boxWhiskerWidth, 1)),\n medianWidth: Math.max(0, finite(chart.config?.boxMedianWidth, 2)),\n medianColor: chart.config?.boxMedianColor ?? borderColor,\n whiskerColor: chart.config?.boxWhiskerColor,\n capSize: Math.max(0, finite(chart.config?.boxCapSize, 0.4)),\n pointSize: Math.max(0, finite(chart.config?.boxPointSize, 3)),\n pointOpacity: Math.min(1, Math.max(0, finite(chart.config?.boxPointOpacity, 0.7))),\n jitter: Math.max(0, finite(chart.config?.boxJitter, 1)),\n };\n}\n","import { mapChartValue } from '../../primitives';\nimport type { ChartRenderContext } from '../types';\nimport type { BoxplotGeometry, BoxplotLayout, BoxplotOrientation, BoxplotStats } from './types';\n\nexport function boxplotPoint(orientation: BoxplotOrientation, center: number, value: number): { x: number; y: number } {\n return orientation === 'horizontal' ? { x: value, y: center } : { x: center, y: value };\n}\n\nexport function createBoxplotGeometry(\n context: ChartRenderContext,\n layout: BoxplotLayout,\n seriesIndex: number,\n stats: BoxplotStats,\n): BoxplotGeometry {\n const { chart, plot } = context;\n const { orientation } = layout;\n const valueAt = (value: number): number =>\n orientation === 'horizontal'\n ? plot.x + mapChartValue(value, chart.axisX, plot.width)\n : plot.y + plot.height - mapChartValue(value, chart.axisY, plot.height);\n const center = plot[orientation === 'horizontal' ? 'y' : 'x'] + seriesIndex * layout.slotWidth + layout.slotWidth / 2;\n return {\n center,\n min: valueAt(stats.min),\n q1: valueAt(stats.q1),\n median: valueAt(stats.median),\n q3: valueAt(stats.q3),\n max: valueAt(stats.max),\n };\n}\n","import type { RenderNode } from '../../../scene';\nimport { paint } from '../../../scene';\nimport { mapChartValue } from '../../primitives';\nimport type { ChartRenderContext } from '../types';\nimport { boxplotPoint } from './geometry';\nimport type { BoxplotLayout, BoxplotSeriesMark } from './types';\n\nexport function renderSamplePoints(\n context: ChartRenderContext,\n layout: BoxplotLayout,\n mark: BoxplotSeriesMark,\n): RenderNode[] {\n const { chart, plot, bounds, diagnostics, nextOrder } = context;\n const valueAt = (value: number): number =>\n layout.orientation === 'horizontal'\n ? plot.x + mapChartValue(value, chart.axisX, plot.width)\n : plot.y + plot.height - mapChartValue(value, chart.axisY, plot.height);\n if (layout.pointSize <= 0) {\n return [];\n }\n return (mark.series.values as number[]).map((value, pointIndex) => {\n const center =\n mark.geometry.center + jitter(mark.seriesIndex * 10_000 + pointIndex) * layout.jitter * layout.boxWidth;\n const { x, y } = boxplotPoint(layout.orientation, center, valueAt(value));\n return {\n type: 'ellipse',\n id: `chart-box-point-${mark.id}-${pointIndex}`,\n order: nextOrder(),\n bounds,\n cx: x,\n cy: y,\n rx: layout.pointSize,\n ry: layout.pointSize,\n style: { fill: paint(mark.color, diagnostics, chart.id), opacity: layout.pointOpacity },\n };\n });\n}\n\nfunction jitter(seed: number): number {\n const hash = Math.sin(seed * 12.9898) * 43758.5453;\n return hash - Math.floor(hash) - 0.5;\n}\n","import type { RenderNode } from '../../../scene';\nimport { paint } from '../../../scene';\nimport { representativeColor } from '../../primitives';\nimport type { ChartRenderContext } from '../types';\nimport { boxplotPoint } from './geometry';\nimport type { BoxplotLayout, BoxplotSeriesMark } from './types';\n\ninterface BoxplotBorderLine {\n id: string;\n from: { x: number; y: number };\n to: { x: number; y: number };\n strokeWidth: number;\n color?: string;\n}\n\nexport function renderBoxAndWhiskers(\n context: ChartRenderContext,\n layout: BoxplotLayout,\n mark: BoxplotSeriesMark,\n): RenderNode[] {\n const whiskers = layout.whiskerWidth > 0 ? [lowerWhisker(layout, mark), upperWhisker(layout, mark)] : [];\n const caps =\n layout.whiskerWidth > 0 && layout.capSize > 0 ? [lowerWhiskerCap(layout, mark), upperWhiskerCap(layout, mark)] : [];\n const median = layout.medianWidth > 0 ? [medianLine(layout, mark)] : [];\n return [\n ...[...whiskers, ...caps].map(line =>\n createBoxBorderLine(context, layout, { ...line, color: whiskerColor(layout, mark) }),\n ),\n createBoxNode(context, layout, mark),\n ...median.map(line => createBoxBorderLine(context, layout, line)),\n ];\n}\n\nfunction whiskerColor(layout: BoxplotLayout, mark: BoxplotSeriesMark): string | undefined {\n if (layout.whiskerColor === 'series') {\n return representativeColor(mark.color, layout.borderColor);\n }\n return layout.whiskerColor;\n}\n\nfunction lowerWhisker(layout: BoxplotLayout, mark: BoxplotSeriesMark): BoxplotBorderLine {\n const { center, min, q1 } = mark.geometry;\n return {\n id: `chart-box-whisker-lo-${mark.id}`,\n from: boxplotPoint(layout.orientation, center, min),\n to: boxplotPoint(layout.orientation, center, q1),\n strokeWidth: layout.whiskerWidth,\n };\n}\n\nfunction upperWhisker(layout: BoxplotLayout, mark: BoxplotSeriesMark): BoxplotBorderLine {\n const { center, q3, max } = mark.geometry;\n return {\n id: `chart-box-whisker-hi-${mark.id}`,\n from: boxplotPoint(layout.orientation, center, q3),\n to: boxplotPoint(layout.orientation, center, max),\n strokeWidth: layout.whiskerWidth,\n };\n}\n\nfunction lowerWhiskerCap(layout: BoxplotLayout, mark: BoxplotSeriesMark): BoxplotBorderLine {\n return whiskerCap(`chart-box-cap-lo-${mark.id}`, layout, mark.geometry.center, mark.geometry.min);\n}\n\nfunction upperWhiskerCap(layout: BoxplotLayout, mark: BoxplotSeriesMark): BoxplotBorderLine {\n return whiskerCap(`chart-box-cap-hi-${mark.id}`, layout, mark.geometry.center, mark.geometry.max);\n}\n\nfunction whiskerCap(id: string, layout: BoxplotLayout, center: number, value: number): BoxplotBorderLine {\n const capHalf = (layout.boxWidth * layout.capSize) / 2;\n return {\n id,\n from: boxplotPoint(layout.orientation, center - capHalf, value),\n to: boxplotPoint(layout.orientation, center + capHalf, value),\n strokeWidth: layout.whiskerWidth,\n };\n}\n\nfunction medianLine(layout: BoxplotLayout, mark: BoxplotSeriesMark): BoxplotBorderLine {\n const half = layout.boxWidth / 2;\n return {\n id: `chart-box-median-${mark.id}`,\n from: boxplotPoint(layout.orientation, mark.geometry.center - half, mark.geometry.median),\n to: boxplotPoint(layout.orientation, mark.geometry.center + half, mark.geometry.median),\n strokeWidth: layout.medianWidth,\n color: layout.medianColor,\n };\n}\n\nfunction createBoxBorderLine(context: ChartRenderContext, layout: BoxplotLayout, line: BoxplotBorderLine): RenderNode {\n return {\n type: 'path',\n id: line.id,\n order: context.nextOrder(),\n bounds: context.bounds,\n d: `M ${line.from.x} ${line.from.y} L ${line.to.x} ${line.to.y}`,\n style: {\n fill: { kind: 'none' },\n stroke: { kind: 'solid', color: line.color ?? layout.borderColor },\n strokeWidth: line.strokeWidth,\n },\n };\n}\n\nfunction createBoxNode(context: ChartRenderContext, layout: BoxplotLayout, mark: BoxplotSeriesMark): RenderNode {\n const { chart, bounds, diagnostics, nextOrder } = context;\n const { geometry } = mark;\n const half = layout.boxWidth / 2;\n const a = boxplotPoint(layout.orientation, geometry.center - half, geometry.q1);\n const b = boxplotPoint(layout.orientation, geometry.center + half, geometry.q3);\n const x = Math.min(a.x, b.x);\n const y = Math.min(a.y, b.y);\n const width = Math.max(1, Math.abs(b.x - a.x));\n const height = Math.max(1, Math.abs(b.y - a.y));\n return {\n type: 'rect',\n id: `chart-box-${mark.id}`,\n order: nextOrder(),\n bounds,\n x,\n y,\n width,\n height,\n rx: layout.cornerRadius,\n style: {\n fill: paint(mark.color, diagnostics, chart.id),\n stroke: { kind: 'solid', color: layout.borderColor },\n strokeWidth: layout.borderWidth,\n },\n };\n}\n","import type { ChartSeries } from '../../../../model/chart';\nimport type { RenderNode } from '../../../scene';\nimport { CHART_COLORS, computeBoxplotStats } from '../../primitives';\nimport type { ChartRenderContext } from '../types';\nimport { createBoxplotGeometry } from './geometry';\nimport { renderSamplePoints } from './points';\nimport { renderBoxAndWhiskers } from './shapes';\nimport type { BoxplotLayout, BoxplotSeriesMark } from './types';\n\nexport function renderBoxplotSeries(\n context: ChartRenderContext,\n layout: BoxplotLayout,\n series: ChartSeries,\n seriesIndex: number,\n): RenderNode[] {\n const stats = computeBoxplotStats(series.values as number[]);\n if (!stats) {\n return [];\n }\n\n const geometry = createBoxplotGeometry(context, layout, seriesIndex, stats);\n const color = series.color ?? CHART_COLORS[seriesIndex % CHART_COLORS.length];\n const mark: BoxplotSeriesMark = {\n id: `${context.chart.id}-${series.id}`,\n series,\n seriesIndex,\n color,\n geometry,\n };\n const nodes = renderBoxAndWhiskers(context, layout, mark);\n if (layout.showPoints) {\n nodes.push(...renderSamplePoints(context, layout, mark));\n }\n return nodes;\n}\n","import type { RenderNode } from '../../scene';\nimport { createBoxplotLayout } from './boxplot/layout';\nimport { renderBoxplotSeries } from './boxplot/series';\nimport type { ChartRenderContext } from './types';\n\nexport function renderBoxplot(context: ChartRenderContext): RenderNode[] {\n const layout = createBoxplotLayout(context);\n const nodes: RenderNode[] = [];\n\n context.chart.series.forEach((series, seriesIndex) => {\n nodes.push(...renderBoxplotSeries(context, layout, series, seriesIndex));\n });\n\n return nodes;\n}\n","import type { ChartSeries, TypedChart } from '../../../model/chart';\nimport type { RenderNode, SceneStyle } from '../../scene';\nimport { finite, freeformPathData, paint } from '../../scene';\nimport { CHART_COLORS, chartText, DEFAULT_ZONE_FILL, mapChartValue } from '../primitives';\nimport type { ChartRenderContext } from './types';\n\ninterface CustomChartPoint {\n x: number;\n y: number;\n}\n\ninterface CustomMark {\n series: ChartSeries;\n valueIndex: number;\n point: CustomChartPoint;\n style: SceneStyle;\n}\n\nconst HOLLOW_POINT_STROKE = '#94a3b8';\nconst CONNECTOR_LABEL_GAP = 8;\nconst CONNECTOR_LABEL_WIDTH = 140;\n\nexport function renderCustom(context: ChartRenderContext): RenderNode[] {\n if (context.chart.config?.connectPoints && context.chart.series.length >= 2) {\n return renderConnectedPairs(context);\n }\n return context.chart.series.flatMap((series, seriesIndex) => renderCustomSeries(context, series, seriesIndex));\n}\n\nfunction renderCustomSeries(context: ChartRenderContext, series: ChartSeries, seriesIndex: number): RenderNode[] {\n const style = customSeriesStyle(context, series, seriesIndex);\n return customSeriesValues(context, series).map((value, valueIndex) => {\n const point = customPointPosition(context, value);\n const mark = { series, valueIndex, point, style };\n return series.symbol?.points.length ? createCustomSymbolMark(context, mark) : createCustomPointMark(context, mark);\n });\n}\n\nfunction isHorizontal(chart: TypedChart): boolean {\n return chart.config?.orientation === 'horizontal';\n}\n\nfunction customSeriesValues(context: ChartRenderContext, series: ChartSeries): Array<[number, number]> {\n const { chart } = context;\n const hasExplicitXValues = series.values.length > 0 && Array.isArray(series.values[0]);\n if (hasExplicitXValues) {\n return (series.values as number[][]).map(value => [value[0], value[1]]);\n }\n if (isHorizontal(chart)) {\n return (series.values as number[]).map((value, index) => [value, chart.axisY.min + index * chart.axisY.step]);\n }\n return (series.values as number[]).map((value, index) => [chart.axisX.min + index * chart.axisX.step, value]);\n}\n\nfunction metricComponent(chart: TypedChart, point: [number, number]): number {\n return isHorizontal(chart) ? point[0] : point[1];\n}\n\nfunction customPointPosition(context: ChartRenderContext, value: [number, number]): CustomChartPoint {\n return {\n x: context.plot.x + mapChartValue(value[0], context.chart.axisX, context.plot.width),\n y: context.plot.y + context.plot.height - mapChartValue(value[1], context.chart.axisY, context.plot.height),\n };\n}\n\nfunction customSeriesStyle(context: ChartRenderContext, series: ChartSeries, seriesIndex: number): SceneStyle {\n const color = series.color ?? CHART_COLORS[seriesIndex % CHART_COLORS.length];\n return {\n fill: paint(color, context.diagnostics, context.chart.id),\n stroke: series.stroke ? { kind: 'solid', color: series.stroke } : undefined,\n strokeWidth: series.stroke ? finite(series.strokeWidth, 1) : undefined,\n };\n}\n\nfunction createCustomSymbolMark(context: ChartRenderContext, mark: CustomMark): RenderNode {\n const symbol = mark.series.symbol;\n const size = finite(mark.series.size, 3);\n const scale = symbol?.normalized ? size * 2 : 1;\n const offset = symbol?.normalized ? 0.5 : 0;\n const points = (symbol?.points ?? []).map(([x, y]) => ({\n x: mark.point.x + (x - offset) * scale,\n y: mark.point.y + (y - offset) * scale,\n }));\n return {\n type: 'path',\n id: customMarkId(context.chart, mark.series, mark.valueIndex),\n order: context.nextOrder(),\n bounds: context.bounds,\n d: freeformPathData({ points, tension: finite(symbol?.tension, 0), closed: true }),\n style: mark.style,\n };\n}\n\nfunction createCustomPointMark(context: ChartRenderContext, mark: CustomMark): RenderNode {\n const radius = finite(mark.series.size, 3);\n return {\n type: 'ellipse',\n id: customMarkId(context.chart, mark.series, mark.valueIndex),\n order: context.nextOrder(),\n bounds: context.bounds,\n cx: mark.point.x,\n cy: mark.point.y,\n rx: radius,\n ry: radius,\n style: mark.style,\n };\n}\n\nfunction customMarkId(chart: TypedChart, series: ChartSeries, valueIndex: number): string {\n return `chart-custom-mark-${chart.id}-${series.id}-${valueIndex}`;\n}\n\nfunction renderConnectedPairs(context: ChartRenderContext): RenderNode[] {\n const { chart } = context;\n const [beforeSeries, afterSeries] = chart.series;\n const beforeValues = customSeriesValues(context, beforeSeries);\n const afterValues = customSeriesValues(context, afterSeries);\n const zones = chart.config?.zones ?? [];\n const betterColor = zones[0]?.color ?? '#10b981';\n const worseColor = zones[1]?.color ?? '#ec4899';\n const tieColor = zones[2]?.color ?? DEFAULT_ZONE_FILL;\n const reverse = Boolean(chart.config?.reverseComparison);\n const count = Math.min(beforeValues.length, afterValues.length);\n const categories = chart.config?.categories ?? [];\n const nodes: RenderNode[] = [];\n\n for (let index = 0; index < count; index++) {\n const beforeValue = beforeValues[index];\n const afterValue = afterValues[index];\n const beforePoint = customPointPosition(context, beforeValue);\n const afterPoint = customPointPosition(context, afterValue);\n const beforeMetric = metricComponent(chart, beforeValue);\n const afterMetric = metricComponent(chart, afterValue);\n const better = reverse ? afterMetric < beforeMetric : afterMetric > beforeMetric;\n const worse = reverse ? afterMetric > beforeMetric : afterMetric < beforeMetric;\n const comparisonColor = better ? betterColor : worse ? worseColor : tieColor;\n const radius = finite(afterSeries.size, 3);\n\n nodes.push(createConnectorLine(context, index, beforePoint, afterPoint, comparisonColor));\n nodes.push(\n createCustomPointMark(context, {\n series: beforeSeries,\n valueIndex: index,\n point: beforePoint,\n style: {\n fill: paint(chart.config?.customBeforeFill ?? chart.gridColor ?? '#e2e8f0', context.diagnostics, chart.id),\n stroke: { kind: 'solid', color: chart.config?.customBeforeStroke ?? HOLLOW_POINT_STROKE },\n strokeWidth: finite(chart.config?.customBeforeStrokeWidth, 1.5),\n },\n }),\n );\n nodes.push(\n createCustomPointMark(context, {\n series: afterSeries,\n valueIndex: index,\n point: afterPoint,\n style: {\n fill: paint(comparisonColor, context.diagnostics, chart.id),\n stroke: undefined,\n strokeWidth: undefined,\n },\n }),\n );\n if (context.showLabels && categories[index]) {\n nodes.push(createConnectorLabel(context, index, beforePoint, afterPoint, radius, categories[index]));\n }\n }\n\n return nodes;\n}\n\nfunction connectorDash(text: string | undefined): number[] | undefined {\n const parts = (text ?? '')\n .split(/[ ,]+/)\n .map(Number)\n .filter(part => Number.isFinite(part) && part > 0);\n return parts.length > 0 ? parts : undefined;\n}\n\nfunction createConnectorLine(\n context: ChartRenderContext,\n index: number,\n from: CustomChartPoint,\n to: CustomChartPoint,\n color: string,\n): RenderNode {\n const { chart } = context;\n return {\n type: 'path',\n id: `chart-custom-connector-${chart.id}-${index}`,\n order: context.nextOrder(),\n bounds: context.bounds,\n d: `M ${from.x} ${from.y} L ${to.x} ${to.y}`,\n style: {\n fill: { kind: 'none' },\n stroke: { kind: 'solid', color },\n strokeWidth: finite(chart.config?.customConnectorWidth, 2),\n opacity: chart.config?.customConnectorOpacity,\n dash: connectorDash(chart.config?.customConnectorDash),\n },\n };\n}\n\nfunction createConnectorLabel(\n context: ChartRenderContext,\n index: number,\n beforePoint: CustomChartPoint,\n afterPoint: CustomChartPoint,\n radius: number,\n text: string,\n): RenderNode {\n const { chart, bounds, nextOrder } = context;\n const horizontal = isHorizontal(chart);\n const frame = horizontal\n ? {\n x: Math.max(beforePoint.x, afterPoint.x) + radius + CONNECTOR_LABEL_GAP,\n y: Math.min(beforePoint.y, afterPoint.y) - 8,\n width: CONNECTOR_LABEL_WIDTH,\n height: 16,\n }\n : {\n x: Math.min(beforePoint.x, afterPoint.x) - CONNECTOR_LABEL_WIDTH / 2,\n y: Math.min(beforePoint.y, afterPoint.y) - radius - CONNECTOR_LABEL_GAP - 14,\n width: CONNECTOR_LABEL_WIDTH,\n height: 16,\n };\n return {\n ...chartText({\n id: `chart-custom-label-${chart.id}-${index}`,\n order: nextOrder(),\n bounds,\n frame,\n text,\n chart,\n align: horizontal ? 'left' : 'center',\n }),\n fontSize: Math.max(6, finite(chart.config?.customLabelSize, Math.max(9, finite(chart.fontSize, 12)) - 2)),\n ...(chart.config?.customLabelColor ? { color: chart.config.customLabelColor } : {}),\n };\n}\n","import { mapChartValue } from '../../primitives';\nimport type { ChartRenderContext } from '../types';\nimport type { FieldData } from './types';\n\nexport function classifyFieldData(context: ChartRenderContext): FieldData {\n const { chart, plot } = context;\n const scalarSeries = chart.series.filter(series => tupleSize(series.values[0]) === 3);\n const vectorSeries = chart.series.filter(series => tupleSize(series.values[0]) === 4);\n const scalarSamples = scalarSeries.flatMap(series =>\n (series.values as [number, number, number][]).map(([x, y, value]) => ({\n x: mapChartValue(x, chart.axisX, plot.width),\n y: plot.height - mapChartValue(y, chart.axisY, plot.height),\n value,\n })),\n );\n\n return { scalarSamples, vectorSeries };\n}\n\nfunction tupleSize(value: unknown): number | undefined {\n return Array.isArray(value) ? value.length : undefined;\n}\n","import type { ChartRamp } from '../../../../model/chart';\nimport type { RenderNode } from '../../../scene';\nimport { chartText, formatFieldValue } from '../../primitives';\nimport type { ChartRenderContext } from '../types';\n\nexport function renderFieldLegend(context: ChartRenderContext): RenderNode[] {\n const stops = context.chart.config?.scale?.stops;\n if (!context.showLegend || !stops?.length) {\n return [];\n }\n\n const sortedStops = [...stops].sort((a, b) => a.position - b.position);\n const minimum = sortedStops[0].position;\n const maximum = sortedStops[sortedStops.length - 1].position;\n const geometry = legendGeometry(context);\n return [\n createColorBar(context, sortedStops, minimum, maximum, geometry),\n ...createLegendLabels(context, minimum, maximum, geometry),\n ];\n}\n\ninterface LegendGeometry {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nfunction legendGeometry(context: ChartRenderContext): LegendGeometry {\n const { plot } = context;\n const width = Math.min(220, plot.width);\n return {\n x: plot.x + (plot.width - width) / 2,\n y: plot.y + plot.height + 46,\n width,\n height: 8,\n };\n}\n\nfunction createColorBar(\n context: ChartRenderContext,\n stops: ChartRamp['stops'],\n minimum: number,\n maximum: number,\n geometry: LegendGeometry,\n): RenderNode {\n const { chart, bounds, nextOrder } = context;\n const span = maximum - minimum;\n return {\n type: 'rect',\n id: `chart-field-colorbar-${chart.id}`,\n order: nextOrder(),\n bounds,\n x: geometry.x,\n y: geometry.y,\n width: geometry.width,\n height: geometry.height,\n rx: 2,\n style: {\n fill: {\n kind: 'linear-gradient',\n angle: 0,\n stops: stops.map(stop => ({\n offset: span === 0 ? 0 : ((stop.position - minimum) / span) * 100,\n color: stop.color,\n })),\n },\n },\n };\n}\n\nfunction createLegendLabels(\n context: ChartRenderContext,\n minimum: number,\n maximum: number,\n geometry: LegendGeometry,\n): RenderNode[] {\n const { chart, bounds, nextOrder } = context;\n const y = geometry.y + geometry.height + 3;\n return [\n chartText({\n id: `chart-field-colorbar-min-${chart.id}`,\n order: nextOrder(),\n bounds,\n frame: { x: geometry.x, y, width: 80, height: 16 },\n text: formatFieldValue(minimum),\n chart,\n }),\n chartText({\n id: `chart-field-colorbar-max-${chart.id}`,\n order: nextOrder(),\n bounds,\n frame: { x: geometry.x + geometry.width - 80, y, width: 80, height: 16 },\n text: formatFieldValue(maximum),\n chart,\n align: 'right',\n }),\n ];\n}\n","import type { ChartRamp } from '../../../model/chart';\nimport { interpolateHexColorStops } from '../../../model/color';\n\nconst RAMP_FALLBACK_COLOR = '#94a3b8';\n\nexport function colorAtRamp(ramp: ChartRamp | undefined, value: number): string {\n if (!ramp?.stops.length) {\n return RAMP_FALLBACK_COLOR;\n }\n\n return interpolateHexColorStops(ramp.stops, value);\n}\n","export interface IsolineSegment {\n x1: number;\n y1: number;\n x2: number;\n y2: number;\n}\n\nexport interface IsolineField {\n values: Float32Array;\n columns: number;\n rows: number;\n width: number;\n height: number;\n}\n\ninterface IsolineSample {\n x: number;\n y: number;\n value: number;\n}\n\ninterface IsolineCell {\n topLeft: IsolineSample;\n topRight: IsolineSample;\n bottomRight: IsolineSample;\n bottomLeft: IsolineSample;\n}\n\nexport type IsolinePoint = [number, number];\n\ninterface CellEdgeIntersections {\n top: IsolinePoint;\n right: IsolinePoint;\n bottom: IsolinePoint;\n left: IsolinePoint;\n}\n\nexport function stitchIsolineSegments(segments: readonly IsolineSegment[]): IsolinePoint[][] {\n if (segments.length === 0) {\n return [];\n }\n const pointKey = (point: IsolinePoint): string => `${Math.round(point[0] * 1000)}:${Math.round(point[1] * 1000)}`;\n const adjacency = new Map<string, Array<{ point: IsolinePoint; segment: number }>>();\n const addEdge = (from: IsolinePoint, to: IsolinePoint, segment: number): void => {\n const key = pointKey(from);\n const list = adjacency.get(key);\n const entry = { point: to, segment };\n if (list) {\n list.push(entry);\n } else {\n adjacency.set(key, [entry]);\n }\n };\n segments.forEach((segment, index) => {\n const a: IsolinePoint = [segment.x1, segment.y1];\n const b: IsolinePoint = [segment.x2, segment.y2];\n addEdge(a, b, index);\n addEdge(b, a, index);\n });\n\n const usedSegments = new Array(segments.length).fill(false);\n const extend = (chain: IsolinePoint[], from: IsolinePoint): void => {\n let current = from;\n for (;;) {\n const candidates = adjacency.get(pointKey(current));\n const next = candidates?.find(candidate => !usedSegments[candidate.segment]);\n if (!next) {\n return;\n }\n usedSegments[next.segment] = true;\n chain.push(next.point);\n current = next.point;\n }\n };\n\n const chains: IsolinePoint[][] = [];\n segments.forEach((segment, index) => {\n if (usedSegments[index]) {\n return;\n }\n usedSegments[index] = true;\n const forward: IsolinePoint[] = [\n [segment.x1, segment.y1],\n [segment.x2, segment.y2],\n ];\n extend(forward, forward[forward.length - 1]);\n const backward: IsolinePoint[] = [];\n extend(backward, forward[0]);\n backward.reverse();\n chains.push([...backward, ...forward]);\n });\n return chains;\n}\n\nexport function computeIsolineSegments(field: IsolineField, threshold: number): IsolineSegment[] {\n const segments: IsolineSegment[] = [];\n for (let row = 0; row < field.rows - 1; row++) {\n for (let column = 0; column < field.columns - 1; column++) {\n const cell = createIsolineCell(field, row, column);\n const caseIndex = isolineCaseIndex(cell, threshold);\n if (caseIndex !== 0 && caseIndex !== 15) {\n segments.push(...segmentsForIsolineCase(cell, caseIndex, threshold));\n }\n }\n }\n return segments;\n}\n\nfunction createIsolineCell(field: IsolineField, row: number, column: number): IsolineCell {\n return {\n topLeft: fieldSample(field, row, column),\n topRight: fieldSample(field, row, column + 1),\n bottomRight: fieldSample(field, row + 1, column + 1),\n bottomLeft: fieldSample(field, row + 1, column),\n };\n}\n\nfunction fieldSample(field: IsolineField, row: number, column: number): IsolineSample {\n return {\n x: field.width * (column / (field.columns - 1)),\n y: field.height * (row / (field.rows - 1)),\n value: field.values[row * field.columns + column],\n };\n}\n\nfunction isolineCaseIndex(cell: IsolineCell, threshold: number): number {\n return (\n (isAboveThreshold(cell.topLeft, threshold) ? 8 : 0) |\n (isAboveThreshold(cell.topRight, threshold) ? 4 : 0) |\n (isAboveThreshold(cell.bottomRight, threshold) ? 2 : 0) |\n (isAboveThreshold(cell.bottomLeft, threshold) ? 1 : 0)\n );\n}\n\nfunction isAboveThreshold(sample: IsolineSample, threshold: number): boolean {\n return sample.value >= threshold;\n}\n\nfunction segmentsForIsolineCase(cell: IsolineCell, caseIndex: number, threshold: number): IsolineSegment[] {\n const edges = cellEdgeIntersections(cell, threshold);\n switch (caseIndex) {\n case 1:\n case 14:\n return [isolineSegment(edges.left, edges.bottom)];\n case 2:\n case 13:\n return [isolineSegment(edges.bottom, edges.right)];\n case 3:\n case 12:\n return [isolineSegment(edges.left, edges.right)];\n case 4:\n case 11:\n return [isolineSegment(edges.top, edges.right)];\n case 5:\n return [isolineSegment(edges.left, edges.top), isolineSegment(edges.bottom, edges.right)];\n case 6:\n case 9:\n return [isolineSegment(edges.top, edges.bottom)];\n case 7:\n case 8:\n return [isolineSegment(edges.left, edges.top)];\n case 10:\n return [isolineSegment(edges.top, edges.right), isolineSegment(edges.left, edges.bottom)];\n default:\n return [];\n }\n}\n\nfunction cellEdgeIntersections(cell: IsolineCell, threshold: number): CellEdgeIntersections {\n return {\n top: interpolateEdge(cell.topLeft, cell.topRight, threshold),\n right: interpolateEdge(cell.topRight, cell.bottomRight, threshold),\n bottom: interpolateEdge(cell.bottomLeft, cell.bottomRight, threshold),\n left: interpolateEdge(cell.topLeft, cell.bottomLeft, threshold),\n };\n}\n\nfunction interpolateEdge(start: IsolineSample, end: IsolineSample, threshold: number): IsolinePoint {\n const progress = end.value === start.value ? 0.5 : (threshold - start.value) / (end.value - start.value);\n return [start.x + (end.x - start.x) * progress, start.y + (end.y - start.y) * progress];\n}\n\nfunction isolineSegment(from: IsolinePoint, to: IsolinePoint): IsolineSegment {\n return { x1: from[0], y1: from[1], x2: to[0], y2: to[1] };\n}\n","import type { RenderNode } from '../../../scene';\nimport { colorAtRamp } from '../../field/colorRamp';\nimport { computeFieldGrid, fieldSurfaceClip } from '../../field/grid';\nimport { computeIsolineSegments, stitchIsolineSegments } from '../../field/isolines';\nimport type { FieldSample } from '../../field/types';\nimport { linePathData } from '../../primitives/linePath';\nimport type { ChartRenderContext } from '../types';\nimport type { ScalarFieldGrid } from './types';\n\nconst ISOLINE_TENSION = 0.5;\n\nexport function renderScalarField(context: ChartRenderContext, samples: FieldSample[]): RenderNode[] {\n if (!samples.length || context.plot.width <= 0 || context.plot.height <= 0) {\n return [];\n }\n\n const grid = createScalarGrid(context, samples);\n return [...renderFieldCells(context, grid), ...renderIsolines(context, grid)];\n}\n\nfunction createScalarGrid(context: ChartRenderContext, samples: FieldSample[]): ScalarFieldGrid {\n const { plot, chart } = context;\n const result = computeFieldGrid(samples, plot.width, plot.height, chart.config?.idwPower ?? 2);\n return {\n values: result.grid,\n columns: result.cols,\n rows: result.rows,\n cellWidth: plot.width / Math.max(1, result.cols - 1),\n cellHeight: plot.height / Math.max(1, result.rows - 1),\n };\n}\n\nfunction renderFieldCells(context: ChartRenderContext, grid: ScalarFieldGrid): RenderNode[] {\n const nodes: RenderNode[] = [];\n for (let row = 0; row < grid.rows; row++) {\n for (let column = 0; column < grid.columns; column++) {\n nodes.push(createFieldCell(context, grid, row, column));\n }\n }\n return nodes;\n}\n\nfunction createFieldCell(context: ChartRenderContext, grid: ScalarFieldGrid, row: number, column: number): RenderNode {\n const { chart, plot, bounds, nextOrder } = context;\n const centerX = plot.x + plot.width * (column / (grid.columns - 1));\n const centerY = plot.y + plot.height * (row / (grid.rows - 1));\n const color = colorAtRamp(chart.config?.scale, grid.values[row * grid.columns + column]);\n return {\n type: 'rect',\n id: `chart-field-cell-${chart.id}-${row}-${column}`,\n order: nextOrder(),\n bounds,\n x: centerX - grid.cellWidth / 2,\n y: centerY - grid.cellHeight / 2,\n width: grid.cellWidth,\n height: grid.cellHeight,\n style: { fill: { kind: 'solid', color }, clip: fieldSurfaceClip(chart, plot) },\n };\n}\n\nfunction renderIsolines(context: ChartRenderContext, grid: ScalarFieldGrid): RenderNode[] {\n const nodes: RenderNode[] = [];\n (context.chart.config?.isolines ?? []).forEach((threshold, thresholdIndex) => {\n const node = createIsoline(context, grid, threshold, thresholdIndex);\n if (node) {\n nodes.push(node);\n }\n });\n return nodes;\n}\n\nfunction createIsoline(\n context: ChartRenderContext,\n grid: ScalarFieldGrid,\n threshold: number,\n thresholdIndex: number,\n): RenderNode | null {\n const { chart, plot, bounds, nextOrder } = context;\n const segments = computeIsolineSegments(\n {\n values: grid.values,\n columns: grid.columns,\n rows: grid.rows,\n width: plot.width,\n height: plot.height,\n },\n threshold,\n );\n if (!segments.length) {\n return null;\n }\n const chains = stitchIsolineSegments(segments);\n const path = chains\n .map(chain =>\n linePathData(\n chain.map(([x, y]) => ({ x: plot.x + x, y: plot.y + y })),\n ISOLINE_TENSION,\n ),\n )\n .join(' ');\n return {\n type: 'path',\n id: `chart-field-isoline-${chart.id}-${thresholdIndex}`,\n order: nextOrder(),\n bounds,\n d: path,\n style: {\n fill: { kind: 'none' },\n stroke: { kind: 'solid', color: 'rgba(15, 23, 42, 0.55)' },\n strokeWidth: 1,\n clip: fieldSurfaceClip(chart, plot),\n },\n };\n}\n","import type { ChartSeries } from '../../../../model/chart';\nimport type { RenderNode } from '../../../scene';\nimport { paint } from '../../../scene';\nimport { CHART_COLORS, mapChartValue } from '../../primitives';\nimport type { ChartRenderContext } from '../types';\n\nexport function renderVectorField(context: ChartRenderContext, seriesList: ChartSeries[]): RenderNode[] {\n const nodes: RenderNode[] = [];\n seriesList.forEach((series, seriesIndex) => {\n const color = series.color ?? CHART_COLORS[seriesIndex % CHART_COLORS.length];\n (series.values as [number, number, number, number][]).forEach((vector, vectorIndex) => {\n nodes.push(createVectorNode(context, series.id, vector, vectorIndex, color));\n });\n });\n return nodes;\n}\n\nfunction createVectorNode(\n context: ChartRenderContext,\n seriesId: string,\n vector: [number, number, number, number],\n vectorIndex: number,\n color: Parameters<typeof paint>[0],\n): RenderNode {\n const { chart, plot, bounds, diagnostics, nextOrder } = context;\n const [x, y, angle, magnitude] = vector;\n const startX = plot.x + mapChartValue(x, chart.axisX, plot.width);\n const startY = plot.y + plot.height - mapChartValue(y, chart.axisY, plot.height);\n const endX = plot.x + mapChartValue(x + Math.cos(angle) * magnitude, chart.axisX, plot.width);\n const endY = plot.y + plot.height - mapChartValue(y + Math.sin(angle) * magnitude, chart.axisY, plot.height);\n return {\n type: 'path',\n id: `chart-field-vector-${chart.id}-${seriesId}-${vectorIndex}`,\n order: nextOrder(),\n bounds,\n d: `M ${startX} ${startY} L ${endX} ${endY}`,\n markerEnd: 'filled_arrow',\n style: {\n fill: { kind: 'none' },\n stroke: paint(color, diagnostics, chart.id),\n strokeWidth: 2,\n },\n };\n}\n","import type { RenderNode } from '../../scene';\nimport { classifyFieldData } from './field/data';\nimport { renderFieldLegend } from './field/legend';\nimport { renderScalarField } from './field/scalar';\nimport { renderVectorField } from './field/vectors';\nimport type { ChartRenderContext } from './types';\n\nexport function renderField(context: ChartRenderContext): RenderNode[] {\n const data = classifyFieldData(context);\n const nodes: RenderNode[] = [];\n\n nodes.push(...renderScalarField(context, data.scalarSamples));\n nodes.push(...renderVectorField(context, data.vectorSeries));\n nodes.push(...renderFieldLegend(context));\n\n return nodes;\n}\n","import type { ChartSeries } from '../../../../model/chart';\nimport type { RenderNode } from '../../../scene';\nimport { finite } from '../../../scene';\nimport { chartText, contrastTextColor, zoneColorAtValue } from '../../primitives';\nimport type { ChartRenderContext } from '../types';\nimport type { HeatmapLayout } from './types';\n\ninterface HeatmapCell {\n seriesId: string;\n columnIndex: number;\n value: number;\n color: string;\n frame: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n}\n\nexport function renderHeatmapCells(context: ChartRenderContext, layout: HeatmapLayout): RenderNode[] {\n const nodes: RenderNode[] = [];\n layout.rows.forEach((series, rowIndex) => {\n nodes.push(...renderRowCells(context, layout, series, rowIndex));\n });\n return nodes;\n}\n\nfunction renderRowCells(\n context: ChartRenderContext,\n layout: HeatmapLayout,\n series: ChartSeries,\n rowIndex: number,\n): RenderNode[] {\n return layout.columns.flatMap((_, columnIndex) => {\n const cell = createHeatmapCell(layout, series, rowIndex, columnIndex);\n return renderHeatmapCell(context, layout, cell);\n });\n}\n\nfunction createHeatmapCell(\n layout: HeatmapLayout,\n series: ChartSeries,\n rowIndex: number,\n columnIndex: number,\n): HeatmapCell {\n const value = (series.values as number[])[columnIndex] ?? 0;\n const { cellGap } = layout.grid;\n return {\n seriesId: series.id,\n columnIndex,\n value,\n color: colorForValue(value, layout),\n frame: {\n x: layout.grid.x + columnIndex * layout.grid.cellWidth + cellGap / 2,\n y: layout.grid.y + rowIndex * layout.grid.cellHeight + cellGap / 2,\n width: Math.max(0, layout.grid.cellWidth - cellGap),\n height: Math.max(0, layout.grid.cellHeight - cellGap),\n },\n };\n}\n\nfunction colorForValue(value: number, layout: HeatmapLayout): string {\n return zoneColorAtValue(value, layout.bands, layout.zones);\n}\n\nfunction renderHeatmapCell(context: ChartRenderContext, layout: HeatmapLayout, cell: HeatmapCell): RenderNode[] {\n const background = createCellBackground(context, layout, cell);\n if (context.chart.config?.showValues === false) {\n return [background];\n }\n return [background, createCellValueLabel(context, layout, cell)];\n}\n\nfunction createCellBackground(context: ChartRenderContext, layout: HeatmapLayout, cell: HeatmapCell): RenderNode {\n const { chart, bounds, nextOrder } = context;\n const id = `chart-heatmap-cell-${chart.id}-${cell.seriesId}-${cell.columnIndex}`;\n const style = {\n fill: { kind: 'solid' as const, color: cell.color },\n stroke: { kind: 'solid' as const, color: chart.config?.cellStrokeColor ?? chart.gridColor ?? '#e2e8f0' },\n strokeWidth: finite(chart.config?.cellStrokeWidth, finite(chart.gridWidth, 1)),\n };\n if (chart.config?.cellShape === 'circle') {\n return {\n type: 'ellipse',\n id,\n order: nextOrder(),\n bounds,\n cx: cell.frame.x + cell.frame.width / 2,\n cy: cell.frame.y + cell.frame.height / 2,\n rx: cell.frame.width / 2,\n ry: cell.frame.height / 2,\n style,\n };\n }\n return {\n type: 'rect',\n id,\n order: nextOrder(),\n bounds,\n ...cell.frame,\n rx: layout.grid.cellRadius,\n style,\n };\n}\n\nfunction createCellValueLabel(context: ChartRenderContext, layout: HeatmapLayout, cell: HeatmapCell): RenderNode {\n const { chart, bounds, nextOrder } = context;\n const size = Math.max(6, finite(chart.config?.cellValueSize, layout.fontSize));\n return {\n ...chartText({\n id: `chart-heatmap-value-${chart.id}-${cell.seriesId}-${cell.columnIndex}`,\n order: nextOrder(),\n bounds,\n frame: {\n x: cell.frame.x,\n y: cell.frame.y + cell.frame.height / 2 - size / 2,\n width: cell.frame.width,\n height: size + 2,\n },\n text: String(cell.value),\n chart,\n align: 'center',\n }),\n ...(chart.config?.cellValueSize === undefined ? {} : { fontSize: size }),\n color: chart.config?.cellValueColor ?? contrastTextColor(cell.color),\n };\n}\n","import type { ChartSeries } from '../../../../model/chart';\nimport type { RenderNode } from '../../../scene';\nimport { chartText } from '../../primitives';\nimport type { ChartRenderContext } from '../types';\nimport type { HeatmapLayout } from './types';\n\nexport function renderHeatmapHeaders(context: ChartRenderContext, layout: HeatmapLayout): RenderNode[] {\n return [...renderRowHeaders(context, layout), ...renderColumnHeaders(context, layout)];\n}\n\nfunction renderRowHeaders(context: ChartRenderContext, layout: HeatmapLayout): RenderNode[] {\n if (layout.reservedSpace.rowHeaders <= 0) {\n return [];\n }\n return layout.rows.map((series, rowIndex) => createRowHeader(context, layout, series, rowIndex));\n}\n\nfunction createRowHeader(\n context: ChartRenderContext,\n layout: HeatmapLayout,\n series: ChartSeries,\n rowIndex: number,\n): RenderNode {\n const { chart, plot, bounds, nextOrder } = context;\n return chartText({\n id: `chart-heatmap-row-${chart.id}-${series.id}`,\n order: nextOrder(),\n bounds,\n frame: {\n x: plot.x,\n y: layout.grid.y + rowIndex * layout.grid.cellHeight + layout.grid.cellHeight / 2 - layout.fontSize / 2,\n width: layout.reservedSpace.rowHeaders - 8,\n height: layout.fontSize + 2,\n },\n text: series.label,\n chart,\n });\n}\n\nfunction renderColumnHeaders(context: ChartRenderContext, layout: HeatmapLayout): RenderNode[] {\n if (layout.reservedSpace.columnHeaders <= 0) {\n return [];\n }\n return layout.columns.map((label, columnIndex) => createColumnHeader(context, layout, label, columnIndex));\n}\n\nfunction createColumnHeader(\n context: ChartRenderContext,\n layout: HeatmapLayout,\n label: string,\n columnIndex: number,\n): RenderNode {\n const { chart, plot, bounds, nextOrder } = context;\n return chartText({\n id: `chart-heatmap-col-${chart.id}-${columnIndex}`,\n order: nextOrder(),\n bounds,\n frame: {\n x: layout.grid.x + columnIndex * layout.grid.cellWidth,\n y: plot.y,\n width: layout.grid.cellWidth,\n height: layout.fontSize + 2,\n },\n text: label,\n chart,\n align: 'center',\n });\n}\n","import { finite } from '../../../scene';\nimport { estimateTextWidth } from '../../../scene/textLayout';\nimport { axisBands, DEFAULT_HEATMAP_ZONES } from '../../primitives';\nimport type { ChartRenderContext } from '../types';\nimport type { HeatmapGrid, HeatmapLayout, HeatmapReservedSpace } from './types';\n\nexport function createHeatmapLayout(context: ChartRenderContext): HeatmapLayout {\n const { chart } = context;\n const columns = heatmapColumns(context);\n const reservedSpace = heatmapReservedSpace(context);\n\n return {\n rows: chart.series,\n columns,\n bands: axisBands(chart.axisY),\n zones: chart.config?.zones?.length ? chart.config.zones : DEFAULT_HEATMAP_ZONES,\n fontSize: Math.max(9, finite(chart.fontSize, 12)),\n reservedSpace,\n grid: createHeatmapGrid(context, reservedSpace, columns.length),\n };\n}\n\nfunction heatmapColumns(context: ChartRenderContext): string[] {\n const { chart } = context;\n return chart.config?.categories?.length\n ? chart.config.categories\n : ((chart.series[0]?.values as number[] | undefined)?.map((_, index) => String(index + 1)) ?? []);\n}\n\nfunction heatmapReservedSpace(context: ChartRenderContext): HeatmapReservedSpace {\n const { chart } = context;\n const fontSize = Math.max(9, finite(chart.fontSize, 12));\n const longestLabel = chart.series.reduce(\n (max, series) => Math.max(max, estimateTextWidth(series.label ?? '', fontSize, false)),\n 0,\n );\n return {\n rowHeaders: context.showLabels ? Math.min(96, longestLabel + 12) : 0,\n columnHeaders: context.showLabels ? 24 : 0,\n legend: context.showLegend ? 38 : 0,\n };\n}\n\nfunction createHeatmapGrid(\n context: ChartRenderContext,\n reservedSpace: HeatmapReservedSpace,\n columnCount: number,\n): HeatmapGrid {\n const { chart } = context;\n const width = Math.max(1, context.plot.width - reservedSpace.rowHeaders);\n const height = Math.max(1, context.plot.height - reservedSpace.columnHeaders - reservedSpace.legend);\n const rowCount = chart.series.length;\n const cellGap = Math.max(0, finite(chart.config?.cellGap, 0));\n\n let cellWidth = columnCount ? width / columnCount : width;\n let cellHeight = rowCount ? height / rowCount : height;\n let gridWidth = width;\n let gridHeight = height;\n if (chart.config?.squareCells && columnCount && rowCount) {\n const cellSize = Math.min(cellWidth, cellHeight);\n cellWidth = cellSize;\n cellHeight = cellSize;\n gridWidth = cellSize * columnCount;\n gridHeight = cellSize * rowCount;\n }\n\n return {\n x: context.plot.x + reservedSpace.rowHeaders,\n y: context.plot.y + reservedSpace.columnHeaders,\n width: gridWidth,\n height: gridHeight,\n cellWidth,\n cellHeight,\n cellGap,\n cellRadius: Math.max(0, finite(chart.config?.barCornerRadius, cellGap)),\n };\n}\n","import type { RenderNode } from '../../../scene';\nimport { boxBounds } from '../../../scene';\nimport { chartText, DEFAULT_ZONE_FILL, formatFieldValue } from '../../primitives';\nimport type { ChartRenderContext } from '../types';\nimport type { HeatmapLayout } from './types';\n\nconst BAR_HEIGHT = 10;\nconst TICK_HEIGHT = 4;\nconst ROW_GAP = 2;\n\nexport function renderHeatmapLegend(context: ChartRenderContext, layout: HeatmapLayout): RenderNode[] {\n if (layout.reservedSpace.legend <= 0 || layout.zones.length === 0) {\n return [];\n }\n\n const barX = layout.grid.x;\n const barWidth = layout.grid.width;\n const labelHeight = layout.fontSize + 2;\n const barY = layout.grid.y + layout.grid.height + 6;\n const barBounds = boxBounds({ x: barX, y: barY, width: barWidth, height: BAR_HEIGHT });\n\n return [\n createGradientBar(context, layout, barX, barY, barWidth, barBounds),\n ...createBoundaryTicks(context, layout, barX, barY, barWidth, labelHeight),\n ];\n}\n\nfunction bandRatio(layout: HeatmapLayout, value: number): number {\n const first = layout.bands[0];\n const last = layout.bands[layout.bands.length - 1];\n return last === first ? 0 : (value - first) / (last - first);\n}\n\nfunction createGradientBar(\n context: ChartRenderContext,\n layout: HeatmapLayout,\n barX: number,\n barY: number,\n barWidth: number,\n barBounds: RenderNode['bounds'],\n): RenderNode {\n const { chart, nextOrder } = context;\n const bandCount = Math.max(0, layout.bands.length - 1);\n const zones = layout.zones.slice(0, bandCount);\n const stops = zones.map((zone, index) => ({\n offset: bandRatio(layout, layout.bands[index + 1] ?? layout.bands[layout.bands.length - 1]) * 100,\n color: zone.color ?? DEFAULT_ZONE_FILL,\n }));\n return {\n type: 'rect',\n id: `chart-heatmap-legend-bar-${chart.id}`,\n order: nextOrder(),\n bounds: barBounds,\n x: barX,\n y: barY,\n width: barWidth,\n height: BAR_HEIGHT,\n rx: 3,\n zoneGradient: { axis: 'y', min: chart.axisY.min, max: chart.axisY.max },\n style: {\n fill: stops.length ? { kind: 'linear-gradient', angle: 0, stops } : { kind: 'solid', color: DEFAULT_ZONE_FILL },\n stroke: { kind: 'solid', color: chart.gridColor ?? '#e2e8f0' },\n strokeWidth: 1,\n },\n };\n}\n\nfunction createBoundaryTicks(\n context: ChartRenderContext,\n layout: HeatmapLayout,\n barX: number,\n barY: number,\n barWidth: number,\n labelHeight: number,\n): RenderNode[] {\n const { chart, bounds, nextOrder } = context;\n const labelY = barY + BAR_HEIGHT + TICK_HEIGHT + ROW_GAP;\n const labelWidth = 48;\n\n return layout.bands.flatMap((value, index) => {\n const x = barX + bandRatio(layout, value) * barWidth;\n const tick: RenderNode = {\n type: 'path',\n id: `chart-heatmap-legend-tick-${chart.id}-${index}`,\n order: nextOrder(),\n bounds,\n d: `M ${x} ${barY + BAR_HEIGHT} L ${x} ${barY + BAR_HEIGHT + TICK_HEIGHT}`,\n style: {\n fill: { kind: 'none' },\n stroke: { kind: 'solid', color: chart.gridColor ?? '#e2e8f0' },\n strokeWidth: 1,\n },\n };\n const isFirst = index === 0;\n const isLast = index === layout.bands.length - 1;\n const align = isFirst ? 'left' : isLast ? 'right' : 'center';\n const frameX = isFirst ? x : isLast ? x - labelWidth : x - labelWidth / 2;\n const label = chartText({\n id: `chart-heatmap-legend-tick-label-${chart.id}-${index}`,\n order: nextOrder(),\n bounds,\n frame: { x: frameX, y: labelY, width: labelWidth, height: labelHeight },\n text: formatFieldValue(value),\n chart,\n align,\n });\n return [tick, label];\n });\n}\n","import type { RenderNode } from '../../scene';\nimport { renderHeatmapCells } from './heatmap/cells';\nimport { renderHeatmapHeaders } from './heatmap/headers';\nimport { createHeatmapLayout } from './heatmap/layout';\nimport { renderHeatmapLegend } from './heatmap/legend';\nimport type { ChartRenderContext } from './types';\n\nexport function renderHeatmap(context: ChartRenderContext): RenderNode[] {\n const layout = createHeatmapLayout(context);\n const nodes: RenderNode[] = [];\n\n nodes.push(...renderHeatmapCells(context, layout));\n nodes.push(...renderHeatmapHeaders(context, layout));\n nodes.push(...renderHeatmapLegend(context, layout));\n\n return nodes;\n}\n","export interface HexBin {\n cx: number;\n cy: number;\n count: number;\n}\n\nexport function computeHexBins(points: Array<{ x: number; y: number }>, radius: number): HexBin[] {\n if (radius <= 0 || points.length === 0) {\n return [];\n }\n const dx = radius * 1.5,\n dy = radius * Math.sqrt(3);\n const bins = new Map<string, HexBin>();\n\n for (const { x, y } of points) {\n const col = Math.round(x / dx);\n const rowOffset = col % 2 !== 0 ? dy / 2 : 0;\n const row = Math.round((y - rowOffset) / dy);\n const key = `${col}:${row}`;\n const existing = bins.get(key);\n if (existing) {\n existing.count++;\n } else {\n bins.set(key, { cx: col * dx, cy: row * dy + rowOffset, count: 1 });\n }\n }\n\n return [...bins.values()];\n}\n","import type { SankeyGraph } from './types';\n\nexport function assignSankeyColumns(graph: SankeyGraph): Map<string, number> {\n const columns = new Map<string, number>();\n for (const id of graph.ids) {\n columns.set(id, 0);\n }\n for (let pass = 0; pass < graph.ids.size; pass++) {\n let changed = false;\n for (const link of graph.links) {\n const candidate = (columns.get(link.source) ?? 0) + 1;\n if (candidate > (columns.get(link.target) ?? 0)) {\n columns.set(link.target, candidate);\n changed = true;\n }\n }\n if (!changed) {\n break;\n }\n }\n return columns;\n}\n\nexport function groupSankeyColumns(ids: Set<string>, columns: Map<string, number>): Map<number, string[]> {\n const groups = new Map<number, string[]>();\n for (const id of ids) {\n const column = columns.get(id) ?? 0;\n const group = groups.get(column) ?? [];\n group.push(id);\n groups.set(column, group);\n }\n return groups;\n}\n","export const SANKEY_NODE_WIDTH = 18;\nexport const SANKEY_NODE_GAP = 8;\n","import type { SankeyGraph, SankeyLinkInput, SankeyNodeInput } from './types';\n\nexport function createSankeyGraph(nodes: SankeyNodeInput[], links: SankeyLinkInput[]): SankeyGraph {\n const ids = new Set(nodes.map(node => node.id));\n for (const link of links) {\n ids.add(link.source);\n ids.add(link.target);\n }\n\n const incoming = new Map<string, SankeyLinkInput[]>();\n const outgoing = new Map<string, SankeyLinkInput[]>();\n for (const id of ids) {\n incoming.set(id, []);\n outgoing.set(id, []);\n }\n const validLinks = links.filter(\n link => ids.has(link.source) && ids.has(link.target) && link.value > 0 && link.source !== link.target,\n );\n for (const link of validLinks) {\n outgoing.get(link.source)?.push(link);\n incoming.get(link.target)?.push(link);\n }\n return { ids, links: validLinks, incoming, outgoing };\n}\n","import { groupSankeyColumns } from './columns';\nimport { SANKEY_NODE_GAP, SANKEY_NODE_WIDTH } from './constants';\nimport type { SankeyGraph, SankeyNodeGeometry } from './types';\n\nfunction nodeValues(graph: SankeyGraph): Map<string, number> {\n const values = new Map<string, number>();\n for (const id of graph.ids) {\n const inflow = (graph.incoming.get(id) ?? []).reduce((sum, link) => sum + link.value, 0);\n const outflow = (graph.outgoing.get(id) ?? []).reduce((sum, link) => sum + link.value, 0);\n values.set(id, Math.max(inflow, outflow, 0.0001));\n }\n return values;\n}\n\nfunction calculateValueScale(\n groups: Map<number, string[]>,\n values: Map<string, number>,\n height: number,\n nodeGap: number,\n): number {\n let scale = Infinity;\n for (const ids of groups.values()) {\n const total = ids.reduce((sum, id) => sum + (values.get(id) ?? 0), 0);\n const gaps = Math.max(0, ids.length - 1) * nodeGap;\n const usable = Math.max(1, height - gaps);\n if (total > 0) {\n scale = Math.min(scale, usable / total);\n }\n }\n if (!Number.isFinite(scale) || scale <= 0) {\n return 1;\n }\n return scale;\n}\n\nexport function sankeyNodeX(\n column: number,\n columnCount: number,\n width: number,\n nodeWidth: number = SANKEY_NODE_WIDTH,\n): number {\n if (columnCount <= 1) {\n return 0;\n }\n return (column * (width - nodeWidth)) / (columnCount - 1);\n}\n\nexport function calculateNodeGeometry(\n graph: SankeyGraph,\n columns: Map<string, number>,\n height: number,\n nodeGap: number = SANKEY_NODE_GAP,\n): SankeyNodeGeometry {\n const groups = groupSankeyColumns(graph.ids, columns);\n const values = nodeValues(graph);\n const valueScale = calculateValueScale(groups, values, height, nodeGap);\n const y = new Map<string, number>();\n const heights = new Map<string, number>();\n for (const ids of groups.values()) {\n let cursor = 0;\n for (const id of ids) {\n const nodeHeight = Math.max(2, (values.get(id) ?? 0) * valueScale);\n y.set(id, cursor);\n heights.set(id, nodeHeight);\n cursor += nodeHeight + nodeGap;\n }\n }\n return {\n columns,\n y,\n heights,\n valueScale,\n columnCount: Math.max(1, ...[...columns.values()].map(column => column + 1)),\n };\n}\n","import { SANKEY_NODE_WIDTH } from './constants';\nimport { sankeyNodeX } from './nodeGeometry';\nimport type { SankeyGraph, SankeyLayoutLink, SankeyNodeGeometry, SankeyNodeOffset } from './types';\n\nexport function layoutSankeyLinks(\n graph: SankeyGraph,\n geometry: SankeyNodeGeometry,\n width: number,\n offsets: Map<string, SankeyNodeOffset>,\n nodeWidth: number = SANKEY_NODE_WIDTH,\n): SankeyLayoutLink[] {\n const outgoingOffsets = new Map<string, number>();\n const incomingOffsets = new Map<string, number>();\n for (const id of graph.ids) {\n outgoingOffsets.set(id, 0);\n incomingOffsets.set(id, 0);\n }\n return graph.links.map(link => {\n const sliceHeight = Math.max(0.5, link.value * geometry.valueScale);\n const sourceOffset = offsets.get(link.source);\n const targetOffset = offsets.get(link.target);\n const sourceTop = (geometry.y.get(link.source) ?? 0) + (sourceOffset?.y ?? 0);\n const targetTop = (geometry.y.get(link.target) ?? 0) + (targetOffset?.y ?? 0);\n const sourceSlice = outgoingOffsets.get(link.source) ?? 0;\n const targetSlice = incomingOffsets.get(link.target) ?? 0;\n outgoingOffsets.set(link.source, sourceSlice + sliceHeight);\n incomingOffsets.set(link.target, targetSlice + sliceHeight);\n return {\n source: link.source,\n target: link.target,\n value: link.value,\n color: link.color,\n x0:\n sankeyNodeX(geometry.columns.get(link.source) ?? 0, geometry.columnCount, width, nodeWidth) +\n nodeWidth +\n (sourceOffset?.x ?? 0),\n x1:\n sankeyNodeX(geometry.columns.get(link.target) ?? 0, geometry.columnCount, width, nodeWidth) +\n (targetOffset?.x ?? 0),\n sourceY0: sourceTop + sourceSlice,\n sourceY1: sourceTop + sourceSlice + sliceHeight,\n targetY0: targetTop + targetSlice,\n targetY1: targetTop + targetSlice + sliceHeight,\n };\n });\n}\n","import { SANKEY_NODE_WIDTH } from './constants';\nimport { sankeyNodeX } from './nodeGeometry';\nimport type { SankeyGraph, SankeyLayoutNode, SankeyNodeGeometry, SankeyNodeInput, SankeyNodeOffset } from './types';\n\nexport function layoutSankeyNodes(\n inputs: SankeyNodeInput[],\n graph: SankeyGraph,\n geometry: SankeyNodeGeometry,\n width: number,\n offsets: Map<string, SankeyNodeOffset>,\n nodeWidth: number = SANKEY_NODE_WIDTH,\n): SankeyLayoutNode[] {\n return [...graph.ids].map(id => {\n const input = inputs.find(node => node.id === id);\n const column = geometry.columns.get(id) ?? 0;\n const offset = offsets.get(id);\n return {\n id,\n label: input?.label ?? id,\n color: input?.color,\n x: sankeyNodeX(column, geometry.columnCount, width, nodeWidth) + (offset?.x ?? 0),\n y: (geometry.y.get(id) ?? 0) + (offset?.y ?? 0),\n width: nodeWidth,\n height: geometry.heights.get(id) ?? 2,\n column,\n };\n });\n}\n","import { assignSankeyColumns } from './columns';\nimport { SANKEY_NODE_GAP, SANKEY_NODE_WIDTH } from './constants';\nimport { createSankeyGraph } from './graph';\nimport { layoutSankeyLinks } from './links';\nimport { calculateNodeGeometry } from './nodeGeometry';\nimport { layoutSankeyNodes } from './nodes';\nimport type { SankeyLayout, SankeyLayoutOptions, SankeyLinkInput, SankeyNodeInput, SankeyNodeOffset } from './types';\n\nfunction collectOffsets(inputs: SankeyNodeInput[]): Map<string, SankeyNodeOffset> {\n const offsets = new Map<string, SankeyNodeOffset>();\n for (const input of inputs) {\n if (input.offsetX || input.offsetY) {\n offsets.set(input.id, { x: input.offsetX ?? 0, y: input.offsetY ?? 0 });\n }\n }\n return offsets;\n}\n\nexport function layoutSankey(\n nodeInputs: SankeyNodeInput[],\n linkInputs: SankeyLinkInput[],\n width: number,\n height: number,\n options: SankeyLayoutOptions = { nodeWidth: SANKEY_NODE_WIDTH, nodeGap: SANKEY_NODE_GAP },\n): SankeyLayout {\n const graph = createSankeyGraph(nodeInputs, linkInputs);\n if (graph.ids.size === 0) {\n return { nodes: [], links: [] };\n }\n const columns = assignSankeyColumns(graph);\n const geometry = calculateNodeGeometry(graph, columns, height, options.nodeGap);\n const offsets = collectOffsets(nodeInputs);\n return {\n nodes: layoutSankeyNodes(nodeInputs, graph, geometry, width, offsets, options.nodeWidth),\n links: layoutSankeyLinks(graph, geometry, width, offsets, options.nodeWidth),\n };\n}\n","export interface TreemapRect<T> {\n item: T;\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface TreemapBounds {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\ninterface SizedTreemapItem<T> {\n item: T;\n area: number;\n}\n\ninterface TreemapRow<T> {\n items: SizedTreemapItem<T>[];\n area: number;\n}\n\ninterface TreemapPlacement<T> {\n rectangles: TreemapRect<T>[];\n remainingBounds: TreemapBounds;\n}\n\nexport function squarifyTreemap<T extends { value: number }>(items: T[], bounds: TreemapBounds): TreemapRect<T>[] {\n const remainingItems = sizeTreemapItems(items, bounds);\n if (!remainingItems.length) {\n return [];\n }\n\n const rectangles: TreemapRect<T>[] = [];\n let remaining = remainingItems;\n let remainingBounds = bounds;\n while (remaining.length) {\n const row = selectTreemapRow(remaining, Math.min(remainingBounds.width, remainingBounds.height));\n const placement = placeTreemapRow(row, remainingBounds);\n rectangles.push(...placement.rectangles);\n remaining = remaining.slice(row.items.length);\n remainingBounds = placement.remainingBounds;\n }\n return rectangles;\n}\n\nfunction sizeTreemapItems<T extends { value: number }>(items: T[], bounds: TreemapBounds): SizedTreemapItem<T>[] {\n const positiveItems = items.filter(item => item.value > 0);\n if (!positiveItems.length || bounds.width <= 0 || bounds.height <= 0) {\n return [];\n }\n const total = positiveItems.reduce((sum, item) => sum + item.value, 0);\n if (total <= 0) {\n return [];\n }\n const areaScale = (bounds.width * bounds.height) / total;\n return [...positiveItems]\n .sort((left, right) => right.value - left.value)\n .map(item => ({ item, area: item.value * areaScale }));\n}\n\nfunction selectTreemapRow<T>(items: SizedTreemapItem<T>[], availableLength: number): TreemapRow<T> {\n const rowItems = [items[0]];\n for (let index = 1; index < items.length; index++) {\n const candidateItems = [...rowItems, items[index]];\n if (worstAspectRatio(candidateItems, availableLength) > worstAspectRatio(rowItems, availableLength)) {\n break;\n }\n rowItems.push(items[index]);\n }\n return {\n items: rowItems,\n area: rowItems.reduce((sum, item) => sum + item.area, 0),\n };\n}\n\nfunction worstAspectRatio<T>(items: SizedTreemapItem<T>[], availableLength: number): number {\n const area = items.reduce((sum, item) => sum + item.area, 0);\n if (area <= 0 || availableLength <= 0) {\n return Infinity;\n }\n const areas = items.map(item => item.area);\n const largestArea = Math.max(...areas);\n const smallestArea = Math.min(...areas);\n const squaredLength = availableLength * availableLength;\n return Math.max((squaredLength * largestArea) / (area * area), (area * area) / (squaredLength * smallestArea));\n}\n\nfunction placeTreemapRow<T>(row: TreemapRow<T>, bounds: TreemapBounds): TreemapPlacement<T> {\n return bounds.width >= bounds.height ? placeVerticalTreemapRow(row, bounds) : placeHorizontalTreemapRow(row, bounds);\n}\n\nfunction placeVerticalTreemapRow<T>(row: TreemapRow<T>, bounds: TreemapBounds): TreemapPlacement<T> {\n const columnWidth = bounds.height > 0 ? row.area / bounds.height : 0;\n let y = bounds.y;\n const rectangles = row.items.map(({ item, area }) => {\n const height = columnWidth > 0 ? area / columnWidth : 0;\n const rectangle = { item, x: bounds.x, y, width: columnWidth, height };\n y += height;\n return rectangle;\n });\n return {\n rectangles,\n remainingBounds: {\n x: bounds.x + columnWidth,\n y: bounds.y,\n width: bounds.width - columnWidth,\n height: bounds.height,\n },\n };\n}\n\nfunction placeHorizontalTreemapRow<T>(row: TreemapRow<T>, bounds: TreemapBounds): TreemapPlacement<T> {\n const rowHeight = bounds.width > 0 ? row.area / bounds.width : 0;\n let x = bounds.x;\n const rectangles = row.items.map(({ item, area }) => {\n const width = rowHeight > 0 ? area / rowHeight : 0;\n const rectangle = { item, x, y: bounds.y, width, height: rowHeight };\n x += width;\n return rectangle;\n });\n return {\n rectangles,\n remainingBounds: {\n x: bounds.x,\n y: bounds.y + rowHeight,\n width: bounds.width,\n height: bounds.height - rowHeight,\n },\n };\n}\n","import type { HexbinChart } from '../../../model/chart';\nimport type { RenderNode } from '../../scene';\nimport { paint } from '../../scene';\nimport { colorAtRamp } from '../field/colorRamp';\nimport { computeHexBins } from '../geometry';\nimport { CHART_COLORS, DEFAULT_HEX_RADIUS, mapChartValue, resolveChartShadow } from '../primitives';\nimport type { ChartRenderContext } from './types';\n\nconst DEFAULT_MIN_OPACITY = 0.15;\n// Shrinking the radius by this much per pixel of gap opens that gap between the flat sides of two neighbours.\nconst GAP_TO_RADIUS = 1 / Math.sqrt(3);\n\nfunction hexPath(cx: number, cy: number, radius: number): string {\n const points: string[] = [];\n for (let corner = 0; corner < 6; corner++) {\n const angle = ((-60 + 60 * corner) * Math.PI) / 180;\n points.push(`${corner === 0 ? 'M' : 'L'} ${cx + radius * Math.cos(angle)} ${cy + radius * Math.sin(angle)}`);\n }\n return `${points.join(' ')} Z`;\n}\n\nexport function renderHexbin(context: ChartRenderContext<HexbinChart>): RenderNode[] {\n const { chart, plot, bounds, diagnostics, nextOrder } = context;\n const nodes: RenderNode[] = [];\n const config = chart.config;\n const hexRadius = Math.max(1, config?.hexRadius ?? DEFAULT_HEX_RADIUS);\n const drawRadius = Math.max(0.5, hexRadius - Math.max(0, config?.hexGap ?? 0) * GAP_TO_RADIUS);\n const strokeWidth = config?.hexStrokeWidth ?? 0;\n const minOpacity = Math.min(1, Math.max(0, config?.hexMinOpacity ?? DEFAULT_MIN_OPACITY));\n const shadow = resolveChartShadow(chart.shadowStyle);\n const clipPath = shadow\n ? `M ${plot.x} ${plot.y} H ${plot.x + plot.width} V ${plot.y + plot.height} H ${plot.x} Z`\n : undefined;\n chart.series.forEach((series, seriesIndex) => {\n const explicit = series.values.length > 0 && Array.isArray(series.values[0]);\n const pairs = explicit\n ? (series.values as [number, number][])\n : (series.values as number[]).map((y, i) => [chart.axisX.min + i * chart.axisX.step, y] as [number, number]);\n const pixelPoints = pairs.map(([vx, vy]) => ({\n x: mapChartValue(vx, chart.axisX, plot.width),\n y: plot.height - mapChartValue(vy, chart.axisY, plot.height),\n }));\n const bins = computeHexBins(pixelPoints, hexRadius);\n const maxCount = Math.max(1, ...bins.map(bin => bin.count));\n const color = series.color ?? CHART_COLORS[seriesIndex % CHART_COLORS.length];\n const ramp = config?.scale;\n bins.forEach((bin, i) => {\n const share = bin.count / maxCount;\n const fill = ramp ? colorAtRamp(ramp, share) : color;\n nodes.push({\n type: 'path',\n id: `chart-hexbin-${chart.id}-${series.id}-${i}`,\n order: nextOrder(),\n bounds,\n d: hexPath(plot.x + bin.cx, plot.y + bin.cy, drawRadius),\n style: {\n fill: paint(fill, diagnostics, chart.id),\n stroke: strokeWidth > 0 ? paint(config?.hexStrokeColor ?? fill, diagnostics, chart.id) : undefined,\n strokeWidth: strokeWidth > 0 ? strokeWidth : undefined,\n opacity: ramp ? undefined : Math.max(minOpacity, share),\n shadow,\n clip: clipPath ? { type: 'path', d: clipPath } : undefined,\n },\n });\n });\n });\n return nodes;\n}\n","import type { Chart, ChartSeries } from '../../../model/chart';\nimport { mapChartValue } from '../primitives';\nimport type { ChartRenderContext } from './types';\n\nexport interface CartesianPoint {\n x: number;\n y: number;\n}\n\nexport function seriesValuePairs(chart: Chart, series: ChartSeries): [number, number][] {\n if (series.values.length > 0 && Array.isArray(series.values[0])) {\n return series.values as [number, number][];\n }\n return (series.values as number[]).map((value, index) => [chart.axisX.min + index * chart.axisX.step, value]);\n}\n\nexport function pixelPoints(context: ChartRenderContext, pairs: [number, number][]): CartesianPoint[] {\n const { chart, plot } = context;\n return pairs.map(([x, y]) => ({\n x: plot.x + mapChartValue(x, chart.axisX, plot.width),\n y: plot.y + plot.height - mapChartValue(y, chart.axisY, plot.height),\n }));\n}\n","import type { ChartSeries } from '../../../../model/chart';\nimport { colorWithAlpha } from '../../../color';\nimport type { Bounds, RenderNode } from '../../../scene';\nimport { linePathData } from '../../primitives/linePath';\nimport type { CartesianPoint } from '../cartesianPoints';\nimport type { ChartRenderContext } from '../types';\n\nexport function createLineAreaFill(\n context: ChartRenderContext,\n series: ChartSeries,\n points: CartesianPoint[],\n color: string,\n tension: number,\n areaOpacity: number,\n): RenderNode {\n const { chart, plot, nextOrder } = context;\n const baselineY = plot.y + plot.height;\n const first = points[0];\n const last = points[points.length - 1];\n const d = `${linePathData(points, tension)} L ${last.x} ${baselineY} L ${first.x} ${baselineY} Z`;\n const top = Math.min(...points.map(point => point.y));\n const centerX = (Math.min(...points.map(point => point.x)) + Math.max(...points.map(point => point.x))) / 2;\n const halfHeight = (baselineY - top) / 2;\n const fillBounds: Bounds = {\n minX: centerX - halfHeight,\n maxX: centerX + halfHeight,\n minY: top,\n maxY: baselineY,\n };\n return {\n type: 'path',\n id: `chart-line-area-${chart.id}-${series.id}`,\n order: nextOrder(),\n bounds: fillBounds,\n d,\n detail: { of: 'chartSeries', series: series.id },\n style: {\n fill: {\n kind: 'linear-gradient',\n angle: 90,\n stops: [\n { offset: 0, color: colorWithAlpha(color, areaOpacity) },\n { offset: 100, color: colorWithAlpha(color, 0) },\n ],\n },\n stroke: { kind: 'none' },\n pointerEvents: 'none',\n },\n };\n}\n","import type { ChartSeries } from '../../../../model/chart';\nimport type { RenderNode } from '../../../scene';\nimport { paint } from '../../../scene';\nimport { chartText } from '../../primitives';\nimport { pixelPoints, seriesValuePairs } from '../cartesianPoints';\nimport type { ChartRenderContext } from '../types';\n\nfunction formatHighlight(template: string | undefined, category: string, value: number): string {\n return (template || '{value}')\n .replace('{category}', category)\n .replace('{value}', String(Math.round(value * 100) / 100));\n}\n\ninterface Mark {\n key: string;\n point: { x: number; y: number };\n index: number;\n radius: number;\n color: string;\n}\n\nfunction guideNode(context: ChartRenderContext, mark: Mark): RenderNode {\n const { chart, plot, bounds, diagnostics, nextOrder } = context;\n return {\n type: 'path',\n id: `chart-highlight-guide-${mark.key}`,\n order: nextOrder(),\n bounds,\n d: `M ${mark.point.x} ${mark.point.y} V ${plot.y + plot.height}`,\n style: {\n fill: { kind: 'none' },\n stroke: paint(mark.color, diagnostics, chart.id),\n strokeWidth: 1,\n dash: [3, 4],\n opacity: 0.55,\n pointerEvents: 'none',\n },\n };\n}\n\nfunction dotNode(context: ChartRenderContext, mark: Mark): RenderNode {\n const { chart, bounds, diagnostics, nextOrder } = context;\n const glow = chart.config?.lineGlow;\n return {\n type: 'ellipse',\n id: `chart-highlight-${mark.key}`,\n order: nextOrder(),\n bounds,\n cx: mark.point.x,\n cy: mark.point.y,\n rx: mark.radius,\n ry: mark.radius,\n style: {\n fill: paint(mark.color, diagnostics, chart.id),\n shadow: glow ? { color: mark.color, opacity: 0.9, blur: glow, dx: 0, dy: 0 } : undefined,\n pointerEvents: 'none',\n },\n };\n}\n\nfunction labelNode(context: ChartRenderContext, mark: Mark, value: number): RenderNode {\n const { chart, bounds, nextOrder } = context;\n const config = chart.config;\n const fontSize = Math.max(9, chart.fontSize ?? 12);\n const text = formatHighlight(config?.highlightLabelFormat, config?.categories?.[mark.index] ?? '', value);\n const width = Math.max(48, text.length * fontSize * 0.62);\n return {\n ...chartText({\n id: `chart-highlight-label-${mark.key}`,\n order: nextOrder(),\n bounds,\n frame: {\n x: mark.point.x - width / 2,\n y: mark.point.y - mark.radius - 6 - fontSize * 1.2,\n width,\n height: fontSize * 1.2,\n },\n text,\n chart,\n align: 'center',\n }),\n color: config?.highlightLabelColor ?? chart.textColor ?? '#0f172a',\n fontWeight: 'bold',\n };\n}\n\nexport function renderLineHighlights(context: ChartRenderContext, series: ChartSeries, color: string): RenderNode[] {\n const { chart } = context;\n const config = chart.config;\n const wanted = config?.highlightPoints;\n if (!wanted?.length) {\n return [];\n }\n const pairs = seriesValuePairs(chart, series);\n const points = pixelPoints(context, pairs);\n const nodes: RenderNode[] = [];\n for (const wantedIndex of wanted) {\n const index = wantedIndex < 0 ? points.length + wantedIndex : wantedIndex;\n const point = points[index];\n if (!point) {\n continue;\n }\n const mark: Mark = {\n key: `${chart.id}-${series.id}-${index}`,\n point,\n index,\n radius: config?.highlightSize ?? 6,\n color: config?.highlightColor ?? color,\n };\n if (config?.highlightGuide) {\n nodes.push(guideNode(context, mark));\n }\n nodes.push(dotNode(context, mark));\n if (config?.highlightLabels) {\n nodes.push(labelNode(context, mark, pairs[index][1]));\n }\n }\n return nodes;\n}\n","import type { ChartSeries } from '../../../../model/chart';\nimport type { RenderNode } from '../../../scene';\nimport { paint } from '../../../scene';\nimport { createVerticalErrorWhiskerNode, errorBarRange, mapChartValue } from '../../primitives';\nimport type { CartesianPoint } from '../cartesianPoints';\nimport type { ChartRenderContext } from '../types';\n\nexport interface LinePointMark {\n seriesId: string;\n valueIndex: number;\n value: number;\n error: number | [number, number] | null | undefined;\n position: CartesianPoint;\n color: string;\n}\n\nexport function createLinePointMarks(\n series: ChartSeries,\n pairs: [number, number][],\n points: CartesianPoint[],\n color: string,\n): LinePointMark[] {\n return points.map((position, valueIndex) => ({\n seriesId: series.id,\n valueIndex,\n value: pairs[valueIndex][1],\n error: series.error?.[valueIndex],\n position,\n color,\n }));\n}\n\nexport function renderLineMarks(context: ChartRenderContext, marks: LinePointMark[]): RenderNode[] {\n return marks.flatMap(mark => renderLinePointMark(context, mark));\n}\n\nfunction renderLinePointMark(context: ChartRenderContext, mark: LinePointMark): RenderNode[] {\n const nodes: RenderNode[] = [];\n const errorNode = createLineError(context, mark);\n if (errorNode) {\n nodes.push(errorNode);\n }\n nodes.push(createLinePoint(context, mark));\n return nodes;\n}\n\nfunction createLineError(context: ChartRenderContext, mark: LinePointMark): RenderNode | null {\n if (mark.error == null) {\n return null;\n }\n const { chart, plot, bounds, nextOrder } = context;\n const [lower, upper] = errorBarRange(mark.value, mark.error);\n return createVerticalErrorWhiskerNode({\n id: `chart-line-error-${chart.id}-${mark.seriesId}-${mark.valueIndex}`,\n order: nextOrder(),\n bounds,\n geometry: {\n centerX: mark.position.x,\n startY: plot.y + plot.height - mapChartValue(lower, chart.axisY, plot.height),\n endY: plot.y + plot.height - mapChartValue(upper, chart.axisY, plot.height),\n },\n color: mark.color,\n valueReference: { seriesId: mark.seriesId, valueIndex: mark.valueIndex },\n });\n}\n\nfunction createLinePoint(context: ChartRenderContext, mark: LinePointMark): RenderNode {\n const { chart, bounds, diagnostics, nextOrder } = context;\n const config = chart.config;\n const radius = config?.pointSize ?? 3;\n const strokeWidth = config?.pointStrokeWidth ?? 0;\n const visible = radius > 0;\n const fill = config?.pointFill && config.pointFill !== 'series' ? config.pointFill : mark.color;\n return {\n type: 'ellipse',\n id: `chart-point-${chart.id}-${mark.seriesId}-${mark.valueIndex}`,\n order: nextOrder(),\n bounds,\n cx: mark.position.x,\n cy: mark.position.y,\n rx: visible ? radius : 6,\n ry: visible ? radius : 6,\n detail: { of: 'chartValue', series: mark.seriesId, valueIndex: mark.valueIndex },\n style: {\n fill: visible ? paint(fill, diagnostics, chart.id) : { kind: 'none' },\n stroke: visible && strokeWidth > 0 ? paint(mark.color, diagnostics, chart.id) : undefined,\n strokeWidth: visible && strokeWidth > 0 ? strokeWidth : undefined,\n pointerEvents: visible ? undefined : 'all',\n },\n };\n}\n","import type { ChartSeries } from '../../../../model/chart';\nimport type { RenderNode } from '../../../scene';\nimport { paint } from '../../../scene';\nimport { resolveChartShadow } from '../../primitives';\nimport { linePathData } from '../../primitives/linePath';\nimport type { CartesianPoint } from '../cartesianPoints';\nimport type { ChartRenderContext } from '../types';\n\nexport function createLinePath(\n context: ChartRenderContext,\n series: ChartSeries,\n points: CartesianPoint[],\n color: string,\n tension: number,\n): RenderNode {\n const { chart, plot, bounds, diagnostics, nextOrder } = context;\n const config = chart.config;\n const source = series.color;\n const gradient = source && typeof source !== 'string' && source.type === 'gradient' ? source : undefined;\n const glow = config?.lineGlow;\n return {\n type: 'path',\n id: `chart-line-${chart.id}-${series.id}`,\n order: nextOrder(),\n bounds: gradient ? { minX: plot.x, maxX: plot.x + plot.width, minY: plot.y, maxY: plot.y + plot.height } : bounds,\n detail: { of: 'chartSeries', series: series.id, lineTension: tension || undefined },\n d: linePathData(points, tension),\n style: {\n fill: { kind: 'none' },\n stroke: paint(gradient ?? color, diagnostics, chart.id),\n strokeWidth: series.strokeWidth ?? config?.lineWidth ?? 2,\n dash: series.dash,\n lineCap: config?.lineWidth === undefined ? undefined : 'round',\n lineJoin: 'round',\n shadow: glow ? { color, opacity: 0.9, blur: glow, dx: 0, dy: 0 } : resolveChartShadow(chart.shadowStyle),\n },\n };\n}\n","import type { ChartSeries } from '../../../../model/chart';\nimport type { RenderNode } from '../../../scene';\nimport { CHART_COLORS, representativeColor } from '../../primitives';\nimport { pixelPoints, seriesValuePairs } from '../cartesianPoints';\nimport type { ChartRenderContext } from '../types';\nimport { createLineAreaFill } from './area';\nimport { renderLineHighlights } from './highlights';\nimport { createLinePointMarks, renderLineMarks } from './marks';\nimport { createLinePath } from './path';\n\nfunction seriesColor(series: ChartSeries, seriesIndex: number): string {\n return representativeColor(series.color, CHART_COLORS[seriesIndex % CHART_COLORS.length]);\n}\n\nexport function renderLineSeriesArea(\n context: ChartRenderContext,\n series: ChartSeries,\n seriesIndex: number,\n): RenderNode[] {\n const areaOpacity = context.chart.config?.areaOpacity;\n if (areaOpacity === undefined || areaOpacity <= 0) {\n return [];\n }\n const color = seriesColor(series, seriesIndex);\n const tension = context.chart.config?.lineTension ?? 0;\n const points = pixelPoints(context, seriesValuePairs(context.chart, series));\n return points.length > 1 ? [createLineAreaFill(context, series, points, color, tension, areaOpacity)] : [];\n}\n\nexport function renderLineSeries(context: ChartRenderContext, series: ChartSeries, seriesIndex: number): RenderNode[] {\n const color = seriesColor(series, seriesIndex);\n const tension = context.chart.config?.lineTension ?? 0;\n const pairs = seriesValuePairs(context.chart, series);\n const points = pixelPoints(context, pairs);\n const nodes: RenderNode[] = [];\n if (points.length) {\n nodes.push(createLinePath(context, series, points, color, tension));\n }\n const marks = createLinePointMarks(series, pairs, points, color);\n nodes.push(...renderLineMarks(context, marks));\n nodes.push(...renderLineHighlights(context, series, color));\n return nodes;\n}\n","import type { RenderNode } from '../../scene';\nimport { renderLineSeries, renderLineSeriesArea } from './line/series';\nimport type { ChartRenderContext } from './types';\n\nexport function renderLine(context: ChartRenderContext): RenderNode[] {\n const nodes: RenderNode[] = [];\n context.chart.series.forEach((series, seriesIndex) => {\n nodes.push(...renderLineSeriesArea(context, series, seriesIndex));\n });\n context.chart.series.forEach((series, seriesIndex) => {\n nodes.push(...renderLineSeries(context, series, seriesIndex));\n });\n return nodes;\n}\n","import type { RenderNode } from '../../../scene';\nimport { finite } from '../../../scene';\nimport { chartText } from '../../primitives';\nimport type { ChartRenderContext } from '../types';\nimport type { MekkoLayout } from './types';\n\nconst PERCENT_TICKS = [0, 25, 50, 75, 100];\n\nexport function renderMekkoGrid(context: ChartRenderContext, layout: MekkoLayout): RenderNode[] {\n const nodes: RenderNode[] = [];\n if (context.chart.showGrid !== false) {\n nodes.push(...renderGridLines(context, layout));\n }\n if (context.showLabels) {\n nodes.push(...renderPercentageLabels(context, layout));\n }\n return nodes;\n}\n\nfunction renderGridLines(context: ChartRenderContext, layout: MekkoLayout): RenderNode[] {\n const { chart, bounds, nextOrder } = context;\n return PERCENT_TICKS.map(percent => {\n const y = percentageY(layout, percent);\n return {\n type: 'path',\n id: `chart-mekko-grid-${chart.id}-${percent}`,\n order: nextOrder(),\n bounds,\n d: `M ${layout.grid.x} ${y} L ${layout.grid.x + layout.grid.width} ${y}`,\n style: {\n fill: { kind: 'none' },\n stroke: { kind: 'solid', color: chart.gridColor ?? '#e2e8f0' },\n strokeWidth: finite(chart.gridWidth, 1),\n },\n };\n });\n}\n\nfunction renderPercentageLabels(context: ChartRenderContext, layout: MekkoLayout): RenderNode[] {\n const { chart, plot, bounds, nextOrder } = context;\n return PERCENT_TICKS.map(percent => ({\n ...chartText({\n id: `chart-mekko-pct-${chart.id}-${percent}`,\n order: nextOrder(),\n bounds,\n frame: {\n x: plot.x,\n y: percentageY(layout, percent) - layout.smallFontSize / 2,\n width: layout.labelGutterWidth - 6,\n height: layout.smallFontSize + 2,\n },\n text: `${percent}%`,\n chart,\n align: 'right',\n }),\n fontSize: layout.smallFontSize,\n }));\n}\n\nfunction percentageY(layout: MekkoLayout, percent: number): number {\n return layout.grid.y + layout.grid.height * (1 - percent / 100);\n}\n","import type { RenderNode } from '../../../scene';\nimport { wrapText } from '../../../scene/textLayout';\nimport { chartText } from '../../primitives';\nimport type { ChartRenderContext } from '../types';\nimport type { MekkoColumn, MekkoLayout } from './types';\n\nexport function renderMekkoColumnLabels(\n context: ChartRenderContext,\n layout: MekkoLayout,\n columnIndex: number,\n column: MekkoColumn,\n): RenderNode[] {\n if (!context.showLabels) {\n return [];\n }\n\n const columnLabel = createColumnLabel(context, layout, columnIndex, column);\n return context.chart.config?.showMekkoTotals === false\n ? [columnLabel]\n : [createTotalLabel(context, layout, columnIndex, column), columnLabel];\n}\n\nfunction createTotalLabel(\n context: ChartRenderContext,\n layout: MekkoLayout,\n columnIndex: number,\n column: MekkoColumn,\n): RenderNode {\n const { chart, plot, bounds, nextOrder } = context;\n return {\n ...chartText({\n id: `chart-mekko-total-${chart.id}-${columnIndex}`,\n order: nextOrder(),\n bounds,\n frame: {\n x: column.x,\n y: plot.y,\n width: column.width,\n height: layout.smallFontSize + 2,\n },\n text: String(column.total),\n chart,\n align: 'center',\n }),\n fontSize: layout.smallFontSize,\n };\n}\n\nfunction createColumnLabel(\n context: ChartRenderContext,\n layout: MekkoLayout,\n columnIndex: number,\n column: MekkoColumn,\n): RenderNode {\n const { chart, bounds, nextOrder } = context;\n const { label, width } = column;\n return {\n ...chartText({\n id: `chart-mekko-col-label-${chart.id}-${columnIndex}`,\n order: nextOrder(),\n bounds,\n frame: {\n x: column.x,\n y: layout.grid.y + layout.grid.height + 4,\n width,\n height: layout.smallFontSize * 2 + 4,\n },\n text: label,\n chart,\n align: 'center',\n }),\n lines: wrapText(label, width, layout.smallFontSize),\n fontSize: layout.smallFontSize,\n };\n}\n","import { finite } from '../../../scene';\nimport type { ChartRenderContext } from '../types';\nimport type { MekkoColumn, MekkoGrid, MekkoLayout } from './types';\n\nexport function createMekkoLayout(context: ChartRenderContext): MekkoLayout {\n const labels = mekkoColumnLabels(context);\n const labelGutterWidth = context.showLabels ? 30 : 0;\n const grid = createMekkoGrid(context, labelGutterWidth);\n const fontSize = Math.max(9, finite(context.chart.fontSize, 12));\n const columnGap = Math.max(0, finite(context.chart.config?.mekkoColumnGap, 4));\n const smallFontSize = Math.max(8, fontSize - 1);\n\n return {\n columns: createMekkoColumns(context, grid, labels, columnGap),\n fontSize,\n smallFontSize,\n labelGutterWidth,\n columnGap,\n labelSize: Math.max(6, finite(context.chart.config?.mekkoLabelSize, smallFontSize)),\n valueSize: Math.max(6, finite(context.chart.config?.mekkoValueSize, smallFontSize)),\n grid,\n };\n}\n\nfunction mekkoColumnLabels(context: ChartRenderContext): string[] {\n const { chart } = context;\n return chart.config?.categories?.length\n ? chart.config.categories\n : ((chart.series[0]?.values as number[] | undefined)?.map((_, index) => String(index + 1)) ?? []);\n}\n\nfunction createMekkoGrid(context: ChartRenderContext, labelGutterWidth: number): MekkoGrid {\n const topGutter = context.showLabels ? 18 : 0;\n const bottomGutter = context.showLabels ? 32 : 0;\n return {\n x: context.plot.x + labelGutterWidth,\n y: context.plot.y + topGutter,\n width: Math.max(1, context.plot.width - labelGutterWidth),\n height: Math.max(1, context.plot.height - topGutter - bottomGutter),\n };\n}\n\nfunction createMekkoColumns(\n context: ChartRenderContext,\n grid: MekkoGrid,\n labels: string[],\n columnGap: number,\n): MekkoColumn[] {\n const totals = labels.map((_, columnIndex) =>\n context.chart.series.reduce((sum, series) => sum + ((series.values as number[])[columnIndex] ?? 0), 0),\n );\n const grandTotal = totals.reduce((sum, total) => sum + total, 0);\n const maximumTotal = Math.max(1, ...totals);\n const availableWidth = Math.max(1, grid.width - columnGap * Math.max(0, labels.length - 1));\n let nextX = grid.x;\n\n return labels.map((label, index) => {\n const total = totals[index];\n const width = grandTotal > 0 ? (total / grandTotal) * availableWidth : availableWidth / labels.length;\n const height = context.chart.config?.mekkoVaryHeight ? grid.height * (total / maximumTotal) : grid.height;\n const column = { label, total, x: nextX, y: grid.y + grid.height - height, width, height };\n nextX += width + columnGap;\n return column;\n });\n}\n","import type { ChartSeries } from '../../../../model/chart';\nimport type { Bounds, RenderNode } from '../../../scene';\nimport { finite, paint } from '../../../scene';\nimport { ellipsizeToWidth, wrapText } from '../../../scene/textLayout';\nimport {\n barPath,\n barShapePath,\n CHART_COLORS,\n chartText,\n contrastTextColor,\n representativeColor,\n resolveChartShadow,\n} from '../../primitives';\nimport type { ChartRenderContext } from '../types';\nimport type { MekkoLayout } from './types';\n\nconst BACKDROP_OPACITY = 0.15;\n\ninterface MekkoSegment {\n columnIndex: number;\n seriesId: string;\n seriesLabel: string;\n value: number;\n color: NonNullable<ChartSeries['color']>;\n isTop: boolean;\n frame: {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n}\n\nexport function renderMekkoColumnSegments(\n context: ChartRenderContext,\n layout: MekkoLayout,\n columnIndex: number,\n): RenderNode[] {\n const showBackdrop = context.chart.config?.showColumnBackdrop !== false;\n const backdrop = showBackdrop ? [createColumnBackdrop(context, layout, columnIndex)] : [];\n const gradientFlow = Boolean(context.chart.config?.tileGradient);\n const columnSegments = calculateColumnSegments(context.chart.series, layout, columnIndex);\n const segments = columnSegments.flatMap((segment, index) =>\n renderSegment(context, layout, segment, gradientFlow ? columnSegments[index + 1]?.color : undefined),\n );\n return [...backdrop, ...segments];\n}\n\nfunction createColumnBackdrop(context: ChartRenderContext, layout: MekkoLayout, columnIndex: number): RenderNode {\n const { chart, bounds, diagnostics, nextOrder } = context;\n const column = layout.columns[columnIndex];\n const cornerRadius = mekkoCornerRadius(context);\n return {\n type: 'path',\n id: `chart-mekko-column-backdrop-${chart.id}-${columnIndex}`,\n order: nextOrder(),\n bounds,\n d: barShapePath(column.x, layout.grid.y, column.width, layout.grid.height, cornerRadius),\n style: { fill: paint(chart.gridColor ?? '#e2e8f0', diagnostics, chart.id), opacity: BACKDROP_OPACITY },\n };\n}\n\nfunction mekkoCornerRadius(context: ChartRenderContext): number {\n return Math.max(0, finite(context.chart.config?.barCornerRadius, 2));\n}\n\nfunction calculateColumnSegments(seriesList: ChartSeries[], layout: MekkoLayout, columnIndex: number): MekkoSegment[] {\n const segments: MekkoSegment[] = [];\n const column = layout.columns[columnIndex];\n let cumulativeHeight = 0;\n\n seriesList.forEach((series, seriesIndex) => {\n const value = (series.values as number[])[columnIndex] ?? 0;\n const height = (column.total > 0 ? value / column.total : 0) * column.height;\n const y = column.y + cumulativeHeight;\n cumulativeHeight += height;\n const color = series.color ?? CHART_COLORS[seriesIndex % CHART_COLORS.length];\n segments.push({\n columnIndex,\n seriesId: series.id,\n seriesLabel: series.label,\n value,\n color,\n isTop: seriesIndex === 0,\n frame: {\n x: column.x,\n y,\n width: column.width,\n height,\n },\n });\n });\n\n return segments;\n}\n\nfunction renderSegment(\n context: ChartRenderContext,\n layout: MekkoLayout,\n segment: MekkoSegment,\n nextColor: NonNullable<ChartSeries['color']> | undefined,\n): RenderNode[] {\n return [createSegmentNode(context, segment, nextColor), ...createSegmentLabel(context, layout, segment)];\n}\n\nfunction createSegmentNode(\n context: ChartRenderContext,\n segment: MekkoSegment,\n nextColor: NonNullable<ChartSeries['color']> | undefined,\n): RenderNode {\n const { chart, plot, bounds, diagnostics, nextOrder } = context;\n const shadow = resolveChartShadow(chart.shadowStyle);\n const clipPath = shadow\n ? `M ${plot.x} ${plot.y} H ${plot.x + plot.width} V ${plot.y + plot.height} H ${plot.x} Z`\n : undefined;\n const config = chart.config;\n const radius = segment.isTop || config?.mekkoRoundAll ? mekkoCornerRadius(context) : 0;\n const { x, y, width, height } = segment.frame;\n const segmentGap = Math.max(0, finite(config?.mekkoSegmentGap, 0));\n const fallback = '#94a3b8';\n const gradientBounds: Bounds = {\n minX: x + width / 2 - height / 2,\n maxX: x + width / 2 + height / 2,\n minY: y,\n maxY: y + height,\n };\n const fill = nextColor\n ? {\n kind: 'linear-gradient' as const,\n angle: 90,\n stops: [\n { offset: 0, color: representativeColor(segment.color, fallback) },\n { offset: 100, color: representativeColor(nextColor, fallback) },\n ],\n }\n : paint(segment.color, diagnostics, chart.id);\n return {\n type: 'path',\n id: `chart-mekko-seg-${chart.id}-${segment.columnIndex}-${segment.seriesId}`,\n order: nextOrder(),\n bounds: nextColor ? gradientBounds : bounds,\n d: barPath(x, y + segmentGap / 2, width, Math.max(0, height - segmentGap), radius, Boolean(config?.mekkoRoundAll)),\n style: {\n fill,\n stroke: { kind: 'solid', color: config?.mekkoSegmentStrokeColor ?? chart.gridColor ?? '#e2e8f0' },\n strokeWidth: finite(config?.mekkoSegmentStrokeWidth, finite(chart.gridWidth, 1)),\n shadow,\n clip: clipPath ? { type: 'path', d: clipPath } : undefined,\n },\n };\n}\n\nfunction createSegmentLabel(context: ChartRenderContext, layout: MekkoLayout, segment: MekkoSegment): RenderNode[] {\n const { chart, bounds, nextOrder } = context;\n const { x, y, width, height } = segment.frame;\n if (!context.showLegend || width < 34) {\n return [];\n }\n const innerWidth = Math.max(1, width - 8);\n const innerHeight = Math.max(1, height - 6);\n const lineHeight = layout.labelSize * 1.2;\n const valueHeight = layout.valueSize * 1.2;\n const labelLines = wrapText(segment.seriesLabel, innerWidth, layout.labelSize).map(line =>\n ellipsizeToWidth(line, innerWidth, layout.labelSize, true),\n );\n if (labelLines.length * lineHeight + valueHeight > innerHeight) {\n return [];\n }\n const textColor = chart.config?.mekkoTextColor ?? contrastTextColor(representativeColor(segment.color, '#ffffff'));\n const columnTotal = layout.columns[segment.columnIndex]?.total ?? 0;\n const valueText =\n chart.config?.mekkoValueFormat === 'percent'\n ? `${columnTotal > 0 ? Math.round((segment.value / columnTotal) * 100) : 0}%`\n : String(segment.value);\n\n const label: RenderNode = {\n ...chartText({\n id: `chart-mekko-seg-label-${chart.id}-${segment.columnIndex}-${segment.seriesId}`,\n order: nextOrder(),\n bounds,\n frame: { x: x + 4, y: y + 3, width: innerWidth, height: innerHeight },\n text: segment.seriesLabel,\n chart,\n }),\n lines: labelLines,\n fontSize: layout.labelSize,\n fontWeight: 'bold',\n color: textColor,\n };\n\n const valueNode: RenderNode = {\n ...chartText({\n id: `chart-mekko-seg-value-${chart.id}-${segment.columnIndex}-${segment.seriesId}`,\n order: nextOrder(),\n bounds,\n frame: {\n x: x + 4,\n y: y + 3 + labelLines.length * lineHeight,\n width: innerWidth,\n height: Math.max(1, innerHeight - labelLines.length * lineHeight),\n },\n text: valueText,\n chart,\n }),\n lines: [valueText],\n fontSize: layout.valueSize,\n color: textColor,\n };\n\n return [label, valueNode];\n}\n","import type { RenderNode } from '../../scene';\nimport { renderMekkoGrid } from './mekko/grid';\nimport { renderMekkoColumnLabels } from './mekko/labels';\nimport { createMekkoLayout } from './mekko/layout';\nimport { renderMekkoColumnSegments } from './mekko/segments';\nimport type { ChartRenderContext } from './types';\n\nexport function renderMekko(context: ChartRenderContext): RenderNode[] {\n const layout = createMekkoLayout(context);\n const nodes = renderMekkoGrid(context, layout);\n\n layout.columns.forEach((column, columnIndex) => {\n nodes.push(...renderMekkoColumnSegments(context, layout, columnIndex));\n nodes.push(...renderMekkoColumnLabels(context, layout, columnIndex, column));\n });\n\n return nodes;\n}\n","import type { PieChart } from '../../../../model/chart';\nimport type { RenderNode, SceneText } from '../../../scene';\nimport { DEFAULT_FONT, finite } from '../../../scene';\nimport type { ChartRenderContext } from '../types';\nimport type { PieGeometry } from './types';\n\nfunction fill(template: string, chart: PieChart): string {\n const values = chart.series.map(series => Math.max(0, finite((series.values as number[])[0], 0)));\n const total = values.reduce((sum, value) => sum + value, 0);\n const first = values[0] ?? 0;\n return template\n .replace(/\\{total\\}/g, String(Math.round(total * 100) / 100))\n .replace(/\\{percent\\}/g, String(total > 0 ? Math.round((first / total) * 100) : 0))\n .replace(/\\{label\\}/g, chart.series[0]?.label ?? '');\n}\n\nexport function renderPieCenter(context: ChartRenderContext<PieChart>, geometry: PieGeometry): RenderNode[] {\n const { chart, bounds, nextOrder } = context;\n const template = chart.config?.pieCenterText;\n if (!template) {\n return [];\n }\n const lines = fill(template, chart).split(/\\\\n|\\n/);\n const fontSize = finite(chart.config?.pieCenterSize, Math.max(14, Math.min(40, geometry.outerRadius * 0.3)));\n const lineHeight = fontSize * 1.2;\n const width = Math.max(40, (geometry.innerRadius > 0 ? geometry.innerRadius : geometry.outerRadius * 0.6) * 2);\n const text: SceneText = {\n type: 'text',\n id: `chart-pie-center-${chart.id}`,\n order: nextOrder(),\n bounds,\n x: geometry.centerX - width / 2,\n y: geometry.centerY - (lineHeight * lines.length) / 2,\n width,\n height: lineHeight * lines.length,\n lines,\n fontFamily: chart.fontFamily ?? DEFAULT_FONT,\n fontSize,\n fontWeight: 'bold',\n align: 'center',\n verticalAlign: 'middle',\n lineHeight: 1.2,\n color: chart.config?.pieCenterColor ?? chart.textColor ?? '#0f172a',\n detail: { of: 'chartSeries', series: chart.series[0]?.id ?? '', mark: 'pie-center' },\n };\n return [text];\n}\n","import type { ChartSeries, PieChart } from '../../../../model/chart';\nimport type { RenderNode } from '../../../scene';\nimport { finite, paint } from '../../../scene';\nimport type { ResolvedShadow } from '../../primitives';\nimport {\n CHART_COLORS,\n gapInsetAngle,\n maxApexCornerRadius,\n maxPieCornerRadius,\n pieApexRadius,\n pieUsesInnerArc,\n representativeColor,\n resolveChartShadow,\n} from '../../primitives';\nimport { seriesValueProp } from '../../propPath';\nimport type { ChartRenderContext } from '../types';\nimport { renderPieLabels } from './labels';\nimport { createPieSlicePath } from './path';\nimport type { PieGeometry, PieSliceAngles } from './types';\n\nconst TOP = -Math.PI / 2;\nconst FULL = Math.PI * 2;\nconst MAXIMUM_SWEEP = FULL * (359.999 / 360);\nconst radians = (degrees: number) => (degrees * Math.PI) / 180;\n\ninterface PieSliceMark {\n seriesId: string;\n label: string;\n color: NonNullable<ChartSeries['color']>;\n stroke?: string;\n strokeWidth?: number;\n value: number;\n share: number;\n angles: PieSliceAngles;\n labelOffsetX: number;\n labelOffsetY: number;\n explode: number;\n}\n\nexport function renderPieSlices(context: ChartRenderContext<PieChart>, geometry: PieGeometry): RenderNode[] {\n const config = context.chart.config;\n const marks = createPieSliceMarks(context.chart.series, geometry.total, {\n start: TOP + radians(finite(config?.pieStartAngle, 0)),\n sweep: Math.min(FULL, Math.max(radians(1), radians(finite(config?.pieSweep, 360)))),\n explode: Math.max(0, finite(config?.pieExplode, 0)),\n });\n const gapPx = config?.pieSliceGap ?? 0;\n return [\n ...marks.flatMap(mark => createSliceNodes(context, shiftGeometry(geometry, mark), mark, gapPx)),\n ...renderPieLabels(\n context,\n geometry,\n marks.map(mark => ({\n seriesId: mark.seriesId,\n label: mark.label,\n color: mark.color,\n share: mark.share,\n start: mark.angles.start,\n end: mark.angles.end,\n labelOffsetX: mark.labelOffsetX,\n labelOffsetY: mark.labelOffsetY,\n shift: shiftOf(mark),\n })),\n ),\n ];\n}\n\nfunction shiftOf(mark: PieSliceMark): { dx: number; dy: number } {\n const mid = (mark.angles.start + mark.angles.end) / 2;\n return { dx: Math.cos(mid) * mark.explode, dy: Math.sin(mid) * mark.explode };\n}\n\nfunction shiftGeometry(geometry: PieGeometry, mark: PieSliceMark): PieGeometry {\n if (mark.explode === 0) {\n return geometry;\n }\n const { dx, dy } = shiftOf(mark);\n return { ...geometry, centerX: geometry.centerX + dx, centerY: geometry.centerY + dy };\n}\n\nfunction createPieSliceMarks(\n seriesList: ChartSeries[],\n total: number,\n layout: { start: number; sweep: number; explode: number },\n): PieSliceMark[] {\n const marks: PieSliceMark[] = [];\n let angle = layout.start;\n seriesList.forEach((series, seriesIndex) => {\n const value = Math.max(0, finite((series.values as number[])[0], 0));\n const sweep = (value / total) * layout.sweep;\n marks.push({\n seriesId: series.id,\n label: series.label,\n color: series.color ?? CHART_COLORS[seriesIndex % CHART_COLORS.length],\n stroke: series.stroke,\n strokeWidth: series.strokeWidth,\n value,\n share: value / total,\n angles: { start: angle, end: angle + Math.min(sweep, layout.sweep >= FULL ? MAXIMUM_SWEEP : layout.sweep) },\n explode: Math.max(0, finite(series.offset, layout.explode)),\n labelOffsetX: finite(series.labelOffsetX, 0),\n labelOffsetY: finite(series.labelOffsetY, 0),\n });\n angle += sweep;\n });\n return marks;\n}\n\nfunction fullCirclePath(cx: number, cy: number, r: number): string {\n return `M ${cx - r} ${cy} A ${r} ${r} 0 1 0 ${cx + r} ${cy} A ${r} ${r} 0 1 0 ${cx - r} ${cy} Z`;\n}\n\nfunction pieOuterShadow(shadow: ResolvedShadow, gapPx: number): ResolvedShadow {\n if (gapPx <= 0) {\n return shadow;\n }\n const halfGap = gapPx / 2;\n const blur = Math.min(shadow.blur, halfGap * 2);\n const maxDistance = halfGap;\n const distance = Math.hypot(shadow.dx, shadow.dy);\n const scale = distance > maxDistance ? maxDistance / distance : 1;\n return { ...shadow, blur, dx: shadow.dx * scale, dy: shadow.dy * scale };\n}\n\nfunction sliceCornerRadius(geometry: PieGeometry, mark: PieSliceMark, gapPx: number): number {\n const halfGap = Math.max(0, gapPx) / 2;\n const rawSweep = mark.angles.end - mark.angles.start;\n const usesInnerArc = pieUsesInnerArc(geometry, mark.angles, gapPx);\n const gapSweep = 2 * gapInsetAngle(halfGap, geometry.outerRadius);\n const availableSweep = Math.max(0, rawSweep - gapSweep);\n return Math.min(\n geometry.cornerRadius,\n usesInnerArc\n ? maxPieCornerRadius(geometry.outerRadius, geometry.innerRadius, availableSweep)\n : maxApexCornerRadius(\n geometry.outerRadius,\n pieApexRadius(halfGap, rawSweep, geometry.outerRadius),\n availableSweep,\n ),\n );\n}\n\nfunction sliceStroke(context: ChartRenderContext<PieChart>, mark: PieSliceMark) {\n const config = context.chart.config;\n const strokeColor = mark.stroke ?? config?.pieStroke;\n if (!strokeColor) {\n return {};\n }\n return {\n stroke: { kind: 'solid' as const, color: strokeColor },\n strokeWidth: finite(mark.strokeWidth, finite(config?.pieStrokeWidth, 1)),\n };\n}\n\nfunction createSliceNodes(\n context: ChartRenderContext<PieChart>,\n geometry: PieGeometry,\n mark: PieSliceMark,\n gapPx: number,\n): RenderNode[] {\n const { chart, bounds, diagnostics, nextOrder } = context;\n const fill = paint(mark.color, diagnostics, chart.id);\n const slicePath = createPieSlicePath(geometry, mark.angles, sliceCornerRadius(geometry, mark, gapPx), gapPx);\n const shadow = resolveChartShadow(chart.shadowStyle);\n const strokeStyle = sliceStroke(context, mark);\n const glow = chart.config?.pieGlow;\n\n const shadowCaster: RenderNode | undefined = shadow\n ? {\n type: 'path',\n id: `chart-pie-slice-shadow-${chart.id}-${mark.seriesId}`,\n order: nextOrder(),\n bounds,\n d: slicePath,\n style: {\n fill,\n ...strokeStyle,\n shadow: pieOuterShadow(shadow, gapPx),\n clip: { type: 'path', d: fullCirclePath(geometry.centerX, geometry.centerY, geometry.outerRadius) },\n },\n }\n : undefined;\n\n const slice: RenderNode = {\n type: 'path',\n id: `chart-pie-slice-${chart.id}-${mark.seriesId}`,\n order: nextOrder(),\n bounds,\n d: slicePath,\n detail: {\n of: 'chartValue',\n series: mark.seriesId,\n valueIndex: 0,\n mark: 'pie-slice',\n pieStart: mark.angles.start,\n pieEnd: mark.angles.end,\n pieValue: mark.value,\n },\n prop: seriesValueProp(mark.seriesId, 0),\n style: {\n fill,\n ...strokeStyle,\n innerShadow: shadow,\n shadow: glow\n ? { color: representativeColor(mark.color, '#ffffff'), opacity: 0.85, blur: glow, dx: 0, dy: 0 }\n : undefined,\n },\n };\n\n return shadowCaster ? [shadowCaster, slice] : [slice];\n}\n","import type { PieChart } from '../../../model/chart';\nimport type { RenderNode } from '../../scene';\nimport { renderPieCenter } from './pie/center';\nimport { createPieGeometry } from './pie/geometry';\nimport { renderPieSlices } from './pie/slices';\nimport type { ChartRenderContext } from './types';\n\nexport function renderPie(context: ChartRenderContext<PieChart>): RenderNode[] {\n const geometry = createPieGeometry(context);\n return [...renderPieSlices(context, geometry), ...renderPieCenter(context, geometry)];\n}\n","import type { ChartSeries, PolarAreaChart } from '../../../model/chart';\nimport type { RenderNode, SceneText } from '../../scene';\nimport { DEFAULT_FONT, finite, paint } from '../../scene';\nimport {\n CHART_COLORS,\n chartTicks,\n clipSegmentToRect,\n contrastTextColor,\n createPieSlicePath,\n formatFieldValue,\n gapInsetAngle,\n maxApexCornerRadius,\n maxPieCornerRadius,\n pieApexRadius,\n pieArcPoint,\n pieUsesInnerArc,\n representativeColor,\n resolveChartShadow,\n sameHueContrastColor,\n sameHueTint,\n} from '../primitives';\nimport { seriesLabelProp, seriesValueProp } from '../propPath';\nimport type { ChartRenderContext } from './types';\n\nconst TOP = -Math.PI / 2;\nconst TRACK_COLOR_FALLBACK = '#e2e8f0';\nconst MIN_LABEL_SWEEP = (14 * Math.PI) / 180;\nconst LABEL_WIDTH = 80;\nconst LABEL_RADIUS_FRACTION = 0.62;\nconst OUTSIDE_GAP = 14;\nconst LEADER_INSET = 3;\nconst OUTSIDE_TINT_LIGHTNESS = 0.32;\nconst OUTSIDE_FALLBACK_COLOR = '#334155';\n\ninterface WedgeLayout {\n centerX: number;\n centerY: number;\n maxRadius: number;\n innerRadius: number;\n cornerRadius: number;\n gapPx: number;\n axisMin: number;\n range: number;\n sweep: number;\n start: number;\n}\n\ntype Angles = { start: number; end: number };\ntype WedgeGeometry = { centerX: number; centerY: number; outerRadius: number; innerRadius: number };\ntype FillColor = NonNullable<ChartSeries['color']>;\n\nfunction layoutOf(context: ChartRenderContext<PolarAreaChart>): WedgeLayout {\n const { chart, plot } = context;\n const maxRadius = Math.max(1, Math.min(plot.width, plot.height) / 2 - 4);\n const axisMin = finite(chart.axisY.min, 0);\n return {\n centerX: plot.x + plot.width / 2,\n centerY: plot.y + plot.height / 2,\n maxRadius,\n innerRadius: Math.max(0, Math.min(finite(chart.config?.innerRadius, 0), maxRadius - 1)),\n cornerRadius: Math.max(0, finite(chart.config?.pieCornerRadius, 0)),\n gapPx: Math.max(0, finite(chart.config?.pieSliceGap, 0)),\n axisMin,\n range: finite(chart.axisY.max, 100) - axisMin,\n sweep: chart.series.length > 0 ? (Math.PI * 2) / chart.series.length : 0,\n start: TOP + (finite(chart.config?.pieStartAngle, 0) * Math.PI) / 180,\n };\n}\n\nfunction clampedCorner(layout: WedgeLayout, outerRadius: number, angles: Angles): number {\n const { centerX, centerY, innerRadius, cornerRadius, gapPx } = layout;\n const geometry = { centerX, centerY, outerRadius, innerRadius };\n const halfGap = Math.max(0, gapPx) / 2;\n const rawSweep = angles.end - angles.start;\n const availableSweep = Math.max(0, rawSweep - 2 * gapInsetAngle(halfGap, outerRadius));\n if (pieUsesInnerArc(geometry, angles, gapPx)) {\n return Math.min(cornerRadius, maxPieCornerRadius(outerRadius, innerRadius, availableSweep));\n }\n const apexRadius = pieApexRadius(halfGap, rawSweep, outerRadius);\n return Math.min(cornerRadius, maxApexCornerRadius(outerRadius, apexRadius, availableSweep));\n}\n\nfunction wedgeNodes(\n context: ChartRenderContext<PolarAreaChart>,\n layout: WedgeLayout,\n series: ChartSeries,\n angles: Angles,\n outerRadius: number,\n value: number,\n rawColor: FillColor,\n): RenderNode[] {\n const { chart, bounds, diagnostics, nextOrder } = context;\n const { centerX, centerY, innerRadius, maxRadius, gapPx } = layout;\n const color = paint(rawColor, diagnostics, chart.id);\n const shadow = resolveChartShadow(chart.shadowStyle);\n const trackPath = createPieSlicePath(\n { centerX, centerY, outerRadius: maxRadius, innerRadius },\n angles,\n clampedCorner(layout, maxRadius, angles),\n gapPx,\n );\n const track: RenderNode = {\n type: 'path',\n id: `chart-polar-area-track-${chart.id}-${series.id}`,\n order: nextOrder(),\n bounds,\n d: trackPath,\n style: {\n fill: paint(chart.gridColor ?? TRACK_COLOR_FALLBACK, diagnostics, chart.id),\n opacity: chart.config?.polarTrackOpacity,\n ...trackStroke(context),\n },\n };\n const wedgePath = createPieSlicePath(\n { centerX, centerY, outerRadius, innerRadius },\n angles,\n clampedCorner(layout, outerRadius, angles),\n gapPx,\n );\n const shadowCaster: RenderNode | undefined = shadow\n ? {\n type: 'path',\n id: `chart-polar-area-wedge-shadow-${chart.id}-${series.id}`,\n order: nextOrder(),\n bounds,\n d: wedgePath,\n style: { fill: color, shadow, clip: { type: 'path', d: trackPath } },\n }\n : undefined;\n const wedge: RenderNode = {\n type: 'path',\n id: `chart-polar-area-wedge-${chart.id}-${series.id}`,\n order: nextOrder(),\n bounds,\n d: wedgePath,\n detail: {\n of: 'chartValue',\n series: series.id,\n valueIndex: 0,\n mark: 'polar-area-wedge',\n pieStart: angles.start,\n pieEnd: angles.end,\n pieValue: value,\n },\n prop: seriesValueProp(series.id, 0),\n style: { fill: color, innerShadow: shadow, ...wedgeStroke(context) },\n };\n return shadowCaster ? [track, shadowCaster, wedge] : [track, wedge];\n}\n\nfunction trackStroke(context: ChartRenderContext<PolarAreaChart>) {\n const config = context.chart.config;\n if (!config?.polarTrackStroke) {\n return {};\n }\n const dash = (config.polarTrackDash ?? '')\n .split(/[ ,]+/)\n .map(Number)\n .filter(part => Number.isFinite(part) && part > 0);\n return {\n stroke: { kind: 'solid' as const, color: config.polarTrackStroke },\n strokeWidth: finite(config.polarTrackStrokeWidth, 1),\n dash: dash.length > 0 ? dash : undefined,\n };\n}\n\nfunction wedgeStroke(context: ChartRenderContext<PolarAreaChart>) {\n const config = context.chart.config;\n if (!config?.pieStroke) {\n return {};\n }\n return {\n stroke: { kind: 'solid' as const, color: config.pieStroke },\n strokeWidth: finite(config.pieStrokeWidth, 1),\n };\n}\n\nfunction ringNodes(context: ChartRenderContext<PolarAreaChart>, layout: WedgeLayout): RenderNode[] {\n const { chart, bounds, nextOrder } = context;\n if (!chart.config?.polarRings || layout.range <= 0) {\n return [];\n }\n return chartTicks(chart.axisY)\n .filter(tick => tick > layout.axisMin && tick < layout.axisMin + layout.range)\n .map((tick): RenderNode => {\n const radius =\n layout.innerRadius + ((layout.maxRadius - layout.innerRadius) * (tick - layout.axisMin)) / layout.range;\n return {\n type: 'ellipse',\n id: `chart-polar-area-ring-${chart.id}-${tick}`,\n order: nextOrder(),\n bounds,\n cx: layout.centerX,\n cy: layout.centerY,\n rx: radius,\n ry: radius,\n style: {\n fill: { kind: 'none' },\n stroke: { kind: 'solid', color: chart.textColor ?? '#334155' },\n strokeWidth: finite(chart.gridWidth, 1),\n opacity: 0.25,\n },\n };\n });\n}\n\nexport function renderPolarArea(context: ChartRenderContext<PolarAreaChart>): RenderNode[] {\n const layout = layoutOf(context);\n const { centerX, centerY, innerRadius, maxRadius, axisMin, range, sweep, start } = layout;\n const showLabels = context.showLabels && sweep >= MIN_LABEL_SWEEP;\n\n const wedges = context.chart.series.flatMap((series, index): RenderNode[] => {\n const angles = { start: start + index * sweep, end: start + (index + 1) * sweep };\n const value = Math.max(0, finite((series.values as number[])[0], 0));\n const fraction = range > 0 ? Math.min(1, Math.max(0, (value - axisMin) / range)) : 0;\n const outerRadius = Math.max(innerRadius + 1, innerRadius + (maxRadius - innerRadius) * fraction);\n const rawColor = series.color ?? CHART_COLORS[index % CHART_COLORS.length];\n const nodes = wedgeNodes(context, layout, series, angles, outerRadius, value, rawColor);\n if (!showLabels) {\n return nodes;\n }\n const geometry = { centerX, centerY, outerRadius, innerRadius };\n return [...nodes, ...createWedgeLabel(context, geometry, angles, series, value, rawColor)];\n });\n return [...wedges, ...ringNodes(context, layout)];\n}\n\ninterface LabelPlacement {\n point: { x: number; y: number };\n color: string;\n outside: boolean;\n mid: number;\n tickStart: { x: number; y: number };\n}\n\nfunction labelSizes(chart: PolarAreaChart): { nameSize: number; valueSize: number } {\n const base = Math.max(9, finite(chart.fontSize, 12));\n return {\n nameSize: Math.max(6, finite(chart.config?.polarNameSize, base)),\n valueSize: Math.max(6, finite(chart.config?.polarValueSize, base)),\n };\n}\n\nfunction labelPlacement(\n context: ChartRenderContext<PolarAreaChart>,\n geometry: WedgeGeometry,\n angles: Angles,\n series: ChartSeries,\n fillColor: FillColor,\n): LabelPlacement | undefined {\n const mid = (angles.start + angles.end) / 2;\n const { nameSize, valueSize } = labelSizes(context.chart);\n const lineHeight = ((nameSize + valueSize) * 1.2) / 2;\n const ringThickness = geometry.outerRadius - geometry.innerRadius;\n const labelOffsetX = finite(series.labelOffsetX, 0);\n const labelOffsetY = finite(series.labelOffsetY, 0);\n const hasManualOffset = labelOffsetX !== 0 || labelOffsetY !== 0;\n const tooThin = ringThickness < lineHeight * 2 + 6;\n const chordWidth = 2 * geometry.outerRadius * Math.sin(Math.abs(angles.end - angles.start) / 2);\n const fitsInline = !tooThin && chordWidth >= LABEL_WIDTH;\n const outsideLabels = context.chart.config?.polarOutsideLabels ?? false;\n if (!fitsInline && !hasManualOffset && !outsideLabels) {\n return undefined;\n }\n const outside = hasManualOffset || !fitsInline;\n const tickStart = pieArcPoint(geometry, mid, geometry.outerRadius + LEADER_INSET);\n const point = outside\n ? hasManualOffset\n ? addOffset(pieArcPoint(geometry, mid, geometry.outerRadius), labelOffsetX, labelOffsetY)\n : pieArcPoint(geometry, mid, geometry.outerRadius + OUTSIDE_GAP)\n : pieArcPoint(geometry, mid, geometry.innerRadius + ringThickness * LABEL_RADIUS_FRACTION);\n const color = outside\n ? outsideLabels && context.chart.textColor\n ? context.chart.textColor\n : (sameHueTint(representativeColor(fillColor, OUTSIDE_FALLBACK_COLOR), OUTSIDE_TINT_LIGHTNESS) ??\n OUTSIDE_FALLBACK_COLOR)\n : sameHueContrastColor(\n representativeColor(fillColor, '#0f172a'),\n contrastTextColor(representativeColor(fillColor, '#0f172a')),\n );\n return { point, color, outside, mid, tickStart };\n}\n\nfunction createWedgeLabel(\n context: ChartRenderContext<PolarAreaChart>,\n geometry: WedgeGeometry,\n angles: Angles,\n series: ChartSeries,\n value: number,\n fillColor: FillColor,\n): RenderNode[] {\n const placement = labelPlacement(context, geometry, angles, series, fillColor);\n if (!placement) {\n return [];\n }\n const { chart, bounds, nextOrder } = context;\n const { point, color, outside, mid, tickStart } = placement;\n const { nameSize, valueSize } = labelSizes(chart);\n const lineHeight = Math.max(nameSize, valueSize) * 1.2;\n\n const tickEnd = outside ? clipSegmentToRect(tickStart, point, LABEL_WIDTH / 2, lineHeight) : tickStart;\n const tick: RenderNode = {\n type: 'path',\n id: `chart-polar-area-label-tick-${chart.id}-${series.id}`,\n order: nextOrder(),\n bounds,\n d: `M ${tickStart.x} ${tickStart.y} L ${tickEnd.x} ${tickEnd.y}`,\n detail: { of: 'chartSeries', series: series.id, mark: 'polar-area-label-tick' },\n style: outside ? { stroke: { kind: 'solid', color }, strokeWidth: 1.5 } : { stroke: { kind: 'none' } },\n };\n\n const detail = {\n of: 'chartSeries' as const,\n series: series.id,\n mark: 'polar-area-label',\n pulled: outside || undefined,\n midAngle: mid,\n wedgeRadius: geometry.outerRadius,\n };\n const base = {\n bounds,\n x: point.x - LABEL_WIDTH / 2,\n width: LABEL_WIDTH,\n fontFamily: chart.fontFamily ?? DEFAULT_FONT,\n align: 'center' as const,\n verticalAlign: 'middle' as const,\n lineHeight: 1.2,\n color,\n };\n const valueFirst = chart.config?.polarValueFirst ?? false;\n const nameHeight = nameSize * 1.2;\n const valueHeight = valueSize * 1.2;\n const top = point.y - (nameHeight + valueHeight) / 2;\n const nameY = valueFirst ? top + valueHeight : top;\n const valueY = valueFirst ? top : top + nameHeight;\n const nameText: SceneText = {\n type: 'text',\n id: `chart-polar-area-label-name-${chart.id}-${series.id}`,\n order: nextOrder(),\n ...base,\n y: nameY,\n height: nameSize * 1.2,\n fontSize: nameSize,\n lines: [series.label],\n fontWeight: valueFirst ? 'normal' : 'bold',\n detail,\n prop: seriesLabelProp(series.id),\n };\n const valueText: SceneText = {\n type: 'text',\n id: `chart-polar-area-label-value-${chart.id}-${series.id}`,\n order: nextOrder(),\n ...base,\n y: valueY,\n height: valueSize * 1.2,\n fontSize: valueSize,\n lines: [formatFieldValue(value)],\n fontWeight: valueFirst ? 'bold' : 'normal',\n detail,\n prop: seriesValueProp(series.id, 0),\n propKind: 'value',\n };\n return [tick, nameText, valueText];\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 { finite } from '../../../scene';\nimport {\n type RadarFrame,\n radarCategoryCount,\n radarPointAt,\n radarRadius,\n radarRadiusForValue,\n radarSeriesPath,\n} from '../../primitives/radarShape';\nimport type { ChartRenderContext } from '../types';\nimport type { RadarFamilyChart, RadarGeometry, RadarPoint } from './types';\n\nconst DEFAULT_CATEGORIES = ['Speed', 'Quality', 'Cost', 'Reliability', 'Usability'];\n\nexport function radarFrameFor(context: ChartRenderContext<RadarFamilyChart>): RadarFrame {\n const { chart, plot } = context;\n const configuredCount = (chart.config?.categories?.filter(Boolean) ?? []).length;\n const dataCount = Math.max(0, ...chart.series.map(series => series.values.length));\n return {\n centerX: plot.x + plot.width / 2,\n centerY: plot.y + plot.height / 2,\n radius: radarRadius(plot.width, plot.height, finite(chart.fontSize, 12), context.showLabels),\n min: chart.axisY.min,\n max: chart.axisY.max,\n count: radarCategoryCount(configuredCount, dataCount),\n curved: chart.chartType === 'radial',\n tension: chart.config?.radarTension,\n };\n}\n\nexport function createRadarGeometry(context: ChartRenderContext<RadarFamilyChart>): RadarGeometry {\n const { chart } = context;\n const configuredCategories = chart.config?.categories?.filter(Boolean) ?? [];\n const frame = radarFrameFor(context);\n const categories = createCategories(configuredCategories, frame.count);\n const pointAt = (pointRadius: number, pointIndex: number): RadarPoint => radarPointAt(frame, pointIndex, pointRadius);\n\n return {\n circular: frame.curved,\n areaOpacity: Math.max(0, Math.min(1, chart.config?.areaOpacity ?? 0.16)),\n strokeWidth: Math.max(0, chart.config?.radarStrokeWidth ?? 2),\n tension: frame.tension,\n pointSize: Math.max(0, chart.config?.radarPointSize ?? 3),\n showSpokes: chart.config?.radarSpokes ?? true,\n categories,\n centerX: frame.centerX,\n centerY: frame.centerY,\n radius: frame.radius,\n radiusForValue: (value: number): number => radarRadiusForValue(frame, value),\n pointAt,\n polygonPath: (pointRadius: number): string =>\n radarSeriesPath(\n categories.map((_, index) => pointAt(pointRadius, index)),\n false,\n ),\n };\n}\n\nfunction createCategories(configured: string[], categoryCount: number): string[] {\n return Array.from(\n { length: categoryCount },\n (_, index) => configured[index] ?? DEFAULT_CATEGORIES[index] ?? `Category ${index + 1}`,\n );\n}\n","import type { RenderNode } from '../../../scene';\nimport { finite } from '../../../scene';\nimport { chartTicks } from '../../primitives';\nimport type { ChartRenderContext } from '../types';\nimport type { RadarFamilyChart, RadarGeometry } from './types';\n\nexport function renderRadarGrid(context: ChartRenderContext<RadarFamilyChart>, geometry: RadarGeometry): RenderNode[] {\n if (context.chart.showGrid === false) {\n return [];\n }\n\n return [...renderRings(context, geometry), ...(geometry.showSpokes ? renderSpokes(context, geometry) : [])];\n}\n\nfunction renderRings(context: ChartRenderContext<RadarFamilyChart>, geometry: RadarGeometry): RenderNode[] {\n return chartTicks(context.chart.axisY)\n .filter(tick => tick > context.chart.axisY.min)\n .map(tick => createRingNode(context, geometry, tick));\n}\n\nfunction createRingNode(\n context: ChartRenderContext<RadarFamilyChart>,\n geometry: RadarGeometry,\n tick: number,\n): RenderNode {\n const { chart, bounds, nextOrder } = context;\n const ringRadius = geometry.radiusForValue(tick);\n const style = {\n fill: { kind: 'none' } as const,\n stroke: { kind: 'solid' as const, color: chart.gridColor ?? '#e2e8f0' },\n strokeWidth: finite(chart.gridWidth, 1),\n };\n\n if (geometry.circular) {\n return {\n type: 'ellipse',\n id: `chart-radial-ring-${chart.id}-${tick}`,\n order: nextOrder(),\n bounds,\n cx: geometry.centerX,\n cy: geometry.centerY,\n rx: ringRadius,\n ry: ringRadius,\n style,\n };\n }\n return {\n type: 'path',\n id: `chart-radar-ring-${chart.id}-${tick}`,\n order: nextOrder(),\n bounds,\n d: geometry.polygonPath(ringRadius),\n style,\n };\n}\n\nfunction renderSpokes(context: ChartRenderContext<RadarFamilyChart>, geometry: RadarGeometry): RenderNode[] {\n const { chart, bounds, nextOrder } = context;\n return geometry.categories.map((_, categoryIndex) => {\n const edge = geometry.pointAt(geometry.radius, categoryIndex);\n return {\n type: 'path',\n id: `chart-radar-spoke-${chart.id}-${categoryIndex}`,\n order: nextOrder(),\n bounds,\n d: `M ${geometry.centerX} ${geometry.centerY} L ${edge.x} ${edge.y}`,\n style: {\n fill: { kind: 'none' },\n stroke: { kind: 'solid', color: chart.gridColor ?? '#e2e8f0' },\n strokeWidth: finite(chart.gridWidth, 1),\n },\n };\n });\n}\n","import type { RenderNode } from '../../../scene';\nimport { chartText } from '../../primitives';\nimport type { ChartRenderContext } from '../types';\nimport type { RadarFamilyChart, RadarGeometry } from './types';\n\nexport function renderRadarLabels(\n context: ChartRenderContext<RadarFamilyChart>,\n geometry: RadarGeometry,\n): RenderNode[] {\n if (!context.showLabels) {\n return [];\n }\n\n return geometry.categories.map((category, categoryIndex) =>\n createCategoryLabel(context, geometry, category, categoryIndex),\n );\n}\n\nfunction createCategoryLabel(\n context: ChartRenderContext<RadarFamilyChart>,\n geometry: RadarGeometry,\n category: string,\n categoryIndex: number,\n): RenderNode {\n const { chart, plot, bounds, nextOrder } = context;\n const labelPoint = geometry.pointAt(geometry.radius + 10, categoryIndex);\n const horizontalOffset = labelPoint.x - geometry.centerX;\n const width = Math.max(64, Math.min(120, plot.width / 3));\n return chartText({\n id: `chart-radar-label-${chart.id}-${categoryIndex}`,\n order: nextOrder(),\n bounds,\n frame: { x: labelX(labelPoint.x, horizontalOffset, width), y: labelPoint.y - 6, width, height: 30 },\n text: category,\n chart,\n align: labelAlignment(horizontalOffset),\n });\n}\n\nfunction labelX(pointX: number, horizontalOffset: number, width: number): number {\n if (horizontalOffset > 8) {\n return pointX;\n }\n if (horizontalOffset < -8) {\n return pointX - width;\n }\n return pointX - width / 2;\n}\n\nfunction labelAlignment(horizontalOffset: number): 'left' | 'center' | 'right' {\n if (horizontalOffset > 8) {\n return 'left';\n }\n if (horizontalOffset < -8) {\n return 'right';\n }\n return 'center';\n}\n","import type { ChartSeries } from '../../../../model/chart';\nimport type { RenderNode } from '../../../scene';\nimport { paint } from '../../../scene';\nimport { CHART_COLORS, resolveChartShadow } from '../../primitives';\nimport { radarSeriesPath } from '../../primitives/radarShape';\nimport { seriesValueProp } from '../../propPath';\nimport type { ChartRenderContext } from '../types';\nimport type { RadarFamilyChart, RadarGeometry, RadarPoint } from './types';\n\nexport function renderRadarSeries(\n context: ChartRenderContext<RadarFamilyChart>,\n geometry: RadarGeometry,\n): RenderNode[] {\n const nodes: RenderNode[] = [];\n context.chart.series.forEach((series, seriesIndex) => {\n nodes.push(...renderSeries(context, geometry, series, seriesIndex));\n });\n return nodes;\n}\n\nfunction renderSeries(\n context: ChartRenderContext<RadarFamilyChart>,\n geometry: RadarGeometry,\n series: ChartSeries,\n seriesIndex: number,\n): RenderNode[] {\n const color = series.color ?? CHART_COLORS[seriesIndex % CHART_COLORS.length];\n const points = seriesPoints(series, context, geometry);\n const path = radarSeriesPath(points, geometry.circular, geometry.tension);\n return [\n createSeriesFill(context, geometry, series, path, color),\n ...(geometry.strokeWidth > 0 ? [createSeriesStroke(context, geometry, series, path, color)] : []),\n ...(geometry.pointSize > 0 ? createSeriesPoints(context, geometry, series, points, color) : []),\n ];\n}\n\nfunction seriesPoints(\n series: ChartSeries,\n context: ChartRenderContext<RadarFamilyChart>,\n geometry: RadarGeometry,\n): RadarPoint[] {\n const values = series.values as number[];\n return geometry.categories.map((_, categoryIndex) =>\n geometry.pointAt(geometry.radiusForValue(values[categoryIndex] ?? context.chart.axisY.min), categoryIndex),\n );\n}\n\nfunction createSeriesFill(\n context: ChartRenderContext,\n geometry: RadarGeometry,\n series: ChartSeries,\n path: string,\n color: Parameters<typeof paint>[0],\n): RenderNode {\n const { chart, bounds, diagnostics, nextOrder } = context;\n return {\n type: 'path',\n id: `chart-radar-fill-${chart.id}-${series.id}`,\n order: nextOrder(),\n bounds,\n d: path,\n detail: { of: 'chartSeries', series: series.id },\n style: {\n fill: paint(color, diagnostics, chart.id),\n stroke: { kind: 'none' },\n opacity: Math.max(0, Math.min(1, series.opacity ?? geometry.areaOpacity)),\n },\n };\n}\n\nfunction createSeriesStroke(\n context: ChartRenderContext,\n geometry: RadarGeometry,\n series: ChartSeries,\n path: string,\n color: Parameters<typeof paint>[0],\n): RenderNode {\n const { chart, bounds, diagnostics, nextOrder } = context;\n return {\n type: 'path',\n id: `chart-radar-series-${chart.id}-${series.id}`,\n order: nextOrder(),\n bounds,\n d: path,\n detail: { of: 'chartSeries', series: series.id },\n style: {\n fill: { kind: 'none' },\n stroke: paint(color, diagnostics, chart.id),\n strokeWidth: geometry.strokeWidth,\n lineJoin: 'round',\n shadow: resolveChartShadow(chart.shadowStyle),\n },\n };\n}\n\nfunction createSeriesPoints(\n context: ChartRenderContext,\n geometry: RadarGeometry,\n series: ChartSeries,\n points: RadarPoint[],\n color: Parameters<typeof paint>[0],\n): RenderNode[] {\n const { chart, bounds, diagnostics, nextOrder } = context;\n return points.map((point, pointIndex) => ({\n type: 'ellipse',\n id: `chart-radar-point-${chart.id}-${series.id}-${pointIndex}`,\n order: nextOrder(),\n bounds,\n cx: point.x,\n cy: point.y,\n rx: geometry.pointSize,\n ry: geometry.pointSize,\n detail: { of: 'chartValue', series: series.id, valueIndex: pointIndex, mark: 'radar-vertex' },\n prop: seriesValueProp(series.id, pointIndex),\n style: { fill: paint(color, diagnostics, chart.id) },\n }));\n}\n","import type { RenderNode } from '../../scene';\nimport { createRadarGeometry } from './radar/geometry';\nimport { renderRadarGrid } from './radar/grid';\nimport { renderRadarLabels } from './radar/labels';\nimport { renderRadarSeries } from './radar/series';\nimport type { RadarFamilyChart } from './radar/types';\nimport type { ChartRenderContext } from './types';\n\nexport function renderRadar(context: ChartRenderContext<RadarFamilyChart>): RenderNode[] {\n const geometry = createRadarGeometry(context);\n const nodes: RenderNode[] = [];\n\n nodes.push(...renderRadarGrid(context, geometry));\n nodes.push(...renderRadarLabels(context, geometry));\n nodes.push(...renderRadarSeries(context, geometry));\n\n return nodes;\n}\n","import type { ChartSeries, RadialBarChart } from '../../../model/chart';\nimport type { RenderNode, ScenePaint } from '../../scene';\nimport { finite, paint } from '../../scene';\nimport type { ResolvedShadow } from '../primitives';\nimport { CHART_COLORS, resolveChartShadow } from '../primitives';\nimport { seriesValueProp } from '../propPath';\nimport type { ChartRenderContext } from './types';\n\nconst TOP = -Math.PI / 2;\nconst DEFAULT_RING_THICKNESS = 14;\nconst DEFAULT_RING_GAP = 4;\nconst TRACK_OPACITY = 0.18;\nconst FULL_SWEEP_EPSILON = 1e-4;\n\ninterface ArcPoint {\n x: number;\n y: number;\n}\n\nfunction arcPoint(cx: number, cy: number, r: number, angle: number): ArcPoint {\n return { x: cx + r * Math.cos(angle), y: cy + r * Math.sin(angle) };\n}\n\nfunction fullCirclePath(cx: number, cy: number, r: number): string {\n return `M ${cx - r} ${cy} A ${r} ${r} 0 1 0 ${cx + r} ${cy} A ${r} ${r} 0 1 0 ${cx - r} ${cy} Z`;\n}\n\nfunction annulusPath(cx: number, cy: number, outerRadius: number, innerRadius: number): string {\n return `${fullCirclePath(cx, cy, outerRadius)} ${fullCirclePath(cx, cy, Math.max(0, innerRadius))}`;\n}\n\nfunction arcSegmentPath(cx: number, cy: number, r: number, from: number, to: number): string {\n const start = arcPoint(cx, cy, r, from);\n const end = arcPoint(cx, cy, r, to);\n return `M ${start.x} ${start.y} A ${r} ${r} 0 ${to - from > Math.PI ? 1 : 0} 1 ${end.x} ${end.y}`;\n}\n\nfunction ringShadow(shadow: ResolvedShadow, ringThickness: number): ResolvedShadow {\n const blur = Math.min(shadow.blur, ringThickness * 0.6);\n const maxDistance = ringThickness * 0.4;\n const distance = Math.hypot(shadow.dx, shadow.dy);\n const scale = distance > maxDistance ? maxDistance / distance : 1;\n return { ...shadow, blur, dx: shadow.dx * scale, dy: shadow.dy * scale };\n}\n\nfunction ringProgressPath(cx: number, cy: number, r: number, sweep: number, from: number): string {\n if (sweep >= Math.PI * 2 - FULL_SWEEP_EPSILON) {\n const start = arcPoint(cx, cy, r, from);\n const mid = arcPoint(cx, cy, r, from + Math.PI);\n return `M ${start.x} ${start.y} A ${r} ${r} 0 1 1 ${mid.x} ${mid.y} A ${r} ${r} 0 1 1 ${start.x} ${start.y}`;\n }\n const start = arcPoint(cx, cy, r, from);\n const end = arcPoint(cx, cy, r, from + sweep);\n const largeArc = sweep > Math.PI ? 1 : 0;\n return `M ${start.x} ${start.y} A ${r} ${r} 0 ${largeArc} 1 ${end.x} ${end.y}`;\n}\n\ninterface RingLayout {\n centerX: number;\n centerY: number;\n outerRadius: number;\n ringThickness: number;\n ringGap: number;\n axisMin: number;\n range: number;\n start: number;\n total: number;\n trackOpacity: number;\n cap: 'round' | 'butt';\n}\n\nfunction layoutOf(context: ChartRenderContext<RadialBarChart>): RingLayout {\n const { chart, plot } = context;\n const axisMin = finite(chart.axisY.min, 0);\n return {\n centerX: plot.x + plot.width / 2,\n centerY: plot.y + plot.height / 2,\n outerRadius: Math.max(1, Math.min(plot.width, plot.height) / 2 - 4),\n ringThickness: Math.max(1, finite(chart.config?.ringThickness, DEFAULT_RING_THICKNESS)),\n ringGap: Math.max(0, finite(chart.config?.ringGap, DEFAULT_RING_GAP)),\n axisMin,\n range: finite(chart.axisY.max, 100) - axisMin,\n start: TOP + (finite(chart.config?.ringStartAngle, 0) * Math.PI) / 180,\n total: (Math.min(360, Math.max(1, finite(chart.config?.ringSweep, 360))) * Math.PI) / 180,\n trackOpacity: Math.min(1, Math.max(0, finite(chart.config?.ringTrackOpacity, TRACK_OPACITY))),\n cap: chart.config?.ringCap ?? 'round',\n };\n}\n\nfunction ringEndShadows(\n context: ChartRenderContext<RadialBarChart>,\n layout: RingLayout,\n series: ChartSeries,\n radius: number,\n sweep: number,\n color: ScenePaint,\n): RenderNode[] {\n const { chart, bounds, nextOrder } = context;\n const { centerX, centerY, ringThickness, start } = layout;\n const shadow = resolveChartShadow(chart.shadowStyle);\n const isFullCircle = sweep >= Math.PI * 2 - FULL_SWEEP_EPSILON;\n if (!shadow || isFullCircle) {\n return [];\n }\n const clampedShadow = ringShadow(shadow, ringThickness);\n const stubSweep = Math.min(sweep, ringThickness / radius);\n return [\n [start, start + stubSweep],\n [start + sweep - stubSweep, start + sweep],\n ].map(\n ([from, to], endIndex): RenderNode => ({\n type: 'path',\n id: `chart-radial-bar-ring-end-shadow-${chart.id}-${series.id}-${endIndex}`,\n order: nextOrder(),\n bounds,\n d: arcSegmentPath(centerX, centerY, radius, from, to),\n style: {\n fill: { kind: 'none' },\n stroke: color,\n strokeWidth: ringThickness,\n lineCap: layout.cap,\n shadow: clampedShadow,\n clip: {\n type: 'path',\n d: annulusPath(centerX, centerY, radius + ringThickness / 2, radius - ringThickness / 2),\n },\n },\n }),\n );\n}\n\nfunction ringNodes(\n context: ChartRenderContext<RadialBarChart>,\n layout: RingLayout,\n series: ChartSeries,\n index: number,\n): RenderNode[] {\n const { chart, bounds, diagnostics, nextOrder } = context;\n const { centerX, centerY, outerRadius, ringThickness, ringGap, axisMin, range, start, total, trackOpacity, cap } =\n layout;\n const radius = outerRadius - index * (ringThickness + ringGap) - ringThickness / 2;\n if (radius <= ringThickness / 2) {\n return [];\n }\n const color = paint(series.color ?? CHART_COLORS[index % CHART_COLORS.length], diagnostics, chart.id);\n const value = Math.max(0, finite((series.values as number[])[0], 0));\n const fraction = range > 0 ? Math.min(1, Math.max(0, (value - axisMin) / range)) : 0;\n\n const trackStyle = {\n fill: { kind: 'none' } as const,\n stroke: color,\n strokeWidth: ringThickness,\n opacity: trackOpacity,\n };\n const track: RenderNode =\n total >= Math.PI * 2 - FULL_SWEEP_EPSILON\n ? {\n type: 'ellipse',\n id: `chart-radial-bar-track-${chart.id}-${series.id}`,\n order: nextOrder(),\n bounds,\n cx: centerX,\n cy: centerY,\n rx: radius,\n ry: radius,\n style: trackStyle,\n }\n : {\n type: 'path',\n id: `chart-radial-bar-track-${chart.id}-${series.id}`,\n order: nextOrder(),\n bounds,\n d: arcSegmentPath(centerX, centerY, radius, start, start + total),\n style: { ...trackStyle, lineCap: cap },\n };\n if (fraction <= 0) {\n return [track];\n }\n\n const sweep = fraction * total;\n const casters = ringEndShadows(context, layout, series, radius, sweep, color);\n const progress: RenderNode = {\n type: 'path',\n id: `chart-radial-bar-ring-${chart.id}-${series.id}`,\n order: nextOrder(),\n bounds,\n d: ringProgressPath(centerX, centerY, radius, sweep, start),\n detail: { of: 'chartValue', series: series.id, valueIndex: 0, mark: 'radial-bar-ring' },\n prop: seriesValueProp(series.id, 0),\n style: { fill: { kind: 'none' }, stroke: color, strokeWidth: ringThickness, lineCap: cap },\n };\n return [track, ...casters, progress];\n}\n\nexport function renderRadialBar(context: ChartRenderContext<RadialBarChart>): RenderNode[] {\n const layout = layoutOf(context);\n return context.chart.series.flatMap((series, index) => ringNodes(context, layout, series, index));\n}\n","import type { Bounds, RenderNode, ScenePaint } from '../../../scene';\nimport { finite } from '../../../scene';\nimport type { SankeyLayoutLink } from '../../geometry/sankey';\nimport { DEFAULT_ZONE_FILL, resolveChartShadow } from '../../primitives';\nimport type { ChartRenderContext } from '../types';\nimport type { SankeyRenderData } from './types';\n\ninterface SankeyRibbonEdge {\n x: number;\n top: number;\n bottom: number;\n}\n\ninterface SankeyLinkRibbon {\n linkIndex: number;\n fromId: string;\n toId: string;\n source: SankeyRibbonEdge;\n target: SankeyRibbonEdge;\n controlX: number;\n fill: ScenePaint;\n opacity: number;\n}\n\nexport function renderSankeyLinks(context: ChartRenderContext, data: SankeyRenderData): RenderNode[] {\n const shadow = resolveChartShadow(context.chart.shadowStyle);\n const gradient = Boolean(context.chart.config?.linkGradient);\n const { plot } = context;\n const clipPath = shadow\n ? `M ${plot.x} ${plot.y} H ${plot.x + plot.width} V ${plot.y + plot.height} H ${plot.x} Z`\n : undefined;\n return data.links.map((link, linkIndex) => {\n const ribbon = createSankeyLinkRibbon(context, data, link, linkIndex, gradient);\n return createSankeyRibbonNode(context, ribbon, shadow, clipPath, gradient);\n });\n}\n\nfunction createSankeyLinkRibbon(\n context: ChartRenderContext,\n data: SankeyRenderData,\n link: SankeyLayoutLink,\n linkIndex: number,\n gradient: boolean,\n): SankeyLinkRibbon {\n const source = {\n x: data.baseX + link.x0,\n top: data.baseY + link.sourceY0,\n bottom: data.baseY + link.sourceY1,\n };\n const target = {\n x: data.baseX + link.x1,\n top: data.baseY + link.targetY0,\n bottom: data.baseY + link.targetY1,\n };\n const config = context.chart.config;\n const fromColor = link.color || data.nodeColors.get(link.source) || DEFAULT_ZONE_FILL;\n const toColor = data.nodeColors.get(link.target) || DEFAULT_ZONE_FILL;\n const fill: ScenePaint = gradient\n ? {\n kind: 'linear-gradient',\n angle: 0,\n stops: [\n { offset: 0, color: fromColor },\n { offset: 100, color: toColor },\n ],\n }\n : { kind: 'solid', color: link.color || toColor };\n return {\n linkIndex,\n fromId: link.source,\n toId: link.target,\n source,\n target,\n controlX: source.x + (target.x - source.x) * Math.min(1, Math.max(0, finite(config?.sankeyLinkCurve, 0.5))),\n fill,\n opacity: Math.min(1, Math.max(0, finite(config?.sankeyLinkOpacity, link.color ? 0.85 : 0.45))),\n };\n}\n\nfunction createSankeyRibbonNode(\n context: ChartRenderContext,\n ribbon: SankeyLinkRibbon,\n shadow: ReturnType<typeof resolveChartShadow>,\n clipPath: string | undefined,\n gradient: boolean,\n): RenderNode {\n const { chart, bounds, nextOrder } = context;\n const gradientBounds: Bounds = {\n minX: Math.min(ribbon.source.x, ribbon.target.x),\n maxX: Math.max(ribbon.source.x, ribbon.target.x),\n minY: Math.min(ribbon.source.top, ribbon.target.top),\n maxY: Math.max(ribbon.source.bottom, ribbon.target.bottom),\n };\n return {\n type: 'path',\n id: `chart-sankey-link-${chart.id}-${ribbon.linkIndex}`,\n order: nextOrder(),\n bounds: gradient ? gradientBounds : bounds,\n d: sankeyRibbonPath(ribbon),\n detail: { of: 'link', fromId: ribbon.fromId, toId: ribbon.toId },\n style: {\n fill: ribbon.fill,\n opacity: ribbon.opacity,\n shadow,\n clip: clipPath ? { type: 'path', d: clipPath } : undefined,\n },\n };\n}\n\nfunction sankeyRibbonPath(ribbon: SankeyLinkRibbon): string {\n const { source, target, controlX } = ribbon;\n return [\n `M ${source.x} ${source.top}`,\n `C ${controlX} ${source.top} ${controlX} ${target.top} ${target.x} ${target.top}`,\n `L ${target.x} ${target.bottom}`,\n `C ${controlX} ${target.bottom} ${controlX} ${source.bottom} ${source.x} ${source.bottom}`,\n 'Z',\n ].join(' ');\n}\n","import { leftRoundedRectPath, rightRoundedRectPath } from '../../../artifacts/containers';\nimport type { RenderNode, SceneText } from '../../../scene';\nimport { finite } from '../../../scene';\nimport { estimateTextWidth } from '../../../scene/textLayout';\nimport type { SankeyLayoutNode } from '../../geometry/sankey';\nimport {\n chartText,\n contrastTextColor,\n DEFAULT_ZONE_FILL,\n isLightColor,\n resolveChartShadow,\n sameHueTint,\n} from '../../primitives';\nimport type { ChartRenderContext } from '../types';\nimport type { SankeyRenderData } from './types';\n\nconst OUTSIDE_LABEL_LIGHTNESS_ON_LIGHT_BG = 0.3;\nconst OUTSIDE_LABEL_LIGHTNESS_ON_DARK_BG = 0.78;\n\nexport function renderSankeyNodes(context: ChartRenderContext, data: SankeyRenderData): RenderNode[] {\n const cornerRadius = Math.max(0, finite(context.chart.config?.barCornerRadius, 0));\n const nodes: RenderNode[] = [];\n data.nodes.forEach(node => {\n nodes.push(createNodeRect(context, data, node, cornerRadius));\n const label = context.showLabels ? createNodeLabel(context, data, node) : undefined;\n if (label) {\n nodes.push(label);\n }\n });\n return nodes;\n}\n\nfunction createNodeRect(\n context: ChartRenderContext,\n data: SankeyRenderData,\n node: SankeyLayoutNode,\n cornerRadius: number,\n): RenderNode {\n const { chart, bounds, nextOrder } = context;\n const x = data.baseX + node.x;\n const y = data.baseY + node.y;\n const style = {\n fill: { kind: 'solid' as const, color: node.color || DEFAULT_ZONE_FILL },\n shadow: resolveChartShadow(chart.shadowStyle),\n };\n const isFirstColumn = node.column === 0;\n const isLastColumn = node.column === data.columnCount - 1;\n const detail = { of: 'chartSeries' as const, series: node.id, mark: 'sankey-node' };\n if (cornerRadius > 0 && isFirstColumn && isLastColumn) {\n return {\n type: 'rect',\n id: `chart-sankey-node-${chart.id}-${node.id}`,\n order: nextOrder(),\n bounds,\n x,\n y,\n width: node.width,\n height: node.height,\n rx: cornerRadius,\n style,\n detail,\n };\n }\n if (cornerRadius > 0 && isFirstColumn) {\n return {\n type: 'path',\n id: `chart-sankey-node-${chart.id}-${node.id}`,\n order: nextOrder(),\n bounds,\n d: leftRoundedRectPath(x, y, node.width, node.height, cornerRadius),\n style,\n detail,\n };\n }\n if (cornerRadius > 0 && isLastColumn) {\n return {\n type: 'path',\n id: `chart-sankey-node-${chart.id}-${node.id}`,\n order: nextOrder(),\n bounds,\n d: rightRoundedRectPath(x, y, node.width, node.height, cornerRadius),\n style,\n detail,\n };\n }\n return {\n type: 'rect',\n id: `chart-sankey-node-${chart.id}-${node.id}`,\n order: nextOrder(),\n bounds,\n x,\n y,\n width: node.width,\n height: node.height,\n style,\n detail,\n };\n}\n\nfunction createNodeLabel(\n context: ChartRenderContext,\n data: SankeyRenderData,\n node: SankeyLayoutNode,\n): RenderNode | undefined {\n const { chart } = context;\n const position = chart.config?.labelPosition ?? 'outside';\n const label =\n position === 'inside'\n ? createInsideLabel(context, data, node, chart.config?.labelOrientation ?? 'horizontal')\n : createOutsideLabel(context, data, node);\n if (!label) {\n return undefined;\n }\n const fallback = chart.textColor ?? '#0f172a';\n const defaultColor =\n position === 'inside'\n ? contrastTextColor(node.color)\n : (sameHueTint(\n node.color,\n isLightColor(fallback) ? OUTSIDE_LABEL_LIGHTNESS_ON_DARK_BG : OUTSIDE_LABEL_LIGHTNESS_ON_LIGHT_BG,\n ) ?? fallback);\n const color = chart.config?.labelColor ?? defaultColor;\n return { ...label, color, detail: { of: 'chartSeries', series: node.id, mark: 'sankey-node-label' } };\n}\n\nfunction createOutsideLabel(context: ChartRenderContext, data: SankeyRenderData, node: SankeyLayoutNode): SceneText {\n const { chart, bounds, nextOrder } = context;\n const isLastColumn = node.column === data.columnCount - 1;\n const x = data.baseX + node.x;\n const y = data.baseY + node.y;\n const labelX = isLastColumn ? x - data.labelGutter + 8 : x + node.width + 6;\n return {\n ...chartText({\n id: `chart-sankey-label-${chart.id}-${node.id}`,\n order: nextOrder(),\n bounds,\n frame: { x: labelX, y, width: data.labelGutter - 12, height: Math.max(1, node.height) },\n text: node.label,\n chart,\n align: isLastColumn ? 'right' : 'left',\n }),\n fontSize: data.labelSize,\n fontWeight: 'bold',\n verticalAlign: 'middle',\n };\n}\n\nfunction createInsideLabel(\n context: ChartRenderContext,\n data: SankeyRenderData,\n node: SankeyLayoutNode,\n orientation: 'horizontal' | 'vertical',\n): SceneText | undefined {\n const { chart, bounds, nextOrder } = context;\n const x = data.baseX + node.x;\n const y = data.baseY + node.y;\n const centerX = x + node.width / 2;\n const centerY = y + node.height / 2;\n const fontSize = data.labelSize;\n const id = `chart-sankey-label-${chart.id}-${node.id}`;\n if (orientation === 'vertical') {\n const thickness = fontSize * 1.4;\n const width = Math.max(1, node.height - 8);\n if (estimateTextWidth(node.label, fontSize, false) > width) {\n return undefined;\n }\n return {\n ...chartText({\n id,\n order: nextOrder(),\n bounds,\n frame: { x: centerX - width / 2, y: centerY - thickness / 2, width, height: thickness },\n text: node.label,\n chart,\n align: 'center',\n rotation: -90,\n }),\n fontSize,\n fontWeight: 'bold',\n verticalAlign: 'middle',\n rotationCenter: { x: centerX, y: centerY },\n };\n }\n return {\n ...chartText({\n id,\n order: nextOrder(),\n bounds,\n frame: { x: x + 4, y: centerY - fontSize / 2 - 2, width: Math.max(1, node.width - 8), height: fontSize + 4 },\n text: node.label,\n chart,\n align: 'center',\n }),\n fontSize,\n fontWeight: 'bold',\n verticalAlign: 'middle',\n };\n}\n","import { finite } from '../../../scene';\nimport { layoutSankey, type SankeyLinkInput, type SankeyNodeInput } from '../../geometry/sankey';\nimport { DEFAULT_ZONE_FILL, representativeColor } from '../../primitives';\nimport type { ChartRenderContext } from '../types';\nimport type { SankeyRenderData } from './types';\n\nexport function createSankeyRenderData(context: ChartRenderContext): SankeyRenderData {\n const { chart, plot, showLabels } = context;\n const labelGutter = showLabels ? 92 : 0;\n const availableWidth = Math.max(1, plot.width - labelGutter * 2);\n const layout = layoutSankey(createNodeInputs(context), createLinkInputs(context), availableWidth, plot.height, {\n nodeWidth: Math.max(1, finite(chart.config?.sankeyNodeWidth, 18)),\n nodeGap: Math.max(0, finite(chart.config?.sankeyNodeGap, 8)),\n });\n return {\n ...layout,\n baseX: plot.x + labelGutter,\n baseY: plot.y,\n labelGutter,\n fontSize: Math.max(9, finite(chart.fontSize, 12)),\n labelSize: Math.max(6, finite(chart.config?.sankeyLabelSize, Math.max(9, finite(chart.fontSize, 12)) - 2)),\n columnCount: Math.max(1, ...layout.nodes.map(node => node.column + 1)),\n nodeColors: new Map(layout.nodes.map(node => [node.id, node.color || DEFAULT_ZONE_FILL])),\n };\n}\n\nfunction createNodeInputs(context: ChartRenderContext): SankeyNodeInput[] {\n return (context.chart.config?.zones ?? []).map(zone => ({\n id: zone.label,\n label: zone.label,\n color: zone.color,\n offsetX: zone.offsetX,\n offsetY: zone.offsetY,\n }));\n}\n\nfunction createLinkInputs(context: ChartRenderContext): SankeyLinkInput[] {\n const inputs: SankeyLinkInput[] = [];\n context.chart.series.forEach(series => {\n if (!series.source || !series.target) {\n return;\n }\n inputs.push({\n source: series.source,\n target: series.target,\n value: (series.values as number[])[0] ?? 0,\n color: series.color ? representativeColor(series.color, DEFAULT_ZONE_FILL) : undefined,\n });\n });\n return inputs;\n}\n","import type { RenderNode } from '../../scene';\nimport { renderSankeyLinks } from './sankey/links';\nimport { renderSankeyNodes } from './sankey/nodes';\nimport { createSankeyRenderData } from './sankey/prepare';\nimport type { ChartRenderContext } from './types';\n\nexport function renderSankey(context: ChartRenderContext): RenderNode[] {\n const data = createSankeyRenderData(context);\n const nodes: RenderNode[] = [];\n\n nodes.push(...renderSankeyLinks(context, data));\n nodes.push(...renderSankeyNodes(context, data));\n\n return nodes;\n}\n","import type { ChartSeries } from '../../../model/chart';\nimport type { RenderNode } from '../../scene';\nimport { paint } from '../../scene';\nimport { CHART_COLORS, resolveChartShadow } from '../primitives';\nimport { type CartesianPoint, pixelPoints, seriesValuePairs } from './cartesianPoints';\nimport type { ChartRenderContext } from './types';\n\nconst DEFAULT_POINT_SIZE = 4;\n\nexport function renderScatter(context: ChartRenderContext): RenderNode[] {\n const nodes: RenderNode[] = [];\n const shadow = resolveChartShadow(context.chart.shadowStyle);\n context.chart.series.forEach((series, seriesIndex) => {\n const color = series.color ?? CHART_COLORS[seriesIndex % CHART_COLORS.length];\n const points = pixelPoints(context, seriesValuePairs(context.chart, series));\n points.forEach((point, pointIndex) => {\n nodes.push(createScatterPoint(context, series, point, pointIndex, color, shadow));\n });\n });\n return nodes;\n}\n\nfunction createScatterPoint(\n context: ChartRenderContext,\n series: ChartSeries,\n point: CartesianPoint,\n pointIndex: number,\n color: Parameters<typeof paint>[0],\n shadow: ReturnType<typeof resolveChartShadow>,\n): RenderNode {\n const { chart, bounds, diagnostics, nextOrder } = context;\n const config = chart.config;\n const radius = config?.pointSize ?? DEFAULT_POINT_SIZE;\n const strokeWidth = config?.pointStrokeWidth ?? 0;\n return {\n type: 'ellipse',\n id: `chart-point-${chart.id}-${series.id}-${pointIndex}`,\n order: nextOrder(),\n bounds,\n cx: point.x,\n cy: point.y,\n rx: radius,\n ry: radius,\n detail: { of: 'chartValue', series: series.id, valueIndex: pointIndex },\n style: {\n fill: paint(color, diagnostics, chart.id),\n stroke: strokeWidth > 0 ? paint(config?.pointStrokeColor ?? color, diagnostics, chart.id) : undefined,\n strokeWidth: strokeWidth > 0 ? strokeWidth : undefined,\n opacity: config?.pointOpacity,\n shadow,\n },\n };\n}\n","import type { ChartSeries } from '../../../../model/chart';\nimport { finite } from '../../../scene';\nimport { axisBands, DEFAULT_HEATMAP_ZONES, zoneColorAtValue } from '../../primitives';\nimport type { ChartRenderContext } from '../types';\nimport type { TreemapLayout } from './types';\n\nexport function createTreemapLayout(context: ChartRenderContext): TreemapLayout {\n const { chart, plot, showLegend } = context;\n const fontSize = Math.max(9, finite(chart.fontSize, 12));\n const legendPosition: 'bottom' | 'left' | 'right' =\n chart.legendPosition === 'left' ? 'left' : chart.legendPosition === 'right' ? 'right' : 'bottom';\n const legendHeight = showLegend && legendPosition === 'bottom' ? 48 : 0;\n const cellGap = Math.max(0, finite(chart.config?.cellGap, 0));\n return {\n leaves: chart.series,\n bands: axisBands(chart.axisY),\n zones: chart.config?.zones?.length ? chart.config.zones : DEFAULT_HEATMAP_ZONES,\n fontSize,\n smallFontSize: Math.max(8, fontSize - 1),\n legendPosition,\n legendHeight,\n gridWidth: Math.max(1, plot.width),\n gridHeight: Math.max(1, plot.height - legendHeight),\n cellGap,\n cellRadius: Math.max(0, finite(chart.config?.barCornerRadius, cellGap)),\n headerHeight: Math.max(0, finite(chart.config?.headerHeight, 20)),\n labelSize: Math.max(6, finite(chart.config?.tileLabelSize, Math.max(8, fontSize - 1))),\n valueSize: Math.max(6, finite(chart.config?.tileValueSize, Math.max(8, fontSize - 1))),\n labelPadding: Math.max(0, finite(chart.config?.tileLabelPadding, 4)),\n };\n}\n\nexport function treemapLeafValue(leaf: ChartSeries): number {\n return (leaf.values as number[])[0] ?? 0;\n}\n\nexport function treemapLeafColor(leaf: ChartSeries, layout: TreemapLayout) {\n return leaf.color ?? zoneColorAtValue(treemapLeafValue(leaf), layout.bands, layout.zones);\n}\n","import type { RenderNode } from '../../../scene';\nimport { boxBounds } from '../../../scene';\nimport { chartText, DEFAULT_ZONE_FILL, formatFieldValue } from '../../primitives';\nimport type { ChartRenderContext } from '../types';\nimport type { TreemapLayout } from './types';\n\nconst BAR_THICKNESS = 10;\nconst TICK_LENGTH = 4;\nconst ROW_GAP = 2;\nconst CHART_GAP = 16;\nconst LABEL_SIZE = 34;\n\nexport function renderTreemapLegend(context: ChartRenderContext, layout: TreemapLayout): RenderNode[] {\n if (layout.zones.length === 0 || (layout.legendPosition === 'bottom' && layout.legendHeight <= 0)) {\n return [];\n }\n return layout.legendPosition === 'bottom' ? renderBottomLegend(context, layout) : renderSideLegend(context, layout);\n}\n\nfunction bandRatio(layout: TreemapLayout, value: number): number {\n const first = layout.bands[0];\n const last = layout.bands[layout.bands.length - 1];\n return last === first ? 0 : (value - first) / (last - first);\n}\n\nfunction bandStops(layout: TreemapLayout) {\n const bandCount = Math.max(0, layout.bands.length - 1);\n const zones = layout.zones.slice(0, bandCount);\n return zones.map((zone, index) => ({\n offset: bandRatio(layout, layout.bands[index + 1] ?? layout.bands[layout.bands.length - 1]) * 100,\n color: zone.color ?? DEFAULT_ZONE_FILL,\n }));\n}\n\nfunction renderBottomLegend(context: ChartRenderContext, layout: TreemapLayout): RenderNode[] {\n const { chart, plot, bounds, nextOrder } = context;\n const barX = plot.x;\n const barWidth = layout.gridWidth;\n const labelHeight = layout.fontSize + 2;\n const barY = plot.y + layout.gridHeight + CHART_GAP;\n const barBounds = boxBounds({ x: barX, y: barY, width: barWidth, height: BAR_THICKNESS });\n const stops = bandStops(layout);\n\n const bar: RenderNode = {\n type: 'rect',\n id: `chart-treemap-legend-bar-${chart.id}`,\n order: nextOrder(),\n bounds: barBounds,\n x: barX,\n y: barY,\n width: barWidth,\n height: BAR_THICKNESS,\n rx: 3,\n zoneGradient: { axis: 'y', min: chart.axisY.min, max: chart.axisY.max },\n style: {\n fill: stops.length ? { kind: 'linear-gradient', angle: 0, stops } : { kind: 'solid', color: DEFAULT_ZONE_FILL },\n stroke: { kind: 'solid', color: chart.gridColor ?? '#e2e8f0' },\n strokeWidth: 1,\n },\n };\n\n const ticks: RenderNode[] = layout.bands.flatMap((value, index) => {\n const x = barX + bandRatio(layout, value) * barWidth;\n const tick: RenderNode = {\n type: 'path',\n id: `chart-treemap-legend-tick-${chart.id}-${index}`,\n order: nextOrder(),\n bounds,\n d: `M ${x} ${barY + BAR_THICKNESS} L ${x} ${barY + BAR_THICKNESS + TICK_LENGTH}`,\n style: {\n fill: { kind: 'none' },\n stroke: { kind: 'solid', color: chart.gridColor ?? '#e2e8f0' },\n strokeWidth: 1,\n },\n };\n const isFirst = index === 0;\n const isLast = index === layout.bands.length - 1;\n const align = isFirst ? 'left' : isLast ? 'right' : 'center';\n const frameX = isFirst ? x : isLast ? x - LABEL_SIZE : x - LABEL_SIZE / 2;\n const label = chartText({\n id: `chart-treemap-legend-tick-label-${chart.id}-${index}`,\n order: nextOrder(),\n bounds,\n frame: { x: frameX, y: barY + BAR_THICKNESS + TICK_LENGTH + ROW_GAP, width: LABEL_SIZE, height: labelHeight },\n text: formatFieldValue(value),\n chart,\n align,\n });\n return [tick, label];\n });\n\n return [bar, ...ticks];\n}\n\nfunction renderSideLegend(context: ChartRenderContext, layout: TreemapLayout): RenderNode[] {\n const { chart, plot, bounds, nextOrder } = context;\n const side = layout.legendPosition as 'left' | 'right';\n const barTop = plot.y;\n const barHeight = layout.gridHeight;\n const barX = side === 'left' ? plot.x - CHART_GAP - BAR_THICKNESS : plot.x + layout.gridWidth + CHART_GAP;\n const barBounds = boxBounds({ x: barX, y: barTop, width: BAR_THICKNESS, height: barHeight });\n const stops = bandStops(layout);\n\n const bar: RenderNode = {\n type: 'rect',\n id: `chart-treemap-legend-bar-${chart.id}`,\n order: nextOrder(),\n bounds: barBounds,\n x: barX,\n y: barTop,\n width: BAR_THICKNESS,\n height: barHeight,\n rx: 3,\n zoneGradient: { axis: 'y', min: chart.axisY.min, max: chart.axisY.max },\n style: {\n fill: stops.length ? { kind: 'linear-gradient', angle: 270, stops } : { kind: 'solid', color: DEFAULT_ZONE_FILL },\n stroke: { kind: 'solid', color: chart.gridColor ?? '#e2e8f0' },\n strokeWidth: 1,\n },\n };\n\n const tickX = side === 'left' ? barX : barX + BAR_THICKNESS;\n const tickEndX = side === 'left' ? tickX - TICK_LENGTH : tickX + TICK_LENGTH;\n const labelX = side === 'left' ? tickEndX - ROW_GAP - LABEL_SIZE : tickEndX + ROW_GAP;\n\n const ticks: RenderNode[] = layout.bands.flatMap((value, index) => {\n const y = barTop + (1 - bandRatio(layout, value)) * barHeight;\n const tick: RenderNode = {\n type: 'path',\n id: `chart-treemap-legend-tick-${chart.id}-${index}`,\n order: nextOrder(),\n bounds,\n d: `M ${tickX} ${y} L ${tickEndX} ${y}`,\n style: {\n fill: { kind: 'none' },\n stroke: { kind: 'solid', color: chart.gridColor ?? '#e2e8f0' },\n strokeWidth: 1,\n },\n };\n const label = chartText({\n id: `chart-treemap-legend-tick-label-${chart.id}-${index}`,\n order: nextOrder(),\n bounds,\n frame: { x: labelX, y: y - layout.fontSize / 2, width: LABEL_SIZE, height: layout.fontSize + 2 },\n text: formatFieldValue(value),\n chart,\n align: side === 'left' ? 'right' : 'left',\n });\n return [tick, label];\n });\n\n return [bar, ...ticks];\n}\n","import type { ChartSeries } from '../../../../model/chart';\nimport type { Bounds, RenderNode } from '../../../scene';\nimport { finite, paint } from '../../../scene';\nimport { ellipsizeToWidth, estimateTextWidth, wrapText } from '../../../scene/textLayout';\nimport { squarifyTreemap } from '../../geometry';\nimport { chartText, contrastTextColor, representativeColor, resolveChartShadow } from '../../primitives';\nimport type { ChartRenderContext } from '../types';\nimport { treemapLeafColor, treemapLeafValue } from './layout';\nimport type { TreemapLayout } from './types';\n\ninterface TreemapTile {\n x: number;\n y: number;\n width: number;\n height: number;\n item: { leaf: ChartSeries; value: number };\n}\n\ninterface TreemapHeader {\n key: string;\n label: string;\n x: number;\n y: number;\n width: number;\n}\n\nexport function renderTreemapTiles(context: ChartRenderContext, layout: TreemapLayout): RenderNode[] {\n const { tiles, headers } = layoutTreemapTiles(context, layout);\n const nodes: RenderNode[] = [];\n const gradientFlow = Boolean(context.chart.config?.tileGradient);\n tiles.forEach((tile, index) => {\n const next = tiles[index + 1];\n const sameGroup = next && (tile.item.leaf.group ?? '') === (next.item.leaf.group ?? '');\n const nextTile = gradientFlow && sameGroup ? next : undefined;\n nodes.push(...renderTile(context, layout, tile, nextTile));\n });\n headers.forEach((header, index) => {\n nodes.push(...renderTreemapHeader(context, layout, header, index));\n });\n return nodes;\n}\n\nfunction layoutTreemapTiles(\n context: ChartRenderContext,\n layout: TreemapLayout,\n): { tiles: TreemapTile[]; headers: TreemapHeader[] } {\n if (!layout.leaves.some(leaf => leaf.group)) {\n const items = layout.leaves.map(leaf => ({ leaf, value: treemapLeafValue(leaf) }));\n const tiles = squarifyTreemap(items, { x: 0, y: 0, width: layout.gridWidth, height: layout.gridHeight });\n return { tiles, headers: [] };\n }\n\n const groupOrder: string[] = [];\n for (const leaf of layout.leaves) {\n const key = leaf.group ?? '';\n if (!groupOrder.includes(key)) {\n groupOrder.push(key);\n }\n }\n const groupItems = groupOrder.map(key => ({\n key,\n label: key || 'Other',\n value: layout.leaves\n .filter(leaf => (leaf.group ?? '') === key)\n .reduce((sum, leaf) => sum + treemapLeafValue(leaf), 0),\n }));\n const groupRects = squarifyTreemap(groupItems, { x: 0, y: 0, width: layout.gridWidth, height: layout.gridHeight });\n\n const groupGap = layout.cellGap;\n\n const tiles: TreemapTile[] = [];\n const headers: TreemapHeader[] = [];\n groupRects.forEach(groupRect => {\n const headerHeight = context.showLabels ? Math.min(layout.headerHeight, groupRect.height) : 0;\n if (context.showLabels) {\n headers.push({\n key: groupRect.item.key,\n label: groupRect.item.label,\n x: groupRect.x + groupGap / 2,\n y: groupRect.y,\n width: Math.max(0, groupRect.width - groupGap),\n });\n }\n const innerLeaves = layout.leaves.filter(leaf => (leaf.group ?? '') === groupRect.item.key);\n const leafItems = innerLeaves.map(leaf => ({ leaf, value: treemapLeafValue(leaf) }));\n tiles.push(\n ...squarifyTreemap(leafItems, {\n x: groupRect.x,\n y: groupRect.y + headerHeight,\n width: groupRect.width,\n height: Math.max(0, groupRect.height - headerHeight),\n }),\n );\n });\n return { tiles, headers };\n}\n\nfunction renderTreemapHeader(\n context: ChartRenderContext,\n layout: TreemapLayout,\n header: TreemapHeader,\n index: number,\n): RenderNode[] {\n const { chart, plot, bounds, nextOrder } = context;\n const fill = chart.config?.headerColor ?? chart.gridColor ?? '#e2e8f0';\n const background: RenderNode = {\n type: 'rect',\n id: `chart-treemap-header-${chart.id}-${index}`,\n order: nextOrder(),\n bounds,\n x: plot.x + header.x,\n y: plot.y + header.y,\n width: header.width,\n height: layout.headerHeight,\n rx: layout.cellRadius,\n style: { fill: { kind: 'solid', color: fill } },\n };\n const smallFontSize = Math.max(8, Math.max(9, chart.fontSize ?? 12) - 1);\n const label: RenderNode = {\n ...chartText({\n id: `chart-treemap-header-label-${chart.id}-${index}`,\n order: nextOrder(),\n bounds,\n frame: {\n x: plot.x + header.x,\n y: plot.y + header.y + (layout.headerHeight - smallFontSize) / 2,\n width: header.width,\n height: smallFontSize + 2,\n },\n text: header.label,\n chart,\n align: 'center',\n }),\n fontSize: smallFontSize,\n color: contrastTextColor(fill),\n };\n return [background, label];\n}\n\nfunction renderTile(\n context: ChartRenderContext,\n layout: TreemapLayout,\n tile: TreemapTile,\n nextTile: TreemapTile | undefined,\n): RenderNode[] {\n const color = treemapLeafColor(tile.item.leaf, layout);\n const nextColor = nextTile ? treemapLeafColor(nextTile.item.leaf, layout) : undefined;\n const nodes = [createTileNode(context, layout, tile, color, nextColor)];\n if (context.showLabels && tile.width >= 34 && tile.height >= 18) {\n nodes.push(...createTileLabel(context, layout, tile, color));\n }\n return nodes;\n}\n\nfunction createTileNode(\n context: ChartRenderContext,\n layout: TreemapLayout,\n tile: TreemapTile,\n color: Parameters<typeof representativeColor>[0],\n nextColor: Parameters<typeof representativeColor>[0] | undefined,\n): RenderNode {\n const { chart, plot, bounds, diagnostics, nextOrder } = context;\n const gap = layout.cellGap;\n const shadow = resolveChartShadow(chart.shadowStyle);\n const clipPath = shadow\n ? `M ${plot.x} ${plot.y} H ${plot.x + plot.width} V ${plot.y + plot.height} H ${plot.x} Z`\n : undefined;\n const tileX = plot.x + tile.x + gap / 2;\n const tileY = plot.y + tile.y + gap / 2;\n const tileWidth = Math.max(0, tile.width - gap);\n const tileHeight = Math.max(0, tile.height - gap);\n const fallback = '#94a3b8';\n const gradientBounds: Bounds = {\n minX: tileX,\n maxX: tileX + tileWidth,\n minY: tileY + tileHeight / 2 - tileWidth / 2,\n maxY: tileY + tileHeight / 2 + tileWidth / 2,\n };\n const fill = nextColor\n ? {\n kind: 'linear-gradient' as const,\n angle: 0,\n stops: [\n { offset: 0, color: representativeColor(color, fallback) },\n { offset: 100, color: representativeColor(nextColor, fallback) },\n ],\n }\n : paint(color, diagnostics, chart.id);\n return {\n type: 'rect',\n id: `chart-treemap-tile-${chart.id}-${tile.item.leaf.id}`,\n order: nextOrder(),\n bounds: nextColor ? gradientBounds : bounds,\n x: tileX,\n y: tileY,\n width: tileWidth,\n height: tileHeight,\n rx: layout.cellRadius,\n style: {\n fill,\n stroke: { kind: 'solid', color: chart.config?.tileStrokeColor ?? chart.gridColor ?? '#e2e8f0' },\n strokeWidth: finite(chart.config?.tileStrokeWidth, finite(chart.gridWidth, 1)),\n shadow,\n clip: clipPath ? { type: 'path', d: clipPath } : undefined,\n },\n };\n}\n\nfunction createTileLabel(\n context: ChartRenderContext,\n layout: TreemapLayout,\n tile: TreemapTile,\n color: Parameters<typeof representativeColor>[0],\n): RenderNode[] {\n const { chart, plot, bounds, nextOrder } = context;\n const { leaf, value } = tile.item;\n const gap = layout.cellGap;\n const pad = layout.labelPadding;\n const width = Math.max(1, tile.width - gap - pad * 2);\n const height = Math.max(1, tile.height - gap - pad * 1.5);\n const x = plot.x + tile.x + gap / 2 + pad;\n const y = plot.y + tile.y + gap / 2 + pad * 0.75;\n const textColor = chart.config?.tileTextColor ?? contrastTextColor(representativeColor(color, '#ffffff'));\n const lineHeight = layout.labelSize * 1.2;\n const maxLines = Math.max(1, Math.floor(height / lineHeight));\n const labelLines = wrapText(leaf.label, width, layout.labelSize)\n .slice(0, maxLines)\n .map(line => ellipsizeToWidth(line, width, layout.labelSize, true));\n\n const label: RenderNode = {\n ...chartText({\n id: `chart-treemap-label-${chart.id}-${leaf.id}`,\n order: nextOrder(),\n bounds,\n frame: { x, y, width, height },\n text: leaf.label,\n chart,\n }),\n lines: labelLines,\n fontSize: layout.labelSize,\n fontWeight: 'bold',\n color: textColor,\n };\n\n const valueText = String(value);\n const valueFits =\n labelLines.length * lineHeight + layout.valueSize * 1.2 <= height + 2 &&\n estimateTextWidth(valueText, layout.valueSize, false) <= width;\n if (chart.config?.showTileValues === false || !valueFits) {\n return [label];\n }\n\n const valueNode: RenderNode = {\n ...chartText({\n id: `chart-treemap-value-${chart.id}-${leaf.id}`,\n order: nextOrder(),\n bounds,\n frame: {\n x,\n y: y + labelLines.length * lineHeight,\n width,\n height: Math.max(1, height - labelLines.length * lineHeight),\n },\n text: String(value),\n chart,\n }),\n lines: [String(value)],\n fontSize: layout.valueSize,\n color: textColor,\n };\n\n return [label, valueNode];\n}\n","import type { RenderNode } from '../../scene';\nimport { createTreemapLayout } from './treemap/layout';\nimport { renderTreemapLegend } from './treemap/legend';\nimport { renderTreemapTiles } from './treemap/tiles';\nimport type { ChartRenderContext } from './types';\n\nexport function renderTreemap(context: ChartRenderContext): RenderNode[] {\n const layout = createTreemapLayout(context);\n const nodes: RenderNode[] = [];\n\n nodes.push(...renderTreemapTiles(context, layout));\n nodes.push(...renderTreemapLegend(context, layout));\n\n return nodes;\n}\n","import type {\n ChartType,\n HexbinChart,\n PieChart,\n PolarAreaChart,\n RadarChart,\n RadialBarChart,\n RadialChart,\n} from '../../../model/chart';\nimport type { RenderNode } from '../../scene';\nimport { renderBar } from './bar';\nimport { renderBoxplot } from './boxplot';\nimport { renderCustom } from './custom';\nimport { renderField } from './field';\nimport { renderHeatmap } from './heatmap';\nimport { renderHexbin } from './hexbin';\nimport { renderLine } from './line';\nimport { renderMekko } from './mekko';\nimport { renderPie } from './pie';\nimport { renderPolarArea } from './polarArea';\nimport { renderRadar } from './radar';\nimport { renderRadialBar } from './radialBar';\nimport { renderSankey } from './sankey';\nimport { renderScatter } from './scatter';\nimport { renderTreemap } from './treemap';\nimport type { ChartRenderContext, ChartRenderer } from './types';\n\nexport type { ChartRenderContext, ChartRenderer } from './types';\n\nconst RENDERERS: Record<ChartType, ChartRenderer> = {\n bar: renderBar,\n boxplot: renderBoxplot,\n custom: renderCustom,\n field: renderField,\n heatmap: renderHeatmap,\n hexbin: context => renderHexbin(context as ChartRenderContext<HexbinChart>),\n line: renderLine,\n mekko: renderMekko,\n pie: context => renderPie(context as ChartRenderContext<PieChart>),\n polarArea: context => renderPolarArea(context as ChartRenderContext<PolarAreaChart>),\n radar: context => renderRadar(context as ChartRenderContext<RadarChart>),\n radial: context => renderRadar(context as ChartRenderContext<RadialChart>),\n radialBar: context => renderRadialBar(context as ChartRenderContext<RadialBarChart>),\n sankey: renderSankey,\n scatter: renderScatter,\n treemap: renderTreemap,\n};\n\nconst POLAR_TYPES: ReadonlySet<ChartType> = new Set<ChartType>(['radar', 'radial']);\n\nexport function isPolarChart(chartType: ChartType): boolean {\n return POLAR_TYPES.has(chartType);\n}\n\nexport function renderChartMarks(context: ChartRenderContext): RenderNode[] {\n return RENDERERS[context.chart.chartType](context);\n}\n","import type { RenderNode } from '../scene';\nimport type { ChartFoundation } from './chartFoundation';\nimport { buildChartAxes, buildChartGrid, buildChartRules } from './decorations';\nimport { renderChartMarks } from './renderers';\n\nexport function buildCartesianChart(foundation: ChartFoundation): RenderNode[] {\n const { chart, context, layout, nodes, renderOrder } = foundation;\n const gridNodes = buildChartGrid(chart, layout.plot, layout.bounds, renderOrder.current());\n nodes.push(...gridNodes);\n renderOrder.advance(gridNodes.length);\n\n nodes.push(...renderChartMarks(context));\n\n const ruleNodes = buildChartRules({\n chart,\n plot: layout.plot,\n bounds: layout.bounds,\n order: renderOrder.current(),\n });\n nodes.push(...ruleNodes);\n renderOrder.advance(ruleNodes.length);\n\n nodes.push(...buildChartAxes(chart, layout, renderOrder.current()));\n return nodes;\n}\n","import type { Chart, PieChart, PolarAreaChart, RadarChart, RadialChart } from '../../model/chart';\nimport type { Bounds, SceneRect } from '../scene';\nimport { finite, paint } from '../scene';\nimport { CARTESIAN_VALUE_TYPES } from './decorations';\nimport { isHorizontalBar } from './primitives';\nimport { resolvePieRadii } from './primitives/pieShape';\nimport { radarCategoryCount, radarRadius } from './primitives/radarShape';\n\ntype Plot = { x: number; y: number; width: number; height: number };\ntype FrameDetail = NonNullable<SceneRect['detail']>;\n\nfunction scaleDetail(chart: Chart, plot: Plot): FrameDetail {\n const horizontal = isHorizontalBar(chart);\n const range = horizontal ? `${plot.x},${plot.width}` : `${plot.y},${plot.height}`;\n return {\n of: 'chartScale',\n valueScale: `${range},${chart.axisY.min},${chart.axisY.max}${horizontal ? ',horizontal' : ''}`,\n };\n}\n\nfunction pieDetail(chart: PieChart, plot: Plot): FrameDetail {\n const { outerRadius, innerRadius, cornerRadius } = resolvePieRadii(\n plot.width,\n plot.height,\n chart.config?.innerRadius,\n chart.config?.pieCornerRadius,\n );\n return {\n of: 'pieGeometry',\n pieGeometry: `${plot.x + plot.width / 2},${plot.y + plot.height / 2},${outerRadius},${innerRadius},${cornerRadius}`,\n };\n}\n\nfunction polarAreaDetail(chart: PolarAreaChart, plot: Plot): FrameDetail {\n const maxRadius = Math.max(1, Math.min(plot.width, plot.height) / 2 - 4);\n const innerRadius = Math.max(0, Math.min(finite(chart.config?.innerRadius, 0), maxRadius - 1));\n const cornerRadius = Math.max(0, finite(chart.config?.pieCornerRadius, 0));\n return {\n of: 'pieGeometry',\n pieGeometry: `${plot.x + plot.width / 2},${plot.y + plot.height / 2},${maxRadius},${innerRadius},${cornerRadius}`,\n };\n}\n\nfunction radarDetail(chart: RadarChart | RadialChart, plot: Plot): FrameDetail {\n const configuredCount = (chart.config?.categories?.filter(Boolean) ?? []).length;\n const dataCount = Math.max(0, ...chart.series.map(series => series.values.length));\n const count = radarCategoryCount(configuredCount, dataCount);\n const radius = radarRadius(plot.width, plot.height, finite(chart.fontSize, 12), chart.showAxisLabels !== false);\n const centerX = plot.x + plot.width / 2;\n const centerY = plot.y + plot.height / 2;\n const curved = chart.chartType === 'radial' ? 1 : 0;\n const tension = chart.config?.radarTension;\n return {\n of: 'radarGeometry',\n radarGeometry: `${centerX},${centerY},${radius},${chart.axisY.min},${chart.axisY.max},${count},${curved}${tension === undefined ? '' : `,${tension}`}`,\n };\n}\n\nfunction frameDetail(chart: Chart, plot: Plot): FrameDetail | undefined {\n if (chart.chartType === 'pie') {\n return pieDetail(chart, plot);\n }\n if (chart.chartType === 'polarArea') {\n return polarAreaDetail(chart, plot);\n }\n if (chart.chartType === 'radar' || chart.chartType === 'radial') {\n return radarDetail(chart, plot);\n }\n return CARTESIAN_VALUE_TYPES.has(chart.chartType) ? scaleDetail(chart, plot) : undefined;\n}\n\nexport function buildChartFrame(chart: Chart, bounds: Bounds, plot: Plot, order: number): SceneRect {\n const frame: SceneRect = {\n type: 'rect',\n id: `chart-${chart.id}`,\n order,\n bounds,\n x: chart.x,\n y: chart.y,\n width: chart.width,\n height: chart.height,\n rx: chart.cornerRadius ?? 12,\n style: {\n fill: paint(chart.fillColor ?? '#ffffff', [], chart.id),\n stroke: { kind: 'solid', color: chart.strokeColor ?? '#475569' },\n strokeWidth: finite(chart.strokeWidth, 1),\n },\n };\n const detail = frameDetail(chart, plot);\n if (detail) {\n frame.detail = detail;\n }\n return frame;\n}\n","import type { Chart } from '../../model/chart';\nimport type { RenderDiagnostic, RenderNode } from '../scene';\nimport type { ChartRenderOrder } from './chartRenderOrder';\nimport { buildLegend, type ChartLayout } from './decorations';\n\nexport function buildOrderedChartLegend(\n chart: Chart,\n layout: ChartLayout,\n renderOrder: ChartRenderOrder,\n diagnostics: RenderDiagnostic[],\n): RenderNode[] {\n const nodes = buildLegend({\n chart,\n plot: layout.plot,\n bounds: layout.bounds,\n order: renderOrder.current(),\n diagnostics,\n });\n renderOrder.advance(nodes.length);\n return nodes;\n}\n","import type { TypedChart } from '../../model/chart';\nimport type { RenderDiagnostic } from '../scene';\nimport type { ChartRenderOrder } from './chartRenderOrder';\nimport type { ChartLayout } from './decorations';\nimport type { ChartRenderContext } from './renderers';\n\nexport function createChartRenderContext(\n chart: TypedChart,\n layout: ChartLayout,\n renderOrder: ChartRenderOrder,\n diagnostics: RenderDiagnostic[],\n): ChartRenderContext {\n return {\n chart,\n plot: layout.plot,\n bounds: layout.bounds,\n diagnostics,\n showLabels: layout.showLabels,\n showLegend: layout.showLegend,\n stackedMode: chart.config?.stacked && chart.config.stacked !== 'none' ? chart.config.stacked : undefined,\n nextOrder: renderOrder.next,\n };\n}\n","export class ChartRenderOrder {\n readonly #baseOrder: number;\n #offset = 0.01;\n\n constructor(baseOrder: number) {\n this.#baseOrder = baseOrder;\n }\n\n readonly next = (): number => this.#baseOrder + this.#offset++;\n\n current(): number {\n return this.#baseOrder + this.#offset;\n }\n\n advance(nodeCount: number): void {\n this.#offset += nodeCount;\n }\n}\n","import type { Chart } from '../../model/chart';\nimport type { Bounds, RenderNode } from '../scene';\nimport { finite } from '../scene';\nimport type { ChartRenderOrder } from './chartRenderOrder';\nimport { chartText } from './primitives';\nimport { CHART_TITLE_PROP } from './propPath';\n\nexport function buildChartTitle(\n chart: Chart,\n bounds: Bounds,\n plot: { x: number; width: number },\n renderOrder: ChartRenderOrder,\n): RenderNode[] {\n if (!chart.title) {\n return [];\n }\n\n return [\n {\n ...chartText({\n id: `chart-title-${chart.id}`,\n order: renderOrder.next(),\n bounds,\n frame: { x: plot.x, y: chart.y + 12, width: plot.width, height: 20 },\n text: chart.title,\n chart,\n }),\n ...(chart.titleColor ? { color: chart.titleColor } : {}),\n fontWeight: chart.titleWeight ?? 'bold',\n fontSize: finite(chart.titleSize, Math.max(10, finite(chart.fontSize, 12)) + 2),\n prop: CHART_TITLE_PROP,\n },\n ];\n}\n","import type { Chart } from '../../model/chart';\nimport type { RenderDiagnostic, RenderNode } from '../scene';\n\nimport { buildChartBackdrop } from './chartBackdrop';\nimport { buildChartFrame } from './chartFrame';\nimport { buildOrderedChartLegend } from './chartLegend';\nimport { createChartRenderContext } from './chartRenderContext';\nimport { ChartRenderOrder } from './chartRenderOrder';\nimport { buildChartTitle } from './chartTitle';\nimport { type ChartLayout, decorations } from './decorations';\nimport type { ChartRenderContext } from './renderers';\n\nexport interface ChartFoundation {\n chart: Chart;\n layout: ChartLayout;\n context: ChartRenderContext;\n nodes: RenderNode[];\n renderOrder: ChartRenderOrder;\n}\n\nexport function createChartFoundation(chart: Chart, index: number, diagnostics: RenderDiagnostic[]): ChartFoundation {\n const baseOrder = 20_000 + index;\n const layout = decorations(chart);\n const renderOrder = new ChartRenderOrder(baseOrder);\n const nodes: RenderNode[] = [buildChartFrame(chart, layout.bounds, layout.plot, baseOrder)];\n nodes.push(...buildChartBackdrop(chart, layout.bounds, renderOrder));\n nodes.push(...buildChartTitle(chart, layout.bounds, layout.plot, renderOrder));\n nodes.push(...buildOrderedChartLegend(chart, layout, renderOrder, diagnostics));\n\n return {\n chart,\n layout,\n nodes,\n renderOrder,\n context: createChartRenderContext(chart, layout, renderOrder, diagnostics),\n };\n}\n","import type { RenderNode } from '../scene';\nimport type { ChartFoundation } from './chartFoundation';\nimport { renderChartMarks } from './renderers';\n\nexport function buildPolarChart(foundation: ChartFoundation): RenderNode[] {\n foundation.nodes.push(...renderChartMarks(foundation.context));\n return foundation.nodes;\n}\n","import type { RenderNode } from '../scene';\nimport type { ChartFoundation } from './chartFoundation';\nimport { renderChartMarks } from './renderers';\n\nexport function buildUndecoratedChart(foundation: ChartFoundation): RenderNode[] {\n foundation.nodes.push(...renderChartMarks(foundation.context));\n return foundation.nodes;\n}\n","import type { Chart } from '../../model/chart';\nimport type { RenderDiagnostic, RenderNode } from '../scene';\nimport { buildCartesianChart } from './cartesianChart';\nimport { createChartFoundation } from './chartFoundation';\nimport { hasCartesianDecorations } from './decorations';\nimport { buildPolarChart } from './polarChart';\nimport { isPolarChart } from './renderers';\nimport { buildUndecoratedChart } from './undecoratedChart';\n\nexport function buildChart(chart: Chart, index: number, diagnostics: RenderDiagnostic[]): RenderNode[] {\n if (chart.isVisible === false) {\n return [];\n }\n\n const foundation = createChartFoundation(chart, index, diagnostics);\n if (isPolarChart(chart.chartType)) {\n return buildPolarChart(foundation);\n }\n if (hasCartesianDecorations(chart)) {\n return buildCartesianChart(foundation);\n }\n\n return buildUndecoratedChart(foundation);\n}\n","import type { Chart } from '../../model/chart';\nimport type { RenderDiagnostic, RenderNode } from '../scene';\nimport { tag } from '../scene/tagging';\nimport { buildChart } from './buildChart';\n\nexport function buildCharts(charts: readonly Chart[], diagnostics: RenderDiagnostic[]): RenderNode[] {\n return charts.flatMap((chart, index) =>\n tag(buildChart(chart, index, diagnostics), 'chart', chart.id, chart.chartType, chart.title ?? 'Chart'),\n );\n}\n","import type { RenderInput } from '../../renderInput/types';\nimport { buildComponents } from '../artifacts/component';\nimport { buildContainers } from '../artifacts/containers';\nimport { buildIsometricObjects } from '../artifacts/isometric';\nimport { buildLinks } from '../artifacts/link';\nimport { buildFreeformPaths } from '../artifacts/path';\nimport { buildShapes } from '../artifacts/shape';\nimport { buildCharts } from '../charts';\nimport { EMPTY_BOUNDS } from './bounds';\nimport { stackRank, stackSequence } from './order';\nimport type { MeasureTextFactory } from './textMetrics';\nimport type { Bounds, RenderDiagnostic, RenderNode, RenderScene } from './types';\n\nfunction sceneBounds(nodes: RenderNode[]): Bounds {\n if (!nodes.length) {\n return EMPTY_BOUNDS;\n }\n return {\n minX: Math.min(...nodes.map(n => n.bounds.minX)),\n minY: Math.min(...nodes.map(n => n.bounds.minY)),\n maxX: Math.max(...nodes.map(n => n.bounds.maxX)),\n maxY: Math.max(...nodes.map(n => n.bounds.maxY)),\n };\n}\n\ninterface Stacking {\n rank: number;\n sequence: number;\n}\n\nfunction stackingOf(input: RenderInput): Map<string, Stacking> {\n const stacking = new Map<string, Stacking>();\n const add = (\n role: string,\n objects: ReadonlyArray<Parameters<typeof stackRank>[0] & { id: string }>,\n legacyBase: number,\n ): void => {\n objects.forEach((object, index) => {\n stacking.set(`${role}:${object.id}`, {\n rank: stackRank(object),\n sequence: stackSequence(object, legacyBase + index),\n });\n });\n };\n add('frame', input.frames, 0);\n add('swimlane', input.swimlanes, 5_000);\n add('shape', input.shapes, 10_000);\n add('widget', input.components ?? input.widgets ?? [], 10_000);\n add('isometric', input.isometricObjects ?? [], 15_000);\n add(\n 'link',\n input.links.map(item => item.link),\n 20_000,\n );\n add('chart', input.charts ?? [], 20_000);\n add('path', input.paths ?? [], 30_000);\n return stacking;\n}\n\nfunction stampStacking(nodes: RenderNode[], input: RenderInput): void {\n const stacking = stackingOf(input);\n for (const node of nodes) {\n const stack = node.identity ? stacking.get(`${node.identity.role}:${node.identity.id}`) : undefined;\n node.rank = stack?.rank ?? 0;\n node.sequence = stack?.sequence ?? 0;\n }\n}\n\nexport interface BuildRenderSceneOptions {\n measureText?: MeasureTextFactory;\n}\n\nexport function buildRenderScene(input: RenderInput, options: BuildRenderSceneOptions = {}): RenderScene {\n const { measureText } = options;\n const diagnostics: RenderDiagnostic[] = [...(input.diagnostics ?? [])];\n const nodes: RenderNode[] = [\n ...buildContainers(input),\n ...buildFreeformPaths(input.paths ?? []),\n ...buildCharts(input.charts ?? [], diagnostics),\n ...buildLinks(input.links, measureText),\n ...buildShapes(input.shapes, diagnostics, measureText),\n ...buildComponents(input.components ?? input.widgets ?? []),\n ...buildIsometricObjects(input.isometricObjects ?? []),\n ];\n stampStacking(nodes, input);\n nodes.sort(\n (a, b) =>\n (a.rank ?? 0) - (b.rank ?? 0) ||\n (a.sequence ?? 0) - (b.sequence ?? 0) ||\n a.order - b.order ||\n (a.id < b.id ? -1 : a.id > b.id ? 1 : 0),\n );\n return { nodes, bounds: sceneBounds(nodes), diagnostics };\n}\n","export const xml = (value: unknown): string =>\n String(value)\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#39;');\n\nexport const num = (value: number): string => Number(value.toFixed(3)).toString();\n\nexport const safeId = (value: string): string => `sf-${value.replace(/[^A-Za-z0-9_.:-]/g, '-')}`;\n","import type { SceneStyle } from '../renderScene/scene';\nimport { num, safeId, xml } from './format';\n\nexport class SvgClipDefinitions {\n private readonly ids = new Map<string, string>();\n\n constructor(\n private readonly addDefinition: (definition: string) => void,\n private readonly prefix: string,\n ) {}\n\n clip(style: SceneStyle): string | undefined {\n if (!style.clip) {\n return undefined;\n }\n\n const key = JSON.stringify(style.clip);\n let id = this.ids.get(key);\n if (!id) {\n id = safeId(`${this.prefix}clip-${this.ids.size}`);\n this.ids.set(key, id);\n const clip = style.clip;\n const shape =\n clip.type === 'path'\n ? `<path clip-rule=\"evenodd\" d=\"${xml(clip.d)}\"/>`\n : `<rect x=\"${num(clip.x)}\" y=\"${num(clip.y)}\" width=\"${num(clip.width)}\" height=\"${num(clip.height)}\" rx=\"${num(clip.rx)}\"/>`;\n this.addDefinition(`<clipPath id=\"${id}\">${shape}</clipPath>`);\n }\n return id;\n }\n}\n","import type { SceneStyle } from '../renderScene/scene';\nimport { num, safeId, xml } from './format';\n\nexport class SvgFilterDefinitions {\n private readonly ids = new Map<string, string>();\n\n constructor(\n private readonly addDefinition: (definition: string) => void,\n private readonly prefix: string,\n ) {}\n\n filter(style: SceneStyle, nodeId: string, size?: number): string | undefined {\n if (style.innerShadow) {\n return this.define(nodeId, style.innerShadow, innerShadowPrimitives);\n }\n if (style.shadow) {\n const reach = style.shadow.blur * 1.5 + Math.max(Math.abs(style.shadow.dx), Math.abs(style.shadow.dy));\n return this.define(\n nodeId,\n style.shadow,\n outerShadowPrimitives,\n size && size > 0 ? Math.max(0.5, reach / size) : 0.5,\n );\n }\n if (style.blur || style.saturate !== undefined) {\n return this.define(nodeId, { blur: style.blur ?? 0, saturate: style.saturate ?? 1 }, blurPrimitives);\n }\n return undefined;\n }\n\n private define<T>(nodeId: string, value: T, primitives: (value: T) => string, margin = 0.5): string {\n const key = JSON.stringify(value) + primitives.name + margin;\n let id = this.ids.get(key);\n if (!id) {\n id = safeId(`${this.prefix}shadow-${nodeId}-${this.ids.size}`);\n this.ids.set(key, id);\n this.addDefinition(\n `<filter id=\"${id}\" x=\"${num(-margin * 100)}%\" y=\"${num(-margin * 100)}%\" width=\"${num((1 + margin * 2) * 100)}%\" height=\"${num((1 + margin * 2) * 100)}%\">${primitives(value)}</filter>`,\n );\n }\n return id;\n }\n}\n\nfunction outerShadowPrimitives(shadow: NonNullable<SceneStyle['shadow']>): string {\n return `<feDropShadow dx=\"${num(shadow.dx)}\" dy=\"${num(shadow.dy)}\" stdDeviation=\"${num(shadow.blur / 2)}\" flood-color=\"${xml(shadow.color)}\" flood-opacity=\"${num(shadow.opacity)}\"/>`;\n}\n\nfunction blurPrimitives(effect: { blur: number; saturate: number }): string {\n const blur = effect.blur > 0 ? `<feGaussianBlur stdDeviation=\"${num(effect.blur / 2)}\"/>` : '';\n const saturate = effect.saturate === 1 ? '' : `<feColorMatrix type=\"saturate\" values=\"${num(effect.saturate)}\"/>`;\n return blur + saturate;\n}\n\nfunction innerShadowPrimitives(shadow: NonNullable<SceneStyle['shadow']>): string {\n return [\n '<feComponentTransfer in=\"SourceAlpha\" result=\"sf-inverted-alpha\">',\n '<feFuncA type=\"table\" tableValues=\"1 0\"/>',\n '</feComponentTransfer>',\n `<feGaussianBlur in=\"sf-inverted-alpha\" stdDeviation=\"${num(shadow.blur / 2)}\" result=\"sf-blurred\"/>`,\n `<feOffset in=\"sf-blurred\" dx=\"${num(shadow.dx)}\" dy=\"${num(shadow.dy)}\" result=\"sf-offset\"/>`,\n `<feFlood flood-color=\"${xml(shadow.color)}\" flood-opacity=\"${num(shadow.opacity)}\" result=\"sf-color\"/>`,\n '<feComposite in=\"sf-color\" in2=\"sf-offset\" operator=\"in\" result=\"sf-halo\"/>',\n '<feComposite in=\"sf-halo\" in2=\"SourceGraphic\" operator=\"in\" result=\"sf-inset\"/>',\n '<feComposite in=\"sf-inset\" in2=\"SourceGraphic\" operator=\"over\"/>',\n ].join('');\n}\n","import type { MarkerType } from '../model/link';\nimport { num } from './format';\n\nexport function markerBody(\n type: Exclude<MarkerType, 'none'>,\n size: number,\n color: string,\n strokeWidth: number,\n): string {\n const bodies: Record<Exclude<MarkerType, 'none'>, string> = {\n arrow: `<path d=\"M ${num(-size)} ${num(-size * 0.6)} L 0 0 L ${num(-size)} ${num(size * 0.6)}\" fill=\"none\" stroke=\"${color}\" stroke-width=\"${num(strokeWidth)}\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>`,\n filled_arrow: `<path d=\"M ${num(-size)} ${num(-size * 0.6)} L 0 0 L ${num(-size)} ${num(size * 0.6)} Z\" fill=\"${color}\" stroke=\"${color}\" stroke-width=\"${num(strokeWidth * 0.5)}\" stroke-linejoin=\"round\"/>`,\n circle: `<circle cx=\"0\" cy=\"0\" r=\"${num(size * 0.5)}\" fill=\"white\" stroke=\"${color}\" stroke-width=\"${num(strokeWidth)}\"/>`,\n filled_circle: `<circle cx=\"0\" cy=\"0\" r=\"${num(size * 0.5)}\" fill=\"${color}\"/>`,\n diamond: `<path d=\"M ${num(-size * 0.6)} 0 L 0 ${num(-size * 0.6)} L ${num(size * 0.6)} 0 L 0 ${num(size * 0.6)} Z\" fill=\"white\" stroke=\"${color}\" stroke-width=\"${num(strokeWidth)}\"/>`,\n filled_diamond: `<path d=\"M ${num(-size * 0.6)} 0 L 0 ${num(-size * 0.6)} L ${num(size * 0.6)} 0 L 0 ${num(size * 0.6)} Z\" fill=\"${color}\" stroke=\"${color}\" stroke-width=\"${num(strokeWidth * 0.5)}\"/>`,\n bar: `<path d=\"M 0 ${num(-size * 0.6)} V ${num(size * 0.6)}\" stroke=\"${color}\" stroke-width=\"${num(strokeWidth)}\" stroke-linecap=\"round\"/>`,\n triangle: `<path d=\"M ${num(-size)} ${num(-size * 0.72)} L 0 0 L ${num(-size)} ${num(size * 0.72)} Z\" fill=\"white\" stroke=\"${color}\" stroke-width=\"${num(strokeWidth)}\" stroke-linejoin=\"round\"/>`,\n one: `<path d=\"M 0 ${num(-size * 0.62)} V ${num(size * 0.62)} M ${num(-size * 0.72)} ${num(-size * 0.62)} V ${num(size * 0.62)}\" stroke=\"${color}\" stroke-width=\"${num(strokeWidth)}\"/>`,\n zero_one: `<circle cx=\"${num(-size * 0.8)}\" cy=\"0\" r=\"${num(size * 0.38)}\" fill=\"white\" stroke=\"${color}\" stroke-width=\"${num(strokeWidth)}\"/><path d=\"M 0 ${num(-size * 0.62)} V ${num(size * 0.62)}\" stroke=\"${color}\" stroke-width=\"${num(strokeWidth)}\"/>`,\n many: `<path d=\"M ${num(-size)} ${num(-size * 0.72)} L 0 0 M ${num(-size)} 0 L 0 0 M ${num(-size)} ${num(size * 0.72)} L 0 0\" stroke=\"${color}\" stroke-width=\"${num(strokeWidth)}\" stroke-linecap=\"round\"/>`,\n one_many: `<path d=\"M ${num(-size)} ${num(-size * 0.72)} L 0 0 M ${num(-size)} 0 L 0 0 M ${num(-size)} ${num(size * 0.72)} L 0 0 M ${num(-size * 1.45)} ${num(-size * 0.62)} V ${num(size * 0.62)}\" stroke=\"${color}\" stroke-width=\"${num(strokeWidth)}\" stroke-linecap=\"round\"/>`,\n zero_many: `<circle cx=\"${num(-size * 1.45)}\" cy=\"0\" r=\"${num(size * 0.38)}\" fill=\"white\" stroke=\"${color}\" stroke-width=\"${num(strokeWidth)}\"/><path d=\"M ${num(-size)} ${num(-size * 0.72)} L 0 0 M ${num(-size)} 0 L 0 0 M ${num(-size)} ${num(size * 0.72)} L 0 0\" stroke=\"${color}\" stroke-width=\"${num(strokeWidth)}\" stroke-linecap=\"round\"/>`,\n };\n return bodies[type];\n}\n","import type { MarkerType } from '../model/link';\nimport { num, safeId, xml } from './format';\nimport { markerBody } from './markerBodies';\n\nfunction markerExtent(type: Exclude<MarkerType, 'none'>, size: number, strokeWidth: number): number {\n const isCompoundErMarker = type === 'one_many' || type === 'zero_many';\n return Math.max(size * (isCompoundErMarker ? 2 : 1.4), strokeWidth * 2);\n}\n\nfunction markerAttributes(id: string, extent: number): string {\n return `id=\"${id}\" markerWidth=\"${num(extent * 2)}\" markerHeight=\"${num(extent * 2)}\" viewBox=\"${num(-extent)} ${num(-extent)} ${num(extent * 2)} ${num(extent * 2)}\" refX=\"0\" refY=\"0\" orient=\"auto-start-reverse\" markerUnits=\"userSpaceOnUse\" overflow=\"visible\"`;\n}\n\nexport class SvgMarkerDefinitions {\n private readonly ids = new Map<string, string>();\n\n constructor(\n private readonly addDefinition: (definition: string) => void,\n private readonly prefix: string,\n ) {}\n\n marker(type: MarkerType | undefined, color: string, strokeWidth: number): string | undefined {\n if (!type || type === 'none') {\n return undefined;\n }\n\n const key = `${type}:${color}:${strokeWidth}`;\n let id = this.ids.get(key);\n if (id) {\n return id;\n }\n\n id = safeId(`${this.prefix}marker-${type}-${this.ids.size}`);\n this.ids.set(key, id);\n const size = 12 + (strokeWidth - 2) * 3;\n const extent = markerExtent(type, size, strokeWidth);\n const attributes = markerAttributes(id, extent);\n this.addDefinition(`<marker ${attributes}>${markerBody(type, size, xml(color), strokeWidth)}</marker>`);\n return id;\n }\n}\n","import type { RenderNode, ScenePaint } from '../renderScene/scene';\nimport { num, safeId, xml } from './format';\n\ntype GradientPaint = Exclude<ScenePaint, { kind: 'none' } | { kind: 'solid' }>;\n\nfunction meshGradientDefinition(id: string, paint: Extract<GradientPaint, { kind: 'mesh-gradient' }>): string {\n const radialIds = paint.points.map((_point, index) => safeId(`${id}-point-${index}`));\n const radialDefinitions = paint.points\n .map((point, index) => {\n const centerX = Math.max(0, Math.min(100, point.x));\n const centerY = Math.max(0, Math.min(100, point.y));\n return `<radialGradient id=\"${radialIds[index]}\" gradientUnits=\"objectBoundingBox\" cx=\"${num(centerX)}%\" cy=\"${num(centerY)}%\" r=\"75%\"><stop offset=\"0%\" stop-color=\"${xml(point.color)}\" stop-opacity=\"1\"/><stop offset=\"100%\" stop-color=\"${xml(point.color)}\" stop-opacity=\"0\"/></radialGradient>`;\n })\n .join('');\n const layers = paint.points\n .map((_point, index) => `<rect width=\"1\" height=\"1\" fill=\"url(#${radialIds[index]})\"/>`)\n .join('');\n return `${radialDefinitions}<pattern id=\"${id}\" patternUnits=\"objectBoundingBox\" patternContentUnits=\"objectBoundingBox\" width=\"1\" height=\"1\"><rect width=\"1\" height=\"1\" fill=\"${xml(paint.points[0]?.color ?? 'transparent')}\"/>${layers}</pattern>`;\n}\n\nfunction linearGradientDefinition(\n id: string,\n paint: Extract<GradientPaint, { kind: 'linear-gradient' }>,\n bounds: RenderNode['bounds'],\n): string {\n const angle = (paint.angle * Math.PI) / 180;\n const centerX = (bounds.minX + bounds.maxX) / 2;\n const centerY = (bounds.minY + bounds.maxY) / 2;\n const radius = Math.max(bounds.maxX - bounds.minX, bounds.maxY - bounds.minY) / 2;\n const deltaX = Math.cos(angle) * radius;\n const deltaY = Math.sin(angle) * radius;\n const stops = paint.stops\n .map(stop => `<stop offset=\"${num(Math.max(0, Math.min(100, stop.offset)))}%\" stop-color=\"${xml(stop.color)}\"/>`)\n .join('');\n return `<linearGradient id=\"${id}\" gradientUnits=\"userSpaceOnUse\" x1=\"${num(centerX - deltaX)}\" y1=\"${num(centerY - deltaY)}\" x2=\"${num(centerX + deltaX)}\" y2=\"${num(centerY + deltaY)}\">${stops}</linearGradient>`;\n}\n\nexport class SvgPaintDefinitions {\n private readonly ids = new Map<string, string>();\n\n constructor(\n private readonly addDefinition: (definition: string) => void,\n private readonly prefix: string,\n ) {}\n\n paint(value: ScenePaint | undefined, nodeId: string, bounds: RenderNode['bounds']): string {\n if (!value || value.kind === 'none') {\n return 'none';\n }\n if (value.kind === 'solid') {\n return value.color;\n }\n\n const key = JSON.stringify(value) + JSON.stringify(bounds);\n let id = this.ids.get(key);\n if (!id) {\n id = safeId(`${this.prefix}gradient-${nodeId}-${this.ids.size}`);\n this.ids.set(key, id);\n const definition =\n value.kind === 'mesh-gradient'\n ? meshGradientDefinition(id, value)\n : linearGradientDefinition(id, value, bounds);\n this.addDefinition(definition);\n }\n return `url(#${id})`;\n }\n}\n","import type { MarkerType } from '../model/link';\nimport type { RenderNode, ScenePaint, SceneStyle } from '../renderScene/scene';\nimport { SvgClipDefinitions } from './clipDefinitions';\nimport { SvgFilterDefinitions } from './filterDefinitions';\nimport { safeId } from './format';\nimport { SvgMarkerDefinitions } from './markerDefinitions';\nimport { SvgPaintDefinitions } from './paintDefinitions';\n\nexport class SvgDefinitionRegistry {\n entries: string[] = [];\n private readonly paints: SvgPaintDefinitions;\n private readonly filters: SvgFilterDefinitions;\n private readonly markers: SvgMarkerDefinitions;\n private readonly clips: SvgClipDefinitions;\n\n constructor(private readonly prefix: string) {\n const addDefinition = (definition: string): void => {\n this.entries.push(definition);\n };\n this.paints = new SvgPaintDefinitions(addDefinition, prefix);\n this.filters = new SvgFilterDefinitions(addDefinition, prefix);\n this.markers = new SvgMarkerDefinitions(addDefinition, prefix);\n this.clips = new SvgClipDefinitions(addDefinition, prefix);\n }\n\n elementId(id: string): string {\n return safeId(`${this.prefix}${id}`);\n }\n\n paint(value: ScenePaint | undefined, nodeId: string, bounds: RenderNode['bounds']): string {\n return this.paints.paint(value, nodeId, bounds);\n }\n\n filter(style: SceneStyle, nodeId: string, size?: number): string | undefined {\n return this.filters.filter(style, nodeId, size);\n }\n\n marker(type: MarkerType | undefined, color: string, strokeWidth: number): string | undefined {\n return this.markers.marker(type, color, strokeWidth);\n }\n\n clip(style: SceneStyle): string | undefined {\n return this.clips.clip(style);\n }\n}\n","import type { RenderNode, ScenePath } from '../renderScene/scene';\n\nconst HIT_WIDTH = 16;\n\nfunction hitAreaFor(path: ScenePath, linkId: string): ScenePath {\n return {\n type: 'path',\n id: `link-hit-${linkId}`,\n order: path.order,\n rank: path.rank,\n sequence: path.sequence,\n bounds: path.bounds,\n d: path.d,\n identity: { role: 'link', id: linkId },\n style: {\n fill: { kind: 'none' },\n stroke: { kind: 'solid', color: '#000000' },\n strokeWidth: HIT_WIDTH,\n opacity: 0,\n pointerEvents: 'stroke',\n },\n };\n}\n\nexport function withLinkHitAreas(nodes: RenderNode[]): RenderNode[] {\n return nodes.flatMap(node =>\n node.type === 'path' && node.identity?.role === 'link' && node.identity.primary\n ? [node, hitAreaFor(node, node.identity.id)]\n : [node],\n );\n}\n","import type { RenderNode, SceneShaderSurface, SceneStyle, SceneText } from '../renderScene/scene';\nimport type { SvgDefinitionRegistry } from './definitions';\nimport { num, xml } from './format';\n\nfunction strokeColorAt(style: SceneStyle, edge: 'start' | 'end'): string {\n const paint = style.stroke;\n if (paint?.kind === 'solid') {\n return paint.color;\n }\n if (paint?.kind === 'linear-gradient' && paint.stops.length) {\n const pick =\n edge === 'start'\n ? paint.stops.reduce((a, b) => (a.offset <= b.offset ? a : b))\n : paint.stops.reduce((a, b) => (a.offset >= b.offset ? a : b));\n return pick.color;\n }\n if (paint?.kind === 'mesh-gradient' && paint.points.length) {\n return paint.points[0].color;\n }\n return '#64748b';\n}\n\ntype StyledRenderNode = Exclude<\n RenderNode,\n SceneText | SceneShaderSurface | Extract<RenderNode, { type: 'rolling-number' | 'image' }>\n>;\n\nexport function styleAttrs(node: StyledRenderNode, defs: SvgDefinitionRegistry): string {\n const stroke = defs.paint(node.style.stroke, `${node.id}-stroke`, node.bounds);\n const fill = defs.paint(node.style.fill, `${node.id}-fill`, node.bounds);\n const attrs = [`fill=\"${xml(fill)}\"`, `stroke=\"${xml(stroke)}\"`];\n addStrokeAttrs(attrs, node.style);\n addVisualEffectAttrs(attrs, node, defs);\n addPathMarkerAttrs(attrs, node, defs);\n return attrs.join(' ');\n}\n\nfunction addStrokeAttrs(attrs: string[], style: SceneStyle): void {\n if (style.strokeWidth !== undefined) {\n attrs.push(`stroke-width=\"${num(style.strokeWidth)}\"`);\n }\n if (style.dash?.length) {\n attrs.push(`stroke-dasharray=\"${style.dash.map(num).join(' ')}\"`);\n }\n if (style.lineCap) {\n attrs.push(`stroke-linecap=\"${style.lineCap}\"`);\n }\n if (style.lineJoin) {\n attrs.push(`stroke-linejoin=\"${style.lineJoin}\"`);\n }\n if (style.opacity !== undefined) {\n attrs.push(`opacity=\"${num(style.opacity)}\"`);\n }\n if (style.pointerEvents) {\n attrs.push(`pointer-events=\"${style.pointerEvents}\"`);\n }\n}\n\nfunction elementSize(node: object): number | undefined {\n const shape = node as { type?: string; rx?: number; ry?: number; width?: number; height?: number };\n if (shape.type === 'ellipse' && shape.rx !== undefined && shape.ry !== undefined) {\n return Math.min(shape.rx, shape.ry) * 2;\n }\n if (shape.type === 'rect' && shape.width !== undefined && shape.height !== undefined) {\n return Math.min(shape.width, shape.height);\n }\n return undefined;\n}\n\nfunction addVisualEffectAttrs(\n attrs: string[],\n node: { id: string; style: SceneStyle },\n defs: SvgDefinitionRegistry,\n): void {\n const filter = defs.filter(node.style, node.id, elementSize(node));\n if (filter) {\n attrs.push(`filter=\"url(#${filter})\"`);\n }\n const clip = defs.clip(node.style);\n if (clip) {\n attrs.push(`clip-path=\"url(#${clip})\"`);\n }\n}\n\nfunction addPathMarkerAttrs(attrs: string[], node: StyledRenderNode, defs: SvgDefinitionRegistry): void {\n if (node.type !== 'path') {\n return;\n }\n const start = defs.marker(node.markerStart, strokeColorAt(node.style, 'start'), node.style.strokeWidth ?? 1);\n const end = defs.marker(node.markerEnd, strokeColorAt(node.style, 'end'), node.style.strokeWidth ?? 1);\n if (start) {\n attrs.push(`marker-start=\"url(#${start})\"`);\n }\n if (end) {\n attrs.push(`marker-end=\"url(#${end})\"`);\n }\n}\n\nexport function transform(rotation?: number, center?: { x: number; y: number }): string {\n return rotation && center ? ` transform=\"rotate(${num(rotation)} ${num(center.x)} ${num(center.y)})\"` : '';\n}\n\nexport function imageAttrs(node: Extract<RenderNode, { type: 'image' }>, defs: SvgDefinitionRegistry): string {\n const attrs: string[] = [];\n if (node.style.opacity !== undefined) {\n attrs.push(`opacity=\"${num(node.style.opacity)}\"`);\n }\n if (node.style.pointerEvents) {\n attrs.push(`pointer-events=\"${node.style.pointerEvents}\"`);\n }\n addVisualEffectAttrs(attrs, node, defs);\n return attrs.join(' ');\n}\n","import type { RenderNode, SceneAria, SceneDetail, SceneIdentity } from '../renderScene/scene';\nimport {\n CORNER_RADIUS_ATTR,\n ISOMETRIC_LABEL_OFFSET_ATTR,\n ISOMETRIC_SIZE_ATTR,\n PATH_CLOSED_ATTR,\n PATH_POINTS_ATTR,\n PATH_TENSION_ATTR,\n SQUARE_CORNER_ATTR,\n SYMBOL_BOUNDS_ATTR,\n SYMBOL_POINTS_ATTR,\n SYMBOL_TENSION_ATTR,\n} from './domContract/attributes';\nimport { num, xml } from './format';\n\nfunction domRole(identity: SceneIdentity): string {\n return identity.role === 'shape' ? 'entity' : identity.role;\n}\n\nfunction ariaAttrs(aria: SceneAria): Array<string | undefined> {\n return [\n `role=\"${xml(aria.role)}\"`,\n aria.checked === undefined ? undefined : `aria-checked=\"${aria.checked}\"`,\n aria.pressed === undefined ? undefined : `aria-pressed=\"${aria.pressed}\"`,\n aria.disabled ? 'aria-disabled=\"true\"' : undefined,\n ];\n}\n\nfunction identityAttrs(identity: SceneIdentity): Array<string | undefined> {\n return [\n `data-sf-role=\"${domRole(identity)}\"`,\n `data-sf-id=\"${xml(identity.id)}\"`,\n identity.kind ? `data-sf-kind=\"${xml(identity.kind)}\"` : undefined,\n identity.primary ? 'data-sf-primary=\"true\"' : undefined,\n identity.parentFrameId ? `data-sf-parent-frame=\"${xml(identity.parentFrameId)}\"` : undefined,\n ...(identity.aria ? ariaAttrs(identity.aria) : []),\n ];\n}\n\nfunction detailAttrs(detail: SceneDetail): Array<string | undefined> {\n switch (detail.of) {\n case 'chartValue':\n return chartValueAttrs(detail);\n case 'chartScale':\n return chartScaleAttrs(detail);\n case 'chartSeries':\n return chartSeriesAttrs(detail);\n case 'pieGeometry':\n return pieGeometryAttrs(detail);\n case 'radarGeometry':\n return radarGeometryAttrs(detail);\n case 'link':\n return linkDetailAttrs(detail);\n case 'frameBoundary':\n return frameBoundaryAttrs(detail);\n case 'symbolGeometry':\n return symbolGeometryAttrs(detail);\n case 'declaredBounds':\n return [declaredBoundsAttr(detail.bounds)];\n case 'pathGeometry':\n return pathGeometryAttrs(detail);\n case 'isometricGeometry':\n return isometricGeometryAttrs(detail);\n }\n}\n\nfunction chartValueAttrs(detail: Extract<SceneDetail, { of: 'chartValue' }>): Array<string | undefined> {\n return [\n `data-sf-series=\"${xml(detail.series)}\"`,\n `data-sf-value-index=\"${detail.valueIndex}\"`,\n detail.mark ? `data-sf-mark=\"${detail.mark}\"` : undefined,\n detail.radius !== undefined ? `data-sf-bar-radius=\"${num(detail.radius)}\"` : undefined,\n detail.colorProp ? `data-sf-color-prop=\"${xml(detail.colorProp)}\"` : undefined,\n detail.hasColorOverride ? 'data-sf-color-override=\"true\"' : undefined,\n detail.pieStart !== undefined ? `data-sf-pie-start=\"${num(detail.pieStart)}\"` : undefined,\n detail.pieEnd !== undefined ? `data-sf-pie-end=\"${num(detail.pieEnd)}\"` : undefined,\n detail.pieValue !== undefined ? `data-sf-pie-value=\"${num(detail.pieValue)}\"` : undefined,\n ];\n}\n\nfunction pieGeometryAttrs(detail: Extract<SceneDetail, { of: 'pieGeometry' }>): string[] {\n return [`data-sf-pie-geometry=\"${detail.pieGeometry}\"`];\n}\n\nfunction radarGeometryAttrs(detail: Extract<SceneDetail, { of: 'radarGeometry' }>): string[] {\n return [`data-sf-radar-geometry=\"${detail.radarGeometry}\"`];\n}\n\nfunction chartScaleAttrs(detail: Extract<SceneDetail, { of: 'chartScale' }>): string[] {\n return [`data-sf-value-scale=\"${detail.valueScale}\"`];\n}\n\nfunction chartSeriesAttrs(detail: Extract<SceneDetail, { of: 'chartSeries' }>): Array<string | undefined> {\n return [\n `data-sf-series=\"${xml(detail.series)}\"`,\n detail.lineTension !== undefined ? `data-sf-line-tension=\"${num(detail.lineTension)}\"` : undefined,\n detail.mark ? `data-sf-mark=\"${xml(detail.mark)}\"` : undefined,\n detail.pulled ? 'data-sf-label-pulled=\"true\"' : undefined,\n detail.midAngle !== undefined ? `data-sf-pie-mid-angle=\"${num(detail.midAngle)}\"` : undefined,\n detail.wedgeRadius !== undefined ? `data-sf-pie-wedge-radius=\"${num(detail.wedgeRadius)}\"` : undefined,\n ];\n}\n\nfunction frameBoundaryAttrs(detail: Extract<SceneDetail, { of: 'frameBoundary' }>): string[] {\n return [`${CORNER_RADIUS_ATTR}=\"${num(detail.cornerRadius)}\"`, `${SQUARE_CORNER_ATTR}=\"${detail.squareCorner}\"`];\n}\n\nfunction declaredBoundsAttr(bounds: { x: number; y: number; width: number; height: number }): string {\n return `${SYMBOL_BOUNDS_ATTR}=\"${num(bounds.x)},${num(bounds.y)},${num(bounds.width)},${num(bounds.height)}\"`;\n}\n\nfunction symbolGeometryAttrs(detail: Extract<SceneDetail, { of: 'symbolGeometry' }>): string[] {\n return [\n `${SYMBOL_POINTS_ATTR}=\"${xml(JSON.stringify(detail.points))}\"`,\n `${SYMBOL_TENSION_ATTR}=\"${num(detail.tension)}\"`,\n declaredBoundsAttr(detail.declaredBounds),\n ];\n}\n\nfunction pathGeometryAttrs(detail: Extract<SceneDetail, { of: 'pathGeometry' }>): string[] {\n return [\n `${PATH_POINTS_ATTR}=\"${xml(JSON.stringify(detail.points))}\"`,\n `${PATH_TENSION_ATTR}=\"${num(detail.tension)}\"`,\n `${PATH_CLOSED_ATTR}=\"${detail.closed}\"`,\n ];\n}\n\nfunction isometricGeometryAttrs(detail: Extract<SceneDetail, { of: 'isometricGeometry' }>): string[] {\n return [\n `${ISOMETRIC_SIZE_ATTR}=\"${num(detail.width)},${num(detail.height)},${num(detail.depth)}\"`,\n `${CORNER_RADIUS_ATTR}=\"${num(detail.cornerRadius)}\"`,\n declaredBoundsAttr(detail.bounds),\n `${ISOMETRIC_LABEL_OFFSET_ATTR}=\"${num(detail.labelOffsetX)},${num(detail.labelOffsetY)}\"`,\n ];\n}\n\nfunction linkDetailAttrs(detail: Extract<SceneDetail, { of: 'link' }>): Array<string | undefined> {\n return [\n detail.fromId ? `data-sf-from=\"${xml(detail.fromId)}\"` : undefined,\n detail.toId ? `data-sf-to=\"${xml(detail.toId)}\"` : undefined,\n detail.route ? `data-sf-route=\"${detail.route}\"` : undefined,\n detail.fromSide ? `data-sf-from-side=\"${detail.fromSide}\"` : undefined,\n detail.toSide ? `data-sf-to-side=\"${detail.toSide}\"` : undefined,\n detail.segments ? `data-sf-link-segments=\"${xml(JSON.stringify(detail.segments))}\"` : undefined,\n detail.fromFace ? `data-sf-from-face=\"${detail.fromFace}\"` : undefined,\n detail.toFace ? `data-sf-to-face=\"${detail.toFace}\"` : undefined,\n detail.labelGap ? 'data-sf-label-gap=\"true\"' : undefined,\n ];\n}\n\nexport function contractAttrs(node: RenderNode): string {\n const label = node.identity?.label;\n const attributes = [\n ...(node.identity ? identityAttrs(node.identity) : []),\n ...(node.detail ? detailAttrs(node.detail) : []),\n node.prop ? `data-sf-prop=\"${xml(node.prop)}\"` : undefined,\n node.propKind ? `data-sf-prop-kind=\"${node.propKind}\"` : undefined,\n node.propSolidOnly ? 'data-sf-prop-solid-only=\"true\"' : undefined,\n node.mark ? `data-sf-mark=\"${xml(node.mark)}\"` : undefined,\n node.zoneGradient ? 'data-sf-zone-gradient=\"true\"' : undefined,\n node.zoneGradient ? `data-sf-zone-axis-min=\"${num(node.zoneGradient.min)}\"` : undefined,\n node.zoneGradient ? `data-sf-zone-axis-max=\"${num(node.zoneGradient.max)}\"` : undefined,\n label ? `tabindex=\"0\" aria-label=\"${xml(label.replace(/\\s+/g, ' ').trim())}\"` : undefined,\n ].filter((attribute): attribute is string => attribute !== undefined);\n\n return attributes.length ? ` ${attributes.join(' ')}` : '';\n}\n","import type { SceneText } from '../renderScene/scene';\nimport { transform } from './attributes';\nimport { contractAttrs } from './contract';\nimport type { SvgDefinitionRegistry } from './definitions';\nimport { num, xml } from './format';\n\ntype TextPosition = {\n x: number;\n firstY: number;\n linePx: number;\n anchor: 'start' | 'middle' | 'end';\n};\n\nfunction richLineTspans(\n words: Array<{ text: string; bold: boolean }>,\n x: number,\n dy: string,\n fontSize: string,\n): string {\n if (!words.length) {\n return `<tspan x=\"${num(x)}\"${dy} font-size=\"${fontSize}\"></tspan>`;\n }\n const groups: Array<{ text: string; bold: boolean }> = [];\n for (const word of words) {\n const prev = groups[groups.length - 1];\n if (prev && prev.bold === word.bold) {\n prev.text += ` ${word.text}`;\n } else {\n if (prev) {\n prev.text += ' ';\n }\n groups.push({ text: word.text, bold: word.bold });\n }\n }\n return groups\n .map(\n (group, i) =>\n `<tspan${i === 0 ? ` x=\"${num(x)}\"${dy}` : ''} font-size=\"${fontSize}\" font-weight=\"${group.bold ? 'bold' : 'normal'}\">${xml(group.text)}</tspan>`,\n )\n .join('');\n}\n\nexport function textSvg(node: SceneText, defs: SvgDefinitionRegistry): string {\n const position = textPosition(node);\n const fontSize = `${num(node.fontSize)}px`;\n const content = textContent(node, position, fontSize);\n const preserve = node.richLines ? ' xml:space=\"preserve\"' : '';\n return `<text id=\"${defs.elementId(node.id)}\"${contractAttrs(node)} x=\"${num(position.x)}\" y=\"${num(position.firstY)}\" font-family=\"${xml(node.fontFamily)}\" font-size=\"${fontSize}\" font-weight=\"${node.fontWeight}\"${node.letterSpacing ? ` letter-spacing=\"${num(node.letterSpacing)}\"` : ''} fill=\"${xml(node.color)}\" text-anchor=\"${position.anchor}\" data-sf-valign=\"${node.verticalAlign}\" data-sf-line-height=\"${num(node.lineHeight)}\"${preserve}${transform(node.rotation, node.rotationCenter)}>${content}</text>`;\n}\n\nfunction textPosition(node: SceneText): TextPosition {\n const linePx = node.fontSize * node.lineHeight;\n const lineCount = node.richLines ? node.richLines.length : node.lines.length;\n const contentHeight = lineCount * linePx;\n const x = node.align === 'left' ? node.x : node.align === 'right' ? node.x + node.width : node.x + node.width / 2;\n const anchor = node.align === 'left' ? 'start' : node.align === 'right' ? 'end' : 'middle';\n return { x, firstY: firstTextBaseline(node, contentHeight), linePx, anchor };\n}\n\nfunction firstTextBaseline(node: SceneText, contentHeight: number): number {\n if (node.verticalAlign === 'top') {\n return node.y + node.fontSize;\n }\n if (node.verticalAlign === 'bottom') {\n return node.y + node.height - contentHeight + node.fontSize;\n }\n return node.y + (node.height - contentHeight) / 2 + node.fontSize;\n}\n\nfunction textContent(node: SceneText, position: TextPosition, fontSize: string): string {\n if (node.richLines) {\n return node.richLines\n .map((words, index) => richLineTspans(words, position.x, lineOffset(index, position.linePx), fontSize))\n .join('');\n }\n return node.lines.map((line, index) => lineTspan(line, index, position, fontSize)).join('');\n}\n\nfunction lineTspan(line: string, index: number, position: TextPosition, fontSize: string): string {\n return `<tspan x=\"${num(position.x)}\" font-size=\"${fontSize}\"${lineOffset(index, position.linePx)}>${xml(line)}</tspan>`;\n}\n\nfunction lineOffset(index: number, linePx: number): string {\n return index ? ` dy=\"${num(linePx)}px\"` : '';\n}\n","import type { RenderNode } from '../renderScene/scene';\nimport { imageAttrs, styleAttrs, transform } from './attributes';\nimport { contractAttrs } from './contract';\nimport type { SvgDefinitionRegistry } from './definitions';\nimport { num, xml } from './format';\nimport { textSvg } from './text';\n\nfunction shaderSurfaceSvg(node: Extract<RenderNode, { type: 'shader-surface' }>, defs: SvgDefinitionRegistry): string {\n const rotation = transform(node.rotation, { x: node.x + node.width / 2, y: node.y + node.height / 2 });\n const parameters = xml(JSON.stringify(node.shader.parameters));\n const fillColor = node.fillColor ? ` data-sf-shader-fill=\"${xml(node.fillColor)}\"` : '';\n return `<foreignObject id=\"${defs.elementId(node.id)}\"${contractAttrs(node)} data-sf-shader=\"${xml(node.shader.program)}\" data-sf-shader-name=\"${xml(node.shader.name)}\" data-sf-shader-params=\"${parameters}\" data-sf-shader-mask=\"${node.mask}\"${fillColor} x=\"${num(node.x)}\" y=\"${num(node.y)}\" width=\"${num(node.width)}\" height=\"${num(node.height)}\"${rotation} pointer-events=\"${node.shader.program === 'ruler' || node.identity?.role === 'widget' ? 'all' : 'none'}\"><canvas xmlns=\"http://www.w3.org/1999/xhtml\" data-sf-shader-canvas=\"true\" style=\"display:block;width:100%;height:100%;pointer-events:none\"></canvas></foreignObject>`;\n}\n\nfunction rollingDigitSvg(character: string, node: Extract<RenderNode, { type: 'rolling-number' }>): string {\n const style = node.componentStyle;\n if (style.variant === 'plain') {\n return `<span xmlns=\"http://www.w3.org/1999/xhtml\" data-sf-rolling-digit=\"true\" style=\"position:relative;display:inline-block;width:.62em;height:1.1em;overflow:hidden\"><span data-sf-rolling-current=\"true\" style=\"position:absolute;inset:0;display:grid;place-items:center;color:${xml(style.color)};font-weight:${xml(style.fontWeight)};line-height:1\">${xml(character)}</span></span>`;\n }\n return `<span xmlns=\"http://www.w3.org/1999/xhtml\" data-sf-rolling-digit=\"true\" style=\"position:relative;display:inline-block;width:.72em;height:1.2em;overflow:hidden;border:1px solid ${xml(style.divider)};border-radius:.09em;background:${xml(style.surface)};box-shadow:inset 0 1px 0 rgba(255,255,255,.7),inset 0 -.16em .38em rgba(0,0,0,.12)\"><span data-sf-rolling-current=\"true\" style=\"position:absolute;inset:0;display:grid;place-items:center;color:${xml(style.color)};font-weight:300;line-height:1\">${xml(character)}</span><span style=\"position:absolute;z-index:2;left:0;right:0;top:50%;height:1px;background:${xml(style.divider)};pointer-events:none\"></span></span>`;\n}\n\nfunction rollingNumberSvg(node: Extract<RenderNode, { type: 'rolling-number' }>, defs: SvgDefinitionRegistry): string {\n const rotation = transform(node.rotation, { x: node.x + node.width / 2, y: node.y + node.height / 2 });\n const fontSize =\n node.componentStyle.fontSize > 0\n ? node.componentStyle.fontSize\n : Math.max(1, Math.min(node.width, node.height) * 0.28);\n const label = node.label\n ? `<span xmlns=\"http://www.w3.org/1999/xhtml\" style=\"margin-bottom:.14em;color:${xml(node.componentStyle.labelColor)};font-size:.16em;font-weight:600;letter-spacing:.24em;line-height:1\">${xml(node.label)}</span>`\n : '';\n const digits = [...node.value].map(character => rollingDigitSvg(character, node)).join('');\n const componentStyle = xml(JSON.stringify(node.componentStyle));\n return `<foreignObject id=\"${defs.elementId(node.id)}\"${contractAttrs(node)} data-sf-widget=\"rollingNumber\" data-sf-widget-value=\"${xml(node.value)}\" data-sf-widget-digits=\"${node.digits ?? ''}\" data-sf-widget-duration=\"${num(node.duration)}\" data-sf-widget-style=\"${componentStyle}\" x=\"${num(node.x)}\" y=\"${num(node.y)}\" width=\"${num(node.width)}\" height=\"${num(node.height)}\"${rotation}><div xmlns=\"http://www.w3.org/1999/xhtml\" style=\"width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;font-family:${xml(node.componentStyle.fontFamily)};font-size:${num(fontSize)}px\">${label}<div data-sf-rolling-digits=\"true\" aria-label=\"${xml(node.value)}\" style=\"display:flex;gap:${node.componentStyle.variant === 'plain' ? '.02em' : '.1em'};font-size:1em\">${digits}</div></div></foreignObject>`;\n}\n\nexport function nodeSvg(node: RenderNode, defs: SvgDefinitionRegistry): string {\n if (node.type === 'text') {\n return textSvg(node, defs);\n }\n if (node.type === 'shader-surface') {\n return shaderSurfaceSvg(node, defs);\n }\n if (node.type === 'rolling-number') {\n return rollingNumberSvg(node, defs);\n }\n if (node.type === 'image') {\n return `<image id=\"${defs.elementId(node.id)}\"${contractAttrs(node)} ${imageAttrs(node, defs)} href=\"${xml(node.href)}\" x=\"${num(node.x)}\" y=\"${num(node.y)}\" width=\"${num(node.width)}\" height=\"${num(node.height)}\" preserveAspectRatio=\"xMidYMid slice\"/>`;\n }\n const attrs = `id=\"${defs.elementId(node.id)}\"${contractAttrs(node)} ${styleAttrs(node, defs)}`;\n if (node.type === 'rect') {\n return `<rect ${attrs} x=\"${num(node.x)}\" y=\"${num(node.y)}\" width=\"${num(node.width)}\" height=\"${num(node.height)}\"${node.rx ? ` rx=\"${num(node.rx)}\"` : ''}${transform(node.rotation, { x: node.x + node.width / 2, y: node.y + node.height / 2 })}/>`;\n }\n if (node.type === 'ellipse') {\n return `<ellipse ${attrs} cx=\"${num(node.cx)}\" cy=\"${num(node.cy)}\" rx=\"${num(node.rx)}\" ry=\"${num(node.ry)}\"${transform(node.rotation, { x: node.cx, y: node.cy })}/>`;\n }\n return `<path ${attrs} d=\"${xml(node.d)}\"${transform(node.rotation, node.rotationCenter)}/>`;\n}\n","import type { RenderScene } from '../renderScene/scene';\nimport { SvgDefinitionRegistry } from './definitions';\nimport { DOM_CONTRACT_VERSION } from './domContract/version';\nimport { num } from './format';\nimport { withLinkHitAreas } from './linkHitAreas';\nimport { nodeSvg } from './nodes';\nimport type { SvgRenderOptions, SvgRenderResult } from './types';\n\nexport function renderSvgDocument(scene: RenderScene, options: SvgRenderOptions = {}): SvgRenderResult {\n const padding = options.padding ?? 16;\n const width = Math.max(1, scene.bounds.maxX - scene.bounds.minX + padding * 2);\n const height = Math.max(1, scene.bounds.maxY - scene.bounds.minY + padding * 2);\n const viewBox = `${num(scene.bounds.minX - padding)} ${num(scene.bounds.minY - padding)} ${num(width)} ${num(height)}`;\n const defs = new SvgDefinitionRegistry(options.idPrefix ? `${options.idPrefix}-` : '');\n const nodes = options.linkHitAreas ? withLinkHitAreas(scene.nodes) : scene.nodes;\n const body = nodes.map(node => nodeSvg(node, defs)).join('\\n ');\n const declaration = options.includeXmlDeclaration === false ? '' : '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n';\n const svg = `${declaration}<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"${num(width)}px\" height=\"${num(height)}px\" viewBox=\"${viewBox}\" role=\"img\" data-sf-contract=\"${DOM_CONTRACT_VERSION}\">\\n <defs>${defs.entries.join('')}</defs>\\n ${body}\\n</svg>`;\n return { svg, width, height, diagnostics: scene.diagnostics };\n}\n","import type { RenderScene } from '../renderScene/scene';\nimport { renderSvgDocument } from './document';\nimport type { SvgRenderOptions, SvgRenderResult } from './types';\n\nexport type { SvgRenderOptions, SvgRenderResult } from './types';\n\nexport function renderSceneToSvg(scene: RenderScene, options: SvgRenderOptions = {}): SvgRenderResult {\n return renderSvgDocument(scene, options);\n}\n","import {\n type ComponentDescriptor,\n componentRegistryVersion,\n type GenericComponent,\n registerComponentDescriptor,\n} from './model/component';\nimport { sflToRenderInput } from './renderInput/fromSfl';\nimport type { RenderInput } from './renderInput/types';\nimport { registerComponentBuilder } from './renderScene/artifacts/component';\nimport type { MeasureTextFactory, RenderDiagnostic, RenderNode, RenderScene } from './renderScene/scene';\nimport { buildRenderScene } from './renderScene/scene/build';\nimport { renderSceneToSvg } from './svg';\n\nexport interface RenderResult {\n svg: string;\n width: number;\n height: number;\n diagnostics: RenderDiagnostic[];\n scene: RenderScene;\n}\n\nexport interface RenderOptions {\n padding?: number;\n includeXmlDeclaration?: boolean;\n idPrefix?: string;\n measureText?: MeasureTextFactory;\n linkHitAreas?: boolean;\n}\n\nexport function renderCanvas(input: RenderInput, options: RenderOptions = {}): RenderResult {\n const scene = buildRenderScene(input, { measureText: options.measureText });\n const { svg, width, height, diagnostics } = renderSceneToSvg(scene, options);\n return { svg, width, height, diagnostics, scene };\n}\n\nconst SCENE_CACHE_LIMIT = 50;\nconst sceneCache = new Map<string, RenderScene>();\nlet cachedForRegistry = componentRegistryVersion();\n\nfunction cachedRenderScene(source: string): RenderScene {\n const registry = componentRegistryVersion();\n if (registry !== cachedForRegistry) {\n sceneCache.clear();\n cachedForRegistry = registry;\n }\n const cached = sceneCache.get(source);\n if (cached) {\n sceneCache.delete(source);\n sceneCache.set(source, cached);\n return cached;\n }\n const scene = buildRenderScene(sflToRenderInput(source));\n sceneCache.set(source, scene);\n if (sceneCache.size > SCENE_CACHE_LIMIT) {\n const oldest = sceneCache.keys().next().value;\n if (oldest !== undefined) {\n sceneCache.delete(oldest);\n }\n }\n return scene;\n}\n\nexport function render(source: string, options: RenderOptions = {}): RenderResult {\n if (options.measureText) {\n return renderCanvas(sflToRenderInput(source), options);\n }\n const scene = cachedRenderScene(source);\n const { svg, width, height, diagnostics } = renderSceneToSvg(scene, options);\n return { svg, width, height, diagnostics, scene };\n}\n\nexport interface ComponentSceneContext {\n order: number;\n}\n\nexport interface ComponentDefinition extends ComponentDescriptor {\n scene(component: GenericComponent, context: ComponentSceneContext): RenderNode[];\n}\n\nconst SCENE_ORDER_BASE = 10_000;\n\nexport function defineComponent(definition: ComponentDefinition): () => void {\n const { scene, ...descriptor } = definition;\n const unregisterDescriptor = registerComponentDescriptor(descriptor);\n const unregisterBuilder = registerComponentBuilder(descriptor.type, (component, index) =>\n scene(component as GenericComponent, { order: SCENE_ORDER_BASE + index }),\n );\n return () => {\n unregisterBuilder();\n unregisterDescriptor();\n };\n}\n"]}