@rowsncolumns/spreadsheet 10.5.6 → 10.5.8
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/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/cjs/components/canvas-grid/index.js +111 -59
- package/dist/cjs/components/canvas-grid/typings.d.ts +9 -1
- 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 +15 -6
- package/dist/cjs/components/cell/line-height.d.ts +10 -10
- package/dist/cjs/components/cell/line-height.d.ts.map +1 -1
- package/dist/cjs/components/cell/line-height.js +17 -19
- package/dist/cjs/components/cell/typings.d.ts +3 -1
- package/dist/cjs/components/cell/typings.d.ts.map +1 -1
- package/dist/cjs/components/cell-editor/index.d.ts +1 -1
- package/dist/cjs/components/cell-editor/index.d.ts.map +1 -1
- package/dist/cjs/components/cell-editor/index.js +42 -8
- package/dist/cjs/helpers.d.ts.map +1 -1
- package/dist/cjs/helpers.js +2 -1
- package/dist/cjs/hooks/use-editable.d.ts +30 -1
- package/dist/cjs/hooks/use-editable.d.ts.map +1 -1
- package/dist/cjs/hooks/use-editable.js +81 -13
- package/dist/cjs/hooks/use-editor-keydown.d.ts +2 -1
- package/dist/cjs/hooks/use-editor-keydown.d.ts.map +1 -1
- package/dist/cjs/hooks/use-editor-keydown.js +5 -3
- package/dist/cjs/hooks/use-keyboard-handler.d.ts +9 -1
- package/dist/cjs/hooks/use-keyboard-handler.d.ts.map +1 -1
- package/dist/cjs/hooks/use-keyboard-handler.js +46 -4
- package/dist/cjs/hooks/use-sizer.d.ts +3 -1
- package/dist/cjs/hooks/use-sizer.d.ts.map +1 -1
- package/dist/cjs/hooks/use-sizer.js +7 -4
- package/dist/cjs/platform.d.ts +9 -0
- package/dist/cjs/platform.d.ts.map +1 -0
- package/dist/cjs/platform.js +21 -0
- package/dist/cjs/release-date.js +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/esm/components/canvas-grid/index.js +51 -3
- package/dist/esm/components/canvas-grid/typings.d.ts +9 -1
- 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 +17 -8
- package/dist/esm/components/cell/line-height.d.ts +10 -10
- package/dist/esm/components/cell/line-height.d.ts.map +1 -1
- package/dist/esm/components/cell/line-height.js +15 -15
- package/dist/esm/components/cell/typings.d.ts +3 -1
- package/dist/esm/components/cell/typings.d.ts.map +1 -1
- package/dist/esm/components/cell-editor/index.d.ts +1 -1
- package/dist/esm/components/cell-editor/index.d.ts.map +1 -1
- package/dist/esm/components/cell-editor/index.js +37 -4
- package/dist/esm/helpers.d.ts.map +1 -1
- package/dist/esm/helpers.js +2 -1
- package/dist/esm/hooks/use-editable.d.ts +30 -1
- package/dist/esm/hooks/use-editable.d.ts.map +1 -1
- package/dist/esm/hooks/use-editable.js +78 -7
- package/dist/esm/hooks/use-editor-keydown.d.ts +2 -1
- package/dist/esm/hooks/use-editor-keydown.d.ts.map +1 -1
- package/dist/esm/hooks/use-editor-keydown.js +5 -3
- package/dist/esm/hooks/use-keyboard-handler.d.ts +9 -1
- package/dist/esm/hooks/use-keyboard-handler.d.ts.map +1 -1
- package/dist/esm/hooks/use-keyboard-handler.js +46 -4
- package/dist/esm/hooks/use-sizer.d.ts +3 -1
- package/dist/esm/hooks/use-sizer.d.ts.map +1 -1
- package/dist/esm/hooks/use-sizer.js +8 -5
- package/dist/esm/platform.d.ts +9 -0
- package/dist/esm/platform.d.ts.map +1 -0
- package/dist/esm/platform.js +16 -0
- package/dist/esm/release-date.js +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import { getFontLineMetrics } from "@rowsncolumns/grid";
|
|
1
|
+
import { getFontLineMetrics, } from "@rowsncolumns/grid";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
3
|
+
* Box, leading and advance of one painted line, in pixels. `fontMetrics`
|
|
4
|
+
* takes the font's measured line box plus Excel's leading from
|
|
5
|
+
* `getFontLineMetrics` — the same numbers the sizer fits rows with, so a
|
|
6
|
+
* fitted row never clips its last line (#1141). `fixed` keeps the legacy
|
|
7
|
+
* `fontSize * lineHeight` box with no leading.
|
|
8
8
|
*/
|
|
9
|
-
export const
|
|
10
|
-
if (mode === "fixed")
|
|
11
|
-
|
|
9
|
+
export const getLineMetrics = (font, mode, lineHeight, scale) => {
|
|
10
|
+
if (mode === "fixed") {
|
|
11
|
+
const box = font.fontSize * lineHeight;
|
|
12
|
+
return { box, leading: 0, advance: box };
|
|
13
|
+
}
|
|
12
14
|
return getFontLineMetrics({
|
|
13
15
|
fontFamily: font.fontFamily,
|
|
14
16
|
fontSize: font.fontSize,
|
|
15
17
|
fontWeight: font.bold ? "bold" : "normal",
|
|
16
18
|
fontStyle: font.italic ? "italic" : "normal",
|
|
17
|
-
}, mode, scale)
|
|
19
|
+
}, mode, scale);
|
|
18
20
|
};
|
|
19
21
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
+
* Distance from the top of one painted line to the top of the next, in
|
|
23
|
+
* pixels.
|
|
22
24
|
*/
|
|
23
|
-
export const
|
|
24
|
-
? getLineAdvance(font, mode, lineHeight, scale) / font.fontSize
|
|
25
|
-
: lineHeight;
|
|
25
|
+
export const getLineAdvance = (font, mode, lineHeight, scale) => getLineMetrics(font, mode, lineHeight, scale).advance;
|
|
@@ -24,7 +24,9 @@ export type CellProps<S extends StructuredResult = StructuredResult> = RendererP
|
|
|
24
24
|
*/
|
|
25
25
|
cellFormat: CellFormat | undefined | null;
|
|
26
26
|
/**
|
|
27
|
-
*
|
|
27
|
+
* Inner padding of the text node on every side, not scaled with zoom.
|
|
28
|
+
* Defaults to `CELL_TEXT_PADDING`, the padding the sizer wraps at and
|
|
29
|
+
* fits rows against.
|
|
28
30
|
*/
|
|
29
31
|
padding?: number;
|
|
30
32
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typings.d.ts","sourceRoot":"","sources":["../../../../components/cell/typings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,aAAa,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EACL,iBAAiB,EAElB,MAAM,+BAA+B,CAAC;AAEvC,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,gBAAgB,GAAG,gBAAgB,IACjE,aAAa,GAAG;IACd;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,CAAC;IACpB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,oBAAoB,CAAC;IAC1C;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1C
|
|
1
|
+
{"version":3,"file":"typings.d.ts","sourceRoot":"","sources":["../../../../components/cell/typings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,aAAa,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAChF,OAAO,EACL,iBAAiB,EAElB,MAAM,+BAA+B,CAAC;AAEvC,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,gBAAgB,GAAG,gBAAgB,IACjE,aAAa,GAAG;IACd;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,CAAC;IACpB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,oBAAoB,CAAC;IAC1C;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1C;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;OAEG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;OAEG;IACH,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAChC;;OAEG;IACH,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC/B;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE;QACX,WAAW,EAAE,MAAM;QACnB,YAAY,EAAE,MAAM;QACpB,WAAW,EAAE,MAAM;QACnB,cAAc,CAAC,EAAE,KAAK,GAAG,IAAI;KAC9B,EAAE,CAAC;IACJ;;OAEG;IACH,KAAK,EAAE,gBAAgB,CAAC;IACxB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B;;OAEG;IACH,cAAc,CAAC,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IACxC;;OAEG;IACH,gBAAgB,EAAE,WAAW,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC,CAAC;IACnE;;;OAGG;IACH,aAAa,CAAC,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IAC1C;;;;OAIG;IACH,eAAe,CAAC,CAAC,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9D;;;OAGG;IACH,aAAa,CAAC,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IAC1C;;;;;OAKG;IACH,YAAY,CAAC,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,CAAC;IACzC;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,OAAO,KAAK,IAAI,CAAC;IACzE;;OAEG;IACH,6BAA6B,EAAE,iBAAiB,CAAC,+BAA+B,CAAC,CAAC;IAClF;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC"}
|
|
@@ -148,5 +148,5 @@ export type CellEditorProps = SharedEditorProps & {
|
|
|
148
148
|
*/
|
|
149
149
|
MentionDropdownItemComponent?: CanvasGridProps["MentionDropdownItemComponent"];
|
|
150
150
|
};
|
|
151
|
-
export declare const CellEditor: React.MemoExoticComponent<({ value, effectiveValue, isNewValue, onChange, sheetId, editingSheetId, cell, position, format, locale, formulaLocale, scale, autoFocus, maxWidth, maxHeight, containerWidth, onSubmit, onCancel, getNextFocusableCell, dataValidation, getRangeValues, getRangeValuesAsync, horizontalAlignment, editingSheetName, address, isScrolling, showFormulaHelp, onHideFormulaHelp, onShowFormulaHelp, onKeyDown, tokenizer, defaultBackgroundColor, defaultTextColor, theme, functionDescriptions, getNamedRanges, getTableNames, getTableColumnNames, getStructuredProperties, onRequestCalculate, editorBorderColor, isPointerDevice, SuggestionsDropdown, stickyEditor, defaultFontSizePoint, textFormatRuns, getMentions, getFunctionParameterSuggestions, shouldFetchFunctionParameters, MentionTagComponent, MentionDropdownItemComponent, navigationMode, onCopy, onPaste, onCut, onBlur, }: CellEditorProps) => React.JSX.Element>;
|
|
151
|
+
export declare const CellEditor: React.MemoExoticComponent<({ value, effectiveValue, isNewValue, onChange, sheetId, editingSheetId, cell, position, format, locale, formulaLocale, scale, autoFocus, maxWidth, maxHeight, containerWidth, onSubmit, onCancel, getNextFocusableCell, dataValidation, getRangeValues, getRangeValuesAsync, horizontalAlignment, editingSheetName, address, isScrolling, showFormulaHelp, onHideFormulaHelp, onShowFormulaHelp, onKeyDown, tokenizer, defaultBackgroundColor, defaultTextColor, theme, functionDescriptions, getNamedRanges, getTableNames, getTableColumnNames, getStructuredProperties, onRequestCalculate, editorBorderColor, isPointerDevice, SuggestionsDropdown, stickyEditor, defaultFontSizePoint, textFormatRuns, getMentions, getFunctionParameterSuggestions, shouldFetchFunctionParameters, MentionTagComponent, MentionDropdownItemComponent, navigationMode, readOnly, onCopy, onPaste, onCut, onBlur, }: CellEditorProps) => React.JSX.Element>;
|
|
152
152
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/cell-editor/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,KAAK,EACV,UAAU,EACV,sBAAsB,EAEtB,aAAa,EACd,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAEL,KAAK,aAAa,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/cell-editor/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ProseMirrorEditor } from "@rowsncolumns/ui";
|
|
2
|
-
import { dataValidationOptionMatchesCellValue, getDefaultDateFormat, isNil, lightenColor, normalizeColor, ssfFormat, } from "@rowsncolumns/utils";
|
|
2
|
+
import { dataValidationOptionMatchesCellValue, getDefaultDateFormat, isAnArrowKey, isNil, lightenColor, normalizeColor, ssfFormat, } from "@rowsncolumns/utils";
|
|
3
3
|
import React, { memo, useCallback, useEffect, useRef, useState } from "react";
|
|
4
4
|
import { useSetCellEditorInstance } from "../../atoms";
|
|
5
5
|
import { useActiveEditor, useSetActiveEditor, } from "../../atoms/active-editor.atom";
|
|
@@ -16,7 +16,7 @@ import { CalendarPopup } from "./calendar-popup";
|
|
|
16
16
|
import { FormulaResultPreview } from "./formula-result-preview";
|
|
17
17
|
import { getDirectionFromKey, isFillSelectionCommit, shouldShowCalendarPopup, } from "./helpers";
|
|
18
18
|
import { dropdownStyles, StyledAddress, StyledAddressContainer, StyledEditor, } from "./style";
|
|
19
|
-
export const CellEditor = memo(({ value = "", effectiveValue, isNewValue, onChange, sheetId, editingSheetId, cell, position, format, locale, formulaLocale, scale = 1, autoFocus, maxWidth, maxHeight, containerWidth, onSubmit, onCancel, getNextFocusableCell, dataValidation, getRangeValues, getRangeValuesAsync, horizontalAlignment, editingSheetName, address, isScrolling, showFormulaHelp, onHideFormulaHelp, onShowFormulaHelp, onKeyDown, tokenizer, defaultBackgroundColor, defaultTextColor, theme, functionDescriptions, getNamedRanges, getTableNames, getTableColumnNames, getStructuredProperties, onRequestCalculate, editorBorderColor, isPointerDevice, SuggestionsDropdown, stickyEditor, defaultFontSizePoint, textFormatRuns, getMentions, getFunctionParameterSuggestions, shouldFetchFunctionParameters, MentionTagComponent, MentionDropdownItemComponent, navigationMode, onCopy, onPaste, onCut, onBlur, }) => {
|
|
19
|
+
export const CellEditor = memo(({ value = "", effectiveValue, isNewValue, onChange, sheetId, editingSheetId, cell, position, format, locale, formulaLocale, scale = 1, autoFocus, maxWidth, maxHeight, containerWidth, onSubmit, onCancel, getNextFocusableCell, dataValidation, getRangeValues, getRangeValuesAsync, horizontalAlignment, editingSheetName, address, isScrolling, showFormulaHelp, onHideFormulaHelp, onShowFormulaHelp, onKeyDown, tokenizer, defaultBackgroundColor, defaultTextColor, theme, functionDescriptions, getNamedRanges, getTableNames, getTableColumnNames, getStructuredProperties, onRequestCalculate, editorBorderColor, isPointerDevice, SuggestionsDropdown, stickyEditor, defaultFontSizePoint, textFormatRuns, getMentions, getFunctionParameterSuggestions, shouldFetchFunctionParameters, MentionTagComponent, MentionDropdownItemComponent, navigationMode, readOnly = false, onCopy, onPaste, onCut, onBlur, }) => {
|
|
20
20
|
const editorBorderOutlineColor = editorBorderColor
|
|
21
21
|
? lightenColor(0.5, editorBorderColor)
|
|
22
22
|
: undefined;
|
|
@@ -92,6 +92,23 @@ export const CellEditor = memo(({ value = "", effectiveValue, isNewValue, onChan
|
|
|
92
92
|
const handleFormulaStateChange = useCallback((canSelectCells, selectionMode, selectionIndex) => {
|
|
93
93
|
setFormulaState({ canSelectCells, selectionMode, selectionIndex });
|
|
94
94
|
}, [setFormulaState]);
|
|
95
|
+
// The editor takes the focus when its session opens (`navigationMode` turns
|
|
96
|
+
// off), not only when the sticky editor already held it: a host that parks
|
|
97
|
+
// the focus on the grid container (a read-only grid's click) opened the cell
|
|
98
|
+
// without the keyboard, so Esc / Enter / Tab never reached the editor
|
|
99
|
+
// (rowsncolumns/spreadsheet#1192). An editor holding the focus is left as is;
|
|
100
|
+
// a read-only view has no caret to place, so it takes the DOM focus alone.
|
|
101
|
+
useIsomorphicLayoutEffect(() => {
|
|
102
|
+
if (!autoFocus || navigationMode !== false) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (readOnly) {
|
|
106
|
+
editorRef.current?.el()?.focus();
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
editorRef.current?.focus();
|
|
110
|
+
}
|
|
111
|
+
}, [autoFocus, navigationMode, readOnly]);
|
|
95
112
|
// Handle focus
|
|
96
113
|
const handleFocus = useCallback(() => {
|
|
97
114
|
if (editorRef.current) {
|
|
@@ -124,6 +141,21 @@ export const CellEditor = memo(({ value = "", effectiveValue, isNewValue, onChan
|
|
|
124
141
|
// Reset active editor
|
|
125
142
|
setActiveEditor(undefined);
|
|
126
143
|
}, [onSubmit, editingSheetId, cell, getNextFocusableCell, setActiveEditor]);
|
|
144
|
+
// A read-only view has no caret for an arrow to move: the arrow leaves
|
|
145
|
+
// the view and moves the active cell, as it does with no editor open.
|
|
146
|
+
// Routed through the submit path, which a read-only view turns into
|
|
147
|
+
// close-and-move; Alt+Arrow stays the grid's sheet switch.
|
|
148
|
+
const handleKeyDown = useCallback((e) => {
|
|
149
|
+
if (readOnly &&
|
|
150
|
+
!e.defaultPrevented &&
|
|
151
|
+
!e.altKey &&
|
|
152
|
+
isAnArrowKey(e.key)) {
|
|
153
|
+
e.preventDefault();
|
|
154
|
+
handleSubmit(value, undefined, e);
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
onKeyDown?.(e);
|
|
158
|
+
}, [readOnly, value, handleSubmit, onKeyDown]);
|
|
127
159
|
// Prevent grid contextmenu from popping up
|
|
128
160
|
const onContextMenu = useCallback((e) => e.stopPropagation(), []);
|
|
129
161
|
// Dropdown options
|
|
@@ -219,7 +251,7 @@ export const CellEditor = memo(({ value = "", effectiveValue, isNewValue, onChan
|
|
|
219
251
|
const minHeight = Math.min(height, maxHeight ?? height);
|
|
220
252
|
// Alignment
|
|
221
253
|
const isRightAligned = finalHorizontalAlignment === "right";
|
|
222
|
-
return (React.createElement(StyledEditor, { style: {
|
|
254
|
+
return (React.createElement(StyledEditor, { "aria-readonly": readOnly || undefined, style: {
|
|
223
255
|
top: y,
|
|
224
256
|
left: isRightAligned ? "auto" : x,
|
|
225
257
|
right: isRightAligned
|
|
@@ -266,8 +298,9 @@ export const CellEditor = memo(({ value = "", effectiveValue, isNewValue, onChan
|
|
|
266
298
|
: "",
|
|
267
299
|
address)) : null,
|
|
268
300
|
formulaMode && onRequestCalculate ? (React.createElement(FormulaResultPreview, { value: value, formulaLocale: formulaLocale, onRequestCalculate: onRequestCalculate })) : null)) : null,
|
|
269
|
-
React.createElement(ProseMirrorEditor, { ref: mergedEditorRef, formulaMode: formulaMode, autoFocus: autoFocus, value: value, isNewValue: isNewValue, onFocus: handleFocus, onBlur: onBlur, onChange: handleChange, onKeyDown:
|
|
301
|
+
React.createElement(ProseMirrorEditor, { ref: mergedEditorRef, formulaMode: formulaMode, autoFocus: autoFocus, value: value, isNewValue: isNewValue, onFocus: handleFocus, onBlur: onBlur, onChange: handleChange, onKeyDown: handleKeyDown, onSubmit: handleSubmit, onCancel: onCancel, disabled: readOnly, tokenizer: tokenizer, formulaLocale: formulaLocale, onFormulaStateChange: handleFormulaStateChange, name: "celleditor", showDropdown: isActiveEditor && !readOnly, isActive: isActiveEditor, dropdownStyles: dropdownStyles, options: readOnly ? undefined : options, isOptionSelected: options?.length && !readOnly ? isOptionSelected : undefined, functionDescriptions: functionDescriptions, getNamedRanges: getNamedRanges, getTableNames: getTableNames, getTableColumnNames: getTableColumnNames, showFormulaHelp: showFormulaHelp, onHideFormulaHelp: onHideFormulaHelp, onShowFormulaHelp: onShowFormulaHelp, SuggestionsDropdown: SuggestionsDropdown, stickyEditor: stickyEditor, textFormatRuns: textFormatRuns, resolveRunColor: resolveRunColor, getMentions: getMentions, getFunctionParameterSuggestions: getFunctionParameterSuggestions, shouldFetchFunctionParameters: shouldFetchFunctionParameters, MentionTagComponent: MentionTagComponent, MentionDropdownItemComponent: MentionDropdownItemComponent, getStructuredProperties: getStructuredProperties, navigationMode: navigationMode, onCopy: onCopy, onCut: onCut, onPaste: onPaste, cellFontFamily: formulaMode ? undefined : cellfontFamily ?? undefined }),
|
|
270
302
|
!formulaMode &&
|
|
303
|
+
!readOnly &&
|
|
271
304
|
isPointerDevice &&
|
|
272
305
|
shouldShowCalendarPopup(numberFormat) ? (React.createElement(CalendarPopup, { value: effectiveValue?.nv ?? effectiveValue?.numberValue ?? undefined, onEscapeKeyDown: () => editorRef.current?.focus(), onSubmit: (value) => handleSubmit(ssfFormat(getDefaultDateFormat(locale), value)) })) : null));
|
|
273
306
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAMnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/helpers.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { canUseDOM, cellIdentifier, isCellWithinBounds, } from "@rowsncolumns/grid";
|
|
2
2
|
import { isNil, number2Alpha, stripDataValidationTextPrefix, } from "@rowsncolumns/utils";
|
|
3
3
|
import { CHIP_HEIGHT, CHIP_SPACING, CONDITION_NONE } from "./config";
|
|
4
|
+
import { isMacPlatform } from "./platform";
|
|
4
5
|
// Check if browser is Firefox
|
|
5
6
|
export const isFirefox = canUseDOM
|
|
6
7
|
? navigator.userAgent.indexOf("Firefox") !== -1
|
|
7
8
|
: false;
|
|
8
9
|
// Check if platform is macOS, where Ctrl+click is the context menu gesture
|
|
9
|
-
export const isMac =
|
|
10
|
+
export const isMac = isMacPlatform();
|
|
10
11
|
/* Converts point to pixel */
|
|
11
12
|
export const pointToPixel = (pt) => Math.round((13 / 10) * pt);
|
|
12
13
|
/* Convert pixel to point */
|
|
@@ -136,6 +136,13 @@ export type UseEditableOptions<T extends CellData> = {
|
|
|
136
136
|
* Callback fired before editing. Can be used to prevent editing. Do not use it, Can be removed in next release.
|
|
137
137
|
*/
|
|
138
138
|
canEdit?: (sheetId: number, cell: CellInterface) => boolean;
|
|
139
|
+
/**
|
|
140
|
+
* Whether a cell `canEdit` refuses may still be opened read-only — F2 / Enter /
|
|
141
|
+
* double-click then show its full content in the cell editor with input disabled
|
|
142
|
+
* (Google Sheets' view-only cell), and nothing is ever committed from it. A
|
|
143
|
+
* keystroke never opens it. Defaults to no cell.
|
|
144
|
+
*/
|
|
145
|
+
canView?: (sheetId: number, cell: CellInterface) => boolean;
|
|
139
146
|
/**
|
|
140
147
|
* Number of frozen columns
|
|
141
148
|
*/
|
|
@@ -184,6 +191,22 @@ export type UseEditableOptions<T extends CellData> = {
|
|
|
184
191
|
* Can user press enter key to edit
|
|
185
192
|
*/
|
|
186
193
|
enableEditOnEnterKey?: boolean;
|
|
194
|
+
/**
|
|
195
|
+
* Which product's Delete / Backspace keys the grid follows
|
|
196
|
+
* (`CanvasGridProps["keymap"]`). Under `"excel"` Backspace clears the
|
|
197
|
+
* active cell alone and edits it, Shift+Backspace selects only the active
|
|
198
|
+
* cell and Shift+Delete cuts; Delete clears every selected cell in both.
|
|
199
|
+
*/
|
|
200
|
+
keymap?: CanvasGridProps["keymap"];
|
|
201
|
+
/**
|
|
202
|
+
* Drop the cell selections, keeping the active cell (Excel's
|
|
203
|
+
* Shift+Backspace)
|
|
204
|
+
*/
|
|
205
|
+
clearSelections?: () => void;
|
|
206
|
+
/**
|
|
207
|
+
* Cut the selection to the clipboard (Excel's Shift+Delete)
|
|
208
|
+
*/
|
|
209
|
+
onRequestCut?: () => void;
|
|
187
210
|
/**
|
|
188
211
|
* Return `false` to keep a key press from the grid's key handling
|
|
189
212
|
* (`CanvasGridProps["shouldHandleKeyDown"]`).
|
|
@@ -345,6 +368,11 @@ export type SharedEditorProps = {
|
|
|
345
368
|
editorBorderOutlineColor?: string;
|
|
346
369
|
isPointerDevice?: boolean;
|
|
347
370
|
navigationMode?: boolean;
|
|
371
|
+
/**
|
|
372
|
+
* The editor shows the cell's content with input disabled (`canView`): the text can be
|
|
373
|
+
* selected and copied, nothing typed changes it and no commit comes out of it.
|
|
374
|
+
*/
|
|
375
|
+
readOnly?: boolean;
|
|
348
376
|
onCopy?(event: ClipboardEvent): void;
|
|
349
377
|
onCut?(event: ClipboardEvent): void;
|
|
350
378
|
onPaste?(event: ClipboardEvent): void;
|
|
@@ -371,7 +399,7 @@ export declare const areTextFormatRunsEqual: (a: TextFormatRun[] | undefined | n
|
|
|
371
399
|
*
|
|
372
400
|
* Moves to incorrect cell
|
|
373
401
|
*/
|
|
374
|
-
export declare const useEditable: <T extends CellData>({ getEditor, getValue, getTextFormatRuns, onChange, onSubmit, onCancel, onBlur, onDelete, sheetId, selections, activeCell, canEdit, frozenRows, frozenColumns, hideOnBlur, isHiddenRow, isHiddenColumn, rowCount, columnCount, selectionTopBound, selectionBottomBound, selectionLeftBound, selectionRightBound, enableEditOnEnterKey, shouldHandleKeyDown, sticky, editorBorderColor, editorBorderOutlineColor, onBeforeEdit, onKeyDown, onEditorKeyDown, getCellOffsetFromCoords, getCellCoordsFromOffset, getCellBounds, focus, getActualCellCoords, scrollToCell, onChangeBatch, containerWidth, containerHeight, getScrollPosition, getColumnOffset, getEditorAlignment, getSheetRowCount, getSheetColumnCount, getBooleanValue, getDataValidation, setActiveCell, onCopy, onPaste, onCut, tables, onInsertTableRow, }: UseEditableOptions<T>) => {
|
|
402
|
+
export declare const useEditable: <T extends CellData>({ getEditor, getValue, getTextFormatRuns, onChange, onSubmit, onCancel, onBlur, onDelete, sheetId, selections, activeCell, canEdit, canView, frozenRows, frozenColumns, hideOnBlur, isHiddenRow, isHiddenColumn, rowCount, columnCount, selectionTopBound, selectionBottomBound, selectionLeftBound, selectionRightBound, enableEditOnEnterKey, keymap, clearSelections, onRequestCut, shouldHandleKeyDown, sticky, editorBorderColor, editorBorderOutlineColor, onBeforeEdit, onKeyDown, onEditorKeyDown, getCellOffsetFromCoords, getCellCoordsFromOffset, getCellBounds, focus, getActualCellCoords, scrollToCell, onChangeBatch, containerWidth, containerHeight, getScrollPosition, getColumnOffset, getEditorAlignment, getSheetRowCount, getSheetColumnCount, getBooleanValue, getDataValidation, setActiveCell, onCopy, onPaste, onCut, tables, onInsertTableRow, }: UseEditableOptions<T>) => {
|
|
375
403
|
editorComponent: React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | null;
|
|
376
404
|
onDoubleClick: (e: React.MouseEvent<HTMLElement>) => void;
|
|
377
405
|
getNextFocusableCell: (sheetId: number, currentCell: CellInterface, direction?: Direction, restrictWithinSelection?: boolean) => CellInterface | null;
|
|
@@ -386,5 +414,6 @@ export declare const useEditable: <T extends CellData>({ getEditor, getValue, ge
|
|
|
386
414
|
cancelEditor: (e?: React.KeyboardEvent<HTMLElement>, shouldFocusGrid?: boolean) => void;
|
|
387
415
|
commit: (options?: EditorSubmitOptions) => boolean;
|
|
388
416
|
onMouseDown: (e: React.MouseEvent<HTMLDivElement> | React.PointerEvent<HTMLDivElement>) => void;
|
|
417
|
+
onKeyDown: (e: React.KeyboardEvent<HTMLDivElement>) => void;
|
|
389
418
|
};
|
|
390
419
|
//# sourceMappingURL=use-editable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-editable.d.ts","sourceRoot":"","sources":["../../../hooks/use-editable.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"use-editable.d.ts","sourceRoot":"","sources":["../../../hooks/use-editable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ import { useCallbackRef } from "./use-callback-ref";
|
|
|
12
12
|
import { useIsomorphicLayoutEffect } from "./use-isomorphic-layout-effect";
|
|
13
13
|
export const getDefaultEditor = () => null;
|
|
14
14
|
const defaultCanEdit = () => true;
|
|
15
|
+
const defaultCanView = () => false;
|
|
15
16
|
const defaultIsHidden = () => false;
|
|
16
17
|
/**
|
|
17
18
|
* Lightweight deep equality for `TextFormatRun[]`. Used by the
|
|
@@ -137,7 +138,7 @@ const MEDIA_KEYS = new Set([
|
|
|
137
138
|
*
|
|
138
139
|
* Moves to incorrect cell
|
|
139
140
|
*/
|
|
140
|
-
export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFormatRuns, onChange, onSubmit, onCancel, onBlur, onDelete, sheetId, selections = DEFAULT_ARRAY, activeCell, canEdit = defaultCanEdit, frozenRows = 0, frozenColumns = 0, hideOnBlur = true, isHiddenRow = defaultIsHidden, isHiddenColumn = defaultIsHidden, rowCount, columnCount, selectionTopBound = 0, selectionBottomBound = rowCount, selectionLeftBound = 0, selectionRightBound = columnCount, enableEditOnEnterKey = true, shouldHandleKeyDown, sticky, editorBorderColor, editorBorderOutlineColor, onBeforeEdit, onKeyDown, onEditorKeyDown, getCellOffsetFromCoords, getCellCoordsFromOffset, getCellBounds, focus, getActualCellCoords, scrollToCell, onChangeBatch, containerWidth = 0, containerHeight = 0, getScrollPosition, getColumnOffset, getEditorAlignment, getSheetRowCount, getSheetColumnCount, getBooleanValue, getDataValidation, setActiveCell, onCopy, onPaste, onCut, tables, onInsertTableRow, }) => {
|
|
141
|
+
export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFormatRuns, onChange, onSubmit, onCancel, onBlur, onDelete, sheetId, selections = DEFAULT_ARRAY, activeCell, canEdit = defaultCanEdit, canView = defaultCanView, frozenRows = 0, frozenColumns = 0, hideOnBlur = true, isHiddenRow = defaultIsHidden, isHiddenColumn = defaultIsHidden, rowCount, columnCount, selectionTopBound = 0, selectionBottomBound = rowCount, selectionLeftBound = 0, selectionRightBound = columnCount, enableEditOnEnterKey = true, keymap = "sheets", clearSelections, onRequestCut, shouldHandleKeyDown, sticky, editorBorderColor, editorBorderOutlineColor, onBeforeEdit, onKeyDown, onEditorKeyDown, getCellOffsetFromCoords, getCellCoordsFromOffset, getCellBounds, focus, getActualCellCoords, scrollToCell, onChangeBatch, containerWidth = 0, containerHeight = 0, getScrollPosition, getColumnOffset, getEditorAlignment, getSheetRowCount, getSheetColumnCount, getBooleanValue, getDataValidation, setActiveCell, onCopy, onPaste, onCut, tables, onInsertTableRow, }) => {
|
|
141
142
|
const editingCellCoordinate = useEditingCellCoordinate();
|
|
142
143
|
const [isEditorShown, setShowEditor] = useEditorVisibility();
|
|
143
144
|
const [value, setValue] = useCellEditorValue();
|
|
@@ -159,6 +160,9 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
159
160
|
const isPointerDeviceRef = useRef(false);
|
|
160
161
|
const maxEditorDimensionsRef = useRef(undefined);
|
|
161
162
|
const isMounted = useRef(false);
|
|
163
|
+
// The open editor is a read-only view of the cell (`canView`): it never
|
|
164
|
+
// commits, and its keys only close it or move the active cell.
|
|
165
|
+
const isViewOnlyRef = useRef(false);
|
|
162
166
|
const showEditor = useCallback(() => setShowEditor(true), [setShowEditor]);
|
|
163
167
|
const setActiveEditor = useSetActiveEditor();
|
|
164
168
|
const cellEditorInstance = useCellEditorInstance();
|
|
@@ -166,6 +170,7 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
166
170
|
const hideEditor = useCallback(() => {
|
|
167
171
|
setShowEditor(false);
|
|
168
172
|
currentActiveCellRef.current = null;
|
|
173
|
+
isViewOnlyRef.current = false;
|
|
169
174
|
// Clear value
|
|
170
175
|
setValue("");
|
|
171
176
|
setFormulaMode(false);
|
|
@@ -260,8 +265,14 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
260
265
|
setActiveEditor(cellEditorInstance);
|
|
261
266
|
// Reset scroll position
|
|
262
267
|
setIsScrolling(false);
|
|
268
|
+
/* A cell the grid refuses to edit may still open read-only to show its
|
|
269
|
+
* full content — from F2 / Enter / double-click, never from a typed
|
|
270
|
+
* character (which would be the start of an entry). */
|
|
271
|
+
const isEditable = canEdit(sheetId, coords);
|
|
272
|
+
const isViewOnly = !isEditable && initialValue === void 0 && canView(sheetId, coords);
|
|
263
273
|
/* Call on before edit */
|
|
264
|
-
if (
|
|
274
|
+
if (isEditable || isViewOnly) {
|
|
275
|
+
isViewOnlyRef.current = isViewOnly;
|
|
265
276
|
/* Let user modify coords before edit */
|
|
266
277
|
onBeforeEdit?.(sheetId, coords);
|
|
267
278
|
/* Focus */
|
|
@@ -304,7 +315,7 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
304
315
|
* So that during mousedown, onSubmit gets called
|
|
305
316
|
*/
|
|
306
317
|
isEnteringNewValue.current =
|
|
307
|
-
initialValue !== void 0 || cellValue === void 0;
|
|
318
|
+
!isViewOnly && (initialValue !== void 0 || cellValue === void 0);
|
|
308
319
|
isDirtyRef.current = !!initialValue;
|
|
309
320
|
// Todo
|
|
310
321
|
initialValueRef.current = cellValue;
|
|
@@ -328,12 +339,24 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
328
339
|
*/
|
|
329
340
|
setValue(value);
|
|
330
341
|
setTextFormatRuns(textFormatRuns);
|
|
331
|
-
|
|
342
|
+
// A formula on view is text: no reference picking, no function help.
|
|
343
|
+
setFormulaMode(!isViewOnly && isAFormula(value));
|
|
344
|
+
/* The editor reports a seed as a change of its document, which
|
|
345
|
+
* carries it to the host and the formula bar. A seed equal to the
|
|
346
|
+
* text it already holds — "" between edits, so Backspace under the
|
|
347
|
+
* Excel keymap and `editCell(cell, "")` — changes nothing there and
|
|
348
|
+
* is reported here, or the bar keeps the cell's text until the
|
|
349
|
+
* first keystroke (#1190). */
|
|
350
|
+
if (!isViewOnly && value === currentValueRef.current) {
|
|
351
|
+
onChange?.(value, textFormatRuns, sheetId, coords);
|
|
352
|
+
}
|
|
332
353
|
}
|
|
333
354
|
}
|
|
334
355
|
}, [
|
|
335
356
|
onBeforeEdit,
|
|
357
|
+
onChange,
|
|
336
358
|
canEdit,
|
|
359
|
+
canView,
|
|
337
360
|
getValue,
|
|
338
361
|
getTextFormatRuns,
|
|
339
362
|
getCellPosition,
|
|
@@ -510,10 +533,30 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
510
533
|
e.preventDefault();
|
|
511
534
|
}
|
|
512
535
|
else if (key === "Delete" || key === "Backspace") {
|
|
536
|
+
const isExcelKeymap = keymap === "excel";
|
|
537
|
+
// Excel: Shift+Backspace selects only the active cell of a
|
|
538
|
+
// selection, Shift+Delete cuts the selection
|
|
539
|
+
if (isExcelKeymap && nativeEvent.shiftKey) {
|
|
540
|
+
if (key === "Backspace") {
|
|
541
|
+
if (selections.length) {
|
|
542
|
+
clearSelections?.();
|
|
543
|
+
}
|
|
544
|
+
e.preventDefault();
|
|
545
|
+
}
|
|
546
|
+
else if (onRequestCut) {
|
|
547
|
+
onRequestCut();
|
|
548
|
+
e.preventDefault();
|
|
549
|
+
}
|
|
550
|
+
return;
|
|
551
|
+
}
|
|
552
|
+
// Excel's Backspace clears the active cell alone and edits it;
|
|
553
|
+
// Delete (and Sheets' Backspace) clears every selected cell
|
|
554
|
+
const clearsActiveCellOnly = isExcelKeymap && key === "Backspace";
|
|
555
|
+
const targets = clearsActiveCellOnly ? DEFAULT_ARRAY : selections;
|
|
513
556
|
// Excel refuses Delete / Backspace when any selected cell is a locked cell of a
|
|
514
557
|
// protected sheet — the same `canEdit` gate typing goes through in `makeEditable`
|
|
515
558
|
// (rowsncolumns/spreadsheet#939 U-35). Nothing is cleared; Excel's dialog is shown.
|
|
516
|
-
if (!canEditSelection(sheetId, activeCell,
|
|
559
|
+
if (!canEditSelection(sheetId, activeCell, targets)) {
|
|
517
560
|
void showValidationAlert({
|
|
518
561
|
style: "stop",
|
|
519
562
|
title: SHEET_PROTECTION_ERROR_TITLE,
|
|
@@ -523,10 +566,13 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
523
566
|
e.preventDefault();
|
|
524
567
|
return;
|
|
525
568
|
}
|
|
526
|
-
onDelete?.(sheetId, activeCell,
|
|
569
|
+
onDelete?.(sheetId, activeCell, targets);
|
|
527
570
|
// Delete value
|
|
528
571
|
setValue("");
|
|
529
572
|
setFormulaMode(false);
|
|
573
|
+
if (clearsActiveCellOnly) {
|
|
574
|
+
makeEditable(sheetId, { rowIndex, columnIndex }, "");
|
|
575
|
+
}
|
|
530
576
|
}
|
|
531
577
|
else {
|
|
532
578
|
const initialValue = isEnter || isF2 // Enter key
|
|
@@ -560,6 +606,9 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
560
606
|
onEditorKeyDown,
|
|
561
607
|
onKeyDown,
|
|
562
608
|
enableEditOnEnterKey,
|
|
609
|
+
keymap,
|
|
610
|
+
clearSelections,
|
|
611
|
+
onRequestCut,
|
|
563
612
|
shouldHandleKeyDown,
|
|
564
613
|
setFormulaMode,
|
|
565
614
|
]);
|
|
@@ -663,6 +712,19 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
663
712
|
]));
|
|
664
713
|
/* Save the value */
|
|
665
714
|
const handleSubmit = useCallbackRef(useCallback((newValue, textFormatRuns, sheetId, activeCell, nextActiveCell, shouldFocusGrid = true, options) => {
|
|
715
|
+
/* A read-only view commits nothing: the commit key closes it and
|
|
716
|
+
* moves the active cell where the commit would have. */
|
|
717
|
+
if (isViewOnlyRef.current) {
|
|
718
|
+
hideEditor();
|
|
719
|
+
setTextFormatRuns(undefined);
|
|
720
|
+
onCancel?.();
|
|
721
|
+
if (nextActiveCell) {
|
|
722
|
+
setActiveCell?.(sheetId, nextActiveCell);
|
|
723
|
+
}
|
|
724
|
+
if (shouldFocusGrid)
|
|
725
|
+
focusGrid();
|
|
726
|
+
return;
|
|
727
|
+
}
|
|
666
728
|
/**
|
|
667
729
|
* Hide the editor first, so that we can handle onBlur events
|
|
668
730
|
* 1. Editor hides -> Submit
|
|
@@ -680,6 +742,8 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
680
742
|
focusGrid();
|
|
681
743
|
}, [
|
|
682
744
|
onSubmit,
|
|
745
|
+
onCancel,
|
|
746
|
+
setActiveCell,
|
|
683
747
|
setTextFormatRuns,
|
|
684
748
|
setValue,
|
|
685
749
|
hideEditor,
|
|
@@ -751,7 +815,8 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
751
815
|
setInitialActiveCell,
|
|
752
816
|
]);
|
|
753
817
|
const handleChange = useCallbackRef(useCallback((newValue, textFormatRuns, sheetId, activeCell) => {
|
|
754
|
-
|
|
818
|
+
// A read-only view owns no entry: nothing it reports is state or a change.
|
|
819
|
+
if (!currentActiveCellRef.current || isViewOnlyRef.current) {
|
|
755
820
|
return;
|
|
756
821
|
}
|
|
757
822
|
// Update state
|
|
@@ -846,6 +911,7 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
846
911
|
containerHeight,
|
|
847
912
|
isPointerDevice: isPointerDeviceRef.current,
|
|
848
913
|
navigationMode: !isEditInProgress,
|
|
914
|
+
readOnly: isEditInProgress && isViewOnlyRef.current,
|
|
849
915
|
onCopy: handleCopy,
|
|
850
916
|
onPaste: handlePaste,
|
|
851
917
|
onCut: handleCut,
|
|
@@ -860,6 +926,10 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
860
926
|
*/
|
|
861
927
|
const editCell = useCallbackRef(useCallback((sheetId, cell, initialValue, options) => {
|
|
862
928
|
if (isEditInProgress && cellEditorInstance && initialValue != null) {
|
|
929
|
+
// A read-only view takes no text.
|
|
930
|
+
if (isViewOnlyRef.current) {
|
|
931
|
+
return;
|
|
932
|
+
}
|
|
863
933
|
// Already editing — insert at the cursor instead of reopening.
|
|
864
934
|
cellEditorInstance.update(initialValue);
|
|
865
935
|
cellEditorInstance.focus(true);
|
|
@@ -882,5 +952,6 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
882
952
|
cancelEditor: handleCancel,
|
|
883
953
|
commit,
|
|
884
954
|
onMouseDown: handleMouseDown,
|
|
955
|
+
onKeyDown: handleKeyDown,
|
|
885
956
|
};
|
|
886
957
|
};
|
|
@@ -2,10 +2,11 @@ import type React from "react";
|
|
|
2
2
|
import type { CanvasGridProps } from "../components/canvas-grid/typings";
|
|
3
3
|
type UseEditorKeydownProps = {
|
|
4
4
|
sheetId: number;
|
|
5
|
+
keymap?: CanvasGridProps["keymap"];
|
|
5
6
|
onSelectPreviousSheet: CanvasGridProps["onSelectPreviousSheet"];
|
|
6
7
|
onSelectNextSheet: CanvasGridProps["onSelectNextSheet"];
|
|
7
8
|
onKeyDownSelection?(e: React.KeyboardEvent<HTMLElement>): void;
|
|
8
9
|
};
|
|
9
|
-
export declare const useEditorKeydown: ({ sheetId, onSelectPreviousSheet, onSelectNextSheet, onKeyDownSelection, }: UseEditorKeydownProps) => (e: React.KeyboardEvent<HTMLDivElement>) => void;
|
|
10
|
+
export declare const useEditorKeydown: ({ sheetId, keymap, onSelectPreviousSheet, onSelectNextSheet, onKeyDownSelection, }: UseEditorKeydownProps) => (e: React.KeyboardEvent<HTMLDivElement>) => void;
|
|
10
11
|
export {};
|
|
11
12
|
//# sourceMappingURL=use-editor-keydown.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-editor-keydown.d.ts","sourceRoot":"","sources":["../../../hooks/use-editor-keydown.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGzE,KAAK,qBAAqB,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,qBAAqB,EAAE,eAAe,CAAC,uBAAuB,CAAC,CAAC;IAChE,iBAAiB,EAAE,eAAe,CAAC,mBAAmB,CAAC,CAAC;IACxD,kBAAkB,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;CAChE,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,
|
|
1
|
+
{"version":3,"file":"use-editor-keydown.d.ts","sourceRoot":"","sources":["../../../hooks/use-editor-keydown.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAGzE,KAAK,qBAAqB,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IACnC,qBAAqB,EAAE,eAAe,CAAC,uBAAuB,CAAC,CAAC;IAChE,iBAAiB,EAAE,eAAe,CAAC,mBAAmB,CAAC,CAAC;IACxD,kBAAkB,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;CAChE,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,oFAM9B,qBAAqB,SAKd,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,SAyC5C,CAAC"}
|
|
@@ -3,16 +3,17 @@ import { useCallback } from "react";
|
|
|
3
3
|
import { useFormulaModeValue } from "../atoms/formula-mode.atom";
|
|
4
4
|
import { useFormualSelectionState } from "../atoms/formula-selection-state.atom";
|
|
5
5
|
import { useCallbackRef } from "./use-callback-ref";
|
|
6
|
-
export const useEditorKeydown = ({ sheetId, onSelectPreviousSheet, onSelectNextSheet, onKeyDownSelection, }) => {
|
|
6
|
+
export const useEditorKeydown = ({ sheetId, keymap = "sheets", onSelectPreviousSheet, onSelectNextSheet, onKeyDownSelection, }) => {
|
|
7
7
|
const formulaMode = useFormulaModeValue();
|
|
8
8
|
const { canSelectCells } = useFormualSelectionState();
|
|
9
9
|
return useCallbackRef(useCallback((e) => {
|
|
10
10
|
const isAltKey = e.altKey;
|
|
11
11
|
const isArrowKey = isAnArrowKey(e.key);
|
|
12
12
|
/**
|
|
13
|
-
* User can navigate between sheets
|
|
13
|
+
* User can navigate between sheets (Sheets; Excel's ⌥↑ / ⌥↓ are
|
|
14
|
+
* not sheet keys, so the Excel keymap leaves them alone)
|
|
14
15
|
*/
|
|
15
|
-
if (isAltKey && isArrowKey) {
|
|
16
|
+
if (isAltKey && isArrowKey && keymap !== "excel") {
|
|
16
17
|
switch (e.key) {
|
|
17
18
|
case "ArrowUp":
|
|
18
19
|
onSelectPreviousSheet?.(sheetId, e);
|
|
@@ -33,6 +34,7 @@ export const useEditorKeydown = ({ sheetId, onSelectPreviousSheet, onSelectNextS
|
|
|
33
34
|
}
|
|
34
35
|
}, [
|
|
35
36
|
sheetId,
|
|
37
|
+
keymap,
|
|
36
38
|
onSelectPreviousSheet,
|
|
37
39
|
onSelectNextSheet,
|
|
38
40
|
formulaMode,
|
|
@@ -63,11 +63,19 @@ type FormattingKeyboardProps = {
|
|
|
63
63
|
onRequestGoTo?: CanvasGridProps["onRequestGoTo"];
|
|
64
64
|
/** Ctrl+Alt+V — Paste Special dialog (Excel). */
|
|
65
65
|
onRequestPasteSpecial?: () => void;
|
|
66
|
+
/** ⌃U on a Mac under the Excel keymap: edit the active cell, as F2. */
|
|
67
|
+
onRequestEditCell?(sheetId: number, cell: CellInterface): void;
|
|
68
|
+
/**
|
|
69
|
+
* Alt+↓ under the Excel keymap: open the active cell's list — a filter
|
|
70
|
+
* header's menu or a list validation's dropdown. Returns whether one
|
|
71
|
+
* opened; the key is left alone otherwise.
|
|
72
|
+
*/
|
|
73
|
+
onShowCellList?(sheetId: number, cell: CellInterface): boolean;
|
|
66
74
|
/** Ctrl+' / Ctrl+Shift+" write the cell above into the active cell */
|
|
67
75
|
onChangeBatch?: CanvasGridProps["onChangeBatch"];
|
|
68
76
|
getUserEnteredValue?(sheetId: number, rowIndex: number, columnIndex: number): string | undefined | null;
|
|
69
77
|
getEffectiveValue?(sheetId: number, rowIndex: number, columnIndex: number): Maybe<ExtendedValue>;
|
|
70
78
|
};
|
|
71
|
-
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, onRequestCreateTable, 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;
|
|
79
|
+
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, onRequestCreateTable, onCreateBasicFilter, clearCopiedSelections, getCellFormat, onShowContextMenu, onHideColumn, onShowColumn, onGroupColumns, onUngroupColumns, onHideRow, onShowRow, onGroupRows, onUngroupRows, onDeleteRow, onInsertRow, onAddQuickEdit, onCalculateNow, onRequestGoTo, onRequestPasteSpecial, onRequestEditCell, onShowCellList, onChangeBatch, getUserEnteredValue, getEffectiveValue, canEditCell, isSheetFocused, activeCell, selections, }: FormattingKeyboardProps) => (e: React.KeyboardEvent<HTMLDivElement>) => void;
|
|
72
80
|
export {};
|
|
73
81
|
//# sourceMappingURL=use-keyboard-handler.d.ts.map
|