@bestagentkits/render 0.1.1-next.1 → 0.2.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 (113) hide show
  1. package/CHANGELOG.md +109 -0
  2. package/README.md +189 -34
  3. package/assets/fonts/bricolage-grotesque/OFL.txt +93 -0
  4. package/assets/fonts/fraunces/OFL.txt +93 -0
  5. package/assets/fonts/geist/OFL.txt +93 -0
  6. package/assets/fonts/inter-tight/OFL.txt +93 -0
  7. package/assets/fonts/jetbrains-mono/OFL.txt +93 -0
  8. package/assets/fonts/plus-jakarta-sans/OFL.txt +93 -0
  9. package/dist/cli.d.ts +2 -0
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +51 -10
  12. package/dist/cli.js.map +1 -1
  13. package/dist/mcp-server.d.ts +37 -0
  14. package/dist/mcp-server.d.ts.map +1 -0
  15. package/dist/mcp-server.js +274 -0
  16. package/dist/mcp-server.js.map +1 -0
  17. package/dist/registry/roster.d.ts +1 -1
  18. package/dist/registry/roster.d.ts.map +1 -1
  19. package/dist/registry/roster.js +222 -6
  20. package/dist/registry/roster.js.map +1 -1
  21. package/dist/render/block-helpers.d.ts +52 -0
  22. package/dist/render/block-helpers.d.ts.map +1 -0
  23. package/dist/render/block-helpers.js +113 -0
  24. package/dist/render/block-helpers.js.map +1 -0
  25. package/dist/render/blocks.d.ts +3 -4
  26. package/dist/render/blocks.d.ts.map +1 -1
  27. package/dist/render/blocks.js +126 -121
  28. package/dist/render/blocks.js.map +1 -1
  29. package/dist/render/charts.d.ts +5 -0
  30. package/dist/render/charts.d.ts.map +1 -1
  31. package/dist/render/charts.js +205 -90
  32. package/dist/render/charts.js.map +1 -1
  33. package/dist/render/derived-variables.d.ts +17 -0
  34. package/dist/render/derived-variables.d.ts.map +1 -0
  35. package/dist/render/derived-variables.js +17 -0
  36. package/dist/render/derived-variables.js.map +1 -0
  37. package/dist/render/diagram-fallback.d.ts +25 -0
  38. package/dist/render/diagram-fallback.d.ts.map +1 -0
  39. package/dist/render/diagram-fallback.js +86 -0
  40. package/dist/render/diagram-fallback.js.map +1 -0
  41. package/dist/render/document.d.ts +4 -0
  42. package/dist/render/document.d.ts.map +1 -1
  43. package/dist/render/document.js +34 -6
  44. package/dist/render/document.js.map +1 -1
  45. package/dist/render/effects-styles.d.ts +14 -0
  46. package/dist/render/effects-styles.d.ts.map +1 -0
  47. package/dist/render/effects-styles.js +39 -0
  48. package/dist/render/effects-styles.js.map +1 -0
  49. package/dist/render/embedded-fonts.generated.d.ts +22 -0
  50. package/dist/render/embedded-fonts.generated.d.ts.map +1 -0
  51. package/dist/render/embedded-fonts.generated.js +59 -0
  52. package/dist/render/embedded-fonts.generated.js.map +1 -0
  53. package/dist/render/feature-styles.d.ts +14 -0
  54. package/dist/render/feature-styles.d.ts.map +1 -0
  55. package/dist/render/feature-styles.js +161 -0
  56. package/dist/render/feature-styles.js.map +1 -0
  57. package/dist/render/font-faces.d.ts +22 -0
  58. package/dist/render/font-faces.d.ts.map +1 -0
  59. package/dist/render/font-faces.js +60 -0
  60. package/dist/render/font-faces.js.map +1 -0
  61. package/dist/render/outline.d.ts +21 -0
  62. package/dist/render/outline.d.ts.map +1 -0
  63. package/dist/render/outline.js +44 -0
  64. package/dist/render/outline.js.map +1 -0
  65. package/dist/render/render.d.ts.map +1 -1
  66. package/dist/render/render.js +53 -10
  67. package/dist/render/render.js.map +1 -1
  68. package/dist/render/runtime.d.ts.map +1 -1
  69. package/dist/render/runtime.js +184 -10
  70. package/dist/render/runtime.js.map +1 -1
  71. package/dist/render/showcase-blocks.d.ts +47 -0
  72. package/dist/render/showcase-blocks.d.ts.map +1 -0
  73. package/dist/render/showcase-blocks.js +349 -0
  74. package/dist/render/showcase-blocks.js.map +1 -0
  75. package/dist/render/showcase-styles.d.ts +15 -0
  76. package/dist/render/showcase-styles.d.ts.map +1 -0
  77. package/dist/render/showcase-styles.js +217 -0
  78. package/dist/render/showcase-styles.js.map +1 -0
  79. package/dist/render/signature-styles.d.ts +18 -0
  80. package/dist/render/signature-styles.d.ts.map +1 -0
  81. package/dist/render/signature-styles.js +41 -0
  82. package/dist/render/signature-styles.js.map +1 -0
  83. package/dist/render/styles.d.ts +18 -9
  84. package/dist/render/styles.d.ts.map +1 -1
  85. package/dist/render/styles.js +224 -128
  86. package/dist/render/styles.js.map +1 -1
  87. package/dist/render/surface-styles.d.ts +24 -0
  88. package/dist/render/surface-styles.d.ts.map +1 -0
  89. package/dist/render/surface-styles.js +41 -0
  90. package/dist/render/surface-styles.js.map +1 -0
  91. package/dist/render/verify.d.ts.map +1 -1
  92. package/dist/render/verify.js +30 -0
  93. package/dist/render/verify.js.map +1 -1
  94. package/dist/spec/normalize.d.ts.map +1 -1
  95. package/dist/spec/normalize.js +32 -0
  96. package/dist/spec/normalize.js.map +1 -1
  97. package/dist/theme/load-theme.d.ts +2 -2
  98. package/dist/theme/load-theme.d.ts.map +1 -1
  99. package/dist/theme/load-theme.js +46 -10
  100. package/dist/theme/load-theme.js.map +1 -1
  101. package/dist/theme/presets.d.ts +4 -3
  102. package/dist/theme/presets.d.ts.map +1 -1
  103. package/dist/theme/presets.js +35 -18
  104. package/dist/theme/presets.js.map +1 -1
  105. package/dist/theme/tokens.d.ts.map +1 -1
  106. package/dist/theme/tokens.js +4 -4
  107. package/dist/theme/tokens.js.map +1 -1
  108. package/dist/version.d.ts +1 -1
  109. package/dist/version.d.ts.map +1 -1
  110. package/dist/version.js +1 -1
  111. package/dist/version.js.map +1 -1
  112. package/llms.txt +25 -0
  113. package/package.json +9 -3
@@ -8,101 +8,193 @@
8
8
  *
9
9
  * All geometry is rounded to two decimals before it reaches the markup, because
10
10
  * floating-point noise would otherwise break byte-determinism across engines.
11
+ *
12
+ * Colour never appears here: shapes carry a series class (`ak-chart-s0` …
13
+ * `ak-chart-s5`) and the stylesheet maps each class onto the theme accent and
14
+ * hue rotations of it, so a chart always follows the active preset and colour
15
+ * scheme and no two series share a colour.
11
16
  */
12
17
  import { escapeAttribute, escapeText, renderAttributes } from './escape.js';
13
- const WIDTH = 640;
14
- const HEIGHT = 240;
15
- const PADDING = { top: 16, right: 16, bottom: 36, left: 44 };
18
+ /**
19
+ * Shared viewBox width. Text inside the SVG scales with the rendered width, so
20
+ * this is sized for a full-width card: labels render near their nominal size
21
+ * there, and the canvas scrolls rather than shrinks on narrow screens.
22
+ */
23
+ const WIDTH = 800;
24
+ /** Number of distinct series colours the stylesheet defines. */
25
+ const PALETTE_SIZE = 6;
26
+ /** Bars wider than this read as slabs rather than marks. */
27
+ const MAX_BAR_WIDTH = 56;
28
+ const PROGRESS_ROW = 32;
29
+ const PROGRESS_LABEL_WIDTH = 132;
30
+ const CARTESIAN = { width: WIDTH, height: 300, top: 20, right: 36, bottom: 36, left: 56 };
31
+ const RADIAL = { width: WIDTH, height: 240, top: 0, right: 0, bottom: 0, left: 0 };
32
+ const SPARK = { width: WIDTH, height: 72, top: 10, right: 10, bottom: 10, left: 10 };
16
33
  function round(value) {
17
34
  return Math.round(value * 100) / 100;
18
35
  }
19
- function extent(series) {
20
- const values = series.flatMap((entry) => entry.values);
21
- if (values.length === 0)
22
- return { min: 0, max: 1 };
23
- const min = Math.min(0, ...values);
24
- const max = Math.max(...values);
25
- return max === min ? { min, max: min + 1 } : { min, max };
36
+ /** Group digits with a thin comma, deterministically and without locale data. */
37
+ function formatNumber(value) {
38
+ const rounded = round(value);
39
+ const [whole = '0', fraction] = String(Math.abs(rounded)).split('.');
40
+ const grouped = whole.replace(/\B(?=(\d{3})+(?!\d))/gu, ',');
41
+ return `${rounded < 0 ? '-' : ''}${grouped}${fraction === undefined ? '' : `.${fraction}`}`;
42
+ }
43
+ function seriesClass(index) {
44
+ return `ak-chart-s${index % PALETTE_SIZE}`;
26
45
  }
27
- function plotWidth() {
28
- return WIDTH - PADDING.left - PADDING.right;
46
+ /** Round a span up to 1, 2, 2.5 or 5 times a power of ten, so ticks read cleanly. */
47
+ function niceStep(span, count) {
48
+ const raw = span / Math.max(count, 1);
49
+ const magnitude = 10 ** Math.floor(Math.log10(raw));
50
+ const normalized = raw / magnitude;
51
+ const factor = [1, 2, 2.5, 5].find((candidate) => normalized <= candidate) ?? 10;
52
+ return factor * magnitude;
29
53
  }
30
- function plotHeight() {
31
- return HEIGHT - PADDING.top - PADDING.bottom;
54
+ /** Axis bounds that include zero and end on a clean tick. */
55
+ function niceBounds(series) {
56
+ const values = series.flatMap((entry) => entry.values).filter((value) => Number.isFinite(value));
57
+ const rawMin = Math.min(0, ...values);
58
+ const rawMax = Math.max(0, ...values);
59
+ if (rawMax === rawMin)
60
+ return { min: rawMin, max: rawMin + 1, step: 0.25 };
61
+ const step = niceStep(rawMax - rawMin, 4);
62
+ return {
63
+ min: Math.floor(rawMin / step) * step,
64
+ max: Math.ceil(rawMax / step) * step,
65
+ step,
66
+ };
32
67
  }
33
- function scaleY(value, bounds) {
68
+ function plotWidth(frame) {
69
+ return frame.width - frame.left - frame.right;
70
+ }
71
+ function plotHeight(frame) {
72
+ return frame.height - frame.top - frame.bottom;
73
+ }
74
+ function scaleY(value, bounds, frame) {
34
75
  const ratio = (value - bounds.min) / (bounds.max - bounds.min);
35
- return round(PADDING.top + plotHeight() * (1 - ratio));
76
+ return round(frame.top + plotHeight(frame) * (1 - ratio));
36
77
  }
37
- function scaleX(index, count) {
78
+ /** Point charts span the plot edge to edge. */
79
+ function pointX(index, count, frame) {
38
80
  if (count <= 1)
39
- return round(PADDING.left + plotWidth() / 2);
40
- return round(PADDING.left + (plotWidth() * index) / (count - 1));
81
+ return round(frame.left + plotWidth(frame) / 2);
82
+ return round(frame.left + (plotWidth(frame) * index) / (count - 1));
83
+ }
84
+ /** Bar groups sit in equal bands, labelled at the band centre. */
85
+ function bandCentre(index, count, frame) {
86
+ const band = plotWidth(frame) / Math.max(count, 1);
87
+ return round(frame.left + band * index + band / 2);
88
+ }
89
+ function gridAndTicks(bounds, frame) {
90
+ const parts = [];
91
+ const steps = Math.round((bounds.max - bounds.min) / bounds.step);
92
+ for (let index = 0; index <= steps; index += 1) {
93
+ const value = round(bounds.min + bounds.step * index);
94
+ const y = scaleY(value, bounds, frame);
95
+ parts.push(`<line class="${value === 0 ? 'ak-chart-axis' : 'ak-chart-grid'}" x1="${frame.left}" y1="${y}" x2="${frame.width - frame.right}" y2="${y}"/>`);
96
+ parts.push(`<text class="ak-chart-label" x="${frame.left - 8}" y="${round(y + 4)}" text-anchor="end">${escapeText(formatNumber(value))}</text>`);
97
+ }
98
+ return parts.join('');
41
99
  }
42
- function axisLabels(labels, bounds) {
100
+ function categoryLabels(labels, position, frame) {
43
101
  const parts = [];
44
102
  const step = Math.max(1, Math.ceil(labels.length / 8));
45
103
  for (let index = 0; index < labels.length; index += step) {
46
- const x = scaleX(index, labels.length);
47
- parts.push(`<text class="ak-chart-label" x="${x}" y="${HEIGHT - PADDING.bottom + 16}" text-anchor="middle">${escapeText(labels[index] ?? '')}</text>`);
48
- }
49
- parts.push(`<line class="ak-chart-axis" x1="${PADDING.left}" y1="${PADDING.top}" x2="${PADDING.left}" y2="${HEIGHT - PADDING.bottom}"/>`);
50
- parts.push(`<line class="ak-chart-axis" x1="${PADDING.left}" y1="${HEIGHT - PADDING.bottom}" x2="${WIDTH - PADDING.right}" y2="${HEIGHT - PADDING.bottom}"/>`);
51
- parts.push(`<text class="ak-chart-label" x="${PADDING.left - 6}" y="${scaleY(bounds.max, bounds) + 3}" text-anchor="end">${escapeText(String(round(bounds.max)))}</text>`);
52
- if (bounds.min < 0) {
53
- parts.push(`<text class="ak-chart-label" x="${PADDING.left - 6}" y="${scaleY(bounds.min, bounds) + 3}" text-anchor="end">${escapeText(String(round(bounds.min)))}</text>`);
104
+ parts.push(`<text class="ak-chart-label" x="${position(index)}" y="${frame.height - frame.bottom + 20}" text-anchor="middle">${escapeText(labels[index] ?? '')}</text>`);
54
105
  }
55
106
  return parts.join('');
56
107
  }
57
108
  function pointTitle(label, series, index) {
58
109
  return `${label}: ${series.label} ${series.values[index] ?? 0}`;
59
110
  }
60
- function barChart(input, bounds) {
61
- const groups = input.labels.length;
111
+ /**
112
+ * A value label drawn directly after its mark. The stylesheet reveals it while
113
+ * the mark is hovered or focused (`mark:hover + .ak-chart-value`), so the exact
114
+ * number is one pointer move away without a tooltip script.
115
+ */
116
+ function valueLabel(x, y, value) {
117
+ return `<text class="ak-chart-value" x="${round(x)}" y="${round(y)}" text-anchor="middle" aria-hidden="true">${escapeText(formatNumber(value))}</text>`;
118
+ }
119
+ /** Fragment-safe id prefix for gradients, derived from the block id. */
120
+ function gradientId(input, seriesIndex) {
121
+ return `ak-grad-${input.id.replace(/[^A-Za-z0-9_-]/gu, '-')}-${seriesIndex}`;
122
+ }
123
+ function barChart(input) {
124
+ const frame = CARTESIAN;
125
+ const bounds = niceBounds(input.series);
126
+ const groups = Math.max(input.labels.length, 1);
62
127
  const seriesCount = Math.max(input.series.length, 1);
63
- const groupWidth = plotWidth() / Math.max(groups, 1);
64
- const barWidth = round(Math.max(2, (groupWidth - 8) / seriesCount));
128
+ const band = plotWidth(frame) / groups;
129
+ const gap = Math.min(4, band * 0.04);
130
+ const barWidth = round(Math.max(2, Math.min(MAX_BAR_WIDTH, (band * 0.72 - gap * (seriesCount - 1)) / seriesCount)));
131
+ const groupWidth = barWidth * seriesCount + gap * (seriesCount - 1);
132
+ const zeroY = scaleY(Math.max(bounds.min, 0), bounds, frame);
65
133
  const parts = [];
66
- const zeroY = scaleY(Math.max(bounds.min, 0), bounds);
134
+ // One gradient per series: full strength at the cap, easing off toward the
135
+ // baseline, so a bar reads as lit from above instead of a flat slab.
136
+ const defs = input.series.map((_, seriesIndex) => `<linearGradient id="${gradientId(input, seriesIndex)}" class="${seriesClass(seriesIndex)}" x1="0" y1="0" x2="0" y2="1"><stop class="ak-chart-stop ak-chart-stop--bar" offset="0"/><stop class="ak-chart-stop ak-chart-stop--bar ak-chart-stop--end" offset="1"/></linearGradient>`);
67
137
  input.series.forEach((series, seriesIndex) => {
68
138
  input.labels.forEach((label, index) => {
69
139
  const value = series.values[index] ?? 0;
70
- const x = round(PADDING.left + groupWidth * index + 4 + seriesIndex * barWidth);
71
- const y = scaleY(value, bounds);
140
+ const x = round(bandCentre(index, groups, frame) - groupWidth / 2 + seriesIndex * (barWidth + gap));
141
+ const y = scaleY(value, bounds, frame);
72
142
  const height = round(Math.abs(zeroY - y));
73
143
  const top = Math.min(y, zeroY);
74
- parts.push(`<rect class="ak-chart-bar${seriesIndex % 2 === 1 ? ' ak-chart-bar--alt' : ''}" tabindex="0" x="${x}" y="${top}" width="${barWidth}" height="${height}"><title>${escapeText(pointTitle(label, series, index))}</title></rect>`);
144
+ parts.push(`<rect class="ak-chart-bar ${seriesClass(seriesIndex)}" tabindex="0" x="${x}" y="${top}" width="${barWidth}" height="${height}" rx="${round(Math.min(4, barWidth / 4))}" fill="url(#${gradientId(input, seriesIndex)})"><title>${escapeText(pointTitle(label, series, index))}</title></rect>`, valueLabel(x + barWidth / 2, value < 0 ? top + height + 14 : top - 7, value));
75
145
  });
76
146
  });
77
- return `${axisLabels(input.labels, bounds)}${parts.join('')}`;
147
+ return `<defs>${defs.join('')}</defs>${gridAndTicks(bounds, frame)}${categoryLabels(input.labels, (index) => bandCentre(index, groups, frame), frame)}${parts.join('')}`;
78
148
  }
79
- function linePath(series, bounds) {
80
- return series.values
81
- .map((value, index) => `${index === 0 ? 'M' : 'L'}${scaleX(index, series.values.length)},${scaleY(value, bounds)}`)
149
+ function linePath(values, bounds, frame) {
150
+ return values
151
+ .map((value, index) => `${index === 0 ? 'M' : 'L'}${pointX(index, values.length, frame)},${scaleY(value, bounds, frame)}`)
82
152
  .join(' ');
83
153
  }
84
- function lineChart(input, bounds, area) {
154
+ function lineChart(input, area) {
155
+ const frame = CARTESIAN;
156
+ const bounds = niceBounds(input.series);
85
157
  const parts = [];
86
- input.series.forEach((series) => {
87
- const path = linePath(series, bounds);
158
+ const baseY = scaleY(Math.max(bounds.min, 0), bounds, frame);
159
+ const defs = [];
160
+ input.series.forEach((series, seriesIndex) => {
161
+ const colour = seriesClass(seriesIndex);
162
+ const path = linePath(series.values, bounds, frame);
88
163
  if (area) {
89
- const baseY = scaleY(Math.max(bounds.min, 0), bounds);
90
- parts.push(`<path class="ak-chart-area" d="${path} L${scaleX(series.values.length - 1, series.values.length)},${baseY} L${PADDING.left},${baseY} Z"/>`);
164
+ // Stops inherit the series colour through the gradient's series class,
165
+ // so the fade stays theme-driven while the path references it by id.
166
+ const id = gradientId(input, seriesIndex);
167
+ defs.push(`<linearGradient id="${id}" class="${colour}" x1="0" y1="0" x2="0" y2="1"><stop class="ak-chart-stop" offset="0"/><stop class="ak-chart-stop ak-chart-stop--end" offset="1"/></linearGradient>`);
168
+ parts.push(`<path class="ak-chart-area ${colour}" fill="url(#${id})" d="${path} L${pointX(series.values.length - 1, series.values.length, frame)},${baseY} L${pointX(0, series.values.length, frame)},${baseY} Z"/>`);
91
169
  }
92
- parts.push(`<path class="ak-chart-line" d="${path}"/>`);
170
+ parts.push(`<path class="ak-chart-line ${colour}" d="${path}"/>`);
93
171
  series.values.forEach((value, index) => {
94
172
  const label = input.labels[Math.min(index, input.labels.length - 1)] ?? '';
95
- parts.push(`<circle class="ak-chart-bar" tabindex="0" cx="${scaleX(index, series.values.length)}" cy="${scaleY(value, bounds)}" r="3"><title>${escapeText(pointTitle(label, series, index))}</title></circle>`);
173
+ const cx = pointX(index, series.values.length, frame);
174
+ const cy = scaleY(value, bounds, frame);
175
+ parts.push(`<circle class="ak-chart-point ${colour}" tabindex="0" cx="${cx}" cy="${cy}" r="4"><title>${escapeText(pointTitle(label, series, index))}</title></circle>`, valueLabel(cx, cy - 12, value));
96
176
  });
97
177
  });
98
- const axis = area ? '' : axisLabels(input.labels, bounds);
99
- return `${axis}${parts.join('')}`;
178
+ const count = Math.max(...input.series.map((series) => series.values.length), input.labels.length, 1);
179
+ const gradients = defs.length === 0 ? '' : `<defs>${defs.join('')}</defs>`;
180
+ return `${gradients}${gridAndTicks(bounds, frame)}${categoryLabels(input.labels, (index) => pointX(index, count, frame), frame)}${parts.join('')}`;
100
181
  }
101
- function sparkline(input, bounds) {
182
+ /** A sparkline is a trend glyph, so it scales to its own data range, not to zero. */
183
+ function sparkline(input) {
184
+ const frame = SPARK;
185
+ const values = input.series.flatMap((series) => series.values);
186
+ const low = values.length === 0 ? 0 : Math.min(...values);
187
+ const high = values.length === 0 ? 1 : Math.max(...values);
188
+ const bounds = high === low ? { min: low - 1, max: high + 1 } : { min: low, max: high };
102
189
  const parts = [];
103
- for (const series of input.series) {
104
- parts.push(`<path class="ak-chart-line" d="${linePath(series, bounds)}"/>`);
105
- }
190
+ input.series.forEach((series, seriesIndex) => {
191
+ const colour = seriesClass(seriesIndex);
192
+ parts.push(`<path class="ak-chart-line ${colour}" d="${linePath(series.values, bounds, frame)}"/>`);
193
+ const last = series.values.length - 1;
194
+ if (last >= 0) {
195
+ parts.push(`<circle class="ak-chart-point ${colour}" cx="${pointX(last, series.values.length, frame)}" cy="${scaleY(series.values[last] ?? 0, bounds, frame)}" r="3.5"/>`);
196
+ }
197
+ });
106
198
  return parts.join('');
107
199
  }
108
200
  function radialChart(input, donut) {
@@ -110,15 +202,17 @@ function radialChart(input, donut) {
110
202
  if (series === undefined)
111
203
  return '';
112
204
  const values = input.labels.map((_, index) => Math.max(series.values[index] ?? 0, 0));
113
- const total = values.reduce((sum, value) => sum + value, 0) || 1;
114
- const centreX = WIDTH / 2;
115
- const centreY = HEIGHT / 2;
116
- const radius = 84;
117
- const inner = donut ? 46 : 0;
205
+ const sum = values.reduce((total, value) => total + value, 0);
206
+ const total = sum || 1;
207
+ const centreX = RADIAL.width / 2;
208
+ const centreY = RADIAL.height / 2;
209
+ const radius = 104;
210
+ const inner = donut ? 64 : 0;
118
211
  const parts = [];
119
212
  let angle = -Math.PI / 2;
120
213
  values.forEach((value, index) => {
121
- const sweep = (value / total) * Math.PI * 2;
214
+ // A single full slice cannot be drawn as one arc, so cap it just short.
215
+ const sweep = Math.min((value / total) * Math.PI * 2, Math.PI * 2 - 0.0001);
122
216
  const start = angle;
123
217
  const end = angle + sweep;
124
218
  angle = end;
@@ -129,38 +223,64 @@ function radialChart(input, donut) {
129
223
  const y2 = round(centreY + radius * Math.sin(end));
130
224
  const label = input.labels[index] ?? '';
131
225
  const title = `<title>${escapeText(`${label}: ${value} (${round((value / total) * 100)}%)`)}</title>`;
226
+ const colour = `ak-chart-slice ${seriesClass(index)}`;
132
227
  if (inner > 0) {
133
228
  const ix1 = round(centreX + inner * Math.cos(start));
134
229
  const iy1 = round(centreY + inner * Math.sin(start));
135
230
  const ix2 = round(centreX + inner * Math.cos(end));
136
231
  const iy2 = round(centreY + inner * Math.sin(end));
137
- parts.push(`<path class="ak-chart-bar${index % 2 === 1 ? ' ak-chart-bar--alt' : ''}" tabindex="0" d="M${x1},${y1} A${radius},${radius} 0 ${large} 1 ${x2},${y2} L${ix2},${iy2} A${inner},${inner} 0 ${large} 0 ${ix1},${iy1} Z">${title}</path>`);
232
+ parts.push(`<path class="${colour}" tabindex="0" d="M${x1},${y1} A${radius},${radius} 0 ${large} 1 ${x2},${y2} L${ix2},${iy2} A${inner},${inner} 0 ${large} 0 ${ix1},${iy1} Z">${title}</path>`);
138
233
  }
139
234
  else {
140
- parts.push(`<path class="ak-chart-bar${index % 2 === 1 ? ' ak-chart-bar--alt' : ''}" tabindex="0" d="M${centreX},${centreY} L${x1},${y1} A${radius},${radius} 0 ${large} 1 ${x2},${y2} Z">${title}</path>`);
235
+ parts.push(`<path class="${colour}" tabindex="0" d="M${centreX},${centreY} L${x1},${y1} A${radius},${radius} 0 ${large} 1 ${x2},${y2} Z">${title}</path>`);
141
236
  }
142
237
  });
238
+ if (donut) {
239
+ parts.push(`<text class="ak-chart-total" x="${centreX}" y="${centreY - 2}" text-anchor="middle">${escapeText(formatNumber(sum))}</text><text class="ak-chart-label" x="${centreX}" y="${centreY + 16}" text-anchor="middle">${escapeText(series.label)}</text>`);
240
+ }
143
241
  return parts.join('');
144
242
  }
243
+ function progressFrame(rows) {
244
+ return {
245
+ width: WIDTH,
246
+ height: Math.max(rows, 1) * PROGRESS_ROW,
247
+ top: 0,
248
+ right: 0,
249
+ bottom: 0,
250
+ left: 0,
251
+ };
252
+ }
145
253
  function progressChart(input) {
146
254
  const series = input.series[0];
147
255
  if (series === undefined)
148
256
  return '';
149
257
  const max = Math.max(1, ...series.values);
150
- const rowHeight = 26;
151
- const barWidth = plotWidth();
258
+ const trackStart = PROGRESS_LABEL_WIDTH;
259
+ const trackWidth = WIDTH - trackStart - 56;
152
260
  const parts = [];
153
261
  input.labels.forEach((label, index) => {
154
262
  const value = series.values[index] ?? 0;
155
- const y = PADDING.top + index * rowHeight;
156
- if (y > HEIGHT - PADDING.bottom)
157
- return;
158
- parts.push(`<text class="ak-chart-label" x="0" y="${y + 12}" text-anchor="start">${escapeText(label)}</text>`);
159
- parts.push(`<rect x="${PADDING.left}" y="${y + 4}" width="${barWidth}" height="10" fill="var(--ak-color-surface-raised)"/>`);
160
- parts.push(`<rect class="ak-chart-bar" tabindex="0" x="${PADDING.left}" y="${y + 4}" width="${round((barWidth * Math.max(0, Math.min(value, max))) / max)}" height="10"><title>${escapeText(`${label}: ${value}`)}</title></rect>`);
263
+ const centre = index * PROGRESS_ROW + PROGRESS_ROW / 2;
264
+ const filled = round((trackWidth * Math.max(0, Math.min(value, max))) / max);
265
+ parts.push(`<text class="ak-chart-label ak-chart-label--row" x="0" y="${centre + 4}" text-anchor="start">${escapeText(label)}</text>`);
266
+ parts.push(`<rect class="ak-chart-track" x="${trackStart}" y="${centre - 5}" width="${trackWidth}" height="10" rx="5"/>`);
267
+ parts.push(`<rect class="ak-chart-bar ${seriesClass(0)}" tabindex="0" x="${trackStart}" y="${centre - 5}" width="${filled}" height="10" rx="5"><title>${escapeText(`${label}: ${value}`)}</title></rect>`);
268
+ parts.push(`<text class="ak-chart-label" x="${WIDTH}" y="${centre + 4}" text-anchor="end">${escapeText(formatNumber(value))}</text>`);
161
269
  });
162
270
  return parts.join('');
163
271
  }
272
+ /** A legend whenever colour alone would otherwise have to carry meaning. */
273
+ function legend(input) {
274
+ const radial = input.kind === 'pie' || input.kind === 'donut';
275
+ const entries = radial ? input.labels : input.series.map((series) => series.label);
276
+ if (input.kind === 'progress' || input.kind === 'sparkline')
277
+ return '';
278
+ if (!radial && entries.length < 2)
279
+ return '';
280
+ return `<ul class="ak-chart-legend" aria-hidden="true">${entries
281
+ .map((entry, index) => `<li><span class="ak-chart-swatch ${seriesClass(index)}"></span>${escapeText(entry)}</li>`)
282
+ .join('')}</ul>`;
283
+ }
164
284
  function dataTable(input) {
165
285
  const head = input.labels.map((label) => `<th scope="col">${escapeText(label)}</th>`).join('');
166
286
  const rows = input.series
@@ -184,45 +304,40 @@ function textSummary(input) {
184
304
  });
185
305
  return lines.join('. ');
186
306
  }
187
- /** Render one chart block as a figure containing SVG, a summary, and a table. */
188
- export function renderChart(input) {
189
- const bounds = extent(input.series);
190
- let body;
307
+ function chartBody(input) {
191
308
  switch (input.kind) {
192
309
  case 'bar':
193
- body = barChart(input, bounds);
194
- break;
310
+ return { body: barChart(input), frame: CARTESIAN };
195
311
  case 'line':
196
- body = lineChart(input, bounds, false);
197
- break;
312
+ return { body: lineChart(input, false), frame: CARTESIAN };
198
313
  case 'area':
199
- body = lineChart(input, bounds, true);
200
- break;
314
+ return { body: lineChart(input, true), frame: CARTESIAN };
201
315
  case 'pie':
202
- body = radialChart(input, false);
203
- break;
316
+ return { body: radialChart(input, false), frame: RADIAL };
204
317
  case 'donut':
205
- body = radialChart(input, true);
206
- break;
318
+ return { body: radialChart(input, true), frame: RADIAL };
207
319
  case 'sparkline':
208
- body = sparkline(input, bounds);
209
- break;
320
+ return { body: sparkline(input), frame: SPARK };
210
321
  case 'progress':
211
- body = progressChart(input);
212
- break;
322
+ return { body: progressChart(input), frame: progressFrame(input.labels.length) };
213
323
  default:
214
- body = '';
324
+ return { body: '', frame: CARTESIAN };
215
325
  }
326
+ }
327
+ /** Render one chart block as a figure containing SVG, a summary, and a table. */
328
+ export function renderChart(input) {
329
+ const { body, frame } = chartBody(input);
216
330
  const summary = textSummary(input);
217
331
  const ariaLabel = input.title === undefined ? summary : `${input.title}. ${summary}`;
218
332
  const caption = input.title === undefined ? '' : `<figcaption>${escapeText(input.title)}</figcaption>`;
219
333
  return [
220
334
  `<figure class="ak-chart"${renderAttributes({ 'data-ak-kind': input.kind })}>`,
221
335
  caption,
222
- `<svg viewBox="0 0 ${WIDTH} ${HEIGHT}" role="img"${renderAttributes({
336
+ `<div class="ak-chart-canvas"><svg viewBox="0 0 ${frame.width} ${frame.height}" role="img"${renderAttributes({
223
337
  'aria-label': ariaLabel,
224
338
  'data-ak-chart': input.id,
225
- })}><title>${escapeText(input.title ?? 'Chart')}</title>${body}</svg>`,
339
+ })}><title>${escapeText(input.title ?? 'Chart')}</title>${body}</svg></div>`,
340
+ legend(input),
226
341
  `<p class="ak-sr">${escapeText(summary)}</p>`,
227
342
  `<details class="ak-details"><summary>Chart data table</summary>${dataTable(input)}</details>`,
228
343
  '</figure>',
@@ -1 +1 @@
1
- {"version":3,"file":"charts.js","sourceRoot":"","sources":["../../src/render/charts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"charts.js","sourceRoot":"","sources":["../../src/render/charts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AA8B5E;;;;GAIG;AACH,MAAM,KAAK,GAAG,GAAG,CAAC;AAClB,gEAAgE;AAChE,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,4DAA4D;AAC5D,MAAM,aAAa,GAAG,EAAE,CAAC;AACzB,MAAM,YAAY,GAAG,EAAE,CAAC;AACxB,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAEjC,MAAM,SAAS,GAAU,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AACjG,MAAM,MAAM,GAAU,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC1F,MAAM,KAAK,GAAU,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAE5F,SAAS,KAAK,CAAC,KAAa;IAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACvC,CAAC;AAED,iFAAiF;AACjF,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,CAAC,KAAK,GAAG,GAAG,EAAE,QAAQ,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;IAC7D,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,QAAQ,EAAE,EAAE,CAAC;AAC9F,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,aAAa,KAAK,GAAG,YAAY,EAAE,CAAC;AAC7C,CAAC;AAED,qFAAqF;AACrF,SAAS,QAAQ,CAAC,IAAY,EAAE,KAAa;IAC3C,MAAM,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACpD,MAAM,UAAU,GAAG,GAAG,GAAG,SAAS,CAAC;IACnC,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,UAAU,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;IACjF,OAAO,MAAM,GAAG,SAAS,CAAC;AAC5B,CAAC;AAED,6DAA6D;AAC7D,SAAS,UAAU,CAAC,MAAqB;IACvC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACjG,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;IACtC,IAAI,MAAM,KAAK,MAAM;QAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC3E,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;IAC1C,OAAO;QACL,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI;QACrC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI;QACpC,IAAI;KACL,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAAY;IAC7B,OAAO,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;AAChD,CAAC;AAED,SAAS,UAAU,CAAC,KAAY;IAC9B,OAAO,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;AACjD,CAAC;AAED,SAAS,MAAM,CAAC,KAAa,EAAE,MAAc,EAAE,KAAY;IACzD,MAAM,KAAK,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/D,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,+CAA+C;AAC/C,SAAS,MAAM,CAAC,KAAa,EAAE,KAAa,EAAE,KAAY;IACxD,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAED,kEAAkE;AAClE,SAAS,UAAU,CAAC,KAAa,EAAE,KAAa,EAAE,KAAY;IAC5D,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACnD,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,YAAY,CAAC,MAAiC,EAAE,KAAY;IACnE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAClE,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,KAAK,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;QACtD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACvC,KAAK,CAAC,IAAI,CACR,gBAAgB,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,SAAS,KAAK,CAAC,IAAI,SAAS,CAAC,SAC1F,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KACtB,SAAS,CAAC,KAAK,CAChB,CAAC;QACF,KAAK,CAAC,IAAI,CACR,mCAAmC,KAAK,CAAC,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,uBAAuB,UAAU,CACpG,YAAY,CAAC,KAAK,CAAC,CACpB,SAAS,CACX,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,cAAc,CACrB,MAAgB,EAChB,QAAmC,EACnC,KAAY;IAEZ,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACvD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC;QACzD,KAAK,CAAC,IAAI,CACR,mCAAmC,QAAQ,CAAC,KAAK,CAAC,QAAQ,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,0BAA0B,UAAU,CAC5H,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CACpB,SAAS,CACX,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,EAAE,MAAmB,EAAE,KAAa;IACnE,OAAO,GAAG,KAAK,KAAK,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;AAClE,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,CAAS,EAAE,CAAS,EAAE,KAAa;IACrD,OAAO,mCAAmC,KAAK,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,6CAA6C,UAAU,CACvH,YAAY,CAAC,KAAK,CAAC,CACpB,SAAS,CAAC;AACb,CAAC;AAED,wEAAwE;AACxE,SAAS,UAAU,CAAC,KAAiB,EAAE,WAAmB;IACxD,OAAO,WAAW,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,kBAAkB,EAAE,GAAG,CAAC,IAAI,WAAW,EAAE,CAAC;AAC/E,CAAC;AAED,SAAS,QAAQ,CAAC,KAAiB;IACjC,MAAM,KAAK,GAAG,SAAS,CAAC;IACxB,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;IACvC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,KAAK,CACpB,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAC5F,CAAC;IACF,MAAM,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,GAAG,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;IACpE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,2EAA2E;IAC3E,qEAAqE;IACrE,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAC3B,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,CACjB,uBAAuB,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,YAAY,WAAW,CAAC,WAAW,CAAC,0LAA0L,CACtR,CAAC;IAEF,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;QAC3C,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACpC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,CAAC,GAAG,KAAK,CACb,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,UAAU,GAAG,CAAC,GAAG,WAAW,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,CACnF,CAAC;YACF,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC/B,KAAK,CAAC,IAAI,CACR,6BAA6B,WAAW,CAAC,WAAW,CAAC,qBAAqB,CAAC,QAAQ,GAAG,YAAY,QAAQ,aAAa,MAAM,SAAS,KAAK,CACzI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAC1B,gBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,aAAa,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,iBAAiB,EACzH,UAAU,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,CAC7E,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,SAAS,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,cAAc,CACjF,KAAK,CAAC,MAAM,EACZ,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAC3C,KAAK,CACN,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACvB,CAAC;AAED,SAAS,QAAQ,CAAC,MAAgB,EAAE,MAAc,EAAE,KAAY;IAC9D,OAAO,MAAM;SACV,GAAG,CACF,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACf,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,CACrG;SACA,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,KAAiB,EAAE,IAAa;IACjD,MAAM,KAAK,GAAG,SAAS,CAAC;IACxB,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;QAC3C,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACpD,IAAI,IAAI,EAAE,CAAC;YACT,uEAAuE;YACvE,qEAAqE;YACrE,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAC1C,IAAI,CAAC,IAAI,CACP,uBAAuB,EAAE,YAAY,MAAM,oJAAoJ,CAChM,CAAC;YACF,KAAK,CAAC,IAAI,CACR,8BAA8B,MAAM,gBAAgB,EAAE,SAAS,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,KAAK,KAAK,MAAM,CACvJ,CAAC,EACD,MAAM,CAAC,MAAM,CAAC,MAAM,EACpB,KAAK,CACN,IAAI,KAAK,OAAO,CAClB,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,8BAA8B,MAAM,QAAQ,IAAI,KAAK,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3E,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACtD,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;YACxC,KAAK,CAAC,IAAI,CACR,iCAAiC,MAAM,sBAAsB,EAAE,SAAS,EAAE,kBAAkB,UAAU,CACpG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CACjC,mBAAmB,EACpB,UAAU,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC,CAC/B,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EACrD,KAAK,CAAC,MAAM,CAAC,MAAM,EACnB,CAAC,CACF,CAAC;IACF,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC;IAC3E,OAAO,GAAG,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,cAAc,CAChE,KAAK,CAAC,MAAM,EACZ,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EACtC,KAAK,CACN,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AACvB,CAAC;AAED,qFAAqF;AACrF,SAAS,SAAS,CAAC,KAAiB;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC;IACpB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAC1D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IACxF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;QAC3C,MAAM,MAAM,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CACR,8BAA8B,MAAM,QAAQ,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,KAAK,CACxF,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACtC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YACd,KAAK,CAAC,IAAI,CACR,iCAAiC,MAAM,SAAS,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,MAAM,CACtG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EACxB,MAAM,EACN,KAAK,CACN,aAAa,CACf,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,WAAW,CAAC,KAAiB,EAAE,KAAc;IACpD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACtF,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,GAAG,IAAI,CAAC,CAAC;IACvB,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,GAAG,CAAC;IACnB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IAEzB,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9B,wEAAwE;QACxE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,KAAK,CAAC;QACpB,MAAM,GAAG,GAAG,KAAK,GAAG,KAAK,CAAC;QAC1B,KAAK,GAAG,GAAG,CAAC;QACZ,MAAM,KAAK,GAAG,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QACrD,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;QACrD,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnD,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,UAAU,UAAU,CAAC,GAAG,KAAK,KAAK,KAAK,KAAK,KAAK,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;QACtG,MAAM,MAAM,GAAG,kBAAkB,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YACrD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;YACrD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACnD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YACnD,KAAK,CAAC,IAAI,CACR,gBAAgB,MAAM,sBAAsB,EAAE,IAAI,EAAE,KAAK,MAAM,IAAI,MAAM,MAAM,KAAK,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,GAAG,KAAK,KAAK,IAAI,KAAK,MAAM,KAAK,MAAM,GAAG,IAAI,GAAG,OAAO,KAAK,SAAS,CACrL,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CACR,gBAAgB,MAAM,sBAAsB,OAAO,IAAI,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,MAAM,IAAI,MAAM,MAAM,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,SAAS,CAC/I,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IACH,IAAI,KAAK,EAAE,CAAC;QACV,KAAK,CAAC,IAAI,CACR,mCAAmC,OAAO,QAAQ,OAAO,GAAG,CAAC,0BAA0B,UAAU,CAC/F,YAAY,CAAC,GAAG,CAAC,CAClB,0CAA0C,OAAO,QAAQ,OAAO,GAAG,EAAE,0BAA0B,UAAU,CACxG,MAAM,CAAC,KAAK,CACb,SAAS,CACX,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO;QACL,KAAK,EAAE,KAAK;QACZ,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,YAAY;QACxC,GAAG,EAAE,CAAC;QACN,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;KACR,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAiB;IACtC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACpC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,oBAAoB,CAAC;IACxC,MAAM,UAAU,GAAG,KAAK,GAAG,UAAU,GAAG,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACpC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,KAAK,GAAG,YAAY,GAAG,YAAY,GAAG,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QAC7E,KAAK,CAAC,IAAI,CACR,6DAA6D,MAAM,GAAG,CAAC,yBAAyB,UAAU,CAAC,KAAK,CAAC,SAAS,CAC3H,CAAC;QACF,KAAK,CAAC,IAAI,CACR,mCAAmC,UAAU,QAAQ,MAAM,GAAG,CAAC,YAAY,UAAU,wBAAwB,CAC9G,CAAC;QACF,KAAK,CAAC,IAAI,CACR,6BAA6B,WAAW,CAAC,CAAC,CAAC,qBAAqB,UAAU,QAAQ,MAAM,GAAG,CAAC,YAAY,MAAM,+BAA+B,UAAU,CACrJ,GAAG,KAAK,KAAK,KAAK,EAAE,CACrB,iBAAiB,CACnB,CAAC;QACF,KAAK,CAAC,IAAI,CACR,mCAAmC,KAAK,QAAQ,MAAM,GAAG,CAAC,uBAAuB,UAAU,CACzF,YAAY,CAAC,KAAK,CAAC,CACpB,SAAS,CACX,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,4EAA4E;AAC5E,SAAS,MAAM,CAAC,KAAiB;IAC/B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;IAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACnF,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW;QAAE,OAAO,EAAE,CAAC;IACvE,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAC7C,OAAO,kDAAkD,OAAO;SAC7D,GAAG,CACF,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACf,oCAAoC,WAAW,CAAC,KAAK,CAAC,YAAY,UAAU,CAAC,KAAK,CAAC,OAAO,CAC7F;SACA,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;AACrB,CAAC;AAED,SAAS,SAAS,CAAC,KAAiB;IAClC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/F,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM;SACtB,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACd,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM;aACvB,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC;aAC/E,IAAI,CAAC,EAAE,CAAC,CAAC;QACZ,OAAO,uBAAuB,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC;IAC7E,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,0CAA0C,UAAU,CACzD,KAAK,CAAC,KAAK,IAAI,YAAY,CAC5B,mDAAmD,IAAI,uBAAuB,IAAI,kBAAkB,CAAC;AACxG,CAAC;AAED,SAAS,WAAW,CAAC,KAAiB;IACpC,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS,IAAI,KAAK,CAAC,WAAW,KAAK,EAAE;QAAE,OAAO,KAAK,CAAC,WAAW,CAAC;IAC1F,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACxC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM;aACvB,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;aACtE,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,OAAO,GAAG,MAAM,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;IACrC,CAAC,CAAC,CAAC;IACH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,SAAS,CAAC,KAAiB;IAClC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,KAAK;YACR,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QACrD,KAAK,MAAM;YACT,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC7D,KAAK,MAAM;YACT,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC5D,KAAK,KAAK;YACR,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC5D,KAAK,OAAO;YACV,OAAO,EAAE,IAAI,EAAE,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC3D,KAAK,WAAW;YACd,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAClD,KAAK,UAAU;YACb,OAAO,EAAE,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACnF;YACE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAC1C,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,WAAW,CAAC,KAAiB;IAC3C,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;IACrF,MAAM,OAAO,GACX,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC;IAEzF,OAAO;QACL,2BAA2B,gBAAgB,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG;QAC9E,OAAO;QACP,kDAAkD,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,eAAe,gBAAgB,CAC1G;YACE,YAAY,EAAE,SAAS;YACvB,eAAe,EAAE,KAAK,CAAC,EAAE;SAC1B,CACF,WAAW,UAAU,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,WAAW,IAAI,cAAc;QAC3E,MAAM,CAAC,KAAK,CAAC;QACb,oBAAoB,UAAU,CAAC,OAAO,CAAC,MAAM;QAC7C,kEAAkE,SAAS,CAAC,KAAK,CAAC,YAAY;QAC9F,WAAW;KACZ;SACE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;SAC7B,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED,uFAAuF;AACvF,OAAO,EAAE,eAAe,EAAE,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Derived custom properties, computed from theme tokens.
3
+ *
4
+ * `:root` declares them once, and the night band redeclares them because an
5
+ * inherited custom property carries the root's computed result, not its
6
+ * formula. Both read these constants, so the band and dark mode cannot drift.
7
+ */
8
+ /** Hover wash: a little accent mixed into the surface. */
9
+ export declare const TINT = "--ak-tint:color-mix(in srgb,var(--ak-color-accent) 7%,var(--ak-color-surface))";
10
+ /** Focus halo for inputs and controls. */
11
+ export declare const RING = "--ak-ring:0 0 0 3px color-mix(in srgb,var(--ak-color-accent) 24%,transparent)";
12
+ /**
13
+ * Surface background in dark schemes: a faint top-lit sheen, because the fixed
14
+ * elevation shadows are invisible against a dark page.
15
+ */
16
+ export declare const DARK_FILL = "--ak-fill:linear-gradient(180deg,color-mix(in srgb,var(--ak-color-text) 4%,transparent),transparent 160px),var(--ak-color-surface)";
17
+ //# sourceMappingURL=derived-variables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derived-variables.d.ts","sourceRoot":"","sources":["../../src/render/derived-variables.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,0DAA0D;AAC1D,eAAO,MAAM,IAAI,mFACiE,CAAC;AAEnF,0CAA0C;AAC1C,eAAO,MAAM,IAAI,kFAAkF,CAAC;AAEpG;;;GAGG;AACH,eAAO,MAAM,SAAS,uIACgH,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Derived custom properties, computed from theme tokens.
3
+ *
4
+ * `:root` declares them once, and the night band redeclares them because an
5
+ * inherited custom property carries the root's computed result, not its
6
+ * formula. Both read these constants, so the band and dark mode cannot drift.
7
+ */
8
+ /** Hover wash: a little accent mixed into the surface. */
9
+ export const TINT = '--ak-tint:color-mix(in srgb,var(--ak-color-accent) 7%,var(--ak-color-surface))';
10
+ /** Focus halo for inputs and controls. */
11
+ export const RING = '--ak-ring:0 0 0 3px color-mix(in srgb,var(--ak-color-accent) 24%,transparent)';
12
+ /**
13
+ * Surface background in dark schemes: a faint top-lit sheen, because the fixed
14
+ * elevation shadows are invisible against a dark page.
15
+ */
16
+ export const DARK_FILL = '--ak-fill:linear-gradient(180deg,color-mix(in srgb,var(--ak-color-text) 4%,transparent),transparent 160px),var(--ak-color-surface)';
17
+ //# sourceMappingURL=derived-variables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derived-variables.js","sourceRoot":"","sources":["../../src/render/derived-variables.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,0DAA0D;AAC1D,MAAM,CAAC,MAAM,IAAI,GACf,gFAAgF,CAAC;AAEnF,0CAA0C;AAC1C,MAAM,CAAC,MAAM,IAAI,GAAG,+EAA+E,CAAC;AAEpG;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GACpB,oIAAoI,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Structured diagram fallback.
3
+ *
4
+ * Without an adapter a diagram still has to read as a diagram. When the
5
+ * connections form one simple chain (every node has at most one way in and one
6
+ * way out, and the chain visits every node), the nodes are drawn as a flow with
7
+ * labelled connectors. Any other graph is shown as a set of nodes plus an
8
+ * explicit connection list, because drawing arrows between nodes that are not
9
+ * connected would state something the spec does not.
10
+ */
11
+ import type { JsonValue } from '../json.js';
12
+ export interface DiagramNode {
13
+ id: string;
14
+ label: string;
15
+ }
16
+ export interface DiagramEdge {
17
+ from: string;
18
+ to: string;
19
+ label: string;
20
+ }
21
+ /** Order nodes along the single chain the edges describe, or return undefined when they do not form one. */
22
+ export declare function chainOrder(nodes: DiagramNode[], edges: DiagramEdge[]): DiagramNode[] | undefined;
23
+ /** Render the fallback body for the described nodes and connections. */
24
+ export declare function renderDiagramFallback(described: Record<string, JsonValue>[], connections: Record<string, JsonValue>[]): string;
25
+ //# sourceMappingURL=diagram-fallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagram-fallback.d.ts","sourceRoot":"","sources":["../../src/render/diagram-fallback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED,4GAA4G;AAC5G,wBAAgB,UAAU,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,GAAG,SAAS,CAwBhG;AA+CD,wEAAwE;AACxE,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,EACtC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,GACvC,MAAM,CASR"}