@pixerate/editor 0.162.1 → 0.163.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.
- package/README.md +1 -1
- package/dist/agent/index.cjs +34 -34
- package/dist/agent/index.js +5 -5
- package/dist/canvas/index.cjs +6 -6
- package/dist/canvas/index.js +2 -2
- package/dist/chart/commands.d.cts +2 -1
- package/dist/chart/commands.d.ts +2 -1
- package/dist/chart/controller.d.cts +109 -1
- package/dist/chart/controller.d.ts +109 -1
- package/dist/chart/index.cjs +605 -130
- package/dist/chart/index.d.cts +1 -0
- package/dist/chart/index.d.ts +1 -0
- package/dist/chart/index.js +490 -15
- package/dist/chart/layout-annotations.d.cts +29 -0
- package/dist/chart/layout-annotations.d.ts +29 -0
- package/dist/chart/layout-families.d.cts +23 -0
- package/dist/chart/layout-families.d.ts +23 -0
- package/dist/chart/mermaid.d.cts +2 -1
- package/dist/chart/mermaid.d.ts +2 -1
- package/dist/chart/schemas.d.cts +13 -0
- package/dist/chart/schemas.d.ts +13 -0
- package/dist/chart/spec.d.cts +30 -5
- package/dist/chart/spec.d.ts +30 -5
- package/dist/chart/stats.d.cts +9 -1
- package/dist/chart/stats.d.ts +9 -1
- package/dist/chart/tools.d.cts +1 -1
- package/dist/chart/tools.d.ts +1 -1
- package/dist/chart/tree.d.cts +62 -0
- package/dist/chart/tree.d.ts +62 -0
- package/dist/chart/types.d.cts +77 -3
- package/dist/chart/types.d.ts +77 -3
- package/dist/{chunk-7YBDRJXT.cjs → chunk-22KLZZGH.cjs} +8 -8
- package/dist/{chunk-HLOKB7WW.js → chunk-3NEZJCBY.js} +366 -6
- package/dist/{chunk-EVPZ5IKN.js → chunk-5FNGLV2D.js} +65 -3
- package/dist/{chunk-EQ46F75O.cjs → chunk-D54JHQK2.cjs} +51 -51
- package/dist/{chunk-NO5QQDHZ.js → chunk-DAPQGA55.js} +2 -2
- package/dist/{chunk-3IHNXRUV.cjs → chunk-GKNEJ6EN.cjs} +399 -67
- package/dist/{chunk-4NGVHHJB.cjs → chunk-NZD2MZJC.cjs} +80 -18
- package/dist/{chunk-CX6JLDFC.js → chunk-OXERWBKE.js} +3 -3
- package/dist/{chunk-7CKPUUN4.js → chunk-POR54B55.js} +61 -10
- package/dist/{chunk-LL3H5XUH.cjs → chunk-R3P2M7HU.cjs} +367 -7
- package/dist/{chunk-HDGBM7EA.cjs → chunk-SBQVEBSU.cjs} +580 -53
- package/dist/{chunk-XDCFJEU7.js → chunk-SZA42R4N.js} +346 -14
- package/dist/{chunk-GLMP22FT.js → chunk-TALQONZ5.js} +3 -3
- package/dist/{chunk-NA4UVVJ4.cjs → chunk-YGG7WDWT.cjs} +76 -25
- package/dist/{chunk-EY22AY6R.cjs → chunk-YSAGBIRW.cjs} +16 -16
- package/dist/{chunk-DTSTNRPH.js → chunk-Z4P2RBMJ.js} +536 -9
- package/dist/export/index.cjs +4 -4
- package/dist/export/index.js +3 -3
- package/dist/extensions/index.cjs +7 -7
- package/dist/extensions/index.js +6 -6
- package/dist/index.cjs +13 -13
- package/dist/index.js +7 -7
- package/dist/paint-editor/index.cjs +0 -20
- package/dist/paint-editor/index.js +0 -20
- package/package.json +1 -1
- package/skills/pixerate-canvas/SKILL.md +16 -0
package/dist/chart/index.cjs
CHANGED
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
var _chunk4NGVHHJBcjs = require('../chunk-4NGVHHJB.cjs');
|
|
11
10
|
|
|
12
11
|
|
|
13
12
|
|
|
@@ -15,7 +14,7 @@ var _chunk4NGVHHJBcjs = require('../chunk-4NGVHHJB.cjs');
|
|
|
15
14
|
|
|
16
15
|
|
|
17
16
|
|
|
18
|
-
var
|
|
17
|
+
var _chunkNZD2MZJCcjs = require('../chunk-NZD2MZJC.cjs');
|
|
19
18
|
|
|
20
19
|
|
|
21
20
|
|
|
@@ -23,6 +22,7 @@ var _chunkNA4UVVJ4cjs = require('../chunk-NA4UVVJ4.cjs');
|
|
|
23
22
|
|
|
24
23
|
|
|
25
24
|
|
|
25
|
+
var _chunkYGG7WDWTcjs = require('../chunk-YGG7WDWT.cjs');
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
|
|
@@ -37,7 +37,6 @@ var _chunkNA4UVVJ4cjs = require('../chunk-NA4UVVJ4.cjs');
|
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
|
|
40
|
-
var _chunk3IHNXRUVcjs = require('../chunk-3IHNXRUV.cjs');
|
|
41
40
|
|
|
42
41
|
|
|
43
42
|
|
|
@@ -45,6 +44,7 @@ var _chunk3IHNXRUVcjs = require('../chunk-3IHNXRUV.cjs');
|
|
|
45
44
|
|
|
46
45
|
|
|
47
46
|
|
|
47
|
+
var _chunkGKNEJ6ENcjs = require('../chunk-GKNEJ6EN.cjs');
|
|
48
48
|
|
|
49
49
|
|
|
50
50
|
|
|
@@ -76,7 +76,6 @@ var _chunk3IHNXRUVcjs = require('../chunk-3IHNXRUV.cjs');
|
|
|
76
76
|
|
|
77
77
|
|
|
78
78
|
|
|
79
|
-
var _chunkHDGBM7EAcjs = require('../chunk-HDGBM7EA.cjs');
|
|
80
79
|
|
|
81
80
|
|
|
82
81
|
|
|
@@ -85,6 +84,7 @@ var _chunkHDGBM7EAcjs = require('../chunk-HDGBM7EA.cjs');
|
|
|
85
84
|
|
|
86
85
|
|
|
87
86
|
|
|
87
|
+
var _chunkSBQVEBSUcjs = require('../chunk-SBQVEBSU.cjs');
|
|
88
88
|
|
|
89
89
|
|
|
90
90
|
|
|
@@ -138,7 +138,39 @@ var _chunkHDGBM7EAcjs = require('../chunk-HDGBM7EA.cjs');
|
|
|
138
138
|
|
|
139
139
|
|
|
140
140
|
|
|
141
|
-
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
var _chunkR3P2M7HUcjs = require('../chunk-R3P2M7HU.cjs');
|
|
142
174
|
require('../chunk-55AKPTLM.cjs');
|
|
143
175
|
|
|
144
176
|
|
|
@@ -271,7 +303,7 @@ function chartFileName(spec, extension) {
|
|
|
271
303
|
}
|
|
272
304
|
async function downloadChartPng(spec, options = {}) {
|
|
273
305
|
const { width = 800, height = 450, filename = chartFileName(spec, "png"), theme, ...raster } = options;
|
|
274
|
-
const svg =
|
|
306
|
+
const svg = _chunkGKNEJ6ENcjs.chartToSvg.call(void 0, spec, { width, height, theme });
|
|
275
307
|
const { url, width: w, height: h } = await svgToPngDataUrl(svg, { ...raster, width, height });
|
|
276
308
|
const doc = _nullishCoalesce(raster.document, () => ( globalThis.document));
|
|
277
309
|
const link = doc.createElement("a");
|
|
@@ -286,7 +318,7 @@ async function downloadChartPng(spec, options = {}) {
|
|
|
286
318
|
|
|
287
319
|
// src/chart/recommend.ts
|
|
288
320
|
var blank = (c) => c === null || c === void 0 || String(c).trim() === "";
|
|
289
|
-
var isText = (c) => blank(c) ||
|
|
321
|
+
var isText = (c) => blank(c) || _chunkR3P2M7HUcjs.parseChartValue.call(void 0, c) === void 0;
|
|
290
322
|
function analyzeChartTable(rows) {
|
|
291
323
|
const grid = rows.filter((r) => r.some((c) => !blank(c)));
|
|
292
324
|
const height = grid.length;
|
|
@@ -304,7 +336,7 @@ function analyzeChartTable(rows) {
|
|
|
304
336
|
let anyPositive = false;
|
|
305
337
|
for (let r = headerRow ? 1 : 0; r < height; r++)
|
|
306
338
|
for (let c = labelColumn ? 1 : 0; c < width; c++) {
|
|
307
|
-
const v =
|
|
339
|
+
const v = _chunkR3P2M7HUcjs.parseChartValue.call(void 0, cell(r, c));
|
|
308
340
|
if (typeof v !== "number") continue;
|
|
309
341
|
anyNumber = true;
|
|
310
342
|
if (v < 0) {
|
|
@@ -313,7 +345,7 @@ function analyzeChartTable(rows) {
|
|
|
313
345
|
} else if (v > 0) anyPositive = true;
|
|
314
346
|
}
|
|
315
347
|
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]);
|
|
316
|
-
const dates = (byRows ? headerRow : labelColumn) && labels.length > 1 && labels.filter((l) => !blank(l) &&
|
|
348
|
+
const dates = (byRows ? headerRow : labelColumn) && labels.length > 1 && labels.filter((l) => !blank(l) && _chunkSBQVEBSUcjs.parseChartDate.call(void 0, String(l)) !== null).length >= labels.length * 0.8;
|
|
317
349
|
return {
|
|
318
350
|
headerRow,
|
|
319
351
|
labelColumn,
|
|
@@ -367,6 +399,7 @@ function recommendForShape(shape) {
|
|
|
367
399
|
add("donut", "Donut", "Shares of a whole with the total in the middle.");
|
|
368
400
|
if (shape.points >= 5) add("treemap", "Treemap", "Compares many shares by area.");
|
|
369
401
|
add("funnel", "Funnel", "Shows stages that narrow down.");
|
|
402
|
+
add("parliament", "Parliament", "Seats or votes per group, with the majority line.");
|
|
370
403
|
}
|
|
371
404
|
add("line", "Line", "Shows the values in order.");
|
|
372
405
|
}
|
|
@@ -378,11 +411,13 @@ function recommendForShape(shape) {
|
|
|
378
411
|
add("area", "Area", "Emphasises volume.");
|
|
379
412
|
add("bar", "Stacked column", "Shows how the series add up.", "stacked");
|
|
380
413
|
} else {
|
|
414
|
+
if (shape.series === 2 && shape.labelColumn) add("slope", "Slope", "Two columns per item: shows what rose and what fell between them.");
|
|
381
415
|
add("bar", "Column", "Several series: clustered columns compare them per category.");
|
|
382
416
|
add("bar", "Bar", "Horizontal bars fit long category names.");
|
|
383
417
|
add("bar", "Stacked column", "Shows how the series add up.", "stacked");
|
|
384
418
|
add("line", "Line", "Shows the series in order.");
|
|
385
419
|
if (shape.points >= 3 && shape.series <= 6) add("radar", "Radar", "Compares several measures across the series.");
|
|
420
|
+
if (shape.nonNegative && shape.series >= 3 && shape.series <= 7) add("likert", "Likert", "Survey answers per question (columns from most negative to most positive): shows agreement against disagreement.");
|
|
386
421
|
}
|
|
387
422
|
return out;
|
|
388
423
|
}
|
|
@@ -400,7 +435,7 @@ function chartFromTable(rows, options = {}) {
|
|
|
400
435
|
if (xFromFirst) {
|
|
401
436
|
table = table.map((r) => [r[1], ...r.slice(2)]);
|
|
402
437
|
}
|
|
403
|
-
const data =
|
|
438
|
+
const data = _chunkR3P2M7HUcjs.chartDataFromTable.call(void 0, table, { seriesIn: shape.byRows ? "rows" : "columns", header: true, xFromFirstColumn: xFromFirst });
|
|
404
439
|
return { type, stacking, categories: data.categories, series: data.series, issues: data.issues, shape };
|
|
405
440
|
}
|
|
406
441
|
|
|
@@ -436,10 +471,10 @@ function createChartCommands(controller, options = {}) {
|
|
|
436
471
|
readOnly: true,
|
|
437
472
|
keywords: ["chart", "data", "spec", "get", "summary"],
|
|
438
473
|
description: "Returns the chart spec, its data as a table (series names in the header row) and a summary: per-series min / max / mean / trend, axes as drawn, layout warnings and a colour check.",
|
|
439
|
-
params: object({ width:
|
|
474
|
+
params: object({ width: _chunkNZD2MZJCcjs.WIDTH, height: _chunkNZD2MZJCcjs.HEIGHT }),
|
|
440
475
|
run: (_ctx, params = {}) => {
|
|
441
476
|
const spec = controller.getSpec();
|
|
442
|
-
return { spec: controller.toJSON(), table:
|
|
477
|
+
return { spec: controller.toJSON(), table: _chunkR3P2M7HUcjs.chartDataToTable.call(void 0, spec), summary: _chunkGKNEJ6ENcjs.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 };
|
|
443
478
|
}
|
|
444
479
|
},
|
|
445
480
|
{
|
|
@@ -447,8 +482,8 @@ function createChartCommands(controller, options = {}) {
|
|
|
447
482
|
id: `${prefix}update`,
|
|
448
483
|
label: "Change Chart\u2026",
|
|
449
484
|
keywords: ["chart", "title", "axis", "legend", "stack", "style", "format", "type"],
|
|
450
|
-
description: 'Changes chart presentation as one undo step: type, titles, axes (xAxis = categories, yAxis = values, yAxis2 = secondary values; reverse, and scale "log" on value axes), legend, stacking, orientation, curve, points, data labels, palette, donut hole, bar spacing, histogram bins, waterfall total, or radar rings and grid shape. Invalid values change nothing and return why.',
|
|
451
|
-
params: object(
|
|
485
|
+
description: 'Changes chart presentation as one undo step: type, titles, axes (xAxis = categories, yAxis = values, yAxis2 = secondary values; reverse, and scale "log" on value axes), legend, stacking, orientation, curve, points, data labels, palette, donut hole, bar spacing, histogram bins, waterfall total, or radar rings and grid shape, note, highlight, reference lines and bands, or colour by category (varyColors). Invalid values change nothing and return why.',
|
|
486
|
+
params: object(_chunkNZD2MZJCcjs.CHART_UPDATE_PROPERTIES),
|
|
452
487
|
run: (_ctx, params) => {
|
|
453
488
|
check(controller.update(params));
|
|
454
489
|
return { spec: controller.toJSON() };
|
|
@@ -462,11 +497,11 @@ function createChartCommands(controller, options = {}) {
|
|
|
462
497
|
description: "Replaces the categories and series as one undo step. Each series has one value per category (padded with gaps).",
|
|
463
498
|
params: object({
|
|
464
499
|
categories: { type: "array", items: { type: "string" }, description: "Category labels in order." },
|
|
465
|
-
series: { type: "array", description: "The new series.", items: object({ id: { type: "string", description: "Stable id (optional)." }, ...
|
|
500
|
+
series: { type: "array", description: "The new series.", items: object({ id: { type: "string", description: "Stable id (optional)." }, ..._chunkNZD2MZJCcjs.SERIES_PROPS }, ["name", "values"]) }
|
|
466
501
|
}),
|
|
467
502
|
run: (_ctx, params) => {
|
|
468
503
|
check(controller.setData(params));
|
|
469
|
-
return { table:
|
|
504
|
+
return { table: _chunkR3P2M7HUcjs.chartDataToTable.call(void 0, controller.getSpec()) };
|
|
470
505
|
}
|
|
471
506
|
},
|
|
472
507
|
{
|
|
@@ -475,10 +510,10 @@ function createChartCommands(controller, options = {}) {
|
|
|
475
510
|
label: "Set Chart Values\u2026",
|
|
476
511
|
keywords: ["chart", "value", "cell", "edit"],
|
|
477
512
|
description: "Sets individual values as one undo step. Series by id or name; category by index or label.",
|
|
478
|
-
params: object({ cells: { type: "array", minItems: 1, description: "Values to set.", items: object({ series:
|
|
513
|
+
params: object({ cells: { type: "array", minItems: 1, description: "Values to set.", items: object({ series: _chunkNZD2MZJCcjs.SERIES_REF, category: _chunkNZD2MZJCcjs.CATEGORY_REF, value: _chunkNZD2MZJCcjs.VALUE }, ["series", "category", "value"]) } }, ["cells"]),
|
|
479
514
|
run: (_ctx, params) => {
|
|
480
515
|
check(controller.setValues(params.cells.map((c) => ({ seriesId: resolveSeries(c.series).id, index: resolveCategory(c.category), value: c.value }))));
|
|
481
|
-
return { table:
|
|
516
|
+
return { table: _chunkR3P2M7HUcjs.chartDataToTable.call(void 0, controller.getSpec()) };
|
|
482
517
|
}
|
|
483
518
|
},
|
|
484
519
|
{
|
|
@@ -487,7 +522,7 @@ function createChartCommands(controller, options = {}) {
|
|
|
487
522
|
label: "Add Series",
|
|
488
523
|
keywords: ["chart", "series", "new"],
|
|
489
524
|
description: "Adds a series (default: an empty one at the end). Returns its id.",
|
|
490
|
-
params: object({ ...
|
|
525
|
+
params: object({ ..._chunkNZD2MZJCcjs.SERIES_PROPS, id: { type: "string", description: "Id to use (default series-N)." }, at: { type: "integer", minimum: 0, description: "Position (default: last)." } }),
|
|
491
526
|
run: (_ctx, params = {}) => {
|
|
492
527
|
const { at, ...input } = _nullishCoalesce(params, () => ( {}));
|
|
493
528
|
const clean = Object.fromEntries(Object.entries(input).filter(([, v]) => v !== null));
|
|
@@ -502,7 +537,7 @@ function createChartCommands(controller, options = {}) {
|
|
|
502
537
|
label: "Change Series\u2026",
|
|
503
538
|
keywords: ["chart", "series", "rename", "colour", "color", "hide", "axis", "marker"],
|
|
504
539
|
description: "Renames, recolours, hides, moves to the secondary axis or changes how a series is drawn, including error bars (null resets a field).",
|
|
505
|
-
params: object({ series:
|
|
540
|
+
params: object({ series: _chunkNZD2MZJCcjs.SERIES_REF, ...Object.fromEntries(Object.entries(_chunkNZD2MZJCcjs.SERIES_PROPS).filter(([k]) => k !== "values")) }, ["series"]),
|
|
506
541
|
run: (_ctx, params) => {
|
|
507
542
|
const { series, ...patch } = params;
|
|
508
543
|
const id = resolveSeries(series).id;
|
|
@@ -516,7 +551,7 @@ function createChartCommands(controller, options = {}) {
|
|
|
516
551
|
label: "Delete Series",
|
|
517
552
|
keywords: ["chart", "series", "remove"],
|
|
518
553
|
description: "Deletes a series by id or name.",
|
|
519
|
-
params: object({ series:
|
|
554
|
+
params: object({ series: _chunkNZD2MZJCcjs.SERIES_REF }, ["series"]),
|
|
520
555
|
run: (_ctx, params) => {
|
|
521
556
|
check(controller.removeSeries(resolveSeries(params.series).id));
|
|
522
557
|
return { series: seriesIds() };
|
|
@@ -529,7 +564,11 @@ function createChartCommands(controller, options = {}) {
|
|
|
529
564
|
keywords: ["chart", "category", "row", "label"],
|
|
530
565
|
description: "Inserts a category (gaps in every series) at `at` (default: the end).",
|
|
531
566
|
params: object({ label: { type: "string", description: "Category label (default: its number)." }, at: { type: "integer", minimum: 0, description: "Index to insert at (default: the end)." } }),
|
|
532
|
-
run: (_ctx, params = {}) =>
|
|
567
|
+
run: (_ctx, params = {}) => {
|
|
568
|
+
const result = controller.addCategory(_optionalChain([params, 'optionalAccess', _27 => _27.label]), { at: _optionalChain([params, 'optionalAccess', _28 => _28.at]) });
|
|
569
|
+
check(result);
|
|
570
|
+
return result;
|
|
571
|
+
}
|
|
533
572
|
},
|
|
534
573
|
{
|
|
535
574
|
...base,
|
|
@@ -537,7 +576,7 @@ function createChartCommands(controller, options = {}) {
|
|
|
537
576
|
label: "Delete Category",
|
|
538
577
|
keywords: ["chart", "category", "row", "remove"],
|
|
539
578
|
description: "Deletes a category (and its values) by index or label.",
|
|
540
|
-
params: object({ category:
|
|
579
|
+
params: object({ category: _chunkNZD2MZJCcjs.CATEGORY_REF }, ["category"]),
|
|
541
580
|
run: (_ctx, params) => {
|
|
542
581
|
check(controller.removeCategory(resolveCategory(params.category)));
|
|
543
582
|
return { categories: controller.getSpec().categories };
|
|
@@ -549,7 +588,7 @@ function createChartCommands(controller, options = {}) {
|
|
|
549
588
|
label: "Add Trendline\u2026",
|
|
550
589
|
keywords: ["chart", "trend", "regression", "fit", "forecast", "moving average"],
|
|
551
590
|
description: "Fits a trendline to a series (linear, exponential, logarithmic, power, polynomial or moving average). Returns its index and the fit.",
|
|
552
|
-
params: object({ series:
|
|
591
|
+
params: object({ series: _chunkNZD2MZJCcjs.SERIES_REF, ..._chunkNZD2MZJCcjs.TRENDLINE_PROPS }, ["series", "type"]),
|
|
553
592
|
run: (_ctx, params) => {
|
|
554
593
|
const { series, ...line } = params;
|
|
555
594
|
const result = controller.addTrendline(resolveSeries(series).id, line);
|
|
@@ -564,12 +603,203 @@ function createChartCommands(controller, options = {}) {
|
|
|
564
603
|
label: "Delete Trendline",
|
|
565
604
|
keywords: ["chart", "trend", "remove"],
|
|
566
605
|
description: "Deletes a trendline from a series.",
|
|
567
|
-
params: object({ series:
|
|
606
|
+
params: object({ series: _chunkNZD2MZJCcjs.SERIES_REF, index: { type: "integer", minimum: 0, description: "Trendline index (0 = first)." } }, ["series", "index"]),
|
|
568
607
|
run: (_ctx, params) => {
|
|
569
608
|
check(controller.removeTrendline(resolveSeries(params.series).id, params.index));
|
|
570
609
|
return { trendlines: _nullishCoalesce(_optionalChain([controller, 'access', _29 => _29.getSeries, 'call', _30 => _30(resolveSeries(params.series).id), 'optionalAccess', _31 => _31.trendlines]), () => ( [])) };
|
|
571
610
|
}
|
|
572
611
|
},
|
|
612
|
+
{
|
|
613
|
+
...base,
|
|
614
|
+
id: `${prefix}addReferenceLine`,
|
|
615
|
+
label: "Add Reference Line\u2026",
|
|
616
|
+
keywords: ["chart", "target", "goal", "threshold", "average", "reference", "line", "annotation"],
|
|
617
|
+
description: "Draws a dashed line across the plot at one value (a target, floor or average). Returns its index.",
|
|
618
|
+
params: object(_chunkNZD2MZJCcjs.REFERENCE_LINE_PROPS, ["value"]),
|
|
619
|
+
run: (_ctx, params) => {
|
|
620
|
+
const result = controller.addReferenceLine(params);
|
|
621
|
+
check(result);
|
|
622
|
+
return { index: result.index, referenceLines: controller.getSpec().referenceLines };
|
|
623
|
+
}
|
|
624
|
+
},
|
|
625
|
+
{
|
|
626
|
+
...base,
|
|
627
|
+
id: `${prefix}updateReferenceLine`,
|
|
628
|
+
label: "Change Reference Line\u2026",
|
|
629
|
+
keywords: ["chart", "target", "reference", "line", "annotation"],
|
|
630
|
+
description: "Changes a reference line by index; label, axis and color take null to remove them.",
|
|
631
|
+
params: object({ index: _chunkNZD2MZJCcjs.REFERENCE_INDEX.call(void 0, "Reference line"), ..._chunkNZD2MZJCcjs.REFERENCE_LINE_PATCH }, ["index"]),
|
|
632
|
+
run: (_ctx, params) => {
|
|
633
|
+
const { index, ...patch } = params;
|
|
634
|
+
check(controller.updateReferenceLine(index, patch));
|
|
635
|
+
return { referenceLine: controller.getSpec().referenceLines[index] };
|
|
636
|
+
}
|
|
637
|
+
},
|
|
638
|
+
{
|
|
639
|
+
...base,
|
|
640
|
+
id: `${prefix}removeReferenceLine`,
|
|
641
|
+
label: "Delete Reference Line",
|
|
642
|
+
keywords: ["chart", "target", "reference", "line", "remove"],
|
|
643
|
+
description: "Deletes a reference line by index.",
|
|
644
|
+
params: object({ index: _chunkNZD2MZJCcjs.REFERENCE_INDEX.call(void 0, "Reference line") }, ["index"]),
|
|
645
|
+
run: (_ctx, params) => {
|
|
646
|
+
check(controller.removeReferenceLine(params.index));
|
|
647
|
+
return { referenceLines: controller.getSpec().referenceLines };
|
|
648
|
+
}
|
|
649
|
+
},
|
|
650
|
+
{
|
|
651
|
+
...base,
|
|
652
|
+
id: `${prefix}addReferenceBand`,
|
|
653
|
+
label: "Add Reference Band\u2026",
|
|
654
|
+
keywords: ["chart", "target", "range", "band", "reference", "shade", "annotation"],
|
|
655
|
+
description: "Shades a band across the plot between two values (a target or normal range). Returns its index.",
|
|
656
|
+
params: object(_chunkNZD2MZJCcjs.REFERENCE_BAND_PROPS, ["from", "to"]),
|
|
657
|
+
run: (_ctx, params) => {
|
|
658
|
+
const result = controller.addReferenceBand(params);
|
|
659
|
+
check(result);
|
|
660
|
+
return { index: result.index, referenceBands: controller.getSpec().referenceBands };
|
|
661
|
+
}
|
|
662
|
+
},
|
|
663
|
+
{
|
|
664
|
+
...base,
|
|
665
|
+
id: `${prefix}updateReferenceBand`,
|
|
666
|
+
label: "Change Reference Band\u2026",
|
|
667
|
+
keywords: ["chart", "range", "band", "reference", "annotation"],
|
|
668
|
+
description: "Changes a reference band by index; label, axis and color take null to remove them.",
|
|
669
|
+
params: object({ index: _chunkNZD2MZJCcjs.REFERENCE_INDEX.call(void 0, "Reference band"), ..._chunkNZD2MZJCcjs.REFERENCE_BAND_PATCH }, ["index"]),
|
|
670
|
+
run: (_ctx, params) => {
|
|
671
|
+
const { index, ...patch } = params;
|
|
672
|
+
check(controller.updateReferenceBand(index, patch));
|
|
673
|
+
return { referenceBand: controller.getSpec().referenceBands[index] };
|
|
674
|
+
}
|
|
675
|
+
},
|
|
676
|
+
{
|
|
677
|
+
...base,
|
|
678
|
+
id: `${prefix}removeReferenceBand`,
|
|
679
|
+
label: "Delete Reference Band",
|
|
680
|
+
keywords: ["chart", "range", "band", "reference", "remove"],
|
|
681
|
+
description: "Deletes a reference band by index.",
|
|
682
|
+
params: object({ index: _chunkNZD2MZJCcjs.REFERENCE_INDEX.call(void 0, "Reference band") }, ["index"]),
|
|
683
|
+
run: (_ctx, params) => {
|
|
684
|
+
check(controller.removeReferenceBand(params.index));
|
|
685
|
+
return { referenceBands: controller.getSpec().referenceBands };
|
|
686
|
+
}
|
|
687
|
+
},
|
|
688
|
+
{
|
|
689
|
+
...base,
|
|
690
|
+
id: `${prefix}setCallout`,
|
|
691
|
+
label: "Pin Label to Point\u2026",
|
|
692
|
+
keywords: ["chart", "callout", "annotation", "label", "note", "point"],
|
|
693
|
+
description: 'Pins a short label to one bar or point (label null or "" removes it).',
|
|
694
|
+
params: object({ series: _chunkNZD2MZJCcjs.SERIES_REF, category: _chunkNZD2MZJCcjs.CATEGORY_REF, label: { type: ["string", "null"], description: "The label (a few words), or null to remove it." } }, ["series", "category", "label"]),
|
|
695
|
+
run: (_ctx, params) => {
|
|
696
|
+
const series = resolveSeries(params.series);
|
|
697
|
+
const index = resolveCategory(params.category);
|
|
698
|
+
check(controller.setCallout(series.id, index, params.label));
|
|
699
|
+
return { series: series.id, index, label: _nullishCoalesce(_optionalChain([controller, 'access', _32 => _32.getSeries, 'call', _33 => _33(series.id), 'optionalAccess', _34 => _34.callouts, 'optionalAccess', _35 => _35[index]]), () => ( null)) };
|
|
700
|
+
}
|
|
701
|
+
},
|
|
702
|
+
{
|
|
703
|
+
...base,
|
|
704
|
+
id: `${prefix}highlight`,
|
|
705
|
+
label: "Highlight\u2026",
|
|
706
|
+
keywords: ["chart", "highlight", "emphasise", "emphasize", "focus", "mute", "dim"],
|
|
707
|
+
description: "Draws the named categories and series normally and mutes the rest ([] shows everything). Unknown names change nothing.",
|
|
708
|
+
params: object({ names: { type: "array", items: { type: "string" }, description: "Category labels and / or series names or ids; [] clears the highlight." } }, ["names"]),
|
|
709
|
+
run: (_ctx, params) => {
|
|
710
|
+
const result = controller.setHighlight(params.names);
|
|
711
|
+
check(result);
|
|
712
|
+
const { categories, series } = result;
|
|
713
|
+
return { highlight: controller.getSpec().highlight, categories, series };
|
|
714
|
+
}
|
|
715
|
+
},
|
|
716
|
+
{
|
|
717
|
+
...base,
|
|
718
|
+
id: `${prefix}setTree`,
|
|
719
|
+
label: "Replace Grouped Data\u2026",
|
|
720
|
+
keywords: ["chart", "tree", "hierarchy", "groups", "treemap", "sunburst", "nested"],
|
|
721
|
+
description: "Replaces the data with groups of items (a tree) for treemaps and sunbursts; [] goes back to plain data.",
|
|
722
|
+
params: { type: "object", properties: { tree: { type: "array", items: { $ref: "#/$defs/chartTreeNode" }, description: "The top-level nodes; [] removes the grouping." } }, required: ["tree"], additionalProperties: false, $defs: _chunkNZD2MZJCcjs.TREE_DEFS },
|
|
723
|
+
run: (_ctx, params) => {
|
|
724
|
+
check(controller.setTree(params.tree));
|
|
725
|
+
return { groups: controller.getSpec().tree.map((n) => ({ name: n.name, total: _chunkR3P2M7HUcjs.chartTreeTotal.call(void 0, n) })) };
|
|
726
|
+
}
|
|
727
|
+
},
|
|
728
|
+
{
|
|
729
|
+
...base,
|
|
730
|
+
id: `${prefix}importTreeCsv`,
|
|
731
|
+
label: "Import Grouped Data from CSV\u2026",
|
|
732
|
+
keywords: ["chart", "tree", "hierarchy", "csv", "import", "treemap", "sunburst"],
|
|
733
|
+
description: "Replaces the data with grouped data from CSV / TSV: names in every column but the last (group, \u2026, item), the value in the last.",
|
|
734
|
+
params: object(
|
|
735
|
+
{
|
|
736
|
+
csv: { type: "string", description: "CSV or TSV text." },
|
|
737
|
+
header: { type: ["boolean", "string"], enum: [true, false, "auto"], description: "The first row holds column names (default auto)." }
|
|
738
|
+
},
|
|
739
|
+
["csv"]
|
|
740
|
+
),
|
|
741
|
+
run: (_ctx, params) => {
|
|
742
|
+
check(controller.importTreeTable(_chunkN3KJFGXTcjs.parseCsv.call(void 0, params.csv, { delimiter: params.csv.includes(" ") ? " " : "," }), { header: params.header }));
|
|
743
|
+
return { tree: controller.getSpec().tree };
|
|
744
|
+
}
|
|
745
|
+
},
|
|
746
|
+
{
|
|
747
|
+
...base,
|
|
748
|
+
id: `${prefix}addTreeNode`,
|
|
749
|
+
label: "Add Item or Group\u2026",
|
|
750
|
+
keywords: ["chart", "tree", "group", "item", "add", "treemap", "sunburst"],
|
|
751
|
+
description: "Adds an item or group under a group of the grouped data ([] for the top level). Returns its path.",
|
|
752
|
+
params: {
|
|
753
|
+
type: "object",
|
|
754
|
+
properties: {
|
|
755
|
+
parent: { type: "array", items: { type: "string" }, description: "Path of the group to add to; [] or omitted for the top level." },
|
|
756
|
+
node: { $ref: "#/$defs/chartTreeNode", description: "The item or group to add." },
|
|
757
|
+
at: { type: "integer", minimum: 0, description: "Position among its siblings (default: the end)." }
|
|
758
|
+
},
|
|
759
|
+
required: ["node"],
|
|
760
|
+
additionalProperties: false,
|
|
761
|
+
$defs: _chunkNZD2MZJCcjs.TREE_DEFS
|
|
762
|
+
},
|
|
763
|
+
run: (_ctx, params) => {
|
|
764
|
+
const result = controller.addTreeNode(_nullishCoalesce(params.parent, () => ( [])), params.node, { at: params.at });
|
|
765
|
+
check(result);
|
|
766
|
+
return { path: result.path };
|
|
767
|
+
}
|
|
768
|
+
},
|
|
769
|
+
{
|
|
770
|
+
...base,
|
|
771
|
+
id: `${prefix}updateTreeNode`,
|
|
772
|
+
label: "Change Item or Group\u2026",
|
|
773
|
+
keywords: ["chart", "tree", "group", "item", "rename", "value"],
|
|
774
|
+
description: "Renames a node, sets an item's value or sets a node's colour (null for the palette).",
|
|
775
|
+
params: object(
|
|
776
|
+
{
|
|
777
|
+
path: _chunkNZD2MZJCcjs.TREE_PATH,
|
|
778
|
+
name: { type: "string", description: "New name." },
|
|
779
|
+
value: { type: "number", minimum: 0, description: "Items only: the new amount." },
|
|
780
|
+
color: { type: ["string", "null"], description: "CSS colour, or null for the palette colour." }
|
|
781
|
+
},
|
|
782
|
+
["path"]
|
|
783
|
+
),
|
|
784
|
+
run: (_ctx, params) => {
|
|
785
|
+
const { path, ...patch } = params;
|
|
786
|
+
const result = controller.updateTreeNode(path, patch);
|
|
787
|
+
check(result);
|
|
788
|
+
return { path: result.path };
|
|
789
|
+
}
|
|
790
|
+
},
|
|
791
|
+
{
|
|
792
|
+
...base,
|
|
793
|
+
id: `${prefix}removeTreeNode`,
|
|
794
|
+
label: "Delete Item or Group",
|
|
795
|
+
keywords: ["chart", "tree", "group", "item", "remove", "delete"],
|
|
796
|
+
description: "Deletes a node of the grouped data with everything under it.",
|
|
797
|
+
params: object({ path: _chunkNZD2MZJCcjs.TREE_PATH }, ["path"]),
|
|
798
|
+
run: (_ctx, params) => {
|
|
799
|
+
check(controller.removeTreeNode(params.path));
|
|
800
|
+
return { groups: controller.getSpec().tree.map((n) => ({ name: n.name, total: _chunkR3P2M7HUcjs.chartTreeTotal.call(void 0, n) })) };
|
|
801
|
+
}
|
|
802
|
+
},
|
|
573
803
|
{
|
|
574
804
|
...base,
|
|
575
805
|
id: `${prefix}applyPreset`,
|
|
@@ -577,8 +807,8 @@ function createChartCommands(controller, options = {}) {
|
|
|
577
807
|
keywords: ["chart", "quick layout", "style", "colours", "colors", "monochrome", "theme"],
|
|
578
808
|
description: "Applies a quick layout and / or colour scheme as one undo step.",
|
|
579
809
|
params: object({
|
|
580
|
-
layout: { type: "string", enum:
|
|
581
|
-
colors: { type: "string", enum:
|
|
810
|
+
layout: { type: "string", enum: _chunkGKNEJ6ENcjs.CHART_LAYOUT_PRESETS.map((p) => p.id), description: "Quick layout id." },
|
|
811
|
+
colors: { type: "string", enum: _chunkGKNEJ6ENcjs.CHART_COLOR_SCHEMES.map((p) => p.id), description: "Colour scheme id." }
|
|
582
812
|
}),
|
|
583
813
|
run: (_ctx, params = {}) => {
|
|
584
814
|
check(controller.applyPreset(_nullishCoalesce(params, () => ( {}))));
|
|
@@ -593,7 +823,7 @@ function createChartCommands(controller, options = {}) {
|
|
|
593
823
|
description: "Swaps series and categories as one undo step.",
|
|
594
824
|
run: () => {
|
|
595
825
|
check(controller.transpose());
|
|
596
|
-
return { table:
|
|
826
|
+
return { table: _chunkR3P2M7HUcjs.chartDataToTable.call(void 0, controller.getSpec()) };
|
|
597
827
|
}
|
|
598
828
|
},
|
|
599
829
|
{
|
|
@@ -613,7 +843,7 @@ function createChartCommands(controller, options = {}) {
|
|
|
613
843
|
run: (_ctx, params) => {
|
|
614
844
|
const result = controller.importCsv(params.csv, { seriesIn: params.seriesIn, header: params.header });
|
|
615
845
|
check(result);
|
|
616
|
-
return { table:
|
|
846
|
+
return { table: _chunkR3P2M7HUcjs.chartDataToTable.call(void 0, controller.getSpec()), issues: _nullishCoalesce(result.issues, () => ( [])) };
|
|
617
847
|
}
|
|
618
848
|
},
|
|
619
849
|
{
|
|
@@ -624,7 +854,7 @@ function createChartCommands(controller, options = {}) {
|
|
|
624
854
|
description: "Replaces the chart with Mermaid xychart-beta, pie or radar-beta text (one undo step). Unreadable lines are listed with line numbers.",
|
|
625
855
|
params: object({ mermaid: { type: "string", description: "Mermaid text." } }, ["mermaid"]),
|
|
626
856
|
run: (_ctx, params) => {
|
|
627
|
-
const read =
|
|
857
|
+
const read = _chunkGKNEJ6ENcjs.chartFromMermaid.call(void 0, params.mermaid);
|
|
628
858
|
if (!read.family) fail(read.issues.map((i) => i.message).join(" ") || "Expected Mermaid starting with xychart-beta, pie or radar-beta.");
|
|
629
859
|
check(controller.update({ ...read.spec }, { label: "Import Mermaid chart" }));
|
|
630
860
|
return { spec: controller.toJSON(), issues: read.issues };
|
|
@@ -638,7 +868,7 @@ function createChartCommands(controller, options = {}) {
|
|
|
638
868
|
keywords: ["chart", "mermaid", "markdown", "export"],
|
|
639
869
|
description: "Returns the chart as Mermaid text (with a round-trip comment unless meta is false).",
|
|
640
870
|
params: object({ meta: { type: "boolean", description: "Include the %% @pixerate round-trip comment (default true)." } }),
|
|
641
|
-
run: (_ctx, params = {}) => ({ mermaid:
|
|
871
|
+
run: (_ctx, params = {}) => ({ mermaid: _chunkGKNEJ6ENcjs.chartToMermaid.call(void 0, controller.toJSON(), { meta: _optionalChain([params, 'optionalAccess', _36 => _36.meta]) }) })
|
|
642
872
|
},
|
|
643
873
|
{
|
|
644
874
|
...base,
|
|
@@ -647,7 +877,7 @@ function createChartCommands(controller, options = {}) {
|
|
|
647
877
|
readOnly: true,
|
|
648
878
|
keywords: ["chart", "office", "word", "powerpoint", "docx", "pptx", "xml", "export"],
|
|
649
879
|
description: "Returns the chart as a DrawingML chart part (c:chartSpace) and what could not be written.",
|
|
650
|
-
run: () =>
|
|
880
|
+
run: () => _chunkYGG7WDWTcjs.chartToOoxml.call(void 0, controller.toJSON())
|
|
651
881
|
},
|
|
652
882
|
{
|
|
653
883
|
...base,
|
|
@@ -656,9 +886,9 @@ function createChartCommands(controller, options = {}) {
|
|
|
656
886
|
readOnly: true,
|
|
657
887
|
keywords: ["chart", "svg", "export", "image"],
|
|
658
888
|
description: "Returns the chart drawn as a standalone, accessible SVG string (with <title> and <desc>).",
|
|
659
|
-
params: object({ width:
|
|
889
|
+
params: object({ width: _chunkNZD2MZJCcjs.WIDTH, height: _chunkNZD2MZJCcjs.HEIGHT }),
|
|
660
890
|
run: (_ctx, params = {}) => ({
|
|
661
|
-
svg:
|
|
891
|
+
svg: _chunkGKNEJ6ENcjs.chartToSvg.call(void 0, controller.toJSON(), { width: _nullishCoalesce(_optionalChain([params, 'optionalAccess', _37 => _37.width]), () => ( 640)), height: _nullishCoalesce(_optionalChain([params, 'optionalAccess', _38 => _38.height]), () => ( 400)) })
|
|
662
892
|
})
|
|
663
893
|
},
|
|
664
894
|
{
|
|
@@ -670,7 +900,7 @@ function createChartCommands(controller, options = {}) {
|
|
|
670
900
|
description: "Suggests chart types for the current data (or CSV), best first, each with a reason.",
|
|
671
901
|
params: object({ csv: { type: "string", description: "CSV text to analyse instead of the current data." } }),
|
|
672
902
|
run: (_ctx, params = {}) => ({
|
|
673
|
-
recommendations: recommendChartTypes(_optionalChain([params, 'optionalAccess',
|
|
903
|
+
recommendations: recommendChartTypes(_optionalChain([params, 'optionalAccess', _39 => _39.csv]) !== void 0 ? _chunkN3KJFGXTcjs.parseCsv.call(void 0, params.csv) : _chunkR3P2M7HUcjs.chartDataToTable.call(void 0, controller.getSpec()))
|
|
674
904
|
})
|
|
675
905
|
},
|
|
676
906
|
{
|
|
@@ -683,8 +913,8 @@ function createChartCommands(controller, options = {}) {
|
|
|
683
913
|
run: () => {
|
|
684
914
|
const s = controller.getSpec();
|
|
685
915
|
const visible = s.series.filter((x) => !x.hidden);
|
|
686
|
-
const colors =
|
|
687
|
-
return { colors, ...
|
|
916
|
+
const colors = _chunkR3P2M7HUcjs.chartSpecColorsByCategory.call(void 0, s) ? s.categories.map((_, i) => _optionalChain([visible, 'access', _40 => _40[0], 'optionalAccess', _41 => _41.pointColors, 'optionalAccess', _42 => _42[i]]) || _chunkR3P2M7HUcjs.chartSliceColor.call(void 0, s, i)) : visible.map((x) => _chunkR3P2M7HUcjs.chartSeriesColor.call(void 0, s, s.series.indexOf(x)));
|
|
917
|
+
return { colors, ..._chunkR3P2M7HUcjs.checkChartColors.call(void 0, colors) };
|
|
688
918
|
}
|
|
689
919
|
},
|
|
690
920
|
{
|
|
@@ -713,9 +943,9 @@ function chartClientToScene(scene, box, clientX, clientY) {
|
|
|
713
943
|
return { x: (clientX - box.left) * sx, y: (clientY - box.top) * sy };
|
|
714
944
|
}
|
|
715
945
|
function canDragChartPoint(controller, scene, target) {
|
|
716
|
-
if (_optionalChain([target, 'optionalAccess',
|
|
946
|
+
if (_optionalChain([target, 'optionalAccess', _43 => _43.kind]) !== "point" || !scene.valueScale || scene.percent) return false;
|
|
717
947
|
const spec = controller.getSpec();
|
|
718
|
-
const family =
|
|
948
|
+
const family = _chunkR3P2M7HUcjs.chartFamily.call(void 0, spec);
|
|
719
949
|
if (family !== "cartesian" && family !== "xy" && family !== "waterfall") return false;
|
|
720
950
|
const series = controller.getSeries(target.seriesId);
|
|
721
951
|
return !!series && !series.hidden && series.values[target.index] !== null;
|
|
@@ -724,7 +954,7 @@ function snapChartDragValue(scene, value, options = {}) {
|
|
|
724
954
|
const scale = _nullishCoalesce(options.scale, () => ( scene.valueScale));
|
|
725
955
|
const tolerance = _nullishCoalesce(options.tolerancePx, () => ( 6));
|
|
726
956
|
if (scale) {
|
|
727
|
-
const px = (v) =>
|
|
957
|
+
const px = (v) => _chunkSBQVEBSUcjs.chartScaleToPixel.call(void 0, v, scale);
|
|
728
958
|
const at = px(value);
|
|
729
959
|
let best = null;
|
|
730
960
|
let bestDist = tolerance;
|
|
@@ -739,7 +969,7 @@ function snapChartDragValue(scene, value, options = {}) {
|
|
|
739
969
|
}
|
|
740
970
|
if (best !== null) return best;
|
|
741
971
|
}
|
|
742
|
-
return
|
|
972
|
+
return _chunkSBQVEBSUcjs.snapChartValue.call(void 0, scene, value, options.step, _optionalChain([scale, 'optionalAccess', _44 => _44.ticks]), _optionalChain([scale, 'optionalAccess', _45 => _45.logBase]));
|
|
743
973
|
}
|
|
744
974
|
function startChartPointDrag(controller, scene, target, start, options = {}) {
|
|
745
975
|
if (!canDragChartPoint(controller, scene, target)) return null;
|
|
@@ -748,11 +978,11 @@ function startChartPointDrag(controller, scene, target, start, options = {}) {
|
|
|
748
978
|
const series = controller.getSeries(seriesId);
|
|
749
979
|
const secondary = series.axis === "secondary" && !!scene.valueScale2;
|
|
750
980
|
const scale = secondary ? scene.valueScale2 : scene.valueScale;
|
|
751
|
-
const xy =
|
|
981
|
+
const xy = _chunkR3P2M7HUcjs.chartFamily.call(void 0, spec) === "xy" && !!scene.xScale;
|
|
752
982
|
const startValue = _nullishCoalesce(series.values[index], () => ( 0));
|
|
753
|
-
const startX = _nullishCoalesce(_optionalChain([series, 'access',
|
|
754
|
-
const startAt =
|
|
755
|
-
const startAtX = xy ?
|
|
983
|
+
const startX = _nullishCoalesce(_optionalChain([series, 'access', _46 => _46.x, 'optionalAccess', _47 => _47[index]]), () => ( null));
|
|
984
|
+
const startAt = _chunkSBQVEBSUcjs.chartValueAtPoint.call(void 0, scene, start, secondary);
|
|
985
|
+
const startAtX = xy ? _chunkSBQVEBSUcjs.chartXAtPoint.call(void 0, scene, start) : void 0;
|
|
756
986
|
if (startAt === void 0) return null;
|
|
757
987
|
const candidates = [0, startValue];
|
|
758
988
|
if (!xy) {
|
|
@@ -770,7 +1000,7 @@ function startChartPointDrag(controller, scene, target, start, options = {}) {
|
|
|
770
1000
|
target: { seriesId, index },
|
|
771
1001
|
move(point, moveOptions = {}) {
|
|
772
1002
|
if (ended) return;
|
|
773
|
-
const at =
|
|
1003
|
+
const at = _chunkSBQVEBSUcjs.chartValueAtPoint.call(void 0, scene, point, secondary);
|
|
774
1004
|
if (at === void 0) return;
|
|
775
1005
|
const factor = moveOptions.fine ? 0.1 : 1;
|
|
776
1006
|
const moved = (from, to, s, value) => s.logBase && value > 0 && from > 0 && to > 0 ? value * Math.pow(to / from, factor) : value + (to - from) * factor;
|
|
@@ -778,7 +1008,7 @@ function startChartPointDrag(controller, scene, target, start, options = {}) {
|
|
|
778
1008
|
let moveX = false;
|
|
779
1009
|
let atX;
|
|
780
1010
|
if (xy && startX !== null && startAtX !== void 0) {
|
|
781
|
-
atX =
|
|
1011
|
+
atX = _chunkSBQVEBSUcjs.chartXAtPoint.call(void 0, scene, point);
|
|
782
1012
|
moveX = atX !== void 0;
|
|
783
1013
|
if (moveOptions.lockAxis) {
|
|
784
1014
|
if (Math.abs(point.x - start.x) >= Math.abs(point.y - start.y)) moveY = false;
|
|
@@ -790,7 +1020,7 @@ function startChartPointDrag(controller, scene, target, start, options = {}) {
|
|
|
790
1020
|
if (moveOptions.fine) {
|
|
791
1021
|
if (s.logBase && !options.step) return v > 0 ? Number(v.toPrecision(3)) : v;
|
|
792
1022
|
const unit = options.step ? options.step / 10 : s.ticks.length > 1 ? (s.ticks[1] - s.ticks[0]) / 100 : void 0;
|
|
793
|
-
return
|
|
1023
|
+
return _chunkSBQVEBSUcjs.snapChartValue.call(void 0, scene, v, unit, s.ticks);
|
|
794
1024
|
}
|
|
795
1025
|
return snapChartDragValue(scene, v, { candidates: c, tolerancePx: options.tolerancePx, step: options.step, scale: s });
|
|
796
1026
|
};
|
|
@@ -801,7 +1031,7 @@ function startChartPointDrag(controller, scene, target, start, options = {}) {
|
|
|
801
1031
|
const xs = [..._nullishCoalesce(series.x, () => ( []))];
|
|
802
1032
|
xs[index] = x;
|
|
803
1033
|
controller.setValue(seriesId, index, y, { label });
|
|
804
|
-
if (x !== _optionalChain([controller, 'access',
|
|
1034
|
+
if (x !== _optionalChain([controller, 'access', _48 => _48.getSeries, 'call', _49 => _49(seriesId), 'optionalAccess', _50 => _50.x, 'optionalAccess', _51 => _51[index]])) controller.updateSeries(seriesId, { x: xs });
|
|
805
1035
|
} else controller.setValue(seriesId, index, y, { label });
|
|
806
1036
|
},
|
|
807
1037
|
end() {
|
|
@@ -835,7 +1065,7 @@ function handleChartKey(controller, scene, event) {
|
|
|
835
1065
|
return true;
|
|
836
1066
|
case "ArrowLeft":
|
|
837
1067
|
case "ArrowRight": {
|
|
838
|
-
if (event.altKey || _optionalChain([selection, 'optionalAccess',
|
|
1068
|
+
if (event.altKey || _optionalChain([selection, 'optionalAccess', _52 => _52.kind]) !== "point" && _optionalChain([selection, 'optionalAccess', _53 => _53.kind]) !== "category") return false;
|
|
839
1069
|
const n = spec.categories.length;
|
|
840
1070
|
const index = Math.max(0, Math.min(n - 1, selection.index + (event.key === "ArrowRight" ? 1 : -1)));
|
|
841
1071
|
controller.select({ ...selection, index });
|
|
@@ -843,14 +1073,14 @@ function handleChartKey(controller, scene, event) {
|
|
|
843
1073
|
}
|
|
844
1074
|
case "ArrowUp":
|
|
845
1075
|
case "ArrowDown": {
|
|
846
|
-
if (_optionalChain([selection, 'optionalAccess',
|
|
1076
|
+
if (_optionalChain([selection, 'optionalAccess', _54 => _54.kind]) !== "point" || _optionalChain([scene, 'optionalAccess', _55 => _55.percent])) return false;
|
|
847
1077
|
const series = controller.getSeries(selection.seriesId);
|
|
848
|
-
const secondary = _optionalChain([series, 'optionalAccess',
|
|
849
|
-
const scale = _nullishCoalesce((secondary ? _optionalChain([scene, 'optionalAccess',
|
|
850
|
-
const ticks = _nullishCoalesce(_optionalChain([scale, 'optionalAccess',
|
|
1078
|
+
const secondary = _optionalChain([series, 'optionalAccess', _56 => _56.axis]) === "secondary";
|
|
1079
|
+
const scale = _nullishCoalesce((secondary ? _optionalChain([scene, 'optionalAccess', _57 => _57.valueScale2]) : null), () => ( _optionalChain([scene, 'optionalAccess', _58 => _58.valueScale])));
|
|
1080
|
+
const ticks = _nullishCoalesce(_optionalChain([scale, 'optionalAccess', _59 => _59.ticks]), () => ( []));
|
|
851
1081
|
const up = event.key === "ArrowUp";
|
|
852
|
-
const current = _nullishCoalesce(_optionalChain([series, 'optionalAccess',
|
|
853
|
-
if (_optionalChain([scale, 'optionalAccess',
|
|
1082
|
+
const current = _nullishCoalesce(_optionalChain([series, 'optionalAccess', _60 => _60.values, 'access', _61 => _61[selection.index]]), () => ( null));
|
|
1083
|
+
if (_optionalChain([scale, 'optionalAccess', _62 => _62.logBase]) && current !== null && current > 0) {
|
|
854
1084
|
const power = event.shiftKey ? 1 : event.altKey ? 0.01 : 0.1;
|
|
855
1085
|
const next = Number((current * Math.pow(scale.logBase, up ? power : -power)).toPrecision(event.altKey ? 4 : 3));
|
|
856
1086
|
controller.nudgeValue(selection.seriesId, selection.index, next - current);
|
|
@@ -878,22 +1108,22 @@ function describeChartSelection(controller, selection = controller.getState().se
|
|
|
878
1108
|
case "legend":
|
|
879
1109
|
return "Legend";
|
|
880
1110
|
case "axis":
|
|
881
|
-
return selection.axis === "x" ?
|
|
1111
|
+
return selection.axis === "x" ? _chunkR3P2M7HUcjs.chartFamily.call(void 0, spec) === "xy" ? "X axis" : "Category axis" : selection.axis === "y" ? "Value axis" : "Secondary value axis";
|
|
882
1112
|
case "series":
|
|
883
|
-
return `Series "${_nullishCoalesce(_optionalChain([controller, 'access',
|
|
1113
|
+
return `Series "${_nullishCoalesce(_optionalChain([controller, 'access', _63 => _63.getSeries, 'call', _64 => _64(selection.seriesId), 'optionalAccess', _65 => _65.name]), () => ( selection.seriesId))}"`;
|
|
884
1114
|
case "category":
|
|
885
1115
|
return `Category "${_nullishCoalesce(spec.categories[selection.index], () => ( selection.index))}"`;
|
|
886
1116
|
case "trendline": {
|
|
887
1117
|
const series = controller.getSeries(selection.seriesId);
|
|
888
|
-
const line = _optionalChain([series, 'optionalAccess',
|
|
889
|
-
return `${line ? line.type.replace("-", " ") : "Trendline"} trendline on "${_nullishCoalesce(_optionalChain([series, 'optionalAccess',
|
|
1118
|
+
const line = _optionalChain([series, 'optionalAccess', _66 => _66.trendlines, 'optionalAccess', _67 => _67[selection.index]]);
|
|
1119
|
+
return `${line ? line.type.replace("-", " ") : "Trendline"} trendline on "${_nullishCoalesce(_optionalChain([series, 'optionalAccess', _68 => _68.name]), () => ( selection.seriesId))}"`;
|
|
890
1120
|
}
|
|
891
1121
|
case "point": {
|
|
892
1122
|
const series = controller.getSeries(selection.seriesId);
|
|
893
|
-
const value = _optionalChain([series, 'optionalAccess',
|
|
894
|
-
const x = _optionalChain([series, 'optionalAccess',
|
|
895
|
-
if (x !== void 0 && x !== null &&
|
|
896
|
-
return `${_nullishCoalesce(_optionalChain([series, 'optionalAccess',
|
|
1123
|
+
const value = _optionalChain([series, 'optionalAccess', _69 => _69.values, 'access', _70 => _70[selection.index]]);
|
|
1124
|
+
const x = _optionalChain([series, 'optionalAccess', _71 => _71.x, 'optionalAccess', _72 => _72[selection.index]]);
|
|
1125
|
+
if (x !== void 0 && x !== null && _chunkR3P2M7HUcjs.chartFamily.call(void 0, spec) === "xy") return `${_nullishCoalesce(_optionalChain([series, 'optionalAccess', _73 => _73.name]), () => ( selection.seriesId))}: (${x}, ${_nullishCoalesce(value, () => ( "blank"))})`;
|
|
1126
|
+
return `${_nullishCoalesce(_optionalChain([series, 'optionalAccess', _74 => _74.name]), () => ( selection.seriesId))} \xB7 ${_nullishCoalesce(spec.categories[selection.index], () => ( selection.index))}: ${_nullishCoalesce(value, () => ( "blank"))}`;
|
|
897
1127
|
}
|
|
898
1128
|
}
|
|
899
1129
|
}
|
|
@@ -940,7 +1170,7 @@ var CHART_PRESENCE_COLORS = _chunkSWTUM32Hcjs.PRESENCE_COLORS;
|
|
|
940
1170
|
var realChartClock = _chunkSWTUM32Hcjs.realPresenceClock;
|
|
941
1171
|
var createInstantChartClock = _chunkSWTUM32Hcjs.createInstantPresenceClock;
|
|
942
1172
|
function chartPointAnchor(scene, seriesId, index) {
|
|
943
|
-
const mark = scene.marks.find((m) => (m.role === "bar" || m.role === "point") && _optionalChain([m, 'access',
|
|
1173
|
+
const mark = scene.marks.find((m) => (m.role === "bar" || m.role === "point") && _optionalChain([m, 'access', _75 => _75.target, 'optionalAccess', _76 => _76.kind]) === "point" && m.target.seriesId === seriesId && m.target.index === index);
|
|
944
1174
|
if (!mark) return null;
|
|
945
1175
|
if (mark.kind === "rect") return { x: mark.x + mark.width / 2, y: mark.y };
|
|
946
1176
|
if (mark.kind === "circle") return { x: mark.cx, y: mark.cy };
|
|
@@ -966,10 +1196,10 @@ function planChartCommand(spec, scene, command, speed = 1) {
|
|
|
966
1196
|
case "setValue": {
|
|
967
1197
|
const at = chartPointAnchor(scene, command.seriesId, command.index);
|
|
968
1198
|
const series = spec.series.find((s) => s.id === command.seriesId);
|
|
969
|
-
const from = _nullishCoalesce(_optionalChain([series, 'optionalAccess',
|
|
970
|
-
const scale = _optionalChain([series, 'optionalAccess',
|
|
1199
|
+
const from = _nullishCoalesce(_optionalChain([series, 'optionalAccess', _77 => _77.values, 'access', _78 => _78[command.index]]), () => ( 0));
|
|
1200
|
+
const scale = _optionalChain([series, 'optionalAccess', _79 => _79.axis]) === "secondary" ? _nullishCoalesce(scene.valueScale2, () => ( scene.valueScale)) : scene.valueScale;
|
|
971
1201
|
if (at && scale) {
|
|
972
|
-
const px =
|
|
1202
|
+
const px = _chunkSBQVEBSUcjs.linearMap.call(void 0, command.value, scale.domain, scale.range);
|
|
973
1203
|
const to = scale.axis === "y" ? { x: at.x, y: px } : { x: px, y: at.y };
|
|
974
1204
|
steps.push({ type: "move", to: at, ms: ms(380) }, { type: "press" }, { type: "drag", to, ms: ms(520), from, value: command.value }, { type: "release" });
|
|
975
1205
|
} 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 });
|
|
@@ -979,12 +1209,12 @@ function planChartCommand(spec, scene, command, speed = 1) {
|
|
|
979
1209
|
case "select": {
|
|
980
1210
|
const sel = command.selection;
|
|
981
1211
|
let to = null;
|
|
982
|
-
if (_optionalChain([sel, 'optionalAccess',
|
|
1212
|
+
if (_optionalChain([sel, 'optionalAccess', _80 => _80.kind]) === "point") to = chartPointAnchor(scene, sel.seriesId, sel.index);
|
|
983
1213
|
else if (sel) {
|
|
984
1214
|
const m = scene.marks.find((x) => x.target && JSON.stringify(x.target) === JSON.stringify(sel));
|
|
985
|
-
if (_optionalChain([m, 'optionalAccess',
|
|
986
|
-
else if (_optionalChain([m, 'optionalAccess',
|
|
987
|
-
else if (_optionalChain([m, 'optionalAccess',
|
|
1215
|
+
if (_optionalChain([m, 'optionalAccess', _81 => _81.kind]) === "text") to = { x: m.x, y: m.y };
|
|
1216
|
+
else if (_optionalChain([m, 'optionalAccess', _82 => _82.kind]) === "rect") to = { x: m.x + m.width / 2, y: m.y + m.height / 2 };
|
|
1217
|
+
else if (_optionalChain([m, 'optionalAccess', _83 => _83.kind]) === "circle") to = { x: m.cx, y: m.cy };
|
|
988
1218
|
}
|
|
989
1219
|
if (to) steps.push({ type: "move", to, ms: ms(380) }, { type: "press" }, { type: "release" });
|
|
990
1220
|
steps.push({ type: "commit" });
|
|
@@ -1066,7 +1296,7 @@ var ChartDirector = class {
|
|
|
1066
1296
|
if (command.kind !== "setValue") break;
|
|
1067
1297
|
const stale2 = this.stale(command);
|
|
1068
1298
|
if (stale2) return { ok: false, command, message: stale2 };
|
|
1069
|
-
const label = `${_nullishCoalesce(_optionalChain([this, 'access',
|
|
1299
|
+
const label = `${_nullishCoalesce(_optionalChain([this, 'access', _84 => _84.presence, 'access', _85 => _85.getState, 'call', _86 => _86(), 'access', _87 => _87.actors, 'access', _88 => _88.find, 'call', _89 => _89((a) => a.id === id), 'optionalAccess', _90 => _90.name]), () => ( "Agent"))}: edit value`;
|
|
1070
1300
|
await this.move(id, where(), step.to, step.ms, (e) => {
|
|
1071
1301
|
const v = step.from + (step.value - step.from) * e;
|
|
1072
1302
|
this.controller.setValue(command.seriesId, command.index, Number(v.toPrecision(12)), { label });
|
|
@@ -1131,6 +1361,11 @@ function planChartToolPlayback(tool, args) {
|
|
|
1131
1361
|
if (args.kind === "point" && typeof args.series === "string" && args.category !== void 0) return click(chartPointRef(args.series, args.category));
|
|
1132
1362
|
return typeof args.kind === "string" && args.kind !== "none" ? click(control(args.kind)) : null;
|
|
1133
1363
|
case "set_chart_data":
|
|
1364
|
+
case "set_chart_tree":
|
|
1365
|
+
case "import_chart_tree_csv":
|
|
1366
|
+
case "add_chart_tree_node":
|
|
1367
|
+
case "update_chart_tree_node":
|
|
1368
|
+
case "remove_chart_tree_node":
|
|
1134
1369
|
case "import_chart_csv":
|
|
1135
1370
|
case "import_chart_mermaid":
|
|
1136
1371
|
case "import_chart_ooxml":
|
|
@@ -1144,6 +1379,19 @@ function planChartToolPlayback(tool, args) {
|
|
|
1144
1379
|
case "add_chart_trendline":
|
|
1145
1380
|
case "remove_chart_trendline":
|
|
1146
1381
|
return click(control("trendline.add"));
|
|
1382
|
+
case "add_chart_reference_line":
|
|
1383
|
+
case "update_chart_reference_line":
|
|
1384
|
+
case "remove_chart_reference_line":
|
|
1385
|
+
return click(control("referenceLine.add"));
|
|
1386
|
+
case "add_chart_reference_band":
|
|
1387
|
+
case "update_chart_reference_band":
|
|
1388
|
+
case "remove_chart_reference_band":
|
|
1389
|
+
return click(control("referenceBand.add"));
|
|
1390
|
+
case "set_chart_callout":
|
|
1391
|
+
if (typeof args.series === "string" && (typeof args.category === "string" || typeof args.category === "number")) return [...click(chartPointRef(args.series, args.category)), ...click(control("series.callout"))];
|
|
1392
|
+
return click(control("series.callout"));
|
|
1393
|
+
case "highlight_chart":
|
|
1394
|
+
return click(control("highlight"));
|
|
1147
1395
|
case "render_chart":
|
|
1148
1396
|
return [{ type: "target", ref: { kind: "action", id: "download-png" } }];
|
|
1149
1397
|
case "undo_chart":
|
|
@@ -1202,13 +1450,19 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1202
1450
|
fail2(`There is no category ${JSON.stringify(ref)}; expected an index from 0 to ${categories.length - 1} or one of ${categories.slice(0, 20).map((c) => JSON.stringify(c)).join(", ")}.`);
|
|
1203
1451
|
return index;
|
|
1204
1452
|
};
|
|
1205
|
-
const table = () =>
|
|
1453
|
+
const table = () => _chunkR3P2M7HUcjs.chartDataToTable.call(void 0, spec());
|
|
1454
|
+
const treeTable = () => {
|
|
1455
|
+
const rows = _chunkR3P2M7HUcjs.chartTreeToRows.call(void 0, spec().tree);
|
|
1456
|
+
const depth = _chunkR3P2M7HUcjs.chartTreeDepth.call(void 0, spec().tree);
|
|
1457
|
+
return [[...Array.from({ length: depth }, (_, k) => k === 0 ? "Group" : k === depth - 1 ? "Item" : `Level ${k + 1}`), "Value"], ...rows.map((r) => [...r.path, ...Array(depth - r.path.length).fill(""), r.value])];
|
|
1458
|
+
};
|
|
1459
|
+
const treeSummary = () => ({ tree: spec().tree, groups: spec().tree.map((n) => ({ name: n.name, total: _chunkR3P2M7HUcjs.chartTreeTotal.call(void 0, n) })), depth: _chunkR3P2M7HUcjs.chartTreeDepth.call(void 0, spec().tree) });
|
|
1206
1460
|
const Parser = () => _nullishCoalesce(options.DOMParser, () => ( globalThis.DOMParser));
|
|
1207
1461
|
const getChart = {
|
|
1208
1462
|
name: "get_chart",
|
|
1209
1463
|
title: "Read the chart",
|
|
1210
|
-
description: "Returns the chart spec (type, titles, axes, legend, series with ids and settings), its data as a table (header row of series names, then one row per category), the current selection, and a summary at the given size: per-series min / max / mean / trend, the axes as drawn, layout warnings (hidden labels, thinned lines), a colour check and a plain-language description. Use the series ids and category indexes it returns with the write tools.",
|
|
1211
|
-
inputSchema: { type: "object", properties: { width:
|
|
1464
|
+
description: "Returns the chart spec (type, titles, axes, legend, series with ids and settings), its data as a table (header row of series names, then one row per category), grouped data as treeTable (path of names to each item, then its value) when the chart has a tree, the current selection, and a summary at the given size: per-series min / max / mean / trend, the axes as drawn, layout warnings (hidden labels, thinned lines), a colour check and a plain-language description. Use the series ids and category indexes it returns with the write tools.",
|
|
1465
|
+
inputSchema: { type: "object", properties: { width: _chunkNZD2MZJCcjs.WIDTH, height: _chunkNZD2MZJCcjs.HEIGHT }, additionalProperties: false },
|
|
1212
1466
|
annotations: { title: "Read the chart", ...READ },
|
|
1213
1467
|
handler: ({ width = size.width, height = size.height }) => {
|
|
1214
1468
|
const reason = readOnlyReason();
|
|
@@ -1216,7 +1470,8 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1216
1470
|
spec: controller.toJSON(),
|
|
1217
1471
|
table: table(),
|
|
1218
1472
|
selection: controller.getState().selection,
|
|
1219
|
-
summary:
|
|
1473
|
+
summary: _chunkGKNEJ6ENcjs.summarizeChart.call(void 0, controller.toJSON(), { width, height }),
|
|
1474
|
+
...spec().tree.length ? { treeTable: treeTable() } : {},
|
|
1220
1475
|
issues: controller.getState().issues,
|
|
1221
1476
|
...reason ? { readOnly: reason } : {}
|
|
1222
1477
|
};
|
|
@@ -1229,8 +1484,8 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1229
1484
|
inputSchema: {
|
|
1230
1485
|
type: "object",
|
|
1231
1486
|
properties: {
|
|
1232
|
-
width:
|
|
1233
|
-
height:
|
|
1487
|
+
width: _chunkNZD2MZJCcjs.WIDTH,
|
|
1488
|
+
height: _chunkNZD2MZJCcjs.HEIGHT,
|
|
1234
1489
|
format: { type: "string", enum: ["svg", "png"], description: "svg (default): the SVG document as text. png: an image to look at (only when the host can rasterize; costs image tokens)." }
|
|
1235
1490
|
},
|
|
1236
1491
|
additionalProperties: false
|
|
@@ -1238,8 +1493,8 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1238
1493
|
annotations: { title: "Render the chart", ...READ },
|
|
1239
1494
|
handler: async ({ width = size.width, height = size.height, format = "svg" }) => {
|
|
1240
1495
|
const json = controller.toJSON();
|
|
1241
|
-
const scene =
|
|
1242
|
-
const svg =
|
|
1496
|
+
const scene = _chunkSBQVEBSUcjs.layoutChart.call(void 0, json, { width, height, selection: null });
|
|
1497
|
+
const svg = _chunkGKNEJ6ENcjs.chartSceneToSvg.call(void 0, scene, { ariaLabel: json.title || void 0, description: _chunkGKNEJ6ENcjs.describeChart.call(void 0, json) });
|
|
1243
1498
|
const warnings = scene.warnings;
|
|
1244
1499
|
if (format === "png") {
|
|
1245
1500
|
if (!options.rasterize) fail2('This host cannot rasterize charts; call render_chart with format "svg", or get_chart for the layout warnings.');
|
|
@@ -1260,7 +1515,7 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1260
1515
|
const checkColors = {
|
|
1261
1516
|
name: "check_chart_colors",
|
|
1262
1517
|
title: "Check chart colours",
|
|
1263
|
-
description: "Checks
|
|
1518
|
+
description: "Checks whether the chart's colours are accessible: that colour-blind readers can tell them apart (protanopia, deuteranopia and tritanopia, by OKLab distance after simulation) as well as people with normal vision, and that they stand out from the background. Checks the chart's own series (or slice) colours unless colours are given. Returns the closest pair per vision, contrast ratios and problems as sentences.",
|
|
1264
1519
|
inputSchema: {
|
|
1265
1520
|
type: "object",
|
|
1266
1521
|
properties: {
|
|
@@ -1273,8 +1528,8 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1273
1528
|
handler: ({ colors, surface }) => {
|
|
1274
1529
|
const s = spec();
|
|
1275
1530
|
const visible = s.series.filter((x) => !x.hidden);
|
|
1276
|
-
const own =
|
|
1277
|
-
return { colors: _nullishCoalesce(colors, () => ( own)), ...
|
|
1531
|
+
const own = _chunkR3P2M7HUcjs.chartSpecColorsByCategory.call(void 0, s) ? s.categories.map((_, i) => _optionalChain([visible, 'access', _91 => _91[0], 'optionalAccess', _92 => _92.pointColors, 'optionalAccess', _93 => _93[i]]) || _chunkR3P2M7HUcjs.chartSliceColor.call(void 0, s, i)) : visible.map((x) => _chunkR3P2M7HUcjs.chartSeriesColor.call(void 0, s, s.series.indexOf(x)));
|
|
1532
|
+
return { colors: _nullishCoalesce(colors, () => ( own)), ..._chunkR3P2M7HUcjs.checkChartColors.call(void 0, _nullishCoalesce(colors, () => ( own)), { surface }) };
|
|
1278
1533
|
}
|
|
1279
1534
|
};
|
|
1280
1535
|
const recommend = {
|
|
@@ -1296,15 +1551,15 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1296
1551
|
description: "Returns a trendline's fitted coefficients (in x for category charts, x = 1, 2, 3, \u2026), R\xB2, equation and the number of points, or the moving-average points.",
|
|
1297
1552
|
inputSchema: {
|
|
1298
1553
|
type: "object",
|
|
1299
|
-
properties: { series:
|
|
1554
|
+
properties: { series: _chunkNZD2MZJCcjs.SERIES_REF, index: { type: "integer", minimum: 0, description: "Trendline index on the series (0 = first)." } },
|
|
1300
1555
|
required: ["series", "index"],
|
|
1301
1556
|
additionalProperties: false
|
|
1302
1557
|
},
|
|
1303
1558
|
annotations: { title: "Read a trendline fit", ...READ },
|
|
1304
1559
|
handler: ({ series, index }) => {
|
|
1305
1560
|
const s = seriesById(series);
|
|
1306
|
-
const line = _optionalChain([s, 'access',
|
|
1307
|
-
if (!line) fail2(`"${s.name}" has no trendline ${index}; it has ${_nullishCoalesce(_optionalChain([s, 'access',
|
|
1561
|
+
const line = _optionalChain([s, 'access', _94 => _94.trendlines, 'optionalAccess', _95 => _95[index]]);
|
|
1562
|
+
if (!line) fail2(`"${s.name}" has no trendline ${index}; it has ${_nullishCoalesce(_optionalChain([s, 'access', _96 => _96.trendlines, 'optionalAccess', _97 => _97.length]), () => ( 0))}.`);
|
|
1308
1563
|
if (line.type === "moving-average") return { trendline: line, points: controller.trendlineMovingAverage(s.id, index) };
|
|
1309
1564
|
const fit = controller.trendlineFit(s.id, index);
|
|
1310
1565
|
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).`);
|
|
@@ -1318,8 +1573,8 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1318
1573
|
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
1319
1574
|
annotations: { title: "List chart presets", ...READ },
|
|
1320
1575
|
handler: () => ({
|
|
1321
|
-
layouts:
|
|
1322
|
-
colorSchemes:
|
|
1576
|
+
layouts: _chunkGKNEJ6ENcjs.CHART_LAYOUT_PRESETS.map(({ id, label, description }) => ({ id, label, description })),
|
|
1577
|
+
colorSchemes: _chunkGKNEJ6ENcjs.CHART_COLOR_SCHEMES.map(({ id, label, description, palette }) => ({ id, label, description, palette }))
|
|
1323
1578
|
})
|
|
1324
1579
|
};
|
|
1325
1580
|
const exportMermaid = {
|
|
@@ -1328,7 +1583,7 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1328
1583
|
description: 'Returns the chart as Mermaid text (xychart-beta, pie or radar-beta) for Markdown or chat. With meta (default true) one "%% @pixerate {\u2026}" comment keeps what Mermaid cannot express, so import_chart_mermaid gets the chart back exactly.',
|
|
1329
1584
|
inputSchema: { type: "object", properties: { meta: { type: "boolean", description: "Include the round-trip comment (default true)." } }, additionalProperties: false },
|
|
1330
1585
|
annotations: { title: "Export chart as Mermaid", ...READ },
|
|
1331
|
-
handler: ({ meta = true }) => ({ mermaid:
|
|
1586
|
+
handler: ({ meta = true }) => ({ mermaid: _chunkGKNEJ6ENcjs.chartToMermaid.call(void 0, controller.toJSON(), { meta }) })
|
|
1332
1587
|
};
|
|
1333
1588
|
const exportOoxml = {
|
|
1334
1589
|
name: "export_chart_ooxml",
|
|
@@ -1336,15 +1591,15 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1336
1591
|
description: "Returns the chart as a DrawingML chart part (c:chartSpace) for Word or PowerPoint files, with what could not be written as sentences.",
|
|
1337
1592
|
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
1338
1593
|
annotations: { title: "Export chart as Office XML", ...READ },
|
|
1339
|
-
handler: () =>
|
|
1594
|
+
handler: () => _chunkYGG7WDWTcjs.chartToOoxml.call(void 0, controller.toJSON())
|
|
1340
1595
|
};
|
|
1341
1596
|
const updateChart = {
|
|
1342
1597
|
name: "update_chart",
|
|
1343
1598
|
title: "Change chart presentation",
|
|
1344
|
-
description: 'Changes how the chart looks, as one undo step: type, titles, axes (xAxis = categories or numeric x, yAxis = values, yAxis2 = secondary values; each can be reversed, and value axes can be logarithmic with scale "log"), legend, stacking, orientation, curve, points, data labels and their position, palette, donut hole, bar spacing, histogram bins, waterfall total, radar rings (radarTicks) and grid shape (radarGraticule). All-or-nothing: invalid values change nothing and come back as sentences. Returns the new spec.',
|
|
1599
|
+
description: 'Changes how the chart looks, as one undo step: type, titles, axes (xAxis = categories or numeric x, yAxis = values, yAxis2 = secondary values; each can be reversed, and value axes can be logarithmic with scale "log"), legend, stacking, orientation, curve, points, data labels and their position, palette, donut hole, bar spacing, histogram bins, waterfall total, radar rings (radarTicks) and grid shape (radarGraticule), note, highlight, reference lines and bands (whole lists), and varyColors. All-or-nothing: invalid values change nothing and come back as sentences. Returns the new spec.',
|
|
1345
1600
|
inputSchema: {
|
|
1346
1601
|
type: "object",
|
|
1347
|
-
properties:
|
|
1602
|
+
properties: _chunkNZD2MZJCcjs.CHART_UPDATE_PROPERTIES,
|
|
1348
1603
|
additionalProperties: false
|
|
1349
1604
|
},
|
|
1350
1605
|
annotations: { title: "Change chart presentation", ...WRITE_IDEMPOTENT },
|
|
@@ -1365,7 +1620,7 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1365
1620
|
series: {
|
|
1366
1621
|
type: "array",
|
|
1367
1622
|
description: "The new series (replaces all).",
|
|
1368
|
-
items: { type: "object", properties: { id: { type: "string", description: "Stable id (optional)." }, ...
|
|
1623
|
+
items: { type: "object", properties: { id: { type: "string", description: "Stable id (optional)." }, ..._chunkNZD2MZJCcjs.SERIES_PROPS }, required: ["name", "values"], additionalProperties: false }
|
|
1369
1624
|
}
|
|
1370
1625
|
},
|
|
1371
1626
|
additionalProperties: false
|
|
@@ -1388,7 +1643,7 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1388
1643
|
type: "array",
|
|
1389
1644
|
minItems: 1,
|
|
1390
1645
|
description: "Values to set.",
|
|
1391
|
-
items: { type: "object", properties: { series:
|
|
1646
|
+
items: { type: "object", properties: { series: _chunkNZD2MZJCcjs.SERIES_REF, category: _chunkNZD2MZJCcjs.CATEGORY_REF, value: _chunkNZD2MZJCcjs.VALUE }, required: ["series", "category", "value"], additionalProperties: false }
|
|
1392
1647
|
}
|
|
1393
1648
|
},
|
|
1394
1649
|
required: ["cells"],
|
|
@@ -1397,7 +1652,7 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1397
1652
|
annotations: { title: "Set chart values", ...WRITE_IDEMPOTENT },
|
|
1398
1653
|
handler: async ({ cells }) => {
|
|
1399
1654
|
const resolved = cells.map((c) => ({ seriesId: seriesById(c.series).id, index: categoryIndex(c.category), value: c.value }));
|
|
1400
|
-
const parsed = resolved.map((c) =>
|
|
1655
|
+
const parsed = resolved.map((c) => _chunkR3P2M7HUcjs.parseChartValue.call(void 0, c.value));
|
|
1401
1656
|
const bad = resolved.find((_, i) => parsed[i] === void 0);
|
|
1402
1657
|
if (bad) fail2(`"${String(bad.value)}" is not a number; pass a number, numeric text or null for a gap. Nothing was changed.`);
|
|
1403
1658
|
if (options.director && parsed.every((v) => typeof v === "number")) {
|
|
@@ -1414,7 +1669,7 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1414
1669
|
description: "Adds a series (values padded to the categories) and selects it. Returns its id and stored values.",
|
|
1415
1670
|
inputSchema: {
|
|
1416
1671
|
type: "object",
|
|
1417
|
-
properties: { ...
|
|
1672
|
+
properties: { ..._chunkNZD2MZJCcjs.SERIES_PROPS, id: { type: "string", description: "Id to use (default: series-N)." }, at: { type: "integer", minimum: 0, description: "Position (default: last)." } },
|
|
1418
1673
|
required: ["name"],
|
|
1419
1674
|
additionalProperties: false
|
|
1420
1675
|
},
|
|
@@ -1432,7 +1687,7 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1432
1687
|
description: "Renames, recolours, hides, moves to the secondary axis or changes how a series is drawn (marker, curve, labels, format, x values, bubble sizes, point colours, error bars). null resets a field. Values change with set_chart_values. Returns the series.",
|
|
1433
1688
|
inputSchema: {
|
|
1434
1689
|
type: "object",
|
|
1435
|
-
properties: { series:
|
|
1690
|
+
properties: { series: _chunkNZD2MZJCcjs.SERIES_REF, ...Object.fromEntries(Object.entries(_chunkNZD2MZJCcjs.SERIES_PROPS).filter(([k]) => k !== "values")) },
|
|
1436
1691
|
required: ["series"],
|
|
1437
1692
|
additionalProperties: false
|
|
1438
1693
|
},
|
|
@@ -1448,7 +1703,7 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1448
1703
|
name: "remove_chart_series",
|
|
1449
1704
|
title: "Delete a series",
|
|
1450
1705
|
description: "Deletes a series and its values. Returns the remaining series ids.",
|
|
1451
|
-
inputSchema: { type: "object", properties: { series:
|
|
1706
|
+
inputSchema: { type: "object", properties: { series: _chunkNZD2MZJCcjs.SERIES_REF }, required: ["series"], additionalProperties: false },
|
|
1452
1707
|
annotations: { title: "Delete a series", ...DESTRUCTIVE },
|
|
1453
1708
|
handler: ({ series }) => {
|
|
1454
1709
|
resolve(controller.removeSeries(seriesById(series).id));
|
|
@@ -1466,7 +1721,7 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1466
1721
|
},
|
|
1467
1722
|
annotations: { title: "Add a category", ...WRITE },
|
|
1468
1723
|
handler: ({ label, at }) => {
|
|
1469
|
-
const result = controller.addCategory(label, { at });
|
|
1724
|
+
const result = resolve(controller.addCategory(label, { at }));
|
|
1470
1725
|
return { index: result.index, categories: spec().categories };
|
|
1471
1726
|
}
|
|
1472
1727
|
};
|
|
@@ -1474,7 +1729,7 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1474
1729
|
name: "remove_chart_category",
|
|
1475
1730
|
title: "Delete a category",
|
|
1476
1731
|
description: "Deletes a category and its value in every series. Returns the remaining categories.",
|
|
1477
|
-
inputSchema: { type: "object", properties: { category:
|
|
1732
|
+
inputSchema: { type: "object", properties: { category: _chunkNZD2MZJCcjs.CATEGORY_REF }, required: ["category"], additionalProperties: false },
|
|
1478
1733
|
annotations: { title: "Delete a category", ...DESTRUCTIVE },
|
|
1479
1734
|
handler: ({ category }) => {
|
|
1480
1735
|
resolve(controller.removeCategory(categoryIndex(category)));
|
|
@@ -1517,7 +1772,7 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1517
1772
|
annotations: { title: "Import a Mermaid chart", ...DESTRUCTIVE },
|
|
1518
1773
|
handler: ({ mermaid }) => {
|
|
1519
1774
|
const fenced = /```(?:mermaid)?\s*\n([\s\S]*?)```/.exec(mermaid);
|
|
1520
|
-
const read =
|
|
1775
|
+
const read = _chunkGKNEJ6ENcjs.chartFromMermaid.call(void 0, fenced ? fenced[1] : mermaid);
|
|
1521
1776
|
if (!read.family) fail2(read.issues.map((i) => i.message).join(" ") || "Expected Mermaid starting with xychart-beta, pie or radar-beta.");
|
|
1522
1777
|
resolve(controller.update({ ...read.spec }, { label: "Import Mermaid chart" }));
|
|
1523
1778
|
return { spec: controller.toJSON(), issues: read.issues };
|
|
@@ -1530,7 +1785,7 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1530
1785
|
inputSchema: { type: "object", properties: { xml: { type: "string", description: "The chart part XML, e.g. word/charts/chart1.xml." } }, required: ["xml"], additionalProperties: false },
|
|
1531
1786
|
annotations: { title: "Import an Office chart", ...DESTRUCTIVE },
|
|
1532
1787
|
handler: ({ xml }) => {
|
|
1533
|
-
const read =
|
|
1788
|
+
const read = _chunkYGG7WDWTcjs.chartFromOoxml.call(void 0, xml, { DOMParser: Parser() });
|
|
1534
1789
|
if (read.issues.some((i) => i.path === "" || i.path === "plotArea")) fail2(read.issues.map((i) => i.message).join(" "));
|
|
1535
1790
|
resolve(controller.update({ ...read.spec }, { label: "Import Office chart" }));
|
|
1536
1791
|
return { spec: controller.toJSON(), issues: read.issues.map((i) => i.message), unsupported: read.unsupported, lossless: read.lossless };
|
|
@@ -1540,7 +1795,7 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1540
1795
|
name: "add_chart_trendline",
|
|
1541
1796
|
title: "Add a trendline",
|
|
1542
1797
|
description: "Fits a trendline to a series and draws it (unstacked bar, line, area, scatter and bubble charts). Returns its index and the fit: coefficients, R\xB2 and equation.",
|
|
1543
|
-
inputSchema: { type: "object", properties: { series:
|
|
1798
|
+
inputSchema: { type: "object", properties: { series: _chunkNZD2MZJCcjs.SERIES_REF, ..._chunkNZD2MZJCcjs.TRENDLINE_PROPS }, required: ["series", "type"], additionalProperties: false },
|
|
1544
1799
|
annotations: { title: "Add a trendline", ...WRITE },
|
|
1545
1800
|
handler: ({ series, ...line }) => {
|
|
1546
1801
|
const s = seriesById(series);
|
|
@@ -1554,7 +1809,7 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1554
1809
|
description: "Deletes a trendline from a series. Returns the series' remaining trendlines.",
|
|
1555
1810
|
inputSchema: {
|
|
1556
1811
|
type: "object",
|
|
1557
|
-
properties: { series:
|
|
1812
|
+
properties: { series: _chunkNZD2MZJCcjs.SERIES_REF, index: { type: "integer", minimum: 0, description: "Trendline index on the series (0 = first)." } },
|
|
1558
1813
|
required: ["series", "index"],
|
|
1559
1814
|
additionalProperties: false
|
|
1560
1815
|
},
|
|
@@ -1562,7 +1817,169 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1562
1817
|
handler: ({ series, index }) => {
|
|
1563
1818
|
const s = seriesById(series);
|
|
1564
1819
|
resolve(controller.removeTrendline(s.id, index));
|
|
1565
|
-
return { series: s.id, trendlines: _nullishCoalesce(_optionalChain([controller, 'access',
|
|
1820
|
+
return { series: s.id, trendlines: _nullishCoalesce(_optionalChain([controller, 'access', _98 => _98.getSeries, 'call', _99 => _99(s.id), 'optionalAccess', _100 => _100.trendlines]), () => ( [])) };
|
|
1821
|
+
}
|
|
1822
|
+
};
|
|
1823
|
+
const referenceTools = (what) => {
|
|
1824
|
+
const Kind = what === "line" ? "Reference line" : "Reference band";
|
|
1825
|
+
const list = () => what === "line" ? spec().referenceLines : spec().referenceBands;
|
|
1826
|
+
const listKey = what === "line" ? "referenceLines" : "referenceBands";
|
|
1827
|
+
const add = {
|
|
1828
|
+
name: `add_chart_reference_${what}`,
|
|
1829
|
+
title: `Add a reference ${what}`,
|
|
1830
|
+
description: what === "line" ? "Draws a dashed line across the plot at one value: a target, a floor, an average (bar, line, area, scatter and bubble charts). The axis grows to keep it in view. Returns its index and the reference lines." : "Shades a band across the plot between two values: a target or normal range (bar, line, area, scatter and bubble charts), drawn under the data. The axis grows to keep it in view. Returns its index and the reference bands.",
|
|
1831
|
+
inputSchema: { type: "object", properties: what === "line" ? _chunkNZD2MZJCcjs.REFERENCE_LINE_PROPS : _chunkNZD2MZJCcjs.REFERENCE_BAND_PROPS, required: what === "line" ? ["value"] : ["from", "to"], additionalProperties: false },
|
|
1832
|
+
annotations: { title: `Add a reference ${what}`, ...WRITE },
|
|
1833
|
+
handler: (args) => {
|
|
1834
|
+
const result = resolve(what === "line" ? controller.addReferenceLine(args) : controller.addReferenceBand(args));
|
|
1835
|
+
return { index: result.index, [listKey]: list() };
|
|
1836
|
+
}
|
|
1837
|
+
};
|
|
1838
|
+
const update = {
|
|
1839
|
+
name: `update_chart_reference_${what}`,
|
|
1840
|
+
title: `Change a reference ${what}`,
|
|
1841
|
+
description: `Changes a reference ${what} by index (all-or-nothing); label, axis and color take null to remove them. Returns the ${what} as stored.`,
|
|
1842
|
+
inputSchema: { type: "object", properties: { index: _chunkNZD2MZJCcjs.REFERENCE_INDEX.call(void 0, Kind), ...what === "line" ? _chunkNZD2MZJCcjs.REFERENCE_LINE_PATCH : _chunkNZD2MZJCcjs.REFERENCE_BAND_PATCH }, required: ["index"], additionalProperties: false },
|
|
1843
|
+
annotations: { title: `Change a reference ${what}`, ...WRITE_IDEMPOTENT },
|
|
1844
|
+
handler: ({ index, ...patch }) => {
|
|
1845
|
+
if (!Object.keys(patch).length) fail2(`Nothing to change: pass at least one field besides index, e.g. {"index": ${index}, "label": "Target"}.`);
|
|
1846
|
+
resolve(what === "line" ? controller.updateReferenceLine(index, patch) : controller.updateReferenceBand(index, patch));
|
|
1847
|
+
return { index, [`reference${what === "line" ? "Line" : "Band"}`]: list()[index] };
|
|
1848
|
+
}
|
|
1849
|
+
};
|
|
1850
|
+
const remove = {
|
|
1851
|
+
name: `remove_chart_reference_${what}`,
|
|
1852
|
+
title: `Delete a reference ${what}`,
|
|
1853
|
+
description: `Deletes a reference ${what} by index; the ones after it move up one. Returns the reference ${what}s left.`,
|
|
1854
|
+
inputSchema: { type: "object", properties: { index: _chunkNZD2MZJCcjs.REFERENCE_INDEX.call(void 0, Kind) }, required: ["index"], additionalProperties: false },
|
|
1855
|
+
annotations: { title: `Delete a reference ${what}`, ...DESTRUCTIVE },
|
|
1856
|
+
handler: ({ index }) => {
|
|
1857
|
+
resolve(what === "line" ? controller.removeReferenceLine(index) : controller.removeReferenceBand(index));
|
|
1858
|
+
return { [listKey]: list() };
|
|
1859
|
+
}
|
|
1860
|
+
};
|
|
1861
|
+
return [add, update, remove];
|
|
1862
|
+
};
|
|
1863
|
+
const [addReferenceLine, updateReferenceLine, removeReferenceLine] = referenceTools("line");
|
|
1864
|
+
const [addReferenceBand, updateReferenceBand, removeReferenceBand] = referenceTools("band");
|
|
1865
|
+
const setCallout = {
|
|
1866
|
+
name: "set_chart_callout",
|
|
1867
|
+
title: "Pin a label to a point",
|
|
1868
|
+
description: 'Pins a short label to one bar or point, with a leader line, to say why it matters ("Record quarter", "Launch"); label null or "" removes it. Bar, line, area, scatter and bubble charts; the point must have a value. Selects the point and returns the series id, category index and label.',
|
|
1869
|
+
inputSchema: {
|
|
1870
|
+
type: "object",
|
|
1871
|
+
properties: { series: _chunkNZD2MZJCcjs.SERIES_REF, category: _chunkNZD2MZJCcjs.CATEGORY_REF, label: { type: ["string", "null"], description: "The label (keep it to a few words), or null to remove it." } },
|
|
1872
|
+
required: ["series", "category", "label"],
|
|
1873
|
+
additionalProperties: false
|
|
1874
|
+
},
|
|
1875
|
+
annotations: { title: "Pin a label to a point", ...WRITE_IDEMPOTENT },
|
|
1876
|
+
handler: ({ series, category, label }) => {
|
|
1877
|
+
const s = seriesById(series);
|
|
1878
|
+
const index = categoryIndex(category);
|
|
1879
|
+
resolve(controller.setCallout(s.id, index, label));
|
|
1880
|
+
return { series: s.id, index, category: spec().categories[index], label: _nullishCoalesce(_optionalChain([controller, 'access', _101 => _101.getSeries, 'call', _102 => _102(s.id), 'optionalAccess', _103 => _103.callouts, 'optionalAccess', _104 => _104[index]]), () => ( null)) };
|
|
1881
|
+
}
|
|
1882
|
+
};
|
|
1883
|
+
const highlight = {
|
|
1884
|
+
name: "highlight_chart",
|
|
1885
|
+
title: "Highlight categories or series",
|
|
1886
|
+
description: "Draws the named categories (labels) and series (names or ids) normally and mutes the rest, to draw attention to the marks the chart is about; [] shows everything again. A point stays bright when its category or its series is named. Unknown names change nothing and are reported. Returns the category indexes and series ids that matched.",
|
|
1887
|
+
inputSchema: {
|
|
1888
|
+
type: "object",
|
|
1889
|
+
properties: { names: { type: "array", items: { type: "string" }, description: "Category labels and / or series names or ids, exactly as get_chart shows them. [] clears the highlight." } },
|
|
1890
|
+
required: ["names"],
|
|
1891
|
+
additionalProperties: false
|
|
1892
|
+
},
|
|
1893
|
+
annotations: { title: "Highlight categories or series", ...WRITE_IDEMPOTENT },
|
|
1894
|
+
handler: ({ names }) => {
|
|
1895
|
+
const result = resolve(controller.setHighlight(names));
|
|
1896
|
+
const s = spec();
|
|
1897
|
+
return { highlight: s.highlight, categories: result.categories.map((index) => ({ index, label: s.categories[index] })), series: result.series.map((id) => ({ id, name: s.series.find((x) => x.id === id).name })) };
|
|
1898
|
+
}
|
|
1899
|
+
};
|
|
1900
|
+
const setTree = {
|
|
1901
|
+
name: "set_chart_tree",
|
|
1902
|
+
title: "Replace grouped data",
|
|
1903
|
+
description: `Replaces the chart's data with groups of items (a tree) for treemaps and sunbursts, as one undo step: items {"name", "value"} and groups {"name", "children"}, up to 6 levels, names unique among siblings. The top-level groups become the categories and their totals the first series, so other chart types draw the totals. [] goes back to plain data (the totals stay as values). Returns the tree, each group's total and the depth.`,
|
|
1904
|
+
inputSchema: { type: "object", properties: { tree: { type: "array", items: { $ref: "#/$defs/chartTreeNode" }, description: "The top-level nodes; [] removes the grouping." } }, required: ["tree"], additionalProperties: false, $defs: _chunkNZD2MZJCcjs.TREE_DEFS },
|
|
1905
|
+
annotations: { title: "Replace grouped data", ...WRITE_IDEMPOTENT },
|
|
1906
|
+
handler: ({ tree }) => {
|
|
1907
|
+
resolve(controller.setTree(tree));
|
|
1908
|
+
return treeSummary();
|
|
1909
|
+
}
|
|
1910
|
+
};
|
|
1911
|
+
const importTreeCsv = {
|
|
1912
|
+
name: "import_chart_tree_csv",
|
|
1913
|
+
title: "Import grouped data from CSV",
|
|
1914
|
+
description: "Replaces the data with grouped data from CSV or TSV: every column but the last holds names (group, subgroup, \u2026, item), the last holds the value. A blank group name repeats the one above, as spreadsheets lay out groups. One undo step. Returns the tree, group totals and depth.",
|
|
1915
|
+
inputSchema: {
|
|
1916
|
+
type: "object",
|
|
1917
|
+
properties: {
|
|
1918
|
+
csv: { type: "string", description: 'CSV or TSV text, e.g. "Region,Country,Customers\\nEurope,France,40\\n,Spain,25".' },
|
|
1919
|
+
header: { type: ["boolean", "string"], enum: [true, false, "auto"], description: "The first row holds column names (default auto: when its last cell is not a number)." }
|
|
1920
|
+
},
|
|
1921
|
+
required: ["csv"],
|
|
1922
|
+
additionalProperties: false
|
|
1923
|
+
},
|
|
1924
|
+
annotations: { title: "Import grouped data from CSV", ...WRITE },
|
|
1925
|
+
handler: ({ csv, header }) => {
|
|
1926
|
+
resolve(controller.importTreeTable(_chunkN3KJFGXTcjs.parseCsv.call(void 0, csv, { delimiter: csv.includes(" ") ? " " : "," }), { header }));
|
|
1927
|
+
return treeSummary();
|
|
1928
|
+
}
|
|
1929
|
+
};
|
|
1930
|
+
const addTreeNode = {
|
|
1931
|
+
name: "add_chart_tree_node",
|
|
1932
|
+
title: "Add an item or group",
|
|
1933
|
+
description: "Adds an item or a group (with children) under a group of the grouped data, or at the top level. Returns its path and its parent's new total.",
|
|
1934
|
+
inputSchema: {
|
|
1935
|
+
type: "object",
|
|
1936
|
+
properties: {
|
|
1937
|
+
parent: { type: "array", items: { type: "string" }, description: "Path of the group to add to; [] or omitted for the top level." },
|
|
1938
|
+
node: { $ref: "#/$defs/chartTreeNode", description: 'The item ({"name", "value"}) or group ({"name", "children"}) to add.' },
|
|
1939
|
+
at: { type: "integer", minimum: 0, description: "Position among its siblings (default: the end)." }
|
|
1940
|
+
},
|
|
1941
|
+
required: ["node"],
|
|
1942
|
+
additionalProperties: false,
|
|
1943
|
+
$defs: _chunkNZD2MZJCcjs.TREE_DEFS
|
|
1944
|
+
},
|
|
1945
|
+
annotations: { title: "Add an item or group", ...WRITE },
|
|
1946
|
+
handler: ({ parent = [], node, at }) => {
|
|
1947
|
+
const result = resolve(controller.addTreeNode(parent, node, { at }));
|
|
1948
|
+
const group = parent.length ? _chunkR3P2M7HUcjs.findChartTreeNode.call(void 0, spec().tree, parent) : null;
|
|
1949
|
+
return { path: result.path, parentTotal: group ? _chunkR3P2M7HUcjs.chartTreeTotal.call(void 0, group) : spec().tree.reduce((t, n) => t + _chunkR3P2M7HUcjs.chartTreeTotal.call(void 0, n), 0) };
|
|
1950
|
+
}
|
|
1951
|
+
};
|
|
1952
|
+
const updateTreeNode = {
|
|
1953
|
+
name: "update_chart_tree_node",
|
|
1954
|
+
title: "Change an item or group",
|
|
1955
|
+
description: "Renames a node, sets an item's value, or sets a node's colour (null goes back to the palette). Groups have no value of their own. Returns the node's path (new if renamed) and the node.",
|
|
1956
|
+
inputSchema: {
|
|
1957
|
+
type: "object",
|
|
1958
|
+
properties: {
|
|
1959
|
+
path: _chunkNZD2MZJCcjs.TREE_PATH,
|
|
1960
|
+
name: { type: "string", description: "New name (unique among its siblings)." },
|
|
1961
|
+
value: { type: "number", minimum: 0, description: "Items only: the new amount." },
|
|
1962
|
+
color: { type: ["string", "null"], description: "CSS colour, or null for the palette colour." }
|
|
1963
|
+
},
|
|
1964
|
+
required: ["path"],
|
|
1965
|
+
additionalProperties: false
|
|
1966
|
+
},
|
|
1967
|
+
annotations: { title: "Change an item or group", ...WRITE_IDEMPOTENT },
|
|
1968
|
+
handler: ({ path, ...patch }) => {
|
|
1969
|
+
if (!Object.keys(patch).length) fail2("Nothing to change: pass name, value or color with the path.");
|
|
1970
|
+
const result = resolve(controller.updateTreeNode(path, patch));
|
|
1971
|
+
return { path: result.path, node: _chunkR3P2M7HUcjs.findChartTreeNode.call(void 0, spec().tree, result.path) };
|
|
1972
|
+
}
|
|
1973
|
+
};
|
|
1974
|
+
const removeTreeNode = {
|
|
1975
|
+
name: "remove_chart_tree_node",
|
|
1976
|
+
title: "Delete an item or group",
|
|
1977
|
+
description: "Deletes a node of the grouped data with everything under it (a group left empty becomes an item with value 0). Returns the group totals left.",
|
|
1978
|
+
inputSchema: { type: "object", properties: { path: _chunkNZD2MZJCcjs.TREE_PATH }, required: ["path"], additionalProperties: false },
|
|
1979
|
+
annotations: { title: "Delete an item or group", ...DESTRUCTIVE },
|
|
1980
|
+
handler: ({ path }) => {
|
|
1981
|
+
resolve(controller.removeTreeNode(path));
|
|
1982
|
+
return { groups: treeSummary().groups };
|
|
1566
1983
|
}
|
|
1567
1984
|
};
|
|
1568
1985
|
const applyPreset = {
|
|
@@ -1572,8 +1989,8 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1572
1989
|
inputSchema: {
|
|
1573
1990
|
type: "object",
|
|
1574
1991
|
properties: {
|
|
1575
|
-
layout: { type: "string", enum:
|
|
1576
|
-
colors: { type: "string", enum:
|
|
1992
|
+
layout: { type: "string", enum: _chunkGKNEJ6ENcjs.CHART_LAYOUT_PRESETS.map((p) => p.id), description: "Quick layout id." },
|
|
1993
|
+
colors: { type: "string", enum: _chunkGKNEJ6ENcjs.CHART_COLOR_SCHEMES.map((p) => p.id), description: "Colour scheme id." }
|
|
1577
1994
|
},
|
|
1578
1995
|
additionalProperties: false
|
|
1579
1996
|
},
|
|
@@ -1602,8 +2019,8 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1602
2019
|
type: "object",
|
|
1603
2020
|
properties: {
|
|
1604
2021
|
kind: { type: "string", enum: ["none", "chart", "title", "subtitle", "legend", "axis", "series", "point", "category", "trendline"], description: "What to select." },
|
|
1605
|
-
series: { ...
|
|
1606
|
-
category: { ...
|
|
2022
|
+
series: { ..._chunkNZD2MZJCcjs.SERIES_REF, description: "Series id or name (series, point, trendline)." },
|
|
2023
|
+
category: { ..._chunkNZD2MZJCcjs.CATEGORY_REF, description: "Category index or label (point, category)." },
|
|
1607
2024
|
axis: { type: "string", enum: ["x", "y", "y2"], description: "Axis (axis)." },
|
|
1608
2025
|
index: { type: "integer", minimum: 0, description: "Trendline index (trendline)." }
|
|
1609
2026
|
},
|
|
@@ -1661,20 +2078,20 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1661
2078
|
to: { type: "object", description: "End, as fractions of the chart.", properties: { x: { type: "number", minimum: 0, maximum: 1, description: "Fraction of the width." }, y: { type: "number", minimum: 0, maximum: 1, description: "Fraction of the height." } }, required: ["x", "y"], additionalProperties: false },
|
|
1662
2079
|
fine: { type: "boolean", description: "Move a tenth as far (Alt)." },
|
|
1663
2080
|
lockAxis: { type: "boolean", description: "Scatter charts: change only the axis moved along most (Shift)." },
|
|
1664
|
-
width:
|
|
1665
|
-
height:
|
|
2081
|
+
width: _chunkNZD2MZJCcjs.WIDTH,
|
|
2082
|
+
height: _chunkNZD2MZJCcjs.HEIGHT
|
|
1666
2083
|
},
|
|
1667
2084
|
required: ["from", "to"],
|
|
1668
2085
|
additionalProperties: false
|
|
1669
2086
|
},
|
|
1670
2087
|
annotations: { title: "Drag a chart point", ...WRITE },
|
|
1671
2088
|
handler: ({ from, to, fine, lockAxis, width = size.width, height = size.height }) => {
|
|
1672
|
-
const scene =
|
|
2089
|
+
const scene = _chunkSBQVEBSUcjs.layoutChart.call(void 0, controller.toJSON(), { width, height });
|
|
1673
2090
|
const start = { x: from.x * width, y: from.y * height };
|
|
1674
2091
|
const target = chartHitTest(scene, start);
|
|
1675
|
-
if (_optionalChain([target, 'optionalAccess',
|
|
2092
|
+
if (_optionalChain([target, 'optionalAccess', _105 => _105.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.`);
|
|
1676
2093
|
const t = target;
|
|
1677
|
-
const before = _nullishCoalesce(_optionalChain([controller, 'access',
|
|
2094
|
+
const before = _nullishCoalesce(_optionalChain([controller, 'access', _106 => _106.getSeries, 'call', _107 => _107(t.seriesId), 'optionalAccess', _108 => _108.values, 'access', _109 => _109[t.index]]), () => ( null));
|
|
1678
2095
|
const session = startChartPointDrag(controller, scene, t, start);
|
|
1679
2096
|
if (!session) fail2("That point cannot be dragged here (percent-stacked charts, pies and gaps cannot be dragged).");
|
|
1680
2097
|
session.move({ x: to.x * width, y: to.y * height }, { fine, lockAxis });
|
|
@@ -1699,10 +2116,10 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1699
2116
|
},
|
|
1700
2117
|
annotations: { title: "Press a key on the chart", ...DESTRUCTIVE },
|
|
1701
2118
|
handler: ({ key: k, shift, alt }) => {
|
|
1702
|
-
const scene =
|
|
2119
|
+
const scene = _chunkSBQVEBSUcjs.layoutChart.call(void 0, controller.toJSON(), size);
|
|
1703
2120
|
const used = handleChartKey(controller, scene, { key: k, shiftKey: shift, altKey: alt });
|
|
1704
2121
|
const sel = controller.getState().selection;
|
|
1705
|
-
const value = _optionalChain([sel, 'optionalAccess',
|
|
2122
|
+
const value = _optionalChain([sel, 'optionalAccess', _110 => _110.kind]) === "point" ? _nullishCoalesce(_optionalChain([controller, 'access', _111 => _111.getSeries, 'call', _112 => _112(sel.seriesId), 'optionalAccess', _113 => _113.values, 'access', _114 => _114[sel.index]]), () => ( null)) : void 0;
|
|
1706
2123
|
return { used, selection: sel, ...value !== void 0 ? { value } : {} };
|
|
1707
2124
|
}
|
|
1708
2125
|
};
|
|
@@ -1731,12 +2148,45 @@ function createChartToolProvider(controller, options = {}) {
|
|
|
1731
2148
|
}
|
|
1732
2149
|
};
|
|
1733
2150
|
const reads = [getChart, renderChart, checkColors, recommend, getTrendline, listPresets, exportMermaid, exportOoxml];
|
|
1734
|
-
const writes = [
|
|
2151
|
+
const writes = [
|
|
2152
|
+
updateChart,
|
|
2153
|
+
setData,
|
|
2154
|
+
setValues,
|
|
2155
|
+
addSeries,
|
|
2156
|
+
updateSeries,
|
|
2157
|
+
removeSeries,
|
|
2158
|
+
addCategory,
|
|
2159
|
+
removeCategory,
|
|
2160
|
+
importCsv,
|
|
2161
|
+
importMermaid,
|
|
2162
|
+
addTrendline,
|
|
2163
|
+
removeTrendline,
|
|
2164
|
+
addReferenceLine,
|
|
2165
|
+
updateReferenceLine,
|
|
2166
|
+
removeReferenceLine,
|
|
2167
|
+
addReferenceBand,
|
|
2168
|
+
updateReferenceBand,
|
|
2169
|
+
removeReferenceBand,
|
|
2170
|
+
setCallout,
|
|
2171
|
+
highlight,
|
|
2172
|
+
setTree,
|
|
2173
|
+
importTreeCsv,
|
|
2174
|
+
addTreeNode,
|
|
2175
|
+
updateTreeNode,
|
|
2176
|
+
removeTreeNode,
|
|
2177
|
+
applyPreset,
|
|
2178
|
+
transpose,
|
|
2179
|
+
select,
|
|
2180
|
+
drag,
|
|
2181
|
+
key,
|
|
2182
|
+
undo,
|
|
2183
|
+
redo
|
|
2184
|
+
];
|
|
1735
2185
|
return withChartPlayback({
|
|
1736
2186
|
id: _nullishCoalesce(options.id, () => ( "chart")),
|
|
1737
2187
|
namespace: options.namespace,
|
|
1738
2188
|
title: "Chart editor",
|
|
1739
|
-
description: "One chart: its spec, data and values, series and categories, trendlines and presets, CSV, Mermaid and OOXML import, rendering and colour checks.",
|
|
2189
|
+
description: "One chart: its spec, data and values, series and categories, trendlines, reference lines and bands, callouts, highlight, grouped data and presets, CSV, Mermaid and OOXML import, rendering and colour checks.",
|
|
1740
2190
|
skill: "pixerate-chart",
|
|
1741
2191
|
tools: () => {
|
|
1742
2192
|
if (readOnlyReason()) return reads;
|
|
@@ -1810,12 +2260,12 @@ var ChartStream = (_class = class {
|
|
|
1810
2260
|
if (format === "json") {
|
|
1811
2261
|
const value = complete ? safeParse(text) : parsePartialChartJson(text);
|
|
1812
2262
|
if (value !== void 0) {
|
|
1813
|
-
const read =
|
|
2263
|
+
const read = _chunkR3P2M7HUcjs.normalizeChartSpec.call(void 0, value);
|
|
1814
2264
|
spec = read.spec;
|
|
1815
2265
|
issues = complete ? read.issues : [];
|
|
1816
2266
|
}
|
|
1817
2267
|
} else {
|
|
1818
|
-
const read =
|
|
2268
|
+
const read = _chunkGKNEJ6ENcjs.chartFromMermaid.call(void 0, text, { partial: !complete });
|
|
1819
2269
|
if (read.family) {
|
|
1820
2270
|
spec = read.spec;
|
|
1821
2271
|
issues = complete ? read.issues : [];
|
|
@@ -1912,7 +2362,7 @@ function elements(root, localName) {
|
|
|
1912
2362
|
}
|
|
1913
2363
|
function relId(el, localName = "id") {
|
|
1914
2364
|
for (const a of Array.from(el.attributes)) {
|
|
1915
|
-
if (a.localName === localName && (_optionalChain([a, 'access',
|
|
2365
|
+
if (a.localName === localName && (_optionalChain([a, 'access', _115 => _115.namespaceURI, 'optionalAccess', _116 => _116.includes, 'call', _117 => _117("relationships")]) || a.prefix === "r")) return a.value;
|
|
1916
2366
|
}
|
|
1917
2367
|
return void 0;
|
|
1918
2368
|
}
|
|
@@ -1931,17 +2381,17 @@ async function readRels(r, partPath) {
|
|
|
1931
2381
|
const id = rel.getAttribute("Id");
|
|
1932
2382
|
if (!id) continue;
|
|
1933
2383
|
const target = _nullishCoalesce(rel.getAttribute("Target"), () => ( ""));
|
|
1934
|
-
const external = _optionalChain([rel, 'access',
|
|
2384
|
+
const external = _optionalChain([rel, 'access', _118 => _118.getAttribute, 'call', _119 => _119("TargetMode"), 'optionalAccess', _120 => _120.toLowerCase, 'call', _121 => _121()]) === "external";
|
|
1935
2385
|
rels.set(id, { type: _nullishCoalesce(rel.getAttribute("Type"), () => ( "")), target: external ? target : resolvePartPath(dirname(partPath), target), external });
|
|
1936
2386
|
}
|
|
1937
2387
|
return rels;
|
|
1938
2388
|
}
|
|
1939
|
-
var isChartRef = (el) => el.localName === "chart" && (el.namespaceURI ===
|
|
2389
|
+
var isChartRef = (el) => el.localName === "chart" && (el.namespaceURI === _chunkYGG7WDWTcjs.CHART_OOXML_NS || el.namespaceURI === STRICT_CHART_NS || el.namespaceURI === CHARTEX_NS);
|
|
1940
2390
|
function frameName(ref) {
|
|
1941
2391
|
for (let el = ref.parentElement; el; el = el.parentElement) {
|
|
1942
2392
|
if (el.localName === "graphicFrame") {
|
|
1943
2393
|
const nv = elements(el, "cNvPr")[0];
|
|
1944
|
-
return _optionalChain([nv, 'optionalAccess',
|
|
2394
|
+
return _optionalChain([nv, 'optionalAccess', _122 => _122.getAttribute, 'call', _123 => _123("name")]) || void 0;
|
|
1945
2395
|
}
|
|
1946
2396
|
}
|
|
1947
2397
|
return void 0;
|
|
@@ -1955,7 +2405,7 @@ async function chartsInPart(r, root, rels, place) {
|
|
|
1955
2405
|
const entry = r.zip.get(rel.target);
|
|
1956
2406
|
if (!entry) continue;
|
|
1957
2407
|
r.seen.add(rel.target);
|
|
1958
|
-
const read =
|
|
2408
|
+
const read = _chunkYGG7WDWTcjs.chartFromOoxml.call(void 0, await r.zip.readText(entry), { DOMParser: r.Parser });
|
|
1959
2409
|
const name = frameName(ref);
|
|
1960
2410
|
r.charts.push({
|
|
1961
2411
|
id: `chart-${r.charts.length + 1}`,
|
|
@@ -1977,8 +2427,8 @@ function columnName(index) {
|
|
|
1977
2427
|
return name;
|
|
1978
2428
|
}
|
|
1979
2429
|
function anchorCell(marker) {
|
|
1980
|
-
const col = Number(_optionalChain([firstChild, 'call',
|
|
1981
|
-
const row = Number(_optionalChain([firstChild, 'call',
|
|
2430
|
+
const col = Number(_optionalChain([firstChild, 'call', _124 => _124(marker, "col"), 'optionalAccess', _125 => _125.textContent]));
|
|
2431
|
+
const row = Number(_optionalChain([firstChild, 'call', _126 => _126(marker, "row"), 'optionalAccess', _127 => _127.textContent]));
|
|
1982
2432
|
return Number.isInteger(col) && Number.isInteger(row) && col >= 0 && row >= 0 ? `${columnName(col)}${row + 1}` : void 0;
|
|
1983
2433
|
}
|
|
1984
2434
|
function drawingPlace(ref) {
|
|
@@ -2141,7 +2591,7 @@ function createOfficeChartToolProvider(options = {}) {
|
|
|
2141
2591
|
description: "Lists the Office files the user opened that charts can be read from. Returns their names and sizes in bytes.",
|
|
2142
2592
|
inputSchema: { type: "object", properties: {}, additionalProperties: false },
|
|
2143
2593
|
annotations: { title: "List open files", ...READ2 },
|
|
2144
|
-
handler: () => ({ files: (_nullishCoalesce(_optionalChain([options, 'access',
|
|
2594
|
+
handler: () => ({ files: (_nullishCoalesce(_optionalChain([options, 'access', _128 => _128.files, 'optionalCall', _129 => _129()]), () => ( []))).map((f) => ({ name: f.name, bytes: f.data.byteLength })) })
|
|
2145
2595
|
};
|
|
2146
2596
|
const listCharts = {
|
|
2147
2597
|
name: "list_file_charts",
|
|
@@ -2387,4 +2837,29 @@ function createChartEditorDocument(controller) {
|
|
|
2387
2837
|
|
|
2388
2838
|
|
|
2389
2839
|
|
|
2390
|
-
exports.CHART_AXIS_KINDS = _chunkLL3H5XUHcjs.CHART_AXIS_KINDS; exports.CHART_AXIS_SCALES = _chunkLL3H5XUHcjs.CHART_AXIS_SCALES; exports.CHART_COLOR_SCHEMES = _chunk3IHNXRUVcjs.CHART_COLOR_SCHEMES; exports.CHART_CURVES = _chunkLL3H5XUHcjs.CHART_CURVES; exports.CHART_DATE_STEPS = _chunkHDGBM7EAcjs.CHART_DATE_STEPS; exports.CHART_ERROR_BAR_DIRECTIONS = _chunkLL3H5XUHcjs.CHART_ERROR_BAR_DIRECTIONS; exports.CHART_ERROR_BAR_LABELS = _chunkLL3H5XUHcjs.CHART_ERROR_BAR_LABELS; exports.CHART_ERROR_BAR_TYPES = _chunkLL3H5XUHcjs.CHART_ERROR_BAR_TYPES; exports.CHART_LABEL_POSITIONS = _chunkLL3H5XUHcjs.CHART_LABEL_POSITIONS; exports.CHART_LAYOUT_PRESETS = _chunk3IHNXRUVcjs.CHART_LAYOUT_PRESETS; exports.CHART_LEGEND_POSITIONS = _chunkLL3H5XUHcjs.CHART_LEGEND_POSITIONS; exports.CHART_MARKERS = _chunkLL3H5XUHcjs.CHART_MARKERS; exports.CHART_MERMAID_META_PREFIX = _chunk3IHNXRUVcjs.CHART_MERMAID_META_PREFIX; exports.CHART_NUMBER_STYLES = _chunkLL3H5XUHcjs.CHART_NUMBER_STYLES; exports.CHART_OOXML_CONTENT_TYPE = _chunkNA4UVVJ4cjs.CHART_OOXML_CONTENT_TYPE; exports.CHART_OOXML_NS = _chunkNA4UVVJ4cjs.CHART_OOXML_NS; exports.CHART_OOXML_RELATIONSHIP = _chunkNA4UVVJ4cjs.CHART_OOXML_RELATIONSHIP; exports.CHART_ORIENTATIONS = _chunkLL3H5XUHcjs.CHART_ORIENTATIONS; exports.CHART_PALETTE_SHADES = _chunkLL3H5XUHcjs.CHART_PALETTE_SHADES; exports.CHART_PRESENCE_COLORS = CHART_PRESENCE_COLORS; exports.CHART_RADAR_GRATICULES = _chunkLL3H5XUHcjs.CHART_RADAR_GRATICULES; exports.CHART_RASTER_MAX_SIZE = CHART_RASTER_MAX_SIZE; exports.CHART_SERIES_TYPES = _chunkLL3H5XUHcjs.CHART_SERIES_TYPES; exports.CHART_STACKINGS = _chunkLL3H5XUHcjs.CHART_STACKINGS; exports.CHART_TRENDLINE_TYPES = _chunkLL3H5XUHcjs.CHART_TRENDLINE_TYPES; exports.CHART_TYPES = _chunkLL3H5XUHcjs.CHART_TYPES; exports.CHART_TYPE_LABELS = _chunkLL3H5XUHcjs.CHART_TYPE_LABELS; exports.CSS_VARIABLE_CHART_THEME = _chunkLL3H5XUHcjs.CSS_VARIABLE_CHART_THEME; exports.ChartController = _chunk3IHNXRUVcjs.ChartController; exports.ChartDirector = ChartDirector; exports.ChartPresence = ChartPresence; exports.ChartStream = ChartStream; exports.DEFAULT_CHART_PALETTE = _chunkLL3H5XUHcjs.DEFAULT_CHART_PALETTE; exports.DEFAULT_CHART_THEME = _chunkLL3H5XUHcjs.DEFAULT_CHART_THEME; exports.MAX_CHART_DATA_LABELS = _chunkHDGBM7EAcjs.MAX_CHART_DATA_LABELS; exports.MAX_CHART_LINE_POINTS = _chunkHDGBM7EAcjs.MAX_CHART_LINE_POINTS; exports.MAX_CHART_MARKERS = _chunkHDGBM7EAcjs.MAX_CHART_MARKERS; exports.OfficeChartsError = OfficeChartsError; exports.RENDER_CHART_INSTRUCTIONS = RENDER_CHART_INSTRUCTIONS; exports.analyzeChartTable = analyzeChartTable; exports.blendChartScenes = blendChartScenes; exports.canDragChartPoint = canDragChartPoint; exports.chartBoxStats = _chunkHDGBM7EAcjs.chartBoxStats; exports.chartClientToScene = chartClientToScene; exports.chartColorDistance = _chunkLL3H5XUHcjs.chartColorDistance; exports.chartColorInputValue = _chunkLL3H5XUHcjs.chartColorInputValue; exports.chartColorsByCategory = _chunkLL3H5XUHcjs.chartColorsByCategory; exports.chartContrastRatio = _chunkLL3H5XUHcjs.chartContrastRatio; exports.chartDataFromTable = _chunkLL3H5XUHcjs.chartDataFromTable; exports.chartDataToTable = _chunkLL3H5XUHcjs.chartDataToTable; exports.chartDateLabels = _chunkHDGBM7EAcjs.chartDateLabels; exports.chartDateToSerial = _chunkHDGBM7EAcjs.chartDateToSerial; exports.chartErrorAmounts = _chunkLL3H5XUHcjs.chartErrorAmounts; exports.chartErrorBarsOfType = _chunkLL3H5XUHcjs.chartErrorBarsOfType; exports.chartFamily = _chunkLL3H5XUHcjs.chartFamily; exports.chartFileName = chartFileName; exports.chartFormatToCode = _chunkNA4UVVJ4cjs.chartFormatToCode; exports.chartFromMermaid = _chunk3IHNXRUVcjs.chartFromMermaid; exports.chartFromOoxml = _chunkNA4UVVJ4cjs.chartFromOoxml; exports.chartFromTable = chartFromTable; exports.chartHistogram = _chunkHDGBM7EAcjs.chartHistogram; exports.chartHitTest = chartHitTest; exports.chartLuminance = _chunkLL3H5XUHcjs.chartLuminance; exports.chartMermaidFamily = _chunk3IHNXRUVcjs.chartMermaidFamily; exports.chartMovingAverage = _chunkHDGBM7EAcjs.chartMovingAverage; exports.chartPointAnchor = chartPointAnchor; exports.chartPointColor = _chunkLL3H5XUHcjs.chartPointColor; exports.chartPointRef = chartPointRef; exports.chartPresetPatch = _chunk3IHNXRUVcjs.chartPresetPatch; exports.chartQuantile = _chunkHDGBM7EAcjs.chartQuantile; exports.chartRasterSize = chartRasterSize; exports.chartRgbToHex = _chunkLL3H5XUHcjs.chartRgbToHex; exports.chartRgbToOklab = _chunkLL3H5XUHcjs.chartRgbToOklab; exports.chartScaleFromPixel = _chunkHDGBM7EAcjs.chartScaleFromPixel; exports.chartScaleToPixel = _chunkHDGBM7EAcjs.chartScaleToPixel; exports.chartSceneToDomSpec = _chunk3IHNXRUVcjs.chartSceneToDomSpec; exports.chartSceneToSvg = _chunk3IHNXRUVcjs.chartSceneToSvg; exports.chartSerialToDate = _chunkHDGBM7EAcjs.chartSerialToDate; exports.chartSeriesColor = _chunkLL3H5XUHcjs.chartSeriesColor; exports.chartSeriesType = _chunkLL3H5XUHcjs.chartSeriesType; exports.chartSliceColor = _chunkLL3H5XUHcjs.chartSliceColor; exports.chartSquarify = _chunkHDGBM7EAcjs.chartSquarify; exports.chartSupportsTrendlines = _chunkHDGBM7EAcjs.chartSupportsTrendlines; exports.chartTextBaseline = _chunk3IHNXRUVcjs.chartTextBaseline; exports.chartTextOn = _chunkLL3H5XUHcjs.chartTextOn; exports.chartTextTransform = _chunk3IHNXRUVcjs.chartTextTransform; exports.chartToMermaid = _chunk3IHNXRUVcjs.chartToMermaid; exports.chartToOoxml = _chunkNA4UVVJ4cjs.chartToOoxml; exports.chartToSvg = _chunk3IHNXRUVcjs.chartToSvg; exports.chartTrendlineName = _chunkHDGBM7EAcjs.chartTrendlineName; exports.chartValueAtPoint = _chunkHDGBM7EAcjs.chartValueAtPoint; exports.chartXAtPoint = _chunkHDGBM7EAcjs.chartXAtPoint; exports.checkChartColors = _chunkLL3H5XUHcjs.checkChartColors; exports.cloneChartSeries = _chunkLL3H5XUHcjs.cloneChartSeries; exports.cloneChartSpec = _chunkLL3H5XUHcjs.cloneChartSpec; exports.compileChartFormatCode = _chunkHDGBM7EAcjs.compileChartFormatCode; exports.contrastingTextColor = _chunkHDGBM7EAcjs.contrastingTextColor; exports.createChartCommands = createChartCommands; exports.createChartController = _chunk3IHNXRUVcjs.createChartController; exports.createChartEditorDocument = createChartEditorDocument; exports.createChartRasterizer = createChartRasterizer; exports.createChartSpec = _chunkLL3H5XUHcjs.createChartSpec; exports.createChartToolProvider = createChartToolProvider; exports.createInstantChartClock = createInstantChartClock; exports.createOfficeChartToolProvider = createOfficeChartToolProvider; exports.cyclePaletteColor = _chunkLL3H5XUHcjs.cyclePaletteColor; exports.decimateChartPoints = _chunkHDGBM7EAcjs.decimateChartPoints; exports.defaultChartAxis = _chunkLL3H5XUHcjs.defaultChartAxis; exports.defaultChartErrorBarValue = _chunkLL3H5XUHcjs.defaultChartErrorBarValue; exports.describeChart = _chunk3IHNXRUVcjs.describeChart; exports.describeChartErrorBars = _chunkLL3H5XUHcjs.describeChartErrorBars; exports.describeChartSelection = describeChartSelection; exports.describeOfficeChartPlace = describeOfficeChartPlace; exports.downloadChartPng = downloadChartPng; exports.easeChartTween = easeChartTween; exports.estimateChartTextWidth = _chunkHDGBM7EAcjs.estimateChartTextWidth; exports.extractDocxCharts = extractDocxCharts; exports.extractOfficeCharts = extractOfficeCharts; exports.extractPptxCharts = extractPptxCharts; exports.extractXlsxCharts = extractXlsxCharts; exports.findMermaidCharts = _chunk3IHNXRUVcjs.findMermaidCharts; exports.fitChartTrendline = _chunkHDGBM7EAcjs.fitChartTrendline; exports.formatChartAmountList = _chunkLL3H5XUHcjs.formatChartAmountList; exports.formatChartDate = _chunkHDGBM7EAcjs.formatChartDate; exports.formatChartNumber = _chunkHDGBM7EAcjs.formatChartNumber; exports.formatChartValueWithCode = _chunkHDGBM7EAcjs.formatChartValueWithCode; exports.handleChartKey = handleChartKey; exports.isCartesianChart = _chunkLL3H5XUHcjs.isCartesianChart; exports.isXyChart = _chunkLL3H5XUHcjs.isXyChart; exports.layoutChart = _chunkHDGBM7EAcjs.layoutChart; exports.layoutSparkline = _chunk3IHNXRUVcjs.layoutSparkline; exports.linearMap = _chunkHDGBM7EAcjs.linearMap; exports.locateChartPoint = locateChartPoint; exports.monochromeChartPalette = _chunk3IHNXRUVcjs.monochromeChartPalette; exports.niceLogScale = _chunkHDGBM7EAcjs.niceLogScale; exports.niceScale = _chunkHDGBM7EAcjs.niceScale; exports.niceStep = _chunkHDGBM7EAcjs.niceStep; exports.normalizeChartAxis = _chunkLL3H5XUHcjs.normalizeChartAxis; exports.normalizeChartErrorBars = _chunkLL3H5XUHcjs.normalizeChartErrorBars; exports.normalizeChartSpec = _chunkLL3H5XUHcjs.normalizeChartSpec; exports.normalizeChartTrendline = _chunkLL3H5XUHcjs.normalizeChartTrendline; exports.normalizeChartValues = _chunkLL3H5XUHcjs.normalizeChartValues; exports.parseChartAmountList = _chunkLL3H5XUHcjs.parseChartAmountList; exports.parseChartColor = _chunkLL3H5XUHcjs.parseChartColor; exports.parseChartDate = _chunkHDGBM7EAcjs.parseChartDate; exports.parseChartValue = _chunkLL3H5XUHcjs.parseChartValue; exports.parsePartialChartJson = parsePartialChartJson; exports.planChartCommand = planChartCommand; exports.planChartToolPlayback = planChartToolPlayback; exports.rasterizeChartSvg = rasterizeChartSvg; exports.realChartClock = realChartClock; exports.recommendChartTypes = recommendChartTypes; exports.recommendForShape = recommendForShape; exports.resolveChartSvgPaints = resolveChartSvgPaints; exports.sameChartSelection = _chunkHDGBM7EAcjs.sameChartSelection; exports.shadeChartColor = _chunkLL3H5XUHcjs.shadeChartColor; exports.simulateChartVision = _chunkLL3H5XUHcjs.simulateChartVision; exports.snapChartDragValue = snapChartDragValue; exports.snapChartValue = _chunkHDGBM7EAcjs.snapChartValue; exports.sparklineToSvg = _chunk3IHNXRUVcjs.sparklineToSvg; exports.startChartPointDrag = startChartPointDrag; exports.stepDecimals = _chunkHDGBM7EAcjs.stepDecimals; exports.summarizeChart = _chunk3IHNXRUVcjs.summarizeChart; exports.summarizeChartSeries = _chunkHDGBM7EAcjs.summarizeChartSeries; exports.trendNumberText = _chunkHDGBM7EAcjs.trendNumberText; exports.uniqueChartSeriesId = _chunkLL3H5XUHcjs.uniqueChartSeriesId; exports.withChartPlayback = withChartPlayback;
|
|
2840
|
+
|
|
2841
|
+
|
|
2842
|
+
|
|
2843
|
+
|
|
2844
|
+
|
|
2845
|
+
|
|
2846
|
+
|
|
2847
|
+
|
|
2848
|
+
|
|
2849
|
+
|
|
2850
|
+
|
|
2851
|
+
|
|
2852
|
+
|
|
2853
|
+
|
|
2854
|
+
|
|
2855
|
+
|
|
2856
|
+
|
|
2857
|
+
|
|
2858
|
+
|
|
2859
|
+
|
|
2860
|
+
|
|
2861
|
+
|
|
2862
|
+
|
|
2863
|
+
|
|
2864
|
+
|
|
2865
|
+
exports.CHART_AXIS_KINDS = _chunkR3P2M7HUcjs.CHART_AXIS_KINDS; exports.CHART_AXIS_SCALES = _chunkR3P2M7HUcjs.CHART_AXIS_SCALES; exports.CHART_COLOR_SCHEMES = _chunkGKNEJ6ENcjs.CHART_COLOR_SCHEMES; exports.CHART_CURVES = _chunkR3P2M7HUcjs.CHART_CURVES; exports.CHART_DATE_STEPS = _chunkSBQVEBSUcjs.CHART_DATE_STEPS; exports.CHART_ERROR_BAR_DIRECTIONS = _chunkR3P2M7HUcjs.CHART_ERROR_BAR_DIRECTIONS; exports.CHART_ERROR_BAR_LABELS = _chunkR3P2M7HUcjs.CHART_ERROR_BAR_LABELS; exports.CHART_ERROR_BAR_TYPES = _chunkR3P2M7HUcjs.CHART_ERROR_BAR_TYPES; exports.CHART_LABEL_POSITIONS = _chunkR3P2M7HUcjs.CHART_LABEL_POSITIONS; exports.CHART_LAYOUT_PRESETS = _chunkGKNEJ6ENcjs.CHART_LAYOUT_PRESETS; exports.CHART_LEGEND_POSITIONS = _chunkR3P2M7HUcjs.CHART_LEGEND_POSITIONS; exports.CHART_LIKERT_NEUTRALS = _chunkR3P2M7HUcjs.CHART_LIKERT_NEUTRALS; exports.CHART_LIKERT_SORTS = _chunkR3P2M7HUcjs.CHART_LIKERT_SORTS; exports.CHART_MARKERS = _chunkR3P2M7HUcjs.CHART_MARKERS; exports.CHART_MERMAID_META_PREFIX = _chunkGKNEJ6ENcjs.CHART_MERMAID_META_PREFIX; exports.CHART_NUMBER_STYLES = _chunkR3P2M7HUcjs.CHART_NUMBER_STYLES; exports.CHART_OOXML_CONTENT_TYPE = _chunkYGG7WDWTcjs.CHART_OOXML_CONTENT_TYPE; exports.CHART_OOXML_NS = _chunkYGG7WDWTcjs.CHART_OOXML_NS; exports.CHART_OOXML_RELATIONSHIP = _chunkYGG7WDWTcjs.CHART_OOXML_RELATIONSHIP; exports.CHART_ORIENTATIONS = _chunkR3P2M7HUcjs.CHART_ORIENTATIONS; exports.CHART_PALETTE_SHADES = _chunkR3P2M7HUcjs.CHART_PALETTE_SHADES; exports.CHART_PRESENCE_COLORS = CHART_PRESENCE_COLORS; exports.CHART_RADAR_GRATICULES = _chunkR3P2M7HUcjs.CHART_RADAR_GRATICULES; exports.CHART_RASTER_MAX_SIZE = CHART_RASTER_MAX_SIZE; exports.CHART_REFERENCE_AXES = _chunkR3P2M7HUcjs.CHART_REFERENCE_AXES; exports.CHART_SERIES_TYPES = _chunkR3P2M7HUcjs.CHART_SERIES_TYPES; exports.CHART_STACKINGS = _chunkR3P2M7HUcjs.CHART_STACKINGS; exports.CHART_TRENDLINE_TYPES = _chunkR3P2M7HUcjs.CHART_TRENDLINE_TYPES; exports.CHART_TYPES = _chunkR3P2M7HUcjs.CHART_TYPES; exports.CHART_TYPE_LABELS = _chunkR3P2M7HUcjs.CHART_TYPE_LABELS; exports.CSS_VARIABLE_CHART_THEME = _chunkR3P2M7HUcjs.CSS_VARIABLE_CHART_THEME; exports.ChartController = _chunkGKNEJ6ENcjs.ChartController; exports.ChartDirector = ChartDirector; exports.ChartPresence = ChartPresence; exports.ChartStream = ChartStream; exports.DEFAULT_CHART_PALETTE = _chunkR3P2M7HUcjs.DEFAULT_CHART_PALETTE; exports.DEFAULT_CHART_THEME = _chunkR3P2M7HUcjs.DEFAULT_CHART_THEME; exports.MAX_CHART_DATA_LABELS = _chunkSBQVEBSUcjs.MAX_CHART_DATA_LABELS; exports.MAX_CHART_LINE_POINTS = _chunkSBQVEBSUcjs.MAX_CHART_LINE_POINTS; exports.MAX_CHART_MARKERS = _chunkSBQVEBSUcjs.MAX_CHART_MARKERS; exports.MAX_CHART_TREE_DEPTH = _chunkR3P2M7HUcjs.MAX_CHART_TREE_DEPTH; exports.MAX_CHART_TREE_NODES = _chunkR3P2M7HUcjs.MAX_CHART_TREE_NODES; exports.OfficeChartsError = OfficeChartsError; exports.RENDER_CHART_INSTRUCTIONS = RENDER_CHART_INSTRUCTIONS; exports.addChartTreeRow = _chunkR3P2M7HUcjs.addChartTreeRow; exports.analyzeChartTable = analyzeChartTable; exports.blendChartScenes = blendChartScenes; exports.canDragChartPoint = canDragChartPoint; exports.chartBoxStats = _chunkSBQVEBSUcjs.chartBoxStats; exports.chartClientToScene = chartClientToScene; exports.chartColorDistance = _chunkR3P2M7HUcjs.chartColorDistance; exports.chartColorInputValue = _chunkR3P2M7HUcjs.chartColorInputValue; exports.chartColorsByCategory = _chunkR3P2M7HUcjs.chartColorsByCategory; exports.chartContrastRatio = _chunkR3P2M7HUcjs.chartContrastRatio; exports.chartDataFromTable = _chunkR3P2M7HUcjs.chartDataFromTable; exports.chartDataToTable = _chunkR3P2M7HUcjs.chartDataToTable; exports.chartDateLabels = _chunkSBQVEBSUcjs.chartDateLabels; exports.chartDateToSerial = _chunkSBQVEBSUcjs.chartDateToSerial; exports.chartErrorAmounts = _chunkR3P2M7HUcjs.chartErrorAmounts; exports.chartErrorBarsOfType = _chunkR3P2M7HUcjs.chartErrorBarsOfType; exports.chartFamily = _chunkR3P2M7HUcjs.chartFamily; exports.chartFileName = chartFileName; exports.chartFormatToCode = _chunkYGG7WDWTcjs.chartFormatToCode; exports.chartFromMermaid = _chunkGKNEJ6ENcjs.chartFromMermaid; exports.chartFromOoxml = _chunkYGG7WDWTcjs.chartFromOoxml; exports.chartFromTable = chartFromTable; exports.chartHistogram = _chunkSBQVEBSUcjs.chartHistogram; exports.chartHitTest = chartHitTest; exports.chartLikertColor = _chunkR3P2M7HUcjs.chartLikertColor; exports.chartLuminance = _chunkR3P2M7HUcjs.chartLuminance; exports.chartMermaidFamily = _chunkGKNEJ6ENcjs.chartMermaidFamily; exports.chartMovingAverage = _chunkSBQVEBSUcjs.chartMovingAverage; exports.chartPointAnchor = chartPointAnchor; exports.chartPointColor = _chunkR3P2M7HUcjs.chartPointColor; exports.chartPointRef = chartPointRef; exports.chartPresetPatch = _chunkGKNEJ6ENcjs.chartPresetPatch; exports.chartQuantile = _chunkSBQVEBSUcjs.chartQuantile; exports.chartRasterSize = chartRasterSize; exports.chartRgbToHex = _chunkR3P2M7HUcjs.chartRgbToHex; exports.chartRgbToOklab = _chunkR3P2M7HUcjs.chartRgbToOklab; exports.chartScaleFromPixel = _chunkSBQVEBSUcjs.chartScaleFromPixel; exports.chartScaleToPixel = _chunkSBQVEBSUcjs.chartScaleToPixel; exports.chartSceneToDomSpec = _chunkGKNEJ6ENcjs.chartSceneToDomSpec; exports.chartSceneToSvg = _chunkGKNEJ6ENcjs.chartSceneToSvg; exports.chartSerialToDate = _chunkSBQVEBSUcjs.chartSerialToDate; exports.chartSeriesColor = _chunkR3P2M7HUcjs.chartSeriesColor; exports.chartSeriesType = _chunkR3P2M7HUcjs.chartSeriesType; exports.chartSliceColor = _chunkR3P2M7HUcjs.chartSliceColor; exports.chartSpecColorsByCategory = _chunkR3P2M7HUcjs.chartSpecColorsByCategory; exports.chartSquarify = _chunkSBQVEBSUcjs.chartSquarify; exports.chartSupportsTrendlines = _chunkSBQVEBSUcjs.chartSupportsTrendlines; exports.chartTextBaseline = _chunkGKNEJ6ENcjs.chartTextBaseline; exports.chartTextOn = _chunkR3P2M7HUcjs.chartTextOn; exports.chartTextTransform = _chunkGKNEJ6ENcjs.chartTextTransform; exports.chartToMermaid = _chunkGKNEJ6ENcjs.chartToMermaid; exports.chartToOoxml = _chunkYGG7WDWTcjs.chartToOoxml; exports.chartToSvg = _chunkGKNEJ6ENcjs.chartToSvg; exports.chartTreeColumnLabels = _chunkR3P2M7HUcjs.chartTreeColumnLabels; exports.chartTreeDepth = _chunkR3P2M7HUcjs.chartTreeDepth; exports.chartTreeFromRows = _chunkR3P2M7HUcjs.chartTreeFromRows; exports.chartTreeFromSeries = _chunkR3P2M7HUcjs.chartTreeFromSeries; exports.chartTreeFromTable = _chunkR3P2M7HUcjs.chartTreeFromTable; exports.chartTreeToRows = _chunkR3P2M7HUcjs.chartTreeToRows; exports.chartTreeTotal = _chunkR3P2M7HUcjs.chartTreeTotal; exports.chartTrendlineName = _chunkSBQVEBSUcjs.chartTrendlineName; exports.chartValueAtPoint = _chunkSBQVEBSUcjs.chartValueAtPoint; exports.chartVariesColors = _chunkR3P2M7HUcjs.chartVariesColors; exports.chartXAtPoint = _chunkSBQVEBSUcjs.chartXAtPoint; exports.checkChartColors = _chunkR3P2M7HUcjs.checkChartColors; exports.cloneChartSeries = _chunkR3P2M7HUcjs.cloneChartSeries; exports.cloneChartSpec = _chunkR3P2M7HUcjs.cloneChartSpec; exports.cloneChartTree = _chunkR3P2M7HUcjs.cloneChartTree; exports.compileChartFormatCode = _chunkSBQVEBSUcjs.compileChartFormatCode; exports.contrastingTextColor = _chunkSBQVEBSUcjs.contrastingTextColor; exports.createChartCommands = createChartCommands; exports.createChartController = _chunkGKNEJ6ENcjs.createChartController; exports.createChartEditorDocument = createChartEditorDocument; exports.createChartRasterizer = createChartRasterizer; exports.createChartSpec = _chunkR3P2M7HUcjs.createChartSpec; exports.createChartToolProvider = createChartToolProvider; exports.createInstantChartClock = createInstantChartClock; exports.createOfficeChartToolProvider = createOfficeChartToolProvider; exports.cyclePaletteColor = _chunkR3P2M7HUcjs.cyclePaletteColor; exports.decimateChartPoints = _chunkSBQVEBSUcjs.decimateChartPoints; exports.defaultChartAxis = _chunkR3P2M7HUcjs.defaultChartAxis; exports.defaultChartErrorBarValue = _chunkR3P2M7HUcjs.defaultChartErrorBarValue; exports.describeChart = _chunkGKNEJ6ENcjs.describeChart; exports.describeChartErrorBars = _chunkR3P2M7HUcjs.describeChartErrorBars; exports.describeChartSelection = describeChartSelection; exports.describeOfficeChartPlace = describeOfficeChartPlace; exports.downloadChartPng = downloadChartPng; exports.easeChartTween = easeChartTween; exports.estimateChartTextWidth = _chunkSBQVEBSUcjs.estimateChartTextWidth; exports.extractDocxCharts = extractDocxCharts; exports.extractOfficeCharts = extractOfficeCharts; exports.extractPptxCharts = extractPptxCharts; exports.extractXlsxCharts = extractXlsxCharts; exports.findChartTreeNode = _chunkR3P2M7HUcjs.findChartTreeNode; exports.findMermaidCharts = _chunkGKNEJ6ENcjs.findMermaidCharts; exports.fitChartTrendline = _chunkSBQVEBSUcjs.fitChartTrendline; exports.formatChartAmountList = _chunkR3P2M7HUcjs.formatChartAmountList; exports.formatChartDate = _chunkSBQVEBSUcjs.formatChartDate; exports.formatChartNumber = _chunkSBQVEBSUcjs.formatChartNumber; exports.formatChartValueWithCode = _chunkSBQVEBSUcjs.formatChartValueWithCode; exports.handleChartKey = handleChartKey; exports.isCartesianChart = _chunkR3P2M7HUcjs.isCartesianChart; exports.isXyChart = _chunkR3P2M7HUcjs.isXyChart; exports.layoutChart = _chunkSBQVEBSUcjs.layoutChart; exports.layoutSparkline = _chunkGKNEJ6ENcjs.layoutSparkline; exports.linearMap = _chunkSBQVEBSUcjs.linearMap; exports.locateChartPoint = locateChartPoint; exports.monochromeChartPalette = _chunkGKNEJ6ENcjs.monochromeChartPalette; exports.niceLogScale = _chunkSBQVEBSUcjs.niceLogScale; exports.niceScale = _chunkSBQVEBSUcjs.niceScale; exports.niceStep = _chunkSBQVEBSUcjs.niceStep; exports.normalizeChartAxis = _chunkR3P2M7HUcjs.normalizeChartAxis; exports.normalizeChartErrorBars = _chunkR3P2M7HUcjs.normalizeChartErrorBars; exports.normalizeChartReferenceBand = _chunkR3P2M7HUcjs.normalizeChartReferenceBand; exports.normalizeChartReferenceLine = _chunkR3P2M7HUcjs.normalizeChartReferenceLine; exports.normalizeChartSpec = _chunkR3P2M7HUcjs.normalizeChartSpec; exports.normalizeChartTree = _chunkR3P2M7HUcjs.normalizeChartTree; exports.normalizeChartTrendline = _chunkR3P2M7HUcjs.normalizeChartTrendline; exports.normalizeChartValues = _chunkR3P2M7HUcjs.normalizeChartValues; exports.parseChartAmountList = _chunkR3P2M7HUcjs.parseChartAmountList; exports.parseChartColor = _chunkR3P2M7HUcjs.parseChartColor; exports.parseChartDate = _chunkSBQVEBSUcjs.parseChartDate; exports.parseChartValue = _chunkR3P2M7HUcjs.parseChartValue; exports.parsePartialChartJson = parsePartialChartJson; exports.planChartCommand = planChartCommand; exports.planChartToolPlayback = planChartToolPlayback; exports.rasterizeChartSvg = rasterizeChartSvg; exports.realChartClock = realChartClock; exports.recommendChartTypes = recommendChartTypes; exports.recommendForShape = recommendForShape; exports.removeChartTreeRow = _chunkR3P2M7HUcjs.removeChartTreeRow; exports.resolveChartSvgPaints = resolveChartSvgPaints; exports.sameChartSelection = _chunkSBQVEBSUcjs.sameChartSelection; exports.setChartTreeRowName = _chunkR3P2M7HUcjs.setChartTreeRowName; exports.setChartTreeRowValue = _chunkR3P2M7HUcjs.setChartTreeRowValue; exports.shadeChartColor = _chunkR3P2M7HUcjs.shadeChartColor; exports.simulateChartVision = _chunkR3P2M7HUcjs.simulateChartVision; exports.snapChartDragValue = snapChartDragValue; exports.snapChartValue = _chunkSBQVEBSUcjs.snapChartValue; exports.sparklineToSvg = _chunkGKNEJ6ENcjs.sparklineToSvg; exports.startChartPointDrag = startChartPointDrag; exports.stepDecimals = _chunkSBQVEBSUcjs.stepDecimals; exports.suggestChartReferences = _chunkSBQVEBSUcjs.suggestChartReferences; exports.summarizeChart = _chunkGKNEJ6ENcjs.summarizeChart; exports.summarizeChartSeries = _chunkSBQVEBSUcjs.summarizeChartSeries; exports.trendNumberText = _chunkSBQVEBSUcjs.trendNumberText; exports.uniqueChartSeriesId = _chunkR3P2M7HUcjs.uniqueChartSeriesId; exports.withChartPlayback = withChartPlayback;
|