@rowsncolumns/charts 28.1.14 → 28.1.15
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 +308 -270
- 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 +73 -37
- 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
|
@@ -7,15 +7,22 @@ var spreadsheet_state_1 = require("@rowsncolumns/spreadsheet-state");
|
|
|
7
7
|
var ui_1 = require("@rowsncolumns/ui");
|
|
8
8
|
var ui_2 = require("@rowsncolumns/ui");
|
|
9
9
|
var ui_3 = require("@rowsncolumns/ui");
|
|
10
|
+
var utils_1 = require("@rowsncolumns/utils");
|
|
10
11
|
var formik_1 = require("formik");
|
|
11
12
|
var react_1 = tslib_1.__importStar(require("react"));
|
|
12
13
|
var editing_chart_atom_1 = require("../../atoms/editing-chart.atom");
|
|
13
|
-
var chart_range_input_1 = require("./chart-range-input");
|
|
14
14
|
var config_1 = require("../../config");
|
|
15
|
-
var utils_1 = require("@rowsncolumns/utils");
|
|
16
15
|
var chart_orientation_1 = require("../../utils/chart-orientation");
|
|
17
16
|
var chart_spec_utils_1 = require("../../utils/chart-spec-utils");
|
|
18
17
|
var chart_styles_1 = require("../../utils/chart-styles");
|
|
18
|
+
var chart_editor_capabilities_1 = require("./chart-editor-capabilities");
|
|
19
|
+
var chart_range_input_1 = require("./chart-range-input");
|
|
20
|
+
var axis_options_fields_1 = require("./fields/axis-options-fields");
|
|
21
|
+
var chart_type_options_1 = require("./fields/chart-type-options");
|
|
22
|
+
var data_labels_fields_1 = require("./fields/data-labels-fields");
|
|
23
|
+
var series_format_fields_1 = require("./fields/series-format-fields");
|
|
24
|
+
var series_name_field_1 = require("./fields/series-name-field");
|
|
25
|
+
var text_format_fields_1 = require("./fields/text-format-fields");
|
|
19
26
|
var AGGREGATE_OPTIONS = [
|
|
20
27
|
{ label: "Sum", value: "SUM" },
|
|
21
28
|
{ label: "Average", value: "AVERAGE" },
|
|
@@ -48,7 +55,7 @@ var Section = function (_a) {
|
|
|
48
55
|
react_1.default.createElement("div", { className: "flex flex-col gap-2 pb-3" }, children)));
|
|
49
56
|
};
|
|
50
57
|
var ChartEditor = function (_a) {
|
|
51
|
-
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
|
|
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;
|
|
52
59
|
var chart = _a.chart, sheetId = _a.sheetId, onSubmit = _a.onSubmit, onRequestMoveChart = _a.onRequestMoveChart, getFormattedValue = _a.getFormattedValue;
|
|
53
60
|
var setChartDialogState = (0, editing_chart_atom_1.useSetChartEditorDialogState)();
|
|
54
61
|
// Close dialog
|
|
@@ -68,7 +75,7 @@ var ChartEditor = function (_a) {
|
|
|
68
75
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
69
76
|
[chart === null || chart === void 0 ? void 0 : chart.chartId]);
|
|
70
77
|
// Formik
|
|
71
|
-
var
|
|
78
|
+
var _1 = (0, formik_1.useFormik)({
|
|
72
79
|
initialValues: initialValues,
|
|
73
80
|
enableReinitialize: true,
|
|
74
81
|
onSubmit: function (values) {
|
|
@@ -80,63 +87,136 @@ var ChartEditor = function (_a) {
|
|
|
80
87
|
// Close dialog
|
|
81
88
|
closeDialog();
|
|
82
89
|
},
|
|
83
|
-
}), handleSubmit =
|
|
90
|
+
}), handleSubmit = _1.handleSubmit, setFieldValue = _1.setFieldValue, resetForm = _1.resetForm, values = _1.values;
|
|
84
91
|
var onCancelForm = function () {
|
|
85
92
|
resetForm();
|
|
86
93
|
closeDialog();
|
|
87
94
|
};
|
|
88
|
-
var
|
|
89
|
-
var
|
|
90
|
-
var
|
|
91
|
-
|
|
95
|
+
var spec = values.spec;
|
|
96
|
+
var basicSpec = (0, chart_spec_utils_1.isBasicChartSpec)(spec) ? spec : undefined;
|
|
97
|
+
var bubbleSpec = (0, chart_spec_utils_1.isBubbleChartSpec)(spec) ? spec : undefined;
|
|
98
|
+
var treemapSpec = (0, chart_spec_utils_1.isHierarchyChartSpec)(spec)
|
|
99
|
+
? spec
|
|
92
100
|
: undefined;
|
|
93
|
-
//
|
|
94
|
-
//
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
:
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
var
|
|
105
|
-
? basicSpec.
|
|
106
|
-
:
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
var
|
|
111
|
-
|
|
112
|
-
radarStyle: (basicSpec === null || basicSpec === void 0 ? void 0 : basicSpec.chartType) === "radar",
|
|
113
|
-
stockVariant: (basicSpec === null || basicSpec === void 0 ? void 0 : basicSpec.chartType) === "stock",
|
|
114
|
-
doughnutHoleSize: (basicSpec === null || basicSpec === void 0 ? void 0 : basicSpec.chartType) === "doughnut",
|
|
115
|
-
explosion: (basicSpec === null || basicSpec === void 0 ? void 0 : basicSpec.chartType) === "pie" || (basicSpec === null || basicSpec === void 0 ? void 0 : basicSpec.chartType) === "doughnut",
|
|
116
|
-
gapWidth: isBarOrColumnBasic,
|
|
117
|
-
overlap: isBarOrColumnBasic,
|
|
101
|
+
// Which controls this chart type has — Excel's rule set, so an option is
|
|
102
|
+
// only offered where the chart (and the renderers) honour it (#1102).
|
|
103
|
+
var caps = (0, chart_editor_capabilities_1.getChartEditorCapabilities)(spec);
|
|
104
|
+
// The series of a basic or bubble chart. Guarded: a spec converted from
|
|
105
|
+
// another category used to arrive without `series` and crash the editor
|
|
106
|
+
// on `series.some` (#1101).
|
|
107
|
+
var seriesList = basicSpec
|
|
108
|
+
? (_b = basicSpec.series) !== null && _b !== void 0 ? _b : []
|
|
109
|
+
: bubbleSpec
|
|
110
|
+
? (_c = bubbleSpec.series) !== null && _c !== void 0 ? _c : []
|
|
111
|
+
: [];
|
|
112
|
+
var domainsList = basicSpec
|
|
113
|
+
? (_d = basicSpec.domains) !== null && _d !== void 0 ? _d : []
|
|
114
|
+
: bubbleSpec
|
|
115
|
+
? (_e = bubbleSpec.domains) !== null && _e !== void 0 ? _e : []
|
|
116
|
+
: [];
|
|
117
|
+
var isAggregateType = seriesList.some(function (serie) { return serie.aggregateType; });
|
|
118
|
+
var setSeries = function (index, patch) {
|
|
119
|
+
return setFieldValue("spec.series[".concat(index, "]"), tslib_1.__assign(tslib_1.__assign({}, seriesList[index]), patch));
|
|
118
120
|
};
|
|
119
|
-
var
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
var
|
|
128
|
-
|
|
121
|
+
var hasSeriesFormat = caps.hasSecondaryAxis ||
|
|
122
|
+
caps.hasTrendlines ||
|
|
123
|
+
caps.hasErrorBars ||
|
|
124
|
+
caps.hasSeriesFill ||
|
|
125
|
+
caps.hasInvertIfNegative ||
|
|
126
|
+
caps.hasMarkers ||
|
|
127
|
+
caps.hasPointColors ||
|
|
128
|
+
caps.hasDataLabels;
|
|
129
|
+
var categoryLevels = (_f = basicSpec === null || basicSpec === void 0 ? void 0 : basicSpec.categoryLevels) !== null && _f !== void 0 ? _f : [];
|
|
130
|
+
var hasTypeOptions = (0, chart_type_options_1.chartTypeHasOptions)(spec, caps);
|
|
131
|
+
var renderChartDataSection = function (label, field, data, helperText, levels) {
|
|
132
|
+
// A levelled section (parent labels, category levels) starts empty and
|
|
133
|
+
// grows with "Add level"; a plain section always shows one input.
|
|
134
|
+
var sections = data.length > 0 ? data : levels ? [] : [{ sources: [] }];
|
|
129
135
|
return (react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-3" },
|
|
130
136
|
react_1.default.createElement("label", { className: "font-system text-sm" }, label),
|
|
131
137
|
helperText ? (react_1.default.createElement("p", { className: "m-0 text-xs text-rnc-text-weak" }, helperText)) : null,
|
|
132
138
|
sections.map(function (domain, i) {
|
|
133
139
|
var sources = domain.sources.length > 0 ? domain.sources : [undefined];
|
|
134
|
-
return sources.map(function (source, idx) { return (react_1.default.createElement("div", { key: "".concat(values.chartId, "-").concat(label, "-").concat(sections.length, "-").concat(i, "-").concat(idx) },
|
|
140
|
+
return sources.map(function (source, idx) { return (react_1.default.createElement("div", { key: "".concat(values.chartId, "-").concat(label, "-").concat(sections.length, "-").concat(i, "-").concat(idx), className: "flex items-center gap-1" },
|
|
135
141
|
react_1.default.createElement(chart_range_input_1.ChartRangeInput, { sheetId: sheetId, range: source, onChangeRange: function (range) {
|
|
136
142
|
setFieldValue("spec.".concat(field, "[").concat(i, "].sources[").concat(idx, "]"), range);
|
|
137
|
-
}, required: true, placeholder: "Select a range", className: "mb-0 flex-1" })
|
|
138
|
-
|
|
143
|
+
}, required: true, placeholder: "Select a range", className: "mb-0 flex-1" }),
|
|
144
|
+
levels && data.length > 1 ? (react_1.default.createElement(ui_1.IconButton, { type: "button", "aria-label": "".concat(levels.removeLabel, " ").concat(i + 1), title: levels.removeLabel, onClick: function () {
|
|
145
|
+
return setFieldValue("spec.".concat(field), data.filter(function (_, levelIndex) { return levelIndex !== i; }));
|
|
146
|
+
} },
|
|
147
|
+
react_1.default.createElement(icons_1.CrossCircledIcon, null))) : null)); });
|
|
148
|
+
}),
|
|
149
|
+
levels ? (react_1.default.createElement("div", null,
|
|
150
|
+
react_1.default.createElement(ui_1.Button, { variant: "link", type: "button", className: "cursor-pointer", onClick: function () {
|
|
151
|
+
return setFieldValue("spec.".concat(field), tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(data), false), [{ sources: [] }], false));
|
|
152
|
+
} }, levels.addLabel))) : null));
|
|
153
|
+
};
|
|
154
|
+
var renderSeriesCard = function (entry, i) {
|
|
155
|
+
var _a;
|
|
156
|
+
var sources = ((_a = entry.sources) === null || _a === void 0 ? void 0 : _a.length) > 0 ? entry.sources : [undefined];
|
|
157
|
+
return sources.map(function (source, idx) {
|
|
158
|
+
var _a, _b, _c;
|
|
159
|
+
return (react_1.default.createElement("div", { className: "border border-rnc-border border-solid p-2 relative", key: "".concat(values.chartId, "-series-").concat(seriesList.length, "-").concat(i, "-").concat(idx) },
|
|
160
|
+
react_1.default.createElement("div", { className: "flex gap-2 items-start flex-wrap" },
|
|
161
|
+
react_1.default.createElement(series_name_field_1.SeriesNameField, { sheetId: sheetId, series: entry, getFormattedValue: getFormattedValue, onChange: function (patch) { return setSeries(i, patch); } }),
|
|
162
|
+
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 flex-1" },
|
|
163
|
+
react_1.default.createElement("label", { className: "font-system text-sm" }, "Y values"),
|
|
164
|
+
react_1.default.createElement(chart_range_input_1.ChartRangeInput, { sheetId: sheetId, range: source, onChangeRange: function (range) {
|
|
165
|
+
setFieldValue("spec.series[".concat(i, "].sources[").concat(idx, "]"), range);
|
|
166
|
+
}, required: true, placeholder: "Select a range", className: "mb-0" })),
|
|
167
|
+
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2 w-20" },
|
|
168
|
+
react_1.default.createElement("label", { className: "font-system text-sm" }, "Color"),
|
|
169
|
+
react_1.default.createElement("div", { className: "flex items-center gap-1" },
|
|
170
|
+
react_1.default.createElement("input", { type: "color", value: (_a = entry.color) !== null && _a !== void 0 ? _a : "#4285F4", "aria-label": "Series ".concat(i + 1, " color"), onChange: function (e) { return setSeries(i, { color: e.target.value }); }, className: "h-6 w-8 p-0 border border-rnc-border rounded-sm bg-transparent cursor-pointer" }),
|
|
171
|
+
entry.color ? (react_1.default.createElement(ui_1.IconButton, { type: "button", "aria-label": "Clear series ".concat(i + 1, " color"), title: "Automatic color", onClick: function () { return setSeries(i, { color: undefined }); } },
|
|
172
|
+
react_1.default.createElement(icons_1.CrossCircledIcon, null))) : null)),
|
|
173
|
+
isAggregateType ? (react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2 w-32" },
|
|
174
|
+
react_1.default.createElement("label", { className: "font-system text-sm" }, "Aggregate type"),
|
|
175
|
+
react_1.default.createElement("select", { className: "border border-rnc-border rounded-sm px-1 py-1 text-xs bg-transparent", value: (_b = entry.aggregateType) !== null && _b !== void 0 ? _b : "", onChange: function (event) {
|
|
176
|
+
var aggregateType = event.target.value;
|
|
177
|
+
setSeries(i, { aggregateType: aggregateType || undefined });
|
|
178
|
+
} },
|
|
179
|
+
react_1.default.createElement("option", { value: "" }, "None"),
|
|
180
|
+
AGGREGATE_OPTIONS.map(function (option) { return (react_1.default.createElement("option", { key: option.value, value: option.value }, option.label)); })))) : null,
|
|
181
|
+
caps.hasSeriesChartType ? (react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2 w-28" },
|
|
182
|
+
react_1.default.createElement("label", { className: "font-system text-sm" }, "Series type"),
|
|
183
|
+
react_1.default.createElement("select", { className: "border border-rnc-border rounded-sm px-1 py-1 text-xs bg-transparent", value: (_c = entry.seriesChartType) !== null && _c !== void 0 ? _c : "", "aria-label": "Series ".concat(i + 1, " type"), onChange: function (event) {
|
|
184
|
+
return setSeries(i, {
|
|
185
|
+
seriesChartType: (event.target.value || undefined),
|
|
186
|
+
});
|
|
187
|
+
} },
|
|
188
|
+
react_1.default.createElement("option", { value: "" }, "Default"),
|
|
189
|
+
react_1.default.createElement("option", { value: "column" }, "Column"),
|
|
190
|
+
react_1.default.createElement("option", { value: "bar" }, "Bar"),
|
|
191
|
+
react_1.default.createElement("option", { value: "line" }, "Line"),
|
|
192
|
+
react_1.default.createElement("option", { value: "area" }, "Area")))) : null),
|
|
193
|
+
hasSeriesFormat ? (react_1.default.createElement("details", { className: "mt-2 group/fmt" },
|
|
194
|
+
react_1.default.createElement("summary", { className: "cursor-pointer list-none py-1 font-system text-xs text-rnc-muted-foreground select-none [&::-webkit-details-marker]:hidden flex items-center gap-1" },
|
|
195
|
+
react_1.default.createElement(icons_1.ChevronRightIcon, { className: "transition-transform group-open/fmt:rotate-90" }),
|
|
196
|
+
"Format"),
|
|
197
|
+
react_1.default.createElement(series_format_fields_1.SeriesFormatFields, { sheetId: sheetId, series: entry, capabilities: caps, onChange: function (patch) { return setSeries(i, patch); } }))) : null,
|
|
198
|
+
react_1.default.createElement(ui_1.IconButton, { className: "absolute right-1 top-1", type: "button", "aria-label": "Remove series ".concat(i + 1), onClick: function () {
|
|
199
|
+
return setFieldValue("spec.series", seriesList.filter(function (_, seriesIndex) { return seriesIndex !== i; }));
|
|
200
|
+
} },
|
|
201
|
+
react_1.default.createElement(icons_1.CrossCircledIcon, null))));
|
|
202
|
+
});
|
|
139
203
|
};
|
|
204
|
+
var renderSeriesList = function () { return (react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-2 pb-2" },
|
|
205
|
+
react_1.default.createElement("label", { className: "font-system text-sm" }, "Legend entries (series)"),
|
|
206
|
+
seriesList.map(renderSeriesCard),
|
|
207
|
+
react_1.default.createElement("div", { className: "py-1" },
|
|
208
|
+
react_1.default.createElement(ui_1.Button, { variant: "link", type: "button", className: "cursor-pointer", onClick: function () {
|
|
209
|
+
var lastSeries = seriesList[seriesList.length - 1];
|
|
210
|
+
setFieldValue("spec.series", tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(seriesList), false), [
|
|
211
|
+
{
|
|
212
|
+
sources: lastSeries
|
|
213
|
+
? lastSeries.sources
|
|
214
|
+
: spec.dataRange
|
|
215
|
+
? [spec.dataRange]
|
|
216
|
+
: [],
|
|
217
|
+
},
|
|
218
|
+
], false));
|
|
219
|
+
} }, "Add series")))); };
|
|
140
220
|
return (react_1.default.createElement("form", { onSubmit: handleSubmit, className: "flex flex-col" },
|
|
141
221
|
react_1.default.createElement(ui_1.Tabs, { defaultValue: "setup", className: "w-full" },
|
|
142
222
|
react_1.default.createElement(ui_1.TabsList, { className: "grid-cols-2" },
|
|
@@ -170,10 +250,10 @@ var ChartEditor = function (_a) {
|
|
|
170
250
|
}))))),
|
|
171
251
|
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2" },
|
|
172
252
|
react_1.default.createElement("label", { className: "font-system text-sm" }, "Chart data range"),
|
|
173
|
-
((
|
|
253
|
+
((_g = values.spec) === null || _g === void 0 ? void 0 : _g.pivotTableId) != null ? (
|
|
174
254
|
// A PivotChart's range follows its pivot's data area; it is not
|
|
175
255
|
// editable here (Excel greys the range on a PivotChart too).
|
|
176
|
-
react_1.default.createElement("span", { className: "font-system text-xs text-rnc-muted-foreground" }, "Bound to PivotTable \u2014 the data range follows the pivot.")) : (react_1.default.createElement(chart_range_input_1.ChartRangeInput, { key: values.chartId, sheetId: sheetId, range: (
|
|
256
|
+
react_1.default.createElement("span", { className: "font-system text-xs text-rnc-muted-foreground" }, "Bound to PivotTable \u2014 the data range follows the pivot.")) : (react_1.default.createElement(chart_range_input_1.ChartRangeInput, { key: values.chartId, sheetId: sheetId, range: (_j = (_h = values.spec) === null || _h === void 0 ? void 0 : _h.dataRange) !== null && _j !== void 0 ? _j : undefined, onChangeRange: function (range) {
|
|
177
257
|
setFieldValue("spec.dataRange", range);
|
|
178
258
|
}, required: true, placeholder: "Select a range", className: "mb-0" }))),
|
|
179
259
|
basicSpec ? (react_1.default.createElement(ui_1.Stack, { direction: "horizontal", className: "gap-2 pb-2 items-center" },
|
|
@@ -190,271 +270,53 @@ var ChartEditor = function (_a) {
|
|
|
190
270
|
basicSpec ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
191
271
|
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2" },
|
|
192
272
|
react_1.default.createElement("label", { className: "font-system text-sm" }, "Horizontal (category) axis labels"),
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
273
|
+
domainsList.map(function (domain, i) {
|
|
274
|
+
var _a;
|
|
275
|
+
return ((_a = domain.sources) !== null && _a !== void 0 ? _a : []).map(function (source, idx) {
|
|
276
|
+
return (react_1.default.createElement(chart_range_input_1.ChartRangeInput, { key: "".concat(values.chartId, "-domains-").concat(domainsList.length, "-").concat(i, "-").concat(idx), sheetId: sheetId, range: source, onChangeRange: function (range) {
|
|
196
277
|
setFieldValue("spec.domains[".concat(i, "].sources[").concat(idx, "]"), range);
|
|
197
278
|
}, required: true, placeholder: "Select a range", className: "mb-0" }));
|
|
198
279
|
});
|
|
199
280
|
})),
|
|
200
|
-
react_1.default.createElement("
|
|
201
|
-
react_1.default.createElement("
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
"Aggregate"),
|
|
206
|
-
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2" },
|
|
207
|
-
react_1.default.createElement("label", { className: "font-system text-sm" }, "Legend entries (series)"),
|
|
208
|
-
basicSpec.series.map(function (domain, i) {
|
|
209
|
-
return domain.sources.map(function (source, idx) {
|
|
210
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
|
|
211
|
-
return (react_1.default.createElement("div", { className: "border border-rnc-border border-solid p-2 relative", key: "".concat(values.chartId, "-series-").concat(basicSpec.series.length, "-").concat(i, "-").concat(idx) },
|
|
212
|
-
react_1.default.createElement("div", { className: "flex gap-2 " },
|
|
213
|
-
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2" },
|
|
214
|
-
react_1.default.createElement("label", { className: "font-system text-sm" }, "Name"),
|
|
215
|
-
react_1.default.createElement(ui_1.Input, { value: (_a = domain.dataLabel) !== null && _a !== void 0 ? _a : "", type: "text", name: "fromValue", onChange: function (e) {
|
|
216
|
-
return setFieldValue("spec.series[".concat(i, "].dataLabel"), e.target.value);
|
|
217
|
-
}, className: "text-xs", placeholder: "Enter value" })),
|
|
218
|
-
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 flex-1" },
|
|
219
|
-
react_1.default.createElement("label", { className: "font-system text-sm" }, "Y values"),
|
|
220
|
-
react_1.default.createElement(chart_range_input_1.ChartRangeInput, { sheetId: sheetId, range: source, onChangeRange: function (range) {
|
|
221
|
-
setFieldValue("spec.series[".concat(i, "].sources[").concat(idx, "]"), range);
|
|
222
|
-
}, required: true, placeholder: "Select a range", className: "mb-0" })),
|
|
223
|
-
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2 w-20" },
|
|
224
|
-
react_1.default.createElement("label", { className: "font-system text-sm" }, "Color"),
|
|
225
|
-
react_1.default.createElement("div", { className: "flex items-center gap-1" },
|
|
226
|
-
react_1.default.createElement("input", { type: "color", value: (_b = domain.color) !== null && _b !== void 0 ? _b : "#4285F4", onChange: function (e) {
|
|
227
|
-
return setFieldValue("spec.series[".concat(i, "].color"), e.target.value);
|
|
228
|
-
}, className: "h-6 w-8 p-0 border border-rnc-border rounded-sm bg-transparent cursor-pointer", "aria-label": "Series color" }),
|
|
229
|
-
domain.color ? (react_1.default.createElement(ui_1.IconButton, { type: "button", onClick: function () {
|
|
230
|
-
return setFieldValue("spec.series[".concat(i, "].color"), undefined);
|
|
231
|
-
}, "aria-label": "Clear series color" },
|
|
232
|
-
react_1.default.createElement(icons_1.CrossCircledIcon, null))) : null)),
|
|
233
|
-
isAggregateType ? (react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2 w-32" },
|
|
234
|
-
react_1.default.createElement("label", { className: "font-system text-sm" }, "Aggregate type"),
|
|
235
|
-
react_1.default.createElement("select", { className: "border border-rnc-border rounded-sm px-1 py-1 text-xs bg-transparent", value: (_c = domain.aggregateType) !== null && _c !== void 0 ? _c : "", onChange: function (event) {
|
|
236
|
-
var aggregateType = event.target.value;
|
|
237
|
-
setFieldValue("spec.series[".concat(i, "].aggregateType"), aggregateType || undefined);
|
|
238
|
-
} },
|
|
239
|
-
react_1.default.createElement("option", { value: "" }, "None"),
|
|
240
|
-
AGGREGATE_OPTIONS.map(function (option) { return (react_1.default.createElement("option", { key: option.value, value: option.value }, option.label)); })))) : null,
|
|
241
|
-
basicSpec.chartType === "combo" ? (react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2 w-32" },
|
|
242
|
-
react_1.default.createElement("label", { className: "font-system text-sm" }, "Series type"),
|
|
243
|
-
react_1.default.createElement("select", { className: "border border-rnc-border rounded-sm px-1 py-1 text-xs bg-transparent", value: (_d = domain.seriesChartType) !== null && _d !== void 0 ? _d : "bar", onChange: function (event) {
|
|
244
|
-
setFieldValue("spec.series[".concat(i, "].seriesChartType"), event.target.value || undefined);
|
|
245
|
-
} },
|
|
246
|
-
react_1.default.createElement("option", { value: "bar" }, "Bar"),
|
|
247
|
-
react_1.default.createElement("option", { value: "column" }, "Column"),
|
|
248
|
-
react_1.default.createElement("option", { value: "line" }, "Line"),
|
|
249
|
-
react_1.default.createElement("option", { value: "area" }, "Area")))) : null),
|
|
250
|
-
basicSpec.chartType !== "pie" &&
|
|
251
|
-
basicSpec.chartType !== "doughnut" &&
|
|
252
|
-
basicSpec.chartType !== "radar" &&
|
|
253
|
-
basicSpec.chartType !== "stock" ? (react_1.default.createElement("details", { className: "mt-2 group/fmt" },
|
|
254
|
-
react_1.default.createElement("summary", { className: "cursor-pointer list-none py-1 font-system text-xs text-rnc-muted-foreground select-none [&::-webkit-details-marker]:hidden flex items-center gap-1" },
|
|
255
|
-
react_1.default.createElement(icons_1.ChevronRightIcon, { className: "transition-transform group-open/fmt:rotate-90" }),
|
|
256
|
-
"Format"),
|
|
257
|
-
react_1.default.createElement("div", { className: "flex flex-col gap-2 pt-2 border border-rnc-border border-solid mt-2" },
|
|
258
|
-
react_1.default.createElement("label", { className: "font-system text-sm flex items-center gap-1" },
|
|
259
|
-
react_1.default.createElement("input", { type: "checkbox", checked: !!domain.useSecondaryAxis, onChange: function (e) {
|
|
260
|
-
return setFieldValue("spec.series[".concat(i, "].useSecondaryAxis"), e.target.checked || undefined);
|
|
261
|
-
} }),
|
|
262
|
-
"Plot on secondary axis"),
|
|
263
|
-
react_1.default.createElement("div", { className: "flex items-center gap-2" },
|
|
264
|
-
react_1.default.createElement("label", { className: "font-system text-sm flex items-center gap-1" },
|
|
265
|
-
react_1.default.createElement("input", { type: "checkbox", checked: ((_f = (_e = domain.trendlines) === null || _e === void 0 ? void 0 : _e.length) !== null && _f !== void 0 ? _f : 0) > 0, onChange: function (e) {
|
|
266
|
-
var _a, _b;
|
|
267
|
-
return setFieldValue("spec.series[".concat(i, "].trendlines"), e.target.checked
|
|
268
|
-
? [
|
|
269
|
-
(_b = (_a = domain.trendlines) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : {
|
|
270
|
-
type: "linear",
|
|
271
|
-
},
|
|
272
|
-
]
|
|
273
|
-
: undefined);
|
|
274
|
-
} }),
|
|
275
|
-
"Trendline"),
|
|
276
|
-
((_h = (_g = domain.trendlines) === null || _g === void 0 ? void 0 : _g.length) !== null && _h !== void 0 ? _h : 0) > 0 ? (react_1.default.createElement("select", { className: "border border-rnc-border rounded-sm px-1 py-1 text-xs bg-transparent", value: (_l = (_k = (_j = domain.trendlines) === null || _j === void 0 ? void 0 : _j[0]) === null || _k === void 0 ? void 0 : _k.type) !== null && _l !== void 0 ? _l : "linear", onChange: function (event) {
|
|
277
|
-
var _a, _b, _c, _d, _e;
|
|
278
|
-
return setFieldValue("spec.series[".concat(i, "].trendlines[0]"), tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({}, ((_b = (_a = domain.trendlines) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : {})), { type: event.target.value }), (event.target.value === "poly"
|
|
279
|
-
? {
|
|
280
|
-
order: (_e = (_d = (_c = domain.trendlines) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.order) !== null && _e !== void 0 ? _e : 2,
|
|
281
|
-
}
|
|
282
|
-
: {})));
|
|
283
|
-
} },
|
|
284
|
-
react_1.default.createElement("option", { value: "linear" }, "Linear"),
|
|
285
|
-
react_1.default.createElement("option", { value: "poly" }, "Polynomial"),
|
|
286
|
-
react_1.default.createElement("option", { value: "exp" }, "Exponential"),
|
|
287
|
-
react_1.default.createElement("option", { value: "log" }, "Logarithmic"))) : null),
|
|
288
|
-
react_1.default.createElement("div", { className: "flex items-center gap-2 flex-wrap" },
|
|
289
|
-
react_1.default.createElement("label", { className: "font-system text-sm flex items-center gap-1" },
|
|
290
|
-
react_1.default.createElement("input", { type: "checkbox", checked: !!domain.errorBars, onChange: function (e) {
|
|
291
|
-
var _a;
|
|
292
|
-
return setFieldValue("spec.series[".concat(i, "].errorBars"), e.target.checked
|
|
293
|
-
? (_a = domain.errorBars) !== null && _a !== void 0 ? _a : {
|
|
294
|
-
valueType: "percentage",
|
|
295
|
-
value: 5,
|
|
296
|
-
}
|
|
297
|
-
: undefined);
|
|
298
|
-
} }),
|
|
299
|
-
"Error bars"),
|
|
300
|
-
domain.errorBars ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
301
|
-
react_1.default.createElement("select", { className: "border border-rnc-border rounded-sm px-1 py-1 text-xs bg-transparent", value: (_o = (_m = domain.errorBars) === null || _m === void 0 ? void 0 : _m.valueType) !== null && _o !== void 0 ? _o : "percentage", onChange: function (event) {
|
|
302
|
-
var _a;
|
|
303
|
-
return setFieldValue("spec.series[".concat(i, "].errorBars"), tslib_1.__assign(tslib_1.__assign({}, ((_a = domain.errorBars) !== null && _a !== void 0 ? _a : {})), { valueType: event.target.value }));
|
|
304
|
-
} },
|
|
305
|
-
react_1.default.createElement("option", { value: "fixedVal" }, "Fixed"),
|
|
306
|
-
react_1.default.createElement("option", { value: "percentage" }, "Percentage"),
|
|
307
|
-
react_1.default.createElement("option", { value: "stdDev" }, "Std deviation"),
|
|
308
|
-
react_1.default.createElement("option", { value: "stdErr" }, "Std error")),
|
|
309
|
-
((_p = domain.errorBars) === null || _p === void 0 ? void 0 : _p.valueType) !==
|
|
310
|
-
"stdErr" ? (react_1.default.createElement(ui_1.Input, { type: "number", value: (_r = (_q = domain.errorBars) === null || _q === void 0 ? void 0 : _q.value) !== null && _r !== void 0 ? _r : "", onChange: function (e) {
|
|
311
|
-
var _a;
|
|
312
|
-
return setFieldValue("spec.series[".concat(i, "].errorBars"), tslib_1.__assign(tslib_1.__assign({}, ((_a = domain.errorBars) !== null && _a !== void 0 ? _a : {})), { value: e.target.value === ""
|
|
313
|
-
? undefined
|
|
314
|
-
: Number(e.target.value) }));
|
|
315
|
-
}, className: "text-xs w-20", placeholder: "Value" })) : null)) : null),
|
|
316
|
-
react_1.default.createElement("label", { className: "font-system text-sm flex items-center gap-1" },
|
|
317
|
-
react_1.default.createElement("input", { type: "checkbox", checked: !!domain.gradient, onChange: function (e) {
|
|
318
|
-
var _a, _b;
|
|
319
|
-
return setFieldValue("spec.series[".concat(i, "].gradient"), e.target.checked
|
|
320
|
-
? (_a = domain.gradient) !== null && _a !== void 0 ? _a : {
|
|
321
|
-
type: "linear",
|
|
322
|
-
degree: 90,
|
|
323
|
-
stops: [
|
|
324
|
-
{
|
|
325
|
-
position: 0,
|
|
326
|
-
color: (_b = domain.color) !== null && _b !== void 0 ? _b : "#4285F4",
|
|
327
|
-
},
|
|
328
|
-
{
|
|
329
|
-
position: 1,
|
|
330
|
-
color: "#FFFFFF",
|
|
331
|
-
},
|
|
332
|
-
],
|
|
333
|
-
}
|
|
334
|
-
: undefined);
|
|
335
|
-
} }),
|
|
336
|
-
"Gradient fill")))) : null,
|
|
337
|
-
react_1.default.createElement(ui_1.IconButton, { className: "absolute right-1 top-1", type: "button", onClick: function () {
|
|
338
|
-
var currentSeries = basicSpec.series;
|
|
339
|
-
setFieldValue("spec.series", currentSeries.filter(function (_, seriesIndex) { return seriesIndex !== i; }));
|
|
340
|
-
} },
|
|
341
|
-
react_1.default.createElement(icons_1.CrossCircledIcon, null))));
|
|
342
|
-
});
|
|
343
|
-
}),
|
|
344
|
-
react_1.default.createElement("div", { className: "py-1" },
|
|
345
|
-
react_1.default.createElement(ui_1.Button, { variant: "link", onClick: function () {
|
|
346
|
-
var nextSeries = basicSpec.series;
|
|
347
|
-
var lastSeries = nextSeries[nextSeries.length - 1];
|
|
348
|
-
setFieldValue("spec.series", tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(nextSeries), false), [
|
|
349
|
-
{
|
|
350
|
-
sources: lastSeries
|
|
351
|
-
? lastSeries.sources
|
|
352
|
-
: values.spec.dataRange
|
|
353
|
-
? [values.spec.dataRange]
|
|
354
|
-
: [],
|
|
355
|
-
},
|
|
356
|
-
], false));
|
|
357
|
-
}, type: "button", className: "cursor-pointer" }, "Add series"))))) : null,
|
|
281
|
+
caps.hasCategoryLevels ? (react_1.default.createElement("details", { className: "pb-2" },
|
|
282
|
+
react_1.default.createElement("summary", { className: "cursor-pointer list-none font-system text-xs text-rnc-muted-foreground select-none [&::-webkit-details-marker]:hidden" },
|
|
283
|
+
"Category axis levels",
|
|
284
|
+
categoryLevels.length ? " (".concat(categoryLevels.length, ")") : ""),
|
|
285
|
+
renderChartDataSection("Category axis levels", "categoryLevels", categoryLevels, "One range per level, outermost first; the last level is the plotted categories.", { addLabel: "Add level", removeLabel: "Remove level" }))) : null)) : null,
|
|
358
286
|
bubbleSpec ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
359
|
-
react_1.default.createElement("label", { className: "font-system text-sm flex items-center gap-1 pb-2" },
|
|
360
|
-
react_1.default.createElement("input", { type: "checkbox", checked: bubbleAggregateEnabled, onChange: function (e) {
|
|
361
|
-
var nextSeries = bubbleSpec.series.map(function (serie) { return (tslib_1.__assign(tslib_1.__assign({}, serie), { aggregateType: e.target.checked ? "SUM" : undefined })); });
|
|
362
|
-
setFieldValue("spec.series", nextSeries);
|
|
363
|
-
} }),
|
|
364
|
-
"Aggregate"),
|
|
365
287
|
react_1.default.createElement("label", { className: "font-system text-sm flex items-center gap-1 pb-2" },
|
|
366
288
|
react_1.default.createElement("input", { type: "checkbox", checked: bubbleSpec.useFirstRowAsHeaders !== false, onChange: function (e) {
|
|
367
289
|
return setFieldValue("spec.useFirstRowAsHeaders", e.target.checked);
|
|
368
290
|
} }),
|
|
369
291
|
"Use first row as headers"),
|
|
370
292
|
bubbleSpec.chartType === "bubble"
|
|
371
|
-
? renderChartDataSection("Bubble labels", "bubbleLabels", (
|
|
293
|
+
? renderChartDataSection("Bubble labels", "bubbleLabels", (_k = bubbleSpec.bubbleLabels) !== null && _k !== void 0 ? _k : [], "Select the cells containing labels for each bubble.")
|
|
372
294
|
: null,
|
|
373
|
-
renderChartDataSection("X values", "domains",
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
react_1.default.createElement("label", { className: "font-system text-sm" }, "Name"),
|
|
386
|
-
react_1.default.createElement(ui_1.Input, { value: (_a = seriesEntry.dataLabel) !== null && _a !== void 0 ? _a : "", type: "text", onChange: function (e) {
|
|
387
|
-
return setFieldValue("spec.series[".concat(i, "].dataLabel"), e.target.value);
|
|
388
|
-
}, className: "text-xs", placeholder: "Enter label" })),
|
|
389
|
-
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 flex-1" },
|
|
390
|
-
react_1.default.createElement("label", { className: "font-system text-sm" }, "Y values"),
|
|
391
|
-
react_1.default.createElement(chart_range_input_1.ChartRangeInput, { sheetId: sheetId, range: source, onChangeRange: function (range) {
|
|
392
|
-
setFieldValue("spec.series[".concat(i, "].sources[").concat(idx, "]"), range);
|
|
393
|
-
}, required: true, placeholder: "Select a range", className: "mb-0 flex-1" })),
|
|
394
|
-
bubbleSpec.chartType === "scatter" ? (react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2 w-24" },
|
|
395
|
-
react_1.default.createElement("label", { className: "font-system text-sm" }, "Marker"),
|
|
396
|
-
react_1.default.createElement("select", { className: "border border-rnc-border rounded-sm px-1 py-1 text-xs bg-transparent", value: (_c = (_b = seriesEntry.marker) === null || _b === void 0 ? void 0 : _b.symbol) !== null && _c !== void 0 ? _c : "", onChange: function (event) {
|
|
397
|
-
var _a;
|
|
398
|
-
return setFieldValue("spec.series[".concat(i, "].marker"), tslib_1.__assign(tslib_1.__assign({}, ((_a = seriesEntry.marker) !== null && _a !== void 0 ? _a : {})), { symbol: event.target.value || undefined }));
|
|
399
|
-
} },
|
|
400
|
-
react_1.default.createElement("option", { value: "" }, "Auto"),
|
|
401
|
-
react_1.default.createElement("option", { value: "circle" }, "Circle"),
|
|
402
|
-
react_1.default.createElement("option", { value: "square" }, "Square"),
|
|
403
|
-
react_1.default.createElement("option", { value: "diamond" }, "Diamond"),
|
|
404
|
-
react_1.default.createElement("option", { value: "triangle" }, "Triangle"),
|
|
405
|
-
react_1.default.createElement("option", { value: "x" }, "X"),
|
|
406
|
-
react_1.default.createElement("option", { value: "plus" }, "Plus"),
|
|
407
|
-
react_1.default.createElement("option", { value: "star" }, "Star"),
|
|
408
|
-
react_1.default.createElement("option", { value: "none" }, "None")),
|
|
409
|
-
react_1.default.createElement("label", { className: "font-system text-xs" }, "Marker size"),
|
|
410
|
-
react_1.default.createElement(ui_1.Input, { type: "number", min: 1, value: (_e = (_d = seriesEntry.marker) === null || _d === void 0 ? void 0 : _d.size) !== null && _e !== void 0 ? _e : "", onChange: function (e) {
|
|
411
|
-
var _a;
|
|
412
|
-
return setFieldValue("spec.series[".concat(i, "].marker"), tslib_1.__assign(tslib_1.__assign({}, ((_a = seriesEntry.marker) !== null && _a !== void 0 ? _a : {})), { size: e.target.value === ""
|
|
413
|
-
? undefined
|
|
414
|
-
: Number(e.target.value) }));
|
|
415
|
-
}, className: "text-xs", placeholder: "6" }))) : null,
|
|
416
|
-
bubbleAggregateEnabled ? (react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2 w-32" },
|
|
417
|
-
react_1.default.createElement("label", { className: "font-system text-sm" }, "Aggregate type"),
|
|
418
|
-
react_1.default.createElement("select", { className: "border border-rnc-border rounded-sm px-1 py-1 text-xs bg-transparent", value: (_f = seriesEntry.aggregateType) !== null && _f !== void 0 ? _f : "", onChange: function (event) {
|
|
419
|
-
var aggregateType = event.target.value;
|
|
420
|
-
setFieldValue("spec.series[".concat(i, "].aggregateType"), aggregateType || undefined);
|
|
421
|
-
} },
|
|
422
|
-
react_1.default.createElement("option", { value: "" }, "None"),
|
|
423
|
-
AGGREGATE_OPTIONS.map(function (option) { return (react_1.default.createElement("option", { key: option.value, value: option.value }, option.label)); })))) : null),
|
|
424
|
-
react_1.default.createElement(ui_1.IconButton, { className: "absolute right-1 top-1", type: "button", onClick: function () {
|
|
425
|
-
var currentSeries = bubbleSpec.series;
|
|
426
|
-
setFieldValue("spec.series", currentSeries.filter(function (_, index) { return index !== i; }));
|
|
427
|
-
} },
|
|
428
|
-
react_1.default.createElement(icons_1.CrossCircledIcon, null))));
|
|
429
|
-
});
|
|
430
|
-
}),
|
|
431
|
-
react_1.default.createElement("div", { className: "py-1" },
|
|
432
|
-
react_1.default.createElement(ui_1.Button, { variant: "link", type: "button", onClick: function () {
|
|
433
|
-
var nextSeries = bubbleSpec.series;
|
|
434
|
-
var lastSeries = nextSeries[nextSeries.length - 1];
|
|
435
|
-
setFieldValue("spec.series", tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(nextSeries), false), [
|
|
436
|
-
{
|
|
437
|
-
sources: lastSeries
|
|
438
|
-
? lastSeries.sources
|
|
439
|
-
: values.spec.dataRange
|
|
440
|
-
? [values.spec.dataRange]
|
|
441
|
-
: [],
|
|
442
|
-
},
|
|
443
|
-
], false));
|
|
444
|
-
}, className: "cursor-pointer" }, "Add series"))))) : null,
|
|
295
|
+
renderChartDataSection("X values", "domains", domainsList, "Choose the numeric values for the horizontal axis."),
|
|
296
|
+
bubbleSpec.chartType === "bubble"
|
|
297
|
+
? renderChartDataSection("Bubble sizes", "bubbleSizes", (_l = bubbleSpec.bubbleSizes) !== null && _l !== void 0 ? _l : [], "Choose the numeric values that size each bubble.")
|
|
298
|
+
: null)) : null,
|
|
299
|
+
basicSpec || bubbleSpec ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
300
|
+
react_1.default.createElement("label", { className: "font-system text-sm flex items-center gap-1 pb-2" },
|
|
301
|
+
react_1.default.createElement("input", { type: "checkbox", checked: isAggregateType, name: "showColumnStripes", onChange: function (e) {
|
|
302
|
+
var nextSeries = seriesList.map(function (serie) { return (tslib_1.__assign(tslib_1.__assign({}, serie), { aggregateType: e.target.checked ? "SUM" : undefined })); });
|
|
303
|
+
setFieldValue("spec.series", nextSeries);
|
|
304
|
+
} }),
|
|
305
|
+
"Aggregate"),
|
|
306
|
+
renderSeriesList())) : null,
|
|
445
307
|
treemapSpec ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
446
308
|
react_1.default.createElement("label", { className: "font-system text-sm flex items-center gap-1 pb-2" },
|
|
447
309
|
react_1.default.createElement("input", { type: "checkbox", checked: treemapSpec.useFirstRowAsHeaders !== false, onChange: function (e) {
|
|
448
310
|
return setFieldValue("spec.useFirstRowAsHeaders", e.target.checked);
|
|
449
311
|
} }),
|
|
450
312
|
"Use first row as headers"),
|
|
451
|
-
renderChartDataSection("Labels", "labels", (
|
|
452
|
-
renderChartDataSection("Parent labels", "parentLabels", (
|
|
453
|
-
renderChartDataSection("Size data", "sizeData", (
|
|
454
|
-
|
|
313
|
+
renderChartDataSection("Labels", "labels", (_m = treemapSpec.labels) !== null && _m !== void 0 ? _m : [], "Select the cells that contain node labels."),
|
|
314
|
+
renderChartDataSection("Parent labels", "parentLabels", (_o = treemapSpec.parentLabels) !== null && _o !== void 0 ? _o : [], "One range per level above the labels, top level first.", { addLabel: "Add level", removeLabel: "Remove level" }),
|
|
315
|
+
renderChartDataSection("Size data", "sizeData", (_p = treemapSpec.sizeData) !== null && _p !== void 0 ? _p : [], "Provide numeric values to determine each node's size."))) : null,
|
|
316
|
+
caps.hasEmptyCellOptions ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
455
317
|
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2 w-56" },
|
|
456
318
|
react_1.default.createElement("label", { className: "font-system text-sm" }, "Show empty cells as"),
|
|
457
|
-
react_1.default.createElement("select", { className: "border border-rnc-border rounded-sm px-1 py-1 text-xs bg-transparent", "aria-label": "Show empty cells as", value: (
|
|
319
|
+
react_1.default.createElement("select", { className: "border border-rnc-border rounded-sm px-1 py-1 text-xs bg-transparent", "aria-label": "Show empty cells as", value: (_q = values.spec.emptyCells) !== null && _q !== void 0 ? _q : "gaps", onChange: function (event) {
|
|
458
320
|
var emptyCells = event.target.value;
|
|
459
321
|
setFieldValue("spec.emptyCells", emptyCells === "gaps" ? undefined : emptyCells);
|
|
460
322
|
} },
|
|
@@ -477,7 +339,10 @@ var ChartEditor = function (_a) {
|
|
|
477
339
|
react_1.default.createElement(Section, { title: "Chart style", defaultOpen: true },
|
|
478
340
|
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2" },
|
|
479
341
|
react_1.default.createElement("label", { className: "font-system text-sm" }, "Chart title"),
|
|
480
|
-
react_1.default.createElement(ui_1.Input, { value: (
|
|
342
|
+
react_1.default.createElement(ui_1.Input, { value: (_r = values === null || values === void 0 ? void 0 : values.spec.title) !== null && _r !== void 0 ? _r : "", type: "text", onChange: function (e) { return setFieldValue("spec.title", e.target.value); }, className: "text-xs", placeholder: "Enter chart title" })),
|
|
343
|
+
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2" },
|
|
344
|
+
react_1.default.createElement("label", { className: "font-system text-sm" }, "Subtitle"),
|
|
345
|
+
react_1.default.createElement(ui_1.Input, { value: (_s = values.spec.subtitle) !== null && _s !== void 0 ? _s : "", type: "text", onChange: function (e) { return setFieldValue("spec.subtitle", e.target.value || undefined); }, className: "text-xs", placeholder: "Enter chart subtitle", "aria-label": "Chart subtitle" })),
|
|
481
346
|
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2" },
|
|
482
347
|
react_1.default.createElement("label", { className: "font-system text-sm" }, "Style"),
|
|
483
348
|
react_1.default.createElement("div", { className: "grid grid-cols-4 gap-1", role: "radiogroup" }, chart_styles_1.CHART_STYLES.map(function (style) {
|
|
@@ -506,7 +371,7 @@ var ChartEditor = function (_a) {
|
|
|
506
371
|
}))),
|
|
507
372
|
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2" },
|
|
508
373
|
react_1.default.createElement("label", { className: "font-system text-sm" }, "Quick layout"),
|
|
509
|
-
react_1.default.createElement("select", { className: "border border-rnc-border rounded-sm px-1 py-1 text-xs bg-transparent w-32", value: (
|
|
374
|
+
react_1.default.createElement("select", { className: "border border-rnc-border rounded-sm px-1 py-1 text-xs bg-transparent w-32", value: (_t = values.spec.quickLayout) !== null && _t !== void 0 ? _t : "", "aria-label": "Quick layout", onChange: function (e) {
|
|
510
375
|
var layout = chart_styles_1.CHART_QUICK_LAYOUTS.find(function (entry) { return String(entry.id) === e.target.value; });
|
|
511
376
|
if (layout) {
|
|
512
377
|
setFieldValue("spec", (0, chart_styles_1.applyChartQuickLayout)(values.spec, layout));
|
|
@@ -518,33 +383,14 @@ var ChartEditor = function (_a) {
|
|
|
518
383
|
react_1.default.createElement(ui_1.Button, { type: "button", size: "xs", onClick: function () {
|
|
519
384
|
return setFieldValue("spec", (0, chart_styles_1.resetChartToMatchStyle)(values.spec));
|
|
520
385
|
} }, "Reset to match style")),
|
|
521
|
-
react_1.default.createElement(
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
react_1.default.createElement(ui_1.Input, { value: (_q = (_p = values.spec.titleTextFormat) === null || _p === void 0 ? void 0 : _p.fontFamily) !== null && _q !== void 0 ? _q : "", type: "text", onChange: function (e) {
|
|
525
|
-
return setFieldValue("spec.titleTextFormat.fontFamily", e.target.value || undefined);
|
|
526
|
-
}, className: "text-xs w-32", placeholder: "Font family", "aria-label": "Title font family" }),
|
|
527
|
-
react_1.default.createElement(ui_1.Input, { value: (_s = (_r = values.spec.titleTextFormat) === null || _r === void 0 ? void 0 : _r.fontSize) !== null && _s !== void 0 ? _s : "", type: "number", min: 1, onChange: function (e) {
|
|
528
|
-
return setFieldValue("spec.titleTextFormat.fontSize", e.target.value === "" ? undefined : Number(e.target.value));
|
|
529
|
-
}, className: "text-xs w-16", placeholder: "Size", "aria-label": "Title font size" }),
|
|
530
|
-
react_1.default.createElement("input", { type: "color", value: (_u = (_t = values.spec.titleTextFormat) === null || _t === void 0 ? void 0 : _t.color) !== null && _u !== void 0 ? _u : "#000000", onChange: function (e) {
|
|
531
|
-
return setFieldValue("spec.titleTextFormat.color", e.target.value);
|
|
532
|
-
}, className: "h-6 w-8 p-0 border border-rnc-border rounded-sm bg-transparent cursor-pointer", "aria-label": "Title color" }),
|
|
533
|
-
react_1.default.createElement("label", { className: "font-system text-xs flex items-center gap-1" },
|
|
534
|
-
react_1.default.createElement("input", { type: "checkbox", checked: Boolean((_v = values.spec.titleTextFormat) === null || _v === void 0 ? void 0 : _v.bold), onChange: function (e) {
|
|
535
|
-
return setFieldValue("spec.titleTextFormat.bold", e.target.checked);
|
|
536
|
-
} }),
|
|
537
|
-
"Bold"),
|
|
538
|
-
react_1.default.createElement("label", { className: "font-system text-xs flex items-center gap-1" },
|
|
539
|
-
react_1.default.createElement("input", { type: "checkbox", checked: Boolean((_w = values.spec.titleTextFormat) === null || _w === void 0 ? void 0 : _w.italic), onChange: function (e) {
|
|
540
|
-
return setFieldValue("spec.titleTextFormat.italic", e.target.checked);
|
|
541
|
-
} }),
|
|
542
|
-
"Italic")))),
|
|
386
|
+
react_1.default.createElement(text_format_fields_1.TextFormatFields, { label: "Title font", value: values.spec.titleTextFormat, onChange: function (titleTextFormat) {
|
|
387
|
+
return setFieldValue("spec.titleTextFormat", titleTextFormat);
|
|
388
|
+
}, ariaLabels: { color: "Title color" } })),
|
|
543
389
|
react_1.default.createElement(Section, { title: "Chart area" },
|
|
544
390
|
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2" },
|
|
545
391
|
react_1.default.createElement("label", { className: "font-system text-sm" }, "Fill"),
|
|
546
392
|
react_1.default.createElement("div", { className: "flex items-center gap-1" },
|
|
547
|
-
react_1.default.createElement("input", { type: "color", value: (
|
|
393
|
+
react_1.default.createElement("input", { type: "color", value: (_u = values.spec.backgroundColor) !== null && _u !== void 0 ? _u : "#FFFFFF", onChange: function (e) {
|
|
548
394
|
return setFieldValue("spec.backgroundColor", e.target.value);
|
|
549
395
|
}, className: "h-6 w-8 p-0 border border-rnc-border rounded-sm bg-transparent cursor-pointer", "aria-label": "Chart area fill" }),
|
|
550
396
|
values.spec.backgroundColor ? (react_1.default.createElement(ui_1.IconButton, { type: "button", onClick: function () {
|
|
@@ -554,7 +400,7 @@ var ChartEditor = function (_a) {
|
|
|
554
400
|
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2" },
|
|
555
401
|
react_1.default.createElement("label", { className: "font-system text-sm" }, "Border"),
|
|
556
402
|
react_1.default.createElement("div", { className: "flex items-center gap-1" },
|
|
557
|
-
react_1.default.createElement("input", { type: "color", value: (
|
|
403
|
+
react_1.default.createElement("input", { type: "color", value: (_v = values.borderColor) !== null && _v !== void 0 ? _v : "#D9D9D9", onChange: function (e) { return setFieldValue("borderColor", e.target.value); }, className: "h-6 w-8 p-0 border border-rnc-border rounded-sm bg-transparent cursor-pointer", "aria-label": "Chart area border" }),
|
|
558
404
|
values.borderColor ? (react_1.default.createElement(ui_1.IconButton, { type: "button", onClick: function () { return setFieldValue("borderColor", undefined); }, "aria-label": "No border", title: "No border" },
|
|
559
405
|
react_1.default.createElement(icons_1.CrossCircledIcon, null))) : (react_1.default.createElement("span", { className: "font-system text-xs text-rnc-text-weak" }, "None")))),
|
|
560
406
|
react_1.default.createElement("label", { className: "font-system text-sm flex items-center gap-1" },
|
|
@@ -562,226 +408,46 @@ var ChartEditor = function (_a) {
|
|
|
562
408
|
return setFieldValue("spec.roundedCorners", e.target.checked);
|
|
563
409
|
} }),
|
|
564
410
|
"Rounded corners")),
|
|
565
|
-
|
|
566
|
-
react_1.default.createElement(Section, { title: "Legend" },
|
|
567
|
-
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2" },
|
|
568
|
-
react_1.default.createElement("label", { className: "font-system text-sm" }, "Legend"),
|
|
569
|
-
react_1.default.createElement("select", { className: "border border-rnc-border rounded-sm px-1 py-1 text-xs bg-transparent w-32", value: (_0 = (_z = values === null || values === void 0 ? void 0 : values.spec.legend) === null || _z === void 0 ? void 0 : _z.position) !== null && _0 !== void 0 ? _0 : "", onChange: function (e) {
|
|
570
|
-
return setFieldValue("spec.legend.position", e.target.value || undefined);
|
|
571
|
-
} },
|
|
572
|
-
react_1.default.createElement("option", { value: "" }, "Auto"),
|
|
573
|
-
react_1.default.createElement("option", { value: "top" }, "Top"),
|
|
574
|
-
react_1.default.createElement("option", { value: "bottom" }, "Bottom"),
|
|
575
|
-
react_1.default.createElement("option", { value: "left" }, "Left"),
|
|
576
|
-
react_1.default.createElement("option", { value: "right" }, "Right"),
|
|
577
|
-
react_1.default.createElement("option", { value: "none" }, "None")))),
|
|
578
|
-
react_1.default.createElement(Section, { title: "Vertical axis" },
|
|
579
|
-
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2" },
|
|
580
|
-
react_1.default.createElement("label", { className: "font-system text-sm" }, "Vertical axis title"),
|
|
581
|
-
react_1.default.createElement(ui_1.Input, { value: (_1 = values === null || values === void 0 ? void 0 : values.spec.verticalAxisTitle) !== null && _1 !== void 0 ? _1 : "", type: "text", onChange: function (e) {
|
|
582
|
-
return setFieldValue("spec.verticalAxisTitle", e.target.value);
|
|
583
|
-
}, className: "text-xs", placeholder: "Vertical axis title" })),
|
|
584
|
-
isCartesianBasic ? (react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-2 pb-2" },
|
|
585
|
-
react_1.default.createElement("label", { className: "font-system text-sm" }, "Value axis"),
|
|
586
|
-
react_1.default.createElement("div", { className: "flex flex-wrap gap-2 items-end" },
|
|
587
|
-
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 w-20" },
|
|
588
|
-
react_1.default.createElement("label", { className: "font-system text-xs" }, "Min"),
|
|
589
|
-
react_1.default.createElement(ui_1.Input, { type: "number", value: (_3 = (_2 = values === null || values === void 0 ? void 0 : values.spec.valueAxisOptions) === null || _2 === void 0 ? void 0 : _2.min) !== null && _3 !== void 0 ? _3 : "", onChange: function (e) {
|
|
590
|
-
return setFieldValue("spec.valueAxisOptions.min", e.target.value === ""
|
|
591
|
-
? undefined
|
|
592
|
-
: Number(e.target.value));
|
|
593
|
-
}, className: "text-xs", placeholder: "Auto" })),
|
|
594
|
-
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 w-20" },
|
|
595
|
-
react_1.default.createElement("label", { className: "font-system text-xs" }, "Max"),
|
|
596
|
-
react_1.default.createElement(ui_1.Input, { type: "number", value: (_5 = (_4 = values === null || values === void 0 ? void 0 : values.spec.valueAxisOptions) === null || _4 === void 0 ? void 0 : _4.max) !== null && _5 !== void 0 ? _5 : "", onChange: function (e) {
|
|
597
|
-
return setFieldValue("spec.valueAxisOptions.max", e.target.value === ""
|
|
598
|
-
? undefined
|
|
599
|
-
: Number(e.target.value));
|
|
600
|
-
}, className: "text-xs", placeholder: "Auto" }))),
|
|
601
|
-
react_1.default.createElement("label", { className: "font-system text-xs flex items-center gap-1" },
|
|
602
|
-
react_1.default.createElement("input", { type: "checkbox", checked: Boolean((_6 = values === null || values === void 0 ? void 0 : values.spec.valueAxisOptions) === null || _6 === void 0 ? void 0 : _6.logarithmic), onChange: function (e) {
|
|
603
|
-
return setFieldValue("spec.valueAxisOptions.logarithmic", e.target.checked || undefined);
|
|
604
|
-
} }),
|
|
605
|
-
"Logarithmic scale"),
|
|
606
|
-
react_1.default.createElement("label", { className: "font-system text-xs flex items-center gap-1" },
|
|
607
|
-
react_1.default.createElement("input", { type: "checkbox", checked: Boolean((_7 = values === null || values === void 0 ? void 0 : values.spec.valueAxisOptions) === null || _7 === void 0 ? void 0 : _7.reverse), onChange: function (e) {
|
|
608
|
-
return setFieldValue("spec.valueAxisOptions.reverse", e.target.checked || undefined);
|
|
609
|
-
} }),
|
|
610
|
-
"Reverse direction"),
|
|
611
|
-
react_1.default.createElement("label", { className: "font-system text-xs flex items-center gap-1" },
|
|
612
|
-
react_1.default.createElement("input", { type: "checkbox", checked: ((_8 = values === null || values === void 0 ? void 0 : values.spec.valueAxisOptions) === null || _8 === void 0 ? void 0 : _8.showMajorGridlines) !==
|
|
613
|
-
false, onChange: function (e) {
|
|
614
|
-
return setFieldValue("spec.valueAxisOptions.showMajorGridlines", e.target.checked);
|
|
615
|
-
} }),
|
|
616
|
-
"Gridlines"),
|
|
617
|
-
react_1.default.createElement("label", { className: "font-system text-xs" }, "Number format"),
|
|
618
|
-
react_1.default.createElement(ui_1.Input, { value: (_10 = (_9 = values === null || values === void 0 ? void 0 : values.spec.valueAxisOptions) === null || _9 === void 0 ? void 0 : _9.numberFormatPattern) !== null && _10 !== void 0 ? _10 : "", type: "text", onChange: function (e) {
|
|
619
|
-
return setFieldValue("spec.valueAxisOptions.numberFormatPattern", e.target.value || undefined);
|
|
620
|
-
}, className: "text-xs w-32", placeholder: "Linked to source" }),
|
|
621
|
-
basicSpec.series.some(function (s) { return s.useSecondaryAxis; }) ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
622
|
-
react_1.default.createElement("label", { className: "font-system text-sm pt-1" }, "Secondary value axis"),
|
|
623
|
-
react_1.default.createElement("div", { className: "flex flex-wrap gap-2 items-end" },
|
|
624
|
-
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 w-20" },
|
|
625
|
-
react_1.default.createElement("label", { className: "font-system text-xs" }, "Min"),
|
|
626
|
-
react_1.default.createElement(ui_1.Input, { type: "number", value: (_12 = (_11 = values === null || values === void 0 ? void 0 : values.spec.secondaryValueAxisOptions) === null || _11 === void 0 ? void 0 : _11.min) !== null && _12 !== void 0 ? _12 : "", onChange: function (e) {
|
|
627
|
-
return setFieldValue("spec.secondaryValueAxisOptions.min", e.target.value === ""
|
|
628
|
-
? undefined
|
|
629
|
-
: Number(e.target.value));
|
|
630
|
-
}, className: "text-xs", placeholder: "Auto" })),
|
|
631
|
-
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 w-20" },
|
|
632
|
-
react_1.default.createElement("label", { className: "font-system text-xs" }, "Max"),
|
|
633
|
-
react_1.default.createElement(ui_1.Input, { type: "number", value: (_14 = (_13 = values === null || values === void 0 ? void 0 : values.spec.secondaryValueAxisOptions) === null || _13 === void 0 ? void 0 : _13.max) !== null && _14 !== void 0 ? _14 : "", onChange: function (e) {
|
|
634
|
-
return setFieldValue("spec.secondaryValueAxisOptions.max", e.target.value === ""
|
|
635
|
-
? undefined
|
|
636
|
-
: Number(e.target.value));
|
|
637
|
-
}, className: "text-xs", placeholder: "Auto" }))),
|
|
638
|
-
react_1.default.createElement("label", { className: "font-system text-xs flex items-center gap-1" },
|
|
639
|
-
react_1.default.createElement("input", { type: "checkbox", checked: Boolean((_15 = values === null || values === void 0 ? void 0 : values.spec.secondaryValueAxisOptions) === null || _15 === void 0 ? void 0 : _15.logarithmic), onChange: function (e) {
|
|
640
|
-
return setFieldValue("spec.secondaryValueAxisOptions.logarithmic", e.target.checked || undefined);
|
|
641
|
-
} }),
|
|
642
|
-
"Logarithmic scale"),
|
|
643
|
-
react_1.default.createElement("label", { className: "font-system text-xs flex items-center gap-1" },
|
|
644
|
-
react_1.default.createElement("input", { type: "checkbox", checked: ((_16 = values === null || values === void 0 ? void 0 : values.spec.secondaryValueAxisOptions) === null || _16 === void 0 ? void 0 : _16.showMajorGridlines) !== false, onChange: function (e) {
|
|
645
|
-
return setFieldValue("spec.secondaryValueAxisOptions.showMajorGridlines", e.target.checked);
|
|
646
|
-
} }),
|
|
647
|
-
"Gridlines"),
|
|
648
|
-
react_1.default.createElement("label", { className: "font-system text-xs" }, "Number format"),
|
|
649
|
-
react_1.default.createElement(ui_1.Input, { value: (_18 = (_17 = values === null || values === void 0 ? void 0 : values.spec.secondaryValueAxisOptions) === null || _17 === void 0 ? void 0 : _17.numberFormatPattern) !== null && _18 !== void 0 ? _18 : "", type: "text", onChange: function (e) {
|
|
650
|
-
return setFieldValue("spec.secondaryValueAxisOptions.numberFormatPattern", e.target.value || undefined);
|
|
651
|
-
}, className: "text-xs w-32", placeholder: "Linked to source" }))) : null)) : null),
|
|
652
|
-
react_1.default.createElement(Section, { title: "Horizontal axis" },
|
|
653
|
-
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2" },
|
|
654
|
-
react_1.default.createElement("label", { className: "font-system text-sm" }, "Horizontal axis title"),
|
|
655
|
-
react_1.default.createElement(ui_1.Input, { value: (_19 = values === null || values === void 0 ? void 0 : values.spec.horizontalAxisTitle) !== null && _19 !== void 0 ? _19 : "", type: "text", onChange: function (e) {
|
|
656
|
-
return setFieldValue("spec.horizontalAxisTitle", e.target.value);
|
|
657
|
-
}, className: "text-xs", placeholder: "Horizontal axis title" })),
|
|
658
|
-
isCartesianBasic ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
659
|
-
react_1.default.createElement("label", { className: "font-system text-sm pt-1" }, "Category axis"),
|
|
660
|
-
react_1.default.createElement("label", { className: "font-system text-xs flex items-center gap-1" },
|
|
661
|
-
react_1.default.createElement("input", { type: "checkbox", checked: ((_20 = values === null || values === void 0 ? void 0 : values.spec.categoryAxisOptions) === null || _20 === void 0 ? void 0 : _20.showMajorGridlines) === true, onChange: function (e) {
|
|
662
|
-
return setFieldValue("spec.categoryAxisOptions.showMajorGridlines", e.target.checked);
|
|
663
|
-
} }),
|
|
664
|
-
"Gridlines"))) : null),
|
|
665
|
-
react_1.default.createElement(Section, { title: "Data labels" },
|
|
666
|
-
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2" },
|
|
667
|
-
react_1.default.createElement("label", { className: "font-system text-sm flex items-center gap-1" },
|
|
668
|
-
react_1.default.createElement("input", { type: "checkbox", checked: Boolean((_21 = values === null || values === void 0 ? void 0 : values.spec.dataLabels) === null || _21 === void 0 ? void 0 : _21.show), onChange: function (e) {
|
|
669
|
-
return setFieldValue("spec.dataLabels.show", e.target.checked);
|
|
670
|
-
} }),
|
|
671
|
-
"Show data labels"),
|
|
672
|
-
((_22 = values === null || values === void 0 ? void 0 : values.spec.dataLabels) === null || _22 === void 0 ? void 0 : _22.show) ? (react_1.default.createElement("div", { className: "pl-4 flex flex-col gap-1" },
|
|
673
|
-
react_1.default.createElement("label", { className: "font-system text-xs flex items-center gap-1" },
|
|
674
|
-
react_1.default.createElement("input", { type: "checkbox", checked: ((_23 = values === null || values === void 0 ? void 0 : values.spec.dataLabels) === null || _23 === void 0 ? void 0 : _23.showValue) !== false, onChange: function (e) {
|
|
675
|
-
return setFieldValue("spec.dataLabels.showValue", e.target.checked);
|
|
676
|
-
} }),
|
|
677
|
-
"Value"),
|
|
678
|
-
react_1.default.createElement("label", { className: "font-system text-xs flex items-center gap-1" },
|
|
679
|
-
react_1.default.createElement("input", { type: "checkbox", checked: Boolean((_24 = values === null || values === void 0 ? void 0 : values.spec.dataLabels) === null || _24 === void 0 ? void 0 : _24.showCategoryName), onChange: function (e) {
|
|
680
|
-
return setFieldValue("spec.dataLabels.showCategoryName", e.target.checked);
|
|
681
|
-
} }),
|
|
682
|
-
"Category name"),
|
|
683
|
-
react_1.default.createElement("label", { className: "font-system text-xs flex items-center gap-1" },
|
|
684
|
-
react_1.default.createElement("input", { type: "checkbox", checked: Boolean((_25 = values === null || values === void 0 ? void 0 : values.spec.dataLabels) === null || _25 === void 0 ? void 0 : _25.showSeriesName), onChange: function (e) {
|
|
685
|
-
return setFieldValue("spec.dataLabels.showSeriesName", e.target.checked);
|
|
686
|
-
} }),
|
|
687
|
-
"Series name"),
|
|
688
|
-
react_1.default.createElement("label", { className: "font-system text-xs flex items-center gap-1" },
|
|
689
|
-
react_1.default.createElement("input", { type: "checkbox", checked: Boolean((_26 = values === null || values === void 0 ? void 0 : values.spec.dataLabels) === null || _26 === void 0 ? void 0 : _26.showPercent), onChange: function (e) {
|
|
690
|
-
return setFieldValue("spec.dataLabels.showPercent", e.target.checked);
|
|
691
|
-
} }),
|
|
692
|
-
"Percentage"),
|
|
693
|
-
react_1.default.createElement("label", { className: "font-system text-xs" }, "Label position"),
|
|
694
|
-
react_1.default.createElement("select", { className: "border border-rnc-border rounded-sm px-1 py-1 text-xs bg-transparent w-32", value: (_28 = (_27 = values === null || values === void 0 ? void 0 : values.spec.dataLabels) === null || _27 === void 0 ? void 0 : _27.position) !== null && _28 !== void 0 ? _28 : "outside", onChange: function (e) {
|
|
695
|
-
return setFieldValue("spec.dataLabels.position", e.target.value);
|
|
696
|
-
} },
|
|
697
|
-
react_1.default.createElement("option", { value: "center" }, "Center"),
|
|
698
|
-
react_1.default.createElement("option", { value: "inside" }, "Inside"),
|
|
699
|
-
react_1.default.createElement("option", { value: "outside" }, "Outside"),
|
|
700
|
-
react_1.default.createElement("option", { value: "insideEnd" }, "Inside end"),
|
|
701
|
-
react_1.default.createElement("option", { value: "outsideEnd" }, "Outside end"),
|
|
702
|
-
react_1.default.createElement("option", { value: "bestFit" }, "Best fit"),
|
|
703
|
-
react_1.default.createElement("option", { value: "above" }, "Above"),
|
|
704
|
-
react_1.default.createElement("option", { value: "below" }, "Below"),
|
|
705
|
-
react_1.default.createElement("option", { value: "left" }, "Left"),
|
|
706
|
-
react_1.default.createElement("option", { value: "right" }, "Right")),
|
|
707
|
-
react_1.default.createElement("label", { className: "font-system text-xs" }, "Number format pattern"),
|
|
708
|
-
react_1.default.createElement(ui_1.Input, { value: (_30 = (_29 = values === null || values === void 0 ? void 0 : values.spec.dataLabels) === null || _29 === void 0 ? void 0 : _29.numberFormatPattern) !== null && _30 !== void 0 ? _30 : "", type: "text", onChange: function (e) {
|
|
709
|
-
return setFieldValue("spec.dataLabels.numberFormatPattern", e.target.value || undefined);
|
|
710
|
-
}, className: "text-xs w-32", placeholder: "#,##0.00" }))) : null)),
|
|
711
|
-
basicSpec && showChartOptions ? (react_1.default.createElement(Section, { title: "Chart options" },
|
|
712
|
-
chartOptionControls.binCount ? (react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2" },
|
|
713
|
-
react_1.default.createElement("label", { className: "font-system text-sm" }, "Bins (leave blank for auto)"),
|
|
714
|
-
react_1.default.createElement(ui_1.Input, { value: (_31 = basicSpec.binCount) !== null && _31 !== void 0 ? _31 : "", type: "number", min: 1, onChange: function (e) {
|
|
715
|
-
var raw = e.target.value;
|
|
716
|
-
setFieldValue("spec.binCount", raw === "" ? undefined : Number(raw));
|
|
717
|
-
}, className: "text-xs", placeholder: "Auto (Sturges)" }))) : null,
|
|
718
|
-
chartOptionControls.radarStyle ? (react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2" },
|
|
719
|
-
react_1.default.createElement("label", { className: "font-system text-sm" }, "Radar style"),
|
|
720
|
-
react_1.default.createElement("select", { className: "border border-rnc-border rounded-sm px-1 py-1 text-xs bg-transparent", value: (_32 = basicSpec.radarStyle) !== null && _32 !== void 0 ? _32 : "standard", onChange: function (e) {
|
|
721
|
-
return setFieldValue("spec.radarStyle", e.target.value);
|
|
722
|
-
} },
|
|
723
|
-
react_1.default.createElement("option", { value: "standard" }, "Standard"),
|
|
724
|
-
react_1.default.createElement("option", { value: "marker" }, "With markers"),
|
|
725
|
-
react_1.default.createElement("option", { value: "filled" }, "Filled")))) : null,
|
|
726
|
-
chartOptionControls.stockVariant ? (react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2" },
|
|
727
|
-
react_1.default.createElement("label", { className: "font-system text-sm" }, "Stock variant"),
|
|
728
|
-
react_1.default.createElement("select", { className: "border border-rnc-border rounded-sm px-1 py-1 text-xs bg-transparent", value: (_33 = basicSpec.stockVariant) !== null && _33 !== void 0 ? _33 : "HLC", onChange: function (e) {
|
|
729
|
-
return setFieldValue("spec.stockVariant", e.target.value);
|
|
730
|
-
} },
|
|
731
|
-
react_1.default.createElement("option", { value: "HLC" }, "High-Low-Close"),
|
|
732
|
-
react_1.default.createElement("option", { value: "OHLC" }, "Open-High-Low-Close"),
|
|
733
|
-
react_1.default.createElement("option", { value: "VHLC" }, "Volume-High-Low-Close"),
|
|
734
|
-
react_1.default.createElement("option", { value: "VOHLC" }, "Volume-Open-High-Low-Close")))) : null,
|
|
735
|
-
chartOptionControls.doughnutHoleSize ? (react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2" },
|
|
736
|
-
react_1.default.createElement("label", { className: "font-system text-sm" }, "Doughnut hole size (0-0.9)"),
|
|
737
|
-
react_1.default.createElement(ui_1.Input, { type: "number", min: 0, max: 0.9, step: 0.05, value: (_34 = basicSpec.doughnutHoleSize) !== null && _34 !== void 0 ? _34 : "", onChange: function (e) {
|
|
738
|
-
return setFieldValue("spec.doughnutHoleSize", e.target.value === ""
|
|
739
|
-
? undefined
|
|
740
|
-
: Number(e.target.value));
|
|
741
|
-
}, className: "text-xs w-32", placeholder: "0.5" }))) : null,
|
|
742
|
-
chartOptionControls.explosion ? (react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2" },
|
|
743
|
-
react_1.default.createElement("label", { className: "font-system text-sm" }, "Explosion (% of radius, 0-400)"),
|
|
744
|
-
react_1.default.createElement(ui_1.Input, { type: "number", min: 0, max: 400, step: 5, "aria-label": "Explosion", value: (_35 = basicSpec.explosion) !== null && _35 !== void 0 ? _35 : "", onChange: function (e) {
|
|
745
|
-
return setFieldValue("spec.explosion", e.target.value === ""
|
|
746
|
-
? undefined
|
|
747
|
-
: Number(e.target.value));
|
|
748
|
-
}, className: "text-xs w-32", placeholder: "0" }))) : null,
|
|
749
|
-
chartOptionControls.gapWidth ? (react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2" },
|
|
750
|
-
react_1.default.createElement("label", { className: "font-system text-sm" }, "Gap width (0-500)"),
|
|
751
|
-
react_1.default.createElement(ui_1.Input, { type: "number", min: 0, max: 500, value: (_36 = basicSpec.gapWidth) !== null && _36 !== void 0 ? _36 : "", onChange: function (e) {
|
|
752
|
-
return setFieldValue("spec.gapWidth", e.target.value === ""
|
|
753
|
-
? undefined
|
|
754
|
-
: Number(e.target.value));
|
|
755
|
-
}, className: "text-xs w-32", placeholder: "150" }))) : null,
|
|
756
|
-
chartOptionControls.overlap ? (react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2" },
|
|
757
|
-
react_1.default.createElement("label", { className: "font-system text-sm" }, "Series overlap (-100 to 100)"),
|
|
758
|
-
react_1.default.createElement(ui_1.Input, { type: "number", min: -100, max: 100, value: (_37 = basicSpec.overlap) !== null && _37 !== void 0 ? _37 : "", onChange: function (e) {
|
|
759
|
-
return setFieldValue("spec.overlap", e.target.value === ""
|
|
760
|
-
? undefined
|
|
761
|
-
: Number(e.target.value));
|
|
762
|
-
}, className: "text-xs w-32", placeholder: "0" }))) : null)) : null)) : null,
|
|
763
|
-
bubbleSpec && bubbleSpec.chartType === "scatter" ? (react_1.default.createElement(Section, { title: "Chart options" },
|
|
411
|
+
caps.hasLegend ? (react_1.default.createElement(Section, { title: "Legend" },
|
|
764
412
|
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2" },
|
|
765
|
-
react_1.default.createElement("label", { className: "font-system text-sm" }, "
|
|
766
|
-
react_1.default.createElement("select", { className: "border border-rnc-border rounded-sm px-1 py-1 text-xs bg-transparent w-
|
|
767
|
-
return setFieldValue("spec.
|
|
413
|
+
react_1.default.createElement("label", { className: "font-system text-sm" }, "Legend"),
|
|
414
|
+
react_1.default.createElement("select", { className: "border border-rnc-border rounded-sm px-1 py-1 text-xs bg-transparent w-32", "aria-label": "Legend position", value: (_x = (_w = values === null || values === void 0 ? void 0 : values.spec.legend) === null || _w === void 0 ? void 0 : _w.position) !== null && _x !== void 0 ? _x : "", onChange: function (e) {
|
|
415
|
+
return setFieldValue("spec.legend.position", e.target.value || undefined);
|
|
768
416
|
} },
|
|
769
|
-
react_1.default.createElement("option", { value: "
|
|
770
|
-
react_1.default.createElement("option", { value: "
|
|
771
|
-
react_1.default.createElement("option", { value: "
|
|
772
|
-
react_1.default.createElement("option", { value: "
|
|
773
|
-
react_1.default.createElement("option", { value: "
|
|
774
|
-
|
|
775
|
-
|
|
417
|
+
react_1.default.createElement("option", { value: "" }, "Auto"),
|
|
418
|
+
react_1.default.createElement("option", { value: "top" }, "Top"),
|
|
419
|
+
react_1.default.createElement("option", { value: "bottom" }, "Bottom"),
|
|
420
|
+
react_1.default.createElement("option", { value: "left" }, "Left"),
|
|
421
|
+
react_1.default.createElement("option", { value: "right" }, "Right"),
|
|
422
|
+
react_1.default.createElement("option", { value: "topRight" }, "Top right"),
|
|
423
|
+
react_1.default.createElement("option", { value: "none" }, "None"))),
|
|
424
|
+
react_1.default.createElement(text_format_fields_1.TextFormatFields, { label: "Legend font", collapsible: true, value: (_y = values.spec.legend) === null || _y === void 0 ? void 0 : _y.textFormat, onChange: function (textFormat) {
|
|
425
|
+
return setFieldValue("spec.legend.textFormat", textFormat);
|
|
426
|
+
} }))) : null,
|
|
427
|
+
caps.hasAxisTitles || caps.hasValueAxis ? (react_1.default.createElement(Section, { title: "Vertical axis" },
|
|
428
|
+
caps.hasAxisTitles ? (react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2" },
|
|
776
429
|
react_1.default.createElement("label", { className: "font-system text-sm" }, "Vertical axis title"),
|
|
777
|
-
react_1.default.createElement(ui_1.Input, { value: (
|
|
430
|
+
react_1.default.createElement(ui_1.Input, { value: (_z = values === null || values === void 0 ? void 0 : values.spec.verticalAxisTitle) !== null && _z !== void 0 ? _z : "", type: "text", onChange: function (e) {
|
|
778
431
|
return setFieldValue("spec.verticalAxisTitle", e.target.value);
|
|
779
|
-
}, className: "text-xs", placeholder: "Vertical axis title" })),
|
|
780
|
-
react_1.default.createElement(
|
|
432
|
+
}, className: "text-xs", placeholder: "Vertical axis title" }))) : null,
|
|
433
|
+
caps.hasValueAxis ? (react_1.default.createElement(axis_options_fields_1.AxisOptionsFields, { label: "Value axis", kind: "value", value: values.spec.valueAxisOptions, onChange: function (next) { return setFieldValue("spec.valueAxisOptions", next); } })) : null,
|
|
434
|
+
caps.hasSecondaryAxis &&
|
|
435
|
+
seriesList.some(function (s) { return s.useSecondaryAxis; }) ? (react_1.default.createElement(axis_options_fields_1.AxisOptionsFields, { label: "Secondary value axis", kind: "value", value: values.spec.secondaryValueAxisOptions, onChange: function (next) {
|
|
436
|
+
return setFieldValue("spec.secondaryValueAxisOptions", next);
|
|
437
|
+
} })) : null)) : null,
|
|
438
|
+
caps.hasAxisTitles || caps.hasCategoryAxis ? (react_1.default.createElement(Section, { title: "Horizontal axis" },
|
|
439
|
+
caps.hasAxisTitles ? (react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2" },
|
|
781
440
|
react_1.default.createElement("label", { className: "font-system text-sm" }, "Horizontal axis title"),
|
|
782
|
-
react_1.default.createElement(ui_1.Input, { value: (
|
|
441
|
+
react_1.default.createElement(ui_1.Input, { value: (_0 = values === null || values === void 0 ? void 0 : values.spec.horizontalAxisTitle) !== null && _0 !== void 0 ? _0 : "", type: "text", onChange: function (e) {
|
|
783
442
|
return setFieldValue("spec.horizontalAxisTitle", e.target.value);
|
|
784
|
-
}, className: "text-xs", placeholder: "Horizontal axis title" })))
|
|
443
|
+
}, className: "text-xs", placeholder: "Horizontal axis title" }))) : null,
|
|
444
|
+
caps.hasCategoryAxis ? (react_1.default.createElement(axis_options_fields_1.AxisOptionsFields, { label: "Category axis", kind: caps.category === "bubble" ? "value" : "category", value: values.spec.categoryAxisOptions, gridlinesDefault: false, onChange: function (next) {
|
|
445
|
+
return setFieldValue("spec.categoryAxisOptions", next);
|
|
446
|
+
} })) : null)) : null,
|
|
447
|
+
caps.hasDataLabels ? (react_1.default.createElement(Section, { title: "Data labels" },
|
|
448
|
+
react_1.default.createElement(data_labels_fields_1.DataLabelsFields, { value: values.spec.dataLabels, capabilities: caps, onChange: function (dataLabels) { return setFieldValue("spec.dataLabels", dataLabels); } }))) : null,
|
|
449
|
+
hasTypeOptions ? (react_1.default.createElement(Section, { title: "Chart options" },
|
|
450
|
+
react_1.default.createElement(chart_type_options_1.ChartTypeOptionsFields, { spec: values.spec, capabilities: caps, setFieldValue: setFieldValue }))) : null,
|
|
785
451
|
react_1.default.createElement(Section, { title: "Properties" },
|
|
786
452
|
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 pb-2", role: "radiogroup" }, CHART_PLACEMENT_OPTIONS.map(function (_a) {
|
|
787
453
|
var _b;
|