@rowsncolumns/spreadsheet 10.2.74 → 10.2.76
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/excel-validation-kinds.d.ts +71 -0
- package/dist/cjs/api/excel-validation-kinds.d.ts.map +1 -0
- package/dist/cjs/api/excel-validation-kinds.js +304 -0
- package/dist/cjs/api/fill-series.d.ts +38 -0
- package/dist/cjs/api/fill-series.d.ts.map +1 -0
- package/dist/cjs/api/fill-series.js +89 -0
- package/dist/cjs/api/go-to-special.d.ts +32 -0
- package/dist/cjs/api/go-to-special.d.ts.map +1 -0
- package/dist/cjs/api/go-to-special.js +111 -0
- package/dist/cjs/api/spreadsheet-api.d.ts +6 -2
- package/dist/cjs/api/spreadsheet-api.d.ts.map +1 -1
- package/dist/cjs/api/spreadsheet-api.js +9 -3
- package/dist/cjs/api/validation-tooltip.d.ts +17 -0
- package/dist/cjs/api/validation-tooltip.d.ts.map +1 -0
- package/dist/cjs/api/validation-tooltip.js +42 -0
- package/dist/cjs/atoms/advanced-filter-dialog.atom.d.ts +28 -0
- package/dist/cjs/atoms/advanced-filter-dialog.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/advanced-filter-dialog.atom.js +32 -0
- package/dist/cjs/atoms/fill-options.atom.d.ts +36 -0
- package/dist/cjs/atoms/fill-options.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/fill-options.atom.js +11 -0
- package/dist/cjs/atoms/fill-series-dialog.atom.d.ts +26 -0
- package/dist/cjs/atoms/fill-series-dialog.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/fill-series-dialog.atom.js +14 -0
- package/dist/cjs/atoms/go-to-dialog.atom.d.ts +11 -1
- package/dist/cjs/atoms/go-to-dialog.atom.d.ts.map +1 -1
- package/dist/cjs/atoms/goal-seek-dialog.atom.d.ts +29 -0
- package/dist/cjs/atoms/goal-seek-dialog.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/goal-seek-dialog.atom.js +30 -0
- package/dist/cjs/atoms/index.d.ts +3 -0
- package/dist/cjs/atoms/index.d.ts.map +1 -1
- package/dist/cjs/atoms/index.js +3 -0
- package/dist/cjs/atoms/subtotal-dialog.atom.d.ts +39 -0
- package/dist/cjs/atoms/subtotal-dialog.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/subtotal-dialog.atom.js +30 -0
- package/dist/cjs/atoms/text-to-columns-dialog.atom.d.ts +34 -0
- package/dist/cjs/atoms/text-to-columns-dialog.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/text-to-columns-dialog.atom.js +36 -0
- package/dist/cjs/atoms/watch-window.atom.d.ts +37 -0
- package/dist/cjs/atoms/watch-window.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/watch-window.atom.js +61 -0
- package/dist/cjs/components/advanced-filter-dialog/index.d.ts +28 -0
- package/dist/cjs/components/advanced-filter-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/advanced-filter-dialog/index.js +134 -0
- package/dist/cjs/components/calculation-options-dialog/index.d.ts +33 -0
- package/dist/cjs/components/calculation-options-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/calculation-options-dialog/index.js +69 -0
- package/dist/cjs/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/cjs/components/canvas-grid/index.js +328 -71
- package/dist/cjs/components/canvas-grid/typings.d.ts +31 -5
- package/dist/cjs/components/canvas-grid/typings.d.ts.map +1 -1
- package/dist/cjs/components/cell/alignment.d.ts +30 -0
- package/dist/cjs/components/cell/alignment.d.ts.map +1 -1
- package/dist/cjs/components/cell/alignment.js +56 -1
- package/dist/cjs/components/cell/index.d.ts.map +1 -1
- package/dist/cjs/components/cell/index.js +15 -7
- package/dist/cjs/components/cell-diff/index.d.ts +3 -2
- package/dist/cjs/components/cell-diff/index.d.ts.map +1 -1
- package/dist/cjs/components/cell-editor/helpers.d.ts +9 -0
- package/dist/cjs/components/cell-editor/helpers.d.ts.map +1 -1
- package/dist/cjs/components/cell-editor/helpers.js +8 -1
- package/dist/cjs/components/cell-editor/helpers.spec.js +14 -0
- package/dist/cjs/components/cell-editor/index.d.ts.map +1 -1
- package/dist/cjs/components/cell-editor/index.js +7 -3
- package/dist/cjs/components/context-menu/index.d.ts +6 -1
- package/dist/cjs/components/context-menu/index.d.ts.map +1 -1
- package/dist/cjs/components/context-menu/index.js +146 -3
- package/dist/cjs/components/embeds/embed-component.d.ts.map +1 -1
- package/dist/cjs/components/embeds/embed-component.js +16 -1
- package/dist/cjs/components/fill-series-dialog/index.d.ts +29 -0
- package/dist/cjs/components/fill-series-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/fill-series-dialog/index.js +156 -0
- package/dist/cjs/components/go-to-dialog/index.d.ts +11 -1
- package/dist/cjs/components/go-to-dialog/index.d.ts.map +1 -1
- package/dist/cjs/components/go-to-dialog/index.js +67 -24
- package/dist/cjs/components/goal-seek-dialog/index.d.ts +32 -0
- package/dist/cjs/components/goal-seek-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/goal-seek-dialog/index.js +149 -0
- package/dist/cjs/components/selection/fill-options-menu.d.ts +32 -0
- package/dist/cjs/components/selection/fill-options-menu.d.ts.map +1 -0
- package/dist/cjs/components/selection/fill-options-menu.js +65 -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 +4 -2
- package/dist/cjs/components/selection/types.d.ts +11 -1
- package/dist/cjs/components/selection/types.d.ts.map +1 -1
- package/dist/cjs/components/subtotal-dialog/index.d.ts +30 -0
- package/dist/cjs/components/subtotal-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/subtotal-dialog/index.js +126 -0
- package/dist/cjs/components/text-to-columns-dialog/index.d.ts +37 -0
- package/dist/cjs/components/text-to-columns-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/text-to-columns-dialog/index.js +166 -0
- package/dist/cjs/components/toolbar/background-color-selector.d.ts +13 -1
- package/dist/cjs/components/toolbar/background-color-selector.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/background-color-selector.js +57 -11
- package/dist/cjs/components/toolbar/cell-style-selector.d.ts +15 -2
- package/dist/cjs/components/toolbar/cell-style-selector.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/cell-style-selector.js +56 -3
- package/dist/cjs/components/toolbar/fill-selectors.d.ts +49 -0
- package/dist/cjs/components/toolbar/fill-selectors.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/fill-selectors.js +196 -0
- package/dist/cjs/components/toolbar/index.d.ts +1 -0
- package/dist/cjs/components/toolbar/index.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/index.js +1 -0
- package/dist/cjs/components/toolbar/text-format-selector.d.ts +9 -0
- package/dist/cjs/components/toolbar/text-format-selector.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/text-format-selector.js +15 -3
- package/dist/cjs/components/toolbar/text-horizontal-align-selector.d.ts +8 -0
- package/dist/cjs/components/toolbar/text-horizontal-align-selector.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/text-horizontal-align-selector.js +23 -4
- package/dist/cjs/components/watch-window/index.d.ts +25 -0
- package/dist/cjs/components/watch-window/index.d.ts.map +1 -0
- package/dist/cjs/components/watch-window/index.js +63 -0
- package/dist/cjs/hooks/use-cell-renderer.d.ts.map +1 -1
- package/dist/cjs/hooks/use-cell-renderer.js +17 -6
- package/dist/cjs/hooks/use-editable.d.ts +11 -2
- package/dist/cjs/hooks/use-editable.d.ts.map +1 -1
- package/dist/cjs/hooks/use-editable.js +8 -0
- package/dist/cjs/hooks/use-editor-submit.d.ts +32 -3
- package/dist/cjs/hooks/use-editor-submit.d.ts.map +1 -1
- package/dist/cjs/hooks/use-editor-submit.js +111 -2
- package/dist/cjs/hooks/use-get-tooltip.d.ts.map +1 -1
- package/dist/cjs/hooks/use-get-tooltip.js +7 -2
- package/dist/cjs/hooks/use-keyboard-handler.d.ts.map +1 -1
- package/dist/cjs/hooks/use-keyboard-handler.js +27 -14
- package/dist/cjs/hooks/use-selection-renderer.d.ts +13 -2
- package/dist/cjs/hooks/use-selection-renderer.d.ts.map +1 -1
- package/dist/cjs/hooks/use-selection-renderer.js +21 -4
- package/dist/cjs/hooks/use-selection.d.ts +54 -4
- package/dist/cjs/hooks/use-selection.d.ts.map +1 -1
- package/dist/cjs/hooks/use-selection.js +232 -37
- package/dist/cjs/index.d.ts +12 -0
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +11 -0
- package/dist/cjs/release-date.js +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/cjs/types.d.ts +156 -5
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/types.js +19 -1
- package/dist/esm/api/excel-validation-kinds.d.ts +71 -0
- package/dist/esm/api/excel-validation-kinds.d.ts.map +1 -0
- package/dist/esm/api/excel-validation-kinds.js +287 -0
- package/dist/esm/api/fill-series.d.ts +38 -0
- package/dist/esm/api/fill-series.d.ts.map +1 -0
- package/dist/esm/api/fill-series.js +78 -0
- package/dist/esm/api/go-to-special.d.ts +32 -0
- package/dist/esm/api/go-to-special.d.ts.map +1 -0
- package/dist/esm/api/go-to-special.js +96 -0
- package/dist/esm/api/spreadsheet-api.d.ts +6 -2
- package/dist/esm/api/spreadsheet-api.d.ts.map +1 -1
- package/dist/esm/api/spreadsheet-api.js +8 -3
- package/dist/esm/api/validation-tooltip.d.ts +17 -0
- package/dist/esm/api/validation-tooltip.d.ts.map +1 -0
- package/dist/esm/api/validation-tooltip.js +34 -0
- package/dist/esm/atoms/advanced-filter-dialog.atom.d.ts +28 -0
- package/dist/esm/atoms/advanced-filter-dialog.atom.d.ts.map +1 -0
- package/dist/esm/atoms/advanced-filter-dialog.atom.js +21 -0
- package/dist/esm/atoms/fill-options.atom.d.ts +36 -0
- package/dist/esm/atoms/fill-options.atom.d.ts.map +1 -0
- package/dist/esm/atoms/fill-options.atom.js +5 -0
- package/dist/esm/atoms/fill-series-dialog.atom.d.ts +26 -0
- package/dist/esm/atoms/fill-series-dialog.atom.d.ts.map +1 -0
- package/dist/esm/atoms/fill-series-dialog.atom.js +9 -0
- package/dist/esm/atoms/go-to-dialog.atom.d.ts +11 -1
- package/dist/esm/atoms/go-to-dialog.atom.d.ts.map +1 -1
- package/dist/esm/atoms/goal-seek-dialog.atom.d.ts +29 -0
- package/dist/esm/atoms/goal-seek-dialog.atom.d.ts.map +1 -0
- package/dist/esm/atoms/goal-seek-dialog.atom.js +21 -0
- package/dist/esm/atoms/index.d.ts +3 -0
- package/dist/esm/atoms/index.d.ts.map +1 -1
- package/dist/esm/atoms/index.js +3 -0
- package/dist/esm/atoms/subtotal-dialog.atom.d.ts +39 -0
- package/dist/esm/atoms/subtotal-dialog.atom.d.ts.map +1 -0
- package/dist/esm/atoms/subtotal-dialog.atom.js +21 -0
- package/dist/esm/atoms/text-to-columns-dialog.atom.d.ts +34 -0
- package/dist/esm/atoms/text-to-columns-dialog.atom.d.ts.map +1 -0
- package/dist/esm/atoms/text-to-columns-dialog.atom.js +25 -0
- package/dist/esm/atoms/watch-window.atom.d.ts +37 -0
- package/dist/esm/atoms/watch-window.atom.d.ts.map +1 -0
- package/dist/esm/atoms/watch-window.atom.js +37 -0
- package/dist/esm/components/advanced-filter-dialog/index.d.ts +28 -0
- package/dist/esm/components/advanced-filter-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/advanced-filter-dialog/index.js +125 -0
- package/dist/esm/components/calculation-options-dialog/index.d.ts +33 -0
- package/dist/esm/components/calculation-options-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/calculation-options-dialog/index.js +61 -0
- package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/esm/components/canvas-grid/index.js +266 -26
- package/dist/esm/components/canvas-grid/typings.d.ts +31 -5
- package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
- package/dist/esm/components/cell/alignment.d.ts +30 -0
- package/dist/esm/components/cell/alignment.d.ts.map +1 -1
- package/dist/esm/components/cell/alignment.js +51 -0
- package/dist/esm/components/cell/index.d.ts.map +1 -1
- package/dist/esm/components/cell/index.js +16 -8
- package/dist/esm/components/cell-diff/index.d.ts +3 -2
- package/dist/esm/components/cell-diff/index.d.ts.map +1 -1
- package/dist/esm/components/cell-editor/helpers.d.ts +9 -0
- package/dist/esm/components/cell-editor/helpers.d.ts.map +1 -1
- package/dist/esm/components/cell-editor/helpers.js +6 -0
- package/dist/esm/components/cell-editor/helpers.spec.js +15 -1
- package/dist/esm/components/cell-editor/index.d.ts.map +1 -1
- package/dist/esm/components/cell-editor/index.js +8 -4
- package/dist/esm/components/context-menu/index.d.ts +6 -1
- package/dist/esm/components/context-menu/index.d.ts.map +1 -1
- package/dist/esm/components/context-menu/index.js +139 -4
- package/dist/esm/components/embeds/embed-component.d.ts.map +1 -1
- package/dist/esm/components/embeds/embed-component.js +17 -1
- package/dist/esm/components/fill-series-dialog/index.d.ts +29 -0
- package/dist/esm/components/fill-series-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/fill-series-dialog/index.js +151 -0
- package/dist/esm/components/go-to-dialog/index.d.ts +11 -1
- package/dist/esm/components/go-to-dialog/index.d.ts.map +1 -1
- package/dist/esm/components/go-to-dialog/index.js +63 -23
- package/dist/esm/components/goal-seek-dialog/index.d.ts +32 -0
- package/dist/esm/components/goal-seek-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/goal-seek-dialog/index.js +125 -0
- package/dist/esm/components/selection/fill-options-menu.d.ts +32 -0
- package/dist/esm/components/selection/fill-options-menu.d.ts.map +1 -0
- package/dist/esm/components/selection/fill-options-menu.js +63 -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 +4 -2
- package/dist/esm/components/selection/types.d.ts +11 -1
- package/dist/esm/components/selection/types.d.ts.map +1 -1
- package/dist/esm/components/subtotal-dialog/index.d.ts +30 -0
- package/dist/esm/components/subtotal-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/subtotal-dialog/index.js +115 -0
- package/dist/esm/components/text-to-columns-dialog/index.d.ts +37 -0
- package/dist/esm/components/text-to-columns-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/text-to-columns-dialog/index.js +147 -0
- package/dist/esm/components/toolbar/background-color-selector.d.ts +13 -1
- package/dist/esm/components/toolbar/background-color-selector.d.ts.map +1 -1
- package/dist/esm/components/toolbar/background-color-selector.js +61 -11
- package/dist/esm/components/toolbar/cell-style-selector.d.ts +15 -2
- package/dist/esm/components/toolbar/cell-style-selector.d.ts.map +1 -1
- package/dist/esm/components/toolbar/cell-style-selector.js +46 -2
- package/dist/esm/components/toolbar/fill-selectors.d.ts +49 -0
- package/dist/esm/components/toolbar/fill-selectors.d.ts.map +1 -0
- package/dist/esm/components/toolbar/fill-selectors.js +162 -0
- package/dist/esm/components/toolbar/index.d.ts +1 -0
- package/dist/esm/components/toolbar/index.d.ts.map +1 -1
- package/dist/esm/components/toolbar/index.js +1 -0
- package/dist/esm/components/toolbar/text-format-selector.d.ts +9 -0
- package/dist/esm/components/toolbar/text-format-selector.d.ts.map +1 -1
- package/dist/esm/components/toolbar/text-format-selector.js +14 -2
- package/dist/esm/components/toolbar/text-horizontal-align-selector.d.ts +8 -0
- package/dist/esm/components/toolbar/text-horizontal-align-selector.d.ts.map +1 -1
- package/dist/esm/components/toolbar/text-horizontal-align-selector.js +21 -5
- package/dist/esm/components/watch-window/index.d.ts +25 -0
- package/dist/esm/components/watch-window/index.d.ts.map +1 -0
- package/dist/esm/components/watch-window/index.js +54 -0
- package/dist/esm/hooks/use-cell-renderer.d.ts.map +1 -1
- package/dist/esm/hooks/use-cell-renderer.js +17 -6
- package/dist/esm/hooks/use-editable.d.ts +11 -2
- package/dist/esm/hooks/use-editable.d.ts.map +1 -1
- package/dist/esm/hooks/use-editable.js +8 -0
- package/dist/esm/hooks/use-editor-submit.d.ts +32 -3
- package/dist/esm/hooks/use-editor-submit.d.ts.map +1 -1
- package/dist/esm/hooks/use-editor-submit.js +82 -3
- package/dist/esm/hooks/use-get-tooltip.d.ts.map +1 -1
- package/dist/esm/hooks/use-get-tooltip.js +7 -2
- package/dist/esm/hooks/use-keyboard-handler.d.ts.map +1 -1
- package/dist/esm/hooks/use-keyboard-handler.js +27 -14
- package/dist/esm/hooks/use-selection-renderer.d.ts +13 -2
- package/dist/esm/hooks/use-selection-renderer.d.ts.map +1 -1
- package/dist/esm/hooks/use-selection-renderer.js +22 -5
- package/dist/esm/hooks/use-selection.d.ts +54 -4
- package/dist/esm/hooks/use-selection.d.ts.map +1 -1
- package/dist/esm/hooks/use-selection.js +220 -36
- package/dist/esm/index.d.ts +12 -0
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +11 -0
- package/dist/esm/release-date.js +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/types.d.ts +156 -5
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/esm/types.js +18 -0
- package/dist/spreadsheet.min.css +1 -1
- package/package.json +7 -7
|
@@ -6,8 +6,10 @@ var ui_1 = require("@rowsncolumns/ui");
|
|
|
6
6
|
var utils_1 = require("@rowsncolumns/utils");
|
|
7
7
|
var react_1 = tslib_1.__importStar(require("react"));
|
|
8
8
|
var go_to_1 = require("../../api/go-to");
|
|
9
|
+
var go_to_special_1 = require("../../api/go-to-special");
|
|
9
10
|
var go_to_dialog_atom_1 = require("../../atoms/go-to-dialog.atom");
|
|
10
11
|
var INVALID_REFERENCE = "Reference is not valid.";
|
|
12
|
+
var NO_CELLS_FOUND = "No cells were found.";
|
|
11
13
|
/**
|
|
12
14
|
* Excel's Go To dialog (`Ctrl+G` / `F5`): type a cell or range reference,
|
|
13
15
|
* optionally sheet-qualified, or pick a defined name, and the selection
|
|
@@ -15,9 +17,22 @@ var INVALID_REFERENCE = "Reference is not valid.";
|
|
|
15
17
|
* UI-only.
|
|
16
18
|
*/
|
|
17
19
|
exports.GoToDialog = (0, react_1.memo)(function (_a) {
|
|
18
|
-
var open = _a.open, onOpenChange = _a.onOpenChange, namedRanges = _a.namedRanges, currentAddress = _a.currentAddress, resolve = _a.resolve, onNavigate = _a.onNavigate;
|
|
20
|
+
var open = _a.open, onOpenChange = _a.onOpenChange, namedRanges = _a.namedRanges, currentAddress = _a.currentAddress, resolve = _a.resolve, onNavigate = _a.onNavigate, special = _a.special;
|
|
19
21
|
var _b = tslib_1.__read((0, react_1.useState)(""), 2), reference = _b[0], setReference = _b[1];
|
|
20
22
|
var _c = tslib_1.__read((0, react_1.useState)(undefined), 2), error = _c[0], setError = _c[1];
|
|
23
|
+
var _d = tslib_1.__read((0, react_1.useState)(false), 2), showSpecial = _d[0], setShowSpecial = _d[1];
|
|
24
|
+
var _e = tslib_1.__read((0, react_1.useState)("blanks"), 2), specialKind = _e[0], setSpecialKind = _e[1];
|
|
25
|
+
var selectSpecial = (0, react_1.useCallback)(function () {
|
|
26
|
+
if (!special)
|
|
27
|
+
return;
|
|
28
|
+
var ranges = special.resolve(specialKind);
|
|
29
|
+
if (!ranges.length) {
|
|
30
|
+
setError(NO_CELLS_FOUND);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
special.onSelectRanges(ranges);
|
|
34
|
+
onOpenChange(false);
|
|
35
|
+
}, [special, specialKind, onOpenChange]);
|
|
21
36
|
var navigate = (0, react_1.useCallback)(function (text) {
|
|
22
37
|
var range = resolve(text);
|
|
23
38
|
if (!range) {
|
|
@@ -30,30 +45,58 @@ exports.GoToDialog = (0, react_1.memo)(function (_a) {
|
|
|
30
45
|
var names = (namedRanges !== null && namedRanges !== void 0 ? namedRanges : []).filter(function (range) { return range.range && !range.hidden; });
|
|
31
46
|
return (react_1.default.createElement(ui_1.Dialog, { open: open, onOpenChange: onOpenChange, modal: true },
|
|
32
47
|
react_1.default.createElement(ui_1.DialogContent, { className: "w-[360px] max-w-[92vw] pointer-events-auto" },
|
|
33
|
-
react_1.default.createElement(ui_1.DialogTitle, null, "Go To"),
|
|
48
|
+
react_1.default.createElement(ui_1.DialogTitle, null, showSpecial ? "Go To Special" : "Go To"),
|
|
34
49
|
react_1.default.createElement(ui_1.DialogCloseButton, null),
|
|
35
|
-
react_1.default.createElement(ui_1.DialogBody, { className: "flex flex-col gap-3" },
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
react_1.default.createElement("
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
react_1.default.createElement(ui_1.
|
|
54
|
-
|
|
50
|
+
react_1.default.createElement(ui_1.DialogBody, { className: "flex flex-col gap-3" }, showSpecial && special ? (react_1.default.createElement("form", { className: "flex flex-col gap-3", onSubmit: function (e) {
|
|
51
|
+
e.preventDefault();
|
|
52
|
+
selectSpecial();
|
|
53
|
+
} },
|
|
54
|
+
react_1.default.createElement("fieldset", { className: "flex flex-col gap-1 border-0 p-0 m-0" },
|
|
55
|
+
react_1.default.createElement("legend", { className: "text-xs font-medium pb-1" }, "Select"),
|
|
56
|
+
go_to_special_1.GO_TO_SPECIAL_OPTIONS.map(function (_a) {
|
|
57
|
+
var kind = _a.kind, label = _a.label;
|
|
58
|
+
return (react_1.default.createElement("label", { key: kind, className: "flex items-center gap-2 text-xs cursor-pointer" },
|
|
59
|
+
react_1.default.createElement("input", { type: "radio", name: "goToSpecial", value: kind, checked: specialKind === kind, onChange: function () {
|
|
60
|
+
setSpecialKind(kind);
|
|
61
|
+
setError(undefined);
|
|
62
|
+
} }),
|
|
63
|
+
label));
|
|
64
|
+
})),
|
|
65
|
+
error ? (react_1.default.createElement("div", { role: "alert", className: "text-xs text-rnc-destructive" }, error)) : null,
|
|
66
|
+
react_1.default.createElement(ui_1.Separator, null),
|
|
67
|
+
react_1.default.createElement("div", { className: "flex justify-between gap-2" },
|
|
68
|
+
react_1.default.createElement(ui_1.Button, { type: "button", variant: "ghost", size: "sm", onClick: function () {
|
|
69
|
+
setShowSpecial(false);
|
|
70
|
+
setError(undefined);
|
|
71
|
+
} }, "Back"),
|
|
72
|
+
react_1.default.createElement("div", { className: "flex gap-2" },
|
|
73
|
+
react_1.default.createElement(ui_1.Button, { type: "button", variant: "outline", size: "sm", onClick: function () { return onOpenChange(false); } }, "Cancel"),
|
|
74
|
+
react_1.default.createElement(ui_1.Button, { type: "submit", size: "sm" }, "OK"))))) : (react_1.default.createElement("form", { className: "flex flex-col gap-3", onSubmit: function (e) {
|
|
75
|
+
e.preventDefault();
|
|
76
|
+
navigate(reference);
|
|
77
|
+
} },
|
|
78
|
+
react_1.default.createElement("div", { className: "flex flex-col gap-1" },
|
|
79
|
+
react_1.default.createElement("span", { className: "text-xs font-medium" }, "Go to:"),
|
|
80
|
+
react_1.default.createElement("div", { role: "listbox", "aria-label": "Defined names", className: "h-[140px] overflow-auto rounded border border-rnc-border text-xs" }, names.length === 0 ? (react_1.default.createElement("div", { className: "px-2 py-1.5 text-rnc-foreground/60" }, "No defined names")) : (names.map(function (range) { return (react_1.default.createElement("div", { key: String(range.namedRangeId), role: "option", "aria-selected": reference === range.name, className: (0, ui_1.cn)("px-2 py-1 cursor-default select-none hover:bg-rnc-accent", reference === range.name && "bg-rnc-accent"), onClick: function () {
|
|
81
|
+
setReference(range.name);
|
|
82
|
+
setError(undefined);
|
|
83
|
+
}, onDoubleClick: function () { return navigate(range.name); } }, range.name)); })))),
|
|
84
|
+
react_1.default.createElement("label", { className: "flex flex-col gap-1 text-xs font-medium" },
|
|
85
|
+
"Reference:",
|
|
86
|
+
react_1.default.createElement(ui_1.Input, { autoFocus: true, value: reference, placeholder: currentAddress, "aria-invalid": error ? true : undefined, onChange: function (e) {
|
|
87
|
+
setReference(e.target.value);
|
|
88
|
+
setError(undefined);
|
|
89
|
+
} })),
|
|
90
|
+
error ? (react_1.default.createElement("div", { role: "alert", className: "text-xs text-rnc-destructive" }, error)) : null,
|
|
91
|
+
react_1.default.createElement(ui_1.Separator, null),
|
|
92
|
+
react_1.default.createElement("div", { className: "flex justify-between gap-2" },
|
|
93
|
+
special ? (react_1.default.createElement(ui_1.Button, { type: "button", variant: "ghost", size: "sm", onClick: function () {
|
|
94
|
+
setShowSpecial(true);
|
|
95
|
+
setError(undefined);
|
|
96
|
+
} }, "Special\u2026")) : (react_1.default.createElement("span", null)),
|
|
97
|
+
react_1.default.createElement("div", { className: "flex gap-2" },
|
|
55
98
|
react_1.default.createElement(ui_1.Button, { type: "button", variant: "outline", size: "sm", onClick: function () { return onOpenChange(false); } }, "Cancel"),
|
|
56
|
-
react_1.default.createElement(ui_1.Button, { type: "submit", size: "sm", disabled: !reference.trim() }, "OK")))))));
|
|
99
|
+
react_1.default.createElement(ui_1.Button, { type: "submit", size: "sm", disabled: !reference.trim() }, "OK")))))))));
|
|
57
100
|
});
|
|
58
101
|
exports.GoToDialog.displayName = "GoToDialog";
|
|
59
102
|
var currentAddressOf = function (request) {
|
|
@@ -87,7 +130,7 @@ var GoToDialogHost = function () {
|
|
|
87
130
|
return (react_1.default.createElement(exports.GoToDialog, { open: true, onOpenChange: function (open) {
|
|
88
131
|
if (!open)
|
|
89
132
|
close();
|
|
90
|
-
}, namedRanges: request.namedRanges, currentAddress: currentAddressOf(request), resolve: resolve, onNavigate: request.onNavigate }));
|
|
133
|
+
}, namedRanges: request.namedRanges, currentAddress: currentAddressOf(request), resolve: resolve, onNavigate: request.onNavigate, special: request.special }));
|
|
91
134
|
};
|
|
92
135
|
exports.GoToDialogHost = GoToDialogHost;
|
|
93
136
|
exports.GoToDialogHost.displayName = "GoToDialogHost";
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { GoalSeekResult } from "../../types";
|
|
3
|
+
export type GoalSeekDialogProps = {
|
|
4
|
+
/** Controls visibility. */
|
|
5
|
+
open: boolean;
|
|
6
|
+
onOpenChange(open: boolean): void;
|
|
7
|
+
/** Default "Set cell" (A1 reference of the active cell). */
|
|
8
|
+
initialSetCell: string;
|
|
9
|
+
/**
|
|
10
|
+
* Runs the search with the three fields (A1 references + the numeric
|
|
11
|
+
* target). Resolves to the result, or `undefined` when the engine reports
|
|
12
|
+
* none (the rnc engine iterates natively and streams the cells back).
|
|
13
|
+
*/
|
|
14
|
+
onApply(setCell: string, targetValue: number, changingCell: string): Promise<GoalSeekResult | undefined>;
|
|
15
|
+
};
|
|
16
|
+
/** Excel's status sentence for a finished search. */
|
|
17
|
+
export declare const goalSeekStatusText: (setCell: string, result: GoalSeekResult | undefined) => string;
|
|
18
|
+
/**
|
|
19
|
+
* Excel's Goal Seek dialog: Set cell / To value / By changing cell, then the
|
|
20
|
+
* Goal Seek Status sentence with target and current value.
|
|
21
|
+
*/
|
|
22
|
+
export declare const GoalSeekDialog: React.MemoExoticComponent<({ open, onOpenChange, initialSetCell, onApply }: GoalSeekDialogProps) => React.JSX.Element>;
|
|
23
|
+
/**
|
|
24
|
+
* Host-mounted, atom-driven wrapper around {@link GoalSeekDialog}. Mount
|
|
25
|
+
* once in the host; the context menu opens it via `useOpenGoalSeekDialog`
|
|
26
|
+
* and only offers the item while a host is mounted.
|
|
27
|
+
*/
|
|
28
|
+
export declare const GoalSeekDialogHost: {
|
|
29
|
+
(): React.JSX.Element;
|
|
30
|
+
displayName: string;
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/goal-seek-dialog/index.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAiD,MAAM,OAAO,CAAC;AAMtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,MAAM,mBAAmB,GAAG;IAChC,2BAA2B;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC,4DAA4D;IAC5D,cAAc,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,OAAO,CACL,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAAC;CACxC,CAAC;AAKF,qDAAqD;AACrD,eAAO,MAAM,kBAAkB,GAC7B,SAAS,MAAM,EACf,QAAQ,cAAc,GAAG,SAAS,KACjC,MAKF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,8EACyB,mBAAmB,uBAyJtE,CAAC;AAIF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;;CAkB9B,CAAC"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GoalSeekDialogHost = exports.GoalSeekDialog = exports.goalSeekStatusText = 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
|
+
var goal_seek_dialog_atom_1 = require("../../atoms/goal-seek-dialog.atom");
|
|
10
|
+
var isCellReference = function (text) {
|
|
11
|
+
return /^\$?[A-Za-z]{1,3}\$?\d+$/.test(text.trim()) && (0, utils_1.addressToCell)(text.trim()) != null;
|
|
12
|
+
};
|
|
13
|
+
/** Excel's status sentence for a finished search. */
|
|
14
|
+
var goalSeekStatusText = function (setCell, result) {
|
|
15
|
+
if (!result)
|
|
16
|
+
return "Goal Seeking with Cell ".concat(setCell, " finished.");
|
|
17
|
+
return result.status === "found"
|
|
18
|
+
? "Goal Seeking with Cell ".concat(setCell, " found a solution.")
|
|
19
|
+
: "Goal Seeking with Cell ".concat(setCell, " may not have found a solution.");
|
|
20
|
+
};
|
|
21
|
+
exports.goalSeekStatusText = goalSeekStatusText;
|
|
22
|
+
/**
|
|
23
|
+
* Excel's Goal Seek dialog: Set cell / To value / By changing cell, then the
|
|
24
|
+
* Goal Seek Status sentence with target and current value.
|
|
25
|
+
*/
|
|
26
|
+
exports.GoalSeekDialog = (0, react_1.memo)(function (_a) {
|
|
27
|
+
var open = _a.open, onOpenChange = _a.onOpenChange, initialSetCell = _a.initialSetCell, onApply = _a.onApply;
|
|
28
|
+
var _b = tslib_1.__read((0, react_1.useState)(initialSetCell), 2), setCell = _b[0], setSetCell = _b[1];
|
|
29
|
+
var _c = tslib_1.__read((0, react_1.useState)(""), 2), target = _c[0], setTarget = _c[1];
|
|
30
|
+
var _d = tslib_1.__read((0, react_1.useState)(""), 2), changingCell = _d[0], setChangingCell = _d[1];
|
|
31
|
+
var _e = tslib_1.__read((0, react_1.useState)(undefined), 2), error = _e[0], setError = _e[1];
|
|
32
|
+
var _f = tslib_1.__read((0, react_1.useState)(false), 2), busy = _f[0], setBusy = _f[1];
|
|
33
|
+
var _g = tslib_1.__read((0, react_1.useState)(undefined), 2), result = _g[0], setResult = _g[1];
|
|
34
|
+
(0, react_1.useEffect)(function () {
|
|
35
|
+
if (open) {
|
|
36
|
+
setSetCell(initialSetCell);
|
|
37
|
+
setTarget("");
|
|
38
|
+
setChangingCell("");
|
|
39
|
+
setError(undefined);
|
|
40
|
+
setBusy(false);
|
|
41
|
+
setResult(undefined);
|
|
42
|
+
}
|
|
43
|
+
// Only reset on open transitions.
|
|
44
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
45
|
+
}, [open]);
|
|
46
|
+
var submit = (0, react_1.useCallback)(function (event) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
47
|
+
var targetValue, outcome, err_1;
|
|
48
|
+
return tslib_1.__generator(this, function (_a) {
|
|
49
|
+
switch (_a.label) {
|
|
50
|
+
case 0:
|
|
51
|
+
event.preventDefault();
|
|
52
|
+
targetValue = Number(target.trim());
|
|
53
|
+
if (!isCellReference(setCell)) {
|
|
54
|
+
setError("Set cell must be a single cell reference, e.g. B4.");
|
|
55
|
+
return [2 /*return*/];
|
|
56
|
+
}
|
|
57
|
+
if (target.trim() === "" || !Number.isFinite(targetValue)) {
|
|
58
|
+
setError("To value must be a number.");
|
|
59
|
+
return [2 /*return*/];
|
|
60
|
+
}
|
|
61
|
+
if (!isCellReference(changingCell)) {
|
|
62
|
+
setError("By changing cell must be a single cell reference, e.g. A1.");
|
|
63
|
+
return [2 /*return*/];
|
|
64
|
+
}
|
|
65
|
+
setError(undefined);
|
|
66
|
+
setBusy(true);
|
|
67
|
+
_a.label = 1;
|
|
68
|
+
case 1:
|
|
69
|
+
_a.trys.push([1, 3, 4, 5]);
|
|
70
|
+
return [4 /*yield*/, onApply(setCell.trim().toUpperCase(), targetValue, changingCell.trim().toUpperCase())];
|
|
71
|
+
case 2:
|
|
72
|
+
outcome = _a.sent();
|
|
73
|
+
setResult({ setCell: setCell.trim().toUpperCase(), result: outcome });
|
|
74
|
+
return [3 /*break*/, 5];
|
|
75
|
+
case 3:
|
|
76
|
+
err_1 = _a.sent();
|
|
77
|
+
setError(err_1 instanceof Error ? err_1.message : "Goal Seek failed.");
|
|
78
|
+
return [3 /*break*/, 5];
|
|
79
|
+
case 4:
|
|
80
|
+
setBusy(false);
|
|
81
|
+
return [7 /*endfinally*/];
|
|
82
|
+
case 5: return [2 /*return*/];
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}); }, [setCell, target, changingCell, onApply]);
|
|
86
|
+
return (react_1.default.createElement(ui_1.Dialog, { open: open, onOpenChange: onOpenChange },
|
|
87
|
+
react_1.default.createElement(ui_1.DialogContent, { className: "w-[360px] max-w-[92vw] pointer-events-auto" },
|
|
88
|
+
react_1.default.createElement(ui_1.DialogTitle, null, result ? "Goal Seek Status" : "Goal Seek"),
|
|
89
|
+
react_1.default.createElement(ui_1.DialogDescription, null, "Find the input value that makes a formula reach a target."),
|
|
90
|
+
react_1.default.createElement(ui_1.DialogCloseButton, { onClick: function () { return onOpenChange(false); } },
|
|
91
|
+
react_1.default.createElement(icons_1.Cross1Icon, null)),
|
|
92
|
+
react_1.default.createElement(ui_1.DialogBody, { className: "flex flex-col gap-3 font-system text-sm" }, result ? (react_1.default.createElement("div", { className: "flex flex-col gap-2", role: "status" },
|
|
93
|
+
react_1.default.createElement("div", null, (0, exports.goalSeekStatusText)(result.setCell, result.result)),
|
|
94
|
+
result.result ? (react_1.default.createElement("dl", { className: "grid grid-cols-2 gap-1 text-xs" },
|
|
95
|
+
react_1.default.createElement("dt", { className: "text-rnc-foreground/70" }, "Target value:"),
|
|
96
|
+
react_1.default.createElement("dd", null, result.result.targetValue),
|
|
97
|
+
react_1.default.createElement("dt", { className: "text-rnc-foreground/70" }, "Current value:"),
|
|
98
|
+
react_1.default.createElement("dd", null, result.result.currentValue === undefined
|
|
99
|
+
? "—"
|
|
100
|
+
: String(result.result.currentValue)))) : null,
|
|
101
|
+
react_1.default.createElement(ui_1.Separator, null),
|
|
102
|
+
react_1.default.createElement("div", { className: "flex justify-end gap-2" },
|
|
103
|
+
react_1.default.createElement(ui_1.Button, { size: "sm", type: "button", onClick: function () { return onOpenChange(false); } }, "OK")))) : (react_1.default.createElement("form", { className: "flex flex-col gap-3", onSubmit: submit },
|
|
104
|
+
react_1.default.createElement("label", { className: "flex flex-col gap-1 text-xs font-medium" },
|
|
105
|
+
"Set cell:",
|
|
106
|
+
react_1.default.createElement(ui_1.Input, { autoFocus: true, value: setCell, "aria-label": "Set cell", onChange: function (e) {
|
|
107
|
+
setSetCell(e.target.value);
|
|
108
|
+
setError(undefined);
|
|
109
|
+
} })),
|
|
110
|
+
react_1.default.createElement("label", { className: "flex flex-col gap-1 text-xs font-medium" },
|
|
111
|
+
"To value:",
|
|
112
|
+
react_1.default.createElement(ui_1.Input, { value: target, "aria-label": "To value", inputMode: "decimal", onChange: function (e) {
|
|
113
|
+
setTarget(e.target.value);
|
|
114
|
+
setError(undefined);
|
|
115
|
+
} })),
|
|
116
|
+
react_1.default.createElement("label", { className: "flex flex-col gap-1 text-xs font-medium" },
|
|
117
|
+
"By changing cell:",
|
|
118
|
+
react_1.default.createElement(ui_1.Input, { value: changingCell, "aria-label": "By changing cell", onChange: function (e) {
|
|
119
|
+
setChangingCell(e.target.value);
|
|
120
|
+
setError(undefined);
|
|
121
|
+
} })),
|
|
122
|
+
error ? (react_1.default.createElement("div", { role: "alert", className: "text-xs text-rnc-destructive" }, error)) : null,
|
|
123
|
+
react_1.default.createElement(ui_1.Separator, null),
|
|
124
|
+
react_1.default.createElement("div", { className: "flex justify-end gap-2" },
|
|
125
|
+
react_1.default.createElement(ui_1.Button, { type: "button", variant: "outline", size: "sm", onClick: function () { return onOpenChange(false); } }, "Cancel"),
|
|
126
|
+
react_1.default.createElement(ui_1.Button, { type: "submit", size: "sm", disabled: busy }, busy ? "Seeking…" : "OK"))))))));
|
|
127
|
+
});
|
|
128
|
+
exports.GoalSeekDialog.displayName = "GoalSeekDialog";
|
|
129
|
+
/**
|
|
130
|
+
* Host-mounted, atom-driven wrapper around {@link GoalSeekDialog}. Mount
|
|
131
|
+
* once in the host; the context menu opens it via `useOpenGoalSeekDialog`
|
|
132
|
+
* and only offers the item while a host is mounted.
|
|
133
|
+
*/
|
|
134
|
+
var GoalSeekDialogHost = function () {
|
|
135
|
+
var _a;
|
|
136
|
+
(0, goal_seek_dialog_atom_1.useRegisterGoalSeekDialogHost)();
|
|
137
|
+
var _b = tslib_1.__read((0, goal_seek_dialog_atom_1.useGoalSeekDialogState)(), 2), request = _b[0], setRequest = _b[1];
|
|
138
|
+
var close = (0, react_1.useCallback)(function () { return setRequest(null); }, [setRequest]);
|
|
139
|
+
return (react_1.default.createElement(exports.GoalSeekDialog, { open: request != null, onOpenChange: function (open) {
|
|
140
|
+
if (!open)
|
|
141
|
+
close();
|
|
142
|
+
}, initialSetCell: (_a = request === null || request === void 0 ? void 0 : request.setCell) !== null && _a !== void 0 ? _a : "", onApply: function (setCell, targetValue, changingCell) {
|
|
143
|
+
return request
|
|
144
|
+
? request.onApply(setCell, targetValue, changingCell)
|
|
145
|
+
: Promise.resolve(undefined);
|
|
146
|
+
} }));
|
|
147
|
+
};
|
|
148
|
+
exports.GoalSeekDialogHost = GoalSeekDialogHost;
|
|
149
|
+
exports.GoalSeekDialogHost.displayName = "GoalSeekDialogHost";
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { AutoFillType } from "../../types";
|
|
3
|
+
export type FillOptionsMenuProps = {
|
|
4
|
+
/** Position/size of the selection the menu is anchored to (bottom-right). */
|
|
5
|
+
x: number;
|
|
6
|
+
y: number;
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
/**
|
|
10
|
+
* `"smart-tag"` — Excel's Auto Fill Options button after a left drag (the
|
|
11
|
+
* fill already ran). `"menu"` — the menu a right-button drag opens on
|
|
12
|
+
* release (nothing filled yet).
|
|
13
|
+
*/
|
|
14
|
+
mode: "smart-tag" | "menu";
|
|
15
|
+
/** The fill type currently applied (`undefined` = auto-detected). */
|
|
16
|
+
fillType?: AutoFillType;
|
|
17
|
+
/** Source has date-formatted cells → Fill Days / Weekdays / Months / Years. */
|
|
18
|
+
hasDates: boolean;
|
|
19
|
+
onChooseFillType(fillType: AutoFillType): void;
|
|
20
|
+
/** "Series…" (right-drag menu only). Hidden when omitted. */
|
|
21
|
+
onOpenSeriesDialog?(): void;
|
|
22
|
+
/** Menu dismissed without a choice. */
|
|
23
|
+
onClose?(): void;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Excel's fill-type chooser. Two skins over one list: the Auto Fill Options
|
|
27
|
+
* smart tag (a small button at the bottom-right of the filled range that
|
|
28
|
+
* opens the list on click) and the right-drag menu (opens immediately on
|
|
29
|
+
* release, adds Linear/Growth Trend and Series…). Flash Fill is out of scope.
|
|
30
|
+
*/
|
|
31
|
+
export declare const FillOptionsMenu: ({ x, y, width, height, mode, fillType, hasDates, onChooseFillType, onOpenSeriesDialog, onClose, }: FillOptionsMenuProps) => React.JSX.Element;
|
|
32
|
+
//# sourceMappingURL=fill-options-menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fill-options-menu.d.ts","sourceRoot":"","sources":["../../../../components/selection/fill-options-menu.tsx"],"names":[],"mappings":"AAYA,OAAO,KAA2B,MAAM,OAAO,CAAC;AAEhD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,MAAM,MAAM,oBAAoB,GAAG;IACjC,6EAA6E;IAC7E,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,IAAI,EAAE,WAAW,GAAG,MAAM,CAAC;IAC3B,qEAAqE;IACrE,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,+EAA+E;IAC/E,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAC/C,6DAA6D;IAC7D,kBAAkB,CAAC,IAAI,IAAI,CAAC;IAC5B,uCAAuC;IACvC,OAAO,CAAC,IAAI,IAAI,CAAC;CAClB,CAAC;AAuBF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,mGAW7B,oBAAoB,sBA+EtB,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FillOptionsMenu = 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
|
+
var style_1 = require("../context-menu/style");
|
|
9
|
+
var BASE_ENTRIES = [
|
|
10
|
+
{ fillType: "FillCopy", label: "Copy Cells" },
|
|
11
|
+
{ fillType: "FillSeries", label: "Fill Series" },
|
|
12
|
+
{ fillType: "FillFormats", label: "Fill Formatting Only" },
|
|
13
|
+
{ fillType: "FillWithoutFormatting", label: "Fill Without Formatting" },
|
|
14
|
+
];
|
|
15
|
+
var DATE_ENTRIES = [
|
|
16
|
+
{ fillType: "FillDays", label: "Fill Days" },
|
|
17
|
+
{ fillType: "FillWeekdays", label: "Fill Weekdays" },
|
|
18
|
+
{ fillType: "FillMonths", label: "Fill Months" },
|
|
19
|
+
{ fillType: "FillYears", label: "Fill Years" },
|
|
20
|
+
];
|
|
21
|
+
var TREND_ENTRIES = [
|
|
22
|
+
{ fillType: "LinearTrend", label: "Linear Trend" },
|
|
23
|
+
{ fillType: "GrowthTrend", label: "Growth Trend" },
|
|
24
|
+
];
|
|
25
|
+
/**
|
|
26
|
+
* Excel's fill-type chooser. Two skins over one list: the Auto Fill Options
|
|
27
|
+
* smart tag (a small button at the bottom-right of the filled range that
|
|
28
|
+
* opens the list on click) and the right-drag menu (opens immediately on
|
|
29
|
+
* release, adds Linear/Growth Trend and Series…). Flash Fill is out of scope.
|
|
30
|
+
*/
|
|
31
|
+
var FillOptionsMenu = function (_a) {
|
|
32
|
+
var x = _a.x, y = _a.y, width = _a.width, height = _a.height, mode = _a.mode, fillType = _a.fillType, hasDates = _a.hasDates, onChooseFillType = _a.onChooseFillType, onOpenSeriesDialog = _a.onOpenSeriesDialog, onClose = _a.onClose;
|
|
33
|
+
var _b = tslib_1.__read((0, react_1.useState)(mode === "menu"), 2), open = _b[0], setOpen = _b[1];
|
|
34
|
+
var isMenu = mode === "menu";
|
|
35
|
+
// Radix fires `onSelect` and then closes; a close that follows a choice is
|
|
36
|
+
// not a cancel.
|
|
37
|
+
var choseRef = (0, react_1.useRef)(false);
|
|
38
|
+
var entries = tslib_1.__spreadArray(tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(BASE_ENTRIES), false), tslib_1.__read((hasDates ? DATE_ENTRIES : [])), false), tslib_1.__read((isMenu ? TREND_ENTRIES : [])), false);
|
|
39
|
+
return (react_1.default.createElement("div", { className: "absolute pointer-events-auto flex items-start justify-start", style: { left: x + width, top: y + height }, onMouseDown: function (e) { return e.stopPropagation(); }, "data-testid": "fill-options" },
|
|
40
|
+
react_1.default.createElement(ui_1.DropdownMenu, { modal: false, open: open, onOpenChange: function (next) {
|
|
41
|
+
setOpen(next);
|
|
42
|
+
if (!next && isMenu && !choseRef.current)
|
|
43
|
+
onClose === null || onClose === void 0 ? void 0 : onClose();
|
|
44
|
+
if (!next)
|
|
45
|
+
choseRef.current = false;
|
|
46
|
+
} },
|
|
47
|
+
react_1.default.createElement(ui_1.DropdownMenuTrigger, { asChild: true }, isMenu ? (react_1.default.createElement(style_1.StyledFakeTriggerButton, { "aria-label": "Fill options" })) : (react_1.default.createElement(ui_1.IconButton, { tooltip: "Auto Fill Options", "aria-label": "Auto Fill Options", className: "shadow-sm bg-rnc-background border-rnc-border border border-solid rounded-md" },
|
|
48
|
+
react_1.default.createElement(icons_1.MdOutlineArrowDropDown, null)))),
|
|
49
|
+
react_1.default.createElement(ui_1.DropdownMenuPortal, null,
|
|
50
|
+
react_1.default.createElement(ui_1.DropdownMenuContent, { align: "start", onCloseAutoFocus: function (event) { return event.preventDefault(); } },
|
|
51
|
+
entries.map(function (entry) { return (react_1.default.createElement(ui_1.DropdownMenuCheckboxItem, { key: entry.fillType, checked: fillType === entry.fillType, onSelect: function () {
|
|
52
|
+
choseRef.current = true;
|
|
53
|
+
onChooseFillType(entry.fillType);
|
|
54
|
+
} },
|
|
55
|
+
react_1.default.createElement(ui_1.DropdownMenuItemIndicator, null,
|
|
56
|
+
react_1.default.createElement(icons_1.CheckIcon, null)),
|
|
57
|
+
entry.label)); }),
|
|
58
|
+
isMenu && onOpenSeriesDialog ? (react_1.default.createElement(react_1.default.Fragment, null,
|
|
59
|
+
react_1.default.createElement(ui_1.DropdownMenuSeparator, null),
|
|
60
|
+
react_1.default.createElement(ui_1.DropdownMenuItem, { onSelect: function () {
|
|
61
|
+
choseRef.current = true;
|
|
62
|
+
onOpenSeriesDialog();
|
|
63
|
+
} }, "Series\u2026"))) : null)))));
|
|
64
|
+
};
|
|
65
|
+
exports.FillOptionsMenu = FillOptionsMenu;
|
|
@@ -5,5 +5,5 @@ import type { SelectionNewProps } from "./types";
|
|
|
5
5
|
* @param param0
|
|
6
6
|
* @returns
|
|
7
7
|
*/
|
|
8
|
-
export declare const Selection: React.MemoExoticComponent<({ x, y, width, height, fillHandleSize, showFillHandle, offset, stroke, strokeLeftColor, strokeTopColor, strokeRightColor, strokeBottomColor, strokeWidth, strokeTopWidth, strokeRightWidth, strokeBottomWidth, strokeLeftWidth, strokeStyle, fillOpacity, draggable, isDragging, borderCoverWidth, type, range, title, keepTitleWithinBounds, keepTitleWithinVerticalBounds, flipTitleToBottom, table, pivotTable, onMouseDownTitle, onMouseDownResizeHandle, onMouseDownMoveHandle, TitleComponent, onMouseDown, onRequestEditTable, onRequestEditPivotTable, onFlashEnd, zIndex, index, id, showResizeHandles, resizeHandleBorderColor, resizeHandleSize, fill, duration, selectionCount, enableMagicFill, sheetId, activeCell, selection, MagicFillComponent, metadata, readonly, showPasteMenu, onSplitTextToColumns, agentSuggestion, isHovered, MagicFillContent, QuickEdit, PasteMenu, SuggestionAction, onRemoveQuickEdit, onAddQuickEdit, }: SelectionNewProps) => React.JSX.Element>;
|
|
8
|
+
export declare const Selection: React.MemoExoticComponent<({ x, y, width, height, fillHandleSize, showFillHandle, offset, stroke, strokeLeftColor, strokeTopColor, strokeRightColor, strokeBottomColor, strokeWidth, strokeTopWidth, strokeRightWidth, strokeBottomWidth, strokeLeftWidth, strokeStyle, fillOpacity, draggable, isDragging, borderCoverWidth, type, range, title, keepTitleWithinBounds, keepTitleWithinVerticalBounds, flipTitleToBottom, table, pivotTable, onMouseDownTitle, onMouseDownResizeHandle, onMouseDownMoveHandle, TitleComponent, onMouseDown, onRequestEditTable, onRequestEditPivotTable, onFlashEnd, zIndex, index, id, showResizeHandles, resizeHandleBorderColor, resizeHandleSize, fill, duration, selectionCount, enableMagicFill, sheetId, activeCell, selection, MagicFillComponent, metadata, readonly, showPasteMenu, onSplitTextToColumns, agentSuggestion, isHovered, MagicFillContent, QuickEdit, PasteMenu, FillOptionsMenu, fillOptions, onChooseFillType, onOpenFillSeriesDialog, onCloseFillOptions, SuggestionAction, onRemoveQuickEdit, onAddQuickEdit, }: SelectionNewProps) => React.JSX.Element>;
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/selection/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/selection/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAe,MAAM,OAAO,CAAC;AAcpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD;;;;GAIG;AACH,eAAO,MAAM,SAAS,+gCAuEjB,iBAAiB,uBA0TrB,CAAC"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Selection = void 0;
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var react_1 = tslib_1.__importStar(require("react"));
|
|
6
|
+
var fill_options_menu_1 = require("./fill-options-menu");
|
|
6
7
|
var magic_fill_1 = require("./magic-fill");
|
|
7
8
|
var paste_menu_1 = require("./paste-menu");
|
|
8
9
|
var quick_edit_1 = require("./quick-edit");
|
|
@@ -15,7 +16,7 @@ var title_1 = require("./title");
|
|
|
15
16
|
* @returns
|
|
16
17
|
*/
|
|
17
18
|
exports.Selection = (0, react_1.memo)(function (_a) {
|
|
18
|
-
var _b = _a.x, x = _b === void 0 ? 0 : _b, _c = _a.y, y = _c === void 0 ? 0 : _c, _d = _a.width, width = _d === void 0 ? 0 : _d, _e = _a.height, height = _e === void 0 ? 0 : _e, _f = _a.fillHandleSize, fillHandleSize = _f === void 0 ? 8 : _f, showFillHandle = _a.showFillHandle, _g = _a.offset, offset = _g === void 0 ? 0 : _g, stroke = _a.stroke, _h = _a.strokeLeftColor, strokeLeftColor = _h === void 0 ? stroke : _h, _j = _a.strokeTopColor, strokeTopColor = _j === void 0 ? stroke : _j, _k = _a.strokeRightColor, strokeRightColor = _k === void 0 ? stroke : _k, _l = _a.strokeBottomColor, strokeBottomColor = _l === void 0 ? stroke : _l, _m = _a.strokeWidth, strokeWidth = _m === void 0 ? 0 : _m, _o = _a.strokeTopWidth, strokeTopWidth = _o === void 0 ? strokeWidth : _o, _p = _a.strokeRightWidth, strokeRightWidth = _p === void 0 ? strokeWidth : _p, _q = _a.strokeBottomWidth, strokeBottomWidth = _q === void 0 ? strokeWidth : _q, _r = _a.strokeLeftWidth, strokeLeftWidth = _r === void 0 ? strokeWidth : _r, _s = _a.strokeStyle, strokeStyle = _s === void 0 ? "solid" : _s, _t = _a.fillOpacity, fillOpacity = _t === void 0 ? 1 : _t, draggable = _a.draggable, isDragging = _a.isDragging, _u = _a.borderCoverWidth, borderCoverWidth = _u === void 0 ? 5 : _u, type = _a.type, range = _a.range, title = _a.title, keepTitleWithinBounds = _a.keepTitleWithinBounds, keepTitleWithinVerticalBounds = _a.keepTitleWithinVerticalBounds, flipTitleToBottom = _a.flipTitleToBottom, table = _a.table, pivotTable = _a.pivotTable, onMouseDownTitle = _a.onMouseDownTitle, onMouseDownResizeHandle = _a.onMouseDownResizeHandle, onMouseDownMoveHandle = _a.onMouseDownMoveHandle, _v = _a.TitleComponent, TitleComponent = _v === void 0 ? title_1.SelectionTitle : _v, onMouseDown = _a.onMouseDown, onRequestEditTable = _a.onRequestEditTable, onRequestEditPivotTable = _a.onRequestEditPivotTable, onFlashEnd = _a.onFlashEnd, zIndex = _a.zIndex, index = _a.index, id = _a.id, showResizeHandles = _a.showResizeHandles, resizeHandleBorderColor = _a.resizeHandleBorderColor, _w = _a.resizeHandleSize, resizeHandleSize = _w === void 0 ? 6 : _w, fill = _a.fill, duration = _a.duration, selectionCount = _a.selectionCount, enableMagicFill = _a.enableMagicFill, sheetId = _a.sheetId, activeCell = _a.activeCell, selection = _a.selection, _x = _a.MagicFillComponent, MagicFillComponent = _x === void 0 ? magic_fill_1.MagicFill : _x, metadata = _a.metadata, readonly = _a.readonly, showPasteMenu = _a.showPasteMenu, onSplitTextToColumns = _a.onSplitTextToColumns, agentSuggestion = _a.agentSuggestion, isHovered = _a.isHovered, MagicFillContent = _a.MagicFillContent, _y = _a.QuickEdit, QuickEdit = _y === void 0 ? quick_edit_1.QuickEdit : _y, _z = _a.PasteMenu, PasteMenu = _z === void 0 ? paste_menu_1.PasteMenu : _z, _0 = _a.SuggestionAction, SuggestionAction =
|
|
19
|
+
var _b = _a.x, x = _b === void 0 ? 0 : _b, _c = _a.y, y = _c === void 0 ? 0 : _c, _d = _a.width, width = _d === void 0 ? 0 : _d, _e = _a.height, height = _e === void 0 ? 0 : _e, _f = _a.fillHandleSize, fillHandleSize = _f === void 0 ? 8 : _f, showFillHandle = _a.showFillHandle, _g = _a.offset, offset = _g === void 0 ? 0 : _g, stroke = _a.stroke, _h = _a.strokeLeftColor, strokeLeftColor = _h === void 0 ? stroke : _h, _j = _a.strokeTopColor, strokeTopColor = _j === void 0 ? stroke : _j, _k = _a.strokeRightColor, strokeRightColor = _k === void 0 ? stroke : _k, _l = _a.strokeBottomColor, strokeBottomColor = _l === void 0 ? stroke : _l, _m = _a.strokeWidth, strokeWidth = _m === void 0 ? 0 : _m, _o = _a.strokeTopWidth, strokeTopWidth = _o === void 0 ? strokeWidth : _o, _p = _a.strokeRightWidth, strokeRightWidth = _p === void 0 ? strokeWidth : _p, _q = _a.strokeBottomWidth, strokeBottomWidth = _q === void 0 ? strokeWidth : _q, _r = _a.strokeLeftWidth, strokeLeftWidth = _r === void 0 ? strokeWidth : _r, _s = _a.strokeStyle, strokeStyle = _s === void 0 ? "solid" : _s, _t = _a.fillOpacity, fillOpacity = _t === void 0 ? 1 : _t, draggable = _a.draggable, isDragging = _a.isDragging, _u = _a.borderCoverWidth, borderCoverWidth = _u === void 0 ? 5 : _u, type = _a.type, range = _a.range, title = _a.title, keepTitleWithinBounds = _a.keepTitleWithinBounds, keepTitleWithinVerticalBounds = _a.keepTitleWithinVerticalBounds, flipTitleToBottom = _a.flipTitleToBottom, table = _a.table, pivotTable = _a.pivotTable, onMouseDownTitle = _a.onMouseDownTitle, onMouseDownResizeHandle = _a.onMouseDownResizeHandle, onMouseDownMoveHandle = _a.onMouseDownMoveHandle, _v = _a.TitleComponent, TitleComponent = _v === void 0 ? title_1.SelectionTitle : _v, onMouseDown = _a.onMouseDown, onRequestEditTable = _a.onRequestEditTable, onRequestEditPivotTable = _a.onRequestEditPivotTable, onFlashEnd = _a.onFlashEnd, zIndex = _a.zIndex, index = _a.index, id = _a.id, showResizeHandles = _a.showResizeHandles, resizeHandleBorderColor = _a.resizeHandleBorderColor, _w = _a.resizeHandleSize, resizeHandleSize = _w === void 0 ? 6 : _w, fill = _a.fill, duration = _a.duration, selectionCount = _a.selectionCount, enableMagicFill = _a.enableMagicFill, sheetId = _a.sheetId, activeCell = _a.activeCell, selection = _a.selection, _x = _a.MagicFillComponent, MagicFillComponent = _x === void 0 ? magic_fill_1.MagicFill : _x, metadata = _a.metadata, readonly = _a.readonly, showPasteMenu = _a.showPasteMenu, onSplitTextToColumns = _a.onSplitTextToColumns, agentSuggestion = _a.agentSuggestion, isHovered = _a.isHovered, MagicFillContent = _a.MagicFillContent, _y = _a.QuickEdit, QuickEdit = _y === void 0 ? quick_edit_1.QuickEdit : _y, _z = _a.PasteMenu, PasteMenu = _z === void 0 ? paste_menu_1.PasteMenu : _z, _0 = _a.FillOptionsMenu, FillOptionsMenu = _0 === void 0 ? fill_options_menu_1.FillOptionsMenu : _0, fillOptions = _a.fillOptions, onChooseFillType = _a.onChooseFillType, onOpenFillSeriesDialog = _a.onOpenFillSeriesDialog, onCloseFillOptions = _a.onCloseFillOptions, _1 = _a.SuggestionAction, SuggestionAction = _1 === void 0 ? suggestion_action_1.SuggestionAction : _1, onRemoveQuickEdit = _a.onRemoveQuickEdit, onAddQuickEdit = _a.onAddQuickEdit;
|
|
19
20
|
// Show paste menu
|
|
20
21
|
var finalShowPasteMenu = !showPasteMenu
|
|
21
22
|
? false
|
|
@@ -174,6 +175,7 @@ exports.Selection = (0, react_1.memo)(function (_a) {
|
|
|
174
175
|
(type === "selection" ||
|
|
175
176
|
(type === "activeCell" && selectionCount === 0)) ? (react_1.default.createElement(MagicFillComponent, { sheetId: sheetId, x: x, y: y, height: height, width: width, type: type, activeCell: activeCell, selection: selection, isHovered: isHovered, MagicFillContent: MagicFillContent, onAddQuickEdit: onAddQuickEdit, backgroundColor: stroke })) : null,
|
|
176
177
|
type === "quickedit" ? (react_1.default.createElement(QuickEdit, { x: x, y: y, width: width, height: height, range: range, sheetId: sheetId, onRemoveQuickEdit: onRemoveQuickEdit })) : null,
|
|
177
|
-
finalShowPasteMenu && (react_1.default.createElement(PasteMenu, { x: x + fillHandleSize / 2, y: y + fillHandleSize / 2, width: width, height: height, onSplitTextToColumns: onSplitTextToColumns }))
|
|
178
|
+
finalShowPasteMenu && (react_1.default.createElement(PasteMenu, { x: x + fillHandleSize / 2, y: y + fillHandleSize / 2, width: width, height: height, onSplitTextToColumns: onSplitTextToColumns })),
|
|
179
|
+
fillOptions && type === "selection" && onChooseFillType ? (react_1.default.createElement(FillOptionsMenu, { x: x + fillHandleSize / 2, y: y + fillHandleSize / 2, width: width, height: height, mode: fillOptions.mode, fillType: fillOptions.fillType, hasDates: fillOptions.hasDates, onChooseFillType: onChooseFillType, onOpenSeriesDialog: onOpenFillSeriesDialog, onClose: onCloseFillOptions })) : null));
|
|
178
180
|
});
|
|
179
181
|
exports.Selection.displayName = "Selection";
|
|
@@ -2,8 +2,9 @@ import type { CellInterface } from "@rowsncolumns/common-types";
|
|
|
2
2
|
import type { SelectionProps } from "@rowsncolumns/grid";
|
|
3
3
|
import type { ElementType } from "react";
|
|
4
4
|
import type { Maybe, PivotTable, SheetRange } from "../../types";
|
|
5
|
-
import type { TableView } from "../../types";
|
|
5
|
+
import type { AutoFillType, TableView } from "../../types";
|
|
6
6
|
import type { SelectionAttributes } from "../canvas-grid/typings";
|
|
7
|
+
import type { FillOptionsMenuProps } from "./fill-options-menu";
|
|
7
8
|
import type { MagicFillContentProps, MagicFillProps } from "./magic-fill";
|
|
8
9
|
import type { PasteMenuProps } from "./paste-menu";
|
|
9
10
|
import type { QuickEditProps } from "./quick-edit";
|
|
@@ -31,6 +32,15 @@ export type SelectionNewProps = SelectionProps<SelectionAttributes> & {
|
|
|
31
32
|
MagicFillContent?: React.ComponentType<MagicFillContentProps>;
|
|
32
33
|
QuickEdit?: React.ComponentType<QuickEditProps>;
|
|
33
34
|
PasteMenu?: React.ComponentType<PasteMenuProps>;
|
|
35
|
+
FillOptionsMenu?: React.ComponentType<FillOptionsMenuProps>;
|
|
36
|
+
/**
|
|
37
|
+
* Pending Auto Fill Options / right-drag fill menu for THIS selection
|
|
38
|
+
* (present only on the selection whose range is the fill target).
|
|
39
|
+
*/
|
|
40
|
+
fillOptions?: Pick<FillOptionsMenuProps, "mode" | "fillType" | "hasDates">;
|
|
41
|
+
onChooseFillType?(fillType: AutoFillType): void;
|
|
42
|
+
onOpenFillSeriesDialog?(): void;
|
|
43
|
+
onCloseFillOptions?(): void;
|
|
34
44
|
SuggestionAction?: React.ComponentType<SuggestionActionProps>;
|
|
35
45
|
readonly?: boolean;
|
|
36
46
|
showPasteMenu?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../components/selection/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../components/selection/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEzC,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAEjE,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC,mBAAmB,CAAC,GAAG;IACpE,gBAAgB,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IAC7D,uBAAuB,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IACtE,qBAAqB,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IACpE,cAAc,CAAC,EAAE,WAAW,CAAC;IAC7B,kBAAkB,CAAC,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IAC5C,uBAAuB,CAAC,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAC;IACvD,UAAU,CAAC,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IACvC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IACnC,kBAAkB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;IACzD,gBAAgB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAC9D,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;IAChD,SAAS,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;IAChD,eAAe,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAC5D;;;OAGG;IACH,WAAW,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC,CAAC;IAC3E,gBAAgB,CAAC,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAChD,sBAAsB,CAAC,IAAI,IAAI,CAAC;IAChC,kBAAkB,CAAC,IAAI,IAAI,CAAC;IAC5B,gBAAgB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IAC3C,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;CACzC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type SubtotalDialogChoices, type SubtotalDialogColumn } from "../../atoms/subtotal-dialog.atom";
|
|
3
|
+
export type { SubtotalDialogChoices, SubtotalDialogColumn };
|
|
4
|
+
export type SubtotalDialogProps = {
|
|
5
|
+
/** Controls visibility. */
|
|
6
|
+
open: boolean;
|
|
7
|
+
onOpenChange(open: boolean): void;
|
|
8
|
+
/** Columns of the range, in sheet order. */
|
|
9
|
+
columns: SubtotalDialogColumn[];
|
|
10
|
+
/** Initial state of "My data has headers". */
|
|
11
|
+
initialHasHeader?: boolean;
|
|
12
|
+
/** Emits the choices; the host adds the range and routes to `onSubtotal`. */
|
|
13
|
+
onApply(choices: SubtotalDialogChoices): void;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Excel's Subtotal dialog: "At each change in" (group column), "Use
|
|
17
|
+
* function", "Add subtotal to" (aggregate columns), "Replace current
|
|
18
|
+
* subtotals". Summary rows are always placed below the data.
|
|
19
|
+
*/
|
|
20
|
+
export declare const SubtotalDialog: React.MemoExoticComponent<({ open, onOpenChange, columns, initialHasHeader, onApply, }: SubtotalDialogProps) => React.JSX.Element>;
|
|
21
|
+
/**
|
|
22
|
+
* Host-mounted, atom-driven wrapper around {@link SubtotalDialog}. Mount
|
|
23
|
+
* once in the host; the context menu opens it via `useOpenSubtotalDialog`
|
|
24
|
+
* and only offers the item while a host is mounted.
|
|
25
|
+
*/
|
|
26
|
+
export declare const SubtotalDialogHost: {
|
|
27
|
+
(): React.JSX.Element;
|
|
28
|
+
displayName: string;
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/subtotal-dialog/index.tsx"],"names":[],"mappings":"AAWA,OAAO,KAA0D,MAAM,OAAO,CAAC;AAE/E,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EAG1B,MAAM,kCAAkC,CAAC;AAG1C,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;AAoB5D,MAAM,MAAM,mBAAmB,GAAG;IAChC,2BAA2B;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC,4CAA4C;IAC5C,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,8CAA8C;IAC9C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,6EAA6E;IAC7E,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,IAAI,CAAC;CAC/C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,0FAOtB,mBAAmB,uBAoKvB,CAAC;AAIF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB;;;CAe9B,CAAC"}
|