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
@@ -11901,6 +11901,12 @@ function parseLiteFragment(xml, container, namespaces) {
11901
11901
  }
11902
11902
  if (lt < 0) break;
11903
11903
  const next = source2.charCodeAt(lt + 1);
11904
+ if (next === 33) {
11905
+ const after = skipCommentOrCdata(source2, lt, top);
11906
+ if (after < 0) return void 0;
11907
+ pos = after;
11908
+ continue;
11909
+ }
11904
11910
  if (next === 47) {
11905
11911
  const gt = source2.indexOf(">", lt);
11906
11912
  if (gt < 0 || stack2.length < 2 || source2.slice(lt + 2, gt).trimEnd() !== top.tagName)
@@ -11921,6 +11927,25 @@ function parseLiteFragment(xml, container, namespaces) {
11921
11927
  }
11922
11928
  return stack2.length === 1 ? root : void 0;
11923
11929
  }
11930
+ var DECLARATIONS = /<!DOCTYPE|<!ENTITY/i;
11931
+ function skipCommentOrCdata(source2, lt, parent) {
11932
+ if (source2.startsWith("<!--", lt)) {
11933
+ const end = source2.indexOf("-->", lt + 4);
11934
+ if (end < 0) return -1;
11935
+ const body2 = source2.slice(lt + 4, end);
11936
+ if (body2.includes("--") || body2.endsWith("-") || DECLARATIONS.test(body2)) return -1;
11937
+ return end + 3;
11938
+ }
11939
+ if (source2.startsWith("<![CDATA[", lt)) {
11940
+ const end = source2.indexOf("]]>", lt + 9);
11941
+ if (end < 0) return -1;
11942
+ const text4 = source2.slice(lt + 9, end);
11943
+ if (DECLARATIONS.test(text4)) return -1;
11944
+ parent.childNodes.push(text4);
11945
+ return end + 3;
11946
+ }
11947
+ return -1;
11948
+ }
11924
11949
  function startTag(source2, from, namespaces) {
11925
11950
  const n2 = source2.length;
11926
11951
  let i2 = from;
@@ -24594,21 +24619,50 @@ function rootNamespaces(xml) {
24594
24619
  for (const match2 of (root[2] ?? "").matchAll(DECLARATION2)) out[match2[1] ?? ""] = match2[3] ?? "";
24595
24620
  return out;
24596
24621
  }
24622
+ var SPECIAL = /<[!?]/g;
24623
+ var SECTIONS = [
24624
+ ["<!--", "-->"],
24625
+ ["<![CDATA[", "]]>"],
24626
+ ["<?", "?>"]
24627
+ ];
24628
+ function blankComments(xml) {
24629
+ if (!xml.includes("<!--") && !xml.includes("<![CDATA[")) return xml;
24630
+ const pieces = [];
24631
+ let copied = 0;
24632
+ SPECIAL.lastIndex = 0;
24633
+ for (let match2 = SPECIAL.exec(xml); match2; match2 = SPECIAL.exec(xml)) {
24634
+ const at = match2.index;
24635
+ const section = SECTIONS.find(([open2]) => xml.startsWith(open2, at));
24636
+ if (!section) return void 0;
24637
+ const [open, close2] = section;
24638
+ const end = xml.indexOf(close2, at + open.length);
24639
+ if (end < 0) return void 0;
24640
+ const after = end + close2.length;
24641
+ if (open !== "<?") {
24642
+ pieces.push(xml.slice(copied, at), " ".repeat(after - at));
24643
+ copied = after;
24644
+ }
24645
+ SPECIAL.lastIndex = after;
24646
+ }
24647
+ pieces.push(xml.slice(copied));
24648
+ return pieces.join("");
24649
+ }
24597
24650
  function splitSheetData(xml) {
24598
- if (xml.includes("<!--") || xml.includes("<![CDATA[")) return void 0;
24599
- const namespaces = rootNamespaces(xml);
24600
- const open = OPEN.exec(xml);
24651
+ const plain3 = blankComments(xml);
24652
+ if (plain3 === void 0) return void 0;
24653
+ const namespaces = rootNamespaces(plain3);
24654
+ const open = OPEN.exec(plain3);
24601
24655
  if (!namespaces || !open) return void 0;
24602
24656
  const prefix = (open[1] ?? "").slice(0, -1);
24603
24657
  const ns = namespaces[prefix];
24604
24658
  if (prefix && ns === void 0) return void 0;
24605
24659
  const tagName = `${open[1] ?? ""}sheetData`;
24606
- const openEnd = xml.indexOf(">", open.index);
24660
+ const openEnd = plain3.indexOf(">", open.index);
24607
24661
  if (openEnd < 0) return void 0;
24608
- const attributes = xml.slice(open.index + tagName.length + 1, openEnd);
24662
+ const attributes = plain3.slice(open.index + tagName.length + 1, openEnd);
24609
24663
  if (attributes.trimEnd().endsWith("/") || attributes.includes("xmlns")) return void 0;
24610
- const close2 = xml.indexOf(`</${tagName}`, openEnd);
24611
- if (close2 < 0 || OPEN.test(xml.slice(openEnd))) return void 0;
24664
+ const close2 = plain3.indexOf(`</${tagName}`, openEnd);
24665
+ if (close2 < 0 || OPEN.test(plain3.slice(openEnd))) return void 0;
24612
24666
  const container = new LiteElement(tagName, "sheetData", ns || null);
24613
24667
  const data = parseLiteFragment(xml.slice(openEnd + 1, close2), container, namespaces);
24614
24668
  if (!data) return void 0;
@@ -33137,7 +33191,7 @@ function setColumnWidth(ctx, s, cols, width, measure3) {
33137
33191
  ctx.run(
33138
33192
  "Column width",
33139
33193
  "view",
33140
- [{ kind: "sheet", sheet: s }],
33194
+ [{ kind: "parts", sheet: s, parts: ["columns"] }],
33141
33195
  () => editColumns(sheet, cols, (info) => {
33142
33196
  const next = widths.get(info.min);
33143
33197
  if (next === void 0) {
@@ -33172,7 +33226,7 @@ function setRowHeight(ctx, s, rows2, height) {
33172
33226
  ctx.run(
33173
33227
  "Row height",
33174
33228
  "view",
33175
- [{ kind: "sheet", sheet: s }],
33229
+ [{ kind: "rowInfo", sheet: s, rows: rows2 }],
33176
33230
  () => {
33177
33231
  for (const row2 of rows2) {
33178
33232
  const info = { ...sheet.rowInfo.get(row2) };
@@ -33202,7 +33256,9 @@ function setHidden(ctx, s, axis, indices, hidden) {
33202
33256
  ctx.run(
33203
33257
  `${hidden ? "Hide" : "Unhide"} ${noun}`,
33204
33258
  "view",
33205
- [{ kind: "sheet", sheet: s }],
33259
+ [
33260
+ axis === "col" ? { kind: "parts", sheet: s, parts: ["columns"] } : { kind: "rowInfo", sheet: s, rows: indices }
33261
+ ],
33206
33262
  () => {
33207
33263
  if (axis === "col") {
33208
33264
  editColumns(sheet, indices, (info) => {
@@ -33796,6 +33852,19 @@ function shiftEdgeCells(sheet, spec2, phase) {
33796
33852
  return out;
33797
33853
  }
33798
33854
 
33855
+ // xlsx/edit/history-rows.ts
33856
+ function captureRowInfo(sheet, rows2) {
33857
+ return [...new Set(rows2)].map((row2) => {
33858
+ const info = sheet.rowInfo.get(row2);
33859
+ return [row2, info && structuredClone(info)];
33860
+ });
33861
+ }
33862
+ function restoreRowInfo(sheet, entries) {
33863
+ for (const [row2, info] of entries)
33864
+ if (info) sheet.rowInfo.set(row2, structuredClone(info));
33865
+ else sheet.rowInfo.delete(row2);
33866
+ }
33867
+
33799
33868
  // xlsx/edit/history.ts
33800
33869
  var SETTING_KEYS = [
33801
33870
  "structureLocked",
@@ -33880,6 +33949,8 @@ function captureScope(workbook, scope, before) {
33880
33949
  if (!sheet) throw new RangeError(`No sheet at index ${scope.sheet}`);
33881
33950
  if (scope.kind === "sheet")
33882
33951
  return { kind: "sheet", sheet: scope.sheet, data: structuredClone(sheet) };
33952
+ if (scope.kind === "rowInfo")
33953
+ return { kind: "rowInfo", sheet: scope.sheet, rows: captureRowInfo(sheet, scope.rows) };
33883
33954
  if (scope.kind === "parts") {
33884
33955
  const data = {};
33885
33956
  for (const part of scope.parts) if (sheet[part] !== void 0) data[part] = sheet[part];
@@ -33931,6 +34002,7 @@ function restoreSnapshot(workbook, snapshot) {
33931
34002
  }
33932
34003
  const sheet = workbook.sheets[snapshot.sheet];
33933
34004
  if (!sheet) return;
34005
+ if (snapshot.kind === "rowInfo") return restoreRowInfo(sheet, snapshot.rows);
33934
34006
  if (snapshot.kind === "parts") {
33935
34007
  const target2 = sheet;
33936
34008
  const data = structuredClone(snapshot.data);
@@ -36323,12 +36395,13 @@ function span2(from, to) {
36323
36395
  }
36324
36396
  function outlineRows(ctx, s, from, to, delta) {
36325
36397
  const sheet = sheetAt(ctx.workbook, s);
36398
+ const rows2 = span2(from, to);
36326
36399
  ctx.run(
36327
36400
  delta > 0 ? "Group rows" : "Ungroup rows",
36328
36401
  "structure",
36329
- [{ kind: "sheet", sheet: s }],
36402
+ [{ kind: "rowInfo", sheet: s, rows: rows2 }],
36330
36403
  () => {
36331
- for (const row2 of span2(from, to)) {
36404
+ for (const row2 of rows2) {
36332
36405
  const info = { ...sheet.rowInfo.get(row2) };
36333
36406
  const level2 = nextLevel(info.outlineLevel, delta);
36334
36407
  if (level2) info.outlineLevel = level2;
@@ -36348,7 +36421,7 @@ function outlineColumns(ctx, s, from, to, delta) {
36348
36421
  ctx.run(
36349
36422
  delta > 0 ? "Group columns" : "Ungroup columns",
36350
36423
  "structure",
36351
- [{ kind: "sheet", sheet: s }],
36424
+ [{ kind: "parts", sheet: s, parts: ["columns"] }],
36352
36425
  () => editColumns(sheet, span2(from, to), (info) => {
36353
36426
  const level2 = nextLevel(info.outlineLevel, delta);
36354
36427
  if (level2) info.outlineLevel = level2;
@@ -36371,7 +36444,7 @@ function setDefaultColumnWidth(ctx, s, width) {
36371
36444
  ctx.run(
36372
36445
  "Standard width",
36373
36446
  "format",
36374
- [{ kind: "sheet", sheet: s }],
36447
+ [{ kind: "parts", sheet: s, parts: ["defaultColWidth"] }],
36375
36448
  () => {
36376
36449
  if (width === void 0) Reflect.deleteProperty(sheet, "defaultColWidth");
36377
36450
  else sheet.defaultColWidth = width;
@@ -38955,10 +39028,11 @@ function autoGrowRows(ctx, s, rows2, measure3 = approximateMeasure) {
38955
39028
  updates.push([row2, next]);
38956
39029
  }
38957
39030
  if (!updates.length) return [];
39031
+ const changed = updates.map(([row2]) => row2);
38958
39032
  ctx.run(
38959
39033
  "Row height",
38960
39034
  "view",
38961
- [{ kind: "sheet", sheet: s }],
39035
+ [{ kind: "rowInfo", sheet: s, rows: changed }],
38962
39036
  () => {
38963
39037
  for (const [row2, height] of updates) {
38964
39038
  const info = { ...sheet.rowInfo.get(row2) };
@@ -38970,7 +39044,7 @@ function autoGrowRows(ctx, s, rows2, measure3 = approximateMeasure) {
38970
39044
  },
38971
39045
  { sheet: s, structural: true }
38972
39046
  );
38973
- return updates.map(([row2]) => row2);
39047
+ return changed;
38974
39048
  }
38975
39049
  var MAX_REFIT_ROWS = 1e4;
38976
39050
  function rowsToRefit(sheet, ranges) {
@@ -55333,6 +55407,53 @@ function applyThemeColors(host, previous, colors) {
55333
55407
  return Object.keys(vars);
55334
55408
  }
55335
55409
 
55410
+ // xlsx/ui/selection-format.ts
55411
+ function selectionFormatting(workbook, sheetIndex2, ranges) {
55412
+ const values2 = {
55413
+ bold: /* @__PURE__ */ new Set(),
55414
+ italic: /* @__PURE__ */ new Set(),
55415
+ underline: /* @__PURE__ */ new Set(),
55416
+ fontFamily: /* @__PURE__ */ new Set(),
55417
+ fontSize: /* @__PURE__ */ new Set(),
55418
+ alignment: /* @__PURE__ */ new Set(),
55419
+ numberFormat: /* @__PURE__ */ new Set()
55420
+ };
55421
+ const sheet = workbook?.sheets[sheetIndex2];
55422
+ let remaining = 4096;
55423
+ let complete = true;
55424
+ if (workbook && sheet)
55425
+ outer: for (const raw2 of ranges) {
55426
+ const range2 = normalizeRange(raw2);
55427
+ for (let row2 = range2.start.row; row2 <= range2.end.row; row2++) {
55428
+ for (let col = range2.start.col; col <= range2.end.col; col++) {
55429
+ if (--remaining < 0) {
55430
+ complete = false;
55431
+ break outer;
55432
+ }
55433
+ const style3 = styleAt(workbook, effectiveStyleId(sheet, row2, col));
55434
+ values2.bold.add(Boolean(style3.font.bold));
55435
+ values2.italic.add(Boolean(style3.font.italic));
55436
+ values2.underline.add(Boolean(style3.font.underline));
55437
+ values2.fontFamily.add(style3.font.name ?? "Aptos");
55438
+ values2.fontSize.add(style3.font.size ?? 11);
55439
+ values2.alignment.add(style3.alignment?.horizontal ?? "general");
55440
+ values2.numberFormat.add(style3.numFmt ?? "General");
55441
+ }
55442
+ }
55443
+ }
55444
+ const single = (set) => complete && set.size === 1 ? [...set][0] : null;
55445
+ return {
55446
+ bold: single(values2.bold),
55447
+ italic: single(values2.italic),
55448
+ underline: single(values2.underline),
55449
+ fontFamily: single(values2.fontFamily),
55450
+ fontSize: single(values2.fontSize),
55451
+ alignment: single(values2.alignment),
55452
+ numberFormat: single(values2.numberFormat),
55453
+ formattingComplete: complete
55454
+ };
55455
+ }
55456
+
55336
55457
  exports.ACCOUNTING_FORMATS = ACCOUNTING_FORMATS;
55337
55458
  exports.ALL_RANGE = ALL_RANGE;
55338
55459
  exports.AUTOSUM_FUNCTIONS = AUTOSUM_FUNCTIONS;
@@ -55514,6 +55635,7 @@ exports.selectCell = selectCell;
55514
55635
  exports.selectSpecial = selectSpecial;
55515
55636
  exports.selectTab = selectTab;
55516
55637
  exports.selectionCellCount = selectionCellCount;
55638
+ exports.selectionFormatting = selectionFormatting;
55517
55639
  exports.selectionRef = selectionRef;
55518
55640
  exports.setTabHidden = setTabHidden;
55519
55641
  exports.sheetBaseName = sheetBaseName;
@@ -57,4 +57,5 @@ export * from './theme/css-vars.js';
57
57
  export * from './theme/defaults.js';
58
58
  export * from './theme/element.js';
59
59
  export * from './theme/types.js';
60
+ export { selectionFormatting } from './selection-format.js';
60
61
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../xlsx/ui/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,0CAA0C,CAAC;AACzD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../xlsx/ui/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,0CAA0C,CAAC;AACzD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,eAAe,CAAC;AAC9B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -11895,6 +11895,12 @@ function parseLiteFragment(xml, container, namespaces) {
11895
11895
  }
11896
11896
  if (lt < 0) break;
11897
11897
  const next = source2.charCodeAt(lt + 1);
11898
+ if (next === 33) {
11899
+ const after = skipCommentOrCdata(source2, lt, top);
11900
+ if (after < 0) return void 0;
11901
+ pos = after;
11902
+ continue;
11903
+ }
11898
11904
  if (next === 47) {
11899
11905
  const gt = source2.indexOf(">", lt);
11900
11906
  if (gt < 0 || stack2.length < 2 || source2.slice(lt + 2, gt).trimEnd() !== top.tagName)
@@ -11915,6 +11921,25 @@ function parseLiteFragment(xml, container, namespaces) {
11915
11921
  }
11916
11922
  return stack2.length === 1 ? root : void 0;
11917
11923
  }
11924
+ var DECLARATIONS = /<!DOCTYPE|<!ENTITY/i;
11925
+ function skipCommentOrCdata(source2, lt, parent) {
11926
+ if (source2.startsWith("<!--", lt)) {
11927
+ const end = source2.indexOf("-->", lt + 4);
11928
+ if (end < 0) return -1;
11929
+ const body2 = source2.slice(lt + 4, end);
11930
+ if (body2.includes("--") || body2.endsWith("-") || DECLARATIONS.test(body2)) return -1;
11931
+ return end + 3;
11932
+ }
11933
+ if (source2.startsWith("<![CDATA[", lt)) {
11934
+ const end = source2.indexOf("]]>", lt + 9);
11935
+ if (end < 0) return -1;
11936
+ const text4 = source2.slice(lt + 9, end);
11937
+ if (DECLARATIONS.test(text4)) return -1;
11938
+ parent.childNodes.push(text4);
11939
+ return end + 3;
11940
+ }
11941
+ return -1;
11942
+ }
11918
11943
  function startTag(source2, from, namespaces) {
11919
11944
  const n2 = source2.length;
11920
11945
  let i2 = from;
@@ -24588,21 +24613,50 @@ function rootNamespaces(xml) {
24588
24613
  for (const match2 of (root[2] ?? "").matchAll(DECLARATION2)) out[match2[1] ?? ""] = match2[3] ?? "";
24589
24614
  return out;
24590
24615
  }
24616
+ var SPECIAL = /<[!?]/g;
24617
+ var SECTIONS = [
24618
+ ["<!--", "-->"],
24619
+ ["<![CDATA[", "]]>"],
24620
+ ["<?", "?>"]
24621
+ ];
24622
+ function blankComments(xml) {
24623
+ if (!xml.includes("<!--") && !xml.includes("<![CDATA[")) return xml;
24624
+ const pieces = [];
24625
+ let copied = 0;
24626
+ SPECIAL.lastIndex = 0;
24627
+ for (let match2 = SPECIAL.exec(xml); match2; match2 = SPECIAL.exec(xml)) {
24628
+ const at = match2.index;
24629
+ const section = SECTIONS.find(([open2]) => xml.startsWith(open2, at));
24630
+ if (!section) return void 0;
24631
+ const [open, close2] = section;
24632
+ const end = xml.indexOf(close2, at + open.length);
24633
+ if (end < 0) return void 0;
24634
+ const after = end + close2.length;
24635
+ if (open !== "<?") {
24636
+ pieces.push(xml.slice(copied, at), " ".repeat(after - at));
24637
+ copied = after;
24638
+ }
24639
+ SPECIAL.lastIndex = after;
24640
+ }
24641
+ pieces.push(xml.slice(copied));
24642
+ return pieces.join("");
24643
+ }
24591
24644
  function splitSheetData(xml) {
24592
- if (xml.includes("<!--") || xml.includes("<![CDATA[")) return void 0;
24593
- const namespaces = rootNamespaces(xml);
24594
- const open = OPEN.exec(xml);
24645
+ const plain3 = blankComments(xml);
24646
+ if (plain3 === void 0) return void 0;
24647
+ const namespaces = rootNamespaces(plain3);
24648
+ const open = OPEN.exec(plain3);
24595
24649
  if (!namespaces || !open) return void 0;
24596
24650
  const prefix = (open[1] ?? "").slice(0, -1);
24597
24651
  const ns = namespaces[prefix];
24598
24652
  if (prefix && ns === void 0) return void 0;
24599
24653
  const tagName = `${open[1] ?? ""}sheetData`;
24600
- const openEnd = xml.indexOf(">", open.index);
24654
+ const openEnd = plain3.indexOf(">", open.index);
24601
24655
  if (openEnd < 0) return void 0;
24602
- const attributes = xml.slice(open.index + tagName.length + 1, openEnd);
24656
+ const attributes = plain3.slice(open.index + tagName.length + 1, openEnd);
24603
24657
  if (attributes.trimEnd().endsWith("/") || attributes.includes("xmlns")) return void 0;
24604
- const close2 = xml.indexOf(`</${tagName}`, openEnd);
24605
- if (close2 < 0 || OPEN.test(xml.slice(openEnd))) return void 0;
24658
+ const close2 = plain3.indexOf(`</${tagName}`, openEnd);
24659
+ if (close2 < 0 || OPEN.test(plain3.slice(openEnd))) return void 0;
24606
24660
  const container = new LiteElement(tagName, "sheetData", ns || null);
24607
24661
  const data = parseLiteFragment(xml.slice(openEnd + 1, close2), container, namespaces);
24608
24662
  if (!data) return void 0;
@@ -33131,7 +33185,7 @@ function setColumnWidth(ctx, s, cols, width, measure3) {
33131
33185
  ctx.run(
33132
33186
  "Column width",
33133
33187
  "view",
33134
- [{ kind: "sheet", sheet: s }],
33188
+ [{ kind: "parts", sheet: s, parts: ["columns"] }],
33135
33189
  () => editColumns(sheet, cols, (info) => {
33136
33190
  const next = widths.get(info.min);
33137
33191
  if (next === void 0) {
@@ -33166,7 +33220,7 @@ function setRowHeight(ctx, s, rows2, height) {
33166
33220
  ctx.run(
33167
33221
  "Row height",
33168
33222
  "view",
33169
- [{ kind: "sheet", sheet: s }],
33223
+ [{ kind: "rowInfo", sheet: s, rows: rows2 }],
33170
33224
  () => {
33171
33225
  for (const row2 of rows2) {
33172
33226
  const info = { ...sheet.rowInfo.get(row2) };
@@ -33196,7 +33250,9 @@ function setHidden(ctx, s, axis, indices, hidden) {
33196
33250
  ctx.run(
33197
33251
  `${hidden ? "Hide" : "Unhide"} ${noun}`,
33198
33252
  "view",
33199
- [{ kind: "sheet", sheet: s }],
33253
+ [
33254
+ axis === "col" ? { kind: "parts", sheet: s, parts: ["columns"] } : { kind: "rowInfo", sheet: s, rows: indices }
33255
+ ],
33200
33256
  () => {
33201
33257
  if (axis === "col") {
33202
33258
  editColumns(sheet, indices, (info) => {
@@ -33790,6 +33846,19 @@ function shiftEdgeCells(sheet, spec2, phase) {
33790
33846
  return out;
33791
33847
  }
33792
33848
 
33849
+ // xlsx/edit/history-rows.ts
33850
+ function captureRowInfo(sheet, rows2) {
33851
+ return [...new Set(rows2)].map((row2) => {
33852
+ const info = sheet.rowInfo.get(row2);
33853
+ return [row2, info && structuredClone(info)];
33854
+ });
33855
+ }
33856
+ function restoreRowInfo(sheet, entries) {
33857
+ for (const [row2, info] of entries)
33858
+ if (info) sheet.rowInfo.set(row2, structuredClone(info));
33859
+ else sheet.rowInfo.delete(row2);
33860
+ }
33861
+
33793
33862
  // xlsx/edit/history.ts
33794
33863
  var SETTING_KEYS = [
33795
33864
  "structureLocked",
@@ -33874,6 +33943,8 @@ function captureScope(workbook, scope, before) {
33874
33943
  if (!sheet) throw new RangeError(`No sheet at index ${scope.sheet}`);
33875
33944
  if (scope.kind === "sheet")
33876
33945
  return { kind: "sheet", sheet: scope.sheet, data: structuredClone(sheet) };
33946
+ if (scope.kind === "rowInfo")
33947
+ return { kind: "rowInfo", sheet: scope.sheet, rows: captureRowInfo(sheet, scope.rows) };
33877
33948
  if (scope.kind === "parts") {
33878
33949
  const data = {};
33879
33950
  for (const part of scope.parts) if (sheet[part] !== void 0) data[part] = sheet[part];
@@ -33925,6 +33996,7 @@ function restoreSnapshot(workbook, snapshot) {
33925
33996
  }
33926
33997
  const sheet = workbook.sheets[snapshot.sheet];
33927
33998
  if (!sheet) return;
33999
+ if (snapshot.kind === "rowInfo") return restoreRowInfo(sheet, snapshot.rows);
33928
34000
  if (snapshot.kind === "parts") {
33929
34001
  const target2 = sheet;
33930
34002
  const data = structuredClone(snapshot.data);
@@ -36317,12 +36389,13 @@ function span2(from, to) {
36317
36389
  }
36318
36390
  function outlineRows(ctx, s, from, to, delta) {
36319
36391
  const sheet = sheetAt(ctx.workbook, s);
36392
+ const rows2 = span2(from, to);
36320
36393
  ctx.run(
36321
36394
  delta > 0 ? "Group rows" : "Ungroup rows",
36322
36395
  "structure",
36323
- [{ kind: "sheet", sheet: s }],
36396
+ [{ kind: "rowInfo", sheet: s, rows: rows2 }],
36324
36397
  () => {
36325
- for (const row2 of span2(from, to)) {
36398
+ for (const row2 of rows2) {
36326
36399
  const info = { ...sheet.rowInfo.get(row2) };
36327
36400
  const level2 = nextLevel(info.outlineLevel, delta);
36328
36401
  if (level2) info.outlineLevel = level2;
@@ -36342,7 +36415,7 @@ function outlineColumns(ctx, s, from, to, delta) {
36342
36415
  ctx.run(
36343
36416
  delta > 0 ? "Group columns" : "Ungroup columns",
36344
36417
  "structure",
36345
- [{ kind: "sheet", sheet: s }],
36418
+ [{ kind: "parts", sheet: s, parts: ["columns"] }],
36346
36419
  () => editColumns(sheet, span2(from, to), (info) => {
36347
36420
  const level2 = nextLevel(info.outlineLevel, delta);
36348
36421
  if (level2) info.outlineLevel = level2;
@@ -36365,7 +36438,7 @@ function setDefaultColumnWidth(ctx, s, width) {
36365
36438
  ctx.run(
36366
36439
  "Standard width",
36367
36440
  "format",
36368
- [{ kind: "sheet", sheet: s }],
36441
+ [{ kind: "parts", sheet: s, parts: ["defaultColWidth"] }],
36369
36442
  () => {
36370
36443
  if (width === void 0) Reflect.deleteProperty(sheet, "defaultColWidth");
36371
36444
  else sheet.defaultColWidth = width;
@@ -38949,10 +39022,11 @@ function autoGrowRows(ctx, s, rows2, measure3 = approximateMeasure) {
38949
39022
  updates.push([row2, next]);
38950
39023
  }
38951
39024
  if (!updates.length) return [];
39025
+ const changed = updates.map(([row2]) => row2);
38952
39026
  ctx.run(
38953
39027
  "Row height",
38954
39028
  "view",
38955
- [{ kind: "sheet", sheet: s }],
39029
+ [{ kind: "rowInfo", sheet: s, rows: changed }],
38956
39030
  () => {
38957
39031
  for (const [row2, height] of updates) {
38958
39032
  const info = { ...sheet.rowInfo.get(row2) };
@@ -38964,7 +39038,7 @@ function autoGrowRows(ctx, s, rows2, measure3 = approximateMeasure) {
38964
39038
  },
38965
39039
  { sheet: s, structural: true }
38966
39040
  );
38967
- return updates.map(([row2]) => row2);
39041
+ return changed;
38968
39042
  }
38969
39043
  var MAX_REFIT_ROWS = 1e4;
38970
39044
  function rowsToRefit(sheet, ranges) {
@@ -55327,4 +55401,51 @@ function applyThemeColors(host, previous, colors) {
55327
55401
  return Object.keys(vars);
55328
55402
  }
55329
55403
 
55330
- export { ACCOUNTING_FORMATS, ALL_RANGE, AUTOSUM_FUNCTIONS, BORDER_PRESETS, CATEGORIES, COLOR_SCALES, COMMAND_TABLES, CORE_FEATURE_STRINGS, CellViewCache, DATA_BAR_COLORS, DATE_CODES, DEFAULT_OPTIONS, DirtyState, EDITOR_LOCALES, EDITOR_THEME_MODES, EMBED_ASPECT, FONT_NAMES, FONT_SIZES, FORECAST_UNAVAILABLE, FORMAT_CELLS_STRINGS, FRACTION_CODES, FUNCTION_MENUS, GROUPED_CHART_TYPES, GridGeometry, HIGHLIGHT_STYLES, ICON_ACCENTS, ICON_PATHS, ICON_SETS, INSERT_CHART_TYPES, MARGIN_PRESETS, MAX_GRID_COLS, MAX_GRID_ROWS, MESSAGE_STRINGS, MORE_FUNCTION_CATEGORIES, NAVIGATION_STRINGS, ORIENTATIONS2 as ORIENTATIONS, PAPER_SIZES, QUADRANTS, RIBBON_HOME_STRINGS, RIBBON_TAB_STRINGS, RULES_STRINGS, SHEET_ICONS, SPECIAL_CODES, STRINGS, SYMBOLS, SheetSelections, TABLE_STYLES, TEMPLATES, THEME_KEYS, TIME_CODES, TOOLS_STRINGS, UNSET, absoluteReference, activeChart, activeRef, activeSlicer, activeStyle, activeTable, activeTimeline, addRange, alignItems, alignmentCommands, applyThemeColors, autoSumRange, buildChart, buildCode, buildItems, cellCommands, cellMenu, cellRange3 as cellRange, cellStyleItems, chartGridText, clampAddress, clipState, clipboardCommands, colSelected, colorScaleRule, colsOf, colsRange, columnHeaderHeight, columnHeaderMenu, commandStrings, contextualCommands, createCommandRegistry, createDialogRegistry, createEditBridge, createSelectionModel, createTemplateWorkbook, cssFont2 as cssFont, cssFontFamily, darkTheme, dataBarRule, dataCommands, detectCategory, diagonalSvg, dxfCss, edgeCss, editBridge, editChart, editing, editingCommands, evaluateRef, expandForMerges, extendSelection, fillPaint, fillSource, fillTemplate, findDefinedName2 as findDefinedName, findSpecial, fitNumber2 as fitNumber, fontCommands, formatNumber2 as formatNumber, formulaCommands, functionsIn, gridChart, gridChartSvg, gridChartWorkbook, guessHeader, hasBorders, hasWorkbook, hashes, helpTab, historyOf, icon, iconCount, iconSetRule, iconSvg, iconThresholds, initialSelection, insertFunctionCall, installFormatPainter, isBlankView, isMenuSeparator, isSingleCell, isTabHidden, isWholeCols, isWholeRows2 as isWholeRows, justify, lightTheme, measure2 as measure, moveWithinSelection, movingEnd, nameForRange, negativeCodes, normalizeEditorLocale, normalizeThemeMode, noteFunctionUse, numberCommands, numberFormatOptions, onRibbonTabsChange, pageBreakCommands, pageLayoutCommands, parseBorderArg, parseChartGrid, parseSelectionRef, parseSheetReference, pasteWith, patternImage, pickColor, rangeRef, readEmbeddedChart, recentFunctions, refresh, regionOf, registerRibbonTabs, repeatToFill, resetRibbonTabs, resolveNameBox, reviewTab, ribbonTabs, rowHeaderMenu, rowHeaderWidth, rowSelected, rowsOf, rowsRange, scrollToReveal, searchCommands, selectCell, selectSpecial, selectTab, selectionCellCount, selectionRef, setTabHidden, sheetBaseName, sheetLocked, slicerSourceAt, sortCommands, span3 as span, spanRange, stepFontSize, structureLocked, style2 as style, styleCssFont, tabButton, tabMenu, tableAt, tableStyleColor, tableStylePreview, target, textAlign, textDecoration, themePaletteItems, themeToCssVars, timelineSourceAt, translate, translator, viewTab, viewing, whatIfCommands, wholeColumns, wholeRows, withTarget };
55404
+ // xlsx/ui/selection-format.ts
55405
+ function selectionFormatting(workbook, sheetIndex2, ranges) {
55406
+ const values2 = {
55407
+ bold: /* @__PURE__ */ new Set(),
55408
+ italic: /* @__PURE__ */ new Set(),
55409
+ underline: /* @__PURE__ */ new Set(),
55410
+ fontFamily: /* @__PURE__ */ new Set(),
55411
+ fontSize: /* @__PURE__ */ new Set(),
55412
+ alignment: /* @__PURE__ */ new Set(),
55413
+ numberFormat: /* @__PURE__ */ new Set()
55414
+ };
55415
+ const sheet = workbook?.sheets[sheetIndex2];
55416
+ let remaining = 4096;
55417
+ let complete = true;
55418
+ if (workbook && sheet)
55419
+ outer: for (const raw2 of ranges) {
55420
+ const range2 = normalizeRange(raw2);
55421
+ for (let row2 = range2.start.row; row2 <= range2.end.row; row2++) {
55422
+ for (let col = range2.start.col; col <= range2.end.col; col++) {
55423
+ if (--remaining < 0) {
55424
+ complete = false;
55425
+ break outer;
55426
+ }
55427
+ const style3 = styleAt(workbook, effectiveStyleId(sheet, row2, col));
55428
+ values2.bold.add(Boolean(style3.font.bold));
55429
+ values2.italic.add(Boolean(style3.font.italic));
55430
+ values2.underline.add(Boolean(style3.font.underline));
55431
+ values2.fontFamily.add(style3.font.name ?? "Aptos");
55432
+ values2.fontSize.add(style3.font.size ?? 11);
55433
+ values2.alignment.add(style3.alignment?.horizontal ?? "general");
55434
+ values2.numberFormat.add(style3.numFmt ?? "General");
55435
+ }
55436
+ }
55437
+ }
55438
+ const single = (set) => complete && set.size === 1 ? [...set][0] : null;
55439
+ return {
55440
+ bold: single(values2.bold),
55441
+ italic: single(values2.italic),
55442
+ underline: single(values2.underline),
55443
+ fontFamily: single(values2.fontFamily),
55444
+ fontSize: single(values2.fontSize),
55445
+ alignment: single(values2.alignment),
55446
+ numberFormat: single(values2.numberFormat),
55447
+ formattingComplete: complete
55448
+ };
55449
+ }
55450
+
55451
+ export { ACCOUNTING_FORMATS, ALL_RANGE, AUTOSUM_FUNCTIONS, BORDER_PRESETS, CATEGORIES, COLOR_SCALES, COMMAND_TABLES, CORE_FEATURE_STRINGS, CellViewCache, DATA_BAR_COLORS, DATE_CODES, DEFAULT_OPTIONS, DirtyState, EDITOR_LOCALES, EDITOR_THEME_MODES, EMBED_ASPECT, FONT_NAMES, FONT_SIZES, FORECAST_UNAVAILABLE, FORMAT_CELLS_STRINGS, FRACTION_CODES, FUNCTION_MENUS, GROUPED_CHART_TYPES, GridGeometry, HIGHLIGHT_STYLES, ICON_ACCENTS, ICON_PATHS, ICON_SETS, INSERT_CHART_TYPES, MARGIN_PRESETS, MAX_GRID_COLS, MAX_GRID_ROWS, MESSAGE_STRINGS, MORE_FUNCTION_CATEGORIES, NAVIGATION_STRINGS, ORIENTATIONS2 as ORIENTATIONS, PAPER_SIZES, QUADRANTS, RIBBON_HOME_STRINGS, RIBBON_TAB_STRINGS, RULES_STRINGS, SHEET_ICONS, SPECIAL_CODES, STRINGS, SYMBOLS, SheetSelections, TABLE_STYLES, TEMPLATES, THEME_KEYS, TIME_CODES, TOOLS_STRINGS, UNSET, absoluteReference, activeChart, activeRef, activeSlicer, activeStyle, activeTable, activeTimeline, addRange, alignItems, alignmentCommands, applyThemeColors, autoSumRange, buildChart, buildCode, buildItems, cellCommands, cellMenu, cellRange3 as cellRange, cellStyleItems, chartGridText, clampAddress, clipState, clipboardCommands, colSelected, colorScaleRule, colsOf, colsRange, columnHeaderHeight, columnHeaderMenu, commandStrings, contextualCommands, createCommandRegistry, createDialogRegistry, createEditBridge, createSelectionModel, createTemplateWorkbook, cssFont2 as cssFont, cssFontFamily, darkTheme, dataBarRule, dataCommands, detectCategory, diagonalSvg, dxfCss, edgeCss, editBridge, editChart, editing, editingCommands, evaluateRef, expandForMerges, extendSelection, fillPaint, fillSource, fillTemplate, findDefinedName2 as findDefinedName, findSpecial, fitNumber2 as fitNumber, fontCommands, formatNumber2 as formatNumber, formulaCommands, functionsIn, gridChart, gridChartSvg, gridChartWorkbook, guessHeader, hasBorders, hasWorkbook, hashes, helpTab, historyOf, icon, iconCount, iconSetRule, iconSvg, iconThresholds, initialSelection, insertFunctionCall, installFormatPainter, isBlankView, isMenuSeparator, isSingleCell, isTabHidden, isWholeCols, isWholeRows2 as isWholeRows, justify, lightTheme, measure2 as measure, moveWithinSelection, movingEnd, nameForRange, negativeCodes, normalizeEditorLocale, normalizeThemeMode, noteFunctionUse, numberCommands, numberFormatOptions, onRibbonTabsChange, pageBreakCommands, pageLayoutCommands, parseBorderArg, parseChartGrid, parseSelectionRef, parseSheetReference, pasteWith, patternImage, pickColor, rangeRef, readEmbeddedChart, recentFunctions, refresh, regionOf, registerRibbonTabs, repeatToFill, resetRibbonTabs, resolveNameBox, reviewTab, ribbonTabs, rowHeaderMenu, rowHeaderWidth, rowSelected, rowsOf, rowsRange, scrollToReveal, searchCommands, selectCell, selectSpecial, selectTab, selectionCellCount, selectionFormatting, selectionRef, setTabHidden, sheetBaseName, sheetLocked, slicerSourceAt, sortCommands, span3 as span, spanRange, stepFontSize, structureLocked, style2 as style, styleCssFont, tabButton, tabMenu, tableAt, tableStyleColor, tableStylePreview, target, textAlign, textDecoration, themePaletteItems, themeToCssVars, timelineSourceAt, translate, translator, viewTab, viewing, whatIfCommands, wholeColumns, wholeRows, withTarget };
@@ -0,0 +1,13 @@
1
+ import { type CellRange, type Workbook } from '../index.js';
2
+ /** Flat formatting for host controls. null means mixed, or unexamined in a large selection. */
3
+ export declare function selectionFormatting(workbook: Workbook | undefined, sheetIndex: number, ranges: readonly CellRange[]): {
4
+ bold: boolean | null;
5
+ italic: boolean | null;
6
+ underline: boolean | null;
7
+ fontFamily: string | null;
8
+ fontSize: number | null;
9
+ alignment: string | null;
10
+ numberFormat: string | null;
11
+ formattingComplete: boolean;
12
+ };
13
+ //# sourceMappingURL=selection-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection-format.d.ts","sourceRoot":"","sources":["../../../xlsx/ui/selection-format.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGlF,+FAA+F;AAC/F,wBAAgB,mBAAmB,CAClC,QAAQ,EAAE,QAAQ,GAAG,SAAS,EAC9B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,SAAS,SAAS,EAAE;IAoC3B,IAAI;IACJ,MAAM;IACN,SAAS;IACT,UAAU;IACV,QAAQ;IACR,SAAS;IACT,YAAY;IACZ,kBAAkB;EAEnB"}
@@ -237,6 +237,12 @@ function parseLiteFragment(xml, container, namespaces) {
237
237
  }
238
238
  if (lt < 0) break;
239
239
  const next = source.charCodeAt(lt + 1);
240
+ if (next === 33) {
241
+ const after = skipCommentOrCdata(source, lt, top);
242
+ if (after < 0) return void 0;
243
+ pos = after;
244
+ continue;
245
+ }
240
246
  if (next === 47) {
241
247
  const gt = source.indexOf(">", lt);
242
248
  if (gt < 0 || stack.length < 2 || source.slice(lt + 2, gt).trimEnd() !== top.tagName)
@@ -257,6 +263,25 @@ function parseLiteFragment(xml, container, namespaces) {
257
263
  }
258
264
  return stack.length === 1 ? root : void 0;
259
265
  }
266
+ var DECLARATIONS = /<!DOCTYPE|<!ENTITY/i;
267
+ function skipCommentOrCdata(source, lt, parent) {
268
+ if (source.startsWith("<!--", lt)) {
269
+ const end = source.indexOf("-->", lt + 4);
270
+ if (end < 0) return -1;
271
+ const body = source.slice(lt + 4, end);
272
+ if (body.includes("--") || body.endsWith("-") || DECLARATIONS.test(body)) return -1;
273
+ return end + 3;
274
+ }
275
+ if (source.startsWith("<![CDATA[", lt)) {
276
+ const end = source.indexOf("]]>", lt + 9);
277
+ if (end < 0) return -1;
278
+ const text = source.slice(lt + 9, end);
279
+ if (DECLARATIONS.test(text)) return -1;
280
+ parent.childNodes.push(text);
281
+ return end + 3;
282
+ }
283
+ return -1;
284
+ }
260
285
  function startTag(source, from, namespaces) {
261
286
  const n = source.length;
262
287
  let i = from;
@@ -235,6 +235,12 @@ function parseLiteFragment(xml, container, namespaces) {
235
235
  }
236
236
  if (lt < 0) break;
237
237
  const next = source.charCodeAt(lt + 1);
238
+ if (next === 33) {
239
+ const after = skipCommentOrCdata(source, lt, top);
240
+ if (after < 0) return void 0;
241
+ pos = after;
242
+ continue;
243
+ }
238
244
  if (next === 47) {
239
245
  const gt = source.indexOf(">", lt);
240
246
  if (gt < 0 || stack.length < 2 || source.slice(lt + 2, gt).trimEnd() !== top.tagName)
@@ -255,6 +261,25 @@ function parseLiteFragment(xml, container, namespaces) {
255
261
  }
256
262
  return stack.length === 1 ? root : void 0;
257
263
  }
264
+ var DECLARATIONS = /<!DOCTYPE|<!ENTITY/i;
265
+ function skipCommentOrCdata(source, lt, parent) {
266
+ if (source.startsWith("<!--", lt)) {
267
+ const end = source.indexOf("-->", lt + 4);
268
+ if (end < 0) return -1;
269
+ const body = source.slice(lt + 4, end);
270
+ if (body.includes("--") || body.endsWith("-") || DECLARATIONS.test(body)) return -1;
271
+ return end + 3;
272
+ }
273
+ if (source.startsWith("<![CDATA[", lt)) {
274
+ const end = source.indexOf("]]>", lt + 9);
275
+ if (end < 0) return -1;
276
+ const text = source.slice(lt + 9, end);
277
+ if (DECLARATIONS.test(text)) return -1;
278
+ parent.childNodes.push(text);
279
+ return end + 3;
280
+ }
281
+ return -1;
282
+ }
258
283
  function startTag(source, from, namespaces) {
259
284
  const n = source.length;
260
285
  let i = from;