@rowsncolumns/spreadsheet 10.4.1 → 10.4.4
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/atoms/sheet-context.atom.d.ts +2 -0
- package/dist/cjs/atoms/sheet-context.atom.d.ts.map +1 -1
- package/dist/cjs/atoms/sheet-context.atom.js +8 -2
- package/dist/cjs/atoms/sort-dialog.atom.d.ts +6 -2
- package/dist/cjs/atoms/sort-dialog.atom.d.ts.map +1 -1
- package/dist/cjs/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/cjs/components/canvas-grid/index.js +4 -2
- package/dist/cjs/components/canvas-grid/typings.d.ts +10 -0
- package/dist/cjs/components/canvas-grid/typings.d.ts.map +1 -1
- package/dist/cjs/components/filter-box/date-tree.d.ts +23 -5
- package/dist/cjs/components/filter-box/date-tree.d.ts.map +1 -1
- package/dist/cjs/components/filter-box/date-tree.js +76 -11
- package/dist/cjs/components/filter-box/filter-by-condition.d.ts +26 -1
- package/dist/cjs/components/filter-box/filter-by-condition.d.ts.map +1 -1
- package/dist/cjs/components/filter-box/filter-by-condition.js +108 -9
- package/dist/cjs/components/filter-box/index.d.ts.map +1 -1
- package/dist/cjs/components/filter-box/index.js +21 -5
- package/dist/cjs/components/formula-input/index.d.ts.map +1 -1
- package/dist/cjs/components/formula-input/index.js +26 -4
- package/dist/cjs/components/sheet-tabs/index.d.ts.map +1 -1
- package/dist/cjs/components/sheet-tabs/index.js +19 -5
- package/dist/cjs/components/sort-range-dialog/index.d.ts +20 -3
- package/dist/cjs/components/sort-range-dialog/index.d.ts.map +1 -1
- package/dist/cjs/components/sort-range-dialog/index.js +20 -6
- package/dist/cjs/components/toolbar/cell-style-selector.d.ts +9 -0
- package/dist/cjs/components/toolbar/cell-style-selector.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/cell-style-selector.js +12 -3
- package/dist/cjs/components/toolbar/merge-cells-selector.d.ts +27 -1
- package/dist/cjs/components/toolbar/merge-cells-selector.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/merge-cells-selector.js +106 -8
- package/dist/cjs/components/toolbar/table-style-editor.d.ts +85 -0
- package/dist/cjs/components/toolbar/table-style-editor.d.ts.map +1 -0
- package/dist/cjs/components/toolbar/table-style-editor.js +235 -0
- package/dist/cjs/components/toolbar/table-style-selector.d.ts +7 -7
- package/dist/cjs/components/toolbar/table-style-selector.d.ts.map +1 -1
- package/dist/cjs/components/toolbar/table-style-selector.js +77 -87
- package/dist/cjs/config.d.ts +6 -0
- package/dist/cjs/config.d.ts.map +1 -1
- package/dist/cjs/config.js +7 -1
- package/dist/cjs/hooks/use-conditional-formatting.d.ts +8 -0
- package/dist/cjs/hooks/use-conditional-formatting.d.ts.map +1 -1
- package/dist/cjs/hooks/use-conditional-formatting.js +128 -77
- package/dist/cjs/hooks/use-editable.d.ts.map +1 -1
- package/dist/cjs/hooks/use-editable.js +59 -1
- package/dist/cjs/hooks/use-selection.d.ts +6 -1
- package/dist/cjs/hooks/use-selection.d.ts.map +1 -1
- package/dist/cjs/hooks/use-selection.js +37 -1
- package/dist/cjs/release-date.js +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/cjs/types.d.ts +64 -0
- package/dist/cjs/types.d.ts.map +1 -1
- package/dist/esm/atoms/sheet-context.atom.d.ts +2 -0
- package/dist/esm/atoms/sheet-context.atom.d.ts.map +1 -1
- package/dist/esm/atoms/sheet-context.atom.js +3 -0
- package/dist/esm/atoms/sort-dialog.atom.d.ts +6 -2
- package/dist/esm/atoms/sort-dialog.atom.d.ts.map +1 -1
- package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
- package/dist/esm/components/canvas-grid/index.js +3 -1
- package/dist/esm/components/canvas-grid/typings.d.ts +10 -0
- package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
- package/dist/esm/components/filter-box/date-tree.d.ts +23 -5
- package/dist/esm/components/filter-box/date-tree.d.ts.map +1 -1
- package/dist/esm/components/filter-box/date-tree.js +62 -10
- package/dist/esm/components/filter-box/filter-by-condition.d.ts +26 -1
- package/dist/esm/components/filter-box/filter-by-condition.d.ts.map +1 -1
- package/dist/esm/components/filter-box/filter-by-condition.js +78 -12
- package/dist/esm/components/filter-box/index.d.ts.map +1 -1
- package/dist/esm/components/filter-box/index.js +21 -5
- package/dist/esm/components/formula-input/index.d.ts.map +1 -1
- package/dist/esm/components/formula-input/index.js +26 -4
- package/dist/esm/components/sheet-tabs/index.d.ts.map +1 -1
- package/dist/esm/components/sheet-tabs/index.js +20 -6
- package/dist/esm/components/sort-range-dialog/index.d.ts +20 -3
- package/dist/esm/components/sort-range-dialog/index.d.ts.map +1 -1
- package/dist/esm/components/sort-range-dialog/index.js +17 -5
- package/dist/esm/components/toolbar/cell-style-selector.d.ts +9 -0
- package/dist/esm/components/toolbar/cell-style-selector.d.ts.map +1 -1
- package/dist/esm/components/toolbar/cell-style-selector.js +11 -2
- package/dist/esm/components/toolbar/merge-cells-selector.d.ts +27 -1
- package/dist/esm/components/toolbar/merge-cells-selector.d.ts.map +1 -1
- package/dist/esm/components/toolbar/merge-cells-selector.js +94 -10
- package/dist/esm/components/toolbar/table-style-editor.d.ts +85 -0
- package/dist/esm/components/toolbar/table-style-editor.d.ts.map +1 -0
- package/dist/esm/components/toolbar/table-style-editor.js +189 -0
- package/dist/esm/components/toolbar/table-style-selector.d.ts +7 -7
- package/dist/esm/components/toolbar/table-style-selector.d.ts.map +1 -1
- package/dist/esm/components/toolbar/table-style-selector.js +74 -81
- package/dist/esm/config.d.ts +6 -0
- package/dist/esm/config.d.ts.map +1 -1
- package/dist/esm/config.js +6 -0
- package/dist/esm/hooks/use-conditional-formatting.d.ts +8 -0
- package/dist/esm/hooks/use-conditional-formatting.d.ts.map +1 -1
- package/dist/esm/hooks/use-conditional-formatting.js +50 -13
- package/dist/esm/hooks/use-editable.d.ts.map +1 -1
- package/dist/esm/hooks/use-editable.js +48 -2
- package/dist/esm/hooks/use-selection.d.ts +6 -1
- package/dist/esm/hooks/use-selection.d.ts.map +1 -1
- package/dist/esm/hooks/use-selection.js +37 -1
- package/dist/esm/release-date.js +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/esm/types.d.ts +64 -0
- package/dist/esm/types.d.ts.map +1 -1
- package/dist/spreadsheet.min.css +1 -1
- package/package.json +5 -5
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { isCellWithinBounds } from "@rowsncolumns/grid";
|
|
2
2
|
import { CheckIcon, MdOutlineArrowDropDown, TableIcon } from "@rowsncolumns/icons";
|
|
3
|
-
import {
|
|
3
|
+
import { cn, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuItem, DropdownMenuItemIndicator, DropdownMenuPortal, DropdownMenuTrigger, IconButton, Separator, } from "@rowsncolumns/ui";
|
|
4
4
|
import { findMatchingBandProperty, getContrastColor, getTableBorderStyles as getSharedTableStyles, } from "@rowsncolumns/utils";
|
|
5
5
|
import React, { memo, useCallback, useMemo, useRef, useState } from "react";
|
|
6
6
|
// Re-export the shared function for backwards compatibility
|
|
7
7
|
export { findMatchingBandProperty };
|
|
8
|
+
export { buildCustomTableStyle } from "./table-style-editor";
|
|
8
9
|
import { parseTintedColor } from "../../api/banded-ranges";
|
|
9
10
|
import { useFocusSheet } from "../../atoms/sheet-context.atom";
|
|
10
11
|
import { getStringifiedColor } from "../../themes";
|
|
12
|
+
import { TableStyleEditor } from "./table-style-editor";
|
|
11
13
|
/** Excel's Table Style Options (Table Design tab), in ribbon order. */
|
|
12
14
|
const STYLE_OPTIONS = [
|
|
13
15
|
{ key: "headerRow", label: "Header Row", defaultValue: true },
|
|
@@ -38,36 +40,6 @@ export const getStyleOptionUpdate = (table, key, checked) => {
|
|
|
38
40
|
}
|
|
39
41
|
return update;
|
|
40
42
|
};
|
|
41
|
-
/** The colours "New Table Style…" offers for each element (the workbook palette's accents). */
|
|
42
|
-
const NEW_STYLE_COLORS = [
|
|
43
|
-
"#000000",
|
|
44
|
-
"#595959",
|
|
45
|
-
"#a6a6a6",
|
|
46
|
-
"#d9d9d9",
|
|
47
|
-
"#ffffff",
|
|
48
|
-
"#4472c4",
|
|
49
|
-
"#b4c6e7",
|
|
50
|
-
"#ed7d31",
|
|
51
|
-
"#f8cbad",
|
|
52
|
-
"#a5a5a5",
|
|
53
|
-
"#ffc000",
|
|
54
|
-
"#ffe699",
|
|
55
|
-
"#5b9bd5",
|
|
56
|
-
"#bdd7ee",
|
|
57
|
-
"#70ad47",
|
|
58
|
-
"#c6e0b4",
|
|
59
|
-
];
|
|
60
|
-
/** The banding a New Table Style paints from its three colours (unset elements stay unpainted). */
|
|
61
|
-
export const buildCustomTableStyle = (name, colors) => ({
|
|
62
|
-
name,
|
|
63
|
-
bandedRange: {
|
|
64
|
-
rowProperties: {
|
|
65
|
-
headerColor: colors.header,
|
|
66
|
-
firstBandColor: colors.firstBand,
|
|
67
|
-
secondBandColor: colors.secondBand,
|
|
68
|
-
},
|
|
69
|
-
},
|
|
70
|
-
});
|
|
71
43
|
/** Gallery groups whose swatch is outlined in the style's accent colour (filled-header styles). */
|
|
72
44
|
const OUTLINED_SWATCH_THEMES = /^TableStyle(?:Light(?:[89]|1[0-4])|Medium(?:1[5-9]|2[01]))$/;
|
|
73
45
|
/**
|
|
@@ -87,7 +59,7 @@ export const getTableBorderStyles = (showRowStripes, showColumnStripes, theme) =
|
|
|
87
59
|
}
|
|
88
60
|
return entries;
|
|
89
61
|
};
|
|
90
|
-
export const TableStyleSelector = memo(({ tables, sheetId, theme, activeCell, selections, onUpdateTable, onCreateTable, onRequestCreateTable, onPreviewTableStyle, customTableStyles, onCreateCustomTableStyle, }) => {
|
|
62
|
+
export const TableStyleSelector = memo(({ tables, sheetId, theme, activeCell, selections, onUpdateTable, onCreateTable, onRequestCreateTable, onPreviewTableStyle, customTableStyles, onCreateCustomTableStyle, onDeleteCustomTableStyle, }) => {
|
|
91
63
|
const shouldFocusSheetRef = useRef(true);
|
|
92
64
|
const focusSheet = useFocusSheet();
|
|
93
65
|
const table = useMemo(() => {
|
|
@@ -101,7 +73,12 @@ export const TableStyleSelector = memo(({ tables, sheetId, theme, activeCell, se
|
|
|
101
73
|
// Styles created here when the host does not keep them.
|
|
102
74
|
const [sessionCustomStyles, setSessionCustomStyles] = useState([]);
|
|
103
75
|
const allCustomStyles = useMemo(() => [...(customTableStyles ?? []), ...sessionCustomStyles], [customTableStyles, sessionCustomStyles]);
|
|
104
|
-
|
|
76
|
+
/**
|
|
77
|
+
* The style editor: `{}` creates a new style, `{ style }` edits an existing custom one, `null`
|
|
78
|
+
* shows the "New Table Style…" item.
|
|
79
|
+
*/
|
|
80
|
+
const [styleEditor, setStyleEditor] = useState(null);
|
|
81
|
+
const isSessionStyle = useCallback((style) => sessionCustomStyles.includes(style), [sessionCustomStyles]);
|
|
105
82
|
// Classes
|
|
106
83
|
const hoverClass = "rounded-none hover:outline-solid hover:outline-1 hover:outline hover:outline-offset-1 hover:outline-rnc-primary focus:outline focus:outline-offset-1 focus:outline-rnc-primary hover:bg-transparent focus:bg-transparent text-rnc-foreground p-1";
|
|
107
84
|
const headingClass = "text-xs font-system pt-2 pb-1 text-rnc-foreground";
|
|
@@ -157,29 +134,61 @@ export const TableStyleSelector = memo(({ tables, sheetId, theme, activeCell, se
|
|
|
157
134
|
onUpdateTable?.(sheetId, table.id, getStyleOptionUpdate(table, key, checked));
|
|
158
135
|
}
|
|
159
136
|
}, [table, sheetId, onUpdateTable]);
|
|
160
|
-
/**
|
|
161
|
-
const
|
|
137
|
+
/** Remove a custom style: the host's when it keeps them, otherwise this session's. */
|
|
138
|
+
const onDeleteStyle = useCallback((style) => {
|
|
139
|
+
if (isSessionStyle(style)) {
|
|
140
|
+
setSessionCustomStyles((prev) => prev.filter((s) => s !== style));
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
onDeleteCustomTableStyle?.(style);
|
|
144
|
+
}
|
|
145
|
+
setStyleEditor(null);
|
|
146
|
+
}, [isSessionStyle, onDeleteCustomTableStyle]);
|
|
147
|
+
/**
|
|
148
|
+
* The style editor created or saved a style: keep it (a same-named style is replaced; a
|
|
149
|
+
* renamed one replaces the style being edited) and apply it like a picked swatch.
|
|
150
|
+
*/
|
|
151
|
+
const onSubmitStyle = useCallback((style) => {
|
|
152
|
+
const previous = styleEditor?.style;
|
|
162
153
|
if (onCreateCustomTableStyle) {
|
|
154
|
+
if (previous && previous.name !== style.name) {
|
|
155
|
+
onDeleteCustomTableStyle?.(previous);
|
|
156
|
+
}
|
|
163
157
|
onCreateCustomTableStyle(style);
|
|
164
158
|
}
|
|
165
159
|
else {
|
|
166
|
-
setSessionCustomStyles((prev) =>
|
|
160
|
+
setSessionCustomStyles((prev) => {
|
|
161
|
+
const next = prev.filter((s) => s !== previous && s.name !== style.name);
|
|
162
|
+
const index = previous ? prev.indexOf(previous) : -1;
|
|
163
|
+
if (index === -1) {
|
|
164
|
+
next.push(style);
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
next.splice(index, 0, style);
|
|
168
|
+
}
|
|
169
|
+
return next;
|
|
170
|
+
});
|
|
167
171
|
}
|
|
168
|
-
|
|
172
|
+
setStyleEditor(null);
|
|
169
173
|
onSelectStyle(style.name, style.bandedRange);
|
|
170
|
-
}, [
|
|
174
|
+
}, [
|
|
175
|
+
styleEditor,
|
|
176
|
+
onCreateCustomTableStyle,
|
|
177
|
+
onDeleteCustomTableStyle,
|
|
178
|
+
onSelectStyle,
|
|
179
|
+
]);
|
|
171
180
|
/**
|
|
172
181
|
* Get all table border styles
|
|
173
182
|
*/
|
|
174
183
|
const tableBorderstyles = useMemo(() => [
|
|
175
184
|
...getTableBorderStyles(showRowStripes, showColumnStripes, theme).entries(),
|
|
176
185
|
], [showRowStripes, showColumnStripes, theme]);
|
|
177
|
-
const swatch = (key, tableTheme, bandProperties, style) => (React.createElement(DropdownMenuItem, { key: key, onClick: () => onSelectStyle(tableTheme, bandProperties), onPointerEnter: () => previewStyle(tableTheme, bandProperties), onPointerLeave: clearPreview, onFocus: () => previewStyle(tableTheme, bandProperties), onBlur: clearPreview, className: hoverClass, title: tableTheme },
|
|
186
|
+
const swatch = (key, tableTheme, bandProperties, style, onContextMenu) => (React.createElement(DropdownMenuItem, { key: key, onClick: () => onSelectStyle(tableTheme, bandProperties), onContextMenu: onContextMenu, onPointerEnter: () => previewStyle(tableTheme, bandProperties), onPointerLeave: clearPreview, onFocus: () => previewStyle(tableTheme, bandProperties), onBlur: clearPreview, className: hoverClass, title: tableTheme },
|
|
178
187
|
React.createElement(TableSkeleton, { rowProperties: bandProperties?.rowProperties, columnProperties: bandProperties?.columnProperties, theme: theme, style: style })));
|
|
179
188
|
return (React.createElement(DropdownMenu, { modal: false, onOpenChange: (open) => {
|
|
180
189
|
if (!open) {
|
|
181
190
|
clearPreview();
|
|
182
|
-
|
|
191
|
+
setStyleEditor(null);
|
|
183
192
|
}
|
|
184
193
|
} },
|
|
185
194
|
React.createElement(DropdownMenuTrigger, { asChild: true },
|
|
@@ -208,9 +217,17 @@ export const TableStyleSelector = memo(({ tables, sheetId, theme, activeCell, se
|
|
|
208
217
|
React.createElement(CheckIcon, null)),
|
|
209
218
|
label)))))) : null,
|
|
210
219
|
allCustomStyles.length ? (React.createElement("div", null,
|
|
211
|
-
React.createElement("div", { className: headingClass
|
|
220
|
+
React.createElement("div", { className: cn(headingClass, "flex items-baseline gap-2") },
|
|
221
|
+
"Custom",
|
|
222
|
+
React.createElement("span", { className: "ml-auto text-rnc-muted-foreground" }, "Right-click a style to edit it")),
|
|
212
223
|
React.createElement(Separator, { className: "mb-2" }),
|
|
213
|
-
React.createElement("div", { className: gridClass }, allCustomStyles.map((style, index) => swatch(`custom-${index}`, style.name, style.bandedRange
|
|
224
|
+
React.createElement("div", { className: gridClass }, allCustomStyles.map((style, index) => swatch(`custom-${index}`, style.name, style.bandedRange, undefined,
|
|
225
|
+
// Excel: right-click a custom style → Modify Table Style… / Delete.
|
|
226
|
+
(event) => {
|
|
227
|
+
event.preventDefault();
|
|
228
|
+
clearPreview();
|
|
229
|
+
setStyleEditor({ style });
|
|
230
|
+
}))))) : null,
|
|
214
231
|
tableBorderstyles.map(([category, tableStyles]) => {
|
|
215
232
|
return (React.createElement("div", { key: category },
|
|
216
233
|
React.createElement("div", { className: headingClass }, category),
|
|
@@ -222,49 +239,25 @@ export const TableStyleSelector = memo(({ tables, sheetId, theme, activeCell, se
|
|
|
222
239
|
secondBandTint, bandProperties, style,], index) => swatch(index, tableTheme, bandProperties, style)))));
|
|
223
240
|
}),
|
|
224
241
|
React.createElement(Separator, { className: "my-1" }),
|
|
225
|
-
|
|
226
|
-
|
|
242
|
+
styleEditor ? (React.createElement(TableStyleEditor
|
|
243
|
+
// Remount per style so the fields seed from the style being edited.
|
|
244
|
+
, {
|
|
245
|
+
// Remount per style so the fields seed from the style being edited.
|
|
246
|
+
key: styleEditor.style?.name ?? "", style: styleEditor.style, defaultName: `Table Style ${allCustomStyles.length + 1}`, existingNames: allCustomStyles.map((style) => style.name), theme: theme, onSubmit: onSubmitStyle, onCancel: () => setStyleEditor(null), onDelete: styleEditor.style &&
|
|
247
|
+
(isSessionStyle(styleEditor.style) ||
|
|
248
|
+
onDeleteCustomTableStyle)
|
|
249
|
+
? onDeleteStyle
|
|
250
|
+
: undefined })) : (React.createElement(DropdownMenuItem, { className: "text-xs",
|
|
251
|
+
// Keep the menu open: the editor replaces this item in place.
|
|
227
252
|
onSelect: (event) => {
|
|
228
253
|
event.preventDefault();
|
|
229
|
-
|
|
254
|
+
setStyleEditor({});
|
|
230
255
|
} }, "New Table Style\u2026")),
|
|
231
|
-
|
|
256
|
+
styleEditor ? null : (
|
|
257
|
+
// Clear (no table style) belongs to the gallery, not to the style editor: while
|
|
258
|
+
// the editor is open its footer ends the panel.
|
|
259
|
+
React.createElement(DropdownMenuItem, { className: "text-xs", onClick: () => onSelectStyle("None", undefined), onPointerEnter: () => previewStyle("None", undefined), onPointerLeave: clearPreview, onFocus: () => previewStyle("None", undefined), onBlur: clearPreview }, "Clear")))))));
|
|
232
260
|
});
|
|
233
|
-
/**
|
|
234
|
-
* "New Table Style…" — Excel's dialog reduced to the three elements the gallery swatches show:
|
|
235
|
-
* header, first banded row, second banded row. Inline in the gallery so the picked colours
|
|
236
|
-
* preview in the same place they will be offered.
|
|
237
|
-
*/
|
|
238
|
-
const NewTableStyleForm = ({ defaultName, theme, onCreate, onCancel, }) => {
|
|
239
|
-
const [name, setName] = useState(defaultName);
|
|
240
|
-
const [header, setHeader] = useState("#4472c4");
|
|
241
|
-
const [firstBand, setFirstBand] = useState("#b4c6e7");
|
|
242
|
-
const [secondBand, setSecondBand] = useState("#ffffff");
|
|
243
|
-
const preview = useMemo(() => buildCustomTableStyle(name, { header, firstBand, secondBand }), [name, header, firstBand, secondBand]);
|
|
244
|
-
const rows = [
|
|
245
|
-
["Header Row", header, setHeader],
|
|
246
|
-
["First Row Stripe", firstBand, setFirstBand],
|
|
247
|
-
["Second Row Stripe", secondBand, setSecondBand],
|
|
248
|
-
];
|
|
249
|
-
return (React.createElement("form", { "data-testid": "new-table-style-form", className: "m-0 p-1 flex flex-col gap-2",
|
|
250
|
-
// The gallery is a Radix menu: keep typing in the fields from driving its typeahead.
|
|
251
|
-
onKeyDown: (event) => event.stopPropagation(), onSubmit: (event) => {
|
|
252
|
-
event.preventDefault();
|
|
253
|
-
if (name.trim()) {
|
|
254
|
-
onCreate(buildCustomTableStyle(name.trim(), { header, firstBand, secondBand }));
|
|
255
|
-
}
|
|
256
|
-
} },
|
|
257
|
-
React.createElement("div", { className: "flex items-center gap-2" },
|
|
258
|
-
React.createElement("label", { className: "font-system text-xs w-24", htmlFor: "rnc-new-table-style-name" }, "Name"),
|
|
259
|
-
React.createElement(Input, { id: "rnc-new-table-style-name", value: name, onChange: (event) => setName(event.target.value), required: true }),
|
|
260
|
-
React.createElement(TableSkeleton, { rowProperties: preview.bandedRange.rowProperties, theme: theme })),
|
|
261
|
-
rows.map(([label, value, setValue]) => (React.createElement("div", { className: "flex items-center gap-2", key: label },
|
|
262
|
-
React.createElement("span", { className: "font-system text-xs w-24" }, label),
|
|
263
|
-
React.createElement(ColorPicker, { colors: NEW_STYLE_COLORS, value: value, onChange: setValue, size: 14, className: "flex-wrap", direction: "horizontal" })))),
|
|
264
|
-
React.createElement("div", { className: "flex gap-1" },
|
|
265
|
-
React.createElement(Button, { type: "submit", variant: "primary", size: "xs", disabled: !name.trim() }, "Create"),
|
|
266
|
-
React.createElement(Button, { size: "xs", type: "button", onClick: onCancel }, "Cancel"))));
|
|
267
|
-
};
|
|
268
261
|
/**
|
|
269
262
|
* Table skeleton
|
|
270
263
|
* @param param0
|
package/dist/esm/config.d.ts
CHANGED
|
@@ -112,4 +112,10 @@ export declare const IndexedColors: readonly string[];
|
|
|
112
112
|
* partial area, Cut, Copy of areas that do not line up (#647 UI-07).
|
|
113
113
|
*/
|
|
114
114
|
export declare const MULTIPLE_SELECTIONS_ERROR = "That command cannot be used on multiple selections.";
|
|
115
|
+
/**
|
|
116
|
+
* Excel's refusal for Copy / Cut of a multi-area (Ctrl-click) selection it
|
|
117
|
+
* cannot lay out as one rectangle: areas that share neither the same rows nor
|
|
118
|
+
* the same columns, or a cut of more than one area (#37265 E10).
|
|
119
|
+
*/
|
|
120
|
+
export declare const MULTIPLE_SELECTIONS_CLIPBOARD_ERROR = "This action won't work on multiple selections.";
|
|
115
121
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/esm/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEzE,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE3D,eAAO,MAAM,mBAAmB,EAAE,aAGhC,CAAC;AACH,eAAO,MAAM,kBAAkB,kBAAoB,CAAC;AACpD,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,GAAG,CAAM,CAAC;AAC5C,eAAO,MAAM,kBAAkB,kBAAqB,CAAC;AACrD,eAAO,MAAM,uBAAuB,EAAE,YAGpC,CAAC;AAEH,eAAO,MAAM,aAAa,UAAY,CAAC;AAEvC,eAAO,MAAM,gBAAgB,QAAS,CAAC;AAGvC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAMvC,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAC1C,eAAO,MAAM,qBAAqB,IAAI,CAAC;AACvC,eAAO,MAAM,oBAAoB,MAAM,CAAC;AACxC,eAAO,MAAM,cAAc,IAAI,CAAC;AAChC,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,uBAAuB,WAAW,CAAC;AAChD,eAAO,MAAM,yBAAyB,SAAS,CAAC;AAChD,eAAO,MAAM,yBAAyB,aAAa,CAAC;AACpD,eAAO,MAAM,iCAAiC,eAAe,CAAC;AAC9D,eAAO,MAAM,mBAAmB;;;EAG9B,CAAC;AACH,eAAO,MAAM,mBAAmB;;EAE9B,CAAC;AACH,eAAO,MAAM,mBAAmB;;;;EAE9B,CAAC;AAEH,eAAO,MAAM,kBAAkB,EAAE,UAG/B,CAAC;AAGH,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAC5C,eAAO,MAAM,uBAAuB,YAAY,CAAC;AACjD,eAAO,MAAM,6BAA6B,YAAY,CAAC;AACvD,eAAO,MAAM,kCAAkC,gBAAgB,CAAC;AAChE,eAAO,MAAM,cAAc,uBAAuB,CAAC;AACnD,eAAO,MAAM,mBAAmB,kBAAkB,CAAC;AACnD,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAC9C,eAAO,MAAM,yBAAyB,YAAY,CAAC;AACnD,eAAO,MAAM,2BAA2B,uBAAuB,CAAC;AAChE,eAAO,MAAM,gCAAgC,oBAAoB,CAAC;AAClE,eAAO,MAAM,iBAAiB,qBAAqB,CAAC;AACpD,eAAO,MAAM,sBAAsB,kBAAkB,CAAC;AACtD,eAAO,MAAM,wBAAwB,qBAAqB,CAAC;AAC3D,eAAO,MAAM,6BAA6B,kBAAkB,CAAC;AAC7D,eAAO,MAAM,0BAA0B,mBAAmB,CAAC;AAC3D,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAC1D,eAAO,MAAM,4BAA4B,oBAAoB,CAAC;AAC9D,eAAO,MAAM,8BAA8B,qBAAqB,CAAC;AACjE,eAAO,MAAM,mCAAmC,oBAAoB,CAAC;AACrE,eAAO,MAAM,gCAAgC,mBAAmB,CAAC;AACjE,eAAO,MAAM,YAAY,2BAA2B,CAAC;AACrD,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAG1C,eAAO,MAAM,wBAAwB,EAAE,eAItC,CAAC;AAGF,eAAO,MAAM,uBAAuB,EAAE,gBAAqC,CAAC;AAG5E,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AACrD,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAG1C,eAAO,MAAM,YAAY,MAAM,CAAC;AAChC,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,WAAW,IAAI,CAAC;AAC7B,eAAO,MAAM,UAAU,SAAS,CAAC;AACjC,eAAO,MAAM,eAAe,SAAS,CAAC;AAGtC,eAAO,MAAM,qBAAqB,KAAK,CAAC;AACxC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAGzC,eAAO,MAAM,gBAAgB,4DAC8B,CAAC;AAC5D,eAAO,MAAM,gBAAgB,yHAC2F,CAAC;AACzH,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,eAAO,MAAM,wBAAwB,gEAC0B,CAAC;AAChE,eAAO,MAAM,yBAAyB,mEAC4B,CAAC;AAGnE,eAAO,MAAM,kBAAkB,+FAC+D,CAAC;AAC/F,eAAO,MAAM,0BAA0B,wIACgG,CAAC;AACxI,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAC7C,eAAO,MAAM,0BAA0B,SAAS,CAAC;AACjD,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAGtC,eAAO,MAAM,gBAAgB,uCAAuC,CAAC;AAErE,eAAO,MAAM,kBAAkB,qBAAqB,CAAC;AAErD,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAG7C,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,eAAe,IAAI,CAAC;AAGjC,eAAO,MAAM,eAAe,KAAK,CAAC;AAGlC,eAAO,MAAM,aAAa,YAAY,CAAC;AAGvC,eAAO,MAAM,WAAW,YAAY,CAAC;AAGrC,eAAO,MAAM,UAAU,YAAY,CAAC;AAGpC,eAAO,MAAM,aAAa,YAAY,CAAC;AAGvC,eAAO,MAAM,8BAA8B,SAAS,CAAC;AAGrD,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAGrC,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC;IACnC,SAAS,EAAE,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5C,KAAK,EAAE,MAAM,CAAC;CACf,CAqEA,CAAC;AAEF,eAAO,MAAM,cAAc,SAAS,CAAC;AAErC,eAAO,MAAM,2BAA2B,EAAE,OAAO,gBAchD,CAAC;AAEF,eAAO,MAAM,WAAW,aAAa,CAAC;AACtC,eAAO,MAAM,WAAW,QAC4a,CAAC;AACrc,eAAO,MAAM,SAAS,QACyF,CAAC;AAEhH,eAAO,MAAM,aAAa,mBAyExB,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,wDACiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../config.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/config.js
CHANGED
|
@@ -300,3 +300,9 @@ export const IndexedColors = Object.freeze([
|
|
|
300
300
|
* partial area, Cut, Copy of areas that do not line up (#647 UI-07).
|
|
301
301
|
*/
|
|
302
302
|
export const MULTIPLE_SELECTIONS_ERROR = "That command cannot be used on multiple selections.";
|
|
303
|
+
/**
|
|
304
|
+
* Excel's refusal for Copy / Cut of a multi-area (Ctrl-click) selection it
|
|
305
|
+
* cannot lay out as one rectangle: areas that share neither the same rows nor
|
|
306
|
+
* the same columns, or a cut of more than one area (#37265 E10).
|
|
307
|
+
*/
|
|
308
|
+
export const MULTIPLE_SELECTIONS_CLIPBOARD_ERROR = "This action won't work on multiple selections.";
|
|
@@ -1,6 +1,14 @@
|
|
|
1
1
|
import { type GridRange } from "@rowsncolumns/grid";
|
|
2
2
|
import type { CanvasGridProps, SpreadsheetTheme } from "../components/canvas-grid/typings";
|
|
3
3
|
import type { CellData, CellFormat, ConditionalFormatRule, CustomFormulaResult } from "../types";
|
|
4
|
+
/**
|
|
5
|
+
* Merge a lower-priority rule's format under an already-applied one, per
|
|
6
|
+
* property (Excel's stacking): every property the higher-priority format
|
|
7
|
+
* left unset is taken from `lower`; a property both set keeps `higher`'s
|
|
8
|
+
* value. `textFormat` and `borders` merge one level deeper for the same
|
|
9
|
+
* reason — rule 1's font colour and rule 2's bold both apply.
|
|
10
|
+
*/
|
|
11
|
+
export declare const layerConditionalFormat: (higher: CellFormat, lower: CellFormat) => CellFormat;
|
|
4
12
|
export type UseConditionalFormattingProps<T extends CellData> = {
|
|
5
13
|
sheetId: number;
|
|
6
14
|
theme: SpreadsheetTheme;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-conditional-formatting.d.ts","sourceRoot":"","sources":["../../../hooks/use-conditional-formatting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAoBpE,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EACjB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EACV,QAAQ,EACR,UAAU,EACV,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAGlB,MAAM,MAAM,6BAA6B,CAAC,CAAC,SAAS,QAAQ,IAAI;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,gBAAgB,CAAC;IACxB,kBAAkB,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,CAClB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,qBAAqB,KACzB,mBAAmB,CAAC;IACzB,aAAa,CACX,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IACX,gBAAgB,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC;IACtD,mBAAmB,EAAE,eAAe,CAAC,qBAAqB,CAAC,CAAC;IAC5D;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC1B;;;;;;;;;OASG;IACH,0BAA0B,CAAC,EAAE,CAC3B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,qBAAqB,CAAC,IAAI,CAAC,KAChC,OAAO,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,CAAC,SAAS,QAAQ,EAAE,iLAW1D,6BAA6B,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"use-conditional-formatting.d.ts","sourceRoot":"","sources":["../../../hooks/use-conditional-formatting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAoBpE,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EACjB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,KAAK,EACV,QAAQ,EACR,UAAU,EACV,qBAAqB,EACrB,mBAAmB,EACpB,MAAM,UAAU,CAAC;AAGlB;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,UAAU,EAClB,OAAO,UAAU,KAChB,UAYF,CAAC;AAaF,MAAM,MAAM,6BAA6B,CAAC,CAAC,SAAS,QAAQ,IAAI;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,gBAAgB,CAAC;IACxB,kBAAkB,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kBAAkB,EAAE,CAClB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,qBAAqB,KACzB,mBAAmB,CAAC;IACzB,aAAa,CACX,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IACX,gBAAgB,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC;IACtD,mBAAmB,EAAE,eAAe,CAAC,qBAAqB,CAAC,CAAC;IAC5D;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IAC1B;;;;;;;;;OASG;IACH,0BAA0B,CAAC,EAAE,CAC3B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,qBAAqB,CAAC,IAAI,CAAC,KAChC,OAAO,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,wBAAwB,GAAI,CAAC,SAAS,QAAQ,EAAE,iLAW1D,6BAA6B,CAAC,CAAC,CAAC,wCA0pBlC,CAAC"}
|
|
@@ -9,6 +9,36 @@ import { getGradientColors } from "../api/heatmap";
|
|
|
9
9
|
import { checkBooleanRule, shouldUsePreviousValue } from "../api/validation";
|
|
10
10
|
import { getStringifiedColor } from "../themes";
|
|
11
11
|
import { DEFAULT_COLUMN_COUNT, DEFAULT_ROW_COUNT } from "../config";
|
|
12
|
+
/**
|
|
13
|
+
* Merge a lower-priority rule's format under an already-applied one, per
|
|
14
|
+
* property (Excel's stacking): every property the higher-priority format
|
|
15
|
+
* left unset is taken from `lower`; a property both set keeps `higher`'s
|
|
16
|
+
* value. `textFormat` and `borders` merge one level deeper for the same
|
|
17
|
+
* reason — rule 1's font colour and rule 2's bold both apply.
|
|
18
|
+
*/
|
|
19
|
+
export const layerConditionalFormat = (higher, lower) => {
|
|
20
|
+
const merged = { ...lower, ...definedEntries(higher) };
|
|
21
|
+
if (higher.textFormat && lower.textFormat) {
|
|
22
|
+
merged.textFormat = {
|
|
23
|
+
...lower.textFormat,
|
|
24
|
+
...definedEntries(higher.textFormat),
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
if (higher.borders && lower.borders) {
|
|
28
|
+
merged.borders = { ...lower.borders, ...definedEntries(higher.borders) };
|
|
29
|
+
}
|
|
30
|
+
return merged;
|
|
31
|
+
};
|
|
32
|
+
/** `obj` without its `undefined` / `null` entries, so they never mask a lower rule's value in a spread. */
|
|
33
|
+
const definedEntries = (obj) => {
|
|
34
|
+
const out = {};
|
|
35
|
+
for (const key of Object.keys(obj)) {
|
|
36
|
+
if (!isNil(obj[key])) {
|
|
37
|
+
out[key] = obj[key];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return out;
|
|
41
|
+
};
|
|
12
42
|
export const useConditionalFormatting = ({ sheetId, theme, conditionalFormats, locale, getValidationValue, isNumberValue, getSheetRowCount, getSheetColumnCount, window: evaluationWindow, getConditionalFormatResult, }) => {
|
|
13
43
|
const previousEffectiveValueMap = useRef(undefined);
|
|
14
44
|
// Lazy initialization
|
|
@@ -70,6 +100,19 @@ export const useConditionalFormatting = ({ sheetId, theme, conditionalFormats, l
|
|
|
70
100
|
.map((rule) => rule.id))
|
|
71
101
|
: undefined;
|
|
72
102
|
const stopCells = new Set();
|
|
103
|
+
// Layer a rule's format onto whatever higher-priority rules already
|
|
104
|
+
// painted on the cell. Excel stacks true rules per PROPERTY: a fill from
|
|
105
|
+
// rule 1 and bold from rule 2 both show, and when two true rules set the
|
|
106
|
+
// same property the higher-priority one (evaluated first here) wins —
|
|
107
|
+
// so the existing value is kept and only the gaps are filled in.
|
|
108
|
+
const layerFormat = (cellId, format) => {
|
|
109
|
+
const existing = formattingByCell.get(cellId);
|
|
110
|
+
if (!existing || !format) {
|
|
111
|
+
formattingByCell.set(cellId, existing ?? format);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
formattingByCell.set(cellId, layerConditionalFormat(existing, format));
|
|
115
|
+
};
|
|
73
116
|
// Consume the engine's per-cell stamps for an aggregate rule over one
|
|
74
117
|
// (possibly window-intersected) range — cells outside the window aren't
|
|
75
118
|
// visible, and the stamps already carry the FULL-range aggregate result.
|
|
@@ -82,7 +125,7 @@ export const useConditionalFormatting = ({ sheetId, theme, conditionalFormats, l
|
|
|
82
125
|
if (stopCells.has(cellId)) {
|
|
83
126
|
continue;
|
|
84
127
|
}
|
|
85
|
-
|
|
128
|
+
layerFormat(cellId, format);
|
|
86
129
|
if (rule.stopIfTrue) {
|
|
87
130
|
stopCells.add(cellId);
|
|
88
131
|
}
|
|
@@ -173,7 +216,7 @@ export const useConditionalFormatting = ({ sheetId, theme, conditionalFormats, l
|
|
|
173
216
|
if (stopCells.has(cellId)) {
|
|
174
217
|
continue;
|
|
175
218
|
}
|
|
176
|
-
|
|
219
|
+
layerFormat(cellId, booleanRule.format);
|
|
177
220
|
if (rule.stopIfTrue) {
|
|
178
221
|
stopCells.add(cellId);
|
|
179
222
|
}
|
|
@@ -234,9 +277,7 @@ export const useConditionalFormatting = ({ sheetId, theme, conditionalFormats, l
|
|
|
234
277
|
if (isNil(backgroundColor)) {
|
|
235
278
|
continue;
|
|
236
279
|
}
|
|
237
|
-
|
|
238
|
-
backgroundColor,
|
|
239
|
-
});
|
|
280
|
+
layerFormat(cellId, { backgroundColor });
|
|
240
281
|
if (rule.stopIfTrue) {
|
|
241
282
|
stopCells.add(cellId);
|
|
242
283
|
}
|
|
@@ -294,7 +335,7 @@ export const useConditionalFormatting = ({ sheetId, theme, conditionalFormats, l
|
|
|
294
335
|
if (stopCells.has(cellId)) {
|
|
295
336
|
continue;
|
|
296
337
|
}
|
|
297
|
-
|
|
338
|
+
layerFormat(cellId, topBottomRule.format);
|
|
298
339
|
if (rule.stopIfTrue) {
|
|
299
340
|
stopCells.add(cellId);
|
|
300
341
|
}
|
|
@@ -341,7 +382,7 @@ export const useConditionalFormatting = ({ sheetId, theme, conditionalFormats, l
|
|
|
341
382
|
if (stopCells.has(cellId)) {
|
|
342
383
|
continue;
|
|
343
384
|
}
|
|
344
|
-
|
|
385
|
+
layerFormat(cellId, distinctRule.format);
|
|
345
386
|
if (rule.stopIfTrue) {
|
|
346
387
|
stopCells.add(cellId);
|
|
347
388
|
}
|
|
@@ -396,9 +437,7 @@ export const useConditionalFormatting = ({ sheetId, theme, conditionalFormats, l
|
|
|
396
437
|
const glyphIndex = Math.min(bucket, orderedGlyphs.length - 1);
|
|
397
438
|
const glyph = orderedGlyphs[glyphIndex];
|
|
398
439
|
const color = orderedColors[Math.min(bucket, orderedColors.length - 1)];
|
|
399
|
-
|
|
400
|
-
formattingByCell.set(cellId, {
|
|
401
|
-
...(existing ?? {}),
|
|
440
|
+
layerFormat(cellId, {
|
|
402
441
|
// iconSet + iconId are needed by the icon column filter to
|
|
403
442
|
// match cells against a specific (iconSet, iconId) target.
|
|
404
443
|
// They're harmless to renderers that only read `glyph`.
|
|
@@ -459,9 +498,7 @@ export const useConditionalFormatting = ({ sheetId, theme, conditionalFormats, l
|
|
|
459
498
|
const fill = computeDataBarFill(isNegative ? -cell.value : cell.value, isNegative ? 0 : Math.max(0, resolvedMin), isNegative
|
|
460
499
|
? Math.abs(resolvedMin)
|
|
461
500
|
: Math.max(resolvedMin, resolvedMax));
|
|
462
|
-
|
|
463
|
-
formattingByCell.set(cellId, {
|
|
464
|
-
...(existing ?? {}),
|
|
501
|
+
layerFormat(cellId, {
|
|
465
502
|
conditionalDataBar: {
|
|
466
503
|
color: isNegative
|
|
467
504
|
? negativeColor
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-editable.d.ts","sourceRoot":"","sources":["../../../hooks/use-editable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,aAAa,EACb,YAAY,EACZ,SAAS,EACT,UAAU,EACV,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACd,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAEL,SAAS,EAIV,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"use-editable.d.ts","sourceRoot":"","sources":["../../../hooks/use-editable.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { MouseButtonCodes } from "@rowsncolumns/grid";
|
|
2
2
|
import { clampIndex, Direction, findNextCellWithinBounds, isArrowKey, isEqualCells, } from "@rowsncolumns/grid";
|
|
3
|
-
import { isAFormula, isNil } from "@rowsncolumns/utils";
|
|
3
|
+
import { isAFormula, isNil, PROTECTED_SHEET_EDIT_MESSAGE, SHEET_PROTECTION_ERROR_TITLE, } from "@rowsncolumns/utils";
|
|
4
4
|
import { useCallback, useMemo, useRef, useState } from "react";
|
|
5
5
|
import { first } from "rxjs";
|
|
6
6
|
import { useCellEditorInstance, useCellEditorTextFormatRuns, useCellEditorValue, useEditingCellCoordinate, useEditorVisibility, useSetActiveEditor, useSetFormulaMode, } from "../atoms";
|
|
7
7
|
import { findActiveTableWithinCell, getNextCellInTable } from "../api/table";
|
|
8
|
+
import { useShowValidationAlert } from "../atoms/validation-alert.atom";
|
|
8
9
|
import { DEFAULT_ACTIVE_CELL, DEFAULT_ARRAY } from "../config";
|
|
9
10
|
import { scrollSubscriber } from "../signals/scroll-subscriber";
|
|
10
11
|
import { useCallbackRef } from "./use-callback-ref";
|
|
@@ -391,6 +392,37 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
391
392
|
const setInitialActiveCell = useCallback((cell) => {
|
|
392
393
|
initialActiveCell.current = cell;
|
|
393
394
|
}, []);
|
|
395
|
+
const showValidationAlert = useShowValidationAlert();
|
|
396
|
+
/**
|
|
397
|
+
* Whether every cell the Delete key targets may be edited: the active cell when there is no
|
|
398
|
+
* selection, else every cell of every selection (clipped to the sheet's row / column counts,
|
|
399
|
+
* so a whole-column selection is bounded), stopping at the first locked one.
|
|
400
|
+
*/
|
|
401
|
+
const canEditSelection = useCallback((targetSheetId, cell, areas) => {
|
|
402
|
+
if (!areas.length) {
|
|
403
|
+
return canEdit(targetSheetId, cell);
|
|
404
|
+
}
|
|
405
|
+
const maxRow = getSheetRowCount?.(targetSheetId) ?? selectionBottomBound;
|
|
406
|
+
const maxColumn = getSheetColumnCount?.(targetSheetId) ?? selectionRightBound;
|
|
407
|
+
for (const { range } of areas) {
|
|
408
|
+
const lastRow = Math.min(range.endRowIndex, maxRow);
|
|
409
|
+
const lastColumn = Math.min(range.endColumnIndex, maxColumn);
|
|
410
|
+
for (let rowIndex = range.startRowIndex; rowIndex <= lastRow; rowIndex++) {
|
|
411
|
+
for (let columnIndex = range.startColumnIndex; columnIndex <= lastColumn; columnIndex++) {
|
|
412
|
+
if (!canEdit(targetSheetId, { rowIndex, columnIndex })) {
|
|
413
|
+
return false;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
return true;
|
|
419
|
+
}, [
|
|
420
|
+
canEdit,
|
|
421
|
+
getSheetRowCount,
|
|
422
|
+
getSheetColumnCount,
|
|
423
|
+
selectionBottomBound,
|
|
424
|
+
selectionRightBound,
|
|
425
|
+
]);
|
|
394
426
|
const handleKeyDown = useCallback((e) => {
|
|
395
427
|
const nativeEvent = e.nativeEvent;
|
|
396
428
|
const key = nativeEvent.key;
|
|
@@ -474,7 +506,19 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
474
506
|
e.preventDefault();
|
|
475
507
|
}
|
|
476
508
|
else if (key === "Delete" || key === "Backspace") {
|
|
477
|
-
//
|
|
509
|
+
// Excel refuses Delete / Backspace when any selected cell is a locked cell of a
|
|
510
|
+
// protected sheet — the same `canEdit` gate typing goes through in `makeEditable`
|
|
511
|
+
// (rowsncolumns/spreadsheet#939 U-35). Nothing is cleared; Excel's dialog is shown.
|
|
512
|
+
if (!canEditSelection(sheetId, activeCell, selections)) {
|
|
513
|
+
void showValidationAlert({
|
|
514
|
+
style: "stop",
|
|
515
|
+
title: SHEET_PROTECTION_ERROR_TITLE,
|
|
516
|
+
message: PROTECTED_SHEET_EDIT_MESSAGE,
|
|
517
|
+
confirm: false,
|
|
518
|
+
});
|
|
519
|
+
e.preventDefault();
|
|
520
|
+
return;
|
|
521
|
+
}
|
|
478
522
|
onDelete?.(sheetId, activeCell, selections);
|
|
479
523
|
// Delete value
|
|
480
524
|
setValue("");
|
|
@@ -504,6 +548,8 @@ export const useEditable = ({ getEditor = getDefaultEditor, getValue, getTextFor
|
|
|
504
548
|
getBooleanValue,
|
|
505
549
|
getDataValidation,
|
|
506
550
|
onDelete,
|
|
551
|
+
canEditSelection,
|
|
552
|
+
showValidationAlert,
|
|
507
553
|
makeEditable,
|
|
508
554
|
isSelectionKey,
|
|
509
555
|
setInitialActiveCell,
|
|
@@ -207,6 +207,11 @@ export type UseSelectionOptions<T extends AreaStyle = AreaStyle> = {
|
|
|
207
207
|
* Get data row count
|
|
208
208
|
*/
|
|
209
209
|
getDataRowCount: CanvasGridProps["getDataRowCount"];
|
|
210
|
+
/**
|
|
211
|
+
* Ctrl/Cmd+A's current region from the engine's full document (see `CanvasGridProps`). When
|
|
212
|
+
* absent the hook walks `getValue`, which only sees the values the host holds in JS.
|
|
213
|
+
*/
|
|
214
|
+
getDataRegion?: CanvasGridProps["getDataRegion"];
|
|
210
215
|
/**
|
|
211
216
|
* Enable navigation to data boundary instead of sheet boundary
|
|
212
217
|
*/
|
|
@@ -215,7 +220,7 @@ export type UseSelectionOptions<T extends AreaStyle = AreaStyle> = {
|
|
|
215
220
|
isColumnHeader(index: number): boolean;
|
|
216
221
|
};
|
|
217
222
|
export type NewSelectionMode = "clear" | "modify" | "append";
|
|
218
|
-
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, isRowHeader, isColumnHeader, enableDataBoundaryNavigation, tables, onInsertTableRow, }: UseSelectionOptions<T>) => {
|
|
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>) => {
|
|
219
224
|
isDragging: boolean;
|
|
220
225
|
draggedSelection: SelectionArea<T> | undefined;
|
|
221
226
|
initialDraggedSelection: SelectionArea<T> | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-selection.d.ts","sourceRoot":"","sources":["../../../hooks/use-selection.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"use-selection.d.ts","sourceRoot":"","sources":["../../../hooks/use-selection.ts"],"names":[],"mappings":"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"}
|