ooxml-core 1.19.2 → 1.20.0

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 (75) hide show
  1. package/README.md +12 -1
  2. package/dist/{PptxHandler-2V4PQL6O.mjs → PptxHandler-FYD7IYXT.mjs} +2 -2
  3. package/dist/PptxHandler-SITN3K3F.mjs +4 -0
  4. package/dist/{PptxHandler-6TNIQ7S5.cjs → PptxHandler-TEKISCJO.cjs} +3 -3
  5. package/dist/{PresentationBuilder-HQ6C7L4V.mjs → PresentationBuilder-EYI6Z2JP.mjs} +2 -2
  6. package/dist/{PresentationBuilder-G7MPEGXJ.mjs → PresentationBuilder-IMB4DVRN.mjs} +2 -2
  7. package/dist/{PresentationBuilder-RM52LCVN.cjs → PresentationBuilder-NCKASKXU.cjs} +5 -5
  8. package/dist/automation/index.cjs +257 -30
  9. package/dist/automation/index.mjs +256 -31
  10. package/dist/automation/xlsx-read.d.ts +56 -0
  11. package/dist/automation/xlsx-read.d.ts.map +1 -0
  12. package/dist/automation/xlsx.d.ts +105 -4
  13. package/dist/automation/xlsx.d.ts.map +1 -1
  14. package/dist/{chunk-M6GDBVQ7.mjs → chunk-GQYQQ3GA.mjs} +1 -1
  15. package/dist/{chunk-SLNQNVQM.mjs → chunk-LEV2SVMK.mjs} +1 -1
  16. package/dist/{chunk-JUABSM7C.mjs → chunk-LVM3IZJ2.mjs} +1 -1
  17. package/dist/{chunk-TJPUAUWL.mjs → chunk-MN27HKHM.mjs} +8 -194
  18. package/dist/{chunk-4FTUAD2B.mjs → chunk-MNXKRXFB.mjs} +715 -200
  19. package/dist/{chunk-R5FIHHGB.cjs → chunk-NXKATFM5.cjs} +1598 -1204
  20. package/dist/{chunk-ZJ2OKIJN.mjs → chunk-WXY5EDGT.mjs} +592 -198
  21. package/dist/index.cjs +25 -0
  22. package/dist/index.mjs +25 -0
  23. package/dist/pptx/automation/index.cjs +887 -453
  24. package/dist/pptx/automation/index.d.ts +2 -2
  25. package/dist/pptx/automation/index.mjs +5 -5
  26. package/dist/pptx/chunks/{index-Bqm-jFG-.d.ts → index-CgFX0T7b.d.ts} +7573 -7508
  27. package/dist/pptx/chunks/index-CgFX0T7b.d.ts.map +1 -0
  28. package/dist/pptx/chunks/{index-B9x557hr.d.ts → index-qwVYoFn6.d.ts} +2 -2
  29. package/dist/pptx/chunks/{index-B9x557hr.d.ts.map → index-qwVYoFn6.d.ts.map} +1 -1
  30. package/dist/pptx/cli/index.cjs +654 -221
  31. package/dist/pptx/cli/index.mjs +4 -4
  32. package/dist/pptx/converter/index.d.ts +1 -1
  33. package/dist/pptx/converter/index.mjs +2 -2
  34. package/dist/pptx/editor/render/find-replace.cjs +14 -14
  35. package/dist/pptx/editor/render/find-replace.d.ts +1 -1
  36. package/dist/pptx/editor/render/find-replace.mjs +1 -1
  37. package/dist/pptx/editor/render/slide-operations.cjs +8 -8
  38. package/dist/pptx/editor/render/slide-operations.mjs +2 -2
  39. package/dist/pptx/index.cjs +991 -619
  40. package/dist/pptx/index.d.ts +3 -3
  41. package/dist/pptx/index.mjs +5 -5
  42. package/dist/visio/index.cjs +61 -7
  43. package/dist/visio/index.mjs +61 -7
  44. package/dist/visio/ui/contract.d.ts +2 -1
  45. package/dist/visio/ui/contract.d.ts.map +1 -1
  46. package/dist/visio/ui/index.cjs +62 -7
  47. package/dist/visio/ui/index.mjs +62 -7
  48. package/dist/xlsx/edit/dimensions.d.ts.map +1 -1
  49. package/dist/xlsx/edit/history-rows.d.ts +7 -0
  50. package/dist/xlsx/edit/history-rows.d.ts.map +1 -0
  51. package/dist/xlsx/edit/history.d.ts +11 -1
  52. package/dist/xlsx/edit/history.d.ts.map +1 -1
  53. package/dist/xlsx/edit/outline.d.ts.map +1 -1
  54. package/dist/xlsx/edit/row-autofit.d.ts.map +1 -1
  55. package/dist/xlsx/index.cjs +90 -16
  56. package/dist/xlsx/index.mjs +90 -16
  57. package/dist/xlsx/load/index.cjs +61 -7
  58. package/dist/xlsx/load/index.mjs +61 -7
  59. package/dist/xlsx/numfmt/format.d.ts +8 -0
  60. package/dist/xlsx/numfmt/format.d.ts.map +1 -1
  61. package/dist/xlsx/read/sheet-data-source.d.ts.map +1 -1
  62. package/dist/xlsx/ui/index.cjs +138 -16
  63. package/dist/xlsx/ui/index.d.ts +1 -0
  64. package/dist/xlsx/ui/index.d.ts.map +1 -1
  65. package/dist/xlsx/ui/index.mjs +138 -17
  66. package/dist/xlsx/ui/selection-format.d.ts +13 -0
  67. package/dist/xlsx/ui/selection-format.d.ts.map +1 -0
  68. package/dist/xml/index.cjs +25 -0
  69. package/dist/xml/index.mjs +25 -0
  70. package/dist/xml/lite.d.ts.map +1 -1
  71. package/package.json +1 -1
  72. package/dist/PptxHandler-HSPKEP5E.mjs +0 -4
  73. package/dist/pptx/chunks/index-Bqm-jFG-.d.ts.map +0 -1
  74. /package/dist/{chunk-NYTR4UZ5.cjs → chunk-3IENHIFD.cjs} +0 -0
  75. /package/dist/{chunk-XTSHZGSM.mjs → chunk-CC5UNZOO.mjs} +0 -0
@@ -234,6 +234,12 @@ function parseLiteFragment(xml, container, namespaces) {
234
234
  }
235
235
  if (lt < 0) break;
236
236
  const next = source.charCodeAt(lt + 1);
237
+ if (next === 33) {
238
+ const after = skipCommentOrCdata(source, lt, top);
239
+ if (after < 0) return void 0;
240
+ pos = after;
241
+ continue;
242
+ }
237
243
  if (next === 47) {
238
244
  const gt = source.indexOf(">", lt);
239
245
  if (gt < 0 || stack.length < 2 || source.slice(lt + 2, gt).trimEnd() !== top.tagName)
@@ -254,6 +260,25 @@ function parseLiteFragment(xml, container, namespaces) {
254
260
  }
255
261
  return stack.length === 1 ? root2 : void 0;
256
262
  }
263
+ var DECLARATIONS = /<!DOCTYPE|<!ENTITY/i;
264
+ function skipCommentOrCdata(source, lt, parent) {
265
+ if (source.startsWith("<!--", lt)) {
266
+ const end = source.indexOf("-->", lt + 4);
267
+ if (end < 0) return -1;
268
+ const body = source.slice(lt + 4, end);
269
+ if (body.includes("--") || body.endsWith("-") || DECLARATIONS.test(body)) return -1;
270
+ return end + 3;
271
+ }
272
+ if (source.startsWith("<![CDATA[", lt)) {
273
+ const end = source.indexOf("]]>", lt + 9);
274
+ if (end < 0) return -1;
275
+ const text6 = source.slice(lt + 9, end);
276
+ if (DECLARATIONS.test(text6)) return -1;
277
+ parent.childNodes.push(text6);
278
+ return end + 3;
279
+ }
280
+ return -1;
281
+ }
257
282
  function startTag(source, from, namespaces) {
258
283
  const n = source.length;
259
284
  let i = from;
@@ -17150,21 +17175,50 @@ function rootNamespaces(xml) {
17150
17175
  for (const match of (root2[2] ?? "").matchAll(DECLARATION2)) out[match[1] ?? ""] = match[3] ?? "";
17151
17176
  return out;
17152
17177
  }
17178
+ var SPECIAL = /<[!?]/g;
17179
+ var SECTIONS = [
17180
+ ["<!--", "-->"],
17181
+ ["<![CDATA[", "]]>"],
17182
+ ["<?", "?>"]
17183
+ ];
17184
+ function blankComments(xml) {
17185
+ if (!xml.includes("<!--") && !xml.includes("<![CDATA[")) return xml;
17186
+ const pieces = [];
17187
+ let copied = 0;
17188
+ SPECIAL.lastIndex = 0;
17189
+ for (let match = SPECIAL.exec(xml); match; match = SPECIAL.exec(xml)) {
17190
+ const at2 = match.index;
17191
+ const section3 = SECTIONS.find(([open2]) => xml.startsWith(open2, at2));
17192
+ if (!section3) return void 0;
17193
+ const [open, close4] = section3;
17194
+ const end = xml.indexOf(close4, at2 + open.length);
17195
+ if (end < 0) return void 0;
17196
+ const after = end + close4.length;
17197
+ if (open !== "<?") {
17198
+ pieces.push(xml.slice(copied, at2), " ".repeat(after - at2));
17199
+ copied = after;
17200
+ }
17201
+ SPECIAL.lastIndex = after;
17202
+ }
17203
+ pieces.push(xml.slice(copied));
17204
+ return pieces.join("");
17205
+ }
17153
17206
  function splitSheetData(xml) {
17154
- if (xml.includes("<!--") || xml.includes("<![CDATA[")) return void 0;
17155
- const namespaces = rootNamespaces(xml);
17156
- const open = OPEN.exec(xml);
17207
+ const plain4 = blankComments(xml);
17208
+ if (plain4 === void 0) return void 0;
17209
+ const namespaces = rootNamespaces(plain4);
17210
+ const open = OPEN.exec(plain4);
17157
17211
  if (!namespaces || !open) return void 0;
17158
17212
  const prefix2 = (open[1] ?? "").slice(0, -1);
17159
17213
  const ns = namespaces[prefix2];
17160
17214
  if (prefix2 && ns === void 0) return void 0;
17161
17215
  const tagName2 = `${open[1] ?? ""}sheetData`;
17162
- const openEnd = xml.indexOf(">", open.index);
17216
+ const openEnd = plain4.indexOf(">", open.index);
17163
17217
  if (openEnd < 0) return void 0;
17164
- const attributes = xml.slice(open.index + tagName2.length + 1, openEnd);
17218
+ const attributes = plain4.slice(open.index + tagName2.length + 1, openEnd);
17165
17219
  if (attributes.trimEnd().endsWith("/") || attributes.includes("xmlns")) return void 0;
17166
- const close4 = xml.indexOf(`</${tagName2}`, openEnd);
17167
- if (close4 < 0 || OPEN.test(xml.slice(openEnd))) return void 0;
17220
+ const close4 = plain4.indexOf(`</${tagName2}`, openEnd);
17221
+ if (close4 < 0 || OPEN.test(plain4.slice(openEnd))) return void 0;
17168
17222
  const container = new LiteElement(tagName2, "sheetData", ns || null);
17169
17223
  const data = parseLiteFragment(xml.slice(openEnd + 1, close4), container, namespaces);
17170
17224
  if (!data) return void 0;
@@ -1,6 +1,7 @@
1
1
  import type { RibbonAddInCommandDetail, RibbonAddInTab } from '../../ribbon/index.js';
2
2
  import type { VisioDocument } from '../index.js';
3
3
  export interface ViewerProperties {
4
+ canEdit?: boolean;
4
5
  document: VisioDocument | null;
5
6
  pageIndex: number;
6
7
  zoom: number;
@@ -33,7 +34,7 @@ export interface ViewerEvents {
33
34
  export type ViewerCallbacks = {
34
35
  [K in keyof ViewerEvents]?: (detail: ViewerEvents[K]) => void;
35
36
  };
36
- export declare const propertyKeys: readonly ["document", "pageIndex", "zoom", "showToolbar", "ribbonAddIns"];
37
+ export declare const propertyKeys: readonly ["canEdit", "document", "pageIndex", "zoom", "showToolbar", "ribbonAddIns"];
37
38
  export declare const eventKeys: readonly ["document-load", "document-change", "document-error", "page-change", "zoom-change", "shape-select", "selection-change", "office-ribbon-add-in"];
38
39
  export type VsdxSource = ArrayBuffer | Uint8Array | Blob;
39
40
  export interface ViewerOptions extends Partial<ViewerProperties> {
@@ -1 +1 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../visio/ui/contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAChC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,+DAA+D;IAC/D,YAAY,EAAE,SAAS,cAAc,EAAE,CAAC;CACxC;AACD,uFAAuF;AACvF,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CACzB;AACD,MAAM,WAAW,YAAY;IAC5B,eAAe,EAAE,aAAa,CAAC;IAC/B,iBAAiB,EAAE;QAClB,QAAQ,EAAE,aAAa,CAAC;QACxB,KAAK,EAAE,OAAO,CAAC;QACf,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;KAC1C,CAAC;IACF,gBAAgB,EAAE,KAAK,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC3C,iFAAiF;IACjF,kBAAkB,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACnD,2DAA2D;IAC3D,sBAAsB,EAAE,wBAAwB,CAAC;CACjD;AACD,MAAM,MAAM,eAAe,GAAG;KAC5B,CAAC,IAAI,MAAM,YAAY,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI;CAC7D,CAAC;AACF,eAAO,MAAM,YAAY,2EAM+B,CAAC;AACzD,eAAO,MAAM,SAAS,2JAS8B,CAAC;AASrD,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,IAAI,CAAC;AACzD,MAAM,WAAW,aAAc,SAAQ,OAAO,CAAC,gBAAgB,CAAC;IAC/D,MAAM,CAAC,EAAE,eAAe,CAAC;CACzB"}
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../../visio/ui/contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,WAAW,gBAAgB;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,+DAA+D;IAC/D,YAAY,EAAE,SAAS,cAAc,EAAE,CAAC;CACxC;AACD,uFAAuF;AACvF,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CACzB;AACD,MAAM,WAAW,YAAY;IAC5B,eAAe,EAAE,aAAa,CAAC;IAC/B,iBAAiB,EAAE;QAClB,QAAQ,EAAE,aAAa,CAAC;QACxB,KAAK,EAAE,OAAO,CAAC;QACf,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;KAC1C,CAAC;IACF,gBAAgB,EAAE,KAAK,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC3C,iFAAiF;IACjF,kBAAkB,EAAE,SAAS,mBAAmB,EAAE,CAAC;IACnD,2DAA2D;IAC3D,sBAAsB,EAAE,wBAAwB,CAAC;CACjD;AACD,MAAM,MAAM,eAAe,GAAG;KAC5B,CAAC,IAAI,MAAM,YAAY,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI;CAC7D,CAAC;AACF,eAAO,MAAM,YAAY,sFAO+B,CAAC;AACzD,eAAO,MAAM,SAAS,2JAS8B,CAAC;AASrD,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,IAAI,CAAC;AACzD,MAAM,WAAW,aAAc,SAAQ,OAAO,CAAC,gBAAgB,CAAC;IAC/D,MAAM,CAAC,EAAE,eAAe,CAAC;CACzB"}
@@ -9,6 +9,7 @@ var JSZip__default = /*#__PURE__*/_interopDefault(JSZip);
9
9
 
10
10
  // visio/ui/contract.ts
11
11
  var propertyKeys = [
12
+ "canEdit",
12
13
  "document",
13
14
  "pageIndex",
14
15
  "zoom",
@@ -1255,6 +1256,12 @@ function parseLiteFragment(xml, container, namespaces) {
1255
1256
  }
1256
1257
  if (lt < 0) break;
1257
1258
  const next = source.charCodeAt(lt + 1);
1259
+ if (next === 33) {
1260
+ const after = skipCommentOrCdata(source, lt, top);
1261
+ if (after < 0) return void 0;
1262
+ pos = after;
1263
+ continue;
1264
+ }
1258
1265
  if (next === 47) {
1259
1266
  const gt = source.indexOf(">", lt);
1260
1267
  if (gt < 0 || stack.length < 2 || source.slice(lt + 2, gt).trimEnd() !== top.tagName)
@@ -1275,6 +1282,25 @@ function parseLiteFragment(xml, container, namespaces) {
1275
1282
  }
1276
1283
  return stack.length === 1 ? root2 : void 0;
1277
1284
  }
1285
+ var DECLARATIONS = /<!DOCTYPE|<!ENTITY/i;
1286
+ function skipCommentOrCdata(source, lt, parent) {
1287
+ if (source.startsWith("<!--", lt)) {
1288
+ const end = source.indexOf("-->", lt + 4);
1289
+ if (end < 0) return -1;
1290
+ const body = source.slice(lt + 4, end);
1291
+ if (body.includes("--") || body.endsWith("-") || DECLARATIONS.test(body)) return -1;
1292
+ return end + 3;
1293
+ }
1294
+ if (source.startsWith("<![CDATA[", lt)) {
1295
+ const end = source.indexOf("]]>", lt + 9);
1296
+ if (end < 0) return -1;
1297
+ const text8 = source.slice(lt + 9, end);
1298
+ if (DECLARATIONS.test(text8)) return -1;
1299
+ parent.childNodes.push(text8);
1300
+ return end + 3;
1301
+ }
1302
+ return -1;
1303
+ }
1278
1304
  function startTag(source, from, namespaces) {
1279
1305
  const n = source.length;
1280
1306
  let i = from;
@@ -20481,21 +20507,50 @@ function rootNamespaces(xml) {
20481
20507
  for (const match of (root2[2] ?? "").matchAll(DECLARATION2)) out[match[1] ?? ""] = match[3] ?? "";
20482
20508
  return out;
20483
20509
  }
20510
+ var SPECIAL = /<[!?]/g;
20511
+ var SECTIONS = [
20512
+ ["<!--", "-->"],
20513
+ ["<![CDATA[", "]]>"],
20514
+ ["<?", "?>"]
20515
+ ];
20516
+ function blankComments(xml) {
20517
+ if (!xml.includes("<!--") && !xml.includes("<![CDATA[")) return xml;
20518
+ const pieces = [];
20519
+ let copied = 0;
20520
+ SPECIAL.lastIndex = 0;
20521
+ for (let match = SPECIAL.exec(xml); match; match = SPECIAL.exec(xml)) {
20522
+ const at2 = match.index;
20523
+ const section3 = SECTIONS.find(([open2]) => xml.startsWith(open2, at2));
20524
+ if (!section3) return void 0;
20525
+ const [open, close4] = section3;
20526
+ const end = xml.indexOf(close4, at2 + open.length);
20527
+ if (end < 0) return void 0;
20528
+ const after = end + close4.length;
20529
+ if (open !== "<?") {
20530
+ pieces.push(xml.slice(copied, at2), " ".repeat(after - at2));
20531
+ copied = after;
20532
+ }
20533
+ SPECIAL.lastIndex = after;
20534
+ }
20535
+ pieces.push(xml.slice(copied));
20536
+ return pieces.join("");
20537
+ }
20484
20538
  function splitSheetData(xml) {
20485
- if (xml.includes("<!--") || xml.includes("<![CDATA[")) return void 0;
20486
- const namespaces = rootNamespaces(xml);
20487
- const open = OPEN.exec(xml);
20539
+ const plain4 = blankComments(xml);
20540
+ if (plain4 === void 0) return void 0;
20541
+ const namespaces = rootNamespaces(plain4);
20542
+ const open = OPEN.exec(plain4);
20488
20543
  if (!namespaces || !open) return void 0;
20489
20544
  const prefix2 = (open[1] ?? "").slice(0, -1);
20490
20545
  const ns = namespaces[prefix2];
20491
20546
  if (prefix2 && ns === void 0) return void 0;
20492
20547
  const tagName2 = `${open[1] ?? ""}sheetData`;
20493
- const openEnd = xml.indexOf(">", open.index);
20548
+ const openEnd = plain4.indexOf(">", open.index);
20494
20549
  if (openEnd < 0) return void 0;
20495
- const attributes = xml.slice(open.index + tagName2.length + 1, openEnd);
20550
+ const attributes = plain4.slice(open.index + tagName2.length + 1, openEnd);
20496
20551
  if (attributes.trimEnd().endsWith("/") || attributes.includes("xmlns")) return void 0;
20497
- const close4 = xml.indexOf(`</${tagName2}`, openEnd);
20498
- if (close4 < 0 || OPEN.test(xml.slice(openEnd))) return void 0;
20552
+ const close4 = plain4.indexOf(`</${tagName2}`, openEnd);
20553
+ if (close4 < 0 || OPEN.test(plain4.slice(openEnd))) return void 0;
20499
20554
  const container = new LiteElement(tagName2, "sheetData", ns || null);
20500
20555
  const data = parseLiteFragment(xml.slice(openEnd + 1, close4), container, namespaces);
20501
20556
  if (!data) return void 0;
@@ -3,6 +3,7 @@ import JSZip from 'jszip';
3
3
 
4
4
  // visio/ui/contract.ts
5
5
  var propertyKeys = [
6
+ "canEdit",
6
7
  "document",
7
8
  "pageIndex",
8
9
  "zoom",
@@ -1249,6 +1250,12 @@ function parseLiteFragment(xml, container, namespaces) {
1249
1250
  }
1250
1251
  if (lt < 0) break;
1251
1252
  const next = source.charCodeAt(lt + 1);
1253
+ if (next === 33) {
1254
+ const after = skipCommentOrCdata(source, lt, top);
1255
+ if (after < 0) return void 0;
1256
+ pos = after;
1257
+ continue;
1258
+ }
1252
1259
  if (next === 47) {
1253
1260
  const gt = source.indexOf(">", lt);
1254
1261
  if (gt < 0 || stack.length < 2 || source.slice(lt + 2, gt).trimEnd() !== top.tagName)
@@ -1269,6 +1276,25 @@ function parseLiteFragment(xml, container, namespaces) {
1269
1276
  }
1270
1277
  return stack.length === 1 ? root2 : void 0;
1271
1278
  }
1279
+ var DECLARATIONS = /<!DOCTYPE|<!ENTITY/i;
1280
+ function skipCommentOrCdata(source, lt, parent) {
1281
+ if (source.startsWith("<!--", lt)) {
1282
+ const end = source.indexOf("-->", lt + 4);
1283
+ if (end < 0) return -1;
1284
+ const body = source.slice(lt + 4, end);
1285
+ if (body.includes("--") || body.endsWith("-") || DECLARATIONS.test(body)) return -1;
1286
+ return end + 3;
1287
+ }
1288
+ if (source.startsWith("<![CDATA[", lt)) {
1289
+ const end = source.indexOf("]]>", lt + 9);
1290
+ if (end < 0) return -1;
1291
+ const text8 = source.slice(lt + 9, end);
1292
+ if (DECLARATIONS.test(text8)) return -1;
1293
+ parent.childNodes.push(text8);
1294
+ return end + 3;
1295
+ }
1296
+ return -1;
1297
+ }
1272
1298
  function startTag(source, from, namespaces) {
1273
1299
  const n = source.length;
1274
1300
  let i = from;
@@ -20475,21 +20501,50 @@ function rootNamespaces(xml) {
20475
20501
  for (const match of (root2[2] ?? "").matchAll(DECLARATION2)) out[match[1] ?? ""] = match[3] ?? "";
20476
20502
  return out;
20477
20503
  }
20504
+ var SPECIAL = /<[!?]/g;
20505
+ var SECTIONS = [
20506
+ ["<!--", "-->"],
20507
+ ["<![CDATA[", "]]>"],
20508
+ ["<?", "?>"]
20509
+ ];
20510
+ function blankComments(xml) {
20511
+ if (!xml.includes("<!--") && !xml.includes("<![CDATA[")) return xml;
20512
+ const pieces = [];
20513
+ let copied = 0;
20514
+ SPECIAL.lastIndex = 0;
20515
+ for (let match = SPECIAL.exec(xml); match; match = SPECIAL.exec(xml)) {
20516
+ const at2 = match.index;
20517
+ const section3 = SECTIONS.find(([open2]) => xml.startsWith(open2, at2));
20518
+ if (!section3) return void 0;
20519
+ const [open, close4] = section3;
20520
+ const end = xml.indexOf(close4, at2 + open.length);
20521
+ if (end < 0) return void 0;
20522
+ const after = end + close4.length;
20523
+ if (open !== "<?") {
20524
+ pieces.push(xml.slice(copied, at2), " ".repeat(after - at2));
20525
+ copied = after;
20526
+ }
20527
+ SPECIAL.lastIndex = after;
20528
+ }
20529
+ pieces.push(xml.slice(copied));
20530
+ return pieces.join("");
20531
+ }
20478
20532
  function splitSheetData(xml) {
20479
- if (xml.includes("<!--") || xml.includes("<![CDATA[")) return void 0;
20480
- const namespaces = rootNamespaces(xml);
20481
- const open = OPEN.exec(xml);
20533
+ const plain4 = blankComments(xml);
20534
+ if (plain4 === void 0) return void 0;
20535
+ const namespaces = rootNamespaces(plain4);
20536
+ const open = OPEN.exec(plain4);
20482
20537
  if (!namespaces || !open) return void 0;
20483
20538
  const prefix2 = (open[1] ?? "").slice(0, -1);
20484
20539
  const ns = namespaces[prefix2];
20485
20540
  if (prefix2 && ns === void 0) return void 0;
20486
20541
  const tagName2 = `${open[1] ?? ""}sheetData`;
20487
- const openEnd = xml.indexOf(">", open.index);
20542
+ const openEnd = plain4.indexOf(">", open.index);
20488
20543
  if (openEnd < 0) return void 0;
20489
- const attributes = xml.slice(open.index + tagName2.length + 1, openEnd);
20544
+ const attributes = plain4.slice(open.index + tagName2.length + 1, openEnd);
20490
20545
  if (attributes.trimEnd().endsWith("/") || attributes.includes("xmlns")) return void 0;
20491
- const close4 = xml.indexOf(`</${tagName2}`, openEnd);
20492
- if (close4 < 0 || OPEN.test(xml.slice(openEnd))) return void 0;
20546
+ const close4 = plain4.indexOf(`</${tagName2}`, openEnd);
20547
+ if (close4 < 0 || OPEN.test(plain4.slice(openEnd))) return void 0;
20493
20548
  const container = new LiteElement(tagName2, "sheetData", ns || null);
20494
20549
  const data = parseLiteFragment(xml.slice(openEnd + 1, close4), container, namespaces);
20495
20550
  if (!data) return void 0;
@@ -1 +1 @@
1
- {"version":3,"file":"dimensions.d.ts","sourceRoot":"","sources":["../../../xlsx/edit/dimensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrD,OAAO,EAAE,KAAK,WAAW,EAAwB,MAAM,WAAW,CAAC;AAqBnE,qFAAqF;AACrF,wBAAgB,cAAc,CAC7B,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,KAAK,MAAM,GACjD,MAAM,GAAG,SAAS,CAUpB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC7B,GAAG,EAAE,WAAW,EAChB,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,KAAK,MAAM,GAClD,IAAI,CAiCN;AAgBD,kGAAkG;AAClG,wBAAgB,YAAY,CAC3B,GAAG,EAAE,WAAW,EAChB,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,EAAE,MAAM,GAAG,MAAM,GACrB,IAAI,CA4BN;AAED,wBAAgB,SAAS,CACxB,GAAG,EAAE,WAAW,EAChB,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,KAAK,GAAG,KAAK,EACnB,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,EAAE,OAAO,GACb,IAAI,CA+CN"}
1
+ {"version":3,"file":"dimensions.d.ts","sourceRoot":"","sources":["../../../xlsx/edit/dimensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAGrD,OAAO,EAAE,KAAK,WAAW,EAAwB,MAAM,WAAW,CAAC;AAqBnE,qFAAqF;AACrF,wBAAgB,cAAc,CAC7B,GAAG,EAAE,WAAW,EAChB,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,KAAK,MAAM,GACjD,MAAM,GAAG,SAAS,CAUpB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC7B,GAAG,EAAE,WAAW,EAChB,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,MAAM,EAAE,EACd,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,KAAK,MAAM,GAClD,IAAI,CAiCN;AAgBD,kGAAkG;AAClG,wBAAgB,YAAY,CAC3B,GAAG,EAAE,WAAW,EAChB,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,EAAE,MAAM,GAAG,MAAM,GACrB,IAAI,CA4BN;AAED,wBAAgB,SAAS,CACxB,GAAG,EAAE,WAAW,EAChB,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,KAAK,GAAG,KAAK,EACnB,OAAO,EAAE,MAAM,EAAE,EACjB,MAAM,EAAE,OAAO,GACb,IAAI,CAmDN"}
@@ -0,0 +1,7 @@
1
+ import type { RowInfo, Worksheet } from '../model.js';
2
+ /** Each named row's metadata, cloned; `undefined` where the row has none. */
3
+ export type RowInfoEntries = [row: number, info: RowInfo | undefined][];
4
+ export declare function captureRowInfo(sheet: Worksheet, rows: readonly number[]): RowInfoEntries;
5
+ /** Puts recorded row metadata back into the sheet's own `rowInfo` map. */
6
+ export declare function restoreRowInfo(sheet: Worksheet, entries: RowInfoEntries): void;
7
+ //# sourceMappingURL=history-rows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history-rows.d.ts","sourceRoot":"","sources":["../../../xlsx/edit/history-rows.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEnD,6EAA6E;AAC7E,MAAM,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,SAAS,CAAC,EAAE,CAAC;AAExE,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,cAAc,CAKxF;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAI9E"}
@@ -1,11 +1,13 @@
1
1
  import { type CellRange } from '../address.js';
2
2
  import type { Cell, DefinedName, Workbook, Worksheet } from '../model.js';
3
3
  import { type RefsData, type ShiftSpec } from './history-refs.js';
4
+ import { type RowInfoEntries } from './history-rows.js';
4
5
  /** Worksheet properties a `parts` scope can record (everything but the cells). */
5
6
  export type SheetPart = Exclude<keyof Worksheet, 'rows'>;
6
7
  /**
7
8
  * What an edit may change. `cells` records only the stored cells inside the ranges, `parts` some
8
- * of a sheet's non-cell properties (tables, merges, ...), `sheet` the whole worksheet, `refs` what
9
+ * of a sheet's non-cell properties (tables, merges, ...), `rowInfo` the row metadata (height,
10
+ * hiding, outline) of the given rows only, `sheet` the whole worksheet, `refs` what
9
11
  * a workbook-wide reference rewrite touches (sheet metadata, names and the formulas that change),
10
12
  * `shift` a row or column insert or delete on one sheet (the moved cells are not copied, only the
11
13
  * destroyed and created ones and the changed references), `workbook` every sheet plus the
@@ -19,6 +21,10 @@ export type EditScope = {
19
21
  kind: 'parts';
20
22
  sheet: number;
21
23
  parts: SheetPart[];
24
+ } | {
25
+ kind: 'rowInfo';
26
+ sheet: number;
27
+ rows: readonly number[];
22
28
  } | {
23
29
  kind: 'sheet';
24
30
  sheet: number;
@@ -41,6 +47,10 @@ type Snapshot = {
41
47
  sheet: number;
42
48
  parts: SheetPart[];
43
49
  data: Partial<Worksheet>;
50
+ } | {
51
+ kind: 'rowInfo';
52
+ sheet: number;
53
+ rows: RowInfoEntries;
44
54
  } | {
45
55
  kind: 'sheet';
46
56
  sheet: number;
@@ -1 +1 @@
1
- {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../../xlsx/edit/history.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../../xlsx/edit/history.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"outline.d.ts","sourceRoot":"","sources":["../../../xlsx/edit/outline.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,WAAW,CAAC;AAEtD,qCAAqC;AACrC,eAAO,MAAM,iBAAiB,IAAI,CAAC;AA4DnC,iFAAiF;AACjF,eAAO,MAAM,SAAS,QAAS,WAAW,KAAK,MAAM,QAAQ,MAAM,MAAM,MAAM,KAAG,IACjD,CAAC;AAClC,wEAAwE;AACxE,eAAO,MAAM,WAAW,QAAS,WAAW,KAAK,MAAM,QAAQ,MAAM,MAAM,MAAM,KAAG,IAClD,CAAC;AACnC,oFAAoF;AACpF,eAAO,MAAM,YAAY,QAAS,WAAW,KAAK,MAAM,QAAQ,MAAM,MAAM,MAAM,KAAG,IACjD,CAAC;AACrC,2EAA2E;AAC3E,eAAO,MAAM,cAAc,QAAS,WAAW,KAAK,MAAM,QAAQ,MAAM,MAAM,MAAM,KAAG,IAClD,CAAC;AAEtC,oGAAoG;AACpG,wBAAgB,qBAAqB,CACpC,GAAG,EAAE,WAAW,EAChB,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,GAAG,SAAS,GACvB,IAAI,CAcN"}
1
+ {"version":3,"file":"outline.d.ts","sourceRoot":"","sources":["../../../xlsx/edit/outline.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,WAAW,CAAC;AAEtD,qCAAqC;AACrC,eAAO,MAAM,iBAAiB,IAAI,CAAC;AA6DnC,iFAAiF;AACjF,eAAO,MAAM,SAAS,QAAS,WAAW,KAAK,MAAM,QAAQ,MAAM,MAAM,MAAM,KAAG,IACjD,CAAC;AAClC,wEAAwE;AACxE,eAAO,MAAM,WAAW,QAAS,WAAW,KAAK,MAAM,QAAQ,MAAM,MAAM,MAAM,KAAG,IAClD,CAAC;AACnC,oFAAoF;AACpF,eAAO,MAAM,YAAY,QAAS,WAAW,KAAK,MAAM,QAAQ,MAAM,MAAM,MAAM,KAAG,IACjD,CAAC;AACrC,2EAA2E;AAC3E,eAAO,MAAM,cAAc,QAAS,WAAW,KAAK,MAAM,QAAQ,MAAM,MAAM,MAAM,KAAG,IAClD,CAAC;AAEtC,oGAAoG;AACpG,wBAAgB,qBAAqB,CACpC,GAAG,EAAE,WAAW,EAChB,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,GAAG,SAAS,GACvB,IAAI,CAcN"}
@@ -1 +1 @@
1
- {"version":3,"file":"row-autofit.d.ts","sourceRoot":"","sources":["../../../xlsx/edit/row-autofit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAkB,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,WAAW,CAAC;AAKtD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC3B,GAAG,EAAE,WAAW,EAChB,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,EACtB,OAAO,GAAE,WAAgC,GACvC,MAAM,EAAE,CAiCV;AAKD,+FAA+F;AAC/F,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,EAAE,CAepF"}
1
+ {"version":3,"file":"row-autofit.d.ts","sourceRoot":"","sources":["../../../xlsx/edit/row-autofit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAkB,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,WAAW,CAAC;AAKtD;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAC3B,GAAG,EAAE,WAAW,EAChB,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,EACtB,OAAO,GAAE,WAAgC,GACvC,MAAM,EAAE,CAkCV;AAKD,+FAA+F;AAC/F,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,MAAM,EAAE,CAepF"}
@@ -11896,6 +11896,12 @@ function parseLiteFragment(xml, container, namespaces) {
11896
11896
  }
11897
11897
  if (lt < 0) break;
11898
11898
  const next = source2.charCodeAt(lt + 1);
11899
+ if (next === 33) {
11900
+ const after = skipCommentOrCdata(source2, lt, top);
11901
+ if (after < 0) return void 0;
11902
+ pos = after;
11903
+ continue;
11904
+ }
11899
11905
  if (next === 47) {
11900
11906
  const gt = source2.indexOf(">", lt);
11901
11907
  if (gt < 0 || stack2.length < 2 || source2.slice(lt + 2, gt).trimEnd() !== top.tagName)
@@ -11916,6 +11922,25 @@ function parseLiteFragment(xml, container, namespaces) {
11916
11922
  }
11917
11923
  return stack2.length === 1 ? root : void 0;
11918
11924
  }
11925
+ var DECLARATIONS = /<!DOCTYPE|<!ENTITY/i;
11926
+ function skipCommentOrCdata(source2, lt, parent) {
11927
+ if (source2.startsWith("<!--", lt)) {
11928
+ const end = source2.indexOf("-->", lt + 4);
11929
+ if (end < 0) return -1;
11930
+ const body = source2.slice(lt + 4, end);
11931
+ if (body.includes("--") || body.endsWith("-") || DECLARATIONS.test(body)) return -1;
11932
+ return end + 3;
11933
+ }
11934
+ if (source2.startsWith("<![CDATA[", lt)) {
11935
+ const end = source2.indexOf("]]>", lt + 9);
11936
+ if (end < 0) return -1;
11937
+ const text4 = source2.slice(lt + 9, end);
11938
+ if (DECLARATIONS.test(text4)) return -1;
11939
+ parent.childNodes.push(text4);
11940
+ return end + 3;
11941
+ }
11942
+ return -1;
11943
+ }
11919
11944
  function startTag(source2, from, namespaces) {
11920
11945
  const n2 = source2.length;
11921
11946
  let i2 = from;
@@ -24868,21 +24893,50 @@ function rootNamespaces(xml) {
24868
24893
  for (const match2 of (root[2] ?? "").matchAll(DECLARATION2)) out[match2[1] ?? ""] = match2[3] ?? "";
24869
24894
  return out;
24870
24895
  }
24896
+ var SPECIAL = /<[!?]/g;
24897
+ var SECTIONS = [
24898
+ ["<!--", "-->"],
24899
+ ["<![CDATA[", "]]>"],
24900
+ ["<?", "?>"]
24901
+ ];
24902
+ function blankComments(xml) {
24903
+ if (!xml.includes("<!--") && !xml.includes("<![CDATA[")) return xml;
24904
+ const pieces = [];
24905
+ let copied = 0;
24906
+ SPECIAL.lastIndex = 0;
24907
+ for (let match2 = SPECIAL.exec(xml); match2; match2 = SPECIAL.exec(xml)) {
24908
+ const at = match2.index;
24909
+ const section = SECTIONS.find(([open2]) => xml.startsWith(open2, at));
24910
+ if (!section) return void 0;
24911
+ const [open, close2] = section;
24912
+ const end = xml.indexOf(close2, at + open.length);
24913
+ if (end < 0) return void 0;
24914
+ const after = end + close2.length;
24915
+ if (open !== "<?") {
24916
+ pieces.push(xml.slice(copied, at), " ".repeat(after - at));
24917
+ copied = after;
24918
+ }
24919
+ SPECIAL.lastIndex = after;
24920
+ }
24921
+ pieces.push(xml.slice(copied));
24922
+ return pieces.join("");
24923
+ }
24871
24924
  function splitSheetData(xml) {
24872
- if (xml.includes("<!--") || xml.includes("<![CDATA[")) return void 0;
24873
- const namespaces = rootNamespaces(xml);
24874
- const open = OPEN.exec(xml);
24925
+ const plain3 = blankComments(xml);
24926
+ if (plain3 === void 0) return void 0;
24927
+ const namespaces = rootNamespaces(plain3);
24928
+ const open = OPEN.exec(plain3);
24875
24929
  if (!namespaces || !open) return void 0;
24876
24930
  const prefix = (open[1] ?? "").slice(0, -1);
24877
24931
  const ns = namespaces[prefix];
24878
24932
  if (prefix && ns === void 0) return void 0;
24879
24933
  const tagName = `${open[1] ?? ""}sheetData`;
24880
- const openEnd = xml.indexOf(">", open.index);
24934
+ const openEnd = plain3.indexOf(">", open.index);
24881
24935
  if (openEnd < 0) return void 0;
24882
- const attributes = xml.slice(open.index + tagName.length + 1, openEnd);
24936
+ const attributes = plain3.slice(open.index + tagName.length + 1, openEnd);
24883
24937
  if (attributes.trimEnd().endsWith("/") || attributes.includes("xmlns")) return void 0;
24884
- const close2 = xml.indexOf(`</${tagName}`, openEnd);
24885
- if (close2 < 0 || OPEN.test(xml.slice(openEnd))) return void 0;
24938
+ const close2 = plain3.indexOf(`</${tagName}`, openEnd);
24939
+ if (close2 < 0 || OPEN.test(plain3.slice(openEnd))) return void 0;
24886
24940
  const container = new LiteElement(tagName, "sheetData", ns || null);
24887
24941
  const data = parseLiteFragment(xml.slice(openEnd + 1, close2), container, namespaces);
24888
24942
  if (!data) return void 0;
@@ -33673,7 +33727,7 @@ function setColumnWidth(ctx, s, cols, width, measure2) {
33673
33727
  ctx.run(
33674
33728
  "Column width",
33675
33729
  "view",
33676
- [{ kind: "sheet", sheet: s }],
33730
+ [{ kind: "parts", sheet: s, parts: ["columns"] }],
33677
33731
  () => editColumns(sheet, cols, (info) => {
33678
33732
  const next = widths.get(info.min);
33679
33733
  if (next === void 0) {
@@ -33708,7 +33762,7 @@ function setRowHeight(ctx, s, rows, height) {
33708
33762
  ctx.run(
33709
33763
  "Row height",
33710
33764
  "view",
33711
- [{ kind: "sheet", sheet: s }],
33765
+ [{ kind: "rowInfo", sheet: s, rows }],
33712
33766
  () => {
33713
33767
  for (const row2 of rows) {
33714
33768
  const info = { ...sheet.rowInfo.get(row2) };
@@ -33738,7 +33792,9 @@ function setHidden(ctx, s, axis, indices, hidden) {
33738
33792
  ctx.run(
33739
33793
  `${hidden ? "Hide" : "Unhide"} ${noun}`,
33740
33794
  "view",
33741
- [{ kind: "sheet", sheet: s }],
33795
+ [
33796
+ axis === "col" ? { kind: "parts", sheet: s, parts: ["columns"] } : { kind: "rowInfo", sheet: s, rows: indices }
33797
+ ],
33742
33798
  () => {
33743
33799
  if (axis === "col") {
33744
33800
  editColumns(sheet, indices, (info) => {
@@ -34353,6 +34409,19 @@ function shiftEdgeCells(sheet, spec2, phase) {
34353
34409
  return out;
34354
34410
  }
34355
34411
 
34412
+ // xlsx/edit/history-rows.ts
34413
+ function captureRowInfo(sheet, rows) {
34414
+ return [...new Set(rows)].map((row2) => {
34415
+ const info = sheet.rowInfo.get(row2);
34416
+ return [row2, info && structuredClone(info)];
34417
+ });
34418
+ }
34419
+ function restoreRowInfo(sheet, entries) {
34420
+ for (const [row2, info] of entries)
34421
+ if (info) sheet.rowInfo.set(row2, structuredClone(info));
34422
+ else sheet.rowInfo.delete(row2);
34423
+ }
34424
+
34356
34425
  // xlsx/edit/history.ts
34357
34426
  var SETTING_KEYS = [
34358
34427
  "structureLocked",
@@ -34437,6 +34506,8 @@ function captureScope(workbook, scope, before) {
34437
34506
  if (!sheet) throw new RangeError(`No sheet at index ${scope.sheet}`);
34438
34507
  if (scope.kind === "sheet")
34439
34508
  return { kind: "sheet", sheet: scope.sheet, data: structuredClone(sheet) };
34509
+ if (scope.kind === "rowInfo")
34510
+ return { kind: "rowInfo", sheet: scope.sheet, rows: captureRowInfo(sheet, scope.rows) };
34440
34511
  if (scope.kind === "parts") {
34441
34512
  const data = {};
34442
34513
  for (const part of scope.parts) if (sheet[part] !== void 0) data[part] = sheet[part];
@@ -34488,6 +34559,7 @@ function restoreSnapshot(workbook, snapshot) {
34488
34559
  }
34489
34560
  const sheet = workbook.sheets[snapshot.sheet];
34490
34561
  if (!sheet) return;
34562
+ if (snapshot.kind === "rowInfo") return restoreRowInfo(sheet, snapshot.rows);
34491
34563
  if (snapshot.kind === "parts") {
34492
34564
  const target = sheet;
34493
34565
  const data = structuredClone(snapshot.data);
@@ -37135,12 +37207,13 @@ function span2(from, to) {
37135
37207
  }
37136
37208
  function outlineRows(ctx, s, from, to, delta) {
37137
37209
  const sheet = sheetAt(ctx.workbook, s);
37210
+ const rows = span2(from, to);
37138
37211
  ctx.run(
37139
37212
  delta > 0 ? "Group rows" : "Ungroup rows",
37140
37213
  "structure",
37141
- [{ kind: "sheet", sheet: s }],
37214
+ [{ kind: "rowInfo", sheet: s, rows }],
37142
37215
  () => {
37143
- for (const row2 of span2(from, to)) {
37216
+ for (const row2 of rows) {
37144
37217
  const info = { ...sheet.rowInfo.get(row2) };
37145
37218
  const level2 = nextLevel(info.outlineLevel, delta);
37146
37219
  if (level2) info.outlineLevel = level2;
@@ -37160,7 +37233,7 @@ function outlineColumns(ctx, s, from, to, delta) {
37160
37233
  ctx.run(
37161
37234
  delta > 0 ? "Group columns" : "Ungroup columns",
37162
37235
  "structure",
37163
- [{ kind: "sheet", sheet: s }],
37236
+ [{ kind: "parts", sheet: s, parts: ["columns"] }],
37164
37237
  () => editColumns(sheet, span2(from, to), (info) => {
37165
37238
  const level2 = nextLevel(info.outlineLevel, delta);
37166
37239
  if (level2) info.outlineLevel = level2;
@@ -37183,7 +37256,7 @@ function setDefaultColumnWidth(ctx, s, width) {
37183
37256
  ctx.run(
37184
37257
  "Standard width",
37185
37258
  "format",
37186
- [{ kind: "sheet", sheet: s }],
37259
+ [{ kind: "parts", sheet: s, parts: ["defaultColWidth"] }],
37187
37260
  () => {
37188
37261
  if (width === void 0) Reflect.deleteProperty(sheet, "defaultColWidth");
37189
37262
  else sheet.defaultColWidth = width;
@@ -39805,10 +39878,11 @@ function autoGrowRows(ctx, s, rows, measure2 = approximateMeasure) {
39805
39878
  updates.push([row2, next]);
39806
39879
  }
39807
39880
  if (!updates.length) return [];
39881
+ const changed = updates.map(([row2]) => row2);
39808
39882
  ctx.run(
39809
39883
  "Row height",
39810
39884
  "view",
39811
- [{ kind: "sheet", sheet: s }],
39885
+ [{ kind: "rowInfo", sheet: s, rows: changed }],
39812
39886
  () => {
39813
39887
  for (const [row2, height] of updates) {
39814
39888
  const info = { ...sheet.rowInfo.get(row2) };
@@ -39820,7 +39894,7 @@ function autoGrowRows(ctx, s, rows, measure2 = approximateMeasure) {
39820
39894
  },
39821
39895
  { sheet: s, structural: true }
39822
39896
  );
39823
- return updates.map(([row2]) => row2);
39897
+ return changed;
39824
39898
  }
39825
39899
  var MAX_REFIT_ROWS = 1e4;
39826
39900
  function rowsToRefit(sheet, ranges) {