@rowsncolumns/spreadsheet 10.6.5 → 10.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/api/autocomplete.d.ts +42 -0
- package/dist/cjs/api/autocomplete.d.ts.map +1 -0
- package/dist/cjs/api/autocomplete.js +114 -0
- package/dist/cjs/api/banded-ranges.d.ts.map +1 -1
- package/dist/cjs/api/banded-ranges.js +51 -1
- package/dist/cjs/api/error-checking.d.ts +82 -0
- package/dist/cjs/api/error-checking.d.ts.map +1 -0
- package/dist/cjs/api/error-checking.js +207 -0
- package/dist/cjs/api/move-overwrite.d.ts +8 -2
- package/dist/cjs/api/move-overwrite.d.ts.map +1 -1
- package/dist/cjs/api/move-overwrite.js +19 -3
- package/dist/cjs/api/selections.d.ts +2 -2
- package/dist/cjs/api/validation.d.ts +39 -1
- package/dist/cjs/api/validation.d.ts.map +1 -1
- package/dist/cjs/api/validation.js +87 -1
- package/dist/cjs/atoms/cell-input-context.atom.d.ts +4 -1
- package/dist/cjs/atoms/cell-input-context.atom.d.ts.map +1 -1
- package/dist/cjs/atoms/enter-key-direction.atom.d.ts +11 -0
- package/dist/cjs/atoms/enter-key-direction.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/enter-key-direction.atom.js +13 -0
- package/dist/cjs/atoms/index.d.ts +1 -0
- package/dist/cjs/atoms/index.d.ts.map +1 -1
- package/dist/cjs/atoms/index.js +1 -0
- package/dist/cjs/atoms/paste-menu.atom.d.ts +22 -0
- package/dist/cjs/atoms/paste-menu.atom.d.ts.map +1 -1
- package/dist/cjs/atoms/paste-menu.atom.js +13 -1
- package/dist/cjs/atoms/pick-list.atom.d.ts +15 -0
- package/dist/cjs/atoms/pick-list.atom.d.ts.map +1 -0
- package/dist/cjs/atoms/pick-list.atom.js +7 -0
- package/dist/cjs/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/cjs/components/canvas-grid/index.js +305 -70
- package/dist/cjs/components/canvas-grid/typings.d.ts +96 -11
- package/dist/cjs/components/canvas-grid/typings.d.ts.map +1 -1
- package/dist/cjs/components/cell/index.d.ts.map +1 -1
- package/dist/cjs/components/cell/index.js +7 -8
- package/dist/cjs/components/cell/typings.d.ts +9 -0
- package/dist/cjs/components/cell/typings.d.ts.map +1 -1
- package/dist/cjs/components/cell-editor/helpers.d.ts +22 -2
- package/dist/cjs/components/cell-editor/helpers.d.ts.map +1 -1
- package/dist/cjs/components/cell-editor/helpers.js +32 -8
- package/dist/cjs/components/cell-editor/index.d.ts +7 -1
- package/dist/cjs/components/cell-editor/index.d.ts.map +1 -1
- package/dist/cjs/components/cell-editor/index.js +85 -13
- package/dist/cjs/components/cell-indicator/index.d.ts +41 -0
- package/dist/cjs/components/cell-indicator/index.d.ts.map +1 -0
- package/dist/cjs/components/cell-indicator/index.js +90 -0
- package/dist/cjs/components/cell-input/cell-input.d.ts +10 -2
- package/dist/cjs/components/cell-input/cell-input.d.ts.map +1 -1
- package/dist/cjs/components/cell-input/cell-input.js +5 -3
- package/dist/cjs/components/cell-input/formula-bar-cell-input.d.ts.map +1 -1
- package/dist/cjs/components/cell-input/formula-bar-cell-input.js +9 -2
- package/dist/cjs/components/cell-structured/sparkline-math.d.ts +27 -1
- package/dist/cjs/components/cell-structured/sparkline-math.d.ts.map +1 -1
- package/dist/cjs/components/cell-structured/sparkline-math.js +48 -1
- package/dist/cjs/components/cell-structured/sparkline.d.ts +1 -1
- package/dist/cjs/components/cell-structured/sparkline.d.ts.map +1 -1
- package/dist/cjs/components/cell-structured/sparkline.js +36 -92
- package/dist/cjs/components/cell-structured/types.d.ts +6 -0
- package/dist/cjs/components/cell-structured/types.d.ts.map +1 -1
- package/dist/cjs/components/data-table-dialog/index.d.ts +22 -0
- package/dist/cjs/components/data-table-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/data-table-dialog/index.js +93 -0
- package/dist/cjs/components/error-check-smart-tag/index.d.ts +27 -0
- package/dist/cjs/components/error-check-smart-tag/index.d.ts.map +1 -0
- package/dist/cjs/components/error-check-smart-tag/index.js +39 -0
- package/dist/cjs/components/forecast-sheet-dialog/index.d.ts +26 -0
- package/dist/cjs/components/forecast-sheet-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/forecast-sheet-dialog/index.js +92 -0
- package/dist/cjs/components/paste-special-dialog/index.d.ts +3 -3
- package/dist/cjs/components/paste-special-dialog/index.d.ts.map +1 -1
- package/dist/cjs/components/paste-special-dialog/index.js +61 -23
- package/dist/cjs/components/protect-sheet-dialog/allow-edit-ranges-dialog.d.ts +57 -0
- package/dist/cjs/components/protect-sheet-dialog/allow-edit-ranges-dialog.d.ts.map +1 -0
- package/dist/cjs/components/protect-sheet-dialog/allow-edit-ranges-dialog.js +196 -0
- package/dist/cjs/components/protect-sheet-dialog/constants.d.ts +3 -0
- package/dist/cjs/components/protect-sheet-dialog/constants.d.ts.map +1 -0
- package/dist/cjs/components/protect-sheet-dialog/constants.js +5 -0
- package/dist/cjs/components/protect-sheet-dialog/index.d.ts +2 -2
- package/dist/cjs/components/protect-sheet-dialog/index.d.ts.map +1 -1
- package/dist/cjs/components/protect-sheet-dialog/index.js +5 -3
- package/dist/cjs/components/scenario-manager-dialog/index.d.ts +51 -0
- package/dist/cjs/components/scenario-manager-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/scenario-manager-dialog/index.js +257 -0
- package/dist/cjs/components/selection/index.d.ts +1 -1
- package/dist/cjs/components/selection/index.d.ts.map +1 -1
- package/dist/cjs/components/selection/index.js +9 -4
- package/dist/cjs/components/selection/paste-menu.d.ts +14 -1
- package/dist/cjs/components/selection/paste-menu.d.ts.map +1 -1
- package/dist/cjs/components/selection/paste-menu.js +78 -6
- package/dist/cjs/components/selection/paste-options.d.ts +28 -0
- package/dist/cjs/components/selection/paste-options.d.ts.map +1 -0
- package/dist/cjs/components/selection/paste-options.js +70 -0
- package/dist/cjs/components/selection/types.d.ts +12 -1
- package/dist/cjs/components/selection/types.d.ts.map +1 -1
- package/dist/cjs/components/selection-drop-menu/index.d.ts +18 -0
- package/dist/cjs/components/selection-drop-menu/index.d.ts.map +1 -0
- package/dist/cjs/components/selection-drop-menu/index.js +62 -0
- package/dist/cjs/components/solver-dialog/index.d.ts +57 -0
- package/dist/cjs/components/solver-dialog/index.d.ts.map +1 -0
- package/dist/cjs/components/solver-dialog/index.js +204 -0
- package/dist/cjs/components/toolbar/sparkline-actions.d.ts +3 -2
- package/dist/cjs/components/toolbar/sparkline-actions.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/sparkline-actions.js +6 -2
- package/dist/cjs/components/toolbar/table-style-selector.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/table-style-selector.js +33 -2
- package/dist/cjs/config.d.ts +5 -4
- package/dist/cjs/config.d.ts.map +1 -1
- package/dist/cjs/config.js +13 -9
- package/dist/cjs/hooks/use-cell-renderer.d.ts +12 -1
- package/dist/cjs/hooks/use-cell-renderer.d.ts.map +1 -1
- package/dist/cjs/hooks/use-cell-renderer.js +6 -3
- package/dist/cjs/hooks/use-copy-paste-cut.d.ts +36 -2
- package/dist/cjs/hooks/use-copy-paste-cut.d.ts.map +1 -1
- package/dist/cjs/hooks/use-copy-paste-cut.js +131 -5
- package/dist/cjs/hooks/use-editable.d.ts +6 -0
- package/dist/cjs/hooks/use-editable.d.ts.map +1 -1
- package/dist/cjs/hooks/use-editor-submit.d.ts +45 -3
- package/dist/cjs/hooks/use-editor-submit.d.ts.map +1 -1
- package/dist/cjs/hooks/use-editor-submit.js +91 -7
- package/dist/cjs/hooks/use-keyboard-handler.d.ts +5 -1
- package/dist/cjs/hooks/use-keyboard-handler.d.ts.map +1 -1
- package/dist/cjs/hooks/use-keyboard-handler.js +10 -1
- package/dist/cjs/hooks/use-selection-drag-copy.d.ts +55 -0
- package/dist/cjs/hooks/use-selection-drag-copy.d.ts.map +1 -0
- package/dist/cjs/hooks/use-selection-drag-copy.js +274 -0
- package/dist/cjs/hooks/use-selection-renderer.d.ts +8 -1
- package/dist/cjs/hooks/use-selection-renderer.d.ts.map +1 -1
- package/dist/cjs/hooks/use-selection-renderer.js +7 -2
- package/dist/cjs/hooks/use-selection.d.ts +59 -1
- package/dist/cjs/hooks/use-selection.d.ts.map +1 -1
- package/dist/cjs/hooks/use-selection.js +270 -61
- package/dist/cjs/index.d.ts +6 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +5 -0
- package/dist/cjs/release-date.js +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/cjs/types.d.ts +50 -1
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/esm/api/autocomplete.d.ts +42 -0
- package/dist/esm/api/autocomplete.d.ts.map +1 -0
- package/dist/esm/api/autocomplete.js +91 -0
- package/dist/esm/api/banded-ranges.d.ts.map +1 -1
- package/dist/esm/api/banded-ranges.js +52 -2
- package/dist/esm/api/error-checking.d.ts +82 -0
- package/dist/esm/api/error-checking.d.ts.map +1 -0
- package/dist/esm/api/error-checking.js +156 -0
- package/dist/esm/api/move-overwrite.d.ts +8 -2
- package/dist/esm/api/move-overwrite.d.ts.map +1 -1
- package/dist/esm/api/move-overwrite.js +17 -2
- package/dist/esm/api/selections.d.ts +2 -2
- package/dist/esm/api/validation.d.ts +39 -1
- package/dist/esm/api/validation.d.ts.map +1 -1
- package/dist/esm/api/validation.js +70 -0
- package/dist/esm/atoms/cell-input-context.atom.d.ts +4 -1
- package/dist/esm/atoms/cell-input-context.atom.d.ts.map +1 -1
- package/dist/esm/atoms/enter-key-direction.atom.d.ts +11 -0
- package/dist/esm/atoms/enter-key-direction.atom.d.ts.map +1 -0
- package/dist/esm/atoms/enter-key-direction.atom.js +8 -0
- package/dist/esm/atoms/index.d.ts +1 -0
- package/dist/esm/atoms/index.d.ts.map +1 -1
- package/dist/esm/atoms/index.js +1 -0
- package/dist/esm/atoms/paste-menu.atom.d.ts +22 -0
- package/dist/esm/atoms/paste-menu.atom.d.ts.map +1 -1
- package/dist/esm/atoms/paste-menu.atom.js +10 -1
- package/dist/esm/atoms/pick-list.atom.d.ts +15 -0
- package/dist/esm/atoms/pick-list.atom.d.ts.map +1 -0
- package/dist/esm/atoms/pick-list.atom.js +3 -0
- package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/esm/components/canvas-grid/index.js +239 -13
- package/dist/esm/components/canvas-grid/typings.d.ts +96 -11
- package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
- package/dist/esm/components/cell/index.d.ts.map +1 -1
- package/dist/esm/components/cell/index.js +8 -9
- package/dist/esm/components/cell/typings.d.ts +9 -0
- package/dist/esm/components/cell/typings.d.ts.map +1 -1
- package/dist/esm/components/cell-editor/helpers.d.ts +22 -2
- package/dist/esm/components/cell-editor/helpers.d.ts.map +1 -1
- package/dist/esm/components/cell-editor/helpers.js +25 -7
- package/dist/esm/components/cell-editor/index.d.ts +7 -1
- package/dist/esm/components/cell-editor/index.d.ts.map +1 -1
- package/dist/esm/components/cell-editor/index.js +80 -9
- package/dist/esm/components/cell-indicator/index.d.ts +41 -0
- package/dist/esm/components/cell-indicator/index.d.ts.map +1 -0
- package/dist/esm/components/cell-indicator/index.js +76 -0
- package/dist/esm/components/cell-input/cell-input.d.ts +10 -2
- package/dist/esm/components/cell-input/cell-input.d.ts.map +1 -1
- package/dist/esm/components/cell-input/cell-input.js +5 -3
- package/dist/esm/components/cell-input/formula-bar-cell-input.d.ts.map +1 -1
- package/dist/esm/components/cell-input/formula-bar-cell-input.js +9 -2
- package/dist/esm/components/cell-structured/sparkline-math.d.ts +27 -1
- package/dist/esm/components/cell-structured/sparkline-math.d.ts.map +1 -1
- package/dist/esm/components/cell-structured/sparkline-math.js +35 -0
- package/dist/esm/components/cell-structured/sparkline.d.ts +1 -1
- package/dist/esm/components/cell-structured/sparkline.d.ts.map +1 -1
- package/dist/esm/components/cell-structured/sparkline.js +34 -88
- package/dist/esm/components/cell-structured/types.d.ts +6 -0
- package/dist/esm/components/cell-structured/types.d.ts.map +1 -1
- package/dist/esm/components/data-table-dialog/index.d.ts +22 -0
- package/dist/esm/components/data-table-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/data-table-dialog/index.js +75 -0
- package/dist/esm/components/error-check-smart-tag/index.d.ts +27 -0
- package/dist/esm/components/error-check-smart-tag/index.d.ts.map +1 -0
- package/dist/esm/components/error-check-smart-tag/index.js +33 -0
- package/dist/esm/components/forecast-sheet-dialog/index.d.ts +26 -0
- package/dist/esm/components/forecast-sheet-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/forecast-sheet-dialog/index.js +83 -0
- package/dist/esm/components/paste-special-dialog/index.d.ts +3 -3
- package/dist/esm/components/paste-special-dialog/index.d.ts.map +1 -1
- package/dist/esm/components/paste-special-dialog/index.js +58 -23
- package/dist/esm/components/protect-sheet-dialog/allow-edit-ranges-dialog.d.ts +57 -0
- package/dist/esm/components/protect-sheet-dialog/allow-edit-ranges-dialog.d.ts.map +1 -0
- package/dist/esm/components/protect-sheet-dialog/allow-edit-ranges-dialog.js +177 -0
- package/dist/esm/components/protect-sheet-dialog/constants.d.ts +3 -0
- package/dist/esm/components/protect-sheet-dialog/constants.d.ts.map +1 -0
- package/dist/esm/components/protect-sheet-dialog/constants.js +2 -0
- package/dist/esm/components/protect-sheet-dialog/index.d.ts +2 -2
- package/dist/esm/components/protect-sheet-dialog/index.d.ts.map +1 -1
- package/dist/esm/components/protect-sheet-dialog/index.js +3 -2
- package/dist/esm/components/scenario-manager-dialog/index.d.ts +51 -0
- package/dist/esm/components/scenario-manager-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/scenario-manager-dialog/index.js +213 -0
- package/dist/esm/components/selection/index.d.ts +1 -1
- package/dist/esm/components/selection/index.d.ts.map +1 -1
- package/dist/esm/components/selection/index.js +9 -4
- package/dist/esm/components/selection/paste-menu.d.ts +14 -1
- package/dist/esm/components/selection/paste-menu.d.ts.map +1 -1
- package/dist/esm/components/selection/paste-menu.js +76 -8
- package/dist/esm/components/selection/paste-options.d.ts +28 -0
- package/dist/esm/components/selection/paste-options.d.ts.map +1 -0
- package/dist/esm/components/selection/paste-options.js +62 -0
- package/dist/esm/components/selection/types.d.ts +12 -1
- package/dist/esm/components/selection/types.d.ts.map +1 -1
- package/dist/esm/components/selection-drop-menu/index.d.ts +18 -0
- package/dist/esm/components/selection-drop-menu/index.d.ts.map +1 -0
- package/dist/esm/components/selection-drop-menu/index.js +56 -0
- package/dist/esm/components/solver-dialog/index.d.ts +57 -0
- package/dist/esm/components/solver-dialog/index.d.ts.map +1 -0
- package/dist/esm/components/solver-dialog/index.js +176 -0
- package/dist/esm/components/toolbar/sparkline-actions.d.ts +3 -2
- package/dist/esm/components/toolbar/sparkline-actions.d.ts.map +1 -1
- package/dist/esm/components/toolbar/sparkline-actions.js +6 -2
- package/dist/esm/components/toolbar/table-style-selector.d.ts.map +1 -1
- package/dist/esm/components/toolbar/table-style-selector.js +29 -3
- package/dist/esm/config.d.ts +5 -4
- package/dist/esm/config.d.ts.map +1 -1
- package/dist/esm/config.js +12 -8
- package/dist/esm/hooks/use-cell-renderer.d.ts +12 -1
- package/dist/esm/hooks/use-cell-renderer.d.ts.map +1 -1
- package/dist/esm/hooks/use-cell-renderer.js +5 -2
- package/dist/esm/hooks/use-copy-paste-cut.d.ts +36 -2
- package/dist/esm/hooks/use-copy-paste-cut.d.ts.map +1 -1
- package/dist/esm/hooks/use-copy-paste-cut.js +117 -6
- package/dist/esm/hooks/use-editable.d.ts +6 -0
- package/dist/esm/hooks/use-editable.d.ts.map +1 -1
- package/dist/esm/hooks/use-editor-submit.d.ts +45 -3
- package/dist/esm/hooks/use-editor-submit.d.ts.map +1 -1
- package/dist/esm/hooks/use-editor-submit.js +81 -6
- package/dist/esm/hooks/use-keyboard-handler.d.ts +5 -1
- package/dist/esm/hooks/use-keyboard-handler.d.ts.map +1 -1
- package/dist/esm/hooks/use-keyboard-handler.js +10 -1
- package/dist/esm/hooks/use-selection-drag-copy.d.ts +55 -0
- package/dist/esm/hooks/use-selection-drag-copy.d.ts.map +1 -0
- package/dist/esm/hooks/use-selection-drag-copy.js +245 -0
- package/dist/esm/hooks/use-selection-renderer.d.ts +8 -1
- package/dist/esm/hooks/use-selection-renderer.d.ts.map +1 -1
- package/dist/esm/hooks/use-selection-renderer.js +7 -2
- package/dist/esm/hooks/use-selection.d.ts +59 -1
- package/dist/esm/hooks/use-selection.d.ts.map +1 -1
- package/dist/esm/hooks/use-selection.js +245 -52
- package/dist/esm/index.d.ts +6 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +5 -0
- package/dist/esm/release-date.js +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/types.d.ts +50 -1
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/spreadsheet.min.css +1 -1
- package/package.json +6 -5
- package/dist/cjs/components/cell-error/index.d.ts +0 -14
- package/dist/cjs/components/cell-error/index.d.ts.map +0 -1
- package/dist/cjs/components/cell-error/index.js +0 -24
- package/dist/esm/components/cell-error/index.d.ts +0 -14
- package/dist/esm/components/cell-error/index.d.ts.map +0 -1
- package/dist/esm/components/cell-error/index.js +0 -18
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { CellInterface, GridRange, SelectionArea } from "@rowsncolumns/grid";
|
|
2
|
+
import type { CanvasGridProps, SelectionAttributes } from "../components/canvas-grid/typings";
|
|
3
|
+
import type { SelectionDragMenuRequest } from "./use-selection";
|
|
4
|
+
type Selection = SelectionArea<SelectionAttributes>;
|
|
5
|
+
/** What a selection-border copy writes (Excel's right-drag Copy Here entries). */
|
|
6
|
+
export type SelectionCopyKind = "all" | "values" | "formats";
|
|
7
|
+
/**
|
|
8
|
+
* Excel's right-drag drop menu entries (support.microsoft.com "Move or copy cells and cell
|
|
9
|
+
* contents"). "Create Hyperlink Here" is not offered: the grid has no hyperlink write it can
|
|
10
|
+
* issue for a range (`onRequestInsertLink` only opens the link dialog for the active cell).
|
|
11
|
+
*/
|
|
12
|
+
export type SelectionDropAction = "move" | "copy" | "copy-values" | "copy-formats" | "link" | "shift-down-copy" | "shift-right-copy" | "shift-down-move" | "shift-right-move";
|
|
13
|
+
export type SelectionDropMenuState = SelectionDragMenuRequest<SelectionAttributes>;
|
|
14
|
+
/** Shift direction of an Insert Cut Cells move (`planInsertCutCells`' rule): right only when the drop stays on the source's rows. */
|
|
15
|
+
export declare const insertShiftForDrop: (from: GridRange, to: GridRange) => "down" | "right";
|
|
16
|
+
/**
|
|
17
|
+
* Excel "Link Here": each destination cell reads its source cell. A single cell links
|
|
18
|
+
* absolutely (`=$A$1`), a range relatively (`=A1`), as Paste Link writes them.
|
|
19
|
+
*/
|
|
20
|
+
export declare const linkFormulasFor: (from: GridRange) => string[][];
|
|
21
|
+
export type UseSelectionDragCopyProps = {
|
|
22
|
+
sheetId: number;
|
|
23
|
+
readonly?: boolean;
|
|
24
|
+
onCopy: CanvasGridProps["onCopy"];
|
|
25
|
+
onPaste: CanvasGridProps["onPaste"];
|
|
26
|
+
onChangeBatch: CanvasGridProps["onChangeBatch"];
|
|
27
|
+
onMoveSelection: CanvasGridProps["onMoveSelection"];
|
|
28
|
+
onInsertCutCells: CanvasGridProps["onInsertCutCells"];
|
|
29
|
+
onInsertCopiedCells: CanvasGridProps["onInsertCopiedCells"];
|
|
30
|
+
/** Excel's "There's already data here" prompt; resolves `false` to cancel. */
|
|
31
|
+
confirmOverwrite?: (message: string) => boolean | Promise<boolean>;
|
|
32
|
+
getValue: (sheetId: number, rowIndex: number, columnIndex: number) => string | undefined | null;
|
|
33
|
+
/** Publish the grid selection (the destination after a drop-menu action). */
|
|
34
|
+
onChangeSelections?: (selections: Selection[]) => void;
|
|
35
|
+
onChangeActiveCell?: (sheetId: number, cell: CellInterface) => void;
|
|
36
|
+
focusSheet?: () => void;
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Copy gestures of the selection border (Excel): Ctrl/⌥+drag copies, Ctrl+Shift/⌥⇧+drag
|
|
40
|
+
* inserts a copy, and a right-button drag opens the drop menu. A copy runs through the
|
|
41
|
+
* host's own `onCopy` → `onPaste` into a private clipboard — the system clipboard and the
|
|
42
|
+
* copied-range marquee are untouched — so the host's paste gates (protection, locked
|
|
43
|
+
* ranges, readonly) refuse a drop exactly as they refuse a paste.
|
|
44
|
+
*/
|
|
45
|
+
export declare const useSelectionDragCopy: ({ sheetId, readonly, onCopy, onPaste, onChangeBatch, onMoveSelection, onInsertCutCells, onInsertCopiedCells, confirmOverwrite, getValue, onChangeSelections, onChangeActiveCell, focusSheet, }: UseSelectionDragCopyProps) => {
|
|
46
|
+
copySelection: (from: Selection, to: Selection, kind?: SelectionCopyKind) => boolean;
|
|
47
|
+
insertCopiedCells: (from: Selection, to: Selection, shift?: "down" | "right") => boolean;
|
|
48
|
+
dropMenu: SelectionDropMenuState | null;
|
|
49
|
+
dropActions: SelectionDropAction[];
|
|
50
|
+
openDropMenu: (request: SelectionDropMenuState) => void;
|
|
51
|
+
closeDropMenu: () => void;
|
|
52
|
+
runDropAction: (action: SelectionDropAction) => Promise<void>;
|
|
53
|
+
};
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=use-selection-drag-copy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-selection-drag-copy.d.ts","sourceRoot":"","sources":["../../../hooks/use-selection-drag-copy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,aAAa,EACd,MAAM,oBAAoB,CAAC;AAU5B,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACpB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAEhE,KAAK,SAAS,GAAG,aAAa,CAAC,mBAAmB,CAAC,CAAC;AAEpD,kFAAkF;AAClF,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE7D;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAC3B,MAAM,GACN,MAAM,GACN,aAAa,GACb,cAAc,GACd,MAAM,GACN,iBAAiB,GACjB,kBAAkB,GAClB,iBAAiB,GACjB,kBAAkB,CAAC;AAEvB,MAAM,MAAM,sBAAsB,GAAG,wBAAwB,CAAC,mBAAmB,CAAC,CAAC;AAEnF,qIAAqI;AACrI,eAAO,MAAM,kBAAkB,GAC7B,MAAM,SAAS,EACf,IAAI,SAAS,KACZ,MAAM,GAAG,OACgD,CAAC;AAwD7D;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM,SAAS,KAAG,MAAM,EAAE,EAazD,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAClC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IACpC,aAAa,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;IAChD,eAAe,EAAE,eAAe,CAAC,iBAAiB,CAAC,CAAC;IACpD,gBAAgB,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC;IACtD,mBAAmB,EAAE,eAAe,CAAC,qBAAqB,CAAC,CAAC;IAC5D,8EAA8E;IAC9E,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnE,QAAQ,EAAE,CACR,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAC/B,6EAA6E;IAC7E,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC;IACvD,kBAAkB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;IACpE,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC;AAOF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAAI,gMAclC,yBAAyB;0BAoBjB,SAAS,MAAM,SAAS,SAAQ,iBAAiB;8BAsBjD,SAAS,MAAM,SAAS,UAAU,MAAM,GAAG,OAAO;;;4BAkD/C,sBAAsB;;4BAcjB,mBAAmB;CAmFrC,CAAC"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { isNull } from "@rowsncolumns/grid";
|
|
2
|
+
import { cellToAddress } from "@rowsncolumns/utils";
|
|
3
|
+
import { useCallback, useState } from "react";
|
|
4
|
+
import { MOVE_OVERWRITE_PROMPT, needsCopyOverwritePrompt, needsOverwritePrompt, } from "../api/move-overwrite";
|
|
5
|
+
/** Shift direction of an Insert Cut Cells move (`planInsertCutCells`' rule): right only when the drop stays on the source's rows. */
|
|
6
|
+
export const insertShiftForDrop = (from, to) => to.startRowIndex === from.startRowIndex ? "right" : "down";
|
|
7
|
+
/** A key/value clipboard for a synthetic copy: a real `DataTransfer` where the DOM has one. */
|
|
8
|
+
const createClipboardData = () => {
|
|
9
|
+
if (typeof DataTransfer === "function") {
|
|
10
|
+
try {
|
|
11
|
+
return new DataTransfer();
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
/* fall through */
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
const store = new Map();
|
|
18
|
+
return {
|
|
19
|
+
setData: (type, value) => void store.set(type, String(value)),
|
|
20
|
+
getData: (type) => store.get(type) ?? "",
|
|
21
|
+
clearData: () => store.clear(),
|
|
22
|
+
get types() {
|
|
23
|
+
return [...store.keys()];
|
|
24
|
+
},
|
|
25
|
+
get items() {
|
|
26
|
+
return [...store.keys()].map((type) => ({ kind: "string", type }));
|
|
27
|
+
},
|
|
28
|
+
files: [],
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
const createClipboardEvent = (type, clipboardData) => {
|
|
32
|
+
if (typeof ClipboardEvent === "function") {
|
|
33
|
+
try {
|
|
34
|
+
const event = new ClipboardEvent(type, {
|
|
35
|
+
clipboardData,
|
|
36
|
+
bubbles: false,
|
|
37
|
+
cancelable: true,
|
|
38
|
+
});
|
|
39
|
+
if (event.clipboardData === clipboardData)
|
|
40
|
+
return event;
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
/* fall through */
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
let defaultPrevented = false;
|
|
47
|
+
return {
|
|
48
|
+
type,
|
|
49
|
+
clipboardData,
|
|
50
|
+
preventDefault: () => {
|
|
51
|
+
defaultPrevented = true;
|
|
52
|
+
},
|
|
53
|
+
get defaultPrevented() {
|
|
54
|
+
return defaultPrevented;
|
|
55
|
+
},
|
|
56
|
+
stopPropagation: () => { },
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Excel "Link Here": each destination cell reads its source cell. A single cell links
|
|
61
|
+
* absolutely (`=$A$1`), a range relatively (`=A1`), as Paste Link writes them.
|
|
62
|
+
*/
|
|
63
|
+
export const linkFormulasFor = (from) => {
|
|
64
|
+
const single = from.startRowIndex === from.endRowIndex &&
|
|
65
|
+
from.startColumnIndex === from.endColumnIndex;
|
|
66
|
+
const rows = [];
|
|
67
|
+
for (let r = from.startRowIndex; r <= from.endRowIndex; r++) {
|
|
68
|
+
const row = [];
|
|
69
|
+
for (let c = from.startColumnIndex; c <= from.endColumnIndex; c++) {
|
|
70
|
+
row.push(`=${cellToAddress({ rowIndex: r, columnIndex: c }, single, single)}`);
|
|
71
|
+
}
|
|
72
|
+
rows.push(row);
|
|
73
|
+
}
|
|
74
|
+
return rows;
|
|
75
|
+
};
|
|
76
|
+
const defaultConfirm = (message) => typeof window === "undefined" || typeof window.confirm !== "function"
|
|
77
|
+
? true
|
|
78
|
+
: window.confirm(message);
|
|
79
|
+
/**
|
|
80
|
+
* Copy gestures of the selection border (Excel): Ctrl/⌥+drag copies, Ctrl+Shift/⌥⇧+drag
|
|
81
|
+
* inserts a copy, and a right-button drag opens the drop menu. A copy runs through the
|
|
82
|
+
* host's own `onCopy` → `onPaste` into a private clipboard — the system clipboard and the
|
|
83
|
+
* copied-range marquee are untouched — so the host's paste gates (protection, locked
|
|
84
|
+
* ranges, readonly) refuse a drop exactly as they refuse a paste.
|
|
85
|
+
*/
|
|
86
|
+
export const useSelectionDragCopy = ({ sheetId, readonly = false, onCopy, onPaste, onChangeBatch, onMoveSelection, onInsertCutCells, onInsertCopiedCells, confirmOverwrite = defaultConfirm, getValue, onChangeSelections, onChangeActiveCell, focusSheet, }) => {
|
|
87
|
+
const [dropMenu, setDropMenu] = useState(null);
|
|
88
|
+
/** Serialize `from` through the host's copy; `null` when the host refused or wrote nothing. */
|
|
89
|
+
const copyToPrivateClipboard = useCallback((from) => {
|
|
90
|
+
if (!onCopy)
|
|
91
|
+
return null;
|
|
92
|
+
const clipboardData = createClipboardData();
|
|
93
|
+
const copyEvent = createClipboardEvent("copy", clipboardData);
|
|
94
|
+
if (onCopy(copyEvent, sheetId, [from], false) === false)
|
|
95
|
+
return null;
|
|
96
|
+
// A host that defers its copy (e.g. to load cells first) leaves the clipboard empty —
|
|
97
|
+
// write nothing rather than an empty block.
|
|
98
|
+
return clipboardData.types.length ? clipboardData : null;
|
|
99
|
+
}, [onCopy, sheetId]);
|
|
100
|
+
const copySelection = useCallback((from, to, kind = "all") => {
|
|
101
|
+
if (readonly || !onPaste)
|
|
102
|
+
return false;
|
|
103
|
+
const clipboardData = copyToPrivateClipboard(from);
|
|
104
|
+
if (!clipboardData)
|
|
105
|
+
return false;
|
|
106
|
+
if (kind !== "all") {
|
|
107
|
+
const options = {
|
|
108
|
+
paste: kind === "values" ? "values" : "formats",
|
|
109
|
+
};
|
|
110
|
+
clipboardData.setData("pasteSpecialOptions", JSON.stringify(options));
|
|
111
|
+
}
|
|
112
|
+
const pasteEvent = createClipboardEvent("paste", clipboardData);
|
|
113
|
+
const target = {
|
|
114
|
+
rowIndex: to.range.startRowIndex,
|
|
115
|
+
columnIndex: to.range.startColumnIndex,
|
|
116
|
+
};
|
|
117
|
+
void onPaste(pasteEvent, sheetId, sheetId, [from], target, [to], [to], false);
|
|
118
|
+
return true;
|
|
119
|
+
}, [readonly, onPaste, copyToPrivateClipboard, sheetId]);
|
|
120
|
+
const insertCopiedCells = useCallback((from, to, shift) => {
|
|
121
|
+
if (readonly || !onInsertCopiedCells)
|
|
122
|
+
return false;
|
|
123
|
+
const clipboardData = copyToPrivateClipboard(from);
|
|
124
|
+
if (!clipboardData)
|
|
125
|
+
return false;
|
|
126
|
+
void onInsertCopiedCells(createClipboardEvent("paste", clipboardData), sheetId, from, to, shift ?? insertShiftForDrop(from.range, to.range));
|
|
127
|
+
return true;
|
|
128
|
+
}, [readonly, onInsertCopiedCells, copyToPrivateClipboard, sheetId]);
|
|
129
|
+
const linkSelection = useCallback((from, to) => {
|
|
130
|
+
if (readonly || !onChangeBatch)
|
|
131
|
+
return false;
|
|
132
|
+
onChangeBatch(sheetId, to.range, linkFormulasFor(from.range));
|
|
133
|
+
return true;
|
|
134
|
+
}, [readonly, onChangeBatch, sheetId]);
|
|
135
|
+
/** Drop-menu entries the host can run for this drop (Excel lists them in this order). */
|
|
136
|
+
const getDropActions = useCallback((menu) => {
|
|
137
|
+
const actions = [];
|
|
138
|
+
if (onMoveSelection)
|
|
139
|
+
actions.push("move");
|
|
140
|
+
if (onPaste && onCopy)
|
|
141
|
+
actions.push("copy", "copy-values", "copy-formats");
|
|
142
|
+
if (onChangeBatch)
|
|
143
|
+
actions.push("link");
|
|
144
|
+
if (onInsertCopiedCells && onCopy) {
|
|
145
|
+
actions.push("shift-down-copy", "shift-right-copy");
|
|
146
|
+
}
|
|
147
|
+
if (onInsertCutCells) {
|
|
148
|
+
// The engine's insert-move opens the band along the drop's own axis, so only the
|
|
149
|
+
// entry matching it can run.
|
|
150
|
+
actions.push(insertShiftForDrop(menu.from.range, menu.to.range) === "down"
|
|
151
|
+
? "shift-down-move"
|
|
152
|
+
: "shift-right-move");
|
|
153
|
+
}
|
|
154
|
+
return actions;
|
|
155
|
+
}, [onMoveSelection, onPaste, onCopy, onChangeBatch, onInsertCopiedCells, onInsertCutCells]);
|
|
156
|
+
const openDropMenu = useCallback((request) => {
|
|
157
|
+
if (readonly)
|
|
158
|
+
return;
|
|
159
|
+
setDropMenu(request);
|
|
160
|
+
}, [readonly]);
|
|
161
|
+
/** Cancel / Esc / click-away: nothing changes, the selection stays on the source. */
|
|
162
|
+
const closeDropMenu = useCallback(() => {
|
|
163
|
+
setDropMenu(null);
|
|
164
|
+
focusSheet?.();
|
|
165
|
+
}, [focusSheet]);
|
|
166
|
+
const runDropAction = useCallback(async (action) => {
|
|
167
|
+
const menu = dropMenu;
|
|
168
|
+
setDropMenu(null);
|
|
169
|
+
if (!menu || readonly)
|
|
170
|
+
return;
|
|
171
|
+
const { from, to } = menu;
|
|
172
|
+
const hasValue = (rowIndex, columnIndex) => !isNull(getValue(sheetId, rowIndex, columnIndex));
|
|
173
|
+
const replaces = action === "move"
|
|
174
|
+
? needsOverwritePrompt(from.range, to.range, hasValue)
|
|
175
|
+
: action === "copy" || action === "copy-values" || action === "link"
|
|
176
|
+
? needsCopyOverwritePrompt(to.range, hasValue)
|
|
177
|
+
: false;
|
|
178
|
+
if (replaces && !(await confirmOverwrite(MOVE_OVERWRITE_PROMPT))) {
|
|
179
|
+
focusSheet?.();
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
let done = false;
|
|
183
|
+
switch (action) {
|
|
184
|
+
case "move":
|
|
185
|
+
onMoveSelection?.(sheetId, from, to);
|
|
186
|
+
done = !!onMoveSelection;
|
|
187
|
+
break;
|
|
188
|
+
case "copy":
|
|
189
|
+
done = copySelection(from, to, "all");
|
|
190
|
+
break;
|
|
191
|
+
case "copy-values":
|
|
192
|
+
done = copySelection(from, to, "values");
|
|
193
|
+
break;
|
|
194
|
+
case "copy-formats":
|
|
195
|
+
done = copySelection(from, to, "formats");
|
|
196
|
+
break;
|
|
197
|
+
case "link":
|
|
198
|
+
done = linkSelection(from, to);
|
|
199
|
+
break;
|
|
200
|
+
case "shift-down-copy":
|
|
201
|
+
done = insertCopiedCells(from, to, "down");
|
|
202
|
+
break;
|
|
203
|
+
case "shift-right-copy":
|
|
204
|
+
done = insertCopiedCells(from, to, "right");
|
|
205
|
+
break;
|
|
206
|
+
case "shift-down-move":
|
|
207
|
+
case "shift-right-move":
|
|
208
|
+
onInsertCutCells?.(sheetId, from, to);
|
|
209
|
+
done = !!onInsertCutCells;
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
212
|
+
if (done) {
|
|
213
|
+
// Excel selects the destination block after the drop.
|
|
214
|
+
onChangeActiveCell?.(sheetId, {
|
|
215
|
+
rowIndex: to.range.startRowIndex,
|
|
216
|
+
columnIndex: to.range.startColumnIndex,
|
|
217
|
+
});
|
|
218
|
+
onChangeSelections?.([to]);
|
|
219
|
+
}
|
|
220
|
+
focusSheet?.();
|
|
221
|
+
}, [
|
|
222
|
+
dropMenu,
|
|
223
|
+
readonly,
|
|
224
|
+
getValue,
|
|
225
|
+
sheetId,
|
|
226
|
+
confirmOverwrite,
|
|
227
|
+
onMoveSelection,
|
|
228
|
+
copySelection,
|
|
229
|
+
linkSelection,
|
|
230
|
+
insertCopiedCells,
|
|
231
|
+
onInsertCutCells,
|
|
232
|
+
onChangeActiveCell,
|
|
233
|
+
onChangeSelections,
|
|
234
|
+
focusSheet,
|
|
235
|
+
]);
|
|
236
|
+
return {
|
|
237
|
+
copySelection,
|
|
238
|
+
insertCopiedCells,
|
|
239
|
+
dropMenu,
|
|
240
|
+
dropActions: dropMenu ? getDropActions(dropMenu) : [],
|
|
241
|
+
openDropMenu,
|
|
242
|
+
closeDropMenu,
|
|
243
|
+
runDropAction,
|
|
244
|
+
};
|
|
245
|
+
};
|
|
@@ -66,7 +66,14 @@ export type UseSelectionRendererProps = {
|
|
|
66
66
|
calculatedColumnFill?: CalculatedColumnFill | null;
|
|
67
67
|
canStopAutoCalculatedColumns?: boolean;
|
|
68
68
|
onChooseCalculatedColumnOption?(option: CalculatedColumnOption): void;
|
|
69
|
+
/** The active cell's error-checking flag, when it carries the green ◤ (smart tag beside it). */
|
|
70
|
+
errorCheck?: SelectionNewProps["errorCheck"];
|
|
71
|
+
errorCheckMenuOpen?: boolean;
|
|
72
|
+
onErrorCheckMenuOpenChange?: SelectionNewProps["onErrorCheckMenuOpenChange"];
|
|
73
|
+
onChooseErrorCheckOption?: SelectionNewProps["onChooseErrorCheckOption"];
|
|
69
74
|
onSplitTextToColumns: CanvasGridProps["onSplitTextToColumns"];
|
|
75
|
+
/** Paste Options gallery choice (re-applies the last paste). */
|
|
76
|
+
onChoosePasteOption?: SelectionNewProps["onChoosePasteOption"];
|
|
70
77
|
hoveredCell?: CellInterface | null;
|
|
71
78
|
onRemoveQuickEdit(range: SheetRange): void;
|
|
72
79
|
onAddQuickEdit(range: SheetRange): void;
|
|
@@ -77,5 +84,5 @@ export type UseSelectionRendererProps = {
|
|
|
77
84
|
*/
|
|
78
85
|
isFillShrink?: boolean;
|
|
79
86
|
};
|
|
80
|
-
export declare const useSelectionRenderer: ({ sheetId, selectionCount, selectionBackgroundColor, selectionBorderColor, selectionStrokeWidth, showActiveCellBorderInSelection, onSelectionMouseDown, onChangeActiveCell, onChangeSelections, onRequestEditTable, onRequestEditPivotTable, onMouseDownResizeHandle, onMouseDownChartSourceResizeHandle, onMouseDownMoveSelection, isDraggingMoveSelection, onFlashEnd, getSheetName, resizeHandleSize, showSelectionResizeHandles, resizeHandleBorderColor, SelectionTitleComponent, isResizingTable, fillHandleSize, showFillHandle, enableMagicFill, MagicFillComponent, MagicFillContent, readonly, showPasteMenu, fillOptions, onChooseFillType, onOpenFillSeriesDialog, onCloseFillOptions, insertOptions, onChooseInsertOption, tableAutoExpansion, canStopAutoExpandingTables, onChooseTableAutoExpansionOption, calculatedColumnFill, canStopAutoCalculatedColumns, onChooseCalculatedColumnOption, hoveredCell, onSplitTextToColumns, onRemoveQuickEdit, onAddQuickEdit, QuickEdit, PasteMenu, SuggestionAction, cachedHoveredSelectionIds, isFillShrink, }: UseSelectionRendererProps) => (props: SelectionProps<SelectionAttributes>) => React.JSX.Element | null;
|
|
87
|
+
export declare const useSelectionRenderer: ({ sheetId, selectionCount, selectionBackgroundColor, selectionBorderColor, selectionStrokeWidth, showActiveCellBorderInSelection, onSelectionMouseDown, onChangeActiveCell, onChangeSelections, onRequestEditTable, onRequestEditPivotTable, onMouseDownResizeHandle, onMouseDownChartSourceResizeHandle, onMouseDownMoveSelection, isDraggingMoveSelection, onFlashEnd, getSheetName, resizeHandleSize, showSelectionResizeHandles, resizeHandleBorderColor, SelectionTitleComponent, isResizingTable, fillHandleSize, showFillHandle, enableMagicFill, MagicFillComponent, MagicFillContent, readonly, showPasteMenu, fillOptions, onChooseFillType, onOpenFillSeriesDialog, onCloseFillOptions, insertOptions, onChooseInsertOption, tableAutoExpansion, canStopAutoExpandingTables, onChooseTableAutoExpansionOption, calculatedColumnFill, canStopAutoCalculatedColumns, onChooseCalculatedColumnOption, errorCheck, errorCheckMenuOpen, onErrorCheckMenuOpenChange, onChooseErrorCheckOption, hoveredCell, onSplitTextToColumns, onChoosePasteOption, onRemoveQuickEdit, onAddQuickEdit, QuickEdit, PasteMenu, SuggestionAction, cachedHoveredSelectionIds, isFillShrink, }: UseSelectionRendererProps) => (props: SelectionProps<SelectionAttributes>) => React.JSX.Element | null;
|
|
81
88
|
//# sourceMappingURL=use-selection-renderer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-selection-renderer.d.ts","sourceRoot":"","sources":["../../../hooks/use-selection-renderer.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,aAAa,EAKlB,KAAK,aAAa,EAClB,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAA8B,MAAM,OAAO,CAAC;AAGnD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAShE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAErE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EACL,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAE5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC9B,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EACV,eAAe,EACf,mBAAmB,EACpB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAM5C,MAAM,MAAM,yBAAyB,GAAG;IACtC,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,wBAAwB,EAAE,MAAM,CAAC;IACjC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,oFAAoF;IACpF,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oGAAoG;IACpG,+BAA+B,CAAC,EAAE,OAAO,CAAC;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACnD,kBAAkB,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC;IAC1D,kBAAkB,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC;IAC1D,oBAAoB,CAAC,CACnB,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,cAAc,EAAE,UAAU,CAAC,EAC/C,IAAI,EAAE,aAAa,GAAG,SAAS,EAC/B,SAAS,EAAE,aAAa,GAAG,SAAS,EACpC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,GAChC,IAAI,CAAC;IACR,uBAAuB,EAAE,KAAK,CAAC,WAAW,CAAC;IAC3C,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,eAAe,EAAE,OAAO,CAAC;IACzB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC;IAC1D,uBAAuB,EAAE,eAAe,CAAC,yBAAyB,CAAC,CAAC;IACpE,uBAAuB,EAAE,iBAAiB,CAAC,yBAAyB,CAAC,CAAC;IACtE,oEAAoE;IACpE,kCAAkC,CAAC,EAAE,iBAAiB,CAAC,yBAAyB,CAAC,CAAC;IAClF,wBAAwB,EAAE,iBAAiB,CAAC,uBAAuB,CAAC,CAAC;IACrE,sEAAsE;IACtE,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,UAAU,EAAE,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC;IACtD,eAAe,CAAC,EAAE,eAAe,CAAC,iBAAiB,CAAC,CAAC;IACrD,kBAAkB,CAAC,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC;IAC3D,gBAAgB,CAAC,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC;IACvD,SAAS,CAAC,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;IACzC,gBAAgB,CAAC,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gGAAgG;IAChG,WAAW,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACxC,gBAAgB,CAAC,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAChD,sBAAsB,CAAC,IAAI,IAAI,CAAC;IAChC,kBAAkB,CAAC,IAAI,IAAI,CAAC;IAC5B;;;OAGG;IACH,aAAa,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC5C,oBAAoB,CAAC,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACxD,uGAAuG;IACvG,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC/C,0BAA0B,CAAC,EAAE,OAAO,CAAC;IACrC,gCAAgC,CAAC,CAAC,MAAM,EAAE,wBAAwB,GAAG,IAAI,CAAC;IAC1E,sGAAsG;IACtG,oBAAoB,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACnD,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,8BAA8B,CAAC,CAAC,MAAM,EAAE,sBAAsB,GAAG,IAAI,CAAC;IACtE,oBAAoB,EAAE,eAAe,CAAC,sBAAsB,CAAC,CAAC;IAC9D,WAAW,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACnC,iBAAiB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IAC3C,cAAc,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACxC,yBAAyB,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAChD;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAyBF,eAAO,MAAM,oBAAoB,GAAI,
|
|
1
|
+
{"version":3,"file":"use-selection-renderer.d.ts","sourceRoot":"","sources":["../../../hooks/use-selection-renderer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -28,7 +28,7 @@ const anchorsInsertOptions = (insertOptions, range, type, index, isEmptySelectio
|
|
|
28
28
|
: range.startColumnIndex <= bandEnd &&
|
|
29
29
|
range.endColumnIndex >= insertOptions.start;
|
|
30
30
|
};
|
|
31
|
-
export const useSelectionRenderer = ({ sheetId, selectionCount, selectionBackgroundColor, selectionBorderColor, selectionStrokeWidth, showActiveCellBorderInSelection, onSelectionMouseDown, onChangeActiveCell, onChangeSelections, onRequestEditTable, onRequestEditPivotTable, onMouseDownResizeHandle, onMouseDownChartSourceResizeHandle, onMouseDownMoveSelection, isDraggingMoveSelection, onFlashEnd, getSheetName, resizeHandleSize = 6, showSelectionResizeHandles, resizeHandleBorderColor, SelectionTitleComponent, isResizingTable, fillHandleSize, showFillHandle, enableMagicFill, MagicFillComponent, MagicFillContent, readonly, showPasteMenu, fillOptions, onChooseFillType, onOpenFillSeriesDialog, onCloseFillOptions, insertOptions, onChooseInsertOption, tableAutoExpansion, canStopAutoExpandingTables = false, onChooseTableAutoExpansionOption, calculatedColumnFill, canStopAutoCalculatedColumns = false, onChooseCalculatedColumnOption, hoveredCell, onSplitTextToColumns, onRemoveQuickEdit, onAddQuickEdit, QuickEdit, PasteMenu, SuggestionAction, cachedHoveredSelectionIds, isFillShrink = false, }) => {
|
|
31
|
+
export const useSelectionRenderer = ({ sheetId, selectionCount, selectionBackgroundColor, selectionBorderColor, selectionStrokeWidth, showActiveCellBorderInSelection, onSelectionMouseDown, onChangeActiveCell, onChangeSelections, onRequestEditTable, onRequestEditPivotTable, onMouseDownResizeHandle, onMouseDownChartSourceResizeHandle, onMouseDownMoveSelection, isDraggingMoveSelection, onFlashEnd, getSheetName, resizeHandleSize = 6, showSelectionResizeHandles, resizeHandleBorderColor, SelectionTitleComponent, isResizingTable, fillHandleSize, showFillHandle, enableMagicFill, MagicFillComponent, MagicFillContent, readonly, showPasteMenu, fillOptions, onChooseFillType, onOpenFillSeriesDialog, onCloseFillOptions, insertOptions, onChooseInsertOption, tableAutoExpansion, canStopAutoExpandingTables = false, onChooseTableAutoExpansionOption, calculatedColumnFill, canStopAutoCalculatedColumns = false, onChooseCalculatedColumnOption, errorCheck, errorCheckMenuOpen = false, onErrorCheckMenuOpenChange, onChooseErrorCheckOption, hoveredCell, onSplitTextToColumns, onChoosePasteOption, onRemoveQuickEdit, onAddQuickEdit, QuickEdit, PasteMenu, SuggestionAction, cachedHoveredSelectionIds, isFillShrink = false, }) => {
|
|
32
32
|
const formulaMode = useFormulaModeValue();
|
|
33
33
|
const selectionIndex = useFormulaSelectionIndex();
|
|
34
34
|
const hoveredCellRef = useRef(hoveredCell);
|
|
@@ -149,7 +149,7 @@ export const useSelectionRenderer = ({ sheetId, selectionCount, selectionBackgro
|
|
|
149
149
|
columnIndex: range.startColumnIndex,
|
|
150
150
|
})
|
|
151
151
|
? { kind: calculatedColumnFill.kind, canStop: canStopAutoCalculatedColumns }
|
|
152
|
-
: undefined, onChooseCalculatedColumnOption: onChooseCalculatedColumnOption, sheetId: sheetId, MagicFillContent: MagicFillContent, QuickEdit: QuickEdit, PasteMenu: PasteMenu, SuggestionAction: SuggestionAction, onSplitTextToColumns: (delimiter) => {
|
|
152
|
+
: undefined, onChooseCalculatedColumnOption: onChooseCalculatedColumnOption, errorCheck: type === "activeCell" ? errorCheck : undefined, errorCheckMenuOpen: errorCheckMenuOpen, onErrorCheckMenuOpenChange: onErrorCheckMenuOpenChange, onChooseErrorCheckOption: onChooseErrorCheckOption, sheetId: sheetId, MagicFillContent: MagicFillContent, QuickEdit: QuickEdit, PasteMenu: PasteMenu, onChoosePasteOption: onChoosePasteOption, SuggestionAction: SuggestionAction, onSplitTextToColumns: (delimiter) => {
|
|
153
153
|
// Active cell
|
|
154
154
|
const newActiveCell = range
|
|
155
155
|
? {
|
|
@@ -202,7 +202,12 @@ export const useSelectionRenderer = ({ sheetId, selectionCount, selectionBackgro
|
|
|
202
202
|
calculatedColumnFill,
|
|
203
203
|
canStopAutoCalculatedColumns,
|
|
204
204
|
onChooseCalculatedColumnOption,
|
|
205
|
+
errorCheck,
|
|
206
|
+
errorCheckMenuOpen,
|
|
207
|
+
onErrorCheckMenuOpenChange,
|
|
208
|
+
onChooseErrorCheckOption,
|
|
205
209
|
onSplitTextToColumns,
|
|
210
|
+
onChoosePasteOption,
|
|
206
211
|
MagicFillContent,
|
|
207
212
|
QuickEdit,
|
|
208
213
|
PasteMenu,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { AreaStyle, CellInterface, GridRange, HiddenType, OptionalCellInterface, SelectionArea, SelectionPolicy, ViewPortProps } from "@rowsncolumns/grid";
|
|
2
2
|
import { Align } from "@rowsncolumns/grid";
|
|
3
3
|
import type React from "react";
|
|
4
|
+
import { type EnterKeyDirection } from "../components/cell-editor/helpers";
|
|
4
5
|
import type { CanvasGridProps } from "../components/canvas-grid/typings";
|
|
5
6
|
import type { AutoFillType, FillOptions, SheetRange } from "../types";
|
|
6
7
|
/**
|
|
@@ -20,6 +21,27 @@ export type FillHandleRelease<T extends AreaStyle = AreaStyle> = {
|
|
|
20
21
|
toggle: boolean;
|
|
21
22
|
button: "left" | "right";
|
|
22
23
|
};
|
|
24
|
+
/**
|
|
25
|
+
* A right-button drag of the selection border ended away from the source: nothing has
|
|
26
|
+
* changed yet. The grid opens Excel's drop menu (Move Here, Copy Here, …) at the release
|
|
27
|
+
* point and runs the entry the user picks; dismissing it leaves the sheet as it was.
|
|
28
|
+
*/
|
|
29
|
+
export type SelectionDragMenuRequest<T extends AreaStyle = AreaStyle> = {
|
|
30
|
+
sheetId: number;
|
|
31
|
+
from: SelectionArea<T>;
|
|
32
|
+
to: SelectionArea<T>;
|
|
33
|
+
/** Release point in viewport coordinates. */
|
|
34
|
+
clientX: number;
|
|
35
|
+
clientY: number;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* The copy modifier of a selection-border drag, read at release like Excel: Ctrl on
|
|
39
|
+
* Windows / Linux, Option (⌥) on macOS (Excel for Mac; ⌃-click is the Mac context menu).
|
|
40
|
+
*/
|
|
41
|
+
export declare const isSelectionCopyModifier: (e: {
|
|
42
|
+
ctrlKey: boolean;
|
|
43
|
+
altKey: boolean;
|
|
44
|
+
}) => boolean;
|
|
23
45
|
/**
|
|
24
46
|
* Modifier state of a fill-handle gesture (drag, double-click, drag-back). `"toggle"` = Ctrl
|
|
25
47
|
* (Cmd on Mac) was held: Excel flips copy↔series for a fill and clears formats too for a
|
|
@@ -122,6 +144,11 @@ export type UseSelectionOptions<T extends AreaStyle = AreaStyle> = {
|
|
|
122
144
|
* Enable cell selection when enter key is pressed
|
|
123
145
|
*/
|
|
124
146
|
enableSelectOnEnterKey?: boolean;
|
|
147
|
+
/**
|
|
148
|
+
* Where Enter moves the active cell (Excel's "After pressing Enter, move selection"), Shift+Enter
|
|
149
|
+
* the other way; `"none"` keeps it. Defaults to `"down"`.
|
|
150
|
+
*/
|
|
151
|
+
enterKeyDirection?: EnterKeyDirection;
|
|
125
152
|
/**
|
|
126
153
|
* Mousedown
|
|
127
154
|
*/
|
|
@@ -150,6 +177,26 @@ export type UseSelectionOptions<T extends AreaStyle = AreaStyle> = {
|
|
|
150
177
|
* `onMoveSelection` when absent.
|
|
151
178
|
*/
|
|
152
179
|
onInsertCutCells?: (sheetId: number, from: SelectionArea<T>, to: SelectionArea<T>) => void;
|
|
180
|
+
/**
|
|
181
|
+
* Ctrl+drag (⌥+drag on macOS) of the selection border: copy the block to `to`, the
|
|
182
|
+
* source stays. Called after Excel's overwrite prompt when the destination holds data.
|
|
183
|
+
* Without it (or when it returns `false` — nothing was copied) the gesture changes
|
|
184
|
+
* nothing and the selection returns to the source.
|
|
185
|
+
*/
|
|
186
|
+
onCopySelection?: (sheetId: number, from: SelectionArea<T>, to: SelectionArea<T>) => boolean | void;
|
|
187
|
+
/**
|
|
188
|
+
* Ctrl+Shift+drag (⌥⇧+drag on macOS): open the destination band (down for a vertical
|
|
189
|
+
* drop, right for a horizontal one) and insert a copy of the block there — no prompt.
|
|
190
|
+
* Without it (or when it returns `false`) the gesture changes nothing and the
|
|
191
|
+
* selection returns to the source.
|
|
192
|
+
*/
|
|
193
|
+
onInsertCopiedCells?: (sheetId: number, from: SelectionArea<T>, to: SelectionArea<T>) => boolean | void;
|
|
194
|
+
/**
|
|
195
|
+
* Right-button drag of the selection border released away from the source. When set,
|
|
196
|
+
* the hook takes right-button drags (and swallows that gesture's `contextmenu`); the
|
|
197
|
+
* grid shows the drop menu. When absent, a right-press on the border is left alone.
|
|
198
|
+
*/
|
|
199
|
+
onSelectionDragMenu?: (request: SelectionDragMenuRequest<T>) => void;
|
|
153
200
|
/**
|
|
154
201
|
* Asks the user before a plain drag-move overwrites non-empty destination
|
|
155
202
|
* cells (Excel: "There's already data here. Do you want to replace it?").
|
|
@@ -218,10 +265,21 @@ export type UseSelectionOptions<T extends AreaStyle = AreaStyle> = {
|
|
|
218
265
|
enableDataBoundaryNavigation?: boolean;
|
|
219
266
|
isRowHeader(index: number): boolean;
|
|
220
267
|
isColumnHeader(index: number): boolean;
|
|
268
|
+
/**
|
|
269
|
+
* Whether the selection may cover `range`. Excel's "Select locked cells" /
|
|
270
|
+
* "Select unlocked cells" protection flags: when it returns `false` the
|
|
271
|
+
* active cell and the selection never move onto that range — a click or a
|
|
272
|
+
* drag onto it does nothing, Shift+Arrow does not extend onto it, and an
|
|
273
|
+
* arrow key / Tab / Enter skips to the next selectable cell in its
|
|
274
|
+
* direction (or stays put). Absent: every range is selectable.
|
|
275
|
+
*/
|
|
276
|
+
isRangeSelectable?: (range: GridRange) => boolean;
|
|
221
277
|
};
|
|
222
278
|
export type NewSelectionMode = "clear" | "modify" | "append";
|
|
223
|
-
export declare const useSelection: <T extends AreaStyle>({ sheetId, activeCell, onChangeActiveCell, selections, onChangeSelections, columnCount, rowCount, selectionPolicy, newSelectionMode, allowDeselectSelection, onFill, onFillHandleRelease, onFillShrink, onInsertCutCells, confirmMoveOverwrite, isHiddenRow, isHiddenColumn, alwaysScrollToActiveCell, selectionTopBound, selectionBottomBound, selectionLeftBound, selectionRightBound, mouseDownInterceptor, mouseMoveInterceptor, mergedCells, canSelectionSpanMergedCells, getValue, onMoveSelection, getCellCoordsFromOffset, getCellBounds, getViewPort, focus, scrollToCell, isMergedCell, enableSelectOnEnterKey, formulaMode, isTouchDevice, getDataRowCount, getDataRegion, isRowHeader, isColumnHeader, enableDataBoundaryNavigation, tables, onInsertTableRow, }: UseSelectionOptions<T>) => {
|
|
279
|
+
export declare const useSelection: <T extends AreaStyle>({ sheetId, activeCell, onChangeActiveCell: onChangeActiveCellProp, selections, onChangeSelections: onChangeSelectionsProp, columnCount, rowCount, selectionPolicy, newSelectionMode, allowDeselectSelection, onFill, onFillHandleRelease, onFillShrink, onInsertCutCells, onCopySelection, onInsertCopiedCells, onSelectionDragMenu, confirmMoveOverwrite, isHiddenRow, isHiddenColumn, alwaysScrollToActiveCell, selectionTopBound, selectionBottomBound, selectionLeftBound, selectionRightBound, mouseDownInterceptor, mouseMoveInterceptor, mergedCells, canSelectionSpanMergedCells, getValue, onMoveSelection, getCellCoordsFromOffset, getCellBounds, getViewPort, focus, scrollToCell, isMergedCell, enableSelectOnEnterKey, enterKeyDirection, formulaMode, isTouchDevice, getDataRowCount, getDataRegion, isRowHeader, isColumnHeader, enableDataBoundaryNavigation, tables, onInsertTableRow, isRangeSelectable: isRangeSelectableProp, }: UseSelectionOptions<T>) => {
|
|
224
280
|
isDragging: boolean;
|
|
281
|
+
/** True while a selection-border drag would copy on release (Ctrl / ⌥ held). */
|
|
282
|
+
isDragCopy: boolean;
|
|
225
283
|
draggedSelection: SelectionArea<T> | undefined;
|
|
226
284
|
initialDraggedSelection: SelectionArea<T> | undefined;
|
|
227
285
|
isFilling: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-selection.d.ts","sourceRoot":"","sources":["../../../hooks/use-selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EACb,SAAS,EACT,UAAU,EACV,qBAAqB,EACrB,aAAa,EACb,eAAe,EACf,aAAa,EACd,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,EACL,KAAK,EAcN,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"use-selection.d.ts","sourceRoot":"","sources":["../../../hooks/use-selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,aAAa,EACb,SAAS,EACT,UAAU,EACV,qBAAqB,EACrB,aAAa,EACb,eAAe,EACf,aAAa,EACd,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,EACL,KAAK,EAcN,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAmB/B,OAAO,EACL,KAAK,iBAAiB,EAEvB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAIzE,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAGtE;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,aAAa,CAAC;IAC1B,uDAAuD;IACvD,aAAa,EAAE,aAAa,CAAC;IAC7B,8CAA8C;IAC9C,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/B,gEAAgE;IAChE,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,wBAAwB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IACvB,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;IACrB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,uBAAuB,GAAI,GAAG;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;CACjB,YAA6C,CAAC;AAM/C;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE,SAAS,CAAC;IACtB,SAAS,EAAE,SAAS,CAAC;CACtB,CAAC;AAQF,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,UAAU,EAAE,aAAa,CAAC;IAC1B;;OAEG;IACH,kBAAkB,CAAC,EAAE,eAAe,CAAC,oBAAoB,CAAC,CAAC;IAC3D;;OAEG;IACH,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/B;;OAEG;IACH,kBAAkB,CAAC,CACjB,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,EAC9B,YAAY,CAAC,EAAE,OAAO,GACrB,IAAI,CAAC;IACR;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;;;;OAKG;IACH,MAAM,CAAC,EAAE,CACP,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,aAAa,EACzB,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,EAC9B,kBAAkB,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,EACvC,QAAQ,CAAC,EAAE,YAAY,EACvB,OAAO,CAAC,EAAE,WAAW,KAClB,IAAI,CAAC;IACV;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CACb,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,aAAa,EACzB,UAAU,EAAE,SAAS,EACrB,OAAO,CAAC,EAAE,kBAAkB,KACzB,IAAI,CAAC;IACV;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAC9D;;OAEG;IACH,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB;;OAEG;IACH,cAAc,CAAC,EAAE,UAAU,CAAC;IAC5B;;OAEG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;IAC1B;;OAEG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC;;OAEG;IACH,oBAAoB,CAAC,EAAE,CACrB,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC,YAAY,EAC7D,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,KAAK,CAAC,gBAAgB,CAAC,aAAa,GAAG,IAAI,CAAC,EACnD,GAAG,EAAE,KAAK,CAAC,gBAAgB,CAAC,aAAa,GAAG,IAAI,CAAC,EACjD,eAAe,EAAE,CACf,MAAM,EAAE,aAAa,EACrB,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,KAChC,IAAI,EACT,eAAe,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,GAAG,CAAC,EAAE,aAAa,KAAK,IAAI,EACpE,eAAe,EAAE,MAAM,IAAI,EAC3B,SAAS,EAAE,MAAM,IAAI,KAClB,OAAO,GAAG,SAAS,CAAC;IACzB,oBAAoB,CAAC,EAAE,CACrB,CAAC,EAAE,UAAU,CAAC,UAAU,EACxB,MAAM,EAAE,aAAa,EACrB,KAAK,EAAE,KAAK,CAAC,gBAAgB,CAAC,aAAa,GAAG,IAAI,CAAC,EACnD,GAAG,EAAE,KAAK,CAAC,gBAAgB,CAAC,aAAa,GAAG,IAAI,CAAC,EACjD,eAAe,EAAE,CACf,MAAM,EAAE,aAAa,EACrB,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,KAChC,IAAI,KACN,OAAO,GAAG,SAAS,CAAC;IACzB,2BAA2B,CAAC,EAAE,CAC5B,KAAK,EAAE,aAAa,EACpB,GAAG,EAAE,aAAa,KACf,OAAO,CAAC;IACb;;OAEG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC;;OAEG;IACH,QAAQ,EAAE,CACR,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;IAC/B;;OAEG;IACH,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC;;OAEG;IACH,eAAe,CAAC,EAAE,CAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EACtB,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,KACjB,IAAI,CAAC;IACV;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CACjB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EACtB,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,KACjB,IAAI,CAAC;IACV;;;;;OAKG;IACH,eAAe,CAAC,EAAE,CAChB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EACtB,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,KACjB,OAAO,GAAG,IAAI,CAAC;IACpB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,CACpB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EACtB,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,KACjB,OAAO,GAAG,IAAI,CAAC;IACpB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,wBAAwB,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACrE;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACvE;;;;OAIG;IACH,uBAAuB,CACrB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,GAClC,aAAa,GAAG,IAAI,GAAG,SAAS,CAAC;IACpC;;;OAGG;IACH,aAAa,CAAC,IAAI,EAAE,aAAa,GAAG,SAAS,CAAC;IAC9C;;OAEG;IACH,WAAW,IAAI,aAAa,CAAC;IAC7B;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;IACd;;;;OAIG;IACH,YAAY,CACV,IAAI,EAAE,qBAAqB,EAC3B,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,GACxB,IAAI,GAAG,SAAS,CAAC;IACpB;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,GAAG,SAAS,CAAC;IACvD;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,oBAAoB,CAAC,EAAE,CAAC,UAAU,GAAG,SAAS,CAAC,EAAE,CAAC;IAClD;;OAEG;IACH,MAAM,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnC;;OAEG;IACH,gBAAgB,CAAC,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC;IACvD;;OAEG;IACH,eAAe,EAAE,eAAe,CAAC,iBAAiB,CAAC,CAAC;IACpD;;;OAGG;IACH,aAAa,CAAC,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;IACjD;;OAEG;IACH,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACpC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACvC;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC;CACnD,CAAC;AAKF,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAuG7D,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,SAAS,EAAE,s5BAkD/C,mBAAmB,CAAC,CAAC,CAAC;;IA8kFrB,gFAAgF;;;;;;8BA5X3E,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,cACvB,aAAa,GAAG,SAAS,aAC1B,aAAa,GAAG,SAAS,SAC7B,MAAM,GAAG,SAAS;4BAkNnB,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC;qBAnnCtC,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,GAAG,UAAU,CAAC,YAAY;mBAgM1D,KAAK,CAAC,aAAa,GAAG,UAAU,CAAC,aAAa;0BAvoC1C,aAAa,QAAO,aAAa;+BAkjDrC,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC;iCAmiBhC,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC;;;;8BAtsE3B,aAAa,kBAAkB,OAAO;;6BAmEvC,aAAa,QAAO,aAAa;;;6BAsL5B,MAAM,UACP,aAAa,kCAEb,KAAK;;6CAwzDT,aAAa,GAAG,SAAS,cACnB,aAAa,EAAE,GAAG,SAAS;mCA/lEjC,aAAa,OAAO,aAAa;;;;;;gCA6wB3B,MAAM,GAAG,SAAS;gDAy5CpB,MAAM,aAAa,aAAa,KAAG,SAAS;CAkP3D,CAAC"}
|