ooxml-ui 1.1.0 → 1.2.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 (159) hide show
  1. package/README.md +38 -36
  2. package/custom-elements.json +211 -4
  3. package/dist/chrome/ruler.d.ts +60 -2
  4. package/dist/chrome/ruler.d.ts.map +1 -1
  5. package/dist/chrome/status-bar.d.ts +3 -1
  6. package/dist/chrome/status-bar.d.ts.map +1 -1
  7. package/dist/{chunk-M5DTJSOV.js → chunk-7FNDOWTX.js} +393 -15
  8. package/dist/{chunk-KVKKXRL7.js → chunk-AYXFLBSV.js} +92 -13
  9. package/dist/{chunk-X7RINDJQ.js → chunk-JAJFLFAV.js} +1 -1
  10. package/dist/{chunk-3FPW7M6U.js → chunk-VUB44CAJ.js} +1 -1
  11. package/dist/{chunk-JFJXBYRD.js → chunk-XNCWB2X6.js} +5 -0
  12. package/dist/{chunk-BEN3453I.js → chunk-Y2E22JVO.js} +1 -1
  13. package/dist/{chunk-USDLALB5.js → chunk-YK2DPYMU.js} +1 -1
  14. package/dist/{chunk-ZU7GX4SY.js → chunk-YP5S7DTT.js} +6 -5
  15. package/dist/comments/comments-pane.d.ts +116 -0
  16. package/dist/comments/comments-pane.d.ts.map +1 -0
  17. package/dist/comments/types.d.ts +80 -0
  18. package/dist/comments/types.d.ts.map +1 -0
  19. package/dist/controls.d.ts +4 -2
  20. package/dist/controls.d.ts.map +1 -1
  21. package/dist/controls.js +4 -4
  22. package/dist/docx/comments-panel.d.ts +8 -1
  23. package/dist/docx/image-media.d.ts +1 -1
  24. package/dist/docx/locales/en-ribbon.d.ts +1 -0
  25. package/dist/docx/locales/en.d.ts +1 -0
  26. package/dist/docx/localization-strings.d.ts +1 -0
  27. package/dist/docx/localization.d.ts +7 -0
  28. package/dist/docx/print-layout.d.ts +2 -2
  29. package/dist/docx/print-picture.d.ts +12 -0
  30. package/dist/docx/review-controller.d.ts +2 -0
  31. package/dist/docx/ruler.d.ts +7 -10
  32. package/dist/docx.js +282 -322
  33. package/dist/form/gradient-preset-gallery.d.ts +2 -2
  34. package/dist/index.d.ts +1 -1
  35. package/dist/index.js +8 -8
  36. package/dist/pptx/{chart-3d-view-scene-2KRQ5667.mjs → chart-3d-view-scene-6B5TOWB6.mjs} +3 -3
  37. package/dist/pptx/{chart-3d-view-scene-36DMZWZ3.cjs → chart-3d-view-scene-MJ6YNT56.cjs} +37 -37
  38. package/dist/pptx/{chunk-YOGDIDPB.mjs → chunk-AWKKC3VW.mjs} +8 -2
  39. package/dist/pptx/{chunk-CJU4P5FT.cjs → chunk-STKGUT5S.cjs} +18 -12
  40. package/dist/pptx/{chunk-YHA6XAB3.cjs → chunk-XIQMFSNG.cjs} +1 -1
  41. package/dist/pptx/{chunk-YARCML7O.mjs → chunk-XQVKQD5Z.mjs} +294 -265
  42. package/dist/pptx/{chunk-Y2W4SZER.mjs → chunk-YI5LH5NN.mjs} +479 -336
  43. package/dist/pptx/{chunk-ADOC5JLI.mjs → chunk-YMTQLZ2I.mjs} +1 -1
  44. package/dist/pptx/{chunk-AIL3BNZS.cjs → chunk-YRHK45AB.cjs} +301 -265
  45. package/dist/pptx/{chunk-KPZWYF44.cjs → chunk-ZK344LOB.cjs} +629 -479
  46. package/dist/pptx/dom/elements/chart.d.ts +2 -3
  47. package/dist/pptx/dom/elements/chart.d.ts.map +1 -1
  48. package/dist/pptx/dom/elements/table.d.ts.map +1 -1
  49. package/dist/pptx/dom/index.cjs +254 -243
  50. package/dist/pptx/dom/index.mjs +26 -15
  51. package/dist/pptx/export/html2canvas-clone.cjs +2 -2
  52. package/dist/pptx/export/html2canvas-clone.mjs +1 -1
  53. package/dist/pptx/index.cjs +3025 -2993
  54. package/dist/pptx/index.mjs +4 -4
  55. package/dist/pptx/render/chart-axis-range.d.ts +7 -0
  56. package/dist/pptx/render/chart-axis-range.d.ts.map +1 -1
  57. package/dist/pptx/render/chart-axis-render.d.ts +3 -1
  58. package/dist/pptx/render/chart-axis-render.d.ts.map +1 -1
  59. package/dist/pptx/render/chart-axis-style.d.ts +5 -0
  60. package/dist/pptx/render/chart-axis-style.d.ts.map +1 -1
  61. package/dist/pptx/render/chart-axis.d.ts +1 -1
  62. package/dist/pptx/render/chart-axis.d.ts.map +1 -1
  63. package/dist/pptx/render/chart-cartesian-axes.d.ts.map +1 -1
  64. package/dist/pptx/render/chart-cartesian-bars.d.ts +3 -3
  65. package/dist/pptx/render/chart-cartesian-bars.d.ts.map +1 -1
  66. package/dist/pptx/render/chart-cartesian-percent-stacked.d.ts.map +1 -1
  67. package/dist/pptx/render/chart-cartesian.d.ts.map +1 -1
  68. package/dist/pptx/render/chart-combo-stock.cjs +3 -3
  69. package/dist/pptx/render/chart-combo-stock.mjs +1 -1
  70. package/dist/pptx/render/chart-combo.d.ts.map +1 -1
  71. package/dist/pptx/render/chart-gridlines-toggle.d.ts +13 -1
  72. package/dist/pptx/render/chart-gridlines-toggle.d.ts.map +1 -1
  73. package/dist/pptx/render/chart-helpers.d.ts +13 -13
  74. package/dist/pptx/render/chart-helpers.d.ts.map +1 -1
  75. package/dist/pptx/render/chart-horizontal-bars-helpers.d.ts +7 -3
  76. package/dist/pptx/render/chart-horizontal-bars-helpers.d.ts.map +1 -1
  77. package/dist/pptx/render/chart-horizontal-bars.d.ts.map +1 -1
  78. package/dist/pptx/render/chart-interaction-stacked.d.ts.map +1 -1
  79. package/dist/pptx/render/chart-overlays.cjs +7 -7
  80. package/dist/pptx/render/chart-overlays.mjs +1 -1
  81. package/dist/pptx/render/chart-palette.d.ts +5 -14
  82. package/dist/pptx/render/chart-palette.d.ts.map +1 -1
  83. package/dist/pptx/render/chart-quick-action-styles.d.ts +5 -3
  84. package/dist/pptx/render/chart-quick-action-styles.d.ts.map +1 -1
  85. package/dist/pptx/render/chart-scatter-x-axis.d.ts.map +1 -1
  86. package/dist/pptx/render/chart-style-palette.d.ts +52 -0
  87. package/dist/pptx/render/chart-style-palette.d.ts.map +1 -0
  88. package/dist/pptx/render/chart-surface-treemap.cjs +4 -4
  89. package/dist/pptx/render/chart-surface-treemap.mjs +1 -1
  90. package/dist/pptx/render/chart-view-model-bars.d.ts +31 -1
  91. package/dist/pptx/render/chart-view-model-bars.d.ts.map +1 -1
  92. package/dist/pptx/render/chart-view-model-build.d.ts.map +1 -1
  93. package/dist/pptx/render/chart-view-model.cjs +53 -41
  94. package/dist/pptx/render/chart-view-model.mjs +1 -1
  95. package/dist/pptx/render/chart-waterfall-map.cjs +6 -6
  96. package/dist/pptx/render/chart-waterfall-map.mjs +1 -1
  97. package/dist/pptx/render/foreign-object-svg-document.d.ts +12 -0
  98. package/dist/pptx/render/foreign-object-svg-document.d.ts.map +1 -1
  99. package/dist/pptx/render/index.d.ts +1 -0
  100. package/dist/pptx/render/index.d.ts.map +1 -1
  101. package/dist/pptx/render/table-cell-css.d.ts +3 -2
  102. package/dist/pptx/render/table-cell-css.d.ts.map +1 -1
  103. package/dist/pptx/render/table-cell-edit.d.ts +1 -1
  104. package/dist/pptx/render/table-cell-edit.d.ts.map +1 -1
  105. package/dist/pptx/render/table-cell-paragraphs.d.ts +29 -0
  106. package/dist/pptx/render/table-cell-paragraphs.d.ts.map +1 -0
  107. package/dist/pptx/render/table-style.d.ts +2 -0
  108. package/dist/pptx/render/table-style.d.ts.map +1 -1
  109. package/dist/pptx/render/title-bar.d.ts +5 -0
  110. package/dist/pptx/render/title-bar.d.ts.map +1 -1
  111. package/dist/pptx/render/viewer-root-options.d.ts +11 -3
  112. package/dist/pptx/render/viewer-root-options.d.ts.map +1 -1
  113. package/dist/pptx/web-components/office-token-bridge.d.ts.map +1 -1
  114. package/dist/presence.js +3 -3
  115. package/dist/ribbon/ribbon-tabs.d.ts +2 -1
  116. package/dist/ribbon/ribbon-tabs.d.ts.map +1 -1
  117. package/dist/smartart/smartart-svg.d.ts +3 -2
  118. package/dist/smartart.js +3 -3
  119. package/dist/suite/attachment-store.d.ts +13 -0
  120. package/dist/suite/document-store.d.ts +31 -0
  121. package/dist/suite/index.d.ts +2 -0
  122. package/dist/suite.js +132 -1
  123. package/dist/teams/app/channel-tab.d.ts +5 -0
  124. package/dist/teams/chat-composer.d.ts +3 -0
  125. package/dist/teams.js +6 -6
  126. package/dist/theme.js +2 -2
  127. package/dist/tokens.d.ts +5 -0
  128. package/dist/tokens.d.ts.map +1 -1
  129. package/dist/visio/styles/index.d.ts +2 -0
  130. package/dist/visio/styles/theme.d.ts +11 -0
  131. package/dist/visio/styles.d.ts +2 -2
  132. package/dist/visio.js +65 -20
  133. package/dist/xlsx/backstage/index.d.ts +4 -1
  134. package/dist/xlsx/backstage/pages-share.d.ts +19 -0
  135. package/dist/xlsx/backstage/parts.d.ts +3 -0
  136. package/dist/xlsx/chart-fill-binding.d.ts +2 -2
  137. package/dist/xlsx/chart-series-gradient-type.d.ts +3 -2
  138. package/dist/xlsx/collaboration-session.d.ts +9 -0
  139. package/dist/xlsx/collaboration-types.d.ts +41 -0
  140. package/dist/xlsx/collaboration.d.ts +56 -0
  141. package/dist/xlsx/component.d.ts +8 -0
  142. package/dist/xlsx/dialogs/comments-list.d.ts +4 -0
  143. package/dist/xlsx/dialogs/help-dialogs.d.ts +1 -1
  144. package/dist/xlsx/editor-core.d.ts +3 -0
  145. package/dist/xlsx/element-api.d.ts +19 -1
  146. package/dist/xlsx/events.d.ts +4 -1
  147. package/dist/xlsx/grid/remote-layer.d.ts +3 -0
  148. package/dist/xlsx/grid/sparkline.d.ts +3 -0
  149. package/dist/xlsx/grid/styles.d.ts +1 -1
  150. package/dist/xlsx/index.d.ts +1 -0
  151. package/dist/xlsx/ribbon-actions.d.ts +21 -0
  152. package/dist/xlsx/shell-commands.d.ts +1 -1
  153. package/dist/xlsx/title-bar.d.ts +4 -2
  154. package/dist/xlsx.js +712 -90
  155. package/package.json +2 -2
  156. package/dist/pptx/web-components/status-bar-styles.d.ts +0 -3
  157. package/dist/pptx/web-components/status-bar-styles.d.ts.map +0 -1
  158. package/dist/pptx/web-components/title-bar-styles.d.ts +0 -7
  159. package/dist/pptx/web-components/title-bar-styles.d.ts.map +0 -1
package/dist/docx.js CHANGED
@@ -1,14 +1,14 @@
1
- import { defineSmartArt } from './chunk-BEN3453I.js';
2
- import { shadcnBridge } from './chunk-X7RINDJQ.js';
3
- import { createRibbonOverflow, defineRibbon, defineDialog, defineSearchField, defineSwitch, defineTitleBar, defineBackstage, defineStatusBar, defineZoomSlider, defineContextMenu, runKeyTips, assignKeyTips } from './chunk-M5DTJSOV.js';
1
+ import { defineSmartArt } from './chunk-Y2E22JVO.js';
2
+ import { shadcnBridge } from './chunk-JAJFLFAV.js';
3
+ import { createRibbonOverflow, defineRibbon, defineRuler, defineCommentsPane, defineDialog, defineSearchField, defineSwitch, defineTitleBar, defineBackstage, defineStatusBar, defineZoomSlider, defineContextMenu, runKeyTips, assignKeyTips } from './chunk-7FNDOWTX.js';
4
4
  import { registerIcon } from './chunk-BOX43CZD.js';
5
- import './chunk-3FPW7M6U.js';
6
- import './chunk-USDLALB5.js';
7
- import './chunk-JFJXBYRD.js';
5
+ import './chunk-VUB44CAJ.js';
6
+ import './chunk-YK2DPYMU.js';
7
+ import './chunk-XNCWB2X6.js';
8
8
  import { normalizeLocale, SUPPORTED_OFFICE_LOCALES, interpolate } from 'ooxml-core/i18n';
9
9
  import { createDocument, saveDocx, sectionsFromLayout, sectionLayoutJson, sectionsOf, pageSizeOf, columnPreset, applyPageSetup, withSection, computeListLabels, numberNotesInOrder, tocEntries, tableOfFiguresInstruction, findTableOfContents, ensureListDefinition, resolveNumberingLevel, equalColumnDraft, readColumnDraft, PAGE_SIZE_OPTIONS, PAGE_SIZES, readPageSetup, isRunHiddenForReview, resolveTableStyleFormatting, resolveParagraphFormatting, displayListLabel, setTitlePage, setLineNumbering, setVerticalAlign, setPageNumbering, ST_NumberFormat, unequalColumnPreset, setColumns, setOrientation, setPageSize, setMargins, lineSpacingLabel, formatNoteNumber, reviewDocumentFormatting, reviewFormattingWarnings, listRevisions, plainText, tocHyperlinks, DEFAULT_TOC_INSTRUCTION, tocBookmarks, buildTableOfContents, tocCaptionLabel, isFieldLocked, twips as twips$1, signedTwips, formatListNumber, columnTextWidth, validColumnDraft, validatePageSetup, presetOf, LIGATURE_VALUES, isLigatures, reviewRunFormatting, resolveRunFormatting, reviewParagraphFormatting, resolveThemeColorReference, lineSpacingValue, isStHighlightColor, transformCase, DEFAULT_TABLE_BORDERS, parseLineSpacingValue, twipsAttr, twipsFromPixels, headingLevel, isValidLanguageTag, WORD, isHeadingListKind, fieldName, lineSpacingOptions, halfPointsFromPoints, changeColumnWidth, changeColumnGap, createListDefinition, linkStylesToList, headingListLevels, documentStats } from 'ooxml-core/docx';
10
10
  import { Schema, DOMSerializer, Fragment } from 'prosemirror-model';
11
- import { markSpecs, imageNodeSpec, fieldMarkerNodeSpec, noteReferenceNodeSpec, pageBreakNodeSpec, hardBreakNodeSpec, commentHistoryAttributes, tableCellStyle, tableStyle, createToggleFormat, expectDefined, paragraphBoxCss, themeToCssVars, lightTheme, darkTheme, normalizeThemeMode, applyThemeColors, refreshWordYjsPresence, normalizeRibbonActions, DirtyState, isWordYjsRemoteTransaction, REMOTE_TRANSACTION_META, repairCollaborativeDocumentIds, HEADER_FOOTER_INPUT, restoreSectionParts, commentThreadsFromDoc, restoreNoteParts, CollaborationClient, createCollaborationIdGenerator, WordYjsCollaboration, sectionPartsJson, NotePartsStep, notePartsJson, SectionPartsStep, fitZoomPercent, hasChangeAtCursor, hasAnyChange, commentIdsAtSelection, commentAnchors, countWords, fieldGuardPlugin, trackChangesPlugin, wordYjsPresencePlugin, placementClass, removeCommentThread, removeCommentAnchor, deleteComment, updateCommentThreads, addComment, toggleTrackChanges, goToNextChange, goToPreviousChange, rejectAllChanges, acceptAllChanges, rejectChangeAtCursor, acceptChangeAtCursor, goToComment, appendInlineNode, sameJson, sameRuns, PARAGRAPH_KEEP_KEYS, paragraphFromAttrs, parseBordersJson, isNavigableHref, wordYjsPluginKey, setReviewRecordingPreferences, nodeNumbering, paragraphFormattingRevision, inlineNodeRun, formattingRevision, insertWordHardBreak, paragraphAttrs, resolveCellVisuals, themeDrawing, ribbonActionIdForLabel, removeWordLink, fieldResultRanges, wordLinkRangeAt, ligatureCss as ligatureCss$1, wordYjsRedo, wordYjsUndo, runToInlineNodes as runToInlineNodes$1, backstageFocus, applyRunFormattingPatch, clearDirectRunFormatting, applyWordLink, ligatureStyle, wordHighlightColors, swatchColor, cssBorderSide, deleteFieldSelection, resolveComment, replyToComment, CollaborationAuthority } from 'ooxml-core/docx/ui';
11
+ import { markSpecs, imageNodeSpec, fieldMarkerNodeSpec, noteReferenceNodeSpec, pageBreakNodeSpec, hardBreakNodeSpec, commentHistoryAttributes, tableCellStyle, tableStyle, createToggleFormat, expectDefined, paragraphBoxCss, themeToCssVars, lightTheme, darkTheme, normalizeThemeMode, applyThemeColors, refreshWordYjsPresence, normalizeRibbonActions, DirtyState, isWordYjsRemoteTransaction, REMOTE_TRANSACTION_META, repairCollaborativeDocumentIds, HEADER_FOOTER_INPUT, restoreSectionParts, commentThreadsFromDoc, restoreNoteParts, CollaborationClient, createCollaborationIdGenerator, WordYjsCollaboration, sectionPartsJson, NotePartsStep, notePartsJson, SectionPartsStep, fitZoomPercent, hasChangeAtCursor, hasAnyChange, commentIdsAtSelection, commentAnchors, countWords, fieldGuardPlugin, trackChangesPlugin, wordYjsPresencePlugin, chartNodeSpec, placementClass, removeCommentThread, removeCommentAnchor, deleteComment, updateCommentThreads, addComment, toggleTrackChanges, goToNextChange, goToPreviousChange, rejectAllChanges, acceptAllChanges, rejectChangeAtCursor, acceptChangeAtCursor, goToComment, appendInlineNode, sameJson, sameRuns, PARAGRAPH_KEEP_KEYS, paragraphFromAttrs, parseBordersJson, isNavigableHref, wordYjsPluginKey, setReviewRecordingPreferences, nodeNumbering, paragraphFormattingRevision, inlineNodeRun, formattingRevision, insertWordHardBreak, paragraphAttrs, resolveCellVisuals, themeDrawing, ribbonActionIdForLabel, removeWordLink, fieldResultRanges, wordLinkRangeAt, ligatureCss as ligatureCss$1, wordYjsRedo, wordYjsUndo, runToInlineNodes as runToInlineNodes$1, backstageFocus, applyRunFormattingPatch, clearDirectRunFormatting, applyWordLink, ligatureStyle, wordHighlightColors, swatchColor, cssBorderSide, deleteFieldSelection, resolveComment, replyToComment, CollaborationAuthority } from 'ooxml-core/docx/ui';
12
12
  export { CollaborationAuthority, CollaborationClient, RIBBON_ACTION_IDS, RIBBON_ACTION_LABELS, createCollaborationIdGenerator, darkTheme, isRibbonActionId, lightTheme, normalizeRibbonActions, repairCollaborativeDocumentIds, themeToCssVars } from 'ooxml-core/docx/ui';
13
13
  import { parseOmml, convertOmmlToLatex, convertOmmlToMathMl } from 'ooxml-core/math';
14
14
  import { PluginKey, EditorState, Plugin, NodeSelection, TextSelection, Selection } from 'prosemirror-state';
@@ -1267,6 +1267,7 @@ var deRibbon = {
1267
1267
  Reply: "Antworten",
1268
1268
  Resolve: "L\xF6sen",
1269
1269
  Reopen: "Erneut \xF6ffnen",
1270
+ Resolved: "Gel\xF6st",
1270
1271
  Delete: "L\xF6schen",
1271
1272
  "No comments": "Noch keine Kommentare.",
1272
1273
  Tracking: "Nachverfolgung",
@@ -1927,6 +1928,7 @@ var enRibbon = {
1927
1928
  Reply: "Reply",
1928
1929
  Resolve: "Resolve",
1929
1930
  Reopen: "Reopen",
1931
+ Resolved: "Resolved",
1930
1932
  Delete: "Delete",
1931
1933
  "No comments": "No comments yet.",
1932
1934
  Tracking: "Tracking",
@@ -2587,6 +2589,7 @@ var esRibbon = {
2587
2589
  Reply: "Responder",
2588
2590
  Resolve: "Resolver",
2589
2591
  Reopen: "Reabrir",
2592
+ Resolved: "Resuelto",
2590
2593
  Delete: "Eliminar",
2591
2594
  "No comments": "A\xFAn no hay comentarios.",
2592
2595
  Tracking: "Seguimiento",
@@ -3247,6 +3250,7 @@ var frRibbon = {
3247
3250
  Reply: "R\xE9pondre",
3248
3251
  Resolve: "R\xE9soudre",
3249
3252
  Reopen: "Rouvrir",
3253
+ Resolved: "R\xE9solu",
3250
3254
  Delete: "Supprimer",
3251
3255
  "No comments": "Aucun commentaire pour le moment.",
3252
3256
  Tracking: "Suivi",
@@ -3907,6 +3911,7 @@ var zhCNRibbon = {
3907
3911
  Reply: "\u56DE\u590D",
3908
3912
  Resolve: "\u89E3\u51B3",
3909
3913
  Reopen: "\u91CD\u65B0\u6253\u5F00",
3914
+ Resolved: "\u5DF2\u89E3\u51B3",
3910
3915
  Delete: "\u5220\u9664",
3911
3916
  "No comments": "\u6682\u65E0\u6279\u6CE8\u3002",
3912
3917
  Tracking: "\u4FEE\u8BA2",
@@ -4061,8 +4066,18 @@ function localizeElement(root, locale) {
4061
4066
  }
4062
4067
  }
4063
4068
  }
4069
+ var controlCache = /* @__PURE__ */ new WeakMap();
4064
4070
  function findLocalizedControl(root, label) {
4065
- return root.querySelector(`[aria-label="${label}"], [data-localearialabel="${label}"]`);
4071
+ let cache = controlCache.get(root);
4072
+ const cached = cache?.get(label);
4073
+ if (cached?.isConnected && root.contains(cached) && (cached.getAttribute("aria-label") === label || cached.dataset.localearialabel === label))
4074
+ return cached;
4075
+ const found = root.querySelector(`[aria-label="${label}"], [data-localearialabel="${label}"]`);
4076
+ if (found) {
4077
+ if (!cache) controlCache.set(root, cache = /* @__PURE__ */ new Map());
4078
+ cache.set(label, found);
4079
+ }
4080
+ return found;
4066
4081
  }
4067
4082
 
4068
4083
  // src/docx/shell-labels.ts
@@ -4348,9 +4363,9 @@ var schema = new Schema({
4348
4363
  }
4349
4364
  const body = [
4350
4365
  "tbody",
4351
- ...rows.map((row4) => [
4366
+ ...rows.map((row3) => [
4352
4367
  "tr",
4353
- ...row4.map((cell) => ["td", cell.text])
4368
+ ...row3.map((cell) => ["td", cell.text])
4354
4369
  ])
4355
4370
  ];
4356
4371
  return ["table", { class: "dve-nested-preview", contenteditable: "false" }, body];
@@ -4366,12 +4381,12 @@ function cellKey(cell) {
4366
4381
  function tableNode(block, paragraphNode2, tableStyles) {
4367
4382
  const columnCount = Math.max(
4368
4383
  1,
4369
- ...block.rows.map((row4) => row4.reduce((sum, cell) => sum + (cell.gridSpan ?? 1), 0))
4384
+ ...block.rows.map((row3) => row3.reduce((sum, cell) => sum + (cell.gridSpan ?? 1), 0))
4370
4385
  );
4371
- const rows = block.rows.map((row4, rowIndex) => {
4386
+ const rows = block.rows.map((row3, rowIndex) => {
4372
4387
  const cells = [];
4373
4388
  let gridColumn = 0;
4374
- row4.forEach((cell, columnIndex) => {
4389
+ row3.forEach((cell, columnIndex) => {
4375
4390
  const column = gridColumn;
4376
4391
  gridColumn += cell.gridSpan ?? 1;
4377
4392
  if (cell.verticalMerge === "continue") return;
@@ -4446,19 +4461,19 @@ function tableNode(block, paragraphNode2, tableStyles) {
4446
4461
  }
4447
4462
  function tableFormattingFromNode(node) {
4448
4463
  const rowProperties = [];
4449
- node.forEach((row4) => rowProperties.push(structuredClone(row4.attrs.properties ?? {})));
4464
+ node.forEach((row3) => rowProperties.push(structuredClone(row3.attrs.properties ?? {})));
4450
4465
  return {
4451
- rowProperties: rowProperties.some((row4) => Object.keys(row4).length) ? rowProperties : void 0,
4466
+ rowProperties: rowProperties.some((row3) => Object.keys(row3).length) ? rowProperties : void 0,
4452
4467
  cellMargins: typeof node.attrs.cellMargins === "string" ? JSON.parse(node.attrs.cellMargins) : void 0
4453
4468
  };
4454
4469
  }
4455
4470
  function convertSimpleTable(node, convertParagraph, prior) {
4456
4471
  const priorCells = /* @__PURE__ */ new Map();
4457
- for (const row4 of prior?.rows ?? []) for (const cell of row4) priorCells.set(cellKey(cell), cell);
4472
+ for (const row3 of prior?.rows ?? []) for (const cell of row3) priorCells.set(cellKey(cell), cell);
4458
4473
  const rows = [];
4459
- node.forEach((row4) => {
4474
+ node.forEach((row3) => {
4460
4475
  const cells = [];
4461
- row4.forEach((cell) => {
4476
+ row3.forEach((cell) => {
4462
4477
  const paragraphs = [];
4463
4478
  cell.forEach((paragraph2) => {
4464
4479
  if (paragraph2.type.name === "paragraph") paragraphs.push(convertParagraph(paragraph2));
@@ -4492,9 +4507,9 @@ function convertSimpleTable(node, convertParagraph, prior) {
4492
4507
  function convertMergedTable(node, prior, convertParagraph) {
4493
4508
  const updated = structuredClone(prior);
4494
4509
  const cellByKey = /* @__PURE__ */ new Map();
4495
- for (const row4 of updated.rows) for (const cell of row4) cellByKey.set(cellKey(cell), cell);
4510
+ for (const row3 of updated.rows) for (const cell of row3) cellByKey.set(cellKey(cell), cell);
4496
4511
  node.forEach(
4497
- (row4) => row4.forEach((cellNode) => {
4512
+ (row3) => row3.forEach((cellNode) => {
4498
4513
  const target = cellByKey.get(String(cellNode.attrs.sourceCellKey || ""));
4499
4514
  if (!target) return;
4500
4515
  const paragraphs = [];
@@ -4551,14 +4566,14 @@ function sectionBreaksPlugin() {
4551
4566
  const json = state.doc.attrs.sections;
4552
4567
  const sections = typeof json === "string" ? JSON.parse(json) : [];
4553
4568
  if (sections.length < 2) return null;
4554
- const labels2 = /* @__PURE__ */ new Map();
4569
+ const labels3 = /* @__PURE__ */ new Map();
4555
4570
  sections.slice(0, -1).forEach((section3, index) => {
4556
4571
  const following = sections[index + 1];
4557
- if (following) labels2.set(section3.endsAtBlockId, BREAK_LABEL[following.type]);
4572
+ if (following) labels3.set(section3.endsAtBlockId, BREAK_LABEL[following.type]);
4558
4573
  });
4559
4574
  const decorations2 = [];
4560
4575
  state.doc.forEach((node, offset) => {
4561
- const label = labels2.get(String(node.attrs.id));
4576
+ const label = labels3.get(String(node.attrs.id));
4562
4577
  if (label)
4563
4578
  decorations2.push(
4564
4579
  Decoration.node(offset, offset + node.nodeSize, {
@@ -4572,8 +4587,8 @@ function sectionBreaksPlugin() {
4572
4587
  }
4573
4588
  });
4574
4589
  }
4575
- function paragraphNode(paragraph2, labels2, noteNumber) {
4576
- const label = labels2.get(paragraph2.id);
4590
+ function paragraphNode(paragraph2, labels3, noteNumber) {
4591
+ const label = labels3.get(paragraph2.id);
4577
4592
  const children = paragraph2.runs.flatMap((run) => runToInlineNodes(run, noteNumber));
4578
4593
  return schema.node(
4579
4594
  "paragraph",
@@ -4589,7 +4604,7 @@ function paragraphNode(paragraph2, labels2, noteNumber) {
4589
4604
  );
4590
4605
  }
4591
4606
  function modelToDoc(model) {
4592
- const labels2 = computeListLabels(model);
4607
+ const labels3 = computeListLabels(model);
4593
4608
  const footnoteOrder = numberNotesInOrder(model.blocks, "footnote");
4594
4609
  const endnoteOrder = numberNotesInOrder(model.blocks, "endnote");
4595
4610
  const noteNumber = (kind, id) => {
@@ -4598,10 +4613,10 @@ function modelToDoc(model) {
4598
4613
  return { number, label: formatNoteNumber(number, format) };
4599
4614
  };
4600
4615
  const blocks = model.blocks.map((block) => {
4601
- if (block.type === "paragraph") return paragraphNode(block, labels2, noteNumber);
4616
+ if (block.type === "paragraph") return paragraphNode(block, labels3, noteNumber);
4602
4617
  return tableNode(
4603
4618
  block,
4604
- (paragraph2) => paragraphNode(paragraph2, labels2, noteNumber),
4619
+ (paragraph2) => paragraphNode(paragraph2, labels3, noteNumber),
4605
4620
  model.tableStyles
4606
4621
  );
4607
4622
  });
@@ -4666,7 +4681,7 @@ function docToModel(doc, prior) {
4666
4681
  if (block.type === "paragraph") remember(block);
4667
4682
  else {
4668
4683
  priorTables.set(block.id, block);
4669
- for (const row4 of block.rows) for (const cell of row4) cell.paragraphs.forEach(remember);
4684
+ for (const row3 of block.rows) for (const cell of row3) cell.paragraphs.forEach(remember);
4670
4685
  }
4671
4686
  }
4672
4687
  const convertParagraph = (node) => {
@@ -4968,10 +4983,10 @@ var DOCX_EDITOR_EVENTS = [
4968
4983
  function on(target, name, listener) {
4969
4984
  target.addEventListener(name, (event) => listener(event));
4970
4985
  }
4971
- function emit(target, name, detail, options = {}) {
4986
+ function emit(target, name, detail2, options = {}) {
4972
4987
  return target.dispatchEvent(
4973
4988
  new CustomEvent(name, {
4974
- detail,
4989
+ detail: detail2,
4975
4990
  bubbles: true,
4976
4991
  composed: true,
4977
4992
  ...options
@@ -5435,7 +5450,7 @@ function openColorGridPopover(anchor, choose, options = {}) {
5435
5450
  grid(
5436
5451
  ...THEME.map(([hex, name]) => swatch(hex, name)),
5437
5452
  ...[0, 1, 2, 3, 4].flatMap(
5438
- (row4) => THEME.map(([, name], column) => swatch(shades[column][row4], name))
5453
+ (row3) => THEME.map(([, name], column) => swatch(shades[column][row3], name))
5439
5454
  )
5440
5455
  ),
5441
5456
  title("Standard Colors"),
@@ -5807,10 +5822,10 @@ function openGallery(anchor, control, kind, commands) {
5807
5822
  words.className = "gallery-words";
5808
5823
  words.append(name);
5809
5824
  if (look.detail) {
5810
- const detail = document.createElement("span");
5811
- detail.className = "gallery-detail";
5812
- detail.textContent = look.detail;
5813
- words.append(detail);
5825
+ const detail2 = document.createElement("span");
5826
+ detail2.className = "gallery-detail";
5827
+ detail2.textContent = look.detail;
5828
+ words.append(detail2);
5814
5829
  }
5815
5830
  item.append(look.thumb, words);
5816
5831
  item.addEventListener("mousedown", (event) => event.preventDefault());
@@ -6505,8 +6520,8 @@ var languageOptions = [
6505
6520
  ["hi-IN", "Hindi (India)"],
6506
6521
  ["ru-RU", "Russian (Russia)"]
6507
6522
  ];
6508
- function emit2(control, detail) {
6509
- emit(control, "ribbon-action", detail);
6523
+ function emit2(control, detail2) {
6524
+ emit(control, "ribbon-action", detail2);
6510
6525
  }
6511
6526
  function languageControl(label, key2) {
6512
6527
  const wrapper = document.createElement("label");
@@ -7838,15 +7853,15 @@ function runStylesPlugin(getModel, getMode = () => "all") {
7838
7853
  if (block.type.name !== "table") return;
7839
7854
  const table = tables.get(String(block.attrs.id));
7840
7855
  let columnCount = 1;
7841
- block.forEach((row4) => {
7856
+ block.forEach((row3) => {
7842
7857
  let width = 0;
7843
- row4.forEach((cell) => width += Number(cell.attrs.colspan) || 1);
7858
+ row3.forEach((cell) => width += Number(cell.attrs.colspan) || 1);
7844
7859
  columnCount = Math.max(columnCount, width);
7845
7860
  });
7846
- block.forEach((row4, rowOffset, rowIndex) => {
7861
+ block.forEach((row3, rowOffset, rowIndex) => {
7847
7862
  let column = 0;
7848
7863
  const rowStart = blockOffset + 1 + rowOffset + 1;
7849
- row4.forEach((cell, cellOffset) => {
7864
+ row3.forEach((cell, cellOffset) => {
7850
7865
  const tableStyleRun = table?.style ? resolveTableStyleFormatting(
7851
7866
  table.style,
7852
7867
  model.tableStyles,
@@ -9206,7 +9221,7 @@ function readCellFill(ctx, state, scope) {
9206
9221
  const fills = /* @__PURE__ */ new Set();
9207
9222
  const table = state.doc.nodeAt(ctx.tablePos);
9208
9223
  table?.forEach(
9209
- (row4, _offset, rowIndex) => row4.forEach((cell, _cellOffset, column) => {
9224
+ (row3, _offset, rowIndex) => row3.forEach((cell, _cellOffset, column) => {
9210
9225
  if (scope === "cell" && (rowIndex < ctx.rect.top || rowIndex > ctx.rect.bottom || column < ctx.rect.left || column > ctx.rect.right))
9211
9226
  return;
9212
9227
  const fill = cell.attrs.shadingFill;
@@ -9221,7 +9236,7 @@ function applyCellFill(tr, ctx, scope, fill) {
9221
9236
  const table = tr.doc.nodeAt(ctx.tablePos);
9222
9237
  if (!table) return;
9223
9238
  table.forEach(
9224
- (row4, rowOffset, rowIndex) => row4.forEach((cell, cellOffset, column) => {
9239
+ (row3, rowOffset, rowIndex) => row3.forEach((cell, cellOffset, column) => {
9225
9240
  if (scope === "cell" && (rowIndex < ctx.rect.top || rowIndex > ctx.rect.bottom || column < ctx.rect.left || column > ctx.rect.right))
9226
9241
  return;
9227
9242
  tr.setNodeMarkup(ctx.tablePos + 2 + rowOffset + cellOffset, void 0, {
@@ -9258,8 +9273,8 @@ function tableBorderContext(state) {
9258
9273
  if (table.attrs.structureEditable === false) return null;
9259
9274
  const tablePos = $from.before(depth);
9260
9275
  const cells = [];
9261
- table.forEach((row4, rowOffset, rowIndex) => {
9262
- row4.forEach((cell, cellOffset, column) => {
9276
+ table.forEach((row3, rowOffset, rowIndex) => {
9277
+ row3.forEach((cell, cellOffset, column) => {
9263
9278
  const pos = tablePos + 1 + rowOffset + 1 + cellOffset;
9264
9279
  if (Math.max(from2, pos + 1) <= Math.min(to, pos + cell.nodeSize - 1))
9265
9280
  cells.push({ pos, row: rowIndex, column, node: cell });
@@ -9283,11 +9298,11 @@ function tableBorderContext(state) {
9283
9298
  }
9284
9299
  function edgesOf(preset, rect) {
9285
9300
  const edges = [];
9286
- for (let row4 = rect.top; row4 <= rect.bottom; row4++)
9301
+ for (let row3 = rect.top; row3 <= rect.bottom; row3++)
9287
9302
  for (let column = rect.left; column <= rect.right; column++) {
9288
9303
  const outside = {
9289
- top: row4 === rect.top,
9290
- bottom: row4 === rect.bottom,
9304
+ top: row3 === rect.top,
9305
+ bottom: row3 === rect.bottom,
9291
9306
  left: column === rect.left,
9292
9307
  right: column === rect.right
9293
9308
  };
@@ -9295,13 +9310,13 @@ function edgesOf(preset, rect) {
9295
9310
  const isOutside = outside[side];
9296
9311
  const horizontal = side === "top" || side === "bottom";
9297
9312
  const wanted = preset === "all" || preset === "outside" && isOutside || preset === "insideH" && horizontal && !isOutside || preset === "insideV" && !horizontal && !isOutside || preset === side && isOutside;
9298
- if (wanted) edges.push({ row: row4, column, side });
9313
+ if (wanted) edges.push({ row: row3, column, side });
9299
9314
  }
9300
9315
  }
9301
9316
  return edges;
9302
9317
  }
9303
- var current = (ctx, state, row4, column) => {
9304
- const cell = state.doc.nodeAt(ctx.tablePos)?.child(row4).child(column);
9318
+ var current = (ctx, state, row3, column) => {
9319
+ const cell = state.doc.nodeAt(ctx.tablePos)?.child(row3).child(column);
9305
9320
  return parse2(cell?.attrs.borders);
9306
9321
  };
9307
9322
  function applyEdits(view, ctx, edits, shading) {
@@ -9326,9 +9341,9 @@ function applyEdits(view, ctx, edits, shading) {
9326
9341
  edit
9327
9342
  ]);
9328
9343
  let rowOffset = ctx.tablePos + 1;
9329
- table.forEach((row4, _offset, rowIndex) => {
9344
+ table.forEach((row3, _offset, rowIndex) => {
9330
9345
  let cellPos = rowOffset + 1;
9331
- row4.forEach((cell, _cellOffset, column) => {
9346
+ row3.forEach((cell, _cellOffset, column) => {
9332
9347
  const group3 = grouped.get(`${rowIndex}:${column}`);
9333
9348
  if (group3) {
9334
9349
  const visual = parse2(cell.attrs.borders);
@@ -9350,7 +9365,7 @@ function applyEdits(view, ctx, edits, shading) {
9350
9365
  }
9351
9366
  cellPos += cell.nodeSize;
9352
9367
  });
9353
- rowOffset += row4.nodeSize;
9368
+ rowOffset += row3.nodeSize;
9354
9369
  });
9355
9370
  if (shading) applyCellFill(tr, ctx, shading.scope, shading.fill);
9356
9371
  if (!tr.docChanged) return false;
@@ -10129,9 +10144,9 @@ function paragraphElement(paragraph2, values2) {
10129
10144
  function blockElement(block, values2) {
10130
10145
  if (block.type === "paragraph") return paragraphElement(block, values2);
10131
10146
  const table = document.createElement("table");
10132
- for (const row4 of block.rows) {
10147
+ for (const row3 of block.rows) {
10133
10148
  const tr = document.createElement("tr");
10134
- for (const cell of row4) {
10149
+ for (const cell of row3) {
10135
10150
  const td = document.createElement("td");
10136
10151
  if (cell.gridSpan && cell.gridSpan > 1) td.colSpan = cell.gridSpan;
10137
10152
  for (const paragraph2 of cell.paragraphs) td.append(paragraphElement(paragraph2, values2));
@@ -10150,7 +10165,7 @@ function renderHeaderFooter(content, values2, kind) {
10150
10165
  }
10151
10166
  function floatingPictures(content, page2, anchorTopPx, values2) {
10152
10167
  const paragraphs = content.blocks.flatMap(
10153
- (block) => block.type === "paragraph" ? [block] : block.rows.flatMap((row4) => row4.flatMap((cell) => cell.paragraphs))
10168
+ (block) => block.type === "paragraph" ? [block] : block.rows.flatMap((row3) => row3.flatMap((cell) => cell.paragraphs))
10154
10169
  );
10155
10170
  const column = { xPx: 0, widthPx: page2.widthPx - page2.marginLeftPx - page2.marginRightPx };
10156
10171
  return paragraphs.flatMap(
@@ -11028,10 +11043,10 @@ function tablePropertiesContext(state) {
11028
11043
  const rows = [];
11029
11044
  const cells = [];
11030
11045
  let pos = $from.start(depth);
11031
- table.forEach((row4, offset, index) => {
11046
+ table.forEach((row3, offset, index) => {
11032
11047
  if (index >= $from.index(depth) && index <= $to.index(depth))
11033
- rows.push({ pos: pos + offset, properties: row4.attrs.properties ?? {} });
11034
- row4.forEach((cell, cellOffset) => {
11048
+ rows.push({ pos: pos + offset, properties: row3.attrs.properties ?? {} });
11049
+ row3.forEach((cell, cellOffset) => {
11035
11050
  const cellPos = pos + offset + 1 + cellOffset;
11036
11051
  if (Math.max(state.selection.from, cellPos + 1) <= Math.min(state.selection.to, cellPos + cell.nodeSize - 1))
11037
11052
  cells.push({
@@ -11057,12 +11072,12 @@ function applyTableProperties(view, rowPatch, marginPatch, cellMarginPatch, cell
11057
11072
  if (!Object.keys(rowPatch).length && !Object.keys(marginPatch).length && cellMarginPatch === void 0 && cellAlignment === void 0)
11058
11073
  return true;
11059
11074
  const tr = closeHistory(view.state.tr);
11060
- for (const row4 of context2.rows) {
11061
- const node = tr.doc.nodeAt(row4.pos);
11062
- const properties = { ...row4.properties, ...rowPatch };
11075
+ for (const row3 of context2.rows) {
11076
+ const node = tr.doc.nodeAt(row3.pos);
11077
+ const properties = { ...row3.properties, ...rowPatch };
11063
11078
  for (const key2 of Object.keys(properties))
11064
11079
  if (properties[key2] === void 0) delete properties[key2];
11065
- tr.setNodeMarkup(row4.pos, void 0, {
11080
+ tr.setNodeMarkup(row3.pos, void 0, {
11066
11081
  ...node.attrs,
11067
11082
  properties,
11068
11083
  heightPx: properties.heightTwips ? properties.heightTwips / 15 : null
@@ -11222,7 +11237,7 @@ function createTablePropertiesDialog(viewOf) {
11222
11237
  element.replaceChildren(...content);
11223
11238
  localizeDialog(element, locale);
11224
11239
  const common = (read) => {
11225
- const values2 = context2.rows.map((row4) => read(row4.properties));
11240
+ const values2 = context2.rows.map((row3) => read(row3.properties));
11226
11241
  return values2.every((value) => value === values2[0]) ? values2[0] : null;
11227
11242
  };
11228
11243
  setTriState(
@@ -12330,13 +12345,13 @@ function syncFormatControls(toolbar, state) {
12330
12345
  });
12331
12346
  if (!found) addMarks(state.selection.$from.marks());
12332
12347
  }
12333
- const labels2 = {
12348
+ const labels3 = {
12334
12349
  bold: "Bold",
12335
12350
  italic: "Italic",
12336
12351
  underline: "Underline",
12337
12352
  strike: "Strikethrough"
12338
12353
  };
12339
- for (const [key2, label] of Object.entries(labels2)) {
12354
+ for (const [key2, label] of Object.entries(labels3)) {
12340
12355
  const values2 = marked.get(key2);
12341
12356
  findLocalizedControl(toolbar, label)?.setAttribute(
12342
12357
  "aria-pressed",
@@ -12958,7 +12973,7 @@ function paragraphStylesPlugin(getModel, getMode = () => "all") {
12958
12973
  state.doc.descendants((node) => {
12959
12974
  if (node.type.name === "paragraph") paragraphs.push(displayParagraph(node, mode).value);
12960
12975
  });
12961
- const labels2 = computeListLabels({ ...model, blocks: paragraphs });
12976
+ const labels3 = computeListLabels({ ...model, blocks: paragraphs });
12962
12977
  const decorations2 = [];
12963
12978
  state.doc.descendants((node, pos) => {
12964
12979
  if (node.type.name !== "paragraph") return;
@@ -12966,7 +12981,7 @@ function paragraphStylesPlugin(getModel, getMode = () => "all") {
12966
12981
  const paragraph2 = projected.value;
12967
12982
  const reset = mode === "original" && node.attrs.formatRevision && !projected.error ? `${ORIGINAL_PARAGRAPH_RESET};` : "";
12968
12983
  const effective = catalog ? resolveParagraphFormatting(paragraph2, catalog) : paragraph2;
12969
- const label = labels2.get(String(node.attrs.id));
12984
+ const label = labels3.get(String(node.attrs.id));
12970
12985
  const marker = listMarkerDisplay(
12971
12986
  node,
12972
12987
  { ...paragraph2, ...effective },
@@ -13009,8 +13024,8 @@ function context(view) {
13009
13024
  const table = $from.node(tableDepth);
13010
13025
  const width = table.childCount ? table.child(0).childCount : 0;
13011
13026
  if (!width || table.childCount < 1) return null;
13012
- for (let row4 = 0; row4 < table.childCount; row4++)
13013
- if (table.child(row4).childCount !== width) return null;
13027
+ for (let row3 = 0; row3 < table.childCount; row3++)
13028
+ if (table.child(row3).childCount !== width) return null;
13014
13029
  return {
13015
13030
  table,
13016
13031
  tablePos: $from.before(tableDepth),
@@ -13100,9 +13115,9 @@ function executeTableCommand(view, action) {
13100
13115
  view,
13101
13116
  ctx,
13102
13117
  rows.map(
13103
- (row4) => row4.copy(
13118
+ (row3) => row3.copy(
13104
13119
  Fragment.fromArray(
13105
- Array.from({ length: row4.childCount }, (_, index) => row4.child(index)).filter(
13120
+ Array.from({ length: row3.childCount }, (_, index) => row3.child(index)).filter(
13106
13121
  (_, index) => index !== ctx.columnIndex
13107
13122
  )
13108
13123
  )
@@ -13115,10 +13130,10 @@ function executeTableCommand(view, action) {
13115
13130
  replacedTable(
13116
13131
  view,
13117
13132
  ctx,
13118
- rows.map((row4) => {
13119
- const cells = Array.from({ length: row4.childCount }, (_, index) => row4.child(index));
13133
+ rows.map((row3) => {
13134
+ const cells = Array.from({ length: row3.childCount }, (_, index) => row3.child(index));
13120
13135
  cells.splice(at, 0, emptyCell(nextId));
13121
- return row4.copy(Fragment.fromArray(cells));
13136
+ return row3.copy(Fragment.fromArray(cells));
13122
13137
  })
13123
13138
  );
13124
13139
  return true;
@@ -13256,13 +13271,6 @@ function markerPositions(geometry) {
13256
13271
  right: geometry.pageWidth - geometry.marginRight - geometry.indentRight
13257
13272
  };
13258
13273
  }
13259
- function inchLabels(geometry) {
13260
- const labels2 = [];
13261
- const width = geometry.pageWidth - geometry.marginLeft - geometry.marginRight;
13262
- for (let inch = 1; inch * PX_PER_INCH < width; inch++)
13263
- labels2.push({ at: geometry.marginLeft + inch * PX_PER_INCH, text: String(inch) });
13264
- return labels2;
13265
- }
13266
13274
  function markerChange(marker, x, geometry) {
13267
13275
  const snap = (px2) => Math.round(px2 / SNAP_PX) * SNAP_PX;
13268
13276
  const inches3 = (px2) => Math.round(px2 / PX_PER_INCH * 1e3) / 1e3;
@@ -13289,87 +13297,52 @@ function markerChange(marker, x, geometry) {
13289
13297
  }
13290
13298
  var SNAP_PX = PX_PER_INCH / 16;
13291
13299
  var geometries = /* @__PURE__ */ new WeakMap();
13292
- function enableDragging(ruler, onChange) {
13293
- for (const name of ["first-line", "left", "right"]) {
13294
- const marker = ruler.querySelector(`.dve-ruler-marker-${name}`);
13295
- marker.addEventListener("pointerdown", (event) => {
13296
- const geometry = geometries.get(ruler);
13297
- if (!geometry || event.button !== 0) return;
13298
- event.preventDefault();
13299
- marker.setPointerCapture?.(event.pointerId);
13300
- const zoom = Number(ruler.style.getPropertyValue("--dve-zoom")) || 1;
13301
- const at = (e) => (e.clientX - ruler.getBoundingClientRect().left) / zoom;
13302
- const move = (e) => {
13303
- const preview = markerChange(name, at(e), geometry);
13304
- const shifted = { ...geometry };
13305
- if (preview.leftInches !== void 0) shifted.indentLeft = preview.leftInches * PX_PER_INCH;
13306
- if (preview.rightInches !== void 0)
13307
- shifted.indentRight = preview.rightInches * PX_PER_INCH;
13308
- if (preview.special)
13309
- shifted.firstLine = (preview.special === "hanging" ? -1 : 1) * (preview.specialInches ?? 0) * PX_PER_INCH;
13310
- paintMarkers(ruler, shifted);
13311
- };
13312
- const finish = (e) => {
13313
- marker.removeEventListener("pointermove", move);
13314
- marker.removeEventListener("pointerup", finish);
13315
- marker.removeEventListener("pointercancel", finish);
13316
- onChange(e.type === "pointerup" ? markerChange(name, at(e), geometry) : {});
13317
- };
13318
- marker.addEventListener("pointermove", move);
13319
- marker.addEventListener("pointerup", finish);
13320
- marker.addEventListener("pointercancel", finish);
13321
- });
13322
- }
13300
+ function previewGeometry(marker, x, geometry) {
13301
+ const preview = markerChange(marker, x, geometry);
13302
+ const shifted = { ...geometry };
13303
+ if (preview.leftInches !== void 0) shifted.indentLeft = preview.leftInches * PX_PER_INCH;
13304
+ if (preview.rightInches !== void 0) shifted.indentRight = preview.rightInches * PX_PER_INCH;
13305
+ if (preview.special)
13306
+ shifted.firstLine = (preview.special === "hanging" ? -1 : 1) * (preview.specialInches ?? 0) * PX_PER_INCH;
13307
+ return shifted;
13323
13308
  }
13324
13309
  function paintMarkers(ruler, geometry) {
13325
13310
  const positions = markerPositions(geometry);
13326
- const at = (name) => ruler.querySelector(`.dve-ruler-marker-${name}`);
13327
- at("first-line").style.left = `${positions.firstLine}px`;
13328
- at("left").style.left = `${positions.left}px`;
13329
- at("right").style.left = `${positions.right}px`;
13311
+ ruler.markers = [
13312
+ { name: "first-line", position: positions.firstLine, edge: "top" },
13313
+ { name: "left", position: positions.left },
13314
+ { name: "right", position: positions.right }
13315
+ ];
13330
13316
  }
13331
13317
  function createRuler(onChange) {
13332
- const ruler = document.createElement("div");
13318
+ defineRuler();
13319
+ const ruler = document.createElement("office-ui-ruler");
13333
13320
  ruler.className = "dve-ruler";
13334
- ruler.setAttribute("role", "img");
13335
- ruler.setAttribute("aria-label", "Ruler");
13336
- for (const name of ["margin-left", "margin-right", "labels"]) {
13337
- const part = document.createElement("div");
13338
- part.className = `dve-ruler-${name}`;
13339
- ruler.append(part);
13340
- }
13341
- for (const name of ["first-line", "left", "right"]) {
13342
- const marker = document.createElement("div");
13343
- marker.className = `dve-ruler-marker dve-ruler-marker-${name}`;
13344
- ruler.append(marker);
13345
- }
13346
- if (onChange) enableDragging(ruler, onChange);
13321
+ ruler.label = "Ruler";
13322
+ ruler.labelsWithinMargins = true;
13323
+ const detail2 = (event) => event.detail;
13324
+ const marker = (event) => detail2(event).name;
13325
+ ruler.addEventListener("ruler-marker-move", (event) => {
13326
+ const geometry = geometries.get(ruler);
13327
+ if (geometry)
13328
+ paintMarkers(ruler, previewGeometry(marker(event), detail2(event).position, geometry));
13329
+ });
13330
+ ruler.addEventListener("ruler-marker-commit", (event) => {
13331
+ const geometry = geometries.get(ruler);
13332
+ if (geometry) onChange?.(markerChange(marker(event), detail2(event).position, geometry));
13333
+ });
13334
+ ruler.addEventListener("ruler-marker-cancel", () => onChange?.({}));
13347
13335
  return ruler;
13348
13336
  }
13349
13337
  function updateRuler(ruler, geometry, zoom) {
13350
- const part = (name) => ruler.querySelector(`.dve-ruler-${name}`);
13351
- ruler.style.width = `${geometry.pageWidth}px`;
13352
- ruler.style.setProperty("--dve-zoom", String(zoom));
13353
- ruler.style.setProperty("--dve-ruler-origin", `${geometry.marginLeft}px`);
13354
- const left = part("margin-left");
13355
- left.style.width = `${geometry.marginLeft}px`;
13356
- const right = part("margin-right");
13357
- right.style.width = `${geometry.marginRight}px`;
13338
+ const element = ruler;
13358
13339
  geometries.set(ruler, geometry);
13359
- paintMarkers(ruler, geometry);
13360
- const labels2 = part("labels");
13361
- const wanted = inchLabels(geometry);
13362
- if (labels2.dataset.key !== JSON.stringify(wanted)) {
13363
- labels2.dataset.key = JSON.stringify(wanted);
13364
- labels2.replaceChildren(
13365
- ...wanted.map(({ at, text }) => {
13366
- const label = document.createElement("span");
13367
- label.textContent = text;
13368
- label.style.left = `${at}px`;
13369
- return label;
13370
- })
13371
- );
13372
- }
13340
+ element.extent = geometry.pageWidth;
13341
+ element.zoom = zoom;
13342
+ element.origin = geometry.marginLeft;
13343
+ element.marginStart = geometry.marginLeft;
13344
+ element.marginEnd = geometry.marginRight;
13345
+ paintMarkers(element, geometry);
13373
13346
  }
13374
13347
 
13375
13348
  // src/docx/ruler-sync.ts
@@ -13445,9 +13418,9 @@ function refreshEditorControls(toolbar, view, model, readOnly, collaboration, lo
13445
13418
  syncParagraphToggles(toolbar, view, model);
13446
13419
  syncContextualTabs(toolbar, state);
13447
13420
  syncRuler(toolbar, view, model);
13448
- const trackButton = toolbar.querySelector('[aria-label="Track changes"]');
13421
+ const trackButton = findLocalizedControl(toolbar, "Track changes");
13449
13422
  trackButton?.setAttribute("aria-pressed", String(Boolean(model.trackChanges)));
13450
- const commentsButton = toolbar.querySelector('[aria-label="Comments"]');
13423
+ const commentsButton = findLocalizedControl(toolbar, "Comments");
13451
13424
  commentsButton?.setAttribute("aria-pressed", String(commentsOpen));
13452
13425
  const changeAtCursor = hasChangeAtCursor(view);
13453
13426
  const anyChange = hasAnyChange(view);
@@ -13467,9 +13440,7 @@ function refreshEditorControls(toolbar, view, model, readOnly, collaboration, lo
13467
13440
  state.selection instanceof NodeSelection && state.selection.node.type.name === "image"
13468
13441
  ]
13469
13442
  ]) {
13470
- const control = toolbar.querySelector(
13471
- `[data-localearialabel="${label}"], [aria-label="${label}"]`
13472
- );
13443
+ const control = findLocalizedControl(toolbar, label);
13473
13444
  if (control) control.disabled = readOnly || !enabled;
13474
13445
  }
13475
13446
  }
@@ -14001,6 +13972,10 @@ function imageNodeView(cache, options = {}) {
14001
13972
  return (node, view, getPos) => {
14002
13973
  const diagram = parseDiagram(node.attrs.diagram);
14003
13974
  if (diagram) return smartArtNodeView(node, diagram, options.theme?.());
13975
+ if (node.attrs.chart) {
13976
+ const spec = chartNodeSpec(node, options.theme?.());
13977
+ return { dom: DOMSerializer.renderSpec(document, spec).dom, ignoreMutation: () => true };
13978
+ }
14004
13979
  const content = renderSpec(node);
14005
13980
  if (content.tagName !== "IMG") return { dom: content, ignoreMutation: () => true };
14006
13981
  const refresh = () => {
@@ -14340,7 +14315,7 @@ function refreshPreviewScaleWithFonts(element, text, formatting, family) {
14340
14315
  // src/docx/preview-run-styles.ts
14341
14316
  function stylePreviewRuns(element, block, model, serializer, mode = "all") {
14342
14317
  const measurer = scaleMeasurer();
14343
- const paragraphs = block.type === "paragraph" ? [block] : block.rows.flatMap((row4) => row4.flatMap((cell) => cell.paragraphs));
14318
+ const paragraphs = block.type === "paragraph" ? [block] : block.rows.flatMap((row3) => row3.flatMap((cell) => cell.paragraphs));
14344
14319
  const elements = block.type === "paragraph" ? [element] : [...element.querySelectorAll("p")];
14345
14320
  paragraphs.forEach((current2, index) => {
14346
14321
  const target = elements[index];
@@ -14417,10 +14392,10 @@ function blockNode(block) {
14417
14392
  return schema.node("paragraph", paragraphAttrs(block), children);
14418
14393
  }
14419
14394
  const rows = block.rows.map(
14420
- (row4) => schema.node(
14395
+ (row3) => schema.node(
14421
14396
  "tableRow",
14422
14397
  null,
14423
- row4.map(
14398
+ row3.map(
14424
14399
  (cell) => schema.node(
14425
14400
  "tableCell",
14426
14401
  null,
@@ -16060,8 +16035,8 @@ var InsertController = class {
16060
16035
  if (action.key === "figures")
16061
16036
  insertTableOfContents(view, this.host.model(), void 0, 3, action.label ?? "Figure");
16062
16037
  else if (action.key === "updateFigures") {
16063
- const labels2 = action.label ? [action.label] : ["Figure", "Table", "Equation"];
16064
- const updated = labels2.filter(
16038
+ const labels3 = action.label ? [action.label] : ["Figure", "Table", "Equation"];
16039
+ const updated = labels3.filter(
16065
16040
  (label) => updateTableOfContents(view, this.host.model(), void 0, label)
16066
16041
  );
16067
16042
  if (!updated.length)
@@ -16441,6 +16416,7 @@ var EditorCore = class {
16441
16416
  );
16442
16417
  const { searchPanel, printLayout, review, chrome, toolbar } = this.shell;
16443
16418
  searchPanel?.refresh();
16419
+ if (review?.commentsOpen) review.commentsPanel.refresh();
16444
16420
  if (this.pages.viewMode === "print") printLayout?.refreshCurrentPage();
16445
16421
  const status = refreshEditorControls(
16446
16422
  toolbar,
@@ -16499,7 +16475,7 @@ var ribbon_polish_default = "/* Ribbon polish: distinct pressed state and Word's
16499
16475
  var document_default = ".dve-revision-insert {\n color: var(--dve-revision-color, inherit);\n text-decoration: underline;\n text-decoration-color: var(--dve-revision-color, currentColor);\n}\n.dve-revision-delete {\n color: var(--dve-revision-color, inherit);\n text-decoration: line-through;\n text-decoration-color: var(--dve-revision-color, currentColor);\n}\n/* Moved text, like Word: green, double underline at the destination, double strike at the source. */\n.dve-revision-move {\n --dve-revision-color: #2e7d32;\n text-decoration-style: double;\n}\n.ProseMirror .dve-revision-hidden {\n /* Review visibility takes precedence over picture/equation node-view display rules. */\n display: none !important;\n}\n[data-review-display]:not([data-review-display='all']) .dve-revision-insert,\n[data-review-display]:not([data-review-display='all']) .dve-revision-delete {\n color: inherit;\n text-decoration: none;\n}\n[data-review-display]:not([data-review-display='all']) .dve-comment-range {\n background: transparent;\n}\n.dve-revision-format-markup {\n outline: 1px dotted currentColor;\n outline-offset: 2px;\n}\n.dve-comment-range {\n background: rgba(255, 212, 0, 0.28);\n}\n.dve-paper {\n box-sizing: border-box;\n position: relative;\n flex: none;\n margin: 0 auto;\n background: var(--dve-page-color, #fff);\n color: #202124;\n box-shadow:\n 0 1px 3px #20212430,\n 0 4px 12px #20212420;\n outline: none;\n /* Single spacing and no paragraph gap unless the document's styles set them, as in Word. */\n font:\n 11pt/1.2 Calibri,\n Carlito,\n Arial,\n sans-serif;\n zoom: var(--dve-zoom, 1);\n}\n.dve-paper p {\n min-height: 1.2em;\n margin: 0;\n white-space: pre-wrap;\n}\n.dve-paper p:last-child {\n margin-bottom: 0;\n}\n/* The caret marks focus in the document, as in Word; no ring around the editable area. */\n.dve-paper .ProseMirror:focus,\n.dve-paper .ProseMirror:focus-visible {\n outline: none;\n}\n.dve-paper:focus {\n box-shadow:\n 0 1px 3px #20212430,\n 0 4px 12px #20212420,\n 0 0 0 1px var(--blue);\n}\n/* Columns follow the table's grid and cell widths (equal when it has none), as Word lays them out;\n tables add no space around themselves. */\n.dve-paper table {\n width: 100%;\n table-layout: fixed;\n border-collapse: collapse;\n margin: 0;\n}\n.dve-paper td {\n min-width: 44px;\n border: var(--dve-cell-border, 1px dashed #c8c6c4);\n vertical-align: top;\n}\n.dve-paper td p {\n margin: 0;\n}\n.dve-paper p[data-list-label]::before {\n content: attr(data-list-label);\n white-space: pre;\n user-select: none;\n}\n.dve-paper p[data-list-marker]:not([data-list-marker=''])::before {\n content: attr(data-list-marker);\n position: absolute;\n left: var(--dve-marker-left);\n text-indent: 0;\n font-family: var(--dve-marker-family);\n font-size: var(--dve-marker-size);\n font-weight: var(--dve-marker-weight);\n font-style: var(--dve-marker-style);\n color: var(--dve-marker-color);\n}\n.multilingual-controls {\n flex: 1 1 100%;\n align-items: flex-start;\n gap: 9px 14px;\n}\n.multilingual-language-control {\n display: grid;\n grid-template-columns: minmax(145px, 180px);\n gap: 4px;\n color: var(--muted);\n font-size: 11px;\n}\n.multilingual-language-control select,\n.multilingual-language-control input {\n box-sizing: border-box;\n width: 180px;\n}\n.multilingual-language-control input {\n height: 26px;\n border: 1px solid var(--line);\n border-radius: 3px;\n background: var(--surface);\n padding: 0 7px;\n color: var(--ink);\n font:\n 11px 'Segoe UI',\n Arial,\n sans-serif;\n}\n.multilingual-note {\n align-self: end;\n max-width: 240px;\n color: var(--muted);\n font-size: 11px;\n}\n@media (max-width: 650px) {\n .ribbon-panel {\n min-height: 96px;\n padding: 6px;\n gap: 4px;\n }\n .ribbon-group {\n padding-right: 7px;\n }\n .ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Font'] {\n width: 340px;\n }\n .ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Paragraph'] {\n width: 280px;\n }\n .ribbon-panel[data-panel='Home'] .ribbon-group[data-label='Editing'] {\n width: auto;\n }\n .ribbon-group button {\n min-width: 34px;\n min-height: 34px;\n }\n .ribbon-group select {\n max-width: min(150px, 42vw);\n }\n .dve-canvas {\n padding: 18px 8px 38px;\n align-items: flex-start;\n }\n .ribbon-group select.font-family-select {\n width: 120px;\n max-width: 38vw;\n }\n .ribbon-group select.font-size-select {\n width: 56px;\n }\n .ribbon-group select.spacing-select {\n width: min(128px, 36vw);\n }\n .ribbon-group select.line-spacing-select {\n width: min(112px, 32vw);\n }\n}\n.dve-break-marker {\n display: block;\n margin: 0.4em 0;\n padding: 2px 0;\n border-top: 1px dashed var(--muted);\n border-bottom: 1px dashed var(--muted);\n color: var(--muted);\n font-size: 10px;\n text-align: center;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n user-select: none;\n}\n.dve-note-reference {\n color: var(--blue);\n cursor: default;\n}\n.dve-header,\n.dve-footer {\n box-sizing: border-box;\n width: 816px;\n max-width: 100%;\n margin: 0 auto;\n padding: 10px clamp(16px, 5vw, 70px);\n background: var(--surface);\n color: var(--muted);\n font:\n 10pt/1.35 Calibri,\n Arial,\n sans-serif;\n}\n.dve-header {\n border-bottom: 1px dashed var(--line);\n}\n.dve-footer {\n border-top: 1px dashed var(--line);\n}\n.dve-header-footer-label {\n margin-bottom: 2px;\n color: var(--muted);\n font-size: 10px;\n text-transform: uppercase;\n letter-spacing: 0.04em;\n}\n.dve-notes-container {\n box-sizing: border-box;\n width: 816px;\n max-width: 100%;\n margin: 12px auto 0;\n}\n.dve-notes {\n box-sizing: border-box;\n padding: 10px clamp(16px, 5vw, 70px);\n background: var(--surface);\n border-top: 1px solid var(--line);\n font:\n 10pt/1.35 Calibri,\n Arial,\n sans-serif;\n}\n.dve-notes-heading {\n margin: 0 0 6px;\n color: var(--ink);\n font-size: 12px;\n}\n.dve-note-list {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n.dve-note-list li {\n display: flex;\n gap: 4px;\n align-items: baseline;\n margin-bottom: 4px;\n}\n.dve-note-marker {\n flex: none;\n color: var(--muted);\n}\n@media (prefers-reduced-motion: reduce) {\n * {\n scroll-behavior: auto !important;\n }\n}\n\n/* Print Layout: a read-only, paginated render kept beside the continuous\n editing surface (see print-layout.ts / print-layout-view.ts). */\n";
16500
16476
 
16501
16477
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/print.css?raw
16502
- var print_default = ".dve-print-pages {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 24px;\n margin: 0 auto;\n zoom: var(--dve-zoom, 1);\n}\n.dve-print-pages[hidden] {\n display: none;\n}\n.dve-print-page {\n position: relative;\n flex: none;\n background: var(--dve-page-color, #fff);\n color: #202124;\n box-shadow:\n 0 1px 3px #20212430,\n 0 4px 12px #20212420;\n overflow: hidden;\n}\n.dve-print-column {\n position: absolute;\n z-index: 1;\n}\n/* Floating pictures sit in front of text unless anchored behind it (wp:anchor/@behindDoc). */\n.dve-print-float {\n z-index: 2;\n}\n.dve-print-float-behind {\n z-index: 0;\n}\n.dve-print-picture-missing {\n box-sizing: border-box;\n border: 1px dashed #8a8886;\n background: #f3f2f1;\n}\n.dve-print-block {\n position: absolute;\n left: 0;\n width: 100%;\n}\n.dve-print-line {\n position: absolute;\n left: 0;\n width: 100%;\n font:\n 11pt/1.2 Calibri,\n Arial,\n sans-serif;\n cursor: text;\n}\n.dve-print-line span {\n position: absolute;\n top: 0;\n}\n.dve-print-row {\n position: absolute;\n left: 0;\n width: 100%;\n}\n/* Cells sit at their grid positions; borders come from the document (Word prints no gridlines). */\n.dve-print-cell {\n position: absolute;\n top: 0;\n box-sizing: border-box;\n}\n.dve-print-cell-content {\n position: absolute;\n bottom: 0;\n}\n@media print {\n .dve-ribbon,\n .dve-status,\n .multilingual-controls {\n display: none !important;\n }\n .dve-canvas {\n overflow: visible !important;\n padding: 0 !important;\n }\n .dve-paper {\n display: none !important;\n }\n .dve-print-pages {\n gap: 0 !important;\n zoom: 1 !important;\n }\n .dve-print-page {\n /* Like Word, page colours are not printed unless asked for. */\n background: #fff !important;\n box-shadow: none !important;\n break-after: page;\n }\n}\n.dve-print-header,\n.dve-print-footer {\n position: absolute;\n color: var(--ink);\n font-size: 11pt;\n pointer-events: none;\n}\n.dve-print-header p,\n.dve-print-footer p {\n margin: 0;\n}\n.dve-print-header table,\n.dve-print-footer table {\n width: 100%;\n border-collapse: collapse;\n}\n\n/* Complex field begin/code/separate/end markers: kept in the document, never shown. */\n.dve-field-marker {\n display: inline;\n font-size: 0;\n}\n\n/* TOC entries link to hidden _Toc bookmarks; Word draws them in the entry's style, not as links. */\na.dve-link[data-anchor^='_Toc'] {\n color: inherit;\n text-decoration: none;\n}\n\n/* Tabs sized to Word's tab stops by tab-stops-view.ts; leaders fill the tab's width. */\n.dve-tab {\n display: inline-block;\n overflow: hidden;\n white-space: pre;\n vertical-align: baseline;\n text-indent: 0;\n}\n.dve-tab-leader-dot,\n.dve-tab-leader-middleDot {\n background-image: radial-gradient(circle, currentColor 0.8px, transparent 1.1px);\n background-size: 4px 4px;\n background-repeat: repeat-x;\n background-position: right 0 bottom 0.25em;\n}\n.dve-tab-leader-hyphen {\n background-image: linear-gradient(to right, currentColor 50%, transparent 50%);\n background-size: 6px 1px;\n background-repeat: repeat-x;\n background-position: right 0 bottom 0.4em;\n}\n.dve-tab-leader-underscore,\n.dve-tab-leader-heavy {\n border-bottom: 1px solid currentColor;\n}\n.dve-tab-leader-heavy {\n border-bottom-width: 2px;\n}\n\n/* Footnotes above the bottom margin; the separator is Word's 2-inch rule. */\n.dve-print-footnotes {\n position: absolute;\n z-index: 1;\n}\n.dve-print-footnote-separator {\n position: absolute;\n top: -7px;\n left: 0;\n width: 192px;\n border-top: 1px solid currentColor;\n}\n.dve-print-footnote {\n position: absolute;\n left: 0;\n width: 100%;\n}\n\n[data-print-view] .dve-notes-container {\n display: none;\n}\n\n/* Word draws superscript and subscript at about two thirds size without growing the line. */\n.dve-paper sup,\n.dve-paper sub {\n font-size: 0.65em;\n line-height: 0;\n}\n/* Exact-height rows clip content that does not fit, as Word does. */\n.dve-print-cell {\n overflow: hidden;\n}\n.dve-print-paragraph-frame {\n position: absolute;\n top: 0;\n box-sizing: border-box;\n}\n\n/* View > Multiple Pages: Print Layout's sheets sit side by side and wrap, instead of one column. */\n.dve-canvas[data-multipage] .dve-print-pages {\n flex-direction: row;\n flex-wrap: wrap;\n align-items: flex-start;\n justify-content: center;\n}\n\n/* Layout > Line Numbers: numbers in the left margin, one per printed line. */\n.dve-print-line-number {\n position: absolute;\n width: 40px;\n text-align: right;\n font:\n 10px 'Segoe UI',\n Arial,\n sans-serif;\n color: #444;\n pointer-events: none;\n}\n";
16478
+ var print_default = ".dve-print-pages {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 24px;\n margin: 0 auto;\n zoom: var(--dve-zoom, 1);\n}\n.dve-print-pages[hidden] {\n display: none;\n}\n.dve-print-page {\n position: relative;\n flex: none;\n background: var(--dve-page-color, #fff);\n color: #202124;\n box-shadow:\n 0 1px 3px #20212430,\n 0 4px 12px #20212420;\n overflow: hidden;\n}\n.dve-print-column {\n position: absolute;\n z-index: 1;\n}\n/* Floating pictures sit in front of text unless anchored behind it (wp:anchor/@behindDoc). */\n.dve-print-float {\n z-index: 2;\n}\n.dve-print-float-behind {\n z-index: 0;\n}\n.dve-print-picture-missing {\n box-sizing: border-box;\n border: 1px dashed #8a8886;\n background: #f3f2f1;\n}\n.dve-print-chart {\n overflow: hidden;\n background: #fff;\n}\n.dve-print-chart > svg {\n display: block;\n width: 100%;\n height: 100%;\n}\n.dve-print-chart-frame {\n display: grid;\n place-items: center;\n color: #605e5c;\n font-size: 11px;\n}\n.dve-print-block {\n position: absolute;\n left: 0;\n width: 100%;\n}\n.dve-print-line {\n position: absolute;\n left: 0;\n width: 100%;\n font:\n 11pt/1.2 Calibri,\n Arial,\n sans-serif;\n cursor: text;\n}\n.dve-print-line span {\n position: absolute;\n top: 0;\n}\n.dve-print-row {\n position: absolute;\n left: 0;\n width: 100%;\n}\n/* Cells sit at their grid positions; borders come from the document (Word prints no gridlines). */\n.dve-print-cell {\n position: absolute;\n top: 0;\n box-sizing: border-box;\n}\n.dve-print-cell-content {\n position: absolute;\n bottom: 0;\n}\n@media print {\n .dve-ribbon,\n .dve-status,\n .multilingual-controls {\n display: none !important;\n }\n .dve-canvas {\n overflow: visible !important;\n padding: 0 !important;\n }\n .dve-paper {\n display: none !important;\n }\n .dve-print-pages {\n gap: 0 !important;\n zoom: 1 !important;\n }\n .dve-print-page {\n /* Like Word, page colours are not printed unless asked for. */\n background: #fff !important;\n box-shadow: none !important;\n break-after: page;\n }\n}\n.dve-print-header,\n.dve-print-footer {\n position: absolute;\n color: var(--ink);\n font-size: 11pt;\n pointer-events: none;\n}\n.dve-print-header p,\n.dve-print-footer p {\n margin: 0;\n}\n.dve-print-header table,\n.dve-print-footer table {\n width: 100%;\n border-collapse: collapse;\n}\n\n/* Complex field begin/code/separate/end markers: kept in the document, never shown. */\n.dve-field-marker {\n display: inline;\n font-size: 0;\n}\n\n/* TOC entries link to hidden _Toc bookmarks; Word draws them in the entry's style, not as links. */\na.dve-link[data-anchor^='_Toc'] {\n color: inherit;\n text-decoration: none;\n}\n\n/* Tabs sized to Word's tab stops by tab-stops-view.ts; leaders fill the tab's width. */\n.dve-tab {\n display: inline-block;\n overflow: hidden;\n white-space: pre;\n vertical-align: baseline;\n text-indent: 0;\n}\n.dve-tab-leader-dot,\n.dve-tab-leader-middleDot {\n background-image: radial-gradient(circle, currentColor 0.8px, transparent 1.1px);\n background-size: 4px 4px;\n background-repeat: repeat-x;\n background-position: right 0 bottom 0.25em;\n}\n.dve-tab-leader-hyphen {\n background-image: linear-gradient(to right, currentColor 50%, transparent 50%);\n background-size: 6px 1px;\n background-repeat: repeat-x;\n background-position: right 0 bottom 0.4em;\n}\n.dve-tab-leader-underscore,\n.dve-tab-leader-heavy {\n border-bottom: 1px solid currentColor;\n}\n.dve-tab-leader-heavy {\n border-bottom-width: 2px;\n}\n\n/* Footnotes above the bottom margin; the separator is Word's 2-inch rule. */\n.dve-print-footnotes {\n position: absolute;\n z-index: 1;\n}\n.dve-print-footnote-separator {\n position: absolute;\n top: -7px;\n left: 0;\n width: 192px;\n border-top: 1px solid currentColor;\n}\n.dve-print-footnote {\n position: absolute;\n left: 0;\n width: 100%;\n}\n\n[data-print-view] .dve-notes-container {\n display: none;\n}\n\n/* Word draws superscript and subscript at about two thirds size without growing the line. */\n.dve-paper sup,\n.dve-paper sub {\n font-size: 0.65em;\n line-height: 0;\n}\n/* Exact-height rows clip content that does not fit, as Word does. */\n.dve-print-cell {\n overflow: hidden;\n}\n.dve-print-paragraph-frame {\n position: absolute;\n top: 0;\n box-sizing: border-box;\n}\n\n/* View > Multiple Pages: Print Layout's sheets sit side by side and wrap, instead of one column. */\n.dve-canvas[data-multipage] .dve-print-pages {\n flex-direction: row;\n flex-wrap: wrap;\n align-items: flex-start;\n justify-content: center;\n}\n\n/* Layout > Line Numbers: numbers in the left margin, one per printed line. */\n.dve-print-line-number {\n position: absolute;\n width: 40px;\n text-align: right;\n font:\n 10px 'Segoe UI',\n Arial,\n sans-serif;\n color: #444;\n pointer-events: none;\n}\n";
16503
16479
 
16504
16480
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/chrome-titlebar.css?raw
16505
16481
  var chrome_titlebar_default = ".dve-frame {\n position: relative;\n border: 0;\n box-shadow: none;\n}\n.dve-icon {\n flex: none;\n}\n.dve-icon-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n min-width: 28px;\n height: 28px;\n padding: 0 6px;\n border: 0;\n border-radius: 4px;\n background: none;\n color: inherit;\n cursor: pointer;\n}\n.dve-icon-button:hover:not(:disabled),\n.dve-icon-button[aria-pressed='true'] {\n background: var(--word-soft);\n}\n.dve-icon-button:disabled {\n opacity: 0.4;\n cursor: default;\n}\n\n/* Title bar: drawn by the shared office-ui-title-bar; these colour it and style the account slot. */\n.dve-titlebar {\n flex: none;\n --office-title-bar-height: 40px;\n --office-title-bar-background: var(--chrome);\n --office-title-bar-border: var(--line);\n --office-title-bar-mark-background: var(--word);\n --office-title-bar-mark-foreground: var(--dve-primary-foreground);\n}\n.dve-title-actions {\n display: flex;\n align-items: center;\n gap: 2px;\n}\n.dve-mode-select {\n height: 28px;\n margin-left: 4px;\n padding: 0 6px;\n border: 1px solid var(--line);\n border-radius: 4px;\n background: var(--surface);\n color: var(--ink);\n font: inherit;\n}\n";
@@ -16511,7 +16487,7 @@ var backstage_default = "/* Backstage: the shared office-ui-backstage draws the
16511
16487
  var status_dialogs_default = "/* Status bar: drawn by the shared office-ui-status-bar; this only places it in the frame. */\n.dve-status {\n display: block;\n flex: none;\n min-width: 0;\n border-top: 1px solid var(--line);\n}\n\n@media (max-width: 760px) {\n .dve-backstage-content {\n padding: 20px;\n }\n}\n\n/* Dialogs: the shared office-ui-dialog draws the modal frame; these style the fields inside it. */\n.dve-dialog {\n --office-dialog-width: min(440px, calc(100vw - 32px));\n}\n/* The fields are the dialog's light-DOM children, laid out in the shared body. */\n.dve-dialog > :not([slot]) + :not([slot]) {\n margin-top: 10px;\n}\n.dve-dialog label {\n display: grid;\n gap: 4px;\n color: var(--muted);\n font-size: 12px;\n}\n.dve-dialog input,\n.dve-dialog select {\n height: 30px;\n padding: 0 8px;\n border: 1px solid var(--line);\n border-radius: 4px;\n background: var(--surface);\n color: var(--ink);\n font: inherit;\n}\n.dve-dialog-actions {\n display: flex;\n justify-content: flex-end;\n gap: 8px;\n}\n.dve-dialog-actions button {\n min-height: 30px;\n padding: 0 14px;\n border: 1px solid var(--line);\n border-radius: 4px;\n background: var(--surface);\n color: var(--ink);\n font: inherit;\n cursor: pointer;\n}\n.dve-dialog-actions .dve-dialog-primary {\n border-color: var(--word);\n background: var(--word);\n color: var(--dve-primary-foreground);\n}\n";
16512
16488
 
16513
16489
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/chrome-document.css?raw
16514
- var chrome_document_default = "/* Links, pictures and hidden text in the document */\n.dve-equation {\n display: inline-block;\n vertical-align: middle;\n max-width: 100%;\n font-family: 'Cambria Math', math, serif;\n}\n.dve-equation-display {\n display: block;\n margin: 0.5em 0;\n text-align: center;\n}\n.dve-equation-unavailable {\n color: var(--muted);\n font-size: 0.85em;\n}\n.dve-paper a.dve-link {\n color: var(--word);\n text-decoration: underline;\n cursor: text;\n}\n.dve-paper img.dve-image {\n max-width: 100%;\n height: auto;\n vertical-align: bottom;\n}\n.dve-paper .dve-image-placeholder {\n display: inline-grid;\n place-items: center;\n border: 1px dashed var(--line);\n background: var(--canvas);\n color: var(--muted);\n font-size: 11px;\n}\n.dve-paper .dve-image-placeholder:has(.dve-textbox-line) {\n place-items: start;\n align-content: start;\n overflow: hidden;\n padding: 4px 6px;\n box-sizing: border-box;\n text-align: left;\n border-style: solid;\n}\n.dve-paper .dve-textbox-line {\n display: block;\n color: var(--text, #1f1f1f);\n font-size: 12px;\n}\n.dve-paper:not([data-show-hidden]) .dve-hidden-text {\n display: none;\n}\n.dve-paper[data-show-hidden] .dve-hidden-text {\n opacity: 0.55;\n text-decoration: underline dotted;\n}\n\n/* Pictures: selection outline and proportional resize handle */\n.dve-paper .dve-picture {\n position: relative;\n display: inline-block;\n max-width: 100%;\n line-height: 0;\n}\n.dve-paper .dve-picture-selected {\n outline: 2px solid var(--word);\n outline-offset: 1px;\n}\n.dve-picture-handle {\n position: absolute;\n right: -5px;\n bottom: -5px;\n display: none;\n width: 10px;\n height: 10px;\n border: 1px solid var(--word);\n background: #fff;\n cursor: nwse-resize;\n}\n.dve-picture-selected .dve-picture-handle {\n display: block;\n}\n.dve-dialog textarea {\n min-height: 60px;\n padding: 6px 8px;\n border: 1px solid var(--line);\n border-radius: 4px;\n background: var(--surface);\n color: var(--ink);\n font: inherit;\n resize: vertical;\n}\n.dve-dialog-row {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 10px;\n}\n.dve-dialog .dve-dialog-check {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--ink);\n}\n\n/* Header/footer editing (double-click a header or footer) */\n.dve-header-footer-slot[data-slot] {\n cursor: text;\n}\n.dve-header-footer-editing {\n outline: 1px dashed var(--word);\n outline-offset: 4px;\n}\n.dve-header-footer-editor .ProseMirror {\n outline: none;\n white-space: pre-wrap;\n}\n.dve-header-footer-editor .ProseMirror p {\n margin: 0;\n}\n\n/* Section break marks after the paragraph that ends a section */\n.dve-paper .dve-section-end::after {\n display: block;\n margin: 6px 0;\n border-top: 1px dotted var(--muted);\n border-bottom: 1px dotted var(--muted);\n color: var(--muted);\n content: attr(data-section-break);\n font-size: 10px;\n line-height: 14px;\n text-align: center;\n user-select: none;\n}\n\n/* Floating pictures: an approximation of Word's text wrapping */\n.dve-paper .dve-float-left,\n.dve-header-footer-body .dve-float-left {\n float: left;\n margin: 2px 12px 6px 0;\n}\n.dve-paper .dve-float-right,\n.dve-header-footer-body .dve-float-right {\n float: right;\n margin: 2px 0 6px 12px;\n}\n.dve-paper .dve-float-block {\n display: block;\n width: fit-content;\n margin: 6px 0;\n}\n.dve-paper .dve-float-block-center {\n margin-right: auto;\n margin-left: auto;\n}\n.dve-paper .dve-float-block-right {\n margin-left: auto;\n}\n.dve-paper[data-show-marks] .ProseMirror p::after,\n.dve-paper[data-show-marks] .ProseMirror h1::after,\n.dve-paper[data-show-marks] .ProseMirror h2::after,\n.dve-paper[data-show-marks] .ProseMirror h3::after {\n color: var(--blue);\n content: '\\00b6';\n opacity: 0.7;\n pointer-events: none;\n}\n\n/* Font and Paragraph dialogs */\n.dve-format-dialog {\n --office-dialog-width: min(520px, calc(100vw - 32px));\n}\n.dve-format-dialog .dve-dialog-fieldset {\n display: grid;\n gap: 8px;\n margin: 0;\n padding: 8px 10px 10px;\n border: 1px solid var(--line);\n border-radius: 6px;\n}\n.dve-format-dialog legend {\n padding: 0 4px;\n color: var(--muted);\n font-size: 12px;\n}\n.dve-format-dialog .dve-dialog-cols {\n grid-template-columns: repeat(var(--cols, 2), minmax(0, 1fr));\n}\n.dve-format-dialog input[type='color'] {\n padding: 2px;\n}\n.dve-format-dialog .dve-dialog-fieldset > .dve-dialog-check {\n display: flex;\n}\n.dve-font-dialog .dve-dialog-fieldset:nth-of-type(1) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n.dve-font-dialog .dve-font-tab-panel[hidden] {\n display: none;\n}\n.dve-font-tab-panel {\n display: grid;\n gap: 10px;\n}\n.dve-font-dialog .dve-font-tab-panel .dve-dialog-fieldset:has(.dve-dialog-cols) {\n grid-template-columns: 1fr;\n}\n.dve-font-tabs {\n display: flex;\n gap: 2px;\n border-bottom: 1px solid var(--line);\n}\n.dve-font-tabs button {\n background: transparent;\n border: 0;\n border-radius: 0;\n padding: 7px 14px;\n}\n.dve-font-tabs button[aria-selected='true'] {\n color: var(--word);\n border-bottom: 2px solid var(--word);\n font-weight: 600;\n}\n.dve-format-preview {\n display: grid;\n min-height: 54px;\n place-items: center;\n border: 1px solid var(--line);\n border-radius: 4px;\n background: #fff;\n color: #000;\n overflow: hidden;\n}\n.dve-dialog input[type='checkbox'] {\n width: 16px;\n height: 16px;\n padding: 0;\n margin: 0;\n accent-color: var(--word);\n}\n.dve-format-dialog .dve-dialog-fieldset:has(> .dve-dialog-check):not(:has(> .dve-dialog-cols)) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 6px 12px;\n}\n.dve-format-dialog\n .dve-dialog-fieldset:has(> .dve-dialog-check):not(:has(> .dve-dialog-cols))\n legend {\n grid-column: 1 / -1;\n}\n\n/* View > Gridlines: a quarter-inch alignment grid over the page. */\n.dve-paper[data-show-gridlines] {\n background-image:\n linear-gradient(to right, #8ab4f855 1px, transparent 1px),\n linear-gradient(to bottom, #8ab4f855 1px, transparent 1px);\n background-size: 24px 24px;\n}\n\n.dve-dialog-message {\n min-height: 1.2em;\n margin: 0;\n color: #b3261e;\n font-size: 12px;\n}\n\n/* View > Ruler: inch ticks from the left margin, shaded margins and indent markers. */\n.dve-canvas > .dve-ruler {\n position: sticky;\n top: -30px;\n z-index: 6;\n flex: none;\n box-sizing: border-box;\n height: 22px;\n margin: -30px auto 8px;\n zoom: var(--dve-zoom, 1);\n border: 1px solid var(--line);\n background:\n linear-gradient(to right, #6b6f75 1px, transparent 1px) var(--dve-ruler-origin, 0) 100% / 96px\n 11px repeat-x,\n linear-gradient(to right, #6b6f75 1px, transparent 1px) var(--dve-ruler-origin, 0) 100% / 48px\n 8px repeat-x,\n linear-gradient(to right, #9aa0a6 1px, transparent 1px) var(--dve-ruler-origin, 0) 100% / 12px\n 5px repeat-x,\n #fff;\n color: #4a4d52;\n font:\n 9px 'Segoe UI',\n Arial,\n sans-serif;\n pointer-events: none;\n}\n.dve-ruler-margin-left,\n.dve-ruler-margin-right {\n position: absolute;\n top: 0;\n bottom: 0;\n background: #dfe3e8;\n}\n.dve-ruler-margin-left {\n left: 0;\n}\n.dve-ruler-margin-right {\n right: 0;\n}\n.dve-ruler-labels span {\n position: absolute;\n top: 1px;\n transform: translateX(-50%);\n}\n.dve-ruler-marker {\n pointer-events: auto;\n cursor: ew-resize;\n touch-action: none;\n position: absolute;\n width: 0;\n height: 0;\n margin-left: -4px;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dve-ruler-marker::after {\n content: '';\n position: absolute;\n inset: -6px -6px -6px -6px;\n margin-left: -4px;\n}\n.dve-ruler-marker-first-line {\n top: 1px;\n border-top: 6px solid #2b579a;\n}\n.dve-ruler-marker-left,\n.dve-ruler-marker-right {\n bottom: 1px;\n border-bottom: 6px solid #2b579a;\n}\n";
16490
+ var chrome_document_default = "/* Links, pictures and hidden text in the document */\n.dve-equation {\n display: inline-block;\n vertical-align: middle;\n max-width: 100%;\n font-family: 'Cambria Math', math, serif;\n}\n.dve-equation-display {\n display: block;\n margin: 0.5em 0;\n text-align: center;\n}\n.dve-equation-unavailable {\n color: var(--muted);\n font-size: 0.85em;\n}\n.dve-paper a.dve-link {\n color: var(--word);\n text-decoration: underline;\n cursor: text;\n}\n.dve-paper img.dve-image {\n max-width: 100%;\n height: auto;\n vertical-align: bottom;\n}\n.dve-paper .dve-image-placeholder {\n display: inline-grid;\n place-items: center;\n border: 1px dashed var(--line);\n background: var(--canvas);\n color: var(--muted);\n font-size: 11px;\n}\n/* Charts: painted read-only from the cached values in the chart part. */\n.dve-paper .dve-chart {\n display: inline-block;\n vertical-align: bottom;\n max-width: 100%;\n overflow: hidden;\n background: #fff;\n}\n.dve-paper .dve-chart > svg {\n display: block;\n width: 100%;\n height: 100%;\n}\n.dve-paper .dve-image-placeholder:has(.dve-textbox-line) {\n place-items: start;\n align-content: start;\n overflow: hidden;\n padding: 4px 6px;\n box-sizing: border-box;\n text-align: left;\n border-style: solid;\n}\n.dve-paper .dve-textbox-line {\n display: block;\n color: var(--text, #1f1f1f);\n font-size: 12px;\n}\n.dve-paper:not([data-show-hidden]) .dve-hidden-text {\n display: none;\n}\n.dve-paper[data-show-hidden] .dve-hidden-text {\n opacity: 0.55;\n text-decoration: underline dotted;\n}\n\n/* Pictures: selection outline and proportional resize handle */\n.dve-paper .dve-picture {\n position: relative;\n display: inline-block;\n max-width: 100%;\n line-height: 0;\n}\n.dve-paper .dve-picture-selected {\n outline: 2px solid var(--word);\n outline-offset: 1px;\n}\n.dve-picture-handle {\n position: absolute;\n right: -5px;\n bottom: -5px;\n display: none;\n width: 10px;\n height: 10px;\n border: 1px solid var(--word);\n background: #fff;\n cursor: nwse-resize;\n}\n.dve-picture-selected .dve-picture-handle {\n display: block;\n}\n.dve-dialog textarea {\n min-height: 60px;\n padding: 6px 8px;\n border: 1px solid var(--line);\n border-radius: 4px;\n background: var(--surface);\n color: var(--ink);\n font: inherit;\n resize: vertical;\n}\n.dve-dialog-row {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 10px;\n}\n.dve-dialog .dve-dialog-check {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--ink);\n}\n\n/* Header/footer editing (double-click a header or footer) */\n.dve-header-footer-slot[data-slot] {\n cursor: text;\n}\n.dve-header-footer-editing {\n outline: 1px dashed var(--word);\n outline-offset: 4px;\n}\n.dve-header-footer-editor .ProseMirror {\n outline: none;\n white-space: pre-wrap;\n}\n.dve-header-footer-editor .ProseMirror p {\n margin: 0;\n}\n\n/* Section break marks after the paragraph that ends a section */\n.dve-paper .dve-section-end::after {\n display: block;\n margin: 6px 0;\n border-top: 1px dotted var(--muted);\n border-bottom: 1px dotted var(--muted);\n color: var(--muted);\n content: attr(data-section-break);\n font-size: 10px;\n line-height: 14px;\n text-align: center;\n user-select: none;\n}\n\n/* Floating pictures: an approximation of Word's text wrapping */\n.dve-paper .dve-float-left,\n.dve-header-footer-body .dve-float-left {\n float: left;\n margin: 2px 12px 6px 0;\n}\n.dve-paper .dve-float-right,\n.dve-header-footer-body .dve-float-right {\n float: right;\n margin: 2px 0 6px 12px;\n}\n.dve-paper .dve-float-block {\n display: block;\n width: fit-content;\n margin: 6px 0;\n}\n.dve-paper .dve-float-block-center {\n margin-right: auto;\n margin-left: auto;\n}\n.dve-paper .dve-float-block-right {\n margin-left: auto;\n}\n.dve-paper[data-show-marks] .ProseMirror p::after,\n.dve-paper[data-show-marks] .ProseMirror h1::after,\n.dve-paper[data-show-marks] .ProseMirror h2::after,\n.dve-paper[data-show-marks] .ProseMirror h3::after {\n color: var(--blue);\n content: '\\00b6';\n opacity: 0.7;\n pointer-events: none;\n}\n\n/* Font and Paragraph dialogs */\n.dve-format-dialog {\n --office-dialog-width: min(520px, calc(100vw - 32px));\n}\n.dve-format-dialog .dve-dialog-fieldset {\n display: grid;\n gap: 8px;\n margin: 0;\n padding: 8px 10px 10px;\n border: 1px solid var(--line);\n border-radius: 6px;\n}\n.dve-format-dialog legend {\n padding: 0 4px;\n color: var(--muted);\n font-size: 12px;\n}\n.dve-format-dialog .dve-dialog-cols {\n grid-template-columns: repeat(var(--cols, 2), minmax(0, 1fr));\n}\n.dve-format-dialog input[type='color'] {\n padding: 2px;\n}\n.dve-format-dialog .dve-dialog-fieldset > .dve-dialog-check {\n display: flex;\n}\n.dve-font-dialog .dve-dialog-fieldset:nth-of-type(1) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n}\n.dve-font-dialog .dve-font-tab-panel[hidden] {\n display: none;\n}\n.dve-font-tab-panel {\n display: grid;\n gap: 10px;\n}\n.dve-font-dialog .dve-font-tab-panel .dve-dialog-fieldset:has(.dve-dialog-cols) {\n grid-template-columns: 1fr;\n}\n.dve-font-tabs {\n display: flex;\n gap: 2px;\n border-bottom: 1px solid var(--line);\n}\n.dve-font-tabs button {\n background: transparent;\n border: 0;\n border-radius: 0;\n padding: 7px 14px;\n}\n.dve-font-tabs button[aria-selected='true'] {\n color: var(--word);\n border-bottom: 2px solid var(--word);\n font-weight: 600;\n}\n.dve-format-preview {\n display: grid;\n min-height: 54px;\n place-items: center;\n border: 1px solid var(--line);\n border-radius: 4px;\n background: #fff;\n color: #000;\n overflow: hidden;\n}\n.dve-dialog input[type='checkbox'] {\n width: 16px;\n height: 16px;\n padding: 0;\n margin: 0;\n accent-color: var(--word);\n}\n.dve-format-dialog .dve-dialog-fieldset:has(> .dve-dialog-check):not(:has(> .dve-dialog-cols)) {\n grid-template-columns: repeat(2, minmax(0, 1fr));\n gap: 6px 12px;\n}\n.dve-format-dialog\n .dve-dialog-fieldset:has(> .dve-dialog-check):not(:has(> .dve-dialog-cols))\n legend {\n grid-column: 1 / -1;\n}\n\n/* View > Gridlines: a quarter-inch alignment grid over the page. */\n.dve-paper[data-show-gridlines] {\n background-image:\n linear-gradient(to right, #8ab4f855 1px, transparent 1px),\n linear-gradient(to bottom, #8ab4f855 1px, transparent 1px);\n background-size: 24px 24px;\n}\n\n.dve-dialog-message {\n min-height: 1.2em;\n margin: 0;\n color: #b3261e;\n font-size: 12px;\n}\n\n/* View > Ruler: placement only; the shared office-ui-ruler draws ticks, margins and markers. */\n.dve-canvas > .dve-ruler {\n position: sticky;\n top: -30px;\n z-index: 6;\n flex: none;\n height: 22px;\n margin: -30px auto 8px;\n border: 1px solid var(--line);\n pointer-events: none;\n}\n";
16515
16491
 
16516
16492
  // raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/page-navigator.css?raw
16517
16493
  var page_navigator_default = "/* Page thumbnail rail and ribbon customisation */\n[data-dve-hidden] {\n display: none !important;\n}\n.dve-pages-rail {\n display: flex;\n flex: none;\n flex-direction: column;\n box-sizing: border-box;\n width: 156px;\n min-height: 0;\n border-right: 1px solid var(--line);\n background: var(--surface);\n color: var(--ink);\n}\n.dve-pages-rail[hidden] {\n display: none;\n}\n.dve-pages-head {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 6px 8px;\n border-bottom: 1px solid var(--line);\n font-size: 11px;\n font-weight: 600;\n}\n.dve-pages-close {\n border: 0;\n border-radius: 4px;\n background: none;\n color: var(--muted);\n font-size: 16px;\n line-height: 1;\n cursor: pointer;\n}\n.dve-pages-close:hover {\n background: var(--word-soft);\n}\n.dve-pages-message {\n margin: 0;\n padding: 12px 10px;\n color: var(--muted);\n font-size: 11px;\n line-height: 1.4;\n}\n.dve-pages-message[hidden],\n.dve-pages-list[hidden] {\n display: none;\n}\n.dve-pages-list {\n position: relative;\n flex: 1;\n min-height: 0;\n overflow-y: auto;\n padding: 10px 0 16px;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 10px;\n}\n.dve-page-thumb {\n display: flex;\n flex: none;\n flex-direction: column;\n align-items: center;\n gap: 3px;\n padding: 4px;\n border: 2px solid transparent;\n border-radius: 4px;\n cursor: pointer;\n}\n.dve-page-thumb:hover {\n background: var(--word-soft);\n}\n.dve-page-thumb[aria-selected='true'] {\n border-color: var(--word);\n background: var(--word-soft);\n}\n.dve-page-thumb-sheet {\n position: relative;\n overflow: hidden;\n background: #fff;\n box-shadow: 0 1px 3px #20212440;\n pointer-events: none;\n}\n.dve-page-thumb-sheet .dve-print-page {\n position: absolute;\n top: 0;\n left: 0;\n box-shadow: none;\n}\n.dve-page-thumb-number {\n color: var(--muted);\n font-size: 11px;\n}\n.dve-page-thumb[aria-selected='true'] .dve-page-thumb-number {\n color: var(--ink);\n font-weight: 600;\n}\n@media print {\n .dve-pages-rail {\n display: none !important;\n }\n}\n";
@@ -16886,10 +16862,10 @@ function createSearchPanel(options, initialLocale = "en") {
16886
16862
 
16887
16863
  // src/docx/print-table.ts
16888
16864
  var cssBorder = (border) => border ? `${border.widthPx}px ${border.style} ${border.color}` : "";
16889
- function geometryOf(row4, index, widthPx) {
16890
- const given = row4.geometry?.[index];
16865
+ function geometryOf(row3, index, widthPx) {
16866
+ const given = row3.geometry?.[index];
16891
16867
  if (given) return given;
16892
- const share = widthPx / Math.max(1, row4.cells.length);
16868
+ const share = widthPx / Math.max(1, row3.cells.length);
16893
16869
  return {
16894
16870
  xPx: share * index,
16895
16871
  widthPx: share,
@@ -16904,31 +16880,31 @@ function renderTable(box2, columnWidthPx, renderParagraph) {
16904
16880
  table.style.top = `${box2.yPx}px`;
16905
16881
  table.style.height = `${box2.heightPx}px`;
16906
16882
  if (box2.xPx) table.style.left = `${box2.xPx}px`;
16907
- box2.rows.forEach((row4, rowIndex) => {
16883
+ box2.rows.forEach((row3, rowIndex) => {
16908
16884
  const rowEl = document.createElement("div");
16909
16885
  rowEl.className = "dve-print-row";
16910
- rowEl.style.top = `${row4.yPx}px`;
16911
- rowEl.style.height = `${row4.heightPx}px`;
16912
- if (row4.repeated) rowEl.dataset.repeated = "true";
16886
+ rowEl.style.top = `${row3.yPx}px`;
16887
+ rowEl.style.height = `${row3.heightPx}px`;
16888
+ if (row3.repeated) rowEl.dataset.repeated = "true";
16913
16889
  const lastRow = rowIndex === box2.rows.length - 1;
16914
- row4.cells.forEach((paragraphs, cellIndex) => {
16915
- const geometry = geometryOf(row4, cellIndex, columnWidthPx);
16890
+ row3.cells.forEach((paragraphs, cellIndex) => {
16891
+ const geometry = geometryOf(row3, cellIndex, columnWidthPx);
16916
16892
  const cell = document.createElement("div");
16917
16893
  cell.className = "dve-print-cell";
16918
16894
  Object.assign(cell.style, {
16919
16895
  left: `${geometry.xPx}px`,
16920
16896
  width: `${geometry.widthPx}px`,
16921
- height: `${row4.heightPx}px`
16897
+ height: `${row3.heightPx}px`
16922
16898
  });
16923
16899
  if (geometry.shading) cell.style.background = geometry.shading;
16924
16900
  const borders = geometry.borders;
16925
16901
  cell.style.borderTop = cssBorder(borders?.top);
16926
16902
  cell.style.borderLeft = cssBorder(borders?.left);
16927
- if (cellIndex === row4.cells.length - 1) cell.style.borderRight = cssBorder(borders?.right);
16903
+ if (cellIndex === row3.cells.length - 1) cell.style.borderRight = cssBorder(borders?.right);
16928
16904
  if (lastRow) cell.style.borderBottom = cssBorder(borders?.bottom);
16929
16905
  const content = document.createElement("div");
16930
16906
  content.className = "dve-print-cell-content";
16931
- const free = Math.max(0, row4.heightPx - geometry.contentHeightPx);
16907
+ const free = Math.max(0, row3.heightPx - geometry.contentHeightPx);
16932
16908
  const offset = geometry.verticalAlign === "center" ? free / 2 : geometry.verticalAlign === "bottom" ? free : 0;
16933
16909
  Object.assign(content.style, {
16934
16910
  left: `${geometry.paddingLeftPx}px`,
@@ -16950,7 +16926,7 @@ function lineNumberLabels(page2, settings, counter3, suppressed) {
16950
16926
  if (counter3.section === -1 || settings.restart === "newPage" || newSection && settings.restart === "newSection")
16951
16927
  counter3.next = settings.start;
16952
16928
  counter3.section = page2.sectionIndex;
16953
- const labels2 = [];
16929
+ const labels3 = [];
16954
16930
  const gap = (settings.distanceTwips ?? 360) / 15;
16955
16931
  for (const column of page2.columns)
16956
16932
  for (const block of column.blocks) {
@@ -16967,10 +16943,10 @@ function lineNumberLabels(page2, settings, counter3, suppressed) {
16967
16943
  height: `${line.heightPx}px`,
16968
16944
  lineHeight: `${line.heightPx}px`
16969
16945
  });
16970
- labels2.push(label);
16946
+ labels3.push(label);
16971
16947
  }
16972
16948
  }
16973
- return labels2;
16949
+ return labels3;
16974
16950
  }
16975
16951
  var POINT = 4 / 3;
16976
16952
  function pageBorderBox(page2, borders) {
@@ -17064,8 +17040,30 @@ function resolveFragmentClick(fragments, clientX) {
17064
17040
  return start + Math.round((end - start) * ratio);
17065
17041
  }
17066
17042
 
17067
- // src/docx/print-layout.ts
17043
+ // src/docx/print-picture.ts
17044
+ function chartElement(chart) {
17045
+ const element = document.createElement("div");
17046
+ element.dataset.docxChart = chart.svg ? "1" : "frame";
17047
+ const svg = chart.svg ? new DOMParser().parseFromString(chart.svg, "image/svg+xml").documentElement : void 0;
17048
+ if (svg && svg.localName === "svg") {
17049
+ element.classList.add("dve-print-chart");
17050
+ element.title = chart.label;
17051
+ element.append(document.importNode(svg, true));
17052
+ } else {
17053
+ element.classList.add("dve-print-picture-missing", "dve-print-chart-frame");
17054
+ element.textContent = chart.label;
17055
+ }
17056
+ return element;
17057
+ }
17068
17058
  function pictureElement(object, pictureUrl) {
17059
+ if (object.chart) {
17060
+ const element2 = chartElement(object.chart);
17061
+ element2.classList.add("dve-print-picture");
17062
+ element2.style.position = "absolute";
17063
+ element2.style.width = `${object.widthPx}px`;
17064
+ element2.style.height = `${object.heightPx}px`;
17065
+ return element2;
17066
+ }
17069
17067
  const url = object.partName ? pictureUrl?.(object.partName, object.contentType) : void 0;
17070
17068
  const element = document.createElement(url ? "img" : "div");
17071
17069
  if (url) {
@@ -17078,6 +17076,8 @@ function pictureElement(object, pictureUrl) {
17078
17076
  element.style.height = `${object.heightPx}px`;
17079
17077
  return element;
17080
17078
  }
17079
+
17080
+ // src/docx/print-layout.ts
17081
17081
  var LEADER_CHARACTERS = { dot: ".", hyphen: "-", middleDot: "\xB7" };
17082
17082
  function leaderElement(fragment) {
17083
17083
  const el = document.createElement("span");
@@ -17461,107 +17461,70 @@ function moveCursorToBlock(view, blockId, offset) {
17461
17461
  }
17462
17462
 
17463
17463
  // src/docx/comments-panel.ts
17464
- var styleText2 = `
17465
- .dve-comments-panel{display:flex;flex-direction:column;gap:8px;padding:10px 12px;border-left:1px solid var(--line,#ddd);background:var(--surface,#fff);color:var(--ink,#222);font:12px/1.4 'Segoe UI',Arial,sans-serif;width:clamp(220px,26vw,320px);overflow-y:auto}
17466
- .dve-comments-panel[hidden]{display:none}
17467
- .dve-comments-panel h2{margin:0;font-size:13px}
17468
- .dve-comment-new textarea,.dve-comment-reply textarea{box-sizing:border-box;width:100%;min-height:44px;resize:vertical;border:1px solid var(--line,#ddd);border-radius:3px;padding:5px 7px;font:inherit;background:var(--surface,#fff);color:var(--ink,#222)}
17469
- .dve-comment-new button,.dve-comment-actions button,.dve-comment-reply button{border:1px solid var(--line,#ddd);border-radius:3px;background:var(--surface,#fff);color:var(--ink,#222);font:inherit;cursor:pointer;padding:3px 8px}
17470
- .dve-comment-new button:disabled,.dve-comment-actions button:disabled{opacity:.5;cursor:default}
17471
- .dve-comment-thread{border:1px solid var(--line,#ddd);border-radius:4px;padding:7px 8px;display:flex;flex-direction:column;gap:4px}
17472
- .dve-comment-thread[data-resolved="true"]{opacity:.65}
17473
- .dve-comment-meta{display:flex;justify-content:space-between;gap:6px;color:var(--muted,#666);font-size:11px}
17474
- .dve-comment-text{white-space:pre-wrap}
17475
- .dve-comment-actions{display:flex;gap:5px;flex-wrap:wrap}
17476
- .dve-comment-reply{margin-left:12px;display:flex;flex-direction:column;gap:4px}
17477
- .dve-comment-empty{color:var(--muted,#666)}
17478
- `;
17479
- function row3(comment, indent, locale, options) {
17480
- const thread = document.createElement("div");
17481
- thread.className = "dve-comment-thread";
17482
- if (indent) thread.style.marginLeft = "14px";
17483
- thread.dataset.resolved = String(Boolean(comment.resolved));
17484
- const meta = document.createElement("div");
17485
- meta.className = "dve-comment-meta";
17486
- meta.append(
17487
- Object.assign(document.createElement("span"), { textContent: comment.author }),
17488
- Object.assign(document.createElement("span"), { textContent: comment.date ?? "" })
17489
- );
17490
- const text = document.createElement("p");
17491
- text.className = "dve-comment-text";
17492
- text.textContent = comment.text;
17493
- const actions = document.createElement("div");
17494
- const canEdit = options.canEdit?.() ?? true;
17495
- actions.className = "dve-comment-actions";
17496
- if (!comment.parentId) {
17497
- const resolve = document.createElement("button");
17498
- resolve.type = "button";
17499
- resolve.disabled = !canEdit;
17500
- resolve.textContent = translate(locale, comment.resolved ? "Reopen" : "Resolve");
17501
- resolve.addEventListener("click", () => options.onResolve(comment.id, !comment.resolved));
17502
- actions.append(resolve);
17503
- }
17504
- const del = document.createElement("button");
17505
- del.type = "button";
17506
- del.disabled = !canEdit;
17507
- del.textContent = translate(locale, "Delete");
17508
- del.addEventListener("click", () => options.onDelete(comment.id));
17509
- actions.append(del);
17510
- thread.append(meta, text, actions);
17511
- if (!comment.parentId) {
17512
- const replyForm = document.createElement("div");
17513
- replyForm.className = "dve-comment-reply";
17514
- const input = document.createElement("textarea");
17515
- input.disabled = !canEdit;
17516
- input.setAttribute("aria-label", translate(locale, "Reply"));
17517
- input.placeholder = translate(locale, "Reply");
17518
- const send = document.createElement("button");
17519
- send.type = "button";
17520
- send.disabled = !canEdit;
17521
- send.textContent = translate(locale, "Reply");
17522
- send.addEventListener("click", () => {
17523
- if (!input.value.trim()) return;
17524
- options.onReply(comment.id, input.value.trim());
17525
- input.value = "";
17526
- });
17527
- replyForm.append(input, send);
17528
- thread.append(replyForm);
17529
- }
17530
- return thread;
17464
+ function wordCommentThreads(comments) {
17465
+ const entry = (comment) => ({
17466
+ id: comment.id,
17467
+ author: comment.author,
17468
+ text: comment.text,
17469
+ ...comment.initials ? { initials: comment.initials } : {},
17470
+ ...comment.date ? { created: comment.date } : {}
17471
+ });
17472
+ return comments.filter((comment) => !comment.parentId).map((comment) => ({
17473
+ id: comment.id,
17474
+ resolved: Boolean(comment.resolved),
17475
+ comments: [
17476
+ entry(comment),
17477
+ ...comments.filter((reply) => reply.parentId === comment.id).map(entry)
17478
+ ]
17479
+ }));
17480
+ }
17481
+ function labels2(locale) {
17482
+ const t = (key2) => translate(locale, key2);
17483
+ return {
17484
+ heading: t("Comments"),
17485
+ list: t("Comments"),
17486
+ close: t("Close comments"),
17487
+ newComment: t("New comment"),
17488
+ add: t("Add comment"),
17489
+ reply: t("Reply"),
17490
+ resolve: t("Resolve"),
17491
+ reopen: t("Reopen"),
17492
+ resolved: t("Resolved"),
17493
+ delete: t("Delete"),
17494
+ empty: t("No comments")
17495
+ };
17531
17496
  }
17497
+ var detail = (event) => event.detail;
17532
17498
  function createCommentsPanel(options) {
17533
17499
  let locale = "en";
17534
- const panel = document.createElement("aside");
17500
+ defineCommentsPane();
17501
+ const panel = document.createElement("office-ui-comments-pane");
17535
17502
  panel.className = "dve-comments-panel";
17536
17503
  panel.setAttribute("role", "complementary");
17537
17504
  panel.setAttribute("aria-label", translate(locale, "Comments"));
17538
17505
  panel.hidden = true;
17539
- const style = document.createElement("style");
17540
- style.textContent = styleText2;
17541
- const heading2 = document.createElement("h2");
17542
- heading2.textContent = translate(locale, "Comments");
17543
- const closeButton = document.createElement("button");
17544
- closeButton.type = "button";
17545
- closeButton.textContent = translate(locale, "Close comments");
17546
- closeButton.setAttribute("aria-label", translate(locale, "Close comments"));
17547
- closeButton.addEventListener("click", () => close3());
17548
- const newForm = document.createElement("div");
17549
- newForm.className = "dve-comment-new";
17550
- const newInput = document.createElement("textarea");
17551
- newInput.setAttribute("aria-label", translate(locale, "New comment"));
17552
- newInput.placeholder = translate(locale, "New comment");
17553
- const addButton = document.createElement("button");
17554
- addButton.type = "button";
17555
- addButton.textContent = translate(locale, "Add comment");
17556
- addButton.addEventListener("click", () => {
17557
- if (!newInput.value.trim()) return;
17558
- options.onAdd(newInput.value.trim());
17559
- newInput.value = "";
17506
+ panel.closable = true;
17507
+ panel.classNames = { thread: "dve-comment-card", comment: "dve-comment-thread" };
17508
+ panel.labels = labels2(locale);
17509
+ panel.addEventListener("comment-add", (event) => {
17510
+ options.onAdd(detail(event).text);
17560
17511
  refresh();
17561
17512
  });
17562
- newForm.append(newInput, addButton);
17563
- const list = document.createElement("div");
17564
- panel.append(style, heading2, closeButton, newForm, list);
17513
+ panel.addEventListener(
17514
+ "comment-reply",
17515
+ (event) => options.onReply(detail(event).threadId, detail(event).text)
17516
+ );
17517
+ panel.addEventListener(
17518
+ "thread-resolve",
17519
+ (event) => options.onResolve(detail(event).threadId, true)
17520
+ );
17521
+ panel.addEventListener(
17522
+ "thread-reopen",
17523
+ (event) => options.onResolve(detail(event).threadId, false)
17524
+ );
17525
+ panel.addEventListener("comment-delete", (event) => options.onDelete(detail(event).commentId));
17526
+ panel.addEventListener("thread-select", (event) => options.onSelect?.(detail(event).threadId));
17527
+ panel.addEventListener("comments-close", () => close3());
17565
17528
  let isOpen = false;
17566
17529
  function close3() {
17567
17530
  isOpen = false;
@@ -17569,24 +17532,11 @@ function createCommentsPanel(options) {
17569
17532
  options.onClose?.();
17570
17533
  }
17571
17534
  function refresh() {
17572
- addButton.disabled = !options.canAdd();
17573
- const comments = options.getModel().comments ?? [];
17574
- list.replaceChildren();
17575
- const top = comments.filter((comment) => !comment.parentId);
17576
- if (!top.length) {
17577
- const empty = document.createElement("p");
17578
- empty.className = "dve-comment-empty";
17579
- empty.textContent = translate(locale, "No comments");
17580
- list.append(empty);
17581
- return;
17582
- }
17583
- for (const comment of top) {
17584
- list.append(row3(comment, false, locale, options));
17585
- for (const reply of comments.filter((item) => item.parentId === comment.id))
17586
- list.append(row3(reply, true, locale, options));
17587
- }
17535
+ panel.readOnly = !(options.canEdit?.() ?? true);
17536
+ panel.addDisabled = !options.canAdd();
17537
+ panel.activeThreadId = options.activeId?.() ?? null;
17538
+ panel.threads = wordCommentThreads(options.getModel().comments ?? []);
17588
17539
  }
17589
- localizeElement(panel, locale);
17590
17540
  refresh();
17591
17541
  return {
17592
17542
  element: panel,
@@ -17602,13 +17552,9 @@ function createCommentsPanel(options) {
17602
17552
  refresh,
17603
17553
  setLocale(value) {
17604
17554
  locale = normalizeEditorLocale(value);
17605
- heading2.textContent = translate(locale, "Comments");
17606
17555
  panel.setAttribute("aria-label", translate(locale, "Comments"));
17607
- closeButton.textContent = translate(locale, "Close comments");
17608
- closeButton.setAttribute("aria-label", translate(locale, "Close comments"));
17609
- newInput.setAttribute("aria-label", translate(locale, "New comment"));
17610
- newInput.placeholder = translate(locale, "New comment");
17611
- addButton.textContent = translate(locale, "Add comment");
17556
+ panel.labels = labels2(locale);
17557
+ panel.locale = locale;
17612
17558
  refresh();
17613
17559
  }
17614
17560
  };
@@ -17625,6 +17571,11 @@ var ReviewController = class {
17625
17571
  const view = host.getView();
17626
17572
  return Boolean(host.canEditComments() && view && !view.state.selection.empty);
17627
17573
  },
17574
+ activeId: () => {
17575
+ const view = host.getView();
17576
+ return view ? commentIdsAtSelection(view)[0] : void 0;
17577
+ },
17578
+ onSelect: (id) => this.goToAnchor(id),
17628
17579
  onAdd: (text) => this.addComment(text),
17629
17580
  onReply: (parentId, text) => {
17630
17581
  if (!host.canEditComments()) return;
@@ -17664,6 +17615,15 @@ var ReviewController = class {
17664
17615
  setLocale(locale) {
17665
17616
  this.commentsPanel.setLocale(locale);
17666
17617
  }
17618
+ /** Moves the caret to the start of a thread's anchored text (the pane keeps focus). */
17619
+ goToAnchor(id) {
17620
+ const view = this.host.getView();
17621
+ const anchor = view && commentAnchors(view).find((item) => item.id === id);
17622
+ if (!view || !anchor) return;
17623
+ view.dispatch(
17624
+ view.state.tr.setSelection(TextSelection.create(view.state.doc, anchor.from)).scrollIntoView()
17625
+ );
17626
+ }
17667
17627
  /** Removes a comment, its replies and its anchored range in one go. */
17668
17628
  deleteById(id) {
17669
17629
  if (!this.host.canEditComments()) return;
@@ -17869,9 +17829,9 @@ function renderOptions({ handlers, t, content }) {
17869
17829
  input.type = "checkbox";
17870
17830
  input.checked = current2[key2];
17871
17831
  input.addEventListener("change", () => handlers.setOption(key2, String(input.checked)));
17872
- const row4 = field2(label, input);
17873
- row4.classList.add("dve-backstage-toggle");
17874
- controls.push(row4);
17832
+ const row3 = field2(label, input);
17833
+ row3.classList.add("dve-backstage-toggle");
17834
+ controls.push(row3);
17875
17835
  }
17876
17836
  const note = document.createElement("p");
17877
17837
  note.className = "dve-backstage-muted";
@@ -17930,9 +17890,9 @@ var facts = (rows, t) => {
17930
17890
  for (const [label, value] of rows) {
17931
17891
  const term = document.createElement("dt");
17932
17892
  term.textContent = t(label);
17933
- const detail = document.createElement("dd");
17934
- detail.textContent = value;
17935
- list.append(term, detail);
17893
+ const detail2 = document.createElement("dd");
17894
+ detail2.textContent = value;
17895
+ list.append(term, detail2);
17936
17896
  }
17937
17897
  return list;
17938
17898
  };
@@ -18144,16 +18104,16 @@ function renderCustomize({ handlers, t, content }) {
18144
18104
  const id = ribbonControlId(control);
18145
18105
  if (!id || seen.has(id)) continue;
18146
18106
  seen.add(id);
18147
- const row4 = document.createElement("label");
18148
- row4.className = "dve-customize-row";
18107
+ const row3 = document.createElement("label");
18108
+ row3.className = "dve-customize-row";
18149
18109
  const input = document.createElement("input");
18150
18110
  input.type = "checkbox";
18151
18111
  input.checked = !hidden.has(id);
18152
18112
  input.addEventListener("change", commit);
18153
18113
  const text = document.createElement("span");
18154
18114
  text.textContent = control.getAttribute("aria-label") ?? id;
18155
- row4.append(input, text);
18156
- list.append(row4);
18115
+ row3.append(input, text);
18116
+ list.append(row3);
18157
18117
  boxes.push({ id, input });
18158
18118
  }
18159
18119
  if (list.children.length > 1) tabSection.append(list);
@@ -18827,25 +18787,25 @@ function openTablePicker(anchor, onPick, onClose) {
18827
18787
  const paint = () => {
18828
18788
  caption.textContent = translateTemplate(locale, "table.size", { columns, rows });
18829
18789
  cells.forEach((cell, index) => {
18830
- const row4 = Math.floor(index / PICKER_COLUMNS);
18790
+ const row3 = Math.floor(index / PICKER_COLUMNS);
18831
18791
  const column = index % PICKER_COLUMNS;
18832
- cell.classList.toggle("active", row4 < rows && column < columns);
18792
+ cell.classList.toggle("active", row3 < rows && column < columns);
18833
18793
  });
18834
18794
  };
18835
- for (let row4 = 0; row4 < PICKER_ROWS; row4++)
18795
+ for (let row3 = 0; row3 < PICKER_ROWS; row3++)
18836
18796
  for (let column = 0; column < PICKER_COLUMNS; column++) {
18837
18797
  const cell = document.createElement("div");
18838
18798
  cell.setAttribute("role", "gridcell");
18839
- cell.dataset.rows = String(row4 + 1);
18799
+ cell.dataset.rows = String(row3 + 1);
18840
18800
  cell.dataset.columns = String(column + 1);
18841
18801
  cell.addEventListener("mouseenter", () => {
18842
- rows = row4 + 1;
18802
+ rows = row3 + 1;
18843
18803
  columns = column + 1;
18844
18804
  paint();
18845
18805
  });
18846
18806
  cell.addEventListener("mousedown", (event) => event.preventDefault());
18847
18807
  cell.addEventListener("click", () => {
18848
- onPick(row4 + 1, column + 1);
18808
+ onPick(row3 + 1, column + 1);
18849
18809
  onClose();
18850
18810
  });
18851
18811
  cells.push(cell);
@@ -19408,9 +19368,9 @@ var PageNavigator = class {
19408
19368
  }
19409
19369
  const version = this.host.version();
19410
19370
  if (version !== this.built || this.thumbs.length !== status.total) this.rebuild(version);
19411
- const labels2 = `${locale}:${status.total}`;
19412
- if (labels2 !== this.labels) this.relabelThumbs(locale, status.total);
19413
- this.labels = labels2;
19371
+ const labels3 = `${locale}:${status.total}`;
19372
+ if (labels3 !== this.labels) this.relabelThumbs(locale, status.total);
19373
+ this.labels = labels3;
19414
19374
  this.mark(status.current);
19415
19375
  }
19416
19376
  relabelChrome(locale, active, ready) {
@@ -19880,7 +19840,7 @@ function createContextMenu(host) {
19880
19840
  element.state = {
19881
19841
  ...state,
19882
19842
  items: state.items.map(
19883
- (row4) => row4.id === "paste" ? { ...row4, disabled: true, title: denied } : row4
19843
+ (row3) => row3.id === "paste" ? { ...row3, disabled: true, title: denied } : row3
19884
19844
  )
19885
19845
  };
19886
19846
  });
@@ -19926,7 +19886,7 @@ function shortcutRows(registry, mac) {
19926
19886
  label: shortcut.label,
19927
19887
  keys: registry.keysFor(shortcut.id, mac).join(" / ")
19928
19888
  }));
19929
- return [...general, ...editorShortcutRows(mac)].filter((row4) => row4.keys);
19889
+ return [...general, ...editorShortcutRows(mac)].filter((row3) => row3.keys);
19930
19890
  }
19931
19891
  function createShortcutHelp(onClose) {
19932
19892
  const element = createDialogShell("", "dve-shortcut-help");
@@ -19966,11 +19926,11 @@ function createShortcutHelp(onClose) {
19966
19926
  head.append(cell);
19967
19927
  }
19968
19928
  const body = table.createTBody();
19969
- for (const row4 of rows) {
19929
+ for (const row3 of rows) {
19970
19930
  const tr = body.insertRow();
19971
- tr.insertCell().textContent = translate(locale, row4.label);
19931
+ tr.insertCell().textContent = translate(locale, row3.label);
19972
19932
  const kbd = document.createElement("kbd");
19973
- kbd.textContent = row4.keys;
19933
+ kbd.textContent = row3.keys;
19974
19934
  tr.insertCell().append(kbd);
19975
19935
  }
19976
19936
  setDialogOpen(element, true);