@rowsncolumns/charts 28.1.14 → 28.1.16
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/dist/cjs/basic-chart/basic-chart.d.ts.map +1 -1
- package/dist/cjs/basic-chart/basic-chart.js +312 -271
- package/dist/cjs/components/editors/chart-editor-capabilities.d.ts +48 -0
- package/dist/cjs/components/editors/chart-editor-capabilities.d.ts.map +1 -0
- package/dist/cjs/components/editors/chart-editor-capabilities.js +62 -0
- package/dist/cjs/components/editors/chart-editor.d.ts.map +1 -1
- package/dist/cjs/components/editors/chart-editor.js +200 -534
- package/dist/cjs/components/editors/fields/axis-options-fields.d.ts +16 -0
- package/dist/cjs/components/editors/fields/axis-options-fields.d.ts.map +1 -0
- package/dist/cjs/components/editors/fields/axis-options-fields.js +31 -0
- package/dist/cjs/components/editors/fields/chart-type-options.d.ts +25 -0
- package/dist/cjs/components/editors/fields/chart-type-options.d.ts.map +1 -0
- package/dist/cjs/components/editors/fields/chart-type-options.js +170 -0
- package/dist/cjs/components/editors/fields/data-labels-fields.d.ts +15 -0
- package/dist/cjs/components/editors/fields/data-labels-fields.d.ts.map +1 -0
- package/dist/cjs/components/editors/fields/data-labels-fields.js +57 -0
- package/dist/cjs/components/editors/fields/primitives.d.ts +54 -0
- package/dist/cjs/components/editors/fields/primitives.d.ts.map +1 -0
- package/dist/cjs/components/editors/fields/primitives.js +52 -0
- package/dist/cjs/components/editors/fields/series-format-fields.d.ts +17 -0
- package/dist/cjs/components/editors/fields/series-format-fields.d.ts.map +1 -0
- package/dist/cjs/components/editors/fields/series-format-fields.js +165 -0
- package/dist/cjs/components/editors/fields/series-name-field.d.ts +16 -0
- package/dist/cjs/components/editors/fields/series-name-field.d.ts.map +1 -0
- package/dist/cjs/components/editors/fields/series-name-field.js +36 -0
- package/dist/cjs/components/editors/fields/text-format-fields.d.ts +20 -0
- package/dist/cjs/components/editors/fields/text-format-fields.d.ts.map +1 -0
- package/dist/cjs/components/editors/fields/text-format-fields.js +46 -0
- package/dist/cjs/config.d.ts.map +1 -1
- package/dist/cjs/config.js +3 -0
- package/dist/cjs/interface/create-chart.d.ts +3 -2
- package/dist/cjs/interface/create-chart.d.ts.map +1 -1
- package/dist/cjs/interface/create-chart.js +7 -0
- package/dist/cjs/plotly/basic-chart/basic-chart.d.ts.map +1 -1
- package/dist/cjs/plotly/basic-chart/basic-chart.js +255 -218
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/cjs/utils/chart-orientation.d.ts.map +1 -1
- package/dist/cjs/utils/chart-orientation.js +24 -12
- package/dist/cjs/utils/chart-spec-utils.d.ts.map +1 -1
- package/dist/cjs/utils/chart-spec-utils.js +120 -21
- package/dist/cjs/utils/echarts-overlays.d.ts +2 -0
- package/dist/cjs/utils/echarts-overlays.d.ts.map +1 -1
- package/dist/cjs/utils/echarts-overlays.js +25 -12
- package/dist/cjs/utils/series-name.d.ts +12 -0
- package/dist/cjs/utils/series-name.d.ts.map +1 -0
- package/dist/cjs/utils/series-name.js +26 -0
- package/dist/cjs/utils/trendline.d.ts +9 -0
- package/dist/cjs/utils/trendline.d.ts.map +1 -1
- package/dist/cjs/utils/trendline.js +16 -1
- package/dist/esm/basic-chart/basic-chart.d.ts.map +1 -1
- package/dist/esm/basic-chart/basic-chart.js +80 -38
- package/dist/esm/components/editors/chart-editor-capabilities.d.ts +48 -0
- package/dist/esm/components/editors/chart-editor-capabilities.d.ts.map +1 -0
- package/dist/esm/components/editors/chart-editor-capabilities.js +58 -0
- package/dist/esm/components/editors/chart-editor.d.ts.map +1 -1
- package/dist/esm/components/editors/chart-editor.js +166 -448
- package/dist/esm/components/editors/fields/axis-options-fields.d.ts +16 -0
- package/dist/esm/components/editors/fields/axis-options-fields.d.ts.map +1 -0
- package/dist/esm/components/editors/fields/axis-options-fields.js +22 -0
- package/dist/esm/components/editors/fields/chart-type-options.d.ts +25 -0
- package/dist/esm/components/editors/fields/chart-type-options.d.ts.map +1 -0
- package/dist/esm/components/editors/fields/chart-type-options.js +151 -0
- package/dist/esm/components/editors/fields/data-labels-fields.d.ts +15 -0
- package/dist/esm/components/editors/fields/data-labels-fields.d.ts.map +1 -0
- package/dist/esm/components/editors/fields/data-labels-fields.js +47 -0
- package/dist/esm/components/editors/fields/primitives.d.ts +54 -0
- package/dist/esm/components/editors/fields/primitives.d.ts.map +1 -0
- package/dist/esm/components/editors/fields/primitives.js +26 -0
- package/dist/esm/components/editors/fields/series-format-fields.d.ts +17 -0
- package/dist/esm/components/editors/fields/series-format-fields.d.ts.map +1 -0
- package/dist/esm/components/editors/fields/series-format-fields.js +143 -0
- package/dist/esm/components/editors/fields/series-name-field.d.ts +16 -0
- package/dist/esm/components/editors/fields/series-name-field.d.ts.map +1 -0
- package/dist/esm/components/editors/fields/series-name-field.js +31 -0
- package/dist/esm/components/editors/fields/text-format-fields.d.ts +20 -0
- package/dist/esm/components/editors/fields/text-format-fields.d.ts.map +1 -0
- package/dist/esm/components/editors/fields/text-format-fields.js +34 -0
- package/dist/esm/config.d.ts.map +1 -1
- package/dist/esm/config.js +3 -0
- package/dist/esm/interface/create-chart.d.ts +3 -2
- package/dist/esm/interface/create-chart.d.ts.map +1 -1
- package/dist/esm/interface/create-chart.js +8 -1
- package/dist/esm/plotly/basic-chart/basic-chart.d.ts.map +1 -1
- package/dist/esm/plotly/basic-chart/basic-chart.js +52 -30
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/utils/chart-orientation.d.ts.map +1 -1
- package/dist/esm/utils/chart-orientation.js +20 -0
- package/dist/esm/utils/chart-spec-utils.d.ts.map +1 -1
- package/dist/esm/utils/chart-spec-utils.js +95 -8
- package/dist/esm/utils/echarts-overlays.d.ts +2 -0
- package/dist/esm/utils/echarts-overlays.d.ts.map +1 -1
- package/dist/esm/utils/echarts-overlays.js +15 -1
- package/dist/esm/utils/series-name.d.ts +12 -0
- package/dist/esm/utils/series-name.d.ts.map +1 -0
- package/dist/esm/utils/series-name.js +24 -0
- package/dist/esm/utils/trendline.d.ts +9 -0
- package/dist/esm/utils/trendline.d.ts.map +1 -1
- package/dist/esm/utils/trendline.js +14 -0
- package/package.json +3 -3
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SeriesFormatFields = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var ui_1 = require("@rowsncolumns/ui");
|
|
6
|
+
var react_1 = tslib_1.__importDefault(require("react"));
|
|
7
|
+
var chart_range_input_1 = require("../chart-range-input");
|
|
8
|
+
var data_labels_fields_1 = require("./data-labels-fields");
|
|
9
|
+
var primitives_1 = require("./primitives");
|
|
10
|
+
var TRENDLINE_TYPES = [
|
|
11
|
+
{ value: "linear", label: "Linear" },
|
|
12
|
+
{ value: "exp", label: "Exponential" },
|
|
13
|
+
{ value: "log", label: "Logarithmic" },
|
|
14
|
+
{ value: "poly", label: "Polynomial" },
|
|
15
|
+
{ value: "power", label: "Power" },
|
|
16
|
+
{ value: "movingAvg", label: "Moving average" },
|
|
17
|
+
];
|
|
18
|
+
var MARKER_SYMBOLS = [
|
|
19
|
+
{ value: "", label: "Auto" },
|
|
20
|
+
{ value: "circle", label: "Circle" },
|
|
21
|
+
{ value: "square", label: "Square" },
|
|
22
|
+
{ value: "diamond", label: "Diamond" },
|
|
23
|
+
{ value: "triangle", label: "Triangle" },
|
|
24
|
+
{ value: "x", label: "X" },
|
|
25
|
+
{ value: "plus", label: "Plus" },
|
|
26
|
+
{ value: "star", label: "Star" },
|
|
27
|
+
{ value: "dash", label: "Dash" },
|
|
28
|
+
{ value: "dot", label: "Dot" },
|
|
29
|
+
{ value: "none", label: "None" },
|
|
30
|
+
];
|
|
31
|
+
/**
|
|
32
|
+
* Excel's Format Data Series for one series: axis, trendline (every
|
|
33
|
+
* option of Format Trendline), error bars (Format Error Bars), fill
|
|
34
|
+
* (gradient / no fill / per-point colours / invert if negative), markers
|
|
35
|
+
* and the series' own data labels. Only the groups the chart type has
|
|
36
|
+
* (`capabilities`) render.
|
|
37
|
+
*/
|
|
38
|
+
var SeriesFormatFields = function (_a) {
|
|
39
|
+
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
40
|
+
var sheetId = _a.sheetId, series = _a.series, capabilities = _a.capabilities, onChange = _a.onChange;
|
|
41
|
+
var trendline = (_b = series.trendlines) === null || _b === void 0 ? void 0 : _b[0];
|
|
42
|
+
var setTrendline = function (patch) {
|
|
43
|
+
return onChange({ trendlines: [tslib_1.__assign(tslib_1.__assign({}, (trendline !== null && trendline !== void 0 ? trendline : { type: "linear" })), patch)] });
|
|
44
|
+
};
|
|
45
|
+
var errorBars = series.errorBars;
|
|
46
|
+
var setErrorBars = function (patch) {
|
|
47
|
+
return onChange({ errorBars: tslib_1.__assign(tslib_1.__assign({}, (errorBars !== null && errorBars !== void 0 ? errorBars : {})), patch) });
|
|
48
|
+
};
|
|
49
|
+
var pointColors = (_c = series.dataPointColors) !== null && _c !== void 0 ? _c : [];
|
|
50
|
+
return (react_1.default.createElement("div", { className: "flex flex-col gap-2 pt-2 border border-rnc-border border-solid mt-2 p-2" },
|
|
51
|
+
capabilities.hasSecondaryAxis ? (react_1.default.createElement(primitives_1.CheckboxField, { small: false, label: "Plot on secondary axis", checked: Boolean(series.useSecondaryAxis), onChange: function (on) { return onChange({ useSecondaryAxis: on || undefined }); } })) : null,
|
|
52
|
+
capabilities.hasTrendlines ? (react_1.default.createElement("div", { className: "flex flex-col gap-1" },
|
|
53
|
+
react_1.default.createElement(primitives_1.CheckboxField, { small: false, label: "Trendline", checked: Boolean(trendline), onChange: function (on) {
|
|
54
|
+
return onChange({ trendlines: on ? [trendline !== null && trendline !== void 0 ? trendline : { type: "linear" }] : undefined });
|
|
55
|
+
} }),
|
|
56
|
+
trendline ? (react_1.default.createElement("div", { className: "pl-4 flex flex-col gap-1" },
|
|
57
|
+
react_1.default.createElement("div", { className: "flex flex-wrap gap-2 items-end" },
|
|
58
|
+
react_1.default.createElement(primitives_1.SelectField, { label: "Type", ariaLabel: "Trendline type", value: (_d = trendline.type) !== null && _d !== void 0 ? _d : "linear", options: TRENDLINE_TYPES, onChange: function (type) {
|
|
59
|
+
var _a, _b;
|
|
60
|
+
return setTrendline(tslib_1.__assign(tslib_1.__assign({ type: type }, (type === "poly" ? { order: (_a = trendline.order) !== null && _a !== void 0 ? _a : 2 } : {})), (type === "movingAvg" ? { period: (_b = trendline.period) !== null && _b !== void 0 ? _b : 2 } : {})));
|
|
61
|
+
} }),
|
|
62
|
+
trendline.type === "poly" ? (react_1.default.createElement(primitives_1.NumberField, { label: "Order", ariaLabel: "Trendline order", value: trendline.order, min: 2, max: 6, onChange: function (order) { return setTrendline({ order: order }); }, placeholder: "2" })) : null,
|
|
63
|
+
trendline.type === "movingAvg" ? (react_1.default.createElement(primitives_1.NumberField, { label: "Period", ariaLabel: "Trendline period", value: trendline.period, min: 2, onChange: function (period) { return setTrendline({ period: period }); }, placeholder: "2" })) : null,
|
|
64
|
+
react_1.default.createElement(primitives_1.TextField, { label: "Name", ariaLabel: "Trendline name", value: trendline.name, onChange: function (name) { return setTrendline({ name: name }); }, placeholder: "Automatic" }),
|
|
65
|
+
react_1.default.createElement(primitives_1.ColorField, { label: "Color", ariaLabel: "Trendline color", value: trendline.color, onChange: function (color) { return setTrendline({ color: color }); } })),
|
|
66
|
+
trendline.type !== "movingAvg" ? (react_1.default.createElement("div", { className: "flex flex-wrap gap-2 items-end" },
|
|
67
|
+
react_1.default.createElement(primitives_1.NumberField, { label: "Forecast forward", value: trendline.forecastForward, min: 0, onChange: function (forecastForward) { return setTrendline({ forecastForward: forecastForward }); }, placeholder: "0" }),
|
|
68
|
+
react_1.default.createElement(primitives_1.NumberField, { label: "Forecast backward", value: trendline.forecastBackward, min: 0, onChange: function (forecastBackward) { return setTrendline({ forecastBackward: forecastBackward }); }, placeholder: "0" }))) : null,
|
|
69
|
+
trendline.type !== "movingAvg" ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
70
|
+
react_1.default.createElement(primitives_1.CheckboxField, { label: "Display equation on chart", checked: Boolean(trendline.showEquation), onChange: function (showEquation) {
|
|
71
|
+
return setTrendline({ showEquation: showEquation || undefined });
|
|
72
|
+
} }),
|
|
73
|
+
react_1.default.createElement(primitives_1.CheckboxField, { label: "Display R-squared value on chart", checked: Boolean(trendline.showRSquared), onChange: function (showRSquared) {
|
|
74
|
+
return setTrendline({ showRSquared: showRSquared || undefined });
|
|
75
|
+
} }))) : null)) : null)) : null,
|
|
76
|
+
capabilities.hasErrorBars ? (react_1.default.createElement("div", { className: "flex flex-col gap-1" },
|
|
77
|
+
react_1.default.createElement(primitives_1.CheckboxField, { small: false, label: "Error bars", checked: Boolean(errorBars), onChange: function (on) {
|
|
78
|
+
return onChange({
|
|
79
|
+
errorBars: on ? errorBars !== null && errorBars !== void 0 ? errorBars : { valueType: "percentage", value: 5 } : undefined,
|
|
80
|
+
});
|
|
81
|
+
} }),
|
|
82
|
+
errorBars ? (react_1.default.createElement("div", { className: "pl-4 flex flex-col gap-1" },
|
|
83
|
+
react_1.default.createElement("div", { className: "flex flex-wrap gap-2 items-end" },
|
|
84
|
+
react_1.default.createElement(primitives_1.SelectField, { label: "Direction", ariaLabel: "Error bar direction", value: (_e = errorBars.barType) !== null && _e !== void 0 ? _e : "both", options: [
|
|
85
|
+
{ value: "both", label: "Both" },
|
|
86
|
+
{ value: "plus", label: "Plus" },
|
|
87
|
+
{ value: "minus", label: "Minus" },
|
|
88
|
+
], onChange: function (barType) { return setErrorBars({ barType: barType }); } }),
|
|
89
|
+
capabilities.category === "bubble" ? (react_1.default.createElement(primitives_1.SelectField, { label: "Axis", ariaLabel: "Error bar axis", value: (_f = errorBars.direction) !== null && _f !== void 0 ? _f : "y", options: [
|
|
90
|
+
{ value: "y", label: "Vertical" },
|
|
91
|
+
{ value: "x", label: "Horizontal" },
|
|
92
|
+
], onChange: function (direction) { return setErrorBars({ direction: direction }); } })) : null,
|
|
93
|
+
react_1.default.createElement(primitives_1.SelectField, { label: "Error amount", ariaLabel: "Error bar value type", value: (_g = errorBars.valueType) !== null && _g !== void 0 ? _g : "percentage", options: [
|
|
94
|
+
{ value: "fixedVal", label: "Fixed value" },
|
|
95
|
+
{ value: "percentage", label: "Percentage" },
|
|
96
|
+
{ value: "stdDev", label: "Standard deviation(s)" },
|
|
97
|
+
{ value: "stdErr", label: "Standard error" },
|
|
98
|
+
{ value: "custom", label: "Custom" },
|
|
99
|
+
], onChange: function (valueType) { return setErrorBars({ valueType: valueType }); } }),
|
|
100
|
+
errorBars.valueType !== "stdErr" && errorBars.valueType !== "custom" ? (react_1.default.createElement(primitives_1.NumberField, { label: "Value", ariaLabel: "Error bar value", value: errorBars.value, onChange: function (value) { return setErrorBars({ value: value }); }, placeholder: "5" })) : null),
|
|
101
|
+
errorBars.valueType === "custom" ? (react_1.default.createElement("div", { className: "flex flex-col gap-1" },
|
|
102
|
+
react_1.default.createElement("label", { className: "font-system text-xs" }, "Positive error value"),
|
|
103
|
+
react_1.default.createElement(chart_range_input_1.ChartRangeInput, { sheetId: sheetId, range: (_h = errorBars.plusRange) !== null && _h !== void 0 ? _h : undefined, onChangeRange: function (plusRange) { return setErrorBars({ plusRange: plusRange }); }, placeholder: "Select a range", className: "mb-0" }),
|
|
104
|
+
react_1.default.createElement("label", { className: "font-system text-xs" }, "Negative error value"),
|
|
105
|
+
react_1.default.createElement(chart_range_input_1.ChartRangeInput, { sheetId: sheetId, range: (_j = errorBars.minusRange) !== null && _j !== void 0 ? _j : undefined, onChangeRange: function (minusRange) { return setErrorBars({ minusRange: minusRange }); }, placeholder: "Select a range", className: "mb-0" }))) : null,
|
|
106
|
+
react_1.default.createElement(primitives_1.CheckboxField, { label: "No end cap", checked: Boolean(errorBars.noEndCap), onChange: function (noEndCap) { return setErrorBars({ noEndCap: noEndCap || undefined }); } }))) : null)) : null,
|
|
107
|
+
capabilities.hasSeriesFill ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
108
|
+
react_1.default.createElement(primitives_1.CheckboxField, { small: false, label: "Gradient fill", checked: Boolean(series.gradient), onChange: function (on) {
|
|
109
|
+
var _a, _b;
|
|
110
|
+
return onChange({
|
|
111
|
+
gradient: on
|
|
112
|
+
? (_a = series.gradient) !== null && _a !== void 0 ? _a : {
|
|
113
|
+
type: "linear",
|
|
114
|
+
degree: 90,
|
|
115
|
+
stops: [
|
|
116
|
+
{ position: 0, color: (_b = series.color) !== null && _b !== void 0 ? _b : "#4285F4" },
|
|
117
|
+
{ position: 1, color: "#FFFFFF" },
|
|
118
|
+
],
|
|
119
|
+
}
|
|
120
|
+
: undefined,
|
|
121
|
+
});
|
|
122
|
+
} }),
|
|
123
|
+
react_1.default.createElement(primitives_1.CheckboxField, { small: false, label: "Transparent (no fill)", checked: Boolean(series.noFill), onChange: function (noFill) { return onChange({ noFill: noFill || undefined }); } }))) : null,
|
|
124
|
+
capabilities.hasInvertIfNegative ? (react_1.default.createElement("div", { className: "flex flex-wrap gap-2 items-end" },
|
|
125
|
+
react_1.default.createElement(primitives_1.CheckboxField, { small: false, label: "Invert if negative", checked: Boolean(series.invertIfNegative), onChange: function (on) { return onChange({ invertIfNegative: on || undefined }); } }),
|
|
126
|
+
series.invertIfNegative ? (react_1.default.createElement(primitives_1.ColorField, { label: "Negative fill", ariaLabel: "Negative fill", value: series.negativeColor, fallback: "#FFFFFF", onChange: function (negativeColor) { return onChange({ negativeColor: negativeColor }); }, onClear: function () { return onChange({ negativeColor: undefined }); } })) : null)) : null,
|
|
127
|
+
capabilities.hasMarkers ? (react_1.default.createElement("div", { className: "flex flex-wrap gap-2 items-end" },
|
|
128
|
+
react_1.default.createElement(primitives_1.SelectField, { label: "Marker", ariaLabel: "Marker", value: (_l = (_k = series.marker) === null || _k === void 0 ? void 0 : _k.symbol) !== null && _l !== void 0 ? _l : "", options: MARKER_SYMBOLS, onChange: function (symbol) { var _a; return onChange({ marker: tslib_1.__assign(tslib_1.__assign({}, ((_a = series.marker) !== null && _a !== void 0 ? _a : {})), { symbol: symbol || undefined }) }); } }),
|
|
129
|
+
react_1.default.createElement(primitives_1.NumberField, { label: "Marker size", ariaLabel: "Marker size", value: (_m = series.marker) === null || _m === void 0 ? void 0 : _m.size, min: 1, onChange: function (size) { var _a; return onChange({ marker: tslib_1.__assign(tslib_1.__assign({}, ((_a = series.marker) !== null && _a !== void 0 ? _a : {})), { size: size }) }); }, placeholder: "6" }),
|
|
130
|
+
react_1.default.createElement(primitives_1.ColorField, { label: "Marker color", ariaLabel: "Marker color", value: (_o = series.marker) === null || _o === void 0 ? void 0 : _o.color, onChange: function (color) { var _a; return onChange({ marker: tslib_1.__assign(tslib_1.__assign({}, ((_a = series.marker) !== null && _a !== void 0 ? _a : {})), { color: color }) }); }, onClear: function () { var _a; return onChange({ marker: tslib_1.__assign(tslib_1.__assign({}, ((_a = series.marker) !== null && _a !== void 0 ? _a : {})), { color: undefined }) }); } }))) : null,
|
|
131
|
+
capabilities.hasPointColors ? (react_1.default.createElement("div", { className: "flex flex-col gap-1" },
|
|
132
|
+
react_1.default.createElement("label", { className: "font-system text-sm" }, "Point colors"),
|
|
133
|
+
pointColors.map(function (point, index) { return (react_1.default.createElement("div", { className: "flex items-center gap-2", key: "".concat(index, "-").concat(point.idx) },
|
|
134
|
+
react_1.default.createElement(ui_1.Input, { type: "number", min: 1, value: point.idx + 1, "aria-label": "Point ".concat(index + 1, " number"), onChange: function (e) {
|
|
135
|
+
var next = tslib_1.__spreadArray([], tslib_1.__read(pointColors), false);
|
|
136
|
+
next[index] = tslib_1.__assign(tslib_1.__assign({}, point), { idx: Math.max(0, Math.round(Number(e.target.value) || 1) - 1) });
|
|
137
|
+
onChange({ dataPointColors: next });
|
|
138
|
+
}, className: "text-xs w-16" }),
|
|
139
|
+
react_1.default.createElement("input", { type: "color", value: point.color, "aria-label": "Point ".concat(index + 1, " color"), onChange: function (e) {
|
|
140
|
+
var next = tslib_1.__spreadArray([], tslib_1.__read(pointColors), false);
|
|
141
|
+
next[index] = tslib_1.__assign(tslib_1.__assign({}, point), { color: e.target.value });
|
|
142
|
+
onChange({ dataPointColors: next });
|
|
143
|
+
}, className: "h-6 w-8 p-0 border border-rnc-border rounded-sm bg-transparent cursor-pointer" }),
|
|
144
|
+
react_1.default.createElement("button", { type: "button", className: "font-system text-xs text-rnc-muted-foreground underline", onClick: function () {
|
|
145
|
+
return onChange({
|
|
146
|
+
dataPointColors: pointColors.filter(function (_, i) { return i !== index; }).length
|
|
147
|
+
? pointColors.filter(function (_, i) { return i !== index; })
|
|
148
|
+
: undefined,
|
|
149
|
+
});
|
|
150
|
+
} }, "Remove"))); }),
|
|
151
|
+
react_1.default.createElement(ui_1.Stack, { direction: "horizontal", className: "gap-1" },
|
|
152
|
+
react_1.default.createElement(ui_1.Button, { variant: "link", type: "button", className: "cursor-pointer", onClick: function () {
|
|
153
|
+
var _a;
|
|
154
|
+
return onChange({
|
|
155
|
+
dataPointColors: tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(pointColors), false), [
|
|
156
|
+
{
|
|
157
|
+
idx: pointColors.length ? pointColors[pointColors.length - 1].idx + 1 : 0,
|
|
158
|
+
color: (_a = series.color) !== null && _a !== void 0 ? _a : "#4285F4",
|
|
159
|
+
},
|
|
160
|
+
], false),
|
|
161
|
+
});
|
|
162
|
+
} }, "Add point color")))) : null,
|
|
163
|
+
capabilities.hasDataLabels ? (react_1.default.createElement(data_labels_fields_1.DataLabelsFields, { perSeries: true, value: series.dataLabels, capabilities: capabilities, onChange: function (dataLabels) { return onChange({ dataLabels: dataLabels }); } })) : null));
|
|
164
|
+
};
|
|
165
|
+
exports.SeriesFormatFields = SeriesFormatFields;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ChartData } from "@rowsncolumns/spreadsheet";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import type { ChartCellLabelGetter } from "../../../utils/chart-orientation";
|
|
4
|
+
/**
|
|
5
|
+
* Excel's "Series name": either text, or a link to a header cell
|
|
6
|
+
* (`dataLabelSource`, #1100). A linked name shows the cell's current text
|
|
7
|
+
* and the cell it comes from; typing a name replaces the link with the
|
|
8
|
+
* literal, picking a cell links it.
|
|
9
|
+
*/
|
|
10
|
+
export declare const SeriesNameField: ({ sheetId, series, getFormattedValue, onChange, }: {
|
|
11
|
+
sheetId: number;
|
|
12
|
+
series: Pick<ChartData, "dataLabel" | "dataLabelSource">;
|
|
13
|
+
getFormattedValue?: ChartCellLabelGetter;
|
|
14
|
+
onChange(patch: Pick<ChartData, "dataLabel" | "dataLabelSource">): void;
|
|
15
|
+
}) => React.JSX.Element;
|
|
16
|
+
//# sourceMappingURL=series-name-field.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"series-name-field.d.ts","sourceRoot":"","sources":["../../../../../components/editors/fields/series-name-field.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,2BAA2B,CAAC;AAEvE,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAG7E;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,mDAK7B;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,GAAG,iBAAiB,CAAC,CAAC;IACzD,iBAAiB,CAAC,EAAE,oBAAoB,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,GAAG,iBAAiB,CAAC,GAAG,IAAI,CAAC;CACzE,sBA0CA,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SeriesNameField = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var ui_1 = require("@rowsncolumns/ui");
|
|
6
|
+
var react_1 = tslib_1.__importDefault(require("react"));
|
|
7
|
+
var chart_range_input_1 = require("../chart-range-input");
|
|
8
|
+
/**
|
|
9
|
+
* Excel's "Series name": either text, or a link to a header cell
|
|
10
|
+
* (`dataLabelSource`, #1100). A linked name shows the cell's current text
|
|
11
|
+
* and the cell it comes from; typing a name replaces the link with the
|
|
12
|
+
* literal, picking a cell links it.
|
|
13
|
+
*/
|
|
14
|
+
var SeriesNameField = function (_a) {
|
|
15
|
+
var _b, _c;
|
|
16
|
+
var sheetId = _a.sheetId, series = _a.series, getFormattedValue = _a.getFormattedValue, onChange = _a.onChange;
|
|
17
|
+
var source = (_b = series.dataLabelSource) !== null && _b !== void 0 ? _b : undefined;
|
|
18
|
+
var linkedText = source
|
|
19
|
+
? getFormattedValue === null || getFormattedValue === void 0 ? void 0 : getFormattedValue(source.sheetId, source.startRowIndex, source.startColumnIndex)
|
|
20
|
+
: undefined;
|
|
21
|
+
return (react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2" },
|
|
22
|
+
react_1.default.createElement("label", { className: "font-system text-sm" }, "Name"),
|
|
23
|
+
react_1.default.createElement(ui_1.Input, { value: (_c = (source ? linkedText !== null && linkedText !== void 0 ? linkedText : series.dataLabel : series.dataLabel)) !== null && _c !== void 0 ? _c : "", type: "text", onChange: function (e) {
|
|
24
|
+
return onChange({ dataLabel: e.target.value, dataLabelSource: undefined });
|
|
25
|
+
}, className: "text-xs", placeholder: "Series name", "aria-label": "Series name" }),
|
|
26
|
+
react_1.default.createElement("label", { className: "font-system text-xs text-rnc-muted-foreground" }, source ? "Linked to cell" : "Or link to a cell"),
|
|
27
|
+
react_1.default.createElement(chart_range_input_1.ChartRangeInput, { sheetId: sheetId, range: source, onChangeRange: function (range) {
|
|
28
|
+
var _a;
|
|
29
|
+
var cell = tslib_1.__assign(tslib_1.__assign({}, range), { endRowIndex: range.startRowIndex, endColumnIndex: range.startColumnIndex });
|
|
30
|
+
onChange({
|
|
31
|
+
dataLabel: (_a = getFormattedValue === null || getFormattedValue === void 0 ? void 0 : getFormattedValue(cell.sheetId, cell.startRowIndex, cell.startColumnIndex)) !== null && _a !== void 0 ? _a : series.dataLabel,
|
|
32
|
+
dataLabelSource: cell,
|
|
33
|
+
});
|
|
34
|
+
}, placeholder: "Header cell", className: "mb-0" })));
|
|
35
|
+
};
|
|
36
|
+
exports.SeriesNameField = SeriesNameField;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ChartTextFormat } from "@rowsncolumns/spreadsheet";
|
|
2
|
+
import React from "react";
|
|
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>`).
|
|
7
|
+
*/
|
|
8
|
+
export declare const TextFormatFields: ({ label, value, onChange, collapsible, ariaLabels, }: {
|
|
9
|
+
label: string;
|
|
10
|
+
value: ChartTextFormat | null | undefined;
|
|
11
|
+
onChange(next: ChartTextFormat | undefined): void;
|
|
12
|
+
/** Mount the fields behind a "Font…" toggle (secondary text elements). */
|
|
13
|
+
collapsible?: boolean;
|
|
14
|
+
ariaLabels?: {
|
|
15
|
+
family?: string;
|
|
16
|
+
size?: string;
|
|
17
|
+
color?: string;
|
|
18
|
+
};
|
|
19
|
+
}) => React.JSX.Element;
|
|
20
|
+
//# sourceMappingURL=text-format-fields.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TextFormatFields = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var ui_1 = require("@rowsncolumns/ui");
|
|
6
|
+
var react_1 = tslib_1.__importStar(require("react"));
|
|
7
|
+
var primitives_1 = require("./primitives");
|
|
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>`).
|
|
12
|
+
*/
|
|
13
|
+
var TextFormatFields = function (_a) {
|
|
14
|
+
var _b, _c, _d, _e, _f, _g;
|
|
15
|
+
var label = _a.label, value = _a.value, onChange = _a.onChange, _h = _a.collapsible, collapsible = _h === void 0 ? false : _h, ariaLabels = _a.ariaLabels;
|
|
16
|
+
var _j = tslib_1.__read((0, react_1.useState)(!collapsible), 2), open = _j[0], setOpen = _j[1];
|
|
17
|
+
if (collapsible && !open) {
|
|
18
|
+
return (react_1.default.createElement("div", { className: "pb-2" },
|
|
19
|
+
react_1.default.createElement("button", { type: "button", className: "font-system text-xs text-rnc-muted-foreground underline", onClick: function () { return setOpen(true); } },
|
|
20
|
+
label,
|
|
21
|
+
"\u2026")));
|
|
22
|
+
}
|
|
23
|
+
var set = function (patch) {
|
|
24
|
+
var next = tslib_1.__assign(tslib_1.__assign({}, (value !== null && value !== void 0 ? value : {})), patch);
|
|
25
|
+
var entries = Object.entries(next).filter(function (_a) {
|
|
26
|
+
var _b = tslib_1.__read(_a, 2), v = _b[1];
|
|
27
|
+
return v !== undefined && v !== null && v !== false && v !== "";
|
|
28
|
+
});
|
|
29
|
+
onChange(entries.length ? Object.fromEntries(entries) : undefined);
|
|
30
|
+
};
|
|
31
|
+
return (react_1.default.createElement("div", { className: "flex flex-col gap-1 pb-2" },
|
|
32
|
+
react_1.default.createElement("label", { className: "font-system text-sm" }, label),
|
|
33
|
+
react_1.default.createElement("div", { className: "flex items-center gap-1 flex-wrap" },
|
|
34
|
+
react_1.default.createElement(ui_1.Input, { value: (_b = value === null || value === void 0 ? void 0 : value.fontFamily) !== null && _b !== void 0 ? _b : "", type: "text", onChange: function (e) { return set({ fontFamily: e.target.value || undefined }); }, className: "text-xs w-32", placeholder: "Font family", "aria-label": (_c = ariaLabels === null || ariaLabels === void 0 ? void 0 : ariaLabels.family) !== null && _c !== void 0 ? _c : "".concat(label, " family") }),
|
|
35
|
+
react_1.default.createElement(ui_1.Input, { value: (_d = value === null || value === void 0 ? void 0 : value.fontSize) !== null && _d !== void 0 ? _d : "", type: "number", min: 1, onChange: function (e) {
|
|
36
|
+
return set({
|
|
37
|
+
fontSize: e.target.value === "" ? undefined : Number(e.target.value),
|
|
38
|
+
});
|
|
39
|
+
}, 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
|
+
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
|
+
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 }); } }))));
|
|
45
|
+
};
|
|
46
|
+
exports.TextFormatFields = TextFormatFields;
|
package/dist/cjs/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;
|
|
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"}
|
package/dist/cjs/config.js
CHANGED
|
@@ -236,6 +236,9 @@ var HIERARCHY_CHART_TYPES = [
|
|
|
236
236
|
];
|
|
237
237
|
var STATISTICAL_CHART_TYPES = [
|
|
238
238
|
["Histogram", { chartType: "histogram" }],
|
|
239
|
+
// Excel's Pareto: a histogram with its bins sorted descending plus a
|
|
240
|
+
// cumulative-% line (sourceChartType PARETO, the import token).
|
|
241
|
+
["Pareto", { chartType: "histogram", sourceChartType: "PARETO" }],
|
|
239
242
|
["Box & Whisker", { chartType: "boxplot" }],
|
|
240
243
|
];
|
|
241
244
|
var FLOW_CHART_TYPES = [
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { CellInterface, SelectionArea } from "@rowsncolumns/grid";
|
|
2
|
-
import {
|
|
1
|
+
import type { CellInterface, SelectionArea } from "@rowsncolumns/grid";
|
|
2
|
+
import type { EmbeddedChart, SelectionAttributes } from "@rowsncolumns/spreadsheet";
|
|
3
|
+
import { type CellData } from "@rowsncolumns/spreadsheet";
|
|
3
4
|
import type { UseOnCreateChartProps } from "../hooks/use-on-create-chart";
|
|
4
5
|
/**
|
|
5
6
|
* Ensures endIndex is at least minValue.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-chart.d.ts","sourceRoot":"","sources":["../../../interface/create-chart.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"create-chart.d.ts","sourceRoot":"","sources":["../../../interface/create-chart.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,KAAK,EAIV,aAAa,EACb,mBAAmB,EACR,MAAM,2BAA2B,CAAC;AAC/C,OAAO,EACL,KAAK,QAAQ,EACd,MAAM,2BAA2B,CAAC;AAInC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAiB1E;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAC9B,UAAU,MAAM,GAAG,SAAS,EAC5B,UAAU,MAAM,KACf,MAAkF,CAAC;AAEtF,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,QAAQ,EAAE,8FAM7C,qBAAqB,CAAC,CAAC,CAAC,MAEvB,SAAS,MAAM,EACf,YAAY,aAAa,EACzB,YAAY,aAAa,CAAC,mBAAmB,CAAC,EAAE,EAChD,YAAY,aAAa,kBA8H5B,CAAC"}
|
|
@@ -37,6 +37,13 @@ var createChart = function (_a) {
|
|
|
37
37
|
? [
|
|
38
38
|
{
|
|
39
39
|
dataLabel: (_a = getFormattedValue(sheetId, lastSelection.range.startRowIndex, lastSelection.range.startColumnIndex)) !== null && _a !== void 0 ? _a : "",
|
|
40
|
+
dataLabelSource: {
|
|
41
|
+
sheetId: sheetId,
|
|
42
|
+
startRowIndex: lastSelection.range.startRowIndex,
|
|
43
|
+
endRowIndex: lastSelection.range.startRowIndex,
|
|
44
|
+
startColumnIndex: lastSelection.range.startColumnIndex,
|
|
45
|
+
endColumnIndex: lastSelection.range.startColumnIndex,
|
|
46
|
+
},
|
|
40
47
|
sources: categoryAxis,
|
|
41
48
|
aggregateType: "COUNT",
|
|
42
49
|
},
|
|
@@ -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;
|
|
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"}
|