@rowsncolumns/spreadsheet 10.6.5 → 10.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/api/autocomplete.d.ts +42 -0
- package/dist/cjs/api/autocomplete.d.ts.map +1 -0
- package/dist/cjs/api/autocomplete.js +114 -0
- package/dist/cjs/api/banded-ranges.d.ts.map +1 -1
- package/dist/cjs/api/banded-ranges.js +51 -1
- package/dist/cjs/api/error-checking.d.ts +82 -0
- package/dist/cjs/api/error-checking.d.ts.map +1 -0
- package/dist/cjs/api/error-checking.js +207 -0
- package/dist/cjs/api/move-overwrite.d.ts +8 -2
- package/dist/cjs/api/move-overwrite.d.ts.map +1 -1
- package/dist/cjs/api/move-overwrite.js +19 -3
- package/dist/cjs/api/selections.d.ts +2 -2
- package/dist/cjs/api/validation.d.ts +39 -1
- package/dist/cjs/api/validation.d.ts.map +1 -1
- package/dist/cjs/api/validation.js +87 -1
- package/dist/cjs/atoms/cell-input-context.atom.d.ts +4 -1
- package/dist/cjs/atoms/cell-input-context.atom.d.ts.map +1 -1
- package/dist/cjs/atoms/enter-key-direction.atom.d.ts +11 -0
- package/dist/cjs/atoms/enter-key-direction.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/enter-key-direction.atom.js +13 -0
- package/dist/cjs/atoms/index.d.ts +1 -0
- package/dist/cjs/atoms/index.d.ts.map +1 -1
- package/dist/cjs/atoms/index.js +1 -0
- package/dist/cjs/atoms/paste-menu.atom.d.ts +22 -0
- package/dist/cjs/atoms/paste-menu.atom.d.ts.map +1 -1
- package/dist/cjs/atoms/paste-menu.atom.js +13 -1
- package/dist/cjs/atoms/pick-list.atom.d.ts +15 -0
- package/dist/cjs/atoms/pick-list.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/pick-list.atom.js +7 -0
- package/dist/cjs/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/cjs/components/canvas-grid/index.js +305 -70
- package/dist/cjs/components/canvas-grid/typings.d.ts +96 -11
- package/dist/cjs/components/canvas-grid/typings.d.ts.map +1 -1
- package/dist/cjs/components/cell/index.d.ts.map +1 -1
- package/dist/cjs/components/cell/index.js +7 -8
- package/dist/cjs/components/cell/typings.d.ts +9 -0
- package/dist/cjs/components/cell/typings.d.ts.map +1 -1
- package/dist/cjs/components/cell-editor/helpers.d.ts +22 -2
- package/dist/cjs/components/cell-editor/helpers.d.ts.map +1 -1
- package/dist/cjs/components/cell-editor/helpers.js +32 -8
- package/dist/cjs/components/cell-editor/index.d.ts +7 -1
- package/dist/cjs/components/cell-editor/index.d.ts.map +1 -1
- package/dist/cjs/components/cell-editor/index.js +85 -13
- package/dist/cjs/components/cell-indicator/index.d.ts +41 -0
- package/dist/cjs/components/cell-indicator/index.d.ts.map +1 -0
- package/dist/cjs/components/cell-indicator/index.js +90 -0
- package/dist/cjs/components/cell-input/cell-input.d.ts +10 -2
- package/dist/cjs/components/cell-input/cell-input.d.ts.map +1 -1
- package/dist/cjs/components/cell-input/cell-input.js +5 -3
- package/dist/cjs/components/cell-input/formula-bar-cell-input.d.ts.map +1 -1
- package/dist/cjs/components/cell-input/formula-bar-cell-input.js +9 -2
- package/dist/cjs/components/cell-structured/sparkline-math.d.ts +27 -1
- package/dist/cjs/components/cell-structured/sparkline-math.d.ts.map +1 -1
- package/dist/cjs/components/cell-structured/sparkline-math.js +48 -1
- package/dist/cjs/components/cell-structured/sparkline.d.ts +1 -1
- package/dist/cjs/components/cell-structured/sparkline.d.ts.map +1 -1
- package/dist/cjs/components/cell-structured/sparkline.js +36 -92
- package/dist/cjs/components/cell-structured/types.d.ts +6 -0
- package/dist/cjs/components/cell-structured/types.d.ts.map +1 -1
- package/dist/cjs/components/data-table-dialog/index.d.ts +22 -0
- package/dist/cjs/components/data-table-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/data-table-dialog/index.js +93 -0
- package/dist/cjs/components/error-check-smart-tag/index.d.ts +27 -0
- package/dist/cjs/components/error-check-smart-tag/index.d.ts.map +1 -0
- package/dist/cjs/components/error-check-smart-tag/index.js +39 -0
- package/dist/cjs/components/forecast-sheet-dialog/index.d.ts +26 -0
- package/dist/cjs/components/forecast-sheet-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/forecast-sheet-dialog/index.js +92 -0
- package/dist/cjs/components/paste-special-dialog/index.d.ts +3 -3
- package/dist/cjs/components/paste-special-dialog/index.d.ts.map +1 -1
- package/dist/cjs/components/paste-special-dialog/index.js +61 -23
- package/dist/cjs/components/protect-sheet-dialog/allow-edit-ranges-dialog.d.ts +57 -0
- package/dist/cjs/components/protect-sheet-dialog/allow-edit-ranges-dialog.d.ts.map +1 -0
- package/dist/cjs/components/protect-sheet-dialog/allow-edit-ranges-dialog.js +196 -0
- package/dist/cjs/components/protect-sheet-dialog/constants.d.ts +3 -0
- package/dist/cjs/components/protect-sheet-dialog/constants.d.ts.map +1 -0
- package/dist/cjs/components/protect-sheet-dialog/constants.js +5 -0
- package/dist/cjs/components/protect-sheet-dialog/index.d.ts +2 -2
- package/dist/cjs/components/protect-sheet-dialog/index.d.ts.map +1 -1
- package/dist/cjs/components/protect-sheet-dialog/index.js +5 -3
- package/dist/cjs/components/scenario-manager-dialog/index.d.ts +51 -0
- package/dist/cjs/components/scenario-manager-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/scenario-manager-dialog/index.js +257 -0
- package/dist/cjs/components/selection/index.d.ts +1 -1
- package/dist/cjs/components/selection/index.d.ts.map +1 -1
- package/dist/cjs/components/selection/index.js +9 -4
- package/dist/cjs/components/selection/paste-menu.d.ts +14 -1
- package/dist/cjs/components/selection/paste-menu.d.ts.map +1 -1
- package/dist/cjs/components/selection/paste-menu.js +78 -6
- package/dist/cjs/components/selection/paste-options.d.ts +28 -0
- package/dist/cjs/components/selection/paste-options.d.ts.map +1 -0
- package/dist/cjs/components/selection/paste-options.js +70 -0
- package/dist/cjs/components/selection/types.d.ts +12 -1
- package/dist/cjs/components/selection/types.d.ts.map +1 -1
- package/dist/cjs/components/selection-drop-menu/index.d.ts +18 -0
- package/dist/cjs/components/selection-drop-menu/index.d.ts.map +1 -0
- package/dist/cjs/components/selection-drop-menu/index.js +62 -0
- package/dist/cjs/components/solver-dialog/index.d.ts +57 -0
- package/dist/cjs/components/solver-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/solver-dialog/index.js +204 -0
- package/dist/cjs/components/toolbar/sparkline-actions.d.ts +3 -2
- package/dist/cjs/components/toolbar/sparkline-actions.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/sparkline-actions.js +6 -2
- package/dist/cjs/components/toolbar/table-style-selector.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/table-style-selector.js +33 -2
- package/dist/cjs/config.d.ts +5 -4
- package/dist/cjs/config.d.ts.map +1 -1
- package/dist/cjs/config.js +13 -9
- package/dist/cjs/hooks/use-cell-renderer.d.ts +12 -1
- package/dist/cjs/hooks/use-cell-renderer.d.ts.map +1 -1
- package/dist/cjs/hooks/use-cell-renderer.js +6 -3
- package/dist/cjs/hooks/use-copy-paste-cut.d.ts +36 -2
- package/dist/cjs/hooks/use-copy-paste-cut.d.ts.map +1 -1
- package/dist/cjs/hooks/use-copy-paste-cut.js +131 -5
- package/dist/cjs/hooks/use-editable.d.ts +6 -0
- package/dist/cjs/hooks/use-editable.d.ts.map +1 -1
- package/dist/cjs/hooks/use-editor-submit.d.ts +45 -3
- package/dist/cjs/hooks/use-editor-submit.d.ts.map +1 -1
- package/dist/cjs/hooks/use-editor-submit.js +91 -7
- package/dist/cjs/hooks/use-keyboard-handler.d.ts +5 -1
- package/dist/cjs/hooks/use-keyboard-handler.d.ts.map +1 -1
- package/dist/cjs/hooks/use-keyboard-handler.js +10 -1
- package/dist/cjs/hooks/use-selection-drag-copy.d.ts +55 -0
- package/dist/cjs/hooks/use-selection-drag-copy.d.ts.map +1 -0
- package/dist/cjs/hooks/use-selection-drag-copy.js +274 -0
- package/dist/cjs/hooks/use-selection-renderer.d.ts +8 -1
- package/dist/cjs/hooks/use-selection-renderer.d.ts.map +1 -1
- package/dist/cjs/hooks/use-selection-renderer.js +7 -2
- package/dist/cjs/hooks/use-selection.d.ts +59 -1
- package/dist/cjs/hooks/use-selection.d.ts.map +1 -1
- package/dist/cjs/hooks/use-selection.js +270 -61
- package/dist/cjs/index.d.ts +6 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +5 -0
- package/dist/cjs/release-date.js +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/cjs/types.d.ts +50 -1
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/esm/api/autocomplete.d.ts +42 -0
- package/dist/esm/api/autocomplete.d.ts.map +1 -0
- package/dist/esm/api/autocomplete.js +91 -0
- package/dist/esm/api/banded-ranges.d.ts.map +1 -1
- package/dist/esm/api/banded-ranges.js +52 -2
- package/dist/esm/api/error-checking.d.ts +82 -0
- package/dist/esm/api/error-checking.d.ts.map +1 -0
- package/dist/esm/api/error-checking.js +156 -0
- package/dist/esm/api/move-overwrite.d.ts +8 -2
- package/dist/esm/api/move-overwrite.d.ts.map +1 -1
- package/dist/esm/api/move-overwrite.js +17 -2
- package/dist/esm/api/selections.d.ts +2 -2
- package/dist/esm/api/validation.d.ts +39 -1
- package/dist/esm/api/validation.d.ts.map +1 -1
- package/dist/esm/api/validation.js +70 -0
- package/dist/esm/atoms/cell-input-context.atom.d.ts +4 -1
- package/dist/esm/atoms/cell-input-context.atom.d.ts.map +1 -1
- package/dist/esm/atoms/enter-key-direction.atom.d.ts +11 -0
- package/dist/esm/atoms/enter-key-direction.atom.d.ts.map +1 -0
- package/dist/esm/atoms/enter-key-direction.atom.js +8 -0
- package/dist/esm/atoms/index.d.ts +1 -0
- package/dist/esm/atoms/index.d.ts.map +1 -1
- package/dist/esm/atoms/index.js +1 -0
- package/dist/esm/atoms/paste-menu.atom.d.ts +22 -0
- package/dist/esm/atoms/paste-menu.atom.d.ts.map +1 -1
- package/dist/esm/atoms/paste-menu.atom.js +10 -1
- package/dist/esm/atoms/pick-list.atom.d.ts +15 -0
- package/dist/esm/atoms/pick-list.atom.d.ts.map +1 -0
- package/dist/esm/atoms/pick-list.atom.js +3 -0
- package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/esm/components/canvas-grid/index.js +239 -13
- package/dist/esm/components/canvas-grid/typings.d.ts +96 -11
- package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
- package/dist/esm/components/cell/index.d.ts.map +1 -1
- package/dist/esm/components/cell/index.js +8 -9
- package/dist/esm/components/cell/typings.d.ts +9 -0
- package/dist/esm/components/cell/typings.d.ts.map +1 -1
- package/dist/esm/components/cell-editor/helpers.d.ts +22 -2
- package/dist/esm/components/cell-editor/helpers.d.ts.map +1 -1
- package/dist/esm/components/cell-editor/helpers.js +25 -7
- package/dist/esm/components/cell-editor/index.d.ts +7 -1
- package/dist/esm/components/cell-editor/index.d.ts.map +1 -1
- package/dist/esm/components/cell-editor/index.js +80 -9
- package/dist/esm/components/cell-indicator/index.d.ts +41 -0
- package/dist/esm/components/cell-indicator/index.d.ts.map +1 -0
- package/dist/esm/components/cell-indicator/index.js +76 -0
- package/dist/esm/components/cell-input/cell-input.d.ts +10 -2
- package/dist/esm/components/cell-input/cell-input.d.ts.map +1 -1
- package/dist/esm/components/cell-input/cell-input.js +5 -3
- package/dist/esm/components/cell-input/formula-bar-cell-input.d.ts.map +1 -1
- package/dist/esm/components/cell-input/formula-bar-cell-input.js +9 -2
- package/dist/esm/components/cell-structured/sparkline-math.d.ts +27 -1
- package/dist/esm/components/cell-structured/sparkline-math.d.ts.map +1 -1
- package/dist/esm/components/cell-structured/sparkline-math.js +35 -0
- package/dist/esm/components/cell-structured/sparkline.d.ts +1 -1
- package/dist/esm/components/cell-structured/sparkline.d.ts.map +1 -1
- package/dist/esm/components/cell-structured/sparkline.js +34 -88
- package/dist/esm/components/cell-structured/types.d.ts +6 -0
- package/dist/esm/components/cell-structured/types.d.ts.map +1 -1
- package/dist/esm/components/data-table-dialog/index.d.ts +22 -0
- package/dist/esm/components/data-table-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/data-table-dialog/index.js +75 -0
- package/dist/esm/components/error-check-smart-tag/index.d.ts +27 -0
- package/dist/esm/components/error-check-smart-tag/index.d.ts.map +1 -0
- package/dist/esm/components/error-check-smart-tag/index.js +33 -0
- package/dist/esm/components/forecast-sheet-dialog/index.d.ts +26 -0
- package/dist/esm/components/forecast-sheet-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/forecast-sheet-dialog/index.js +83 -0
- package/dist/esm/components/paste-special-dialog/index.d.ts +3 -3
- package/dist/esm/components/paste-special-dialog/index.d.ts.map +1 -1
- package/dist/esm/components/paste-special-dialog/index.js +58 -23
- package/dist/esm/components/protect-sheet-dialog/allow-edit-ranges-dialog.d.ts +57 -0
- package/dist/esm/components/protect-sheet-dialog/allow-edit-ranges-dialog.d.ts.map +1 -0
- package/dist/esm/components/protect-sheet-dialog/allow-edit-ranges-dialog.js +177 -0
- package/dist/esm/components/protect-sheet-dialog/constants.d.ts +3 -0
- package/dist/esm/components/protect-sheet-dialog/constants.d.ts.map +1 -0
- package/dist/esm/components/protect-sheet-dialog/constants.js +2 -0
- package/dist/esm/components/protect-sheet-dialog/index.d.ts +2 -2
- package/dist/esm/components/protect-sheet-dialog/index.d.ts.map +1 -1
- package/dist/esm/components/protect-sheet-dialog/index.js +3 -2
- package/dist/esm/components/scenario-manager-dialog/index.d.ts +51 -0
- package/dist/esm/components/scenario-manager-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/scenario-manager-dialog/index.js +213 -0
- package/dist/esm/components/selection/index.d.ts +1 -1
- package/dist/esm/components/selection/index.d.ts.map +1 -1
- package/dist/esm/components/selection/index.js +9 -4
- package/dist/esm/components/selection/paste-menu.d.ts +14 -1
- package/dist/esm/components/selection/paste-menu.d.ts.map +1 -1
- package/dist/esm/components/selection/paste-menu.js +76 -8
- package/dist/esm/components/selection/paste-options.d.ts +28 -0
- package/dist/esm/components/selection/paste-options.d.ts.map +1 -0
- package/dist/esm/components/selection/paste-options.js +62 -0
- package/dist/esm/components/selection/types.d.ts +12 -1
- package/dist/esm/components/selection/types.d.ts.map +1 -1
- package/dist/esm/components/selection-drop-menu/index.d.ts +18 -0
- package/dist/esm/components/selection-drop-menu/index.d.ts.map +1 -0
- package/dist/esm/components/selection-drop-menu/index.js +56 -0
- package/dist/esm/components/solver-dialog/index.d.ts +57 -0
- package/dist/esm/components/solver-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/solver-dialog/index.js +176 -0
- package/dist/esm/components/toolbar/sparkline-actions.d.ts +3 -2
- package/dist/esm/components/toolbar/sparkline-actions.d.ts.map +1 -1
- package/dist/esm/components/toolbar/sparkline-actions.js +6 -2
- package/dist/esm/components/toolbar/table-style-selector.d.ts.map +1 -1
- package/dist/esm/components/toolbar/table-style-selector.js +29 -3
- package/dist/esm/config.d.ts +5 -4
- package/dist/esm/config.d.ts.map +1 -1
- package/dist/esm/config.js +12 -8
- package/dist/esm/hooks/use-cell-renderer.d.ts +12 -1
- package/dist/esm/hooks/use-cell-renderer.d.ts.map +1 -1
- package/dist/esm/hooks/use-cell-renderer.js +5 -2
- package/dist/esm/hooks/use-copy-paste-cut.d.ts +36 -2
- package/dist/esm/hooks/use-copy-paste-cut.d.ts.map +1 -1
- package/dist/esm/hooks/use-copy-paste-cut.js +117 -6
- package/dist/esm/hooks/use-editable.d.ts +6 -0
- package/dist/esm/hooks/use-editable.d.ts.map +1 -1
- package/dist/esm/hooks/use-editor-submit.d.ts +45 -3
- package/dist/esm/hooks/use-editor-submit.d.ts.map +1 -1
- package/dist/esm/hooks/use-editor-submit.js +81 -6
- package/dist/esm/hooks/use-keyboard-handler.d.ts +5 -1
- package/dist/esm/hooks/use-keyboard-handler.d.ts.map +1 -1
- package/dist/esm/hooks/use-keyboard-handler.js +10 -1
- package/dist/esm/hooks/use-selection-drag-copy.d.ts +55 -0
- package/dist/esm/hooks/use-selection-drag-copy.d.ts.map +1 -0
- package/dist/esm/hooks/use-selection-drag-copy.js +245 -0
- package/dist/esm/hooks/use-selection-renderer.d.ts +8 -1
- package/dist/esm/hooks/use-selection-renderer.d.ts.map +1 -1
- package/dist/esm/hooks/use-selection-renderer.js +7 -2
- package/dist/esm/hooks/use-selection.d.ts +59 -1
- package/dist/esm/hooks/use-selection.d.ts.map +1 -1
- package/dist/esm/hooks/use-selection.js +245 -52
- package/dist/esm/index.d.ts +6 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +5 -0
- package/dist/esm/release-date.js +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/types.d.ts +50 -1
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/spreadsheet.min.css +1 -1
- package/package.json +6 -5
- package/dist/cjs/components/cell-error/index.d.ts +0 -14
- package/dist/cjs/components/cell-error/index.d.ts.map +0 -1
- package/dist/cjs/components/cell-error/index.js +0 -24
- package/dist/esm/components/cell-error/index.d.ts +0 -14
- package/dist/esm/components/cell-error/index.d.ts.map +0 -1
- package/dist/esm/components/cell-error/index.js +0 -18
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.clampToExtents = exports.sparklineGroupAxisFor = exports.sparklineGroupAxisExtents = exports.resolveSparklineExtents = exports.resolveSparklineSeries = void 0;
|
|
3
|
+
exports.resolveDefaultSparklineColors = exports.OFFICE_DEFAULT_SPARKLINE_COLORS = exports.EXCEL_DEFAULT_SPARKLINE_STYLE = exports.clampToExtents = exports.sparklineGroupAxisFor = exports.sparklineGroupAxisExtents = exports.resolveSparklineExtents = exports.resolveSparklineSeries = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var isNumber = function (item) {
|
|
6
6
|
return typeof item === "number" && !isNaN(item);
|
|
@@ -197,3 +197,50 @@ exports.sparklineGroupAxisFor = sparklineGroupAxisFor;
|
|
|
197
197
|
*/
|
|
198
198
|
var clampToExtents = function (value, min, max) { return Math.min(Math.max(value, min), max); };
|
|
199
199
|
exports.clampToExtents = clampToExtents;
|
|
200
|
+
/**
|
|
201
|
+
* Excel's Sparkline Style 1, what Excel gives every new sparkline group: Accent 1 darker 50% for the
|
|
202
|
+
* series and markers, Accent 2 for negative points, Accent 1 for high/low, Accent 1 lighter 40% for
|
|
203
|
+
* first/last. Theme references, so they resolve through the workbook's theme.
|
|
204
|
+
*/
|
|
205
|
+
exports.EXCEL_DEFAULT_SPARKLINE_STYLE = {
|
|
206
|
+
series: { theme: 4, tint: -0.499984740745262 },
|
|
207
|
+
negative: { theme: 5 },
|
|
208
|
+
markers: { theme: 4, tint: -0.499984740745262 },
|
|
209
|
+
high: { theme: 4 },
|
|
210
|
+
low: { theme: 4 },
|
|
211
|
+
first: { theme: 4, tint: 0.39997558519241921 },
|
|
212
|
+
last: { theme: 4, tint: 0.39997558519241921 },
|
|
213
|
+
};
|
|
214
|
+
/** Style 1 under the Office 2013–2022 theme (Accent 1 #4472C4, Accent 2 #ED7D31): the painter's
|
|
215
|
+
* fallback when no theme resolves it. */
|
|
216
|
+
exports.OFFICE_DEFAULT_SPARKLINE_COLORS = {
|
|
217
|
+
series: "#203864",
|
|
218
|
+
negative: "#ED7D31",
|
|
219
|
+
markers: "#203864",
|
|
220
|
+
high: "#4472C4",
|
|
221
|
+
low: "#4472C4",
|
|
222
|
+
first: "#8FAADC",
|
|
223
|
+
last: "#8FAADC",
|
|
224
|
+
};
|
|
225
|
+
/** Excel's default sparkline colours resolved through a theme (`resolve` maps a theme colour to CSS). */
|
|
226
|
+
var resolveDefaultSparklineColors = function (resolve) {
|
|
227
|
+
var e_6, _a;
|
|
228
|
+
var out = tslib_1.__assign({}, exports.OFFICE_DEFAULT_SPARKLINE_COLORS);
|
|
229
|
+
try {
|
|
230
|
+
for (var _b = tslib_1.__values(Object.keys(exports.EXCEL_DEFAULT_SPARKLINE_STYLE)), _c = _b.next(); !_c.done; _c = _b.next()) {
|
|
231
|
+
var key = _c.value;
|
|
232
|
+
var color = resolve(exports.EXCEL_DEFAULT_SPARKLINE_STYLE[key]);
|
|
233
|
+
if (color)
|
|
234
|
+
out[key] = color;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
catch (e_6_1) { e_6 = { error: e_6_1 }; }
|
|
238
|
+
finally {
|
|
239
|
+
try {
|
|
240
|
+
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
|
|
241
|
+
}
|
|
242
|
+
finally { if (e_6) throw e_6.error; }
|
|
243
|
+
}
|
|
244
|
+
return out;
|
|
245
|
+
};
|
|
246
|
+
exports.resolveDefaultSparklineColors = resolveDefaultSparklineColors;
|
|
@@ -2,5 +2,5 @@ import type { SparkLineResult } from "@rowsncolumns/common-types";
|
|
|
2
2
|
import React from "react";
|
|
3
3
|
import type { StructuredResultProps } from "./types";
|
|
4
4
|
export type SparklineProps = StructuredResultProps & SparkLineResult;
|
|
5
|
-
export declare const Sparkline: ({ x, y, width, height, data, options,
|
|
5
|
+
export declare const Sparkline: ({ x, y, width, height, data, options, sparklineGroupAxis, sparklineDefaultColors: defaultColors, }: SparklineProps) => React.JSX.Element;
|
|
6
6
|
//# sourceMappingURL=sparkline.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sparkline.d.ts","sourceRoot":"","sources":["../../../../components/cell-structured/sparkline.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAGlE,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"sparkline.d.ts","sourceRoot":"","sources":["../../../../components/cell-structured/sparkline.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAGlE,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAErD,MAAM,MAAM,cAAc,GAAG,qBAAqB,GAAG,eAAe,CAAC;AAoBrE,eAAO,MAAM,SAAS,GAAI,oGASvB,cAAc,sBA4NhB,CAAC"}
|
|
@@ -18,17 +18,18 @@ var drawDiamond = function (ctx, x, y, size, fillColor) {
|
|
|
18
18
|
ctx.fill();
|
|
19
19
|
};
|
|
20
20
|
var Sparkline = function (_a) {
|
|
21
|
-
var x = _a.x, y = _a.y, width = _a.width, height = _a.height, data = _a.data, options = _a.options,
|
|
21
|
+
var x = _a.x, y = _a.y, width = _a.width, height = _a.height, data = _a.data, options = _a.options, sparklineGroupAxis = _a.sparklineGroupAxis, _b = _a.sparklineDefaultColors, defaultColors = _b === void 0 ? sparkline_math_1.OFFICE_DEFAULT_SPARKLINE_COLORS : _b;
|
|
22
22
|
var sparkLineFunction = (0, react_2.useCallback)(function (ctx, shape) {
|
|
23
|
-
var _a, _b
|
|
23
|
+
var _a, _b;
|
|
24
24
|
// Guard against undefined data (formula not yet evaluated)
|
|
25
25
|
if (!data || !Array.isArray(data)) {
|
|
26
26
|
return;
|
|
27
27
|
}
|
|
28
28
|
var padding = 4;
|
|
29
29
|
var paddingTop = 4;
|
|
30
|
-
|
|
31
|
-
var
|
|
30
|
+
// Excel paints the series in the group's colour, Style 1's when it has none — never the cell's.
|
|
31
|
+
var lineColor = (_a = options === null || options === void 0 ? void 0 : options.color) !== null && _a !== void 0 ? _a : defaultColors.series;
|
|
32
|
+
var fillColor = lineColor;
|
|
32
33
|
var lineWidth = typeof (options === null || options === void 0 ? void 0 : options.lineweight) === "number" && options.lineweight > 0
|
|
33
34
|
? options.lineweight
|
|
34
35
|
: 1;
|
|
@@ -39,13 +40,13 @@ var Sparkline = function (_a) {
|
|
|
39
40
|
// options this compacts empties exactly like the legacy
|
|
40
41
|
// `data.filter(isNumber)` path did.
|
|
41
42
|
var slots = (0, sparkline_math_1.resolveSparklineSeries)(data, options);
|
|
42
|
-
var type = (
|
|
43
|
+
var type = (_b = options === null || options === void 0 ? void 0 : options.charttype) !== null && _b !== void 0 ? _b : "line";
|
|
43
44
|
var minColumnHeight = 1;
|
|
44
45
|
// For winloss, we need to handle positive/negative differently
|
|
45
46
|
var isWinLoss = type === "winloss";
|
|
46
47
|
// Axis extents with Excel's manual-min/max semantics
|
|
47
48
|
// (minaxistype/maxaxistype "custom" → manual value).
|
|
48
|
-
var
|
|
49
|
+
var _c = (0, sparkline_math_1.resolveSparklineExtents)(slots, options, isWinLoss, sparklineGroupAxis), effectiveMin = _c.min, effectiveMax = _c.max;
|
|
49
50
|
// Calculate scales. Gap/span slots keep their x position, so the
|
|
50
51
|
// slot count (not the numeric count) drives the x scale.
|
|
51
52
|
var xScale = (width - 2 * padding) / (slots.length - (type === "line" ? 1 : 0));
|
|
@@ -74,36 +75,28 @@ var Sparkline = function (_a) {
|
|
|
74
75
|
var lastDataIndex = slots.reduce(function (m, slot) { return (slot.dataIndex > m ? slot.dataIndex : m); }, -1);
|
|
75
76
|
// Store points for markers
|
|
76
77
|
var points = [];
|
|
77
|
-
//
|
|
78
|
-
//
|
|
79
|
-
|
|
80
|
-
// dedicated color override. We compute the fill per column rather
|
|
81
|
-
// than batching every rect into one fill so each column can have
|
|
82
|
-
// its own color.
|
|
83
|
-
var pickColumnColor = function (value, slotIndex, dataIndex) {
|
|
78
|
+
// Excel's point highlights: each of Negative / High / Low / First / Last Points colours its
|
|
79
|
+
// point (a column, a bar or a line marker) only while it is checked — none is by default.
|
|
80
|
+
var pointHighlight = function (value, slotIndex, dataIndex) {
|
|
84
81
|
var _a, _b, _c, _d, _e;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
var isFirst = dataIndex === 0;
|
|
88
|
-
var isLast = dataIndex >= 0 && dataIndex === lastDataIndex;
|
|
89
|
-
var isNegative = value < 0;
|
|
90
|
-
if ((options === null || options === void 0 ? void 0 : options.negative) && isNegative) {
|
|
91
|
-
return (_a = options.colorNegative) !== null && _a !== void 0 ? _a : "#FF0000";
|
|
82
|
+
if ((options === null || options === void 0 ? void 0 : options.negative) && value < 0) {
|
|
83
|
+
return (_a = options.colorNegative) !== null && _a !== void 0 ? _a : defaultColors.negative;
|
|
92
84
|
}
|
|
93
|
-
if ((options === null || options === void 0 ? void 0 : options.high) &&
|
|
94
|
-
return (_b = options.colorHigh) !== null && _b !== void 0 ? _b :
|
|
85
|
+
if ((options === null || options === void 0 ? void 0 : options.high) && slotIndex === maxSlotIndex) {
|
|
86
|
+
return (_b = options.colorHigh) !== null && _b !== void 0 ? _b : defaultColors.high;
|
|
95
87
|
}
|
|
96
|
-
if ((options === null || options === void 0 ? void 0 : options.low) &&
|
|
97
|
-
return (_c = options.colorLow) !== null && _c !== void 0 ? _c :
|
|
88
|
+
if ((options === null || options === void 0 ? void 0 : options.low) && slotIndex === minSlotIndex) {
|
|
89
|
+
return (_c = options.colorLow) !== null && _c !== void 0 ? _c : defaultColors.low;
|
|
98
90
|
}
|
|
99
|
-
if ((options === null || options === void 0 ? void 0 : options.first) &&
|
|
100
|
-
return (_d = options.colorFirst) !== null && _d !== void 0 ? _d :
|
|
91
|
+
if ((options === null || options === void 0 ? void 0 : options.first) && dataIndex === 0) {
|
|
92
|
+
return (_d = options.colorFirst) !== null && _d !== void 0 ? _d : defaultColors.first;
|
|
101
93
|
}
|
|
102
|
-
if ((options === null || options === void 0 ? void 0 : options.last) &&
|
|
103
|
-
return (_e = options.colorLast) !== null && _e !== void 0 ? _e :
|
|
94
|
+
if ((options === null || options === void 0 ? void 0 : options.last) && dataIndex >= 0 && dataIndex === lastDataIndex) {
|
|
95
|
+
return (_e = options.colorLast) !== null && _e !== void 0 ? _e : defaultColors.last;
|
|
104
96
|
}
|
|
105
|
-
return
|
|
97
|
+
return undefined;
|
|
106
98
|
};
|
|
99
|
+
var pickColumnColor = function (value, slotIndex, dataIndex) { var _a; return (_a = pointHighlight(value, slotIndex, dataIndex)) !== null && _a !== void 0 ? _a : fillColor; };
|
|
107
100
|
// Draw the horizontal (zero) axis when requested via the `axis`
|
|
108
101
|
// (displayXAxis) option. Only meaningful when zero falls inside
|
|
109
102
|
// the vertical extents; winloss already anchors bars on zeroY.
|
|
@@ -133,7 +126,6 @@ var Sparkline = function (_a) {
|
|
|
133
126
|
// straight across the gap.
|
|
134
127
|
var penDown = false;
|
|
135
128
|
slots.forEach(function (slot, index) {
|
|
136
|
-
var _a, _b;
|
|
137
129
|
var pointX = padding + index * xScale;
|
|
138
130
|
if (slot.value == null) {
|
|
139
131
|
// Empty slot: nothing painted. Gap breaks the line; span
|
|
@@ -177,21 +169,10 @@ var Sparkline = function (_a) {
|
|
|
177
169
|
var columnX = pointX + (xScale - columnWidth) / 2;
|
|
178
170
|
var barHeight = Math.abs(clamped) * yScale;
|
|
179
171
|
var barY = clamped >= 0 ? zeroY - barHeight : zeroY;
|
|
180
|
-
//
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
? (_a = options === null || options === void 0 ? void 0 : options.color) !== null && _a !== void 0 ? _a : "#00B050"
|
|
184
|
-
: (_b = options === null || options === void 0 ? void 0 : options.colorNegative) !== null && _b !== void 0 ? _b : "#FF0000";
|
|
172
|
+
// Wins and losses both paint in the series colour; Negative Points (and the other
|
|
173
|
+
// point toggles) recolour their bars, as on a column sparkline.
|
|
174
|
+
ctx.fillStyle = pickColumnColor(value, index, slot.dataIndex);
|
|
185
175
|
ctx.fillRect(columnX, barY, columnWidth, Math.max(barHeight, 2));
|
|
186
|
-
// Store points for diamond markers
|
|
187
|
-
var markerY = clamped >= 0 ? zeroY - barHeight : zeroY + barHeight;
|
|
188
|
-
points.push({
|
|
189
|
-
x: pointX + xScale / 2,
|
|
190
|
-
y: markerY,
|
|
191
|
-
value: value,
|
|
192
|
-
slotIndex: index,
|
|
193
|
-
dataIndex: slot.dataIndex,
|
|
194
|
-
});
|
|
195
176
|
}
|
|
196
177
|
});
|
|
197
178
|
// Stroke the line for 'line' type. Column sparklines are filled
|
|
@@ -199,58 +180,21 @@ var Sparkline = function (_a) {
|
|
|
199
180
|
if (type === "line") {
|
|
200
181
|
ctx.stroke();
|
|
201
182
|
}
|
|
202
|
-
//
|
|
203
|
-
//
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
var markerSize_1 = isWinLoss ? 4 : 3;
|
|
183
|
+
// Excel's markers are a line sparkline's: every point gets one only with "Markers" checked,
|
|
184
|
+
// and a checked point toggle marks its own point in its colour. Nothing by default.
|
|
185
|
+
if (type === "line") {
|
|
186
|
+
var markerSize_1 = 3;
|
|
207
187
|
points.forEach(function (point) {
|
|
208
|
-
var _a, _b
|
|
209
|
-
var markerColor
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
var isLast = point.dataIndex >= 0 && point.dataIndex === lastDataIndex;
|
|
215
|
-
var isHigh = point.slotIndex === maxSlotIndex;
|
|
216
|
-
var isLow = point.slotIndex === minSlotIndex;
|
|
217
|
-
var isNegative = point.value < 0;
|
|
218
|
-
if (isWinLoss) {
|
|
219
|
-
// Win/loss: green for positive, red for negative
|
|
220
|
-
markerColor = isNegative
|
|
221
|
-
? (_a = options === null || options === void 0 ? void 0 : options.colorNegative) !== null && _a !== void 0 ? _a : "#FF0000"
|
|
222
|
-
: (_c = (_b = options === null || options === void 0 ? void 0 : options.colorHigh) !== null && _b !== void 0 ? _b : options === null || options === void 0 ? void 0 : options.color) !== null && _c !== void 0 ? _c : "#00B050";
|
|
223
|
-
}
|
|
224
|
-
else {
|
|
225
|
-
// Line sparkline: use high/low colors for min/max points
|
|
226
|
-
if (isHigh && isLow) {
|
|
227
|
-
// Same point is both high and low (single point or all same)
|
|
228
|
-
markerColor = (_e = (_d = options === null || options === void 0 ? void 0 : options.colorHigh) !== null && _d !== void 0 ? _d : options === null || options === void 0 ? void 0 : options.color) !== null && _e !== void 0 ? _e : lineColor;
|
|
229
|
-
}
|
|
230
|
-
else if (isHigh) {
|
|
231
|
-
markerColor = (_f = options === null || options === void 0 ? void 0 : options.colorHigh) !== null && _f !== void 0 ? _f : "#00B050";
|
|
232
|
-
}
|
|
233
|
-
else if (isLow) {
|
|
234
|
-
markerColor = (_g = options === null || options === void 0 ? void 0 : options.colorLow) !== null && _g !== void 0 ? _g : "#FF0000";
|
|
235
|
-
}
|
|
236
|
-
else if (isFirst && (options === null || options === void 0 ? void 0 : options.colorFirst)) {
|
|
237
|
-
markerColor = options.colorFirst;
|
|
238
|
-
}
|
|
239
|
-
else if (isLast && (options === null || options === void 0 ? void 0 : options.colorLast)) {
|
|
240
|
-
markerColor = options.colorLast;
|
|
241
|
-
}
|
|
242
|
-
else if (isNegative) {
|
|
243
|
-
markerColor = (_h = options === null || options === void 0 ? void 0 : options.colorNegative) !== null && _h !== void 0 ? _h : "#FF0000";
|
|
244
|
-
}
|
|
245
|
-
else {
|
|
246
|
-
markerColor =
|
|
247
|
-
(_k = (_j = options === null || options === void 0 ? void 0 : options.colorMarkers) !== null && _j !== void 0 ? _j : options === null || options === void 0 ? void 0 : options.color) !== null && _k !== void 0 ? _k : lineColor;
|
|
248
|
-
}
|
|
188
|
+
var _a, _b;
|
|
189
|
+
var markerColor = (_a = pointHighlight(point.value, point.slotIndex, point.dataIndex)) !== null && _a !== void 0 ? _a : ((options === null || options === void 0 ? void 0 : options.markers)
|
|
190
|
+
? (_b = options.colorMarkers) !== null && _b !== void 0 ? _b : defaultColors.markers
|
|
191
|
+
: undefined);
|
|
192
|
+
if (markerColor) {
|
|
193
|
+
drawDiamond(ctx, point.x, point.y, markerSize_1, markerColor);
|
|
249
194
|
}
|
|
250
|
-
drawDiamond(ctx, point.x, point.y, markerSize_1, markerColor);
|
|
251
195
|
});
|
|
252
196
|
}
|
|
253
|
-
}, [data, options,
|
|
197
|
+
}, [data, options, sparklineGroupAxis, defaultColors]);
|
|
254
198
|
return (react_1.default.createElement(react_konva_1.Shape, { x: x, y: y, width: width, height: height, sceneFunc: sparkLineFunction, listening: false }));
|
|
255
199
|
};
|
|
256
200
|
exports.Sparkline = Sparkline;
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import type { StructuredResult } from "@rowsncolumns/common-types";
|
|
2
2
|
import type { CellProps } from "../cell/typings";
|
|
3
|
+
import type { SparklineDefaultColors } from "./sparkline-math";
|
|
3
4
|
export type StructuredResultProps<S extends StructuredResult = StructuredResult> = Pick<CellProps<S>, "structuredValue" | "sparklineGroupAxis"> & {
|
|
4
5
|
x: number;
|
|
5
6
|
y: number;
|
|
6
7
|
width: number;
|
|
7
8
|
height: number;
|
|
8
9
|
color?: string;
|
|
10
|
+
/**
|
|
11
|
+
* The colours a sparkline paints where its formula sets none: Excel's Style 1 through the
|
|
12
|
+
* workbook theme. Without it, Style 1 under the Office 2013–2022 theme.
|
|
13
|
+
*/
|
|
14
|
+
sparklineDefaultColors?: SparklineDefaultColors;
|
|
9
15
|
textX?: number;
|
|
10
16
|
textY?: number;
|
|
11
17
|
textWidth?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../components/cell-structured/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../components/cell-structured/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE/D,MAAM,MAAM,qBAAqB,CAC/B,CAAC,SAAS,gBAAgB,GAAG,gBAAgB,IAC3C,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,GAAG,oBAAoB,CAAC,GAAG;IACjE,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,sBAAsB,CAAC,EAAE,sBAAsB,CAAC;IAEhD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
/** Excel's refusal for an empty dialog or a reference that is not one cell. */
|
|
3
|
+
export declare const DATA_TABLE_INPUT_MESSAGE = "Input cell reference is not valid.";
|
|
4
|
+
export type DataTableDialogProps = {
|
|
5
|
+
/** Controls visibility. */
|
|
6
|
+
open: boolean;
|
|
7
|
+
onOpenChange(open: boolean): void;
|
|
8
|
+
/**
|
|
9
|
+
* Creates the table over the current selection (formula row / column and
|
|
10
|
+
* input values included) with the given A1 input cells, either of which may
|
|
11
|
+
* be empty. Resolves to Excel's refusal message when the engine refused
|
|
12
|
+
* (e.g. "Cannot change part of a data table."), `undefined` on success.
|
|
13
|
+
*/
|
|
14
|
+
onApply(rowInputCell: string | undefined, columnInputCell: string | undefined): Promise<string | undefined> | string | undefined;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Excel's Data ▸ What-If Analysis ▸ Data Table… dialog: Row input cell /
|
|
18
|
+
* Column input cell. One of them makes a one-variable table, both a
|
|
19
|
+
* two-variable table.
|
|
20
|
+
*/
|
|
21
|
+
export declare const DataTableDialog: React.MemoExoticComponent<({ open, onOpenChange, onApply }: DataTableDialogProps) => React.JSX.Element>;
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/data-table-dialog/index.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAiD,MAAM,OAAO,CAAC;AAEtE,+EAA+E;AAC/E,eAAO,MAAM,wBAAwB,uCAAuC,CAAC;AAE7E,MAAM,MAAM,oBAAoB,GAAG;IACjC,2BAA2B;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC;;;;;OAKG;IACH,OAAO,CACL,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,eAAe,EAAE,MAAM,GAAG,SAAS,GAClC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC;CACrD,CAAC;AAKF;;;;GAIG;AACH,eAAO,MAAM,eAAe,8DAA0C,oBAAoB,uBAoGxF,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DataTableDialog = exports.DATA_TABLE_INPUT_MESSAGE = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var icons_1 = require("@rowsncolumns/icons");
|
|
6
|
+
var ui_1 = require("@rowsncolumns/ui");
|
|
7
|
+
var utils_1 = require("@rowsncolumns/utils");
|
|
8
|
+
var react_1 = tslib_1.__importStar(require("react"));
|
|
9
|
+
/** Excel's refusal for an empty dialog or a reference that is not one cell. */
|
|
10
|
+
exports.DATA_TABLE_INPUT_MESSAGE = "Input cell reference is not valid.";
|
|
11
|
+
var isCellReference = function (text) {
|
|
12
|
+
return /^\$?[A-Za-z]{1,3}\$?\d+$/.test(text.trim()) && (0, utils_1.addressToCell)(text.trim()) != null;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Excel's Data ▸ What-If Analysis ▸ Data Table… dialog: Row input cell /
|
|
16
|
+
* Column input cell. One of them makes a one-variable table, both a
|
|
17
|
+
* two-variable table.
|
|
18
|
+
*/
|
|
19
|
+
exports.DataTableDialog = (0, react_1.memo)(function (_a) {
|
|
20
|
+
var open = _a.open, onOpenChange = _a.onOpenChange, onApply = _a.onApply;
|
|
21
|
+
var _b = tslib_1.__read((0, react_1.useState)(""), 2), rowInput = _b[0], setRowInput = _b[1];
|
|
22
|
+
var _c = tslib_1.__read((0, react_1.useState)(""), 2), columnInput = _c[0], setColumnInput = _c[1];
|
|
23
|
+
var _d = tslib_1.__read((0, react_1.useState)(undefined), 2), error = _d[0], setError = _d[1];
|
|
24
|
+
var _e = tslib_1.__read((0, react_1.useState)(false), 2), busy = _e[0], setBusy = _e[1];
|
|
25
|
+
(0, react_1.useEffect)(function () {
|
|
26
|
+
if (open) {
|
|
27
|
+
setRowInput("");
|
|
28
|
+
setColumnInput("");
|
|
29
|
+
setError(undefined);
|
|
30
|
+
setBusy(false);
|
|
31
|
+
}
|
|
32
|
+
}, [open]);
|
|
33
|
+
var submit = (0, react_1.useCallback)(function (event) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
34
|
+
var row, column, refusal;
|
|
35
|
+
return tslib_1.__generator(this, function (_a) {
|
|
36
|
+
switch (_a.label) {
|
|
37
|
+
case 0:
|
|
38
|
+
event.preventDefault();
|
|
39
|
+
row = rowInput.trim();
|
|
40
|
+
column = columnInput.trim();
|
|
41
|
+
if ((row === "" && column === "") ||
|
|
42
|
+
(row !== "" && !isCellReference(row)) ||
|
|
43
|
+
(column !== "" && !isCellReference(column))) {
|
|
44
|
+
setError(exports.DATA_TABLE_INPUT_MESSAGE);
|
|
45
|
+
return [2 /*return*/];
|
|
46
|
+
}
|
|
47
|
+
setBusy(true);
|
|
48
|
+
_a.label = 1;
|
|
49
|
+
case 1:
|
|
50
|
+
_a.trys.push([1, , 3, 4]);
|
|
51
|
+
return [4 /*yield*/, onApply(row === "" ? undefined : row.replace(/\$/g, "").toUpperCase(), column === "" ? undefined : column.replace(/\$/g, "").toUpperCase())];
|
|
52
|
+
case 2:
|
|
53
|
+
refusal = _a.sent();
|
|
54
|
+
if (refusal) {
|
|
55
|
+
setError(refusal);
|
|
56
|
+
return [2 /*return*/];
|
|
57
|
+
}
|
|
58
|
+
onOpenChange(false);
|
|
59
|
+
return [3 /*break*/, 4];
|
|
60
|
+
case 3:
|
|
61
|
+
setBusy(false);
|
|
62
|
+
return [7 /*endfinally*/];
|
|
63
|
+
case 4: return [2 /*return*/];
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}); }, [rowInput, columnInput, onApply, onOpenChange]);
|
|
67
|
+
return (react_1.default.createElement(ui_1.Dialog, { open: open, onOpenChange: onOpenChange },
|
|
68
|
+
react_1.default.createElement(ui_1.DialogContent, { className: "w-[320px] max-w-[92vw] pointer-events-auto" },
|
|
69
|
+
react_1.default.createElement(ui_1.DialogTitle, null, "Data Table"),
|
|
70
|
+
react_1.default.createElement(ui_1.DialogDescription, null, "Substitute each value of the selection's first row and column into the input cells."),
|
|
71
|
+
react_1.default.createElement(ui_1.DialogCloseButton, { onClick: function () { return onOpenChange(false); } },
|
|
72
|
+
react_1.default.createElement(icons_1.Cross1Icon, null)),
|
|
73
|
+
react_1.default.createElement(ui_1.DialogBody, { className: "flex flex-col gap-3 font-system text-sm" },
|
|
74
|
+
react_1.default.createElement("form", { className: "flex flex-col gap-3", onSubmit: submit },
|
|
75
|
+
react_1.default.createElement("label", { className: "flex flex-col gap-1 text-xs font-medium" },
|
|
76
|
+
"Row input cell:",
|
|
77
|
+
react_1.default.createElement(ui_1.Input, { autoFocus: true, value: rowInput, "aria-label": "Row input cell", onChange: function (e) {
|
|
78
|
+
setRowInput(e.target.value);
|
|
79
|
+
setError(undefined);
|
|
80
|
+
} })),
|
|
81
|
+
react_1.default.createElement("label", { className: "flex flex-col gap-1 text-xs font-medium" },
|
|
82
|
+
"Column input cell:",
|
|
83
|
+
react_1.default.createElement(ui_1.Input, { value: columnInput, "aria-label": "Column input cell", onChange: function (e) {
|
|
84
|
+
setColumnInput(e.target.value);
|
|
85
|
+
setError(undefined);
|
|
86
|
+
} })),
|
|
87
|
+
error ? (react_1.default.createElement("div", { role: "alert", className: "text-xs text-rnc-destructive" }, error)) : null,
|
|
88
|
+
react_1.default.createElement(ui_1.Separator, null),
|
|
89
|
+
react_1.default.createElement("div", { className: "flex justify-end gap-2" },
|
|
90
|
+
react_1.default.createElement(ui_1.Button, { type: "button", variant: "outline", size: "sm", onClick: function () { return onOpenChange(false); } }, "Cancel"),
|
|
91
|
+
react_1.default.createElement(ui_1.Button, { type: "submit", size: "sm", disabled: busy }, "OK")))))));
|
|
92
|
+
});
|
|
93
|
+
exports.DataTableDialog.displayName = "DataTableDialog";
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type ErrorCheckKind, type ErrorCheckOption } from "../../api/error-checking";
|
|
3
|
+
export type ErrorCheckSmartTagProps = {
|
|
4
|
+
/** The active cell's rectangle; the button sits beside it (left, or right in column A). */
|
|
5
|
+
x: number;
|
|
6
|
+
y: number;
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
kind: ErrorCheckKind;
|
|
10
|
+
/** The error value's name (`#VALUE!`) for a formula error. */
|
|
11
|
+
errorName?: string;
|
|
12
|
+
open: boolean;
|
|
13
|
+
onOpenChange(open: boolean): void;
|
|
14
|
+
onChooseOption(option: ErrorCheckOption): void;
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Excel's error-checking smart tag: beside the active cell when that cell carries the green ◤.
|
|
18
|
+
* The menu names the error, then offers Convert to Number (numbers stored as text), Help on this
|
|
19
|
+
* Error, Ignore Error, Edit in Formula Bar and Error Checking Options. Alt+Shift+F10 opens it
|
|
20
|
+
* ("Alt+Shift+F10: displays the menu or message for an Error Checking button" —
|
|
21
|
+
* https://support.microsoft.com/en-us/office/keyboard-shortcuts-in-excel-1798d9d5-842a-42b8-9c99-9b7213f0040f).
|
|
22
|
+
*/
|
|
23
|
+
export declare const ErrorCheckSmartTag: {
|
|
24
|
+
({ x, y, width, kind, errorName, open, onOpenChange, onChooseOption, }: ErrorCheckSmartTagProps): React.JSX.Element;
|
|
25
|
+
displayName: string;
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/error-check-smart-tag/index.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EAEtB,MAAM,0BAA0B,CAAC;AAElC,MAAM,MAAM,uBAAuB,GAAG;IACpC,2FAA2F;IAC3F,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,cAAc,CAAC;IACrB,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC,cAAc,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAChD,CAAC;AAYF;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB;4EAS5B,uBAAuB;;CAgDzB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ErrorCheckSmartTag = 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 error_checking_1 = require("../../api/error-checking");
|
|
8
|
+
var BUTTON_SIZE = 22;
|
|
9
|
+
/** Excel's error-checking button: a yellow diamond with an exclamation mark. */
|
|
10
|
+
var WarningIcon = function () { return (react_1.default.createElement("svg", { width: "14", height: "14", viewBox: "0 0 24 24", "aria-hidden": "true" },
|
|
11
|
+
react_1.default.createElement("path", { d: "M12 1.5 22.5 12 12 22.5 1.5 12z", fill: "#F2C811", stroke: "#8A6D00", strokeWidth: "1" }),
|
|
12
|
+
react_1.default.createElement("path", { d: "M11 6.5h2v8h-2zM11 16.5h2v2h-2z", fill: "#1F1F1F" }))); };
|
|
13
|
+
/**
|
|
14
|
+
* Excel's error-checking smart tag: beside the active cell when that cell carries the green ◤.
|
|
15
|
+
* The menu names the error, then offers Convert to Number (numbers stored as text), Help on this
|
|
16
|
+
* Error, Ignore Error, Edit in Formula Bar and Error Checking Options. Alt+Shift+F10 opens it
|
|
17
|
+
* ("Alt+Shift+F10: displays the menu or message for an Error Checking button" —
|
|
18
|
+
* https://support.microsoft.com/en-us/office/keyboard-shortcuts-in-excel-1798d9d5-842a-42b8-9c99-9b7213f0040f).
|
|
19
|
+
*/
|
|
20
|
+
var ErrorCheckSmartTag = function (_a) {
|
|
21
|
+
var x = _a.x, y = _a.y, width = _a.width, kind = _a.kind, errorName = _a.errorName, open = _a.open, onOpenChange = _a.onOpenChange, onChooseOption = _a.onChooseOption;
|
|
22
|
+
var left = x >= BUTTON_SIZE + 2 ? x - BUTTON_SIZE - 2 : x + width + 2;
|
|
23
|
+
return (react_1.default.createElement("div", { className: "absolute pointer-events-auto flex items-start justify-start", style: { left: left, top: y }, onMouseDown: function (e) { return e.stopPropagation(); }, "data-testid": "error-check-smart-tag" },
|
|
24
|
+
react_1.default.createElement(ui_1.DropdownMenu, { modal: false, open: open, onOpenChange: onOpenChange },
|
|
25
|
+
react_1.default.createElement(ui_1.DropdownMenuTrigger, { asChild: true },
|
|
26
|
+
react_1.default.createElement(ui_1.IconButton, { tooltip: "Error Checking", "aria-label": "Error Checking", className: "shadow-sm bg-rnc-background border-rnc-border border border-solid rounded-md" },
|
|
27
|
+
react_1.default.createElement(WarningIcon, null))),
|
|
28
|
+
react_1.default.createElement(ui_1.DropdownMenuPortal, null,
|
|
29
|
+
react_1.default.createElement(ui_1.DropdownMenuContent, { align: "start", onCloseAutoFocus: function (event) { return event.preventDefault(); } },
|
|
30
|
+
react_1.default.createElement(ui_1.DropdownMenuLabel, null, (0, error_checking_1.getErrorCheckTitle)(kind, errorName)),
|
|
31
|
+
kind === "numberStoredAsText" ? (react_1.default.createElement(ui_1.DropdownMenuItem, { onSelect: function () { return onChooseOption("convertToNumber"); } }, "Convert to Number")) : null,
|
|
32
|
+
react_1.default.createElement(ui_1.DropdownMenuItem, { onSelect: function () { return onChooseOption("help"); } }, "Help on this Error"),
|
|
33
|
+
react_1.default.createElement(ui_1.DropdownMenuItem, { onSelect: function () { return onChooseOption("ignore"); } }, "Ignore Error"),
|
|
34
|
+
react_1.default.createElement(ui_1.DropdownMenuItem, { onSelect: function () { return onChooseOption("editInFormulaBar"); } }, "Edit in Formula Bar"),
|
|
35
|
+
react_1.default.createElement(ui_1.DropdownMenuSeparator, null),
|
|
36
|
+
react_1.default.createElement(ui_1.DropdownMenuItem, { onSelect: function () { return onChooseOption("options"); } }, "Error Checking Options\u2026"))))));
|
|
37
|
+
};
|
|
38
|
+
exports.ErrorCheckSmartTag = ErrorCheckSmartTag;
|
|
39
|
+
exports.ErrorCheckSmartTag.displayName = "ErrorCheckSmartTag";
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
/** What the dialog asks for (the `create-forecast-sheet` command's options). */
|
|
3
|
+
export type ForecastSheetOptions = {
|
|
4
|
+
chartType: "line" | "column";
|
|
5
|
+
/** Forecast End as typed (a number or a date the host parses). */
|
|
6
|
+
forecastEnd?: string;
|
|
7
|
+
/** Fraction, e.g. 0.95; 0 = no confidence bounds. */
|
|
8
|
+
confidenceInterval: number;
|
|
9
|
+
/** `undefined` = detect automatically. */
|
|
10
|
+
seasonality?: number;
|
|
11
|
+
};
|
|
12
|
+
export type ForecastSheetDialogProps = {
|
|
13
|
+
open: boolean;
|
|
14
|
+
onOpenChange(open: boolean): void;
|
|
15
|
+
/** Default Forecast End shown in the field (the host's suggestion), optional. */
|
|
16
|
+
initialForecastEnd?: string;
|
|
17
|
+
/** Creates the sheet; resolves to Excel's refusal message, or `undefined` once done. */
|
|
18
|
+
onCreate(options: ForecastSheetOptions): Promise<string | undefined> | string | undefined;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Excel's Create Forecast Worksheet dialog: Line or Column chart, Forecast
|
|
22
|
+
* End, and the Options — Confidence Interval and Seasonality (automatic or
|
|
23
|
+
* set manually). The timeline and values are the host's selection.
|
|
24
|
+
*/
|
|
25
|
+
export declare const ForecastSheetDialog: React.MemoExoticComponent<({ open, onOpenChange, initialForecastEnd, onCreate }: ForecastSheetDialogProps) => React.JSX.Element>;
|
|
26
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/forecast-sheet-dialog/index.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAiD,MAAM,OAAO,CAAC;AAEtE,gFAAgF;AAChF,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC7B,kEAAkE;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0CAA0C;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC,iFAAiF;IACjF,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,wFAAwF;IACxF,QAAQ,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAAC;CAC3F,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,mFACyB,wBAAwB,uBA6HhF,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ForecastSheetDialog = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var icons_1 = require("@rowsncolumns/icons");
|
|
6
|
+
var ui_1 = require("@rowsncolumns/ui");
|
|
7
|
+
var react_1 = tslib_1.__importStar(require("react"));
|
|
8
|
+
/**
|
|
9
|
+
* Excel's Create Forecast Worksheet dialog: Line or Column chart, Forecast
|
|
10
|
+
* End, and the Options — Confidence Interval and Seasonality (automatic or
|
|
11
|
+
* set manually). The timeline and values are the host's selection.
|
|
12
|
+
*/
|
|
13
|
+
exports.ForecastSheetDialog = (0, react_1.memo)(function (_a) {
|
|
14
|
+
var open = _a.open, onOpenChange = _a.onOpenChange, initialForecastEnd = _a.initialForecastEnd, onCreate = _a.onCreate;
|
|
15
|
+
var _b = tslib_1.__read((0, react_1.useState)("line"), 2), chartType = _b[0], setChartType = _b[1];
|
|
16
|
+
var _c = tslib_1.__read((0, react_1.useState)(initialForecastEnd !== null && initialForecastEnd !== void 0 ? initialForecastEnd : ""), 2), end = _c[0], setEnd = _c[1];
|
|
17
|
+
var _d = tslib_1.__read((0, react_1.useState)(true), 2), withInterval = _d[0], setWithInterval = _d[1];
|
|
18
|
+
var _e = tslib_1.__read((0, react_1.useState)("95"), 2), interval = _e[0], setInterval = _e[1];
|
|
19
|
+
var _f = tslib_1.__read((0, react_1.useState)(true), 2), autoSeason = _f[0], setAutoSeason = _f[1];
|
|
20
|
+
var _g = tslib_1.__read((0, react_1.useState)(""), 2), season = _g[0], setSeason = _g[1];
|
|
21
|
+
var _h = tslib_1.__read((0, react_1.useState)(undefined), 2), error = _h[0], setError = _h[1];
|
|
22
|
+
(0, react_1.useEffect)(function () {
|
|
23
|
+
if (open) {
|
|
24
|
+
setEnd(initialForecastEnd !== null && initialForecastEnd !== void 0 ? initialForecastEnd : "");
|
|
25
|
+
setError(undefined);
|
|
26
|
+
}
|
|
27
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
28
|
+
}, [open]);
|
|
29
|
+
var submit = (0, react_1.useCallback)(function (event) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
30
|
+
var percent, length, refusal;
|
|
31
|
+
return tslib_1.__generator(this, function (_a) {
|
|
32
|
+
switch (_a.label) {
|
|
33
|
+
case 0:
|
|
34
|
+
event.preventDefault();
|
|
35
|
+
percent = Number(interval);
|
|
36
|
+
if (withInterval && !(percent > 0 && percent < 100)) {
|
|
37
|
+
setError("Confidence Interval must be between 0% and 100%.");
|
|
38
|
+
return [2 /*return*/];
|
|
39
|
+
}
|
|
40
|
+
length = Number(season);
|
|
41
|
+
if (!autoSeason && !(Number.isInteger(length) && length >= 0)) {
|
|
42
|
+
setError("Seasonality must be a whole number.");
|
|
43
|
+
return [2 /*return*/];
|
|
44
|
+
}
|
|
45
|
+
return [4 /*yield*/, onCreate(tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({ chartType: chartType }, (end.trim() !== "" ? { forecastEnd: end.trim() } : {})), { confidenceInterval: withInterval ? percent / 100 : 0 }), (autoSeason ? {} : { seasonality: length })))];
|
|
46
|
+
case 1:
|
|
47
|
+
refusal = _a.sent();
|
|
48
|
+
if (refusal) {
|
|
49
|
+
setError(refusal);
|
|
50
|
+
return [2 /*return*/];
|
|
51
|
+
}
|
|
52
|
+
onOpenChange(false);
|
|
53
|
+
return [2 /*return*/];
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}); }, [interval, withInterval, season, autoSeason, chartType, end, onCreate, onOpenChange]);
|
|
57
|
+
return (react_1.default.createElement(ui_1.Dialog, { open: open, onOpenChange: onOpenChange },
|
|
58
|
+
react_1.default.createElement(ui_1.DialogContent, { className: "w-[380px] max-w-[92vw] pointer-events-auto" },
|
|
59
|
+
react_1.default.createElement(ui_1.DialogTitle, null, "Create Forecast Worksheet"),
|
|
60
|
+
react_1.default.createElement(ui_1.DialogDescription, null, "Forecast the selected timeline and values on a new sheet with a chart."),
|
|
61
|
+
react_1.default.createElement(ui_1.DialogCloseButton, { onClick: function () { return onOpenChange(false); } },
|
|
62
|
+
react_1.default.createElement(icons_1.Cross1Icon, null)),
|
|
63
|
+
react_1.default.createElement(ui_1.DialogBody, { className: "flex flex-col gap-3 font-system text-sm" },
|
|
64
|
+
react_1.default.createElement("form", { className: "flex flex-col gap-3", onSubmit: submit },
|
|
65
|
+
react_1.default.createElement("div", { className: "flex items-center gap-3 text-xs" }, ["line", "column"].map(function (t) { return (react_1.default.createElement("label", { key: t, className: "flex items-center gap-1" },
|
|
66
|
+
react_1.default.createElement("input", { type: "radio", checked: chartType === t, onChange: function () { return setChartType(t); } }),
|
|
67
|
+
t === "line" ? "Line chart" : "Column chart")); })),
|
|
68
|
+
react_1.default.createElement("label", { className: "flex flex-col gap-1 text-xs font-medium" },
|
|
69
|
+
"Forecast End:",
|
|
70
|
+
react_1.default.createElement(ui_1.Input, { autoFocus: true, "aria-label": "Forecast End", value: end, onChange: function (e) { return setEnd(e.target.value); } })),
|
|
71
|
+
react_1.default.createElement("div", { className: "flex items-center gap-2 text-xs" },
|
|
72
|
+
react_1.default.createElement("label", { className: "flex items-center gap-2" },
|
|
73
|
+
react_1.default.createElement("input", { type: "checkbox", checked: withInterval, onChange: function (e) { return setWithInterval(e.target.checked); } }),
|
|
74
|
+
"Confidence Interval"),
|
|
75
|
+
react_1.default.createElement(ui_1.Input, { className: "w-16", "aria-label": "Confidence Interval (%)", value: interval, disabled: !withInterval, onChange: function (e) { return setInterval(e.target.value); } }),
|
|
76
|
+
"%"),
|
|
77
|
+
react_1.default.createElement("div", { className: "flex flex-col gap-1 text-xs" },
|
|
78
|
+
"Seasonality",
|
|
79
|
+
react_1.default.createElement("label", { className: "flex items-center gap-2" },
|
|
80
|
+
react_1.default.createElement("input", { type: "radio", checked: autoSeason, onChange: function () { return setAutoSeason(true); } }),
|
|
81
|
+
"Detect Automatically"),
|
|
82
|
+
react_1.default.createElement("label", { className: "flex items-center gap-2" },
|
|
83
|
+
react_1.default.createElement("input", { type: "radio", checked: !autoSeason, onChange: function () { return setAutoSeason(false); } }),
|
|
84
|
+
"Set Manually",
|
|
85
|
+
react_1.default.createElement(ui_1.Input, { className: "w-16", "aria-label": "Season length", value: season, disabled: autoSeason, onChange: function (e) { return setSeason(e.target.value); } }))),
|
|
86
|
+
error ? (react_1.default.createElement("div", { role: "alert", className: "text-xs text-rnc-destructive" }, error)) : null,
|
|
87
|
+
react_1.default.createElement(ui_1.Separator, null),
|
|
88
|
+
react_1.default.createElement("div", { className: "flex justify-end gap-2" },
|
|
89
|
+
react_1.default.createElement(ui_1.Button, { type: "button", variant: "outline", size: "sm", onClick: function () { return onOpenChange(false); } }, "Cancel"),
|
|
90
|
+
react_1.default.createElement(ui_1.Button, { type: "submit", size: "sm" }, "Create")))))));
|
|
91
|
+
});
|
|
92
|
+
exports.ForecastSheetDialog.displayName = "ForecastSheetDialog";
|