@rowsncolumns/spreadsheet 10.2.73 → 10.2.75
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/evaluate-formula.d.ts +17 -0
- package/dist/cjs/api/evaluate-formula.d.ts.map +1 -0
- package/dist/cjs/api/evaluate-formula.js +141 -0
- 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/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/go-to.d.ts +19 -0
- package/dist/cjs/api/go-to.d.ts.map +1 -0
- package/dist/cjs/api/go-to.js +49 -0
- 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/evaluate-formula-dialog.atom.d.ts +36 -0
- package/dist/cjs/atoms/evaluate-formula-dialog.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/evaluate-formula-dialog.atom.js +36 -0
- package/dist/cjs/atoms/go-to-dialog.atom.d.ts +46 -0
- package/dist/cjs/atoms/go-to-dialog.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/go-to-dialog.atom.js +34 -0
- 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 +5 -0
- package/dist/cjs/atoms/index.d.ts.map +1 -1
- package/dist/cjs/atoms/index.js +5 -0
- package/dist/cjs/atoms/paste-special-dialog.atom.d.ts +29 -0
- package/dist/cjs/atoms/paste-special-dialog.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/paste-special-dialog.atom.js +34 -0
- package/dist/cjs/atoms/remove-duplicates-dialog.atom.d.ts +45 -0
- package/dist/cjs/atoms/remove-duplicates-dialog.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/remove-duplicates-dialog.atom.js +37 -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 +208 -19
- package/dist/cjs/components/canvas-grid/typings.d.ts +72 -9
- 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/index.d.ts.map +1 -1
- package/dist/cjs/components/cell-editor/index.js +2 -1
- package/dist/cjs/components/context-menu/index.d.ts +21 -3
- package/dist/cjs/components/context-menu/index.d.ts.map +1 -1
- package/dist/cjs/components/context-menu/index.js +256 -6
- package/dist/cjs/components/context-menu/total-row-functions.d.ts +32 -0
- package/dist/cjs/components/context-menu/total-row-functions.d.ts.map +1 -0
- package/dist/cjs/components/context-menu/total-row-functions.js +62 -0
- 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/evaluate-formula-dialog/index.d.ts +34 -0
- package/dist/cjs/components/evaluate-formula-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/evaluate-formula-dialog/index.js +106 -0
- package/dist/cjs/components/go-to-dialog/index.d.ts +45 -0
- package/dist/cjs/components/go-to-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/go-to-dialog/index.js +136 -0
- 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/paste-special-dialog/index.d.ts +29 -0
- package/dist/cjs/components/paste-special-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/paste-special-dialog/index.js +99 -0
- package/dist/cjs/components/remove-duplicates-dialog/index.d.ts +37 -0
- package/dist/cjs/components/remove-duplicates-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/remove-duplicates-dialog/index.js +91 -0
- 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 +2 -0
- package/dist/cjs/components/toolbar/index.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/index.js +2 -0
- 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/toolbar/text-rotation-selector.d.ts +29 -0
- package/dist/cjs/components/toolbar/text-rotation-selector.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/text-rotation-selector.js +78 -0
- package/dist/cjs/components/toolbar/text-wrap-selector.d.ts +7 -1
- package/dist/cjs/components/toolbar/text-wrap-selector.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/text-wrap-selector.js +10 -3
- 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-copy-paste-cut.d.ts +20 -1
- package/dist/cjs/hooks/use-copy-paste-cut.d.ts.map +1 -1
- package/dist/cjs/hooks/use-copy-paste-cut.js +25 -20
- 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 +17 -2
- package/dist/cjs/hooks/use-keyboard-handler.d.ts.map +1 -1
- package/dist/cjs/hooks/use-keyboard-handler.js +206 -31
- package/dist/cjs/index.d.ts +14 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +15 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/cjs/types.d.ts +289 -4
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/cjs/types.js +19 -1
- package/dist/esm/api/evaluate-formula.d.ts +17 -0
- package/dist/esm/api/evaluate-formula.d.ts.map +1 -0
- package/dist/esm/api/evaluate-formula.js +109 -0
- 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/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/go-to.d.ts +19 -0
- package/dist/esm/api/go-to.d.ts.map +1 -0
- package/dist/esm/api/go-to.js +41 -0
- 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/evaluate-formula-dialog.atom.d.ts +36 -0
- package/dist/esm/atoms/evaluate-formula-dialog.atom.d.ts.map +1 -0
- package/dist/esm/atoms/evaluate-formula-dialog.atom.js +25 -0
- package/dist/esm/atoms/go-to-dialog.atom.d.ts +46 -0
- package/dist/esm/atoms/go-to-dialog.atom.d.ts.map +1 -0
- package/dist/esm/atoms/go-to-dialog.atom.js +25 -0
- 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 +5 -0
- package/dist/esm/atoms/index.d.ts.map +1 -1
- package/dist/esm/atoms/index.js +5 -0
- package/dist/esm/atoms/paste-special-dialog.atom.d.ts +29 -0
- package/dist/esm/atoms/paste-special-dialog.atom.d.ts.map +1 -0
- package/dist/esm/atoms/paste-special-dialog.atom.js +25 -0
- package/dist/esm/atoms/remove-duplicates-dialog.atom.d.ts +45 -0
- package/dist/esm/atoms/remove-duplicates-dialog.atom.d.ts.map +1 -0
- package/dist/esm/atoms/remove-duplicates-dialog.atom.js +26 -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 +202 -19
- package/dist/esm/components/canvas-grid/typings.d.ts +72 -9
- 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/index.d.ts.map +1 -1
- package/dist/esm/components/cell-editor/index.js +2 -1
- package/dist/esm/components/context-menu/index.d.ts +21 -3
- package/dist/esm/components/context-menu/index.d.ts.map +1 -1
- package/dist/esm/components/context-menu/index.js +251 -9
- package/dist/esm/components/context-menu/total-row-functions.d.ts +32 -0
- package/dist/esm/components/context-menu/total-row-functions.d.ts.map +1 -0
- package/dist/esm/components/context-menu/total-row-functions.js +50 -0
- 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/evaluate-formula-dialog/index.d.ts +34 -0
- package/dist/esm/components/evaluate-formula-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/evaluate-formula-dialog/index.js +86 -0
- package/dist/esm/components/go-to-dialog/index.d.ts +45 -0
- package/dist/esm/components/go-to-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/go-to-dialog/index.js +124 -0
- 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/paste-special-dialog/index.d.ts +29 -0
- package/dist/esm/components/paste-special-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/paste-special-dialog/index.js +90 -0
- package/dist/esm/components/remove-duplicates-dialog/index.d.ts +37 -0
- package/dist/esm/components/remove-duplicates-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/remove-duplicates-dialog/index.js +82 -0
- 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 +2 -0
- package/dist/esm/components/toolbar/index.d.ts.map +1 -1
- package/dist/esm/components/toolbar/index.js +2 -0
- 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/toolbar/text-rotation-selector.d.ts +29 -0
- package/dist/esm/components/toolbar/text-rotation-selector.d.ts.map +1 -0
- package/dist/esm/components/toolbar/text-rotation-selector.js +71 -0
- package/dist/esm/components/toolbar/text-wrap-selector.d.ts +7 -1
- package/dist/esm/components/toolbar/text-wrap-selector.d.ts.map +1 -1
- package/dist/esm/components/toolbar/text-wrap-selector.js +10 -3
- 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-copy-paste-cut.d.ts +20 -1
- package/dist/esm/hooks/use-copy-paste-cut.d.ts.map +1 -1
- package/dist/esm/hooks/use-copy-paste-cut.js +8 -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 +17 -2
- package/dist/esm/hooks/use-keyboard-handler.d.ts.map +1 -1
- package/dist/esm/hooks/use-keyboard-handler.js +193 -31
- package/dist/esm/index.d.ts +14 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +13 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/types.d.ts +289 -4
- 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 +6 -6
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TextRotationSelector = exports.clampTextRotation = exports.MAX_TEXT_ROTATION = exports.MIN_TEXT_ROTATION = exports.TEXT_ROTATION_PRESETS = 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 atoms_1 = require("../../atoms");
|
|
9
|
+
/**
|
|
10
|
+
* Excel's Orientation menu. Degrees are counter-clockwise positive (Excel's
|
|
11
|
+
* convention, what the renderer and the xlsx round-trip use), so "clockwise"
|
|
12
|
+
* presets are negative. `0` is horizontal — used instead of clearing the
|
|
13
|
+
* property so both engines apply it as a plain format write.
|
|
14
|
+
*/
|
|
15
|
+
exports.TEXT_ROTATION_PRESETS = [
|
|
16
|
+
{ label: "Horizontal", value: 0 },
|
|
17
|
+
{ label: "Angle counterclockwise", value: 45 },
|
|
18
|
+
{ label: "Angle clockwise", value: -45 },
|
|
19
|
+
{ label: "Vertical text", value: "vertical" },
|
|
20
|
+
{ label: "Rotate text up", value: 90 },
|
|
21
|
+
{ label: "Rotate text down", value: -90 },
|
|
22
|
+
];
|
|
23
|
+
exports.MIN_TEXT_ROTATION = -90;
|
|
24
|
+
exports.MAX_TEXT_ROTATION = 90;
|
|
25
|
+
/**
|
|
26
|
+
* Coerce free-form degree input into the supported -90…90 range. Returns
|
|
27
|
+
* `undefined` for input that is not a finite number.
|
|
28
|
+
*/
|
|
29
|
+
var clampTextRotation = function (input) {
|
|
30
|
+
var value = typeof input === "number" ? input : Number(input);
|
|
31
|
+
if (!Number.isFinite(value)) {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
return Math.max(exports.MIN_TEXT_ROTATION, Math.min(exports.MAX_TEXT_ROTATION, value));
|
|
35
|
+
};
|
|
36
|
+
exports.clampTextRotation = clampTextRotation;
|
|
37
|
+
var TextRotationSelector = function (_a) {
|
|
38
|
+
var value = _a.value, onChange = _a.onChange, disabled = _a.disabled;
|
|
39
|
+
var focusSheet = (0, atoms_1.useFocusSheet)();
|
|
40
|
+
var _b = tslib_1.__read((0, react_1.useState)(false), 2), isOpen = _b[0], onOpenChange = _b[1];
|
|
41
|
+
var current = value !== null && value !== void 0 ? value : 0;
|
|
42
|
+
var _c = tslib_1.__read((0, react_1.useState)(typeof current === "number" ? String(current) : ""), 2), degrees = _c[0], setDegrees = _c[1];
|
|
43
|
+
// Reflect the active cell's rotation in the custom-degrees field whenever
|
|
44
|
+
// the popover opens on a different value.
|
|
45
|
+
(0, react_1.useEffect)(function () {
|
|
46
|
+
if (isOpen) {
|
|
47
|
+
setDegrees(typeof current === "number" ? String(current) : "");
|
|
48
|
+
}
|
|
49
|
+
}, [isOpen, current]);
|
|
50
|
+
var close = function () { return onOpenChange(false); };
|
|
51
|
+
var apply = function (next) {
|
|
52
|
+
onChange(next);
|
|
53
|
+
focusSheet === null || focusSheet === void 0 ? void 0 : focusSheet();
|
|
54
|
+
close();
|
|
55
|
+
};
|
|
56
|
+
var applyDegrees = function () {
|
|
57
|
+
var next = (0, exports.clampTextRotation)(degrees);
|
|
58
|
+
if (next !== undefined) {
|
|
59
|
+
apply(next);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
return (react_1.default.createElement(ui_1.Popover, { open: isOpen, onOpenChange: onOpenChange },
|
|
63
|
+
react_1.default.createElement(ui_1.PopoverTrigger, { asChild: true },
|
|
64
|
+
react_1.default.createElement(ui_1.IconButton, { size: "lg", tooltip: "Text orientation", "aria-label": "Text orientation", disabled: disabled },
|
|
65
|
+
react_1.default.createElement(icons_1.RotateCounterClockwiseIcon, null),
|
|
66
|
+
react_1.default.createElement(icons_1.MdOutlineArrowDropDown, null))),
|
|
67
|
+
react_1.default.createElement(ui_1.PopoverContent, { align: "start" },
|
|
68
|
+
react_1.default.createElement(ui_1.Stack, { direction: "vertical", className: "gap-1 min-w-[200px]" },
|
|
69
|
+
exports.TEXT_ROTATION_PRESETS.map(function (preset) { return (react_1.default.createElement(ui_1.Button, { key: preset.label, size: "xs", variant: current === preset.value ? "primary" : "ghost", className: "justify-start", "aria-pressed": current === preset.value, onClick: function () { return apply(preset.value); } }, preset.label)); }),
|
|
70
|
+
react_1.default.createElement("form", { className: "flex items-center gap-1 pt-1 m-0", onSubmit: function (e) {
|
|
71
|
+
e.preventDefault();
|
|
72
|
+
applyDegrees();
|
|
73
|
+
} },
|
|
74
|
+
react_1.default.createElement("label", { className: "font-system text-xs shrink-0", htmlFor: "rnc-text-rotation-degrees" }, "Degrees"),
|
|
75
|
+
react_1.default.createElement(ui_1.Input, { id: "rnc-text-rotation-degrees", type: "number", min: exports.MIN_TEXT_ROTATION, max: exports.MAX_TEXT_ROTATION, step: 1, value: degrees, onChange: function (e) { return setDegrees(e.target.value); }, className: "w-[72px]" }),
|
|
76
|
+
react_1.default.createElement(ui_1.Button, { size: "xs", type: "submit" }, "Apply"))))));
|
|
77
|
+
};
|
|
78
|
+
exports.TextRotationSelector = TextRotationSelector;
|
|
@@ -3,7 +3,13 @@ import type { WrapStrategy } from "../../types";
|
|
|
3
3
|
type TextWrapSelectorProps = {
|
|
4
4
|
value?: WrapStrategy | null;
|
|
5
5
|
onChange(value: WrapStrategy): void;
|
|
6
|
+
/**
|
|
7
|
+
* Excel's "Shrink to fit": scale the font down so the text fits the cell.
|
|
8
|
+
* The toggle only renders when `onChangeShrinkToFit` is provided.
|
|
9
|
+
*/
|
|
10
|
+
shrinkToFit?: boolean | null;
|
|
11
|
+
onChangeShrinkToFit?(value: boolean): void;
|
|
6
12
|
};
|
|
7
|
-
export declare const TextWrapSelector: ({ value, onChange, }: TextWrapSelectorProps) => React.JSX.Element;
|
|
13
|
+
export declare const TextWrapSelector: ({ value, onChange, shrinkToFit, onChangeShrinkToFit, }: TextWrapSelectorProps) => React.JSX.Element;
|
|
8
14
|
export {};
|
|
9
15
|
//# sourceMappingURL=text-wrap-selector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"text-wrap-selector.d.ts","sourceRoot":"","sources":["../../../../components/toolbar/text-wrap-selector.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,KAAK,qBAAqB,GAAG;IAC3B,KAAK,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"text-wrap-selector.d.ts","sourceRoot":"","sources":["../../../../components/toolbar/text-wrap-selector.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,KAAK,qBAAqB,GAAG;IAC3B,KAAK,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IACpC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,mBAAmB,CAAC,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;CAC5C,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,wDAK9B,qBAAqB,sBAoFvB,CAAC"}
|
|
@@ -8,13 +8,13 @@ var ui_1 = require("@rowsncolumns/ui");
|
|
|
8
8
|
var react_1 = tslib_1.__importStar(require("react"));
|
|
9
9
|
var atoms_1 = require("../../atoms");
|
|
10
10
|
var TextWrapSelector = function (_a) {
|
|
11
|
-
var _b = _a.value, value = _b === void 0 ? "overflow" : _b, onChange = _a.onChange;
|
|
11
|
+
var _b = _a.value, value = _b === void 0 ? "overflow" : _b, onChange = _a.onChange, shrinkToFit = _a.shrinkToFit, onChangeShrinkToFit = _a.onChangeShrinkToFit;
|
|
12
12
|
var focusSheet = (0, atoms_1.useFocusSheet)();
|
|
13
13
|
var _c = tslib_1.__read((0, react_1.useState)(false), 2), isOpen = _c[0], onOpenChange = _c[1];
|
|
14
14
|
var close = function () { return onOpenChange(false); };
|
|
15
15
|
return (react_1.default.createElement(ui_1.Popover, { open: isOpen, onOpenChange: onOpenChange },
|
|
16
16
|
react_1.default.createElement(ui_1.PopoverTrigger, { asChild: true },
|
|
17
|
-
react_1.default.createElement(ui_1.IconButton, { size: "lg", tooltip: "Text wrapping" },
|
|
17
|
+
react_1.default.createElement(ui_1.IconButton, { size: "lg", tooltip: "Text wrapping", "aria-label": "Text wrapping" },
|
|
18
18
|
value === "overflow" ? (react_1.default.createElement(icons_1.TextOverflowIcon, null)) : value === "wrap" ? (react_1.default.createElement(icons_1.TextOverflowWrapIcon, null)) : (react_1.default.createElement(icons_1.TextoverflowClipIcon, null)),
|
|
19
19
|
react_1.default.createElement(icons_2.MdOutlineArrowDropDown, null))),
|
|
20
20
|
react_1.default.createElement(ui_1.PopoverContent, { align: "start" },
|
|
@@ -36,6 +36,13 @@ var TextWrapSelector = function (_a) {
|
|
|
36
36
|
focusSheet === null || focusSheet === void 0 ? void 0 : focusSheet();
|
|
37
37
|
close();
|
|
38
38
|
} },
|
|
39
|
-
react_1.default.createElement(icons_1.TextoverflowClipIcon, null))
|
|
39
|
+
react_1.default.createElement(icons_1.TextoverflowClipIcon, null)),
|
|
40
|
+
onChangeShrinkToFit ? (react_1.default.createElement(ui_1.IconButton, { size: "lg", isActive: !!shrinkToFit, "aria-pressed": !!shrinkToFit, tooltip: "Shrink text to fit the cell", "aria-label": "Shrink text to fit the cell", className: "w-full justify-start gap-1", onClick: function () {
|
|
41
|
+
onChangeShrinkToFit(!shrinkToFit);
|
|
42
|
+
focusSheet === null || focusSheet === void 0 ? void 0 : focusSheet();
|
|
43
|
+
close();
|
|
44
|
+
} },
|
|
45
|
+
react_1.default.createElement(icons_1.TextoverflowClipIcon, null),
|
|
46
|
+
react_1.default.createElement("span", { className: "text-xs" }, "Shrink to fit"))) : null))));
|
|
40
47
|
};
|
|
41
48
|
exports.TextWrapSelector = TextWrapSelector;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import { type WatchWindowContext, type WatchWindowEntry } from "../../atoms/watch-window.atom";
|
|
3
|
+
import type { SheetCoordinate } from "../../types";
|
|
4
|
+
export type WatchWindowProps = {
|
|
5
|
+
entries: WatchWindowEntry[];
|
|
6
|
+
context: WatchWindowContext | null;
|
|
7
|
+
onRemove(cell: SheetCoordinate): void;
|
|
8
|
+
onClose(): void;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Excel's Watch Window: a floating list of cells with their sheet, address,
|
|
12
|
+
* current value and formula, refreshed with the grid. Double-click a row to
|
|
13
|
+
* jump to the cell. Presentational; {@link WatchWindowHost} wires the atoms.
|
|
14
|
+
*/
|
|
15
|
+
export declare const WatchWindow: React.MemoExoticComponent<({ entries, context, onRemove, onClose }: WatchWindowProps) => React.JSX.Element>;
|
|
16
|
+
/**
|
|
17
|
+
* Host-mounted, atom-driven Watch Window. Mount once alongside the other
|
|
18
|
+
* dialogs; the grid's context menu offers "Add to Watch Window" while a
|
|
19
|
+
* host is mounted and republishes live getters on each render.
|
|
20
|
+
*/
|
|
21
|
+
export declare const WatchWindowHost: {
|
|
22
|
+
(): React.JSX.Element | null;
|
|
23
|
+
displayName: string;
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/watch-window/index.tsx"],"names":[],"mappings":"AAGA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAEjD,OAAO,EAML,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACtB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,OAAO,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CAAC;IACtC,OAAO,IAAI,IAAI,CAAC;CACjB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,WAAW,sEACoB,gBAAgB,uBA6E3D,CAAC;AAIF;;;;GAIG;AACH,eAAO,MAAM,eAAe;;;CAgB3B,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WatchWindowHost = exports.WatchWindow = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var ui_1 = require("@rowsncolumns/ui");
|
|
6
|
+
var icons_1 = require("@rowsncolumns/icons");
|
|
7
|
+
var utils_1 = require("@rowsncolumns/utils");
|
|
8
|
+
var react_1 = tslib_1.__importStar(require("react"));
|
|
9
|
+
var watch_window_atom_1 = require("../../atoms/watch-window.atom");
|
|
10
|
+
/**
|
|
11
|
+
* Excel's Watch Window: a floating list of cells with their sheet, address,
|
|
12
|
+
* current value and formula, refreshed with the grid. Double-click a row to
|
|
13
|
+
* jump to the cell. Presentational; {@link WatchWindowHost} wires the atoms.
|
|
14
|
+
*/
|
|
15
|
+
exports.WatchWindow = (0, react_1.memo)(function (_a) {
|
|
16
|
+
var entries = _a.entries, context = _a.context, onRemove = _a.onRemove, onClose = _a.onClose;
|
|
17
|
+
return (react_1.default.createElement("div", { role: "dialog", "aria-label": "Watch Window", className: "fixed bottom-4 right-4 z-50 w-[420px] max-w-[92vw] rounded-md border border-rnc-border bg-rnc-background text-rnc-foreground shadow-lg pointer-events-auto" },
|
|
18
|
+
react_1.default.createElement("div", { className: "flex items-center justify-between px-3 py-2 border-b border-rnc-border" },
|
|
19
|
+
react_1.default.createElement("span", { className: "text-sm font-medium" }, "Watch Window"),
|
|
20
|
+
react_1.default.createElement(ui_1.IconButton, { "aria-label": "Close Watch Window", onClick: onClose },
|
|
21
|
+
react_1.default.createElement(icons_1.Cross1Icon, null))),
|
|
22
|
+
entries.length === 0 ? (react_1.default.createElement("div", { className: "px-3 py-4 text-xs text-rnc-foreground/60" }, "No cells are being watched. Right-click a cell \u2192 Add to Watch Window.")) : (react_1.default.createElement("table", { className: "w-full text-xs border-collapse" },
|
|
23
|
+
react_1.default.createElement("thead", null,
|
|
24
|
+
react_1.default.createElement("tr", { className: "text-left text-rnc-foreground/70" },
|
|
25
|
+
react_1.default.createElement("th", { className: "px-3 py-1 font-medium" }, "Sheet"),
|
|
26
|
+
react_1.default.createElement("th", { className: "px-2 py-1 font-medium" }, "Cell"),
|
|
27
|
+
react_1.default.createElement("th", { className: "px-2 py-1 font-medium" }, "Value"),
|
|
28
|
+
react_1.default.createElement("th", { className: "px-2 py-1 font-medium" }, "Formula"),
|
|
29
|
+
react_1.default.createElement("th", { className: "px-2 py-1" }))),
|
|
30
|
+
react_1.default.createElement("tbody", null, entries.map(function (entry) {
|
|
31
|
+
var _a, _b, _c;
|
|
32
|
+
var address = (_a = (0, utils_1.cellToAddress)(entry)) !== null && _a !== void 0 ? _a : "";
|
|
33
|
+
var sheetName = (_c = (_b = context === null || context === void 0 ? void 0 : context.getSheetName) === null || _b === void 0 ? void 0 : _b.call(context, entry.sheetId)) !== null && _c !== void 0 ? _c : String(entry.sheetId);
|
|
34
|
+
var value = context === null || context === void 0 ? void 0 : context.getFormattedValue(entry.sheetId, entry.rowIndex, entry.columnIndex);
|
|
35
|
+
var formula = context === null || context === void 0 ? void 0 : context.getFormula(entry.sheetId, entry.rowIndex, entry.columnIndex);
|
|
36
|
+
return (react_1.default.createElement("tr", { key: "".concat(entry.sheetId, ":").concat(entry.rowIndex, ":").concat(entry.columnIndex), className: "cursor-default hover:bg-rnc-accent", onDoubleClick: function () { return context === null || context === void 0 ? void 0 : context.onNavigate(entry); }, "data-testid": "watch-row" },
|
|
37
|
+
react_1.default.createElement("td", { className: "px-3 py-1 truncate max-w-[110px]" }, sheetName),
|
|
38
|
+
react_1.default.createElement("td", { className: "px-2 py-1 font-mono" }, address),
|
|
39
|
+
react_1.default.createElement("td", { className: "px-2 py-1 truncate max-w-[120px]" }, value !== null && value !== void 0 ? value : ""),
|
|
40
|
+
react_1.default.createElement("td", { className: "px-2 py-1 font-mono truncate max-w-[140px]" }, formula !== null && formula !== void 0 ? formula : ""),
|
|
41
|
+
react_1.default.createElement("td", { className: "px-2 py-1 text-right" },
|
|
42
|
+
react_1.default.createElement(ui_1.Button, { variant: "ghost", size: "xs", "aria-label": "Remove watch ".concat(sheetName, "!").concat(address), onClick: function () { return onRemove(entry); } }, "Delete"))));
|
|
43
|
+
}))))));
|
|
44
|
+
});
|
|
45
|
+
exports.WatchWindow.displayName = "WatchWindow";
|
|
46
|
+
/**
|
|
47
|
+
* Host-mounted, atom-driven Watch Window. Mount once alongside the other
|
|
48
|
+
* dialogs; the grid's context menu offers "Add to Watch Window" while a
|
|
49
|
+
* host is mounted and republishes live getters on each render.
|
|
50
|
+
*/
|
|
51
|
+
var WatchWindowHost = function () {
|
|
52
|
+
(0, watch_window_atom_1.useRegisterWatchWindowHost)();
|
|
53
|
+
var _a = tslib_1.__read((0, watch_window_atom_1.useWatchWindowEntries)(), 1), entries = _a[0];
|
|
54
|
+
var _b = tslib_1.__read((0, watch_window_atom_1.useWatchWindowOpen)(), 2), open = _b[0], setOpen = _b[1];
|
|
55
|
+
var context = (0, watch_window_atom_1.useWatchWindowContext)();
|
|
56
|
+
var removeWatch = (0, watch_window_atom_1.useRemoveWatch)();
|
|
57
|
+
var close = (0, react_1.useCallback)(function () { return setOpen(false); }, [setOpen]);
|
|
58
|
+
if (!open)
|
|
59
|
+
return null;
|
|
60
|
+
return (react_1.default.createElement(exports.WatchWindow, { entries: entries, context: context, onRemove: removeWatch, onClose: close }));
|
|
61
|
+
};
|
|
62
|
+
exports.WatchWindowHost = WatchWindowHost;
|
|
63
|
+
exports.WatchWindowHost.displayName = "WatchWindowHost";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-cell-renderer.d.ts","sourceRoot":"","sources":["../../../hooks/use-cell-renderer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AACjE,OAAO,KAAsB,MAAM,OAAO,CAAC;AAI3C,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EACjB,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"use-cell-renderer.d.ts","sourceRoot":"","sources":["../../../hooks/use-cell-renderer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ var utils_1 = require("@rowsncolumns/utils");
|
|
|
7
7
|
var react_1 = tslib_1.__importStar(require("react"));
|
|
8
8
|
var colors_1 = require("../api/colors");
|
|
9
9
|
var validation_1 = require("../api/validation");
|
|
10
|
+
var alignment_1 = require("../components/cell/alignment");
|
|
10
11
|
var cell_background_1 = require("../components/cell/cell-background");
|
|
11
12
|
var cell_diff_1 = require("../components/cell-diff");
|
|
12
13
|
var cell_overlay_1 = require("../components/cell-overlay");
|
|
@@ -56,10 +57,17 @@ var useCellRenderer = function (_a) {
|
|
|
56
57
|
// Calculated column
|
|
57
58
|
var isCalculatedColumn = isTableHeader(rowIndex, columnIndex) &&
|
|
58
59
|
isCalculatedColumnHeader(rowIndex, columnIndex);
|
|
59
|
-
// Cell overflow
|
|
60
|
+
// Cell overflow. Excel's justify / distributed alignments wrap inside
|
|
61
|
+
// the cell's own width even without `wrapStrategy: "wrap"`, and fill
|
|
62
|
+
// repeats the text to the cell edge — none of them ever spill into
|
|
63
|
+
// the neighbouring cells.
|
|
60
64
|
var wrapStrategy = effectiveCellFormat === null || effectiveCellFormat === void 0 ? void 0 : effectiveCellFormat.wrapStrategy;
|
|
61
|
-
var
|
|
62
|
-
var
|
|
65
|
+
var wrapsByAlignment = (0, alignment_1.alignmentImpliesWrap)(horizontalAlignment);
|
|
66
|
+
var fillsCell = (0, alignment_1.isFillAlignment)(horizontalAlignment);
|
|
67
|
+
var shouldWrap = wrapStrategy === "wrap" || wrapsByAlignment;
|
|
68
|
+
var isWrapEnabled = (wrapStrategy !== null && wrapStrategy !== void 0 ? wrapStrategy : "overflow") === "overflow" &&
|
|
69
|
+
!wrapsByAlignment &&
|
|
70
|
+
!fillsCell;
|
|
63
71
|
// Normalize display value for both rendering and overflow calculation
|
|
64
72
|
var displayFormattedValue = (0, helpers_1.normalizeDisplayText)(formattedValue, shouldWrap);
|
|
65
73
|
var shouldRecalcTextWidth = isWrapEnabled || wrapStrategy === "clip";
|
|
@@ -111,9 +119,12 @@ var useCellRenderer = function (_a) {
|
|
|
111
119
|
}
|
|
112
120
|
// shrinkToFit needs the natural text width to compare against the
|
|
113
121
|
// cell's available width; rotated text uses it to size the (unrotated)
|
|
114
|
-
// text box that gets pivoted around the cell edge
|
|
115
|
-
//
|
|
116
|
-
|
|
122
|
+
// text box that gets pivoted around the cell edge; fill alignment
|
|
123
|
+
// repeats the text `floor(cell / natural)` times. Without this, the
|
|
124
|
+
// Konva Text renders with width 0 (rotation) or a single unfilled copy.
|
|
125
|
+
var textWidth = (overflowRight && shouldRecalcTextWidth) ||
|
|
126
|
+
containsTextInside ||
|
|
127
|
+
fillsCell
|
|
117
128
|
? getTextDimension(sheetId, rowIndex, columnIndex, displayFormattedValue).width
|
|
118
129
|
: 0;
|
|
119
130
|
var enableOverflow = shouldOverflow && cellWidth > props.width;
|
|
@@ -31,11 +31,30 @@ export type UseCopyPasteCutProps = {
|
|
|
31
31
|
onCut: CanvasGridProps["onCut"];
|
|
32
32
|
};
|
|
33
33
|
export type PasteSpecialType = "Transposed" | "Formatting" | "Value" | "Formula" | "Link";
|
|
34
|
+
/** Excel Paste Special → Operation: combine each pasted cell with the cell it lands on. */
|
|
35
|
+
export type PasteSpecialOperation = "add" | "subtract" | "multiply" | "divide";
|
|
36
|
+
/**
|
|
37
|
+
* Excel's Paste Special dialog as one request. `paste` picks what is
|
|
38
|
+
* pasted (all / values / formulas / formats), `operation` combines the pasted
|
|
39
|
+
* value with the destination (`=dest+source`, formulas stay formulas),
|
|
40
|
+
* `skipBlanks` leaves the destination untouched where the clipboard cell is
|
|
41
|
+
* empty and `transpose` swaps rows and columns. Every flag composes with the
|
|
42
|
+
* others; the legacy single-mode {@link PasteSpecialType} strings map onto
|
|
43
|
+
* the same fields.
|
|
44
|
+
*/
|
|
45
|
+
export type PasteSpecialOptions = {
|
|
46
|
+
paste?: "all" | "values" | "formulas" | "formats";
|
|
47
|
+
operation?: PasteSpecialOperation;
|
|
48
|
+
skipBlanks?: boolean;
|
|
49
|
+
transpose?: boolean;
|
|
50
|
+
};
|
|
51
|
+
/** Argument accepted by `paste()` — a legacy single mode or the full dialog request. */
|
|
52
|
+
export type PasteSpecialRequest = PasteSpecialType | PasteSpecialOptions;
|
|
34
53
|
export declare const useCopyPasteCut: ({ selections, activeCell, sheetId, onPaste, onCopy, onCut, focusSheet, }: UseCopyPasteCutProps) => {
|
|
35
54
|
selections: SelectionArea[];
|
|
36
55
|
copy: () => void;
|
|
37
56
|
cut: () => void;
|
|
38
|
-
paste: (
|
|
57
|
+
paste: (pasteSpecial?: PasteSpecialRequest) => Promise<void>;
|
|
39
58
|
copiedSelections: any[];
|
|
40
59
|
clearCopiedSelections: () => void;
|
|
41
60
|
onInternalCopy: (e: ClipboardEvent, isCutOperation?: boolean) => boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-copy-paste-cut.d.ts","sourceRoot":"","sources":["../../../hooks/use-copy-paste-cut.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAYvE,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,mCAAmC,CAAC;AAK3C,MAAM,MAAM,oBAAoB,GAAG;IACjC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,UAAU,EAAE,aAAa,CAAC;IAC1B;;OAEG;IACH,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B;;OAEG;IACH,UAAU,IAAI,IAAI,CAAC;IACnB;;OAEG;IACH,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACpC;;OAEG;IACH,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAClC;;OAEG;IACH,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACxB,YAAY,GACZ,YAAY,GACZ,OAAO,GACP,SAAS,GACT,MAAM,CAAC;AAEX,eAAO,MAAM,eAAe,GAAI,0EAQ7B,oBAAoB
|
|
1
|
+
{"version":3,"file":"use-copy-paste-cut.d.ts","sourceRoot":"","sources":["../../../hooks/use-copy-paste-cut.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAYvE,OAAO,KAAK,EACV,eAAe,EAEhB,MAAM,mCAAmC,CAAC;AAK3C,MAAM,MAAM,oBAAoB,GAAG;IACjC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,UAAU,EAAE,aAAa,CAAC;IAC1B;;OAEG;IACH,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B;;OAEG;IACH,UAAU,IAAI,IAAI,CAAC;IACnB;;OAEG;IACH,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACpC;;OAEG;IACH,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAClC;;OAEG;IACH,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,gBAAgB,GACxB,YAAY,GACZ,YAAY,GACZ,OAAO,GACP,SAAS,GACT,MAAM,CAAC;AAEX,2FAA2F;AAC3F,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE/E;;;;;;;;GAQG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;IAClD,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,wFAAwF;AACxF,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAAG,mBAAmB,CAAC;AAEzE,eAAO,MAAM,eAAe,GAAI,0EAQ7B,oBAAoB;;;;2BAoRG,mBAAmB;;;wBA1KrC,cAAc;yBAuDd,cAAc;uBAtBd,cAAc;CA0MrB,CAAC"}
|
|
@@ -216,16 +216,16 @@ var useCopyPasteCut = function (_a) {
|
|
|
216
216
|
focusSheet();
|
|
217
217
|
}, [cellEditorInstance, focusSheet]);
|
|
218
218
|
// From contextmenu
|
|
219
|
-
var paste = (0, react_1.useCallback)(function (
|
|
219
|
+
var paste = (0, react_1.useCallback)(function (pasteSpecial) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
220
220
|
function getClipboardContents() {
|
|
221
221
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
222
222
|
var editorEl, dataTransfer, evt, clipboardItems, clipboardItems_1, clipboardItems_1_1, clipboardItem, _a, _b, type, blob, text, e_1_1, e_2_1, err_1;
|
|
223
223
|
var e_2, _c, e_1, _d;
|
|
224
|
-
var _e, _f, _g;
|
|
225
|
-
return tslib_1.__generator(this, function (
|
|
226
|
-
switch (
|
|
224
|
+
var _e, _f, _g, _h;
|
|
225
|
+
return tslib_1.__generator(this, function (_j) {
|
|
226
|
+
switch (_j.label) {
|
|
227
227
|
case 0:
|
|
228
|
-
|
|
228
|
+
_j.trys.push([0, 17, , 18]);
|
|
229
229
|
editorEl = (_e = cellEditorInstance === null || cellEditorInstance === void 0 ? void 0 : cellEditorInstance.el) === null || _e === void 0 ? void 0 : _e.call(cellEditorInstance);
|
|
230
230
|
// Focus editor
|
|
231
231
|
cellEditorInstance === null || cellEditorInstance === void 0 ? void 0 : cellEditorInstance.focus();
|
|
@@ -237,37 +237,37 @@ var useCopyPasteCut = function (_a) {
|
|
|
237
237
|
});
|
|
238
238
|
return [4 /*yield*/, navigator.clipboard.read()];
|
|
239
239
|
case 1:
|
|
240
|
-
clipboardItems =
|
|
241
|
-
|
|
240
|
+
clipboardItems = _j.sent();
|
|
241
|
+
_j.label = 2;
|
|
242
242
|
case 2:
|
|
243
|
-
|
|
243
|
+
_j.trys.push([2, 14, 15, 16]);
|
|
244
244
|
clipboardItems_1 = tslib_1.__values(clipboardItems), clipboardItems_1_1 = clipboardItems_1.next();
|
|
245
|
-
|
|
245
|
+
_j.label = 3;
|
|
246
246
|
case 3:
|
|
247
247
|
if (!!clipboardItems_1_1.done) return [3 /*break*/, 13];
|
|
248
248
|
clipboardItem = clipboardItems_1_1.value;
|
|
249
|
-
|
|
249
|
+
_j.label = 4;
|
|
250
250
|
case 4:
|
|
251
|
-
|
|
251
|
+
_j.trys.push([4, 10, 11, 12]);
|
|
252
252
|
_a = (e_1 = void 0, tslib_1.__values(clipboardItem.types)), _b = _a.next();
|
|
253
|
-
|
|
253
|
+
_j.label = 5;
|
|
254
254
|
case 5:
|
|
255
255
|
if (!!_b.done) return [3 /*break*/, 9];
|
|
256
256
|
type = _b.value;
|
|
257
257
|
return [4 /*yield*/, clipboardItem.getType(type)];
|
|
258
258
|
case 6:
|
|
259
|
-
blob =
|
|
259
|
+
blob = _j.sent();
|
|
260
260
|
return [4 /*yield*/, blob.text()];
|
|
261
261
|
case 7:
|
|
262
|
-
text =
|
|
262
|
+
text = _j.sent();
|
|
263
263
|
(_f = evt.clipboardData) === null || _f === void 0 ? void 0 : _f.setData(type, text);
|
|
264
|
-
|
|
264
|
+
_j.label = 8;
|
|
265
265
|
case 8:
|
|
266
266
|
_b = _a.next();
|
|
267
267
|
return [3 /*break*/, 5];
|
|
268
268
|
case 9: return [3 /*break*/, 12];
|
|
269
269
|
case 10:
|
|
270
|
-
e_1_1 =
|
|
270
|
+
e_1_1 = _j.sent();
|
|
271
271
|
e_1 = { error: e_1_1 };
|
|
272
272
|
return [3 /*break*/, 12];
|
|
273
273
|
case 11:
|
|
@@ -281,7 +281,7 @@ var useCopyPasteCut = function (_a) {
|
|
|
281
281
|
return [3 /*break*/, 3];
|
|
282
282
|
case 13: return [3 /*break*/, 16];
|
|
283
283
|
case 14:
|
|
284
|
-
e_2_1 =
|
|
284
|
+
e_2_1 = _j.sent();
|
|
285
285
|
e_2 = { error: e_2_1 };
|
|
286
286
|
return [3 /*break*/, 16];
|
|
287
287
|
case 15:
|
|
@@ -291,15 +291,20 @@ var useCopyPasteCut = function (_a) {
|
|
|
291
291
|
finally { if (e_2) throw e_2.error; }
|
|
292
292
|
return [7 /*endfinally*/];
|
|
293
293
|
case 16:
|
|
294
|
-
|
|
295
|
-
|
|
294
|
+
// The paste pipelines read the request back from these synthetic
|
|
295
|
+
// clipboard keys (`resolvePasteSpecialOptions` in spreadsheet-state).
|
|
296
|
+
if (typeof pasteSpecial === "string") {
|
|
297
|
+
(_g = evt.clipboardData) === null || _g === void 0 ? void 0 : _g.setData("pasteSpecialType", pasteSpecial);
|
|
298
|
+
}
|
|
299
|
+
else if (pasteSpecial) {
|
|
300
|
+
(_h = evt.clipboardData) === null || _h === void 0 ? void 0 : _h.setData("pasteSpecialOptions", JSON.stringify(pasteSpecial));
|
|
296
301
|
}
|
|
297
302
|
if (editorEl) {
|
|
298
303
|
editorEl.dispatchEvent(evt);
|
|
299
304
|
}
|
|
300
305
|
return [3 /*break*/, 18];
|
|
301
306
|
case 17:
|
|
302
|
-
err_1 =
|
|
307
|
+
err_1 = _j.sent();
|
|
303
308
|
console.error(err_1);
|
|
304
309
|
return [3 /*break*/, 18];
|
|
305
310
|
case 18: return [2 /*return*/];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-get-tooltip.d.ts","sourceRoot":"","sources":["../../../hooks/use-get-tooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,KAAsB,MAAM,OAAO,CAAC;AAE3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGrD,KAAK,kBAAkB,CAAC,CAAC,SAAS,QAAQ,IAAI;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,YAAY,CACV,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,CAAC,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;IAC9B;;;;OAIG;IACH,iBAAiB,CACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAAC;IACtB;;;;OAIG;IACH,aAAa,CACX,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,UAAU,GAAG,SAAS,CAAC;IAC1B;;OAEG;IACH,OAAO,EAAE,CACP,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,MAAM,GAAG,SAAS,CAAC;IACxB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,CAClB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IACpC;;OAEG;IACH,wBAAwB,CAAC,EAAE,CACzB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,SAAS,CAAC;IACf;;OAEG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAC5C;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,QAAQ,EAAE,4IAU/C,kBAAkB,CAAC,CAAC,CAAC,iNAmBf,gBAAgB,
|
|
1
|
+
{"version":3,"file":"use-get-tooltip.d.ts","sourceRoot":"","sources":["../../../hooks/use-get-tooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,KAAsB,MAAM,OAAO,CAAC;AAE3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAGnE,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGrD,KAAK,kBAAkB,CAAC,CAAC,SAAS,QAAQ,IAAI;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,YAAY,CACV,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,CAAC,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;IAC9B;;;;OAIG;IACH,iBAAiB,CACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAAC;IACtB;;;;OAIG;IACH,aAAa,CACX,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,UAAU,GAAG,SAAS,CAAC;IAC1B;;OAEG;IACH,OAAO,EAAE,CACP,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,MAAM,GAAG,SAAS,CAAC;IACxB;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,CAClB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,SAAS,GAAG,MAAM,GAAG,SAAS,CAAC;IACpC;;OAEG;IACH,wBAAwB,CAAC,EAAE,CACzB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,SAAS,CAAC;IACf;;OAEG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAC5C;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,QAAQ,EAAE,4IAU/C,kBAAkB,CAAC,CAAC,CAAC,iNAmBf,gBAAgB,6BAiHxB,CAAC"}
|
|
@@ -42,8 +42,13 @@ var useGetTooltip = function (_a) {
|
|
|
42
42
|
// Check if we are rendering notes
|
|
43
43
|
// Error has precedence
|
|
44
44
|
var variant = (0, helpers_1.getTooltipVariant)(isError, isInvalid, isHyperlink, noteEditorCell ? true : !!note, customTooltipContent ? true : false);
|
|
45
|
-
// Content
|
|
46
|
-
|
|
45
|
+
// Content. An Invalid cell whose rule supplies its own error text
|
|
46
|
+
// (`customTooltipContent`) shows that instead of the generic marker.
|
|
47
|
+
var content = isError
|
|
48
|
+
? errorValue.message
|
|
49
|
+
: isInvalid && !customTooltipContent
|
|
50
|
+
? errorValue.message
|
|
51
|
+
: undefined;
|
|
47
52
|
// Title
|
|
48
53
|
var title = isHyperlink
|
|
49
54
|
? getFormattedValue(sheetId, rowIndex, columnIndex)
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import type { CellInterface, SelectionArea } from "@rowsncolumns/grid";
|
|
2
2
|
import type React from "react";
|
|
3
3
|
import type { CanvasGridProps, SelectionAttributes } from "../components/canvas-grid/typings";
|
|
4
|
-
import type { CellFormat, SheetRange } from "../types";
|
|
4
|
+
import type { CellFormat, ExtendedValue, Maybe, SheetRange } from "../types";
|
|
5
5
|
import type { useContextMenu } from "./use-context-menu";
|
|
6
6
|
type FormattingKeyboardProps = {
|
|
7
7
|
sheetId: number;
|
|
8
8
|
locale?: string;
|
|
9
9
|
showFormulas?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Resolves the Excel-vs-Sheets shortcut conflicts; defaults to "sheets".
|
|
12
|
+
*/
|
|
13
|
+
keymap?: CanvasGridProps["keymap"];
|
|
10
14
|
defaultFontSizePoint: NonNullable<CanvasGridProps["defaultFontSizePoint"]>;
|
|
11
15
|
canEditCell(sheetId: number, cell: CellInterface): boolean;
|
|
12
16
|
onChangeFormatting: CanvasGridProps["onChangeFormatting"];
|
|
@@ -20,6 +24,9 @@ type FormattingKeyboardProps = {
|
|
|
20
24
|
selections: SelectionArea<SelectionAttributes>[];
|
|
21
25
|
selectedRows: Record<string, boolean>;
|
|
22
26
|
selectedColumns: Record<string, boolean>;
|
|
27
|
+
/** Whole rows / columns selected through their headers */
|
|
28
|
+
selectedRowHeadersIds?: number[];
|
|
29
|
+
selectedColumnHeadersIds?: number[];
|
|
23
30
|
onSelectNextSheet: CanvasGridProps["onSelectNextSheet"];
|
|
24
31
|
onSelectPreviousSheet: CanvasGridProps["onSelectPreviousSheet"];
|
|
25
32
|
onCreateNewSheet: CanvasGridProps["onCreateNewSheet"];
|
|
@@ -51,7 +58,15 @@ type FormattingKeyboardProps = {
|
|
|
51
58
|
onShowContextMenu: ReturnType<typeof useContextMenu>["showContextMenu"];
|
|
52
59
|
onAddQuickEdit(range: SheetRange): void;
|
|
53
60
|
isSheetFocused(): boolean;
|
|
61
|
+
onCalculateNow?: CanvasGridProps["onCalculateNow"];
|
|
62
|
+
onRequestGoTo?: CanvasGridProps["onRequestGoTo"];
|
|
63
|
+
/** Ctrl+Alt+V — Paste Special dialog (Excel). */
|
|
64
|
+
onRequestPasteSpecial?: () => void;
|
|
65
|
+
/** Ctrl+' / Ctrl+Shift+" write the cell above into the active cell */
|
|
66
|
+
onChangeBatch?: CanvasGridProps["onChangeBatch"];
|
|
67
|
+
getUserEnteredValue?(sheetId: number, rowIndex: number, columnIndex: number): string | undefined | null;
|
|
68
|
+
getEffectiveValue?(sheetId: number, rowIndex: number, columnIndex: number): Maybe<ExtendedValue>;
|
|
54
69
|
};
|
|
55
|
-
export declare const useKeyboardHandler: ({ sheetId, locale, selectedRows, selectedColumns, showFormulas, defaultFontSizePoint, onShowFormulas, onChangeFormatting, onRepeatFormatting, onClearFormatting, onSelectNextSheet, onSelectPreviousSheet, onCreateNewSheet, onFillRange, disableFillRightShortcut, onInsertTime, onInsertDate, onInsertDateTime, onInsertNote, onInsertAutoSum, onRedo, onUndo, onRequestSearch, onRequestReplace, onRequestFormatCells, onRequestInsertComment, onRequestInsertLink, onCreateTable, onCreateBasicFilter, clearCopiedSelections, getCellFormat, onShowContextMenu, onHideColumn, onGroupColumns, onUngroupColumns, onHideRow, onGroupRows, onUngroupRows, onDeleteRow, onInsertRow, onAddQuickEdit, canEditCell, isSheetFocused, activeCell, selections, }: FormattingKeyboardProps) => (e: React.KeyboardEvent<HTMLDivElement>) => void;
|
|
70
|
+
export declare const useKeyboardHandler: ({ sheetId, locale, selectedRows, selectedColumns, selectedRowHeadersIds, selectedColumnHeadersIds, showFormulas, keymap, defaultFontSizePoint, onShowFormulas, onChangeFormatting, onRepeatFormatting, onClearFormatting, onSelectNextSheet, onSelectPreviousSheet, onCreateNewSheet, onFillRange, disableFillRightShortcut, onInsertTime, onInsertDate, onInsertDateTime, onInsertNote, onInsertAutoSum, onRedo, onUndo, onRequestSearch, onRequestReplace, onRequestFormatCells, onRequestInsertComment, onRequestInsertLink, onCreateTable, onCreateBasicFilter, clearCopiedSelections, getCellFormat, onShowContextMenu, onHideColumn, onShowColumn, onGroupColumns, onUngroupColumns, onHideRow, onShowRow, onGroupRows, onUngroupRows, onDeleteRow, onInsertRow, onAddQuickEdit, onCalculateNow, onRequestGoTo, onRequestPasteSpecial, onChangeBatch, getUserEnteredValue, getEffectiveValue, canEditCell, isSheetFocused, activeCell, selections, }: FormattingKeyboardProps) => (e: React.KeyboardEvent<HTMLDivElement>) => void;
|
|
56
71
|
export {};
|
|
57
72
|
//# sourceMappingURL=use-keyboard-handler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-keyboard-handler.d.ts","sourceRoot":"","sources":["../../../hooks/use-keyboard-handler.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"use-keyboard-handler.d.ts","sourceRoot":"","sources":["../../../hooks/use-keyboard-handler.tsx"],"names":[],"mappings":"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"}
|