@rowsncolumns/charts 28.1.16 → 28.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/Readme.md +18 -1
  2. package/dist/cjs/basic-chart/basic-chart.d.ts +1 -1
  3. package/dist/cjs/basic-chart/basic-chart.d.ts.map +1 -1
  4. package/dist/cjs/basic-chart/basic-chart.js +204 -172
  5. package/dist/cjs/components/editors/chart-editor.d.ts +7 -1
  6. package/dist/cjs/components/editors/chart-editor.d.ts.map +1 -1
  7. package/dist/cjs/components/editors/chart-editor.js +3 -2
  8. package/dist/cjs/components/editors/fields/text-format-fields.d.ts +5 -3
  9. package/dist/cjs/components/editors/fields/text-format-fields.d.ts.map +1 -1
  10. package/dist/cjs/components/editors/fields/text-format-fields.js +6 -6
  11. package/dist/cjs/config.d.ts +10 -0
  12. package/dist/cjs/config.d.ts.map +1 -1
  13. package/dist/cjs/config.js +45 -10
  14. package/dist/cjs/plotly/basic-chart/basic-chart.d.ts.map +1 -1
  15. package/dist/cjs/plotly/basic-chart/basic-chart.js +43 -4
  16. package/dist/cjs/types.d.ts +10 -0
  17. package/dist/cjs/types.d.ts.map +1 -1
  18. package/dist/cjs/utils/echarts-gl-loader.d.ts +6 -0
  19. package/dist/cjs/utils/echarts-gl-loader.d.ts.map +1 -1
  20. package/dist/cjs/utils/echarts-gl-loader.js +42 -1
  21. package/dist/cjs/utils/overrides.d.ts +20 -0
  22. package/dist/cjs/utils/overrides.d.ts.map +1 -1
  23. package/dist/cjs/utils/overrides.js +28 -7
  24. package/dist/cjs/utils/three-d.d.ts +12 -1
  25. package/dist/cjs/utils/three-d.d.ts.map +1 -1
  26. package/dist/cjs/utils/three-d.js +4 -1
  27. package/dist/esm/basic-chart/basic-chart.d.ts +1 -1
  28. package/dist/esm/basic-chart/basic-chart.d.ts.map +1 -1
  29. package/dist/esm/basic-chart/basic-chart.js +79 -56
  30. package/dist/esm/components/editors/chart-editor.d.ts +7 -1
  31. package/dist/esm/components/editors/chart-editor.d.ts.map +1 -1
  32. package/dist/esm/components/editors/chart-editor.js +4 -3
  33. package/dist/esm/components/editors/fields/text-format-fields.d.ts +5 -3
  34. package/dist/esm/components/editors/fields/text-format-fields.d.ts.map +1 -1
  35. package/dist/esm/components/editors/fields/text-format-fields.js +6 -6
  36. package/dist/esm/config.d.ts +10 -0
  37. package/dist/esm/config.d.ts.map +1 -1
  38. package/dist/esm/config.js +20 -0
  39. package/dist/esm/plotly/basic-chart/basic-chart.d.ts.map +1 -1
  40. package/dist/esm/plotly/basic-chart/basic-chart.js +44 -2
  41. package/dist/esm/types.d.ts +10 -0
  42. package/dist/esm/types.d.ts.map +1 -1
  43. package/dist/esm/utils/echarts-gl-loader.d.ts +6 -0
  44. package/dist/esm/utils/echarts-gl-loader.d.ts.map +1 -1
  45. package/dist/esm/utils/echarts-gl-loader.js +40 -0
  46. package/dist/esm/utils/overrides.d.ts +20 -0
  47. package/dist/esm/utils/overrides.d.ts.map +1 -1
  48. package/dist/esm/utils/overrides.js +22 -0
  49. package/dist/esm/utils/three-d.d.ts +12 -1
  50. package/dist/esm/utils/three-d.d.ts.map +1 -1
  51. package/dist/esm/utils/three-d.js +4 -1
  52. package/package.json +2 -2
@@ -16,7 +16,13 @@ type ChartEditorProps = {
16
16
  * from the data range. Without it the switched series are unnamed.
17
17
  */
18
18
  getFormattedValue?: ChartCellLabelGetter;
19
+ /**
20
+ * Mirror of the renderer's `enable3D`: `false` hides the presets that
21
+ * render through echarts-gl (3-D Column / Bar / Line / Area / Surface).
22
+ * An existing 3-D spec keeps its `sourceChartType`. Default `true`.
23
+ */
24
+ enable3D?: boolean;
19
25
  };
20
- export declare const ChartEditor: ({ chart, sheetId, onSubmit, onRequestMoveChart, getFormattedValue, }: ChartEditorProps) => React.JSX.Element;
26
+ export declare const ChartEditor: ({ chart, sheetId, onSubmit, onRequestMoveChart, getFormattedValue, enable3D, }: ChartEditorProps) => React.JSX.Element;
21
27
  export default ChartEditor;
22
28
  //# sourceMappingURL=chart-editor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chart-editor.d.ts","sourceRoot":"","sources":["../../../../components/editors/chart-editor.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAGV,aAAa,EAGd,MAAM,2BAA2B,CAAC;AAwBnC,OAAO,KAAkB,MAAM,OAAO,CAAC;AAIvC,OAAO,EAEL,KAAK,oBAAoB,EAG1B,MAAM,+BAA+B,CAAC;AAuDvC,KAAK,gBAAgB,GAAG;IACtB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IACtC;;;;OAIG;IACH,kBAAkB,CAAC,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IAChD;;;OAGG;IACH,iBAAiB,CAAC,EAAE,oBAAoB,CAAC;CAC1C,CAAC;AAuBF,eAAO,MAAM,WAAW,GAAI,sEAMzB,gBAAgB,sBAkhClB,CAAC;AAEF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"chart-editor.d.ts","sourceRoot":"","sources":["../../../../components/editors/chart-editor.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAGV,aAAa,EAGd,MAAM,2BAA2B,CAAC;AAwBnC,OAAO,KAAkB,MAAM,OAAO,CAAC;AAIvC,OAAO,EAEL,KAAK,oBAAoB,EAG1B,MAAM,+BAA+B,CAAC;AAuDvC,KAAK,gBAAgB,GAAG;IACtB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IACtC;;;;OAIG;IACH,kBAAkB,CAAC,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IAChD;;;OAGG;IACH,iBAAiB,CAAC,EAAE,oBAAoB,CAAC;IACzC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAuBF,eAAO,MAAM,WAAW,GAAI,gFAOzB,gBAAgB,sBAmhClB,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -56,8 +56,9 @@ var Section = function (_a) {
56
56
  };
57
57
  var ChartEditor = function (_a) {
58
58
  var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0;
59
- var chart = _a.chart, sheetId = _a.sheetId, onSubmit = _a.onSubmit, onRequestMoveChart = _a.onRequestMoveChart, getFormattedValue = _a.getFormattedValue;
59
+ var chart = _a.chart, sheetId = _a.sheetId, onSubmit = _a.onSubmit, onRequestMoveChart = _a.onRequestMoveChart, getFormattedValue = _a.getFormattedValue, enable3D = _a.enable3D;
60
60
  var setChartDialogState = (0, editing_chart_atom_1.useSetChartEditorDialogState)();
61
+ var chartTypes = (0, config_1.getChartTypes)({ enable3D: enable3D });
61
62
  // Close dialog
62
63
  var closeDialog = function () { return setChartDialogState(false); };
63
64
  // Keyed on chart identity so a position sync (move/resize while the
@@ -232,7 +233,7 @@ var ChartEditor = function (_a) {
232
233
  react_1.default.createElement(ui_1.DropdownRightSlot, null,
233
234
  react_1.default.createElement(icons_1.TriangleDownIcon, null)))),
234
235
  react_1.default.createElement(ui_1.DropdownMenuPortal, null,
235
- react_1.default.createElement(ui_1.DropdownMenuContent, { align: "start", sideOffset: 0 }, config_1.CHART_TYPES.map(function (_a) {
236
+ react_1.default.createElement(ui_1.DropdownMenuContent, { align: "start", sideOffset: 0 }, chartTypes.map(function (_a) {
236
237
  var _b = tslib_1.__read(_a, 2), category = _b[0], types = _b[1];
237
238
  return (react_1.default.createElement(ui_1.DropdownMenuSub, { key: category },
238
239
  react_1.default.createElement(ui_1.DropdownMenuSubTrigger, null,
@@ -1,9 +1,11 @@
1
1
  import type { ChartTextFormat } from "@rowsncolumns/spreadsheet";
2
2
  import React from "react";
3
3
  /**
4
- * Font family / size / colour / bold / italic / underline / strikethrough
5
- * of one text element — the chart title, the legend, an axis or the data
6
- * labels (`ChartTextFormat`, OOXML `<c:txPr>`).
4
+ * Font family / size / colour / bold / italic of one text element — the
5
+ * chart title, the legend, an axis or the data labels (`ChartTextFormat`,
6
+ * OOXML `<c:txPr>`). `underline` / `strikethrough` stay on the spec for the
7
+ * xlsx round trip but have no control: neither renderer draws them
8
+ * (rowsncolumns/spreadsheet#1105).
7
9
  */
8
10
  export declare const TextFormatFields: ({ label, value, onChange, collapsible, ariaLabels, }: {
9
11
  label: string;
@@ -1 +1 @@
1
- {"version":3,"file":"text-format-fields.d.ts","sourceRoot":"","sources":["../../../../../components/editors/fields/text-format-fields.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE,OAAO,KAAmB,MAAM,OAAO,CAAC;AAIxC;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,sDAM9B;IACD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI,CAAC;IAClD,0EAA0E;IAC1E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACjE,sBA6EA,CAAC"}
1
+ {"version":3,"file":"text-format-fields.d.ts","sourceRoot":"","sources":["../../../../../components/editors/fields/text-format-fields.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAEjE,OAAO,KAAmB,MAAM,OAAO,CAAC;AAIxC;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAAI,sDAM9B;IACD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,eAAe,GAAG,IAAI,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,SAAS,GAAG,IAAI,CAAC;IAClD,0EAA0E;IAC1E,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACjE,sBAmEA,CAAC"}
@@ -6,9 +6,11 @@ var ui_1 = require("@rowsncolumns/ui");
6
6
  var react_1 = tslib_1.__importStar(require("react"));
7
7
  var primitives_1 = require("./primitives");
8
8
  /**
9
- * Font family / size / colour / bold / italic / underline / strikethrough
10
- * of one text element — the chart title, the legend, an axis or the data
11
- * labels (`ChartTextFormat`, OOXML `<c:txPr>`).
9
+ * Font family / size / colour / bold / italic of one text element — the
10
+ * chart title, the legend, an axis or the data labels (`ChartTextFormat`,
11
+ * OOXML `<c:txPr>`). `underline` / `strikethrough` stay on the spec for the
12
+ * xlsx round trip but have no control: neither renderer draws them
13
+ * (rowsncolumns/spreadsheet#1105).
12
14
  */
13
15
  var TextFormatFields = function (_a) {
14
16
  var _b, _c, _d, _e, _f, _g;
@@ -39,8 +41,6 @@ var TextFormatFields = function (_a) {
39
41
  }, className: "text-xs w-16", placeholder: "Size", "aria-label": (_e = ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.size) !== null && _e !== void 0 ? _e : "".concat(label, " size") }),
40
42
  react_1.default.createElement("input", { type: "color", value: (_f = value === null || value === void 0 ? void 0 : value.color) !== null && _f !== void 0 ? _f : "#000000", onChange: function (e) { return set({ color: e.target.value }); }, className: primitives_1.COLOR_CLASS, "aria-label": (_g = ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.color) !== null && _g !== void 0 ? _g : "".concat(label, " color") }),
41
43
  react_1.default.createElement(primitives_1.CheckboxField, { label: "Bold", checked: Boolean(value === null || value === void 0 ? void 0 : value.bold), onChange: function (bold) { return set({ bold: bold }); } }),
42
- react_1.default.createElement(primitives_1.CheckboxField, { label: "Italic", checked: Boolean(value === null || value === void 0 ? void 0 : value.italic), onChange: function (italic) { return set({ italic: italic }); } }),
43
- react_1.default.createElement(primitives_1.CheckboxField, { label: "Underline", checked: Boolean(value === null || value === void 0 ? void 0 : value.underline), onChange: function (underline) { return set({ underline: underline }); } }),
44
- react_1.default.createElement(primitives_1.CheckboxField, { label: "Strikethrough", checked: Boolean(value === null || value === void 0 ? void 0 : value.strikethrough), onChange: function (strikethrough) { return set({ strikethrough: strikethrough }); } }))));
44
+ react_1.default.createElement(primitives_1.CheckboxField, { label: "Italic", checked: Boolean(value === null || value === void 0 ? void 0 : value.italic), onChange: function (italic) { return set({ italic: italic }); } }))));
45
45
  };
46
46
  exports.TextFormatFields = TextFormatFields;
@@ -1,5 +1,15 @@
1
1
  import type { ChartSpec } from "@rowsncolumns/spreadsheet";
2
+ import { type ThreeDRenderOptions } from "./utils/three-d";
2
3
  export declare const CHART_TYPES: Array<[string, Array<[string, Partial<ChartSpec>]>]>;
4
+ /**
5
+ * The Chart editor's preset list. With `enable3D: false` the presets the
6
+ * renderer would draw through echarts-gl (3-D Column / Bar / Line / Area,
7
+ * their stacked variants and 3-D Surface) are left out; 3-D Pie and
8
+ * Contour stay since they never render in WebGL. A spec that already
9
+ * carries a 3-D `sourceChartType` is not rewritten — only the picker
10
+ * changes (rowsncolumns/spreadsheet#1187).
11
+ */
12
+ export declare const getChartTypes: (options?: ThreeDRenderOptions) => Array<[string, Array<[string, Partial<ChartSpec>]>]>;
3
13
  /**
4
14
  * True when a spec is doughnut-shaped: the first-class
5
15
  * `chartType: "doughnut"` token, or the two legacy pie encodings —
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAwR3D,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAgB1E,CAAC;AAYJ;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAI,MAAM,OAAO,CAAC,SAAS,CAAC,KAAG,OAQzD,CAAC;AAuBF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAAI,MAAM,OAAO,CAAC,SAAS,CAAC,KAAG,MA4B9D,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAG3D,OAAO,EAAuB,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAsRhF,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAgB1E,CAAC;AAEJ;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,GACxB,UAAU,mBAAmB,KAC5B,KAAK,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAarD,CAAC;AAYF;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAI,MAAM,OAAO,CAAC,SAAS,CAAC,KAAG,OAQzD,CAAC;AAuBF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAAI,MAAM,OAAO,CAAC,SAAS,CAAC,KAAG,MA4B9D,CAAC"}
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getChartPresetLabel = exports.isDoughnutSpec = exports.CHART_TYPES = void 0;
3
+ exports.getChartPresetLabel = exports.isDoughnutSpec = exports.getChartTypes = exports.CHART_TYPES = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var pie_explosion_1 = require("./utils/pie-explosion");
6
+ var three_d_1 = require("./utils/three-d");
6
7
  // Excel's 3-D chart classes degrade to a 2-D chartType with the authored
7
8
  // class kept as `sourceChartType` (BAR_3D, LINE_3D, PIE_3D, AREA_3D,
8
9
  // SURFACE, SURFACE_3D). The renderer draws BAR_3D / LINE_3D / AREA_3D /
@@ -277,6 +278,40 @@ exports.CHART_TYPES = [
277
278
  ["Stock", STOCK_CHART_TYPES],
278
279
  ["Combo", COMBO_CHART_TYPES],
279
280
  ];
281
+ /**
282
+ * The Chart editor's preset list. With `enable3D: false` the presets the
283
+ * renderer would draw through echarts-gl (3-D Column / Bar / Line / Area,
284
+ * their stacked variants and 3-D Surface) are left out; 3-D Pie and
285
+ * Contour stay since they never render in WebGL. A spec that already
286
+ * carries a 3-D `sourceChartType` is not rewritten — only the picker
287
+ * changes (rowsncolumns/spreadsheet#1187).
288
+ */
289
+ var getChartTypes = function (options) {
290
+ var e_1, _a;
291
+ if ((options === null || options === void 0 ? void 0 : options.enable3D) !== false)
292
+ return exports.CHART_TYPES;
293
+ var groups = [];
294
+ try {
295
+ for (var CHART_TYPES_1 = tslib_1.__values(exports.CHART_TYPES), CHART_TYPES_1_1 = CHART_TYPES_1.next(); !CHART_TYPES_1_1.done; CHART_TYPES_1_1 = CHART_TYPES_1.next()) {
296
+ var _b = tslib_1.__read(CHART_TYPES_1_1.value, 2), category = _b[0], presets = _b[1];
297
+ var kept = presets.filter(function (_a) {
298
+ var _b = tslib_1.__read(_a, 2), preset = _b[1];
299
+ return (0, three_d_1.resolve3DRenderKind)(preset.sourceChartType) === null;
300
+ });
301
+ if (kept.length > 0)
302
+ groups.push([category, kept]);
303
+ }
304
+ }
305
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
306
+ finally {
307
+ try {
308
+ if (CHART_TYPES_1_1 && !CHART_TYPES_1_1.done && (_a = CHART_TYPES_1.return)) _a.call(CHART_TYPES_1);
309
+ }
310
+ finally { if (e_1) throw e_1.error; }
311
+ }
312
+ return groups;
313
+ };
314
+ exports.getChartTypes = getChartTypes;
280
315
  /** Parse a radius entry ("40%" | 40 | 0) into a number, NaN-safe. */
281
316
  var parseRadiusValue = function (value) {
282
317
  if (typeof value === "number")
@@ -333,7 +368,7 @@ var PRESET_DISCRIMINATORS = [
333
368
  * Falls back to the capitalized chartType when no preset matches.
334
369
  */
335
370
  var getChartPresetLabel = function (spec) {
336
- var e_1, _a, e_2, _b;
371
+ var e_2, _a, e_3, _b;
337
372
  var _c;
338
373
  var loose = spec;
339
374
  // Doughnut first — it has several encodings (see isDoughnutSpec) and
@@ -345,8 +380,8 @@ var getChartPresetLabel = function (spec) {
345
380
  : "Doughnut";
346
381
  }
347
382
  try {
348
- for (var CHART_TYPES_1 = tslib_1.__values(exports.CHART_TYPES), CHART_TYPES_1_1 = CHART_TYPES_1.next(); !CHART_TYPES_1_1.done; CHART_TYPES_1_1 = CHART_TYPES_1.next()) {
349
- var _d = tslib_1.__read(CHART_TYPES_1_1.value, 2), presets = _d[1];
383
+ for (var CHART_TYPES_2 = tslib_1.__values(exports.CHART_TYPES), CHART_TYPES_2_1 = CHART_TYPES_2.next(); !CHART_TYPES_2_1.done; CHART_TYPES_2_1 = CHART_TYPES_2.next()) {
384
+ var _d = tslib_1.__read(CHART_TYPES_2_1.value, 2), presets = _d[1];
350
385
  var _loop_1 = function (name_1, config) {
351
386
  if (config.chartType !== spec.chartType)
352
387
  return "continue";
@@ -364,28 +399,28 @@ var getChartPresetLabel = function (spec) {
364
399
  return { value: name_1 };
365
400
  };
366
401
  try {
367
- for (var presets_1 = (e_2 = void 0, tslib_1.__values(presets)), presets_1_1 = presets_1.next(); !presets_1_1.done; presets_1_1 = presets_1.next()) {
402
+ for (var presets_1 = (e_3 = void 0, tslib_1.__values(presets)), presets_1_1 = presets_1.next(); !presets_1_1.done; presets_1_1 = presets_1.next()) {
368
403
  var _e = tslib_1.__read(presets_1_1.value, 2), name_1 = _e[0], config = _e[1];
369
404
  var state_1 = _loop_1(name_1, config);
370
405
  if (typeof state_1 === "object")
371
406
  return state_1.value;
372
407
  }
373
408
  }
374
- catch (e_2_1) { e_2 = { error: e_2_1 }; }
409
+ catch (e_3_1) { e_3 = { error: e_3_1 }; }
375
410
  finally {
376
411
  try {
377
412
  if (presets_1_1 && !presets_1_1.done && (_b = presets_1.return)) _b.call(presets_1);
378
413
  }
379
- finally { if (e_2) throw e_2.error; }
414
+ finally { if (e_3) throw e_3.error; }
380
415
  }
381
416
  }
382
417
  }
383
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
418
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
384
419
  finally {
385
420
  try {
386
- if (CHART_TYPES_1_1 && !CHART_TYPES_1_1.done && (_a = CHART_TYPES_1.return)) _a.call(CHART_TYPES_1);
421
+ if (CHART_TYPES_2_1 && !CHART_TYPES_2_1.done && (_a = CHART_TYPES_2.return)) _a.call(CHART_TYPES_2);
387
422
  }
388
- finally { if (e_1) throw e_1.error; }
423
+ finally { if (e_2) throw e_2.error; }
389
424
  }
390
425
  var chartType = (_c = spec.chartType) !== null && _c !== void 0 ? _c : "";
391
426
  return chartType.charAt(0).toUpperCase() + chartType.slice(1);
@@ -1 +1 @@
1
- {"version":3,"file":"basic-chart.d.ts","sourceRoot":"","sources":["../../../../plotly/basic-chart/basic-chart.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAiD,MAAM,OAAO,CAAC;AAEtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AA+ZxD,MAAM,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAmGnD,eAAO,MAAM,UAAU,GAAI,gPAkBxB,eAAe,sBA2rFjB,CAAC"}
1
+ {"version":3,"file":"basic-chart.d.ts","sourceRoot":"","sources":["../../../../plotly/basic-chart/basic-chart.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAiD,MAAM,OAAO,CAAC;AAEtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAkcxD,MAAM,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAmGnD,eAAO,MAAM,UAAU,GAAI,gPAkBxB,eAAe,sBA8rFjB,CAAC"}
@@ -209,7 +209,7 @@ var withTextMode = function (mode) {
209
209
  return base.split("+").includes("text") ? base : "".concat(base, "+text");
210
210
  };
211
211
  var applyDataLabelsToTracePlotly = function (trace, opts, chartType, sourceNumberFormat, locale) {
212
- var _a, _b, _c;
212
+ var _a, _b, _c, _d;
213
213
  if (!(opts === null || opts === void 0 ? void 0 : opts.show))
214
214
  return trace;
215
215
  var next = tslib_1.__assign({}, trace);
@@ -233,10 +233,14 @@ var applyDataLabelsToTracePlotly = function (trace, opts, chartType, sourceNumbe
233
233
  parts.push("percent");
234
234
  next.textinfo = parts.length ? parts.join("+") : "value";
235
235
  next.textposition = position;
236
+ if (opts.textFormat) {
237
+ var fmt = opts.textFormat;
238
+ next.textfont = tslib_1.__assign(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({}, ((_b = next.textfont) !== null && _b !== void 0 ? _b : {})), (fmt.fontFamily ? { family: fmt.fontFamily } : {})), (typeof fmt.fontSize === "number" && fmt.fontSize > 0 ? { size: fmt.fontSize } : {})), (fmt.color ? { color: fmt.color } : {}));
239
+ }
236
240
  // Values format like their source cells (or the authored `<c:numFmt>`):
237
241
  // plotly's own `%{value}` is a raw number, so the formatted strings
238
242
  // ride on `text` and a `texttemplate` mirrors the textinfo parts.
239
- var pattern_1 = (_b = opts.numberFormatPattern) !== null && _b !== void 0 ? _b : sourceNumberFormat;
243
+ var pattern_1 = (_c = opts.numberFormatPattern) !== null && _c !== void 0 ? _c : sourceNumberFormat;
240
244
  if (pattern_1) {
241
245
  var values = Array.isArray(next.values) ? next.values : [];
242
246
  next.text = values.map(function (v) {
@@ -255,7 +259,7 @@ var applyDataLabelsToTracePlotly = function (trace, opts, chartType, sourceNumbe
255
259
  // with the d3-format mini-language, but our patterns are
256
260
  // SpreadsheetML — easier to pre-format the strings. Without an
257
261
  // authored pattern the labels link to the source-cell format.
258
- var pattern_2 = (_c = opts.numberFormatPattern) !== null && _c !== void 0 ? _c : sourceNumberFormat;
262
+ var pattern_2 = (_d = opts.numberFormatPattern) !== null && _d !== void 0 ? _d : sourceNumberFormat;
259
263
  // Horizontal bars carry their values on `x`.
260
264
  var values = next.orientation === "h" ? next.x : next.y;
261
265
  var vals = Array.isArray(values) ? values : [];
@@ -270,6 +274,40 @@ var applyDataLabelsToTracePlotly = function (trace, opts, chartType, sourceNumbe
270
274
  if (isPoint)
271
275
  next.mode = withTextMode(next.mode);
272
276
  }
277
+ return applyDataLabelFontPlotly(next, opts.textFormat);
278
+ };
279
+ /**
280
+ * Excel's Format Data Labels → Font for a plotly trace: `textfont` carries
281
+ * family / size / colour, bold / italic are pseudo-HTML tags around each
282
+ * label (plotly fonts have no weight) — rowsncolumns/spreadsheet#1105.
283
+ */
284
+ var applyDataLabelFontPlotly = function (trace, fmt) {
285
+ var _a;
286
+ if (!fmt)
287
+ return trace;
288
+ var next = tslib_1.__assign({}, trace);
289
+ var textfont = tslib_1.__assign({}, ((_a = next.textfont) !== null && _a !== void 0 ? _a : {}));
290
+ if (fmt.fontFamily)
291
+ textfont.family = fmt.fontFamily;
292
+ if (typeof fmt.fontSize === "number" && fmt.fontSize > 0)
293
+ textfont.size = fmt.fontSize;
294
+ if (fmt.color)
295
+ textfont.color = fmt.color;
296
+ if (Object.keys(textfont).length)
297
+ next.textfont = textfont;
298
+ var wrap = function (text) {
299
+ if (text === null || text === undefined || text === "")
300
+ return text;
301
+ var out = String(text);
302
+ if (fmt.italic)
303
+ out = "<i>".concat(out, "</i>");
304
+ if (fmt.bold)
305
+ out = "<b>".concat(out, "</b>");
306
+ return out;
307
+ };
308
+ if ((fmt.bold || fmt.italic) && next.text !== undefined) {
309
+ next.text = Array.isArray(next.text) ? next.text.map(wrap) : wrap(next.text);
310
+ }
273
311
  return next;
274
312
  };
275
313
  var BUBBLE_CHART_TYPES = new Set([
@@ -662,7 +700,8 @@ var BasicChart = function (_a) {
662
700
  : undefined;
663
701
  var withLabels = function (trace) {
664
702
  return labelText
665
- ? tslib_1.__assign(tslib_1.__assign({}, trace), { mode: withTextMode(trace.mode), text: labelText, textposition: labelPosition }) : trace;
703
+ ? applyDataLabelFontPlotly(tslib_1.__assign(tslib_1.__assign({}, trace), { mode: withTextMode(trace.mode), text: labelText, textposition: labelPosition }), labelOpts === null || labelOpts === void 0 ? void 0 : labelOpts.textFormat)
704
+ : trace;
666
705
  };
667
706
  if (isScatter_1) {
668
707
  // Per-series marker.symbol = "none" → pure line (no markers).
@@ -21,6 +21,16 @@ export type EChartComponentProps = ChartComponentProps & {
21
21
  * honored.
22
22
  */
23
23
  getFormattingFromRange?: ReturnType<typeof useSpreadsheetState>["getFormattingFromRange"];
24
+ /**
25
+ * Draw BAR_3D / LINE_3D / AREA_3D / SURFACE_3D specs through echarts-gl
26
+ * (WebGL). `false` keeps them on their 2-D fallback and never loads
27
+ * echarts-gl — for a page whose Content-Security-Policy has no
28
+ * `'unsafe-eval'`, which claygl needs. The spec keeps its
29
+ * `sourceChartType`, so the xlsx export still writes the 3-D chart. Pass
30
+ * the same value to `ChartEditor` so it hides the 3-D presets. Default
31
+ * `true`.
32
+ */
33
+ enable3D?: boolean;
24
34
  /**
25
35
  * Request edit chart
26
36
  * @param chart
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACd,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAE3E,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,GAAG;IACvD;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,wBAAwB,EAAE,UAAU,CAClC,OAAO,mBAAmB,CAC3B,CAAC,0BAA0B,CAAC,CAAC;IAC9B;;OAEG;IACH,wBAAwB,EAAE,UAAU,CAClC,OAAO,mBAAmB,CAC3B,CAAC,0BAA0B,CAAC,CAAC;IAC9B;;;;;OAKG;IACH,sBAAsB,CAAC,EAAE,UAAU,CACjC,OAAO,mBAAmB,CAC3B,CAAC,wBAAwB,CAAC,CAAC;IAC5B;;;OAGG;IACH,aAAa,CAAC,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IAC3C;;OAEG;IACH,kBAAkB,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,oBAAoB,CAAC,CAAC;CAC7E,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACd,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAE3E,MAAM,MAAM,oBAAoB,GAAG,mBAAmB,GAAG;IACvD;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,wBAAwB,EAAE,UAAU,CAClC,OAAO,mBAAmB,CAC3B,CAAC,0BAA0B,CAAC,CAAC;IAC9B;;OAEG;IACH,wBAAwB,EAAE,UAAU,CAClC,OAAO,mBAAmB,CAC3B,CAAC,0BAA0B,CAAC,CAAC;IAC9B;;;;;OAKG;IACH,sBAAsB,CAAC,EAAE,UAAU,CACjC,OAAO,mBAAmB,CAC3B,CAAC,wBAAwB,CAAC,CAAC;IAC5B;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,aAAa,CAAC,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI,CAAC;IAC3C;;OAEG;IACH,kBAAkB,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,oBAAoB,CAAC,CAAC;CAC7E,CAAC"}
@@ -1,5 +1,11 @@
1
1
  export type EchartsGlLoadState = "unloaded" | "loading" | "ready" | "failed";
2
2
  export declare const getEchartsGlState: () => EchartsGlLoadState;
3
+ /**
4
+ * Record that the loaded module failed at render time (echarts-gl threw
5
+ * from `setOption`), so the renderer keeps the 2-D fallback and never
6
+ * retries 3-D for the rest of the page's lifetime. Warns once per page.
7
+ */
8
+ export declare const markEchartsGlFailed: (error?: unknown) => void;
3
9
  /**
4
10
  * Kick off (or join) the echarts-gl dynamic import and register the 3-D
5
11
  * charts/components the renderer uses. Resolves true when 3-D rendering is
@@ -1 +1 @@
1
- {"version":3,"file":"echarts-gl-loader.d.ts","sourceRoot":"","sources":["../../../utils/echarts-gl-loader.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAK7E,eAAO,MAAM,iBAAiB,QAAO,kBAA2B,CAAC;AAEjE;;;;GAIG;AACH,eAAO,MAAM,aAAa,QAAO,OAAO,CAAC,OAAO,CAyB/C,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,8BAA8B,QAAO,IAGjD,CAAC"}
1
+ {"version":3,"file":"echarts-gl-loader.d.ts","sourceRoot":"","sources":["../../../utils/echarts-gl-loader.ts"],"names":[],"mappings":"AAqBA,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAK7E,eAAO,MAAM,iBAAiB,QAAO,kBAA2B,CAAC;AAgBjE;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,QAAQ,OAAO,KAAG,IAUrD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,QAAO,OAAO,CAAC,OAAO,CA8B/C,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,8BAA8B,QAAO,IAGjD,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.__resetEchartsGlLoaderForTests = exports.loadEchartsGl = exports.getEchartsGlState = void 0;
3
+ exports.__resetEchartsGlLoaderForTests = exports.loadEchartsGl = exports.markEchartsGlFailed = exports.getEchartsGlState = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  /**
6
6
  * Lazy loader for echarts-gl.
@@ -11,6 +11,14 @@ var tslib_1 = require("tslib");
11
11
  * draws the 2-D fallback immediately, and upgrades to 3-D when the module
12
12
  * resolves. A failed import latches the "failed" state so the renderer
13
13
  * keeps the 2-D fallback without retrying on every update.
14
+ *
15
+ * A page whose Content-Security-Policy has no `'unsafe-eval'` is treated
16
+ * the same way: echarts-gl's `EffectCompositor` makes claygl compile its
17
+ * size expressions with `new Function`, which the browser blocks there
18
+ * (`EvalError`, surfaced by claygl as "Invalid expression."). The import
19
+ * itself still succeeds, so the loader probes `new Function` once before
20
+ * importing and latches "failed" instead of letting `setOption` throw
21
+ * later (rowsncolumns/spreadsheet#1187).
14
22
  */
15
23
  var components_1 = require("echarts/components");
16
24
  var echarts = tslib_1.__importStar(require("echarts/core"));
@@ -18,6 +26,34 @@ var state = "unloaded";
18
26
  var loadPromise = null;
19
27
  var getEchartsGlState = function () { return state; };
20
28
  exports.getEchartsGlState = getEchartsGlState;
29
+ /**
30
+ * True when the page lets scripts construct functions from source — what
31
+ * claygl needs for every GL chart. False under a CSP whose `script-src`
32
+ * lacks `'unsafe-eval'`.
33
+ */
34
+ var canEvaluateCode = function () {
35
+ try {
36
+ new Function("");
37
+ return true;
38
+ }
39
+ catch (_a) {
40
+ return false;
41
+ }
42
+ };
43
+ /**
44
+ * Record that the loaded module failed at render time (echarts-gl threw
45
+ * from `setOption`), so the renderer keeps the 2-D fallback and never
46
+ * retries 3-D for the rest of the page's lifetime. Warns once per page.
47
+ */
48
+ var markEchartsGlFailed = function (error) {
49
+ if (state !== "failed") {
50
+ // eslint-disable-next-line no-console
51
+ console.warn("echarts-gl failed to render a 3-D chart; 3-D charts render as their 2-D fallback on this page.", error);
52
+ }
53
+ state = "failed";
54
+ loadPromise = Promise.resolve(false);
55
+ };
56
+ exports.markEchartsGlFailed = markEchartsGlFailed;
21
57
  /**
22
58
  * Kick off (or join) the echarts-gl dynamic import and register the 3-D
23
59
  * charts/components the renderer uses. Resolves true when 3-D rendering is
@@ -25,6 +61,11 @@ exports.getEchartsGlState = getEchartsGlState;
25
61
  */
26
62
  var loadEchartsGl = function () {
27
63
  if (!loadPromise) {
64
+ if (!canEvaluateCode()) {
65
+ state = "failed";
66
+ loadPromise = Promise.resolve(false);
67
+ return loadPromise;
68
+ }
28
69
  state = "loading";
29
70
  loadPromise = Promise.all([
30
71
  Promise.resolve().then(function () { return tslib_1.__importStar(require("echarts-gl/charts")); }),
@@ -1,4 +1,24 @@
1
1
  import type { LegendComponentOption } from "echarts";
2
+ /**
3
+ * A complete echarts `textStyle` for a text element: the authored
4
+ * `ChartTextFormat` over the theme defaults, with every key present so a
5
+ * cleared setting (bold off, size blank) resets the element instead of
6
+ * keeping the previous merged value (rowsncolumns/spreadsheet#1105).
7
+ * Underline / strikethrough have no canvas text decoration in echarts and
8
+ * are not drawn.
9
+ */
10
+ export declare const themedTextStyle: (fmt: any, defaults: {
11
+ color: string;
12
+ fontSize: number;
13
+ fontFamily?: string;
14
+ fontWeight?: "normal" | "bold";
15
+ }) => {
16
+ color: any;
17
+ fontFamily: any;
18
+ fontSize: any;
19
+ fontWeight: "bold" | "normal";
20
+ fontStyle: "italic" | "normal";
21
+ };
2
22
  /** Build an echarts `textStyle` from a parsed `ChartTextFormat`. */
3
23
  export declare const textFormatToEchartsTextStyle: (fmt: any) => Record<string, any> | undefined;
4
24
  export declare const applyLegendOverrides: (legend: LegendComponentOption, opts: any) => LegendComponentOption;
@@ -1 +1 @@
1
- {"version":3,"file":"overrides.d.ts","sourceRoot":"","sources":["../../../utils/overrides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAWrD,oEAAoE;AACpE,eAAO,MAAM,4BAA4B,GAAI,KAAK,GAAG,oCASpD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,qBAAqB,EAC7B,MAAM,GAAG,KACR,qBA6CF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM,GAAG,EACT,MAAM,GAAG,EACT,sBAAsB,MAAM,EAC5B,SAAS,MAAM,QA4BhB,CAAC;AAgBF,eAAO,MAAM,kBAAkB,GAC7B,MAAM,GAAG,EACT,SAAS,MAAM,EAEf,eAAa,MACT,QAAQ,GAAG,WAoDhB,CAAC;AAgCF;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,GAAI,CAAC,EACvC,YAAY,CAAC,GAAG,IAAI,GAAG,SAAS,EAChC,QAAQ;IAAE,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,KACnD,CAAC,GAAG,IAAI,GAAG,SAA6C,CAAC;AAE5D,eAAO,MAAM,sBAAsB,GACjC,MAAM,GAAG,EACT,aAAa,MAAM,EACnB,SAAS,MAAM;;;iCAlGH,GAAG;aA+GhB,CAAC"}
1
+ {"version":3,"file":"overrides.d.ts","sourceRoot":"","sources":["../../../utils/overrides.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAWrD;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,GAC1B,KAAK,GAAG,EACR,UAAU;IACR,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CAChC;;;;gBASG,MAAM,GACN,QAAQ;eACsC,QAAQ,GAAG,QAAQ;CACrE,CAAC;AAEH,oEAAoE;AACpE,eAAO,MAAM,4BAA4B,GAAI,KAAK,GAAG,oCASpD,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,QAAQ,qBAAqB,EAC7B,MAAM,GAAG,KACR,qBA6CF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAC7B,MAAM,GAAG,EACT,MAAM,GAAG,EACT,sBAAsB,MAAM,EAC5B,SAAS,MAAM,QA4BhB,CAAC;AAgBF,eAAO,MAAM,kBAAkB,GAC7B,MAAM,GAAG,EACT,SAAS,MAAM,EAEf,eAAa,MACT,QAAQ,GAAG,WAoDhB,CAAC;AAgCF;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,GAAI,CAAC,EACvC,YAAY,CAAC,GAAG,IAAI,GAAG,SAAS,EAChC,QAAQ;IAAE,UAAU,CAAC,EAAE,CAAC,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,KACnD,CAAC,GAAG,IAAI,GAAG,SAA6C,CAAC;AAE5D,eAAO,MAAM,sBAAsB,GACjC,MAAM,GAAG,EACT,aAAa,MAAM,EACnB,SAAS,MAAM;;;iCAlGH,GAAG;aAoHhB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildSeriesLabelOption = exports.resolveSeriesDataLabels = exports.dataLabelFormatter = exports.applyAxisOverrides = exports.applyLegendOverrides = exports.textFormatToEchartsTextStyle = void 0;
3
+ exports.buildSeriesLabelOption = exports.resolveSeriesDataLabels = exports.dataLabelFormatter = exports.applyAxisOverrides = exports.applyLegendOverrides = exports.textFormatToEchartsTextStyle = exports.themedTextStyle = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var axis_number_format_1 = require("./axis-number-format");
6
6
  // Map ChartSpec.legend / dataLabels / axisOptions to ECharts option
@@ -9,6 +9,27 @@ var axis_number_format_1 = require("./axis-number-format");
9
9
  // option assembly and the bubble / hierarchy / radar / stock early
10
10
  // branches in `basic-chart.tsx` so every chart type honors the same
11
11
  // spec-level overrides.
12
+ /**
13
+ * A complete echarts `textStyle` for a text element: the authored
14
+ * `ChartTextFormat` over the theme defaults, with every key present so a
15
+ * cleared setting (bold off, size blank) resets the element instead of
16
+ * keeping the previous merged value (rowsncolumns/spreadsheet#1105).
17
+ * Underline / strikethrough have no canvas text decoration in echarts and
18
+ * are not drawn.
19
+ */
20
+ var themedTextStyle = function (fmt, defaults) {
21
+ var _a, _b, _c, _d;
22
+ return ({
23
+ color: (_a = fmt === null || fmt === void 0 ? void 0 : fmt.color) !== null && _a !== void 0 ? _a : defaults.color,
24
+ fontFamily: (_c = (_b = fmt === null || fmt === void 0 ? void 0 : fmt.fontFamily) !== null && _b !== void 0 ? _b : defaults.fontFamily) !== null && _c !== void 0 ? _c : "sans-serif",
25
+ fontSize: typeof (fmt === null || fmt === void 0 ? void 0 : fmt.fontSize) === "number" && fmt.fontSize > 0
26
+ ? fmt.fontSize
27
+ : defaults.fontSize,
28
+ fontWeight: (fmt ? (fmt.bold ? "bold" : "normal") : (_d = defaults.fontWeight) !== null && _d !== void 0 ? _d : "normal"),
29
+ fontStyle: ((fmt === null || fmt === void 0 ? void 0 : fmt.italic) ? "italic" : "normal"),
30
+ });
31
+ };
32
+ exports.themedTextStyle = themedTextStyle;
12
33
  /** Build an echarts `textStyle` from a parsed `ChartTextFormat`. */
13
34
  var textFormatToEchartsTextStyle = function (fmt) {
14
35
  if (!fmt)
@@ -209,17 +230,17 @@ var POINT_SERIES_TYPES = new Set(["line", "scatter", "effectScatter"]);
209
230
  var resolveSeriesDataLabels = function (chartLevel, series) { var _a; return (_a = series === null || series === void 0 ? void 0 : series.dataLabels) !== null && _a !== void 0 ? _a : chartLevel; };
210
231
  exports.resolveSeriesDataLabels = resolveSeriesDataLabels;
211
232
  var buildSeriesLabelOption = function (opts, seriesType, locale) {
212
- var _a;
233
+ var _a, _b;
213
234
  if (!(opts === null || opts === void 0 ? void 0 : opts.show))
214
235
  return undefined;
215
236
  var positions = seriesType && POINT_SERIES_TYPES.has(seriesType)
216
237
  ? ECHARTS_POINT_DLBL_POS
217
238
  : ECHARTS_DLBL_POS;
218
239
  var position = (_a = (opts.position && positions[opts.position])) !== null && _a !== void 0 ? _a : "top";
219
- return {
220
- show: true,
221
- position: position,
222
- formatter: (0, exports.dataLabelFormatter)(opts, locale),
223
- };
240
+ // Excel's Format Data Labels → Font: colour, family, size, bold, italic
241
+ // (rowsncolumns/spreadsheet#1105). Keys are only written when authored so
242
+ // a label keeps its series-aware default colour otherwise.
243
+ var font = (_b = (0, exports.textFormatToEchartsTextStyle)(opts.textFormat)) !== null && _b !== void 0 ? _b : {};
244
+ return tslib_1.__assign({ show: true, position: position, formatter: (0, exports.dataLabelFormatter)(opts, locale) }, font);
224
245
  };
225
246
  exports.buildSeriesLabelOption = buildSeriesLabelOption;
@@ -44,14 +44,25 @@ export declare const normalize3DSourceType: (sourceChartType?: string | null) =>
44
44
  export declare const is3DSpec: (spec: {
45
45
  sourceChartType?: string | null;
46
46
  } | null | undefined) => boolean;
47
+ /** Host opt-out of the WebGL pipeline (`enable3D` on the renderer / editor). */
48
+ export type ThreeDRenderOptions = {
49
+ /**
50
+ * `false` keeps every spec on its 2-D fallback: echarts-gl is never
51
+ * loaded and the Chart editor offers no echarts-gl preset. The spec's
52
+ * `sourceChartType` is untouched, so the xlsx export still writes the
53
+ * 3-D chart (rowsncolumns/spreadsheet#1187). Default `true`.
54
+ */
55
+ enable3D?: boolean;
56
+ };
47
57
  /**
48
58
  * Map a `sourceChartType` token to the echarts-gl series kind it renders
49
59
  * as, or null when the 3-D pipeline should not run:
50
60
  * - PIE_3D — echarts-gl has no pie3D, so the 2-D pie fallback stays.
51
61
  * - AREA_3D — echarts-gl has no area3D; rendered as line3D.
52
62
  * - non-3-D / unknown tokens.
63
+ * - any token when the host turned 3-D off (`enable3D: false`).
53
64
  */
54
- export declare const resolve3DRenderKind: (sourceChartType?: string | null) => ThreeDRenderKind | null;
65
+ export declare const resolve3DRenderKind: (sourceChartType?: string | null, options?: ThreeDRenderOptions) => ThreeDRenderKind | null;
55
66
  /** Excel's Contour: the surface grid seen from above, as a flat heatmap. */
56
67
  export declare const isContourSpec: (spec: {
57
68
  sourceChartType?: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"three-d.d.ts","sourceRoot":"","sources":["../../../utils/three-d.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,QAAA,MAAM,cAAc,8EAOV,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,wDAAwD;AACxD,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAI9D;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAChC,kBAAkB,MAAM,GAAG,IAAI,KAC9B,gBAAgB,GAAG,IAIrB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GACnB,MAAM;IAAE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,KAC3D,OAAgE,CAAC;AAEpE;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,GAC9B,kBAAkB,MAAM,GAAG,IAAI,KAC9B,gBAAgB,GAAG,IAcrB,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,aAAa,GACxB,MAAM;IAAE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,KAC3D,OAAqE,CAAC;AAEzE,uFAAuF;AACvF,MAAM,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;AAE1D;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,iBAAiB,EAAE,KAC1B,YAAY,EAcd,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;CACvC,CAAC;AAEF,wDAAwD;AACxD,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAKnD,8DAA8D;AAC9D,eAAO,MAAM,gBAAgB,GAAI,QAAQ,iBAAiB,EAAE,KAAG,MACO,CAAC;AAEvE;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,iBAAiB,EAAE,KAAG,WAAW,EAUvE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,iBAAiB,EAAE,KAC1B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,WAAW,EAAE,CAAA;CAAE,EASpC,CAAC;AAEL;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,iBAAiB,EAAE,KAC1B,WAAW,EAcb,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,WAAW,EAAE,KAAG,CAAC,MAAM,EAAE,MAAM,CASrE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAY/C,CAAC"}
1
+ {"version":3,"file":"three-d.d.ts","sourceRoot":"","sources":["../../../utils/three-d.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,QAAA,MAAM,cAAc,8EAOV,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,wDAAwD;AACxD,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,CAAC;AAI9D;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAChC,kBAAkB,MAAM,GAAG,IAAI,KAC9B,gBAAgB,GAAG,IAIrB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GACnB,MAAM;IAAE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,KAC3D,OAAgE,CAAC;AAEpE,gFAAgF;AAChF,MAAM,MAAM,mBAAmB,GAAG;IAChC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,GAC9B,kBAAkB,MAAM,GAAG,IAAI,EAC/B,UAAU,mBAAmB,KAC5B,gBAAgB,GAAG,IAerB,CAAC;AAEF,4EAA4E;AAC5E,eAAO,MAAM,aAAa,GACxB,MAAM;IAAE,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,KAC3D,OAAqE,CAAC;AAEzE,uFAAuF;AACvF,MAAM,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,CAAC;AAE1D;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,iBAAiB,EAAE,KAC1B,YAAY,EAcd,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,MAAM,EAAE,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;CACvC,CAAC;AAEF,wDAAwD;AACxD,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAKnD,8DAA8D;AAC9D,eAAO,MAAM,gBAAgB,GAAI,QAAQ,iBAAiB,EAAE,KAAG,MACO,CAAC;AAEvE;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,iBAAiB,EAAE,KAAG,WAAW,EAUvE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,GAC5B,QAAQ,iBAAiB,EAAE,KAC1B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,WAAW,EAAE,CAAA;CAAE,EASpC,CAAC;AAEL;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,iBAAiB,EAAE,KAC1B,WAAW,EAcb,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,WAAW,EAAE,KAAG,CAAC,MAAM,EAAE,MAAM,CASrE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAY/C,CAAC"}
@@ -64,8 +64,11 @@ exports.is3DSpec = is3DSpec;
64
64
  * - PIE_3D — echarts-gl has no pie3D, so the 2-D pie fallback stays.
65
65
  * - AREA_3D — echarts-gl has no area3D; rendered as line3D.
66
66
  * - non-3-D / unknown tokens.
67
+ * - any token when the host turned 3-D off (`enable3D: false`).
67
68
  */
68
- var resolve3DRenderKind = function (sourceChartType) {
69
+ var resolve3DRenderKind = function (sourceChartType, options) {
70
+ if ((options === null || options === void 0 ? void 0 : options.enable3D) === false)
71
+ return null;
69
72
  switch ((0, exports.normalize3DSourceType)(sourceChartType)) {
70
73
  case "BAR_3D":
71
74
  return "bar3D";
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
2
  import type { EChartComponentProps } from "../types";
3
3
  export type BasicChartProps = EChartComponentProps;
4
- export declare const BasicChart: ({ width, height, chart, theme, isDarkMode, sheetId, readonly, getDomainValuesFromRange, getSeriesValuesFromRange, getFormattingFromRange, onDeleteChart, onUpdateChart, onRequestEdit, onRequestCalculate, isSelected, fieldButtons, locale, }: BasicChartProps) => React.JSX.Element;
4
+ export declare const BasicChart: ({ width, height, chart, theme, isDarkMode, sheetId, readonly, getDomainValuesFromRange, getSeriesValuesFromRange, getFormattingFromRange, onDeleteChart, onUpdateChart, onRequestEdit, onRequestCalculate, isSelected, fieldButtons, locale, enable3D, }: BasicChartProps) => React.JSX.Element;
5
5
  //# sourceMappingURL=basic-chart.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"basic-chart.d.ts","sourceRoot":"","sources":["../../../basic-chart/basic-chart.tsx"],"names":[],"mappings":"AAkEA,OAAO,KAAiD,MAAM,OAAO,CAAC;AAEtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAuTrD,MAAM,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAiGnD,eAAO,MAAM,UAAU,GAAI,gPAkBxB,eAAe,sBAsvHjB,CAAC"}
1
+ {"version":3,"file":"basic-chart.d.ts","sourceRoot":"","sources":["../../../basic-chart/basic-chart.tsx"],"names":[],"mappings":"AAkEA,OAAO,KAAiD,MAAM,OAAO,CAAC;AAEtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAyTrD,MAAM,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAiGnD,eAAO,MAAM,UAAU,GAAI,0PAmBxB,eAAe,sBA2wHjB,CAAC"}