@rowsncolumns/spreadsheet 10.6.0 → 10.6.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 (182) hide show
  1. package/dist/cjs/api/cf-data-bar.d.ts +73 -0
  2. package/dist/cjs/api/cf-data-bar.d.ts.map +1 -0
  3. package/dist/cjs/api/cf-data-bar.js +182 -0
  4. package/dist/cjs/api/cf-icons.d.ts +73 -0
  5. package/dist/cjs/api/cf-icons.d.ts.map +1 -0
  6. package/dist/cjs/api/cf-icons.js +322 -0
  7. package/dist/cjs/api/cf-overlays.d.ts +89 -3
  8. package/dist/cjs/api/cf-overlays.d.ts.map +1 -1
  9. package/dist/cjs/api/cf-overlays.js +256 -80
  10. package/dist/cjs/api/cf-priority.d.ts +34 -0
  11. package/dist/cjs/api/cf-priority.d.ts.map +1 -0
  12. package/dist/cjs/api/cf-priority.js +94 -0
  13. package/dist/cjs/api/heatmap.d.ts +7 -1
  14. package/dist/cjs/api/heatmap.d.ts.map +1 -1
  15. package/dist/cjs/api/heatmap.js +27 -11
  16. package/dist/cjs/api/selections.d.ts +2 -2
  17. package/dist/cjs/api/validation.d.ts +6 -0
  18. package/dist/cjs/api/validation.d.ts.map +1 -1
  19. package/dist/cjs/api/validation.js +10 -1
  20. package/dist/cjs/components/canvas-grid/index.d.ts.map +1 -1
  21. package/dist/cjs/components/canvas-grid/index.js +194 -51
  22. package/dist/cjs/components/canvas-grid/overflow.d.ts +37 -0
  23. package/dist/cjs/components/canvas-grid/overflow.d.ts.map +1 -0
  24. package/dist/cjs/components/canvas-grid/overflow.js +49 -0
  25. package/dist/cjs/components/canvas-grid/page-breaks.d.ts +15 -0
  26. package/dist/cjs/components/canvas-grid/page-breaks.d.ts.map +1 -0
  27. package/dist/cjs/components/canvas-grid/page-breaks.js +77 -0
  28. package/dist/cjs/components/canvas-grid/typings.d.ts +25 -0
  29. package/dist/cjs/components/canvas-grid/typings.d.ts.map +1 -1
  30. package/dist/cjs/components/cell/alignment.d.ts +58 -1
  31. package/dist/cjs/components/cell/alignment.d.ts.map +1 -1
  32. package/dist/cjs/components/cell/alignment.js +144 -1
  33. package/dist/cjs/components/cell/cell-background.d.ts +2 -0
  34. package/dist/cjs/components/cell/cell-background.d.ts.map +1 -1
  35. package/dist/cjs/components/cell/cell-background.js +5 -6
  36. package/dist/cjs/components/cell/cell-backgrounds.d.ts.map +1 -1
  37. package/dist/cjs/components/cell/cell-backgrounds.js +5 -1
  38. package/dist/cjs/components/cell/cell-text-runs.js +1 -1
  39. package/dist/cjs/components/cell/index.d.ts.map +1 -1
  40. package/dist/cjs/components/cell/index.js +378 -37
  41. package/dist/cjs/components/cell/number-format-layout.d.ts +35 -0
  42. package/dist/cjs/components/cell/number-format-layout.d.ts.map +1 -0
  43. package/dist/cjs/components/cell/number-format-layout.js +106 -0
  44. package/dist/cjs/components/cell/typings.d.ts +22 -0
  45. package/dist/cjs/components/cell/typings.d.ts.map +1 -1
  46. package/dist/cjs/components/cell-editor/index.js +2 -2
  47. package/dist/cjs/components/cell-filter/index.d.ts.map +1 -1
  48. package/dist/cjs/components/cell-filter/index.js +3 -3
  49. package/dist/cjs/components/cell-overlay/index.d.ts +20 -0
  50. package/dist/cjs/components/cell-overlay/index.d.ts.map +1 -1
  51. package/dist/cjs/components/cell-overlay/index.js +155 -28
  52. package/dist/cjs/components/cf-icon-preview/index.d.ts +16 -0
  53. package/dist/cjs/components/cf-icon-preview/index.d.ts.map +1 -0
  54. package/dist/cjs/components/cf-icon-preview/index.js +48 -0
  55. package/dist/cjs/components/embeds/embed-component.d.ts.map +1 -1
  56. package/dist/cjs/components/embeds/embed-component.js +3 -2
  57. package/dist/cjs/components/hidden-markers/index.d.ts.map +1 -1
  58. package/dist/cjs/components/hidden-markers/index.js +8 -7
  59. package/dist/cjs/components/hidden-markers/style.d.ts +7 -0
  60. package/dist/cjs/components/hidden-markers/style.d.ts.map +1 -1
  61. package/dist/cjs/components/hidden-markers/style.js +13 -2
  62. package/dist/cjs/components/protect-sheet-dialog/index.d.ts +67 -0
  63. package/dist/cjs/components/protect-sheet-dialog/index.d.ts.map +1 -0
  64. package/dist/cjs/components/protect-sheet-dialog/index.js +196 -0
  65. package/dist/cjs/components/toolbar/types.d.ts +1 -1
  66. package/dist/cjs/components/toolbar/types.d.ts.map +1 -1
  67. package/dist/cjs/config.d.ts +13 -1
  68. package/dist/cjs/config.d.ts.map +1 -1
  69. package/dist/cjs/config.js +15 -3
  70. package/dist/cjs/helpers.d.ts +10 -5
  71. package/dist/cjs/helpers.d.ts.map +1 -1
  72. package/dist/cjs/helpers.js +43 -31
  73. package/dist/cjs/hooks/use-border-styles.d.ts.map +1 -1
  74. package/dist/cjs/hooks/use-border-styles.js +5 -28
  75. package/dist/cjs/hooks/use-cell-renderer.d.ts +35 -3
  76. package/dist/cjs/hooks/use-cell-renderer.d.ts.map +1 -1
  77. package/dist/cjs/hooks/use-cell-renderer.js +85 -47
  78. package/dist/cjs/hooks/use-conditional-formatting.d.ts +13 -1
  79. package/dist/cjs/hooks/use-conditional-formatting.d.ts.map +1 -1
  80. package/dist/cjs/hooks/use-conditional-formatting.js +281 -230
  81. package/dist/cjs/index.d.ts +5 -0
  82. package/dist/cjs/index.d.ts.map +1 -1
  83. package/dist/cjs/index.js +5 -0
  84. package/dist/cjs/release-date.js +1 -1
  85. package/dist/cjs/themes.d.ts +8 -0
  86. package/dist/cjs/themes.d.ts.map +1 -1
  87. package/dist/cjs/themes.js +21 -3
  88. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  89. package/dist/cjs/types.d.ts +81 -4
  90. package/dist/cjs/types.d.ts.map +1 -1
  91. package/dist/esm/api/cf-data-bar.d.ts +73 -0
  92. package/dist/esm/api/cf-data-bar.d.ts.map +1 -0
  93. package/dist/esm/api/cf-data-bar.js +178 -0
  94. package/dist/esm/api/cf-icons.d.ts +73 -0
  95. package/dist/esm/api/cf-icons.d.ts.map +1 -0
  96. package/dist/esm/api/cf-icons.js +306 -0
  97. package/dist/esm/api/cf-overlays.d.ts +89 -3
  98. package/dist/esm/api/cf-overlays.d.ts.map +1 -1
  99. package/dist/esm/api/cf-overlays.js +223 -67
  100. package/dist/esm/api/cf-priority.d.ts +34 -0
  101. package/dist/esm/api/cf-priority.d.ts.map +1 -0
  102. package/dist/esm/api/cf-priority.js +61 -0
  103. package/dist/esm/api/heatmap.d.ts +7 -1
  104. package/dist/esm/api/heatmap.d.ts.map +1 -1
  105. package/dist/esm/api/heatmap.js +24 -9
  106. package/dist/esm/api/selections.d.ts +2 -2
  107. package/dist/esm/api/validation.d.ts +6 -0
  108. package/dist/esm/api/validation.d.ts.map +1 -1
  109. package/dist/esm/api/validation.js +6 -0
  110. package/dist/esm/components/canvas-grid/index.d.ts.map +1 -1
  111. package/dist/esm/components/canvas-grid/index.js +163 -47
  112. package/dist/esm/components/canvas-grid/overflow.d.ts +37 -0
  113. package/dist/esm/components/canvas-grid/overflow.d.ts.map +1 -0
  114. package/dist/esm/components/canvas-grid/overflow.js +39 -0
  115. package/dist/esm/components/canvas-grid/page-breaks.d.ts +15 -0
  116. package/dist/esm/components/canvas-grid/page-breaks.d.ts.map +1 -0
  117. package/dist/esm/components/canvas-grid/page-breaks.js +50 -0
  118. package/dist/esm/components/canvas-grid/typings.d.ts +25 -0
  119. package/dist/esm/components/canvas-grid/typings.d.ts.map +1 -1
  120. package/dist/esm/components/cell/alignment.d.ts +58 -1
  121. package/dist/esm/components/cell/alignment.d.ts.map +1 -1
  122. package/dist/esm/components/cell/alignment.js +110 -1
  123. package/dist/esm/components/cell/cell-background.d.ts +2 -0
  124. package/dist/esm/components/cell/cell-background.d.ts.map +1 -1
  125. package/dist/esm/components/cell/cell-background.js +4 -5
  126. package/dist/esm/components/cell/cell-backgrounds.d.ts.map +1 -1
  127. package/dist/esm/components/cell/cell-backgrounds.js +5 -1
  128. package/dist/esm/components/cell/cell-text-runs.js +2 -2
  129. package/dist/esm/components/cell/index.d.ts.map +1 -1
  130. package/dist/esm/components/cell/index.js +339 -39
  131. package/dist/esm/components/cell/number-format-layout.d.ts +35 -0
  132. package/dist/esm/components/cell/number-format-layout.d.ts.map +1 -0
  133. package/dist/esm/components/cell/number-format-layout.js +99 -0
  134. package/dist/esm/components/cell/typings.d.ts +22 -0
  135. package/dist/esm/components/cell/typings.d.ts.map +1 -1
  136. package/dist/esm/components/cell-editor/index.js +2 -2
  137. package/dist/esm/components/cell-filter/index.d.ts.map +1 -1
  138. package/dist/esm/components/cell-filter/index.js +4 -4
  139. package/dist/esm/components/cell-overlay/index.d.ts +20 -0
  140. package/dist/esm/components/cell-overlay/index.d.ts.map +1 -1
  141. package/dist/esm/components/cell-overlay/index.js +111 -25
  142. package/dist/esm/components/cf-icon-preview/index.d.ts +16 -0
  143. package/dist/esm/components/cf-icon-preview/index.d.ts.map +1 -0
  144. package/dist/esm/components/cf-icon-preview/index.js +41 -0
  145. package/dist/esm/components/embeds/embed-component.d.ts.map +1 -1
  146. package/dist/esm/components/embeds/embed-component.js +4 -3
  147. package/dist/esm/components/hidden-markers/index.d.ts.map +1 -1
  148. package/dist/esm/components/hidden-markers/index.js +9 -8
  149. package/dist/esm/components/hidden-markers/style.d.ts +7 -0
  150. package/dist/esm/components/hidden-markers/style.d.ts.map +1 -1
  151. package/dist/esm/components/hidden-markers/style.js +8 -1
  152. package/dist/esm/components/protect-sheet-dialog/index.d.ts +67 -0
  153. package/dist/esm/components/protect-sheet-dialog/index.d.ts.map +1 -0
  154. package/dist/esm/components/protect-sheet-dialog/index.js +154 -0
  155. package/dist/esm/components/toolbar/types.d.ts +1 -1
  156. package/dist/esm/components/toolbar/types.d.ts.map +1 -1
  157. package/dist/esm/config.d.ts +13 -1
  158. package/dist/esm/config.d.ts.map +1 -1
  159. package/dist/esm/config.js +13 -1
  160. package/dist/esm/helpers.d.ts +10 -5
  161. package/dist/esm/helpers.d.ts.map +1 -1
  162. package/dist/esm/helpers.js +40 -28
  163. package/dist/esm/hooks/use-border-styles.d.ts.map +1 -1
  164. package/dist/esm/hooks/use-border-styles.js +5 -26
  165. package/dist/esm/hooks/use-cell-renderer.d.ts +35 -3
  166. package/dist/esm/hooks/use-cell-renderer.d.ts.map +1 -1
  167. package/dist/esm/hooks/use-cell-renderer.js +83 -42
  168. package/dist/esm/hooks/use-conditional-formatting.d.ts +13 -1
  169. package/dist/esm/hooks/use-conditional-formatting.d.ts.map +1 -1
  170. package/dist/esm/hooks/use-conditional-formatting.js +215 -120
  171. package/dist/esm/index.d.ts +5 -0
  172. package/dist/esm/index.d.ts.map +1 -1
  173. package/dist/esm/index.js +5 -0
  174. package/dist/esm/release-date.js +1 -1
  175. package/dist/esm/themes.d.ts +8 -0
  176. package/dist/esm/themes.d.ts.map +1 -1
  177. package/dist/esm/themes.js +20 -3
  178. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  179. package/dist/esm/types.d.ts +81 -4
  180. package/dist/esm/types.d.ts.map +1 -1
  181. package/dist/spreadsheet.min.css +1 -1
  182. package/package.json +4 -4
@@ -0,0 +1,73 @@
1
+ export type DataBarAxisMode = "automatic" | "middle" | "none";
2
+ export type DataBarGeometryInput = {
3
+ value: number;
4
+ /** Resolved lower bound of the rule. */
5
+ min: number;
6
+ /** Resolved upper bound of the rule. */
7
+ max: number;
8
+ /** Absent = Excel 2007 rule semantics (no axis). */
9
+ axisPosition?: DataBarAxisMode | null;
10
+ /** Percent of the cell width; default 10. */
11
+ minLength?: number | null;
12
+ /** Percent of the cell width; default 90. */
13
+ maxLength?: number | null;
14
+ direction?: "leftToRight" | "rightToLeft" | "context" | null;
15
+ };
16
+ export type DataBarGeometry = {
17
+ /** Left edge, 0..1 of the bar area (left-to-right, mirrored for RTL). */
18
+ barStart: number;
19
+ /** Right edge, 0..1 of the bar area. */
20
+ barEnd: number;
21
+ negative: boolean;
22
+ /** Axis x, 0..1 of the bar area; absent when no axis is drawn. */
23
+ axisPosition?: number;
24
+ };
25
+ export declare const DATA_BAR_DEFAULT_MIN_LENGTH = 10;
26
+ export declare const DATA_BAR_DEFAULT_MAX_LENGTH = 90;
27
+ /**
28
+ * Where a value's bar sits inside the cell. `null` when nothing is drawn
29
+ * (non-finite inputs).
30
+ */
31
+ export declare const computeDataBarGeometry: ({ value, min: rawMin, max: rawMax, axisPosition, minLength, maxLength, direction, }: DataBarGeometryInput) => DataBarGeometry | null;
32
+ /** The canvas calls `paintDataBar` makes — satisfied by both a Konva `Context` and a 2D context wrapper. */
33
+ export type CfPaintContext = {
34
+ beginPath(): void;
35
+ closePath(): void;
36
+ moveTo(x: number, y: number): void;
37
+ lineTo(x: number, y: number): void;
38
+ stroke(): void;
39
+ fillRect(x: number, y: number, width: number, height: number): void;
40
+ strokeRect(x: number, y: number, width: number, height: number): void;
41
+ setLineDash(segments: number[]): void;
42
+ createLinearGradient(x0: number, y0: number, x1: number, y1: number): CanvasGradient;
43
+ setAttr(attr: string, value: unknown): void;
44
+ };
45
+ export type PaintedDataBar = {
46
+ color: string;
47
+ barStart: number;
48
+ barEnd: number;
49
+ negative?: boolean;
50
+ borderColor?: string;
51
+ gradient?: boolean;
52
+ axisPosition?: number;
53
+ axisColor?: string;
54
+ direction?: "leftToRight" | "rightToLeft";
55
+ };
56
+ /** Horizontal / vertical padding between the bar area and the cell edges, in px at 100 %. */
57
+ export declare const DATA_BAR_INSET_X = 1;
58
+ export declare const DATA_BAR_INSET_Y = 2;
59
+ /**
60
+ * The pale end of Excel's data-bar gradient: the bar colour blended 90 %
61
+ * towards white.
62
+ */
63
+ export declare const dataBarGradientTip: (color: string) => string;
64
+ /**
65
+ * Paint one cell's data bar in the cell's local coordinates (`0,0` = the
66
+ * cell's top-left corner).
67
+ */
68
+ export declare const paintDataBar: (ctx: CfPaintContext, cell: {
69
+ width: number;
70
+ height: number;
71
+ scale?: number;
72
+ }, bar: PaintedDataBar) => void;
73
+ //# sourceMappingURL=cf-data-bar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cf-data-bar.d.ts","sourceRoot":"","sources":["../../../api/cf-data-bar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ // Data-bar conditional formatting: bar geometry and canvas painting.
3
+ //
4
+ // Mirrors Excel 2010+ data bars (https://support.microsoft.com/office/
5
+ // use-data-bars-color-scales-and-icon-sets-to-highlight-data-
6
+ // f118d0b6-f19e-4ca2-8c9d-e4eac0b3b0f1, "Format all cells based on their
7
+ // values" > Data Bar):
8
+ // - bar length scales between the rule's minimum and maximum, from
9
+ // `minLength` to `maxLength` percent of the cell (OOXML defaults 10/90;
10
+ // Excel 2010+ rules write 0/100);
11
+ // - negative values draw on the other side of an axis ("Automatic" places
12
+ // the axis in proportion to the negative share of the range, "Cell
13
+ // midpoint" at the centre, "None" draws negative bars from the same edge
14
+ // as positive ones);
15
+ // - gradient (default) or solid fill, optional border, separate negative
16
+ // fill / border colours, left-to-right or right-to-left direction.
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.paintDataBar = exports.dataBarGradientTip = exports.DATA_BAR_INSET_Y = exports.DATA_BAR_INSET_X = exports.computeDataBarGeometry = exports.DATA_BAR_DEFAULT_MAX_LENGTH = exports.DATA_BAR_DEFAULT_MIN_LENGTH = void 0;
19
+ var tslib_1 = require("tslib");
20
+ exports.DATA_BAR_DEFAULT_MIN_LENGTH = 10;
21
+ exports.DATA_BAR_DEFAULT_MAX_LENGTH = 90;
22
+ var clamp01 = function (n) { return Math.max(0, Math.min(1, n)); };
23
+ var lengthFractions = function (minLength, maxLength) {
24
+ var lo = clamp01((minLength !== null && minLength !== void 0 ? minLength : exports.DATA_BAR_DEFAULT_MIN_LENGTH) / 100);
25
+ var hi = clamp01((maxLength !== null && maxLength !== void 0 ? maxLength : exports.DATA_BAR_DEFAULT_MAX_LENGTH) / 100);
26
+ return hi < lo ? [hi, lo] : [lo, hi];
27
+ };
28
+ /**
29
+ * Where a value's bar sits inside the cell. `null` when nothing is drawn
30
+ * (non-finite inputs).
31
+ */
32
+ var computeDataBarGeometry = function (_a) {
33
+ var value = _a.value, rawMin = _a.min, rawMax = _a.max, axisPosition = _a.axisPosition, minLength = _a.minLength, maxLength = _a.maxLength, direction = _a.direction;
34
+ if (!Number.isFinite(value) ||
35
+ !Number.isFinite(rawMin) ||
36
+ !Number.isFinite(rawMax)) {
37
+ return null;
38
+ }
39
+ // Excel: a minimum above the maximum collapses onto the maximum.
40
+ var min = Math.min(rawMin, rawMax);
41
+ var max = rawMax;
42
+ var _b = tslib_1.__read(lengthFractions(minLength, maxLength), 2), lo = _b[0], hi = _b[1];
43
+ var lengthFor = function (fraction) { return lo + clamp01(fraction) * (hi - lo); };
44
+ var negative = value < 0;
45
+ var clamped = Math.max(min, Math.min(max, value));
46
+ var mode = axisPosition !== null && axisPosition !== void 0 ? axisPosition : "none";
47
+ var barStart = 0;
48
+ var barEnd = 0;
49
+ var axis;
50
+ if (mode === "middle") {
51
+ axis = 0.5;
52
+ var magnitude = Math.max(Math.abs(min), Math.abs(max));
53
+ var length_1 = 0.5 * lengthFor(magnitude > 0 ? Math.abs(clamped) / magnitude : 1);
54
+ if (negative) {
55
+ barStart = 0.5 - length_1;
56
+ barEnd = 0.5;
57
+ }
58
+ else {
59
+ barStart = 0.5;
60
+ barEnd = 0.5 + length_1;
61
+ }
62
+ }
63
+ else if (mode === "automatic" && min < 0 && max > 0) {
64
+ axis = -min / (max - min);
65
+ if (negative) {
66
+ var length_2 = axis * lengthFor(clamped / min);
67
+ barStart = axis - length_2;
68
+ barEnd = axis;
69
+ }
70
+ else {
71
+ var length_3 = (1 - axis) * lengthFor(clamped / max);
72
+ barStart = axis;
73
+ barEnd = axis + length_3;
74
+ }
75
+ }
76
+ else if (mode === "automatic" && max <= 0 && min < 0) {
77
+ // Only negative values: the axis sits on the right edge and every bar
78
+ // grows leftwards from it.
79
+ axis = 1;
80
+ var span = max - min;
81
+ var length_4 = lengthFor(span > 0 ? (max - clamped) / span : 1);
82
+ barStart = 1 - length_4;
83
+ barEnd = 1;
84
+ }
85
+ else {
86
+ // No axis (or Automatic with no negative bound): every bar grows from
87
+ // the left edge, scaled between min and max.
88
+ var span = max - min;
89
+ barStart = 0;
90
+ barEnd = lengthFor(span > 0 ? (clamped - min) / span : 1);
91
+ }
92
+ if (direction === "rightToLeft") {
93
+ var start = 1 - barEnd;
94
+ barEnd = 1 - barStart;
95
+ barStart = start;
96
+ if (axis !== undefined)
97
+ axis = 1 - axis;
98
+ }
99
+ return tslib_1.__assign({ barStart: clamp01(barStart), barEnd: clamp01(barEnd), negative: negative }, (axis !== undefined ? { axisPosition: axis } : {}));
100
+ };
101
+ exports.computeDataBarGeometry = computeDataBarGeometry;
102
+ /** Horizontal / vertical padding between the bar area and the cell edges, in px at 100 %. */
103
+ exports.DATA_BAR_INSET_X = 1;
104
+ exports.DATA_BAR_INSET_Y = 2;
105
+ var parseHex = function (color) {
106
+ var m = /^#?([0-9a-f]{6})([0-9a-f]{2})?$/i.exec(color.trim());
107
+ if (m) {
108
+ var n = parseInt(m[1], 16);
109
+ return [(n >> 16) & 255, (n >> 8) & 255, n & 255];
110
+ }
111
+ var rgb = /^rgba?\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)/i.exec(color.trim());
112
+ if (rgb)
113
+ return [Number(rgb[1]), Number(rgb[2]), Number(rgb[3])];
114
+ return null;
115
+ };
116
+ /**
117
+ * The pale end of Excel's data-bar gradient: the bar colour blended 90 %
118
+ * towards white.
119
+ */
120
+ var dataBarGradientTip = function (color) {
121
+ var rgb = parseHex(color);
122
+ if (!rgb)
123
+ return "#ffffff";
124
+ var blend = function (c) { return Math.round(c + (255 - c) * 0.9); };
125
+ return "rgb(".concat(blend(rgb[0]), ", ").concat(blend(rgb[1]), ", ").concat(blend(rgb[2]), ")");
126
+ };
127
+ exports.dataBarGradientTip = dataBarGradientTip;
128
+ /**
129
+ * Paint one cell's data bar in the cell's local coordinates (`0,0` = the
130
+ * cell's top-left corner).
131
+ */
132
+ var paintDataBar = function (ctx, cell, bar) {
133
+ var _a, _b;
134
+ var scale = (_a = cell.scale) !== null && _a !== void 0 ? _a : 1;
135
+ var areaX = exports.DATA_BAR_INSET_X * scale;
136
+ var areaY = exports.DATA_BAR_INSET_Y * scale;
137
+ var areaWidth = Math.max(0, cell.width - 2 * exports.DATA_BAR_INSET_X * scale);
138
+ var areaHeight = Math.max(0, cell.height - 2 * exports.DATA_BAR_INSET_Y * scale);
139
+ if (areaWidth <= 0 || areaHeight <= 0)
140
+ return;
141
+ var left = areaX + clamp01(bar.barStart) * areaWidth;
142
+ var right = areaX + clamp01(bar.barEnd) * areaWidth;
143
+ var barWidth = right - left;
144
+ if (barWidth > 0) {
145
+ if (bar.gradient === false) {
146
+ ctx.setAttr("fillStyle", bar.color);
147
+ }
148
+ else {
149
+ // The gradient runs from the bar's base (the axis, or the edge it
150
+ // grows from) to its tip.
151
+ var rtl = bar.direction === "rightToLeft";
152
+ var hasAxis = bar.axisPosition !== undefined;
153
+ var growsLeft = (!!bar.negative && hasAxis) !== rtl;
154
+ var gradient = growsLeft
155
+ ? ctx.createLinearGradient(right, 0, left, 0)
156
+ : ctx.createLinearGradient(left, 0, right, 0);
157
+ gradient.addColorStop(0, bar.color);
158
+ gradient.addColorStop(1, (0, exports.dataBarGradientTip)(bar.color));
159
+ ctx.setAttr("fillStyle", gradient);
160
+ }
161
+ ctx.fillRect(left, areaY, barWidth, areaHeight);
162
+ if (bar.borderColor) {
163
+ ctx.setLineDash([]);
164
+ ctx.setAttr("strokeStyle", bar.borderColor);
165
+ ctx.setAttr("lineWidth", scale);
166
+ ctx.strokeRect(left + 0.5, areaY + 0.5, Math.max(0, barWidth - 1), Math.max(0, areaHeight - 1));
167
+ }
168
+ }
169
+ if (bar.axisPosition !== undefined) {
170
+ var axisX = Math.round(areaX + clamp01(bar.axisPosition) * areaWidth) + 0.5;
171
+ ctx.beginPath();
172
+ ctx.setLineDash([scale, scale]);
173
+ ctx.setAttr("strokeStyle", (_b = bar.axisColor) !== null && _b !== void 0 ? _b : "#000000");
174
+ ctx.setAttr("lineWidth", scale);
175
+ ctx.moveTo(axisX, 0);
176
+ ctx.lineTo(axisX, cell.height);
177
+ ctx.stroke();
178
+ ctx.setLineDash([]);
179
+ ctx.closePath();
180
+ }
181
+ };
182
+ exports.paintDataBar = paintDataBar;
@@ -0,0 +1,73 @@
1
+ import type { IconSetFamily } from "../types";
2
+ export type CfIconShape = {
3
+ kind: "arrow";
4
+ angle: number;
5
+ color: string;
6
+ } | {
7
+ kind: "circle";
8
+ color: string;
9
+ } | {
10
+ kind: "rimmedCircle";
11
+ color: string;
12
+ } | {
13
+ kind: "flag";
14
+ color: string;
15
+ } | {
16
+ kind: "diamond";
17
+ color: string;
18
+ } | {
19
+ kind: "triangleUp";
20
+ color: string;
21
+ } | {
22
+ kind: "triangleDown";
23
+ color: string;
24
+ } | {
25
+ kind: "dash";
26
+ color: string;
27
+ } | {
28
+ kind: "symbol";
29
+ glyph: "check" | "exclamation" | "cross";
30
+ color: string;
31
+ } | {
32
+ kind: "symbolPlain";
33
+ glyph: "check" | "exclamation" | "cross";
34
+ color: string;
35
+ } | {
36
+ kind: "star";
37
+ fill: 0 | 0.5 | 1;
38
+ } | {
39
+ kind: "rating";
40
+ filled: number;
41
+ } | {
42
+ kind: "quarters";
43
+ filled: number;
44
+ } | {
45
+ kind: "boxes";
46
+ filled: number;
47
+ };
48
+ /** Every icon set, lowest bucket first (OOXML `iconId` order). */
49
+ export declare const CF_ICON_SETS: Record<IconSetFamily, CfIconShape[]>;
50
+ /** Families Excel only stores in the x14 extension (no Excel 2007 equivalent). */
51
+ export declare const X14_ONLY_ICON_SETS: ReadonlySet<IconSetFamily>;
52
+ export declare const getCfIcon: (iconSet: string | null | undefined, iconId: number | null | undefined) => CfIconShape | undefined;
53
+ /** The canvas calls the icon painter makes — satisfied by a Konva `Context`. */
54
+ export type CfIconPaintContext = {
55
+ save(): void;
56
+ restore(): void;
57
+ beginPath(): void;
58
+ closePath(): void;
59
+ moveTo(x: number, y: number): void;
60
+ lineTo(x: number, y: number): void;
61
+ arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, counterClockwise?: boolean): void;
62
+ rect(x: number, y: number, width: number, height: number): void;
63
+ fill(): void;
64
+ stroke(): void;
65
+ clip(): void;
66
+ setAttr(attr: string, value: unknown): void;
67
+ };
68
+ /**
69
+ * Paint `icon` into the square at (`x`, `y`) with side `size` (local canvas
70
+ * coordinates).
71
+ */
72
+ export declare const paintCfIcon: (ctx: CfIconPaintContext, icon: CfIconShape, x: number, y: number, size: number) => void;
73
+ //# sourceMappingURL=cf-icons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cf-icons.d.ts","sourceRoot":"","sources":["../../../api/cf-icons.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,322 @@
1
+ "use strict";
2
+ // Conditional-format icon sets drawn as small vector icons on the canvas.
3
+ //
4
+ // Excel's 20 icon sets (https://support.microsoft.com/office/
5
+ // use-data-bars-color-scales-and-icon-sets-to-highlight-data-
6
+ // f118d0b6-f19e-4ca2-8c9d-e4eac0b3b0f1, "Icon sets"). Each set lists its
7
+ // icons in OOXML `iconId` order — index 0 is the icon for the LOWEST bucket —
8
+ // so `iconId` matches what `<iconFilter>` / `<x14:cfIcon>` store. Each icon
9
+ // is described once in a 16 × 16 design box and painted with plain canvas
10
+ // paths, so it scales with zoom and needs no font or image asset.
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.paintCfIcon = exports.getCfIcon = exports.X14_ONLY_ICON_SETS = exports.CF_ICON_SETS = void 0;
13
+ var tslib_1 = require("tslib");
14
+ var RED = "#E5383B";
15
+ var YELLOW = "#F2C12E";
16
+ var GREEN = "#2BA84A";
17
+ var GRAY = "#7F7F7F";
18
+ var BLACK = "#262626";
19
+ var PINK = "#F4A6A6";
20
+ var DARK_GRAY = "#8C8C8C";
21
+ var GOLD = "#F5B800";
22
+ var BLUE = "#2F6EBA";
23
+ var EMPTY = "#D9D9D9";
24
+ var UP = 0;
25
+ var UP_RIGHT = 45;
26
+ var RIGHT = 90;
27
+ var DOWN_RIGHT = 135;
28
+ var DOWN = 180;
29
+ var arrow = function (angle, color) { return ({
30
+ kind: "arrow",
31
+ angle: angle,
32
+ color: color,
33
+ }); };
34
+ var circle = function (color) { return ({ kind: "circle", color: color }); };
35
+ /** Every icon set, lowest bucket first (OOXML `iconId` order). */
36
+ exports.CF_ICON_SETS = {
37
+ "3Arrows": [arrow(DOWN, RED), arrow(RIGHT, YELLOW), arrow(UP, GREEN)],
38
+ "3ArrowsGray": [arrow(DOWN, GRAY), arrow(RIGHT, GRAY), arrow(UP, GRAY)],
39
+ "3Flags": [
40
+ { kind: "flag", color: RED },
41
+ { kind: "flag", color: YELLOW },
42
+ { kind: "flag", color: GREEN },
43
+ ],
44
+ "3TrafficLights1": [circle(RED), circle(YELLOW), circle(GREEN)],
45
+ "3TrafficLights2": [
46
+ { kind: "rimmedCircle", color: RED },
47
+ { kind: "rimmedCircle", color: YELLOW },
48
+ { kind: "rimmedCircle", color: GREEN },
49
+ ],
50
+ "3Signs": [
51
+ { kind: "diamond", color: RED },
52
+ { kind: "triangleUp", color: YELLOW },
53
+ circle(GREEN),
54
+ ],
55
+ "3Symbols": [
56
+ { kind: "symbol", glyph: "cross", color: RED },
57
+ { kind: "symbol", glyph: "exclamation", color: YELLOW },
58
+ { kind: "symbol", glyph: "check", color: GREEN },
59
+ ],
60
+ "3Symbols2": [
61
+ { kind: "symbolPlain", glyph: "cross", color: RED },
62
+ { kind: "symbolPlain", glyph: "exclamation", color: YELLOW },
63
+ { kind: "symbolPlain", glyph: "check", color: GREEN },
64
+ ],
65
+ "3Stars": [
66
+ { kind: "star", fill: 0 },
67
+ { kind: "star", fill: 0.5 },
68
+ { kind: "star", fill: 1 },
69
+ ],
70
+ "3Triangles": [
71
+ { kind: "triangleDown", color: RED },
72
+ { kind: "dash", color: YELLOW },
73
+ { kind: "triangleUp", color: GREEN },
74
+ ],
75
+ "4Arrows": [
76
+ arrow(DOWN, RED),
77
+ arrow(DOWN_RIGHT, YELLOW),
78
+ arrow(UP_RIGHT, YELLOW),
79
+ arrow(UP, GREEN),
80
+ ],
81
+ "4ArrowsGray": [
82
+ arrow(DOWN, GRAY),
83
+ arrow(DOWN_RIGHT, GRAY),
84
+ arrow(UP_RIGHT, GRAY),
85
+ arrow(UP, GRAY),
86
+ ],
87
+ "4RedToBlack": [circle(BLACK), circle(DARK_GRAY), circle(PINK), circle(RED)],
88
+ "4Rating": [1, 2, 3, 4].map(function (filled) { return ({ kind: "rating", filled: filled }); }),
89
+ "4TrafficLights": [circle(BLACK), circle(RED), circle(YELLOW), circle(GREEN)],
90
+ "5Arrows": [
91
+ arrow(DOWN, RED),
92
+ arrow(DOWN_RIGHT, YELLOW),
93
+ arrow(RIGHT, YELLOW),
94
+ arrow(UP_RIGHT, YELLOW),
95
+ arrow(UP, GREEN),
96
+ ],
97
+ "5ArrowsGray": [
98
+ arrow(DOWN, GRAY),
99
+ arrow(DOWN_RIGHT, GRAY),
100
+ arrow(RIGHT, GRAY),
101
+ arrow(UP_RIGHT, GRAY),
102
+ arrow(UP, GRAY),
103
+ ],
104
+ "5Rating": [0, 1, 2, 3, 4].map(function (filled) { return ({ kind: "rating", filled: filled }); }),
105
+ "5Quarters": [0, 1, 2, 3, 4].map(function (filled) { return ({ kind: "quarters", filled: filled }); }),
106
+ "5Boxes": [0, 1, 2, 3, 4].map(function (filled) { return ({ kind: "boxes", filled: filled }); }),
107
+ };
108
+ /** Families Excel only stores in the x14 extension (no Excel 2007 equivalent). */
109
+ exports.X14_ONLY_ICON_SETS = new Set([
110
+ "3Stars",
111
+ "3Triangles",
112
+ "5Boxes",
113
+ ]);
114
+ var getCfIcon = function (iconSet, iconId) {
115
+ var _a;
116
+ return iconSet && iconId != null
117
+ ? (_a = exports.CF_ICON_SETS[iconSet]) === null || _a === void 0 ? void 0 : _a[iconId]
118
+ : undefined;
119
+ };
120
+ exports.getCfIcon = getCfIcon;
121
+ var ARROW_POINTS = [
122
+ [8, 1],
123
+ [15, 8],
124
+ [11, 8],
125
+ [11, 15],
126
+ [5, 15],
127
+ [5, 8],
128
+ [1, 8],
129
+ ];
130
+ var STAR_POINTS = Array.from({ length: 10 }, function (_, i) {
131
+ var radius = i % 2 === 0 ? 7.5 : 3.2;
132
+ var angle = -Math.PI / 2 + (i * Math.PI) / 5;
133
+ return [8 + radius * Math.cos(angle), 8.6 + radius * Math.sin(angle)];
134
+ });
135
+ /**
136
+ * Paint `icon` into the square at (`x`, `y`) with side `size` (local canvas
137
+ * coordinates).
138
+ */
139
+ var paintCfIcon = function (ctx, icon, x, y, size) {
140
+ var k = size / 16;
141
+ var px = function (u) { return x + u * k; };
142
+ var py = function (v) { return y + v * k; };
143
+ var polygon = function (points) {
144
+ ctx.beginPath();
145
+ points.forEach(function (_a, i) {
146
+ var _b = tslib_1.__read(_a, 2), u = _b[0], v = _b[1];
147
+ return i === 0 ? ctx.moveTo(px(u), py(v)) : ctx.lineTo(px(u), py(v));
148
+ });
149
+ ctx.closePath();
150
+ };
151
+ var fillWith = function (color) {
152
+ ctx.setAttr("fillStyle", color);
153
+ ctx.fill();
154
+ };
155
+ var strokeWith = function (color, width) {
156
+ ctx.setAttr("strokeStyle", color);
157
+ ctx.setAttr("lineWidth", width * k);
158
+ ctx.setAttr("lineCap", "round");
159
+ ctx.setAttr("lineJoin", "round");
160
+ ctx.stroke();
161
+ };
162
+ var disc = function (radius) {
163
+ ctx.beginPath();
164
+ ctx.arc(px(8), py(8), radius * k, 0, Math.PI * 2);
165
+ ctx.closePath();
166
+ };
167
+ var glyph = function (kind, color, width) {
168
+ ctx.beginPath();
169
+ if (kind === "check") {
170
+ ctx.moveTo(px(4.5), py(8.5));
171
+ ctx.lineTo(px(7), py(11));
172
+ ctx.lineTo(px(11.5), py(5));
173
+ }
174
+ else if (kind === "cross") {
175
+ ctx.moveTo(px(5), py(5));
176
+ ctx.lineTo(px(11), py(11));
177
+ ctx.moveTo(px(11), py(5));
178
+ ctx.lineTo(px(5), py(11));
179
+ }
180
+ else {
181
+ ctx.moveTo(px(8), py(3.5));
182
+ ctx.lineTo(px(8), py(9));
183
+ ctx.moveTo(px(8), py(12));
184
+ ctx.lineTo(px(8), py(12.2));
185
+ }
186
+ strokeWith(color, width);
187
+ };
188
+ switch (icon.kind) {
189
+ case "arrow": {
190
+ var rad = (icon.angle * Math.PI) / 180;
191
+ var cos_1 = Math.cos(rad);
192
+ var sin_1 = Math.sin(rad);
193
+ polygon(ARROW_POINTS.map(function (_a) {
194
+ var _b = tslib_1.__read(_a, 2), u = _b[0], v = _b[1];
195
+ return [
196
+ 8 + (u - 8) * cos_1 - (v - 8) * sin_1,
197
+ 8 + (u - 8) * sin_1 + (v - 8) * cos_1,
198
+ ];
199
+ }));
200
+ fillWith(icon.color);
201
+ return;
202
+ }
203
+ case "circle":
204
+ disc(7);
205
+ fillWith(icon.color);
206
+ return;
207
+ case "rimmedCircle":
208
+ ctx.beginPath();
209
+ ctx.rect(px(0.5), py(0.5), 15 * k, 15 * k);
210
+ ctx.closePath();
211
+ fillWith(BLACK);
212
+ disc(5.5);
213
+ fillWith(icon.color);
214
+ return;
215
+ case "flag":
216
+ ctx.beginPath();
217
+ ctx.rect(px(3), py(1), 1.5 * k, 14 * k);
218
+ ctx.closePath();
219
+ fillWith(BLACK);
220
+ polygon([
221
+ [4.5, 1.5],
222
+ [14, 5.25],
223
+ [4.5, 9],
224
+ ]);
225
+ fillWith(icon.color);
226
+ return;
227
+ case "diamond":
228
+ polygon([
229
+ [8, 1],
230
+ [15, 8],
231
+ [8, 15],
232
+ [1, 8],
233
+ ]);
234
+ fillWith(icon.color);
235
+ return;
236
+ case "triangleUp":
237
+ polygon([
238
+ [8, 2],
239
+ [15, 14],
240
+ [1, 14],
241
+ ]);
242
+ fillWith(icon.color);
243
+ return;
244
+ case "triangleDown":
245
+ polygon([
246
+ [1, 2],
247
+ [15, 2],
248
+ [8, 14],
249
+ ]);
250
+ fillWith(icon.color);
251
+ return;
252
+ case "dash":
253
+ ctx.beginPath();
254
+ ctx.rect(px(2), py(6), 12 * k, 4 * k);
255
+ ctx.closePath();
256
+ fillWith(icon.color);
257
+ return;
258
+ case "symbol":
259
+ disc(7.5);
260
+ fillWith(icon.color);
261
+ glyph(icon.glyph, "#FFFFFF", 2);
262
+ return;
263
+ case "symbolPlain":
264
+ glyph(icon.glyph, icon.color, 2.6);
265
+ return;
266
+ case "star":
267
+ if (icon.fill > 0) {
268
+ ctx.save();
269
+ if (icon.fill < 1) {
270
+ ctx.beginPath();
271
+ ctx.rect(px(0), py(0), 8 * k, 16 * k);
272
+ ctx.clip();
273
+ }
274
+ polygon(STAR_POINTS);
275
+ fillWith(GOLD);
276
+ ctx.restore();
277
+ }
278
+ polygon(STAR_POINTS);
279
+ strokeWith(GOLD, 1);
280
+ return;
281
+ case "rating":
282
+ for (var bar = 0; bar < 4; bar++) {
283
+ var height = 4 + bar * 3.5;
284
+ ctx.beginPath();
285
+ ctx.rect(px(1 + bar * 3.75), py(15 - height), 2.75 * k, height * k);
286
+ ctx.closePath();
287
+ fillWith(bar < icon.filled ? BLUE : EMPTY);
288
+ }
289
+ return;
290
+ case "quarters":
291
+ disc(7);
292
+ fillWith("#FFFFFF");
293
+ if (icon.filled > 0) {
294
+ ctx.beginPath();
295
+ ctx.moveTo(px(8), py(8));
296
+ ctx.arc(px(8), py(8), 7 * k, -Math.PI / 2, -Math.PI / 2 + (icon.filled / 4) * Math.PI * 2);
297
+ ctx.closePath();
298
+ fillWith(BLACK);
299
+ }
300
+ disc(7);
301
+ strokeWith(BLACK, 1);
302
+ return;
303
+ case "boxes": {
304
+ // Quadrants fill clockwise from the top-left.
305
+ var cells = [
306
+ [1.5, 1.5],
307
+ [8.5, 1.5],
308
+ [8.5, 8.5],
309
+ [1.5, 8.5],
310
+ ];
311
+ cells.forEach(function (_a, i) {
312
+ var _b = tslib_1.__read(_a, 2), u = _b[0], v = _b[1];
313
+ ctx.beginPath();
314
+ ctx.rect(px(u), py(v), 6 * k, 6 * k);
315
+ ctx.closePath();
316
+ fillWith(i < icon.filled ? BLUE : EMPTY);
317
+ });
318
+ return;
319
+ }
320
+ }
321
+ };
322
+ exports.paintCfIcon = paintCfIcon;