@rowsncolumns/charts 27.0.34 → 28.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/dist/cjs/atoms/pivot-chart.atom.d.ts +14 -0
  2. package/dist/cjs/atoms/pivot-chart.atom.d.ts.map +1 -0
  3. package/dist/cjs/atoms/pivot-chart.atom.js +9 -0
  4. package/dist/cjs/basic-chart/basic-chart.d.ts +1 -1
  5. package/dist/cjs/basic-chart/basic-chart.d.ts.map +1 -1
  6. package/dist/cjs/basic-chart/basic-chart.js +863 -371
  7. package/dist/cjs/components/dialogs/pivot-chart-dialog.d.ts +39 -0
  8. package/dist/cjs/components/dialogs/pivot-chart-dialog.d.ts.map +1 -0
  9. package/dist/cjs/components/dialogs/pivot-chart-dialog.js +100 -0
  10. package/dist/cjs/components/editors/chart-editor.d.ts +13 -1
  11. package/dist/cjs/components/editors/chart-editor.d.ts.map +1 -1
  12. package/dist/cjs/components/editors/chart-editor.js +225 -59
  13. package/dist/cjs/config.d.ts.map +1 -1
  14. package/dist/cjs/config.js +149 -12
  15. package/dist/cjs/hooks/use-charts.d.ts +21 -6
  16. package/dist/cjs/hooks/use-charts.d.ts.map +1 -1
  17. package/dist/cjs/hooks/use-charts.js +13 -1
  18. package/dist/cjs/hooks/use-on-create-chart.d.ts.map +1 -1
  19. package/dist/cjs/hooks/use-on-create-chart.js +7 -1
  20. package/dist/cjs/hooks/use-on-move-chart-to-sheet.d.ts +12 -0
  21. package/dist/cjs/hooks/use-on-move-chart-to-sheet.d.ts.map +1 -0
  22. package/dist/cjs/hooks/use-on-move-chart-to-sheet.js +26 -0
  23. package/dist/cjs/hooks/use-on-move-chart.d.ts +1 -1
  24. package/dist/cjs/hooks/use-on-move-chart.d.ts.map +1 -1
  25. package/dist/cjs/hooks/use-on-move-chart.js +2 -2
  26. package/dist/cjs/hooks/use-on-resize-chart.d.ts +1 -1
  27. package/dist/cjs/hooks/use-on-resize-chart.d.ts.map +1 -1
  28. package/dist/cjs/hooks/use-on-resize-chart.js +2 -2
  29. package/dist/cjs/index.d.ts +11 -0
  30. package/dist/cjs/index.d.ts.map +1 -1
  31. package/dist/cjs/index.js +34 -1
  32. package/dist/cjs/interface/create-chart.d.ts.map +1 -1
  33. package/dist/cjs/interface/create-chart.js +33 -42
  34. package/dist/cjs/interface/delete-chart.d.ts.map +1 -1
  35. package/dist/cjs/interface/delete-chart.js +4 -0
  36. package/dist/cjs/interface/move-chart-to-sheet.d.ts +13 -0
  37. package/dist/cjs/interface/move-chart-to-sheet.d.ts.map +1 -0
  38. package/dist/cjs/interface/move-chart-to-sheet.js +136 -0
  39. package/dist/cjs/interface/move-chart.d.ts +2 -2
  40. package/dist/cjs/interface/move-chart.d.ts.map +1 -1
  41. package/dist/cjs/interface/move-chart.js +7 -1
  42. package/dist/cjs/interface/resize-chart.d.ts +2 -2
  43. package/dist/cjs/interface/resize-chart.d.ts.map +1 -1
  44. package/dist/cjs/interface/resize-chart.js +7 -1
  45. package/dist/cjs/interface/update-chart.d.ts.map +1 -1
  46. package/dist/cjs/interface/update-chart.js +4 -0
  47. package/dist/cjs/plotly/basic-chart/basic-chart.d.ts +1 -1
  48. package/dist/cjs/plotly/basic-chart/basic-chart.d.ts.map +1 -1
  49. package/dist/cjs/plotly/basic-chart/basic-chart.js +970 -585
  50. package/dist/cjs/plotly/basic-chart/helpers.d.ts.map +1 -1
  51. package/dist/cjs/plotly/basic-chart/helpers.js +3 -0
  52. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  53. package/dist/cjs/types.d.ts +7 -0
  54. package/dist/cjs/types.d.ts.map +1 -1
  55. package/dist/cjs/utils/axis-number-format.d.ts +69 -0
  56. package/dist/cjs/utils/axis-number-format.d.ts.map +1 -0
  57. package/dist/cjs/utils/axis-number-format.js +217 -0
  58. package/dist/cjs/utils/category-levels.d.ts +27 -0
  59. package/dist/cjs/utils/category-levels.d.ts.map +1 -0
  60. package/dist/cjs/utils/category-levels.js +80 -0
  61. package/dist/cjs/utils/chart-image.d.ts +8 -0
  62. package/dist/cjs/utils/chart-image.d.ts.map +1 -0
  63. package/dist/cjs/utils/chart-image.js +28 -0
  64. package/dist/cjs/utils/chart-orientation.d.ts +67 -0
  65. package/dist/cjs/utils/chart-orientation.d.ts.map +1 -0
  66. package/dist/cjs/utils/chart-orientation.js +265 -0
  67. package/dist/cjs/utils/chart-spec-utils.d.ts +3 -0
  68. package/dist/cjs/utils/chart-spec-utils.d.ts.map +1 -1
  69. package/dist/cjs/utils/chart-spec-utils.js +12 -4
  70. package/dist/cjs/utils/chart-styles.d.ts +75 -0
  71. package/dist/cjs/utils/chart-styles.d.ts.map +1 -0
  72. package/dist/cjs/utils/chart-styles.js +283 -0
  73. package/dist/cjs/utils/empty-cells.d.ts +30 -0
  74. package/dist/cjs/utils/empty-cells.d.ts.map +1 -0
  75. package/dist/cjs/utils/empty-cells.js +91 -0
  76. package/dist/cjs/utils/overrides.d.ts +6 -1
  77. package/dist/cjs/utils/overrides.d.ts.map +1 -1
  78. package/dist/cjs/utils/overrides.js +19 -7
  79. package/dist/cjs/utils/pie-explosion.d.ts +30 -0
  80. package/dist/cjs/utils/pie-explosion.d.ts.map +1 -0
  81. package/dist/cjs/utils/pie-explosion.js +55 -0
  82. package/dist/cjs/utils/plotly-click.d.ts +34 -0
  83. package/dist/cjs/utils/plotly-click.d.ts.map +1 -0
  84. package/dist/cjs/utils/plotly-click.js +49 -0
  85. package/dist/cjs/utils/plotly-surface.d.ts +14 -0
  86. package/dist/cjs/utils/plotly-surface.d.ts.map +1 -0
  87. package/dist/cjs/utils/plotly-surface.js +64 -0
  88. package/dist/cjs/utils/plotly-title.d.ts +12 -0
  89. package/dist/cjs/utils/plotly-title.d.ts.map +1 -0
  90. package/dist/cjs/utils/plotly-title.js +24 -0
  91. package/dist/cjs/utils/series-click.d.ts +39 -0
  92. package/dist/cjs/utils/series-click.d.ts.map +1 -0
  93. package/dist/cjs/utils/series-click.js +75 -0
  94. package/dist/cjs/utils/three-d.d.ts +17 -1
  95. package/dist/cjs/utils/three-d.d.ts.map +1 -1
  96. package/dist/cjs/utils/three-d.js +32 -4
  97. package/dist/esm/atoms/pivot-chart.atom.d.ts +14 -0
  98. package/dist/esm/atoms/pivot-chart.atom.d.ts.map +1 -0
  99. package/dist/esm/atoms/pivot-chart.atom.js +4 -0
  100. package/dist/esm/basic-chart/basic-chart.d.ts +1 -1
  101. package/dist/esm/basic-chart/basic-chart.d.ts.map +1 -1
  102. package/dist/esm/basic-chart/basic-chart.js +680 -178
  103. package/dist/esm/components/dialogs/pivot-chart-dialog.d.ts +39 -0
  104. package/dist/esm/components/dialogs/pivot-chart-dialog.d.ts.map +1 -0
  105. package/dist/esm/components/dialogs/pivot-chart-dialog.js +89 -0
  106. package/dist/esm/components/editors/chart-editor.d.ts +13 -1
  107. package/dist/esm/components/editors/chart-editor.d.ts.map +1 -1
  108. package/dist/esm/components/editors/chart-editor.js +164 -20
  109. package/dist/esm/config.d.ts.map +1 -1
  110. package/dist/esm/config.js +149 -12
  111. package/dist/esm/hooks/use-charts.d.ts +21 -6
  112. package/dist/esm/hooks/use-charts.d.ts.map +1 -1
  113. package/dist/esm/hooks/use-charts.js +13 -1
  114. package/dist/esm/hooks/use-on-create-chart.d.ts.map +1 -1
  115. package/dist/esm/hooks/use-on-create-chart.js +7 -1
  116. package/dist/esm/hooks/use-on-move-chart-to-sheet.d.ts +12 -0
  117. package/dist/esm/hooks/use-on-move-chart-to-sheet.d.ts.map +1 -0
  118. package/dist/esm/hooks/use-on-move-chart-to-sheet.js +19 -0
  119. package/dist/esm/hooks/use-on-move-chart.d.ts +1 -1
  120. package/dist/esm/hooks/use-on-move-chart.d.ts.map +1 -1
  121. package/dist/esm/hooks/use-on-move-chart.js +2 -2
  122. package/dist/esm/hooks/use-on-resize-chart.d.ts +1 -1
  123. package/dist/esm/hooks/use-on-resize-chart.d.ts.map +1 -1
  124. package/dist/esm/hooks/use-on-resize-chart.js +2 -2
  125. package/dist/esm/index.d.ts +11 -0
  126. package/dist/esm/index.d.ts.map +1 -1
  127. package/dist/esm/index.js +14 -0
  128. package/dist/esm/interface/create-chart.d.ts.map +1 -1
  129. package/dist/esm/interface/create-chart.js +36 -58
  130. package/dist/esm/interface/delete-chart.d.ts.map +1 -1
  131. package/dist/esm/interface/delete-chart.js +4 -0
  132. package/dist/esm/interface/move-chart-to-sheet.d.ts +13 -0
  133. package/dist/esm/interface/move-chart-to-sheet.d.ts.map +1 -0
  134. package/dist/esm/interface/move-chart-to-sheet.js +126 -0
  135. package/dist/esm/interface/move-chart.d.ts +2 -2
  136. package/dist/esm/interface/move-chart.d.ts.map +1 -1
  137. package/dist/esm/interface/move-chart.js +7 -1
  138. package/dist/esm/interface/resize-chart.d.ts +2 -2
  139. package/dist/esm/interface/resize-chart.d.ts.map +1 -1
  140. package/dist/esm/interface/resize-chart.js +7 -1
  141. package/dist/esm/interface/update-chart.d.ts.map +1 -1
  142. package/dist/esm/interface/update-chart.js +4 -0
  143. package/dist/esm/plotly/basic-chart/basic-chart.d.ts +1 -1
  144. package/dist/esm/plotly/basic-chart/basic-chart.d.ts.map +1 -1
  145. package/dist/esm/plotly/basic-chart/basic-chart.js +858 -463
  146. package/dist/esm/plotly/basic-chart/helpers.d.ts.map +1 -1
  147. package/dist/esm/plotly/basic-chart/helpers.js +3 -0
  148. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  149. package/dist/esm/types.d.ts +7 -0
  150. package/dist/esm/types.d.ts.map +1 -1
  151. package/dist/esm/utils/axis-number-format.d.ts +69 -0
  152. package/dist/esm/utils/axis-number-format.d.ts.map +1 -0
  153. package/dist/esm/utils/axis-number-format.js +170 -0
  154. package/dist/esm/utils/category-levels.d.ts +27 -0
  155. package/dist/esm/utils/category-levels.d.ts.map +1 -0
  156. package/dist/esm/utils/category-levels.js +65 -0
  157. package/dist/esm/utils/chart-image.d.ts +8 -0
  158. package/dist/esm/utils/chart-image.d.ts.map +1 -0
  159. package/dist/esm/utils/chart-image.js +24 -0
  160. package/dist/esm/utils/chart-orientation.d.ts +67 -0
  161. package/dist/esm/utils/chart-orientation.d.ts.map +1 -0
  162. package/dist/esm/utils/chart-orientation.js +234 -0
  163. package/dist/esm/utils/chart-spec-utils.d.ts +3 -0
  164. package/dist/esm/utils/chart-spec-utils.d.ts.map +1 -1
  165. package/dist/esm/utils/chart-spec-utils.js +10 -2
  166. package/dist/esm/utils/chart-styles.d.ts +75 -0
  167. package/dist/esm/utils/chart-styles.d.ts.map +1 -0
  168. package/dist/esm/utils/chart-styles.js +357 -0
  169. package/dist/esm/utils/empty-cells.d.ts +30 -0
  170. package/dist/esm/utils/empty-cells.d.ts.map +1 -0
  171. package/dist/esm/utils/empty-cells.js +67 -0
  172. package/dist/esm/utils/overrides.d.ts +6 -1
  173. package/dist/esm/utils/overrides.d.ts.map +1 -1
  174. package/dist/esm/utils/overrides.js +14 -2
  175. package/dist/esm/utils/pie-explosion.d.ts +30 -0
  176. package/dist/esm/utils/pie-explosion.d.ts.map +1 -0
  177. package/dist/esm/utils/pie-explosion.js +43 -0
  178. package/dist/esm/utils/plotly-click.d.ts +34 -0
  179. package/dist/esm/utils/plotly-click.d.ts.map +1 -0
  180. package/dist/esm/utils/plotly-click.js +44 -0
  181. package/dist/esm/utils/plotly-surface.d.ts +14 -0
  182. package/dist/esm/utils/plotly-surface.d.ts.map +1 -0
  183. package/dist/esm/utils/plotly-surface.js +45 -0
  184. package/dist/esm/utils/plotly-title.d.ts +12 -0
  185. package/dist/esm/utils/plotly-title.d.ts.map +1 -0
  186. package/dist/esm/utils/plotly-title.js +20 -0
  187. package/dist/esm/utils/series-click.d.ts +39 -0
  188. package/dist/esm/utils/series-click.d.ts.map +1 -0
  189. package/dist/esm/utils/series-click.js +66 -0
  190. package/dist/esm/utils/three-d.d.ts +17 -1
  191. package/dist/esm/utils/three-d.d.ts.map +1 -1
  192. package/dist/esm/utils/three-d.js +29 -3
  193. package/package.json +16 -12
@@ -0,0 +1,265 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.switchRowColumn = exports.canSwitchRowColumn = exports.rectangularSeriesBounds = exports.deriveChartSeriesFromRange = exports.pickSeriesOrientationForRange = exports.flipSeriesOrientation = exports.inferSeriesOrientation = exports.cellLabelGetterFromRangeReader = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var chart_spec_utils_1 = require("./chart-spec-utils");
6
+ /**
7
+ * Adapt a range reader (the renderers' `getDomainValuesFromRange`) into
8
+ * the single-cell label getter the orientation helpers take.
9
+ */
10
+ var cellLabelGetterFromRangeReader = function (readRange) {
11
+ return function (sheetId, rowIndex, columnIndex) {
12
+ var _a = tslib_1.__read(readRange({
13
+ sheetId: sheetId,
14
+ startRowIndex: rowIndex,
15
+ endRowIndex: rowIndex,
16
+ startColumnIndex: columnIndex,
17
+ endColumnIndex: columnIndex,
18
+ }, "SHOW_ALL"), 1), value = _a[0];
19
+ return value == null ? undefined : String(value);
20
+ };
21
+ };
22
+ exports.cellLabelGetterFromRangeReader = cellLabelGetterFromRangeReader;
23
+ var isSingleRow = function (range) {
24
+ return range.startRowIndex === range.endRowIndex;
25
+ };
26
+ var isSingleColumn = function (range) {
27
+ return range.startColumnIndex === range.endColumnIndex;
28
+ };
29
+ /**
30
+ * Which way a chart's series run. The explicit flag wins; otherwise a
31
+ * chart whose every series is a single row spanning several columns is
32
+ * Excel's series-in-rows shape (OOXML carries no flag — each `<c:ser>` is
33
+ * its own reference — so imported charts are read this way).
34
+ */
35
+ var inferSeriesOrientation = function (spec) {
36
+ if (spec.seriesOrientation)
37
+ return spec.seriesOrientation;
38
+ if (!(0, chart_spec_utils_1.isBasicChartSpec)(spec))
39
+ return "columns";
40
+ var sources = spec.series.flatMap(function (entry) { var _a; return (_a = entry.sources) !== null && _a !== void 0 ? _a : []; });
41
+ if (sources.length === 0)
42
+ return "columns";
43
+ return sources.every(function (range) { return isSingleRow(range) && !isSingleColumn(range); })
44
+ ? "rows"
45
+ : "columns";
46
+ };
47
+ exports.inferSeriesOrientation = inferSeriesOrientation;
48
+ var flipSeriesOrientation = function (orientation) { return (orientation === "rows" ? "columns" : "rows"); };
49
+ exports.flipSeriesOrientation = flipSeriesOrientation;
50
+ /**
51
+ * Excel's chart wizard picks series-in-rows when the selection is wider
52
+ * than it is tall.
53
+ */
54
+ var pickSeriesOrientationForRange = function (range) {
55
+ return range.endColumnIndex - range.startColumnIndex >
56
+ range.endRowIndex - range.startRowIndex
57
+ ? "rows"
58
+ : "columns";
59
+ };
60
+ exports.pickSeriesOrientationForRange = pickSeriesOrientationForRange;
61
+ /**
62
+ * Split a data range the way Excel's chart wizard does. Series in
63
+ * columns: the first column (beneath the header row) is the category
64
+ * axis and every further column is one series named by its header cell.
65
+ * Series in rows is the transpose: the first row (right of the header
66
+ * column) is the category axis and every further row is a series named
67
+ * by its first cell. A range only one row (column) tall still yields a
68
+ * one-cell-deep axis so the chart has something to plot.
69
+ */
70
+ var deriveChartSeriesFromRange = function (_a) {
71
+ var range = _a.range, orientation = _a.orientation, getFormattedValue = _a.getFormattedValue;
72
+ var sheetId = range.sheetId, startRowIndex = range.startRowIndex, startColumnIndex = range.startColumnIndex;
73
+ var endRowIndex = Math.max(range.endRowIndex, startRowIndex);
74
+ var endColumnIndex = Math.max(range.endColumnIndex, startColumnIndex);
75
+ var label = function (rowIndex, columnIndex) { var _a; return (_a = getFormattedValue === null || getFormattedValue === void 0 ? void 0 : getFormattedValue(sheetId, rowIndex, columnIndex)) !== null && _a !== void 0 ? _a : undefined; };
76
+ if (orientation === "rows") {
77
+ var categoryAxis_1 = {
78
+ sheetId: sheetId,
79
+ startRowIndex: startRowIndex,
80
+ endRowIndex: startRowIndex,
81
+ startColumnIndex: startColumnIndex + 1,
82
+ endColumnIndex: Math.max(endColumnIndex, startColumnIndex + 1),
83
+ };
84
+ var series_1 = [];
85
+ for (var rowIndex = startRowIndex + 1; rowIndex <= endRowIndex; rowIndex++) {
86
+ series_1.push({
87
+ dataLabel: label(rowIndex, startColumnIndex),
88
+ sources: [
89
+ {
90
+ sheetId: sheetId,
91
+ startRowIndex: rowIndex,
92
+ endRowIndex: rowIndex,
93
+ startColumnIndex: categoryAxis_1.startColumnIndex,
94
+ endColumnIndex: categoryAxis_1.endColumnIndex,
95
+ },
96
+ ],
97
+ });
98
+ }
99
+ return { domains: [{ sources: [categoryAxis_1] }], series: series_1 };
100
+ }
101
+ var categoryAxis = {
102
+ sheetId: sheetId,
103
+ startRowIndex: startRowIndex + 1,
104
+ endRowIndex: Math.max(endRowIndex, startRowIndex + 1),
105
+ startColumnIndex: startColumnIndex,
106
+ endColumnIndex: startColumnIndex,
107
+ };
108
+ var series = [];
109
+ for (var columnIndex = startColumnIndex + 1; columnIndex <= endColumnIndex; columnIndex++) {
110
+ series.push({
111
+ dataLabel: label(startRowIndex, columnIndex),
112
+ sources: [
113
+ {
114
+ sheetId: sheetId,
115
+ startRowIndex: categoryAxis.startRowIndex,
116
+ endRowIndex: categoryAxis.endRowIndex,
117
+ startColumnIndex: columnIndex,
118
+ endColumnIndex: columnIndex,
119
+ },
120
+ ],
121
+ });
122
+ }
123
+ return { domains: [{ sources: [categoryAxis] }], series: series };
124
+ };
125
+ exports.deriveChartSeriesFromRange = deriveChartSeriesFromRange;
126
+ /**
127
+ * The block the series tile when they form one rectangle: every series
128
+ * is a single source on the same sheet, all single columns sharing one
129
+ * row span (series in columns) or all single rows sharing one column
130
+ * span (series in rows), and adjacent to each other in order. Undefined
131
+ * for anything else — there is no meaningful transpose of scattered
132
+ * sources.
133
+ */
134
+ var rectangularSeriesBounds = function (spec, orientation) {
135
+ var e_1, _a;
136
+ if (!(0, chart_spec_utils_1.isBasicChartSpec)(spec) || spec.series.length === 0)
137
+ return undefined;
138
+ var sources = [];
139
+ try {
140
+ for (var _b = tslib_1.__values(spec.series), _c = _b.next(); !_c.done; _c = _b.next()) {
141
+ var entry = _c.value;
142
+ if (!entry.sources || entry.sources.length !== 1)
143
+ return undefined;
144
+ sources.push(entry.sources[0]);
145
+ }
146
+ }
147
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
148
+ finally {
149
+ try {
150
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
151
+ }
152
+ finally { if (e_1) throw e_1.error; }
153
+ }
154
+ var _d = tslib_1.__read(sources, 1), first = _d[0];
155
+ var alongRows = orientation === "columns";
156
+ for (var i = 0; i < sources.length; i++) {
157
+ var range = sources[i];
158
+ if (range.sheetId !== first.sheetId)
159
+ return undefined;
160
+ if (alongRows) {
161
+ if (!isSingleColumn(range) ||
162
+ range.startRowIndex !== first.startRowIndex ||
163
+ range.endRowIndex !== first.endRowIndex ||
164
+ range.startColumnIndex !== first.startColumnIndex + i) {
165
+ return undefined;
166
+ }
167
+ }
168
+ else if (!isSingleRow(range) ||
169
+ range.startColumnIndex !== first.startColumnIndex ||
170
+ range.endColumnIndex !== first.endColumnIndex ||
171
+ range.startRowIndex !== first.startRowIndex + i) {
172
+ return undefined;
173
+ }
174
+ }
175
+ var last = sources[sources.length - 1];
176
+ return {
177
+ sheetId: first.sheetId,
178
+ startRowIndex: first.startRowIndex,
179
+ endRowIndex: last.endRowIndex,
180
+ startColumnIndex: first.startColumnIndex,
181
+ endColumnIndex: last.endColumnIndex,
182
+ };
183
+ };
184
+ exports.rectangularSeriesBounds = rectangularSeriesBounds;
185
+ /** Whether `switchRowColumn` has a transpose to offer for this chart. */
186
+ var canSwitchRowColumn = function (spec) {
187
+ return (0, chart_spec_utils_1.isBasicChartSpec)(spec) &&
188
+ (!!spec.dataRange ||
189
+ (0, exports.rectangularSeriesBounds)(spec, (0, exports.inferSeriesOrientation)(spec)) !==
190
+ undefined);
191
+ };
192
+ exports.canSwitchRowColumn = canSwitchRowColumn;
193
+ /**
194
+ * Excel's "Switch Row/Column". With a `dataRange` the series and
195
+ * category axis are re-derived from it the other way round. Without one,
196
+ * rectangular series sources are transposed: each row (column) of the
197
+ * block becomes a series, named after the old category cell beside it,
198
+ * and the old series names become the categories (Excel's behaviour —
199
+ * the names are carried as inline values because the spec stores them
200
+ * as text, not as a cell reference). Per-series presentation (colours,
201
+ * trendlines, …) does not survive the transpose, as in Excel. Returns
202
+ * undefined when the sources cannot be transposed.
203
+ */
204
+ var switchRowColumn = function (spec, _a) {
205
+ var _b, _c, _d, _e, _f;
206
+ var _g = _a === void 0 ? {} : _a, getFormattedValue = _g.getFormattedValue;
207
+ if (!(0, chart_spec_utils_1.isBasicChartSpec)(spec))
208
+ return undefined;
209
+ var current = (0, exports.inferSeriesOrientation)(spec);
210
+ var next = (0, exports.flipSeriesOrientation)(current);
211
+ if (spec.dataRange) {
212
+ var _h = (0, exports.deriveChartSeriesFromRange)({
213
+ range: spec.dataRange,
214
+ orientation: next,
215
+ getFormattedValue: getFormattedValue,
216
+ }), domains = _h.domains, series_2 = _h.series;
217
+ return tslib_1.__assign(tslib_1.__assign({}, spec), { seriesOrientation: next, domains: domains, series: series_2 });
218
+ }
219
+ var block = (0, exports.rectangularSeriesBounds)(spec, current);
220
+ if (!block)
221
+ return undefined;
222
+ var categorySource = (_d = (_c = (_b = spec.domains) === null || _b === void 0 ? void 0 : _b[0]) === null || _c === void 0 ? void 0 : _c.sources) === null || _d === void 0 ? void 0 : _d[0];
223
+ var series = [];
224
+ if (next === "rows") {
225
+ for (var rowIndex = block.startRowIndex; rowIndex <= block.endRowIndex; rowIndex++) {
226
+ var offset = rowIndex - block.startRowIndex;
227
+ series.push({
228
+ dataLabel: categorySource && getFormattedValue
229
+ ? (_e = getFormattedValue(categorySource.sheetId, categorySource.startRowIndex + offset, categorySource.startColumnIndex)) !== null && _e !== void 0 ? _e : undefined
230
+ : undefined,
231
+ sources: [
232
+ {
233
+ sheetId: block.sheetId,
234
+ startRowIndex: rowIndex,
235
+ endRowIndex: rowIndex,
236
+ startColumnIndex: block.startColumnIndex,
237
+ endColumnIndex: block.endColumnIndex,
238
+ },
239
+ ],
240
+ });
241
+ }
242
+ }
243
+ else {
244
+ for (var columnIndex = block.startColumnIndex; columnIndex <= block.endColumnIndex; columnIndex++) {
245
+ var offset = columnIndex - block.startColumnIndex;
246
+ series.push({
247
+ dataLabel: categorySource && getFormattedValue
248
+ ? (_f = getFormattedValue(categorySource.sheetId, categorySource.startRowIndex, categorySource.startColumnIndex + offset)) !== null && _f !== void 0 ? _f : undefined
249
+ : undefined,
250
+ sources: [
251
+ {
252
+ sheetId: block.sheetId,
253
+ startRowIndex: block.startRowIndex,
254
+ endRowIndex: block.endRowIndex,
255
+ startColumnIndex: columnIndex,
256
+ endColumnIndex: columnIndex,
257
+ },
258
+ ],
259
+ });
260
+ }
261
+ }
262
+ var categories = spec.series.map(function (entry, index) { var _a; return (_a = entry.dataLabel) !== null && _a !== void 0 ? _a : "Series ".concat(index + 1); });
263
+ return tslib_1.__assign(tslib_1.__assign({}, spec), { seriesOrientation: next, domains: [{ sources: [], inlineValues: categories }], series: series });
264
+ };
265
+ exports.switchRowColumn = switchRowColumn;
@@ -39,6 +39,9 @@ export declare const getDefaultChartTypeSpec: (chartType: ChartType) => Partial<
39
39
  export declare const getPropertiesToRemove: (fromType: ChartType, toType: ChartType) => string[];
40
40
  /**
41
41
  * Checks if chart data array is empty or contains only placeholder entries.
42
+ * An entry carrying inline values (`<c:strLit>` / `<c:numLit>` categories,
43
+ * or the series names Switch Row/Column turns into categories) is real
44
+ * data even though it references no cells.
42
45
  */
43
46
  export declare const isPlaceholderChartData: (data?: ChartData[]) => boolean;
44
47
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"chart-spec-utils.d.ts","sourceRoot":"","sources":["../../../utils/chart-spec-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,aAAa,EACb,UAAU,EACV,YAAY,EACb,MAAM,2BAA2B,CAAC;AAEnC,KAAK,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC;AACpD,KAAK,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC;AACtD,KAAK,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AAEvC,eAAO,MAAM,iBAAiB,6MAe5B,CAAC;AAEH,eAAO,MAAM,kBAAkB,6MAA4C,CAAC;AAE5E,eAAO,MAAM,qBAAqB,6MAGhC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,WAAW,SAAS,KAAG,aAKvD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,SAAS,KACd,IAAI,IAAI,SAAS,GAAG,cAAuD,CAAC;AAE/E,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,QAAQ,GAAG,SAAS,CAAC;IAChC,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,yEAAyE;IACzE,YAAY,CAAC,EACT,MAAM,GACN,QAAQ,GACR,YAAY,GACZ,cAAc,GACd,QAAQ,GACR,MAAM,GACN,IAAI,CAAC;CACV,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,MAAM,SAAS,KACd,IAAI,IAAI,SAAS,GAAG,qBACiB,CAAC;AAEzC,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG;IAC9C,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,MAAM,SAAS,KACd,IAAI,IAAI,SAAS,GAAG,kBACoB,CAAC;AAwC5C;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAClC,WAAW,SAAS,KACnB,OAAO,CAAC,SAAS,CAEnB,CAAC;AA8EF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAChC,UAAU,SAAS,EACnB,QAAQ,SAAS,KAChB,MAAM,EAoBR,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,sBAAsB,GAAI,OAAO,SAAS,EAAE,KAAG,OAM3D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC9B,UAAU,SAAS,EAAE,EACrB,WAAW,SAAS,EAAE,KACrB,SAAS,EAKX,CAAC;AA+BF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GACzB,cAAc,SAAS,EACvB,cAAc,OAAO,CAAC,SAAS,CAAC,KAC/B,SA0EF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,MAAM,SAAS,KAAG,UAAU,EAsB9D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAAI,QAAQ,OAAO,KAAG,MAQvD,CAAC"}
1
+ {"version":3,"file":"chart-spec-utils.d.ts","sourceRoot":"","sources":["../../../utils/chart-spec-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,aAAa,EACb,UAAU,EACV,YAAY,EACb,MAAM,2BAA2B,CAAC;AAEnC,KAAK,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC;AACpD,KAAK,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC;AACtD,KAAK,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AAEvC,eAAO,MAAM,iBAAiB,6MAe5B,CAAC;AAEH,eAAO,MAAM,kBAAkB,6MAA4C,CAAC;AAE5E,eAAO,MAAM,qBAAqB,6MAGhC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,WAAW,SAAS,KAAG,aAKvD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC3B,MAAM,SAAS,KACd,IAAI,IAAI,SAAS,GAAG,cAAuD,CAAC;AAE/E,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,QAAQ,GAAG,SAAS,CAAC;IAChC,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;IAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,yEAAyE;IACzE,YAAY,CAAC,EACT,MAAM,GACN,QAAQ,GACR,YAAY,GACZ,cAAc,GACd,QAAQ,GACR,MAAM,GACN,IAAI,CAAC;CACV,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAC5B,MAAM,SAAS,KACd,IAAI,IAAI,SAAS,GAAG,qBACiB,CAAC;AAEzC,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG;IAC9C,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,MAAM,SAAS,KACd,IAAI,IAAI,SAAS,GAAG,kBACoB,CAAC;AAwC5C;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAClC,WAAW,SAAS,KACnB,OAAO,CAAC,SAAS,CAEnB,CAAC;AAiFF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAChC,UAAU,SAAS,EACnB,QAAQ,SAAS,KAChB,MAAM,EAoBR,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GAAI,OAAO,SAAS,EAAE,KAAG,OAO3D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC9B,UAAU,SAAS,EAAE,EACrB,WAAW,SAAS,EAAE,KACrB,SAAS,EAKX,CAAC;AA+BF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GACzB,cAAc,SAAS,EACvB,cAAc,OAAO,CAAC,SAAS,CAAC,KAC/B,SA0EF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,MAAM,SAAS,KAAG,UAAU,EAsB9D,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAAI,QAAQ,OAAO,KAAG,MAQvD,CAAC"}
@@ -98,12 +98,13 @@ exports.getDefaultChartTypeSpec = getDefaultChartTypeSpec;
98
98
  * These should be cleared when switching between chart types within basic charts.
99
99
  */
100
100
  var BASIC_CHART_TYPE_PROPERTIES = {
101
- line: ["smooth"],
101
+ line: ["smooth", "showMarkers"],
102
102
  // `doughnutHoleSize` is deliberately NOT cleared when leaving pie so
103
103
  // upgrading a legacy pie-based doughnut (pie + doughnutHoleSize) to
104
104
  // the first-class doughnut token keeps the authored hole size.
105
105
  pie: [
106
106
  "radius",
107
+ "explosion",
107
108
  // Of-pie composite fields (pie-of-pie / bar-of-pie) — meaningless
108
109
  // on any other chart type, so drop them on transition.
109
110
  "sourceChartType",
@@ -112,7 +113,7 @@ var BASIC_CHART_TYPE_PROPERTIES = {
112
113
  "splitPos",
113
114
  "secondPieSize",
114
115
  ],
115
- doughnut: ["doughnutHoleSize"],
116
+ doughnut: ["doughnutHoleSize", "explosion"],
116
117
  waterfall: ["totalIndices"],
117
118
  boxplot: ["quartileMethod", "showOutliers", "showMeanMarker"],
118
119
  // Region map (filled map / choropleth) — the geo scope and the
@@ -126,7 +127,9 @@ var BASIC_CHART_TYPE_PROPERTIES = {
126
127
  var CATEGORY_SPECIFIC_PROPERTIES = {
127
128
  basic: [
128
129
  "smooth",
130
+ "showMarkers",
129
131
  "radius",
132
+ "explosion",
130
133
  "stackedType",
131
134
  "doughnutHoleSize",
132
135
  "totalIndices",
@@ -190,13 +193,18 @@ var getPropertiesToRemove = function (fromType, toType) {
190
193
  exports.getPropertiesToRemove = getPropertiesToRemove;
191
194
  /**
192
195
  * Checks if chart data array is empty or contains only placeholder entries.
196
+ * An entry carrying inline values (`<c:strLit>` / `<c:numLit>` categories,
197
+ * or the series names Switch Row/Column turns into categories) is real
198
+ * data even though it references no cells.
193
199
  */
194
200
  var isPlaceholderChartData = function (data) {
195
201
  if (!data || data.length === 0)
196
202
  return true;
197
203
  return data.every(function (entry) {
198
- var _a;
199
- var sources = (_a = entry === null || entry === void 0 ? void 0 : entry.sources) !== null && _a !== void 0 ? _a : [];
204
+ var _a, _b;
205
+ if ((_a = entry === null || entry === void 0 ? void 0 : entry.inlineValues) === null || _a === void 0 ? void 0 : _a.length)
206
+ return false;
207
+ var sources = (_b = entry === null || entry === void 0 ? void 0 : entry.sources) !== null && _b !== void 0 ? _b : [];
200
208
  return sources.length === 0 || sources.every(function (source) { return !source; });
201
209
  });
202
210
  };
@@ -0,0 +1,75 @@
1
+ import type { ChartSpec } from "@rowsncolumns/spreadsheet";
2
+ /**
3
+ * Excel's Chart Design tab as pure spec transforms: Chart Styles, Change
4
+ * Colors, Quick Layouts and Reset to Match Style. Every transform returns
5
+ * a new spec and writes only the fields the gallery entry defines, so the
6
+ * result renders identically on both renderers (they read the same spec)
7
+ * and survives the XLSX round-trip field by field.
8
+ */
9
+ /** A "Change Colors" gallery entry. `colors` omitted = the workbook theme's accents. */
10
+ export type ChartColorPalette = {
11
+ id: string;
12
+ label: string;
13
+ kind: "colorful" | "monochromatic";
14
+ colors?: string[];
15
+ };
16
+ /**
17
+ * Office's Change Colors gallery. Colorful 1 is the theme itself (no
18
+ * `colors` — the renderer keeps its accent fallback); the rest are the
19
+ * default Office theme's derived palettes.
20
+ */
21
+ export declare const CHART_COLOR_PALETTES: readonly ChartColorPalette[];
22
+ /**
23
+ * Change Colors: set the palette and clear every series' own colour so the
24
+ * palette applies (a series colour always wins over the palette).
25
+ */
26
+ export declare const applyChartColorPalette: (spec: ChartSpec, palette: ChartColorPalette) => ChartSpec;
27
+ /**
28
+ * Reset to Match Style: drop the per-series formatting overrides so the
29
+ * series follow the chart style's palette again. Chart-level fields are
30
+ * untouched — they *are* the style.
31
+ */
32
+ export declare const resetChartToMatchStyle: (spec: ChartSpec) => ChartSpec;
33
+ /**
34
+ * The series colour cycle a renderer should use: the spec's palette when
35
+ * one is set, else the caller's theme accents.
36
+ */
37
+ export declare const getChartPalette: (spec: Pick<ChartSpec, "palette"> | undefined, fallback: readonly string[]) => string[];
38
+ /**
39
+ * A Chart Styles gallery entry. `id` is the OOXML `<c:style>` value the
40
+ * style is written as (§21.2.3.46 ST_Style: 1 grayscale, 2 colourful, 3
41
+ * monochromatic accent 1, +8 per row of increasing emphasis, 33-40 on a
42
+ * dark-gray frame, 41-48 on black).
43
+ */
44
+ export type ChartStylePreset = {
45
+ id: number;
46
+ label: string;
47
+ /** Swatch colours for the gallery tile. */
48
+ preview: {
49
+ background: string;
50
+ bars: string[];
51
+ };
52
+ apply(spec: ChartSpec): ChartSpec;
53
+ };
54
+ /**
55
+ * The Chart Styles gallery. Each entry pins the look Excel's style of that
56
+ * id implies onto the spec fields both renderers read: chart-area fill,
57
+ * gridlines, data labels, legend placement, title font and — for the
58
+ * grayscale / monochromatic rows — the palette. Per-series colours are
59
+ * left alone (Reset to Match Style clears them).
60
+ */
61
+ export declare const CHART_STYLES: readonly ChartStylePreset[];
62
+ export declare const applyChartStyle: (spec: ChartSpec, style: ChartStylePreset) => ChartSpec;
63
+ /** A Quick Layouts gallery entry — where the title, legend, labels and axis titles go. */
64
+ export type ChartQuickLayout = {
65
+ id: number;
66
+ label: string;
67
+ apply(spec: ChartSpec): ChartSpec;
68
+ };
69
+ /**
70
+ * Excel's Quick Layout gallery (the first six of the column-chart set).
71
+ * Layouts arrange the existing elements; they never touch colours.
72
+ */
73
+ export declare const CHART_QUICK_LAYOUTS: readonly ChartQuickLayout[];
74
+ export declare const applyChartQuickLayout: (spec: ChartSpec, layout: ChartQuickLayout) => ChartSpec;
75
+ //# sourceMappingURL=chart-styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chart-styles.d.ts","sourceRoot":"","sources":["../../../utils/chart-styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,SAAS,EAEV,MAAM,2BAA2B,CAAC;AAEnC;;;;;;GAMG;AAEH,wFAAwF;AACxF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,GAAG,eAAe,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,SAAS,iBAAiB,EA4C5D,CAAC;AAsBF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,SAAS,EACf,SAAS,iBAAiB,KACzB,SAGD,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,MAAM,SAAS,KAAG,SAC9B,CAAC;AAE5B;;;GAGG;AACH,eAAO,MAAM,eAAe,GAC1B,MAAM,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,SAAS,EAC5C,UAAU,SAAS,MAAM,EAAE,KAC1B,MAAM,EAGU,CAAC;AAEpB;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAChD,KAAK,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;CACnC,CAAC;AAmDF;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,EAAE,SAAS,gBAAgB,EAwInD,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,MAAM,SAAS,EACf,OAAO,gBAAgB,KACtB,SAA8B,CAAC;AAElC,0FAA0F;AAC1F,MAAM,MAAM,gBAAgB,GAAG;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;CACnC,CAAC;AA0BF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,gBAAgB,EAqE1D,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,MAAM,SAAS,EACf,QAAQ,gBAAgB,KACvB,SAA+B,CAAC"}