@rowsncolumns/spreadsheet-state 29.1.3 → 29.1.6

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 (221) hide show
  1. package/dist/cjs/api/circular-reference.d.ts +31 -0
  2. package/dist/cjs/api/circular-reference.d.ts.map +1 -0
  3. package/dist/cjs/api/circular-reference.js +85 -0
  4. package/dist/cjs/api/copy-paste.d.ts +6 -0
  5. package/dist/cjs/api/copy-paste.d.ts.map +1 -1
  6. package/dist/cjs/api/copy-paste.js +24 -15
  7. package/dist/cjs/api/datatype.d.ts +2 -0
  8. package/dist/cjs/api/datatype.d.ts.map +1 -1
  9. package/dist/cjs/api/datatype.js +50 -27
  10. package/dist/cjs/api/decimals.d.ts +10 -0
  11. package/dist/cjs/api/decimals.d.ts.map +1 -1
  12. package/dist/cjs/api/decimals.js +34 -11
  13. package/dist/cjs/api/dependency.d.ts +19 -1
  14. package/dist/cjs/api/dependency.d.ts.map +1 -1
  15. package/dist/cjs/api/dependency.js +30 -14
  16. package/dist/cjs/api/filter-condition.d.ts +58 -0
  17. package/dist/cjs/api/filter-condition.d.ts.map +1 -0
  18. package/dist/cjs/api/filter-condition.js +157 -0
  19. package/dist/cjs/api/formula.d.ts.map +1 -1
  20. package/dist/cjs/api/formula.js +9 -7
  21. package/dist/cjs/api/image-embed.d.ts +41 -0
  22. package/dist/cjs/api/image-embed.d.ts.map +1 -0
  23. package/dist/cjs/api/image-embed.js +55 -0
  24. package/dist/cjs/api/immer-utils.d.ts.map +1 -1
  25. package/dist/cjs/api/immer-utils.js +43 -15
  26. package/dist/cjs/api/named-range-structural.d.ts +29 -3
  27. package/dist/cjs/api/named-range-structural.d.ts.map +1 -1
  28. package/dist/cjs/api/named-range-structural.js +36 -11
  29. package/dist/cjs/api/parse-html.d.ts.map +1 -1
  30. package/dist/cjs/api/parse-html.js +11 -5
  31. package/dist/cjs/api/structural-formula-update.d.ts +20 -1
  32. package/dist/cjs/api/structural-formula-update.d.ts.map +1 -1
  33. package/dist/cjs/api/structural-formula-update.js +264 -90
  34. package/dist/cjs/api/structural-guards.d.ts +11 -0
  35. package/dist/cjs/api/structural-guards.d.ts.map +1 -1
  36. package/dist/cjs/api/structural-guards.js +45 -1
  37. package/dist/cjs/api/structural-table-refs.d.ts +15 -2
  38. package/dist/cjs/api/structural-table-refs.d.ts.map +1 -1
  39. package/dist/cjs/api/structural-table-refs.js +79 -35
  40. package/dist/cjs/commands.d.ts +17 -3
  41. package/dist/cjs/commands.d.ts.map +1 -1
  42. package/dist/cjs/components/editors/conditional-format-rule-editor.d.ts.map +1 -1
  43. package/dist/cjs/components/editors/conditional-format-rule-editor.js +19 -7
  44. package/dist/cjs/constants.d.ts +4 -1
  45. package/dist/cjs/constants.d.ts.map +1 -1
  46. package/dist/cjs/constants.js +4 -0
  47. package/dist/cjs/helpers/sheet-title.d.ts +2 -1
  48. package/dist/cjs/helpers/sheet-title.d.ts.map +1 -1
  49. package/dist/cjs/helpers/sheet-title.js +3 -1
  50. package/dist/cjs/hooks/use-can-edit-cellrange.d.ts +1 -1
  51. package/dist/cjs/hooks/use-can-edit-cellrange.d.ts.map +1 -1
  52. package/dist/cjs/hooks/use-can-edit-cellrange.js +1 -1
  53. package/dist/cjs/hooks/use-on-calculation-success.d.ts +5 -1
  54. package/dist/cjs/hooks/use-on-calculation-success.d.ts.map +1 -1
  55. package/dist/cjs/hooks/use-on-calculation-success.js +20 -3
  56. package/dist/cjs/hooks/use-on-copy.d.ts.map +1 -1
  57. package/dist/cjs/hooks/use-on-copy.js +23 -25
  58. package/dist/cjs/hooks/use-on-create-sheet.d.ts.map +1 -1
  59. package/dist/cjs/hooks/use-on-create-sheet.js +11 -1
  60. package/dist/cjs/hooks/use-on-delete.d.ts.map +1 -1
  61. package/dist/cjs/hooks/use-on-delete.js +15 -3
  62. package/dist/cjs/hooks/use-on-drag-n-drop.d.ts +5 -0
  63. package/dist/cjs/hooks/use-on-drag-n-drop.d.ts.map +1 -1
  64. package/dist/cjs/hooks/use-on-drag-n-drop.js +6 -5
  65. package/dist/cjs/hooks/use-on-filter-table.d.ts.map +1 -1
  66. package/dist/cjs/hooks/use-on-filter-table.js +6 -1
  67. package/dist/cjs/hooks/use-on-find-replace.d.ts.map +1 -1
  68. package/dist/cjs/hooks/use-on-find-replace.js +111 -23
  69. package/dist/cjs/hooks/use-on-insert-image.d.ts.map +1 -1
  70. package/dist/cjs/hooks/use-on-insert-image.js +20 -33
  71. package/dist/cjs/hooks/use-on-paste.d.ts +2 -1
  72. package/dist/cjs/hooks/use-on-paste.d.ts.map +1 -1
  73. package/dist/cjs/hooks/use-on-paste.js +53 -24
  74. package/dist/cjs/hooks/use-on-rename-sheet.d.ts +3 -1
  75. package/dist/cjs/hooks/use-on-rename-sheet.d.ts.map +1 -1
  76. package/dist/cjs/hooks/use-on-rename-sheet.js +19 -9
  77. package/dist/cjs/hooks/use-on-sort-column.d.ts +7 -1
  78. package/dist/cjs/hooks/use-on-sort-column.d.ts.map +1 -1
  79. package/dist/cjs/hooks/use-on-sort-column.js +25 -8
  80. package/dist/cjs/hooks/use-on-sort-range.d.ts +16 -2
  81. package/dist/cjs/hooks/use-on-sort-range.d.ts.map +1 -1
  82. package/dist/cjs/hooks/use-on-sort-range.js +72 -40
  83. package/dist/cjs/hooks/use-on-sort-table.d.ts +7 -2
  84. package/dist/cjs/hooks/use-on-sort-table.d.ts.map +1 -1
  85. package/dist/cjs/hooks/use-on-sort-table.js +25 -4
  86. package/dist/cjs/hooks/use-spreadsheet-state.d.ts +5 -3
  87. package/dist/cjs/hooks/use-spreadsheet-state.d.ts.map +1 -1
  88. package/dist/cjs/hooks/use-spreadsheet-state.js +7 -0
  89. package/dist/cjs/hooks/utils/sort-rows.d.ts +15 -0
  90. package/dist/cjs/hooks/utils/sort-rows.d.ts.map +1 -1
  91. package/dist/cjs/hooks/utils/sort-rows.js +16 -0
  92. package/dist/cjs/index.d.ts +3 -0
  93. package/dist/cjs/index.d.ts.map +1 -1
  94. package/dist/cjs/index.js +3 -0
  95. package/dist/cjs/interface/delete-column.d.ts.map +1 -1
  96. package/dist/cjs/interface/delete-column.js +254 -101
  97. package/dist/cjs/interface/delete-row.d.ts.map +1 -1
  98. package/dist/cjs/interface/delete-row.js +233 -81
  99. package/dist/cjs/interface/duplicate-sheet.d.ts.map +1 -1
  100. package/dist/cjs/interface/duplicate-sheet.js +4 -9
  101. package/dist/cjs/interface/insert-column.d.ts.map +1 -1
  102. package/dist/cjs/interface/insert-column.js +1 -1
  103. package/dist/cjs/interface/insert-row.d.ts.map +1 -1
  104. package/dist/cjs/interface/insert-row.js +1 -1
  105. package/dist/cjs/interface/new-sheet.d.ts.map +1 -1
  106. package/dist/cjs/interface/new-sheet.js +6 -13
  107. package/dist/cjs/sheet-cell.d.ts +9 -0
  108. package/dist/cjs/sheet-cell.d.ts.map +1 -1
  109. package/dist/cjs/sheet-cell.js +46 -9
  110. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  111. package/dist/esm/api/circular-reference.d.ts +31 -0
  112. package/dist/esm/api/circular-reference.d.ts.map +1 -0
  113. package/dist/esm/api/circular-reference.js +55 -0
  114. package/dist/esm/api/copy-paste.d.ts +6 -0
  115. package/dist/esm/api/copy-paste.d.ts.map +1 -1
  116. package/dist/esm/api/copy-paste.js +26 -14
  117. package/dist/esm/api/datatype.d.ts +2 -0
  118. package/dist/esm/api/datatype.d.ts.map +1 -1
  119. package/dist/esm/api/datatype.js +50 -27
  120. package/dist/esm/api/decimals.d.ts +10 -0
  121. package/dist/esm/api/decimals.d.ts.map +1 -1
  122. package/dist/esm/api/decimals.js +31 -10
  123. package/dist/esm/api/dependency.d.ts +19 -1
  124. package/dist/esm/api/dependency.d.ts.map +1 -1
  125. package/dist/esm/api/dependency.js +15 -10
  126. package/dist/esm/api/filter-condition.d.ts +58 -0
  127. package/dist/esm/api/filter-condition.d.ts.map +1 -0
  128. package/dist/esm/api/filter-condition.js +146 -0
  129. package/dist/esm/api/formula.d.ts.map +1 -1
  130. package/dist/esm/api/formula.js +9 -7
  131. package/dist/esm/api/image-embed.d.ts +41 -0
  132. package/dist/esm/api/image-embed.d.ts.map +1 -0
  133. package/dist/esm/api/image-embed.js +52 -0
  134. package/dist/esm/api/immer-utils.d.ts.map +1 -1
  135. package/dist/esm/api/immer-utils.js +43 -14
  136. package/dist/esm/api/named-range-structural.d.ts +29 -3
  137. package/dist/esm/api/named-range-structural.d.ts.map +1 -1
  138. package/dist/esm/api/named-range-structural.js +35 -11
  139. package/dist/esm/api/parse-html.d.ts.map +1 -1
  140. package/dist/esm/api/parse-html.js +14 -5
  141. package/dist/esm/api/structural-formula-update.d.ts +20 -1
  142. package/dist/esm/api/structural-formula-update.d.ts.map +1 -1
  143. package/dist/esm/api/structural-formula-update.js +151 -55
  144. package/dist/esm/api/structural-guards.d.ts +11 -0
  145. package/dist/esm/api/structural-guards.d.ts.map +1 -1
  146. package/dist/esm/api/structural-guards.js +31 -0
  147. package/dist/esm/api/structural-table-refs.d.ts +15 -2
  148. package/dist/esm/api/structural-table-refs.d.ts.map +1 -1
  149. package/dist/esm/api/structural-table-refs.js +49 -18
  150. package/dist/esm/commands.d.ts +17 -3
  151. package/dist/esm/commands.d.ts.map +1 -1
  152. package/dist/esm/components/editors/conditional-format-rule-editor.d.ts.map +1 -1
  153. package/dist/esm/components/editors/conditional-format-rule-editor.js +18 -7
  154. package/dist/esm/constants.d.ts +4 -1
  155. package/dist/esm/constants.d.ts.map +1 -1
  156. package/dist/esm/constants.js +4 -0
  157. package/dist/esm/helpers/sheet-title.d.ts +2 -1
  158. package/dist/esm/helpers/sheet-title.d.ts.map +1 -1
  159. package/dist/esm/helpers/sheet-title.js +3 -1
  160. package/dist/esm/hooks/use-can-edit-cellrange.d.ts +1 -1
  161. package/dist/esm/hooks/use-can-edit-cellrange.d.ts.map +1 -1
  162. package/dist/esm/hooks/use-can-edit-cellrange.js +1 -1
  163. package/dist/esm/hooks/use-on-calculation-success.d.ts +5 -1
  164. package/dist/esm/hooks/use-on-calculation-success.d.ts.map +1 -1
  165. package/dist/esm/hooks/use-on-calculation-success.js +19 -3
  166. package/dist/esm/hooks/use-on-copy.d.ts.map +1 -1
  167. package/dist/esm/hooks/use-on-copy.js +17 -17
  168. package/dist/esm/hooks/use-on-create-sheet.d.ts.map +1 -1
  169. package/dist/esm/hooks/use-on-create-sheet.js +11 -1
  170. package/dist/esm/hooks/use-on-delete.d.ts.map +1 -1
  171. package/dist/esm/hooks/use-on-delete.js +15 -3
  172. package/dist/esm/hooks/use-on-drag-n-drop.d.ts +5 -0
  173. package/dist/esm/hooks/use-on-drag-n-drop.d.ts.map +1 -1
  174. package/dist/esm/hooks/use-on-drag-n-drop.js +7 -4
  175. package/dist/esm/hooks/use-on-filter-table.d.ts.map +1 -1
  176. package/dist/esm/hooks/use-on-filter-table.js +13 -2
  177. package/dist/esm/hooks/use-on-find-replace.d.ts.map +1 -1
  178. package/dist/esm/hooks/use-on-find-replace.js +111 -23
  179. package/dist/esm/hooks/use-on-insert-image.d.ts.map +1 -1
  180. package/dist/esm/hooks/use-on-insert-image.js +15 -25
  181. package/dist/esm/hooks/use-on-paste.d.ts +2 -1
  182. package/dist/esm/hooks/use-on-paste.d.ts.map +1 -1
  183. package/dist/esm/hooks/use-on-paste.js +46 -15
  184. package/dist/esm/hooks/use-on-rename-sheet.d.ts +3 -1
  185. package/dist/esm/hooks/use-on-rename-sheet.d.ts.map +1 -1
  186. package/dist/esm/hooks/use-on-rename-sheet.js +19 -9
  187. package/dist/esm/hooks/use-on-sort-column.d.ts +7 -1
  188. package/dist/esm/hooks/use-on-sort-column.d.ts.map +1 -1
  189. package/dist/esm/hooks/use-on-sort-column.js +18 -1
  190. package/dist/esm/hooks/use-on-sort-range.d.ts +16 -2
  191. package/dist/esm/hooks/use-on-sort-range.d.ts.map +1 -1
  192. package/dist/esm/hooks/use-on-sort-range.js +30 -3
  193. package/dist/esm/hooks/use-on-sort-table.d.ts +7 -2
  194. package/dist/esm/hooks/use-on-sort-table.d.ts.map +1 -1
  195. package/dist/esm/hooks/use-on-sort-table.js +25 -4
  196. package/dist/esm/hooks/use-spreadsheet-state.d.ts +5 -3
  197. package/dist/esm/hooks/use-spreadsheet-state.d.ts.map +1 -1
  198. package/dist/esm/hooks/use-spreadsheet-state.js +7 -0
  199. package/dist/esm/hooks/utils/sort-rows.d.ts +15 -0
  200. package/dist/esm/hooks/utils/sort-rows.d.ts.map +1 -1
  201. package/dist/esm/hooks/utils/sort-rows.js +15 -0
  202. package/dist/esm/index.d.ts +3 -0
  203. package/dist/esm/index.d.ts.map +1 -1
  204. package/dist/esm/index.js +3 -0
  205. package/dist/esm/interface/delete-column.d.ts.map +1 -1
  206. package/dist/esm/interface/delete-column.js +111 -80
  207. package/dist/esm/interface/delete-row.d.ts.map +1 -1
  208. package/dist/esm/interface/delete-row.js +91 -59
  209. package/dist/esm/interface/duplicate-sheet.d.ts.map +1 -1
  210. package/dist/esm/interface/duplicate-sheet.js +4 -9
  211. package/dist/esm/interface/insert-column.d.ts.map +1 -1
  212. package/dist/esm/interface/insert-column.js +1 -1
  213. package/dist/esm/interface/insert-row.d.ts.map +1 -1
  214. package/dist/esm/interface/insert-row.js +1 -1
  215. package/dist/esm/interface/new-sheet.d.ts.map +1 -1
  216. package/dist/esm/interface/new-sheet.js +6 -13
  217. package/dist/esm/sheet-cell.d.ts +9 -0
  218. package/dist/esm/sheet-cell.d.ts.map +1 -1
  219. package/dist/esm/sheet-cell.js +46 -7
  220. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  221. package/package.json +15 -15
@@ -19,20 +19,41 @@ export var isRefErrorNamedRange = function (namedRange) { return !namedRange.ran
19
19
  * - insert at the boundary directly below → unchanged;
20
20
  * - delete wholly above → shifts back; delete overlapping → shrinks by the
21
21
  * deleted indices inside the band; delete covering the band → `null`.
22
+ *
23
+ * With `bounds`, a band that spans the whole axis (`1..length` — a
24
+ * whole-column `$B:$B` / whole-row `$1:$1` name) is unbounded on it: an
25
+ * insert anywhere keeps its start at 1 and stretches its end with the grid
26
+ * (Excel never turns `$B:$B` into `$B$2:$B$1001`), a delete only shrinks the
27
+ * end with the grid. Ends never pass `bounds.max`; a band whose start would
28
+ * is `null` (`#REF!`), like a cell reference pushed off the sheet.
22
29
  */
23
- export var shiftNamedBand = function (start, end, op, index, count) {
30
+ export var shiftNamedBand = function (start, end, op, index, count, bounds) {
31
+ var _a;
24
32
  if (count <= 0)
25
33
  return [start, end];
26
34
  var s = Math.max(1, start);
27
35
  var e = Math.max(s, end);
36
+ var max = (_a = bounds === null || bounds === void 0 ? void 0 : bounds.max) !== null && _a !== void 0 ? _a : Number.POSITIVE_INFINITY;
37
+ var wholeAxis = bounds != null && s <= 1 && e >= bounds.length;
38
+ var deleteEnd = index + count - 1;
39
+ if (wholeAxis) {
40
+ if (op === "insert")
41
+ return [1, Math.min(e + count, max)];
42
+ if (index > e)
43
+ return [s, e];
44
+ var inside_1 = Math.min(deleteEnd, e) - Math.max(index, 1) + 1;
45
+ return [1, Math.max(1, e - inside_1)];
46
+ }
28
47
  if (op === "insert") {
29
- if (index <= s)
30
- return [s + count, e + count];
48
+ if (index <= s) {
49
+ if (s + count > max)
50
+ return null;
51
+ return [s + count, Math.min(e + count, max)];
52
+ }
31
53
  if (index <= e)
32
- return [s, e + count];
54
+ return [s, Math.min(e + count, max)];
33
55
  return [s, e];
34
56
  }
35
- var deleteEnd = index + count - 1;
36
57
  if (deleteEnd < s)
37
58
  return [s - count, e - count];
38
59
  if (index > e)
@@ -43,12 +64,12 @@ export var shiftNamedBand = function (start, end, op, index, count) {
43
64
  var inside = Math.min(deleteEnd, e) - Math.max(index, s) + 1;
44
65
  return [s - before, e - before - inside];
45
66
  };
46
- var shiftGridRange = function (range, axis, op, index, count) {
67
+ var shiftGridRange = function (range, axis, op, index, count, bounds) {
47
68
  var _a;
48
69
  var _b = __read(axis === "row"
49
70
  ? ["startRowIndex", "endRowIndex"]
50
71
  : ["startColumnIndex", "endColumnIndex"], 2), startKey = _b[0], endKey = _b[1];
51
- var next = shiftNamedBand(range[startKey], range[endKey], op, index, count);
72
+ var next = shiftNamedBand(range[startKey], range[endKey], op, index, count, bounds);
52
73
  if (!next)
53
74
  return null;
54
75
  if (next[0] === range[startKey] && next[1] === range[endKey])
@@ -66,8 +87,12 @@ var shiftGridRange = function (range, axis, op, index, count) {
66
87
  * A name whose entire range is deleted is NOT dropped: it keeps its entry
67
88
  * with `range` cleared and `value: "#REF!"`, so `=SUM(Data)` evaluates to
68
89
  * `#REF!` like Excel rather than `#NAME?`.
90
+ *
91
+ * `bounds` (the edited sheet's row / column count on the edited axis) lets a
92
+ * whole-column / whole-row name keep its whole-axis geometry — see
93
+ * {@link shiftNamedBand}.
69
94
  */
70
- export var updateNamedRangesOnStructuralChange = function (draft, axis, op, index, count, sheetId) {
95
+ export var updateNamedRangesOnStructuralChange = function (draft, axis, op, index, count, sheetId, bounds) {
71
96
  var e_1, _a;
72
97
  var changed = [];
73
98
  var refErrored = [];
@@ -79,7 +104,7 @@ export var updateNamedRangesOnStructuralChange = function (draft, axis, op, inde
79
104
  var range = namedRange.range;
80
105
  if (!range || range.sheetId !== sheetId)
81
106
  continue;
82
- var next = shiftGridRange(range, axis, op, index, count);
107
+ var next = shiftGridRange(range, axis, op, index, count, bounds);
83
108
  if (next === range)
84
109
  continue;
85
110
  if (next === null) {
@@ -105,14 +130,14 @@ export var updateNamedRangesOnStructuralChange = function (draft, axis, op, inde
105
130
  * Pure variant of {@link updateNamedRangesOnStructuralChange}: returns the
106
131
  * adjusted list (sharing untouched entries) plus the names that changed.
107
132
  */
108
- export var shiftNamedRangesOnStructuralChange = function (namedRanges, axis, op, index, count, sheetId) {
133
+ export var shiftNamedRangesOnStructuralChange = function (namedRanges, axis, op, index, count, sheetId, bounds) {
109
134
  var changed = [];
110
135
  var refErrored = [];
111
136
  var next = namedRanges.map(function (namedRange) {
112
137
  var range = namedRange.range;
113
138
  if (!range || range.sheetId !== sheetId || count <= 0)
114
139
  return namedRange;
115
- var shifted = shiftGridRange(range, axis, op, index, count);
140
+ var shifted = shiftGridRange(range, axis, op, index, count, bounds);
116
141
  if (shifted === range)
117
142
  return namedRange;
118
143
  if (shifted === null) {
@@ -1 +1 @@
1
- {"version":3,"file":"parse-html.d.ts","sourceRoot":"","sources":["../../../api/parse-html.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EAGV,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EAGf,MAAM,2BAA2B,CAAC;AAkBnC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAgE1E,eAAO,MAAM,SAAS,GACpB,gBAAgB,MAAM,EACtB,gBAAgB,MAAM,GAAG,SAAS,EAClC,YAAY,aAAa,EACzB,SAAS,MAAM,EACf,qBAAqB,OAAO,EAC5B,qBAAqB,mBAAmB,CAAC,oBAAoB,CAAC,EAC9D,SAAS,MAAM,EACf,eAAe,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM;;;;;;EAoDxC,CAAC;AAyqBF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,MAAM,CAuBlE;AA2OD,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,GAAG,SAAS,GAAG,IAAI,uBAY5D,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,UAAU,MAAM,GAAG,SAAS,GAAG,IAAI,EACnC,SAAS,MAAM,EACf,YAAY,aAAa,EACzB,qBAAqB,mBAAmB,CAAC,oBAAoB,CAAC,wCA2B/D,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI,MAAM,OAAO,kFA2CvD,CAAC"}
1
+ {"version":3,"file":"parse-html.d.ts","sourceRoot":"","sources":["../../../api/parse-html.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EAGV,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EACV,QAAQ,EACR,cAAc,EAGf,MAAM,2BAA2B,CAAC;AAqBnC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAgE1E,eAAO,MAAM,SAAS,GACpB,gBAAgB,MAAM,EACtB,gBAAgB,MAAM,GAAG,SAAS,EAClC,YAAY,aAAa,EACzB,SAAS,MAAM,EACf,qBAAqB,OAAO,EAC5B,qBAAqB,mBAAmB,CAAC,oBAAoB,CAAC,EAC9D,SAAS,MAAM,EACf,eAAe,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM;;;;;;EAuDxC,CAAC;AAmrBF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,MAAM,CAuBlE;AA2OD,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,GAAG,SAAS,GAAG,IAAI,uBAY5D,CAAC;AAEF,eAAO,MAAM,oBAAoB,GAC/B,UAAU,MAAM,GAAG,SAAS,GAAG,IAAI,EACnC,SAAS,MAAM,EACf,YAAY,aAAa,EACzB,qBAAqB,mBAAmB,CAAC,oBAAoB,CAAC,wCA2B/D,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI,MAAM,OAAO,kFA2CvD,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { __assign, __awaiter, __generator, __read, __values } from "tslib";
2
2
  import { getImageDimensionsFromUrl } from "@rowsncolumns/toolkit";
3
- import { colorStringToHex, getExtendedValueBool, getExtendedValueError, getExtendedValueFormula, getExtendedValueNumber, getExtendedValueString, htmlElementToRichText, isNil, mountClipboardHtml, normalizeColor, pixelToPoint, pointToPixel, uuid, } from "@rowsncolumns/utils";
3
+ import { colorStringToHex, getExtendedValueBool, getExtendedValueError, getExtendedValueFormula, getExtendedValueNumber, getExtendedValueString, htmlElementToRichText, isAFormula, isNil, isSafeHyperlinkUri, isSafeImageSrc, mountClipboardHtml, normalizeColor, pixelToPoint, pointToPixel, uuid, } from "@rowsncolumns/utils";
4
4
  import { defaultCellCoords, SheetCell } from "../sheet-cell";
5
5
  var BLOCK_TAGS = new Set([
6
6
  "p",
@@ -592,7 +592,7 @@ var tryHandleImageElement = function (element, context) { return __awaiter(void
592
592
  return [2 /*return*/, false];
593
593
  }
594
594
  imageUrl = image.getAttribute("src");
595
- if (!imageUrl) {
595
+ if (!imageUrl || !isSafeImageSrc(imageUrl)) {
596
596
  return [2 /*return*/, false];
597
597
  }
598
598
  text = extractTextContent(element);
@@ -662,11 +662,15 @@ var applyGoogleSheetsValue = function (element, sheetCell) {
662
662
  }
663
663
  finally { if (e_4) throw e_4.error; }
664
664
  }
665
+ // `"1"` is the Google Sheets value type: 2 = string, 3 = number, 4 = boolean. A STRING
666
+ // cell whose text starts with `=` is text in the source sheet (its formula would ride
667
+ // `data-sheets-formula`), so it lands as quote-prefixed text rather than a formula.
668
+ var isStringType = parsed["1"] === 2;
665
669
  try {
666
670
  for (var candidates_3 = __values(candidates), candidates_3_1 = candidates_3.next(); !candidates_3_1.done; candidates_3_1 = candidates_3.next()) {
667
671
  var candidate = candidates_3_1.value;
668
672
  if (typeof candidate === "string" && candidate.length) {
669
- sheetCell.setUserEnteredValue(candidate);
673
+ sheetCell.setUserEnteredValue(isStringType && isAFormula(candidate) ? "'".concat(candidate) : candidate);
670
674
  return true;
671
675
  }
672
676
  }
@@ -714,7 +718,9 @@ var applyExcelValue = function (element, sheetCell) {
714
718
  sheetCell.setUserEnteredValue(excelValue === "1" || excelValue === "TRUE");
715
719
  return true;
716
720
  }
717
- sheetCell.setUserEnteredValue(excelValue);
721
+ // A string-typed (`data-t="s"`) cell whose text starts with `=` is text in the source
722
+ // (a formula rides `data-formula`) — keep it text via the quote prefix.
723
+ sheetCell.setUserEnteredValue(excelType === "s" && isAFormula(excelValue) ? "'".concat(excelValue) : excelValue);
718
724
  return true;
719
725
  };
720
726
  var excelSerialToDate = function (serial) {
@@ -730,7 +736,7 @@ var excelSerialToDate = function (serial) {
730
736
  };
731
737
  var applyAnchorValue = function (element, sheetCell) {
732
738
  var href = element.getAttribute("href");
733
- if (!href) {
739
+ if (!href || !isSafeHyperlinkUri(href)) {
734
740
  return false;
735
741
  }
736
742
  var title = extractTextContent(element) || href;
@@ -14,11 +14,20 @@ export type StructuralFormulaUpdateParams<T extends CellData> = {
14
14
  sheetId: number;
15
15
  /**
16
16
  * For insert: the index at which rows/columns are being inserted.
17
- * For delete: the smallest index in the (assumed contiguous) deleted range.
17
+ * For delete: the smallest deleted index.
18
18
  */
19
19
  referenceIndex: number;
20
20
  /** Number of rows/columns being inserted or deleted. */
21
21
  count: number;
22
+ /**
23
+ * Delete only: the exact deleted indexes (any order) when the selection is
24
+ * NOT one contiguous band — Ctrl-selected rows 2 and 4. Excel shifts every
25
+ * reference by the number of deleted lines BEFORE it and breaks references
26
+ * INTO a deleted line; treating the selection as the band 2:4 would break
27
+ * `=A3` and slide `=A4` onto the wrong cell. Defaults to the contiguous band
28
+ * `referenceIndex .. referenceIndex + count - 1`.
29
+ */
30
+ indexes?: number[];
22
31
  rowCount: number;
23
32
  columnCount: number;
24
33
  getDependents: ReturnType<typeof useCalculation>["getDependents"];
@@ -71,5 +80,15 @@ export type StructuralFormulaUpdateParams<T extends CellData> = {
71
80
  * and 3 don't double-process a cell.
72
81
  */
73
82
  export declare const updateFormulasForStructuralChange: <T extends CellData>(params: StructuralFormulaUpdateParams<T>) => void;
83
+ /**
84
+ * The maximal contiguous runs of `indexes` (any order, duplicates ignored),
85
+ * ascending — the bands of a Ctrl-selected delete (rows 2 and 4 → two runs).
86
+ * Shared by `deleteRow` / `deleteColumn`, which apply every band-shaped update
87
+ * once per run.
88
+ */
89
+ export declare const contiguousRuns: (indexes: number[]) => Array<{
90
+ start: number;
91
+ count: number;
92
+ }>;
74
93
  export {};
75
94
  //# sourceMappingURL=structural-formula-update.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"structural-formula-update.d.ts","sourceRoot":"","sources":["../../../api/structural-formula-update.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAK1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAErE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAarD,KAAK,cAAc,GAAG,KAAK,GAAG,QAAQ,CAAC;AACvC,KAAK,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAExC,MAAM,MAAM,6BAA6B,CAAC,CAAC,SAAS,QAAQ,IAAI;IAC9D,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,EAAE,cAAc,CAAC;IACrB,EAAE,EAAE,YAAY,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IAEpB,aAAa,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC;IAClE;;;;OAIG;IACH,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC;IACnE;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,UAAU,CAC/B,OAAO,cAAc,CACtB,CAAC,sBAAsB,CAAC,CAAC;IAC1B,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C,kBAAkB,CAAC,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC7E,qBAAqB,CAAC,EAAE,UAAU,CAChC,OAAO,cAAc,CACtB,CAAC,uBAAuB,CAAC,CAAC;IAE3B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAE/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,iCAAiC,GAAI,CAAC,SAAS,QAAQ,EAClE,QAAQ,6BAA6B,CAAC,CAAC,CAAC,SA2WzC,CAAC"}
1
+ {"version":3,"file":"structural-formula-update.d.ts","sourceRoot":"","sources":["../../../api/structural-formula-update.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAK1D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAErE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAcrD,KAAK,cAAc,GAAG,KAAK,GAAG,QAAQ,CAAC;AACvC,KAAK,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAExC,MAAM,MAAM,6BAA6B,CAAC,CAAC,SAAS,QAAQ,IAAI;IAC9D,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,EAAE,cAAc,CAAC;IACrB,EAAE,EAAE,YAAY,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAC;IACvB,wDAAwD;IACxD,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IAEpB,aAAa,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC;IAClE;;;;OAIG;IACH,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,eAAe,CAAC,CAAC;IACnE;;;;;OAKG;IACH,oBAAoB,CAAC,EAAE,UAAU,CAC/B,OAAO,cAAc,CACtB,CAAC,sBAAsB,CAAC,CAAC;IAC1B,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C,kBAAkB,CAAC,EAAE,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC7E,qBAAqB,CAAC,EAAE,UAAU,CAChC,OAAO,cAAc,CACtB,CAAC,uBAAuB,CAAC,CAAC;IAE3B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IAE/C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;CAC7C,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,iCAAiC,GAAI,CAAC,SAAS,QAAQ,EAClE,QAAQ,6BAA6B,CAAC,CAAC,CAAC,SAybzC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GACzB,SAAS,MAAM,EAAE,KAChB,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAYxC,CAAC"}