@rowsncolumns/spreadsheet 10.6.4 → 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/alignment.d.ts +25 -0
- package/dist/cjs/components/cell/alignment.d.ts.map +1 -1
- package/dist/cjs/components/cell/alignment.js +39 -1
- package/dist/cjs/components/cell/cell-background.d.ts +16 -0
- package/dist/cjs/components/cell/cell-background.d.ts.map +1 -1
- package/dist/cjs/components/cell/cell-background.js +141 -54
- package/dist/cjs/components/cell/cell-text-runs.d.ts +12 -5
- package/dist/cjs/components/cell/cell-text-runs.d.ts.map +1 -1
- package/dist/cjs/components/cell/cell-text-runs.js +18 -20
- package/dist/cjs/components/cell/index.d.ts.map +1 -1
- package/dist/cjs/components/cell/index.js +26 -21
- 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/helpers.d.ts +5 -0
- package/dist/cjs/helpers.d.ts.map +1 -1
- package/dist/cjs/helpers.js +8 -4
- 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/alignment.d.ts +25 -0
- package/dist/esm/components/cell/alignment.d.ts.map +1 -1
- package/dist/esm/components/cell/alignment.js +33 -0
- package/dist/esm/components/cell/cell-background.d.ts +16 -0
- package/dist/esm/components/cell/cell-background.d.ts.map +1 -1
- package/dist/esm/components/cell/cell-background.js +106 -36
- package/dist/esm/components/cell/cell-text-runs.d.ts +12 -5
- package/dist/esm/components/cell/cell-text-runs.d.ts.map +1 -1
- package/dist/esm/components/cell/cell-text-runs.js +17 -22
- package/dist/esm/components/cell/index.d.ts.map +1 -1
- package/dist/esm/components/cell/index.js +25 -20
- 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/helpers.d.ts +5 -0
- package/dist/esm/helpers.d.ts.map +1 -1
- package/dist/esm/helpers.js +8 -4
- 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
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ScenarioManagerDialog = exports.parseCellList = exports.MAX_SCENARIO_CHANGING_CELLS = 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 cap on changing cells per scenario. */
|
|
10
|
+
exports.MAX_SCENARIO_CHANGING_CELLS = 32;
|
|
11
|
+
/**
|
|
12
|
+
* `B1:B3, D5` → its cells in order (deduplicated), or `null` when a part is not a
|
|
13
|
+
* cell or range reference.
|
|
14
|
+
*/
|
|
15
|
+
var parseCellList = function (text) {
|
|
16
|
+
var e_1, _a;
|
|
17
|
+
var cells = [];
|
|
18
|
+
var parts = text
|
|
19
|
+
.split(/[,;]/)
|
|
20
|
+
.map(function (p) { return p.trim().replace(/\$/g, ""); })
|
|
21
|
+
.filter(function (p) { return p !== ""; });
|
|
22
|
+
if (parts.length === 0)
|
|
23
|
+
return null;
|
|
24
|
+
try {
|
|
25
|
+
for (var parts_1 = tslib_1.__values(parts), parts_1_1 = parts_1.next(); !parts_1_1.done; parts_1_1 = parts_1.next()) {
|
|
26
|
+
var part = parts_1_1.value;
|
|
27
|
+
var _b = tslib_1.__read(part.split(":"), 2), a = _b[0], _c = _b[1], b = _c === void 0 ? a : _c;
|
|
28
|
+
if (!/^[A-Za-z]{1,3}\d+$/.test(a) || !/^[A-Za-z]{1,3}\d+$/.test(b))
|
|
29
|
+
return null;
|
|
30
|
+
var start = (0, utils_1.addressToCell)(a);
|
|
31
|
+
var end = (0, utils_1.addressToCell)(b);
|
|
32
|
+
if (!start || !end)
|
|
33
|
+
return null;
|
|
34
|
+
var _loop_1 = function (r) {
|
|
35
|
+
var _loop_2 = function (c) {
|
|
36
|
+
if (!cells.some(function (x) { return x.rowIndex === r && x.columnIndex === c; })) {
|
|
37
|
+
cells.push({ rowIndex: r, columnIndex: c });
|
|
38
|
+
}
|
|
39
|
+
if (cells.length > exports.MAX_SCENARIO_CHANGING_CELLS)
|
|
40
|
+
return { value: cells };
|
|
41
|
+
};
|
|
42
|
+
for (var c = Math.min(start.columnIndex, end.columnIndex); c <= Math.max(start.columnIndex, end.columnIndex); c++) {
|
|
43
|
+
var state_2 = _loop_2(c);
|
|
44
|
+
if (typeof state_2 === "object")
|
|
45
|
+
return state_2;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
for (var r = Math.min(start.rowIndex, end.rowIndex); r <= Math.max(start.rowIndex, end.rowIndex); r++) {
|
|
49
|
+
var state_1 = _loop_1(r);
|
|
50
|
+
if (typeof state_1 === "object")
|
|
51
|
+
return state_1.value;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
56
|
+
finally {
|
|
57
|
+
try {
|
|
58
|
+
if (parts_1_1 && !parts_1_1.done && (_a = parts_1.return)) _a.call(parts_1);
|
|
59
|
+
}
|
|
60
|
+
finally { if (e_1) throw e_1.error; }
|
|
61
|
+
}
|
|
62
|
+
return cells;
|
|
63
|
+
};
|
|
64
|
+
exports.parseCellList = parseCellList;
|
|
65
|
+
var cellsText = function (cells) {
|
|
66
|
+
return cells.map(function (c) { var _a; return (_a = (0, utils_1.cellToAddress)(c)) !== null && _a !== void 0 ? _a : ""; }).join(",");
|
|
67
|
+
};
|
|
68
|
+
/**
|
|
69
|
+
* Excel's Scenario Manager: the sheet's scenarios with Show / Add / Delete /
|
|
70
|
+
* Edit / Summary. Add and Edit ask for the name, changing cells and comment,
|
|
71
|
+
* then a value for each changing cell (Scenario Values). Merge is not offered.
|
|
72
|
+
*/
|
|
73
|
+
exports.ScenarioManagerDialog = (0, react_1.memo)(function (_a) {
|
|
74
|
+
var open = _a.open, onOpenChange = _a.onOpenChange, scenarios = _a.scenarios, defaultChangingCells = _a.defaultChangingCells, getCellValue = _a.getCellValue, onAdd = _a.onAdd, onUpdate = _a.onUpdate, onDelete = _a.onDelete, onShow = _a.onShow, onSummary = _a.onSummary;
|
|
75
|
+
var _b = tslib_1.__read((0, react_1.useState)({ kind: "list" }), 2), view = _b[0], setView = _b[1];
|
|
76
|
+
var _c = tslib_1.__read((0, react_1.useState)(0), 2), selected = _c[0], setSelected = _c[1];
|
|
77
|
+
var _d = tslib_1.__read((0, react_1.useState)(""), 2), name = _d[0], setName = _d[1];
|
|
78
|
+
var _e = tslib_1.__read((0, react_1.useState)(""), 2), changing = _e[0], setChanging = _e[1];
|
|
79
|
+
var _f = tslib_1.__read((0, react_1.useState)(""), 2), comment = _f[0], setComment = _f[1];
|
|
80
|
+
var _g = tslib_1.__read((0, react_1.useState)(true), 2), locked = _g[0], setLocked = _g[1];
|
|
81
|
+
var _h = tslib_1.__read((0, react_1.useState)(false), 2), hidden = _h[0], setHidden = _h[1];
|
|
82
|
+
var _j = tslib_1.__read((0, react_1.useState)(""), 2), resultCells = _j[0], setResultCells = _j[1];
|
|
83
|
+
var _k = tslib_1.__read((0, react_1.useState)(undefined), 2), error = _k[0], setError = _k[1];
|
|
84
|
+
(0, react_1.useEffect)(function () {
|
|
85
|
+
if (open) {
|
|
86
|
+
setView({ kind: "list" });
|
|
87
|
+
setSelected(0);
|
|
88
|
+
setError(undefined);
|
|
89
|
+
}
|
|
90
|
+
}, [open]);
|
|
91
|
+
var current = scenarios[Math.min(selected, scenarios.length - 1)];
|
|
92
|
+
var run = (0, react_1.useCallback)(function (action, after) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
93
|
+
var refusal;
|
|
94
|
+
return tslib_1.__generator(this, function (_a) {
|
|
95
|
+
switch (_a.label) {
|
|
96
|
+
case 0: return [4 /*yield*/, action()];
|
|
97
|
+
case 1:
|
|
98
|
+
refusal = _a.sent();
|
|
99
|
+
if (refusal) {
|
|
100
|
+
setError(refusal);
|
|
101
|
+
return [2 /*return*/];
|
|
102
|
+
}
|
|
103
|
+
setError(undefined);
|
|
104
|
+
after === null || after === void 0 ? void 0 : after();
|
|
105
|
+
return [2 /*return*/];
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}); }, []);
|
|
109
|
+
var startEdit = function (scenario) {
|
|
110
|
+
var _a, _b, _c, _d;
|
|
111
|
+
setName((_a = scenario === null || scenario === void 0 ? void 0 : scenario.name) !== null && _a !== void 0 ? _a : "");
|
|
112
|
+
setChanging(scenario ? cellsText(scenario.cells) : defaultChangingCells);
|
|
113
|
+
setComment((_b = scenario === null || scenario === void 0 ? void 0 : scenario.comment) !== null && _b !== void 0 ? _b : "");
|
|
114
|
+
setLocked((_c = scenario === null || scenario === void 0 ? void 0 : scenario.locked) !== null && _c !== void 0 ? _c : true);
|
|
115
|
+
setHidden((_d = scenario === null || scenario === void 0 ? void 0 : scenario.hidden) !== null && _d !== void 0 ? _d : false);
|
|
116
|
+
setError(undefined);
|
|
117
|
+
setView({ kind: "edit", editing: scenario === null || scenario === void 0 ? void 0 : scenario.name });
|
|
118
|
+
};
|
|
119
|
+
var toValues = function (event) {
|
|
120
|
+
event.preventDefault();
|
|
121
|
+
if (view.kind !== "edit")
|
|
122
|
+
return;
|
|
123
|
+
if (name.trim() === "") {
|
|
124
|
+
setError("Type a scenario name.");
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
var cells = (0, exports.parseCellList)(changing);
|
|
128
|
+
if (!cells) {
|
|
129
|
+
setError("Changing cell reference is not valid.");
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
if (cells.length > exports.MAX_SCENARIO_CHANGING_CELLS) {
|
|
133
|
+
setError("Too many changing cells. A scenario can have up to 32.");
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
var previous = scenarios.find(function (s) { return s.name === view.editing; });
|
|
137
|
+
setError(undefined);
|
|
138
|
+
setView({
|
|
139
|
+
kind: "values",
|
|
140
|
+
editing: view.editing,
|
|
141
|
+
draft: {
|
|
142
|
+
name: name.trim(),
|
|
143
|
+
comment: comment.trim() === "" ? undefined : comment,
|
|
144
|
+
locked: locked,
|
|
145
|
+
hidden: hidden,
|
|
146
|
+
cells: cells.map(function (c) {
|
|
147
|
+
var _a, _b;
|
|
148
|
+
return (tslib_1.__assign(tslib_1.__assign({}, c), { value: (_b = (_a = previous === null || previous === void 0 ? void 0 : previous.cells.find(function (p) { return p.rowIndex === c.rowIndex && p.columnIndex === c.columnIndex; })) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : getCellValue(c.rowIndex, c.columnIndex) }));
|
|
149
|
+
}),
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
};
|
|
153
|
+
var saveValues = function (event) {
|
|
154
|
+
event.preventDefault();
|
|
155
|
+
if (view.kind !== "values")
|
|
156
|
+
return;
|
|
157
|
+
var draft = view.draft, editing = view.editing;
|
|
158
|
+
void run(function () { return (editing === undefined ? onAdd(draft) : onUpdate(editing, draft)); }, function () { return setView({ kind: "list" }); });
|
|
159
|
+
};
|
|
160
|
+
var summary = function (event) {
|
|
161
|
+
event.preventDefault();
|
|
162
|
+
var cells = resultCells.trim() === "" ? [] : (0, exports.parseCellList)(resultCells);
|
|
163
|
+
if (!cells) {
|
|
164
|
+
setError("Result cell reference is not valid.");
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
void run(function () { return onSummary(cells); }, function () { return onOpenChange(false); });
|
|
168
|
+
};
|
|
169
|
+
var footer = function (primary, back) {
|
|
170
|
+
if (back === void 0) { back = true; }
|
|
171
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
172
|
+
error ? (react_1.default.createElement("div", { role: "alert", className: "text-xs text-rnc-destructive" }, error)) : null,
|
|
173
|
+
react_1.default.createElement(ui_1.Separator, null),
|
|
174
|
+
react_1.default.createElement("div", { className: "flex justify-end gap-2" },
|
|
175
|
+
back ? (react_1.default.createElement(ui_1.Button, { type: "button", variant: "outline", size: "sm", onClick: function () {
|
|
176
|
+
setError(undefined);
|
|
177
|
+
setView({ kind: "list" });
|
|
178
|
+
} }, "Cancel")) : null,
|
|
179
|
+
react_1.default.createElement(ui_1.Button, { type: "submit", size: "sm" }, primary))));
|
|
180
|
+
};
|
|
181
|
+
var title = view.kind === "list"
|
|
182
|
+
? "Scenario Manager"
|
|
183
|
+
: view.kind === "values"
|
|
184
|
+
? "Scenario Values"
|
|
185
|
+
: view.kind === "summary"
|
|
186
|
+
? "Scenario Summary"
|
|
187
|
+
: view.editing === undefined
|
|
188
|
+
? "Add Scenario"
|
|
189
|
+
: "Edit Scenario";
|
|
190
|
+
return (react_1.default.createElement(ui_1.Dialog, { open: open, onOpenChange: onOpenChange },
|
|
191
|
+
react_1.default.createElement(ui_1.DialogContent, { className: "w-[400px] max-w-[92vw] pointer-events-auto" },
|
|
192
|
+
react_1.default.createElement(ui_1.DialogTitle, null, title),
|
|
193
|
+
react_1.default.createElement(ui_1.DialogDescription, null, "Save and switch between sets of input values."),
|
|
194
|
+
react_1.default.createElement(ui_1.DialogCloseButton, { onClick: function () { return onOpenChange(false); } },
|
|
195
|
+
react_1.default.createElement(icons_1.Cross1Icon, null)),
|
|
196
|
+
react_1.default.createElement(ui_1.DialogBody, { className: "flex flex-col gap-3 font-system text-sm" },
|
|
197
|
+
view.kind === "list" ? (react_1.default.createElement("div", { className: "flex flex-col gap-3" },
|
|
198
|
+
scenarios.length === 0 ? (react_1.default.createElement("p", { className: "text-xs" }, "No Scenarios defined. Choose Add to add scenarios.")) : (react_1.default.createElement("ul", { "aria-label": "Scenarios", className: "max-h-40 overflow-auto rounded border border-rnc-border" }, scenarios.map(function (s, i) { return (react_1.default.createElement("li", { key: s.name },
|
|
199
|
+
react_1.default.createElement("button", { type: "button", "aria-pressed": i === selected, className: "w-full px-2 py-1 text-left text-xs ".concat(i === selected ? "bg-rnc-accent" : ""), onClick: function () { return setSelected(i); } }, s.name))); }))),
|
|
200
|
+
current ? (react_1.default.createElement("div", { className: "text-xs" },
|
|
201
|
+
react_1.default.createElement("div", null,
|
|
202
|
+
"Changing cells: ",
|
|
203
|
+
cellsText(current.cells)),
|
|
204
|
+
current.comment ? react_1.default.createElement("div", null,
|
|
205
|
+
"Comment: ",
|
|
206
|
+
current.comment) : null)) : null,
|
|
207
|
+
error ? (react_1.default.createElement("div", { role: "alert", className: "text-xs text-rnc-destructive" }, error)) : null,
|
|
208
|
+
react_1.default.createElement(ui_1.Separator, null),
|
|
209
|
+
react_1.default.createElement("div", { className: "flex flex-wrap justify-end gap-2" },
|
|
210
|
+
react_1.default.createElement(ui_1.Button, { type: "button", size: "sm", variant: "outline", onClick: function () { return startEdit(undefined); } }, "Add\u2026"),
|
|
211
|
+
react_1.default.createElement(ui_1.Button, { type: "button", size: "sm", variant: "outline", disabled: !current, onClick: function () { return current && void run(function () { return onDelete(current.name); }); } }, "Delete"),
|
|
212
|
+
react_1.default.createElement(ui_1.Button, { type: "button", size: "sm", variant: "outline", disabled: !current, onClick: function () { return startEdit(current); } }, "Edit\u2026"),
|
|
213
|
+
react_1.default.createElement(ui_1.Button, { type: "button", size: "sm", variant: "outline", disabled: !current, onClick: function () {
|
|
214
|
+
setResultCells("");
|
|
215
|
+
setError(undefined);
|
|
216
|
+
setView({ kind: "summary" });
|
|
217
|
+
} }, "Summary\u2026"),
|
|
218
|
+
react_1.default.createElement(ui_1.Button, { type: "button", size: "sm", disabled: !current, onClick: function () { return current && void run(function () { return onShow(current.name); }); } }, "Show")))) : null,
|
|
219
|
+
view.kind === "edit" ? (react_1.default.createElement("form", { className: "flex flex-col gap-3", onSubmit: toValues },
|
|
220
|
+
react_1.default.createElement("label", { className: "flex flex-col gap-1 text-xs font-medium" },
|
|
221
|
+
"Scenario name:",
|
|
222
|
+
react_1.default.createElement(ui_1.Input, { autoFocus: true, "aria-label": "Scenario name", value: name, onChange: function (e) { return setName(e.target.value); } })),
|
|
223
|
+
react_1.default.createElement("label", { className: "flex flex-col gap-1 text-xs font-medium" },
|
|
224
|
+
"Changing cells:",
|
|
225
|
+
react_1.default.createElement(ui_1.Input, { "aria-label": "Changing cells", value: changing, onChange: function (e) { return setChanging(e.target.value); } })),
|
|
226
|
+
react_1.default.createElement("label", { className: "flex flex-col gap-1 text-xs font-medium" },
|
|
227
|
+
"Comment:",
|
|
228
|
+
react_1.default.createElement(ui_1.Input, { "aria-label": "Comment", value: comment, onChange: function (e) { return setComment(e.target.value); } })),
|
|
229
|
+
react_1.default.createElement("label", { className: "flex items-center gap-2 text-xs" },
|
|
230
|
+
react_1.default.createElement("input", { type: "checkbox", checked: locked, onChange: function (e) { return setLocked(e.target.checked); } }),
|
|
231
|
+
"Prevent changes"),
|
|
232
|
+
react_1.default.createElement("label", { className: "flex items-center gap-2 text-xs" },
|
|
233
|
+
react_1.default.createElement("input", { type: "checkbox", checked: hidden, onChange: function (e) { return setHidden(e.target.checked); } }),
|
|
234
|
+
"Hide"),
|
|
235
|
+
footer("OK"))) : null,
|
|
236
|
+
view.kind === "values" ? (react_1.default.createElement("form", { className: "flex flex-col gap-2", onSubmit: saveValues },
|
|
237
|
+
react_1.default.createElement("p", { className: "text-xs" }, "Enter values for each of the changing cells."),
|
|
238
|
+
view.draft.cells.map(function (cell, i) {
|
|
239
|
+
var _a;
|
|
240
|
+
var address = (_a = (0, utils_1.cellToAddress)(cell)) !== null && _a !== void 0 ? _a : "";
|
|
241
|
+
return (react_1.default.createElement("label", { key: address, className: "flex items-center gap-2 text-xs" },
|
|
242
|
+
react_1.default.createElement("span", { className: "w-16" }, address),
|
|
243
|
+
react_1.default.createElement(ui_1.Input, { "aria-label": address, value: cell.value, onChange: function (e) {
|
|
244
|
+
var cells = view.draft.cells.map(function (c, k) {
|
|
245
|
+
return k === i ? tslib_1.__assign(tslib_1.__assign({}, c), { value: e.target.value }) : c;
|
|
246
|
+
});
|
|
247
|
+
setView(tslib_1.__assign(tslib_1.__assign({}, view), { draft: tslib_1.__assign(tslib_1.__assign({}, view.draft), { cells: cells }) }));
|
|
248
|
+
} })));
|
|
249
|
+
}),
|
|
250
|
+
footer("OK"))) : null,
|
|
251
|
+
view.kind === "summary" ? (react_1.default.createElement("form", { className: "flex flex-col gap-3", onSubmit: summary },
|
|
252
|
+
react_1.default.createElement("label", { className: "flex flex-col gap-1 text-xs font-medium" },
|
|
253
|
+
"Result cells:",
|
|
254
|
+
react_1.default.createElement(ui_1.Input, { autoFocus: true, "aria-label": "Result cells", value: resultCells, onChange: function (e) { return setResultCells(e.target.value); } })),
|
|
255
|
+
footer("OK"))) : null))));
|
|
256
|
+
});
|
|
257
|
+
exports.ScenarioManagerDialog.displayName = "ScenarioManagerDialog";
|
|
@@ -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, FillOptionsMenu, fillOptions, onChooseFillType, onOpenFillSeriesDialog, onCloseFillOptions, InsertOptionsSmartTag, insertOptions, onChooseInsertOption, tableAutoExpansion, onChooseTableAutoExpansionOption, calculatedColumnFill, onChooseCalculatedColumnOption, 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, onChoosePasteOption, agentSuggestion, isHovered, MagicFillContent, QuickEdit, PasteMenu, FillOptionsMenu, fillOptions, onChooseFillType, onOpenFillSeriesDialog, onCloseFillOptions, InsertOptionsSmartTag, insertOptions, onChooseInsertOption, tableAutoExpansion, onChooseTableAutoExpansionOption, calculatedColumnFill, onChooseCalculatedColumnOption, errorCheck, errorCheckMenuOpen, onErrorCheckMenuOpenChange, onChooseErrorCheckOption, 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;AAkBpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD;;;;GAIG;AACH,eAAO,MAAM,SAAS,kyCAmFjB,iBAAiB,uBA2WrB,CAAC"}
|
|
@@ -3,9 +3,10 @@ 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 calculated_column_smart_tag_1 = require("../calculated-column-smart-tag");
|
|
7
|
+
var error_check_smart_tag_1 = require("../error-check-smart-tag");
|
|
6
8
|
var insert_options_smart_tag_1 = require("../insert-options-smart-tag");
|
|
7
9
|
var table_auto_expansion_smart_tag_1 = require("../table-auto-expansion-smart-tag");
|
|
8
|
-
var calculated_column_smart_tag_1 = require("../calculated-column-smart-tag");
|
|
9
10
|
var fill_options_menu_1 = require("./fill-options-menu");
|
|
10
11
|
var magic_fill_1 = require("./magic-fill");
|
|
11
12
|
var paste_menu_1 = require("./paste-menu");
|
|
@@ -19,7 +20,7 @@ var title_1 = require("./title");
|
|
|
19
20
|
* @returns
|
|
20
21
|
*/
|
|
21
22
|
exports.Selection = (0, react_1.memo)(function (_a) {
|
|
22
|
-
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.InsertOptionsSmartTag, InsertOptionsSmartTag = _1 === void 0 ? insert_options_smart_tag_1.InsertOptionsSmartTag : _1, insertOptions = _a.insertOptions, onChooseInsertOption = _a.onChooseInsertOption, tableAutoExpansion = _a.tableAutoExpansion, onChooseTableAutoExpansionOption = _a.onChooseTableAutoExpansionOption, calculatedColumnFill = _a.calculatedColumnFill, onChooseCalculatedColumnOption = _a.onChooseCalculatedColumnOption, _2 = _a.SuggestionAction, SuggestionAction =
|
|
23
|
+
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, onChoosePasteOption = _a.onChoosePasteOption, 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.InsertOptionsSmartTag, InsertOptionsSmartTag = _1 === void 0 ? insert_options_smart_tag_1.InsertOptionsSmartTag : _1, insertOptions = _a.insertOptions, onChooseInsertOption = _a.onChooseInsertOption, tableAutoExpansion = _a.tableAutoExpansion, onChooseTableAutoExpansionOption = _a.onChooseTableAutoExpansionOption, calculatedColumnFill = _a.calculatedColumnFill, onChooseCalculatedColumnOption = _a.onChooseCalculatedColumnOption, errorCheck = _a.errorCheck, _2 = _a.errorCheckMenuOpen, errorCheckMenuOpen = _2 === void 0 ? false : _2, onErrorCheckMenuOpenChange = _a.onErrorCheckMenuOpenChange, onChooseErrorCheckOption = _a.onChooseErrorCheckOption, _3 = _a.SuggestionAction, SuggestionAction = _3 === void 0 ? suggestion_action_1.SuggestionAction : _3, onRemoveQuickEdit = _a.onRemoveQuickEdit, onAddQuickEdit = _a.onAddQuickEdit;
|
|
23
24
|
// Show paste menu
|
|
24
25
|
var finalShowPasteMenu = !showPasteMenu
|
|
25
26
|
? false
|
|
@@ -178,10 +179,14 @@ exports.Selection = (0, react_1.memo)(function (_a) {
|
|
|
178
179
|
(type === "selection" ||
|
|
179
180
|
(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,
|
|
180
181
|
type === "quickedit" ? (react_1.default.createElement(QuickEdit, { x: x, y: y, width: width, height: height, range: range, sheetId: sheetId, onRemoveQuickEdit: onRemoveQuickEdit })) : null,
|
|
181
|
-
finalShowPasteMenu && (react_1.default.createElement(PasteMenu, { x: x + fillHandleSize / 2, y: y + fillHandleSize / 2, width: width, height: height, onSplitTextToColumns: onSplitTextToColumns })),
|
|
182
|
+
finalShowPasteMenu && (react_1.default.createElement(PasteMenu, { x: x + fillHandleSize / 2, y: y + fillHandleSize / 2, width: width, height: height, onSplitTextToColumns: onSplitTextToColumns, onChoosePasteOption: onChoosePasteOption })),
|
|
182
183
|
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,
|
|
183
184
|
insertOptions && onChooseInsertOption ? (react_1.default.createElement(InsertOptionsSmartTag, { x: x, y: y + fillHandleSize / 2, width: width, height: height, axis: insertOptions.axis, option: insertOptions.option, onChooseOption: onChooseInsertOption })) : null,
|
|
184
185
|
tableAutoExpansion && onChooseTableAutoExpansionOption ? (react_1.default.createElement(table_auto_expansion_smart_tag_1.TableAutoExpansionSmartTag, { x: x, y: y + fillHandleSize / 2, width: width, height: height, canStop: tableAutoExpansion.canStop, onChooseOption: onChooseTableAutoExpansionOption })) : null,
|
|
185
|
-
calculatedColumnFill && onChooseCalculatedColumnOption ? (react_1.default.createElement(calculated_column_smart_tag_1.CalculatedColumnSmartTag, { x: x, y: y + fillHandleSize / 2, width: width, height: height, kind: calculatedColumnFill.kind, canStop: calculatedColumnFill.canStop, onChooseOption: onChooseCalculatedColumnOption })) : null
|
|
186
|
+
calculatedColumnFill && onChooseCalculatedColumnOption ? (react_1.default.createElement(calculated_column_smart_tag_1.CalculatedColumnSmartTag, { x: x, y: y + fillHandleSize / 2, width: width, height: height, kind: calculatedColumnFill.kind, canStop: calculatedColumnFill.canStop, onChooseOption: onChooseCalculatedColumnOption })) : null,
|
|
187
|
+
errorCheck &&
|
|
188
|
+
type === "activeCell" &&
|
|
189
|
+
onChooseErrorCheckOption &&
|
|
190
|
+
onErrorCheckMenuOpenChange ? (react_1.default.createElement(error_check_smart_tag_1.ErrorCheckSmartTag, { x: x, y: y, width: width, height: height, kind: errorCheck.kind, errorName: errorCheck.errorName, open: errorCheckMenuOpen, onOpenChange: onErrorCheckMenuOpenChange, onChooseOption: onChooseErrorCheckOption })) : null));
|
|
186
191
|
});
|
|
187
192
|
exports.Selection.displayName = "Selection";
|
|
@@ -1,10 +1,23 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
+
import { type PasteOptionId } from "./paste-options";
|
|
2
3
|
export type PasteMenuProps = {
|
|
3
4
|
x: number;
|
|
4
5
|
y: number;
|
|
5
6
|
width: number;
|
|
6
7
|
height: number;
|
|
7
8
|
onSplitTextToColumns?: (delimiter?: string) => void;
|
|
9
|
+
/**
|
|
10
|
+
* Re-apply the last paste as this gallery entry (Excel's Paste Options).
|
|
11
|
+
* Without it the button offers only Split text to columns.
|
|
12
|
+
*/
|
|
13
|
+
onChoosePasteOption?: (option: PasteOptionId) => void;
|
|
8
14
|
};
|
|
9
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Excel's Paste Options button, shown at the bottom-right of a pasted range.
|
|
17
|
+
* Its gallery re-applies the last paste as Paste, Formulas, Values, Transpose
|
|
18
|
+
* and the other entries (replacing the previous result, one undo step), opens
|
|
19
|
+
* on a click or on Ctrl pressed alone after the paste, and picks an entry with
|
|
20
|
+
* its letter. "Split text to columns" stays as Excel's Text Import option.
|
|
21
|
+
*/
|
|
22
|
+
export declare const PasteMenu: ({ x, y, width, height, onSplitTextToColumns, onChoosePasteOption, }: PasteMenuProps) => React.JSX.Element;
|
|
10
23
|
//# sourceMappingURL=paste-menu.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paste-menu.d.ts","sourceRoot":"","sources":["../../../../components/selection/paste-menu.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"paste-menu.d.ts","sourceRoot":"","sources":["../../../../components/selection/paste-menu.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAG3C,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,MAAM,cAAc,GAAG;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD;;;OAGG;IACH,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;CACvD,CAAC;AAwCF;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,GAAI,qEAOvB,cAAc,sBA2HhB,CAAC"}
|
|
@@ -4,22 +4,94 @@ exports.PasteMenu = void 0;
|
|
|
4
4
|
var tslib_1 = require("tslib");
|
|
5
5
|
var icons_1 = require("@rowsncolumns/icons");
|
|
6
6
|
var ui_1 = require("@rowsncolumns/ui");
|
|
7
|
-
var react_1 = tslib_1.
|
|
7
|
+
var react_1 = tslib_1.__importStar(require("react"));
|
|
8
|
+
var paste_menu_atom_1 = require("../../atoms/paste-menu.atom");
|
|
9
|
+
var paste_options_1 = require("./paste-options");
|
|
10
|
+
/** A small text glyph for the entries the icon set has no picture for. */
|
|
11
|
+
var Glyph = function (_a) {
|
|
12
|
+
var text = _a.text;
|
|
13
|
+
return (react_1.default.createElement("span", { "aria-hidden": true, className: "inline-flex min-w-[1.5em] justify-center font-mono text-[10px] leading-none" }, text));
|
|
14
|
+
};
|
|
15
|
+
var ICONS = {
|
|
16
|
+
paste: react_1.default.createElement(icons_1.MdPaste, { "aria-hidden": true }),
|
|
17
|
+
formulas: react_1.default.createElement(Glyph, { text: "fx" }),
|
|
18
|
+
formulasAndNumberFormats: react_1.default.createElement(Glyph, { text: "%fx" }),
|
|
19
|
+
keepSourceFormatting: react_1.default.createElement(icons_1.MdBrush, { "aria-hidden": true }),
|
|
20
|
+
noBorders: react_1.default.createElement(icons_1.MdBorderClear, { "aria-hidden": true }),
|
|
21
|
+
keepSourceColumnWidths: react_1.default.createElement(icons_1.ExpandIcon, { "aria-hidden": true }),
|
|
22
|
+
transpose: react_1.default.createElement(Glyph, { text: "\u2921" }),
|
|
23
|
+
values: react_1.default.createElement(Glyph, { text: "123" }),
|
|
24
|
+
valuesAndNumberFormats: react_1.default.createElement(Glyph, { text: "%123" }),
|
|
25
|
+
valuesAndSourceFormatting: react_1.default.createElement(Glyph, { text: "123\u270E" }),
|
|
26
|
+
formatting: react_1.default.createElement(icons_1.PaintBrush, { "aria-hidden": true }),
|
|
27
|
+
pasteLink: react_1.default.createElement(Glyph, { text: "=A1" }),
|
|
28
|
+
};
|
|
29
|
+
/** The label with its accelerator letter underlined, as Excel draws it. */
|
|
30
|
+
var AcceleratorLabel = function (_a) {
|
|
31
|
+
var option = _a.option;
|
|
32
|
+
var index = option.label.toLowerCase().indexOf(option.key);
|
|
33
|
+
if (index < 0)
|
|
34
|
+
return react_1.default.createElement(react_1.default.Fragment, null, option.label);
|
|
35
|
+
return (react_1.default.createElement(react_1.default.Fragment, null,
|
|
36
|
+
option.label.slice(0, index),
|
|
37
|
+
react_1.default.createElement("span", { className: "underline" }, option.label.slice(index, index + 1)),
|
|
38
|
+
option.label.slice(index + 1)));
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Excel's Paste Options button, shown at the bottom-right of a pasted range.
|
|
42
|
+
* Its gallery re-applies the last paste as Paste, Formulas, Values, Transpose
|
|
43
|
+
* and the other entries (replacing the previous result, one undo step), opens
|
|
44
|
+
* on a click or on Ctrl pressed alone after the paste, and picks an entry with
|
|
45
|
+
* its letter. "Split text to columns" stays as Excel's Text Import option.
|
|
46
|
+
*/
|
|
8
47
|
var PasteMenu = function (_a) {
|
|
9
|
-
var x = _a.x, y = _a.y, width = _a.width, height = _a.height, onSplitTextToColumns = _a.onSplitTextToColumns;
|
|
48
|
+
var x = _a.x, y = _a.y, width = _a.width, height = _a.height, onSplitTextToColumns = _a.onSplitTextToColumns, onChoosePasteOption = _a.onChoosePasteOption;
|
|
49
|
+
var _b = tslib_1.__read((0, paste_menu_atom_1.usePasteMenuState)(), 2), state = _b[0], setState = _b[1];
|
|
50
|
+
var showGallery = Boolean(onChoosePasteOption) && state.canReapply;
|
|
51
|
+
var isEnabled = (0, react_1.useCallback)(function (option) { return option.id !== "pasteLink" || state.canLink; }, [state.canLink]);
|
|
52
|
+
var choose = (0, react_1.useCallback)(function (option) {
|
|
53
|
+
setState(function (prev) { return (tslib_1.__assign(tslib_1.__assign({}, prev), { open: false })); });
|
|
54
|
+
onChoosePasteOption === null || onChoosePasteOption === void 0 ? void 0 : onChoosePasteOption(option.id);
|
|
55
|
+
}, [onChoosePasteOption, setState]);
|
|
56
|
+
var handleKeyDown = (0, react_1.useCallback)(function (e) {
|
|
57
|
+
if (!showGallery || e.ctrlKey || e.metaKey || e.altKey)
|
|
58
|
+
return;
|
|
59
|
+
if (e.key.length !== 1)
|
|
60
|
+
return;
|
|
61
|
+
var option = paste_options_1.PASTE_OPTIONS.find(function (entry) { return entry.key === e.key.toLowerCase(); });
|
|
62
|
+
if (!option || !isEnabled(option))
|
|
63
|
+
return;
|
|
64
|
+
e.preventDefault();
|
|
65
|
+
e.stopPropagation();
|
|
66
|
+
choose(option);
|
|
67
|
+
}, [showGallery, isEnabled, choose]);
|
|
10
68
|
return (react_1.default.createElement("div", { className: "absolute pointer-events-auto shadow-sm bg-rnc-background border-rnc-border border border-solid rounded-md flex items-start justify-start", style: {
|
|
11
69
|
left: x + width,
|
|
12
70
|
top: y + height,
|
|
13
|
-
}, onMouseDown: function (e) { return e.stopPropagation(); } },
|
|
14
|
-
react_1.default.createElement(ui_1.DropdownMenu,
|
|
71
|
+
}, onMouseDown: function (e) { return e.stopPropagation(); }, "data-testid": "paste-options" },
|
|
72
|
+
react_1.default.createElement(ui_1.DropdownMenu, { modal: false, open: state.open, onOpenChange: function (open) { return setState(function (prev) { return (tslib_1.__assign(tslib_1.__assign({}, prev), { open: open })); }); } },
|
|
15
73
|
react_1.default.createElement(ui_1.DropdownMenuTrigger, { asChild: true },
|
|
16
|
-
react_1.default.createElement(ui_1.IconButton, { tooltip: "Paste
|
|
74
|
+
react_1.default.createElement(ui_1.IconButton, { tooltip: "Paste Options (Ctrl)", "aria-label": "Paste Options" },
|
|
17
75
|
react_1.default.createElement(icons_1.MdPaste, null),
|
|
18
76
|
react_1.default.createElement(icons_1.MdOutlineArrowDropDown, null))),
|
|
19
77
|
react_1.default.createElement(ui_1.DropdownMenuPortal, null,
|
|
20
|
-
react_1.default.createElement(ui_1.DropdownMenuContent, { align: "start", onCloseAutoFocus: function (event) {
|
|
78
|
+
react_1.default.createElement(ui_1.DropdownMenuContent, { align: "start", "aria-label": "Paste Options", onKeyDown: handleKeyDown, onCloseAutoFocus: function (event) {
|
|
21
79
|
event.preventDefault();
|
|
22
80
|
} },
|
|
81
|
+
showGallery
|
|
82
|
+
? paste_options_1.PASTE_OPTION_GROUPS.map(function (group) { return (react_1.default.createElement(react_1.default.Fragment, { key: group },
|
|
83
|
+
react_1.default.createElement(ui_1.DropdownMenuLabel, null, group),
|
|
84
|
+
paste_options_1.PASTE_OPTIONS.filter(function (option) { return option.group === group; }).map(function (option) { return (react_1.default.createElement(ui_1.DropdownMenuCheckboxItem, { key: option.id, checked: state.active === option.id, disabled: !isEnabled(option), "aria-keyshortcuts": option.key.toUpperCase(), "data-paste-option": option.id, onSelect: function () { return choose(option); } },
|
|
85
|
+
react_1.default.createElement(ui_1.DropdownMenuItemIndicator, null,
|
|
86
|
+
react_1.default.createElement(icons_1.CheckIcon, null)),
|
|
87
|
+
react_1.default.createElement("span", { className: "mr-2 inline-flex w-5 justify-center" }, ICONS[option.id]),
|
|
88
|
+
react_1.default.createElement(AcceleratorLabel, { option: option }),
|
|
89
|
+
react_1.default.createElement(ui_1.DropdownRightSlot, null,
|
|
90
|
+
"(",
|
|
91
|
+
option.key.toUpperCase(),
|
|
92
|
+
")"))); }))); })
|
|
93
|
+
: null,
|
|
94
|
+
showGallery ? react_1.default.createElement(ui_1.DropdownMenuSeparator, null) : null,
|
|
23
95
|
react_1.default.createElement(ui_1.DropdownMenuSub, null,
|
|
24
96
|
react_1.default.createElement(ui_1.DropdownMenuSubTrigger, null,
|
|
25
97
|
"Split text to columns",
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { PasteSpecialOptions } from "../../hooks/use-copy-paste-cut";
|
|
2
|
+
/**
|
|
3
|
+
* Excel's Paste Options button gallery (the button that appears after a
|
|
4
|
+
* paste, opened by clicking it or pressing Ctrl alone), in Excel's groups and
|
|
5
|
+
* order with its accelerator letters (support.microsoft.com "Paste options").
|
|
6
|
+
* Picture and Linked Picture are left out: a grid paste never produces a
|
|
7
|
+
* picture of cells.
|
|
8
|
+
*/
|
|
9
|
+
export type PasteOptionId = "paste" | "formulas" | "formulasAndNumberFormats" | "keepSourceFormatting" | "noBorders" | "keepSourceColumnWidths" | "transpose" | "values" | "valuesAndNumberFormats" | "valuesAndSourceFormatting" | "formatting" | "pasteLink";
|
|
10
|
+
export type PasteOptionGroup = "Paste" | "Paste Values" | "Other Paste Options";
|
|
11
|
+
export type PasteOption = {
|
|
12
|
+
id: PasteOptionId;
|
|
13
|
+
label: string;
|
|
14
|
+
/** Accelerator letter, picked with the letter key while the gallery is open. */
|
|
15
|
+
key: string;
|
|
16
|
+
group: PasteOptionGroup;
|
|
17
|
+
/** The paste this option re-applies. */
|
|
18
|
+
request: PasteSpecialOptions;
|
|
19
|
+
};
|
|
20
|
+
export declare const PASTE_OPTIONS: PasteOption[];
|
|
21
|
+
export declare const PASTE_OPTION_GROUPS: PasteOptionGroup[];
|
|
22
|
+
/**
|
|
23
|
+
* The gallery entry a paste request corresponds to, so the button shows which
|
|
24
|
+
* option is applied (a plain Ctrl+V is "Paste"). `undefined` for a Paste
|
|
25
|
+
* Special combination the gallery has no entry for (Operation, Skip blanks…).
|
|
26
|
+
*/
|
|
27
|
+
export declare const pasteOptionForRequest: (request?: PasteSpecialOptions) => PasteOptionId | undefined;
|
|
28
|
+
//# sourceMappingURL=paste-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paste-options.d.ts","sourceRoot":"","sources":["../../../../components/selection/paste-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAE1E;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GACrB,OAAO,GACP,UAAU,GACV,0BAA0B,GAC1B,sBAAsB,GACtB,WAAW,GACX,wBAAwB,GACxB,WAAW,GACX,QAAQ,GACR,wBAAwB,GACxB,2BAA2B,GAC3B,YAAY,GACZ,WAAW,CAAC;AAEhB,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,cAAc,GAAG,qBAAqB,CAAC;AAEhF,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,aAAa,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,gBAAgB,CAAC;IACxB,wCAAwC;IACxC,OAAO,EAAE,mBAAmB,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,WAAW,EA2CtC,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,gBAAgB,EAAqD,CAAC;AAExG;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAAI,UAAU,mBAAmB,KAAG,aAAa,GAAG,SAYrF,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.pasteOptionForRequest = exports.PASTE_OPTION_GROUPS = exports.PASTE_OPTIONS = void 0;
|
|
4
|
+
exports.PASTE_OPTIONS = [
|
|
5
|
+
{ id: "paste", label: "Paste", key: "p", group: "Paste", request: { paste: "all" } },
|
|
6
|
+
{ id: "formulas", label: "Formulas", key: "f", group: "Paste", request: { paste: "formulas" } },
|
|
7
|
+
{
|
|
8
|
+
id: "formulasAndNumberFormats",
|
|
9
|
+
label: "Formulas & Number Formatting",
|
|
10
|
+
key: "o",
|
|
11
|
+
group: "Paste",
|
|
12
|
+
request: { paste: "formulasAndNumberFormats" },
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
id: "keepSourceFormatting",
|
|
16
|
+
label: "Keep Source Formatting",
|
|
17
|
+
key: "k",
|
|
18
|
+
group: "Paste",
|
|
19
|
+
request: { paste: "allUsingSourceTheme" },
|
|
20
|
+
},
|
|
21
|
+
{ id: "noBorders", label: "No Borders", key: "b", group: "Paste", request: { paste: "allExceptBorders" } },
|
|
22
|
+
{
|
|
23
|
+
id: "keepSourceColumnWidths",
|
|
24
|
+
label: "Keep Source Column Widths",
|
|
25
|
+
key: "w",
|
|
26
|
+
group: "Paste",
|
|
27
|
+
request: { paste: "all", keepSourceColumnWidths: true },
|
|
28
|
+
},
|
|
29
|
+
{ id: "transpose", label: "Transpose", key: "t", group: "Paste", request: { paste: "all", transpose: true } },
|
|
30
|
+
{ id: "values", label: "Values", key: "v", group: "Paste Values", request: { paste: "values" } },
|
|
31
|
+
{
|
|
32
|
+
id: "valuesAndNumberFormats",
|
|
33
|
+
label: "Values & Number Formatting",
|
|
34
|
+
key: "a",
|
|
35
|
+
group: "Paste Values",
|
|
36
|
+
request: { paste: "valuesAndNumberFormats" },
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
id: "valuesAndSourceFormatting",
|
|
40
|
+
label: "Values & Source Formatting",
|
|
41
|
+
key: "e",
|
|
42
|
+
group: "Paste Values",
|
|
43
|
+
request: { paste: "valuesAndSourceFormatting" },
|
|
44
|
+
},
|
|
45
|
+
{ id: "formatting", label: "Formatting", key: "r", group: "Other Paste Options", request: { paste: "formats" } },
|
|
46
|
+
{ id: "pasteLink", label: "Paste Link", key: "n", group: "Other Paste Options", request: { link: true } },
|
|
47
|
+
];
|
|
48
|
+
exports.PASTE_OPTION_GROUPS = ["Paste", "Paste Values", "Other Paste Options"];
|
|
49
|
+
/**
|
|
50
|
+
* The gallery entry a paste request corresponds to, so the button shows which
|
|
51
|
+
* option is applied (a plain Ctrl+V is "Paste"). `undefined` for a Paste
|
|
52
|
+
* Special combination the gallery has no entry for (Operation, Skip blanks…).
|
|
53
|
+
*/
|
|
54
|
+
var pasteOptionForRequest = function (request) {
|
|
55
|
+
var _a, _b;
|
|
56
|
+
if (!request)
|
|
57
|
+
return "paste";
|
|
58
|
+
var extra = request.operation || request.skipBlanks;
|
|
59
|
+
if (extra)
|
|
60
|
+
return undefined;
|
|
61
|
+
var paste = (_a = request.paste) !== null && _a !== void 0 ? _a : "all";
|
|
62
|
+
return (_b = exports.PASTE_OPTIONS.find(function (option) {
|
|
63
|
+
var _a;
|
|
64
|
+
return ((_a = option.request.paste) !== null && _a !== void 0 ? _a : "all") === paste &&
|
|
65
|
+
Boolean(option.request.transpose) === Boolean(request.transpose) &&
|
|
66
|
+
Boolean(option.request.keepSourceColumnWidths) === Boolean(request.keepSourceColumnWidths) &&
|
|
67
|
+
Boolean(option.request.link) === Boolean(request.link);
|
|
68
|
+
})) === null || _b === void 0 ? void 0 : _b.id;
|
|
69
|
+
};
|
|
70
|
+
exports.pasteOptionForRequest = pasteOptionForRequest;
|
|
@@ -3,10 +3,11 @@ import type { SelectionProps } from "@rowsncolumns/grid";
|
|
|
3
3
|
import type { ElementType } from "react";
|
|
4
4
|
import type { Maybe, PivotTable, SheetRange } from "../../types";
|
|
5
5
|
import type { AutoFillType, TableView } from "../../types";
|
|
6
|
+
import type { CalculatedColumnSmartTagProps } from "../calculated-column-smart-tag";
|
|
6
7
|
import type { SelectionAttributes } from "../canvas-grid/typings";
|
|
8
|
+
import type { ErrorCheckSmartTagProps } from "../error-check-smart-tag";
|
|
7
9
|
import type { InsertOptionsSmartTagProps } from "../insert-options-smart-tag";
|
|
8
10
|
import type { TableAutoExpansionSmartTagProps } from "../table-auto-expansion-smart-tag";
|
|
9
|
-
import type { CalculatedColumnSmartTagProps } from "../calculated-column-smart-tag";
|
|
10
11
|
import type { FillOptionsMenuProps } from "./fill-options-menu";
|
|
11
12
|
import type { MagicFillContentProps, MagicFillProps } from "./magic-fill";
|
|
12
13
|
import type { PasteMenuProps } from "./paste-menu";
|
|
@@ -64,8 +65,18 @@ export type SelectionNewProps = SelectionProps<SelectionAttributes> & {
|
|
|
64
65
|
*/
|
|
65
66
|
calculatedColumnFill?: Pick<CalculatedColumnSmartTagProps, "kind" | "canStop">;
|
|
66
67
|
onChooseCalculatedColumnOption?: CalculatedColumnSmartTagProps["onChooseOption"];
|
|
68
|
+
/**
|
|
69
|
+
* Excel's error-checking smart tag for THIS selection (present only on the active cell, when it
|
|
70
|
+
* carries the green ◤).
|
|
71
|
+
*/
|
|
72
|
+
errorCheck?: Pick<ErrorCheckSmartTagProps, "kind" | "errorName">;
|
|
73
|
+
errorCheckMenuOpen?: boolean;
|
|
74
|
+
onErrorCheckMenuOpenChange?: ErrorCheckSmartTagProps["onOpenChange"];
|
|
75
|
+
onChooseErrorCheckOption?: ErrorCheckSmartTagProps["onChooseOption"];
|
|
67
76
|
SuggestionAction?: React.ComponentType<SuggestionActionProps>;
|
|
68
77
|
readonly?: boolean;
|
|
78
|
+
/** Paste Options gallery choice (re-applies the last paste). */
|
|
79
|
+
onChoosePasteOption?: PasteMenuProps["onChoosePasteOption"];
|
|
69
80
|
showPasteMenu?: boolean;
|
|
70
81
|
sheetId: number;
|
|
71
82
|
onSplitTextToColumns: (delimiter?: string) => void;
|
|
@@ -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,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../components/selection/types.ts"],"names":[],"mappings":"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"}
|