@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.
Files changed (104) 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/date-tree.d.ts +23 -5
  11. package/dist/cjs/components/filter-box/date-tree.d.ts.map +1 -1
  12. package/dist/cjs/components/filter-box/date-tree.js +76 -11
  13. package/dist/cjs/components/filter-box/filter-by-condition.d.ts +26 -1
  14. package/dist/cjs/components/filter-box/filter-by-condition.d.ts.map +1 -1
  15. package/dist/cjs/components/filter-box/filter-by-condition.js +108 -9
  16. package/dist/cjs/components/filter-box/index.d.ts.map +1 -1
  17. package/dist/cjs/components/filter-box/index.js +21 -5
  18. package/dist/cjs/components/formula-input/index.d.ts.map +1 -1
  19. package/dist/cjs/components/formula-input/index.js +26 -4
  20. package/dist/cjs/components/sheet-tabs/index.d.ts.map +1 -1
  21. package/dist/cjs/components/sheet-tabs/index.js +19 -5
  22. package/dist/cjs/components/sort-range-dialog/index.d.ts +20 -3
  23. package/dist/cjs/components/sort-range-dialog/index.d.ts.map +1 -1
  24. package/dist/cjs/components/sort-range-dialog/index.js +20 -6
  25. package/dist/cjs/components/toolbar/cell-style-selector.d.ts +9 -0
  26. package/dist/cjs/components/toolbar/cell-style-selector.d.ts.map +1 -1
  27. package/dist/cjs/components/toolbar/cell-style-selector.js +12 -3
  28. package/dist/cjs/components/toolbar/merge-cells-selector.d.ts +27 -1
  29. package/dist/cjs/components/toolbar/merge-cells-selector.d.ts.map +1 -1
  30. package/dist/cjs/components/toolbar/merge-cells-selector.js +106 -8
  31. package/dist/cjs/components/toolbar/table-style-editor.d.ts +85 -0
  32. package/dist/cjs/components/toolbar/table-style-editor.d.ts.map +1 -0
  33. package/dist/cjs/components/toolbar/table-style-editor.js +235 -0
  34. package/dist/cjs/components/toolbar/table-style-selector.d.ts +7 -7
  35. package/dist/cjs/components/toolbar/table-style-selector.d.ts.map +1 -1
  36. package/dist/cjs/components/toolbar/table-style-selector.js +77 -87
  37. package/dist/cjs/config.d.ts +6 -0
  38. package/dist/cjs/config.d.ts.map +1 -1
  39. package/dist/cjs/config.js +7 -1
  40. package/dist/cjs/hooks/use-conditional-formatting.d.ts +8 -0
  41. package/dist/cjs/hooks/use-conditional-formatting.d.ts.map +1 -1
  42. package/dist/cjs/hooks/use-conditional-formatting.js +128 -77
  43. package/dist/cjs/hooks/use-editable.d.ts.map +1 -1
  44. package/dist/cjs/hooks/use-editable.js +59 -1
  45. package/dist/cjs/hooks/use-selection.d.ts +6 -1
  46. package/dist/cjs/hooks/use-selection.d.ts.map +1 -1
  47. package/dist/cjs/hooks/use-selection.js +37 -1
  48. package/dist/cjs/release-date.js +1 -1
  49. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  50. package/dist/cjs/types.d.ts +64 -0
  51. package/dist/cjs/types.d.ts.map +1 -1
  52. package/dist/esm/atoms/sheet-context.atom.d.ts +2 -0
  53. package/dist/esm/atoms/sheet-context.atom.d.ts.map +1 -1
  54. package/dist/esm/atoms/sheet-context.atom.js +3 -0
  55. package/dist/esm/atoms/sort-dialog.atom.d.ts +6 -2
  56. package/dist/esm/atoms/sort-dialog.atom.d.ts.map +1 -1
  57. package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
  58. package/dist/esm/components/canvas-grid/index.js +3 -1
  59. package/dist/esm/components/canvas-grid/typings.d.ts +10 -0
  60. package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
  61. package/dist/esm/components/filter-box/date-tree.d.ts +23 -5
  62. package/dist/esm/components/filter-box/date-tree.d.ts.map +1 -1
  63. package/dist/esm/components/filter-box/date-tree.js +62 -10
  64. package/dist/esm/components/filter-box/filter-by-condition.d.ts +26 -1
  65. package/dist/esm/components/filter-box/filter-by-condition.d.ts.map +1 -1
  66. package/dist/esm/components/filter-box/filter-by-condition.js +78 -12
  67. package/dist/esm/components/filter-box/index.d.ts.map +1 -1
  68. package/dist/esm/components/filter-box/index.js +21 -5
  69. package/dist/esm/components/formula-input/index.d.ts.map +1 -1
  70. package/dist/esm/components/formula-input/index.js +26 -4
  71. package/dist/esm/components/sheet-tabs/index.d.ts.map +1 -1
  72. package/dist/esm/components/sheet-tabs/index.js +20 -6
  73. package/dist/esm/components/sort-range-dialog/index.d.ts +20 -3
  74. package/dist/esm/components/sort-range-dialog/index.d.ts.map +1 -1
  75. package/dist/esm/components/sort-range-dialog/index.js +17 -5
  76. package/dist/esm/components/toolbar/cell-style-selector.d.ts +9 -0
  77. package/dist/esm/components/toolbar/cell-style-selector.d.ts.map +1 -1
  78. package/dist/esm/components/toolbar/cell-style-selector.js +11 -2
  79. package/dist/esm/components/toolbar/merge-cells-selector.d.ts +27 -1
  80. package/dist/esm/components/toolbar/merge-cells-selector.d.ts.map +1 -1
  81. package/dist/esm/components/toolbar/merge-cells-selector.js +94 -10
  82. package/dist/esm/components/toolbar/table-style-editor.d.ts +85 -0
  83. package/dist/esm/components/toolbar/table-style-editor.d.ts.map +1 -0
  84. package/dist/esm/components/toolbar/table-style-editor.js +189 -0
  85. package/dist/esm/components/toolbar/table-style-selector.d.ts +7 -7
  86. package/dist/esm/components/toolbar/table-style-selector.d.ts.map +1 -1
  87. package/dist/esm/components/toolbar/table-style-selector.js +74 -81
  88. package/dist/esm/config.d.ts +6 -0
  89. package/dist/esm/config.d.ts.map +1 -1
  90. package/dist/esm/config.js +6 -0
  91. package/dist/esm/hooks/use-conditional-formatting.d.ts +8 -0
  92. package/dist/esm/hooks/use-conditional-formatting.d.ts.map +1 -1
  93. package/dist/esm/hooks/use-conditional-formatting.js +50 -13
  94. package/dist/esm/hooks/use-editable.d.ts.map +1 -1
  95. package/dist/esm/hooks/use-editable.js +48 -2
  96. package/dist/esm/hooks/use-selection.d.ts +6 -1
  97. package/dist/esm/hooks/use-selection.d.ts.map +1 -1
  98. package/dist/esm/hooks/use-selection.js +37 -1
  99. package/dist/esm/release-date.js +1 -1
  100. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  101. package/dist/esm/types.d.ts +64 -0
  102. package/dist/esm/types.d.ts.map +1 -1
  103. package/dist/spreadsheet.min.css +1 -1
  104. package/package.json +5 -5
@@ -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;
@@ -0,0 +1,85 @@
1
+ import React from "react";
2
+ import type { BandingProperties, CustomTableStyle, Maybe } from "../../types";
3
+ import type { SpreadsheetTheme } from "../canvas-grid/typings";
4
+ /**
5
+ * The style elements a custom table style can colour — the `rowProperties` fields the grid's
6
+ * banding resolves (`api/banded-ranges.ts`), in the order of Excel's New Table Style dialog.
7
+ * The first three are what the gallery swatches show and what every created style carries; the
8
+ * rest are only written when the user picks a colour for them.
9
+ */
10
+ export declare const TABLE_STYLE_ELEMENTS: readonly [{
11
+ readonly key: "header";
12
+ readonly label: "Header row";
13
+ readonly property: "headerColor";
14
+ }, {
15
+ readonly key: "firstBand";
16
+ readonly label: "First row stripe";
17
+ readonly property: "firstBandColor";
18
+ }, {
19
+ readonly key: "secondBand";
20
+ readonly label: "Second row stripe";
21
+ readonly property: "secondBandColor";
22
+ }, {
23
+ readonly key: "firstColumn";
24
+ readonly label: "First column";
25
+ readonly property: "firstColumnColor";
26
+ }, {
27
+ readonly key: "lastColumn";
28
+ readonly label: "Last column";
29
+ readonly property: "lastColumnColor";
30
+ }, {
31
+ readonly key: "totalRow";
32
+ readonly label: "Total row";
33
+ readonly property: "totalRowColor";
34
+ }];
35
+ export type TableStyleElementKey = (typeof TABLE_STYLE_ELEMENTS)[number]["key"];
36
+ /** The colour picked for each element; `undefined` leaves the element unpainted. */
37
+ export type TableStyleColors = Partial<Record<TableStyleElementKey, string>>;
38
+ /** The colours a fresh style starts from (the default palette's accent 1 and its light tint). */
39
+ export declare const DEFAULT_TABLE_STYLE_COLORS: TableStyleColors;
40
+ /**
41
+ * The banding a custom table style paints from its element colours. Header and the two stripes
42
+ * are always present (unset ones stay unpainted); the optional elements are written only when
43
+ * coloured, so a style that only picks the first three keeps its historical shape.
44
+ */
45
+ export declare const buildCustomTableStyle: (name: string, colors: TableStyleColors) => CustomTableStyle;
46
+ /** The element colours of an existing custom style (theme colours resolved to hex). */
47
+ export declare const getTableStyleColors: (style: CustomTableStyle, theme: SpreadsheetTheme) => TableStyleColors;
48
+ /**
49
+ * Why a style name cannot be used, or `undefined` when it can: empty, a built-in style's name
50
+ * (the gallery tells the two apart by name), or another custom style's name (case-insensitive,
51
+ * like Excel). `currentName` is the style being edited, which may keep its own name.
52
+ */
53
+ export declare const getTableStyleNameError: (name: string, existingNames: readonly string[], currentName?: string) => string | undefined;
54
+ export type TableStyleEditorProps = {
55
+ /** The custom style being modified; omit to create a new one. */
56
+ style?: CustomTableStyle;
57
+ /** The name a new style starts with (ignored when `style` is given). */
58
+ defaultName?: string;
59
+ theme: SpreadsheetTheme;
60
+ /** Names of the workbook's custom styles, for the duplicate-name check. */
61
+ existingNames?: readonly string[];
62
+ /** Create (or, when `style` is given, save) — receives the style the picks produce. */
63
+ onSubmit(style: CustomTableStyle): void;
64
+ onCancel(): void;
65
+ /** Offered as "Delete style" while editing; the footer omits it when absent. */
66
+ onDelete?(style: CustomTableStyle): void;
67
+ className?: string;
68
+ };
69
+ /**
70
+ * Excel's New Table Style / Modify Table Style dialog, laid out for the Format as Table gallery:
71
+ * name row, the table elements with a colour button each (the toolbar's colour popover), a live
72
+ * preview of the table the picks produce, and an Excel-ordered footer.
73
+ */
74
+ export declare const TableStyleEditor: ({ style, defaultName, theme, existingNames, onSubmit, onCancel, onDelete, className, }: TableStyleEditorProps) => React.JSX.Element;
75
+ /**
76
+ * The table a style paints: a header row over four banded rows, with the first / last column and
77
+ * total row emphasis when the style colours them. Uses the grid's banding rules
78
+ * (`api/banded-ranges.ts`): the first body row is the first stripe, the last body row is the
79
+ * total row, and an edge column's colour outranks the stripe under it.
80
+ */
81
+ export declare const TableStylePreviewCard: ({ rowProperties, theme, }: {
82
+ rowProperties: Maybe<BandingProperties>;
83
+ theme: SpreadsheetTheme;
84
+ }) => React.JSX.Element;
85
+ //# sourceMappingURL=table-style-editor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table-style-editor.d.ts","sourceRoot":"","sources":["../../../../components/toolbar/table-style-editor.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAmC,MAAM,OAAO,CAAC;AAIxD,OAAO,KAAK,EACV,iBAAiB,EAEjB,gBAAgB,EAChB,KAAK,EACN,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG/D;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;EAW/B,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;AAEhF,oFAAoF;AACpF,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC,CAAC;AAE7E,iGAAiG;AACjG,eAAO,MAAM,0BAA0B,EAAE,gBAIxC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,GAChC,MAAM,MAAM,EACZ,QAAQ,gBAAgB,KACvB,gBAUF,CAAC;AAEF,uFAAuF;AACvF,eAAO,MAAM,mBAAmB,GAC9B,OAAO,gBAAgB,EACvB,OAAO,gBAAgB,KACtB,gBAWF,CAAC;AAIF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,MAAM,EACZ,eAAe,SAAS,MAAM,EAAE,EAChC,cAAc,MAAM,KACnB,MAAM,GAAG,SAaX,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,iEAAiE;IACjE,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,gBAAgB,CAAC;IACxB,2EAA2E;IAC3E,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAClC,uFAAuF;IACvF,QAAQ,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACxC,QAAQ,IAAI,IAAI,CAAC;IACjB,gFAAgF;IAChF,QAAQ,CAAC,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,wFAS9B,qBAAqB,sBAuIvB,CAAC;AAkEF;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAAI,2BAGnC;IACD,aAAa,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;IACxC,KAAK,EAAE,gBAAgB,CAAC;CACzB,sBA2EA,CAAC"}