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
@@ -3207,15 +3207,34 @@ var DEFAULT_XML_LIMITS = {
3207
3207
  maxDepth: 512,
3208
3208
  maxNodes: 5e6
3209
3209
  };
3210
- var MARKUP_RE = /<!--[\s\S]*?-->|<!\[CDATA\[[\s\S]*?\]\]>|<\?[\s\S]*?\?>|<(\/?)([^\s\/>]+)(?:\s+[^\s=\/>]+\s*=\s*(?:"[^"]*"|'[^']*'))*\s*(\/?)>/g;
3210
+ var TAG_RE = /<(\/?)([^\s\/><]+)(?:\s+[^\s=\/><]+\s*=\s*(?:"[^"<]*"|'[^'<]*'))*\s*(\/?)>/y;
3211
+ var MARKUP_SKIPS = [
3212
+ ["<!--", "-->"],
3213
+ ["<![CDATA[", "]]>"],
3214
+ ["<?", "?>"]
3215
+ ];
3211
3216
  function checkXmlLimits(xml, label, limits = {}) {
3212
3217
  const maxDepth = limits.maxDepth ?? DEFAULT_XML_LIMITS.maxDepth;
3213
3218
  const maxNodes = limits.maxNodes ?? DEFAULT_XML_LIMITS.maxNodes;
3214
3219
  let depth = 0;
3215
3220
  let nodes = 0;
3216
- for (const match of xml.matchAll(MARKUP_RE)) {
3217
- const [, closing, name, selfClosing] = match;
3218
- if (name === void 0) continue;
3221
+ let at = xml.indexOf("<");
3222
+ while (at !== -1) {
3223
+ const skip = MARKUP_SKIPS.find(([open]) => xml.startsWith(open, at));
3224
+ if (skip) {
3225
+ const end = xml.indexOf(skip[1], at + skip[0].length);
3226
+ if (end === -1) return;
3227
+ at = xml.indexOf("<", end + skip[1].length);
3228
+ continue;
3229
+ }
3230
+ TAG_RE.lastIndex = at;
3231
+ const match = TAG_RE.exec(xml);
3232
+ if (!match) {
3233
+ at = xml.indexOf("<", at + 1);
3234
+ continue;
3235
+ }
3236
+ const [, closing, , selfClosing] = match;
3237
+ at = xml.indexOf("<", at + match[0].length);
3219
3238
  if (closing) {
3220
3239
  depth--;
3221
3240
  continue;
@@ -3201,15 +3201,34 @@ var DEFAULT_XML_LIMITS = {
3201
3201
  maxDepth: 512,
3202
3202
  maxNodes: 5e6
3203
3203
  };
3204
- var MARKUP_RE = /<!--[\s\S]*?-->|<!\[CDATA\[[\s\S]*?\]\]>|<\?[\s\S]*?\?>|<(\/?)([^\s\/>]+)(?:\s+[^\s=\/>]+\s*=\s*(?:"[^"]*"|'[^']*'))*\s*(\/?)>/g;
3204
+ var TAG_RE = /<(\/?)([^\s\/><]+)(?:\s+[^\s=\/><]+\s*=\s*(?:"[^"<]*"|'[^'<]*'))*\s*(\/?)>/y;
3205
+ var MARKUP_SKIPS = [
3206
+ ["<!--", "-->"],
3207
+ ["<![CDATA[", "]]>"],
3208
+ ["<?", "?>"]
3209
+ ];
3205
3210
  function checkXmlLimits(xml, label, limits = {}) {
3206
3211
  const maxDepth = limits.maxDepth ?? DEFAULT_XML_LIMITS.maxDepth;
3207
3212
  const maxNodes = limits.maxNodes ?? DEFAULT_XML_LIMITS.maxNodes;
3208
3213
  let depth = 0;
3209
3214
  let nodes = 0;
3210
- for (const match of xml.matchAll(MARKUP_RE)) {
3211
- const [, closing, name, selfClosing] = match;
3212
- if (name === void 0) continue;
3215
+ let at = xml.indexOf("<");
3216
+ while (at !== -1) {
3217
+ const skip = MARKUP_SKIPS.find(([open]) => xml.startsWith(open, at));
3218
+ if (skip) {
3219
+ const end = xml.indexOf(skip[1], at + skip[0].length);
3220
+ if (end === -1) return;
3221
+ at = xml.indexOf("<", end + skip[1].length);
3222
+ continue;
3223
+ }
3224
+ TAG_RE.lastIndex = at;
3225
+ const match = TAG_RE.exec(xml);
3226
+ if (!match) {
3227
+ at = xml.indexOf("<", at + 1);
3228
+ continue;
3229
+ }
3230
+ const [, closing, , selfClosing] = match;
3231
+ at = xml.indexOf("<", at + match[0].length);
3213
3232
  if (closing) {
3214
3233
  depth--;
3215
3234
  continue;
@@ -406,10 +406,18 @@ function isNonNegativeSafeInteger(value) {
406
406
  }
407
407
 
408
408
  // collab/identity.ts
409
+ function randomToken() {
410
+ const cryptoApi = globalThis.crypto;
411
+ if (cryptoApi?.getRandomValues) {
412
+ return cryptoApi.getRandomValues(new Uint32Array(2)).reduce((s, n2) => s + n2.toString(36), "").slice(0, 8);
413
+ }
414
+ return (fallbackCounter++).toString(36).padStart(8, "0");
415
+ }
416
+ var fallbackCounter = 0;
409
417
  function createClientId() {
410
418
  const cryptoApi = globalThis.crypto;
411
419
  if (cryptoApi?.randomUUID) return cryptoApi.randomUUID();
412
- return `c${Date.now().toString(36)}${Math.random().toString(36).slice(2, 10)}`;
420
+ return `c${Date.now().toString(36)}${randomToken()}`;
413
421
  }
414
422
  function clientKey(clientId) {
415
423
  if (!isValidId(clientId)) throw new Error("Invalid collaboration client ID");
@@ -780,15 +788,34 @@ var DEFAULT_XML_LIMITS = {
780
788
  maxDepth: 512,
781
789
  maxNodes: 5e6
782
790
  };
783
- var MARKUP_RE = /<!--[\s\S]*?-->|<!\[CDATA\[[\s\S]*?\]\]>|<\?[\s\S]*?\?>|<(\/?)([^\s\/>]+)(?:\s+[^\s=\/>]+\s*=\s*(?:"[^"]*"|'[^']*'))*\s*(\/?)>/g;
791
+ var TAG_RE = /<(\/?)([^\s\/><]+)(?:\s+[^\s=\/><]+\s*=\s*(?:"[^"<]*"|'[^'<]*'))*\s*(\/?)>/y;
792
+ var MARKUP_SKIPS = [
793
+ ["<!--", "-->"],
794
+ ["<![CDATA[", "]]>"],
795
+ ["<?", "?>"]
796
+ ];
784
797
  function checkXmlLimits(xml, label, limits = {}) {
785
798
  const maxDepth = limits.maxDepth ?? DEFAULT_XML_LIMITS.maxDepth;
786
799
  const maxNodes = limits.maxNodes ?? DEFAULT_XML_LIMITS.maxNodes;
787
800
  let depth = 0;
788
801
  let nodes = 0;
789
- for (const match of xml.matchAll(MARKUP_RE)) {
790
- const [, closing, name, selfClosing] = match;
791
- if (name === void 0) continue;
802
+ let at = xml.indexOf("<");
803
+ while (at !== -1) {
804
+ const skip = MARKUP_SKIPS.find(([open]) => xml.startsWith(open, at));
805
+ if (skip) {
806
+ const end = xml.indexOf(skip[1], at + skip[0].length);
807
+ if (end === -1) return;
808
+ at = xml.indexOf("<", end + skip[1].length);
809
+ continue;
810
+ }
811
+ TAG_RE.lastIndex = at;
812
+ const match = TAG_RE.exec(xml);
813
+ if (!match) {
814
+ at = xml.indexOf("<", at + 1);
815
+ continue;
816
+ }
817
+ const [, closing, , selfClosing] = match;
818
+ at = xml.indexOf("<", at + match[0].length);
792
819
  if (closing) {
793
820
  depth--;
794
821
  continue;
@@ -384,10 +384,18 @@ function isNonNegativeSafeInteger(value) {
384
384
  }
385
385
 
386
386
  // collab/identity.ts
387
+ function randomToken() {
388
+ const cryptoApi = globalThis.crypto;
389
+ if (cryptoApi?.getRandomValues) {
390
+ return cryptoApi.getRandomValues(new Uint32Array(2)).reduce((s, n2) => s + n2.toString(36), "").slice(0, 8);
391
+ }
392
+ return (fallbackCounter++).toString(36).padStart(8, "0");
393
+ }
394
+ var fallbackCounter = 0;
387
395
  function createClientId() {
388
396
  const cryptoApi = globalThis.crypto;
389
397
  if (cryptoApi?.randomUUID) return cryptoApi.randomUUID();
390
- return `c${Date.now().toString(36)}${Math.random().toString(36).slice(2, 10)}`;
398
+ return `c${Date.now().toString(36)}${randomToken()}`;
391
399
  }
392
400
  function clientKey(clientId) {
393
401
  if (!isValidId(clientId)) throw new Error("Invalid collaboration client ID");
@@ -758,15 +766,34 @@ var DEFAULT_XML_LIMITS = {
758
766
  maxDepth: 512,
759
767
  maxNodes: 5e6
760
768
  };
761
- var MARKUP_RE = /<!--[\s\S]*?-->|<!\[CDATA\[[\s\S]*?\]\]>|<\?[\s\S]*?\?>|<(\/?)([^\s\/>]+)(?:\s+[^\s=\/>]+\s*=\s*(?:"[^"]*"|'[^']*'))*\s*(\/?)>/g;
769
+ var TAG_RE = /<(\/?)([^\s\/><]+)(?:\s+[^\s=\/><]+\s*=\s*(?:"[^"<]*"|'[^'<]*'))*\s*(\/?)>/y;
770
+ var MARKUP_SKIPS = [
771
+ ["<!--", "-->"],
772
+ ["<![CDATA[", "]]>"],
773
+ ["<?", "?>"]
774
+ ];
762
775
  function checkXmlLimits(xml, label, limits = {}) {
763
776
  const maxDepth = limits.maxDepth ?? DEFAULT_XML_LIMITS.maxDepth;
764
777
  const maxNodes = limits.maxNodes ?? DEFAULT_XML_LIMITS.maxNodes;
765
778
  let depth = 0;
766
779
  let nodes = 0;
767
- for (const match of xml.matchAll(MARKUP_RE)) {
768
- const [, closing, name, selfClosing] = match;
769
- if (name === void 0) continue;
780
+ let at = xml.indexOf("<");
781
+ while (at !== -1) {
782
+ const skip = MARKUP_SKIPS.find(([open]) => xml.startsWith(open, at));
783
+ if (skip) {
784
+ const end = xml.indexOf(skip[1], at + skip[0].length);
785
+ if (end === -1) return;
786
+ at = xml.indexOf("<", end + skip[1].length);
787
+ continue;
788
+ }
789
+ TAG_RE.lastIndex = at;
790
+ const match = TAG_RE.exec(xml);
791
+ if (!match) {
792
+ at = xml.indexOf("<", at + 1);
793
+ continue;
794
+ }
795
+ const [, closing, , selfClosing] = match;
796
+ at = xml.indexOf("<", at + match[0].length);
770
797
  if (closing) {
771
798
  depth--;
772
799
  continue;
@@ -12,15 +12,34 @@ var DEFAULT_XML_LIMITS = {
12
12
  maxDepth: 512,
13
13
  maxNodes: 5e6
14
14
  };
15
- var MARKUP_RE = /<!--[\s\S]*?-->|<!\[CDATA\[[\s\S]*?\]\]>|<\?[\s\S]*?\?>|<(\/?)([^\s\/>]+)(?:\s+[^\s=\/>]+\s*=\s*(?:"[^"]*"|'[^']*'))*\s*(\/?)>/g;
15
+ var TAG_RE = /<(\/?)([^\s\/><]+)(?:\s+[^\s=\/><]+\s*=\s*(?:"[^"<]*"|'[^'<]*'))*\s*(\/?)>/y;
16
+ var MARKUP_SKIPS = [
17
+ ["<!--", "-->"],
18
+ ["<![CDATA[", "]]>"],
19
+ ["<?", "?>"]
20
+ ];
16
21
  function checkXmlLimits(xml, label, limits = {}) {
17
22
  const maxDepth = limits.maxDepth ?? DEFAULT_XML_LIMITS.maxDepth;
18
23
  const maxNodes = limits.maxNodes ?? DEFAULT_XML_LIMITS.maxNodes;
19
24
  let depth = 0;
20
25
  let nodes = 0;
21
- for (const match of xml.matchAll(MARKUP_RE)) {
22
- const [, closing, name, selfClosing] = match;
23
- if (name === void 0) continue;
26
+ let at = xml.indexOf("<");
27
+ while (at !== -1) {
28
+ const skip = MARKUP_SKIPS.find(([open]) => xml.startsWith(open, at));
29
+ if (skip) {
30
+ const end = xml.indexOf(skip[1], at + skip[0].length);
31
+ if (end === -1) return;
32
+ at = xml.indexOf("<", end + skip[1].length);
33
+ continue;
34
+ }
35
+ TAG_RE.lastIndex = at;
36
+ const match = TAG_RE.exec(xml);
37
+ if (!match) {
38
+ at = xml.indexOf("<", at + 1);
39
+ continue;
40
+ }
41
+ const [, closing, , selfClosing] = match;
42
+ at = xml.indexOf("<", at + match[0].length);
24
43
  if (closing) {
25
44
  depth--;
26
45
  continue;
@@ -10,15 +10,34 @@ var DEFAULT_XML_LIMITS = {
10
10
  maxDepth: 512,
11
11
  maxNodes: 5e6
12
12
  };
13
- var MARKUP_RE = /<!--[\s\S]*?-->|<!\[CDATA\[[\s\S]*?\]\]>|<\?[\s\S]*?\?>|<(\/?)([^\s\/>]+)(?:\s+[^\s=\/>]+\s*=\s*(?:"[^"]*"|'[^']*'))*\s*(\/?)>/g;
13
+ var TAG_RE = /<(\/?)([^\s\/><]+)(?:\s+[^\s=\/><]+\s*=\s*(?:"[^"<]*"|'[^'<]*'))*\s*(\/?)>/y;
14
+ var MARKUP_SKIPS = [
15
+ ["<!--", "-->"],
16
+ ["<![CDATA[", "]]>"],
17
+ ["<?", "?>"]
18
+ ];
14
19
  function checkXmlLimits(xml, label, limits = {}) {
15
20
  const maxDepth = limits.maxDepth ?? DEFAULT_XML_LIMITS.maxDepth;
16
21
  const maxNodes = limits.maxNodes ?? DEFAULT_XML_LIMITS.maxNodes;
17
22
  let depth = 0;
18
23
  let nodes = 0;
19
- for (const match of xml.matchAll(MARKUP_RE)) {
20
- const [, closing, name, selfClosing] = match;
21
- if (name === void 0) continue;
24
+ let at = xml.indexOf("<");
25
+ while (at !== -1) {
26
+ const skip = MARKUP_SKIPS.find(([open]) => xml.startsWith(open, at));
27
+ if (skip) {
28
+ const end = xml.indexOf(skip[1], at + skip[0].length);
29
+ if (end === -1) return;
30
+ at = xml.indexOf("<", end + skip[1].length);
31
+ continue;
32
+ }
33
+ TAG_RE.lastIndex = at;
34
+ const match = TAG_RE.exec(xml);
35
+ if (!match) {
36
+ at = xml.indexOf("<", at + 1);
37
+ continue;
38
+ }
39
+ const [, closing, , selfClosing] = match;
40
+ at = xml.indexOf("<", at + match[0].length);
22
41
  if (closing) {
23
42
  depth--;
24
43
  continue;
package/dist/index.cjs CHANGED
@@ -2226,15 +2226,34 @@ var DEFAULT_XML_LIMITS = {
2226
2226
  maxDepth: 512,
2227
2227
  maxNodes: 5e6
2228
2228
  };
2229
- var MARKUP_RE = /<!--[\s\S]*?-->|<!\[CDATA\[[\s\S]*?\]\]>|<\?[\s\S]*?\?>|<(\/?)([^\s\/>]+)(?:\s+[^\s=\/>]+\s*=\s*(?:"[^"]*"|'[^']*'))*\s*(\/?)>/g;
2229
+ var TAG_RE = /<(\/?)([^\s\/><]+)(?:\s+[^\s=\/><]+\s*=\s*(?:"[^"<]*"|'[^'<]*'))*\s*(\/?)>/y;
2230
+ var MARKUP_SKIPS = [
2231
+ ["<!--", "-->"],
2232
+ ["<![CDATA[", "]]>"],
2233
+ ["<?", "?>"]
2234
+ ];
2230
2235
  function checkXmlLimits(xml, label, limits = {}) {
2231
2236
  const maxDepth2 = limits.maxDepth ?? DEFAULT_XML_LIMITS.maxDepth;
2232
2237
  const maxNodes = limits.maxNodes ?? DEFAULT_XML_LIMITS.maxNodes;
2233
2238
  let depth = 0;
2234
2239
  let nodes = 0;
2235
- for (const match of xml.matchAll(MARKUP_RE)) {
2236
- const [, closing, name, selfClosing] = match;
2237
- if (name === void 0) continue;
2240
+ let at2 = xml.indexOf("<");
2241
+ while (at2 !== -1) {
2242
+ const skip = MARKUP_SKIPS.find(([open]) => xml.startsWith(open, at2));
2243
+ if (skip) {
2244
+ const end = xml.indexOf(skip[1], at2 + skip[0].length);
2245
+ if (end === -1) return;
2246
+ at2 = xml.indexOf("<", end + skip[1].length);
2247
+ continue;
2248
+ }
2249
+ TAG_RE.lastIndex = at2;
2250
+ const match = TAG_RE.exec(xml);
2251
+ if (!match) {
2252
+ at2 = xml.indexOf("<", at2 + 1);
2253
+ continue;
2254
+ }
2255
+ const [, closing, , selfClosing] = match;
2256
+ at2 = xml.indexOf("<", at2 + match[0].length);
2238
2257
  if (closing) {
2239
2258
  depth--;
2240
2259
  continue;
package/dist/index.mjs CHANGED
@@ -2220,15 +2220,34 @@ var DEFAULT_XML_LIMITS = {
2220
2220
  maxDepth: 512,
2221
2221
  maxNodes: 5e6
2222
2222
  };
2223
- var MARKUP_RE = /<!--[\s\S]*?-->|<!\[CDATA\[[\s\S]*?\]\]>|<\?[\s\S]*?\?>|<(\/?)([^\s\/>]+)(?:\s+[^\s=\/>]+\s*=\s*(?:"[^"]*"|'[^']*'))*\s*(\/?)>/g;
2223
+ var TAG_RE = /<(\/?)([^\s\/><]+)(?:\s+[^\s=\/><]+\s*=\s*(?:"[^"<]*"|'[^'<]*'))*\s*(\/?)>/y;
2224
+ var MARKUP_SKIPS = [
2225
+ ["<!--", "-->"],
2226
+ ["<![CDATA[", "]]>"],
2227
+ ["<?", "?>"]
2228
+ ];
2224
2229
  function checkXmlLimits(xml, label, limits = {}) {
2225
2230
  const maxDepth2 = limits.maxDepth ?? DEFAULT_XML_LIMITS.maxDepth;
2226
2231
  const maxNodes = limits.maxNodes ?? DEFAULT_XML_LIMITS.maxNodes;
2227
2232
  let depth = 0;
2228
2233
  let nodes = 0;
2229
- for (const match of xml.matchAll(MARKUP_RE)) {
2230
- const [, closing, name, selfClosing] = match;
2231
- if (name === void 0) continue;
2234
+ let at2 = xml.indexOf("<");
2235
+ while (at2 !== -1) {
2236
+ const skip = MARKUP_SKIPS.find(([open]) => xml.startsWith(open, at2));
2237
+ if (skip) {
2238
+ const end = xml.indexOf(skip[1], at2 + skip[0].length);
2239
+ if (end === -1) return;
2240
+ at2 = xml.indexOf("<", end + skip[1].length);
2241
+ continue;
2242
+ }
2243
+ TAG_RE.lastIndex = at2;
2244
+ const match = TAG_RE.exec(xml);
2245
+ if (!match) {
2246
+ at2 = xml.indexOf("<", at2 + 1);
2247
+ continue;
2248
+ }
2249
+ const [, closing, , selfClosing] = match;
2250
+ at2 = xml.indexOf("<", at2 + match[0].length);
2232
2251
  if (closing) {
2233
2252
  depth--;
2234
2253
  continue;
@@ -2122,15 +2122,34 @@ var DEFAULT_XML_LIMITS = {
2122
2122
  maxDepth: 512,
2123
2123
  maxNodes: 5e6
2124
2124
  };
2125
- var MARKUP_RE = /<!--[\s\S]*?-->|<!\[CDATA\[[\s\S]*?\]\]>|<\?[\s\S]*?\?>|<(\/?)([^\s\/>]+)(?:\s+[^\s=\/>]+\s*=\s*(?:"[^"]*"|'[^']*'))*\s*(\/?)>/g;
2125
+ var TAG_RE = /<(\/?)([^\s\/><]+)(?:\s+[^\s=\/><]+\s*=\s*(?:"[^"<]*"|'[^'<]*'))*\s*(\/?)>/y;
2126
+ var MARKUP_SKIPS = [
2127
+ ["<!--", "-->"],
2128
+ ["<![CDATA[", "]]>"],
2129
+ ["<?", "?>"]
2130
+ ];
2126
2131
  function checkXmlLimits(xml, label, limits = {}) {
2127
2132
  const maxDepth = limits.maxDepth ?? DEFAULT_XML_LIMITS.maxDepth;
2128
2133
  const maxNodes = limits.maxNodes ?? DEFAULT_XML_LIMITS.maxNodes;
2129
2134
  let depth = 0;
2130
2135
  let nodes = 0;
2131
- for (const match of xml.matchAll(MARKUP_RE)) {
2132
- const [, closing, name, selfClosing] = match;
2133
- if (name === void 0) continue;
2136
+ let at = xml.indexOf("<");
2137
+ while (at !== -1) {
2138
+ const skip = MARKUP_SKIPS.find(([open]) => xml.startsWith(open, at));
2139
+ if (skip) {
2140
+ const end = xml.indexOf(skip[1], at + skip[0].length);
2141
+ if (end === -1) return;
2142
+ at = xml.indexOf("<", end + skip[1].length);
2143
+ continue;
2144
+ }
2145
+ TAG_RE.lastIndex = at;
2146
+ const match = TAG_RE.exec(xml);
2147
+ if (!match) {
2148
+ at = xml.indexOf("<", at + 1);
2149
+ continue;
2150
+ }
2151
+ const [, closing, , selfClosing] = match;
2152
+ at = xml.indexOf("<", at + match[0].length);
2134
2153
  if (closing) {
2135
2154
  depth--;
2136
2155
  continue;
@@ -2120,15 +2120,34 @@ var DEFAULT_XML_LIMITS = {
2120
2120
  maxDepth: 512,
2121
2121
  maxNodes: 5e6
2122
2122
  };
2123
- var MARKUP_RE = /<!--[\s\S]*?-->|<!\[CDATA\[[\s\S]*?\]\]>|<\?[\s\S]*?\?>|<(\/?)([^\s\/>]+)(?:\s+[^\s=\/>]+\s*=\s*(?:"[^"]*"|'[^']*'))*\s*(\/?)>/g;
2123
+ var TAG_RE = /<(\/?)([^\s\/><]+)(?:\s+[^\s=\/><]+\s*=\s*(?:"[^"<]*"|'[^'<]*'))*\s*(\/?)>/y;
2124
+ var MARKUP_SKIPS = [
2125
+ ["<!--", "-->"],
2126
+ ["<![CDATA[", "]]>"],
2127
+ ["<?", "?>"]
2128
+ ];
2124
2129
  function checkXmlLimits(xml, label, limits = {}) {
2125
2130
  const maxDepth = limits.maxDepth ?? DEFAULT_XML_LIMITS.maxDepth;
2126
2131
  const maxNodes = limits.maxNodes ?? DEFAULT_XML_LIMITS.maxNodes;
2127
2132
  let depth = 0;
2128
2133
  let nodes = 0;
2129
- for (const match of xml.matchAll(MARKUP_RE)) {
2130
- const [, closing, name, selfClosing] = match;
2131
- if (name === void 0) continue;
2134
+ let at = xml.indexOf("<");
2135
+ while (at !== -1) {
2136
+ const skip = MARKUP_SKIPS.find(([open]) => xml.startsWith(open, at));
2137
+ if (skip) {
2138
+ const end = xml.indexOf(skip[1], at + skip[0].length);
2139
+ if (end === -1) return;
2140
+ at = xml.indexOf("<", end + skip[1].length);
2141
+ continue;
2142
+ }
2143
+ TAG_RE.lastIndex = at;
2144
+ const match = TAG_RE.exec(xml);
2145
+ if (!match) {
2146
+ at = xml.indexOf("<", at + 1);
2147
+ continue;
2148
+ }
2149
+ const [, closing, , selfClosing] = match;
2150
+ at = xml.indexOf("<", at + match[0].length);
2132
2151
  if (closing) {
2133
2152
  depth--;
2134
2153
  continue;
@@ -138,15 +138,34 @@ var DEFAULT_XML_LIMITS = {
138
138
  maxDepth: 512,
139
139
  maxNodes: 5e6
140
140
  };
141
- var MARKUP_RE = /<!--[\s\S]*?-->|<!\[CDATA\[[\s\S]*?\]\]>|<\?[\s\S]*?\?>|<(\/?)([^\s\/>]+)(?:\s+[^\s=\/>]+\s*=\s*(?:"[^"]*"|'[^']*'))*\s*(\/?)>/g;
141
+ var TAG_RE = /<(\/?)([^\s\/><]+)(?:\s+[^\s=\/><]+\s*=\s*(?:"[^"<]*"|'[^'<]*'))*\s*(\/?)>/y;
142
+ var MARKUP_SKIPS = [
143
+ ["<!--", "-->"],
144
+ ["<![CDATA[", "]]>"],
145
+ ["<?", "?>"]
146
+ ];
142
147
  function checkXmlLimits(xml, label, limits = {}) {
143
148
  const maxDepth = limits.maxDepth ?? DEFAULT_XML_LIMITS.maxDepth;
144
149
  const maxNodes = limits.maxNodes ?? DEFAULT_XML_LIMITS.maxNodes;
145
150
  let depth = 0;
146
151
  let nodes = 0;
147
- for (const match of xml.matchAll(MARKUP_RE)) {
148
- const [, closing, name, selfClosing] = match;
149
- if (name === void 0) continue;
152
+ let at = xml.indexOf("<");
153
+ while (at !== -1) {
154
+ const skip = MARKUP_SKIPS.find(([open]) => xml.startsWith(open, at));
155
+ if (skip) {
156
+ const end = xml.indexOf(skip[1], at + skip[0].length);
157
+ if (end === -1) return;
158
+ at = xml.indexOf("<", end + skip[1].length);
159
+ continue;
160
+ }
161
+ TAG_RE.lastIndex = at;
162
+ const match = TAG_RE.exec(xml);
163
+ if (!match) {
164
+ at = xml.indexOf("<", at + 1);
165
+ continue;
166
+ }
167
+ const [, closing, , selfClosing] = match;
168
+ at = xml.indexOf("<", at + match[0].length);
150
169
  if (closing) {
151
170
  depth--;
152
171
  continue;
@@ -132,15 +132,34 @@ var DEFAULT_XML_LIMITS = {
132
132
  maxDepth: 512,
133
133
  maxNodes: 5e6
134
134
  };
135
- var MARKUP_RE = /<!--[\s\S]*?-->|<!\[CDATA\[[\s\S]*?\]\]>|<\?[\s\S]*?\?>|<(\/?)([^\s\/>]+)(?:\s+[^\s=\/>]+\s*=\s*(?:"[^"]*"|'[^']*'))*\s*(\/?)>/g;
135
+ var TAG_RE = /<(\/?)([^\s\/><]+)(?:\s+[^\s=\/><]+\s*=\s*(?:"[^"<]*"|'[^'<]*'))*\s*(\/?)>/y;
136
+ var MARKUP_SKIPS = [
137
+ ["<!--", "-->"],
138
+ ["<![CDATA[", "]]>"],
139
+ ["<?", "?>"]
140
+ ];
136
141
  function checkXmlLimits(xml, label, limits = {}) {
137
142
  const maxDepth = limits.maxDepth ?? DEFAULT_XML_LIMITS.maxDepth;
138
143
  const maxNodes = limits.maxNodes ?? DEFAULT_XML_LIMITS.maxNodes;
139
144
  let depth = 0;
140
145
  let nodes = 0;
141
- for (const match of xml.matchAll(MARKUP_RE)) {
142
- const [, closing, name, selfClosing] = match;
143
- if (name === void 0) continue;
146
+ let at = xml.indexOf("<");
147
+ while (at !== -1) {
148
+ const skip = MARKUP_SKIPS.find(([open]) => xml.startsWith(open, at));
149
+ if (skip) {
150
+ const end = xml.indexOf(skip[1], at + skip[0].length);
151
+ if (end === -1) return;
152
+ at = xml.indexOf("<", end + skip[1].length);
153
+ continue;
154
+ }
155
+ TAG_RE.lastIndex = at;
156
+ const match = TAG_RE.exec(xml);
157
+ if (!match) {
158
+ at = xml.indexOf("<", at + 1);
159
+ continue;
160
+ }
161
+ const [, closing, , selfClosing] = match;
162
+ at = xml.indexOf("<", at + match[0].length);
144
163
  if (closing) {
145
164
  depth--;
146
165
  continue;
@@ -39375,9 +39375,23 @@ function checkXmlLimits(xml, label, limits = {}) {
39375
39375
  const maxNodes = limits.maxNodes ?? DEFAULT_XML_LIMITS.maxNodes;
39376
39376
  let depth = 0;
39377
39377
  let nodes = 0;
39378
- for (const match of xml.matchAll(MARKUP_RE)) {
39379
- const [, closing, name, selfClosing] = match;
39380
- if (name === void 0) continue;
39378
+ let at2 = xml.indexOf("<");
39379
+ while (at2 !== -1) {
39380
+ const skip = MARKUP_SKIPS.find(([open]) => xml.startsWith(open, at2));
39381
+ if (skip) {
39382
+ const end = xml.indexOf(skip[1], at2 + skip[0].length);
39383
+ if (end === -1) return;
39384
+ at2 = xml.indexOf("<", end + skip[1].length);
39385
+ continue;
39386
+ }
39387
+ TAG_RE.lastIndex = at2;
39388
+ const match = TAG_RE.exec(xml);
39389
+ if (!match) {
39390
+ at2 = xml.indexOf("<", at2 + 1);
39391
+ continue;
39392
+ }
39393
+ const [, closing, , selfClosing] = match;
39394
+ at2 = xml.indexOf("<", at2 + match[0].length);
39381
39395
  if (closing) {
39382
39396
  depth--;
39383
39397
  continue;
@@ -39418,7 +39432,7 @@ function named(element, local, ns, lenient = true) {
39418
39432
  function attr(element, local, ns, prefix) {
39419
39433
  return element?.getAttributeNS(ns, local) ?? element?.getAttribute(`${prefix}:${local}`) ?? void 0;
39420
39434
  }
39421
- var DEFAULT_XML_LIMITS, MARKUP_RE, buildXml, isElement, elements, children2, first, relAttr;
39435
+ var DEFAULT_XML_LIMITS, TAG_RE, MARKUP_SKIPS, buildXml, isElement, elements, children2, first, relAttr;
39422
39436
  var init_xml = __esm({
39423
39437
  "xml/xml.ts"() {
39424
39438
  init_namespaces();
@@ -39426,7 +39440,12 @@ var init_xml = __esm({
39426
39440
  maxDepth: 512,
39427
39441
  maxNodes: 5e6
39428
39442
  };
39429
- MARKUP_RE = /<!--[\s\S]*?-->|<!\[CDATA\[[\s\S]*?\]\]>|<\?[\s\S]*?\?>|<(\/?)([^\s\/>]+)(?:\s+[^\s=\/>]+\s*=\s*(?:"[^"]*"|'[^']*'))*\s*(\/?)>/g;
39443
+ TAG_RE = /<(\/?)([^\s\/><]+)(?:\s+[^\s=\/><]+\s*=\s*(?:"[^"<]*"|'[^'<]*'))*\s*(\/?)>/y;
39444
+ MARKUP_SKIPS = [
39445
+ ["<!--", "-->"],
39446
+ ["<![CDATA[", "]]>"],
39447
+ ["<?", "?>"]
39448
+ ];
39430
39449
  buildXml = (node) => new xmldom.XMLSerializer().serializeToString(node);
39431
39450
  isElement = (node) => node.nodeType === 1;
39432
39451
  elements = (parent) => Array.from(parent.childNodes).filter(isElement);
@@ -93326,9 +93345,9 @@ function prefixOf(qname) {
93326
93345
  function findOutOfScopePrefixes(xml) {
93327
93346
  const missing = /* @__PURE__ */ new Set();
93328
93347
  const stack = [];
93329
- TAG_RE.lastIndex = 0;
93348
+ TAG_RE2.lastIndex = 0;
93330
93349
  let m;
93331
- while (m = TAG_RE.exec(xml)) {
93350
+ while (m = TAG_RE2.exec(xml)) {
93332
93351
  if (m[1]) {
93333
93352
  stack.pop();
93334
93353
  continue;
@@ -93418,7 +93437,7 @@ function declareUsedNamespaces(xml) {
93418
93437
  const nameEnd = rootStart + 1 + (/^[^\s/>]+/.exec(rootTag2.slice(1))?.[0].length ?? 0);
93419
93438
  return xml.slice(0, nameEnd) + additions.join("") + xml.slice(nameEnd);
93420
93439
  }
93421
- var WELL_KNOWN_NAMESPACES, NAME, TAG_RE, ATTR_RE, USED_PREFIX_RE, DECL_RE;
93440
+ var WELL_KNOWN_NAMESPACES, NAME, TAG_RE2, ATTR_RE, USED_PREFIX_RE, DECL_RE;
93422
93441
  var init_xml_namespace_declarations = __esm({
93423
93442
  "pptx/core/utils/xml-namespace-declarations.ts"() {
93424
93443
  WELL_KNOWN_NAMESPACES = {
@@ -93458,7 +93477,7 @@ var init_xml_namespace_declarations = __esm({
93458
93477
  o: "urn:schemas-microsoft-com:office:office"
93459
93478
  };
93460
93479
  NAME = "[A-Za-z_][\\w.-]*";
93461
- TAG_RE = new RegExp(
93480
+ TAG_RE2 = new RegExp(
93462
93481
  `<(/?)(${NAME}(?::${NAME})?)((?:\\s+[^\\s=>/]+\\s*=\\s*(?:"[^"]*"|'[^']*'))*)\\s*(/?)>`,
93463
93482
  "g"
93464
93483
  );
@@ -1,9 +1,9 @@
1
- import { duplicateSlide, ThemePresets, getThemePreset, ChartBuilder, setChartDataPointStyle, setChartHelperLine, setChartColorMapOverride, listChartUserShapes, addChartUserShape, updateChartUserShape, removeChartUserShape, diffPresentations, findPlaceholders, applyTemplate, getSectionForSlide, moveSlidesToSection, reorderSections, removeSection, addSection, replaceWithCustomGeometry, replaceShapeGeometry, setElementLocked, findLayoutByName, findLayoutByType } from '../../chunk-C2Y6SZDN.mjs';
1
+ import { duplicateSlide, ThemePresets, getThemePreset, ChartBuilder, setChartDataPointStyle, setChartHelperLine, setChartColorMapOverride, listChartUserShapes, addChartUserShape, updateChartUserShape, removeChartUserShape, diffPresentations, findPlaceholders, applyTemplate, getSectionForSlide, moveSlidesToSection, reorderSections, removeSection, addSection, replaceWithCustomGeometry, replaceShapeGeometry, setElementLocked, findLayoutByName, findLayoutByType } from '../../chunk-YS43OMM3.mjs';
2
2
  import '../../chunk-6Q7TP72Y.mjs';
3
- import { mergePresentation } from '../../chunk-KOX5Y5E5.mjs';
4
- import { PptxMarkdownConverter } from '../../chunk-B37EVUMG.mjs';
5
- import { rebuildTableStructureInRawXml, TABLE_STYLE_PART_SEQUENCE, normalizeTableStyleGuid, createTableStyleEntry, addTableStyleToMap, deleteTableStyleFromMap, setChartType, setChartTitle, setChartGrouping, setChartLegend, setChartDataLabels, setChartAxis, setChartCategories, addChartSeries, removeChartSeries, updateChartSeriesValues, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, setChartSeriesMarker, setChartSeriesTrendline, setChartSeriesErrorBars, PptxHandler } from '../../chunk-WBCV52YV.mjs';
6
- import { hasTextProperties, resolveDisplayedChartTypeName, isTemplateElementId, makeStoreAwareId, reassignDescendantIds, groupElements, ungroupElements, decomposeSmartArt, demoteSmartArtNode, promoteSmartArtNode, reorderSmartArtNode, updateSmartArtNodeText, removeSmartArtNode, addSmartArtNode, SvgExporter, buildPptxJsonDocument, deserializePptxFromJson, applyImportedPptxData, validatePptx, repairPptx, resolveOleEditorKindFromPayload, getOleNestedDeckDetail, getOleDocumentParagraphs, getOleSheetGrid, applyOleSheetCellEdit, applyOleDocumentParagraphEdit, applyOleNestedDeckElementTextEdit, setOleObjectName, parseDataUrlToBytes, replaceOleFile, ELEMENT_FIELD_KIND, SLIDE_FIELD_KIND } from '../../chunk-LM6VBPQJ.mjs';
3
+ import { mergePresentation } from '../../chunk-UFGJNXRG.mjs';
4
+ import { PptxMarkdownConverter } from '../../chunk-A7S2NYAU.mjs';
5
+ import { rebuildTableStructureInRawXml, TABLE_STYLE_PART_SEQUENCE, normalizeTableStyleGuid, createTableStyleEntry, addTableStyleToMap, deleteTableStyleFromMap, setChartType, setChartTitle, setChartGrouping, setChartLegend, setChartDataLabels, setChartAxis, setChartCategories, addChartSeries, removeChartSeries, updateChartSeriesValues, setChartDataPointExplosion, setChartDataPointMarker, setChartDataPointLabel, setChartSeriesMarker, setChartSeriesTrendline, setChartSeriesErrorBars, PptxHandler } from '../../chunk-IM5LFEA2.mjs';
6
+ import { hasTextProperties, resolveDisplayedChartTypeName, isTemplateElementId, makeStoreAwareId, reassignDescendantIds, groupElements, ungroupElements, decomposeSmartArt, demoteSmartArtNode, promoteSmartArtNode, reorderSmartArtNode, updateSmartArtNodeText, removeSmartArtNode, addSmartArtNode, SvgExporter, buildPptxJsonDocument, deserializePptxFromJson, applyImportedPptxData, validatePptx, repairPptx, resolveOleEditorKindFromPayload, getOleNestedDeckDetail, getOleDocumentParagraphs, getOleSheetGrid, applyOleSheetCellEdit, applyOleDocumentParagraphEdit, applyOleNestedDeckElementTextEdit, setOleObjectName, parseDataUrlToBytes, replaceOleFile, ELEMENT_FIELD_KIND, SLIDE_FIELD_KIND } from '../../chunk-HLZIALC5.mjs';
7
7
  import '../../chunk-M4XLF4R7.mjs';
8
8
  import '../../chunk-3GXV5MPC.mjs';
9
9
  import { cloneElement } from '../../chunk-54S5A5PZ.mjs';