ooxml-ui 1.0.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.
- package/README.md +40 -36
- package/custom-elements.json +211 -4
- package/dist/chrome/ruler.d.ts +60 -2
- package/dist/chrome/ruler.d.ts.map +1 -1
- package/dist/chrome/status-bar.d.ts +3 -1
- package/dist/chrome/status-bar.d.ts.map +1 -1
- package/dist/{chunk-T3HB5LMH.js → chunk-7FNDOWTX.js} +393 -15
- package/dist/{chunk-FLHM5Q4O.js → chunk-AYXFLBSV.js} +92 -13
- package/dist/{chunk-X7RINDJQ.js → chunk-JAJFLFAV.js} +1 -1
- package/dist/{chunk-OXKWNNNJ.js → chunk-VUB44CAJ.js} +1 -1
- package/dist/{chunk-JFJXBYRD.js → chunk-XNCWB2X6.js} +5 -0
- package/dist/{chunk-XDUYS4KK.js → chunk-Y2E22JVO.js} +1 -1
- package/dist/{chunk-ZV2Z4IWH.js → chunk-YK2DPYMU.js} +5 -2
- package/dist/{chunk-4QQASR5A.js → chunk-YP5S7DTT.js} +6 -5
- package/dist/comments/comments-pane.d.ts +116 -0
- package/dist/comments/comments-pane.d.ts.map +1 -0
- package/dist/comments/types.d.ts +80 -0
- package/dist/comments/types.d.ts.map +1 -0
- package/dist/controls.d.ts +4 -2
- package/dist/controls.d.ts.map +1 -1
- package/dist/controls.js +4 -4
- package/dist/docx/comments-panel.d.ts +8 -1
- package/dist/docx/image-media.d.ts +1 -1
- package/dist/docx/locales/en-ribbon.d.ts +1 -0
- package/dist/docx/locales/en.d.ts +1 -0
- package/dist/docx/localization-strings.d.ts +2 -1
- package/dist/docx/localization.d.ts +7 -1
- package/dist/docx/print-layout.d.ts +2 -2
- package/dist/docx/print-picture.d.ts +12 -0
- package/dist/docx/review-controller.d.ts +2 -0
- package/dist/docx/ruler.d.ts +7 -10
- package/dist/docx.js +289 -339
- package/dist/form/gradient-preset-gallery.d.ts +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +8 -8
- package/dist/pptx/{chart-3d-view-scene-2KRQ5667.mjs → chart-3d-view-scene-6B5TOWB6.mjs} +3 -3
- package/dist/pptx/{chart-3d-view-scene-36DMZWZ3.cjs → chart-3d-view-scene-MJ6YNT56.cjs} +37 -37
- package/dist/pptx/{chunk-YOGDIDPB.mjs → chunk-AWKKC3VW.mjs} +8 -2
- package/dist/pptx/{chunk-XQZWZMGZ.cjs → chunk-SM3CWDIQ.cjs} +7 -17
- package/dist/pptx/{chunk-CJU4P5FT.cjs → chunk-STKGUT5S.cjs} +18 -12
- package/dist/pptx/{chunk-JSBGBVBH.mjs → chunk-VRFNAF3Q.mjs} +7 -17
- package/dist/pptx/{chunk-YHA6XAB3.cjs → chunk-XIQMFSNG.cjs} +1 -1
- package/dist/pptx/{chunk-YARCML7O.mjs → chunk-XQVKQD5Z.mjs} +294 -265
- package/dist/pptx/{chunk-XWE5GSE7.mjs → chunk-YI5LH5NN.mjs} +533 -428
- package/dist/pptx/{chunk-ADOC5JLI.mjs → chunk-YMTQLZ2I.mjs} +1 -1
- package/dist/pptx/{chunk-AIL3BNZS.cjs → chunk-YRHK45AB.cjs} +301 -265
- package/dist/pptx/{chunk-FEFQTZDM.cjs → chunk-ZK344LOB.cjs} +689 -574
- package/dist/pptx/dom/elements/chart.d.ts +2 -3
- package/dist/pptx/dom/elements/chart.d.ts.map +1 -1
- package/dist/pptx/dom/elements/table.d.ts.map +1 -1
- package/dist/pptx/dom/index.cjs +257 -246
- package/dist/pptx/dom/index.mjs +28 -17
- package/dist/pptx/export/html2canvas-clone.cjs +2 -2
- package/dist/pptx/export/html2canvas-clone.mjs +1 -1
- package/dist/pptx/i18n/index.cjs +6 -6
- package/dist/pptx/i18n/index.mjs +1 -1
- package/dist/pptx/i18n/translator.d.ts.map +1 -1
- package/dist/pptx/index.cjs +3035 -2991
- package/dist/pptx/index.mjs +5 -5
- package/dist/pptx/render/chart-axis-range.d.ts +7 -0
- package/dist/pptx/render/chart-axis-range.d.ts.map +1 -1
- package/dist/pptx/render/chart-axis-render.d.ts +3 -1
- package/dist/pptx/render/chart-axis-render.d.ts.map +1 -1
- package/dist/pptx/render/chart-axis-style.d.ts +5 -0
- package/dist/pptx/render/chart-axis-style.d.ts.map +1 -1
- package/dist/pptx/render/chart-axis.d.ts +1 -1
- package/dist/pptx/render/chart-axis.d.ts.map +1 -1
- package/dist/pptx/render/chart-cartesian-axes.d.ts.map +1 -1
- package/dist/pptx/render/chart-cartesian-bars.d.ts +3 -3
- package/dist/pptx/render/chart-cartesian-bars.d.ts.map +1 -1
- package/dist/pptx/render/chart-cartesian-percent-stacked.d.ts.map +1 -1
- package/dist/pptx/render/chart-cartesian.d.ts.map +1 -1
- package/dist/pptx/render/chart-combo-stock.cjs +3 -3
- package/dist/pptx/render/chart-combo-stock.mjs +1 -1
- package/dist/pptx/render/chart-combo.d.ts.map +1 -1
- package/dist/pptx/render/chart-gridlines-toggle.d.ts +13 -1
- package/dist/pptx/render/chart-gridlines-toggle.d.ts.map +1 -1
- package/dist/pptx/render/chart-helpers.d.ts +13 -13
- package/dist/pptx/render/chart-helpers.d.ts.map +1 -1
- package/dist/pptx/render/chart-horizontal-bars-helpers.d.ts +7 -3
- package/dist/pptx/render/chart-horizontal-bars-helpers.d.ts.map +1 -1
- package/dist/pptx/render/chart-horizontal-bars.d.ts.map +1 -1
- package/dist/pptx/render/chart-interaction-stacked.d.ts.map +1 -1
- package/dist/pptx/render/chart-overlays.cjs +7 -7
- package/dist/pptx/render/chart-overlays.mjs +1 -1
- package/dist/pptx/render/chart-palette.d.ts +5 -14
- package/dist/pptx/render/chart-palette.d.ts.map +1 -1
- package/dist/pptx/render/chart-quick-action-styles.d.ts +5 -3
- package/dist/pptx/render/chart-quick-action-styles.d.ts.map +1 -1
- package/dist/pptx/render/chart-scatter-x-axis.d.ts.map +1 -1
- package/dist/pptx/render/chart-style-palette.d.ts +52 -0
- package/dist/pptx/render/chart-style-palette.d.ts.map +1 -0
- package/dist/pptx/render/chart-surface-treemap.cjs +4 -4
- package/dist/pptx/render/chart-surface-treemap.mjs +1 -1
- package/dist/pptx/render/chart-view-model-bars.d.ts +31 -1
- package/dist/pptx/render/chart-view-model-bars.d.ts.map +1 -1
- package/dist/pptx/render/chart-view-model-build.d.ts.map +1 -1
- package/dist/pptx/render/chart-view-model.cjs +53 -41
- package/dist/pptx/render/chart-view-model.mjs +1 -1
- package/dist/pptx/render/chart-waterfall-map.cjs +6 -6
- package/dist/pptx/render/chart-waterfall-map.mjs +1 -1
- package/dist/pptx/render/connector-elbow-geometry.d.ts +7 -43
- package/dist/pptx/render/connector-elbow-geometry.d.ts.map +1 -1
- package/dist/pptx/render/foreign-object-svg-document.d.ts +12 -0
- package/dist/pptx/render/foreign-object-svg-document.d.ts.map +1 -1
- package/dist/pptx/render/index.d.ts +2 -0
- package/dist/pptx/render/index.d.ts.map +1 -1
- package/dist/pptx/render/table-cell-css.d.ts +3 -2
- package/dist/pptx/render/table-cell-css.d.ts.map +1 -1
- package/dist/pptx/render/table-cell-edit.d.ts +1 -1
- package/dist/pptx/render/table-cell-edit.d.ts.map +1 -1
- package/dist/pptx/render/table-cell-paragraphs.d.ts +29 -0
- package/dist/pptx/render/table-cell-paragraphs.d.ts.map +1 -0
- package/dist/pptx/render/table-style.d.ts +2 -0
- package/dist/pptx/render/table-style.d.ts.map +1 -1
- package/dist/pptx/render/title-bar.d.ts +5 -0
- package/dist/pptx/render/title-bar.d.ts.map +1 -1
- package/dist/pptx/render/viewer-root-options.d.ts +54 -0
- package/dist/pptx/render/viewer-root-options.d.ts.map +1 -0
- package/dist/pptx/web-components/office-token-bridge.d.ts.map +1 -1
- package/dist/pptx/web-components/registration-contract.d.ts.map +1 -1
- package/dist/presence.js +3 -3
- package/dist/registry.d.ts +2 -0
- package/dist/registry.d.ts.map +1 -1
- package/dist/ribbon/ribbon-tabs.d.ts +2 -1
- package/dist/ribbon/ribbon-tabs.d.ts.map +1 -1
- package/dist/smartart/smartart-svg.d.ts +3 -2
- package/dist/smartart.js +3 -3
- package/dist/suite/attachment-store.d.ts +13 -0
- package/dist/suite/document-store.d.ts +31 -0
- package/dist/suite/index.d.ts +2 -0
- package/dist/suite.js +132 -1
- package/dist/teams/app/channel-tab.d.ts +5 -0
- package/dist/teams/chat-composer.d.ts +3 -0
- package/dist/teams.js +6 -6
- package/dist/theme.js +2 -2
- package/dist/tokens.d.ts +5 -0
- package/dist/tokens.d.ts.map +1 -1
- package/dist/visio/styles/index.d.ts +2 -0
- package/dist/visio/styles/theme.d.ts +11 -0
- package/dist/visio/styles.d.ts +2 -2
- package/dist/visio.js +76 -25
- package/dist/xlsx/backstage/index.d.ts +4 -1
- package/dist/xlsx/backstage/pages-share.d.ts +19 -0
- package/dist/xlsx/backstage/parts.d.ts +3 -0
- package/dist/xlsx/chart-fill-binding.d.ts +2 -2
- package/dist/xlsx/chart-series-gradient-type.d.ts +3 -2
- package/dist/xlsx/collaboration-session.d.ts +9 -0
- package/dist/xlsx/collaboration-types.d.ts +41 -0
- package/dist/xlsx/collaboration.d.ts +56 -0
- package/dist/xlsx/component.d.ts +8 -0
- package/dist/xlsx/dialogs/comments-list.d.ts +4 -0
- package/dist/xlsx/dialogs/help-dialogs.d.ts +1 -1
- package/dist/xlsx/editor-core.d.ts +3 -0
- package/dist/xlsx/element-api.d.ts +19 -1
- package/dist/xlsx/events.d.ts +4 -1
- package/dist/xlsx/grid/remote-layer.d.ts +3 -0
- package/dist/xlsx/grid/sparkline.d.ts +3 -0
- package/dist/xlsx/grid/styles.d.ts +1 -1
- package/dist/xlsx/index.d.ts +1 -0
- package/dist/xlsx/ribbon-actions.d.ts +21 -0
- package/dist/xlsx/shell-commands.d.ts +1 -1
- package/dist/xlsx/title-bar.d.ts +4 -2
- package/dist/xlsx.js +712 -90
- package/package.json +3 -3
- package/dist/pptx/web-components/status-bar-styles.d.ts +0 -3
- package/dist/pptx/web-components/status-bar-styles.d.ts.map +0 -1
- package/dist/pptx/web-components/title-bar-styles.d.ts +0 -7
- package/dist/pptx/web-components/title-bar-styles.d.ts.map +0 -1
package/dist/docx.js
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { defineSmartArt } from './chunk-
|
|
2
|
-
import { shadcnBridge } from './chunk-
|
|
3
|
-
import { createRibbonOverflow, defineRibbon, defineDialog, defineSearchField, defineSwitch, defineTitleBar, defineBackstage, defineStatusBar, defineZoomSlider, defineContextMenu, runKeyTips, assignKeyTips } from './chunk-
|
|
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-
|
|
6
|
-
import './chunk-
|
|
7
|
-
import './chunk-
|
|
8
|
-
import {
|
|
5
|
+
import './chunk-VUB44CAJ.js';
|
|
6
|
+
import './chunk-YK2DPYMU.js';
|
|
7
|
+
import './chunk-XNCWB2X6.js';
|
|
8
|
+
import { normalizeLocale, SUPPORTED_OFFICE_LOCALES, interpolate } from 'ooxml-core/i18n';
|
|
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';
|
|
9
10
|
import { Schema, DOMSerializer, Fragment } from 'prosemirror-model';
|
|
10
|
-
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';
|
|
11
12
|
export { CollaborationAuthority, CollaborationClient, RIBBON_ACTION_IDS, RIBBON_ACTION_LABELS, createCollaborationIdGenerator, darkTheme, isRibbonActionId, lightTheme, normalizeRibbonActions, repairCollaborativeDocumentIds, themeToCssVars } from 'ooxml-core/docx/ui';
|
|
12
13
|
import { parseOmml, convertOmmlToLatex, convertOmmlToMathMl } from 'ooxml-core/math';
|
|
13
14
|
import { PluginKey, EditorState, Plugin, NodeSelection, TextSelection, Selection } from 'prosemirror-state';
|
|
@@ -1266,6 +1267,7 @@ var deRibbon = {
|
|
|
1266
1267
|
Reply: "Antworten",
|
|
1267
1268
|
Resolve: "L\xF6sen",
|
|
1268
1269
|
Reopen: "Erneut \xF6ffnen",
|
|
1270
|
+
Resolved: "Gel\xF6st",
|
|
1269
1271
|
Delete: "L\xF6schen",
|
|
1270
1272
|
"No comments": "Noch keine Kommentare.",
|
|
1271
1273
|
Tracking: "Nachverfolgung",
|
|
@@ -1926,6 +1928,7 @@ var enRibbon = {
|
|
|
1926
1928
|
Reply: "Reply",
|
|
1927
1929
|
Resolve: "Resolve",
|
|
1928
1930
|
Reopen: "Reopen",
|
|
1931
|
+
Resolved: "Resolved",
|
|
1929
1932
|
Delete: "Delete",
|
|
1930
1933
|
"No comments": "No comments yet.",
|
|
1931
1934
|
Tracking: "Tracking",
|
|
@@ -2586,6 +2589,7 @@ var esRibbon = {
|
|
|
2586
2589
|
Reply: "Responder",
|
|
2587
2590
|
Resolve: "Resolver",
|
|
2588
2591
|
Reopen: "Reabrir",
|
|
2592
|
+
Resolved: "Resuelto",
|
|
2589
2593
|
Delete: "Eliminar",
|
|
2590
2594
|
"No comments": "A\xFAn no hay comentarios.",
|
|
2591
2595
|
Tracking: "Seguimiento",
|
|
@@ -3246,6 +3250,7 @@ var frRibbon = {
|
|
|
3246
3250
|
Reply: "R\xE9pondre",
|
|
3247
3251
|
Resolve: "R\xE9soudre",
|
|
3248
3252
|
Reopen: "Rouvrir",
|
|
3253
|
+
Resolved: "R\xE9solu",
|
|
3249
3254
|
Delete: "Supprimer",
|
|
3250
3255
|
"No comments": "Aucun commentaire pour le moment.",
|
|
3251
3256
|
Tracking: "Suivi",
|
|
@@ -3906,6 +3911,7 @@ var zhCNRibbon = {
|
|
|
3906
3911
|
Reply: "\u56DE\u590D",
|
|
3907
3912
|
Resolve: "\u89E3\u51B3",
|
|
3908
3913
|
Reopen: "\u91CD\u65B0\u6253\u5F00",
|
|
3914
|
+
Resolved: "\u5DF2\u89E3\u51B3",
|
|
3909
3915
|
Delete: "\u5220\u9664",
|
|
3910
3916
|
"No comments": "\u6682\u65E0\u6279\u6CE8\u3002",
|
|
3911
3917
|
Tracking: "\u4FEE\u8BA2",
|
|
@@ -3949,30 +3955,17 @@ var zhCN = {
|
|
|
3949
3955
|
|
|
3950
3956
|
// src/docx/localization-strings.ts
|
|
3951
3957
|
var strings = { en, fr, de, es, "zh-CN": zhCN };
|
|
3952
|
-
var EDITOR_LOCALES =
|
|
3958
|
+
var EDITOR_LOCALES = SUPPORTED_OFFICE_LOCALES;
|
|
3953
3959
|
|
|
3954
3960
|
// src/docx/localization.ts
|
|
3955
3961
|
function normalizeEditorLocale(value) {
|
|
3956
|
-
|
|
3957
|
-
switch (parts[0]) {
|
|
3958
|
-
case "fr":
|
|
3959
|
-
case "de":
|
|
3960
|
-
case "es":
|
|
3961
|
-
return parts[0];
|
|
3962
|
-
case "zh":
|
|
3963
|
-
return parts.some((part) => ["hant", "tw", "hk", "mo"].includes(part)) ? "en" : "zh-CN";
|
|
3964
|
-
default:
|
|
3965
|
-
return "en";
|
|
3966
|
-
}
|
|
3962
|
+
return normalizeLocale(value, EDITOR_LOCALES, "en");
|
|
3967
3963
|
}
|
|
3968
3964
|
function translate(locale, key2) {
|
|
3969
3965
|
return strings[locale][key2] ?? strings.en[key2] ?? key2;
|
|
3970
3966
|
}
|
|
3971
3967
|
function translateTemplate(locale, key2, values2) {
|
|
3972
|
-
return translate(locale, key2)
|
|
3973
|
-
/\{(\w+)\}/g,
|
|
3974
|
-
(match, name) => name in values2 ? String(values2[name]) : match
|
|
3975
|
-
);
|
|
3968
|
+
return interpolate(translate(locale, key2), values2);
|
|
3976
3969
|
}
|
|
3977
3970
|
function translateDynamic(locale, text) {
|
|
3978
3971
|
if (locale === "en") return text;
|
|
@@ -4073,8 +4066,18 @@ function localizeElement(root, locale) {
|
|
|
4073
4066
|
}
|
|
4074
4067
|
}
|
|
4075
4068
|
}
|
|
4069
|
+
var controlCache = /* @__PURE__ */ new WeakMap();
|
|
4076
4070
|
function findLocalizedControl(root, label) {
|
|
4077
|
-
|
|
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;
|
|
4078
4081
|
}
|
|
4079
4082
|
|
|
4080
4083
|
// src/docx/shell-labels.ts
|
|
@@ -4360,9 +4363,9 @@ var schema = new Schema({
|
|
|
4360
4363
|
}
|
|
4361
4364
|
const body = [
|
|
4362
4365
|
"tbody",
|
|
4363
|
-
...rows.map((
|
|
4366
|
+
...rows.map((row3) => [
|
|
4364
4367
|
"tr",
|
|
4365
|
-
...
|
|
4368
|
+
...row3.map((cell) => ["td", cell.text])
|
|
4366
4369
|
])
|
|
4367
4370
|
];
|
|
4368
4371
|
return ["table", { class: "dve-nested-preview", contenteditable: "false" }, body];
|
|
@@ -4378,12 +4381,12 @@ function cellKey(cell) {
|
|
|
4378
4381
|
function tableNode(block, paragraphNode2, tableStyles) {
|
|
4379
4382
|
const columnCount = Math.max(
|
|
4380
4383
|
1,
|
|
4381
|
-
...block.rows.map((
|
|
4384
|
+
...block.rows.map((row3) => row3.reduce((sum, cell) => sum + (cell.gridSpan ?? 1), 0))
|
|
4382
4385
|
);
|
|
4383
|
-
const rows = block.rows.map((
|
|
4386
|
+
const rows = block.rows.map((row3, rowIndex) => {
|
|
4384
4387
|
const cells = [];
|
|
4385
4388
|
let gridColumn = 0;
|
|
4386
|
-
|
|
4389
|
+
row3.forEach((cell, columnIndex) => {
|
|
4387
4390
|
const column = gridColumn;
|
|
4388
4391
|
gridColumn += cell.gridSpan ?? 1;
|
|
4389
4392
|
if (cell.verticalMerge === "continue") return;
|
|
@@ -4458,19 +4461,19 @@ function tableNode(block, paragraphNode2, tableStyles) {
|
|
|
4458
4461
|
}
|
|
4459
4462
|
function tableFormattingFromNode(node) {
|
|
4460
4463
|
const rowProperties = [];
|
|
4461
|
-
node.forEach((
|
|
4464
|
+
node.forEach((row3) => rowProperties.push(structuredClone(row3.attrs.properties ?? {})));
|
|
4462
4465
|
return {
|
|
4463
|
-
rowProperties: rowProperties.some((
|
|
4466
|
+
rowProperties: rowProperties.some((row3) => Object.keys(row3).length) ? rowProperties : void 0,
|
|
4464
4467
|
cellMargins: typeof node.attrs.cellMargins === "string" ? JSON.parse(node.attrs.cellMargins) : void 0
|
|
4465
4468
|
};
|
|
4466
4469
|
}
|
|
4467
4470
|
function convertSimpleTable(node, convertParagraph, prior) {
|
|
4468
4471
|
const priorCells = /* @__PURE__ */ new Map();
|
|
4469
|
-
for (const
|
|
4472
|
+
for (const row3 of prior?.rows ?? []) for (const cell of row3) priorCells.set(cellKey(cell), cell);
|
|
4470
4473
|
const rows = [];
|
|
4471
|
-
node.forEach((
|
|
4474
|
+
node.forEach((row3) => {
|
|
4472
4475
|
const cells = [];
|
|
4473
|
-
|
|
4476
|
+
row3.forEach((cell) => {
|
|
4474
4477
|
const paragraphs = [];
|
|
4475
4478
|
cell.forEach((paragraph2) => {
|
|
4476
4479
|
if (paragraph2.type.name === "paragraph") paragraphs.push(convertParagraph(paragraph2));
|
|
@@ -4504,9 +4507,9 @@ function convertSimpleTable(node, convertParagraph, prior) {
|
|
|
4504
4507
|
function convertMergedTable(node, prior, convertParagraph) {
|
|
4505
4508
|
const updated = structuredClone(prior);
|
|
4506
4509
|
const cellByKey = /* @__PURE__ */ new Map();
|
|
4507
|
-
for (const
|
|
4510
|
+
for (const row3 of updated.rows) for (const cell of row3) cellByKey.set(cellKey(cell), cell);
|
|
4508
4511
|
node.forEach(
|
|
4509
|
-
(
|
|
4512
|
+
(row3) => row3.forEach((cellNode) => {
|
|
4510
4513
|
const target = cellByKey.get(String(cellNode.attrs.sourceCellKey || ""));
|
|
4511
4514
|
if (!target) return;
|
|
4512
4515
|
const paragraphs = [];
|
|
@@ -4563,14 +4566,14 @@ function sectionBreaksPlugin() {
|
|
|
4563
4566
|
const json = state.doc.attrs.sections;
|
|
4564
4567
|
const sections = typeof json === "string" ? JSON.parse(json) : [];
|
|
4565
4568
|
if (sections.length < 2) return null;
|
|
4566
|
-
const
|
|
4569
|
+
const labels3 = /* @__PURE__ */ new Map();
|
|
4567
4570
|
sections.slice(0, -1).forEach((section3, index) => {
|
|
4568
4571
|
const following = sections[index + 1];
|
|
4569
|
-
if (following)
|
|
4572
|
+
if (following) labels3.set(section3.endsAtBlockId, BREAK_LABEL[following.type]);
|
|
4570
4573
|
});
|
|
4571
4574
|
const decorations2 = [];
|
|
4572
4575
|
state.doc.forEach((node, offset) => {
|
|
4573
|
-
const label =
|
|
4576
|
+
const label = labels3.get(String(node.attrs.id));
|
|
4574
4577
|
if (label)
|
|
4575
4578
|
decorations2.push(
|
|
4576
4579
|
Decoration.node(offset, offset + node.nodeSize, {
|
|
@@ -4584,8 +4587,8 @@ function sectionBreaksPlugin() {
|
|
|
4584
4587
|
}
|
|
4585
4588
|
});
|
|
4586
4589
|
}
|
|
4587
|
-
function paragraphNode(paragraph2,
|
|
4588
|
-
const label =
|
|
4590
|
+
function paragraphNode(paragraph2, labels3, noteNumber) {
|
|
4591
|
+
const label = labels3.get(paragraph2.id);
|
|
4589
4592
|
const children = paragraph2.runs.flatMap((run) => runToInlineNodes(run, noteNumber));
|
|
4590
4593
|
return schema.node(
|
|
4591
4594
|
"paragraph",
|
|
@@ -4601,7 +4604,7 @@ function paragraphNode(paragraph2, labels2, noteNumber) {
|
|
|
4601
4604
|
);
|
|
4602
4605
|
}
|
|
4603
4606
|
function modelToDoc(model) {
|
|
4604
|
-
const
|
|
4607
|
+
const labels3 = computeListLabels(model);
|
|
4605
4608
|
const footnoteOrder = numberNotesInOrder(model.blocks, "footnote");
|
|
4606
4609
|
const endnoteOrder = numberNotesInOrder(model.blocks, "endnote");
|
|
4607
4610
|
const noteNumber = (kind, id) => {
|
|
@@ -4610,10 +4613,10 @@ function modelToDoc(model) {
|
|
|
4610
4613
|
return { number, label: formatNoteNumber(number, format) };
|
|
4611
4614
|
};
|
|
4612
4615
|
const blocks = model.blocks.map((block) => {
|
|
4613
|
-
if (block.type === "paragraph") return paragraphNode(block,
|
|
4616
|
+
if (block.type === "paragraph") return paragraphNode(block, labels3, noteNumber);
|
|
4614
4617
|
return tableNode(
|
|
4615
4618
|
block,
|
|
4616
|
-
(paragraph2) => paragraphNode(paragraph2,
|
|
4619
|
+
(paragraph2) => paragraphNode(paragraph2, labels3, noteNumber),
|
|
4617
4620
|
model.tableStyles
|
|
4618
4621
|
);
|
|
4619
4622
|
});
|
|
@@ -4678,7 +4681,7 @@ function docToModel(doc, prior) {
|
|
|
4678
4681
|
if (block.type === "paragraph") remember(block);
|
|
4679
4682
|
else {
|
|
4680
4683
|
priorTables.set(block.id, block);
|
|
4681
|
-
for (const
|
|
4684
|
+
for (const row3 of block.rows) for (const cell of row3) cell.paragraphs.forEach(remember);
|
|
4682
4685
|
}
|
|
4683
4686
|
}
|
|
4684
4687
|
const convertParagraph = (node) => {
|
|
@@ -4980,10 +4983,10 @@ var DOCX_EDITOR_EVENTS = [
|
|
|
4980
4983
|
function on(target, name, listener) {
|
|
4981
4984
|
target.addEventListener(name, (event) => listener(event));
|
|
4982
4985
|
}
|
|
4983
|
-
function emit(target, name,
|
|
4986
|
+
function emit(target, name, detail2, options = {}) {
|
|
4984
4987
|
return target.dispatchEvent(
|
|
4985
4988
|
new CustomEvent(name, {
|
|
4986
|
-
detail,
|
|
4989
|
+
detail: detail2,
|
|
4987
4990
|
bubbles: true,
|
|
4988
4991
|
composed: true,
|
|
4989
4992
|
...options
|
|
@@ -5447,7 +5450,7 @@ function openColorGridPopover(anchor, choose, options = {}) {
|
|
|
5447
5450
|
grid(
|
|
5448
5451
|
...THEME.map(([hex, name]) => swatch(hex, name)),
|
|
5449
5452
|
...[0, 1, 2, 3, 4].flatMap(
|
|
5450
|
-
(
|
|
5453
|
+
(row3) => THEME.map(([, name], column) => swatch(shades[column][row3], name))
|
|
5451
5454
|
)
|
|
5452
5455
|
),
|
|
5453
5456
|
title("Standard Colors"),
|
|
@@ -5819,10 +5822,10 @@ function openGallery(anchor, control, kind, commands) {
|
|
|
5819
5822
|
words.className = "gallery-words";
|
|
5820
5823
|
words.append(name);
|
|
5821
5824
|
if (look.detail) {
|
|
5822
|
-
const
|
|
5823
|
-
|
|
5824
|
-
|
|
5825
|
-
words.append(
|
|
5825
|
+
const detail2 = document.createElement("span");
|
|
5826
|
+
detail2.className = "gallery-detail";
|
|
5827
|
+
detail2.textContent = look.detail;
|
|
5828
|
+
words.append(detail2);
|
|
5826
5829
|
}
|
|
5827
5830
|
item.append(look.thumb, words);
|
|
5828
5831
|
item.addEventListener("mousedown", (event) => event.preventDefault());
|
|
@@ -6517,8 +6520,8 @@ var languageOptions = [
|
|
|
6517
6520
|
["hi-IN", "Hindi (India)"],
|
|
6518
6521
|
["ru-RU", "Russian (Russia)"]
|
|
6519
6522
|
];
|
|
6520
|
-
function emit2(control,
|
|
6521
|
-
emit(control, "ribbon-action",
|
|
6523
|
+
function emit2(control, detail2) {
|
|
6524
|
+
emit(control, "ribbon-action", detail2);
|
|
6522
6525
|
}
|
|
6523
6526
|
function languageControl(label, key2) {
|
|
6524
6527
|
const wrapper = document.createElement("label");
|
|
@@ -7850,15 +7853,15 @@ function runStylesPlugin(getModel, getMode = () => "all") {
|
|
|
7850
7853
|
if (block.type.name !== "table") return;
|
|
7851
7854
|
const table = tables.get(String(block.attrs.id));
|
|
7852
7855
|
let columnCount = 1;
|
|
7853
|
-
block.forEach((
|
|
7856
|
+
block.forEach((row3) => {
|
|
7854
7857
|
let width = 0;
|
|
7855
|
-
|
|
7858
|
+
row3.forEach((cell) => width += Number(cell.attrs.colspan) || 1);
|
|
7856
7859
|
columnCount = Math.max(columnCount, width);
|
|
7857
7860
|
});
|
|
7858
|
-
block.forEach((
|
|
7861
|
+
block.forEach((row3, rowOffset, rowIndex) => {
|
|
7859
7862
|
let column = 0;
|
|
7860
7863
|
const rowStart = blockOffset + 1 + rowOffset + 1;
|
|
7861
|
-
|
|
7864
|
+
row3.forEach((cell, cellOffset) => {
|
|
7862
7865
|
const tableStyleRun = table?.style ? resolveTableStyleFormatting(
|
|
7863
7866
|
table.style,
|
|
7864
7867
|
model.tableStyles,
|
|
@@ -9218,7 +9221,7 @@ function readCellFill(ctx, state, scope) {
|
|
|
9218
9221
|
const fills = /* @__PURE__ */ new Set();
|
|
9219
9222
|
const table = state.doc.nodeAt(ctx.tablePos);
|
|
9220
9223
|
table?.forEach(
|
|
9221
|
-
(
|
|
9224
|
+
(row3, _offset, rowIndex) => row3.forEach((cell, _cellOffset, column) => {
|
|
9222
9225
|
if (scope === "cell" && (rowIndex < ctx.rect.top || rowIndex > ctx.rect.bottom || column < ctx.rect.left || column > ctx.rect.right))
|
|
9223
9226
|
return;
|
|
9224
9227
|
const fill = cell.attrs.shadingFill;
|
|
@@ -9233,7 +9236,7 @@ function applyCellFill(tr, ctx, scope, fill) {
|
|
|
9233
9236
|
const table = tr.doc.nodeAt(ctx.tablePos);
|
|
9234
9237
|
if (!table) return;
|
|
9235
9238
|
table.forEach(
|
|
9236
|
-
(
|
|
9239
|
+
(row3, rowOffset, rowIndex) => row3.forEach((cell, cellOffset, column) => {
|
|
9237
9240
|
if (scope === "cell" && (rowIndex < ctx.rect.top || rowIndex > ctx.rect.bottom || column < ctx.rect.left || column > ctx.rect.right))
|
|
9238
9241
|
return;
|
|
9239
9242
|
tr.setNodeMarkup(ctx.tablePos + 2 + rowOffset + cellOffset, void 0, {
|
|
@@ -9270,8 +9273,8 @@ function tableBorderContext(state) {
|
|
|
9270
9273
|
if (table.attrs.structureEditable === false) return null;
|
|
9271
9274
|
const tablePos = $from.before(depth);
|
|
9272
9275
|
const cells = [];
|
|
9273
|
-
table.forEach((
|
|
9274
|
-
|
|
9276
|
+
table.forEach((row3, rowOffset, rowIndex) => {
|
|
9277
|
+
row3.forEach((cell, cellOffset, column) => {
|
|
9275
9278
|
const pos = tablePos + 1 + rowOffset + 1 + cellOffset;
|
|
9276
9279
|
if (Math.max(from2, pos + 1) <= Math.min(to, pos + cell.nodeSize - 1))
|
|
9277
9280
|
cells.push({ pos, row: rowIndex, column, node: cell });
|
|
@@ -9295,11 +9298,11 @@ function tableBorderContext(state) {
|
|
|
9295
9298
|
}
|
|
9296
9299
|
function edgesOf(preset, rect) {
|
|
9297
9300
|
const edges = [];
|
|
9298
|
-
for (let
|
|
9301
|
+
for (let row3 = rect.top; row3 <= rect.bottom; row3++)
|
|
9299
9302
|
for (let column = rect.left; column <= rect.right; column++) {
|
|
9300
9303
|
const outside = {
|
|
9301
|
-
top:
|
|
9302
|
-
bottom:
|
|
9304
|
+
top: row3 === rect.top,
|
|
9305
|
+
bottom: row3 === rect.bottom,
|
|
9303
9306
|
left: column === rect.left,
|
|
9304
9307
|
right: column === rect.right
|
|
9305
9308
|
};
|
|
@@ -9307,13 +9310,13 @@ function edgesOf(preset, rect) {
|
|
|
9307
9310
|
const isOutside = outside[side];
|
|
9308
9311
|
const horizontal = side === "top" || side === "bottom";
|
|
9309
9312
|
const wanted = preset === "all" || preset === "outside" && isOutside || preset === "insideH" && horizontal && !isOutside || preset === "insideV" && !horizontal && !isOutside || preset === side && isOutside;
|
|
9310
|
-
if (wanted) edges.push({ row:
|
|
9313
|
+
if (wanted) edges.push({ row: row3, column, side });
|
|
9311
9314
|
}
|
|
9312
9315
|
}
|
|
9313
9316
|
return edges;
|
|
9314
9317
|
}
|
|
9315
|
-
var current = (ctx, state,
|
|
9316
|
-
const cell = state.doc.nodeAt(ctx.tablePos)?.child(
|
|
9318
|
+
var current = (ctx, state, row3, column) => {
|
|
9319
|
+
const cell = state.doc.nodeAt(ctx.tablePos)?.child(row3).child(column);
|
|
9317
9320
|
return parse2(cell?.attrs.borders);
|
|
9318
9321
|
};
|
|
9319
9322
|
function applyEdits(view, ctx, edits, shading) {
|
|
@@ -9338,9 +9341,9 @@ function applyEdits(view, ctx, edits, shading) {
|
|
|
9338
9341
|
edit
|
|
9339
9342
|
]);
|
|
9340
9343
|
let rowOffset = ctx.tablePos + 1;
|
|
9341
|
-
table.forEach((
|
|
9344
|
+
table.forEach((row3, _offset, rowIndex) => {
|
|
9342
9345
|
let cellPos = rowOffset + 1;
|
|
9343
|
-
|
|
9346
|
+
row3.forEach((cell, _cellOffset, column) => {
|
|
9344
9347
|
const group3 = grouped.get(`${rowIndex}:${column}`);
|
|
9345
9348
|
if (group3) {
|
|
9346
9349
|
const visual = parse2(cell.attrs.borders);
|
|
@@ -9362,7 +9365,7 @@ function applyEdits(view, ctx, edits, shading) {
|
|
|
9362
9365
|
}
|
|
9363
9366
|
cellPos += cell.nodeSize;
|
|
9364
9367
|
});
|
|
9365
|
-
rowOffset +=
|
|
9368
|
+
rowOffset += row3.nodeSize;
|
|
9366
9369
|
});
|
|
9367
9370
|
if (shading) applyCellFill(tr, ctx, shading.scope, shading.fill);
|
|
9368
9371
|
if (!tr.docChanged) return false;
|
|
@@ -9787,6 +9790,7 @@ function refreshFieldResults(tr, pageOf, captionsOnly = false) {
|
|
|
9787
9790
|
const targets = bookmarkTargets(tr.doc);
|
|
9788
9791
|
const changes = [];
|
|
9789
9792
|
for (const run of fieldResultRanges(tr.doc)) {
|
|
9793
|
+
if (isFieldLocked(inlineNodeRun(schema.text("x", run.marks)))) continue;
|
|
9790
9794
|
const match = REFERENCE.exec(String(run.mark.attrs.instr ?? ""));
|
|
9791
9795
|
if (!match || !plainSwitches(match[3] ?? "")) continue;
|
|
9792
9796
|
const target = targets.get((match[2] ?? "").replace(/^"|"$/g, ""));
|
|
@@ -9822,6 +9826,7 @@ function renumberCaptions(tr, label) {
|
|
|
9822
9826
|
});
|
|
9823
9827
|
for (let index = fields.length - 1; index >= 0; index--) {
|
|
9824
9828
|
const { from: from2, to, node } = fields[index];
|
|
9829
|
+
if (isFieldLocked(inlineNodeRun(node))) continue;
|
|
9825
9830
|
if (node.text !== String(index + 1))
|
|
9826
9831
|
tr.replaceWith(from2, to, schema.text(String(index + 1), node.marks));
|
|
9827
9832
|
}
|
|
@@ -10139,9 +10144,9 @@ function paragraphElement(paragraph2, values2) {
|
|
|
10139
10144
|
function blockElement(block, values2) {
|
|
10140
10145
|
if (block.type === "paragraph") return paragraphElement(block, values2);
|
|
10141
10146
|
const table = document.createElement("table");
|
|
10142
|
-
for (const
|
|
10147
|
+
for (const row3 of block.rows) {
|
|
10143
10148
|
const tr = document.createElement("tr");
|
|
10144
|
-
for (const cell of
|
|
10149
|
+
for (const cell of row3) {
|
|
10145
10150
|
const td = document.createElement("td");
|
|
10146
10151
|
if (cell.gridSpan && cell.gridSpan > 1) td.colSpan = cell.gridSpan;
|
|
10147
10152
|
for (const paragraph2 of cell.paragraphs) td.append(paragraphElement(paragraph2, values2));
|
|
@@ -10160,7 +10165,7 @@ function renderHeaderFooter(content, values2, kind) {
|
|
|
10160
10165
|
}
|
|
10161
10166
|
function floatingPictures(content, page2, anchorTopPx, values2) {
|
|
10162
10167
|
const paragraphs = content.blocks.flatMap(
|
|
10163
|
-
(block) => block.type === "paragraph" ? [block] : block.rows.flatMap((
|
|
10168
|
+
(block) => block.type === "paragraph" ? [block] : block.rows.flatMap((row3) => row3.flatMap((cell) => cell.paragraphs))
|
|
10164
10169
|
);
|
|
10165
10170
|
const column = { xPx: 0, widthPx: page2.widthPx - page2.marginLeftPx - page2.marginRightPx };
|
|
10166
10171
|
return paragraphs.flatMap(
|
|
@@ -11038,10 +11043,10 @@ function tablePropertiesContext(state) {
|
|
|
11038
11043
|
const rows = [];
|
|
11039
11044
|
const cells = [];
|
|
11040
11045
|
let pos = $from.start(depth);
|
|
11041
|
-
table.forEach((
|
|
11046
|
+
table.forEach((row3, offset, index) => {
|
|
11042
11047
|
if (index >= $from.index(depth) && index <= $to.index(depth))
|
|
11043
|
-
rows.push({ pos: pos + offset, properties:
|
|
11044
|
-
|
|
11048
|
+
rows.push({ pos: pos + offset, properties: row3.attrs.properties ?? {} });
|
|
11049
|
+
row3.forEach((cell, cellOffset) => {
|
|
11045
11050
|
const cellPos = pos + offset + 1 + cellOffset;
|
|
11046
11051
|
if (Math.max(state.selection.from, cellPos + 1) <= Math.min(state.selection.to, cellPos + cell.nodeSize - 1))
|
|
11047
11052
|
cells.push({
|
|
@@ -11067,12 +11072,12 @@ function applyTableProperties(view, rowPatch, marginPatch, cellMarginPatch, cell
|
|
|
11067
11072
|
if (!Object.keys(rowPatch).length && !Object.keys(marginPatch).length && cellMarginPatch === void 0 && cellAlignment === void 0)
|
|
11068
11073
|
return true;
|
|
11069
11074
|
const tr = closeHistory(view.state.tr);
|
|
11070
|
-
for (const
|
|
11071
|
-
const node = tr.doc.nodeAt(
|
|
11072
|
-
const properties = { ...
|
|
11075
|
+
for (const row3 of context2.rows) {
|
|
11076
|
+
const node = tr.doc.nodeAt(row3.pos);
|
|
11077
|
+
const properties = { ...row3.properties, ...rowPatch };
|
|
11073
11078
|
for (const key2 of Object.keys(properties))
|
|
11074
11079
|
if (properties[key2] === void 0) delete properties[key2];
|
|
11075
|
-
tr.setNodeMarkup(
|
|
11080
|
+
tr.setNodeMarkup(row3.pos, void 0, {
|
|
11076
11081
|
...node.attrs,
|
|
11077
11082
|
properties,
|
|
11078
11083
|
heightPx: properties.heightTwips ? properties.heightTwips / 15 : null
|
|
@@ -11232,7 +11237,7 @@ function createTablePropertiesDialog(viewOf) {
|
|
|
11232
11237
|
element.replaceChildren(...content);
|
|
11233
11238
|
localizeDialog(element, locale);
|
|
11234
11239
|
const common = (read) => {
|
|
11235
|
-
const values2 = context2.rows.map((
|
|
11240
|
+
const values2 = context2.rows.map((row3) => read(row3.properties));
|
|
11236
11241
|
return values2.every((value) => value === values2[0]) ? values2[0] : null;
|
|
11237
11242
|
};
|
|
11238
11243
|
setTriState(
|
|
@@ -12340,13 +12345,13 @@ function syncFormatControls(toolbar, state) {
|
|
|
12340
12345
|
});
|
|
12341
12346
|
if (!found) addMarks(state.selection.$from.marks());
|
|
12342
12347
|
}
|
|
12343
|
-
const
|
|
12348
|
+
const labels3 = {
|
|
12344
12349
|
bold: "Bold",
|
|
12345
12350
|
italic: "Italic",
|
|
12346
12351
|
underline: "Underline",
|
|
12347
12352
|
strike: "Strikethrough"
|
|
12348
12353
|
};
|
|
12349
|
-
for (const [key2, label] of Object.entries(
|
|
12354
|
+
for (const [key2, label] of Object.entries(labels3)) {
|
|
12350
12355
|
const values2 = marked.get(key2);
|
|
12351
12356
|
findLocalizedControl(toolbar, label)?.setAttribute(
|
|
12352
12357
|
"aria-pressed",
|
|
@@ -12968,7 +12973,7 @@ function paragraphStylesPlugin(getModel, getMode = () => "all") {
|
|
|
12968
12973
|
state.doc.descendants((node) => {
|
|
12969
12974
|
if (node.type.name === "paragraph") paragraphs.push(displayParagraph(node, mode).value);
|
|
12970
12975
|
});
|
|
12971
|
-
const
|
|
12976
|
+
const labels3 = computeListLabels({ ...model, blocks: paragraphs });
|
|
12972
12977
|
const decorations2 = [];
|
|
12973
12978
|
state.doc.descendants((node, pos) => {
|
|
12974
12979
|
if (node.type.name !== "paragraph") return;
|
|
@@ -12976,7 +12981,7 @@ function paragraphStylesPlugin(getModel, getMode = () => "all") {
|
|
|
12976
12981
|
const paragraph2 = projected.value;
|
|
12977
12982
|
const reset = mode === "original" && node.attrs.formatRevision && !projected.error ? `${ORIGINAL_PARAGRAPH_RESET};` : "";
|
|
12978
12983
|
const effective = catalog ? resolveParagraphFormatting(paragraph2, catalog) : paragraph2;
|
|
12979
|
-
const label =
|
|
12984
|
+
const label = labels3.get(String(node.attrs.id));
|
|
12980
12985
|
const marker = listMarkerDisplay(
|
|
12981
12986
|
node,
|
|
12982
12987
|
{ ...paragraph2, ...effective },
|
|
@@ -13019,8 +13024,8 @@ function context(view) {
|
|
|
13019
13024
|
const table = $from.node(tableDepth);
|
|
13020
13025
|
const width = table.childCount ? table.child(0).childCount : 0;
|
|
13021
13026
|
if (!width || table.childCount < 1) return null;
|
|
13022
|
-
for (let
|
|
13023
|
-
if (table.child(
|
|
13027
|
+
for (let row3 = 0; row3 < table.childCount; row3++)
|
|
13028
|
+
if (table.child(row3).childCount !== width) return null;
|
|
13024
13029
|
return {
|
|
13025
13030
|
table,
|
|
13026
13031
|
tablePos: $from.before(tableDepth),
|
|
@@ -13110,9 +13115,9 @@ function executeTableCommand(view, action) {
|
|
|
13110
13115
|
view,
|
|
13111
13116
|
ctx,
|
|
13112
13117
|
rows.map(
|
|
13113
|
-
(
|
|
13118
|
+
(row3) => row3.copy(
|
|
13114
13119
|
Fragment.fromArray(
|
|
13115
|
-
Array.from({ length:
|
|
13120
|
+
Array.from({ length: row3.childCount }, (_, index) => row3.child(index)).filter(
|
|
13116
13121
|
(_, index) => index !== ctx.columnIndex
|
|
13117
13122
|
)
|
|
13118
13123
|
)
|
|
@@ -13125,10 +13130,10 @@ function executeTableCommand(view, action) {
|
|
|
13125
13130
|
replacedTable(
|
|
13126
13131
|
view,
|
|
13127
13132
|
ctx,
|
|
13128
|
-
rows.map((
|
|
13129
|
-
const cells = Array.from({ length:
|
|
13133
|
+
rows.map((row3) => {
|
|
13134
|
+
const cells = Array.from({ length: row3.childCount }, (_, index) => row3.child(index));
|
|
13130
13135
|
cells.splice(at, 0, emptyCell(nextId));
|
|
13131
|
-
return
|
|
13136
|
+
return row3.copy(Fragment.fromArray(cells));
|
|
13132
13137
|
})
|
|
13133
13138
|
);
|
|
13134
13139
|
return true;
|
|
@@ -13266,13 +13271,6 @@ function markerPositions(geometry) {
|
|
|
13266
13271
|
right: geometry.pageWidth - geometry.marginRight - geometry.indentRight
|
|
13267
13272
|
};
|
|
13268
13273
|
}
|
|
13269
|
-
function inchLabels(geometry) {
|
|
13270
|
-
const labels2 = [];
|
|
13271
|
-
const width = geometry.pageWidth - geometry.marginLeft - geometry.marginRight;
|
|
13272
|
-
for (let inch = 1; inch * PX_PER_INCH < width; inch++)
|
|
13273
|
-
labels2.push({ at: geometry.marginLeft + inch * PX_PER_INCH, text: String(inch) });
|
|
13274
|
-
return labels2;
|
|
13275
|
-
}
|
|
13276
13274
|
function markerChange(marker, x, geometry) {
|
|
13277
13275
|
const snap = (px2) => Math.round(px2 / SNAP_PX) * SNAP_PX;
|
|
13278
13276
|
const inches3 = (px2) => Math.round(px2 / PX_PER_INCH * 1e3) / 1e3;
|
|
@@ -13299,87 +13297,52 @@ function markerChange(marker, x, geometry) {
|
|
|
13299
13297
|
}
|
|
13300
13298
|
var SNAP_PX = PX_PER_INCH / 16;
|
|
13301
13299
|
var geometries = /* @__PURE__ */ new WeakMap();
|
|
13302
|
-
function
|
|
13303
|
-
|
|
13304
|
-
|
|
13305
|
-
|
|
13306
|
-
|
|
13307
|
-
|
|
13308
|
-
|
|
13309
|
-
|
|
13310
|
-
const zoom = Number(ruler.style.getPropertyValue("--dve-zoom")) || 1;
|
|
13311
|
-
const at = (e) => (e.clientX - ruler.getBoundingClientRect().left) / zoom;
|
|
13312
|
-
const move = (e) => {
|
|
13313
|
-
const preview = markerChange(name, at(e), geometry);
|
|
13314
|
-
const shifted = { ...geometry };
|
|
13315
|
-
if (preview.leftInches !== void 0) shifted.indentLeft = preview.leftInches * PX_PER_INCH;
|
|
13316
|
-
if (preview.rightInches !== void 0)
|
|
13317
|
-
shifted.indentRight = preview.rightInches * PX_PER_INCH;
|
|
13318
|
-
if (preview.special)
|
|
13319
|
-
shifted.firstLine = (preview.special === "hanging" ? -1 : 1) * (preview.specialInches ?? 0) * PX_PER_INCH;
|
|
13320
|
-
paintMarkers(ruler, shifted);
|
|
13321
|
-
};
|
|
13322
|
-
const finish = (e) => {
|
|
13323
|
-
marker.removeEventListener("pointermove", move);
|
|
13324
|
-
marker.removeEventListener("pointerup", finish);
|
|
13325
|
-
marker.removeEventListener("pointercancel", finish);
|
|
13326
|
-
onChange(e.type === "pointerup" ? markerChange(name, at(e), geometry) : {});
|
|
13327
|
-
};
|
|
13328
|
-
marker.addEventListener("pointermove", move);
|
|
13329
|
-
marker.addEventListener("pointerup", finish);
|
|
13330
|
-
marker.addEventListener("pointercancel", finish);
|
|
13331
|
-
});
|
|
13332
|
-
}
|
|
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;
|
|
13333
13308
|
}
|
|
13334
13309
|
function paintMarkers(ruler, geometry) {
|
|
13335
13310
|
const positions = markerPositions(geometry);
|
|
13336
|
-
|
|
13337
|
-
|
|
13338
|
-
|
|
13339
|
-
|
|
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
|
+
];
|
|
13340
13316
|
}
|
|
13341
13317
|
function createRuler(onChange) {
|
|
13342
|
-
|
|
13318
|
+
defineRuler();
|
|
13319
|
+
const ruler = document.createElement("office-ui-ruler");
|
|
13343
13320
|
ruler.className = "dve-ruler";
|
|
13344
|
-
ruler.
|
|
13345
|
-
ruler.
|
|
13346
|
-
|
|
13347
|
-
|
|
13348
|
-
|
|
13349
|
-
|
|
13350
|
-
|
|
13351
|
-
|
|
13352
|
-
|
|
13353
|
-
|
|
13354
|
-
|
|
13355
|
-
|
|
13356
|
-
|
|
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?.({}));
|
|
13357
13335
|
return ruler;
|
|
13358
13336
|
}
|
|
13359
13337
|
function updateRuler(ruler, geometry, zoom) {
|
|
13360
|
-
const
|
|
13361
|
-
ruler.style.width = `${geometry.pageWidth}px`;
|
|
13362
|
-
ruler.style.setProperty("--dve-zoom", String(zoom));
|
|
13363
|
-
ruler.style.setProperty("--dve-ruler-origin", `${geometry.marginLeft}px`);
|
|
13364
|
-
const left = part("margin-left");
|
|
13365
|
-
left.style.width = `${geometry.marginLeft}px`;
|
|
13366
|
-
const right = part("margin-right");
|
|
13367
|
-
right.style.width = `${geometry.marginRight}px`;
|
|
13338
|
+
const element = ruler;
|
|
13368
13339
|
geometries.set(ruler, geometry);
|
|
13369
|
-
|
|
13370
|
-
|
|
13371
|
-
|
|
13372
|
-
|
|
13373
|
-
|
|
13374
|
-
|
|
13375
|
-
...wanted.map(({ at, text }) => {
|
|
13376
|
-
const label = document.createElement("span");
|
|
13377
|
-
label.textContent = text;
|
|
13378
|
-
label.style.left = `${at}px`;
|
|
13379
|
-
return label;
|
|
13380
|
-
})
|
|
13381
|
-
);
|
|
13382
|
-
}
|
|
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);
|
|
13383
13346
|
}
|
|
13384
13347
|
|
|
13385
13348
|
// src/docx/ruler-sync.ts
|
|
@@ -13455,9 +13418,9 @@ function refreshEditorControls(toolbar, view, model, readOnly, collaboration, lo
|
|
|
13455
13418
|
syncParagraphToggles(toolbar, view, model);
|
|
13456
13419
|
syncContextualTabs(toolbar, state);
|
|
13457
13420
|
syncRuler(toolbar, view, model);
|
|
13458
|
-
const trackButton = toolbar
|
|
13421
|
+
const trackButton = findLocalizedControl(toolbar, "Track changes");
|
|
13459
13422
|
trackButton?.setAttribute("aria-pressed", String(Boolean(model.trackChanges)));
|
|
13460
|
-
const commentsButton = toolbar
|
|
13423
|
+
const commentsButton = findLocalizedControl(toolbar, "Comments");
|
|
13461
13424
|
commentsButton?.setAttribute("aria-pressed", String(commentsOpen));
|
|
13462
13425
|
const changeAtCursor = hasChangeAtCursor(view);
|
|
13463
13426
|
const anyChange = hasAnyChange(view);
|
|
@@ -13477,9 +13440,7 @@ function refreshEditorControls(toolbar, view, model, readOnly, collaboration, lo
|
|
|
13477
13440
|
state.selection instanceof NodeSelection && state.selection.node.type.name === "image"
|
|
13478
13441
|
]
|
|
13479
13442
|
]) {
|
|
13480
|
-
const control = toolbar
|
|
13481
|
-
`[data-localearialabel="${label}"], [aria-label="${label}"]`
|
|
13482
|
-
);
|
|
13443
|
+
const control = findLocalizedControl(toolbar, label);
|
|
13483
13444
|
if (control) control.disabled = readOnly || !enabled;
|
|
13484
13445
|
}
|
|
13485
13446
|
}
|
|
@@ -14011,6 +13972,10 @@ function imageNodeView(cache, options = {}) {
|
|
|
14011
13972
|
return (node, view, getPos) => {
|
|
14012
13973
|
const diagram = parseDiagram(node.attrs.diagram);
|
|
14013
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
|
+
}
|
|
14014
13979
|
const content = renderSpec(node);
|
|
14015
13980
|
if (content.tagName !== "IMG") return { dom: content, ignoreMutation: () => true };
|
|
14016
13981
|
const refresh = () => {
|
|
@@ -14350,7 +14315,7 @@ function refreshPreviewScaleWithFonts(element, text, formatting, family) {
|
|
|
14350
14315
|
// src/docx/preview-run-styles.ts
|
|
14351
14316
|
function stylePreviewRuns(element, block, model, serializer, mode = "all") {
|
|
14352
14317
|
const measurer = scaleMeasurer();
|
|
14353
|
-
const paragraphs = block.type === "paragraph" ? [block] : block.rows.flatMap((
|
|
14318
|
+
const paragraphs = block.type === "paragraph" ? [block] : block.rows.flatMap((row3) => row3.flatMap((cell) => cell.paragraphs));
|
|
14354
14319
|
const elements = block.type === "paragraph" ? [element] : [...element.querySelectorAll("p")];
|
|
14355
14320
|
paragraphs.forEach((current2, index) => {
|
|
14356
14321
|
const target = elements[index];
|
|
@@ -14427,10 +14392,10 @@ function blockNode(block) {
|
|
|
14427
14392
|
return schema.node("paragraph", paragraphAttrs(block), children);
|
|
14428
14393
|
}
|
|
14429
14394
|
const rows = block.rows.map(
|
|
14430
|
-
(
|
|
14395
|
+
(row3) => schema.node(
|
|
14431
14396
|
"tableRow",
|
|
14432
14397
|
null,
|
|
14433
|
-
|
|
14398
|
+
row3.map(
|
|
14434
14399
|
(cell) => schema.node(
|
|
14435
14400
|
"tableCell",
|
|
14436
14401
|
null,
|
|
@@ -16070,8 +16035,8 @@ var InsertController = class {
|
|
|
16070
16035
|
if (action.key === "figures")
|
|
16071
16036
|
insertTableOfContents(view, this.host.model(), void 0, 3, action.label ?? "Figure");
|
|
16072
16037
|
else if (action.key === "updateFigures") {
|
|
16073
|
-
const
|
|
16074
|
-
const updated =
|
|
16038
|
+
const labels3 = action.label ? [action.label] : ["Figure", "Table", "Equation"];
|
|
16039
|
+
const updated = labels3.filter(
|
|
16075
16040
|
(label) => updateTableOfContents(view, this.host.model(), void 0, label)
|
|
16076
16041
|
);
|
|
16077
16042
|
if (!updated.length)
|
|
@@ -16451,6 +16416,7 @@ var EditorCore = class {
|
|
|
16451
16416
|
);
|
|
16452
16417
|
const { searchPanel, printLayout, review, chrome, toolbar } = this.shell;
|
|
16453
16418
|
searchPanel?.refresh();
|
|
16419
|
+
if (review?.commentsOpen) review.commentsPanel.refresh();
|
|
16454
16420
|
if (this.pages.viewMode === "print") printLayout?.refreshCurrentPage();
|
|
16455
16421
|
const status = refreshEditorControls(
|
|
16456
16422
|
toolbar,
|
|
@@ -16509,7 +16475,7 @@ var ribbon_polish_default = "/* Ribbon polish: distinct pressed state and Word's
|
|
|
16509
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";
|
|
16510
16476
|
|
|
16511
16477
|
// raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/print.css?raw
|
|
16512
|
-
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";
|
|
16513
16479
|
|
|
16514
16480
|
// raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/chrome-titlebar.css?raw
|
|
16515
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";
|
|
@@ -16521,7 +16487,7 @@ var backstage_default = "/* Backstage: the shared office-ui-backstage draws the
|
|
|
16521
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";
|
|
16522
16488
|
|
|
16523
16489
|
// raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/chrome-document.css?raw
|
|
16524
|
-
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:
|
|
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";
|
|
16525
16491
|
|
|
16526
16492
|
// raw-css:/home/runner/work/ooxml/ooxml/src/ui/src/docx/styles/page-navigator.css?raw
|
|
16527
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";
|
|
@@ -16896,10 +16862,10 @@ function createSearchPanel(options, initialLocale = "en") {
|
|
|
16896
16862
|
|
|
16897
16863
|
// src/docx/print-table.ts
|
|
16898
16864
|
var cssBorder = (border) => border ? `${border.widthPx}px ${border.style} ${border.color}` : "";
|
|
16899
|
-
function geometryOf(
|
|
16900
|
-
const given =
|
|
16865
|
+
function geometryOf(row3, index, widthPx) {
|
|
16866
|
+
const given = row3.geometry?.[index];
|
|
16901
16867
|
if (given) return given;
|
|
16902
|
-
const share = widthPx / Math.max(1,
|
|
16868
|
+
const share = widthPx / Math.max(1, row3.cells.length);
|
|
16903
16869
|
return {
|
|
16904
16870
|
xPx: share * index,
|
|
16905
16871
|
widthPx: share,
|
|
@@ -16914,31 +16880,31 @@ function renderTable(box2, columnWidthPx, renderParagraph) {
|
|
|
16914
16880
|
table.style.top = `${box2.yPx}px`;
|
|
16915
16881
|
table.style.height = `${box2.heightPx}px`;
|
|
16916
16882
|
if (box2.xPx) table.style.left = `${box2.xPx}px`;
|
|
16917
|
-
box2.rows.forEach((
|
|
16883
|
+
box2.rows.forEach((row3, rowIndex) => {
|
|
16918
16884
|
const rowEl = document.createElement("div");
|
|
16919
16885
|
rowEl.className = "dve-print-row";
|
|
16920
|
-
rowEl.style.top = `${
|
|
16921
|
-
rowEl.style.height = `${
|
|
16922
|
-
if (
|
|
16886
|
+
rowEl.style.top = `${row3.yPx}px`;
|
|
16887
|
+
rowEl.style.height = `${row3.heightPx}px`;
|
|
16888
|
+
if (row3.repeated) rowEl.dataset.repeated = "true";
|
|
16923
16889
|
const lastRow = rowIndex === box2.rows.length - 1;
|
|
16924
|
-
|
|
16925
|
-
const geometry = geometryOf(
|
|
16890
|
+
row3.cells.forEach((paragraphs, cellIndex) => {
|
|
16891
|
+
const geometry = geometryOf(row3, cellIndex, columnWidthPx);
|
|
16926
16892
|
const cell = document.createElement("div");
|
|
16927
16893
|
cell.className = "dve-print-cell";
|
|
16928
16894
|
Object.assign(cell.style, {
|
|
16929
16895
|
left: `${geometry.xPx}px`,
|
|
16930
16896
|
width: `${geometry.widthPx}px`,
|
|
16931
|
-
height: `${
|
|
16897
|
+
height: `${row3.heightPx}px`
|
|
16932
16898
|
});
|
|
16933
16899
|
if (geometry.shading) cell.style.background = geometry.shading;
|
|
16934
16900
|
const borders = geometry.borders;
|
|
16935
16901
|
cell.style.borderTop = cssBorder(borders?.top);
|
|
16936
16902
|
cell.style.borderLeft = cssBorder(borders?.left);
|
|
16937
|
-
if (cellIndex ===
|
|
16903
|
+
if (cellIndex === row3.cells.length - 1) cell.style.borderRight = cssBorder(borders?.right);
|
|
16938
16904
|
if (lastRow) cell.style.borderBottom = cssBorder(borders?.bottom);
|
|
16939
16905
|
const content = document.createElement("div");
|
|
16940
16906
|
content.className = "dve-print-cell-content";
|
|
16941
|
-
const free = Math.max(0,
|
|
16907
|
+
const free = Math.max(0, row3.heightPx - geometry.contentHeightPx);
|
|
16942
16908
|
const offset = geometry.verticalAlign === "center" ? free / 2 : geometry.verticalAlign === "bottom" ? free : 0;
|
|
16943
16909
|
Object.assign(content.style, {
|
|
16944
16910
|
left: `${geometry.paddingLeftPx}px`,
|
|
@@ -16960,7 +16926,7 @@ function lineNumberLabels(page2, settings, counter3, suppressed) {
|
|
|
16960
16926
|
if (counter3.section === -1 || settings.restart === "newPage" || newSection && settings.restart === "newSection")
|
|
16961
16927
|
counter3.next = settings.start;
|
|
16962
16928
|
counter3.section = page2.sectionIndex;
|
|
16963
|
-
const
|
|
16929
|
+
const labels3 = [];
|
|
16964
16930
|
const gap = (settings.distanceTwips ?? 360) / 15;
|
|
16965
16931
|
for (const column of page2.columns)
|
|
16966
16932
|
for (const block of column.blocks) {
|
|
@@ -16977,10 +16943,10 @@ function lineNumberLabels(page2, settings, counter3, suppressed) {
|
|
|
16977
16943
|
height: `${line.heightPx}px`,
|
|
16978
16944
|
lineHeight: `${line.heightPx}px`
|
|
16979
16945
|
});
|
|
16980
|
-
|
|
16946
|
+
labels3.push(label);
|
|
16981
16947
|
}
|
|
16982
16948
|
}
|
|
16983
|
-
return
|
|
16949
|
+
return labels3;
|
|
16984
16950
|
}
|
|
16985
16951
|
var POINT = 4 / 3;
|
|
16986
16952
|
function pageBorderBox(page2, borders) {
|
|
@@ -17074,8 +17040,30 @@ function resolveFragmentClick(fragments, clientX) {
|
|
|
17074
17040
|
return start + Math.round((end - start) * ratio);
|
|
17075
17041
|
}
|
|
17076
17042
|
|
|
17077
|
-
// src/docx/print-
|
|
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
|
+
}
|
|
17078
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
|
+
}
|
|
17079
17067
|
const url = object.partName ? pictureUrl?.(object.partName, object.contentType) : void 0;
|
|
17080
17068
|
const element = document.createElement(url ? "img" : "div");
|
|
17081
17069
|
if (url) {
|
|
@@ -17088,6 +17076,8 @@ function pictureElement(object, pictureUrl) {
|
|
|
17088
17076
|
element.style.height = `${object.heightPx}px`;
|
|
17089
17077
|
return element;
|
|
17090
17078
|
}
|
|
17079
|
+
|
|
17080
|
+
// src/docx/print-layout.ts
|
|
17091
17081
|
var LEADER_CHARACTERS = { dot: ".", hyphen: "-", middleDot: "\xB7" };
|
|
17092
17082
|
function leaderElement(fragment) {
|
|
17093
17083
|
const el = document.createElement("span");
|
|
@@ -17471,107 +17461,70 @@ function moveCursorToBlock(view, blockId, offset) {
|
|
|
17471
17461
|
}
|
|
17472
17462
|
|
|
17473
17463
|
// src/docx/comments-panel.ts
|
|
17474
|
-
|
|
17475
|
-
|
|
17476
|
-
|
|
17477
|
-
|
|
17478
|
-
|
|
17479
|
-
|
|
17480
|
-
|
|
17481
|
-
|
|
17482
|
-
|
|
17483
|
-
|
|
17484
|
-
|
|
17485
|
-
|
|
17486
|
-
|
|
17487
|
-
|
|
17488
|
-
|
|
17489
|
-
|
|
17490
|
-
const thread = document.createElement("div");
|
|
17491
|
-
thread.className = "dve-comment-thread";
|
|
17492
|
-
if (indent) thread.style.marginLeft = "14px";
|
|
17493
|
-
thread.dataset.resolved = String(Boolean(comment.resolved));
|
|
17494
|
-
const meta = document.createElement("div");
|
|
17495
|
-
meta.className = "dve-comment-meta";
|
|
17496
|
-
meta.append(
|
|
17497
|
-
Object.assign(document.createElement("span"), { textContent: comment.author }),
|
|
17498
|
-
Object.assign(document.createElement("span"), { textContent: comment.date ?? "" })
|
|
17499
|
-
);
|
|
17500
|
-
const text = document.createElement("p");
|
|
17501
|
-
text.className = "dve-comment-text";
|
|
17502
|
-
text.textContent = comment.text;
|
|
17503
|
-
const actions = document.createElement("div");
|
|
17504
|
-
const canEdit = options.canEdit?.() ?? true;
|
|
17505
|
-
actions.className = "dve-comment-actions";
|
|
17506
|
-
if (!comment.parentId) {
|
|
17507
|
-
const resolve = document.createElement("button");
|
|
17508
|
-
resolve.type = "button";
|
|
17509
|
-
resolve.disabled = !canEdit;
|
|
17510
|
-
resolve.textContent = translate(locale, comment.resolved ? "Reopen" : "Resolve");
|
|
17511
|
-
resolve.addEventListener("click", () => options.onResolve(comment.id, !comment.resolved));
|
|
17512
|
-
actions.append(resolve);
|
|
17513
|
-
}
|
|
17514
|
-
const del = document.createElement("button");
|
|
17515
|
-
del.type = "button";
|
|
17516
|
-
del.disabled = !canEdit;
|
|
17517
|
-
del.textContent = translate(locale, "Delete");
|
|
17518
|
-
del.addEventListener("click", () => options.onDelete(comment.id));
|
|
17519
|
-
actions.append(del);
|
|
17520
|
-
thread.append(meta, text, actions);
|
|
17521
|
-
if (!comment.parentId) {
|
|
17522
|
-
const replyForm = document.createElement("div");
|
|
17523
|
-
replyForm.className = "dve-comment-reply";
|
|
17524
|
-
const input = document.createElement("textarea");
|
|
17525
|
-
input.disabled = !canEdit;
|
|
17526
|
-
input.setAttribute("aria-label", translate(locale, "Reply"));
|
|
17527
|
-
input.placeholder = translate(locale, "Reply");
|
|
17528
|
-
const send = document.createElement("button");
|
|
17529
|
-
send.type = "button";
|
|
17530
|
-
send.disabled = !canEdit;
|
|
17531
|
-
send.textContent = translate(locale, "Reply");
|
|
17532
|
-
send.addEventListener("click", () => {
|
|
17533
|
-
if (!input.value.trim()) return;
|
|
17534
|
-
options.onReply(comment.id, input.value.trim());
|
|
17535
|
-
input.value = "";
|
|
17536
|
-
});
|
|
17537
|
-
replyForm.append(input, send);
|
|
17538
|
-
thread.append(replyForm);
|
|
17539
|
-
}
|
|
17540
|
-
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
|
+
}));
|
|
17541
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
|
+
};
|
|
17496
|
+
}
|
|
17497
|
+
var detail = (event) => event.detail;
|
|
17542
17498
|
function createCommentsPanel(options) {
|
|
17543
17499
|
let locale = "en";
|
|
17544
|
-
|
|
17500
|
+
defineCommentsPane();
|
|
17501
|
+
const panel = document.createElement("office-ui-comments-pane");
|
|
17545
17502
|
panel.className = "dve-comments-panel";
|
|
17546
17503
|
panel.setAttribute("role", "complementary");
|
|
17547
17504
|
panel.setAttribute("aria-label", translate(locale, "Comments"));
|
|
17548
17505
|
panel.hidden = true;
|
|
17549
|
-
|
|
17550
|
-
|
|
17551
|
-
|
|
17552
|
-
|
|
17553
|
-
|
|
17554
|
-
closeButton.type = "button";
|
|
17555
|
-
closeButton.textContent = translate(locale, "Close comments");
|
|
17556
|
-
closeButton.setAttribute("aria-label", translate(locale, "Close comments"));
|
|
17557
|
-
closeButton.addEventListener("click", () => close3());
|
|
17558
|
-
const newForm = document.createElement("div");
|
|
17559
|
-
newForm.className = "dve-comment-new";
|
|
17560
|
-
const newInput = document.createElement("textarea");
|
|
17561
|
-
newInput.setAttribute("aria-label", translate(locale, "New comment"));
|
|
17562
|
-
newInput.placeholder = translate(locale, "New comment");
|
|
17563
|
-
const addButton = document.createElement("button");
|
|
17564
|
-
addButton.type = "button";
|
|
17565
|
-
addButton.textContent = translate(locale, "Add comment");
|
|
17566
|
-
addButton.addEventListener("click", () => {
|
|
17567
|
-
if (!newInput.value.trim()) return;
|
|
17568
|
-
options.onAdd(newInput.value.trim());
|
|
17569
|
-
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);
|
|
17570
17511
|
refresh();
|
|
17571
17512
|
});
|
|
17572
|
-
|
|
17573
|
-
|
|
17574
|
-
|
|
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());
|
|
17575
17528
|
let isOpen = false;
|
|
17576
17529
|
function close3() {
|
|
17577
17530
|
isOpen = false;
|
|
@@ -17579,24 +17532,11 @@ function createCommentsPanel(options) {
|
|
|
17579
17532
|
options.onClose?.();
|
|
17580
17533
|
}
|
|
17581
17534
|
function refresh() {
|
|
17582
|
-
|
|
17583
|
-
|
|
17584
|
-
|
|
17585
|
-
|
|
17586
|
-
if (!top.length) {
|
|
17587
|
-
const empty = document.createElement("p");
|
|
17588
|
-
empty.className = "dve-comment-empty";
|
|
17589
|
-
empty.textContent = translate(locale, "No comments");
|
|
17590
|
-
list.append(empty);
|
|
17591
|
-
return;
|
|
17592
|
-
}
|
|
17593
|
-
for (const comment of top) {
|
|
17594
|
-
list.append(row3(comment, false, locale, options));
|
|
17595
|
-
for (const reply of comments.filter((item) => item.parentId === comment.id))
|
|
17596
|
-
list.append(row3(reply, true, locale, options));
|
|
17597
|
-
}
|
|
17535
|
+
panel.readOnly = !(options.canEdit?.() ?? true);
|
|
17536
|
+
panel.addDisabled = !options.canAdd();
|
|
17537
|
+
panel.activeThreadId = options.activeId?.() ?? null;
|
|
17538
|
+
panel.threads = wordCommentThreads(options.getModel().comments ?? []);
|
|
17598
17539
|
}
|
|
17599
|
-
localizeElement(panel, locale);
|
|
17600
17540
|
refresh();
|
|
17601
17541
|
return {
|
|
17602
17542
|
element: panel,
|
|
@@ -17612,13 +17552,9 @@ function createCommentsPanel(options) {
|
|
|
17612
17552
|
refresh,
|
|
17613
17553
|
setLocale(value) {
|
|
17614
17554
|
locale = normalizeEditorLocale(value);
|
|
17615
|
-
heading2.textContent = translate(locale, "Comments");
|
|
17616
17555
|
panel.setAttribute("aria-label", translate(locale, "Comments"));
|
|
17617
|
-
|
|
17618
|
-
|
|
17619
|
-
newInput.setAttribute("aria-label", translate(locale, "New comment"));
|
|
17620
|
-
newInput.placeholder = translate(locale, "New comment");
|
|
17621
|
-
addButton.textContent = translate(locale, "Add comment");
|
|
17556
|
+
panel.labels = labels2(locale);
|
|
17557
|
+
panel.locale = locale;
|
|
17622
17558
|
refresh();
|
|
17623
17559
|
}
|
|
17624
17560
|
};
|
|
@@ -17635,6 +17571,11 @@ var ReviewController = class {
|
|
|
17635
17571
|
const view = host.getView();
|
|
17636
17572
|
return Boolean(host.canEditComments() && view && !view.state.selection.empty);
|
|
17637
17573
|
},
|
|
17574
|
+
activeId: () => {
|
|
17575
|
+
const view = host.getView();
|
|
17576
|
+
return view ? commentIdsAtSelection(view)[0] : void 0;
|
|
17577
|
+
},
|
|
17578
|
+
onSelect: (id) => this.goToAnchor(id),
|
|
17638
17579
|
onAdd: (text) => this.addComment(text),
|
|
17639
17580
|
onReply: (parentId, text) => {
|
|
17640
17581
|
if (!host.canEditComments()) return;
|
|
@@ -17674,6 +17615,15 @@ var ReviewController = class {
|
|
|
17674
17615
|
setLocale(locale) {
|
|
17675
17616
|
this.commentsPanel.setLocale(locale);
|
|
17676
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
|
+
}
|
|
17677
17627
|
/** Removes a comment, its replies and its anchored range in one go. */
|
|
17678
17628
|
deleteById(id) {
|
|
17679
17629
|
if (!this.host.canEditComments()) return;
|
|
@@ -17879,9 +17829,9 @@ function renderOptions({ handlers, t, content }) {
|
|
|
17879
17829
|
input.type = "checkbox";
|
|
17880
17830
|
input.checked = current2[key2];
|
|
17881
17831
|
input.addEventListener("change", () => handlers.setOption(key2, String(input.checked)));
|
|
17882
|
-
const
|
|
17883
|
-
|
|
17884
|
-
controls.push(
|
|
17832
|
+
const row3 = field2(label, input);
|
|
17833
|
+
row3.classList.add("dve-backstage-toggle");
|
|
17834
|
+
controls.push(row3);
|
|
17885
17835
|
}
|
|
17886
17836
|
const note = document.createElement("p");
|
|
17887
17837
|
note.className = "dve-backstage-muted";
|
|
@@ -17940,9 +17890,9 @@ var facts = (rows, t) => {
|
|
|
17940
17890
|
for (const [label, value] of rows) {
|
|
17941
17891
|
const term = document.createElement("dt");
|
|
17942
17892
|
term.textContent = t(label);
|
|
17943
|
-
const
|
|
17944
|
-
|
|
17945
|
-
list.append(term,
|
|
17893
|
+
const detail2 = document.createElement("dd");
|
|
17894
|
+
detail2.textContent = value;
|
|
17895
|
+
list.append(term, detail2);
|
|
17946
17896
|
}
|
|
17947
17897
|
return list;
|
|
17948
17898
|
};
|
|
@@ -18154,16 +18104,16 @@ function renderCustomize({ handlers, t, content }) {
|
|
|
18154
18104
|
const id = ribbonControlId(control);
|
|
18155
18105
|
if (!id || seen.has(id)) continue;
|
|
18156
18106
|
seen.add(id);
|
|
18157
|
-
const
|
|
18158
|
-
|
|
18107
|
+
const row3 = document.createElement("label");
|
|
18108
|
+
row3.className = "dve-customize-row";
|
|
18159
18109
|
const input = document.createElement("input");
|
|
18160
18110
|
input.type = "checkbox";
|
|
18161
18111
|
input.checked = !hidden.has(id);
|
|
18162
18112
|
input.addEventListener("change", commit);
|
|
18163
18113
|
const text = document.createElement("span");
|
|
18164
18114
|
text.textContent = control.getAttribute("aria-label") ?? id;
|
|
18165
|
-
|
|
18166
|
-
list.append(
|
|
18115
|
+
row3.append(input, text);
|
|
18116
|
+
list.append(row3);
|
|
18167
18117
|
boxes.push({ id, input });
|
|
18168
18118
|
}
|
|
18169
18119
|
if (list.children.length > 1) tabSection.append(list);
|
|
@@ -18837,25 +18787,25 @@ function openTablePicker(anchor, onPick, onClose) {
|
|
|
18837
18787
|
const paint = () => {
|
|
18838
18788
|
caption.textContent = translateTemplate(locale, "table.size", { columns, rows });
|
|
18839
18789
|
cells.forEach((cell, index) => {
|
|
18840
|
-
const
|
|
18790
|
+
const row3 = Math.floor(index / PICKER_COLUMNS);
|
|
18841
18791
|
const column = index % PICKER_COLUMNS;
|
|
18842
|
-
cell.classList.toggle("active",
|
|
18792
|
+
cell.classList.toggle("active", row3 < rows && column < columns);
|
|
18843
18793
|
});
|
|
18844
18794
|
};
|
|
18845
|
-
for (let
|
|
18795
|
+
for (let row3 = 0; row3 < PICKER_ROWS; row3++)
|
|
18846
18796
|
for (let column = 0; column < PICKER_COLUMNS; column++) {
|
|
18847
18797
|
const cell = document.createElement("div");
|
|
18848
18798
|
cell.setAttribute("role", "gridcell");
|
|
18849
|
-
cell.dataset.rows = String(
|
|
18799
|
+
cell.dataset.rows = String(row3 + 1);
|
|
18850
18800
|
cell.dataset.columns = String(column + 1);
|
|
18851
18801
|
cell.addEventListener("mouseenter", () => {
|
|
18852
|
-
rows =
|
|
18802
|
+
rows = row3 + 1;
|
|
18853
18803
|
columns = column + 1;
|
|
18854
18804
|
paint();
|
|
18855
18805
|
});
|
|
18856
18806
|
cell.addEventListener("mousedown", (event) => event.preventDefault());
|
|
18857
18807
|
cell.addEventListener("click", () => {
|
|
18858
|
-
onPick(
|
|
18808
|
+
onPick(row3 + 1, column + 1);
|
|
18859
18809
|
onClose();
|
|
18860
18810
|
});
|
|
18861
18811
|
cells.push(cell);
|
|
@@ -19418,9 +19368,9 @@ var PageNavigator = class {
|
|
|
19418
19368
|
}
|
|
19419
19369
|
const version = this.host.version();
|
|
19420
19370
|
if (version !== this.built || this.thumbs.length !== status.total) this.rebuild(version);
|
|
19421
|
-
const
|
|
19422
|
-
if (
|
|
19423
|
-
this.labels =
|
|
19371
|
+
const labels3 = `${locale}:${status.total}`;
|
|
19372
|
+
if (labels3 !== this.labels) this.relabelThumbs(locale, status.total);
|
|
19373
|
+
this.labels = labels3;
|
|
19424
19374
|
this.mark(status.current);
|
|
19425
19375
|
}
|
|
19426
19376
|
relabelChrome(locale, active, ready) {
|
|
@@ -19890,7 +19840,7 @@ function createContextMenu(host) {
|
|
|
19890
19840
|
element.state = {
|
|
19891
19841
|
...state,
|
|
19892
19842
|
items: state.items.map(
|
|
19893
|
-
(
|
|
19843
|
+
(row3) => row3.id === "paste" ? { ...row3, disabled: true, title: denied } : row3
|
|
19894
19844
|
)
|
|
19895
19845
|
};
|
|
19896
19846
|
});
|
|
@@ -19936,7 +19886,7 @@ function shortcutRows(registry, mac) {
|
|
|
19936
19886
|
label: shortcut.label,
|
|
19937
19887
|
keys: registry.keysFor(shortcut.id, mac).join(" / ")
|
|
19938
19888
|
}));
|
|
19939
|
-
return [...general, ...editorShortcutRows(mac)].filter((
|
|
19889
|
+
return [...general, ...editorShortcutRows(mac)].filter((row3) => row3.keys);
|
|
19940
19890
|
}
|
|
19941
19891
|
function createShortcutHelp(onClose) {
|
|
19942
19892
|
const element = createDialogShell("", "dve-shortcut-help");
|
|
@@ -19976,11 +19926,11 @@ function createShortcutHelp(onClose) {
|
|
|
19976
19926
|
head.append(cell);
|
|
19977
19927
|
}
|
|
19978
19928
|
const body = table.createTBody();
|
|
19979
|
-
for (const
|
|
19929
|
+
for (const row3 of rows) {
|
|
19980
19930
|
const tr = body.insertRow();
|
|
19981
|
-
tr.insertCell().textContent = translate(locale,
|
|
19931
|
+
tr.insertCell().textContent = translate(locale, row3.label);
|
|
19982
19932
|
const kbd = document.createElement("kbd");
|
|
19983
|
-
kbd.textContent =
|
|
19933
|
+
kbd.textContent = row3.keys;
|
|
19984
19934
|
tr.insertCell().append(kbd);
|
|
19985
19935
|
}
|
|
19986
19936
|
setDialogOpen(element, true);
|