@pixerate/editor 0.170.0 → 0.172.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 (35) hide show
  1. package/README.md +4 -0
  2. package/dist/agent/index.cjs +28 -28
  3. package/dist/agent/index.js +3 -3
  4. package/dist/canvas/index.cjs +3 -3
  5. package/dist/canvas/index.js +1 -1
  6. package/dist/chart/index.cjs +156 -68
  7. package/dist/chart/index.d.cts +1 -0
  8. package/dist/chart/index.d.ts +1 -0
  9. package/dist/chart/index.js +91 -3
  10. package/dist/chart/layout-shared.d.cts +2 -1
  11. package/dist/chart/layout-shared.d.ts +2 -1
  12. package/dist/chart/layout.d.cts +5 -0
  13. package/dist/chart/layout.d.ts +5 -0
  14. package/dist/chart/tooltip.d.cts +53 -0
  15. package/dist/chart/tooltip.d.ts +53 -0
  16. package/dist/chart/types.d.cts +14 -0
  17. package/dist/chart/types.d.ts +14 -0
  18. package/dist/{chunk-SBAPXFPB.cjs → chunk-FHNGNL3V.cjs} +44 -44
  19. package/dist/{chunk-2F4GAZL5.cjs → chunk-GXEC4FS6.cjs} +16 -16
  20. package/dist/{chunk-T62BRXMS.js → chunk-IMHRN4ZZ.js} +1 -1
  21. package/dist/{chunk-N3ACT6VJ.js → chunk-KPWG3PSW.js} +1 -1
  22. package/dist/{chunk-M52UCHVZ.js → chunk-OJQVKJYD.js} +12 -1
  23. package/dist/{chunk-ZUPP4NKM.js → chunk-R2VHVQVY.js} +2 -2
  24. package/dist/{chunk-GD34ICEX.cjs → chunk-RLOIEDA3.cjs} +10 -10
  25. package/dist/{chunk-WOIXNDHV.cjs → chunk-TUXKLM5W.cjs} +13 -2
  26. package/dist/extensions/index.cjs +5 -5
  27. package/dist/extensions/index.js +4 -4
  28. package/dist/image-editor/index.cjs +18 -5
  29. package/dist/image-editor/index.js +17 -4
  30. package/dist/image-editor/layers/panel.d.cts +19 -3
  31. package/dist/image-editor/layers/panel.d.ts +19 -3
  32. package/dist/index.cjs +10 -10
  33. package/dist/index.js +4 -4
  34. package/package.json +112 -12
  35. package/skills/pixerate-chart/SKILL.md +1 -0
@@ -47,7 +47,7 @@ var _chunkVKHJJUBKcjs = require('../chunk-VKHJJUBK.cjs');
47
47
 
48
48
 
49
49
 
50
- var _chunk2F4GAZL5cjs = require('../chunk-2F4GAZL5.cjs');
50
+ var _chunkGXEC4FS6cjs = require('../chunk-GXEC4FS6.cjs');
51
51
  require('../chunk-TTCJPX4U.cjs');
52
52
 
53
53
 
@@ -98,7 +98,8 @@ require('../chunk-TTCJPX4U.cjs');
98
98
 
99
99
 
100
100
 
101
- var _chunkWOIXNDHVcjs = require('../chunk-WOIXNDHV.cjs');
101
+
102
+ var _chunkTUXKLM5Wcjs = require('../chunk-TUXKLM5W.cjs');
102
103
 
103
104
 
104
105
 
@@ -327,7 +328,7 @@ function chartFileName(spec, extension) {
327
328
  }
328
329
  async function downloadChartPng(spec, options = {}) {
329
330
  const { width = 800, height = 450, filename = chartFileName(spec, "png"), theme, ...raster } = options;
330
- const svg = _chunk2F4GAZL5cjs.chartToSvg.call(void 0, spec, { width, height, theme });
331
+ const svg = _chunkGXEC4FS6cjs.chartToSvg.call(void 0, spec, { width, height, theme });
331
332
  const { url, width: w, height: h } = await svgToPngDataUrl(svg, { ...raster, width, height });
332
333
  const doc = _nullishCoalesce(raster.document, () => ( globalThis.document));
333
334
  const link = doc.createElement("a");
@@ -369,7 +370,7 @@ function analyzeChartTable(rows) {
369
370
  } else if (v > 0) anyPositive = true;
370
371
  }
371
372
  const labels = byRows ? _nullishCoalesce(_optionalChain([grid, 'access', _20 => _20[0], 'optionalAccess', _21 => _21.slice, 'call', _22 => _22(labelColumn ? 1 : 0)]), () => ( [])) : grid.slice(headerRow ? 1 : 0).map((r) => r[0]);
372
- const dates = (byRows ? headerRow : labelColumn) && labels.length > 1 && labels.filter((l) => !blank(l) && _chunkWOIXNDHVcjs.parseChartDate.call(void 0, String(l)) !== null).length >= labels.length * 0.8;
373
+ const dates = (byRows ? headerRow : labelColumn) && labels.length > 1 && labels.filter((l) => !blank(l) && _chunkTUXKLM5Wcjs.parseChartDate.call(void 0, String(l)) !== null).length >= labels.length * 0.8;
373
374
  return {
374
375
  headerRow,
375
376
  labelColumn,
@@ -506,7 +507,7 @@ function createChartCommands(controller, options = {}) {
506
507
  params: object({ width: _chunkGTF4RYXJcjs.WIDTH, height: _chunkGTF4RYXJcjs.HEIGHT }),
507
508
  run: (_ctx, params = {}) => {
508
509
  const spec = controller.getSpec();
509
- return { spec: controller.toJSON(), table: _chunkOUO3DSRTcjs.chartDataToTable.call(void 0, spec), summary: _chunk2F4GAZL5cjs.summarizeChart.call(void 0, controller.toJSON(), { width: _nullishCoalesce(_optionalChain([params, 'optionalAccess', _25 => _25.width]), () => ( 640)), height: _nullishCoalesce(_optionalChain([params, 'optionalAccess', _26 => _26.height]), () => ( 400)) }), issues: controller.getState().issues };
510
+ return { spec: controller.toJSON(), table: _chunkOUO3DSRTcjs.chartDataToTable.call(void 0, spec), summary: _chunkGXEC4FS6cjs.summarizeChart.call(void 0, controller.toJSON(), { width: _nullishCoalesce(_optionalChain([params, 'optionalAccess', _25 => _25.width]), () => ( 640)), height: _nullishCoalesce(_optionalChain([params, 'optionalAccess', _26 => _26.height]), () => ( 400)) }), issues: controller.getState().issues };
510
511
  }
511
512
  },
512
513
  {
@@ -916,9 +917,9 @@ function createChartCommands(controller, options = {}) {
916
917
  params: object({ map: { type: "string", description: "Map id (default: the chart's map)." } }),
917
918
  run: (_ctx, params = {}) => {
918
919
  const id = _nullishCoalesce(_optionalChain([params, 'optionalAccess', _36 => _36.map]), () => ( controller.getSpec().map));
919
- const geometry = _chunkWOIXNDHVcjs.getChartMap.call(void 0, id);
920
+ const geometry = _chunkTUXKLM5Wcjs.getChartMap.call(void 0, id);
920
921
  if (!geometry) fail(`There is no map "${id}"; register it with registerChartMap.`);
921
- const matches = _chunkWOIXNDHVcjs.matchChartMapRegions.call(void 0, geometry, controller.getSpec().categories);
922
+ const matches = _chunkTUXKLM5Wcjs.matchChartMapRegions.call(void 0, geometry, controller.getSpec().categories);
922
923
  return { regions: geometry.regions.map((r) => ({ id: r.id, name: r.name })), unmatched: controller.getSpec().categories.filter((_, i) => !matches[i]) };
923
924
  }
924
925
  },
@@ -933,7 +934,7 @@ function createChartCommands(controller, options = {}) {
933
934
  run: (_ctx, params = {}) => {
934
935
  const spec = controller.getSpec();
935
936
  const frame = _optionalChain([params, 'optionalAccess', _37 => _37.time]) !== void 0 ? raceFrame(params.time) : _nullishCoalesce(controller.getState().raceFrame, () => ( spec.categories.length - 1));
936
- return { frame, ranking: _chunkWOIXNDHVcjs.chartRaceRanking.call(void 0, spec, frame).slice(0, spec.raceTopN).map((e) => ({ rank: e.rank + 1, series: e.seriesId, name: e.name, value: e.value })) };
937
+ return { frame, ranking: _chunkTUXKLM5Wcjs.chartRaceRanking.call(void 0, spec, frame).slice(0, spec.raceTopN).map((e) => ({ rank: e.rank + 1, series: e.seriesId, name: e.name, value: e.value })) };
937
938
  }
938
939
  },
939
940
  {
@@ -980,8 +981,8 @@ function createChartCommands(controller, options = {}) {
980
981
  keywords: ["chart", "quick layout", "style", "colours", "colors", "monochrome", "theme"],
981
982
  description: "Applies a quick layout and / or colour scheme as one undo step.",
982
983
  params: object({
983
- layout: { type: "string", enum: _chunk2F4GAZL5cjs.CHART_LAYOUT_PRESETS.map((p) => p.id), description: "Quick layout id." },
984
- colors: { type: "string", enum: _chunk2F4GAZL5cjs.CHART_COLOR_SCHEMES.map((p) => p.id), description: "Colour scheme id." }
984
+ layout: { type: "string", enum: _chunkGXEC4FS6cjs.CHART_LAYOUT_PRESETS.map((p) => p.id), description: "Quick layout id." },
985
+ colors: { type: "string", enum: _chunkGXEC4FS6cjs.CHART_COLOR_SCHEMES.map((p) => p.id), description: "Colour scheme id." }
985
986
  }),
986
987
  run: (_ctx, params = {}) => {
987
988
  check(controller.applyPreset(_nullishCoalesce(params, () => ( {}))));
@@ -1027,7 +1028,7 @@ function createChartCommands(controller, options = {}) {
1027
1028
  description: "Replaces the chart with Mermaid xychart-beta, pie, radar-beta, sankey-beta or treemap-beta text (one undo step). Unreadable lines are listed with line numbers.",
1028
1029
  params: object({ mermaid: { type: "string", description: "Mermaid text." } }, ["mermaid"]),
1029
1030
  run: (_ctx, params) => {
1030
- const read = _chunk2F4GAZL5cjs.chartFromMermaid.call(void 0, params.mermaid);
1031
+ const read = _chunkGXEC4FS6cjs.chartFromMermaid.call(void 0, params.mermaid);
1031
1032
  if (!read.family) fail(read.issues.map((i) => i.message).join(" ") || "Expected Mermaid starting with xychart-beta, pie, radar-beta, sankey-beta or treemap-beta.");
1032
1033
  check(controller.update({ ...read.spec }, { label: "Import Mermaid chart" }));
1033
1034
  return { spec: controller.toJSON(), issues: read.issues };
@@ -1041,7 +1042,7 @@ function createChartCommands(controller, options = {}) {
1041
1042
  keywords: ["chart", "mermaid", "markdown", "export"],
1042
1043
  description: "Returns the chart as Mermaid text (with a round-trip comment unless meta is false).",
1043
1044
  params: object({ meta: { type: "boolean", description: "Include the %% @pixerate round-trip comment (default true)." } }),
1044
- run: (_ctx, params = {}) => ({ mermaid: _chunk2F4GAZL5cjs.chartToMermaid.call(void 0, controller.toJSON(), { meta: _optionalChain([params, 'optionalAccess', _39 => _39.meta]) }) })
1045
+ run: (_ctx, params = {}) => ({ mermaid: _chunkGXEC4FS6cjs.chartToMermaid.call(void 0, controller.toJSON(), { meta: _optionalChain([params, 'optionalAccess', _39 => _39.meta]) }) })
1045
1046
  },
1046
1047
  {
1047
1048
  ...base,
@@ -1061,7 +1062,7 @@ function createChartCommands(controller, options = {}) {
1061
1062
  description: "Returns the chart drawn as a standalone, accessible SVG string (with <title> and <desc>).",
1062
1063
  params: object({ width: _chunkGTF4RYXJcjs.WIDTH, height: _chunkGTF4RYXJcjs.HEIGHT }),
1063
1064
  run: (_ctx, params = {}) => ({
1064
- svg: _chunk2F4GAZL5cjs.chartToSvg.call(void 0, controller.toJSON(), { width: _nullishCoalesce(_optionalChain([params, 'optionalAccess', _40 => _40.width]), () => ( 640)), height: _nullishCoalesce(_optionalChain([params, 'optionalAccess', _41 => _41.height]), () => ( 400)) })
1065
+ svg: _chunkGXEC4FS6cjs.chartToSvg.call(void 0, controller.toJSON(), { width: _nullishCoalesce(_optionalChain([params, 'optionalAccess', _40 => _40.width]), () => ( 640)), height: _nullishCoalesce(_optionalChain([params, 'optionalAccess', _41 => _41.height]), () => ( 400)) })
1065
1066
  })
1066
1067
  },
1067
1068
  {
@@ -1127,7 +1128,7 @@ function snapChartDragValue(scene, value, options = {}) {
1127
1128
  const scale = _nullishCoalesce(options.scale, () => ( scene.valueScale));
1128
1129
  const tolerance = _nullishCoalesce(options.tolerancePx, () => ( 6));
1129
1130
  if (scale) {
1130
- const px = (v) => _chunkWOIXNDHVcjs.chartScaleToPixel.call(void 0, v, scale);
1131
+ const px = (v) => _chunkTUXKLM5Wcjs.chartScaleToPixel.call(void 0, v, scale);
1131
1132
  const at = px(value);
1132
1133
  let best = null;
1133
1134
  let bestDist = tolerance;
@@ -1142,7 +1143,7 @@ function snapChartDragValue(scene, value, options = {}) {
1142
1143
  }
1143
1144
  if (best !== null) return best;
1144
1145
  }
1145
- return _chunkWOIXNDHVcjs.snapChartValue.call(void 0, scene, value, options.step, _optionalChain([scale, 'optionalAccess', _47 => _47.ticks]), _optionalChain([scale, 'optionalAccess', _48 => _48.logBase]));
1146
+ return _chunkTUXKLM5Wcjs.snapChartValue.call(void 0, scene, value, options.step, _optionalChain([scale, 'optionalAccess', _47 => _47.ticks]), _optionalChain([scale, 'optionalAccess', _48 => _48.logBase]));
1146
1147
  }
1147
1148
  function startChartPointDrag(controller, scene, target, start, options = {}) {
1148
1149
  if (!canDragChartPoint(controller, scene, target)) return null;
@@ -1154,8 +1155,8 @@ function startChartPointDrag(controller, scene, target, start, options = {}) {
1154
1155
  const xy = _chunkOUO3DSRTcjs.chartFamily.call(void 0, spec) === "xy" && !!scene.xScale;
1155
1156
  const startValue = _nullishCoalesce(series.values[index], () => ( 0));
1156
1157
  const startX = _nullishCoalesce(_optionalChain([series, 'access', _49 => _49.x, 'optionalAccess', _50 => _50[index]]), () => ( null));
1157
- const startAt = _chunkWOIXNDHVcjs.chartValueAtPoint.call(void 0, scene, start, secondary);
1158
- const startAtX = xy ? _chunkWOIXNDHVcjs.chartXAtPoint.call(void 0, scene, start) : void 0;
1158
+ const startAt = _chunkTUXKLM5Wcjs.chartValueAtPoint.call(void 0, scene, start, secondary);
1159
+ const startAtX = xy ? _chunkTUXKLM5Wcjs.chartXAtPoint.call(void 0, scene, start) : void 0;
1159
1160
  if (startAt === void 0) return null;
1160
1161
  const candidates = [0, startValue];
1161
1162
  if (!xy) {
@@ -1173,7 +1174,7 @@ function startChartPointDrag(controller, scene, target, start, options = {}) {
1173
1174
  target: { seriesId, index },
1174
1175
  move(point, moveOptions = {}) {
1175
1176
  if (ended) return;
1176
- const at = _chunkWOIXNDHVcjs.chartValueAtPoint.call(void 0, scene, point, secondary);
1177
+ const at = _chunkTUXKLM5Wcjs.chartValueAtPoint.call(void 0, scene, point, secondary);
1177
1178
  if (at === void 0) return;
1178
1179
  const factor = moveOptions.fine ? 0.1 : 1;
1179
1180
  const moved = (from, to, s, value) => s.logBase && value > 0 && from > 0 && to > 0 ? value * Math.pow(to / from, factor) : value + (to - from) * factor;
@@ -1181,7 +1182,7 @@ function startChartPointDrag(controller, scene, target, start, options = {}) {
1181
1182
  let moveX = false;
1182
1183
  let atX;
1183
1184
  if (xy && startX !== null && startAtX !== void 0) {
1184
- atX = _chunkWOIXNDHVcjs.chartXAtPoint.call(void 0, scene, point);
1185
+ atX = _chunkTUXKLM5Wcjs.chartXAtPoint.call(void 0, scene, point);
1185
1186
  moveX = atX !== void 0;
1186
1187
  if (moveOptions.lockAxis) {
1187
1188
  if (Math.abs(point.x - start.x) >= Math.abs(point.y - start.y)) moveY = false;
@@ -1193,7 +1194,7 @@ function startChartPointDrag(controller, scene, target, start, options = {}) {
1193
1194
  if (moveOptions.fine) {
1194
1195
  if (s.logBase && !options.step) return v > 0 ? Number(v.toPrecision(3)) : v;
1195
1196
  const unit = options.step ? options.step / 10 : s.ticks.length > 1 ? (s.ticks[1] - s.ticks[0]) / 100 : void 0;
1196
- return _chunkWOIXNDHVcjs.snapChartValue.call(void 0, scene, v, unit, s.ticks);
1197
+ return _chunkTUXKLM5Wcjs.snapChartValue.call(void 0, scene, v, unit, s.ticks);
1197
1198
  }
1198
1199
  return snapChartDragValue(scene, v, { candidates: c, tolerancePx: options.tolerancePx, step: options.step, scale: s });
1199
1200
  };
@@ -1336,6 +1337,71 @@ function chartHitTest(scene, point, measure = (t, s, w = 400) => t.length * s *
1336
1337
  return point.x >= 0 && point.y >= 0 && point.x <= scene.width && point.y <= scene.height ? { kind: "chart" } : null;
1337
1338
  }
1338
1339
 
1340
+ // src/chart/tooltip.ts
1341
+ var VALUE_FAMILIES = /* @__PURE__ */ new Set(["cartesian", "xy", "pie", "radar", "waterfall", "funnel", "parliament", "slope"]);
1342
+ var SLICE_FAMILIES = /* @__PURE__ */ new Set(["pie", "funnel", "parliament"]);
1343
+ function valueFormat(spec, series) {
1344
+ return _nullishCoalesce(series.format, () => ( (series.axis === "secondary" ? spec.yAxis2.format : spec.yAxis.format)));
1345
+ }
1346
+ var percentText = (share) => _chunkTUXKLM5Wcjs.formatChartNumber.call(void 0, share, { style: "percent", decimals: share < 0.1 ? 1 : 0 });
1347
+ function item(spec, seriesIndex, index, share) {
1348
+ const family = _chunkOUO3DSRTcjs.chartFamily.call(void 0, spec);
1349
+ const series = spec.series[seriesIndex];
1350
+ const value = _nullishCoalesce(series.values[index], () => ( null));
1351
+ const slice = SLICE_FAMILIES.has(family);
1352
+ let text = _chunkTUXKLM5Wcjs.formatChartNumber.call(void 0, value, valueFormat(spec, series));
1353
+ if (family === "xy") {
1354
+ const x = _optionalChain([series, 'access', _78 => _78.x, 'optionalAccess', _79 => _79[index]]);
1355
+ if (x !== null && x !== void 0) text = `${_chunkTUXKLM5Wcjs.formatChartNumber.call(void 0, x, spec.xAxis.format)}, ${text}`;
1356
+ }
1357
+ if (share !== void 0) text = `${text} (${percentText(share)})`;
1358
+ return {
1359
+ seriesId: series.id,
1360
+ name: slice ? _nullishCoalesce(spec.categories[index], () => ( series.name)) : series.name,
1361
+ color: slice ? _nullishCoalesce(_optionalChain([series, 'access', _80 => _80.pointColors, 'optionalAccess', _81 => _81[index]]), () => ( _chunkOUO3DSRTcjs.chartSliceColor.call(void 0, spec, index))) : _chunkOUO3DSRTcjs.chartPointColor.call(void 0, spec, seriesIndex, index),
1362
+ value,
1363
+ ...share !== void 0 ? { share } : {},
1364
+ text
1365
+ };
1366
+ }
1367
+ function chartTooltipFor(spec, index, seriesId, anchor = { x: 0, y: 0 }) {
1368
+ const family = _chunkOUO3DSRTcjs.chartFamily.call(void 0, spec);
1369
+ if (!VALUE_FAMILIES.has(family)) return null;
1370
+ if (!Number.isInteger(index) || index < 0 || index >= Math.max(spec.categories.length, ...spec.series.map((s) => s.values.length))) return null;
1371
+ const visible = spec.series.map((s, i) => ({ s, i })).filter(({ s }) => !s.hidden && (!seriesId || s.id === seriesId));
1372
+ const present = visible.filter(({ s }) => s.values[index] !== null && s.values[index] !== void 0 && Number.isFinite(s.values[index]));
1373
+ if (!present.length) return null;
1374
+ const shareOf = (s) => {
1375
+ const v = s.values[index];
1376
+ if (spec.stacking === "percent" && family === "cartesian") {
1377
+ const total = spec.series.filter((t) => !t.hidden && t.axis === s.axis).reduce((sum, t) => sum + Math.abs(_nullishCoalesce(t.values[index], () => ( 0))), 0);
1378
+ return total ? Math.abs(v) / total : void 0;
1379
+ }
1380
+ if (family === "pie") {
1381
+ const total = s.values.reduce((sum, t) => sum + (t !== null && t > 0 ? t : 0), 0);
1382
+ return total && v > 0 ? v / total : void 0;
1383
+ }
1384
+ return void 0;
1385
+ };
1386
+ const items = present.map(({ s, i }) => item(spec, i, index, shareOf(s)));
1387
+ const title = family === "xy" ? spec.categories[index] || present[0].s.name : _nullishCoalesce(spec.categories[index], () => ( ""));
1388
+ return { title, index, items, x: anchor.x, y: anchor.y };
1389
+ }
1390
+ function chartTooltipAt(spec, scene, point, options = {}) {
1391
+ if (options.mode === "category" && scene.categoryScale) {
1392
+ const index = _chunkTUXKLM5Wcjs.chartCategoryAtPoint.call(void 0, scene, point);
1393
+ if (index !== void 0) return chartTooltipFor(spec, index, void 0, point);
1394
+ }
1395
+ const target = chartHitTest(scene, point, _nullishCoalesce(options.measureText, () => ( _chunkTUXKLM5Wcjs.estimateChartTextWidth)));
1396
+ if (_optionalChain([target, 'optionalAccess', _82 => _82.kind]) === "point") return chartTooltipFor(spec, target.index, target.seriesId, point);
1397
+ if (_optionalChain([target, 'optionalAccess', _83 => _83.kind]) === "category" && scene.categoryScale && options.mode === "category") return chartTooltipFor(spec, target.index, void 0, point);
1398
+ return null;
1399
+ }
1400
+ function sameChartTooltip(a, b) {
1401
+ if (!a || !b) return a === b;
1402
+ return a.index === b.index && a.items.length === b.items.length && a.items.every((it, i) => it.seriesId === b.items[i].seriesId && it.text === b.items[i].text);
1403
+ }
1404
+
1339
1405
  // src/chart/presence.ts
1340
1406
  var ChartPresence = class extends _chunkSWTUM32Hcjs.PresenceStore {
1341
1407
  };
@@ -1343,7 +1409,7 @@ var CHART_PRESENCE_COLORS = _chunkSWTUM32Hcjs.PRESENCE_COLORS;
1343
1409
  var realChartClock = _chunkSWTUM32Hcjs.realPresenceClock;
1344
1410
  var createInstantChartClock = _chunkSWTUM32Hcjs.createInstantPresenceClock;
1345
1411
  function chartPointAnchor(scene, seriesId, index) {
1346
- const mark = scene.marks.find((m) => (m.role === "bar" || m.role === "point") && _optionalChain([m, 'access', _78 => _78.target, 'optionalAccess', _79 => _79.kind]) === "point" && m.target.seriesId === seriesId && m.target.index === index);
1412
+ const mark = scene.marks.find((m) => (m.role === "bar" || m.role === "point") && _optionalChain([m, 'access', _84 => _84.target, 'optionalAccess', _85 => _85.kind]) === "point" && m.target.seriesId === seriesId && m.target.index === index);
1347
1413
  if (!mark) return null;
1348
1414
  if (mark.kind === "rect") return { x: mark.x + mark.width / 2, y: mark.y };
1349
1415
  if (mark.kind === "circle") return { x: mark.cx, y: mark.cy };
@@ -1369,10 +1435,10 @@ function planChartCommand(spec, scene, command, speed = 1) {
1369
1435
  case "setValue": {
1370
1436
  const at = chartPointAnchor(scene, command.seriesId, command.index);
1371
1437
  const series = spec.series.find((s) => s.id === command.seriesId);
1372
- const from = _nullishCoalesce(_optionalChain([series, 'optionalAccess', _80 => _80.values, 'access', _81 => _81[command.index]]), () => ( 0));
1373
- const scale = _optionalChain([series, 'optionalAccess', _82 => _82.axis]) === "secondary" ? _nullishCoalesce(scene.valueScale2, () => ( scene.valueScale)) : scene.valueScale;
1438
+ const from = _nullishCoalesce(_optionalChain([series, 'optionalAccess', _86 => _86.values, 'access', _87 => _87[command.index]]), () => ( 0));
1439
+ const scale = _optionalChain([series, 'optionalAccess', _88 => _88.axis]) === "secondary" ? _nullishCoalesce(scene.valueScale2, () => ( scene.valueScale)) : scene.valueScale;
1374
1440
  if (at && scale) {
1375
- const px = _chunkWOIXNDHVcjs.linearMap.call(void 0, command.value, scale.domain, scale.range);
1441
+ const px = _chunkTUXKLM5Wcjs.linearMap.call(void 0, command.value, scale.domain, scale.range);
1376
1442
  const to = scale.axis === "y" ? { x: at.x, y: px } : { x: px, y: at.y };
1377
1443
  steps.push({ type: "move", to: at, ms: ms(380) }, { type: "press" }, { type: "drag", to, ms: ms(520), from, value: command.value }, { type: "release" });
1378
1444
  } else steps.push({ type: "drag", to: { x: scene.plot.x + scene.plot.width / 2, y: scene.plot.y + scene.plot.height / 2 }, ms: ms(200), from, value: command.value });
@@ -1382,12 +1448,12 @@ function planChartCommand(spec, scene, command, speed = 1) {
1382
1448
  case "select": {
1383
1449
  const sel = command.selection;
1384
1450
  let to = null;
1385
- if (_optionalChain([sel, 'optionalAccess', _83 => _83.kind]) === "point") to = chartPointAnchor(scene, sel.seriesId, sel.index);
1451
+ if (_optionalChain([sel, 'optionalAccess', _89 => _89.kind]) === "point") to = chartPointAnchor(scene, sel.seriesId, sel.index);
1386
1452
  else if (sel) {
1387
1453
  const m = scene.marks.find((x) => x.target && JSON.stringify(x.target) === JSON.stringify(sel));
1388
- if (_optionalChain([m, 'optionalAccess', _84 => _84.kind]) === "text") to = { x: m.x, y: m.y };
1389
- else if (_optionalChain([m, 'optionalAccess', _85 => _85.kind]) === "rect") to = { x: m.x + m.width / 2, y: m.y + m.height / 2 };
1390
- else if (_optionalChain([m, 'optionalAccess', _86 => _86.kind]) === "circle") to = { x: m.cx, y: m.cy };
1454
+ if (_optionalChain([m, 'optionalAccess', _90 => _90.kind]) === "text") to = { x: m.x, y: m.y };
1455
+ else if (_optionalChain([m, 'optionalAccess', _91 => _91.kind]) === "rect") to = { x: m.x + m.width / 2, y: m.y + m.height / 2 };
1456
+ else if (_optionalChain([m, 'optionalAccess', _92 => _92.kind]) === "circle") to = { x: m.cx, y: m.cy };
1391
1457
  }
1392
1458
  if (to) steps.push({ type: "move", to, ms: ms(380) }, { type: "press" }, { type: "release" });
1393
1459
  steps.push({ type: "commit" });
@@ -1469,7 +1535,7 @@ var ChartDirector = class {
1469
1535
  if (command.kind !== "setValue") break;
1470
1536
  const stale2 = this.stale(command);
1471
1537
  if (stale2) return { ok: false, command, message: stale2 };
1472
- const label = `${_nullishCoalesce(_optionalChain([this, 'access', _87 => _87.presence, 'access', _88 => _88.getState, 'call', _89 => _89(), 'access', _90 => _90.actors, 'access', _91 => _91.find, 'call', _92 => _92((a) => a.id === id), 'optionalAccess', _93 => _93.name]), () => ( "Agent"))}: edit value`;
1538
+ const label = `${_nullishCoalesce(_optionalChain([this, 'access', _93 => _93.presence, 'access', _94 => _94.getState, 'call', _95 => _95(), 'access', _96 => _96.actors, 'access', _97 => _97.find, 'call', _98 => _98((a) => a.id === id), 'optionalAccess', _99 => _99.name]), () => ( "Agent"))}: edit value`;
1473
1539
  await this.move(id, where(), step.to, step.ms, (e) => {
1474
1540
  const v = step.from + (step.value - step.from) * e;
1475
1541
  this.controller.setValue(command.seriesId, command.index, Number(v.toPrecision(12)), { label });
@@ -1651,7 +1717,7 @@ function createChartToolProvider(controller, options = {}) {
1651
1717
  return {
1652
1718
  frame: at,
1653
1719
  time: _nullishCoalesce(s.categories[Math.round(at)], () => ( null)),
1654
- ranking: _chunkWOIXNDHVcjs.chartRaceRanking.call(void 0, s, at).slice(0, s.raceTopN).map((e) => ({ rank: e.rank + 1, series: e.seriesId, name: e.name, value: e.value }))
1720
+ ranking: _chunkTUXKLM5Wcjs.chartRaceRanking.call(void 0, s, at).slice(0, s.raceTopN).map((e) => ({ rank: e.rank + 1, series: e.seriesId, name: e.name, value: e.value }))
1655
1721
  };
1656
1722
  };
1657
1723
  const linksSummary = () => ({ links: spec().links, nodes: spec().sankeyNodes.map((name, i) => ({ name, value: _chunkOUO3DSRTcjs.chartSankeyNodeValues.call(void 0, spec().links, spec().sankeyNodes)[i] })) });
@@ -1669,7 +1735,7 @@ function createChartToolProvider(controller, options = {}) {
1669
1735
  spec: controller.toJSON(),
1670
1736
  table: table(),
1671
1737
  selection: controller.getState().selection,
1672
- summary: _chunk2F4GAZL5cjs.summarizeChart.call(void 0, controller.toJSON(), { width, height }),
1738
+ summary: _chunkGXEC4FS6cjs.summarizeChart.call(void 0, controller.toJSON(), { width, height }),
1673
1739
  ...spec().tree.length ? { treeTable: treeTable() } : {},
1674
1740
  issues: controller.getState().issues,
1675
1741
  ...reason ? { readOnly: reason } : {}
@@ -1694,8 +1760,8 @@ function createChartToolProvider(controller, options = {}) {
1694
1760
  handler: async ({ width = size.width, height = size.height, format = "svg", time }) => {
1695
1761
  const json = controller.toJSON();
1696
1762
  const raceFrame = time !== void 0 ? raceFrameOf(time) : controller.getState().raceFrame;
1697
- const scene = _chunkWOIXNDHVcjs.layoutChart.call(void 0, json, { width, height, selection: null, raceFrame });
1698
- const svg = _chunk2F4GAZL5cjs.chartSceneToSvg.call(void 0, scene, { ariaLabel: json.title || void 0, description: _chunk2F4GAZL5cjs.describeChart.call(void 0, json) });
1763
+ const scene = _chunkTUXKLM5Wcjs.layoutChart.call(void 0, json, { width, height, selection: null, raceFrame });
1764
+ const svg = _chunkGXEC4FS6cjs.chartSceneToSvg.call(void 0, scene, { ariaLabel: json.title || void 0, description: _chunkGXEC4FS6cjs.describeChart.call(void 0, json) });
1699
1765
  const warnings = scene.warnings;
1700
1766
  if (format === "png") {
1701
1767
  if (!options.rasterize) fail2('This host cannot rasterize charts; call render_chart with format "svg", or get_chart for the layout warnings.');
@@ -1729,7 +1795,7 @@ function createChartToolProvider(controller, options = {}) {
1729
1795
  handler: ({ colors, surface }) => {
1730
1796
  const s = spec();
1731
1797
  const visible = s.series.filter((x) => !x.hidden);
1732
- const own = _chunkOUO3DSRTcjs.chartSpecColorsByCategory.call(void 0, s) ? s.categories.map((_, i) => _optionalChain([visible, 'access', _94 => _94[0], 'optionalAccess', _95 => _95.pointColors, 'optionalAccess', _96 => _96[i]]) || _chunkOUO3DSRTcjs.chartSliceColor.call(void 0, s, i)) : visible.map((x) => _chunkOUO3DSRTcjs.chartSeriesColor.call(void 0, s, s.series.indexOf(x)));
1798
+ const own = _chunkOUO3DSRTcjs.chartSpecColorsByCategory.call(void 0, s) ? s.categories.map((_, i) => _optionalChain([visible, 'access', _100 => _100[0], 'optionalAccess', _101 => _101.pointColors, 'optionalAccess', _102 => _102[i]]) || _chunkOUO3DSRTcjs.chartSliceColor.call(void 0, s, i)) : visible.map((x) => _chunkOUO3DSRTcjs.chartSeriesColor.call(void 0, s, s.series.indexOf(x)));
1733
1799
  return { colors: _nullishCoalesce(colors, () => ( own)), ..._chunkOUO3DSRTcjs.checkChartColors.call(void 0, _nullishCoalesce(colors, () => ( own)), { surface }) };
1734
1800
  }
1735
1801
  };
@@ -1759,14 +1825,32 @@ function createChartToolProvider(controller, options = {}) {
1759
1825
  annotations: { title: "Read a trendline fit", ...READ },
1760
1826
  handler: ({ series, index }) => {
1761
1827
  const s = seriesById(series);
1762
- const line = _optionalChain([s, 'access', _97 => _97.trendlines, 'optionalAccess', _98 => _98[index]]);
1763
- if (!line) fail2(`"${s.name}" has no trendline ${index}; it has ${_nullishCoalesce(_optionalChain([s, 'access', _99 => _99.trendlines, 'optionalAccess', _100 => _100.length]), () => ( 0))}.`);
1828
+ const line = _optionalChain([s, 'access', _103 => _103.trendlines, 'optionalAccess', _104 => _104[index]]);
1829
+ if (!line) fail2(`"${s.name}" has no trendline ${index}; it has ${_nullishCoalesce(_optionalChain([s, 'access', _105 => _105.trendlines, 'optionalAccess', _106 => _106.length]), () => ( 0))}.`);
1764
1830
  if (line.type === "moving-average") return { trendline: line, points: controller.trendlineMovingAverage(s.id, index) };
1765
1831
  const fit = controller.trendlineFit(s.id, index);
1766
1832
  if (!fit) fail2(`The ${line.type} trendline on "${s.name}" cannot be fitted: it needs more points (and positive values for log, exponential and power fits).`);
1767
1833
  return { trendline: line, coefficients: fit.coefficients, r2: fit.r2, equation: fit.equation, points: fit.points };
1768
1834
  }
1769
1835
  };
1836
+ const getTooltip = {
1837
+ name: "get_chart_tooltip",
1838
+ title: "Read a chart tooltip",
1839
+ description: "Returns what a viewer sees when hovering a category (or one series in it): the category label and, for each visible series with a value there, its name, colour, value, share (percent-stacked and pie charts, 0\u20131) and the value as the chart writes it. Returns null for charts without one value per category (histogram, box, treemap, sunburst, sankey, \u2026) or when no visible series has a value there.",
1840
+ inputSchema: {
1841
+ type: "object",
1842
+ properties: { category: _chunkGTF4RYXJcjs.CATEGORY_REF, series: { ..._chunkGTF4RYXJcjs.SERIES_REF, description: `${_chunkGTF4RYXJcjs.SERIES_REF.description} Omit to include every visible series in the category.` } },
1843
+ required: ["category"],
1844
+ additionalProperties: false
1845
+ },
1846
+ annotations: { title: "Read a chart tooltip", ...READ },
1847
+ handler: ({ category, series }) => {
1848
+ const index = categoryIndex(category);
1849
+ const seriesId = series === void 0 ? void 0 : seriesById(series).id;
1850
+ const tooltip = chartTooltipFor(controller.toJSON(), index, seriesId);
1851
+ return tooltip && { title: tooltip.title, index: tooltip.index, items: tooltip.items };
1852
+ }
1853
+ };
1770
1854
  const raceRanking = {
1771
1855
  name: "get_chart_race_ranking",
1772
1856
  title: "Read a bar race ranking",
@@ -1783,10 +1867,10 @@ function createChartToolProvider(controller, options = {}) {
1783
1867
  annotations: { title: "List map regions", ...READ },
1784
1868
  handler: ({ map }) => {
1785
1869
  const id = _nullishCoalesce(map, () => ( spec().map));
1786
- const maps = _chunkWOIXNDHVcjs.listChartMaps.call(void 0, ).map((m) => ({ id: m.id, name: m.name, regions: m.regions.length }));
1787
- const geometry = _chunkWOIXNDHVcjs.getChartMap.call(void 0, id);
1870
+ const maps = _chunkTUXKLM5Wcjs.listChartMaps.call(void 0, ).map((m) => ({ id: m.id, name: m.name, regions: m.regions.length }));
1871
+ const geometry = _chunkTUXKLM5Wcjs.getChartMap.call(void 0, id);
1788
1872
  if (!geometry) fail2(maps.length ? `There is no map "${id}"; the host has ${maps.map((m) => `"${m.id}"`).join(", ")}.` : `There is no map "${id}": the host has not registered any maps (EUROPE_CHART_MAP in @pixerate/editor/chart-maps).`);
1789
- const matches = _chunkWOIXNDHVcjs.matchChartMapRegions.call(void 0, geometry, spec().categories);
1873
+ const matches = _chunkTUXKLM5Wcjs.matchChartMapRegions.call(void 0, geometry, spec().categories);
1790
1874
  return {
1791
1875
  maps,
1792
1876
  map: id,
@@ -1803,8 +1887,8 @@ function createChartToolProvider(controller, options = {}) {
1803
1887
  inputSchema: { type: "object", properties: {}, additionalProperties: false },
1804
1888
  annotations: { title: "List chart presets", ...READ },
1805
1889
  handler: () => ({
1806
- layouts: _chunk2F4GAZL5cjs.CHART_LAYOUT_PRESETS.map(({ id, label, description }) => ({ id, label, description })),
1807
- colorSchemes: _chunk2F4GAZL5cjs.CHART_COLOR_SCHEMES.map(({ id, label, description, palette }) => ({ id, label, description, palette }))
1890
+ layouts: _chunkGXEC4FS6cjs.CHART_LAYOUT_PRESETS.map(({ id, label, description }) => ({ id, label, description })),
1891
+ colorSchemes: _chunkGXEC4FS6cjs.CHART_COLOR_SCHEMES.map(({ id, label, description, palette }) => ({ id, label, description, palette }))
1808
1892
  })
1809
1893
  };
1810
1894
  const exportMermaid = {
@@ -1813,7 +1897,7 @@ function createChartToolProvider(controller, options = {}) {
1813
1897
  description: 'Returns the chart as Mermaid text for Markdown or chat: xychart-beta, pie or radar-beta, sankey-beta for Sankey diagrams with flows, treemap-beta for treemaps and sunbursts (with their levels). With meta (default true) one "%% @pixerate {\u2026}" comment keeps what Mermaid cannot express, so import_chart_mermaid gets the chart back exactly.',
1814
1898
  inputSchema: { type: "object", properties: { meta: { type: "boolean", description: "Include the round-trip comment (default true)." } }, additionalProperties: false },
1815
1899
  annotations: { title: "Export chart as Mermaid", ...READ },
1816
- handler: ({ meta = true }) => ({ mermaid: _chunk2F4GAZL5cjs.chartToMermaid.call(void 0, controller.toJSON(), { meta }) })
1900
+ handler: ({ meta = true }) => ({ mermaid: _chunkGXEC4FS6cjs.chartToMermaid.call(void 0, controller.toJSON(), { meta }) })
1817
1901
  };
1818
1902
  const exportOoxml = {
1819
1903
  name: "export_chart_ooxml",
@@ -2002,7 +2086,7 @@ function createChartToolProvider(controller, options = {}) {
2002
2086
  annotations: { title: "Import a Mermaid chart", ...DESTRUCTIVE },
2003
2087
  handler: ({ mermaid }) => {
2004
2088
  const fenced = /```(?:mermaid)?\s*\n([\s\S]*?)```/.exec(mermaid);
2005
- const read = _chunk2F4GAZL5cjs.chartFromMermaid.call(void 0, fenced ? fenced[1] : mermaid);
2089
+ const read = _chunkGXEC4FS6cjs.chartFromMermaid.call(void 0, fenced ? fenced[1] : mermaid);
2006
2090
  if (!read.family) fail2(read.issues.map((i) => i.message).join(" ") || "Expected Mermaid starting with xychart-beta, pie, radar-beta, sankey-beta or treemap-beta.");
2007
2091
  resolve(controller.update({ ...read.spec }, { label: "Import Mermaid chart" }));
2008
2092
  return { spec: controller.toJSON(), issues: read.issues };
@@ -2047,7 +2131,7 @@ function createChartToolProvider(controller, options = {}) {
2047
2131
  handler: ({ series, index }) => {
2048
2132
  const s = seriesById(series);
2049
2133
  resolve(controller.removeTrendline(s.id, index));
2050
- return { series: s.id, trendlines: _nullishCoalesce(_optionalChain([controller, 'access', _101 => _101.getSeries, 'call', _102 => _102(s.id), 'optionalAccess', _103 => _103.trendlines]), () => ( [])) };
2134
+ return { series: s.id, trendlines: _nullishCoalesce(_optionalChain([controller, 'access', _107 => _107.getSeries, 'call', _108 => _108(s.id), 'optionalAccess', _109 => _109.trendlines]), () => ( [])) };
2051
2135
  }
2052
2136
  };
2053
2137
  const referenceTools = (what) => {
@@ -2107,7 +2191,7 @@ function createChartToolProvider(controller, options = {}) {
2107
2191
  const s = seriesById(series);
2108
2192
  const index = categoryIndex(category);
2109
2193
  resolve(controller.setCallout(s.id, index, label));
2110
- return { series: s.id, index, category: spec().categories[index], label: _nullishCoalesce(_optionalChain([controller, 'access', _104 => _104.getSeries, 'call', _105 => _105(s.id), 'optionalAccess', _106 => _106.callouts, 'optionalAccess', _107 => _107[index]]), () => ( null)) };
2194
+ return { series: s.id, index, category: spec().categories[index], label: _nullishCoalesce(_optionalChain([controller, 'access', _110 => _110.getSeries, 'call', _111 => _111(s.id), 'optionalAccess', _112 => _112.callouts, 'optionalAccess', _113 => _113[index]]), () => ( null)) };
2111
2195
  }
2112
2196
  };
2113
2197
  const highlight = {
@@ -2259,7 +2343,7 @@ function createChartToolProvider(controller, options = {}) {
2259
2343
  handler: (args) => {
2260
2344
  const result = resolve(controller.addLink(args));
2261
2345
  const s = spec();
2262
- const through = (n) => _nullishCoalesce(_optionalChain([s, 'access', _108 => _108.series, 'access', _109 => _109[0], 'optionalAccess', _110 => _110.values, 'access', _111 => _111[s.sankeyNodes.indexOf(n)]]), () => ( 0));
2346
+ const through = (n) => _nullishCoalesce(_optionalChain([s, 'access', _114 => _114.series, 'access', _115 => _115[0], 'optionalAccess', _116 => _116.values, 'access', _117 => _117[s.sankeyNodes.indexOf(n)]]), () => ( 0));
2263
2347
  const link = s.links[result.index];
2264
2348
  return { index: result.index, link, nodes: [link.source, link.target].map((name) => ({ name, value: through(name) })) };
2265
2349
  }
@@ -2318,8 +2402,8 @@ function createChartToolProvider(controller, options = {}) {
2318
2402
  inputSchema: {
2319
2403
  type: "object",
2320
2404
  properties: {
2321
- layout: { type: "string", enum: _chunk2F4GAZL5cjs.CHART_LAYOUT_PRESETS.map((p) => p.id), description: "Quick layout id." },
2322
- colors: { type: "string", enum: _chunk2F4GAZL5cjs.CHART_COLOR_SCHEMES.map((p) => p.id), description: "Colour scheme id." }
2405
+ layout: { type: "string", enum: _chunkGXEC4FS6cjs.CHART_LAYOUT_PRESETS.map((p) => p.id), description: "Quick layout id." },
2406
+ colors: { type: "string", enum: _chunkGXEC4FS6cjs.CHART_COLOR_SCHEMES.map((p) => p.id), description: "Colour scheme id." }
2323
2407
  },
2324
2408
  additionalProperties: false
2325
2409
  },
@@ -2415,12 +2499,12 @@ function createChartToolProvider(controller, options = {}) {
2415
2499
  },
2416
2500
  annotations: { title: "Drag a chart point", ...WRITE },
2417
2501
  handler: ({ from, to, fine, lockAxis, width = size.width, height = size.height }) => {
2418
- const scene = _chunkWOIXNDHVcjs.layoutChart.call(void 0, controller.toJSON(), { width, height });
2502
+ const scene = _chunkTUXKLM5Wcjs.layoutChart.call(void 0, controller.toJSON(), { width, height });
2419
2503
  const start = { x: from.x * width, y: from.y * height };
2420
2504
  const target = chartHitTest(scene, start);
2421
- if (_optionalChain([target, 'optionalAccess', _112 => _112.kind]) !== "point") fail2(`There is no bar or point at (${from.x}, ${from.y}); ${target ? `that is the ${target.kind}` : "that is outside the chart"}. Use render_chart to find marks.`);
2505
+ if (_optionalChain([target, 'optionalAccess', _118 => _118.kind]) !== "point") fail2(`There is no bar or point at (${from.x}, ${from.y}); ${target ? `that is the ${target.kind}` : "that is outside the chart"}. Use render_chart to find marks.`);
2422
2506
  const t = target;
2423
- const before = _nullishCoalesce(_optionalChain([controller, 'access', _113 => _113.getSeries, 'call', _114 => _114(t.seriesId), 'optionalAccess', _115 => _115.values, 'access', _116 => _116[t.index]]), () => ( null));
2507
+ const before = _nullishCoalesce(_optionalChain([controller, 'access', _119 => _119.getSeries, 'call', _120 => _120(t.seriesId), 'optionalAccess', _121 => _121.values, 'access', _122 => _122[t.index]]), () => ( null));
2424
2508
  const session = startChartPointDrag(controller, scene, t, start);
2425
2509
  if (!session) fail2("That point cannot be dragged here (percent-stacked charts, pies and gaps cannot be dragged).");
2426
2510
  session.move({ x: to.x * width, y: to.y * height }, { fine, lockAxis });
@@ -2445,10 +2529,10 @@ function createChartToolProvider(controller, options = {}) {
2445
2529
  },
2446
2530
  annotations: { title: "Press a key on the chart", ...DESTRUCTIVE },
2447
2531
  handler: ({ key: k, shift, alt }) => {
2448
- const scene = _chunkWOIXNDHVcjs.layoutChart.call(void 0, controller.toJSON(), size);
2532
+ const scene = _chunkTUXKLM5Wcjs.layoutChart.call(void 0, controller.toJSON(), size);
2449
2533
  const used = handleChartKey(controller, scene, { key: k, shiftKey: shift, altKey: alt });
2450
2534
  const sel = controller.getState().selection;
2451
- const value = _optionalChain([sel, 'optionalAccess', _117 => _117.kind]) === "point" ? _nullishCoalesce(_optionalChain([controller, 'access', _118 => _118.getSeries, 'call', _119 => _119(sel.seriesId), 'optionalAccess', _120 => _120.values, 'access', _121 => _121[sel.index]]), () => ( null)) : void 0;
2535
+ const value = _optionalChain([sel, 'optionalAccess', _123 => _123.kind]) === "point" ? _nullishCoalesce(_optionalChain([controller, 'access', _124 => _124.getSeries, 'call', _125 => _125(sel.seriesId), 'optionalAccess', _126 => _126.values, 'access', _127 => _127[sel.index]]), () => ( null)) : void 0;
2452
2536
  return { used, selection: sel, ...value !== void 0 ? { value } : {} };
2453
2537
  }
2454
2538
  };
@@ -2476,7 +2560,7 @@ function createChartToolProvider(controller, options = {}) {
2476
2560
  return { redone, ...redone ? { label } : {} };
2477
2561
  }
2478
2562
  };
2479
- const reads = [getChart, renderChart, checkColors, recommend, getTrendline, raceRanking, mapRegions, listPresets, exportMermaid, exportOoxml];
2563
+ const reads = [getChart, renderChart, checkColors, recommend, getTrendline, getTooltip, raceRanking, mapRegions, listPresets, exportMermaid, exportOoxml];
2480
2564
  const writes = [
2481
2565
  updateChart,
2482
2566
  setData,
@@ -2601,7 +2685,7 @@ var ChartStream = (_class = class {
2601
2685
  issues = complete ? read.issues : [];
2602
2686
  }
2603
2687
  } else {
2604
- const read = _chunk2F4GAZL5cjs.chartFromMermaid.call(void 0, text, { partial: !complete });
2688
+ const read = _chunkGXEC4FS6cjs.chartFromMermaid.call(void 0, text, { partial: !complete });
2605
2689
  if (read.family) {
2606
2690
  spec = read.spec;
2607
2691
  issues = complete ? read.issues : [];
@@ -2698,7 +2782,7 @@ function elements(root, localName) {
2698
2782
  }
2699
2783
  function relId(el, localName = "id") {
2700
2784
  for (const a of Array.from(el.attributes)) {
2701
- if (a.localName === localName && (_optionalChain([a, 'access', _122 => _122.namespaceURI, 'optionalAccess', _123 => _123.includes, 'call', _124 => _124("relationships")]) || a.prefix === "r")) return a.value;
2785
+ if (a.localName === localName && (_optionalChain([a, 'access', _128 => _128.namespaceURI, 'optionalAccess', _129 => _129.includes, 'call', _130 => _130("relationships")]) || a.prefix === "r")) return a.value;
2702
2786
  }
2703
2787
  return void 0;
2704
2788
  }
@@ -2717,7 +2801,7 @@ async function readRels(r, partPath) {
2717
2801
  const id = rel.getAttribute("Id");
2718
2802
  if (!id) continue;
2719
2803
  const target = _nullishCoalesce(rel.getAttribute("Target"), () => ( ""));
2720
- const external = _optionalChain([rel, 'access', _125 => _125.getAttribute, 'call', _126 => _126("TargetMode"), 'optionalAccess', _127 => _127.toLowerCase, 'call', _128 => _128()]) === "external";
2804
+ const external = _optionalChain([rel, 'access', _131 => _131.getAttribute, 'call', _132 => _132("TargetMode"), 'optionalAccess', _133 => _133.toLowerCase, 'call', _134 => _134()]) === "external";
2721
2805
  rels.set(id, { type: _nullishCoalesce(rel.getAttribute("Type"), () => ( "")), target: external ? target : resolvePartPath(dirname(partPath), target), external });
2722
2806
  }
2723
2807
  return rels;
@@ -2727,7 +2811,7 @@ function frameName(ref) {
2727
2811
  for (let el = ref.parentElement; el; el = el.parentElement) {
2728
2812
  if (el.localName === "graphicFrame") {
2729
2813
  const nv = elements(el, "cNvPr")[0];
2730
- return _optionalChain([nv, 'optionalAccess', _129 => _129.getAttribute, 'call', _130 => _130("name")]) || void 0;
2814
+ return _optionalChain([nv, 'optionalAccess', _135 => _135.getAttribute, 'call', _136 => _136("name")]) || void 0;
2731
2815
  }
2732
2816
  }
2733
2817
  return void 0;
@@ -2763,8 +2847,8 @@ function columnName(index) {
2763
2847
  return name;
2764
2848
  }
2765
2849
  function anchorCell(marker) {
2766
- const col = Number(_optionalChain([firstChild, 'call', _131 => _131(marker, "col"), 'optionalAccess', _132 => _132.textContent]));
2767
- const row = Number(_optionalChain([firstChild, 'call', _133 => _133(marker, "row"), 'optionalAccess', _134 => _134.textContent]));
2850
+ const col = Number(_optionalChain([firstChild, 'call', _137 => _137(marker, "col"), 'optionalAccess', _138 => _138.textContent]));
2851
+ const row = Number(_optionalChain([firstChild, 'call', _139 => _139(marker, "row"), 'optionalAccess', _140 => _140.textContent]));
2768
2852
  return Number.isInteger(col) && Number.isInteger(row) && col >= 0 && row >= 0 ? `${columnName(col)}${row + 1}` : void 0;
2769
2853
  }
2770
2854
  function drawingPlace(ref) {
@@ -2927,7 +3011,7 @@ function createOfficeChartToolProvider(options = {}) {
2927
3011
  description: "Lists the Office files the user opened that charts can be read from. Returns their names and sizes in bytes.",
2928
3012
  inputSchema: { type: "object", properties: {}, additionalProperties: false },
2929
3013
  annotations: { title: "List open files", ...READ2 },
2930
- handler: () => ({ files: (_nullishCoalesce(_optionalChain([options, 'access', _135 => _135.files, 'optionalCall', _136 => _136()]), () => ( []))).map((f) => ({ name: f.name, bytes: f.data.byteLength })) })
3014
+ handler: () => ({ files: (_nullishCoalesce(_optionalChain([options, 'access', _141 => _141.files, 'optionalCall', _142 => _142()]), () => ( []))).map((f) => ({ name: f.name, bytes: f.data.byteLength })) })
2931
3015
  };
2932
3016
  const listCharts = {
2933
3017
  name: "list_file_charts",
@@ -3015,14 +3099,14 @@ function chartColors(spec) {
3015
3099
  if (_chunkOUO3DSRTcjs.chartColorsByCategory.call(void 0, spec.type)) {
3016
3100
  const first = visible[0];
3017
3101
  spec.categories.forEach((name, index) => {
3018
- const color = _optionalChain([first, 'optionalAccess', _137 => _137.s, 'access', _138 => _138.pointColors, 'optionalAccess', _139 => _139[index]]) || _chunkOUO3DSRTcjs.chartSliceColor.call(void 0, spec, index);
3102
+ const color = _optionalChain([first, 'optionalAccess', _143 => _143.s, 'access', _144 => _144.pointColors, 'optionalAccess', _145 => _145[index]]) || _chunkOUO3DSRTcjs.chartSliceColor.call(void 0, spec, index);
3019
3103
  out.push({ color, label: `Slice "${name}"`, target: first ? { kind: "point", seriesId: first.s.id, index } : { kind: "category", index } });
3020
3104
  });
3021
3105
  return out;
3022
3106
  }
3023
3107
  for (const { s, i } of visible) {
3024
3108
  out.push({ color: _chunkOUO3DSRTcjs.chartSeriesColor.call(void 0, spec, i), label: `Series "${s.name}"`, target: { kind: "series", seriesId: s.id } });
3025
- _optionalChain([s, 'access', _140 => _140.pointColors, 'optionalAccess', _141 => _141.forEach, 'call', _142 => _142((c, index) => {
3109
+ _optionalChain([s, 'access', _146 => _146.pointColors, 'optionalAccess', _147 => _147.forEach, 'call', _148 => _148((c, index) => {
3026
3110
  if (c) out.push({ color: c, label: `Point ${index + 1} of "${s.name}"`, target: { kind: "point", seriesId: s.id, index } });
3027
3111
  })]);
3028
3112
  }
@@ -3030,7 +3114,7 @@ function chartColors(spec) {
3030
3114
  }
3031
3115
  var paletteOf = (profile) => {
3032
3116
  const palette = profile.palette;
3033
- if (!_optionalChain([palette, 'optionalAccess', _143 => _143.length])) throw new Error("the profile has no palette.");
3117
+ if (!_optionalChain([palette, 'optionalAccess', _149 => _149.length])) throw new Error("the profile has no palette.");
3034
3118
  return palette;
3035
3119
  };
3036
3120
  var paletteOnly = {
@@ -3124,8 +3208,8 @@ var chartStyleDomain = {
3124
3208
  type: "object",
3125
3209
  properties: {
3126
3210
  palette: { type: "array", items: COLOR, minItems: 1, description: "Series colours in order." },
3127
- colorSchemes: { type: "array", items: { type: "string", enum: _chunk2F4GAZL5cjs.CHART_COLOR_SCHEMES.map((s) => s.id) }, description: "Colour scheme ids allowed besides the palette (empty: none)." },
3128
- layouts: { type: "array", items: { type: "string", enum: _chunk2F4GAZL5cjs.CHART_LAYOUT_PRESETS.map((p) => p.id) }, description: "Layout preset ids allowed." },
3211
+ colorSchemes: { type: "array", items: { type: "string", enum: _chunkGXEC4FS6cjs.CHART_COLOR_SCHEMES.map((s) => s.id) }, description: "Colour scheme ids allowed besides the palette (empty: none)." },
3212
+ layouts: { type: "array", items: { type: "string", enum: _chunkGXEC4FS6cjs.CHART_LAYOUT_PRESETS.map((p) => p.id) }, description: "Layout preset ids allowed." },
3129
3213
  theme: {
3130
3214
  type: "object",
3131
3215
  properties: {
@@ -3164,7 +3248,7 @@ var chartStyleDomain = {
3164
3248
  };
3165
3249
  function chartStylePatch(profile) {
3166
3250
  const p = profile;
3167
- return { ..._nullishCoalesce(p.defaults, () => ( {})), ..._optionalChain([p, 'access', _144 => _144.palette, 'optionalAccess', _145 => _145.length]) ? { palette: [...p.palette] } : {} };
3251
+ return { ..._nullishCoalesce(p.defaults, () => ( {})), ..._optionalChain([p, 'access', _150 => _150.palette, 'optionalAccess', _151 => _151.length]) ? { palette: [...p.palette] } : {} };
3168
3252
  }
3169
3253
  function createChartStyleToolProvider(controller, styles, options = {}) {
3170
3254
  if (!styles.domains.some((d) => d.id === "chart")) throw new Error('The style resolver has no "chart" domain; add chartStyleDomain to its domains.');
@@ -3407,4 +3491,8 @@ function createChartStyleToolProvider(controller, styles, options = {}) {
3407
3491
 
3408
3492
 
3409
3493
 
3410
- exports.CHART_AXIS_KINDS = _chunkOUO3DSRTcjs.CHART_AXIS_KINDS; exports.CHART_AXIS_SCALES = _chunkOUO3DSRTcjs.CHART_AXIS_SCALES; exports.CHART_COLOR_SCHEMES = _chunk2F4GAZL5cjs.CHART_COLOR_SCHEMES; exports.CHART_CURVES = _chunkOUO3DSRTcjs.CHART_CURVES; exports.CHART_DATE_STEPS = _chunkWOIXNDHVcjs.CHART_DATE_STEPS; exports.CHART_ERROR_BAR_DIRECTIONS = _chunkOUO3DSRTcjs.CHART_ERROR_BAR_DIRECTIONS; exports.CHART_ERROR_BAR_LABELS = _chunkOUO3DSRTcjs.CHART_ERROR_BAR_LABELS; exports.CHART_ERROR_BAR_TYPES = _chunkOUO3DSRTcjs.CHART_ERROR_BAR_TYPES; exports.CHART_LABEL_POSITIONS = _chunkOUO3DSRTcjs.CHART_LABEL_POSITIONS; exports.CHART_LAYOUT_PRESETS = _chunk2F4GAZL5cjs.CHART_LAYOUT_PRESETS; exports.CHART_LEGEND_POSITIONS = _chunkOUO3DSRTcjs.CHART_LEGEND_POSITIONS; exports.CHART_LIKERT_NEUTRALS = _chunkOUO3DSRTcjs.CHART_LIKERT_NEUTRALS; exports.CHART_LIKERT_SORTS = _chunkOUO3DSRTcjs.CHART_LIKERT_SORTS; exports.CHART_MARKERS = _chunkOUO3DSRTcjs.CHART_MARKERS; exports.CHART_MERMAID_META_PREFIX = _chunk2F4GAZL5cjs.CHART_MERMAID_META_PREFIX; exports.CHART_NUMBER_STYLES = _chunkOUO3DSRTcjs.CHART_NUMBER_STYLES; exports.CHART_OOXML_CONTENT_TYPE = _chunkVKHJJUBKcjs.CHART_OOXML_CONTENT_TYPE; exports.CHART_OOXML_NS = _chunkVKHJJUBKcjs.CHART_OOXML_NS; exports.CHART_OOXML_RELATIONSHIP = _chunkVKHJJUBKcjs.CHART_OOXML_RELATIONSHIP; exports.CHART_ORIENTATIONS = _chunkOUO3DSRTcjs.CHART_ORIENTATIONS; exports.CHART_PALETTE_SHADES = _chunkOUO3DSRTcjs.CHART_PALETTE_SHADES; exports.CHART_PRESENCE_COLORS = CHART_PRESENCE_COLORS; exports.CHART_RADAR_GRATICULES = _chunkOUO3DSRTcjs.CHART_RADAR_GRATICULES; exports.CHART_RASTER_MAX_SIZE = CHART_RASTER_MAX_SIZE; exports.CHART_REFERENCE_AXES = _chunkOUO3DSRTcjs.CHART_REFERENCE_AXES; exports.CHART_SANKEY_LINK_COLORS = _chunkOUO3DSRTcjs.CHART_SANKEY_LINK_COLORS; exports.CHART_SERIES_TYPES = _chunkOUO3DSRTcjs.CHART_SERIES_TYPES; exports.CHART_STACKINGS = _chunkOUO3DSRTcjs.CHART_STACKINGS; exports.CHART_TRENDLINE_TYPES = _chunkOUO3DSRTcjs.CHART_TRENDLINE_TYPES; exports.CHART_TYPES = _chunkOUO3DSRTcjs.CHART_TYPES; exports.CHART_TYPE_LABELS = _chunkOUO3DSRTcjs.CHART_TYPE_LABELS; exports.CSS_VARIABLE_CHART_THEME = _chunkOUO3DSRTcjs.CSS_VARIABLE_CHART_THEME; exports.ChartController = _chunk2F4GAZL5cjs.ChartController; exports.ChartDirector = ChartDirector; exports.ChartPresence = ChartPresence; exports.ChartStream = ChartStream; exports.DEFAULT_CHART_PALETTE = _chunkOUO3DSRTcjs.DEFAULT_CHART_PALETTE; exports.DEFAULT_CHART_THEME = _chunkOUO3DSRTcjs.DEFAULT_CHART_THEME; exports.MAX_CHART_DATA_LABELS = _chunkWOIXNDHVcjs.MAX_CHART_DATA_LABELS; exports.MAX_CHART_LINE_POINTS = _chunkWOIXNDHVcjs.MAX_CHART_LINE_POINTS; exports.MAX_CHART_LINKS = _chunkOUO3DSRTcjs.MAX_CHART_LINKS; exports.MAX_CHART_MARKERS = _chunkWOIXNDHVcjs.MAX_CHART_MARKERS; exports.MAX_CHART_TREE_DEPTH = _chunkOUO3DSRTcjs.MAX_CHART_TREE_DEPTH; exports.MAX_CHART_TREE_NODES = _chunkOUO3DSRTcjs.MAX_CHART_TREE_NODES; exports.OfficeChartsError = OfficeChartsError; exports.RENDER_CHART_INSTRUCTIONS = RENDER_CHART_INSTRUCTIONS; exports.addChartLink = _chunkOUO3DSRTcjs.addChartLink; exports.addChartTreeRow = _chunkOUO3DSRTcjs.addChartTreeRow; exports.analyzeChartTable = analyzeChartTable; exports.blendChartScenes = blendChartScenes; exports.canDragChartPoint = canDragChartPoint; exports.chartBoxStats = _chunkWOIXNDHVcjs.chartBoxStats; exports.chartClientToScene = chartClientToScene; exports.chartColorDistance = _chunkOUO3DSRTcjs.chartColorDistance; exports.chartColorInputValue = _chunkOUO3DSRTcjs.chartColorInputValue; exports.chartColorsByCategory = _chunkOUO3DSRTcjs.chartColorsByCategory; exports.chartContrastRatio = _chunkOUO3DSRTcjs.chartContrastRatio; exports.chartDataFromTable = _chunkOUO3DSRTcjs.chartDataFromTable; exports.chartDataToTable = _chunkOUO3DSRTcjs.chartDataToTable; exports.chartDateLabels = _chunkWOIXNDHVcjs.chartDateLabels; exports.chartDateToSerial = _chunkWOIXNDHVcjs.chartDateToSerial; exports.chartErrorAmounts = _chunkOUO3DSRTcjs.chartErrorAmounts; exports.chartErrorBarsOfType = _chunkOUO3DSRTcjs.chartErrorBarsOfType; exports.chartFamily = _chunkOUO3DSRTcjs.chartFamily; exports.chartFileName = chartFileName; exports.chartFormatToCode = _chunkVKHJJUBKcjs.chartFormatToCode; exports.chartFromMermaid = _chunk2F4GAZL5cjs.chartFromMermaid; exports.chartFromOoxml = _chunkVKHJJUBKcjs.chartFromOoxml; exports.chartFromTable = chartFromTable; exports.chartHistogram = _chunkWOIXNDHVcjs.chartHistogram; exports.chartHitTest = chartHitTest; exports.chartLikertColor = _chunkOUO3DSRTcjs.chartLikertColor; exports.chartLinksFromTable = _chunkOUO3DSRTcjs.chartLinksFromTable; exports.chartLuminance = _chunkOUO3DSRTcjs.chartLuminance; exports.chartMapBreaks = _chunkWOIXNDHVcjs.chartMapBreaks; exports.chartMapClass = _chunkWOIXNDHVcjs.chartMapClass; exports.chartMapRamp = _chunkWOIXNDHVcjs.chartMapRamp; exports.chartMermaidFamily = _chunk2F4GAZL5cjs.chartMermaidFamily; exports.chartMovingAverage = _chunkWOIXNDHVcjs.chartMovingAverage; exports.chartPointAnchor = chartPointAnchor; exports.chartPointColor = _chunkOUO3DSRTcjs.chartPointColor; exports.chartPointRef = chartPointRef; exports.chartPresetPatch = _chunk2F4GAZL5cjs.chartPresetPatch; exports.chartQuantile = _chunkWOIXNDHVcjs.chartQuantile; exports.chartRaceMoment = _chunkWOIXNDHVcjs.chartRaceMoment; exports.chartRaceRanking = _chunkWOIXNDHVcjs.chartRaceRanking; exports.chartRaceValueAt = _chunkWOIXNDHVcjs.chartRaceValueAt; exports.chartRasterSize = chartRasterSize; exports.chartRgbToHex = _chunkOUO3DSRTcjs.chartRgbToHex; exports.chartRgbToOklab = _chunkOUO3DSRTcjs.chartRgbToOklab; exports.chartSankeyNodeValues = _chunkOUO3DSRTcjs.chartSankeyNodeValues; exports.chartSankeyNodes = _chunkOUO3DSRTcjs.chartSankeyNodes; exports.chartScaleFromPixel = _chunkWOIXNDHVcjs.chartScaleFromPixel; exports.chartScaleToPixel = _chunkWOIXNDHVcjs.chartScaleToPixel; exports.chartSceneToDomSpec = _chunk2F4GAZL5cjs.chartSceneToDomSpec; exports.chartSceneToSvg = _chunk2F4GAZL5cjs.chartSceneToSvg; exports.chartSerialToDate = _chunkWOIXNDHVcjs.chartSerialToDate; exports.chartSeriesColor = _chunkOUO3DSRTcjs.chartSeriesColor; exports.chartSeriesType = _chunkOUO3DSRTcjs.chartSeriesType; exports.chartSliceColor = _chunkOUO3DSRTcjs.chartSliceColor; exports.chartSpecColorsByCategory = _chunkOUO3DSRTcjs.chartSpecColorsByCategory; exports.chartSquarify = _chunkWOIXNDHVcjs.chartSquarify; exports.chartStyleDomain = chartStyleDomain; exports.chartStylePatch = chartStylePatch; exports.chartSupportsTrendlines = _chunkWOIXNDHVcjs.chartSupportsTrendlines; exports.chartTextBaseline = _chunk2F4GAZL5cjs.chartTextBaseline; exports.chartTextOn = _chunkOUO3DSRTcjs.chartTextOn; exports.chartTextTransform = _chunk2F4GAZL5cjs.chartTextTransform; exports.chartToMermaid = _chunk2F4GAZL5cjs.chartToMermaid; exports.chartToOoxml = _chunkVKHJJUBKcjs.chartToOoxml; exports.chartToSvg = _chunk2F4GAZL5cjs.chartToSvg; exports.chartTreeColumnLabels = _chunkOUO3DSRTcjs.chartTreeColumnLabels; exports.chartTreeDepth = _chunkOUO3DSRTcjs.chartTreeDepth; exports.chartTreeFromRows = _chunkOUO3DSRTcjs.chartTreeFromRows; exports.chartTreeFromSeries = _chunkOUO3DSRTcjs.chartTreeFromSeries; exports.chartTreeFromTable = _chunkOUO3DSRTcjs.chartTreeFromTable; exports.chartTreeToRows = _chunkOUO3DSRTcjs.chartTreeToRows; exports.chartTreeTotal = _chunkOUO3DSRTcjs.chartTreeTotal; exports.chartTrendlineName = _chunkWOIXNDHVcjs.chartTrendlineName; exports.chartValueAtPoint = _chunkWOIXNDHVcjs.chartValueAtPoint; exports.chartVariesColors = _chunkOUO3DSRTcjs.chartVariesColors; exports.chartXAtPoint = _chunkWOIXNDHVcjs.chartXAtPoint; exports.checkChartColors = _chunkOUO3DSRTcjs.checkChartColors; exports.cloneChartSeries = _chunkOUO3DSRTcjs.cloneChartSeries; exports.cloneChartSpec = _chunkOUO3DSRTcjs.cloneChartSpec; exports.cloneChartTree = _chunkOUO3DSRTcjs.cloneChartTree; exports.compileChartFormatCode = _chunkWOIXNDHVcjs.compileChartFormatCode; exports.contrastingTextColor = _chunkWOIXNDHVcjs.contrastingTextColor; exports.createChartCommands = createChartCommands; exports.createChartController = _chunk2F4GAZL5cjs.createChartController; exports.createChartEditorDocument = createChartEditorDocument; exports.createChartRasterizer = createChartRasterizer; exports.createChartSpec = _chunkOUO3DSRTcjs.createChartSpec; exports.createChartStyleToolProvider = createChartStyleToolProvider; exports.createChartToolProvider = createChartToolProvider; exports.createInstantChartClock = createInstantChartClock; exports.createOfficeChartToolProvider = createOfficeChartToolProvider; exports.cyclePaletteColor = _chunkOUO3DSRTcjs.cyclePaletteColor; exports.decimateChartPoints = _chunkWOIXNDHVcjs.decimateChartPoints; exports.defaultChartAxis = _chunkOUO3DSRTcjs.defaultChartAxis; exports.defaultChartErrorBarValue = _chunkOUO3DSRTcjs.defaultChartErrorBarValue; exports.describeChart = _chunk2F4GAZL5cjs.describeChart; exports.describeChartErrorBars = _chunkOUO3DSRTcjs.describeChartErrorBars; exports.describeChartSelection = describeChartSelection; exports.describeOfficeChartPlace = describeOfficeChartPlace; exports.downloadChartPng = downloadChartPng; exports.easeChartTween = easeChartTween; exports.estimateChartTextWidth = _chunkWOIXNDHVcjs.estimateChartTextWidth; exports.extractDocxCharts = extractDocxCharts; exports.extractOfficeCharts = extractOfficeCharts; exports.extractPptxCharts = extractPptxCharts; exports.extractXlsxCharts = extractXlsxCharts; exports.findChartTreeNode = _chunkOUO3DSRTcjs.findChartTreeNode; exports.findMermaidCharts = _chunk2F4GAZL5cjs.findMermaidCharts; exports.fitChartTrendline = _chunkWOIXNDHVcjs.fitChartTrendline; exports.formatChartAmountList = _chunkOUO3DSRTcjs.formatChartAmountList; exports.formatChartDate = _chunkWOIXNDHVcjs.formatChartDate; exports.formatChartNumber = _chunkWOIXNDHVcjs.formatChartNumber; exports.formatChartValueWithCode = _chunkWOIXNDHVcjs.formatChartValueWithCode; exports.getChartMap = _chunkWOIXNDHVcjs.getChartMap; exports.handleChartKey = handleChartKey; exports.isCartesianChart = _chunkOUO3DSRTcjs.isCartesianChart; exports.isXyChart = _chunkOUO3DSRTcjs.isXyChart; exports.layoutChart = _chunkWOIXNDHVcjs.layoutChart; exports.layoutSparkline = _chunk2F4GAZL5cjs.layoutSparkline; exports.linearMap = _chunkWOIXNDHVcjs.linearMap; exports.listChartMaps = _chunkWOIXNDHVcjs.listChartMaps; exports.locateChartPoint = locateChartPoint; exports.matchChartMapRegions = _chunkWOIXNDHVcjs.matchChartMapRegions; exports.monochromeChartPalette = _chunk2F4GAZL5cjs.monochromeChartPalette; exports.niceLogScale = _chunkWOIXNDHVcjs.niceLogScale; exports.niceScale = _chunkWOIXNDHVcjs.niceScale; exports.niceStep = _chunkWOIXNDHVcjs.niceStep; exports.normalizeChartAxis = _chunkOUO3DSRTcjs.normalizeChartAxis; exports.normalizeChartErrorBars = _chunkOUO3DSRTcjs.normalizeChartErrorBars; exports.normalizeChartLinks = _chunkOUO3DSRTcjs.normalizeChartLinks; exports.normalizeChartReferenceBand = _chunkOUO3DSRTcjs.normalizeChartReferenceBand; exports.normalizeChartReferenceLine = _chunkOUO3DSRTcjs.normalizeChartReferenceLine; exports.normalizeChartSpec = _chunkOUO3DSRTcjs.normalizeChartSpec; exports.normalizeChartTree = _chunkOUO3DSRTcjs.normalizeChartTree; exports.normalizeChartTrendline = _chunkOUO3DSRTcjs.normalizeChartTrendline; exports.normalizeChartValues = _chunkOUO3DSRTcjs.normalizeChartValues; exports.parseChartAmountList = _chunkOUO3DSRTcjs.parseChartAmountList; exports.parseChartColor = _chunkOUO3DSRTcjs.parseChartColor; exports.parseChartDate = _chunkWOIXNDHVcjs.parseChartDate; exports.parseChartValue = _chunkOUO3DSRTcjs.parseChartValue; exports.parsePartialChartJson = parsePartialChartJson; exports.planChartCommand = planChartCommand; exports.planChartToolPlayback = planChartToolPlayback; exports.rasterizeChartSvg = rasterizeChartSvg; exports.realChartClock = realChartClock; exports.recommendChartTypes = recommendChartTypes; exports.recommendForShape = recommendForShape; exports.registerChartMap = _chunkWOIXNDHVcjs.registerChartMap; exports.removeChartTreeRow = _chunkOUO3DSRTcjs.removeChartTreeRow; exports.resolveChartSvgPaints = resolveChartSvgPaints; exports.sameChartSelection = _chunkWOIXNDHVcjs.sameChartSelection; exports.setChartLinkField = _chunkOUO3DSRTcjs.setChartLinkField; exports.setChartTreeRowName = _chunkOUO3DSRTcjs.setChartTreeRowName; exports.setChartTreeRowValue = _chunkOUO3DSRTcjs.setChartTreeRowValue; exports.shadeChartColor = _chunkOUO3DSRTcjs.shadeChartColor; exports.simulateChartVision = _chunkOUO3DSRTcjs.simulateChartVision; exports.snapChartDragValue = snapChartDragValue; exports.snapChartValue = _chunkWOIXNDHVcjs.snapChartValue; exports.sparklineToSvg = _chunk2F4GAZL5cjs.sparklineToSvg; exports.startChartPointDrag = startChartPointDrag; exports.stepDecimals = _chunkWOIXNDHVcjs.stepDecimals; exports.suggestChartReferences = _chunkWOIXNDHVcjs.suggestChartReferences; exports.summarizeChart = _chunk2F4GAZL5cjs.summarizeChart; exports.summarizeChartSeries = _chunkWOIXNDHVcjs.summarizeChartSeries; exports.trendNumberText = _chunkWOIXNDHVcjs.trendNumberText; exports.uniqueChartSeriesId = _chunkOUO3DSRTcjs.uniqueChartSeriesId; exports.withChartPlayback = withChartPlayback;
3494
+
3495
+
3496
+
3497
+
3498
+ exports.CHART_AXIS_KINDS = _chunkOUO3DSRTcjs.CHART_AXIS_KINDS; exports.CHART_AXIS_SCALES = _chunkOUO3DSRTcjs.CHART_AXIS_SCALES; exports.CHART_COLOR_SCHEMES = _chunkGXEC4FS6cjs.CHART_COLOR_SCHEMES; exports.CHART_CURVES = _chunkOUO3DSRTcjs.CHART_CURVES; exports.CHART_DATE_STEPS = _chunkTUXKLM5Wcjs.CHART_DATE_STEPS; exports.CHART_ERROR_BAR_DIRECTIONS = _chunkOUO3DSRTcjs.CHART_ERROR_BAR_DIRECTIONS; exports.CHART_ERROR_BAR_LABELS = _chunkOUO3DSRTcjs.CHART_ERROR_BAR_LABELS; exports.CHART_ERROR_BAR_TYPES = _chunkOUO3DSRTcjs.CHART_ERROR_BAR_TYPES; exports.CHART_LABEL_POSITIONS = _chunkOUO3DSRTcjs.CHART_LABEL_POSITIONS; exports.CHART_LAYOUT_PRESETS = _chunkGXEC4FS6cjs.CHART_LAYOUT_PRESETS; exports.CHART_LEGEND_POSITIONS = _chunkOUO3DSRTcjs.CHART_LEGEND_POSITIONS; exports.CHART_LIKERT_NEUTRALS = _chunkOUO3DSRTcjs.CHART_LIKERT_NEUTRALS; exports.CHART_LIKERT_SORTS = _chunkOUO3DSRTcjs.CHART_LIKERT_SORTS; exports.CHART_MARKERS = _chunkOUO3DSRTcjs.CHART_MARKERS; exports.CHART_MERMAID_META_PREFIX = _chunkGXEC4FS6cjs.CHART_MERMAID_META_PREFIX; exports.CHART_NUMBER_STYLES = _chunkOUO3DSRTcjs.CHART_NUMBER_STYLES; exports.CHART_OOXML_CONTENT_TYPE = _chunkVKHJJUBKcjs.CHART_OOXML_CONTENT_TYPE; exports.CHART_OOXML_NS = _chunkVKHJJUBKcjs.CHART_OOXML_NS; exports.CHART_OOXML_RELATIONSHIP = _chunkVKHJJUBKcjs.CHART_OOXML_RELATIONSHIP; exports.CHART_ORIENTATIONS = _chunkOUO3DSRTcjs.CHART_ORIENTATIONS; exports.CHART_PALETTE_SHADES = _chunkOUO3DSRTcjs.CHART_PALETTE_SHADES; exports.CHART_PRESENCE_COLORS = CHART_PRESENCE_COLORS; exports.CHART_RADAR_GRATICULES = _chunkOUO3DSRTcjs.CHART_RADAR_GRATICULES; exports.CHART_RASTER_MAX_SIZE = CHART_RASTER_MAX_SIZE; exports.CHART_REFERENCE_AXES = _chunkOUO3DSRTcjs.CHART_REFERENCE_AXES; exports.CHART_SANKEY_LINK_COLORS = _chunkOUO3DSRTcjs.CHART_SANKEY_LINK_COLORS; exports.CHART_SERIES_TYPES = _chunkOUO3DSRTcjs.CHART_SERIES_TYPES; exports.CHART_STACKINGS = _chunkOUO3DSRTcjs.CHART_STACKINGS; exports.CHART_TRENDLINE_TYPES = _chunkOUO3DSRTcjs.CHART_TRENDLINE_TYPES; exports.CHART_TYPES = _chunkOUO3DSRTcjs.CHART_TYPES; exports.CHART_TYPE_LABELS = _chunkOUO3DSRTcjs.CHART_TYPE_LABELS; exports.CSS_VARIABLE_CHART_THEME = _chunkOUO3DSRTcjs.CSS_VARIABLE_CHART_THEME; exports.ChartController = _chunkGXEC4FS6cjs.ChartController; exports.ChartDirector = ChartDirector; exports.ChartPresence = ChartPresence; exports.ChartStream = ChartStream; exports.DEFAULT_CHART_PALETTE = _chunkOUO3DSRTcjs.DEFAULT_CHART_PALETTE; exports.DEFAULT_CHART_THEME = _chunkOUO3DSRTcjs.DEFAULT_CHART_THEME; exports.MAX_CHART_DATA_LABELS = _chunkTUXKLM5Wcjs.MAX_CHART_DATA_LABELS; exports.MAX_CHART_LINE_POINTS = _chunkTUXKLM5Wcjs.MAX_CHART_LINE_POINTS; exports.MAX_CHART_LINKS = _chunkOUO3DSRTcjs.MAX_CHART_LINKS; exports.MAX_CHART_MARKERS = _chunkTUXKLM5Wcjs.MAX_CHART_MARKERS; exports.MAX_CHART_TREE_DEPTH = _chunkOUO3DSRTcjs.MAX_CHART_TREE_DEPTH; exports.MAX_CHART_TREE_NODES = _chunkOUO3DSRTcjs.MAX_CHART_TREE_NODES; exports.OfficeChartsError = OfficeChartsError; exports.RENDER_CHART_INSTRUCTIONS = RENDER_CHART_INSTRUCTIONS; exports.addChartLink = _chunkOUO3DSRTcjs.addChartLink; exports.addChartTreeRow = _chunkOUO3DSRTcjs.addChartTreeRow; exports.analyzeChartTable = analyzeChartTable; exports.blendChartScenes = blendChartScenes; exports.canDragChartPoint = canDragChartPoint; exports.chartBoxStats = _chunkTUXKLM5Wcjs.chartBoxStats; exports.chartCategoryAtPoint = _chunkTUXKLM5Wcjs.chartCategoryAtPoint; exports.chartClientToScene = chartClientToScene; exports.chartColorDistance = _chunkOUO3DSRTcjs.chartColorDistance; exports.chartColorInputValue = _chunkOUO3DSRTcjs.chartColorInputValue; exports.chartColorsByCategory = _chunkOUO3DSRTcjs.chartColorsByCategory; exports.chartContrastRatio = _chunkOUO3DSRTcjs.chartContrastRatio; exports.chartDataFromTable = _chunkOUO3DSRTcjs.chartDataFromTable; exports.chartDataToTable = _chunkOUO3DSRTcjs.chartDataToTable; exports.chartDateLabels = _chunkTUXKLM5Wcjs.chartDateLabels; exports.chartDateToSerial = _chunkTUXKLM5Wcjs.chartDateToSerial; exports.chartErrorAmounts = _chunkOUO3DSRTcjs.chartErrorAmounts; exports.chartErrorBarsOfType = _chunkOUO3DSRTcjs.chartErrorBarsOfType; exports.chartFamily = _chunkOUO3DSRTcjs.chartFamily; exports.chartFileName = chartFileName; exports.chartFormatToCode = _chunkVKHJJUBKcjs.chartFormatToCode; exports.chartFromMermaid = _chunkGXEC4FS6cjs.chartFromMermaid; exports.chartFromOoxml = _chunkVKHJJUBKcjs.chartFromOoxml; exports.chartFromTable = chartFromTable; exports.chartHistogram = _chunkTUXKLM5Wcjs.chartHistogram; exports.chartHitTest = chartHitTest; exports.chartLikertColor = _chunkOUO3DSRTcjs.chartLikertColor; exports.chartLinksFromTable = _chunkOUO3DSRTcjs.chartLinksFromTable; exports.chartLuminance = _chunkOUO3DSRTcjs.chartLuminance; exports.chartMapBreaks = _chunkTUXKLM5Wcjs.chartMapBreaks; exports.chartMapClass = _chunkTUXKLM5Wcjs.chartMapClass; exports.chartMapRamp = _chunkTUXKLM5Wcjs.chartMapRamp; exports.chartMermaidFamily = _chunkGXEC4FS6cjs.chartMermaidFamily; exports.chartMovingAverage = _chunkTUXKLM5Wcjs.chartMovingAverage; exports.chartPointAnchor = chartPointAnchor; exports.chartPointColor = _chunkOUO3DSRTcjs.chartPointColor; exports.chartPointRef = chartPointRef; exports.chartPresetPatch = _chunkGXEC4FS6cjs.chartPresetPatch; exports.chartQuantile = _chunkTUXKLM5Wcjs.chartQuantile; exports.chartRaceMoment = _chunkTUXKLM5Wcjs.chartRaceMoment; exports.chartRaceRanking = _chunkTUXKLM5Wcjs.chartRaceRanking; exports.chartRaceValueAt = _chunkTUXKLM5Wcjs.chartRaceValueAt; exports.chartRasterSize = chartRasterSize; exports.chartRgbToHex = _chunkOUO3DSRTcjs.chartRgbToHex; exports.chartRgbToOklab = _chunkOUO3DSRTcjs.chartRgbToOklab; exports.chartSankeyNodeValues = _chunkOUO3DSRTcjs.chartSankeyNodeValues; exports.chartSankeyNodes = _chunkOUO3DSRTcjs.chartSankeyNodes; exports.chartScaleFromPixel = _chunkTUXKLM5Wcjs.chartScaleFromPixel; exports.chartScaleToPixel = _chunkTUXKLM5Wcjs.chartScaleToPixel; exports.chartSceneToDomSpec = _chunkGXEC4FS6cjs.chartSceneToDomSpec; exports.chartSceneToSvg = _chunkGXEC4FS6cjs.chartSceneToSvg; exports.chartSerialToDate = _chunkTUXKLM5Wcjs.chartSerialToDate; exports.chartSeriesColor = _chunkOUO3DSRTcjs.chartSeriesColor; exports.chartSeriesType = _chunkOUO3DSRTcjs.chartSeriesType; exports.chartSliceColor = _chunkOUO3DSRTcjs.chartSliceColor; exports.chartSpecColorsByCategory = _chunkOUO3DSRTcjs.chartSpecColorsByCategory; exports.chartSquarify = _chunkTUXKLM5Wcjs.chartSquarify; exports.chartStyleDomain = chartStyleDomain; exports.chartStylePatch = chartStylePatch; exports.chartSupportsTrendlines = _chunkTUXKLM5Wcjs.chartSupportsTrendlines; exports.chartTextBaseline = _chunkGXEC4FS6cjs.chartTextBaseline; exports.chartTextOn = _chunkOUO3DSRTcjs.chartTextOn; exports.chartTextTransform = _chunkGXEC4FS6cjs.chartTextTransform; exports.chartToMermaid = _chunkGXEC4FS6cjs.chartToMermaid; exports.chartToOoxml = _chunkVKHJJUBKcjs.chartToOoxml; exports.chartToSvg = _chunkGXEC4FS6cjs.chartToSvg; exports.chartTooltipAt = chartTooltipAt; exports.chartTooltipFor = chartTooltipFor; exports.chartTreeColumnLabels = _chunkOUO3DSRTcjs.chartTreeColumnLabels; exports.chartTreeDepth = _chunkOUO3DSRTcjs.chartTreeDepth; exports.chartTreeFromRows = _chunkOUO3DSRTcjs.chartTreeFromRows; exports.chartTreeFromSeries = _chunkOUO3DSRTcjs.chartTreeFromSeries; exports.chartTreeFromTable = _chunkOUO3DSRTcjs.chartTreeFromTable; exports.chartTreeToRows = _chunkOUO3DSRTcjs.chartTreeToRows; exports.chartTreeTotal = _chunkOUO3DSRTcjs.chartTreeTotal; exports.chartTrendlineName = _chunkTUXKLM5Wcjs.chartTrendlineName; exports.chartValueAtPoint = _chunkTUXKLM5Wcjs.chartValueAtPoint; exports.chartVariesColors = _chunkOUO3DSRTcjs.chartVariesColors; exports.chartXAtPoint = _chunkTUXKLM5Wcjs.chartXAtPoint; exports.checkChartColors = _chunkOUO3DSRTcjs.checkChartColors; exports.cloneChartSeries = _chunkOUO3DSRTcjs.cloneChartSeries; exports.cloneChartSpec = _chunkOUO3DSRTcjs.cloneChartSpec; exports.cloneChartTree = _chunkOUO3DSRTcjs.cloneChartTree; exports.compileChartFormatCode = _chunkTUXKLM5Wcjs.compileChartFormatCode; exports.contrastingTextColor = _chunkTUXKLM5Wcjs.contrastingTextColor; exports.createChartCommands = createChartCommands; exports.createChartController = _chunkGXEC4FS6cjs.createChartController; exports.createChartEditorDocument = createChartEditorDocument; exports.createChartRasterizer = createChartRasterizer; exports.createChartSpec = _chunkOUO3DSRTcjs.createChartSpec; exports.createChartStyleToolProvider = createChartStyleToolProvider; exports.createChartToolProvider = createChartToolProvider; exports.createInstantChartClock = createInstantChartClock; exports.createOfficeChartToolProvider = createOfficeChartToolProvider; exports.cyclePaletteColor = _chunkOUO3DSRTcjs.cyclePaletteColor; exports.decimateChartPoints = _chunkTUXKLM5Wcjs.decimateChartPoints; exports.defaultChartAxis = _chunkOUO3DSRTcjs.defaultChartAxis; exports.defaultChartErrorBarValue = _chunkOUO3DSRTcjs.defaultChartErrorBarValue; exports.describeChart = _chunkGXEC4FS6cjs.describeChart; exports.describeChartErrorBars = _chunkOUO3DSRTcjs.describeChartErrorBars; exports.describeChartSelection = describeChartSelection; exports.describeOfficeChartPlace = describeOfficeChartPlace; exports.downloadChartPng = downloadChartPng; exports.easeChartTween = easeChartTween; exports.estimateChartTextWidth = _chunkTUXKLM5Wcjs.estimateChartTextWidth; exports.extractDocxCharts = extractDocxCharts; exports.extractOfficeCharts = extractOfficeCharts; exports.extractPptxCharts = extractPptxCharts; exports.extractXlsxCharts = extractXlsxCharts; exports.findChartTreeNode = _chunkOUO3DSRTcjs.findChartTreeNode; exports.findMermaidCharts = _chunkGXEC4FS6cjs.findMermaidCharts; exports.fitChartTrendline = _chunkTUXKLM5Wcjs.fitChartTrendline; exports.formatChartAmountList = _chunkOUO3DSRTcjs.formatChartAmountList; exports.formatChartDate = _chunkTUXKLM5Wcjs.formatChartDate; exports.formatChartNumber = _chunkTUXKLM5Wcjs.formatChartNumber; exports.formatChartValueWithCode = _chunkTUXKLM5Wcjs.formatChartValueWithCode; exports.getChartMap = _chunkTUXKLM5Wcjs.getChartMap; exports.handleChartKey = handleChartKey; exports.isCartesianChart = _chunkOUO3DSRTcjs.isCartesianChart; exports.isXyChart = _chunkOUO3DSRTcjs.isXyChart; exports.layoutChart = _chunkTUXKLM5Wcjs.layoutChart; exports.layoutSparkline = _chunkGXEC4FS6cjs.layoutSparkline; exports.linearMap = _chunkTUXKLM5Wcjs.linearMap; exports.listChartMaps = _chunkTUXKLM5Wcjs.listChartMaps; exports.locateChartPoint = locateChartPoint; exports.matchChartMapRegions = _chunkTUXKLM5Wcjs.matchChartMapRegions; exports.monochromeChartPalette = _chunkGXEC4FS6cjs.monochromeChartPalette; exports.niceLogScale = _chunkTUXKLM5Wcjs.niceLogScale; exports.niceScale = _chunkTUXKLM5Wcjs.niceScale; exports.niceStep = _chunkTUXKLM5Wcjs.niceStep; exports.normalizeChartAxis = _chunkOUO3DSRTcjs.normalizeChartAxis; exports.normalizeChartErrorBars = _chunkOUO3DSRTcjs.normalizeChartErrorBars; exports.normalizeChartLinks = _chunkOUO3DSRTcjs.normalizeChartLinks; exports.normalizeChartReferenceBand = _chunkOUO3DSRTcjs.normalizeChartReferenceBand; exports.normalizeChartReferenceLine = _chunkOUO3DSRTcjs.normalizeChartReferenceLine; exports.normalizeChartSpec = _chunkOUO3DSRTcjs.normalizeChartSpec; exports.normalizeChartTree = _chunkOUO3DSRTcjs.normalizeChartTree; exports.normalizeChartTrendline = _chunkOUO3DSRTcjs.normalizeChartTrendline; exports.normalizeChartValues = _chunkOUO3DSRTcjs.normalizeChartValues; exports.parseChartAmountList = _chunkOUO3DSRTcjs.parseChartAmountList; exports.parseChartColor = _chunkOUO3DSRTcjs.parseChartColor; exports.parseChartDate = _chunkTUXKLM5Wcjs.parseChartDate; exports.parseChartValue = _chunkOUO3DSRTcjs.parseChartValue; exports.parsePartialChartJson = parsePartialChartJson; exports.planChartCommand = planChartCommand; exports.planChartToolPlayback = planChartToolPlayback; exports.rasterizeChartSvg = rasterizeChartSvg; exports.realChartClock = realChartClock; exports.recommendChartTypes = recommendChartTypes; exports.recommendForShape = recommendForShape; exports.registerChartMap = _chunkTUXKLM5Wcjs.registerChartMap; exports.removeChartTreeRow = _chunkOUO3DSRTcjs.removeChartTreeRow; exports.resolveChartSvgPaints = resolveChartSvgPaints; exports.sameChartSelection = _chunkTUXKLM5Wcjs.sameChartSelection; exports.sameChartTooltip = sameChartTooltip; exports.setChartLinkField = _chunkOUO3DSRTcjs.setChartLinkField; exports.setChartTreeRowName = _chunkOUO3DSRTcjs.setChartTreeRowName; exports.setChartTreeRowValue = _chunkOUO3DSRTcjs.setChartTreeRowValue; exports.shadeChartColor = _chunkOUO3DSRTcjs.shadeChartColor; exports.simulateChartVision = _chunkOUO3DSRTcjs.simulateChartVision; exports.snapChartDragValue = snapChartDragValue; exports.snapChartValue = _chunkTUXKLM5Wcjs.snapChartValue; exports.sparklineToSvg = _chunkGXEC4FS6cjs.sparklineToSvg; exports.startChartPointDrag = startChartPointDrag; exports.stepDecimals = _chunkTUXKLM5Wcjs.stepDecimals; exports.suggestChartReferences = _chunkTUXKLM5Wcjs.suggestChartReferences; exports.summarizeChart = _chunkGXEC4FS6cjs.summarizeChart; exports.summarizeChartSeries = _chunkTUXKLM5Wcjs.summarizeChartSeries; exports.trendNumberText = _chunkTUXKLM5Wcjs.trendNumberText; exports.uniqueChartSeriesId = _chunkOUO3DSRTcjs.uniqueChartSeriesId; exports.withChartPlayback = withChartPlayback;