oasis-editor 0.0.87 → 0.0.89

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/{OasisEditorApp-CE15GH_N.js → OasisEditorApp-cKm4OFIF.js} +1383 -179
  2. package/dist/app/controllers/EditorCommandsController.d.ts +1 -1
  3. package/dist/app/controllers/useEditorStyle.d.ts +1 -1
  4. package/dist/assets/{importDocxWorker-C94l6-O5.js → importDocxWorker-DVDyiqYf.js} +1 -1
  5. package/dist/core/commands/builtinCommands.d.ts +1 -1
  6. package/dist/core/commands/publicCommandTypes.d.ts +1 -0
  7. package/dist/core/commands/table/tableCommandUtils.d.ts +2 -1
  8. package/dist/core/commands/table/tableFloatingCommands.d.ts +5 -0
  9. package/dist/core/commands/table.d.ts +1 -0
  10. package/dist/core/model/index.d.ts +2 -2
  11. package/dist/core/model/types/layout.d.ts +4 -0
  12. package/dist/core/model/types/nodes.d.ts +23 -7
  13. package/dist/core/model/types/primitives.d.ts +17 -0
  14. package/dist/core/model/types/styles.d.ts +51 -6
  15. package/dist/core/model.d.ts +1 -0
  16. package/dist/core/tableStyleResolver.d.ts +20 -0
  17. package/dist/core/textStyle/textStyleKeys.d.ts +1 -1
  18. package/dist/export/docx/tableXml.d.ts +1 -0
  19. package/dist/export/pdf/draw/drawFragment.d.ts +13 -1
  20. package/dist/export/pdf/draw/drawTextBoxShape.d.ts +1 -0
  21. package/dist/i18n/locales/en.d.ts +18 -0
  22. package/dist/i18n/locales/pt-BR.d.ts +18 -0
  23. package/dist/import/docx/tableProperties.d.ts +2 -1
  24. package/dist/import/docx/tables.d.ts +1 -1
  25. package/dist/{index-DFKc0jbc.js → index-BICQTKCZ.js} +1657 -896
  26. package/dist/index.d.ts +3 -1
  27. package/dist/layoutProjection/floatingObjects.d.ts +15 -1
  28. package/dist/layoutProjection/paginationTrack.d.ts +2 -0
  29. package/dist/layoutProjection/paragraphPagination.d.ts +2 -2
  30. package/dist/oasis-editor.css +1 -1
  31. package/dist/oasis-editor.js +50 -49
  32. package/dist/oasis-editor.umd.cjs +4 -4
  33. package/dist/plugins/internal/essentialsCapabilities.d.ts +10 -0
  34. package/dist/ui/app/createAppCommandsController.d.ts +2 -2
  35. package/dist/ui/app/createEditorCommandRuntime.d.ts +1 -1
  36. package/dist/ui/app/createEditorInteractionRuntime.d.ts +1 -1
  37. package/dist/ui/canvas/CanvasLayoutSnapshot.d.ts +1 -1
  38. package/dist/ui/canvas/CanvasTableLayout.d.ts +7 -1
  39. package/dist/ui/canvas/canvasBorders.d.ts +2 -0
  40. package/dist/ui/canvas/canvasSnapshotTypes.d.ts +12 -0
  41. package/dist/ui/components/Dialogs/TablePropertiesDialog.d.ts +22 -1
  42. package/dist/ui/components/Toolbar/StyleGallery.d.ts +9 -0
  43. package/dist/ui/components/Toolbar/schema/items.d.ts +17 -1
  44. package/dist/ui/editorUiTypes.d.ts +1 -1
  45. package/dist/ui/toolbarStyleState.d.ts +2 -1
  46. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
3
3
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
4
- import { v as visitRun, a as assertNever, c as createSignal, b as createEditorStateFromDocument, d as createInitialEditorState, S as STANDARD_FONT_SIZES_PT, f as fontSizePxToPt, p as probeLocalFontFamilies, e as createEditorParagraphFromRuns, i as isInlineObjectRun, g as createEditorStyledRun, h as getParagraphLength, j as getParagraphText, k as getActiveZone, l as getDocumentSections, m as getActiveSectionIndex, n as getParagraphs, o as normalizeSelection, q as positionToParagraphOffset, r as paragraphOffsetToPosition, s as clampPosition, t as findParagraphIndex, u as createCollapsedSelection, w as isSelectionCollapsed, x as parseFontSizePtToPx, y as formatFontSizePt, z as createEditorParagraph, A as getBlockParagraphs, B as findParagraphTableLocation, C as buildTableCellLayout, P as PT_PER_PX, D as createEditorTableCell, E as createEditorTableRow, F as createEditorTable, G as underlineStyleToCssDecorationStyle, H as resolveImageSrc, I as listKindForTag, J as isParagraphTag, K as collectInlineRuns, L as parseParagraphStyle, M as getRunImage, N as InlineShell, O as BalloonShell, Q as DocumentShell, R as createMemo, T as buildCanvasLayoutSnapshot, U as getCaretRectFromSnapshot, V as getParagraphRectFromSnapshot, W as createComponent, X as CaretOverlay, Y as Show, Z as createRenderEffect, _ as style, $ as setAttribute, a0 as setStyleProperty, a1 as memo, a2 as template, a3 as useI18n, a4 as createEffect, a5 as insert, a6 as use, a7 as addEventListener, a8 as Dialog, a9 as delegateEvents, aa as className, ab as For, ac as UNDERLINE_STYLE_OPTIONS, ad as Tabs, ae as onMount, af as onCleanup, ag as PluginUiHost, ah as OasisEditorEditor, ai as OasisBrandMark, aj as setPreciseFontPreference, ak as setWelcomeSeen, al as enablePreciseFontMode, am as TWIPS_PER_POINT, an as PX_PER_INCH, ao as TWIPS_PER_INCH, ap as resolveEffectiveParagraphStyle, aq as resolveEffectiveTextStyleForParagraph, ar as EMU_PER_PX, as as EMU_PER_PT, at as getRunFootnoteReference, au as getRunEndnoteReference, av as iterateFootnoteReferenceRuns, aw as iterateEndnoteReferenceRuns, ax as imageContentTypeDefaults, ay as getRunFieldChar, az as getRunFieldInstruction, aA as createEditorRun, aB as JSZip, aC as imageExtensionFromMime, aD as pxToPt$1, aE as resolveFloatingObjectRect, aF as getTextBoxFloatingGeometry, aG as getPresetPathSegments, aH as projectBlocksLayout, aI as buildListLabels, aJ as textStyleToFontSizePt, aK as PX_PER_POINT, aL as DEFAULT_FONT_SIZE_PX, aM as isDoubleUnderlineStyle, aN as isWavyUnderlineStyle, aO as underlineStyleLineWidthPx, aP as underlineStyleDashArray, aQ as resolveListLabel, aR as getListLabelInset, aS as getAlignedListLabelInset, aT as getParagraphBorderInsets, aU as buildSegmentTable, aV as buildCanvasTableLayout, aW as normalizeFamily, aX as ROBOTO_FONT_FILES, aY as loadFontAsset, aZ as OFFICE_COMPAT_FONT_FAMILIES, a_ as buildSfnt, a$ as defaultFontDecoderRegistry, b0 as SfntFontProgram, b1 as collectPdfFontFamilies, b2 as projectDocumentLayout, b3 as getPageContentWidth, b4 as getPageHeaderZoneTop, b5 as getPageBodyTop, b6 as getPageColumnRects, b7 as findFootnoteReference, b8 as FOOTNOTE_MARKER_GUTTER_PX, b9 as resolveImporterForFile, ba as getDocumentSectionsCanonical, bb as getDocumentParagraphsCanonical, bc as getDocumentParagraphs, bd as getDocumentPageSettings, be as getTableCellContentWidthForParagraph, bf as on, bg as debounce, bh as unwrap, bi as perfTimer, bj as getRunTextBox, bk as createEditorDocument, bl as resolveResizedDimensions, bm as resolveTextBoxRenderHeight, bn as getToolbarStyleState, bo as getCachedCanvasImage, bp as measureParagraphMinContentWidthPx, bq as getEditableBlocksForZone, br as findParagraphLocation, bs as createSectionBoundaryParagraph, bt as normalizePageSettings, bu as DEFAULT_EDITOR_PAGE_SETTINGS, bv as markStart, bw as markEnd, bx as getParagraphEntries, by as getParagraphById, bz as createEditorFootnote, bA as createFootnoteReferenceRun, bB as renumberFootnotes, bC as getFootnoteDisplayMarker, bD as getHeadingLevel, bE as preciseFontModeVersion, bF as isPreciseFontModeEnabled, bG as togglePreciseFontMode, bH as nextFontSizePt, bI as previousFontSizePt, bJ as fontSizePtToPx, bK as createDefaultToolbarPreset, bL as MenuRegistry, bM as createToolbarRegistry, bN as Editor, bO as resolveCommandRef, bP as commandRefName, bQ as createOasisEditorClient, bR as createEditorZoom, bS as startLongTaskObserver, bT as installGlobalReport, bU as applyStoredPreciseFontPreference, bV as getWelcomeSeen, bW as isLocalFontAccessSupported, bX as EDITOR_SCROLL_PADDING_PX, bY as Toolbar, bZ as OasisEditorLoading, b_ as I18nProvider, b$ as createTranslator, c0 as createEditorLogger, c1 as registerDomStatsSurface } from "./index-DFKc0jbc.js";
4
+ import { v as visitRun, a as assertNever, c as createSignal, b as createEditorStateFromDocument, d as createInitialEditorState, S as STANDARD_FONT_SIZES_PT, f as fontSizePxToPt, p as probeLocalFontFamilies, e as createEditorParagraphFromRuns, i as isInlineObjectRun, g as createEditorStyledRun, h as getParagraphLength, j as getParagraphText, k as getActiveZone, l as getDocumentSections, m as getActiveSectionIndex, n as getParagraphs, o as normalizeSelection, q as positionToParagraphOffset, r as paragraphOffsetToPosition, s as clampPosition, t as findParagraphIndex, u as createCollapsedSelection, w as isSelectionCollapsed, x as parseFontSizePtToPx, y as formatFontSizePt, z as createEditorParagraph, A as getBlockParagraphs, B as findParagraphTableLocation, C as buildTableCellLayout, P as PT_PER_PX, D as createEditorTableCell, E as createEditorTableRow, F as createEditorTable, G as underlineStyleToCssDecorationStyle, H as resolveImageSrc, I as listKindForTag, J as isParagraphTag, K as collectInlineRuns, L as parseParagraphStyle, M as getRunImage, N as InlineShell, O as BalloonShell, Q as DocumentShell, R as createMemo, T as buildCanvasLayoutSnapshot, U as getCaretRectFromSnapshot, V as getParagraphRectFromSnapshot, W as createComponent, X as CaretOverlay, Y as Show, Z as createRenderEffect, _ as style, $ as setAttribute, a0 as setStyleProperty, a1 as memo, a2 as template, a3 as useI18n, a4 as createEffect, a5 as insert, a6 as use, a7 as addEventListener, a8 as Dialog, a9 as delegateEvents, aa as className, ab as For, ac as UNDERLINE_STYLE_OPTIONS, ad as Tabs, ae as onMount, af as onCleanup, ag as PluginUiHost, ah as OasisEditorEditor, ai as OasisBrandMark, aj as setPreciseFontPreference, ak as setWelcomeSeen, al as enablePreciseFontMode, am as TWIPS_PER_POINT, an as PX_PER_INCH, ao as TWIPS_PER_INCH, ap as resolveEffectiveParagraphStyle, aq as resolveEffectiveTextStyleForParagraph, ar as EMU_PER_PX, as as EMU_PER_PT, at as getRunFootnoteReference, au as getRunEndnoteReference, av as iterateFootnoteReferenceRuns, aw as iterateEndnoteReferenceRuns, ax as imageContentTypeDefaults, ay as getRunFieldChar, az as getRunFieldInstruction, aA as createEditorRun, aB as JSZip, aC as imageExtensionFromMime, aD as pxToPt$1, aE as resolveFloatingObjectRect, aF as getTextBoxFloatingGeometry, aG as getPresetPathSegments, aH as projectBlocksLayout, aI as buildListLabels, aJ as getImageFloatingGeometry, aK as textStyleToFontSizePt, aL as PX_PER_POINT, aM as DEFAULT_FONT_SIZE_PX, aN as isDoubleUnderlineStyle, aO as isWavyUnderlineStyle, aP as underlineStyleLineWidthPx, aQ as underlineStyleDashArray, aR as resolveListLabel, aS as getListLabelInset, aT as getAlignedListLabelInset, aU as getParagraphBorderInsets, aV as buildSegmentTable, aW as buildCanvasTableLayout, aX as resolveCanvasTableWidth, aY as resolveFloatingTableRect, aZ as normalizeFamily, a_ as ROBOTO_FONT_FILES, a$ as loadFontAsset, b0 as OFFICE_COMPAT_FONT_FAMILIES, b1 as buildSfnt, b2 as defaultFontDecoderRegistry, b3 as SfntFontProgram, b4 as collectPdfFontFamilies, b5 as projectDocumentLayout, b6 as getPageContentWidth, b7 as getPageHeaderZoneTop, b8 as getPageBodyTop, b9 as getPageColumnRects, ba as findFootnoteReference, bb as FOOTNOTE_MARKER_GUTTER_PX, bc as resolveImporterForFile, bd as getDocumentSectionsCanonical, be as getDocumentParagraphsCanonical, bf as getDocumentParagraphs, bg as getDocumentPageSettings, bh as getTableCellContentWidthForParagraph, bi as on, bj as debounce, bk as unwrap, bl as perfTimer, bm as getRunTextBox, bn as createEditorDocument, bo as resolveResizedDimensions, bp as resolveTextBoxRenderHeight, bq as getToolbarStyleState, br as getCachedCanvasImage, bs as measureParagraphMinContentWidthPx, bt as getEditableBlocksForZone, bu as findParagraphLocation, bv as createSectionBoundaryParagraph, bw as normalizePageSettings, bx as DEFAULT_EDITOR_PAGE_SETTINGS, by as markStart, bz as markEnd, bA as getParagraphEntries, bB as getParagraphById, bC as createEditorFootnote, bD as createFootnoteReferenceRun, bE as renumberFootnotes, bF as getFootnoteDisplayMarker, bG as getHeadingLevel, bH as preciseFontModeVersion, bI as isPreciseFontModeEnabled, bJ as resolveNamedTextStyle, bK as togglePreciseFontMode, bL as nextFontSizePt, bM as previousFontSizePt, bN as fontSizePtToPx, bO as createDefaultToolbarPreset, bP as MenuRegistry, bQ as createToolbarRegistry, bR as Editor, bS as resolveCommandRef, bT as commandRefName, bU as createOasisEditorClient, bV as createEditorZoom, bW as startLongTaskObserver, bX as installGlobalReport, bY as applyStoredPreciseFontPreference, bZ as getWelcomeSeen, b_ as isLocalFontAccessSupported, b$ as EDITOR_SCROLL_PADDING_PX, c0 as Toolbar, c1 as OasisEditorLoading, c2 as I18nProvider, c3 as createTranslator, c4 as createEditorLogger, c5 as registerDomStatsSurface } from "./index-BICQTKCZ.js";
5
5
  function cloneStyle(style2) {
6
6
  return style2 ? { ...style2 } : void 0;
7
7
  }
@@ -113,20 +113,49 @@ function cloneBlocks(blocks) {
113
113
  ...block.style,
114
114
  defaultCellMargins: block.style.defaultCellMargins ? { ...block.style.defaultCellMargins } : void 0,
115
115
  floating: block.style.floating ? { ...block.style.floating } : void 0,
116
- revisionXml: block.style.revisionXml ? [...block.style.revisionXml] : void 0
116
+ revision: block.style.revision ? {
117
+ ...block.style.revision,
118
+ previous: { ...block.style.revision.previous }
119
+ } : void 0
120
+ } : void 0,
121
+ gridRevision: block.gridRevision ? {
122
+ ...block.gridRevision,
123
+ previous: [...block.gridRevision.previous]
117
124
  } : void 0,
118
- tblGridChangeXml: block.tblGridChangeXml,
119
125
  rows: block.rows.map((row) => ({
120
126
  ...row,
127
+ conditionalStyle: row.conditionalStyle ? { ...row.conditionalStyle } : void 0,
121
128
  style: row.style ? {
122
129
  ...row.style,
123
- revisionXml: row.style.revisionXml ? [...row.style.revisionXml] : void 0
130
+ revision: row.style.revision ? { ...row.style.revision } : void 0,
131
+ propertyRevision: row.style.propertyRevision ? {
132
+ ...row.style.propertyRevision,
133
+ previous: { ...row.style.propertyRevision.previous }
134
+ } : void 0
124
135
  } : void 0,
125
136
  cells: row.cells.map((cell) => ({
126
137
  ...cell,
138
+ conditionalStyle: cell.conditionalStyle ? { ...cell.conditionalStyle } : void 0,
139
+ mergeRevisionState: cell.mergeRevisionState ? {
140
+ ...cell.mergeRevisionState,
141
+ previousCells: cell.mergeRevisionState.previousCells.map(
142
+ (previousCell) => ({
143
+ ...previousCell,
144
+ mergeRevisionState: void 0,
145
+ style: previousCell.style ? { ...previousCell.style } : void 0,
146
+ blocks: cloneParagraphs(previousCell.blocks)
147
+ })
148
+ )
149
+ } : void 0,
127
150
  style: cell.style ? {
128
151
  ...cell.style,
129
- revisionXml: cell.style.revisionXml ? [...cell.style.revisionXml] : void 0
152
+ revision: cell.style.revision ? { ...cell.style.revision } : void 0,
153
+ propertyRevision: cell.style.propertyRevision ? {
154
+ ...cell.style.propertyRevision,
155
+ previous: {
156
+ ...cell.style.propertyRevision.previous
157
+ }
158
+ } : void 0
130
159
  } : void 0,
131
160
  blocks: cloneParagraphs(cell.blocks)
132
161
  }))
@@ -153,23 +182,54 @@ function cloneBlock(block) {
153
182
  ...block.style,
154
183
  defaultCellMargins: block.style.defaultCellMargins ? { ...block.style.defaultCellMargins } : void 0,
155
184
  floating: block.style.floating ? { ...block.style.floating } : void 0,
156
- revisionXml: block.style.revisionXml ? [...block.style.revisionXml] : void 0
185
+ revision: block.style.revision ? {
186
+ ...block.style.revision,
187
+ previous: { ...block.style.revision.previous }
188
+ } : void 0
189
+ } : void 0,
190
+ gridRevision: block.gridRevision ? {
191
+ ...block.gridRevision,
192
+ previous: [...block.gridRevision.previous]
157
193
  } : void 0,
158
- tblGridChangeXml: block.tblGridChangeXml,
159
194
  rows: block.rows.map((row) => ({
160
195
  ...row,
196
+ conditionalStyle: row.conditionalStyle ? { ...row.conditionalStyle } : void 0,
161
197
  style: row.style ? {
162
198
  ...row.style,
163
- revisionXml: row.style.revisionXml ? [...row.style.revisionXml] : void 0
199
+ revision: row.style.revision ? { ...row.style.revision } : void 0,
200
+ propertyRevision: row.style.propertyRevision ? {
201
+ ...row.style.propertyRevision,
202
+ previous: { ...row.style.propertyRevision.previous }
203
+ } : void 0
164
204
  } : void 0,
165
205
  cells: row.cells.map((cell) => ({
166
206
  ...cell,
207
+ conditionalStyle: cell.conditionalStyle ? { ...cell.conditionalStyle } : void 0,
208
+ mergeRevisionState: cell.mergeRevisionState ? {
209
+ ...cell.mergeRevisionState,
210
+ previousCells: cell.mergeRevisionState.previousCells.map(
211
+ (previousCell) => ({
212
+ ...previousCell,
213
+ mergeRevisionState: void 0,
214
+ style: previousCell.style ? { ...previousCell.style } : void 0,
215
+ blocks: previousCell.blocks.map(
216
+ (paragraph) => cloneBlock(paragraph)
217
+ )
218
+ })
219
+ )
220
+ } : void 0,
167
221
  colSpan: cell.colSpan ?? void 0,
168
222
  rowSpan: cell.rowSpan ?? void 0,
169
223
  vMerge: cell.vMerge ?? void 0,
170
224
  style: cell.style ? {
171
225
  ...cell.style,
172
- revisionXml: cell.style.revisionXml ? [...cell.style.revisionXml] : void 0
226
+ revision: cell.style.revision ? { ...cell.style.revision } : void 0,
227
+ propertyRevision: cell.style.propertyRevision ? {
228
+ ...cell.style.propertyRevision,
229
+ previous: {
230
+ ...cell.style.propertyRevision.previous
231
+ }
232
+ } : void 0
173
233
  } : void 0,
174
234
  blocks: cell.blocks.map((paragraph) => ({
175
235
  ...paragraph,
@@ -26566,6 +26626,17 @@ function createEditorDialogs() {
26566
26626
  tableIndentLeft: "",
26567
26627
  tableWrapping: "none",
26568
26628
  floatingSummary: "",
26629
+ floatingHorizontalAnchor: "margin",
26630
+ floatingVerticalAnchor: "text",
26631
+ floatingX: "0",
26632
+ floatingY: "0",
26633
+ floatingXAlign: "",
26634
+ floatingYAlign: "",
26635
+ floatingDistanceTop: "0",
26636
+ floatingDistanceRight: "0",
26637
+ floatingDistanceBottom: "0",
26638
+ floatingDistanceLeft: "0",
26639
+ floatingOverlap: "overlap",
26569
26640
  rowHeight: "",
26570
26641
  rowHeightRule: "",
26571
26642
  repeatHeader: false,
@@ -26589,6 +26660,10 @@ function createEditorDialogs() {
26589
26660
  borderRight: false,
26590
26661
  borderBottom: false,
26591
26662
  borderLeft: false,
26663
+ borderStart: false,
26664
+ borderEnd: false,
26665
+ borderTopLeftToBottomRight: false,
26666
+ borderTopRightToBottomLeft: false,
26592
26667
  shading: "",
26593
26668
  altTitle: "",
26594
26669
  altDescription: ""
@@ -28546,6 +28621,13 @@ function createParagraphDialogBridge(deps) {
28546
28621
  applyParagraphDialogValues
28547
28622
  };
28548
28623
  }
28624
+ function createTableRevisionMetadata() {
28625
+ return {
28626
+ id: `rev:${Math.random().toString(36).slice(2, 9)}`,
28627
+ author: "User",
28628
+ date: Date.now()
28629
+ };
28630
+ }
28549
28631
  function patchStyleValue(style2, key, value) {
28550
28632
  const nextStyle = { ...style2 ?? {} };
28551
28633
  if (value === null) {
@@ -28720,10 +28802,20 @@ function setTableCellStyleValue(state, key, value) {
28720
28802
  selectedParagraphIds.add(id);
28721
28803
  }
28722
28804
  }
28723
- const updateCell = (cell) => ({
28724
- ...cell,
28725
- style: patchStyleValue(cell.style, key, value)
28726
- });
28805
+ const updateCell = (cell) => {
28806
+ let style2 = cell.style;
28807
+ if (state.trackChangesEnabled && key !== "revision" && key !== "propertyRevision" && !(style2 == null ? void 0 : style2.propertyRevision)) {
28808
+ style2 = {
28809
+ ...style2 ?? {},
28810
+ propertyRevision: {
28811
+ ...createTableRevisionMetadata(),
28812
+ type: "property",
28813
+ previous: { ...style2 ?? {} }
28814
+ }
28815
+ };
28816
+ }
28817
+ return { ...cell, style: patchStyleValue(style2, key, value) };
28818
+ };
28727
28819
  const nextSections = getDocumentSections(state.document).map((section) => ({
28728
28820
  ...section,
28729
28821
  blocks: updateTableCellsInBlocks(
@@ -28771,10 +28863,20 @@ function collectLinearSelectedParagraphIds(state) {
28771
28863
  }
28772
28864
  function setTableStyleValue(state, key, value) {
28773
28865
  const selectedParagraphIds = collectLinearSelectedParagraphIds(state);
28774
- const updateTable = (table) => ({
28775
- ...table,
28776
- style: patchStyleValue(table.style, key, value)
28777
- });
28866
+ const updateTable = (table) => {
28867
+ let style2 = table.style;
28868
+ if (state.trackChangesEnabled && key !== "revision" && !(style2 == null ? void 0 : style2.revision)) {
28869
+ style2 = {
28870
+ ...style2 ?? {},
28871
+ revision: {
28872
+ ...createTableRevisionMetadata(),
28873
+ type: "property",
28874
+ previous: { ...style2 ?? {} }
28875
+ }
28876
+ };
28877
+ }
28878
+ return { ...table, style: patchStyleValue(style2, key, value) };
28879
+ };
28778
28880
  const updateBlocks = (blocks) => {
28779
28881
  return blocks.map((block) => {
28780
28882
  if (block.type === "paragraph") return block;
@@ -28798,9 +28900,20 @@ function setTableStyleValue(state, key, value) {
28798
28900
  function setActiveTableStyleValue(state, tableId, key, value) {
28799
28901
  const updateTable = (table) => {
28800
28902
  if (table.id !== tableId) return table;
28903
+ let style2 = table.style;
28904
+ if (state.trackChangesEnabled && key !== "revision" && !(style2 == null ? void 0 : style2.revision)) {
28905
+ style2 = {
28906
+ ...style2 ?? {},
28907
+ revision: {
28908
+ ...createTableRevisionMetadata(),
28909
+ type: "property",
28910
+ previous: { ...style2 ?? {} }
28911
+ }
28912
+ };
28913
+ }
28801
28914
  return {
28802
28915
  ...table,
28803
- style: patchStyleValue(table.style, key, value)
28916
+ style: patchStyleValue(style2, key, value)
28804
28917
  };
28805
28918
  };
28806
28919
  return updateStateSections(
@@ -28813,7 +28926,20 @@ function setSelectedTableRowStyleValue(state, key, value) {
28813
28926
  if (!target) return state;
28814
28927
  const updateTable = (table) => {
28815
28928
  const nextRows = table.rows.map(
28816
- (row, rowIndex) => rowIndex === target.loc.rowIndex ? { ...row, style: patchStyleValue(row.style, key, value) } : row
28929
+ (row, rowIndex) => rowIndex === target.loc.rowIndex ? (() => {
28930
+ let style2 = row.style;
28931
+ if (state.trackChangesEnabled && key !== "revision" && key !== "propertyRevision" && !(style2 == null ? void 0 : style2.propertyRevision)) {
28932
+ style2 = {
28933
+ ...style2 ?? {},
28934
+ propertyRevision: {
28935
+ ...createTableRevisionMetadata(),
28936
+ type: "property",
28937
+ previous: { ...style2 ?? {} }
28938
+ }
28939
+ };
28940
+ }
28941
+ return { ...row, style: patchStyleValue(style2, key, value) };
28942
+ })() : row
28817
28943
  );
28818
28944
  return { ...table, rows: nextRows };
28819
28945
  };
@@ -28824,9 +28950,26 @@ function setSelectedTableRowHeader(state, value) {
28824
28950
  if (!target) return state;
28825
28951
  const updateTable = (table) => ({
28826
28952
  ...table,
28827
- rows: table.rows.map(
28828
- (row, rowIndex) => rowIndex === target.loc.rowIndex ? { ...row, isHeader: value === null ? void 0 : value } : row
28829
- )
28953
+ rows: table.rows.map((row, rowIndex) => {
28954
+ if (rowIndex !== target.loc.rowIndex) return row;
28955
+ let style2 = row.style;
28956
+ if (state.trackChangesEnabled && !(style2 == null ? void 0 : style2.propertyRevision)) {
28957
+ style2 = {
28958
+ ...style2 ?? {},
28959
+ propertyRevision: {
28960
+ ...createTableRevisionMetadata(),
28961
+ type: "property",
28962
+ previous: { ...style2 ?? {}, isHeader: row.isHeader }
28963
+ }
28964
+ };
28965
+ }
28966
+ const isHeader = value === null ? void 0 : value;
28967
+ return {
28968
+ ...row,
28969
+ isHeader,
28970
+ style: patchStyleValue(style2, "isHeader", isHeader ?? null)
28971
+ };
28972
+ })
28830
28973
  });
28831
28974
  return updateActiveTableBlocks(state, updateTable);
28832
28975
  }
@@ -28836,9 +28979,20 @@ function setTableRowHeight(state, tableId, rowIndex, height) {
28836
28979
  const nextRows = [...table.rows];
28837
28980
  const row = nextRows[rowIndex];
28838
28981
  if (row) {
28982
+ let style2 = row.style;
28983
+ if (state.trackChangesEnabled && !(style2 == null ? void 0 : style2.propertyRevision)) {
28984
+ style2 = {
28985
+ ...style2 ?? {},
28986
+ propertyRevision: {
28987
+ ...createTableRevisionMetadata(),
28988
+ type: "property",
28989
+ previous: { ...style2 ?? {} }
28990
+ }
28991
+ };
28992
+ }
28839
28993
  nextRows[rowIndex] = {
28840
28994
  ...row,
28841
- style: patchStyleValue(row.style, "height", height)
28995
+ style: patchStyleValue(style2, "height", height)
28842
28996
  };
28843
28997
  }
28844
28998
  return { ...table, rows: nextRows };
@@ -28904,6 +29058,7 @@ function setTableColumnWidths(state, tableId, columnWidths, tableWidth, tableInd
28904
29058
  }
28905
29059
  const nextRows = table.rows.map((row, rowIndex) => {
28906
29060
  const nextCells = row.cells.map((cell, cellIndex) => {
29061
+ var _a2, _b;
28907
29062
  const entry = tableLayout.find(
28908
29063
  (item) => item.rowIndex === rowIndex && item.cellIndex === cellIndex
28909
29064
  );
@@ -28911,11 +29066,17 @@ function setTableColumnWidths(state, tableId, columnWidths, tableWidth, tableInd
28911
29066
  const rightVisualColumnIndex = entry.visualColumnIndex + entry.colSpan - 1;
28912
29067
  const newWidth = columnWidths[rightVisualColumnIndex];
28913
29068
  if (newWidth !== void 0 && entry.colSpan === 1) {
29069
+ const propertyRevision = state.trackChangesEnabled && !((_a2 = cell.style) == null ? void 0 : _a2.propertyRevision) ? {
29070
+ ...createTableRevisionMetadata(),
29071
+ type: "property",
29072
+ previous: { ...cell.style ?? {} }
29073
+ } : (_b = cell.style) == null ? void 0 : _b.propertyRevision;
28914
29074
  return {
28915
29075
  ...cell,
28916
29076
  style: {
28917
29077
  ...cell.style ?? {},
28918
- width: typeof newWidth === "number" ? newWidth : newWidth
29078
+ width: typeof newWidth === "number" ? newWidth : newWidth,
29079
+ ...propertyRevision ? { propertyRevision } : {}
28919
29080
  }
28920
29081
  };
28921
29082
  }
@@ -28924,6 +29085,13 @@ function setTableColumnWidths(state, tableId, columnWidths, tableWidth, tableInd
28924
29085
  return { ...row, cells: nextCells };
28925
29086
  });
28926
29087
  const nextStyle = { ...table.style ?? {} };
29088
+ if (state.trackChangesEnabled && !nextStyle.revision && (tableWidth !== void 0 || tableIndentLeft !== void 0)) {
29089
+ nextStyle.revision = {
29090
+ ...createTableRevisionMetadata(),
29091
+ type: "property",
29092
+ previous: { ...table.style ?? {} }
29093
+ };
29094
+ }
28927
29095
  if (tableWidth !== void 0) {
28928
29096
  nextStyle.width = tableWidth;
28929
29097
  }
@@ -28934,6 +29102,11 @@ function setTableColumnWidths(state, tableId, columnWidths, tableWidth, tableInd
28934
29102
  ...table,
28935
29103
  rows: nextRows,
28936
29104
  gridCols: hasGridOverride && canResolveGrid ? nextGridCols : table.gridCols,
29105
+ gridRevision: state.trackChangesEnabled && hasGridOverride && canResolveGrid && !table.gridRevision ? {
29106
+ ...createTableRevisionMetadata(),
29107
+ type: "grid",
29108
+ previous: [...table.gridCols ?? []]
29109
+ } : table.gridRevision,
28937
29110
  style: Object.keys(nextStyle).length > 0 ? nextStyle : void 0
28938
29111
  };
28939
29112
  };
@@ -28944,6 +29117,7 @@ function setTableColumnWidths(state, tableId, columnWidths, tableWidth, tableInd
28944
29117
  }
28945
29118
  function insertTableAtSelection(state, rows, cols) {
28946
29119
  const initialCellWidth = `${100 / Math.max(1, cols)}%`;
29120
+ const insertionRevision = state.trackChangesEnabled ? createTableRevisionMetadata() : void 0;
28947
29121
  const tableRows = [];
28948
29122
  for (let rowIndex = 0; rowIndex < rows; rowIndex += 1) {
28949
29123
  const cells = [];
@@ -28955,7 +29129,13 @@ function insertTableAtSelection(state, rows, cols) {
28955
29129
  }
28956
29130
  });
28957
29131
  }
28958
- tableRows.push(createEditorTableRow(cells));
29132
+ const row = createEditorTableRow(cells);
29133
+ if (insertionRevision) {
29134
+ row.style = {
29135
+ revision: { ...insertionRevision, type: "insert" }
29136
+ };
29137
+ }
29138
+ tableRows.push(row);
28959
29139
  }
28960
29140
  const table = {
28961
29141
  ...createEditorTable(tableRows),
@@ -29026,6 +29206,17 @@ const EMPTY_INITIAL = {
29026
29206
  tableIndentLeft: "",
29027
29207
  tableWrapping: "none",
29028
29208
  floatingSummary: "",
29209
+ floatingHorizontalAnchor: "margin",
29210
+ floatingVerticalAnchor: "text",
29211
+ floatingX: "0",
29212
+ floatingY: "0",
29213
+ floatingXAlign: "",
29214
+ floatingYAlign: "",
29215
+ floatingDistanceTop: "0",
29216
+ floatingDistanceRight: "0",
29217
+ floatingDistanceBottom: "0",
29218
+ floatingDistanceLeft: "0",
29219
+ floatingOverlap: "overlap",
29029
29220
  rowHeight: "",
29030
29221
  rowHeightRule: "",
29031
29222
  repeatHeader: false,
@@ -29049,6 +29240,10 @@ const EMPTY_INITIAL = {
29049
29240
  borderRight: false,
29050
29241
  borderBottom: false,
29051
29242
  borderLeft: false,
29243
+ borderStart: false,
29244
+ borderEnd: false,
29245
+ borderTopLeftToBottomRight: false,
29246
+ borderTopRightToBottomLeft: false,
29052
29247
  shading: "",
29053
29248
  altTitle: "",
29054
29249
  altDescription: ""
@@ -29105,7 +29300,7 @@ function buildFloatingSummary(table) {
29105
29300
  return Object.entries(floating).map(([key, value]) => `${key}=${value}`).join(", ");
29106
29301
  }
29107
29302
  function buildInitialValues(ctx, activeTab = "table") {
29108
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
29303
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F;
29109
29304
  const tableWidth = serializeWidth((_a = ctx.table.style) == null ? void 0 : _a.width);
29110
29305
  const row = ctx.table.rows[ctx.rowIndex];
29111
29306
  const cell = row == null ? void 0 : row.cells[ctx.cellIndex];
@@ -29118,7 +29313,11 @@ function buildInitialValues(ctx, activeTab = "table") {
29118
29313
  style2.borderTop,
29119
29314
  style2.borderRight,
29120
29315
  style2.borderBottom,
29121
- style2.borderLeft
29316
+ style2.borderLeft,
29317
+ style2.borderStart,
29318
+ style2.borderEnd,
29319
+ style2.borderTopLeftToBottomRight,
29320
+ style2.borderTopRightToBottomLeft
29122
29321
  ].filter(isVisibleBorder);
29123
29322
  const sharedBorder = candidateBorders[0];
29124
29323
  const floatingSummary = buildFloatingSummary(ctx.table);
@@ -29131,11 +29330,26 @@ function buildInitialValues(ctx, activeTab = "table") {
29131
29330
  tableIndentLeft: serializeWidth((_f = ctx.table.style) == null ? void 0 : _f.indentLeft).value,
29132
29331
  tableWrapping: floatingSummary ? "around" : "none",
29133
29332
  floatingSummary,
29333
+ floatingHorizontalAnchor: ((_h = (_g = ctx.table.style) == null ? void 0 : _g.floating) == null ? void 0 : _h.horizontalAnchor) ?? "margin",
29334
+ floatingVerticalAnchor: ((_j = (_i = ctx.table.style) == null ? void 0 : _i.floating) == null ? void 0 : _j.verticalAnchor) ?? "text",
29335
+ floatingX: ((_l = (_k = ctx.table.style) == null ? void 0 : _k.floating) == null ? void 0 : _l.x) != null ? String(ctx.table.style.floating.x) : "0",
29336
+ floatingY: ((_n = (_m = ctx.table.style) == null ? void 0 : _m.floating) == null ? void 0 : _n.y) != null ? String(ctx.table.style.floating.y) : "0",
29337
+ floatingXAlign: ((_p = (_o = ctx.table.style) == null ? void 0 : _o.floating) == null ? void 0 : _p.xAlign) ?? "",
29338
+ floatingYAlign: ((_r = (_q = ctx.table.style) == null ? void 0 : _q.floating) == null ? void 0 : _r.yAlign) ?? "",
29339
+ floatingDistanceTop: String(((_t = (_s = ctx.table.style) == null ? void 0 : _s.floating) == null ? void 0 : _t.distanceTop) ?? 0),
29340
+ floatingDistanceRight: String(
29341
+ ((_v = (_u = ctx.table.style) == null ? void 0 : _u.floating) == null ? void 0 : _v.distanceRight) ?? 0
29342
+ ),
29343
+ floatingDistanceBottom: String(
29344
+ ((_x = (_w = ctx.table.style) == null ? void 0 : _w.floating) == null ? void 0 : _x.distanceBottom) ?? 0
29345
+ ),
29346
+ floatingDistanceLeft: String(((_z = (_y = ctx.table.style) == null ? void 0 : _y.floating) == null ? void 0 : _z.distanceLeft) ?? 0),
29347
+ floatingOverlap: ((_A = ctx.table.style) == null ? void 0 : _A.tblOverlap) ?? "overlap",
29134
29348
  rowHeight: rowHeight.value,
29135
- rowHeightRule: ((_g = row == null ? void 0 : row.style) == null ? void 0 : _g.heightRule) ?? "",
29349
+ rowHeightRule: ((_B = row == null ? void 0 : row.style) == null ? void 0 : _B.heightRule) ?? "",
29136
29350
  repeatHeader: Boolean(row == null ? void 0 : row.isHeader),
29137
- allowBreakAcrossPages: ((_h = row == null ? void 0 : row.style) == null ? void 0 : _h.cantSplit) !== true,
29138
- hiddenRow: ((_i = row == null ? void 0 : row.style) == null ? void 0 : _i.hidden) === true,
29351
+ allowBreakAcrossPages: ((_C = row == null ? void 0 : row.style) == null ? void 0 : _C.cantSplit) !== true,
29352
+ hiddenRow: ((_D = row == null ? void 0 : row.style) == null ? void 0 : _D.hidden) === true,
29139
29353
  columnWidth: columnWidth.value,
29140
29354
  cellWidth: cellWidth.value,
29141
29355
  cellVerticalAlign: style2.verticalAlign ?? "",
@@ -29154,9 +29368,17 @@ function buildInitialValues(ctx, activeTab = "table") {
29154
29368
  borderRight: isVisibleBorder(style2.borderRight),
29155
29369
  borderBottom: isVisibleBorder(style2.borderBottom),
29156
29370
  borderLeft: isVisibleBorder(style2.borderLeft),
29371
+ borderStart: isVisibleBorder(style2.borderStart),
29372
+ borderEnd: isVisibleBorder(style2.borderEnd),
29373
+ borderTopLeftToBottomRight: isVisibleBorder(
29374
+ style2.borderTopLeftToBottomRight
29375
+ ),
29376
+ borderTopRightToBottomLeft: isVisibleBorder(
29377
+ style2.borderTopRightToBottomLeft
29378
+ ),
29157
29379
  shading: style2.shading ?? "",
29158
- altTitle: ((_j = ctx.table.style) == null ? void 0 : _j.altTitle) ?? "",
29159
- altDescription: ((_k = ctx.table.style) == null ? void 0 : _k.altDescription) ?? ""
29380
+ altTitle: ((_E = ctx.table.style) == null ? void 0 : _E.altTitle) ?? "",
29381
+ altDescription: ((_F = ctx.table.style) == null ? void 0 : _F.altDescription) ?? ""
29160
29382
  };
29161
29383
  }
29162
29384
  function setCellStyle(state, key, value) {
@@ -29174,14 +29396,36 @@ function applyTableProperties(state, values) {
29174
29396
  const ctx = resolveActiveTableContext(state);
29175
29397
  if (!ctx) return state;
29176
29398
  let next = state;
29177
- next = setActiveTableStyleValue(next, ctx.tableId, "width", values.tableWidth);
29178
- next = setActiveTableStyleValue(next, ctx.tableId, "align", values.tableAlign);
29399
+ next = setActiveTableStyleValue(
29400
+ next,
29401
+ ctx.tableId,
29402
+ "width",
29403
+ values.tableWidth
29404
+ );
29405
+ next = setActiveTableStyleValue(
29406
+ next,
29407
+ ctx.tableId,
29408
+ "align",
29409
+ values.tableAlign
29410
+ );
29179
29411
  next = setActiveTableStyleValue(
29180
29412
  next,
29181
29413
  ctx.tableId,
29182
29414
  "indentLeft",
29183
29415
  values.tableIndentLeft
29184
29416
  );
29417
+ next = setActiveTableStyleValue(
29418
+ next,
29419
+ ctx.tableId,
29420
+ "floating",
29421
+ values.tableFloating
29422
+ );
29423
+ next = setActiveTableStyleValue(
29424
+ next,
29425
+ ctx.tableId,
29426
+ "tblOverlap",
29427
+ values.tableOverlap
29428
+ );
29185
29429
  next = setActiveTableStyleValue(
29186
29430
  next,
29187
29431
  ctx.tableId,
@@ -29222,6 +29466,18 @@ function applyTableProperties(state, values) {
29222
29466
  next = setCellStyle(next, "borderRight", values.borders.right);
29223
29467
  next = setCellStyle(next, "borderBottom", values.borders.bottom);
29224
29468
  next = setCellStyle(next, "borderLeft", values.borders.left);
29469
+ next = setCellStyle(next, "borderStart", values.borders.start);
29470
+ next = setCellStyle(next, "borderEnd", values.borders.end);
29471
+ next = setCellStyle(
29472
+ next,
29473
+ "borderTopLeftToBottomRight",
29474
+ values.borders.topLeftToBottomRight
29475
+ );
29476
+ next = setCellStyle(
29477
+ next,
29478
+ "borderTopRightToBottomLeft",
29479
+ values.borders.topRightToBottomLeft
29480
+ );
29225
29481
  next = setCellStyle(next, "shading", values.shading);
29226
29482
  return next;
29227
29483
  }
@@ -31619,7 +31875,7 @@ function ParagraphDialog(props) {
31619
31875
  });
31620
31876
  }
31621
31877
  delegateEvents(["input", "click"]);
31622
- var _tmpl$$5 = /* @__PURE__ */ template(`<div class="oasis-editor-dialog-input-group oasis-editor-dialog-input-group-grow"><label class=oasis-editor-dialog-label></label><input type=number class=oasis-editor-dialog-input min=0 step=1>`), _tmpl$2$1 = /* @__PURE__ */ template(`<label class=oasis-editor-dialog-style-toggle><input type=checkbox>`), _tmpl$3$1 = /* @__PURE__ */ template(`<button class="oasis-editor-dialog-button oasis-editor-dialog-button-secondary"data-testid=editor-table-properties-cancel>`), _tmpl$4$1 = /* @__PURE__ */ template(`<button class="oasis-editor-dialog-button oasis-editor-dialog-button-primary"data-testid=editor-table-properties-apply>`), _tmpl$5$1 = /* @__PURE__ */ template(`<div class=oasis-editor-table-properties-panel><fieldset class=oasis-editor-font-dialog-fieldset><legend></legend><div class=oasis-editor-dialog-row><div class=oasis-editor-dialog-input-group><label class=oasis-editor-dialog-label></label><select class=oasis-editor-dialog-input data-testid=editor-table-properties-table-width-unit><option value=points></option><option value=percent></option></select></div></div></fieldset><fieldset class=oasis-editor-font-dialog-fieldset><legend></legend><div class=oasis-editor-dialog-style-row></div><div class=oasis-editor-dialog-row></div></fieldset><fieldset class=oasis-editor-font-dialog-fieldset><legend></legend><div class=oasis-editor-dialog-style-row><button type=button class="oasis-editor-dialog-button oasis-editor-dialog-button-secondary"disabled data-testid=editor-table-properties-positioning></button></div><div class=oasis-editor-dialog-help-text>`), _tmpl$6$1 = /* @__PURE__ */ template(`<label class=oasis-editor-dialog-style-toggle><input type=radio name=table-align>`), _tmpl$7 = /* @__PURE__ */ template(`<div class=oasis-editor-table-properties-panel><div class=oasis-editor-dialog-row><div class="oasis-editor-dialog-input-group oasis-editor-dialog-input-group-grow"><label class=oasis-editor-dialog-label></label><select class=oasis-editor-dialog-input data-testid=editor-table-properties-row-height-rule><option value></option><option value=atLeast></option><option value=exact></option></select></div></div><div class=oasis-editor-dialog-style-row>`), _tmpl$8 = /* @__PURE__ */ template(`<div class=oasis-editor-table-properties-panel><div class=oasis-editor-dialog-row>`), _tmpl$9 = /* @__PURE__ */ template(`<div class=oasis-editor-table-properties-panel><div class=oasis-editor-dialog-row><div class="oasis-editor-dialog-input-group oasis-editor-dialog-input-group-grow"><label class=oasis-editor-dialog-label></label><select class=oasis-editor-dialog-input data-testid=editor-table-properties-cell-valign><option value></option><option value=top></option><option value=middle></option><option value=bottom></option></select></div><div class="oasis-editor-dialog-input-group oasis-editor-dialog-input-group-grow"><label class=oasis-editor-dialog-label></label><select class=oasis-editor-dialog-input data-testid=editor-table-properties-cell-direction><option value></option><option value=lrTb>lrTb</option><option value=tbRl>tbRl</option><option value=btLr>btLr</option><option value=lrTbV>lrTbV</option><option value=tbRlV>tbRlV</option></select></div></div><fieldset class=oasis-editor-font-dialog-fieldset><legend></legend><div class=oasis-editor-dialog-style-row></div></fieldset><fieldset class=oasis-editor-font-dialog-fieldset><legend></legend><div class=oasis-editor-dialog-row></div></fieldset><fieldset class=oasis-editor-font-dialog-fieldset><legend></legend><div class=oasis-editor-dialog-row><div class="oasis-editor-dialog-input-group oasis-editor-dialog-input-group-grow"><label class=oasis-editor-dialog-label></label><select class=oasis-editor-dialog-input data-testid=editor-table-properties-border-style><option value=none></option><option value=solid></option><option value=dashed></option><option value=dotted></option></select></div><div class=oasis-editor-dialog-input-group><label class=oasis-editor-dialog-label></label><input type=color class=oasis-editor-dialog-input data-testid=editor-table-properties-border-color></div><div class=oasis-editor-dialog-input-group><label class=oasis-editor-dialog-label></label><input type=color class=oasis-editor-dialog-input data-testid=editor-table-properties-shading></div></div><div class=oasis-editor-dialog-style-row></div><div class=oasis-editor-table-properties-cell-preview data-testid=editor-table-properties-cell-preview>`), _tmpl$0 = /* @__PURE__ */ template(`<div class=oasis-editor-table-properties-panel><div class=oasis-editor-dialog-input-group><label class=oasis-editor-dialog-label></label><input class=oasis-editor-dialog-input data-testid=editor-table-properties-alt-title></div><div class=oasis-editor-dialog-input-group><label class=oasis-editor-dialog-label></label><textarea class="oasis-editor-dialog-input oasis-editor-table-properties-textarea"data-testid=editor-table-properties-alt-description>`);
31878
+ var _tmpl$$5 = /* @__PURE__ */ template(`<div class="oasis-editor-dialog-input-group oasis-editor-dialog-input-group-grow"><label class=oasis-editor-dialog-label></label><input type=number class=oasis-editor-dialog-input step=1>`), _tmpl$2$1 = /* @__PURE__ */ template(`<label class=oasis-editor-dialog-style-toggle><input type=checkbox>`), _tmpl$3$1 = /* @__PURE__ */ template(`<button class="oasis-editor-dialog-button oasis-editor-dialog-button-secondary"data-testid=editor-table-properties-cancel>`), _tmpl$4$1 = /* @__PURE__ */ template(`<button class="oasis-editor-dialog-button oasis-editor-dialog-button-primary"data-testid=editor-table-properties-apply>`), _tmpl$5$1 = /* @__PURE__ */ template(`<div class=oasis-editor-dialog-row><label class="oasis-editor-dialog-input-group oasis-editor-dialog-input-group-grow"><span class=oasis-editor-dialog-label></span><select class=oasis-editor-dialog-input data-testid=editor-table-properties-floating-h-anchor><option value=margin></option><option value=page></option><option value=text></option></select></label><label class="oasis-editor-dialog-input-group oasis-editor-dialog-input-group-grow"><span class=oasis-editor-dialog-label></span><select class=oasis-editor-dialog-input data-testid=editor-table-properties-floating-v-anchor><option value=margin></option><option value=page></option><option value=text>`), _tmpl$6$1 = /* @__PURE__ */ template(`<div class=oasis-editor-dialog-row><label class="oasis-editor-dialog-input-group oasis-editor-dialog-input-group-grow"><span class=oasis-editor-dialog-label></span><select class=oasis-editor-dialog-input data-testid=editor-table-properties-floating-x-align><option value></option></select></label><label class="oasis-editor-dialog-input-group oasis-editor-dialog-input-group-grow"><span class=oasis-editor-dialog-label></span><select class=oasis-editor-dialog-input data-testid=editor-table-properties-floating-y-align><option value>`), _tmpl$7 = /* @__PURE__ */ template(`<div class=oasis-editor-dialog-row>`), _tmpl$8 = /* @__PURE__ */ template(`<div class=oasis-editor-table-properties-panel><fieldset class=oasis-editor-font-dialog-fieldset><legend></legend><div class=oasis-editor-dialog-row><div class=oasis-editor-dialog-input-group><label class=oasis-editor-dialog-label></label><select class=oasis-editor-dialog-input data-testid=editor-table-properties-table-width-unit><option value=points></option><option value=percent></option></select></div></div></fieldset><fieldset class=oasis-editor-font-dialog-fieldset><legend></legend><div class=oasis-editor-dialog-style-row></div><div class=oasis-editor-dialog-row></div></fieldset><fieldset class=oasis-editor-font-dialog-fieldset><legend></legend><div class=oasis-editor-dialog-style-row>`), _tmpl$9 = /* @__PURE__ */ template(`<label class=oasis-editor-dialog-style-toggle><input type=radio name=table-align>`), _tmpl$0 = /* @__PURE__ */ template(`<option>`), _tmpl$1 = /* @__PURE__ */ template(`<div class=oasis-editor-table-properties-panel><div class=oasis-editor-dialog-row><div class="oasis-editor-dialog-input-group oasis-editor-dialog-input-group-grow"><label class=oasis-editor-dialog-label></label><select class=oasis-editor-dialog-input data-testid=editor-table-properties-row-height-rule><option value></option><option value=atLeast></option><option value=exact></option></select></div></div><div class=oasis-editor-dialog-style-row>`), _tmpl$10 = /* @__PURE__ */ template(`<div class=oasis-editor-table-properties-panel><div class=oasis-editor-dialog-row>`), _tmpl$11 = /* @__PURE__ */ template(`<div class=oasis-editor-table-properties-panel><div class=oasis-editor-dialog-row><div class="oasis-editor-dialog-input-group oasis-editor-dialog-input-group-grow"><label class=oasis-editor-dialog-label></label><select class=oasis-editor-dialog-input data-testid=editor-table-properties-cell-valign><option value></option><option value=top></option><option value=middle></option><option value=bottom></option></select></div><div class="oasis-editor-dialog-input-group oasis-editor-dialog-input-group-grow"><label class=oasis-editor-dialog-label></label><select class=oasis-editor-dialog-input data-testid=editor-table-properties-cell-direction><option value></option><option value=lrTb>lrTb</option><option value=tbRl>tbRl</option><option value=btLr>btLr</option><option value=lrTbV>lrTbV</option><option value=tbRlV>tbRlV</option></select></div></div><fieldset class=oasis-editor-font-dialog-fieldset><legend></legend><div class=oasis-editor-dialog-style-row></div></fieldset><fieldset class=oasis-editor-font-dialog-fieldset><legend></legend><div class=oasis-editor-dialog-row></div></fieldset><fieldset class=oasis-editor-font-dialog-fieldset><legend></legend><div class=oasis-editor-dialog-row><div class="oasis-editor-dialog-input-group oasis-editor-dialog-input-group-grow"><label class=oasis-editor-dialog-label></label><select class=oasis-editor-dialog-input data-testid=editor-table-properties-border-style><option value=none></option><option value=solid></option><option value=dashed></option><option value=dotted></option></select></div><div class=oasis-editor-dialog-input-group><label class=oasis-editor-dialog-label></label><input type=color class=oasis-editor-dialog-input data-testid=editor-table-properties-border-color></div><div class=oasis-editor-dialog-input-group><label class=oasis-editor-dialog-label></label><input type=color class=oasis-editor-dialog-input data-testid=editor-table-properties-shading></div></div><div class=oasis-editor-dialog-style-row></div><div class=oasis-editor-table-properties-cell-preview data-testid=editor-table-properties-cell-preview>`), _tmpl$12 = /* @__PURE__ */ template(`<div class=oasis-editor-table-properties-panel><div class=oasis-editor-dialog-input-group><label class=oasis-editor-dialog-label></label><input class=oasis-editor-dialog-input data-testid=editor-table-properties-alt-title></div><div class=oasis-editor-dialog-input-group><label class=oasis-editor-dialog-label></label><textarea class="oasis-editor-dialog-input oasis-editor-table-properties-textarea"data-testid=editor-table-properties-alt-description>`);
31623
31879
  const DEFAULT_BORDER_WIDTH_PT = 0.5;
31624
31880
  const DEFAULT_BORDER_COLOR = "#000000";
31625
31881
  function parseNumber(value) {
@@ -31649,6 +31905,17 @@ function TablePropertiesDialog(props) {
31649
31905
  const [tableAlign, setTableAlign] = createSignal("");
31650
31906
  const [tableIndentLeft, setTableIndentLeft] = createSignal("");
31651
31907
  const [tableWrapping, setTableWrapping] = createSignal("none");
31908
+ const [floatingHorizontalAnchor, setFloatingHorizontalAnchor] = createSignal("margin");
31909
+ const [floatingVerticalAnchor, setFloatingVerticalAnchor] = createSignal("text");
31910
+ const [floatingX, setFloatingX] = createSignal("");
31911
+ const [floatingY, setFloatingY] = createSignal("");
31912
+ const [floatingXAlign, setFloatingXAlign] = createSignal("");
31913
+ const [floatingYAlign, setFloatingYAlign] = createSignal("");
31914
+ const [floatingDistanceTop, setFloatingDistanceTop] = createSignal("");
31915
+ const [floatingDistanceRight, setFloatingDistanceRight] = createSignal("");
31916
+ const [floatingDistanceBottom, setFloatingDistanceBottom] = createSignal("");
31917
+ const [floatingDistanceLeft, setFloatingDistanceLeft] = createSignal("");
31918
+ const [floatingOverlap, setFloatingOverlap] = createSignal("overlap");
31652
31919
  const [rowHeight, setRowHeight] = createSignal("");
31653
31920
  const [rowHeightRule, setRowHeightRule] = createSignal("");
31654
31921
  const [repeatHeader, setRepeatHeader] = createSignal(false);
@@ -31672,6 +31939,10 @@ function TablePropertiesDialog(props) {
31672
31939
  const [borderRight, setBorderRight] = createSignal(false);
31673
31940
  const [borderBottom, setBorderBottom] = createSignal(false);
31674
31941
  const [borderLeft, setBorderLeft] = createSignal(false);
31942
+ const [borderStart, setBorderStart] = createSignal(false);
31943
+ const [borderEnd, setBorderEnd] = createSignal(false);
31944
+ const [borderTlBr, setBorderTlBr] = createSignal(false);
31945
+ const [borderTrBl, setBorderTrBl] = createSignal(false);
31675
31946
  const [shading, setShading] = createSignal("");
31676
31947
  const [altTitle, setAltTitle] = createSignal("");
31677
31948
  const [altDescription, setAltDescription] = createSignal("");
@@ -31683,6 +31954,17 @@ function TablePropertiesDialog(props) {
31683
31954
  setTableAlign(props.initial.tableAlign);
31684
31955
  setTableIndentLeft(props.initial.tableIndentLeft);
31685
31956
  setTableWrapping(props.initial.tableWrapping);
31957
+ setFloatingHorizontalAnchor(props.initial.floatingHorizontalAnchor);
31958
+ setFloatingVerticalAnchor(props.initial.floatingVerticalAnchor);
31959
+ setFloatingX(props.initial.floatingX);
31960
+ setFloatingY(props.initial.floatingY);
31961
+ setFloatingXAlign(props.initial.floatingXAlign);
31962
+ setFloatingYAlign(props.initial.floatingYAlign);
31963
+ setFloatingDistanceTop(props.initial.floatingDistanceTop);
31964
+ setFloatingDistanceRight(props.initial.floatingDistanceRight);
31965
+ setFloatingDistanceBottom(props.initial.floatingDistanceBottom);
31966
+ setFloatingDistanceLeft(props.initial.floatingDistanceLeft);
31967
+ setFloatingOverlap(props.initial.floatingOverlap);
31686
31968
  setRowHeight(props.initial.rowHeight);
31687
31969
  setRowHeightRule(props.initial.rowHeightRule);
31688
31970
  setRepeatHeader(props.initial.repeatHeader);
@@ -31706,6 +31988,10 @@ function TablePropertiesDialog(props) {
31706
31988
  setBorderRight(props.initial.borderRight);
31707
31989
  setBorderBottom(props.initial.borderBottom);
31708
31990
  setBorderLeft(props.initial.borderLeft);
31991
+ setBorderStart(props.initial.borderStart);
31992
+ setBorderEnd(props.initial.borderEnd);
31993
+ setBorderTlBr(props.initial.borderTopLeftToBottomRight);
31994
+ setBorderTrBl(props.initial.borderTopRightToBottomLeft);
31709
31995
  setShading(props.initial.shading);
31710
31996
  setAltTitle(props.initial.altTitle);
31711
31997
  setAltDescription(props.initial.altDescription);
@@ -31727,6 +32013,25 @@ function TablePropertiesDialog(props) {
31727
32013
  tableWidth: parseWidth(tableWidth(), tableWidthUnit()),
31728
32014
  tableAlign: tableAlign() || null,
31729
32015
  tableIndentLeft: parseWidth(tableIndentLeft(), "points"),
32016
+ tableFloating: tableWrapping() === "around" ? {
32017
+ horizontalAnchor: floatingHorizontalAnchor(),
32018
+ verticalAnchor: floatingVerticalAnchor(),
32019
+ ...floatingXAlign() ? {
32020
+ xAlign: floatingXAlign()
32021
+ } : {
32022
+ x: parseNumber(floatingX()) ?? 0
32023
+ },
32024
+ ...floatingYAlign() ? {
32025
+ yAlign: floatingYAlign()
32026
+ } : {
32027
+ y: parseNumber(floatingY()) ?? 0
32028
+ },
32029
+ distanceTop: parseNumber(floatingDistanceTop()) ?? 0,
32030
+ distanceRight: parseNumber(floatingDistanceRight()) ?? 0,
32031
+ distanceBottom: parseNumber(floatingDistanceBottom()) ?? 0,
32032
+ distanceLeft: parseNumber(floatingDistanceLeft()) ?? 0
32033
+ } : null,
32034
+ tableOverlap: tableWrapping() === "around" ? floatingOverlap() : null,
31730
32035
  rowHeight: parseWidth(rowHeight(), "points"),
31731
32036
  rowHeightRule: rowHeightRule() || null,
31732
32037
  repeatHeader: repeatHeader(),
@@ -31749,7 +32054,11 @@ function TablePropertiesDialog(props) {
31749
32054
  top: borderTop() ? border : null,
31750
32055
  right: borderRight() ? border : null,
31751
32056
  bottom: borderBottom() ? border : null,
31752
- left: borderLeft() ? border : null
32057
+ left: borderLeft() ? border : null,
32058
+ start: borderStart() ? border : null,
32059
+ end: borderEnd() ? border : null,
32060
+ topLeftToBottomRight: borderTlBr() ? border : null,
32061
+ topRightToBottomLeft: borderTrBl() ? border : null
31753
32062
  },
31754
32063
  shading: shading().trim() || null,
31755
32064
  altTitle: altTitle().trim() || null,
@@ -31757,10 +32066,11 @@ function TablePropertiesDialog(props) {
31757
32066
  }, props.initial);
31758
32067
  props.onClose();
31759
32068
  };
31760
- const numericInput = (label, value, setter, testId, disabled = false) => (() => {
32069
+ const numericInput = (label, value, setter, testId, disabled = false, allowNegative = false) => (() => {
31761
32070
  var _el$ = _tmpl$$5(), _el$2 = _el$.firstChild, _el$3 = _el$2.nextSibling;
31762
32071
  insert(_el$2, label);
31763
32072
  _el$3.$$input = (e) => setter(e.currentTarget.value);
32073
+ setAttribute(_el$3, "min", allowNegative ? void 0 : "0");
31764
32074
  _el$3.disabled = disabled;
31765
32075
  setAttribute(_el$3, "data-testid", testId);
31766
32076
  createRenderEffect(() => _el$3.value = value());
@@ -31817,7 +32127,7 @@ function TablePropertiesDialog(props) {
31817
32127
  label: t("table.tabTable"),
31818
32128
  testId: "editor-table-properties-tab-table",
31819
32129
  panel: (() => {
31820
- var _el$8 = _tmpl$5$1(), _el$9 = _el$8.firstChild, _el$0 = _el$9.firstChild, _el$1 = _el$0.nextSibling, _el$10 = _el$1.firstChild, _el$11 = _el$10.firstChild, _el$12 = _el$11.nextSibling, _el$13 = _el$12.firstChild, _el$14 = _el$13.nextSibling, _el$15 = _el$9.nextSibling, _el$16 = _el$15.firstChild, _el$17 = _el$16.nextSibling, _el$18 = _el$17.nextSibling, _el$19 = _el$15.nextSibling, _el$20 = _el$19.firstChild, _el$21 = _el$20.nextSibling, _el$22 = _el$21.firstChild, _el$23 = _el$21.nextSibling;
32130
+ var _el$8 = _tmpl$8(), _el$9 = _el$8.firstChild, _el$0 = _el$9.firstChild, _el$1 = _el$0.nextSibling, _el$10 = _el$1.firstChild, _el$11 = _el$10.firstChild, _el$12 = _el$11.nextSibling, _el$13 = _el$12.firstChild, _el$14 = _el$13.nextSibling, _el$15 = _el$9.nextSibling, _el$16 = _el$15.firstChild, _el$17 = _el$16.nextSibling, _el$18 = _el$17.nextSibling, _el$19 = _el$15.nextSibling, _el$20 = _el$19.firstChild, _el$21 = _el$20.nextSibling;
31821
32131
  insert(_el$0, () => t("table.sizeSection"));
31822
32132
  insert(_el$1, () => numericInput(t("table.preferredWidth"), tableWidth, setTableWidth, "editor-table-properties-table-width"), _el$10);
31823
32133
  insert(_el$11, () => t("table.measureIn"));
@@ -31826,19 +32136,72 @@ function TablePropertiesDialog(props) {
31826
32136
  insert(_el$14, () => t("table.percent"));
31827
32137
  insert(_el$16, () => t("table.alignmentSection"));
31828
32138
  insert(_el$17, () => ["left", "center", "right"].map((align) => (() => {
31829
- var _el$24 = _tmpl$6$1(), _el$25 = _el$24.firstChild;
31830
- _el$25.addEventListener("change", () => setTableAlign(align));
31831
- setAttribute(_el$25, "data-testid", `editor-table-properties-align-${align}`);
31832
- insert(_el$24, () => t(`table.align${align[0].toUpperCase()}${align.slice(1)}`), null);
31833
- createRenderEffect(() => _el$25.checked = tableAlign() === align);
31834
- return _el$24;
32139
+ var _el$45 = _tmpl$9(), _el$46 = _el$45.firstChild;
32140
+ _el$46.addEventListener("change", () => setTableAlign(align));
32141
+ setAttribute(_el$46, "data-testid", `editor-table-properties-align-${align}`);
32142
+ insert(_el$45, () => t(`table.align${align[0].toUpperCase()}${align.slice(1)}`), null);
32143
+ createRenderEffect(() => _el$46.checked = tableAlign() === align);
32144
+ return _el$45;
31835
32145
  })()));
31836
32146
  insert(_el$18, () => numericInput(t("table.indentFromLeft"), tableIndentLeft, setTableIndentLeft, "editor-table-properties-indent-left"));
31837
32147
  insert(_el$20, () => t("table.textWrappingSection"));
31838
- insert(_el$21, () => checkbox(t("table.wrapNone"), () => tableWrapping() === "none", () => setTableWrapping("none"), "editor-table-properties-wrap-none"), _el$22);
31839
- insert(_el$21, () => checkbox(t("table.wrapAround"), () => tableWrapping() === "around", () => setTableWrapping("around"), "editor-table-properties-wrap-around", !props.initial.floatingSummary), _el$22);
31840
- insert(_el$22, () => t("table.positioning"));
31841
- insert(_el$23, () => props.initial.floatingSummary || t("table.positioningReadOnly"));
32148
+ insert(_el$21, () => checkbox(t("table.wrapNone"), () => tableWrapping() === "none", () => setTableWrapping("none"), "editor-table-properties-wrap-none"), null);
32149
+ insert(_el$21, () => checkbox(t("table.wrapAround"), () => tableWrapping() === "around", () => setTableWrapping("around"), "editor-table-properties-wrap-around"), null);
32150
+ insert(_el$19, createComponent(Show, {
32151
+ get when() {
32152
+ return tableWrapping() === "around";
32153
+ },
32154
+ get children() {
32155
+ return [(() => {
32156
+ var _el$22 = _tmpl$5$1(), _el$23 = _el$22.firstChild, _el$24 = _el$23.firstChild, _el$25 = _el$24.nextSibling, _el$26 = _el$25.firstChild, _el$27 = _el$26.nextSibling, _el$28 = _el$27.nextSibling, _el$29 = _el$23.nextSibling, _el$30 = _el$29.firstChild, _el$31 = _el$30.nextSibling, _el$32 = _el$31.firstChild, _el$33 = _el$32.nextSibling, _el$34 = _el$33.nextSibling;
32157
+ insert(_el$24, () => t("table.horizontalAnchor"));
32158
+ _el$25.addEventListener("change", (e) => setFloatingHorizontalAnchor(e.currentTarget.value));
32159
+ insert(_el$26, () => t("table.anchorMargin"));
32160
+ insert(_el$27, () => t("table.anchorPage"));
32161
+ insert(_el$28, () => t("table.anchorText"));
32162
+ insert(_el$30, () => t("table.verticalAnchor"));
32163
+ _el$31.addEventListener("change", (e) => setFloatingVerticalAnchor(e.currentTarget.value));
32164
+ insert(_el$32, () => t("table.anchorMargin"));
32165
+ insert(_el$33, () => t("table.anchorPage"));
32166
+ insert(_el$34, () => t("table.anchorText"));
32167
+ createRenderEffect(() => _el$25.value = floatingHorizontalAnchor());
32168
+ createRenderEffect(() => _el$31.value = floatingVerticalAnchor());
32169
+ return _el$22;
32170
+ })(), (() => {
32171
+ var _el$35 = _tmpl$6$1(), _el$36 = _el$35.firstChild, _el$37 = _el$36.firstChild, _el$38 = _el$37.nextSibling, _el$39 = _el$38.firstChild, _el$40 = _el$36.nextSibling, _el$41 = _el$40.firstChild, _el$42 = _el$41.nextSibling, _el$43 = _el$42.firstChild;
32172
+ insert(_el$35, () => numericInput(t("table.positionX"), floatingX, setFloatingX, "editor-table-properties-floating-x", Boolean(floatingXAlign()), true), _el$36);
32173
+ insert(_el$35, () => numericInput(t("table.positionY"), floatingY, setFloatingY, "editor-table-properties-floating-y", Boolean(floatingYAlign()), true), _el$36);
32174
+ insert(_el$37, () => t("table.horizontalAlignment"));
32175
+ _el$38.addEventListener("change", (e) => setFloatingXAlign(e.currentTarget.value));
32176
+ insert(_el$39, () => t("table.explicitOffset"));
32177
+ insert(_el$38, () => ["left", "center", "right", "inside", "outside"].map((value) => (() => {
32178
+ var _el$47 = _tmpl$0();
32179
+ _el$47.value = value;
32180
+ insert(_el$47, value);
32181
+ return _el$47;
32182
+ })()), null);
32183
+ insert(_el$41, () => t("table.verticalAlignment"));
32184
+ _el$42.addEventListener("change", (e) => setFloatingYAlign(e.currentTarget.value));
32185
+ insert(_el$43, () => t("table.explicitOffset"));
32186
+ insert(_el$42, () => ["top", "center", "bottom", "inside", "outside"].map((value) => (() => {
32187
+ var _el$48 = _tmpl$0();
32188
+ _el$48.value = value;
32189
+ insert(_el$48, value);
32190
+ return _el$48;
32191
+ })()), null);
32192
+ createRenderEffect(() => _el$38.value = floatingXAlign());
32193
+ createRenderEffect(() => _el$42.value = floatingYAlign());
32194
+ return _el$35;
32195
+ })(), (() => {
32196
+ var _el$44 = _tmpl$7();
32197
+ insert(_el$44, () => numericInput(t("table.distanceTop"), floatingDistanceTop, setFloatingDistanceTop, "editor-table-properties-floating-distance-top"), null);
32198
+ insert(_el$44, () => numericInput(t("table.distanceRight"), floatingDistanceRight, setFloatingDistanceRight, "editor-table-properties-floating-distance-right"), null);
32199
+ insert(_el$44, () => numericInput(t("table.distanceBottom"), floatingDistanceBottom, setFloatingDistanceBottom, "editor-table-properties-floating-distance-bottom"), null);
32200
+ insert(_el$44, () => numericInput(t("table.distanceLeft"), floatingDistanceLeft, setFloatingDistanceLeft, "editor-table-properties-floating-distance-left"), null);
32201
+ return _el$44;
32202
+ })(), memo(() => checkbox(t("table.allowOverlap"), () => floatingOverlap() === "overlap", (value) => setFloatingOverlap(value ? "overlap" : "never"), "editor-table-properties-floating-overlap"))];
32203
+ }
32204
+ }), null);
31842
32205
  createRenderEffect(() => _el$12.value = tableWidthUnit());
31843
32206
  return _el$8;
31844
32207
  })()
@@ -31847,56 +32210,56 @@ function TablePropertiesDialog(props) {
31847
32210
  label: t("table.tabRow"),
31848
32211
  testId: "editor-table-properties-tab-row",
31849
32212
  panel: (() => {
31850
- var _el$26 = _tmpl$7(), _el$27 = _el$26.firstChild, _el$28 = _el$27.firstChild, _el$29 = _el$28.firstChild, _el$30 = _el$29.nextSibling, _el$31 = _el$30.firstChild, _el$32 = _el$31.nextSibling, _el$33 = _el$32.nextSibling, _el$34 = _el$27.nextSibling;
31851
- insert(_el$27, () => numericInput(t("table.rowHeight"), rowHeight, setRowHeight, "editor-table-properties-row-height"), _el$28);
31852
- insert(_el$29, () => t("table.rowHeightRule"));
31853
- _el$30.addEventListener("change", (e) => setRowHeightRule(e.currentTarget.value));
31854
- insert(_el$31, () => t("table.rowAuto"));
31855
- insert(_el$32, () => t("table.rowAtLeast"));
31856
- insert(_el$33, () => t("table.rowExactly"));
31857
- insert(_el$34, () => checkbox(t("table.repeatHeader"), repeatHeader, setRepeatHeader, "editor-table-properties-repeat-header"), null);
31858
- insert(_el$34, () => checkbox(t("table.allowBreakAcrossPages"), allowBreakAcrossPages, setAllowBreakAcrossPages, "editor-table-properties-allow-break"), null);
31859
- insert(_el$34, () => checkbox(t("table.hiddenRow"), hiddenRow, setHiddenRow, "editor-table-properties-hidden-row"), null);
31860
- createRenderEffect(() => _el$30.value = rowHeightRule());
31861
- return _el$26;
32213
+ var _el$49 = _tmpl$1(), _el$50 = _el$49.firstChild, _el$51 = _el$50.firstChild, _el$52 = _el$51.firstChild, _el$53 = _el$52.nextSibling, _el$54 = _el$53.firstChild, _el$55 = _el$54.nextSibling, _el$56 = _el$55.nextSibling, _el$57 = _el$50.nextSibling;
32214
+ insert(_el$50, () => numericInput(t("table.rowHeight"), rowHeight, setRowHeight, "editor-table-properties-row-height"), _el$51);
32215
+ insert(_el$52, () => t("table.rowHeightRule"));
32216
+ _el$53.addEventListener("change", (e) => setRowHeightRule(e.currentTarget.value));
32217
+ insert(_el$54, () => t("table.rowAuto"));
32218
+ insert(_el$55, () => t("table.rowAtLeast"));
32219
+ insert(_el$56, () => t("table.rowExactly"));
32220
+ insert(_el$57, () => checkbox(t("table.repeatHeader"), repeatHeader, setRepeatHeader, "editor-table-properties-repeat-header"), null);
32221
+ insert(_el$57, () => checkbox(t("table.allowBreakAcrossPages"), allowBreakAcrossPages, setAllowBreakAcrossPages, "editor-table-properties-allow-break"), null);
32222
+ insert(_el$57, () => checkbox(t("table.hiddenRow"), hiddenRow, setHiddenRow, "editor-table-properties-hidden-row"), null);
32223
+ createRenderEffect(() => _el$53.value = rowHeightRule());
32224
+ return _el$49;
31862
32225
  })()
31863
32226
  }, {
31864
32227
  id: "column",
31865
32228
  label: t("table.tabColumn"),
31866
32229
  testId: "editor-table-properties-tab-column",
31867
32230
  panel: (() => {
31868
- var _el$35 = _tmpl$8(), _el$36 = _el$35.firstChild;
31869
- insert(_el$36, () => numericInput(t("table.columnWidth"), columnWidth, setColumnWidth, "editor-table-properties-column-width"));
31870
- return _el$35;
32231
+ var _el$58 = _tmpl$10(), _el$59 = _el$58.firstChild;
32232
+ insert(_el$59, () => numericInput(t("table.columnWidth"), columnWidth, setColumnWidth, "editor-table-properties-column-width"));
32233
+ return _el$58;
31871
32234
  })()
31872
32235
  }, {
31873
32236
  id: "cell",
31874
32237
  label: t("table.tabCell"),
31875
32238
  testId: "editor-table-properties-tab-cell",
31876
32239
  panel: (() => {
31877
- var _el$37 = _tmpl$9(), _el$38 = _el$37.firstChild, _el$39 = _el$38.firstChild, _el$40 = _el$39.firstChild, _el$41 = _el$40.nextSibling, _el$42 = _el$41.firstChild, _el$43 = _el$42.nextSibling, _el$44 = _el$43.nextSibling, _el$45 = _el$44.nextSibling, _el$46 = _el$39.nextSibling, _el$47 = _el$46.firstChild, _el$48 = _el$47.nextSibling, _el$49 = _el$48.firstChild, _el$50 = _el$38.nextSibling, _el$51 = _el$50.firstChild, _el$52 = _el$51.nextSibling, _el$53 = _el$50.nextSibling, _el$54 = _el$53.firstChild, _el$55 = _el$54.nextSibling, _el$56 = _el$53.nextSibling, _el$57 = _el$56.firstChild, _el$58 = _el$57.nextSibling, _el$59 = _el$58.firstChild, _el$60 = _el$59.firstChild, _el$61 = _el$60.nextSibling, _el$62 = _el$61.firstChild, _el$63 = _el$62.nextSibling, _el$64 = _el$63.nextSibling, _el$65 = _el$64.nextSibling, _el$66 = _el$59.nextSibling, _el$67 = _el$66.firstChild, _el$68 = _el$67.nextSibling, _el$69 = _el$66.nextSibling, _el$70 = _el$69.firstChild, _el$71 = _el$70.nextSibling, _el$72 = _el$58.nextSibling, _el$73 = _el$72.nextSibling;
31878
- insert(_el$38, () => numericInput(t("table.cellWidth"), cellWidth, setCellWidth, "editor-table-properties-cell-width"), _el$39);
31879
- insert(_el$40, () => t("table.verticalAlignment"));
31880
- _el$41.addEventListener("change", (e) => setCellVerticalAlign(e.currentTarget.value));
31881
- insert(_el$42, () => t("table.inherit"));
31882
- insert(_el$43, () => t("table.valignTop"));
31883
- insert(_el$44, () => t("table.valignMiddle"));
31884
- insert(_el$45, () => t("table.valignBottom"));
31885
- insert(_el$47, () => t("table.textDirection"));
31886
- _el$48.addEventListener("change", (e) => setCellTextDirection(e.currentTarget.value));
31887
- insert(_el$49, () => t("table.inherit"));
31888
- insert(_el$51, () => t("table.options"));
31889
- insert(_el$52, () => checkbox(t("table.noWrap"), cellNoWrap, setCellNoWrap, "editor-table-properties-cell-nowrap"), null);
31890
- insert(_el$52, () => checkbox(t("table.fitText"), cellFitText, setCellFitText, "editor-table-properties-cell-fit-text"), null);
31891
- insert(_el$52, () => checkbox(t("table.hideMark"), cellHideMark, setCellHideMark, "editor-table-properties-cell-hide-mark"), null);
31892
- insert(_el$54, () => t("table.cellMargins"));
31893
- insert(_el$55, () => numericInput(t("paragraph.borderSideTop"), marginTop, setMarginTop, "editor-table-properties-margin-top"), null);
31894
- insert(_el$55, () => numericInput(t("paragraph.borderSideRight"), marginRight, setMarginRight, "editor-table-properties-margin-right"), null);
31895
- insert(_el$55, () => numericInput(t("paragraph.borderSideBottom"), marginBottom, setMarginBottom, "editor-table-properties-margin-bottom"), null);
31896
- insert(_el$55, () => numericInput(t("paragraph.borderSideLeft"), marginLeft, setMarginLeft, "editor-table-properties-margin-left"), null);
31897
- insert(_el$57, () => t("paragraph.bordersSection"));
31898
- insert(_el$60, () => t("paragraph.borderStyleLabel"));
31899
- _el$61.addEventListener("change", (e) => {
32240
+ var _el$60 = _tmpl$11(), _el$61 = _el$60.firstChild, _el$62 = _el$61.firstChild, _el$63 = _el$62.firstChild, _el$64 = _el$63.nextSibling, _el$65 = _el$64.firstChild, _el$66 = _el$65.nextSibling, _el$67 = _el$66.nextSibling, _el$68 = _el$67.nextSibling, _el$69 = _el$62.nextSibling, _el$70 = _el$69.firstChild, _el$71 = _el$70.nextSibling, _el$72 = _el$71.firstChild, _el$73 = _el$61.nextSibling, _el$74 = _el$73.firstChild, _el$75 = _el$74.nextSibling, _el$76 = _el$73.nextSibling, _el$77 = _el$76.firstChild, _el$78 = _el$77.nextSibling, _el$79 = _el$76.nextSibling, _el$80 = _el$79.firstChild, _el$81 = _el$80.nextSibling, _el$82 = _el$81.firstChild, _el$83 = _el$82.firstChild, _el$84 = _el$83.nextSibling, _el$85 = _el$84.firstChild, _el$86 = _el$85.nextSibling, _el$87 = _el$86.nextSibling, _el$88 = _el$87.nextSibling, _el$89 = _el$82.nextSibling, _el$90 = _el$89.firstChild, _el$91 = _el$90.nextSibling, _el$92 = _el$89.nextSibling, _el$93 = _el$92.firstChild, _el$94 = _el$93.nextSibling, _el$95 = _el$81.nextSibling, _el$96 = _el$95.nextSibling;
32241
+ insert(_el$61, () => numericInput(t("table.cellWidth"), cellWidth, setCellWidth, "editor-table-properties-cell-width"), _el$62);
32242
+ insert(_el$63, () => t("table.verticalAlignment"));
32243
+ _el$64.addEventListener("change", (e) => setCellVerticalAlign(e.currentTarget.value));
32244
+ insert(_el$65, () => t("table.inherit"));
32245
+ insert(_el$66, () => t("table.valignTop"));
32246
+ insert(_el$67, () => t("table.valignMiddle"));
32247
+ insert(_el$68, () => t("table.valignBottom"));
32248
+ insert(_el$70, () => t("table.textDirection"));
32249
+ _el$71.addEventListener("change", (e) => setCellTextDirection(e.currentTarget.value));
32250
+ insert(_el$72, () => t("table.inherit"));
32251
+ insert(_el$74, () => t("table.options"));
32252
+ insert(_el$75, () => checkbox(t("table.noWrap"), cellNoWrap, setCellNoWrap, "editor-table-properties-cell-nowrap"), null);
32253
+ insert(_el$75, () => checkbox(t("table.fitText"), cellFitText, setCellFitText, "editor-table-properties-cell-fit-text"), null);
32254
+ insert(_el$75, () => checkbox(t("table.hideMark"), cellHideMark, setCellHideMark, "editor-table-properties-cell-hide-mark"), null);
32255
+ insert(_el$77, () => t("table.cellMargins"));
32256
+ insert(_el$78, () => numericInput(t("paragraph.borderSideTop"), marginTop, setMarginTop, "editor-table-properties-margin-top"), null);
32257
+ insert(_el$78, () => numericInput(t("paragraph.borderSideRight"), marginRight, setMarginRight, "editor-table-properties-margin-right"), null);
32258
+ insert(_el$78, () => numericInput(t("paragraph.borderSideBottom"), marginBottom, setMarginBottom, "editor-table-properties-margin-bottom"), null);
32259
+ insert(_el$78, () => numericInput(t("paragraph.borderSideLeft"), marginLeft, setMarginLeft, "editor-table-properties-margin-left"), null);
32260
+ insert(_el$80, () => t("paragraph.bordersSection"));
32261
+ insert(_el$83, () => t("paragraph.borderStyleLabel"));
32262
+ _el$84.addEventListener("change", (e) => {
31900
32263
  const next = e.currentTarget.value;
31901
32264
  setBorderStyle(next);
31902
32265
  if (next === "none") {
@@ -31904,6 +32267,10 @@ function TablePropertiesDialog(props) {
31904
32267
  setBorderRight(false);
31905
32268
  setBorderBottom(false);
31906
32269
  setBorderLeft(false);
32270
+ setBorderStart(false);
32271
+ setBorderEnd(false);
32272
+ setBorderTlBr(false);
32273
+ setBorderTrBl(false);
31907
32274
  } else if (!borderTop() && !borderRight() && !borderBottom() && !borderLeft()) {
31908
32275
  setBorderTop(true);
31909
32276
  setBorderRight(true);
@@ -31911,48 +32278,52 @@ function TablePropertiesDialog(props) {
31911
32278
  setBorderLeft(true);
31912
32279
  }
31913
32280
  });
31914
- insert(_el$62, () => t("paragraph.borderNone"));
31915
- insert(_el$63, () => t("paragraph.borderSolid"));
31916
- insert(_el$64, () => t("paragraph.borderDashed"));
31917
- insert(_el$65, () => t("paragraph.borderDotted"));
31918
- insert(_el$58, () => numericInput(t("paragraph.borderWidthLabel"), borderWidth, setBorderWidth, "editor-table-properties-border-width", borderStyle() === "none"), _el$66);
31919
- insert(_el$67, () => t("paragraph.borderColorLabel"));
31920
- _el$68.$$input = (e) => setBorderColor(e.currentTarget.value);
31921
- insert(_el$70, () => t("paragraph.shadingLabel"));
31922
- _el$71.$$input = (e) => setShading(e.currentTarget.value);
31923
- insert(_el$72, () => checkbox(t("paragraph.borderSideTop"), borderTop, setBorderTop, "editor-table-properties-border-top", borderStyle() === "none"), null);
31924
- insert(_el$72, () => checkbox(t("paragraph.borderSideRight"), borderRight, setBorderRight, "editor-table-properties-border-right", borderStyle() === "none"), null);
31925
- insert(_el$72, () => checkbox(t("paragraph.borderSideBottom"), borderBottom, setBorderBottom, "editor-table-properties-border-bottom", borderStyle() === "none"), null);
31926
- insert(_el$72, () => checkbox(t("paragraph.borderSideLeft"), borderLeft, setBorderLeft, "editor-table-properties-border-left", borderStyle() === "none"), null);
32281
+ insert(_el$85, () => t("paragraph.borderNone"));
32282
+ insert(_el$86, () => t("paragraph.borderSolid"));
32283
+ insert(_el$87, () => t("paragraph.borderDashed"));
32284
+ insert(_el$88, () => t("paragraph.borderDotted"));
32285
+ insert(_el$81, () => numericInput(t("paragraph.borderWidthLabel"), borderWidth, setBorderWidth, "editor-table-properties-border-width", borderStyle() === "none"), _el$89);
32286
+ insert(_el$90, () => t("paragraph.borderColorLabel"));
32287
+ _el$91.$$input = (e) => setBorderColor(e.currentTarget.value);
32288
+ insert(_el$93, () => t("paragraph.shadingLabel"));
32289
+ _el$94.$$input = (e) => setShading(e.currentTarget.value);
32290
+ insert(_el$95, () => checkbox(t("paragraph.borderSideTop"), borderTop, setBorderTop, "editor-table-properties-border-top", borderStyle() === "none"), null);
32291
+ insert(_el$95, () => checkbox(t("paragraph.borderSideRight"), borderRight, setBorderRight, "editor-table-properties-border-right", borderStyle() === "none"), null);
32292
+ insert(_el$95, () => checkbox(t("paragraph.borderSideBottom"), borderBottom, setBorderBottom, "editor-table-properties-border-bottom", borderStyle() === "none"), null);
32293
+ insert(_el$95, () => checkbox(t("paragraph.borderSideLeft"), borderLeft, setBorderLeft, "editor-table-properties-border-left", borderStyle() === "none"), null);
32294
+ insert(_el$95, () => checkbox(t("table.borderStart"), borderStart, setBorderStart, "editor-table-properties-border-start", borderStyle() === "none"), null);
32295
+ insert(_el$95, () => checkbox(t("table.borderEnd"), borderEnd, setBorderEnd, "editor-table-properties-border-end", borderStyle() === "none"), null);
32296
+ insert(_el$95, () => checkbox(t("table.borderTlBr"), borderTlBr, setBorderTlBr, "editor-table-properties-border-tlbr", borderStyle() === "none"), null);
32297
+ insert(_el$95, () => checkbox(t("table.borderTrBl"), borderTrBl, setBorderTrBl, "editor-table-properties-border-trbl", borderStyle() === "none"), null);
31927
32298
  createRenderEffect((_p$) => {
31928
32299
  var _v$ = borderStyle() === "none", _v$2 = borderPreview();
31929
- _v$ !== _p$.e && (_el$68.disabled = _p$.e = _v$);
31930
- _p$.t = style(_el$73, _v$2, _p$.t);
32300
+ _v$ !== _p$.e && (_el$91.disabled = _p$.e = _v$);
32301
+ _p$.t = style(_el$96, _v$2, _p$.t);
31931
32302
  return _p$;
31932
32303
  }, {
31933
32304
  e: void 0,
31934
32305
  t: void 0
31935
32306
  });
31936
- createRenderEffect(() => _el$41.value = cellVerticalAlign());
31937
- createRenderEffect(() => _el$48.value = cellTextDirection());
31938
- createRenderEffect(() => _el$61.value = borderStyle());
31939
- createRenderEffect(() => _el$68.value = borderColor() || DEFAULT_BORDER_COLOR);
31940
- createRenderEffect(() => _el$71.value = shading() || "#ffffff");
31941
- return _el$37;
32307
+ createRenderEffect(() => _el$64.value = cellVerticalAlign());
32308
+ createRenderEffect(() => _el$71.value = cellTextDirection());
32309
+ createRenderEffect(() => _el$84.value = borderStyle());
32310
+ createRenderEffect(() => _el$91.value = borderColor() || DEFAULT_BORDER_COLOR);
32311
+ createRenderEffect(() => _el$94.value = shading() || "#ffffff");
32312
+ return _el$60;
31942
32313
  })()
31943
32314
  }, {
31944
32315
  id: "altText",
31945
32316
  label: t("table.tabAltText"),
31946
32317
  testId: "editor-table-properties-tab-alt-text",
31947
32318
  panel: (() => {
31948
- var _el$74 = _tmpl$0(), _el$75 = _el$74.firstChild, _el$76 = _el$75.firstChild, _el$77 = _el$76.nextSibling, _el$78 = _el$75.nextSibling, _el$79 = _el$78.firstChild, _el$80 = _el$79.nextSibling;
31949
- insert(_el$76, () => t("table.altTitle"));
31950
- _el$77.$$input = (e) => setAltTitle(e.currentTarget.value);
31951
- insert(_el$79, () => t("table.altDescription"));
31952
- _el$80.$$input = (e) => setAltDescription(e.currentTarget.value);
31953
- createRenderEffect(() => _el$77.value = altTitle());
31954
- createRenderEffect(() => _el$80.value = altDescription());
31955
- return _el$74;
32319
+ var _el$97 = _tmpl$12(), _el$98 = _el$97.firstChild, _el$99 = _el$98.firstChild, _el$100 = _el$99.nextSibling, _el$101 = _el$98.nextSibling, _el$102 = _el$101.firstChild, _el$103 = _el$102.nextSibling;
32320
+ insert(_el$99, () => t("table.altTitle"));
32321
+ _el$100.$$input = (e) => setAltTitle(e.currentTarget.value);
32322
+ insert(_el$102, () => t("table.altDescription"));
32323
+ _el$103.$$input = (e) => setAltDescription(e.currentTarget.value);
32324
+ createRenderEffect(() => _el$100.value = altTitle());
32325
+ createRenderEffect(() => _el$103.value = altDescription());
32326
+ return _el$97;
31956
32327
  })()
31957
32328
  }];
31958
32329
  }
@@ -32810,6 +33181,35 @@ function serializeParagraphBorders(style2) {
32810
33181
  const DEFAULT_TABLE_BORDER_COLOR = "6F6F6F";
32811
33182
  const DEFAULT_TABLE_BORDER_WIDTH_PT = 0.75;
32812
33183
  const DEFAULT_CELL_PADDING_LEFT_RIGHT_PT = 5.4;
33184
+ function serializeRevisionAttrs(revision) {
33185
+ const numericId = /^\d+$/.test(revision.id) ? revision.id : String(
33186
+ Array.from(revision.id).reduce(
33187
+ (hash, character) => hash * 31 + character.charCodeAt(0) >>> 0,
33188
+ 0
33189
+ )
33190
+ );
33191
+ const date = Number.isFinite(revision.date) ? new Date(revision.date).toISOString() : (/* @__PURE__ */ new Date(0)).toISOString();
33192
+ return `w:id="${numericId}" w:author="${escapeXml(revision.author)}" w:date="${date}"`;
33193
+ }
33194
+ function serializeConditionalFlags(flags) {
33195
+ if (!flags || Object.keys(flags).length === 0) return "";
33196
+ const attributes = [
33197
+ ["firstRow", "firstRow"],
33198
+ ["lastRow", "lastRow"],
33199
+ ["firstColumn", "firstCol"],
33200
+ ["lastColumn", "lastCol"],
33201
+ ["oddVBand", "band1Vert"],
33202
+ ["evenVBand", "band2Vert"],
33203
+ ["oddHBand", "band1Horz"],
33204
+ ["evenHBand", "band2Horz"],
33205
+ ["firstRowFirstColumn", "nwCell"],
33206
+ ["firstRowLastColumn", "neCell"],
33207
+ ["lastRowFirstColumn", "swCell"],
33208
+ ["lastRowLastColumn", "seCell"]
33209
+ ];
33210
+ const xml = attributes.filter(([, key]) => flags[key] !== void 0).map(([name, key]) => `w:${name}="${flags[key] ? "1" : "0"}"`).join(" ");
33211
+ return xml ? `<w:cnfStyle ${xml}/>` : "";
33212
+ }
32813
33213
  function serializeOnOffElement(tag, value) {
32814
33214
  if (value === void 0) {
32815
33215
  return "";
@@ -32900,7 +33300,9 @@ function serializeTableDefaultCellMargins(margins) {
32900
33300
  const parts = [];
32901
33301
  const edge = (name, value) => {
32902
33302
  if (value !== void 0 && Number.isFinite(value)) {
32903
- parts.push(`<w:${name} w:w="${pointsToTwips(value) ?? 0}" w:type="dxa"/>`);
33303
+ parts.push(
33304
+ `<w:${name} w:w="${pointsToTwips(value) ?? 0}" w:type="dxa"/>`
33305
+ );
32904
33306
  }
32905
33307
  };
32906
33308
  edge("top", margins.top);
@@ -32912,9 +33314,11 @@ function serializeTableDefaultCellMargins(margins) {
32912
33314
  return parts.length > 0 ? `<w:tblCellMar>${parts.join("")}</w:tblCellMar>` : "";
32913
33315
  }
32914
33316
  function serializeTableCellProperties(cell, fallbackWidthPt) {
32915
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
33317
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
32916
33318
  const colSpan = Math.max(1, Math.floor(cell.colSpan ?? 1));
32917
33319
  const parts = [];
33320
+ const conditional = serializeConditionalFlags(cell.conditionalStyle);
33321
+ if (conditional) parts.push(conditional);
32918
33322
  const widthXml = serializeCellWidth(((_a = cell.style) == null ? void 0 : _a.width) ?? fallbackWidthPt);
32919
33323
  if (widthXml) {
32920
33324
  parts.push(widthXml);
@@ -32956,11 +33360,33 @@ function serializeTableCellProperties(cell, fallbackWidthPt) {
32956
33360
  if (hideMark) {
32957
33361
  parts.push(hideMark);
32958
33362
  }
32959
- if ((_j = (_i = cell.style) == null ? void 0 : _i.revisionXml) == null ? void 0 : _j.length) {
32960
- parts.push(...cell.style.revisionXml);
33363
+ if ((_i = cell.style) == null ? void 0 : _i.propertyRevision) {
33364
+ const revision = cell.style.propertyRevision;
33365
+ const previous = serializeTableCellProperties({
33366
+ ...cell,
33367
+ style: revision.previous
33368
+ });
33369
+ parts.push(
33370
+ `<w:tcPrChange ${serializeRevisionAttrs(revision)}>${previous}</w:tcPrChange>`
33371
+ );
33372
+ }
33373
+ if ((_j = cell.style) == null ? void 0 : _j.revision) {
33374
+ const revision = cell.style.revision;
33375
+ const element = revision.type === "insert" ? "cellIns" : revision.type === "delete" ? "cellDel" : "cellMerge";
33376
+ const mergeAttrs = revision.type === "merge" ? `${((_k = revision.previous) == null ? void 0 : _k.vMerge) ? ` w:vMergeOrig="${revision.previous.vMerge === "restart" ? "rest" : "cont"}"` : ""}${cell.vMerge ? ` w:vMerge="${cell.vMerge === "restart" ? "rest" : "cont"}"` : ""}` : "";
33377
+ parts.push(
33378
+ `<w:${element} ${serializeRevisionAttrs(revision)}${mergeAttrs}/>`
33379
+ );
32961
33380
  }
32962
33381
  return parts.length > 0 ? `<w:tcPr>${parts.join("")}</w:tcPr>` : "";
32963
33382
  }
33383
+ function serializeTableCellStyleXml(style2) {
33384
+ return serializeTableCellProperties({
33385
+ id: "table-style-cell",
33386
+ blocks: [],
33387
+ style: style2
33388
+ });
33389
+ }
32964
33390
  function serializeGridSkip(tag, value) {
32965
33391
  if (value === void 0 || !Number.isFinite(value)) {
32966
33392
  return "";
@@ -32983,10 +33409,12 @@ function serializeTableRowHeightFromStyle(heightValue, heightRule) {
32983
33409
  }
32984
33410
  function serializeTableRowHeight(row) {
32985
33411
  var _a, _b;
32986
- return serializeTableRowHeightFromStyle((_a = row.style) == null ? void 0 : _a.height, (_b = row.style) == null ? void 0 : _b.heightRule);
33412
+ return serializeTableRowHeightFromStyle(
33413
+ (_a = row.style) == null ? void 0 : _a.height,
33414
+ (_b = row.style) == null ? void 0 : _b.heightRule
33415
+ );
32987
33416
  }
32988
33417
  function serializeTableRowStyleXml(style2) {
32989
- var _a;
32990
33418
  if (!style2) return "";
32991
33419
  const parts = [];
32992
33420
  const gridBefore = serializeGridSkip("gridBefore", style2.gridBefore);
@@ -32997,49 +33425,104 @@ function serializeTableRowStyleXml(style2) {
32997
33425
  if (widthBefore) parts.push(widthBefore);
32998
33426
  const widthAfter = serializeDocxWidthElement("wAfter", style2.widthAfter);
32999
33427
  if (widthAfter) parts.push(widthAfter);
33000
- const cellSpacingXml = serializeDocxWidthElement("tblCellSpacing", style2.cellSpacing);
33428
+ const cellSpacingXml = serializeDocxWidthElement(
33429
+ "tblCellSpacing",
33430
+ style2.cellSpacing
33431
+ );
33001
33432
  if (cellSpacingXml) parts.push(cellSpacingXml);
33002
- const heightXml = serializeTableRowHeightFromStyle(style2.height, style2.heightRule);
33433
+ const heightXml = serializeTableRowHeightFromStyle(
33434
+ style2.height,
33435
+ style2.heightRule
33436
+ );
33003
33437
  if (heightXml) parts.push(heightXml);
33004
33438
  const cantSplit = serializeOnOffElement("cantSplit", style2.cantSplit);
33005
33439
  if (cantSplit) parts.push(cantSplit);
33006
33440
  const hidden = serializeOnOffElement("hidden", style2.hidden);
33007
33441
  if (hidden) parts.push(hidden);
33008
- if ((_a = style2.revisionXml) == null ? void 0 : _a.length) parts.push(...style2.revisionXml);
33442
+ const header = serializeOnOffElement("tblHeader", style2.isHeader);
33443
+ if (header) parts.push(header);
33009
33444
  return parts.length > 0 ? `<w:trPr>${parts.join("")}</w:trPr>` : "";
33010
33445
  }
33011
33446
  function serializeTableRowProperties(row) {
33012
- var _a, _b, _c, _d, _e, _f, _g, _h, _i;
33447
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
33013
33448
  const parts = [];
33449
+ const conditional = serializeConditionalFlags(row.conditionalStyle);
33450
+ if (conditional) parts.push(conditional);
33014
33451
  const gridBefore = serializeGridSkip("gridBefore", (_a = row.style) == null ? void 0 : _a.gridBefore);
33015
33452
  if (gridBefore) parts.push(gridBefore);
33016
33453
  const gridAfter = serializeGridSkip("gridAfter", (_b = row.style) == null ? void 0 : _b.gridAfter);
33017
33454
  if (gridAfter) parts.push(gridAfter);
33018
- const widthBefore = serializeDocxWidthElement("wBefore", (_c = row.style) == null ? void 0 : _c.widthBefore);
33455
+ const widthBefore = serializeDocxWidthElement(
33456
+ "wBefore",
33457
+ (_c = row.style) == null ? void 0 : _c.widthBefore
33458
+ );
33019
33459
  if (widthBefore) parts.push(widthBefore);
33020
33460
  const widthAfter = serializeDocxWidthElement("wAfter", (_d = row.style) == null ? void 0 : _d.widthAfter);
33021
33461
  if (widthAfter) parts.push(widthAfter);
33022
- const cellSpacingXml = serializeDocxWidthElement("tblCellSpacing", (_e = row.style) == null ? void 0 : _e.cellSpacing);
33462
+ const cellSpacingXml = serializeDocxWidthElement(
33463
+ "tblCellSpacing",
33464
+ (_e = row.style) == null ? void 0 : _e.cellSpacing
33465
+ );
33023
33466
  if (cellSpacingXml) parts.push(cellSpacingXml);
33024
33467
  const height = serializeTableRowHeight(row);
33025
33468
  if (height) parts.push(height);
33026
33469
  const cantSplit = serializeOnOffElement("cantSplit", (_f = row.style) == null ? void 0 : _f.cantSplit);
33027
33470
  if (cantSplit) parts.push(cantSplit);
33028
- if (row.isHeader) parts.push("<w:tblHeader/>");
33029
- const hidden = serializeOnOffElement("hidden", (_g = row.style) == null ? void 0 : _g.hidden);
33471
+ if (((_g = row.style) == null ? void 0 : _g.isHeader) ?? row.isHeader) parts.push("<w:tblHeader/>");
33472
+ const hidden = serializeOnOffElement("hidden", (_h = row.style) == null ? void 0 : _h.hidden);
33030
33473
  if (hidden) parts.push(hidden);
33031
- if ((_i = (_h = row.style) == null ? void 0 : _h.revisionXml) == null ? void 0 : _i.length) parts.push(...row.style.revisionXml);
33474
+ if ((_i = row.style) == null ? void 0 : _i.propertyRevision) {
33475
+ const revision = row.style.propertyRevision;
33476
+ parts.push(
33477
+ `<w:trPrChange ${serializeRevisionAttrs(revision)}>${serializeTableRowStyleXml(revision.previous)}</w:trPrChange>`
33478
+ );
33479
+ }
33480
+ if (((_j = row.style) == null ? void 0 : _j.revision) && row.style.revision.type !== "merge") {
33481
+ const revision = row.style.revision;
33482
+ const element = revision.type === "insert" ? "ins" : "del";
33483
+ parts.push(`<w:${element} ${serializeRevisionAttrs(revision)}/>`);
33484
+ }
33032
33485
  return parts.length > 0 ? `<w:trPr>${parts.join("")}</w:trPr>` : "";
33033
33486
  }
33034
33487
  function serializeFloatingTableProperties(floating) {
33035
33488
  if (!floating || Object.keys(floating).length === 0) {
33036
33489
  return "";
33037
33490
  }
33038
- const attrs = Object.entries(floating).map(([key, value]) => `w:${key}="${escapeXml(value)}"`).join(" ");
33491
+ const twips = (value) => {
33492
+ const converted = pointsToTwips(value);
33493
+ return converted === null ? void 0 : String(converted);
33494
+ };
33495
+ const values = {
33496
+ horzAnchor: floating.horizontalAnchor,
33497
+ vertAnchor: floating.verticalAnchor,
33498
+ tblpX: twips(floating.x),
33499
+ tblpY: twips(floating.y),
33500
+ tblpXSpec: floating.xAlign,
33501
+ tblpYSpec: floating.yAlign,
33502
+ topFromText: twips(floating.distanceTop),
33503
+ rightFromText: twips(floating.distanceRight),
33504
+ bottomFromText: twips(floating.distanceBottom),
33505
+ leftFromText: twips(floating.distanceLeft)
33506
+ };
33507
+ const attrs = Object.entries(values).filter((entry) => entry[1] !== void 0).map(([key, value]) => `w:${key}="${escapeXml(value)}"`).join(" ");
33039
33508
  return `<w:tblpPr ${attrs}/>`;
33040
33509
  }
33510
+ function serializeTableBorders(style2) {
33511
+ const borders = style2 == null ? void 0 : style2.borders;
33512
+ if (!borders) return "";
33513
+ const edges = [
33514
+ ["top", borders.borderTop],
33515
+ ["left", borders.borderLeft],
33516
+ ["bottom", borders.borderBottom],
33517
+ ["right", borders.borderRight],
33518
+ ["insideH", borders.borderInsideH],
33519
+ ["insideV", borders.borderInsideV]
33520
+ ];
33521
+ const xml = edges.filter((entry) => !!entry[1]).map(([name, border]) => `<w:${name} ${serializeDocxBorderAttrs(border)}`).join("");
33522
+ return xml ? `<w:tblBorders>${xml}</w:tblBorders>` : "";
33523
+ }
33041
33524
  function serializeTableProperties(table) {
33042
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o;
33525
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n;
33043
33526
  const parts = [];
33044
33527
  if ((_a = table.style) == null ? void 0 : _a.styleId) {
33045
33528
  parts.push(`<w:tblStyle w:val="${escapeXml(table.style.styleId)}"/>`);
@@ -33080,6 +33563,8 @@ function serializeTableProperties(table) {
33080
33563
  if (defaultMarginsXml) {
33081
33564
  parts.push(defaultMarginsXml);
33082
33565
  }
33566
+ const tableBorders = serializeTableBorders(table.style);
33567
+ if (tableBorders) parts.push(tableBorders);
33083
33568
  const indentXml = serializeDocxWidthElement(
33084
33569
  "tblInd",
33085
33570
  (_j = table.style) == null ? void 0 : _j.indentLeft
@@ -33088,15 +33573,25 @@ function serializeTableProperties(table) {
33088
33573
  parts.push(indentXml);
33089
33574
  }
33090
33575
  parts.push(`<w:tblLayout w:type="${((_k = table.style) == null ? void 0 : _k.layout) ?? "fixed"}"/>`);
33091
- const bidiVisual = serializeOnOffElement("bidiVisual", (_l = table.style) == null ? void 0 : _l.bidiVisual);
33576
+ const bidiVisual = serializeOnOffElement(
33577
+ "bidiVisual",
33578
+ (_l = table.style) == null ? void 0 : _l.bidiVisual
33579
+ );
33092
33580
  if (bidiVisual) {
33093
33581
  parts.push(bidiVisual);
33094
33582
  }
33095
33583
  if ((_m = table.style) == null ? void 0 : _m.tblOverlap) {
33096
33584
  parts.push(`<w:tblOverlap w:val="${escapeXml(table.style.tblOverlap)}"/>`);
33097
33585
  }
33098
- if ((_o = (_n = table.style) == null ? void 0 : _n.revisionXml) == null ? void 0 : _o.length) {
33099
- parts.push(...table.style.revisionXml);
33586
+ if ((_n = table.style) == null ? void 0 : _n.revision) {
33587
+ const revision = table.style.revision;
33588
+ const previous = serializeTableProperties({
33589
+ ...table,
33590
+ style: revision.previous
33591
+ });
33592
+ parts.push(
33593
+ `<w:tblPrChange ${serializeRevisionAttrs(revision)}>${previous}</w:tblPrChange>`
33594
+ );
33100
33595
  }
33101
33596
  return `<w:tblPr>${parts.join("")}</w:tblPr>`;
33102
33597
  }
@@ -33127,7 +33622,7 @@ function serializeTableXml(table, serializeParagraphXml2) {
33127
33622
  }).join("");
33128
33623
  return `<w:tr>${row.tblPrExXml ?? ""}${serializeTableRowProperties(row)}${cellsXml}</w:tr>`;
33129
33624
  }).join("");
33130
- const gridXml = table.gridCols ? `<w:tblGrid>${table.gridCols.map((width) => `<w:gridCol w:w="${pointsToTwips(width) ?? 0}"/>`).join("")}${table.tblGridChangeXml ?? ""}</w:tblGrid>` : "";
33625
+ const gridXml = table.gridCols ? `<w:tblGrid>${table.gridCols.map((width) => `<w:gridCol w:w="${pointsToTwips(width) ?? 0}"/>`).join("")}${table.gridRevision ? `<w:tblGridChange ${serializeRevisionAttrs(table.gridRevision)}><w:tblGrid>${table.gridRevision.previous.map((width) => `<w:gridCol w:w="${pointsToTwips(width) ?? 0}"/>`).join("")}</w:tblGrid></w:tblGridChange>` : ""}</w:tblGrid>` : "";
33131
33626
  return `<w:tbl>${serializeTableProperties(table)}${gridXml}${rowsXml}</w:tbl>`;
33132
33627
  }
33133
33628
  function materializeParagraphStyle(paragraph, styles) {
@@ -34282,6 +34777,9 @@ const CONDITIONAL_TYPE_ORDER = [
34282
34777
  "seCell"
34283
34778
  ];
34284
34779
  function serializeConditionalTcPr(cond) {
34780
+ if (cond.cellStyle) {
34781
+ return serializeTableCellStyleXml(cond.cellStyle);
34782
+ }
34285
34783
  const parts = [];
34286
34784
  if (cond.borders) {
34287
34785
  const b = cond.borders;
@@ -34291,7 +34789,9 @@ function serializeConditionalTcPr(cond) {
34291
34789
  ["bottom", b.borderBottom],
34292
34790
  ["right", b.borderRight]
34293
34791
  ];
34294
- const borderXml = edges.filter((entry) => entry[1] != null).map(([name, border]) => `<w:${name} ${serializeDocxBorderAttrs(border)}`).join("");
34792
+ const borderXml = edges.filter(
34793
+ (entry) => entry[1] != null
34794
+ ).map(([name, border]) => `<w:${name} ${serializeDocxBorderAttrs(border)}`).join("");
34295
34795
  if (borderXml) {
34296
34796
  parts.push(`<w:tcBorders>${borderXml}</w:tcBorders>`);
34297
34797
  }
@@ -34303,12 +34803,63 @@ function serializeConditionalTcPr(cond) {
34303
34803
  }
34304
34804
  return parts.length > 0 ? `<w:tcPr>${parts.join("")}</w:tcPr>` : "";
34305
34805
  }
34806
+ function serializeWidthElement(name, value) {
34807
+ if (typeof value === "number") {
34808
+ return `<w:${name} w:w="${pointsToTwips(value) ?? 0}" w:type="dxa"/>`;
34809
+ }
34810
+ if (typeof value === "string" && value.endsWith("%")) {
34811
+ const percent = Number.parseFloat(value);
34812
+ return Number.isFinite(percent) ? `<w:${name} w:w="${Math.round(percent * 50)}" w:type="pct"/>` : "";
34813
+ }
34814
+ return value === "auto" ? `<w:${name} w:w="0" w:type="auto"/>` : "";
34815
+ }
34816
+ function serializeTableStyleProperties(style2) {
34817
+ if (!style2) return "";
34818
+ const parts = [];
34819
+ if (style2.rowBandSize !== void 0)
34820
+ parts.push(`<w:tblStyleRowBandSize w:val="${style2.rowBandSize}"/>`);
34821
+ if (style2.colBandSize !== void 0)
34822
+ parts.push(`<w:tblStyleColBandSize w:val="${style2.colBandSize}"/>`);
34823
+ const width = serializeWidthElement("tblW", style2.width);
34824
+ if (width) parts.push(width);
34825
+ const indent = serializeWidthElement("tblInd", style2.indentLeft);
34826
+ if (indent) parts.push(indent);
34827
+ const spacing = serializeWidthElement("tblCellSpacing", style2.cellSpacing);
34828
+ if (spacing) parts.push(spacing);
34829
+ if (style2.align) parts.push(`<w:jc w:val="${style2.align}"/>`);
34830
+ if (style2.layout) parts.push(`<w:tblLayout w:type="${style2.layout}"/>`);
34831
+ if (style2.bidiVisual !== void 0)
34832
+ parts.push(`<w:bidiVisual w:val="${style2.bidiVisual ? "1" : "0"}"/>`);
34833
+ if (style2.defaultCellMargins) {
34834
+ const margins = Object.entries(style2.defaultCellMargins).map(
34835
+ ([name, value]) => `<w:${name} w:w="${pointsToTwips(value) ?? 0}" w:type="dxa"/>`
34836
+ ).join("");
34837
+ if (margins) parts.push(`<w:tblCellMar>${margins}</w:tblCellMar>`);
34838
+ }
34839
+ if (style2.borders) {
34840
+ const edges = [
34841
+ ["top", style2.borders.borderTop],
34842
+ ["left", style2.borders.borderLeft],
34843
+ ["bottom", style2.borders.borderBottom],
34844
+ ["right", style2.borders.borderRight],
34845
+ ["insideH", style2.borders.borderInsideH],
34846
+ ["insideV", style2.borders.borderInsideV]
34847
+ ];
34848
+ const borders = edges.filter(
34849
+ (entry) => !!entry[1]
34850
+ ).map(([name, border]) => `<w:${name} ${serializeDocxBorderAttrs(border)}`).join("");
34851
+ if (borders) parts.push(`<w:tblBorders>${borders}</w:tblBorders>`);
34852
+ }
34853
+ return parts.length > 0 ? `<w:tblPr>${parts.join("")}</w:tblPr>` : "";
34854
+ }
34306
34855
  function serializeConditionalBlock(type, cond) {
34307
34856
  const parts = [];
34308
34857
  const pPr = cond.paragraphStyle ? serializeParagraphStyleXml(cond.paragraphStyle) : "";
34309
34858
  if (pPr) parts.push(pPr);
34310
34859
  const rPr = cond.textStyle ? serializeRunProperties(cond.textStyle) : "";
34311
34860
  if (rPr) parts.push(rPr);
34861
+ const tblPr = serializeTableStyleProperties(cond.tableStyle);
34862
+ if (tblPr) parts.push(tblPr);
34312
34863
  const trPr = cond.rowStyle ? serializeTableRowStyleXml(cond.rowStyle) : "";
34313
34864
  if (trPr) parts.push(trPr);
34314
34865
  const tcPr = serializeConditionalTcPr(cond);
@@ -34325,6 +34876,22 @@ function serializeNamedStyle(style2) {
34325
34876
  if (style2.nextStyle) {
34326
34877
  parts.push(`<w:next w:val="${escapeXml(style2.nextStyle)}"/>`);
34327
34878
  }
34879
+ if (style2.uiPriority !== void 0) {
34880
+ parts.push(
34881
+ `<w:uiPriority w:val="${Math.max(0, Math.floor(style2.uiPriority))}"/>`
34882
+ );
34883
+ }
34884
+ if (style2.qFormat !== void 0) {
34885
+ parts.push(`<w:qFormat w:val="${style2.qFormat ? "1" : "0"}"/>`);
34886
+ }
34887
+ if (style2.semiHidden !== void 0) {
34888
+ parts.push(`<w:semiHidden w:val="${style2.semiHidden ? "1" : "0"}"/>`);
34889
+ }
34890
+ if (style2.unhideWhenUsed !== void 0) {
34891
+ parts.push(
34892
+ `<w:unhideWhenUsed w:val="${style2.unhideWhenUsed ? "1" : "0"}"/>`
34893
+ );
34894
+ }
34328
34895
  if (style2.type === "paragraph" || style2.type === "table") {
34329
34896
  if (style2.paragraphStyle) {
34330
34897
  const pPr = serializeParagraphStyleXml(style2.paragraphStyle);
@@ -34337,22 +34904,8 @@ function serializeNamedStyle(style2) {
34337
34904
  }
34338
34905
  if (style2.type === "table" && style2.tableStyle) {
34339
34906
  const ts = style2.tableStyle;
34340
- const tblPrParts = [];
34341
- if (ts.rowBandSize !== void 0) {
34342
- tblPrParts.push(`<w:tblStyleRowBandSize w:val="${ts.rowBandSize}"/>`);
34343
- }
34344
- if (ts.colBandSize !== void 0) {
34345
- tblPrParts.push(`<w:tblStyleColBandSize w:val="${ts.colBandSize}"/>`);
34346
- }
34347
- if (ts.indentLeft !== void 0) {
34348
- const val = typeof ts.indentLeft === "number" ? pointsToTwips(ts.indentLeft) : null;
34349
- if (val !== null) {
34350
- tblPrParts.push(`<w:tblInd w:w="${val}" w:type="dxa"/>`);
34351
- }
34352
- }
34353
- if (tblPrParts.length > 0) {
34354
- parts.push(`<w:tblPr>${tblPrParts.join("")}</w:tblPr>`);
34355
- }
34907
+ const tblPr = serializeTableStyleProperties(ts);
34908
+ if (tblPr) parts.push(tblPr);
34356
34909
  if (ts.conditionalFormats) {
34357
34910
  const orderedKeys = [
34358
34911
  ...CONDITIONAL_TYPE_ORDER.filter((k) => k in ts.conditionalFormats),
@@ -34370,7 +34923,7 @@ function serializeNamedStyle(style2) {
34370
34923
  }
34371
34924
  }
34372
34925
  const typeAttr = style2.type === "character" ? "character" : style2.type === "table" ? "table" : "paragraph";
34373
- return `<w:style w:type="${typeAttr}" w:styleId="${escapeXml(style2.id)}">${parts.join("")}</w:style>`;
34926
+ return `<w:style w:type="${typeAttr}" w:styleId="${escapeXml(style2.id)}"${style2.isDefault ? ' w:default="1"' : ""}>${parts.join("")}</w:style>`;
34374
34927
  }
34375
34928
  function buildStylesXml(styles) {
34376
34929
  const styleElements = Object.values(styles).map(serializeNamedStyle).join("");
@@ -35308,6 +35861,10 @@ async function drawFloatingTextBoxesForParagraph(options) {
35308
35861
  if (!(textBox == null ? void 0 : textBox.floating)) {
35309
35862
  continue;
35310
35863
  }
35864
+ const isBehind = Boolean(textBox.floating.behindDoc);
35865
+ if (options.layer && options.layer === "behind" !== isBehind) {
35866
+ continue;
35867
+ }
35311
35868
  const slot = slotByOffset.get(fragment.startOffset);
35312
35869
  const anchorLeft = contentLeft + ((slot == null ? void 0 : slot.left) ?? 0);
35313
35870
  const lineTop = paragraphTop + line.top;
@@ -35497,6 +36054,42 @@ function resolveFragmentBounds(line, fragment, fontSizePx) {
35497
36054
  right: (nextSlot == null ? void 0 : nextSlot.left) ?? last.left + fontSizePx * 0.55
35498
36055
  };
35499
36056
  }
36057
+ async function drawFloatingImagesForParagraph(options) {
36058
+ for (const line of options.lines) {
36059
+ const slots = new Map(line.slots.map((slot) => [slot.offset, slot]));
36060
+ for (const fragment of line.fragments) {
36061
+ const image = fragment.image;
36062
+ if (!(image == null ? void 0 : image.floating)) continue;
36063
+ const isBehind = Boolean(image.floating.behindDoc);
36064
+ if (options.layer === "behind" !== isBehind) continue;
36065
+ const slot = slots.get(fragment.startOffset);
36066
+ const rect = resolveFloatingObjectRect({
36067
+ object: getImageFloatingGeometry(image),
36068
+ pageSettings: options.pageSettings,
36069
+ contentLeft: options.contentLeft,
36070
+ contentTop: options.contentTop,
36071
+ contentWidth: options.contentWidth,
36072
+ paragraphTop: options.paragraphTop,
36073
+ lineTop: options.paragraphTop + line.top,
36074
+ anchorLeft: options.contentLeft + ((slot == null ? void 0 : slot.left) ?? 0)
36075
+ });
36076
+ const resourceName = await registerPdfImageRun(
36077
+ options.writer,
36078
+ options.document,
36079
+ image
36080
+ );
36081
+ if (!resourceName) continue;
36082
+ options.writer.drawImage(options.pageIndex, {
36083
+ resourceName,
36084
+ x: pxToPt$1(rect.x),
36085
+ y: pxToPt$1(rect.y),
36086
+ width: pxToPt$1(rect.width),
36087
+ height: pxToPt$1(rect.height),
36088
+ rotation: image.rotation
36089
+ });
36090
+ }
36091
+ }
36092
+ }
35500
36093
  function drawFragmentHighlight(writer, pageIndex, line, fragment, originX, originY, styles) {
35501
36094
  if (!styles.highlight) {
35502
36095
  return;
@@ -35736,6 +36329,9 @@ async function drawInlineTextBoxFragment(writer, pageIndex, line, fragment, docu
35736
36329
  async function drawFragmentText(writer, pageIndex, paragraph, line, fragment, document2, originX, originY, fontRegistry, drawers) {
35737
36330
  var _a;
35738
36331
  if (fragment.image) {
36332
+ if (fragment.image.floating) {
36333
+ return;
36334
+ }
35739
36335
  const slot = line.slots.find(
35740
36336
  (candidate) => candidate.offset === fragment.startOffset
35741
36337
  ) ?? line.slots.find((candidate) => candidate.offset >= fragment.startOffset);
@@ -36064,6 +36660,28 @@ function drawCellBorders(writer, pageIndex, cell, originX, originY) {
36064
36660
  bottom
36065
36661
  );
36066
36662
  drawCellEdge(writer, pageIndex, cell.borders.left, left, top, left, bottom);
36663
+ if (cell.borders.topLeftToBottomRight) {
36664
+ drawCellEdge(
36665
+ writer,
36666
+ pageIndex,
36667
+ cell.borders.topLeftToBottomRight,
36668
+ left,
36669
+ top,
36670
+ right,
36671
+ bottom
36672
+ );
36673
+ }
36674
+ if (cell.borders.topRightToBottomLeft) {
36675
+ drawCellEdge(
36676
+ writer,
36677
+ pageIndex,
36678
+ cell.borders.topRightToBottomLeft,
36679
+ right,
36680
+ top,
36681
+ left,
36682
+ bottom
36683
+ );
36684
+ }
36067
36685
  }
36068
36686
  async function drawTableBlock(writer, pageIndex, block, document2, originX, originY, contentWidth, fontRegistry, listOrdinals, drawers) {
36069
36687
  if (block.sourceBlock.type !== "table") {
@@ -36096,6 +36714,17 @@ async function drawTableBlock(writer, pageIndex, block, document2, originX, orig
36096
36714
  }
36097
36715
  for (const cell of tableLayout.cells) {
36098
36716
  drawCellBorders(writer, pageIndex, cell, originX, originY);
36717
+ if (cell.revision) {
36718
+ const color = cell.revision.type === "insert" ? "#059669" : cell.revision.type === "delete" ? "#dc2626" : "#d97706";
36719
+ writer.drawRect(pageIndex, {
36720
+ x: pxToPt$1(originX + cell.left + 1),
36721
+ y: pxToPt$1(originY + cell.top + 1),
36722
+ width: pxToPt$1(Math.max(0, cell.width - 2)),
36723
+ height: pxToPt$1(Math.max(0, cell.height - 2)),
36724
+ stroke: color,
36725
+ lineWidth: pxToPt$1(2)
36726
+ });
36727
+ }
36099
36728
  }
36100
36729
  for (const cell of tableLayout.cells) {
36101
36730
  for (const paragraphLayout of cell.paragraphs) {
@@ -36116,6 +36745,7 @@ async function drawTableBlock(writer, pageIndex, block, document2, originX, orig
36116
36745
  }
36117
36746
  const blockDrawers = { drawParagraph, drawTableBlock };
36118
36747
  async function drawBlockList(writer, pageIndex, blocks, document2, originX, originY, contentWidth, fontRegistry, listOrdinals, pageSettings) {
36748
+ var _a;
36119
36749
  if (!blocks || blocks.length === 0) {
36120
36750
  return;
36121
36751
  }
@@ -36143,6 +36773,34 @@ async function drawBlockList(writer, pageIndex, blocks, document2, originX, orig
36143
36773
  boxTop,
36144
36774
  contentWidth
36145
36775
  );
36776
+ if (pageSettings) {
36777
+ await drawFloatingImagesForParagraph({
36778
+ writer,
36779
+ pageIndex,
36780
+ lines: block.layout.lines,
36781
+ document: document2,
36782
+ pageSettings,
36783
+ contentLeft: originX,
36784
+ contentTop,
36785
+ contentWidth,
36786
+ paragraphTop: textTop,
36787
+ layer: "behind"
36788
+ });
36789
+ await drawFloatingTextBoxesForParagraph({
36790
+ writer,
36791
+ document: document2,
36792
+ fontRegistry,
36793
+ pageIndex,
36794
+ lines: block.layout.lines,
36795
+ pageSettings,
36796
+ contentLeft: originX,
36797
+ contentTop,
36798
+ contentWidth,
36799
+ paragraphTop: boxTop,
36800
+ drawers: blockDrawers,
36801
+ layer: "behind"
36802
+ });
36803
+ }
36146
36804
  await drawParagraph(
36147
36805
  writer,
36148
36806
  pageIndex,
@@ -36156,6 +36814,18 @@ async function drawBlockList(writer, pageIndex, blocks, document2, originX, orig
36156
36814
  blockDrawers
36157
36815
  );
36158
36816
  if (pageSettings) {
36817
+ await drawFloatingImagesForParagraph({
36818
+ writer,
36819
+ pageIndex,
36820
+ lines: block.layout.lines,
36821
+ document: document2,
36822
+ pageSettings,
36823
+ contentLeft: originX,
36824
+ contentTop,
36825
+ contentWidth,
36826
+ paragraphTop: textTop,
36827
+ layer: "front"
36828
+ });
36159
36829
  await drawFloatingTextBoxesForParagraph({
36160
36830
  writer,
36161
36831
  document: document2,
@@ -36167,12 +36837,44 @@ async function drawBlockList(writer, pageIndex, blocks, document2, originX, orig
36167
36837
  contentTop,
36168
36838
  contentWidth,
36169
36839
  paragraphTop: boxTop,
36170
- drawers: blockDrawers
36840
+ drawers: blockDrawers,
36841
+ layer: "front"
36171
36842
  });
36172
36843
  }
36173
36844
  break;
36174
36845
  }
36175
36846
  case "table":
36847
+ if (((_a = block.sourceBlock.style) == null ? void 0 : _a.floating) && pageSettings) {
36848
+ const width = resolveCanvasTableWidth(
36849
+ block.sourceBlock,
36850
+ contentWidth
36851
+ );
36852
+ const rect = resolveFloatingTableRect({
36853
+ floating: block.sourceBlock.style.floating,
36854
+ pageSettings,
36855
+ contentLeft: originX,
36856
+ contentTop,
36857
+ contentWidth,
36858
+ anchorTop: cursorY,
36859
+ width,
36860
+ height: block.floatingTableHeight ?? 1,
36861
+ pageIndex
36862
+ });
36863
+ rect.y += block.floatingTableOffsetY ?? 0;
36864
+ await drawTableBlock(
36865
+ writer,
36866
+ pageIndex,
36867
+ { ...block, estimatedHeight: rect.height },
36868
+ document2,
36869
+ rect.x,
36870
+ rect.y,
36871
+ contentWidth,
36872
+ fontRegistry,
36873
+ listOrdinals,
36874
+ blockDrawers
36875
+ );
36876
+ break;
36877
+ }
36176
36878
  await drawTableBlock(
36177
36879
  writer,
36178
36880
  pageIndex,
@@ -40025,6 +40727,15 @@ function createTableSelectionResolvers(deps) {
40025
40727
  };
40026
40728
  }
40027
40729
  function createTableCellSpanOperations(deps) {
40730
+ const cloneCellSnapshot = (cell) => ({
40731
+ ...cell,
40732
+ style: cell.style ? { ...cell.style } : void 0,
40733
+ conditionalStyle: cell.conditionalStyle ? { ...cell.conditionalStyle } : void 0,
40734
+ mergeRevisionState: void 0,
40735
+ blocks: cell.blocks.map(
40736
+ (block) => cloneBlock(block)
40737
+ )
40738
+ });
40028
40739
  const mergeSelectedTableCells = (current) => {
40029
40740
  const range = deps.resolveHorizontalTableCellRange(current);
40030
40741
  if (!range) {
@@ -40046,6 +40757,7 @@ function createTableCellSpanOperations(deps) {
40046
40757
  if (selectedCells.length < 2) {
40047
40758
  return current;
40048
40759
  }
40760
+ const revision = current.trackChangesEnabled ? createTableRevisionMetadata() : void 0;
40049
40761
  const mergedCell = {
40050
40762
  ...selectedCells[0],
40051
40763
  colSpan: selectedCells.reduce(
@@ -40054,7 +40766,27 @@ function createTableCellSpanOperations(deps) {
40054
40766
  ),
40055
40767
  blocks: selectedCells.flatMap(
40056
40768
  (cell) => cell.blocks.map((paragraph) => cloneBlock(paragraph))
40057
- )
40769
+ ),
40770
+ ...revision ? {
40771
+ style: {
40772
+ ...selectedCells[0].style ?? {},
40773
+ revision: {
40774
+ ...revision,
40775
+ type: "merge",
40776
+ previous: {
40777
+ colSpan: selectedCells[0].colSpan,
40778
+ rowSpan: selectedCells[0].rowSpan,
40779
+ vMerge: selectedCells[0].vMerge
40780
+ }
40781
+ }
40782
+ },
40783
+ mergeRevisionState: {
40784
+ revisionId: revision.id,
40785
+ orientation: "horizontal",
40786
+ currentCellCount: 1,
40787
+ previousCells: selectedCells.map(cloneCellSnapshot)
40788
+ }
40789
+ } : {}
40058
40790
  };
40059
40791
  row.cells.splice(range.startCellIndex, selectedCells.length, mergedCell);
40060
40792
  const nextParagraph = mergedCell.blocks[0];
@@ -40102,13 +40834,34 @@ function createTableCellSpanOperations(deps) {
40102
40834
  )) {
40103
40835
  return current;
40104
40836
  }
40837
+ const revision = current.trackChangesEnabled ? createTableRevisionMetadata() : void 0;
40105
40838
  const mergedCell = {
40106
40839
  ...selectedCells[0],
40107
40840
  rowSpan: selectedCells.length,
40108
40841
  vMerge: "restart",
40109
40842
  blocks: selectedCells.flatMap(
40110
40843
  (cell) => cell.blocks.map((paragraph) => cloneBlock(paragraph))
40111
- )
40844
+ ),
40845
+ ...revision ? {
40846
+ style: {
40847
+ ...selectedCells[0].style ?? {},
40848
+ revision: {
40849
+ ...revision,
40850
+ type: "merge",
40851
+ previous: {
40852
+ colSpan: selectedCells[0].colSpan,
40853
+ rowSpan: selectedCells[0].rowSpan,
40854
+ vMerge: selectedCells[0].vMerge
40855
+ }
40856
+ }
40857
+ },
40858
+ mergeRevisionState: {
40859
+ revisionId: revision.id,
40860
+ orientation: "vertical",
40861
+ currentCellCount: 1,
40862
+ previousCells: selectedCells.map(cloneCellSnapshot)
40863
+ }
40864
+ } : {}
40112
40865
  };
40113
40866
  tableBlock.rows[range.startRowIndex].cells[range.cellIndex] = mergedCell;
40114
40867
  for (let rowIndex = range.startRowIndex + 1; rowIndex <= range.endRowIndex; rowIndex += 1) {
@@ -40166,9 +40919,38 @@ function createTableCellSpanOperations(deps) {
40166
40919
  if (!cell || span <= 1 || cell.vMerge !== "restart") {
40167
40920
  return current;
40168
40921
  }
40922
+ const previousCell = cloneCellSnapshot(cell);
40923
+ const revision = current.trackChangesEnabled ? createTableRevisionMetadata() : void 0;
40924
+ const preservedColSpan = Math.max(1, cell.colSpan ?? 1);
40169
40925
  cell.rowSpan = void 0;
40170
40926
  cell.vMerge = void 0;
40171
- const preservedColSpan = Math.max(1, cell.colSpan ?? 1);
40927
+ if (revision) {
40928
+ cell.style = {
40929
+ ...cell.style ?? {},
40930
+ revision: {
40931
+ ...revision,
40932
+ type: "merge",
40933
+ previous: {
40934
+ colSpan: previousCell.colSpan,
40935
+ rowSpan: previousCell.rowSpan,
40936
+ vMerge: previousCell.vMerge
40937
+ }
40938
+ }
40939
+ };
40940
+ cell.mergeRevisionState = {
40941
+ revisionId: revision.id,
40942
+ orientation: "vertical",
40943
+ currentCellCount: 1,
40944
+ previousCells: [
40945
+ previousCell,
40946
+ ...Array.from({ length: span - 1 }, (_, offset) => {
40947
+ var _a2;
40948
+ const prior = (_a2 = tableBlock.rows[location.rowIndex + offset + 1]) == null ? void 0 : _a2.cells[location.cellIndex];
40949
+ return prior ? cloneCellSnapshot(prior) : createEditorTableCell([], preservedColSpan);
40950
+ })
40951
+ ]
40952
+ };
40953
+ }
40172
40954
  for (let offset = 1; offset < span; offset += 1) {
40173
40955
  const row = tableBlock.rows[location.rowIndex + offset];
40174
40956
  if (!row) {
@@ -40218,13 +41000,35 @@ function createTableCellSpanOperations(deps) {
40218
41000
  if (!row || !cell || span <= 1) {
40219
41001
  return current;
40220
41002
  }
41003
+ const previousCell = cloneCellSnapshot(cell);
41004
+ const revision = current.trackChangesEnabled ? createTableRevisionMetadata() : void 0;
40221
41005
  const nextCells = [
40222
41006
  {
40223
41007
  ...cell,
40224
41008
  colSpan: 1,
40225
41009
  blocks: cell.blocks.map(
40226
41010
  (paragraph) => cloneBlock(paragraph)
40227
- )
41011
+ ),
41012
+ ...revision ? {
41013
+ style: {
41014
+ ...cell.style ?? {},
41015
+ revision: {
41016
+ ...revision,
41017
+ type: "merge",
41018
+ previous: {
41019
+ colSpan: previousCell.colSpan,
41020
+ rowSpan: previousCell.rowSpan,
41021
+ vMerge: previousCell.vMerge
41022
+ }
41023
+ }
41024
+ },
41025
+ mergeRevisionState: {
41026
+ revisionId: revision.id,
41027
+ orientation: "horizontal",
41028
+ currentCellCount: span,
41029
+ previousCells: [previousCell]
41030
+ }
41031
+ } : {}
40228
41032
  },
40229
41033
  ...Array.from(
40230
41034
  { length: span - 1 },
@@ -40333,6 +41137,15 @@ function createTableRowColumnOperations(deps) {
40333
41137
  );
40334
41138
  })
40335
41139
  );
41140
+ if (current.trackChangesEnabled) {
41141
+ blankRow.style = {
41142
+ ...blankRow.style ?? {},
41143
+ revision: {
41144
+ ...createTableRevisionMetadata(),
41145
+ type: "insert"
41146
+ }
41147
+ };
41148
+ }
40336
41149
  tableBlock.rows.splice(insertIndex, 0, blankRow);
40337
41150
  const targetVisualColumn = (selectedEntry == null ? void 0 : selectedEntry.visualColumnIndex) ?? location.cellIndex;
40338
41151
  const targetCell2 = findCellAtVisualColumn(blankRow, targetVisualColumn);
@@ -40367,6 +41180,15 @@ function createTableRowColumnOperations(deps) {
40367
41180
  )
40368
41181
  )
40369
41182
  );
41183
+ if (current.trackChangesEnabled) {
41184
+ blankRow.style = {
41185
+ ...blankRow.style ?? {},
41186
+ revision: {
41187
+ ...createTableRevisionMetadata(),
41188
+ type: "insert"
41189
+ }
41190
+ };
41191
+ }
40370
41192
  tableBlock.rows.splice(insertIndex, 0, blankRow);
40371
41193
  const targetCell = blankRow.cells[Math.min(location.cellIndex, blankRow.cells.length - 1)];
40372
41194
  const nextParagraph = (targetCell == null ? void 0 : targetCell.blocks[0]) ?? ((_b = blankRow.cells.find(
@@ -40402,13 +41224,23 @@ function createTableRowColumnOperations(deps) {
40402
41224
  if (!tableBlock || tableBlock.type !== "table") {
40403
41225
  return current;
40404
41226
  }
40405
- if (tableBlock.rows.length <= 1) {
41227
+ if (tableBlock.rows.length <= 1 && !current.trackChangesEnabled) {
40406
41228
  return current;
40407
41229
  }
40408
41230
  const rowToDelete = tableBlock.rows[location.rowIndex];
40409
41231
  if (!rowToDelete) {
40410
41232
  return current;
40411
41233
  }
41234
+ if (current.trackChangesEnabled) {
41235
+ rowToDelete.style = {
41236
+ ...rowToDelete.style ?? {},
41237
+ revision: {
41238
+ ...createTableRevisionMetadata(),
41239
+ type: "delete"
41240
+ }
41241
+ };
41242
+ return updateBlocksInCurrentSection(current, targetBlocks, location.zone);
41243
+ }
40412
41244
  const blockedByRestartCell = rowToDelete.cells.some(
40413
41245
  (cell) => cell.vMerge !== "continue" && Math.max(1, cell.rowSpan ?? 1) > 1
40414
41246
  );
@@ -40494,13 +41326,34 @@ function createTableRowColumnOperations(deps) {
40494
41326
  for (const cell of row.cells) {
40495
41327
  const span = Math.max(1, cell.colSpan ?? 1);
40496
41328
  if (!inserted && insertVisualColumn <= visualCursor) {
40497
- nextCells.push(createEditorTableCell([createEditorParagraph("")]));
41329
+ const insertedCell = createEditorTableCell([
41330
+ createEditorParagraph("")
41331
+ ]);
41332
+ if (current.trackChangesEnabled) {
41333
+ insertedCell.style = {
41334
+ revision: {
41335
+ ...createTableRevisionMetadata(),
41336
+ type: "insert"
41337
+ }
41338
+ };
41339
+ }
41340
+ nextCells.push(insertedCell);
40498
41341
  inserted = true;
40499
41342
  }
40500
41343
  if (!inserted && visualCursor < insertVisualColumn && insertVisualColumn < visualCursor + span) {
40501
41344
  nextCells.push({
40502
41345
  ...cell,
40503
- colSpan: span + 1
41346
+ colSpan: span + 1,
41347
+ ...current.trackChangesEnabled ? {
41348
+ style: {
41349
+ ...cell.style ?? {},
41350
+ revision: {
41351
+ ...createTableRevisionMetadata(),
41352
+ type: "merge",
41353
+ previous: { colSpan: cell.colSpan }
41354
+ }
41355
+ }
41356
+ } : {}
40504
41357
  });
40505
41358
  inserted = true;
40506
41359
  } else {
@@ -40509,7 +41362,18 @@ function createTableRowColumnOperations(deps) {
40509
41362
  visualCursor += span;
40510
41363
  }
40511
41364
  if (!inserted) {
40512
- nextCells.push(createEditorTableCell([createEditorParagraph("")]));
41365
+ const insertedCell = createEditorTableCell([
41366
+ createEditorParagraph("")
41367
+ ]);
41368
+ if (current.trackChangesEnabled) {
41369
+ insertedCell.style = {
41370
+ revision: {
41371
+ ...createTableRevisionMetadata(),
41372
+ type: "insert"
41373
+ }
41374
+ };
41375
+ }
41376
+ nextCells.push(insertedCell);
40513
41377
  }
40514
41378
  row.cells = nextCells;
40515
41379
  }
@@ -40544,11 +41408,16 @@ function createTableRowColumnOperations(deps) {
40544
41408
  )
40545
41409
  );
40546
41410
  for (const row of tableBlock.rows) {
40547
- row.cells.splice(
40548
- insertIndex,
40549
- 0,
40550
- createEditorTableCell([createEditorParagraph("")])
40551
- );
41411
+ const insertedCell = createEditorTableCell([createEditorParagraph("")]);
41412
+ if (current.trackChangesEnabled) {
41413
+ insertedCell.style = {
41414
+ revision: {
41415
+ ...createTableRevisionMetadata(),
41416
+ type: "insert"
41417
+ }
41418
+ };
41419
+ }
41420
+ row.cells.splice(insertIndex, 0, insertedCell);
40552
41421
  }
40553
41422
  const targetRow = tableBlock.rows[location.rowIndex];
40554
41423
  const targetCell = targetRow == null ? void 0 : targetRow.cells[insertIndex];
@@ -40587,6 +41456,26 @@ function createTableRowColumnOperations(deps) {
40587
41456
  if (getTableVisualWidth(tableBlock) <= 1) {
40588
41457
  return current;
40589
41458
  }
41459
+ if (current.trackChangesEnabled) {
41460
+ const layout = buildTableCellLayout(tableBlock);
41461
+ const selected = layout.find(
41462
+ (entry) => entry.rowIndex === location.rowIndex && entry.cellIndex === location.cellIndex
41463
+ );
41464
+ const visualColumn = (selected == null ? void 0 : selected.visualColumnIndex) ?? location.cellIndex;
41465
+ for (const row of tableBlock.rows) {
41466
+ const cell = findCellAtVisualColumn(row, visualColumn);
41467
+ if (cell) {
41468
+ cell.style = {
41469
+ ...cell.style ?? {},
41470
+ revision: {
41471
+ ...createTableRevisionMetadata(),
41472
+ type: "delete"
41473
+ }
41474
+ };
41475
+ }
41476
+ }
41477
+ return updateBlocksInCurrentSection(current, targetBlocks, location.zone);
41478
+ }
40590
41479
  const hasHorizontalSpansInTable = tableBlock.rows.some(
40591
41480
  (row) => row.cells.some((cell) => Math.max(1, cell.colSpan ?? 1) > 1)
40592
41481
  );
@@ -41460,7 +42349,8 @@ function createEditorStyleController(deps) {
41460
42349
  color: pending.color ?? resolved.color,
41461
42350
  highlight: pending.highlight ?? resolved.highlight,
41462
42351
  textShading: pending.shading ?? resolved.textShading,
41463
- link: pending.link ?? resolved.link
42352
+ link: pending.link ?? resolved.link,
42353
+ characterStyleId: pending.styleId !== void 0 && pending.styleId !== null ? String(pending.styleId) : resolved.characterStyleId
41464
42354
  };
41465
42355
  };
41466
42356
  const applyToolbarValueStyleCommand = (key, value) => {
@@ -43021,6 +43911,7 @@ function createEditorTableDrag(deps) {
43021
43911
  null
43022
43912
  );
43023
43913
  const [startClientY, setStartClientY] = createSignal(0);
43914
+ const [startClientX, setStartClientX] = createSignal(0);
43024
43915
  const [mousePos, setMousePos] = createSignal({ x: 0, y: 0 });
43025
43916
  const stopDrag = () => {
43026
43917
  setDragging(false);
@@ -43074,9 +43965,32 @@ function createEditorTableDrag(deps) {
43074
43965
  event.clientY
43075
43966
  );
43076
43967
  const tableId = info == null ? void 0 : info.tableId;
43077
- if (pos && tableId) {
43968
+ if (tableId) {
43078
43969
  deps.applyTransactionalState((current) => {
43079
- return moveBlockToPosition(current, tableId, pos);
43970
+ var _a;
43971
+ const findTable = () => {
43972
+ for (const zone of ["main", "header", "footer"]) {
43973
+ const blocks = getEditableBlocksForZone(current, zone);
43974
+ const table2 = blocks.find(
43975
+ (block) => block.type === "table" && block.id === tableId
43976
+ );
43977
+ if (table2) return table2;
43978
+ }
43979
+ return void 0;
43980
+ };
43981
+ const table = findTable();
43982
+ if ((table == null ? void 0 : table.type) === "table" && ((_a = table.style) == null ? void 0 : _a.floating)) {
43983
+ const floating = table.style.floating;
43984
+ const pointsPerPixel = 72 / 96;
43985
+ return setActiveTableStyleValue(current, tableId, "floating", {
43986
+ ...floating,
43987
+ x: (floating.x ?? 0) + (event.clientX - startClientX()) * pointsPerPixel,
43988
+ y: (floating.y ?? 0) + (event.clientY - startClientY()) * pointsPerPixel,
43989
+ xAlign: void 0,
43990
+ yAlign: void 0
43991
+ });
43992
+ }
43993
+ return pos ? moveBlockToPosition(current, tableId, pos) : current;
43080
43994
  });
43081
43995
  }
43082
43996
  }
@@ -43097,6 +44011,7 @@ function createEditorTableDrag(deps) {
43097
44011
  offsetY: event.clientY - handleRect.top
43098
44012
  });
43099
44013
  setStartClientY(event.clientY);
44014
+ setStartClientX(event.clientX);
43100
44015
  setMousePos({ x: event.clientX, y: event.clientY });
43101
44016
  setDragging(false);
43102
44017
  setDropTargetPos(null);
@@ -44173,6 +45088,51 @@ function createEditorRevisionController(deps) {
44173
45088
  }
44174
45089
  if (foundRevision) break;
44175
45090
  }
45091
+ const findInBlocks = (blocks) => {
45092
+ var _a2, _b2, _c2, _d, _e, _f, _g, _h, _i, _j, _k;
45093
+ for (const block of blocks) {
45094
+ if (block.type === "paragraph") continue;
45095
+ if (((_b2 = (_a2 = block.style) == null ? void 0 : _a2.revision) == null ? void 0 : _b2.id) === revisionId) {
45096
+ return block.style.revision;
45097
+ }
45098
+ if (((_c2 = block.gridRevision) == null ? void 0 : _c2.id) === revisionId) return block.gridRevision;
45099
+ for (const row of block.rows) {
45100
+ if (((_e = (_d = row.style) == null ? void 0 : _d.revision) == null ? void 0 : _e.id) === revisionId) return row.style.revision;
45101
+ if (((_g = (_f = row.style) == null ? void 0 : _f.propertyRevision) == null ? void 0 : _g.id) === revisionId) {
45102
+ return row.style.propertyRevision;
45103
+ }
45104
+ for (const cell of row.cells) {
45105
+ if (((_i = (_h = cell.style) == null ? void 0 : _h.revision) == null ? void 0 : _i.id) === revisionId) {
45106
+ return cell.style.revision;
45107
+ }
45108
+ if (((_k = (_j = cell.style) == null ? void 0 : _j.propertyRevision) == null ? void 0 : _k.id) === revisionId) {
45109
+ return cell.style.propertyRevision;
45110
+ }
45111
+ const nested = findInBlocks(cell.blocks);
45112
+ if (nested) return nested;
45113
+ }
45114
+ }
45115
+ }
45116
+ return void 0;
45117
+ };
45118
+ if (!foundRevision) {
45119
+ for (const section of getDocumentSections(deps.state().document)) {
45120
+ for (const blocks of [
45121
+ section.blocks,
45122
+ section.header,
45123
+ section.firstPageHeader,
45124
+ section.evenPageHeader,
45125
+ section.footer,
45126
+ section.firstPageFooter,
45127
+ section.evenPageFooter
45128
+ ]) {
45129
+ if (!blocks) continue;
45130
+ foundRevision = findInBlocks(blocks);
45131
+ if (foundRevision) break;
45132
+ }
45133
+ if (foundRevision) break;
45134
+ }
45135
+ }
44176
45136
  if (!foundRevision) return;
44177
45137
  const rect = event.currentTarget.getBoundingClientRect();
44178
45138
  const surfaceRect = (_b = deps.surfaceRef()) == null ? void 0 : _b.getBoundingClientRect();
@@ -44526,6 +45486,148 @@ function toggleTrackChanges(state) {
44526
45486
  trackChangesEnabled: !state.trackChangesEnabled
44527
45487
  };
44528
45488
  }
45489
+ function transformTableRevisionBlocks(blocks, revisionId, accept) {
45490
+ return blocks.flatMap((block) => {
45491
+ var _a;
45492
+ if (block.type === "paragraph") return [block];
45493
+ let style2 = block.style;
45494
+ if (((_a = style2 == null ? void 0 : style2.revision) == null ? void 0 : _a.id) === revisionId) {
45495
+ if (accept) {
45496
+ const { revision: _revision, ...current } = style2;
45497
+ style2 = current;
45498
+ } else {
45499
+ style2 = { ...style2.revision.previous };
45500
+ }
45501
+ }
45502
+ let gridCols = block.gridCols;
45503
+ let gridRevision = block.gridRevision;
45504
+ if ((gridRevision == null ? void 0 : gridRevision.id) === revisionId) {
45505
+ gridCols = accept ? gridCols : [...gridRevision.previous];
45506
+ gridRevision = void 0;
45507
+ }
45508
+ const sourceRows = block.rows.map((row) => ({
45509
+ ...row,
45510
+ cells: [...row.cells]
45511
+ }));
45512
+ for (let rowIndex = 0; rowIndex < sourceRows.length; rowIndex += 1) {
45513
+ const row = sourceRows[rowIndex];
45514
+ for (let cellIndex = 0; cellIndex < row.cells.length; cellIndex += 1) {
45515
+ const cell = row.cells[cellIndex];
45516
+ const mergeState = cell.mergeRevisionState;
45517
+ if (!mergeState || mergeState.revisionId !== revisionId) continue;
45518
+ if (accept) {
45519
+ const { mergeRevisionState: _state, ...acceptedCell } = cell;
45520
+ row.cells[cellIndex] = acceptedCell;
45521
+ continue;
45522
+ }
45523
+ if (mergeState.orientation === "horizontal") {
45524
+ row.cells.splice(
45525
+ cellIndex,
45526
+ mergeState.currentCellCount,
45527
+ ...mergeState.previousCells
45528
+ );
45529
+ } else {
45530
+ mergeState.previousCells.forEach((previousCell, offset) => {
45531
+ const targetRow = sourceRows[rowIndex + offset];
45532
+ if (targetRow) targetRow.cells[cellIndex] = previousCell;
45533
+ });
45534
+ }
45535
+ }
45536
+ }
45537
+ const rows = sourceRows.flatMap((row) => {
45538
+ var _a2, _b, _c, _d;
45539
+ if (((_b = (_a2 = row.style) == null ? void 0 : _a2.revision) == null ? void 0 : _b.id) === revisionId) {
45540
+ const remove = accept && row.style.revision.type === "delete" || !accept && row.style.revision.type === "insert";
45541
+ if (remove) return [];
45542
+ }
45543
+ let rowStyle = row.style;
45544
+ if (((_c = rowStyle == null ? void 0 : rowStyle.propertyRevision) == null ? void 0 : _c.id) === revisionId) {
45545
+ if (accept) {
45546
+ const { propertyRevision: _revision, ...current } = rowStyle;
45547
+ rowStyle = current;
45548
+ } else {
45549
+ rowStyle = {
45550
+ ...rowStyle.propertyRevision.previous,
45551
+ revision: rowStyle.revision
45552
+ };
45553
+ }
45554
+ }
45555
+ if (((_d = rowStyle == null ? void 0 : rowStyle.revision) == null ? void 0 : _d.id) === revisionId) {
45556
+ const { revision: _revision, ...current } = rowStyle;
45557
+ rowStyle = current;
45558
+ }
45559
+ const cells = row.cells.flatMap((cell) => {
45560
+ var _a3, _b2, _c2, _d2, _e;
45561
+ if (((_b2 = (_a3 = cell.style) == null ? void 0 : _a3.revision) == null ? void 0 : _b2.id) === revisionId) {
45562
+ const remove = accept && cell.style.revision.type === "delete" || !accept && cell.style.revision.type === "insert";
45563
+ if (remove) return [];
45564
+ }
45565
+ let cellStyle = cell.style;
45566
+ if (((_c2 = cellStyle == null ? void 0 : cellStyle.propertyRevision) == null ? void 0 : _c2.id) === revisionId) {
45567
+ if (accept) {
45568
+ const { propertyRevision: _revision, ...current } = cellStyle;
45569
+ cellStyle = current;
45570
+ } else {
45571
+ cellStyle = {
45572
+ ...cellStyle.propertyRevision.previous,
45573
+ revision: cellStyle.revision
45574
+ };
45575
+ }
45576
+ }
45577
+ let nextCell = {
45578
+ ...cell,
45579
+ style: cellStyle,
45580
+ blocks: transformTableRevisionBlocks(
45581
+ cell.blocks,
45582
+ revisionId,
45583
+ accept
45584
+ )
45585
+ };
45586
+ if (((_d2 = cellStyle == null ? void 0 : cellStyle.revision) == null ? void 0 : _d2.id) === revisionId && ((_e = cell.mergeRevisionState) == null ? void 0 : _e.revisionId) !== revisionId) {
45587
+ const revision = cellStyle.revision;
45588
+ const { revision: _revision, ...current } = cellStyle;
45589
+ nextCell = {
45590
+ ...nextCell,
45591
+ ...accept || revision.type !== "merge" ? {} : revision.previous,
45592
+ style: current
45593
+ };
45594
+ }
45595
+ return [nextCell];
45596
+ });
45597
+ return [
45598
+ {
45599
+ ...row,
45600
+ isHeader: rowStyle && "isHeader" in rowStyle ? rowStyle.isHeader : row.isHeader,
45601
+ style: rowStyle,
45602
+ cells
45603
+ }
45604
+ ];
45605
+ });
45606
+ if (rows.length === 0) return [];
45607
+ return [{ ...block, style: style2, gridCols, gridRevision, rows }];
45608
+ });
45609
+ }
45610
+ function transformTableRevision(state, revisionId, accept) {
45611
+ const sections = getDocumentSections(state.document).map((section) => ({
45612
+ ...section,
45613
+ blocks: transformTableRevisionBlocks(section.blocks, revisionId, accept),
45614
+ header: section.header ? transformTableRevisionBlocks(section.header, revisionId, accept) : void 0,
45615
+ firstPageHeader: section.firstPageHeader ? transformTableRevisionBlocks(
45616
+ section.firstPageHeader,
45617
+ revisionId,
45618
+ accept
45619
+ ) : void 0,
45620
+ evenPageHeader: section.evenPageHeader ? transformTableRevisionBlocks(section.evenPageHeader, revisionId, accept) : void 0,
45621
+ footer: section.footer ? transformTableRevisionBlocks(section.footer, revisionId, accept) : void 0,
45622
+ firstPageFooter: section.firstPageFooter ? transformTableRevisionBlocks(
45623
+ section.firstPageFooter,
45624
+ revisionId,
45625
+ accept
45626
+ ) : void 0,
45627
+ evenPageFooter: section.evenPageFooter ? transformTableRevisionBlocks(section.evenPageFooter, revisionId, accept) : void 0
45628
+ }));
45629
+ return { ...state, document: { ...state.document, sections } };
45630
+ }
44529
45631
  function acceptRevision(state, revisionId) {
44530
45632
  const paragraphs = getParagraphs(state);
44531
45633
  const nextParagraphs = paragraphs.map((paragraph) => {
@@ -44548,7 +45650,7 @@ function acceptRevision(state, revisionId) {
44548
45650
  }
44549
45651
  return buildParagraphFromRuns(paragraph, nextRuns);
44550
45652
  });
44551
- return cloneStateWithParagraphs(
45653
+ const textState = cloneStateWithParagraphs(
44552
45654
  state,
44553
45655
  nextParagraphs,
44554
45656
  preserveSelectionByParagraphOffsets(
@@ -44556,6 +45658,7 @@ function acceptRevision(state, revisionId) {
44556
45658
  normalizeSelection(state)
44557
45659
  )
44558
45660
  );
45661
+ return transformTableRevision(textState, revisionId, true);
44559
45662
  }
44560
45663
  function rejectRevision(state, revisionId) {
44561
45664
  const paragraphs = getParagraphs(state);
@@ -44579,7 +45682,7 @@ function rejectRevision(state, revisionId) {
44579
45682
  }
44580
45683
  return buildParagraphFromRuns(paragraph, nextRuns);
44581
45684
  });
44582
- return cloneStateWithParagraphs(
45685
+ const textState = cloneStateWithParagraphs(
44583
45686
  state,
44584
45687
  nextParagraphs,
44585
45688
  preserveSelectionByParagraphOffsets(
@@ -44587,6 +45690,40 @@ function rejectRevision(state, revisionId) {
44587
45690
  normalizeSelection(state)
44588
45691
  )
44589
45692
  );
45693
+ return transformTableRevision(textState, revisionId, false);
45694
+ }
45695
+ function collectTableRevisionIds(blocks, selectedParagraphIds, revisionIds) {
45696
+ var _a, _b, _c, _d, _e;
45697
+ for (const block of blocks) {
45698
+ if (block.type === "paragraph") continue;
45699
+ const tableSelected = block.rows.some(
45700
+ (row) => row.cells.some(
45701
+ (cell) => cell.blocks.some((paragraph) => selectedParagraphIds.has(paragraph.id))
45702
+ )
45703
+ );
45704
+ if (tableSelected) {
45705
+ if ((_a = block.style) == null ? void 0 : _a.revision) revisionIds.add(block.style.revision.id);
45706
+ if (block.gridRevision) revisionIds.add(block.gridRevision.id);
45707
+ }
45708
+ for (const row of block.rows) {
45709
+ const selectedCells = row.cells.filter(
45710
+ (cell) => cell.blocks.some((paragraph) => selectedParagraphIds.has(paragraph.id))
45711
+ );
45712
+ if (selectedCells.length > 0) {
45713
+ if ((_b = row.style) == null ? void 0 : _b.revision) revisionIds.add(row.style.revision.id);
45714
+ if ((_c = row.style) == null ? void 0 : _c.propertyRevision) {
45715
+ revisionIds.add(row.style.propertyRevision.id);
45716
+ }
45717
+ }
45718
+ for (const cell of selectedCells) {
45719
+ if ((_d = cell.style) == null ? void 0 : _d.revision) revisionIds.add(cell.style.revision.id);
45720
+ if ((_e = cell.style) == null ? void 0 : _e.propertyRevision) {
45721
+ revisionIds.add(cell.style.propertyRevision.id);
45722
+ }
45723
+ collectTableRevisionIds(cell.blocks, selectedParagraphIds, revisionIds);
45724
+ }
45725
+ }
45726
+ }
44590
45727
  }
44591
45728
  function acceptRevisionsInSelection(state) {
44592
45729
  var _a;
@@ -44604,6 +45741,24 @@ function acceptRevisionsInSelection(state) {
44604
45741
  }
44605
45742
  }
44606
45743
  }
45744
+ const selectedParagraphIds = new Set(
45745
+ paragraphs.slice(normalized.startIndex, normalized.endIndex + 1).map((paragraph) => paragraph.id)
45746
+ );
45747
+ for (const section of getDocumentSections(state.document)) {
45748
+ for (const blocks of [
45749
+ section.blocks,
45750
+ section.header,
45751
+ section.firstPageHeader,
45752
+ section.evenPageHeader,
45753
+ section.footer,
45754
+ section.firstPageFooter,
45755
+ section.evenPageFooter
45756
+ ]) {
45757
+ if (blocks) {
45758
+ collectTableRevisionIds(blocks, selectedParagraphIds, revisionIds);
45759
+ }
45760
+ }
45761
+ }
44607
45762
  let nextState = state;
44608
45763
  for (const revisionId of revisionIds) {
44609
45764
  nextState = acceptRevision(nextState, revisionId);
@@ -44626,6 +45781,24 @@ function rejectRevisionsInSelection(state) {
44626
45781
  }
44627
45782
  }
44628
45783
  }
45784
+ const selectedParagraphIds = new Set(
45785
+ paragraphs.slice(normalized.startIndex, normalized.endIndex + 1).map((paragraph) => paragraph.id)
45786
+ );
45787
+ for (const section of getDocumentSections(state.document)) {
45788
+ for (const blocks of [
45789
+ section.blocks,
45790
+ section.header,
45791
+ section.firstPageHeader,
45792
+ section.evenPageHeader,
45793
+ section.footer,
45794
+ section.firstPageFooter,
45795
+ section.evenPageFooter
45796
+ ]) {
45797
+ if (blocks) {
45798
+ collectTableRevisionIds(blocks, selectedParagraphIds, revisionIds);
45799
+ }
45800
+ }
45801
+ }
44629
45802
  let nextState = state;
44630
45803
  for (const revisionId of revisionIds) {
44631
45804
  nextState = rejectRevision(nextState, revisionId);
@@ -46308,6 +47481,11 @@ function buildCoreFormattingCommands({
46308
47481
  (p) => formatting.setStyleId(String(p)),
46309
47482
  () => s().styleId || "normal"
46310
47483
  ),
47484
+ setCharacterStyleId: valueCommand(
47485
+ "setCharacterStyleId",
47486
+ (p) => formatting.setCharacterStyleId(String(p)),
47487
+ () => s().characterStyleId || ""
47488
+ ),
46311
47489
  setUnderlineStyle: valueCommand(
46312
47490
  "setUnderlineStyle",
46313
47491
  (p) => (formatting.setUnderlineStyle(p || null), true),
@@ -46800,18 +47978,41 @@ function createEditorEssentialsRuntimePlugin(options) {
46800
47978
  setHighlight: (value) => (options.styleController.applyToolbarValueStyleCommand("highlight", value), true),
46801
47979
  setTextShading: (value) => (options.styleController.applyToolbarValueStyleCommand("shading", value), true),
46802
47980
  setStyleId: (value) => (options.commandsController.handleStyleChange(value), true),
47981
+ setCharacterStyleId: (value) => (options.styleController.applyToolbarValueStyleCommand(
47982
+ "styleId",
47983
+ value || null
47984
+ ), true),
46803
47985
  setUnderlineStyle: (value) => options.styleController.applyToolbarValueStyleCommand("underlineStyle", value)
46804
47986
  };
46805
47987
  const essentialsDocument = {
46806
47988
  documentStyles: () => {
46807
- var _a;
46808
- return Object.values(((_a = options.state().document) == null ? void 0 : _a.styles) ?? {}).map((style2) => {
46809
- var _a2, _b, _c;
47989
+ var _a, _b;
47990
+ const document2 = options.state().document;
47991
+ const styles = (document2 == null ? void 0 : document2.styles) ?? {};
47992
+ const usedStyleIds = /* @__PURE__ */ new Set();
47993
+ for (const paragraph of getDocumentParagraphs(document2)) {
47994
+ if ((_a = paragraph.style) == null ? void 0 : _a.styleId) usedStyleIds.add(paragraph.style.styleId);
47995
+ for (const run of paragraph.runs) {
47996
+ if ((_b = run.styles) == null ? void 0 : _b.styleId) usedStyleIds.add(run.styles.styleId);
47997
+ }
47998
+ }
47999
+ return Object.values(styles).map((style2) => {
48000
+ var _a2;
48001
+ const preview = resolveNamedTextStyle(style2.id, styles);
46810
48002
  return {
46811
48003
  id: style2.id,
46812
48004
  name: style2.name,
46813
- fontFamily: ((_b = (_a2 = style2.textStyle) == null ? void 0 : _a2.fontFamily) == null ? void 0 : _b.trim()) || void 0,
46814
- fontSize: typeof ((_c = style2.textStyle) == null ? void 0 : _c.fontSize) === "number" ? style2.textStyle.fontSize : void 0
48005
+ type: style2.type,
48006
+ qFormat: style2.qFormat,
48007
+ uiPriority: style2.uiPriority,
48008
+ semiHidden: style2.semiHidden,
48009
+ unhideWhenUsed: style2.unhideWhenUsed,
48010
+ isUsed: usedStyleIds.has(style2.id),
48011
+ fontFamily: ((_a2 = preview.fontFamily) == null ? void 0 : _a2.trim()) || void 0,
48012
+ fontSize: typeof preview.fontSize === "number" ? preview.fontSize : void 0,
48013
+ color: preview.color ?? void 0,
48014
+ bold: preview.bold ?? void 0,
48015
+ italic: preview.italic ?? void 0
46815
48016
  };
46816
48017
  });
46817
48018
  },
@@ -47080,7 +48281,10 @@ function createEditorEssentialsRuntimePlugin(options) {
47080
48281
  (current) => setTableCellStyleValue(current, "horizontalAlign", "right"),
47081
48282
  MERGE_KEYS.tableAlign
47082
48283
  ),
47083
- setCellWidth: (width) => apply((current) => setTableCellWidth(current, width), MERGE_KEYS.tableCellWidth),
48284
+ setCellWidth: (width) => apply(
48285
+ (current) => setTableCellWidth(current, width),
48286
+ MERGE_KEYS.tableCellWidth
48287
+ ),
47084
48288
  insert: (rows, cols) => options.tableOps.insertTableCommand(rows, cols)
47085
48289
  };
47086
48290
  })();