@rowsncolumns/spreadsheet 10.4.2 → 10.4.5

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.
Files changed (78) hide show
  1. package/dist/cjs/atoms/sheet-context.atom.d.ts +2 -0
  2. package/dist/cjs/atoms/sheet-context.atom.d.ts.map +1 -1
  3. package/dist/cjs/atoms/sheet-context.atom.js +8 -2
  4. package/dist/cjs/atoms/sort-dialog.atom.d.ts +6 -2
  5. package/dist/cjs/atoms/sort-dialog.atom.d.ts.map +1 -1
  6. package/dist/cjs/components/canvas-grid/index.d.ts.map +1 -1
  7. package/dist/cjs/components/canvas-grid/index.js +4 -2
  8. package/dist/cjs/components/canvas-grid/typings.d.ts +10 -0
  9. package/dist/cjs/components/canvas-grid/typings.d.ts.map +1 -1
  10. package/dist/cjs/components/filter-box/index.d.ts.map +1 -1
  11. package/dist/cjs/components/filter-box/index.js +14 -3
  12. package/dist/cjs/components/sheet-tabs/index.d.ts.map +1 -1
  13. package/dist/cjs/components/sheet-tabs/index.js +19 -5
  14. package/dist/cjs/components/sort-range-dialog/index.d.ts +20 -3
  15. package/dist/cjs/components/sort-range-dialog/index.d.ts.map +1 -1
  16. package/dist/cjs/components/sort-range-dialog/index.js +20 -6
  17. package/dist/cjs/components/toolbar/cell-style-selector.d.ts +9 -0
  18. package/dist/cjs/components/toolbar/cell-style-selector.d.ts.map +1 -1
  19. package/dist/cjs/components/toolbar/cell-style-selector.js +12 -3
  20. package/dist/cjs/components/toolbar/merge-cells-selector.d.ts +27 -1
  21. package/dist/cjs/components/toolbar/merge-cells-selector.d.ts.map +1 -1
  22. package/dist/cjs/components/toolbar/merge-cells-selector.js +106 -8
  23. package/dist/cjs/components/toolbar/text-format-selector.d.ts.map +1 -1
  24. package/dist/cjs/components/toolbar/text-format-selector.js +15 -11
  25. package/dist/cjs/config.d.ts +6 -0
  26. package/dist/cjs/config.d.ts.map +1 -1
  27. package/dist/cjs/config.js +7 -1
  28. package/dist/cjs/hooks/use-conditional-formatting.d.ts +8 -0
  29. package/dist/cjs/hooks/use-conditional-formatting.d.ts.map +1 -1
  30. package/dist/cjs/hooks/use-conditional-formatting.js +128 -77
  31. package/dist/cjs/hooks/use-editable.d.ts.map +1 -1
  32. package/dist/cjs/hooks/use-editable.js +59 -1
  33. package/dist/cjs/hooks/use-selection.d.ts +6 -1
  34. package/dist/cjs/hooks/use-selection.d.ts.map +1 -1
  35. package/dist/cjs/hooks/use-selection.js +37 -1
  36. package/dist/cjs/release-date.js +1 -1
  37. package/dist/cjs/types.d.ts +54 -0
  38. package/dist/cjs/types.d.ts.map +1 -1
  39. package/dist/esm/atoms/sheet-context.atom.d.ts +2 -0
  40. package/dist/esm/atoms/sheet-context.atom.d.ts.map +1 -1
  41. package/dist/esm/atoms/sheet-context.atom.js +3 -0
  42. package/dist/esm/atoms/sort-dialog.atom.d.ts +6 -2
  43. package/dist/esm/atoms/sort-dialog.atom.d.ts.map +1 -1
  44. package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
  45. package/dist/esm/components/canvas-grid/index.js +3 -1
  46. package/dist/esm/components/canvas-grid/typings.d.ts +10 -0
  47. package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
  48. package/dist/esm/components/filter-box/index.d.ts.map +1 -1
  49. package/dist/esm/components/filter-box/index.js +14 -3
  50. package/dist/esm/components/sheet-tabs/index.d.ts.map +1 -1
  51. package/dist/esm/components/sheet-tabs/index.js +20 -6
  52. package/dist/esm/components/sort-range-dialog/index.d.ts +20 -3
  53. package/dist/esm/components/sort-range-dialog/index.d.ts.map +1 -1
  54. package/dist/esm/components/sort-range-dialog/index.js +17 -5
  55. package/dist/esm/components/toolbar/cell-style-selector.d.ts +9 -0
  56. package/dist/esm/components/toolbar/cell-style-selector.d.ts.map +1 -1
  57. package/dist/esm/components/toolbar/cell-style-selector.js +11 -2
  58. package/dist/esm/components/toolbar/merge-cells-selector.d.ts +27 -1
  59. package/dist/esm/components/toolbar/merge-cells-selector.d.ts.map +1 -1
  60. package/dist/esm/components/toolbar/merge-cells-selector.js +94 -10
  61. package/dist/esm/components/toolbar/text-format-selector.d.ts.map +1 -1
  62. package/dist/esm/components/toolbar/text-format-selector.js +5 -1
  63. package/dist/esm/config.d.ts +6 -0
  64. package/dist/esm/config.d.ts.map +1 -1
  65. package/dist/esm/config.js +6 -0
  66. package/dist/esm/hooks/use-conditional-formatting.d.ts +8 -0
  67. package/dist/esm/hooks/use-conditional-formatting.d.ts.map +1 -1
  68. package/dist/esm/hooks/use-conditional-formatting.js +50 -13
  69. package/dist/esm/hooks/use-editable.d.ts.map +1 -1
  70. package/dist/esm/hooks/use-editable.js +48 -2
  71. package/dist/esm/hooks/use-selection.d.ts +6 -1
  72. package/dist/esm/hooks/use-selection.d.ts.map +1 -1
  73. package/dist/esm/hooks/use-selection.js +37 -1
  74. package/dist/esm/release-date.js +1 -1
  75. package/dist/esm/types.d.ts +54 -0
  76. package/dist/esm/types.d.ts.map +1 -1
  77. package/dist/spreadsheet.min.css +1 -1
  78. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/sort-range-dialog/index.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAA0D,MAAM,OAAO,CAAC;AAE/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,aAAa,CAAC;AAQxD;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,2BAA2B;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC,oCAAoC;IACpC,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;IACzB;;;;OAIG;IACH,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;IAC3B;;;;OAIG;IACH,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;CACnC,CAAC;AA2DF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe,mGAQvB,eAAe,uBAiVnB,CAAC;AAIF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB;;;CAe/B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../components/sort-range-dialog/index.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAA0D,MAAM,OAAO,CAAC;AAE/E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,KAAK,EAAa,SAAS,EAAE,MAAM,aAAa,CAAC;AAQxD;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,kFAAkF;IAClF,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,2BAA2B;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,YAAY,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC,oCAAoC;IACpC,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;IACzB;;;;OAIG;IACH,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC;IAC3B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B;;;;;OAKG;IACH,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;CACpE,CAAC;AAEF,yGAAyG;AACzG,eAAO,MAAM,eAAe,GAC1B,QAAQ,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,QAAQ,CAAC,EAClD,WAAW,OAAO,KACjB,MAGF,CAAC;AA2DF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe,qHASvB,eAAe,uBAiWnB,CAAC;AAIF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB;;;CAgB/B,CAAC"}
@@ -1,11 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SortRangeDialogHost = exports.SortRangeDialog = void 0;
3
+ exports.SortRangeDialogHost = exports.SortRangeDialog = exports.sortColumnLabel = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var icons_1 = require("@rowsncolumns/icons");
6
6
  var ui_1 = require("@rowsncolumns/ui");
7
7
  var react_1 = tslib_1.__importStar(require("react"));
8
8
  var sort_dialog_atom_1 = require("../../atoms/sort-dialog.atom");
9
+ /** The label a sort level shows for a column: its header while the data has headers, else its letter. */
10
+ var sortColumnLabel = function (column, hasHeader) {
11
+ var _a;
12
+ var header = (_a = column.header) === null || _a === void 0 ? void 0 : _a.trim();
13
+ return hasHeader && header ? header : column.label;
14
+ };
15
+ exports.sortColumnLabel = sortColumnLabel;
9
16
  var CUSTOM_LIST_PREFIX = "custom:";
10
17
  var ColorSwatch = function (_a) {
11
18
  var color = _a.color;
@@ -53,19 +60,23 @@ var specToLevel = function (spec, customLists) {
53
60
  * routes through its existing sort callbacks.
54
61
  */
55
62
  exports.SortRangeDialog = (0, react_1.memo)(function (_a) {
56
- var open = _a.open, onOpenChange = _a.onOpenChange, columns = _a.columns, customLists = _a.customLists, initialSpecs = _a.initialSpecs, onApply = _a.onApply;
63
+ var open = _a.open, onOpenChange = _a.onOpenChange, columns = _a.columns, customLists = _a.customLists, initialSpecs = _a.initialSpecs, initialHasHeader = _a.initialHasHeader, onApply = _a.onApply;
57
64
  var lists = (0, react_1.useMemo)(function () { return customLists !== null && customLists !== void 0 ? customLists : []; }, [customLists]);
58
65
  var _b = tslib_1.__read((0, react_1.useState)(function () {
59
66
  return (initialSpecs === null || initialSpecs === void 0 ? void 0 : initialSpecs.length)
60
67
  ? initialSpecs.map(function (spec) { return specToLevel(spec, lists); })
61
68
  : [makeDefaultLevel(columns)];
62
69
  }), 2), levels = _b[0], setLevels = _b[1];
70
+ var showHeaderToggle = initialHasHeader !== undefined ||
71
+ columns.some(function (column) { return column.header !== undefined; });
72
+ var _c = tslib_1.__read((0, react_1.useState)(initialHasHeader !== null && initialHasHeader !== void 0 ? initialHasHeader : false), 2), hasHeader = _c[0], setHasHeader = _c[1];
63
73
  // Re-seed when reopened with different columns / specs.
64
74
  (0, react_1.useEffect)(function () {
65
75
  if (open) {
66
76
  setLevels((initialSpecs === null || initialSpecs === void 0 ? void 0 : initialSpecs.length)
67
77
  ? initialSpecs.map(function (spec) { return specToLevel(spec, lists); })
68
78
  : [makeDefaultLevel(columns)]);
79
+ setHasHeader(initialHasHeader !== null && initialHasHeader !== void 0 ? initialHasHeader : false);
69
80
  }
70
81
  // Only reset on open transitions.
71
82
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -133,15 +144,18 @@ exports.SortRangeDialog = (0, react_1.memo)(function (_a) {
133
144
  }
134
145
  return spec;
135
146
  });
136
- onApply(specs);
147
+ onApply(specs, { hasHeader: hasHeader });
137
148
  onOpenChange(false);
138
- }, [levels, lists, onApply, onOpenChange]);
149
+ }, [levels, lists, hasHeader, onApply, onOpenChange]);
139
150
  return (react_1.default.createElement(ui_1.Dialog, { open: open, onOpenChange: onOpenChange },
140
151
  react_1.default.createElement(ui_1.DialogContent, { className: "w-[640px] max-w-[92vw] pointer-events-auto" },
141
152
  react_1.default.createElement(ui_1.DialogTitle, null, "Sort"),
142
153
  react_1.default.createElement(ui_1.DialogCloseButton, { onClick: function () { return onOpenChange(false); } },
143
154
  react_1.default.createElement(icons_1.Cross1Icon, null)),
144
155
  react_1.default.createElement(ui_1.DialogBody, { className: "flex flex-col gap-3" },
156
+ showHeaderToggle ? (react_1.default.createElement("label", { className: "font-system text-sm flex items-center gap-1" },
157
+ react_1.default.createElement("input", { type: "checkbox", name: "hasHeader", checked: hasHeader, onChange: function (e) { return setHasHeader(e.target.checked); } }),
158
+ "My data has headers")) : null,
145
159
  react_1.default.createElement("div", { className: "flex flex-col gap-2" }, levels.map(function (lvl, rowIndex) {
146
160
  var _a, _b, _c, _d;
147
161
  var col = columnByIndex.get(lvl.dimensionIndex);
@@ -162,7 +176,7 @@ exports.SortRangeDialog = (0, react_1.memo)(function (_a) {
162
176
  react_1.default.createElement(ui_1.SelectTrigger, { className: "w-[160px]" },
163
177
  react_1.default.createElement(ui_1.SelectValue, { placeholder: "Column" })),
164
178
  react_1.default.createElement(ui_1.SelectPortal, null,
165
- react_1.default.createElement(ui_1.SelectContent, null, columns.map(function (c) { return (react_1.default.createElement(ui_1.SelectItem, { key: c.dimensionIndex, value: String(c.dimensionIndex) }, c.label)); })))),
179
+ react_1.default.createElement(ui_1.SelectContent, null, columns.map(function (c) { return (react_1.default.createElement(ui_1.SelectItem, { key: c.dimensionIndex, value: String(c.dimensionIndex) }, (0, exports.sortColumnLabel)(c, hasHeader))); })))),
166
180
  react_1.default.createElement(ui_1.Select, { value: lvl.customListIndex != null && lvl.sortBy === "value"
167
181
  ? "".concat(CUSTOM_LIST_PREFIX).concat(lvl.customListIndex)
168
182
  : lvl.sortBy, onValueChange: function (v) {
@@ -254,7 +268,7 @@ var SortRangeDialogHost = function () {
254
268
  return (react_1.default.createElement(exports.SortRangeDialog, { open: request != null, onOpenChange: function (open) {
255
269
  if (!open)
256
270
  close();
257
- }, columns: (_a = request === null || request === void 0 ? void 0 : request.columns) !== null && _a !== void 0 ? _a : [], customLists: request === null || request === void 0 ? void 0 : request.customLists, initialSpecs: request === null || request === void 0 ? void 0 : request.initialSpecs, onApply: function (specs) { return request === null || request === void 0 ? void 0 : request.onApply(specs); } }));
271
+ }, columns: (_a = request === null || request === void 0 ? void 0 : request.columns) !== null && _a !== void 0 ? _a : [], customLists: request === null || request === void 0 ? void 0 : request.customLists, initialSpecs: request === null || request === void 0 ? void 0 : request.initialSpecs, initialHasHeader: request === null || request === void 0 ? void 0 : request.initialHasHeader, onApply: function (specs, options) { return request === null || request === void 0 ? void 0 : request.onApply(specs, options); } }));
258
272
  };
259
273
  exports.SortRangeDialogHost = SortRangeDialogHost;
260
274
  exports.SortRangeDialogHost.displayName = "SortRangeDialogHost";
@@ -33,6 +33,15 @@ export declare const getGalleryNamedCellStyles: (namedCellStyles: NamedCellStyle
33
33
  /** CSS preview of a named style's format for the gallery swatch. */
34
34
  export declare const getNamedCellStylePreview: (format: CellFormat | undefined, theme: SpreadsheetTheme) => React.CSSProperties;
35
35
  export declare const getCellStyles: (theme: SpreadsheetTheme, currencySymbol?: string) => Map<string, StyleList[]>;
36
+ /**
37
+ * Excel's built-in "Comma Style" / "Comma [0]" (numFmtId 43 / 41): accounting
38
+ * layout without a currency symbol — negatives in parentheses, zero as `-`,
39
+ * `_(`/`_)` padding so digits align. `-15` shows `(15.00)` in the cell's own
40
+ * colour; the `[Red]` parenthesised variants are separate built-ins (38/40)
41
+ * that the Format Cells dialog offers under Custom, not the toolbar style.
42
+ */
43
+ export declare const PATTERN_COMMA_STYLE = "_(* #,##0.00_);_(* (#,##0.00);_(* \"-\"??_);_(@_)";
44
+ export declare const PATTERN_COMMA_STYLE_ROUNDED = "_(* #,##0_);_(* (#,##0);_(* \"-\"??_);_(@_)";
36
45
  export declare const CellStyleSelector: React.MemoExoticComponent<({ currency, locale, theme, selectedFormat, namedCellStyles, canAddCustomStyle, onChangeFormatting, onClearFormatting, }: CellStyleSelectorProps) => React.JSX.Element>;
37
46
  export {};
38
47
  //# sourceMappingURL=cell-style-selector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cell-style-selector.d.ts","sourceRoot":"","sources":["../../../../components/toolbar/cell-style-selector.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAMrD,OAAO,KAAK,EACV,UAAU,EAEV,cAAc,EAEf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,KAAK,cAAc,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;AAClD,KAAK,aAAa,CAAC,CAAC,SAAS,MAAM,UAAU,IAAI,CAC/C,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,KACjB,IAAI,CAAC;AAEV,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,gBAAgB,CAAC;IACxB,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;IAC3C;;;;;OAKG;IACH,eAAe,CAAC,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;IAC1C,cAAc,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IACnC,qBAAqB,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,kBAAkB,EAAE,CAClB,GAAG,IAAI,EAAE,UAAU,CAAC,cAAc,GAAG,aAAa,CAAC,MAAM,UAAU,CAAC,CAAC,KAClE,IAAI,CAAC;IACV,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,EAAE,MAAM,IAAI,CAAC;CAC/B,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,UAAU;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa;CAC5B,CAAC;AAEF,8EAA8E;AAC9E,eAAO,MAAM,yBAAyB,GACpC,iBAAiB,cAAc,EAAE,GAAG,IAAI,GAAG,SAAS,KACnD,KAAK,CAAC,cAAc,GAAG;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,CAQ7C,CAAC;AAcJ,oEAAoE;AACpE,eAAO,MAAM,wBAAwB,GACnC,QAAQ,UAAU,GAAG,SAAS,EAC9B,OAAO,gBAAgB,KACtB,KAAK,CAAC,aAqBR,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,OAAO,gBAAgB,EACvB,iBAAiB,MAAM,6BAgYxB,CAAC;AAEF,eAAO,MAAM,iBAAiB,sJAUzB,sBAAsB,uBAsO1B,CAAC"}
1
+ {"version":3,"file":"cell-style-selector.d.ts","sourceRoot":"","sources":["../../../../components/toolbar/cell-style-selector.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAgC,MAAM,OAAO,CAAC;AAMrD,OAAO,KAAK,EACV,UAAU,EAEV,cAAc,EAEf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,KAAK,cAAc,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;AAClD,KAAK,aAAa,CAAC,CAAC,SAAS,MAAM,UAAU,IAAI,CAC/C,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,KACjB,IAAI,CAAC;AAEV,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,gBAAgB,CAAC;IACxB,iBAAiB,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;IAC3C;;;;;OAKG;IACH,eAAe,CAAC,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;IAC1C,cAAc,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IACnC,qBAAqB,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3C,kBAAkB,EAAE,CAClB,GAAG,IAAI,EAAE,UAAU,CAAC,cAAc,GAAG,aAAa,CAAC,MAAM,UAAU,CAAC,CAAC,KAClE,IAAI,CAAC;IACV,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,EAAE,MAAM,IAAI,CAAC;CAC/B,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,QAAQ,EAAE,MAAM;IAChB,MAAM,EAAE,UAAU;IAClB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa;CAC5B,CAAC;AAEF,8EAA8E;AAC9E,eAAO,MAAM,yBAAyB,GACpC,iBAAiB,cAAc,EAAE,GAAG,IAAI,GAAG,SAAS,KACnD,KAAK,CAAC,cAAc,GAAG;IAAE,MAAM,EAAE,UAAU,CAAA;CAAE,CAQ7C,CAAC;AAcJ,oEAAoE;AACpE,eAAO,MAAM,wBAAwB,GACnC,QAAQ,UAAU,GAAG,SAAS,EAC9B,OAAO,gBAAgB,KACtB,KAAK,CAAC,aAqBR,CAAC;AAEF,eAAO,MAAM,aAAa,GACxB,OAAO,gBAAgB,EACvB,iBAAiB,MAAM,6BAgYxB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,sDAAoD,CAAC;AACrF,eAAO,MAAM,2BAA2B,gDAA8C,CAAC;AAEvF,eAAO,MAAM,iBAAiB,sJAUzB,sBAAsB,uBAsO1B,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CellStyleSelector = exports.getCellStyles = exports.getNamedCellStylePreview = exports.getGalleryNamedCellStyles = void 0;
3
+ exports.CellStyleSelector = exports.PATTERN_COMMA_STYLE_ROUNDED = exports.PATTERN_COMMA_STYLE = exports.getCellStyles = exports.getNamedCellStylePreview = exports.getGalleryNamedCellStyles = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var icons_1 = require("@rowsncolumns/icons");
6
6
  var icons_2 = require("@rowsncolumns/icons");
@@ -436,6 +436,15 @@ var getCellStyles = function (theme, currencySymbol) {
436
436
  ]);
437
437
  };
438
438
  exports.getCellStyles = getCellStyles;
439
+ /**
440
+ * Excel's built-in "Comma Style" / "Comma [0]" (numFmtId 43 / 41): accounting
441
+ * layout without a currency symbol — negatives in parentheses, zero as `-`,
442
+ * `_(`/`_)` padding so digits align. `-15` shows `(15.00)` in the cell's own
443
+ * colour; the `[Red]` parenthesised variants are separate built-ins (38/40)
444
+ * that the Format Cells dialog offers under Custom, not the toolbar style.
445
+ */
446
+ exports.PATTERN_COMMA_STYLE = '_(* #,##0.00_);_(* (#,##0.00);_(* "-"??_);_(@_)';
447
+ exports.PATTERN_COMMA_STYLE_ROUNDED = '_(* #,##0_);_(* (#,##0);_(* "-"??_);_(@_)';
439
448
  exports.CellStyleSelector = (0, react_1.memo)(function (_a) {
440
449
  var currency = _a.currency, locale = _a.locale, theme = _a.theme, selectedFormat = _a.selectedFormat, namedCellStyles = _a.namedCellStyles, _b = _a.canAddCustomStyle, canAddCustomStyle = _b === void 0 ? false : _b, onChangeFormatting = _a.onChangeFormatting, onClearFormatting = _a.onClearFormatting;
441
450
  var colorIndexes = [4, 5, 6, 7, 8, 9];
@@ -451,14 +460,14 @@ exports.CellStyleSelector = (0, react_1.memo)(function (_a) {
451
460
  "Comma",
452
461
  {
453
462
  type: "NUMBER",
454
- pattern: "#,##0.00",
463
+ pattern: exports.PATTERN_COMMA_STYLE,
455
464
  },
456
465
  ],
457
466
  [
458
467
  "Comma[0]",
459
468
  {
460
469
  type: "NUMBER",
461
- pattern: "#,##0",
470
+ pattern: exports.PATTERN_COMMA_STYLE_ROUNDED,
462
471
  },
463
472
  ],
464
473
  [
@@ -1,5 +1,6 @@
1
1
  import type { CellInterface, GridRange, SelectionArea } from "@rowsncolumns/grid";
2
2
  import { Direction } from "@rowsncolumns/grid";
3
+ import type { Maybe } from "@rowsncolumns/utils";
3
4
  import React from "react";
4
5
  import type { TableView } from "../../types";
5
6
  import type { SelectionAttributes } from "../canvas-grid/typings";
@@ -12,7 +13,32 @@ type MergeCellsSelectorProps = {
12
13
  merges?: GridRange[] | null;
13
14
  /** Tables of the workbook — a selection touching one on `sheetId` cannot be merged (Excel). */
14
15
  tables?: TableView[] | null;
16
+ /**
17
+ * Cell value reader behind Excel's "Merging cells only keeps the upper-left value" warning.
18
+ * Defaults to the reader the grid publishes; the warning is skipped when neither is available.
19
+ */
20
+ getFormattedValue?: (sheetId: number, rowIndex: number, columnIndex: number) => Maybe<string>;
15
21
  };
16
- export declare const MergeCellsSelector: ({ activeCell, selections, sheetId, merges, tables, onMerge, onUnMerge, }: MergeCellsSelectorProps) => React.JSX.Element;
22
+ /** Excel's wording for a merge that would drop cell values. */
23
+ export declare const MERGE_DISCARDS_VALUES_TITLE = "Merge cells";
24
+ export declare const MERGE_DISCARDS_VALUES_MESSAGE = "Merging cells only keeps the upper-left value and discards other values.";
25
+ /**
26
+ * The regions `onMergeCells` merges for a toolbar request: each row (merge
27
+ * horizontally), each column (merge vertically), every area of a multi-area
28
+ * selection, or the last selection as one block — the store action's own rules.
29
+ */
30
+ export declare const mergeRegionsForSelection: (selections: SelectionArea[], direction?: Direction) => GridRange[];
31
+ /**
32
+ * Would this merge discard values? Excel warns when more than one cell of a
33
+ * merged block holds a value (the merge keeps only the upper-left one). A
34
+ * headless / programmatic merge never asks — this gate lives in the toolbar.
35
+ */
36
+ export declare const mergeDiscardsValues: ({ sheetId, selections, direction, getFormattedValue, }: {
37
+ sheetId: number;
38
+ selections: SelectionArea[];
39
+ direction?: Direction;
40
+ getFormattedValue: (sheetId: number, rowIndex: number, columnIndex: number) => Maybe<string>;
41
+ }) => boolean;
42
+ export declare const MergeCellsSelector: ({ activeCell, selections, sheetId, merges, tables, onMerge, onUnMerge, getFormattedValue: getFormattedValueProp, }: MergeCellsSelectorProps) => React.JSX.Element;
17
43
  export {};
18
44
  //# sourceMappingURL=merge-cells-selector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"merge-cells-selector.d.ts","sourceRoot":"","sources":["../../../../components/toolbar/merge-cells-selector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,aAAa,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAkB,SAAS,EAAgB,MAAM,oBAAoB,CAAC;AAY7E,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAElE,KAAK,uBAAuB,GAAG;IAC7B,UAAU,EAAE,aAAa,CAAC;IAC1B,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CACL,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,aAAa,EACzB,UAAU,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAAE,EAChD,SAAS,CAAC,EAAE,SAAS,GACpB,IAAI,CAAC;IACR,SAAS,CACP,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,aAAa,EACzB,UAAU,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAAE,GAC/C,IAAI,CAAC;IACR,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC5B,+FAA+F;IAC/F,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,0EAQhC,uBAAuB,sBAgGzB,CAAC"}
1
+ {"version":3,"file":"merge-cells-selector.d.ts","sourceRoot":"","sources":["../../../../components/toolbar/merge-cells-selector.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,aAAa,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAkB,SAAS,EAAgB,MAAM,oBAAoB,CAAC;AAyB7E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAmB,MAAM,OAAO,CAAC;AAIxC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAElE,KAAK,uBAAuB,GAAG;IAC7B,UAAU,EAAE,aAAa,CAAC;IAC1B,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CACL,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,aAAa,EACzB,UAAU,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAAE,EAChD,SAAS,CAAC,EAAE,SAAS,GACpB,IAAI,CAAC;IACR,SAAS,CACP,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,aAAa,EACzB,UAAU,EAAE,aAAa,CAAC,mBAAmB,CAAC,EAAE,GAC/C,IAAI,CAAC;IACR,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC5B,+FAA+F;IAC/F,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IAC5B;;;OAGG;IACH,iBAAiB,CAAC,EAAE,CAClB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,KAAK,CAAC,MAAM,CAAC,CAAC;CACpB,CAAC;AAEF,+DAA+D;AAC/D,eAAO,MAAM,2BAA2B,gBAAgB,CAAC;AACzD,eAAO,MAAM,6BAA6B,6EACkC,CAAC;AAE7E;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,GACnC,YAAY,aAAa,EAAE,EAC3B,YAAY,SAAS,KACpB,SAAS,EAmBX,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,wDAKjC;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,iBAAiB,EAAE,CACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,KAChB,KAAK,CAAC,MAAM,CAAC,CAAC;CACpB,KAAG,OAcH,CAAC;AAIF,eAAO,MAAM,kBAAkB,GAAI,oHAShC,uBAAuB,sBA8IzB,CAAC"}
@@ -1,17 +1,101 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.MergeCellsSelector = void 0;
3
+ exports.MergeCellsSelector = exports.mergeDiscardsValues = exports.mergeRegionsForSelection = exports.MERGE_DISCARDS_VALUES_MESSAGE = exports.MERGE_DISCARDS_VALUES_TITLE = void 0;
4
4
  var tslib_1 = require("tslib");
5
5
  var grid_1 = require("@rowsncolumns/grid");
6
6
  var icons_1 = require("@rowsncolumns/icons");
7
7
  var ui_1 = require("@rowsncolumns/ui");
8
8
  var ui_2 = require("@rowsncolumns/ui");
9
- var react_1 = tslib_1.__importDefault(require("react"));
9
+ var react_1 = tslib_1.__importStar(require("react"));
10
10
  var atoms_1 = require("../../atoms");
11
11
  var config_1 = require("../../config");
12
+ /** Excel's wording for a merge that would drop cell values. */
13
+ exports.MERGE_DISCARDS_VALUES_TITLE = "Merge cells";
14
+ exports.MERGE_DISCARDS_VALUES_MESSAGE = "Merging cells only keeps the upper-left value and discards other values.";
15
+ /**
16
+ * The regions `onMergeCells` merges for a toolbar request: each row (merge
17
+ * horizontally), each column (merge vertically), every area of a multi-area
18
+ * selection, or the last selection as one block — the store action's own rules.
19
+ */
20
+ var mergeRegionsForSelection = function (selections, direction) {
21
+ if (!selections.length)
22
+ return [];
23
+ var range = selections[selections.length - 1].range;
24
+ if (direction === grid_1.Direction.Right) {
25
+ var rows = [];
26
+ for (var r = range.startRowIndex; r <= range.endRowIndex; r++) {
27
+ rows.push(tslib_1.__assign(tslib_1.__assign({}, range), { startRowIndex: r, endRowIndex: r }));
28
+ }
29
+ return rows;
30
+ }
31
+ if (direction === grid_1.Direction.Down) {
32
+ var cols = [];
33
+ for (var c = range.startColumnIndex; c <= range.endColumnIndex; c++) {
34
+ cols.push(tslib_1.__assign(tslib_1.__assign({}, range), { startColumnIndex: c, endColumnIndex: c }));
35
+ }
36
+ return cols;
37
+ }
38
+ if (selections.length > 1)
39
+ return selections.map(function (sel) { return sel.range; });
40
+ return [range];
41
+ };
42
+ exports.mergeRegionsForSelection = mergeRegionsForSelection;
43
+ /**
44
+ * Would this merge discard values? Excel warns when more than one cell of a
45
+ * merged block holds a value (the merge keeps only the upper-left one). A
46
+ * headless / programmatic merge never asks — this gate lives in the toolbar.
47
+ */
48
+ var mergeDiscardsValues = function (_a) {
49
+ var e_1, _b;
50
+ var sheetId = _a.sheetId, selections = _a.selections, direction = _a.direction, getFormattedValue = _a.getFormattedValue;
51
+ try {
52
+ for (var _c = tslib_1.__values((0, exports.mergeRegionsForSelection)(selections, direction)), _d = _c.next(); !_d.done; _d = _c.next()) {
53
+ var region = _d.value;
54
+ var filled = 0;
55
+ for (var r = region.startRowIndex; r <= region.endRowIndex; r++) {
56
+ for (var c = region.startColumnIndex; c <= region.endColumnIndex; c++) {
57
+ var value = getFormattedValue(sheetId, r, c);
58
+ if (value !== null && value !== undefined && value !== "") {
59
+ filled++;
60
+ if (filled > 1)
61
+ return true;
62
+ }
63
+ }
64
+ }
65
+ }
66
+ }
67
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
68
+ finally {
69
+ try {
70
+ if (_d && !_d.done && (_b = _c.return)) _b.call(_c);
71
+ }
72
+ finally { if (e_1) throw e_1.error; }
73
+ }
74
+ return false;
75
+ };
76
+ exports.mergeDiscardsValues = mergeDiscardsValues;
12
77
  var MergeCellsSelector = function (_a) {
13
- var activeCell = _a.activeCell, _b = _a.selections, selections = _b === void 0 ? config_1.DEFAULT_ARRAY : _b, sheetId = _a.sheetId, merges = _a.merges, tables = _a.tables, onMerge = _a.onMerge, onUnMerge = _a.onUnMerge;
78
+ var activeCell = _a.activeCell, _b = _a.selections, selections = _b === void 0 ? config_1.DEFAULT_ARRAY : _b, sheetId = _a.sheetId, merges = _a.merges, tables = _a.tables, onMerge = _a.onMerge, onUnMerge = _a.onUnMerge, getFormattedValueProp = _a.getFormattedValue;
14
79
  var focusSheet = (0, atoms_1.useFocusSheet)();
80
+ var gridGetFormattedValue = (0, atoms_1.useGetFormattedValue)();
81
+ var getFormattedValue = getFormattedValueProp !== null && getFormattedValueProp !== void 0 ? getFormattedValueProp : gridGetFormattedValue;
82
+ // A merge waiting on the "discards other values" confirmation.
83
+ var _c = tslib_1.__read((0, react_1.useState)(null), 2), pendingMerge = _c[0], setPendingMerge = _c[1];
84
+ var requestMerge = function (direction) {
85
+ if (getFormattedValue &&
86
+ (0, exports.mergeDiscardsValues)({ sheetId: sheetId, selections: selections, direction: direction, getFormattedValue: getFormattedValue })) {
87
+ setPendingMerge({ direction: direction });
88
+ return;
89
+ }
90
+ onMerge(sheetId, activeCell, selections, direction);
91
+ };
92
+ var confirmPendingMerge = function () {
93
+ if (pendingMerge) {
94
+ onMerge(sheetId, activeCell, selections, pendingMerge.direction);
95
+ }
96
+ setPendingMerge(null);
97
+ focusSheet === null || focusSheet === void 0 ? void 0 : focusSheet();
98
+ };
15
99
  var isMerged = !!(merges === null || merges === void 0 ? void 0 : merges.find(function (merge) {
16
100
  return (0, grid_1.isEqualCells)({ rowIndex: merge.startRowIndex, columnIndex: merge.startColumnIndex }, activeCell);
17
101
  }));
@@ -32,7 +116,7 @@ var MergeCellsSelector = function (_a) {
32
116
  onUnMerge(sheetId, activeCell, selections);
33
117
  }
34
118
  else {
35
- onMerge(sheetId, activeCell, selections);
119
+ requestMerge();
36
120
  }
37
121
  }, isActive: isMerged, tooltip: isMerged ? "Unmerge All" : "Merge all", disabled: disableMenu },
38
122
  react_1.default.createElement(icons_1.AiOutlineMergeCells, null)),
@@ -43,20 +127,34 @@ var MergeCellsSelector = function (_a) {
43
127
  react_1.default.createElement(ui_1.DropdownMenuPortal, null,
44
128
  react_1.default.createElement(ui_2.DropdownMenuContent, { align: "end" },
45
129
  react_1.default.createElement(ui_2.DropdownMenuItem, { disabled: isMerged || selectionTouchesTable, onClick: function () {
46
- onMerge(sheetId, activeCell, selections);
130
+ requestMerge();
47
131
  focusSheet === null || focusSheet === void 0 ? void 0 : focusSheet();
48
132
  } }, "Merge all"),
49
133
  react_1.default.createElement(ui_2.DropdownMenuItem, { disabled: isMerged || selectionTouchesTable || !canMergeVertically, onClick: function () {
50
- onMerge(sheetId, activeCell, selections, grid_1.Direction.Down);
134
+ requestMerge(grid_1.Direction.Down);
51
135
  focusSheet === null || focusSheet === void 0 ? void 0 : focusSheet();
52
136
  } }, "Merge vertically"),
53
137
  react_1.default.createElement(ui_2.DropdownMenuItem, { onClick: function () {
54
- onMerge(sheetId, activeCell, selections, grid_1.Direction.Right);
138
+ requestMerge(grid_1.Direction.Right);
55
139
  focusSheet === null || focusSheet === void 0 ? void 0 : focusSheet();
56
140
  }, disabled: isMerged || selectionTouchesTable || !canMergeHorizontally }, "Merge horizontally"),
57
141
  react_1.default.createElement(ui_2.DropdownMenuItem, { disabled: !isMerged, onClick: function () {
58
142
  onUnMerge(sheetId, activeCell, selections);
59
143
  focusSheet === null || focusSheet === void 0 ? void 0 : focusSheet();
60
- } }, "Unmerge"))))));
144
+ } }, "Unmerge")))),
145
+ react_1.default.createElement(ui_1.Dialog, { modal: true, open: pendingMerge !== null, onOpenChange: function (open) {
146
+ if (!open)
147
+ setPendingMerge(null);
148
+ } },
149
+ react_1.default.createElement(ui_1.DialogContent, null,
150
+ react_1.default.createElement(ui_1.DialogTitle, null, exports.MERGE_DISCARDS_VALUES_TITLE),
151
+ react_1.default.createElement(ui_1.DialogDescription, null, exports.MERGE_DISCARDS_VALUES_MESSAGE),
152
+ react_1.default.createElement(ui_1.DialogBody, null,
153
+ react_1.default.createElement(ui_1.Stack, { className: "gap-2" },
154
+ react_1.default.createElement(ui_1.Button, { variant: "primary", onClick: confirmPendingMerge }, "Continue"),
155
+ react_1.default.createElement(ui_1.Button, { onClick: function () { return setPendingMerge(null); } }, "Cancel"))),
156
+ react_1.default.createElement(ui_1.DialogClose, { asChild: true },
157
+ react_1.default.createElement(ui_1.DialogCloseButton, null,
158
+ react_1.default.createElement(icons_1.Cross2Icon, null)))))));
61
159
  };
62
160
  exports.MergeCellsSelector = MergeCellsSelector;
@@ -1 +1 @@
1
- {"version":3,"file":"text-format-selector.d.ts","sourceRoot":"","sources":["../../../../components/toolbar/text-format-selector.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAe,MAAM,OAAO,CAAC;AAIpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC,CAIvE,CAAC;AAEJ,MAAM,MAAM,uBAAuB,GAAG;IACpC;;OAEG;IACH,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,CAAC,CAAC,SAAS,MAAM,UAAU,EAC7C,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,KACjB,IAAI,CAAC;IACV,oBAAoB,CAAC,IAAI,IAAI,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,kBAAkB,0GAO1B,uBAAuB,uBAqY3B,CAAC"}
1
+ {"version":3,"file":"text-format-selector.d.ts","sourceRoot":"","sources":["../../../../components/toolbar/text-format-selector.tsx"],"names":[],"mappings":"AAyBA,OAAO,KAAe,MAAM,OAAO,CAAC;AAIpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,EAAE,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC,CAIvE,CAAC;AAEJ,MAAM,MAAM,uBAAuB,GAAG;IACpC;;OAEG;IACH,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IAC/B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,CAAC,CAAC,SAAS,MAAM,UAAU,EAC7C,IAAI,EAAE,CAAC,EACP,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,KACjB,IAAI,CAAC;IACV,oBAAoB,CAAC,IAAI,IAAI,CAAC;CAC/B,CAAC;AAEF,eAAO,MAAM,kBAAkB,0GAO1B,uBAAuB,uBAyY3B,CAAC"}
@@ -21,8 +21,8 @@ exports.GENERAL_NUMBER_FORMAT = {
21
21
  pattern: "General",
22
22
  };
23
23
  exports.TextFormatSelector = (0, react_1.memo)(function (_a) {
24
- var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
25
- var _t = _a.locale, locale = _t === void 0 ? "en-US" : _t, _u = _a.currency, currency = _u === void 0 ? "USD" : _u, cellFormat = _a.cellFormat, onChangeFormatting = _a.onChangeFormatting, onRequestFormatCells = _a.onRequestFormatCells;
24
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
25
+ var _u = _a.locale, locale = _u === void 0 ? "en-US" : _u, _v = _a.currency, currency = _v === void 0 ? "USD" : _v, cellFormat = _a.cellFormat, onChangeFormatting = _a.onChangeFormatting, onRequestFormatCells = _a.onRequestFormatCells;
26
26
  var localeDateFormat = (0, utils_1.getDefaultDateFormat)(locale);
27
27
  var longDateFormat = (0, utils_1.getLongDateFormat)(locale);
28
28
  var focusSheet = (0, atoms_1.useFocusSheet)();
@@ -49,9 +49,13 @@ exports.TextFormatSelector = (0, react_1.memo)(function (_a) {
49
49
  var longDate = (0, utils_1.ssfFormat)(longDateFormat, sampleDate, locale);
50
50
  var dateTime = (0, utils_1.ssfFormat)(dateTimePattern, sampleDate, locale);
51
51
  var durationPattern = "[$-".concat(locale, "][h]:mm:ss");
52
- var isDurationPattern = ((_j = cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.numberFormat) === null || _j === void 0 ? void 0 : _j.pattern) === durationPattern;
52
+ // A typed duration (`25:00`) is auto-formatted `[h]:mm:ss` without the
53
+ // locale tag this item applies, so match the pattern with the tag
54
+ // stripped — either way the cell is a Duration (rowsncolumns/spreadsheet#1027).
55
+ var isDurationPattern = ((_k = (_j = cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.numberFormat) === null || _j === void 0 ? void 0 : _j.pattern) === null || _k === void 0 ? void 0 : _k.replace(/^\[\$-[^\]]*\]/, "")) ===
56
+ "[h]:mm:ss";
53
57
  var currencyRoundedPattern = "\"".concat(currencySymbol, "\"#,##0");
54
- var isCurrencyRounded = ((_k = cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.numberFormat) === null || _k === void 0 ? void 0 : _k.pattern) === currencyRoundedPattern;
58
+ var isCurrencyRounded = ((_l = cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.numberFormat) === null || _l === void 0 ? void 0 : _l.pattern) === currencyRoundedPattern;
55
59
  return (react_1.default.createElement(ui_1.DropdownMenu, { modal: false },
56
60
  react_1.default.createElement(ui_1.DropdownMenuTrigger, { asChild: true },
57
61
  react_1.default.createElement(ui_1.IconButton, { tooltip: "More formats", "aria-label": "More formats" },
@@ -59,15 +63,15 @@ exports.TextFormatSelector = (0, react_1.memo)(function (_a) {
59
63
  react_1.default.createElement(icons_1.MdOutlineArrowDropDown, null))),
60
64
  react_1.default.createElement(ui_1.DropdownMenuPortal, null,
61
65
  react_1.default.createElement(ui_1.DropdownMenuContent, { align: "start" },
62
- react_1.default.createElement(ui_1.DropdownMenuCheckboxItem, { checked: !((_l = cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.numberFormat) === null || _l === void 0 ? void 0 : _l.type) ||
63
- ((_m = cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.numberFormat) === null || _m === void 0 ? void 0 : _m.type) === "GENERAL", onCheckedChange: function () {
66
+ react_1.default.createElement(ui_1.DropdownMenuCheckboxItem, { checked: !((_m = cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.numberFormat) === null || _m === void 0 ? void 0 : _m.type) ||
67
+ ((_o = cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.numberFormat) === null || _o === void 0 ? void 0 : _o.type) === "GENERAL", onCheckedChange: function () {
64
68
  onChangeFormatting("numberFormat", exports.GENERAL_NUMBER_FORMAT);
65
69
  focusSheet === null || focusSheet === void 0 ? void 0 : focusSheet();
66
70
  } },
67
71
  react_1.default.createElement(ui_1.DropdownMenuItemIndicator, null,
68
72
  react_1.default.createElement(icons_1.CheckIcon, null)),
69
73
  "General"),
70
- react_1.default.createElement(ui_1.DropdownMenuCheckboxItem, { checked: ((_o = cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.numberFormat) === null || _o === void 0 ? void 0 : _o.type) === "TEXT", onCheckedChange: function () {
74
+ react_1.default.createElement(ui_1.DropdownMenuCheckboxItem, { checked: ((_p = cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.numberFormat) === null || _p === void 0 ? void 0 : _p.type) === "TEXT", onCheckedChange: function () {
71
75
  onChangeFormatting("numberFormat", {
72
76
  type: "TEXT",
73
77
  pattern: "General",
@@ -78,7 +82,7 @@ exports.TextFormatSelector = (0, react_1.memo)(function (_a) {
78
82
  react_1.default.createElement(icons_1.CheckIcon, null)),
79
83
  "Plain text"),
80
84
  react_1.default.createElement(ui_1.DropdownMenuSeparator, null),
81
- react_1.default.createElement(ui_1.DropdownMenuCheckboxItem, { checked: ((_p = cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.numberFormat) === null || _p === void 0 ? void 0 : _p.type) === "NUMBER", onCheckedChange: function () {
85
+ react_1.default.createElement(ui_1.DropdownMenuCheckboxItem, { checked: ((_q = cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.numberFormat) === null || _q === void 0 ? void 0 : _q.type) === "NUMBER", onCheckedChange: function () {
82
86
  onChangeFormatting("numberFormat", {
83
87
  type: "NUMBER",
84
88
  pattern: "#,##0.00",
@@ -89,7 +93,7 @@ exports.TextFormatSelector = (0, react_1.memo)(function (_a) {
89
93
  react_1.default.createElement(icons_1.CheckIcon, null)),
90
94
  "Number",
91
95
  react_1.default.createElement(ui_1.DropdownRightSlot, null, "1,000.12")),
92
- react_1.default.createElement(ui_1.DropdownMenuCheckboxItem, { checked: ((_q = cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.numberFormat) === null || _q === void 0 ? void 0 : _q.type) === "PERCENT", onCheckedChange: function () {
96
+ react_1.default.createElement(ui_1.DropdownMenuCheckboxItem, { checked: ((_r = cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.numberFormat) === null || _r === void 0 ? void 0 : _r.type) === "PERCENT", onCheckedChange: function () {
93
97
  onChangeFormatting("numberFormat", {
94
98
  type: "PERCENT",
95
99
  pattern: percentPattern,
@@ -211,7 +215,7 @@ exports.TextFormatSelector = (0, react_1.memo)(function (_a) {
211
215
  focusSheet === null || focusSheet === void 0 ? void 0 : focusSheet();
212
216
  } }, "\u20B9 Rupee"))),
213
217
  react_1.default.createElement(ui_1.DropdownMenuSeparator, null),
214
- react_1.default.createElement(ui_1.DropdownMenuCheckboxItem, { checked: ((_r = cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.numberFormat) === null || _r === void 0 ? void 0 : _r.pattern) === localeDateFormat, onCheckedChange: function () {
218
+ react_1.default.createElement(ui_1.DropdownMenuCheckboxItem, { checked: ((_s = cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.numberFormat) === null || _s === void 0 ? void 0 : _s.pattern) === localeDateFormat, onCheckedChange: function () {
215
219
  onChangeFormatting("numberFormat", {
216
220
  type: "DATE",
217
221
  pattern: localeDateFormat,
@@ -222,7 +226,7 @@ exports.TextFormatSelector = (0, react_1.memo)(function (_a) {
222
226
  react_1.default.createElement(icons_1.CheckIcon, null)),
223
227
  "Date",
224
228
  react_1.default.createElement(ui_1.DropdownRightSlot, null, dateformat)),
225
- react_1.default.createElement(ui_1.DropdownMenuCheckboxItem, { checked: ((_s = cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.numberFormat) === null || _s === void 0 ? void 0 : _s.pattern) === longDateFormat, onCheckedChange: function () {
229
+ react_1.default.createElement(ui_1.DropdownMenuCheckboxItem, { checked: ((_t = cellFormat === null || cellFormat === void 0 ? void 0 : cellFormat.numberFormat) === null || _t === void 0 ? void 0 : _t.pattern) === longDateFormat, onCheckedChange: function () {
226
230
  onChangeFormatting("numberFormat", {
227
231
  type: "DATE",
228
232
  pattern: longDateFormat,
@@ -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
@@ -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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"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DEFAULT_OVERLAY_POSITION = exports.SELECTION_BORDER = exports.SELECTION_BG = exports.DEFAULT_HEADER_SELECTED_TABLE_BG = exports.DEFAULT_HEADER_ACTIVE_TABLE_BG_DARK = exports.DEFAULT_HEADER_ACTIVE_TABLE_BG = exports.DEFAULT_HEADER_TABLE_BG_DARK = exports.DEFAULT_HEADER_TABLE_BG = exports.DEFAULT_HEADER_SELECTED_BG = exports.DEFAULT_HEADER_ACTIVE_BG_DARK = exports.DEFAULT_HEADER_ACTIVE_BG = exports.DEFAULT_HEADER_BG_DARK = exports.DEFAULT_HEADER_BG = exports.DEFAULT_HEADER_BORDER_COLOR_DARK = exports.DEFAULT_HEADER_BORDER_COLOR = exports.DEFAULT_HEADER_COLOR_DARK = exports.DEFAULT_HEADER_COLOR = exports.GRIDLINE_COLOR_DARK = exports.GRIDLINE_COLOR = exports.DEFAULT_CELL_BACKGROUND_COLOR_DARK = exports.DEFAULT_CELL_BACKGROUND_COLOR = exports.DEFAULT_CELL_COLOR_DARK = exports.DEFAULT_CELL_COLOR = exports.HEADER_TEXT_FORMAT = exports.DEFAULT_CELL_FORMAT = exports.DEFAULT_TEXT_FORMAT = exports.FORMULA_FONT_CONFIG = exports.EDITOR_FORMULA_VERTICAL_ALIGNMENT = exports.EDITOR_VERTICAL_ALIGNMENT = exports.CELL_HORIZONTAL_ALIGNMENT = exports.CELL_VERTICAL_ALIGNMENT = exports.MIN_COLUMN_WIDTH = exports.INDENT_SPACING = exports.DEFAULT_CELL_SPACING = exports.OUTLINE_GUTTER_PAD_PX = exports.OUTLINE_GUTTER_LEVEL_PX = exports.COLUMN_HEADER_HEIGHT = exports.ROW_HEADER_WIDTH = exports.DEFAULT_COLUMN_WIDTH = exports.DEFAULT_ROW_HEIGHT = exports.DEFAULT_FONT_SIZE_PT = exports.DEFAULT_COLUMN_COUNT = exports.DEFAULT_ROW_COUNT = exports.MAX_COLUMN_COUNT = exports.MAX_ROW_COUNT = exports.DEFAULT_SCROLL_POSITION = exports.FROZEN_EMPTY_ARRAY = exports.DEFAULT_ARRAY = exports.DEFAULT_SELECTIONS = exports.DEFAULT_ACTIVE_CELL = void 0;
4
- exports.MULTIPLE_SELECTIONS_ERROR = exports.IndexedColors = exports.URL_REGEX = exports.EMAIL_REGEX = exports.BLANK_LABEL = exports.VALIDATION_CONDITION_LABELS = exports.CONDITION_NONE = exports.CONDITION_LABELS = exports.SCROLLBAR_SIZE_FIREFOX = exports.SCROLLBAR_SIZE = exports.FORMULA_BAR_HEIGHT = exports.DEFAULT_CELL_INPUT_LINE_HEIGHT = exports.COMMENT_COLOR = exports.NOTE_COLOR = exports.ERROR_COLOR = exports.INVALID_COLOR = exports.HEADER_MENU_DIM = exports.CF_ICON_SPACING = exports.CF_ICON_WIDTH = exports.EXPAND_COLLAPSE_ICON_WIDTH = exports.COLLAPSE_ICON_PATH = exports.EXPAND_ICON_PATH = exports.CHECKBOX_ICON_WIDTH = exports.CHECKBOX_ICON_ACTIVE_COLOR = exports.CHECKBOX_ICON_COLOR = exports.CHECKBOX_CHECKED_ICON_PATH = exports.CHECKBOX_ICON_PATH = exports.SORT_DESCENDING_ICON_PATH = exports.SORT_ASCENDING_ICON_PATH = exports.FILTER_ICON_WIDTH = exports.FUNNEL_ICON_PATH = exports.FITLER_ICON_PATH = exports.CALCULATED_ICON_HEIGHT = exports.CALCULATED_ICON_WIDTH = exports.CHIP_COLOR_DARK = exports.CHIP_COLOR = exports.CHIP_RADIUS = exports.CHIP_HEIGHT = exports.CHIP_SPACING = exports.ARROW_DOWN_COLOR = exports.ARROW_DOWN_WIDTH = exports.ARROW_DOWN_ICON_PATH = exports.defaultSpreadsheetTheme = void 0;
4
+ exports.MULTIPLE_SELECTIONS_CLIPBOARD_ERROR = exports.MULTIPLE_SELECTIONS_ERROR = exports.IndexedColors = exports.URL_REGEX = exports.EMAIL_REGEX = exports.BLANK_LABEL = exports.VALIDATION_CONDITION_LABELS = exports.CONDITION_NONE = exports.CONDITION_LABELS = exports.SCROLLBAR_SIZE_FIREFOX = exports.SCROLLBAR_SIZE = exports.FORMULA_BAR_HEIGHT = exports.DEFAULT_CELL_INPUT_LINE_HEIGHT = exports.COMMENT_COLOR = exports.NOTE_COLOR = exports.ERROR_COLOR = exports.INVALID_COLOR = exports.HEADER_MENU_DIM = exports.CF_ICON_SPACING = exports.CF_ICON_WIDTH = exports.EXPAND_COLLAPSE_ICON_WIDTH = exports.COLLAPSE_ICON_PATH = exports.EXPAND_ICON_PATH = exports.CHECKBOX_ICON_WIDTH = exports.CHECKBOX_ICON_ACTIVE_COLOR = exports.CHECKBOX_ICON_COLOR = exports.CHECKBOX_CHECKED_ICON_PATH = exports.CHECKBOX_ICON_PATH = exports.SORT_DESCENDING_ICON_PATH = exports.SORT_ASCENDING_ICON_PATH = exports.FILTER_ICON_WIDTH = exports.FUNNEL_ICON_PATH = exports.FITLER_ICON_PATH = exports.CALCULATED_ICON_HEIGHT = exports.CALCULATED_ICON_WIDTH = exports.CHIP_COLOR_DARK = exports.CHIP_COLOR = exports.CHIP_RADIUS = exports.CHIP_HEIGHT = exports.CHIP_SPACING = exports.ARROW_DOWN_COLOR = exports.ARROW_DOWN_WIDTH = exports.ARROW_DOWN_ICON_PATH = exports.defaultSpreadsheetTheme = void 0;
5
5
  var tslib_1 = require("tslib");
6
6
  var themes_1 = require("./themes");
7
7
  exports.DEFAULT_ACTIVE_CELL = Object.freeze({
@@ -304,3 +304,9 @@ exports.IndexedColors = Object.freeze([
304
304
  * partial area, Cut, Copy of areas that do not line up (#647 UI-07).
305
305
  */
306
306
  exports.MULTIPLE_SELECTIONS_ERROR = "That command cannot be used on multiple selections.";
307
+ /**
308
+ * Excel's refusal for Copy / Cut of a multi-area (Ctrl-click) selection it
309
+ * cannot lay out as one rectangle: areas that share neither the same rows nor
310
+ * the same columns, or a cut of more than one area (#37265 E10).
311
+ */
312
+ exports.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,wCAmpBlC,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"}