@unovis/mcp 1.7.0-mcp.1 → 1.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 (130) hide show
  1. package/README.md +3 -2
  2. package/dist/cli.js +7 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/codegen/index.js +23 -8
  5. package/dist/codegen/index.js.map +1 -1
  6. package/dist/html/document.d.ts +16 -3
  7. package/dist/html/document.js +50 -20
  8. package/dist/html/document.js.map +1 -1
  9. package/dist/index.d.ts +7 -6
  10. package/dist/index.js +6 -3
  11. package/dist/index.js.map +1 -1
  12. package/dist/recipes/area.d.ts +3 -2
  13. package/dist/recipes/bar.d.ts +4 -3
  14. package/dist/recipes/bar.js +4 -1
  15. package/dist/recipes/bar.js.map +1 -1
  16. package/dist/recipes/boxplot.d.ts +3 -2
  17. package/dist/recipes/chord.d.ts +1 -0
  18. package/dist/recipes/choropleth.d.ts +1 -0
  19. package/dist/recipes/donut.d.ts +1 -0
  20. package/dist/recipes/graph.d.ts +1 -0
  21. package/dist/recipes/heatmap.d.ts +1 -0
  22. package/dist/recipes/index.d.ts +2 -0
  23. package/dist/recipes/index.js +3 -0
  24. package/dist/recipes/index.js.map +1 -1
  25. package/dist/recipes/line.d.ts +3 -2
  26. package/dist/recipes/nested-donut.d.ts +1 -0
  27. package/dist/recipes/radial-bar.d.ts +1 -0
  28. package/dist/recipes/sankey.d.ts +1 -0
  29. package/dist/recipes/scatter.d.ts +3 -2
  30. package/dist/recipes/shared.d.ts +6 -10
  31. package/dist/recipes/shared.js +7 -53
  32. package/dist/recipes/shared.js.map +1 -1
  33. package/dist/recipes/timeline.d.ts +1 -0
  34. package/dist/recipes/treemap.d.ts +1 -0
  35. package/dist/render/materialize.d.ts +9 -3
  36. package/dist/render/materialize.js +66 -27
  37. package/dist/render/materialize.js.map +1 -1
  38. package/dist/render/renderer.d.ts +2 -7
  39. package/dist/render/renderer.js +1 -1
  40. package/dist/render/renderer.js.map +1 -1
  41. package/dist/render/spec-schema.d.ts +1180 -0
  42. package/dist/render/spec-schema.js +71 -0
  43. package/dist/render/spec-schema.js.map +1 -0
  44. package/dist/render/spec.d.ts +15 -7
  45. package/dist/render/spec.js +9 -8
  46. package/dist/render/spec.js.map +1 -1
  47. package/dist/render/time-ticks.d.ts +10 -0
  48. package/dist/render/time-ticks.js +56 -0
  49. package/dist/render/time-ticks.js.map +1 -0
  50. package/dist/server.js +12 -3
  51. package/dist/server.js.map +1 -1
  52. package/dist/tools/register.d.ts +20 -1
  53. package/dist/tools/register.js +98 -15
  54. package/dist/tools/register.js.map +1 -1
  55. package/dist/widget/bundle.js +470 -465
  56. package/dist/widget/bundle.meta.json +2 -1
  57. package/dist/widget/bundle.standard.js +799 -0
  58. package/dist/widget/entry.d.ts +4 -0
  59. package/dist/widget/entry.js +149 -13
  60. package/dist/widget/entry.js.map +1 -1
  61. package/dist/widget/events.d.ts +25 -0
  62. package/dist/widget/events.js +97 -0
  63. package/dist/widget/events.js.map +1 -0
  64. package/dist/widget/interactions.js +22 -12
  65. package/dist/widget/interactions.js.map +1 -1
  66. package/dist/widget/unpack.d.ts +1 -0
  67. package/dist/widget/unpack.js +1 -0
  68. package/dist/widget/unpack.js.map +1 -0
  69. package/dist/widget/variants.d.ts +14 -0
  70. package/dist/widget/variants.js +22 -0
  71. package/dist/widget/variants.js.map +1 -0
  72. package/docs/README.md +2 -1
  73. package/docs/architecture.md +29 -76
  74. package/docs/chart-spec.md +41 -0
  75. package/docs/getting-started.md +5 -0
  76. package/docs/interactive.md +72 -14
  77. package/docs/output-types.md +9 -9
  78. package/docs/programmatic.md +24 -0
  79. package/docs/tools.md +7 -7
  80. package/docs/troubleshooting.md +14 -44
  81. package/docs/webview.md +83 -0
  82. package/package.json +35 -13
  83. package/schema/chart-spec.v0.1.baseline.json +309 -0
  84. package/schema/chart-spec.v0.1.json +309 -0
  85. package/dist/env/bbox.d.ts +0 -13
  86. package/dist/env/bbox.js +0 -335
  87. package/dist/env/bbox.js.map +0 -1
  88. package/dist/env/canvas.d.ts +0 -9
  89. package/dist/env/canvas.js +0 -55
  90. package/dist/env/canvas.js.map +0 -1
  91. package/dist/env/computed-style.d.ts +0 -38
  92. package/dist/env/computed-style.js +0 -186
  93. package/dist/env/computed-style.js.map +0 -1
  94. package/dist/env/fonts.d.ts +0 -3
  95. package/dist/env/fonts.js +0 -103
  96. package/dist/env/fonts.js.map +0 -1
  97. package/dist/env/index.d.ts +0 -13
  98. package/dist/env/index.js +0 -121
  99. package/dist/env/index.js.map +0 -1
  100. package/dist/env/raf-queue.d.ts +0 -23
  101. package/dist/env/raf-queue.js +0 -51
  102. package/dist/env/raf-queue.js.map +0 -1
  103. package/dist/env/size.d.ts +0 -9
  104. package/dist/env/size.js +0 -30
  105. package/dist/env/size.js.map +0 -1
  106. package/dist/render/headless.d.ts +0 -62
  107. package/dist/render/headless.js +0 -158
  108. package/dist/render/headless.js.map +0 -1
  109. package/dist/render/mutex.d.ts +0 -9
  110. package/dist/render/mutex.js +0 -14
  111. package/dist/render/mutex.js.map +0 -1
  112. package/dist/render/rasterize.d.ts +0 -10
  113. package/dist/render/rasterize.js +0 -29
  114. package/dist/render/rasterize.js.map +0 -1
  115. package/dist/svg/collect-css.d.ts +0 -14
  116. package/dist/svg/collect-css.js +0 -53
  117. package/dist/svg/collect-css.js.map +0 -1
  118. package/dist/svg/css-vars.d.ts +0 -17
  119. package/dist/svg/css-vars.js +0 -64
  120. package/dist/svg/css-vars.js.map +0 -1
  121. package/dist/svg/header.d.ts +0 -8
  122. package/dist/svg/header.js +0 -81
  123. package/dist/svg/header.js.map +0 -1
  124. package/dist/svg/ids.d.ts +0 -12
  125. package/dist/svg/ids.js +0 -94
  126. package/dist/svg/ids.js.map +0 -1
  127. package/dist/svg/postprocess.d.ts +0 -41
  128. package/dist/svg/postprocess.js +0 -135
  129. package/dist/svg/postprocess.js.map +0 -1
  130. package/fonts/README.md +0 -19
@@ -7,12 +7,16 @@
7
7
  * protocol so any page can host the widget in an iframe.
8
8
  */
9
9
  import * as unovis from './unovis-slim.js';
10
+ import type { ChartEvent } from './events.js';
10
11
  import type { ChartSpec } from '../render/spec.js';
11
12
  export interface RenderOptions {
12
13
  /** Animation duration in ms (0 disables animations) */
13
14
  duration?: number;
14
15
  /** Render the spec title as a heading above the chart */
15
16
  showTitle?: boolean;
17
+ /** Receive clicks on chart elements (bars, segments, nodes…), normalized to
18
+ * the caller's own data records. In embed mode, set `events: true` instead */
19
+ onEvent?: (event: ChartEvent) => void;
16
20
  }
17
21
  export interface ChartHandle {
18
22
  destroy: () => void;
@@ -9,6 +9,18 @@
9
9
  import * as unovis from './unovis-slim.js';
10
10
  import { materializeChart } from '../render/materialize.js';
11
11
  import { buildInteractions } from './interactions.js';
12
+ import { componentEvents } from './events.js';
13
+ import { SPEC_VERSION } from '../render/spec.js';
14
+ /** Error text comes from exceptions that can echo spec content, so it is
15
+ * rendered as a text node rather than markup */
16
+ function showError(root, message) {
17
+ const el = document.createElement('div');
18
+ el.className = 'uv-error';
19
+ el.textContent = message;
20
+ root.replaceChildren(el);
21
+ }
22
+ // eslint-disable-next-line @typescript-eslint/naming-convention
23
+ const BUNDLE_VERSION = typeof __UNOVIS_MCP_VERSION__ !== 'undefined' ? __UNOVIS_MCP_VERSION__ : 'dev';
12
24
  const THEME_ATTR = 'data-theme';
13
25
  function applyTheme(theme) {
14
26
  const root = document.documentElement;
@@ -37,6 +49,18 @@ export function render(spec, container, options = {}) {
37
49
  }
38
50
  const lib = unovis;
39
51
  const { containerConfig: interactionConfig, legendItems } = buildInteractions(lib, spec);
52
+ // Interaction events are widget behavior, not chart description, so they
53
+ // merge into the components here rather than living in the spec
54
+ const onEvent = options.onEvent;
55
+ if (onEvent) {
56
+ spec = {
57
+ ...spec,
58
+ components: spec.components.map((component, i) => {
59
+ const events = componentEvents(lib, component, i, onEvent);
60
+ return events ? { ...component, config: { ...component.config, events } } : component;
61
+ }),
62
+ };
63
+ }
40
64
  let legend;
41
65
  if (legendItems?.length) {
42
66
  const legendEl = document.createElement('div');
@@ -68,30 +92,142 @@ export function render(spec, container, options = {}) {
68
92
  },
69
93
  };
70
94
  }
95
+ /** The MCP Apps extension revision this view implements */
96
+ const APPS_PROTOCOL_VERSION = '2026-01-26';
97
+ /** Fixed request id for the view-initiated ui/initialize */
98
+ const APPS_INIT_ID = 'unovis-ui-init';
71
99
  function startEmbedMode() {
72
100
  const root = document.getElementById('uv-embed-root') ?? document.body;
73
101
  let handle;
102
+ let lastSpec;
103
+ let lastOptions;
104
+ let appsAnswered = false;
105
+ // In a React Native WebView the host listens on its own bridge, not on
106
+ // window.parent — and receives strings, not structured clones
107
+ const post = (message) => {
108
+ // eslint-disable-next-line @typescript-eslint/naming-convention
109
+ const bridge = window.ReactNativeWebView;
110
+ if (bridge)
111
+ bridge.postMessage(JSON.stringify(message));
112
+ else
113
+ window.parent?.postMessage(message, '*');
114
+ };
74
115
  const postSize = () => {
75
- window.parent?.postMessage({
76
- type: 'unovis:size',
77
- width: root.scrollWidth,
78
- height: root.scrollHeight,
79
- }, '*');
116
+ post({ type: 'unovis:size', width: root.scrollWidth, height: root.scrollHeight });
117
+ post({ jsonrpc: '2.0', method: 'ui/notifications/size-changed', params: { width: root.scrollWidth, height: root.scrollHeight } });
80
118
  };
81
- window.addEventListener('message', (event) => {
82
- const message = event.data;
83
- if (message?.type !== 'unovis:render' || !message.spec)
84
- return;
119
+ const renderMessage = (spec, rawOptions) => {
85
120
  handle?.destroy();
86
121
  try {
87
- handle = render(message.spec, root, message.options ?? {});
122
+ const { events, ...options } = rawOptions ?? {};
123
+ if (events) {
124
+ options.onEvent = (chartEvent) => post({ type: 'unovis:event', ...chartEvent });
125
+ }
126
+ handle = render(spec, root, options);
127
+ lastSpec = spec;
128
+ lastOptions = rawOptions;
88
129
  postSize();
89
130
  }
90
131
  catch (e) {
91
- root.innerHTML = `<div class="uv-error">${String(e instanceof Error ? e.message : e)}</div>`;
132
+ showError(root, String(e instanceof Error ? e.message : e));
133
+ }
134
+ };
135
+ // MCP Apps hosts speak JSON-RPC. The view initiates the lifecycle
136
+ // (ui/initialize → host result → ui/notifications/initialized) — hosts MUST
137
+ // NOT send tool data before the initialized notification arrives, so the
138
+ // handshake is not optional. Returns true when the message was JSON-RPC.
139
+ const applyHostTheme = (theme) => {
140
+ if (theme !== 'dark' && theme !== 'light')
141
+ return;
142
+ if (lastSpec)
143
+ renderMessage({ ...lastSpec, theme }, lastOptions);
144
+ else
145
+ applyTheme(theme);
146
+ };
147
+ const onJsonRpc = (message) => {
148
+ if (message.jsonrpc !== '2.0')
149
+ return false;
150
+ // The host answered our ui/initialize: adopt its context, signal readiness
151
+ if (message.id === APPS_INIT_ID && message.result) {
152
+ appsAnswered = true;
153
+ applyHostTheme(message.result.hostContext?.theme);
154
+ post({ jsonrpc: '2.0', method: 'ui/notifications/initialized' });
155
+ return true;
156
+ }
157
+ if (message.method === 'ui/notifications/tool-result') {
158
+ const spec = message.params?.structuredContent?.spec;
159
+ // Results without a spec (static output types) leave the frame empty
160
+ if (spec)
161
+ renderMessage(spec, { events: true });
162
+ return true;
163
+ }
164
+ if (message.method === 'ui/notifications/host-context-changed') {
165
+ applyHostTheme(message.params?.hostContext?.theme);
166
+ return true;
167
+ }
168
+ if (message.method === 'ping' && message.id !== undefined) {
169
+ post({ jsonrpc: '2.0', id: message.id, result: {} });
170
+ return true;
92
171
  }
172
+ return true; // tool-input, tool-cancelled, other ui/*: acknowledged by ignoring
173
+ };
174
+ const onMessage = (event) => {
175
+ // React Native posts strings; iframes post structured clones
176
+ const raw = event.data;
177
+ let message;
178
+ if (typeof raw === 'string') {
179
+ try {
180
+ message = JSON.parse(raw);
181
+ }
182
+ catch {
183
+ return;
184
+ }
185
+ }
186
+ else {
187
+ message = raw;
188
+ }
189
+ if (onJsonRpc(message))
190
+ return;
191
+ if (message?.type === 'unovis:render' && message.spec)
192
+ renderMessage(message.spec, message.options);
193
+ // Theme flips shouldn't force the host to resend the spec (or reload the
194
+ // document): re-render the last spec, or restyle the empty page
195
+ if (message?.type === 'unovis:theme' && (message.theme === 'light' || message.theme === 'dark')) {
196
+ if (lastSpec)
197
+ renderMessage({ ...lastSpec, theme: message.theme }, lastOptions);
198
+ else
199
+ applyTheme(message.theme);
200
+ }
201
+ };
202
+ // React Native delivers 'message' on document (Android) or window (iOS);
203
+ // iframes always on window. Same handler everywhere.
204
+ window.addEventListener('message', onMessage);
205
+ document.addEventListener('message', onMessage);
206
+ // Version handshake: hosts that persist embed documents or specs assert
207
+ // compatibility here instead of discovering drift as a blank chart
208
+ post({ type: 'unovis:ready', version: BUNDLE_VERSION, specVersion: SPEC_VERSION });
209
+ // MCP Apps lifecycle: view initiates. Retried briefly because a host may
210
+ // attach its bridge after this document's scripts run; non-Apps hosts never
211
+ // answer, and the retries stop on their own — harmless either way
212
+ const postInitialize = () => post({
213
+ jsonrpc: '2.0',
214
+ id: APPS_INIT_ID,
215
+ method: 'ui/initialize',
216
+ params: {
217
+ protocolVersion: APPS_PROTOCOL_VERSION,
218
+ appInfo: { name: 'unovis-chart-widget', version: BUNDLE_VERSION },
219
+ appCapabilities: {},
220
+ },
93
221
  });
94
- window.parent?.postMessage({ type: 'unovis:ready' }, '*');
222
+ postInitialize();
223
+ let initializeAttempts = 0;
224
+ const initializeRetry = setInterval(() => {
225
+ if (appsAnswered || ++initializeAttempts > 8) {
226
+ clearInterval(initializeRetry);
227
+ return;
228
+ }
229
+ postInitialize();
230
+ }, 500);
95
231
  }
96
232
  /** Render a spec embedded in the page as <script type="application/json" id="uv-spec"> */
97
233
  function renderInlineSpec() {
@@ -105,7 +241,7 @@ function renderInlineSpec() {
105
241
  render(JSON.parse(specEl.textContent), root, options);
106
242
  }
107
243
  catch (e) {
108
- root.innerHTML = `<div class="uv-error">Failed to render chart: ${String(e instanceof Error ? e.message : e)}</div>`;
244
+ showError(root, `Failed to render chart: ${String(e instanceof Error ? e.message : e)}`);
109
245
  }
110
246
  }
111
247
  window.UnovisChart = { render, startEmbed: startEmbedMode, unovis };
@@ -1 +1 @@
1
- {"version":3,"file":"entry.js","sourceRoot":"","sources":["../../src/widget/entry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"entry.js","sourceRoot":"","sources":["../../src/widget/entry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /** Interaction events for hosted widgets.
2
+ *
3
+ * The embed protocol was render-only: a host could show a chart but a tap on
4
+ * a donut segment could reach nothing. When a host opts in, every element
5
+ * that has a tooltip also reports clicks, normalized to the caller's own flat
6
+ * data records — never Unovis's internal render wrappers.
7
+ */
8
+ import type { ComponentSpec } from '../render/spec.js';
9
+ type Lib = Record<string, any>;
10
+ type Datum = Record<string, any>;
11
+ /** What a host receives for one user interaction on a chart element */
12
+ export interface ChartEvent {
13
+ /** Component type the element belongs to, e.g. "Donut" */
14
+ component: string;
15
+ /** Index of that component in the spec's components array */
16
+ componentIndex: number;
17
+ /** DOM event name — "click" (a tap, on touch devices) */
18
+ event: string;
19
+ /** The element's datum, reduced to JSON-safe fields of the caller's record */
20
+ datum: unknown;
21
+ }
22
+ /** Unovis `events` config for one component, or undefined when it has no
23
+ * clickable primitives. Merged into the component config by the renderer. */
24
+ export declare function componentEvents(lib: Lib, component: ComponentSpec, componentIndex: number, onEvent: (event: ChartEvent) => void): Record<string, Record<string, (d: Datum) => void>> | undefined;
25
+ export {};
@@ -0,0 +1,97 @@
1
+ /** Keep only JSON-scalar fields — internal wrappers carry functions, DOM
2
+ * nodes and circular state that must never cross postMessage. */
3
+ const flatRecord = (value) => {
4
+ if (value === null || typeof value !== 'object')
5
+ return value;
6
+ const out = {};
7
+ for (const [key, v] of Object.entries(value)) {
8
+ if (key.startsWith('_'))
9
+ continue;
10
+ if (v === null || typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean')
11
+ out[key] = v;
12
+ }
13
+ return out;
14
+ };
15
+ /** Per-type unwrap of Unovis's internal datum to the user's record — the same
16
+ * shapes the tooltip templates in interactions.ts unwrap. */
17
+ const extractors = {
18
+ // eslint-disable-next-line @typescript-eslint/naming-convention
19
+ GroupedBar: d => flatRecord(d?.datum ?? d),
20
+ // eslint-disable-next-line @typescript-eslint/naming-convention
21
+ StackedBar: d => flatRecord(d?.datum ?? d),
22
+ // eslint-disable-next-line @typescript-eslint/naming-convention
23
+ Scatter: d => flatRecord(d?.datum ?? d),
24
+ // eslint-disable-next-line @typescript-eslint/naming-convention
25
+ Boxplot: d => flatRecord(d?.datum ?? d),
26
+ // eslint-disable-next-line @typescript-eslint/naming-convention
27
+ Timeline: d => flatRecord(d?.datum ?? d),
28
+ // eslint-disable-next-line @typescript-eslint/naming-convention
29
+ Donut: d => flatRecord(d?.data ?? d),
30
+ // eslint-disable-next-line @typescript-eslint/naming-convention
31
+ NestedDonut: d => ({ key: d?.data?.key, value: d?.value ?? d?.data?.value }),
32
+ // eslint-disable-next-line @typescript-eslint/naming-convention
33
+ RadialBar: d => flatRecord(d?.data ?? d),
34
+ // eslint-disable-next-line @typescript-eslint/naming-convention
35
+ Heatmap: d => flatRecord(d?.datum ?? d),
36
+ // eslint-disable-next-line @typescript-eslint/naming-convention
37
+ Treemap: d => ({ key: d?.data?.key ?? d?.key, value: d?.value }),
38
+ // eslint-disable-next-line @typescript-eslint/naming-convention
39
+ Sankey: d => (d?.source || d?.target
40
+ ? { source: d?.source?.label ?? d?.source?.id, target: d?.target?.label ?? d?.target?.id, value: d?.value }
41
+ : { id: d?.id, label: d?.label, value: d?.value }),
42
+ // eslint-disable-next-line @typescript-eslint/naming-convention
43
+ ChordDiagram: d => ({ label: d?.data?.label ?? d?.key, value: d?.value ?? d?.data?.value }),
44
+ // eslint-disable-next-line @typescript-eslint/naming-convention
45
+ Graph: d => (d?.source || d?.target
46
+ ? { source: d?.source?.id, target: d?.target?.id }
47
+ : flatRecord(d?._state ? d : d?.data ?? d)),
48
+ // eslint-disable-next-line @typescript-eslint/naming-convention
49
+ TopoJSONMap: d => flatRecord(d?.data ?? d),
50
+ };
51
+ /** CSS selectors of the clickable primitives per component type */
52
+ function clickableSelectors(lib, type) {
53
+ if (!lib[type])
54
+ return []; // variant bundle without this component
55
+ switch (type) {
56
+ case 'GroupedBar': return [lib.GroupedBar.selectors.bar];
57
+ case 'StackedBar': return [lib.StackedBar.selectors.bar];
58
+ case 'Scatter': return [lib.Scatter.selectors.point];
59
+ case 'Boxplot': return [lib.Boxplot.selectors.box];
60
+ case 'Timeline': return [lib.Timeline.selectors.line];
61
+ case 'Donut': return [lib.Donut.selectors.segment];
62
+ case 'NestedDonut': return [lib.NestedDonut.selectors.segment];
63
+ case 'RadialBar': return [lib.RadialBar.selectors.segment];
64
+ case 'Heatmap': return [lib.Heatmap.selectors.node];
65
+ case 'Treemap': return [lib.Treemap.selectors.tile];
66
+ case 'Sankey': return [lib.Sankey.selectors.node, lib.Sankey.selectors.link];
67
+ case 'ChordDiagram': return [lib.ChordDiagram.selectors.node];
68
+ case 'Graph': return [lib.Graph.selectors.node, lib.Graph.selectors.link];
69
+ case 'TopoJSONMap': return [lib.TopoJSONMap.selectors.feature];
70
+ // Line/Area have no per-datum element — the crosshair reads them; a
71
+ // future x-position event would live on the container, not the shapes
72
+ default: return [];
73
+ }
74
+ }
75
+ /** Unovis `events` config for one component, or undefined when it has no
76
+ * clickable primitives. Merged into the component config by the renderer. */
77
+ export function componentEvents(lib, component, componentIndex, onEvent) {
78
+ const selectors = clickableSelectors(lib, component.type);
79
+ if (!selectors.length)
80
+ return undefined;
81
+ // Inline own-property check, so static analysis can see the name is validated
82
+ const candidate = Object.prototype.hasOwnProperty.call(extractors, component.type) ? extractors[component.type] : undefined;
83
+ const extract = typeof candidate === 'function' ? candidate : flatRecord;
84
+ const events = {};
85
+ for (const selector of selectors) {
86
+ events[selector] = {
87
+ click: (d) => onEvent({
88
+ component: component.type,
89
+ componentIndex,
90
+ event: 'click',
91
+ datum: extract(d),
92
+ }),
93
+ };
94
+ }
95
+ return events;
96
+ }
97
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/widget/events.ts"],"names":[],"mappings":"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"}
@@ -5,17 +5,17 @@
5
5
  * a crosshair on continuous XY charts, and — unlike SVG output — Unovis's
6
6
  * real HTML BulletLegend.
7
7
  */
8
- import { materializeValue } from '../render/materialize.js';
8
+ import { formatNumTick, materializeValue } from '../render/materialize.js';
9
9
  const escapeHtml = (value) => String(value)
10
10
  .replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
11
- const formatValue = (value) => {
11
+ const formatValue = (value, locale) => {
12
12
  if (value === null || value === undefined)
13
13
  return '—';
14
14
  if (typeof value === 'number')
15
- return value.toLocaleString('en-US', { maximumFractionDigits: 6 });
15
+ return formatNumTick(value, locale);
16
16
  return escapeHtml(value);
17
17
  };
18
- const row = (label, value) => `<div class="uv-tt-row"><span class="uv-tt-key">${escapeHtml(label)}</span><span class="uv-tt-val">${formatValue(value)}</span></div>`;
18
+ const row = (label, value, locale) => `<div class="uv-tt-row"><span class="uv-tt-key">${escapeHtml(label)}</span><span class="uv-tt-val">${formatValue(value, locale)}</span></div>`;
19
19
  const title = (text) => `<div class="uv-tt-title">${escapeHtml(text)}</div>`;
20
20
  /** Field names referenced by a component config, in declaration order —
21
21
  * used to show the fields the chart actually plots, not every data column. */
@@ -41,14 +41,14 @@ function specFields(config) {
41
41
  }
42
42
  /** Records carry internal Unovis state under `_`-prefixed keys */
43
43
  const publicEntries = (datum) => Object.entries(datum ?? {}).filter(([key, value]) => !key.startsWith('_') && (value === null || typeof value !== 'object'));
44
- function recordTooltip(fields, labelField) {
44
+ function recordTooltip(fields, labelField, locale) {
45
45
  return (d) => {
46
46
  if (!d)
47
47
  return '';
48
48
  const head = labelField && d[labelField] !== undefined ? title(d[labelField]) : '';
49
49
  const shown = fields.length
50
- ? fields.filter(f => d[f] !== undefined).map(f => row(f, d[f]))
51
- : publicEntries(d).map(([key, value]) => row(key, value));
50
+ ? fields.filter(f => d[f] !== undefined).map(f => row(f, d[f], locale))
51
+ : publicEntries(d).map(([key, value]) => row(key, value, locale));
52
52
  return `${head}${shown.join('')}` || title('no data');
53
53
  };
54
54
  }
@@ -57,8 +57,12 @@ export function buildInteractions(lib, spec) {
57
57
  const containerConfig = {};
58
58
  const triggers = {};
59
59
  for (const component of spec.components) {
60
+ // A variant bundle may not carry this component — let the materializer
61
+ // report it instead of crashing on lib.X.selectors
62
+ if (!lib[component.type])
63
+ continue;
60
64
  const fields = specFields(component.config);
61
- const generic = recordTooltip(fields);
65
+ const generic = recordTooltip(fields, undefined, spec.locale);
62
66
  switch (component.type) {
63
67
  case 'Line':
64
68
  case 'Area':
@@ -126,19 +130,25 @@ export function buildInteractions(lib, spec) {
126
130
  containerConfig.tooltip = new lib.Tooltip({ triggers, horizontalPlacement: 'center' });
127
131
  }
128
132
  if (usesCrosshair && crosshairComponent) {
129
- const x = materializeValue(crosshairComponent.config.x);
133
+ const x = materializeValue(crosshairComponent.config.x, spec.locale);
130
134
  const yFields = specFields(crosshairComponent.config)
131
135
  .filter(f => f !== crosshairComponent.config.x?.$field);
132
136
  const labels = spec.legend?.map(item => item.name) ?? yFields;
133
137
  const xField = crosshairComponent.config.x?.$field;
138
+ // Format the header with the x axis's own tick formatter — the raw value
139
+ // on a time axis is epoch milliseconds
140
+ const headFormat = spec.xAxis?.tickFormat
141
+ ? materializeValue(spec.xAxis.tickFormat, spec.locale)
142
+ : undefined;
134
143
  containerConfig.crosshair = new lib.Crosshair({
135
144
  x,
136
145
  // Crosshair places one marker per y accessor — without these it warns
137
146
  // and renders only the vertical line
138
- y: materializeValue(crosshairComponent.config.y),
147
+ y: materializeValue(crosshairComponent.config.y, spec.locale),
139
148
  template: (d) => {
140
- const head = xField && d?.[xField] !== undefined ? title(d[xField]) : '';
141
- const rows = yFields.map((f, i) => row(labels[i] ?? f, d?.[f]));
149
+ const xValue = xField ? d?.[xField] : undefined;
150
+ const head = xValue !== undefined ? title(headFormat ? headFormat(xValue) : xValue) : '';
151
+ const rows = yFields.map((f, i) => row(labels[i] ?? f, d?.[f], spec.locale));
142
152
  return `${head}${rows.join('')}`;
143
153
  },
144
154
  });
@@ -1 +1 @@
1
- {"version":3,"file":"interactions.js","sourceRoot":"","sources":["../../src/widget/interactions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"interactions.js","sourceRoot":"","sources":["../../src/widget/interactions.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAQ1E,MAAM,UAAU,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;KACzD,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;AAE7F,MAAM,WAAW,GAAG,CAAC,KAAc,EAAE,MAAe,EAAU,EAAE;IAC9D,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,GAAG,CAAA;IACrD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAClE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAA;AAC1B,CAAC,CAAA;AAED,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,KAAc,EAAE,MAAe,EAAU,EAAE,CACrE,kDAAkD,UAAU,CAAC,KAAK,CAAC,kCAAkC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,eAAe,CAAA;AAEhJ,MAAM,KAAK,GAAG,CAAC,IAAa,EAAU,EAAE,CAAC,4BAA4B,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAA;AAE7F;8EAC8E;AAC9E,SAAS,UAAU,CAAE,MAA+B;IAClD,MAAM,MAAM,GAAa,EAAE,CAAA;IAC3B,MAAM,IAAI,GAAG,CAAC,KAAc,EAAQ,EAAE;QACpC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACnB,OAAM;QACR,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAChD,MAAM,GAAG,GAAG,KAA4B,CAAA;YACxC,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;oBAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;gBACzD,OAAM;YACR,CAAC;YACD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACpC,CAAC;IACH,CAAC,CAAA;IACD,IAAI,CAAC,MAAM,CAAC,CAAA;IACZ,OAAO,MAAM,CAAA;AACf,CAAC;AAED,kEAAkE;AAClE,MAAM,aAAa,GAAG,CAAC,KAAY,EAAuB,EAAE,CAC1D,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAClD,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAA;AAE1E,SAAS,aAAa,CAAE,MAAgB,EAAE,UAAmB,EAAE,MAAe;IAC5E,OAAO,CAAC,CAAQ,EAAE,EAAE;QAClB,IAAI,CAAC,CAAC;YAAE,OAAO,EAAE,CAAA;QACjB,MAAM,IAAI,GAAG,UAAU,IAAI,CAAC,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAClF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM;YACzB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YACvE,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;QACnE,OAAO,GAAG,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,KAAK,CAAC,SAAS,CAAC,CAAA;IACvD,CAAC,CAAA;AACH,CAAC;AASD,mEAAmE;AACnE,MAAM,UAAU,iBAAiB,CAAE,GAAQ,EAAE,IAAe;IAC1D,MAAM,eAAe,GAA4B,EAAE,CAAA;IACnD,MAAM,QAAQ,GAAyC,EAAE,CAAA;IAEzD,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACxC,uEAAuE;QACvE,mDAAmD;QACnD,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;YAAE,SAAQ;QAClC,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QAC3C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAE7D,QAAQ,SAAS,CAAC,IAAI,EAAE,CAAC;YACvB,KAAK,MAAM,CAAC;YACZ,KAAK,MAAM;gBACT,qEAAqE;gBACrE,6BAA6B;gBAC7B,MAAK;YACP,KAAK,YAAY,CAAC;YAClB,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAA;gBAC7E,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,OAAO,CAAA;gBACrC,MAAK;YACP,CAAC;YACD,KAAK,SAAS;gBACZ,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,OAAO,CAAA;gBAC/C,MAAK;YACP,KAAK,SAAS;gBACZ,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,OAAO,CAAA;gBAC7C,MAAK;YACP,KAAK,UAAU;gBACb,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,OAAO,CAAA;gBAC/C,MAAK;YACP,KAAK,OAAO;gBACV,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAA;gBAC3E,MAAK;YACP,KAAK,aAAa;gBAChB,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAQ,EAAE,EAAE,CACzD,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAA;gBAC3E,MAAK;YACP,KAAK,WAAW;gBACd,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAA;gBAC/E,MAAK;YACP,KAAK,SAAS;gBACZ,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,OAAO,CAAA;gBAC9C,MAAK;YACP,KAAK,SAAS;gBACZ,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAQ,EAAE,EAAE,CAClD,GAAG,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;gBACnE,MAAK;YACP,KAAK,QAAQ;gBACX,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAQ,EAAE,EAAE,CACjD,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;gBAC9D,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAQ,EAAE,EAAE,CACjD,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAA;gBAChI,MAAK;YACP,KAAK,cAAc;gBACjB,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAA;gBAC/F,MAAK;YACP,KAAK,OAAO;gBACV,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAQ,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,CAAA;gBACxF,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAQ,EAAE,EAAE,CAChD,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAA;gBAC1D,MAAK;YACP,KAAK,aAAa;gBAChB,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAQ,EAAE,EAAE;oBACzD,MAAM,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,CAAC,CAAA;oBACzB,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI;wBAAE,OAAO,EAAE,CAAA;oBACvC,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAA;gBACpG,CAAC,CAAA;gBACD,MAAK;QACT,CAAC;IACH,CAAC;IAED,gEAAgE;IAChE,MAAM,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAA;IAC5F,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC,CAAC,kBAAkB,CAAA;IAErE,4EAA4E;IAC5E,yEAAyE;IACzE,4EAA4E;IAC5E,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,IAAI,aAAa,EAAE,CAAC;QAClD,eAAe,CAAC,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,mBAAmB,EAAE,QAAQ,EAAE,CAAC,CAAA;IACxF,CAAC;IAED,IAAI,aAAa,IAAI,kBAAkB,EAAE,CAAC;QACxC,MAAM,CAAC,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QACnF,MAAM,OAAO,GAAG,UAAU,CAAC,kBAAkB,CAAC,MAAM,CAAC;aAClD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAM,kBAAkB,CAAC,MAAM,CAAC,CAAyB,EAAE,MAAM,CAAC,CAAA;QAClF,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAA;QAC7D,MAAM,MAAM,GAAI,kBAAkB,CAAC,MAAM,CAAC,CAAyB,EAAE,MAAM,CAAA;QAC3E,yEAAyE;QACzE,uCAAuC;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,EAAE,UAAU;YACvC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAA+B;YACpF,CAAC,CAAC,SAAS,CAAA;QAEb,eAAe,CAAC,SAAS,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC;YAC5C,CAAC;YACD,sEAAsE;YACtE,qCAAqC;YACrC,CAAC,EAAE,gBAAgB,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC;YAC7D,QAAQ,EAAE,CAAC,CAAQ,EAAE,EAAE;gBACrB,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;gBAC/C,MAAM,IAAI,GAAG,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;gBACxF,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA;gBAC5E,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAA;YAClC,CAAC;SACF,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM;QACrC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACnE,CAAC,CAAC,SAAS,CAAA;IAEb,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,CAAA;AACzC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ "use strict";(()=>{var f=Uint8Array,S=Uint16Array,xr=Int32Array,er=new f([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),ir=new f([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),zr=new f([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),ar=function(r,t){for(var n=new S(31),e=0;e<31;++e)n[e]=t+=1<<r[e-1];for(var i=new xr(n[30]),e=1;e<30;++e)for(var l=n[e];l<n[e+1];++l)i[l]=l-n[e]<<5|e;return{b:n,r:i}},or=ar(er,2),sr=or.b,Ar=or.r;sr[28]=258,Ar[258]=28;var fr=ar(ir,0),Mr=fr.b,dr=fr.r,W=new S(32768);for(o=0;o<32768;++o)g=(o&43690)>>1|(o&21845)<<1,g=(g&52428)>>2|(g&13107)<<2,g=(g&61680)>>4|(g&3855)<<4,W[o]=((g&65280)>>8|(g&255)<<8)>>1;var g,o,I=(function(r,t,n){for(var e=r.length,i=0,l=new S(t);i<e;++i)r[i]&&++l[r[i]-1];var y=new S(t);for(i=1;i<t;++i)y[i]=y[i-1]+l[i-1]<<1;var p;if(n){p=new S(1<<t);var z=15-t;for(i=0;i<e;++i)if(r[i])for(var C=i<<4|r[i],w=t-r[i],a=y[r[i]-1]++<<w,s=a|(1<<w)-1;a<=s;++a)p[W[a]>>z]=C}else for(p=new S(e),i=0;i<e;++i)r[i]&&(p[i]=W[y[r[i]-1]++]>>15-r[i]);return p}),B=new f(288);for(o=0;o<144;++o)B[o]=8;var o;for(o=144;o<256;++o)B[o]=9;var o;for(o=256;o<280;++o)B[o]=7;var o;for(o=280;o<288;++o)B[o]=8;var o,hr=new f(32);for(o=0;o<32;++o)hr[o]=5;var o;var Sr=I(B,9,1);var Cr=I(hr,5,1),R=function(r){for(var t=r[0],n=1;n<r.length;++n)r[n]>t&&(t=r[n]);return t},v=function(r,t,n){var e=t/8|0;return(r[e]|r[e+1]<<8)>>(t&7)&n},V=function(r,t){var n=t/8|0;return(r[n]|r[n+1]<<8|r[n+2]<<16)>>(t&7)},Ur=function(r){return(r+7)/8|0},ur=function(r,t,n){return(t==null||t<0)&&(t=0),(n==null||n>r.length)&&(n=r.length),new f(r.subarray(t,n))};var Fr=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],u=function(r,t,n){var e=new Error(t||Fr[r]);if(e.code=r,Error.captureStackTrace&&Error.captureStackTrace(e,u),!n)throw e;return e},Dr=function(r,t,n,e){var i=r.length,l=e?e.length:0;if(!i||t.f&&!t.l)return n||new f(0);var y=!n,p=y||t.i!=2,z=t.i;y&&(n=new f(i*3));var C=function(rr){var tr=n.length;if(rr>tr){var nr=new f(Math.max(tr*2,rr));nr.set(n),n=nr}},w=t.f||0,a=t.p||0,s=t.b||0,x=t.l,E=t.d,U=t.m,F=t.n,d=i*8;do{if(!x){w=v(r,a,1);var G=v(r,a+1,3);if(a+=3,G)if(G==1)x=Sr,E=Cr,U=9,F=5;else if(G==2){var L=v(r,a,31)+257,j=v(r,a+10,15)+4,k=L+v(r,a+5,31)+1;a+=14;for(var D=new f(k),$=new f(19),h=0;h<j;++h)$[zr[h]]=v(r,a+h*3,7);a+=j*3;for(var J=R($),pr=(1<<J)-1,gr=I($,J,1),h=0;h<k;){var K=gr[v(r,a,pr)];a+=K&15;var c=K>>4;if(c<16)D[h++]=c;else{var A=0,Z=0;for(c==16?(Z=3+v(r,a,3),a+=2,A=D[h-1]):c==17?(Z=3+v(r,a,7),a+=3):c==18&&(Z=11+v(r,a,127),a+=7);Z--;)D[h++]=A}}var Q=D.subarray(0,L),m=D.subarray(L);U=R(Q),F=R(m),x=I(Q,U,1),E=I(m,F,1)}else u(1);else{var c=Ur(a)+4,O=r[c-4]|r[c-3]<<8,q=c+O;if(q>i){z&&u(0);break}p&&C(s+O),n.set(r.subarray(c,q),s),t.b=s+=O,t.p=a=q*8,t.f=w;continue}if(a>d){z&&u(0);break}}p&&C(s+131072);for(var yr=(1<<U)-1,wr=(1<<F)-1,P=a;;P=a){var A=x[V(r,a)&yr],M=A>>4;if(a+=A&15,a>d){z&&u(0);break}if(A||u(2),M<256)n[s++]=M;else if(M==256){P=a,x=null;break}else{var X=M-254;if(M>264){var h=M-257,T=er[h];X=v(r,a,(1<<T)-1)+sr[h],a+=T}var H=E[V(r,a)&wr],N=H>>4;H||u(3),a+=H&15;var m=Mr[N];if(N>3){var T=ir[N];m+=V(r,a)&(1<<T)-1,a+=T}if(a>d){z&&u(0);break}p&&C(s+131072);var b=s+X;if(s<m){var _=l-m,mr=Math.min(m,b);for(_+s<0&&u(3);s<mr;++s)n[s]=e[_+s]}for(;s<b;++s)n[s]=n[s-m]}}t.l=x,t.p=P,t.b=s,t.f=w,x&&(w=1,t.m=U,t.d=E,t.n=F)}while(!w);return s!=n.length&&y?ur(n,0,s):n.subarray(0,s)};var Tr=new f(0);var Ir=function(r){(r[0]!=31||r[1]!=139||r[2]!=8)&&u(6,"invalid gzip data");var t=r[3],n=10;t&4&&(n+=(r[10]|r[11]<<8)+2);for(var e=(t>>3&1)+(t>>4&1);e>0;e-=!r[n++]);return n+(t&2)},Br=function(r){var t=r.length;return(r[t-4]|r[t-3]<<8|r[t-2]<<16|r[t-1]<<24)>>>0};function lr(r,t){var n=Ir(r);return n+8>r.length&&u(6,"invalid gzip data"),Dr(r.subarray(n,-8),{i:2},t&&t.out||new f(Br(r)),t&&t.dictionary)}var Y=typeof TextDecoder<"u"&&new TextDecoder,Er=0;try{Y.decode(Tr,{stream:!0}),Er=1}catch{}var Zr=function(r){for(var t="",n=0;;){var e=r[n++],i=(e>127)+(e>223)+(e>239);if(n+i>r.length)return{s:t,r:ur(r,n-1)};i?i==3?(e=((e&15)<<18|(r[n++]&63)<<12|(r[n++]&63)<<6|r[n++]&63)-65536,t+=String.fromCharCode(55296|e>>10,56320|e&1023)):i&1?t+=String.fromCharCode((e&31)<<6|r[n++]&63):t+=String.fromCharCode((e&15)<<12|(r[n++]&63)<<6|r[n++]&63):t+=String.fromCharCode(e)}};function vr(r,t){if(t){for(var n="",e=0;e<r.length;e+=16384)n+=String.fromCharCode.apply(null,r.subarray(e,e+16384));return n}else{if(Y)return Y.decode(r);var i=Zr(r),l=i.s,n=i.r;return n.length&&u(8),l}}var cr=document.getElementById("uv-bundle-gz");if(cr?.textContent)try{let r=cr.textContent.replace(/\s+/g,""),t=Uint8Array.from(atob(r),i=>i.charCodeAt(0)),n=vr(lr(t)),e=document.createElement("script");e.textContent=n,document.head.appendChild(e)}catch(r){let t=document.createElement("div");t.className="uv-error",t.textContent=`Failed to unpack the chart bundle: ${String(r instanceof Error?r.message:r)}`,document.body.replaceChildren(t)}})();
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unpack.js","sourceRoot":"","sources":["../../src/widget/unpack.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAE9C,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,CAAA;AACvD,IAAI,OAAO,EAAE,WAAW,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QACnD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;QAC9D,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;QAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QAC/C,MAAM,CAAC,WAAW,GAAG,MAAM,CAAA;QAC3B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAA;IACnC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QACxC,EAAE,CAAC,SAAS,GAAG,UAAU,CAAA;QACzB,EAAE,CAAC,WAAW,GAAG,sCAAsC,MAAM,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACnG,QAAQ,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;IACnC,CAAC;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ /** Widget bundle variants.
2
+ *
3
+ * Most real charts are XY or radial; the network/flow/geo families carry the
4
+ * heavy dependencies (dagre + d3-force for Graph, d3-geo + topojson for maps,
5
+ * d3-sankey…). Two prebuilt bundles split along that line, and the document
6
+ * builder picks per spec — so a bar chart never ships graph-layout engines.
7
+ *
8
+ * `scripts/build-widget.mjs` reads this list (it filters unovis-slim.ts by
9
+ * export name), so adding a component here is the single switch.
10
+ */
11
+ export declare const STANDARD_COMPONENTS: readonly string[];
12
+ export type BundleVariant = 'standard' | 'full';
13
+ /** The smallest prebuilt bundle that covers every listed component type */
14
+ export declare function bundleVariantFor(componentTypes: string[]): BundleVariant;
@@ -0,0 +1,22 @@
1
+ /** Widget bundle variants.
2
+ *
3
+ * Most real charts are XY or radial; the network/flow/geo families carry the
4
+ * heavy dependencies (dagre + d3-force for Graph, d3-geo + topojson for maps,
5
+ * d3-sankey…). Two prebuilt bundles split along that line, and the document
6
+ * builder picks per spec — so a bar chart never ships graph-layout engines.
7
+ *
8
+ * `scripts/build-widget.mjs` reads this list (it filters unovis-slim.ts by
9
+ * export name), so adding a component here is the single switch.
10
+ */
11
+ export const STANDARD_COMPONENTS = [
12
+ 'XYContainer', 'SingleContainer',
13
+ 'Axis', 'Line', 'Area', 'GroupedBar', 'StackedBar', 'Scatter',
14
+ 'Timeline', 'Boxplot', 'XYLabels', 'Plotband', 'Plotline',
15
+ 'Donut', 'NestedDonut', 'RadialBar',
16
+ 'Tooltip', 'Crosshair', 'BulletLegend',
17
+ ];
18
+ /** The smallest prebuilt bundle that covers every listed component type */
19
+ export function bundleVariantFor(componentTypes) {
20
+ return componentTypes.every(type => STANDARD_COMPONENTS.includes(type)) ? 'standard' : 'full';
21
+ }
22
+ //# sourceMappingURL=variants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variants.js","sourceRoot":"","sources":["../../src/widget/variants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAsB;IACpD,aAAa,EAAE,iBAAiB;IAChC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS;IAC7D,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU;IACzD,OAAO,EAAE,aAAa,EAAE,WAAW;IACnC,SAAS,EAAE,WAAW,EAAE,cAAc;CACvC,CAAA;AAID,2EAA2E;AAC3E,MAAM,UAAU,gBAAgB,CAAE,cAAwB;IACxD,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAA;AAC/F,CAAC"}
package/docs/README.md CHANGED
@@ -12,7 +12,8 @@ rendered locally in Node, with no browser and no remote services.
12
12
  | [Output types](./output-types.md) | `svg`, `png`, `html`, `interactive`, `config`, `code` — what each returns and when to use it |
13
13
  | [Chart spec](./chart-spec.md) | The JSON IR behind every chart: containers, components, accessor references |
14
14
  | [Programmatic use](./programmatic.md) | Use it as a library: `renderChart`, the `renderToSvg` SSR primitive, PNG rasterization, embedding the tools in your own MCP server |
15
- | [Interactive charts](./interactive.md) | The browser widget, self-contained HTML, iframe embedding, MCP UI resources |
15
+ | [Interactive charts](./interactive.md) | The browser widget, self-contained HTML, iframe embedding, the MCP Apps extension |
16
+ | [Native WebViews](./webview.md) | React Native embedding: the bridge, theme switching without reloads, version pinning |
16
17
  | [Architecture](./architecture.md) | How headless rendering actually works, and why each piece exists |
17
18
  | [Troubleshooting](./troubleshooting.md) | Fonts, blank charts, timeouts, large data, known limitations |
18
19