ooxml-core 1.16.0 → 1.17.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 (83) hide show
  1. package/dist/{PptxHandler-M35YFCUC.mjs → PptxHandler-K7GMS2ST.mjs} +2 -2
  2. package/dist/PptxHandler-L3JPWOBN.mjs +4 -0
  3. package/dist/{PptxHandler-3A7VEXVK.cjs → PptxHandler-U6EFO73T.cjs} +3 -3
  4. package/dist/{PresentationBuilder-XVRTITYR.cjs → PresentationBuilder-LUR6LGHU.cjs} +5 -5
  5. package/dist/{PresentationBuilder-Y6DJK6H2.mjs → PresentationBuilder-OK526SZ4.mjs} +2 -2
  6. package/dist/{PresentationBuilder-C7NPM7OQ.mjs → PresentationBuilder-XC3F3OPY.mjs} +2 -2
  7. package/dist/automation/index.cjs +45 -12
  8. package/dist/automation/index.mjs +45 -12
  9. package/dist/chart/index.cjs +23 -4
  10. package/dist/chart/index.mjs +23 -4
  11. package/dist/{chunk-B37EVUMG.mjs → chunk-A7S2NYAU.mjs} +1 -1
  12. package/dist/{chunk-LM6VBPQJ.mjs → chunk-HLZIALC5.mjs} +24 -5
  13. package/dist/{chunk-WBCV52YV.mjs → chunk-IM5LFEA2.mjs} +1 -1
  14. package/dist/{chunk-OKGQ2X7D.mjs → chunk-KU3SMBFU.mjs} +1 -1
  15. package/dist/{chunk-UGWY72WC.cjs → chunk-NYTR4UZ5.cjs} +23 -4
  16. package/dist/{chunk-KOX5Y5E5.mjs → chunk-UFGJNXRG.mjs} +1 -1
  17. package/dist/{chunk-AHRFBMLK.cjs → chunk-UWWS6VVJ.cjs} +1007 -1007
  18. package/dist/{chunk-WEFFRYXN.mjs → chunk-XTSHZGSM.mjs} +23 -4
  19. package/dist/{chunk-C2Y6SZDN.mjs → chunk-YS43OMM3.mjs} +4 -4
  20. package/dist/collab/broadcast-transport.d.ts.map +1 -1
  21. package/dist/collab/identity.d.ts +2 -0
  22. package/dist/collab/identity.d.ts.map +1 -1
  23. package/dist/collab/index.cjs +11 -2
  24. package/dist/collab/index.mjs +11 -3
  25. package/dist/crypto/index.cjs +23 -4
  26. package/dist/crypto/index.mjs +23 -4
  27. package/dist/diagram/index.cjs +23 -4
  28. package/dist/diagram/index.mjs +23 -4
  29. package/dist/docx/embedded.cjs +23 -4
  30. package/dist/docx/embedded.mjs +23 -4
  31. package/dist/docx/index.cjs +24 -5
  32. package/dist/docx/index.mjs +24 -5
  33. package/dist/docx/layout/index.cjs +24 -5
  34. package/dist/docx/layout/index.mjs +24 -5
  35. package/dist/docx/load/index.cjs +23 -4
  36. package/dist/docx/load/index.mjs +23 -4
  37. package/dist/docx/ui/index.cjs +32 -5
  38. package/dist/docx/ui/index.mjs +32 -5
  39. package/dist/drawingml/index.cjs +23 -4
  40. package/dist/drawingml/index.mjs +23 -4
  41. package/dist/index.cjs +23 -4
  42. package/dist/index.mjs +23 -4
  43. package/dist/math/index.cjs +23 -4
  44. package/dist/math/index.mjs +23 -4
  45. package/dist/opc/index.cjs +23 -4
  46. package/dist/opc/index.mjs +23 -4
  47. package/dist/pptx/automation/index.cjs +28 -9
  48. package/dist/pptx/automation/index.mjs +5 -5
  49. package/dist/pptx/cli/index.cjs +28 -9
  50. package/dist/pptx/cli/index.mjs +4 -4
  51. package/dist/pptx/converter/index.mjs +2 -2
  52. package/dist/pptx/editor/render/find-replace.cjs +14 -14
  53. package/dist/pptx/editor/render/find-replace.mjs +1 -1
  54. package/dist/pptx/editor/render/slide-operations.cjs +8 -8
  55. package/dist/pptx/editor/render/slide-operations.mjs +2 -2
  56. package/dist/pptx/index.cjs +28 -9
  57. package/dist/pptx/index.mjs +5 -5
  58. package/dist/teams/index.cjs +44 -9
  59. package/dist/teams/index.mjs +44 -9
  60. package/dist/visio/index.cjs +23 -4
  61. package/dist/visio/index.mjs +23 -4
  62. package/dist/visio/ui/document-history.d.ts +6 -1
  63. package/dist/visio/ui/document-history.d.ts.map +1 -1
  64. package/dist/visio/ui/index.cjs +49 -6
  65. package/dist/visio/ui/index.mjs +49 -7
  66. package/dist/xlsx/edit/context.d.ts.map +1 -1
  67. package/dist/xlsx/edit/slicers.d.ts.map +1 -1
  68. package/dist/xlsx/edit/timelines.d.ts.map +1 -1
  69. package/dist/xlsx/index.cjs +45 -12
  70. package/dist/xlsx/index.mjs +45 -12
  71. package/dist/xlsx/load/index.cjs +32 -5
  72. package/dist/xlsx/load/index.mjs +32 -5
  73. package/dist/xlsx/ui/dialogs/grid-chart.d.ts +25 -0
  74. package/dist/xlsx/ui/dialogs/grid-chart.d.ts.map +1 -0
  75. package/dist/xlsx/ui/index.cjs +4721 -1063
  76. package/dist/xlsx/ui/index.d.ts +1 -0
  77. package/dist/xlsx/ui/index.d.ts.map +1 -1
  78. package/dist/xlsx/ui/index.mjs +4714 -1063
  79. package/dist/xml/index.cjs +23 -4
  80. package/dist/xml/index.mjs +23 -4
  81. package/dist/xml/xml.d.ts.map +1 -1
  82. package/package.json +1 -1
  83. package/dist/PptxHandler-7POULDRL.mjs +0 -4
@@ -267,9 +267,23 @@ function checkXmlLimits(xml, label2, limits = {}) {
267
267
  const maxNodes = limits.maxNodes ?? DEFAULT_XML_LIMITS.maxNodes;
268
268
  let depth = 0;
269
269
  let nodes = 0;
270
- for (const match2 of xml.matchAll(MARKUP_RE)) {
271
- const [, closing, name2, selfClosing] = match2;
272
- if (name2 === void 0) continue;
270
+ let at = xml.indexOf("<");
271
+ while (at !== -1) {
272
+ const skip = MARKUP_SKIPS.find(([open]) => xml.startsWith(open, at));
273
+ if (skip) {
274
+ const end = xml.indexOf(skip[1], at + skip[0].length);
275
+ if (end === -1) return;
276
+ at = xml.indexOf("<", end + skip[1].length);
277
+ continue;
278
+ }
279
+ TAG_RE.lastIndex = at;
280
+ const match2 = TAG_RE.exec(xml);
281
+ if (!match2) {
282
+ at = xml.indexOf("<", at + 1);
283
+ continue;
284
+ }
285
+ const [, closing, , selfClosing] = match2;
286
+ at = xml.indexOf("<", at + match2[0].length);
273
287
  if (closing) {
274
288
  depth--;
275
289
  continue;
@@ -310,7 +324,7 @@ function named(element2, local, ns, lenient = true) {
310
324
  function attr(element2, local, ns, prefix) {
311
325
  return element2?.getAttributeNS(ns, local) ?? element2?.getAttribute(`${prefix}:${local}`) ?? void 0;
312
326
  }
313
- var DEFAULT_XML_LIMITS, MARKUP_RE, buildXml, isElement, elements, children, first, relAttr;
327
+ var DEFAULT_XML_LIMITS, TAG_RE, MARKUP_SKIPS, buildXml, isElement, elements, children, first, relAttr;
314
328
  var init_xml = __esm({
315
329
  "xml/xml.ts"() {
316
330
  init_namespaces();
@@ -318,7 +332,12 @@ var init_xml = __esm({
318
332
  maxDepth: 512,
319
333
  maxNodes: 5e6
320
334
  };
321
- MARKUP_RE = /<!--[\s\S]*?-->|<!\[CDATA\[[\s\S]*?\]\]>|<\?[\s\S]*?\?>|<(\/?)([^\s\/>]+)(?:\s+[^\s=\/>]+\s*=\s*(?:"[^"]*"|'[^']*'))*\s*(\/?)>/g;
335
+ TAG_RE = /<(\/?)([^\s\/><]+)(?:\s+[^\s=\/><]+\s*=\s*(?:"[^"<]*"|'[^'<]*'))*\s*(\/?)>/y;
336
+ MARKUP_SKIPS = [
337
+ ["<!--", "-->"],
338
+ ["<![CDATA[", "]]>"],
339
+ ["<?", "?>"]
340
+ ];
322
341
  buildXml = (node2) => new XMLSerializer().serializeToString(node2);
323
342
  isElement = (node2) => node2.nodeType === 1;
324
343
  elements = (parent) => Array.from(parent.childNodes).filter(isElement);
@@ -22973,9 +22992,17 @@ function pivotTableXml(source2, cacheId, cache3) {
22973
22992
  }
22974
22993
  return XML_HEADER + buildXml(root);
22975
22994
  }
22995
+ function firstFilterTag(xml) {
22996
+ for (let at = xml.indexOf("<filter"); at !== -1; at = xml.indexOf("<filter", at + 1)) {
22997
+ if (!/\s/.test(xml.charAt(at + 7))) continue;
22998
+ const end = xml.indexOf(">", at);
22999
+ return end === -1 ? "" : xml.slice(at, end + 1);
23000
+ }
23001
+ return "";
23002
+ }
22976
23003
  function dateFilterXml(pivot, filter2) {
22977
23004
  const x15 = "http://schemas.microsoft.com/office/spreadsheetml/2010/11/main";
22978
- const id = Number(/<filter [^>]*\bid="(\d+)"/.exec(pivot.sourceXml ?? "")?.[1] ?? 1);
23005
+ const id = Number(/\bid="(\d+)"/.exec(firstFilterTag(pivot.sourceXml ?? ""))?.[1] ?? 1);
22979
23006
  return `<filters count="1"><filter${attrs({ fld: pivot.fields.indexOf(filter2.field), type: "dateBetween", evalOrder: -1, id, name: filter2.field })}><autoFilter ref="A1"><filterColumn colId="0"><customFilters and="1"><customFilter operator="greaterThanOrEqual" val="${Math.floor(filter2.start)}"/><customFilter operator="lessThanOrEqual" val="${Math.floor(filter2.end)}"/></customFilters></filterColumn></autoFilter><extLst><ext uri="{0605FD5F-26C8-4aeb-8148-2DB25E43C511}" xmlns:x15="${x15}"><x15:pivotFilter useWholeDay="1"/></ext></extLst></filter></filters>`;
22980
23007
  }
22981
23008
  var X14;
@@ -25144,10 +25171,18 @@ function assignUserColor(seed, palette = CURSOR_PALETTE) {
25144
25171
  for (let i = 0; i < text2.length; i++) hash = hash * 31 + text2.charCodeAt(i) | 0;
25145
25172
  return palette[Math.abs(hash) % palette.length] ?? DEFAULT_COLOR;
25146
25173
  }
25174
+ function randomToken() {
25175
+ const cryptoApi = globalThis.crypto;
25176
+ if (cryptoApi?.getRandomValues) {
25177
+ return cryptoApi.getRandomValues(new Uint32Array(2)).reduce((s, n) => s + n.toString(36), "").slice(0, 8);
25178
+ }
25179
+ return (fallbackCounter++).toString(36).padStart(8, "0");
25180
+ }
25181
+ var fallbackCounter = 0;
25147
25182
  function createClientId() {
25148
25183
  const cryptoApi = globalThis.crypto;
25149
25184
  if (cryptoApi?.randomUUID) return cryptoApi.randomUUID();
25150
- return `c${Date.now().toString(36)}${Math.random().toString(36).slice(2, 10)}`;
25185
+ return `c${Date.now().toString(36)}${randomToken()}`;
25151
25186
  }
25152
25187
  function clientKey(clientId) {
25153
25188
  if (!isValidId(clientId)) throw new Error("Invalid collaboration client ID");
@@ -26387,7 +26422,7 @@ function meetingToIcs(meeting, options = {}) {
26387
26422
  return `${lines.flatMap(icsFold).join("\r\n")}\r
26388
26423
  `;
26389
26424
  }
26390
- var icsFileName = (meeting) => `${meeting.title.replace(/[^\w.-]+/gu, "-").replace(/^-+|-+$/gu, "").slice(0, 60) || "meeting"}.ics`;
26425
+ var icsFileName = (meeting) => `${meeting.title.replace(/[^\w.-]+/gu, "-").replace(/^-|-$/gu, "").slice(0, 60) || "meeting"}.ics`;
26391
26426
  var MAX_EXCEPTIONS = 400;
26392
26427
  var MAX_SPAN = 24 * 36e5;
26393
26428
  var time = (v) => typeof v === "number" && Number.isFinite(v) && v > 0 && v < 864e13 ? Math.floor(v) : null;
@@ -27723,7 +27758,7 @@ var isEnvelope = (value) => {
27723
27758
  function createBroadcastTransport(options) {
27724
27759
  const roomId = validateRoomId(options.roomId);
27725
27760
  const Channel = options.BroadcastChannel ?? globalThis.BroadcastChannel;
27726
- const self = Math.random().toString(36).slice(2) + Date.now().toString(36);
27761
+ const self = randomToken() + Date.now().toString(36);
27727
27762
  let channel = null;
27728
27763
  let handlers = null;
27729
27764
  const close = () => {
@@ -80,15 +80,34 @@ var DEFAULT_XML_LIMITS = {
80
80
  maxDepth: 512,
81
81
  maxNodes: 5e6
82
82
  };
83
- var MARKUP_RE = /<!--[\s\S]*?-->|<!\[CDATA\[[\s\S]*?\]\]>|<\?[\s\S]*?\?>|<(\/?)([^\s\/>]+)(?:\s+[^\s=\/>]+\s*=\s*(?:"[^"]*"|'[^']*'))*\s*(\/?)>/g;
83
+ var TAG_RE = /<(\/?)([^\s\/><]+)(?:\s+[^\s=\/><]+\s*=\s*(?:"[^"<]*"|'[^'<]*'))*\s*(\/?)>/y;
84
+ var MARKUP_SKIPS = [
85
+ ["<!--", "-->"],
86
+ ["<![CDATA[", "]]>"],
87
+ ["<?", "?>"]
88
+ ];
84
89
  function checkXmlLimits(xml, label, limits = {}) {
85
90
  const maxDepth = limits.maxDepth ?? DEFAULT_XML_LIMITS.maxDepth;
86
91
  const maxNodes = limits.maxNodes ?? DEFAULT_XML_LIMITS.maxNodes;
87
92
  let depth = 0;
88
93
  let nodes = 0;
89
- for (const match of xml.matchAll(MARKUP_RE)) {
90
- const [, closing, name3, selfClosing] = match;
91
- if (name3 === void 0) continue;
94
+ let at2 = xml.indexOf("<");
95
+ while (at2 !== -1) {
96
+ const skip = MARKUP_SKIPS.find(([open]) => xml.startsWith(open, at2));
97
+ if (skip) {
98
+ const end = xml.indexOf(skip[1], at2 + skip[0].length);
99
+ if (end === -1) return;
100
+ at2 = xml.indexOf("<", end + skip[1].length);
101
+ continue;
102
+ }
103
+ TAG_RE.lastIndex = at2;
104
+ const match = TAG_RE.exec(xml);
105
+ if (!match) {
106
+ at2 = xml.indexOf("<", at2 + 1);
107
+ continue;
108
+ }
109
+ const [, closing, , selfClosing] = match;
110
+ at2 = xml.indexOf("<", at2 + match[0].length);
92
111
  if (closing) {
93
112
  depth--;
94
113
  continue;
@@ -74,15 +74,34 @@ var DEFAULT_XML_LIMITS = {
74
74
  maxDepth: 512,
75
75
  maxNodes: 5e6
76
76
  };
77
- var MARKUP_RE = /<!--[\s\S]*?-->|<!\[CDATA\[[\s\S]*?\]\]>|<\?[\s\S]*?\?>|<(\/?)([^\s\/>]+)(?:\s+[^\s=\/>]+\s*=\s*(?:"[^"]*"|'[^']*'))*\s*(\/?)>/g;
77
+ var TAG_RE = /<(\/?)([^\s\/><]+)(?:\s+[^\s=\/><]+\s*=\s*(?:"[^"<]*"|'[^'<]*'))*\s*(\/?)>/y;
78
+ var MARKUP_SKIPS = [
79
+ ["<!--", "-->"],
80
+ ["<![CDATA[", "]]>"],
81
+ ["<?", "?>"]
82
+ ];
78
83
  function checkXmlLimits(xml, label, limits = {}) {
79
84
  const maxDepth = limits.maxDepth ?? DEFAULT_XML_LIMITS.maxDepth;
80
85
  const maxNodes = limits.maxNodes ?? DEFAULT_XML_LIMITS.maxNodes;
81
86
  let depth = 0;
82
87
  let nodes = 0;
83
- for (const match of xml.matchAll(MARKUP_RE)) {
84
- const [, closing, name3, selfClosing] = match;
85
- if (name3 === void 0) continue;
88
+ let at2 = xml.indexOf("<");
89
+ while (at2 !== -1) {
90
+ const skip = MARKUP_SKIPS.find(([open]) => xml.startsWith(open, at2));
91
+ if (skip) {
92
+ const end = xml.indexOf(skip[1], at2 + skip[0].length);
93
+ if (end === -1) return;
94
+ at2 = xml.indexOf("<", end + skip[1].length);
95
+ continue;
96
+ }
97
+ TAG_RE.lastIndex = at2;
98
+ const match = TAG_RE.exec(xml);
99
+ if (!match) {
100
+ at2 = xml.indexOf("<", at2 + 1);
101
+ continue;
102
+ }
103
+ const [, closing, , selfClosing] = match;
104
+ at2 = xml.indexOf("<", at2 + match[0].length);
86
105
  if (closing) {
87
106
  depth--;
88
107
  continue;
@@ -23,6 +23,8 @@ export declare const EDIT_HISTORY_LIMITS: Readonly<{
23
23
  maxBytes: number;
24
24
  maxEntries: 20;
25
25
  }>;
26
+ /** A requested undo depth as a snapshot count: whole, at least 2 (one undo), at most the cap. */
27
+ export declare const clampHistoryEntries: (entries: number) => number;
26
28
  export interface SourceSnapshot {
27
29
  readonly bytes: Uint8Array;
28
30
  readonly diagnostics: readonly EditDiagnostic[];
@@ -31,12 +33,15 @@ export interface SourceSnapshot {
31
33
  export declare class DocumentHistory {
32
34
  #private;
33
35
  readonly original: SourceSnapshot;
34
- constructor(bytes: Uint8Array);
36
+ constructor(bytes: Uint8Array, maxEntries?: number);
35
37
  get current(): SourceSnapshot;
36
38
  get undoTarget(): SourceSnapshot | undefined;
37
39
  get redoTarget(): SourceSnapshot | undefined;
38
40
  get state(): ViewerEditState;
39
41
  append(bytes: Uint8Array, diagnostics: readonly EditDiagnostic[]): void;
42
+ /** Keep at most `entries` snapshots (the original plus its edits), dropping the oldest first. */
43
+ set maxEntries(entries: number);
44
+ get maxEntries(): number;
40
45
  move(target: SourceSnapshot): void;
41
46
  export(): VsdxExportResult;
42
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"document-history.d.ts","sourceRoot":"","sources":["../../../visio/ui/document-history.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB;AACD,MAAM,WAAW,gBAAgB;IAChC,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,SAAS,cAAc,EAAE,CAAC;CACvC;AACD,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,SAAS,cAAc,EAAE,CAAC;CAChD;AACD,eAAO,MAAM,gBAAgB,EAAE,eAS7B,CAAC;AACH,eAAO,MAAM,mBAAmB;;;EAAgE,CAAC;AACjG,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,SAAS,cAAc,EAAE,CAAC;CAChD;AACD,wGAAwG;AACxG,qBAAa,eAAe;;IAC3B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAIlC,YAAY,KAAK,EAAE,UAAU,EAG5B;IACD,IAAI,OAAO,IAAI,cAAc,CAE5B;IACD,IAAI,UAAU,IAAI,cAAc,GAAG,SAAS,CAE3C;IACD,IAAI,UAAU,IAAI,cAAc,GAAG,SAAS,CAE3C;IACD,IAAI,KAAK,IAAI,eAAe,CAU3B;IACD,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,cAAc,EAAE,GAAG,IAAI,CAsBtE;IACD,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAKjC;IACD,MAAM,IAAI,gBAAgB,CAMzB;CACD"}
1
+ {"version":3,"file":"document-history.d.ts","sourceRoot":"","sources":["../../../visio/ui/document-history.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB;AACD,MAAM,WAAW,gBAAgB;IAChC,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,EAAE,SAAS,cAAc,EAAE,CAAC;CACvC;AACD,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,SAAS,cAAc,EAAE,CAAC;CAChD;AACD,eAAO,MAAM,gBAAgB,EAAE,eAS7B,CAAC;AACH,eAAO,MAAM,mBAAmB;;;EAAgE,CAAC;AACjG,iGAAiG;AACjG,eAAO,MAAM,mBAAmB,YAAa,MAAM,KAAG,MAIpD,CAAC;AACH,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,SAAS,cAAc,EAAE,CAAC;CAChD;AACD,wGAAwG;AACxG,qBAAa,eAAe;;IAC3B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAKlC,YAAY,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM,EAIjD;IACD,IAAI,OAAO,IAAI,cAAc,CAE5B;IACD,IAAI,UAAU,IAAI,cAAc,GAAG,SAAS,CAE3C;IACD,IAAI,UAAU,IAAI,cAAc,GAAG,SAAS,CAE3C;IACD,IAAI,KAAK,IAAI,eAAe,CAU3B;IACD,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,cAAc,EAAE,GAAG,IAAI,CAWtE;IACD,iGAAiG;IACjG,IAAI,UAAU,CAAC,OAAO,EAAE,MAAM,EAU7B;IACD,IAAI,UAAU,IAAI,MAAM,CAEvB;IAeD,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAKjC;IACD,MAAM,IAAI,gBAAgB,CAMzB;CACD"}
@@ -170,12 +170,18 @@ var EMPTY_EDIT_STATE = Object.freeze({
170
170
  diagnostics: Object.freeze([])
171
171
  });
172
172
  var EDIT_HISTORY_LIMITS = Object.freeze({ maxBytes: 96 * 1024 * 1024, maxEntries: 20 });
173
+ var clampHistoryEntries = (entries) => Math.min(
174
+ EDIT_HISTORY_LIMITS.maxEntries,
175
+ Math.max(2, Number.isFinite(entries) ? Math.round(entries) : EDIT_HISTORY_LIMITS.maxEntries)
176
+ );
173
177
  var DocumentHistory = class {
174
178
  original;
175
179
  #entries;
176
180
  #index = 0;
177
181
  #truncated = false;
178
- constructor(bytes) {
182
+ #maxEntries = EDIT_HISTORY_LIMITS.maxEntries;
183
+ constructor(bytes, maxEntries) {
184
+ if (maxEntries !== void 0) this.#maxEntries = clampHistoryEntries(maxEntries);
179
185
  this.original = { bytes: Uint8Array.from(bytes), diagnostics: Object.freeze([]) };
180
186
  this.#entries = [this.original];
181
187
  }
@@ -209,8 +215,25 @@ var DocumentHistory = class {
209
215
  this.#entries = this.#entries.slice(0, this.#index + 1);
210
216
  this.#entries.push(snapshot);
211
217
  this.#index++;
218
+ this.#trim();
219
+ }
220
+ /** Keep at most `entries` snapshots (the original plus its edits), dropping the oldest first. */
221
+ set maxEntries(entries) {
222
+ this.#maxEntries = clampHistoryEntries(entries);
223
+ while (this.#entries.length > this.#maxEntries) {
224
+ if (this.#index > 0) {
225
+ this.#entries.shift();
226
+ this.#index--;
227
+ this.#truncated = true;
228
+ } else this.#entries.pop();
229
+ }
230
+ }
231
+ get maxEntries() {
232
+ return this.#maxEntries;
233
+ }
234
+ #trim() {
212
235
  const retained = () => /* @__PURE__ */ new Set([this.original, ...this.#entries]);
213
- while (this.#entries.length > EDIT_HISTORY_LIMITS.maxEntries || [...retained()].reduce((sum, entry) => sum + entry.bytes.byteLength, 0) > EDIT_HISTORY_LIMITS.maxBytes) {
236
+ while (this.#entries.length > this.#maxEntries || [...retained()].reduce((sum, entry) => sum + entry.bytes.byteLength, 0) > EDIT_HISTORY_LIMITS.maxBytes) {
214
237
  if (this.#index === 0) throw new Error("Source snapshots exceed the retained history limit.");
215
238
  this.#entries.shift();
216
239
  this.#index--;
@@ -1366,15 +1389,34 @@ var DEFAULT_XML_LIMITS = {
1366
1389
  maxDepth: 512,
1367
1390
  maxNodes: 5e6
1368
1391
  };
1369
- var MARKUP_RE = /<!--[\s\S]*?-->|<!\[CDATA\[[\s\S]*?\]\]>|<\?[\s\S]*?\?>|<(\/?)([^\s\/>]+)(?:\s+[^\s=\/>]+\s*=\s*(?:"[^"]*"|'[^']*'))*\s*(\/?)>/g;
1392
+ var TAG_RE = /<(\/?)([^\s\/><]+)(?:\s+[^\s=\/><]+\s*=\s*(?:"[^"<]*"|'[^'<]*'))*\s*(\/?)>/y;
1393
+ var MARKUP_SKIPS = [
1394
+ ["<!--", "-->"],
1395
+ ["<![CDATA[", "]]>"],
1396
+ ["<?", "?>"]
1397
+ ];
1370
1398
  function checkXmlLimits(xml, label2, limits = {}) {
1371
1399
  const maxDepth = limits.maxDepth ?? DEFAULT_XML_LIMITS.maxDepth;
1372
1400
  const maxNodes = limits.maxNodes ?? DEFAULT_XML_LIMITS.maxNodes;
1373
1401
  let depth = 0;
1374
1402
  let nodes = 0;
1375
- for (const match of xml.matchAll(MARKUP_RE)) {
1376
- const [, closing, name3, selfClosing] = match;
1377
- if (name3 === void 0) continue;
1403
+ let at2 = xml.indexOf("<");
1404
+ while (at2 !== -1) {
1405
+ const skip = MARKUP_SKIPS.find(([open]) => xml.startsWith(open, at2));
1406
+ if (skip) {
1407
+ const end = xml.indexOf(skip[1], at2 + skip[0].length);
1408
+ if (end === -1) return;
1409
+ at2 = xml.indexOf("<", end + skip[1].length);
1410
+ continue;
1411
+ }
1412
+ TAG_RE.lastIndex = at2;
1413
+ const match = TAG_RE.exec(xml);
1414
+ if (!match) {
1415
+ at2 = xml.indexOf("<", at2 + 1);
1416
+ continue;
1417
+ }
1418
+ const [, closing, , selfClosing] = match;
1419
+ at2 = xml.indexOf("<", at2 + match[0].length);
1378
1420
  if (closing) {
1379
1421
  depth--;
1380
1422
  continue;
@@ -34250,6 +34292,7 @@ exports.VisioTextDraftError = VisioTextDraftError;
34250
34292
  exports.assertShapeDetails = assertShapeDetails;
34251
34293
  exports.assertViewableDocument = assertViewableDocument;
34252
34294
  exports.checkVisioDiagram = checkVisioDiagram;
34295
+ exports.clampHistoryEntries = clampHistoryEntries;
34253
34296
  exports.compatibilityNotes = compatibilityNotes;
34254
34297
  exports.compatibilityText = compatibilityText;
34255
34298
  exports.composeVisioTransform = composeAffine;
@@ -164,12 +164,18 @@ var EMPTY_EDIT_STATE = Object.freeze({
164
164
  diagnostics: Object.freeze([])
165
165
  });
166
166
  var EDIT_HISTORY_LIMITS = Object.freeze({ maxBytes: 96 * 1024 * 1024, maxEntries: 20 });
167
+ var clampHistoryEntries = (entries) => Math.min(
168
+ EDIT_HISTORY_LIMITS.maxEntries,
169
+ Math.max(2, Number.isFinite(entries) ? Math.round(entries) : EDIT_HISTORY_LIMITS.maxEntries)
170
+ );
167
171
  var DocumentHistory = class {
168
172
  original;
169
173
  #entries;
170
174
  #index = 0;
171
175
  #truncated = false;
172
- constructor(bytes) {
176
+ #maxEntries = EDIT_HISTORY_LIMITS.maxEntries;
177
+ constructor(bytes, maxEntries) {
178
+ if (maxEntries !== void 0) this.#maxEntries = clampHistoryEntries(maxEntries);
173
179
  this.original = { bytes: Uint8Array.from(bytes), diagnostics: Object.freeze([]) };
174
180
  this.#entries = [this.original];
175
181
  }
@@ -203,8 +209,25 @@ var DocumentHistory = class {
203
209
  this.#entries = this.#entries.slice(0, this.#index + 1);
204
210
  this.#entries.push(snapshot);
205
211
  this.#index++;
212
+ this.#trim();
213
+ }
214
+ /** Keep at most `entries` snapshots (the original plus its edits), dropping the oldest first. */
215
+ set maxEntries(entries) {
216
+ this.#maxEntries = clampHistoryEntries(entries);
217
+ while (this.#entries.length > this.#maxEntries) {
218
+ if (this.#index > 0) {
219
+ this.#entries.shift();
220
+ this.#index--;
221
+ this.#truncated = true;
222
+ } else this.#entries.pop();
223
+ }
224
+ }
225
+ get maxEntries() {
226
+ return this.#maxEntries;
227
+ }
228
+ #trim() {
206
229
  const retained = () => /* @__PURE__ */ new Set([this.original, ...this.#entries]);
207
- while (this.#entries.length > EDIT_HISTORY_LIMITS.maxEntries || [...retained()].reduce((sum, entry) => sum + entry.bytes.byteLength, 0) > EDIT_HISTORY_LIMITS.maxBytes) {
230
+ while (this.#entries.length > this.#maxEntries || [...retained()].reduce((sum, entry) => sum + entry.bytes.byteLength, 0) > EDIT_HISTORY_LIMITS.maxBytes) {
208
231
  if (this.#index === 0) throw new Error("Source snapshots exceed the retained history limit.");
209
232
  this.#entries.shift();
210
233
  this.#index--;
@@ -1360,15 +1383,34 @@ var DEFAULT_XML_LIMITS = {
1360
1383
  maxDepth: 512,
1361
1384
  maxNodes: 5e6
1362
1385
  };
1363
- var MARKUP_RE = /<!--[\s\S]*?-->|<!\[CDATA\[[\s\S]*?\]\]>|<\?[\s\S]*?\?>|<(\/?)([^\s\/>]+)(?:\s+[^\s=\/>]+\s*=\s*(?:"[^"]*"|'[^']*'))*\s*(\/?)>/g;
1386
+ var TAG_RE = /<(\/?)([^\s\/><]+)(?:\s+[^\s=\/><]+\s*=\s*(?:"[^"<]*"|'[^'<]*'))*\s*(\/?)>/y;
1387
+ var MARKUP_SKIPS = [
1388
+ ["<!--", "-->"],
1389
+ ["<![CDATA[", "]]>"],
1390
+ ["<?", "?>"]
1391
+ ];
1364
1392
  function checkXmlLimits(xml, label2, limits = {}) {
1365
1393
  const maxDepth = limits.maxDepth ?? DEFAULT_XML_LIMITS.maxDepth;
1366
1394
  const maxNodes = limits.maxNodes ?? DEFAULT_XML_LIMITS.maxNodes;
1367
1395
  let depth = 0;
1368
1396
  let nodes = 0;
1369
- for (const match of xml.matchAll(MARKUP_RE)) {
1370
- const [, closing, name3, selfClosing] = match;
1371
- if (name3 === void 0) continue;
1397
+ let at2 = xml.indexOf("<");
1398
+ while (at2 !== -1) {
1399
+ const skip = MARKUP_SKIPS.find(([open]) => xml.startsWith(open, at2));
1400
+ if (skip) {
1401
+ const end = xml.indexOf(skip[1], at2 + skip[0].length);
1402
+ if (end === -1) return;
1403
+ at2 = xml.indexOf("<", end + skip[1].length);
1404
+ continue;
1405
+ }
1406
+ TAG_RE.lastIndex = at2;
1407
+ const match = TAG_RE.exec(xml);
1408
+ if (!match) {
1409
+ at2 = xml.indexOf("<", at2 + 1);
1410
+ continue;
1411
+ }
1412
+ const [, closing, , selfClosing] = match;
1413
+ at2 = xml.indexOf("<", at2 + match[0].length);
1372
1414
  if (closing) {
1373
1415
  depth--;
1374
1416
  continue;
@@ -34203,4 +34245,4 @@ async function createSampleVsdx() {
34203
34245
  return (await editVsdx(pages.bytes, PAGES.flatMap(shapeEdits))).bytes;
34204
34246
  }
34205
34247
 
34206
- export { DocumentHistory, EDIT_HISTORY_LIMITS, EMPTY_EDIT_STATE, EMPTY_SELECTION, EMPTY_TEXT_SEARCH, FOREIGN_VECTOR_SCENE_LIMITS, ForeignVectorBudget, MAX_INPUT_BYTES, TEXT_SEARCH_LIMITS, VISIO_AUTO_CONNECT_DIRECTIONS, VISIO_AUTO_CONNECT_GAP, VISIO_AUTO_CONNECT_REACH, VISIO_BULLET_STYLES, VISIO_DATA_GRAPHIC_FILL_ROW, VISIO_DATA_GRAPHIC_ICONS, VISIO_DATA_GRAPHIC_ROW, VISIO_DIAGRAM_RULE_SETS, VISIO_FIELD_CATEGORIES, VISIO_FORMAT_PAINTER_LIMITS, VISIO_GRID_DENSITY_CHOICES, IDENTITY_AFFINE as VISIO_IDENTITY_TRANSFORM, VISIO_LAYOUT_LABELS, VISIO_LAYOUT_STYLES, VISIO_PAGE_SIZE_PRESETS, VISIO_PAPER_SIZES, VISIO_PASTE_TEXT_LIMIT, VISIO_PATH_CLOSE_DISTANCE, VISIO_PATH_TOLERANCE, VISIO_PICTURE_DPI, VISIO_RESIZE_HANDLES, VISIO_RULER_DENSITY_CHOICES, VISIO_SELECT_TYPES, VISIO_SELECT_TYPE_LABELS, VISIO_SUBPROCESS_SHAPE, VISIO_TEXT_BLOCK_HANDLES, VISIO_TEXT_LANGUAGES, VISIO_TEXT_REPLACE_LIMITS, VisioTextDraftError, assertShapeDetails, assertViewableDocument, checkVisioDiagram, compatibilityNotes, compatibilityText, composeAffine as composeVisioTransform, copySnapshotScene, createSampleVsdx, demoDocument, editErrorMessage, eventKeys, excelSerialToIso, hasVisibleShapeContent, indexDocumentText, inspectForeignVectorResource, isEditCancellation, isVisioPathTool, normalizeVisioHyperlinkAddress, propertyKeys, sameSelection, searchDocumentText, selectionKey, snapshotEdits, snapshotSelection, textSearchStatus, validateSearchQuery, visioAddConnectionPointCommand, visioArrangeCommands, visioAutoAlignCommands, visioAutoConnectArrows, visioAutoConnectNeighbor, visioAutoConnectPlacement, visioAutoConnectPlan, visioAutoConnectShape, visioAutoConnectSidePoint, visioBoxCreationCommand, visioCalloutCommand, visioChangeCaseCommand, visioChangeCaseShape, visioChangeMasterCommand, visioChangeMasterTargets, visioChangeShapeCommand, visioChangeShapeRefusal, visioClipboardShape, visioColorRules, visioConnectableShape, visioConnectorCreationCommand, visioConnectorEdges, visioConnectorEndHandles, visioConnectorMovePreviews, visioConnectorPreviewPath, visioConnectorRouteOf, visioContainerCommand, visioCopyableShape, visioDataGraphicEdits, visioDataGraphicFields, visioDataGraphicMarker, visioDataGraphicParts, visioDataTable, visioDrawBounds, visioDrawIsLargeEnough, visioDrawPlan, visioDrawingPoint, visioDuplicateCommand, visioFileMasterDropCommand, visioFillPatternTransform, visioFitToDrawingEdits, visioFollowTarget, visioFontFamilies, visioFormatPainterEdits, visioFormatPainterSnapshot, visioFormatTargetShape, visioFormattingShape, visioGlowKey, visioGlueableShape, visioGradientInstances, visioGridSteps, visioGroupCommand, visioGuideCreateCommand, visioGuideMoveCommand, visioKeepAutoSize, visioLayerAssignCommand, visioLayerAssignCommands, visioLayerAssignState, visioLegendEdits, visioLineCreationCommand, visioLineDashLengths, visioLocalFormattingShape, visioLocalRotationShape, visioMarqueeBox, visioMarqueeSelection, visioMasterDropCommand, visioMasterDropRefusal, visioMasterDropSize, visioMasterPreviewBox, visioMatchingPaperSize, visioMovableGroup, visioMoveCommands, visioMovePreviewTransform, visioMoveTargets, visioMovementShape, visioNearestConnectionPoint, visioNewLayerNames, visioNewPageId, visioNextShapeId, visioNudgeCommands, visioOrderingShape, visioOrientationEdits, visioPageBreaks, visioPageConnectionPoints, visioPageDecorationState, visioPageDragDelta, visioPageEditToDrawing, visioPageGuides, visioPageInsertCommand, visioPageMasters, visioPageOrientationCommand, visioPageSizeCommand, visioPageSizePresetCommand, visioPageSizePresetEdits, visioPageSizeState, visioPaperSize, visioParseRange, visioPasteCommand, visioPasteTextCommand, visioPasteTextValue, visioPathDrawPlan, visioPathPreview, visioPictureInsertCommand, visioPrintTile, visioQuarterTurnCommand, visioReLayoutCommands, visioReflectionKey, visioRemoveDataGraphicEdits, visioRenderedGradientStopCount, visioRenderedGradientStops, visioResizeDrag, visioResizeFrame, visioResizeShape, visioRotationPreviewTransform, visioRotationShape, visioRulerDensityFactor, visioRulerGridEdits, visioRulerGridValues, visioSceneToLocal, visioSelectByType, visioSelectionIsOnPage, visioShadowPreset, visioShapeDataNumber, visioShapeDataRow, visioShapeDataText, visioShapeEffectValues, visioShapeFormattingState, visioShapeLocalPoint, visioShapePageBox, visioShapeReport, visioShapeReportCsv, visioShapeReportTable, visioShapeReportText, visioShapeSelectType, visioShapeSnapBox, visioSizePositionCommand, visioSizePositionState, visioSnapMoveDelta, visioStencilDropCommand, visioStencilInstanceShape, visioStencilShape, visioStencilSubShape, visioStraightLineHandles, visioStrokeGradient, visioStyleFormattingShape, visioSubprocessCommand, visioSvgStrokeStyle, visioTextAppendEdit, visioTextBlockDrag, visioTextBlockEdit, visioTextBlockFrame, visioTextBlockMatrix, visioTextBlockShape, visioTextDialogPatch, visioTextDialogValues, visioTextDraftEdit, visioTextFontStepCommand, visioTextFormattingState, visioTextIndentCommand, visioTextOccurrenceSelection, visioTextReplaceCommands, visioTextReplaceFindNext, visioTextReplaceOccurrences, visioTextReplacePlan, visioTextShape, visioTextSource, visioUngroupCommand, visioWithCalloutLeaders, visioWithContainerMembers, visioWithDataGraphics, visioWorkbookGrid };
34248
+ export { DocumentHistory, EDIT_HISTORY_LIMITS, EMPTY_EDIT_STATE, EMPTY_SELECTION, EMPTY_TEXT_SEARCH, FOREIGN_VECTOR_SCENE_LIMITS, ForeignVectorBudget, MAX_INPUT_BYTES, TEXT_SEARCH_LIMITS, VISIO_AUTO_CONNECT_DIRECTIONS, VISIO_AUTO_CONNECT_GAP, VISIO_AUTO_CONNECT_REACH, VISIO_BULLET_STYLES, VISIO_DATA_GRAPHIC_FILL_ROW, VISIO_DATA_GRAPHIC_ICONS, VISIO_DATA_GRAPHIC_ROW, VISIO_DIAGRAM_RULE_SETS, VISIO_FIELD_CATEGORIES, VISIO_FORMAT_PAINTER_LIMITS, VISIO_GRID_DENSITY_CHOICES, IDENTITY_AFFINE as VISIO_IDENTITY_TRANSFORM, VISIO_LAYOUT_LABELS, VISIO_LAYOUT_STYLES, VISIO_PAGE_SIZE_PRESETS, VISIO_PAPER_SIZES, VISIO_PASTE_TEXT_LIMIT, VISIO_PATH_CLOSE_DISTANCE, VISIO_PATH_TOLERANCE, VISIO_PICTURE_DPI, VISIO_RESIZE_HANDLES, VISIO_RULER_DENSITY_CHOICES, VISIO_SELECT_TYPES, VISIO_SELECT_TYPE_LABELS, VISIO_SUBPROCESS_SHAPE, VISIO_TEXT_BLOCK_HANDLES, VISIO_TEXT_LANGUAGES, VISIO_TEXT_REPLACE_LIMITS, VisioTextDraftError, assertShapeDetails, assertViewableDocument, checkVisioDiagram, clampHistoryEntries, compatibilityNotes, compatibilityText, composeAffine as composeVisioTransform, copySnapshotScene, createSampleVsdx, demoDocument, editErrorMessage, eventKeys, excelSerialToIso, hasVisibleShapeContent, indexDocumentText, inspectForeignVectorResource, isEditCancellation, isVisioPathTool, normalizeVisioHyperlinkAddress, propertyKeys, sameSelection, searchDocumentText, selectionKey, snapshotEdits, snapshotSelection, textSearchStatus, validateSearchQuery, visioAddConnectionPointCommand, visioArrangeCommands, visioAutoAlignCommands, visioAutoConnectArrows, visioAutoConnectNeighbor, visioAutoConnectPlacement, visioAutoConnectPlan, visioAutoConnectShape, visioAutoConnectSidePoint, visioBoxCreationCommand, visioCalloutCommand, visioChangeCaseCommand, visioChangeCaseShape, visioChangeMasterCommand, visioChangeMasterTargets, visioChangeShapeCommand, visioChangeShapeRefusal, visioClipboardShape, visioColorRules, visioConnectableShape, visioConnectorCreationCommand, visioConnectorEdges, visioConnectorEndHandles, visioConnectorMovePreviews, visioConnectorPreviewPath, visioConnectorRouteOf, visioContainerCommand, visioCopyableShape, visioDataGraphicEdits, visioDataGraphicFields, visioDataGraphicMarker, visioDataGraphicParts, visioDataTable, visioDrawBounds, visioDrawIsLargeEnough, visioDrawPlan, visioDrawingPoint, visioDuplicateCommand, visioFileMasterDropCommand, visioFillPatternTransform, visioFitToDrawingEdits, visioFollowTarget, visioFontFamilies, visioFormatPainterEdits, visioFormatPainterSnapshot, visioFormatTargetShape, visioFormattingShape, visioGlowKey, visioGlueableShape, visioGradientInstances, visioGridSteps, visioGroupCommand, visioGuideCreateCommand, visioGuideMoveCommand, visioKeepAutoSize, visioLayerAssignCommand, visioLayerAssignCommands, visioLayerAssignState, visioLegendEdits, visioLineCreationCommand, visioLineDashLengths, visioLocalFormattingShape, visioLocalRotationShape, visioMarqueeBox, visioMarqueeSelection, visioMasterDropCommand, visioMasterDropRefusal, visioMasterDropSize, visioMasterPreviewBox, visioMatchingPaperSize, visioMovableGroup, visioMoveCommands, visioMovePreviewTransform, visioMoveTargets, visioMovementShape, visioNearestConnectionPoint, visioNewLayerNames, visioNewPageId, visioNextShapeId, visioNudgeCommands, visioOrderingShape, visioOrientationEdits, visioPageBreaks, visioPageConnectionPoints, visioPageDecorationState, visioPageDragDelta, visioPageEditToDrawing, visioPageGuides, visioPageInsertCommand, visioPageMasters, visioPageOrientationCommand, visioPageSizeCommand, visioPageSizePresetCommand, visioPageSizePresetEdits, visioPageSizeState, visioPaperSize, visioParseRange, visioPasteCommand, visioPasteTextCommand, visioPasteTextValue, visioPathDrawPlan, visioPathPreview, visioPictureInsertCommand, visioPrintTile, visioQuarterTurnCommand, visioReLayoutCommands, visioReflectionKey, visioRemoveDataGraphicEdits, visioRenderedGradientStopCount, visioRenderedGradientStops, visioResizeDrag, visioResizeFrame, visioResizeShape, visioRotationPreviewTransform, visioRotationShape, visioRulerDensityFactor, visioRulerGridEdits, visioRulerGridValues, visioSceneToLocal, visioSelectByType, visioSelectionIsOnPage, visioShadowPreset, visioShapeDataNumber, visioShapeDataRow, visioShapeDataText, visioShapeEffectValues, visioShapeFormattingState, visioShapeLocalPoint, visioShapePageBox, visioShapeReport, visioShapeReportCsv, visioShapeReportTable, visioShapeReportText, visioShapeSelectType, visioShapeSnapBox, visioSizePositionCommand, visioSizePositionState, visioSnapMoveDelta, visioStencilDropCommand, visioStencilInstanceShape, visioStencilShape, visioStencilSubShape, visioStraightLineHandles, visioStrokeGradient, visioStyleFormattingShape, visioSubprocessCommand, visioSvgStrokeStyle, visioTextAppendEdit, visioTextBlockDrag, visioTextBlockEdit, visioTextBlockFrame, visioTextBlockMatrix, visioTextBlockShape, visioTextDialogPatch, visioTextDialogValues, visioTextDraftEdit, visioTextFontStepCommand, visioTextFormattingState, visioTextIndentCommand, visioTextOccurrenceSelection, visioTextReplaceCommands, visioTextReplaceFindNext, visioTextReplaceOccurrences, visioTextReplacePlan, visioTextShape, visioTextSource, visioUngroupCommand, visioWithCalloutLeaders, visioWithContainerMembers, visioWithDataGraphics, visioWorkbookGrid };
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../xlsx/edit/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,SAAS,EAAkB,MAAM,YAAY,CAAC;AAE9E,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErE,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,MAAM,WAAW,OAAO;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kFAAkF;IAClF,IAAI,CAAC,EAAE,QAAQ,CAAC;CAChB;AAED,2DAA2D;AAC3D,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,GAAG,CAAC,CAAC,EACJ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,SAAS,EAAE,EACnB,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,SAAS,YAAY,EAAE,KAAK,CAAC,EACjD,IAAI,CAAC,EAAE,OAAO,GACZ,CAAC,CAAC;CACL;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAIpE;AAED,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK1F;AAED,uFAAuF;AACvF,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAQ3E;AAED,qFAAqF;AACrF,eAAO,MAAM,cAAc,UAAW,SAAS,KAAG,OACA,CAAC;AACnD,eAAO,MAAM,WAAW,UAAW,SAAS,KAAG,OACG,CAAC;AAEnD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAUpF;AAKD,0FAA0F;AAC1F,wBAAgB,eAAe,CAC9B,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,GACvC,IAAI,CAON;AAED,mEAAmE;AACnE,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,GAAG,MAAM,CAIxD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAKhD;AAED,0DAA0D;AAC1D,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAQ1E"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../xlsx/edit/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,SAAS,EAAkB,MAAM,YAAY,CAAC;AAE9E,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErE,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,MAAM,WAAW,OAAO;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kFAAkF;IAClF,IAAI,CAAC,EAAE,QAAQ,CAAC;CAChB;AAED,2DAA2D;AAC3D,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,GAAG,CAAC,CAAC,EACJ,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,SAAS,EAAE,EACnB,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,SAAS,YAAY,EAAE,KAAK,CAAC,EACjD,IAAI,CAAC,EAAE,OAAO,GACZ,CAAC,CAAC;CACL;AAED,wBAAgB,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAMpE;AAED,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK1F;AAED,uFAAuF;AACvF,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAQ3E;AAED,qFAAqF;AACrF,eAAO,MAAM,cAAc,UAAW,SAAS,KAAG,OACA,CAAC;AACnD,eAAO,MAAM,WAAW,UAAW,SAAS,KAAG,OACG,CAAC;AAEnD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,CAUpF;AAKD,0FAA0F;AAC1F,wBAAgB,eAAe,CAC9B,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,GACvC,IAAI,CAON;AAED,mEAAmE;AACnE,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,GAAG,MAAM,CAIxD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAKhD;AAED,0DAA0D;AAC1D,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAQ1E"}
@@ -1 +1 @@
1
- {"version":3,"file":"slicers.d.ts","sourceRoot":"","sources":["../../../xlsx/edit/slicers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAMX,QAAQ,EAER,MAAM,UAAU,CAAC;AAKlB,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,WAAW,CAAC;AAmBtD;;;GAGG;AACH,wBAAgB,kBAAkB,CACjC,GAAG,EAAE,WAAW,EAChB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,GAC5B,IAAI,CAuCN;AAED,iEAAiE;AACjE,eAAO,MAAM,gBAAgB,aAAc,QAAQ,aAAa,MAAM,KAAG,MAAM,EAGrD,CAAC;AAE3B,MAAM,WAAW,WAAW;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,WAAW,GAAG,YAAY,CAAC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,qGAAqG;AACrG,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAqCrF;AAaD,MAAM,MAAM,eAAe,GACxB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAUnD,4FAA4F;AAC5F,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,GAAG,MAAM,CAmGtF;AAED,+FAA+F;AAC/F,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAUjE"}
1
+ {"version":3,"file":"slicers.d.ts","sourceRoot":"","sources":["../../../xlsx/edit/slicers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAMX,QAAQ,EAER,MAAM,UAAU,CAAC;AAKlB,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,WAAW,CAAC;AAmBtD;;;GAGG;AACH,wBAAgB,kBAAkB,CACjC,GAAG,EAAE,WAAW,EAChB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,GAC5B,IAAI,CAuCN;AAED,iEAAiE;AACjE,eAAO,MAAM,gBAAgB,aAAc,QAAQ,aAAa,MAAM,KAAG,MAAM,EAGrD,CAAC;AAE3B,MAAM,WAAW,WAAW;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,WAAW,GAAG,YAAY,CAAC;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,qGAAqG;AACrG,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAqCrF;AAaD,MAAM,MAAM,eAAe,GACxB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAUnD,4FAA4F;AAC5F,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,GAAG,MAAM,CAsGtF;AAED,+FAA+F;AAC/F,wBAAgB,YAAY,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAUjE"}
@@ -1 +1 @@
1
- {"version":3,"file":"timelines.d.ts","sourceRoot":"","sources":["../../../xlsx/edit/timelines.ts"],"names":[],"mappings":"AAMA,OAAO,EAAkC,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpG,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,WAAW,CAAC;AAWtD;;;GAGG;AACH,wBAAgB,oBAAoB,CACnC,GAAG,EAAE,WAAW,EAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,iBAAiB,GAAG,IAAI,GACjC,IAAI,CAiCN;AAED,MAAM,WAAW,aAAa;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAmCzF;AAED,wFAAwF;AACxF,wBAAgB,cAAc,CAC7B,GAAG,EAAE,WAAW,EAChB,CAAC,EAAE,MAAM,EACT,GAAG,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnC,MAAM,CAyGR;AAED,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAgBnE"}
1
+ {"version":3,"file":"timelines.d.ts","sourceRoot":"","sources":["../../../xlsx/edit/timelines.ts"],"names":[],"mappings":"AAMA,OAAO,EAAkC,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEpG,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,WAAW,CAAC;AAWtD;;;GAGG;AACH,wBAAgB,oBAAoB,CACnC,GAAG,EAAE,WAAW,EAChB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,iBAAiB,GAAG,IAAI,GACjC,IAAI,CAiCN;AAED,MAAM,WAAW,aAAa;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAmCzF;AAED,wFAAwF;AACxF,wBAAgB,cAAc,CAC7B,GAAG,EAAE,WAAW,EAChB,CAAC,EAAE,MAAM,EACT,GAAG,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACnC,MAAM,CA4GR;AAED,2FAA2F;AAC3F,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAgBnE"}
@@ -11736,15 +11736,34 @@ var DEFAULT_XML_LIMITS = {
11736
11736
  maxDepth: 512,
11737
11737
  maxNodes: 5e6
11738
11738
  };
11739
- var MARKUP_RE = /<!--[\s\S]*?-->|<!\[CDATA\[[\s\S]*?\]\]>|<\?[\s\S]*?\?>|<(\/?)([^\s\/>]+)(?:\s+[^\s=\/>]+\s*=\s*(?:"[^"]*"|'[^']*'))*\s*(\/?)>/g;
11739
+ var TAG_RE = /<(\/?)([^\s\/><]+)(?:\s+[^\s=\/><]+\s*=\s*(?:"[^"<]*"|'[^'<]*'))*\s*(\/?)>/y;
11740
+ var MARKUP_SKIPS = [
11741
+ ["<!--", "-->"],
11742
+ ["<![CDATA[", "]]>"],
11743
+ ["<?", "?>"]
11744
+ ];
11740
11745
  function checkXmlLimits(xml, label2, limits = {}) {
11741
11746
  const maxDepth = limits.maxDepth ?? DEFAULT_XML_LIMITS.maxDepth;
11742
11747
  const maxNodes = limits.maxNodes ?? DEFAULT_XML_LIMITS.maxNodes;
11743
11748
  let depth = 0;
11744
11749
  let nodes = 0;
11745
- for (const match2 of xml.matchAll(MARKUP_RE)) {
11746
- const [, closing, name, selfClosing] = match2;
11747
- if (name === void 0) continue;
11750
+ let at = xml.indexOf("<");
11751
+ while (at !== -1) {
11752
+ const skip = MARKUP_SKIPS.find(([open]) => xml.startsWith(open, at));
11753
+ if (skip) {
11754
+ const end = xml.indexOf(skip[1], at + skip[0].length);
11755
+ if (end === -1) return;
11756
+ at = xml.indexOf("<", end + skip[1].length);
11757
+ continue;
11758
+ }
11759
+ TAG_RE.lastIndex = at;
11760
+ const match2 = TAG_RE.exec(xml);
11761
+ if (!match2) {
11762
+ at = xml.indexOf("<", at + 1);
11763
+ continue;
11764
+ }
11765
+ const [, closing, , selfClosing] = match2;
11766
+ at = xml.indexOf("<", at + match2[0].length);
11748
11767
  if (closing) {
11749
11768
  depth--;
11750
11769
  continue;
@@ -29517,9 +29536,17 @@ function pivotTableXml(source2, cacheId, cache3) {
29517
29536
  }
29518
29537
  return XML_HEADER + buildXml(root);
29519
29538
  }
29539
+ function firstFilterTag(xml) {
29540
+ for (let at = xml.indexOf("<filter"); at !== -1; at = xml.indexOf("<filter", at + 1)) {
29541
+ if (!/\s/.test(xml.charAt(at + 7))) continue;
29542
+ const end = xml.indexOf(">", at);
29543
+ return end === -1 ? "" : xml.slice(at, end + 1);
29544
+ }
29545
+ return "";
29546
+ }
29520
29547
  function dateFilterXml(pivot, filter2) {
29521
29548
  const x15 = "http://schemas.microsoft.com/office/spreadsheetml/2010/11/main";
29522
- const id = Number(/<filter [^>]*\bid="(\d+)"/.exec(pivot.sourceXml ?? "")?.[1] ?? 1);
29549
+ const id = Number(/\bid="(\d+)"/.exec(firstFilterTag(pivot.sourceXml ?? ""))?.[1] ?? 1);
29523
29550
  return `<filters count="1"><filter${attrs({ fld: pivot.fields.indexOf(filter2.field), type: "dateBetween", evalOrder: -1, id, name: filter2.field })}><autoFilter ref="A1"><filterColumn colId="0"><customFilters and="1"><customFilter operator="greaterThanOrEqual" val="${Math.floor(filter2.start)}"/><customFilter operator="lessThanOrEqual" val="${Math.floor(filter2.end)}"/></customFilters></filterColumn></autoFilter><extLst><ext uri="{0605FD5F-26C8-4aeb-8148-2DB25E43C511}" xmlns:x15="${x15}"><x15:pivotFilter useWholeDay="1"/></ext></extLst></filter></filters>`;
29524
29551
  }
29525
29552
 
@@ -29621,7 +29648,7 @@ var PivotWritePlan = class {
29621
29648
 
29622
29649
  // xlsx/edit/context.ts
29623
29650
  function sheetAt(workbook, index3) {
29624
- const sheet = Number.isInteger(index3) ? workbook.sheets[index3] : void 0;
29651
+ const sheet = Number.isInteger(index3) && index3 >= 0 ? workbook.sheets.at(index3) : void 0;
29625
29652
  if (!sheet) throw new RangeError(`No sheet at index ${index3}`);
29626
29653
  return sheet;
29627
29654
  }
@@ -34378,18 +34405,18 @@ function addScenario(ctx, s, draft) {
34378
34405
  }
34379
34406
  function editScenario(ctx, s, index3, draft) {
34380
34407
  const sheet = sheetAt(ctx.workbook, s);
34381
- const existing = scenariosOf(sheet)[index3];
34408
+ const existing = Number.isInteger(index3) ? scenariosOf(sheet)[index3] : void 0;
34382
34409
  if (!existing) throw new ScenarioError("missing");
34383
34410
  if (existing.locked && sheet.protection) throw new ScenarioError("locked");
34384
34411
  const name = checkName(sheet, draft.name, index3);
34385
34412
  const scenario = build(ctx, sheet, draft, name);
34386
34413
  ctx.run("Edit scenario", "view", PARTS(s), () => {
34387
- sheet.scenarios.list[index3] = scenario;
34414
+ sheet.scenarios.list.splice(index3, 1, scenario);
34388
34415
  });
34389
34416
  }
34390
34417
  function deleteScenario(ctx, s, index3) {
34391
34418
  const sheet = sheetAt(ctx.workbook, s);
34392
- const existing = scenariosOf(sheet)[index3];
34419
+ const existing = Number.isInteger(index3) ? scenariosOf(sheet)[index3] : void 0;
34393
34420
  if (!existing) throw new ScenarioError("missing");
34394
34421
  if (existing.locked && sheet.protection) throw new ScenarioError("locked");
34395
34422
  ctx.run("Delete scenario", "view", PARTS(s), () => {
@@ -34407,7 +34434,7 @@ function deleteScenario(ctx, s, index3) {
34407
34434
  }
34408
34435
  function showScenario(ctx, s, index3) {
34409
34436
  const sheet = sheetAt(ctx.workbook, s);
34410
- const scenario = scenariosOf(sheet)[index3];
34437
+ const scenario = Number.isInteger(index3) ? scenariosOf(sheet)[index3] : void 0;
34411
34438
  if (!scenario) throw new ScenarioError("missing");
34412
34439
  const addresses = scenarioAddresses(scenario);
34413
34440
  const ranges = addresses.map((a2) => ({ start: a2, end: a2 }));
@@ -35188,7 +35215,10 @@ function insertTimeline(ctx, s, ref) {
35188
35215
  const id = Math.max(
35189
35216
  1,
35190
35217
  ...sheet.drawings.flatMap(
35191
- (d) => "sourceXml" in d && d.sourceXml ? [...d.sourceXml.matchAll(/cNvPr[^>]*\sid="(\d+)"/g)].map((m) => Number(m[1])) : []
35218
+ (d) => "sourceXml" in d && d.sourceXml ? [...d.sourceXml.matchAll(/<[\w:]*cNvPr\b[^>]*>/g)].flatMap((m) => {
35219
+ const id2 = /\sid="(\d+)"/.exec(m[0])?.[1];
35220
+ return id2 ? [Number(id2)] : [];
35221
+ }) : []
35192
35222
  )
35193
35223
  ) + 1;
35194
35224
  ctx.run(
@@ -35726,7 +35756,10 @@ function insertSlicer(ctx, s, ref) {
35726
35756
  const id = Math.max(
35727
35757
  1,
35728
35758
  ...sheet.drawings.flatMap(
35729
- (d) => "sourceXml" in d && d.sourceXml ? [...d.sourceXml.matchAll(/cNvPr[^>]*\sid="(\d+)"/g)].map((m) => Number(m[1])) : []
35759
+ (d) => "sourceXml" in d && d.sourceXml ? [...d.sourceXml.matchAll(/<[\w:]*cNvPr\b[^>]*>/g)].flatMap((m) => {
35760
+ const id2 = /\sid="(\d+)"/.exec(m[0])?.[1];
35761
+ return id2 ? [Number(id2)] : [];
35762
+ }) : []
35730
35763
  )
35731
35764
  ) + 1;
35732
35765
  ctx.run(