@stll/folio-core 0.58.5 → 0.60.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/README.md +10 -1
  2. package/dist/ai-edits/apply.d.ts +11 -12
  3. package/dist/ai-edits/apply.js +179 -168
  4. package/dist/ai-edits/headless.d.ts +15 -13
  5. package/dist/ai-edits/headless.js +40 -13
  6. package/dist/ai-edits/index.d.ts +3 -3
  7. package/dist/ai-edits/newListNumbering.d.ts +3 -9
  8. package/dist/ai-edits/newListNumbering.js +36 -41
  9. package/dist/ai-edits/referenceClassification.d.ts +22 -0
  10. package/dist/ai-edits/referenceClassification.js +21 -0
  11. package/dist/ai-edits/snapshot.js +39 -40
  12. package/dist/ai-edits/types.d.ts +24 -32
  13. package/dist/compare/column-alignment.d.ts +4 -4
  14. package/dist/compare/compare.d.ts +3 -7
  15. package/dist/compare/compare.js +25 -27
  16. package/dist/compare/content-alignment.d.ts +9 -9
  17. package/dist/compare/content-types.d.ts +23 -10
  18. package/dist/compare/content-types.js +14 -0
  19. package/dist/compare/content.d.ts +16 -17
  20. package/dist/compare/content.js +30 -7
  21. package/dist/compare/formatting.d.ts +3 -3
  22. package/dist/compare/import-style-closure.d.ts +22 -0
  23. package/dist/compare/import-style-closure.js +33 -0
  24. package/dist/compare/inserted-resource-snapshot.d.ts +15 -0
  25. package/dist/compare/inserted-resource-snapshot.js +63 -0
  26. package/dist/compare/plan.js +20 -13
  27. package/dist/compare/scenario.js +12 -2
  28. package/dist/compare/style-resources.d.ts +8 -2
  29. package/dist/compare/style-resources.js +63 -14
  30. package/dist/compare/verification.d.ts +15 -3
  31. package/dist/compare/verification.js +47 -8
  32. package/dist/compat/eigenpal.d.ts +5 -5
  33. package/dist/compat/eigenpal.js +2 -2
  34. package/dist/controller/canonicalListRendering.js +13 -22
  35. package/dist/controller/canonicalPublicOperations.js +1 -1
  36. package/dist/controller/canonicalSession.js +3 -2
  37. package/dist/controller/canonicalStructure.js +55 -28
  38. package/dist/controller/fontReadiness.js +1 -1
  39. package/dist/controller/layoutPipeline.js +7 -1
  40. package/dist/controller/layoutSession.d.ts +2 -0
  41. package/dist/display-list/build/fontTable.js +7 -5
  42. package/dist/display-list/build/furniture.d.ts +1 -0
  43. package/dist/display-list/build/furniture.js +1 -0
  44. package/dist/display-list/build/watermarkPrimitives.d.ts +2 -1
  45. package/dist/display-list/build/watermarkPrimitives.js +9 -3
  46. package/dist/display-list/editor/pageRenderer.js +1 -0
  47. package/dist/document-operations.d.ts +4 -9
  48. package/dist/document-operations.js +45 -41
  49. package/dist/docx/attributeRemainder.d.ts +1 -1
  50. package/dist/docx/bookmarkIdNormalization.d.ts +10 -0
  51. package/dist/docx/bookmarkIdNormalization.js +100 -0
  52. package/dist/docx/bookmarkParser.js +4 -2
  53. package/dist/docx/importedIdCollisions.d.ts +136 -0
  54. package/dist/docx/importedIdCollisions.js +215 -0
  55. package/dist/docx/index.d.ts +1 -1
  56. package/dist/docx/listMarkerComputation.js +9 -14
  57. package/dist/docx/listTemplate.d.ts +22 -0
  58. package/dist/docx/listTemplate.js +40 -0
  59. package/dist/docx/numberingParser.js +4 -4
  60. package/dist/docx/numberingReferenceNormalization.js +3 -3
  61. package/dist/docx/paragraphParser.js +3 -4
  62. package/dist/docx/paragraphPropertySource.js +1 -2
  63. package/dist/docx/parseContext.d.ts +2 -1
  64. package/dist/docx/parseContext.js +1 -0
  65. package/dist/docx/parseWarningMessage.js +1 -0
  66. package/dist/docx/parser.js +5 -1
  67. package/dist/docx/relsParser.js +1 -1
  68. package/dist/docx/rezip.js +4 -3
  69. package/dist/docx/selectedXmlIdentityScan.d.ts +10 -0
  70. package/dist/docx/selectedXmlIdentityScan.js +36 -0
  71. package/dist/docx/selectiveSave.js +5 -4
  72. package/dist/docx/selectiveXmlPatch.js +44 -52
  73. package/dist/docx/serializer/commentSerializer.d.ts +3 -1
  74. package/dist/docx/serializer/commentSerializer.js +11 -2
  75. package/dist/docx/serializer/runSerializer.js +2 -2
  76. package/dist/docx/serializer/trackedChangeAttributes.d.ts +1 -3
  77. package/dist/docx/serializer/trackedChangeAttributes.js +1 -11
  78. package/dist/docx/server/materializeYjsDocx.js +2 -2
  79. package/dist/docx/server/migrateYjsAttrSchema.js +5 -5
  80. package/dist/fonts/embeddedFontFingerprint.d.ts +5 -0
  81. package/dist/fonts/embeddedFontFingerprint.js +18 -0
  82. package/dist/fonts/embeddedFonts.d.ts +1 -1
  83. package/dist/fonts/embeddedFonts.js +1 -1
  84. package/dist/fonts/headlessMeasure.js +0 -0
  85. package/dist/generated/text_shaper.js +8 -4
  86. package/dist/generated/text_shaper_bg.wasm +0 -0
  87. package/dist/headless-layout.js +1 -0
  88. package/dist/index.d.ts +5 -5
  89. package/dist/index.js +2 -2
  90. package/dist/internal/paragraphFormattingSerialization.d.ts +1 -8
  91. package/dist/internal/paragraphFormattingSerialization.js +6 -20
  92. package/dist/layout-bridge/convert/flowConversionShared.d.ts +3 -1
  93. package/dist/layout-bridge/convert/footnoteLayout.d.ts +1 -1
  94. package/dist/layout-bridge/convert/footnoteLayout.js +3 -0
  95. package/dist/layout-bridge/convert/headerFooterLayout.d.ts +1 -0
  96. package/dist/layout-bridge/convert/headerFooterLayout.js +2 -0
  97. package/dist/layout-bridge/convert/listMarkers.d.ts +1 -2
  98. package/dist/layout-bridge/convert/listMarkers.js +3 -11
  99. package/dist/layout-bridge/convert/paragraphAttrs.d.ts +1 -1
  100. package/dist/layout-bridge/convert/paragraphAttrs.js +8 -4
  101. package/dist/layout-bridge/convert/paragraphConversion.js +8 -1
  102. package/dist/layout-bridge/convert/toFlowBlocks.d.ts +2 -1
  103. package/dist/layout-bridge/convert/toFlowBlocks.js +27 -2
  104. package/dist/layout-engine/measure/cache.js +39 -7
  105. package/dist/layout-engine/measure/lineTypography.js +1 -0
  106. package/dist/layout-engine/measure/listMarkerWidth.d.ts +1 -0
  107. package/dist/layout-engine/measure/listMarkerWidth.js +1 -0
  108. package/dist/layout-engine/measure/measureContainer.js +3 -4
  109. package/dist/layout-engine/measure/measureHelpers.d.ts +6 -9
  110. package/dist/layout-engine/measure/measureHelpers.js +21 -18
  111. package/dist/layout-engine/measure/measureParagraph.js +2 -0
  112. package/dist/layout-engine/measure/measureTypes.d.ts +2 -0
  113. package/dist/layout-engine/types.d.ts +4 -1
  114. package/dist/layout-painter/renderPage.d.ts +1 -0
  115. package/dist/layout-painter/renderPage.js +11 -3
  116. package/dist/layout-painter/renderParagraph.js +13 -3
  117. package/dist/layout-painter/renderWatermark.d.ts +1 -0
  118. package/dist/layout-painter/renderWatermark.js +7 -3
  119. package/dist/managers/editorShortcuts.d.ts +2 -1
  120. package/dist/managers/editorShortcuts.js +2 -1
  121. package/dist/markdown/renderParagraph.js +29 -3
  122. package/dist/prosemirror/canonicalSelectionRange.d.ts +4 -1
  123. package/dist/prosemirror/canonicalSelectionRange.js +9 -3
  124. package/dist/prosemirror/commands/comments.js +5 -32
  125. package/dist/prosemirror/commands/paragraphBookmarkJoin.d.ts +7 -1
  126. package/dist/prosemirror/commands/paragraphBookmarkJoin.js +35 -1
  127. package/dist/prosemirror/commands/propertyChangeScope.js +6 -0
  128. package/dist/prosemirror/commands/resolveParagraphProperties.js +10 -5
  129. package/dist/prosemirror/conversion/fromProseDoc.js +23 -9
  130. package/dist/prosemirror/conversion/toProseDoc.js +31 -7
  131. package/dist/prosemirror/extensions/core/ParagraphExtension.js +29 -14
  132. package/dist/prosemirror/extensions/features/AutoBidiDetectionExtension.d.ts +8 -2
  133. package/dist/prosemirror/extensions/features/AutoBidiDetectionExtension.js +39 -3
  134. package/dist/prosemirror/extensions/features/EmptyParagraphFormatExtension.d.ts +8 -2
  135. package/dist/prosemirror/extensions/features/EmptyParagraphFormatExtension.js +4 -3
  136. package/dist/prosemirror/extensions/features/ImageDragExtension.js +4 -3
  137. package/dist/prosemirror/extensions/features/JoinedRunStyleExtension.js +4 -3
  138. package/dist/prosemirror/extensions/features/ListExtension.js +51 -21
  139. package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.d.ts +9 -3
  140. package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.js +6 -5
  141. package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.d.ts +8 -2
  142. package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.js +11 -3
  143. package/dist/prosemirror/extensions/marks/RunIdentityExtension.js +4 -3
  144. package/dist/prosemirror/extensions/marks/markUtils.js +1 -1
  145. package/dist/prosemirror/listInstanceReferences.js +21 -15
  146. package/dist/prosemirror/listLabels.d.ts +4 -3
  147. package/dist/prosemirror/listLabels.js +18 -51
  148. package/dist/prosemirror/listMarker.d.ts +2 -19
  149. package/dist/prosemirror/listMarker.js +28 -57
  150. package/dist/prosemirror/listNumbering.js +16 -6
  151. package/dist/prosemirror/listRendering.d.ts +4 -3
  152. package/dist/prosemirror/listRendering.js +22 -3
  153. package/dist/prosemirror/listRenderingAttrs.d.ts +2 -1
  154. package/dist/prosemirror/listRenderingAttrs.js +6 -11
  155. package/dist/prosemirror/numberedRefFields.js +9 -5
  156. package/dist/prosemirror/numberingAttr.d.ts +19 -1
  157. package/dist/prosemirror/numberingAttr.js +16 -2
  158. package/dist/prosemirror/paragraphIndentation.js +5 -2
  159. package/dist/prosemirror/paragraphMarkJoin.js +17 -3
  160. package/dist/prosemirror/paragraphPropertyCarry.js +5 -6
  161. package/dist/prosemirror/pluginKeyOwner.d.ts +13 -0
  162. package/dist/prosemirror/pluginKeyOwner.js +35 -0
  163. package/dist/prosemirror/plugins/aiCitationDecorations.d.ts +11 -4
  164. package/dist/prosemirror/plugins/aiCitationDecorations.js +16 -3
  165. package/dist/prosemirror/plugins/aiSuggestionDecorations.d.ts +11 -4
  166. package/dist/prosemirror/plugins/aiSuggestionDecorations.js +18 -3
  167. package/dist/prosemirror/plugins/anonymizationDecorations.d.ts +11 -11
  168. package/dist/prosemirror/plugins/anonymizationDecorations.js +23 -13
  169. package/dist/prosemirror/plugins/autocompleteSuggestion.d.ts +8 -2
  170. package/dist/prosemirror/plugins/autocompleteSuggestion.js +27 -5
  171. package/dist/prosemirror/plugins/contentControlWidgets.d.ts +8 -2
  172. package/dist/prosemirror/plugins/contentControlWidgets.js +4 -3
  173. package/dist/prosemirror/plugins/createDocScanPlugin.d.ts +6 -5
  174. package/dist/prosemirror/plugins/createDocScanPlugin.js +1 -1
  175. package/dist/prosemirror/plugins/documentNumbering.js +5 -3
  176. package/dist/prosemirror/plugins/documentStyleState.d.ts +8 -2
  177. package/dist/prosemirror/plugins/documentStyleState.js +2 -2
  178. package/dist/prosemirror/plugins/documentStyles.js +1 -1
  179. package/dist/prosemirror/plugins/selectionTracker.d.ts +8 -2
  180. package/dist/prosemirror/plugins/selectionTracker.js +4 -3
  181. package/dist/prosemirror/plugins/suggestionMode.d.ts +8 -2
  182. package/dist/prosemirror/plugins/suggestionMode.js +4 -3
  183. package/dist/prosemirror/plugins/templateDirectives.d.ts +8 -2
  184. package/dist/prosemirror/plugins/templateDirectives.js +19 -4
  185. package/dist/prosemirror/plugins/templatePreviewValues.d.ts +8 -2
  186. package/dist/prosemirror/plugins/templatePreviewValues.js +27 -5
  187. package/dist/prosemirror/plugins/templateSlashMenu.d.ts +8 -2
  188. package/dist/prosemirror/plugins/templateSlashMenu.js +23 -5
  189. package/dist/prosemirror/plugins/transactionInvariants.js +29 -5
  190. package/dist/prosemirror/schema/nodes.d.ts +2 -1
  191. package/dist/prosemirror/selectionState.js +5 -1
  192. package/dist/prosemirror/storyListNumbering.js +11 -12
  193. package/dist/prosemirror/styles/paragraphStyleCascade.js +2 -6
  194. package/dist/prosemirror/styles/resolvedStyleAttrs.d.ts +11 -4
  195. package/dist/prosemirror/styles/resolvedStyleAttrs.js +28 -18
  196. package/dist/prosemirror/yjsDocumentMetadata.d.ts +9 -3
  197. package/dist/prosemirror/yjsDocumentMetadata.js +42 -10
  198. package/dist/redline.d.ts +17 -1
  199. package/dist/redline.js +118 -57
  200. package/dist/server.d.ts +3 -3
  201. package/dist/server.js +2 -2
  202. package/dist/utils/fontLoader.d.ts +2 -2
  203. package/dist/utils/fontLoader.js +2 -7
  204. package/dist/utils/fontResolver.d.ts +7 -3
  205. package/dist/utils/fontResolver.js +6 -8
  206. package/dist/version-comparison.d.ts +1 -2
  207. package/dist/version-comparison.js +1 -2
  208. package/package.json +26 -9
@@ -1,8 +1,8 @@
1
1
  import { document_d_exports } from "../types/document.js";
2
- import { FolioContentBlock, FolioContentContainerPathEntry, FolioContentFormatRange, FolioContentIdStability, FolioContentInlineBooleanProperty, FolioContentInlineComparisonResult, FolioContentInlineFormatting, FolioContentInlineFormattingPatch, FolioContentLineSpacingRule, FolioContentParagraphAlignment, FolioContentParagraphKind, FolioContentParagraphSpacing, FolioContentRun, FolioContentSnapshot, FolioContentTableLocation } from "../compare/content-types.js";
3
- import { FolioAIBlock, FolioAIBlockAnchor, FolioAIBlockKind, FolioAIBlockPreviewRun, FolioAIBlockStructuralBoundary, FolioAIBlockTableLocation, FolioAIComment, FolioAIEditAppliedOperation, FolioAIEditApplyMode, FolioAIEditApplyResult, FolioAIEditNormalization, FolioAIEditNormalizationCode, FolioAIEditOperation, FolioAIEditPrecondition, FolioAIEditReviewMeta, FolioAIEditSeverity, FolioAIEditSkipReason, FolioAIEditSkippedOperation, FolioAIEditSnapshot, FolioAIInlineBooleanProperty, FolioAIInlineFormatting, FolioAIInlineFormattingPatch, FolioAIParagraphSpacing, FolioAISignatureParty } from "../ai-edits/types.js";
2
+ import { FolioContentBlock, FolioContentContainerPathEntry, FolioContentFormatRange, FolioContentIdStability, FolioContentInlineBooleanProperty, FolioContentInlineComparisonResult, FolioContentInlineFormatting, FolioContentInlineFormattingPatch, FolioContentLineSpacingRule, FolioContentParagraphAlignment, FolioContentParagraphKind, FolioContentParagraphSpacing, FolioContentRun, FolioContentSnapshot, FolioContentStatedNumbering, FolioContentTableLocation } from "../compare/content-types.js";
3
+ import { FolioAIBlock, FolioAIBlockAnchor, FolioAIBlockKind, FolioAIBlockPreviewRun, FolioAIBlockStructuralBoundary, FolioAIBlockTableLocation, FolioAIComment, FolioAIDiagnosticBlock, FolioAIEditAppliedOperation, FolioAIEditApplyMode, FolioAIEditApplyResult, FolioAIEditNormalization, FolioAIEditNormalizationCode, FolioAIEditOperation, FolioAIEditPrecondition, FolioAIEditReviewMeta, FolioAIEditSeverity, FolioAIEditSkipReason, FolioAIEditSkippedOperation, FolioAIEditSnapshot, FolioAIInlineBooleanProperty, FolioAIInlineFormatting, FolioAIInlineFormattingPatch, FolioAIParagraphBlock, FolioAIParagraphSpacing, FolioAISignatureParty } from "../ai-edits/types.js";
4
4
  import { WORD_DIFF_GRANULARITIES, WordDiffGranularity, WordDiffNormalization, WordDiffOptions, WordDiffSegment, diffWordSegments } from "../ai-edits/word-diff.js";
5
- import { FolioAIEditApplyOutcome, FolioRevisionStamp, FolioWordDiffOptions, applyFolioAIEditOperations } from "../ai-edits/apply.js";
5
+ import { FolioAIEditApplyOutcome, FolioRevisionStamp, FolioUndefinedReferencePolicy, FolioWordDiffOptions, applyFolioAIEditOperations } from "../ai-edits/apply.js";
6
6
  import { ApplyFolioDocumentOperationsOptions, FOLIO_DOCUMENT_OPERATION_BATCH_MODES, FOLIO_DOCUMENT_OPERATION_CONTRACT_VERSION, FOLIO_DOCUMENT_OPERATION_MODES, FOLIO_DOCUMENT_OPERATION_MODES_BY_TYPE, FOLIO_DOCUMENT_OPERATION_PRECONDITIONS, FOLIO_DOCUMENT_OPERATION_STORIES, FOLIO_DOCUMENT_OPERATION_TYPES, FOLIO_LINE_SPACING_RULE_VALUES, FOLIO_PARAGRAPH_ALIGNMENT_VALUES, FolioDocumentOperation, FolioDocumentOperationAffectedTarget, FolioDocumentOperationBatch, FolioDocumentOperationCapabilities, FolioDocumentOperationIssue, FolioDocumentOperationMode, FolioDocumentOperationPrecondition, FolioDocumentOperationReceipt, FolioDocumentOperationRecovery, FolioDocumentOperationResult, FolioDocumentOperationResultBase, FolioDocumentOperationStatus, FolioDocumentOperationStory, FolioDocumentOperationType, FolioDocumentOperationUndoFailureReason, FolioDocumentOperationUndoHandle, FolioDocumentOperationUndoResult, InvalidFolioDocumentOperationBatchError, UnsupportedFolioDocumentOperationVersionError, applyFolioDocumentOperations, assertSupportedFolioDocumentOperationVersion, getFolioDocumentOperationCapabilities, getFolioDocumentOperationIssues, getFolioDocumentOperationReceipts, isFolioDocumentOperationModeSupported, isSupportedFolioDocumentOperationVersion, parseFolioDocumentOperationBatch } from "../document-operations.js";
7
7
  import { createFolioAIEditSnapshot, hashFolioAIBlockText, isFolioAIContentBlock, normalizeFolioAIBlockText } from "../ai-edits/snapshot.js";
8
8
  import { DeriveBlockIdInput, FolioBlockId, currentFolioBlockId, deriveBlockId, getFolioParaIdFromBlockId, isFolioBlockId, isSequentialFolioBlockId } from "../types/block-id.js";
@@ -37,9 +37,9 @@ import { ImageMeta, ImageRef, MarkdownOptions, MarkdownResult } from "../markdow
37
37
  import { fromMarkdown } from "../markdown/fromMarkdown.js";
38
38
  import { toMarkdown, toMarkdownResult } from "../markdown/index.js";
39
39
  import { EmbeddedFont, EmbeddedFontParts, buildEmbeddedFontFamilyMap, extractEmbeddedFonts, getEmbeddedFontFaces, scopeEmbeddedFontFamily } from "../fonts/embeddedFonts.js";
40
- import { getGoogleFontsEnabled, setEmbeddedFontFamilyMap, setGoogleFontsEnabled } from "../utils/fontResolver.js";
40
+ import { getGoogleFontsEnabled, setGoogleFontsEnabled } from "../utils/fontResolver.js";
41
41
  import { FOLIO_YJS_ATTR_SCHEMA_VERSION, FolioYjsAttrSchemaVersion, FolioYjsAttrSchemaVersionError } from "../prosemirror/yjsDocumentMetadata.js";
42
42
  import { DOCX_CONFORMANCE_CLASSES } from "../index.js";
43
43
  type Document = document_d_exports.Document;
44
44
  type DocxConformanceClass = document_d_exports.DocxConformanceClass;
45
- export { type AIBarStatus, type AIChatMode, type AICitation, type AICitationRange, type AICitationSource, type AIGenerateInput, type AISuggestion, type AISuggestionApplyMode, type AISuggestionPreset, type AISuggestionSeverity, type AISuggestionStatus, type AcceptAutocompleteResult, type AnonymizationMatch, type AnonymizationTerm, type ApplyFolioDocumentOperationsOptions, type ApplyResult, type AutocompleteSuggestionPluginOptions, type AutocompleteSuggestionState, type AutocompleteSuggestionStatus, type AutocompleteTriggerCheck, type AutocompleteTriggerOptions, type AutocompleteTriggerSkipReason, type BlockRect, COMPARE_REVISION_FORMATS, COMPARE_UNSUPPORTED_REASONS, COMPARE_VERIFICATION_CAUSES, COMPARE_VERIFICATION_INVARIANTS, type CompareChange, type CompareChangeLocation, type CompareCompatibility, type CompareContentOptions, CompareDocxApplyError, type CompareDocxError, CompareDocxFinalParagraphMarkError, CompareDocxOperationLimitError, type CompareDocxOptions, CompareDocxParseError, CompareDocxRoundTripError, CompareDocxSerializeError, type CompareFolioRequirement, type CompareResult, type CompareRevisionFormat, type CompareUnsupportedPart, type CompareUnsupportedReason, type CompareVerification, type CompareVerificationCause, type CompareVerificationFailure, type CompareVerificationInvariant, type CreateEmptyDocumentOptions, DEFAULT_AI_SUGGESTION_PRESETS, DEFAULT_AUTOCOMPLETE_DEAD_ZONE_NODES, DEFAULT_OUTLINE_DEPTH, DOCUMENT_PRESET_VERSION, DOCUMENT_STYLE_SET_VERSION, DOCX_CONFORMANCE_CLASSES, DRAWING_SAFETY_CLASSES, type DeriveBlockIdInput, type DirectiveKind, type DirectiveRange, type Document, type DocumentPreset, type DocumentPropertiesOptions, type DocumentStyleCatalog, type DocumentStyleCatalogEntry, type DocumentStyleSet, type DocxCompatibility, type DocxCompatibilityContext, type DocxCompatibilityIssue, type DocxCompatibilityLocation, type DocxCompatibilityPart, type DocxConformanceClass, type DocxDrawingClassification, type DrawingSafetyClass, type EmbeddedFont, type EmbeddedFontParts, type ExtractDocumentStyleSetOptions, FOLIO_CONTENT_COMPARISON_LIMITS, FOLIO_DOCUMENT_OPERATION_BATCH_MODES, FOLIO_DOCUMENT_OPERATION_CONTRACT_VERSION, FOLIO_DOCUMENT_OPERATION_MODES, FOLIO_DOCUMENT_OPERATION_MODES_BY_TYPE, FOLIO_DOCUMENT_OPERATION_PRECONDITIONS, FOLIO_DOCUMENT_OPERATION_STORIES, FOLIO_DOCUMENT_OPERATION_TYPES, FOLIO_LINE_SPACING_RULE_VALUES, FOLIO_PARAGRAPH_ALIGNMENT_VALUES, FOLIO_YJS_ATTR_SCHEMA_VERSION, type FinalParagraphMarkRevision, type FolioAIBlock, type FolioAIBlockAnchor, type FolioAIBlockKind, type FolioAIBlockPreviewRun, type FolioAIBlockStructuralBoundary, type FolioAIBlockTableLocation, type FolioAIComment, type FolioAIEditAppliedOperation, type FolioAIEditApplyMode, type FolioAIEditApplyOutcome, type FolioAIEditApplyResult, type FolioAIEditNormalization, type FolioAIEditNormalizationCode, type FolioAIEditOperation, type FolioAIEditPrecondition, type FolioAIEditReviewMeta, type FolioAIEditSeverity, type FolioAIEditSkipReason, type FolioAIEditSkippedOperation, type FolioAIEditSnapshot, type FolioAIInlineBooleanProperty, type FolioAIInlineFormatting, type FolioAIInlineFormattingPatch, type FolioAIParagraphSpacing, type FolioAISignatureParty, type FolioBlockId, type FolioContentBlock, type FolioContentBlockProperty, type FolioContentComparison, type FolioContentComparisonError, type FolioContentComparisonEvent, type FolioContentComparisonLimit, FolioContentComparisonLimitError, type FolioContentContainerPathEntry, type FolioContentFormatRange, type FolioContentFormattingChange, type FolioContentIdStability, type FolioContentInlineBooleanProperty, type FolioContentInlineComparisonResult, type FolioContentInlineFormatting, type FolioContentInlineFormattingPatch, FolioContentInlinePresentationProjectionError, type FolioContentLineSpacingRule, type FolioContentParagraphAlignment, type FolioContentParagraphFormattingPatch, type FolioContentParagraphKind, type FolioContentParagraphSpacing, type FolioContentRun, type FolioContentSnapshot, type FolioContentStructuralChange, type FolioContentTableLocation, type FolioContentTextSegment, type FolioDocumentOperation, type FolioDocumentOperationAffectedTarget, type FolioDocumentOperationBatch, type FolioDocumentOperationCapabilities, type FolioDocumentOperationIssue, type FolioDocumentOperationMode, type FolioDocumentOperationPrecondition, type FolioDocumentOperationReceipt, type FolioDocumentOperationRecovery, type FolioDocumentOperationResult, type FolioDocumentOperationResultBase, type FolioDocumentOperationStatus, type FolioDocumentOperationStory, type FolioDocumentOperationType, type FolioDocumentOperationUndoFailureReason, type FolioDocumentOperationUndoHandle, type FolioDocumentOperationUndoResult, type FolioDocxCompatibilityHost, type FolioDocxCompatibilityProfile, type FolioRevisionStamp, type FolioWordDiffOptions, type FolioYjsAttrSchemaVersion, FolioYjsAttrSchemaVersionError, type ImageMeta, type ImageRef, type InspectDocxCompatibilityOptions, InvalidCompareDocxOptionsError, InvalidFolioContentComparisonError, InvalidFolioDocumentOperationBatchError, MAX_COMPARE_OPERATIONS, type MarkdownOptions, type MarkdownResult, type OutlineDepth, type PositionalText, type ResolvedAnchor, STELLA_STYLE_SET_NAME, type TemplatePreviewHiddenRange, type TemplatePreviewSpan, type TemplatePreviewValue, type TemplatePreviewValues, type TemplateSlashMenuKeyAction, type TemplateSlashMenuState, UnsupportedFolioDocumentOperationVersionError, WORD_DIFF_GRANULARITIES, type WordDiffGranularity, type WordDiffNormalization, type WordDiffOptions, type WordDiffSegment, acceptAutocompleteSuggestion, acceptAutocompleteWord, anonymizationDecorationsKey, appendAutocompleteToken, applyFolioAIEditOperations, applyFolioDocumentOperations, applySuggestions, assertSupportedFolioDocumentOperationVersion, autocompleteSuggestionKey, autocompleteSuggestionPlugin, buildEmbeddedFontFamilyMap, buildPositionalText, clearAutocompleteSuggestion, clearTemplateSlashMenu, compareContent, compareDocx, consumeTemplateSlashQuery, createAICitationDecorationsPlugin, createDocx, createEmptyDocument, createFolioAIEditSnapshot, createStellaStyleDocumentPreset, createStellaStyleSet, currentFolioBlockId, deriveBlockId, diffWordSegments, extractDocumentStyleSet, extractDocumentStyleSetFromDocx, extractEmbeddedFonts, filterHeadingsByDepth, finishAutocompleteSuggestion, fromMarkdown, getAnonymizationMatches, getAutocompleteSuggestion, getEmbeddedFontFaces, getFolioCaretViewportRect, getFolioDocumentOperationCapabilities, getFolioDocumentOperationIssues, getFolioDocumentOperationReceipts, getFolioParaIdFromBlockId, getFolioSelectionViewportRect, getGoogleFontsEnabled, getTemplateDirectives, getTemplateSlashMenu, hashFolioAIBlockText, inspectDocumentStyles, inspectDocumentStylesFromDocx, inspectDocxCompatibility, isFolioAIContentBlock, isFolioBlockId, isFolioDocumentOperationModeSupported, isSequentialFolioBlockId, isSuggestionStale, isSupportedFolioDocumentOperationVersion, mergeDocumentContent, normalizeFolioAIBlockText, parseFolioDocumentOperationBatch, resetTemplateSlashQuery, resolveSuggestionAnchor, scanDirectives, scopeEmbeddedFontFamily, scrollFolioPositionIntoView, setAICitationsMeta, setAISuggestionsMeta, setActiveCitationMeta, setAnonymizationTermsMeta, setEmbeddedFontFamilyMap, setFocusedSuggestionMeta, setGoogleFontsEnabled, setTemplatePreviewValues, shouldTriggerAutocomplete, startAutocompleteSuggestion, templateSlashMenuKey, toMarkdown, toMarkdownResult };
45
+ export { type AIBarStatus, type AIChatMode, type AICitation, type AICitationRange, type AICitationSource, type AIGenerateInput, type AISuggestion, type AISuggestionApplyMode, type AISuggestionPreset, type AISuggestionSeverity, type AISuggestionStatus, type AcceptAutocompleteResult, type AnonymizationMatch, type AnonymizationTerm, type ApplyFolioDocumentOperationsOptions, type ApplyResult, type AutocompleteSuggestionPluginOptions, type AutocompleteSuggestionState, type AutocompleteSuggestionStatus, type AutocompleteTriggerCheck, type AutocompleteTriggerOptions, type AutocompleteTriggerSkipReason, type BlockRect, COMPARE_REVISION_FORMATS, COMPARE_UNSUPPORTED_REASONS, COMPARE_VERIFICATION_CAUSES, COMPARE_VERIFICATION_INVARIANTS, type CompareChange, type CompareChangeLocation, type CompareCompatibility, type CompareContentOptions, CompareDocxApplyError, type CompareDocxError, CompareDocxFinalParagraphMarkError, CompareDocxOperationLimitError, type CompareDocxOptions, CompareDocxParseError, CompareDocxRoundTripError, CompareDocxSerializeError, type CompareFolioRequirement, type CompareResult, type CompareRevisionFormat, type CompareUnsupportedPart, type CompareUnsupportedReason, type CompareVerification, type CompareVerificationCause, type CompareVerificationFailure, type CompareVerificationInvariant, type CreateEmptyDocumentOptions, DEFAULT_AI_SUGGESTION_PRESETS, DEFAULT_AUTOCOMPLETE_DEAD_ZONE_NODES, DEFAULT_OUTLINE_DEPTH, DOCUMENT_PRESET_VERSION, DOCUMENT_STYLE_SET_VERSION, DOCX_CONFORMANCE_CLASSES, DRAWING_SAFETY_CLASSES, type DeriveBlockIdInput, type DirectiveKind, type DirectiveRange, type Document, type DocumentPreset, type DocumentPropertiesOptions, type DocumentStyleCatalog, type DocumentStyleCatalogEntry, type DocumentStyleSet, type DocxCompatibility, type DocxCompatibilityContext, type DocxCompatibilityIssue, type DocxCompatibilityLocation, type DocxCompatibilityPart, type DocxConformanceClass, type DocxDrawingClassification, type DrawingSafetyClass, type EmbeddedFont, type EmbeddedFontParts, type ExtractDocumentStyleSetOptions, FOLIO_CONTENT_COMPARISON_LIMITS, FOLIO_DOCUMENT_OPERATION_BATCH_MODES, FOLIO_DOCUMENT_OPERATION_CONTRACT_VERSION, FOLIO_DOCUMENT_OPERATION_MODES, FOLIO_DOCUMENT_OPERATION_MODES_BY_TYPE, FOLIO_DOCUMENT_OPERATION_PRECONDITIONS, FOLIO_DOCUMENT_OPERATION_STORIES, FOLIO_DOCUMENT_OPERATION_TYPES, FOLIO_LINE_SPACING_RULE_VALUES, FOLIO_PARAGRAPH_ALIGNMENT_VALUES, FOLIO_YJS_ATTR_SCHEMA_VERSION, type FinalParagraphMarkRevision, type FolioAIBlock, type FolioAIBlockAnchor, type FolioAIBlockKind, type FolioAIBlockPreviewRun, type FolioAIBlockStructuralBoundary, type FolioAIBlockTableLocation, type FolioAIComment, type FolioAIDiagnosticBlock, type FolioAIEditAppliedOperation, type FolioAIEditApplyMode, type FolioAIEditApplyOutcome, type FolioAIEditApplyResult, type FolioAIEditNormalization, type FolioAIEditNormalizationCode, type FolioAIEditOperation, type FolioAIEditPrecondition, type FolioAIEditReviewMeta, type FolioAIEditSeverity, type FolioAIEditSkipReason, type FolioAIEditSkippedOperation, type FolioAIEditSnapshot, type FolioAIInlineBooleanProperty, type FolioAIInlineFormatting, type FolioAIInlineFormattingPatch, type FolioAIParagraphBlock, type FolioAIParagraphSpacing, type FolioAISignatureParty, type FolioBlockId, type FolioContentBlock, type FolioContentBlockProperty, type FolioContentComparison, type FolioContentComparisonError, type FolioContentComparisonEvent, type FolioContentComparisonLimit, FolioContentComparisonLimitError, type FolioContentContainerPathEntry, type FolioContentFormatRange, type FolioContentFormattingChange, type FolioContentIdStability, type FolioContentInlineBooleanProperty, type FolioContentInlineComparisonResult, type FolioContentInlineFormatting, type FolioContentInlineFormattingPatch, FolioContentInlinePresentationProjectionError, type FolioContentLineSpacingRule, type FolioContentParagraphAlignment, type FolioContentParagraphFormattingPatch, type FolioContentParagraphKind, type FolioContentParagraphSpacing, type FolioContentRun, type FolioContentSnapshot, type FolioContentStatedNumbering, type FolioContentStructuralChange, type FolioContentTableLocation, type FolioContentTextSegment, type FolioDocumentOperation, type FolioDocumentOperationAffectedTarget, type FolioDocumentOperationBatch, type FolioDocumentOperationCapabilities, type FolioDocumentOperationIssue, type FolioDocumentOperationMode, type FolioDocumentOperationPrecondition, type FolioDocumentOperationReceipt, type FolioDocumentOperationRecovery, type FolioDocumentOperationResult, type FolioDocumentOperationResultBase, type FolioDocumentOperationStatus, type FolioDocumentOperationStory, type FolioDocumentOperationType, type FolioDocumentOperationUndoFailureReason, type FolioDocumentOperationUndoHandle, type FolioDocumentOperationUndoResult, type FolioDocxCompatibilityHost, type FolioDocxCompatibilityProfile, type FolioRevisionStamp, type FolioUndefinedReferencePolicy, type FolioWordDiffOptions, type FolioYjsAttrSchemaVersion, FolioYjsAttrSchemaVersionError, type ImageMeta, type ImageRef, type InspectDocxCompatibilityOptions, InvalidCompareDocxOptionsError, InvalidFolioContentComparisonError, InvalidFolioDocumentOperationBatchError, MAX_COMPARE_OPERATIONS, type MarkdownOptions, type MarkdownResult, type OutlineDepth, type PositionalText, type ResolvedAnchor, STELLA_STYLE_SET_NAME, type TemplatePreviewHiddenRange, type TemplatePreviewSpan, type TemplatePreviewValue, type TemplatePreviewValues, type TemplateSlashMenuKeyAction, type TemplateSlashMenuState, UnsupportedFolioDocumentOperationVersionError, WORD_DIFF_GRANULARITIES, type WordDiffGranularity, type WordDiffNormalization, type WordDiffOptions, type WordDiffSegment, acceptAutocompleteSuggestion, acceptAutocompleteWord, anonymizationDecorationsKey, appendAutocompleteToken, applyFolioAIEditOperations, applyFolioDocumentOperations, applySuggestions, assertSupportedFolioDocumentOperationVersion, autocompleteSuggestionKey, autocompleteSuggestionPlugin, buildEmbeddedFontFamilyMap, buildPositionalText, clearAutocompleteSuggestion, clearTemplateSlashMenu, compareContent, compareDocx, consumeTemplateSlashQuery, createAICitationDecorationsPlugin, createDocx, createEmptyDocument, createFolioAIEditSnapshot, createStellaStyleDocumentPreset, createStellaStyleSet, currentFolioBlockId, deriveBlockId, diffWordSegments, extractDocumentStyleSet, extractDocumentStyleSetFromDocx, extractEmbeddedFonts, filterHeadingsByDepth, finishAutocompleteSuggestion, fromMarkdown, getAnonymizationMatches, getAutocompleteSuggestion, getEmbeddedFontFaces, getFolioCaretViewportRect, getFolioDocumentOperationCapabilities, getFolioDocumentOperationIssues, getFolioDocumentOperationReceipts, getFolioParaIdFromBlockId, getFolioSelectionViewportRect, getGoogleFontsEnabled, getTemplateDirectives, getTemplateSlashMenu, hashFolioAIBlockText, inspectDocumentStyles, inspectDocumentStylesFromDocx, inspectDocxCompatibility, isFolioAIContentBlock, isFolioBlockId, isFolioDocumentOperationModeSupported, isSequentialFolioBlockId, isSuggestionStale, isSupportedFolioDocumentOperationVersion, mergeDocumentContent, normalizeFolioAIBlockText, parseFolioDocumentOperationBatch, resetTemplateSlashQuery, resolveSuggestionAnchor, scanDirectives, scopeEmbeddedFontFamily, scrollFolioPositionIntoView, setAICitationsMeta, setAISuggestionsMeta, setActiveCitationMeta, setAnonymizationTermsMeta, setFocusedSuggestionMeta, setGoogleFontsEnabled, setTemplatePreviewValues, shouldTriggerAutocomplete, startAutocompleteSuggestion, templateSlashMenuKey, toMarkdown, toMarkdownResult };
@@ -32,7 +32,7 @@ import { STELLA_STYLE_SET_NAME, createStellaStyleDocumentPreset, createStellaSty
32
32
  import { DOCUMENT_PRESET_VERSION, DOCUMENT_STYLE_SET_VERSION } from "../style-sets/types.js";
33
33
  import { currentFolioBlockId, deriveBlockId, getFolioParaIdFromBlockId, isFolioBlockId, isSequentialFolioBlockId } from "../types/block-id.js";
34
34
  import { createEmptyDocument } from "../utils/createDocument.js";
35
- import { getGoogleFontsEnabled, setEmbeddedFontFamilyMap, setGoogleFontsEnabled } from "../utils/fontResolver.js";
35
+ import { getGoogleFontsEnabled, setGoogleFontsEnabled } from "../utils/fontResolver.js";
36
36
  import { mergeDocumentContent } from "../utils/mergeDocumentContent.js";
37
37
  import { DEFAULT_OUTLINE_DEPTH, filterHeadingsByDepth } from "../utils/outlineDepth.js";
38
- export { COMPARE_REVISION_FORMATS, COMPARE_UNSUPPORTED_REASONS, COMPARE_VERIFICATION_CAUSES, COMPARE_VERIFICATION_INVARIANTS, CompareDocxApplyError, CompareDocxFinalParagraphMarkError, CompareDocxOperationLimitError, CompareDocxParseError, CompareDocxRoundTripError, CompareDocxSerializeError, DEFAULT_AI_SUGGESTION_PRESETS, DEFAULT_AUTOCOMPLETE_DEAD_ZONE_NODES, DEFAULT_OUTLINE_DEPTH, DOCUMENT_PRESET_VERSION, DOCUMENT_STYLE_SET_VERSION, DOCX_CONFORMANCE_CLASSES, DRAWING_SAFETY_CLASSES, FOLIO_CONTENT_COMPARISON_LIMITS, FOLIO_DOCUMENT_OPERATION_BATCH_MODES, FOLIO_DOCUMENT_OPERATION_CONTRACT_VERSION, FOLIO_DOCUMENT_OPERATION_MODES, FOLIO_DOCUMENT_OPERATION_MODES_BY_TYPE, FOLIO_DOCUMENT_OPERATION_PRECONDITIONS, FOLIO_DOCUMENT_OPERATION_STORIES, FOLIO_DOCUMENT_OPERATION_TYPES, FOLIO_LINE_SPACING_RULE_VALUES, FOLIO_PARAGRAPH_ALIGNMENT_VALUES, FOLIO_YJS_ATTR_SCHEMA_VERSION, FolioContentComparisonLimitError, FolioContentInlinePresentationProjectionError, FolioYjsAttrSchemaVersionError, InvalidCompareDocxOptionsError, InvalidFolioContentComparisonError, InvalidFolioDocumentOperationBatchError, MAX_COMPARE_OPERATIONS, STELLA_STYLE_SET_NAME, UnsupportedFolioDocumentOperationVersionError, WORD_DIFF_GRANULARITIES, acceptAutocompleteSuggestion, acceptAutocompleteWord, anonymizationDecorationsKey, appendAutocompleteToken, applyFolioAIEditOperations, applyFolioDocumentOperations, applySuggestions, assertSupportedFolioDocumentOperationVersion, autocompleteSuggestionKey, autocompleteSuggestionPlugin, buildEmbeddedFontFamilyMap, buildPositionalText, clearAutocompleteSuggestion, clearTemplateSlashMenu, compareContent, compareDocx, consumeTemplateSlashQuery, createAICitationDecorationsPlugin, createDocx, createEmptyDocument, createFolioAIEditSnapshot, createStellaStyleDocumentPreset, createStellaStyleSet, currentFolioBlockId, deriveBlockId, diffWordSegments, extractDocumentStyleSet, extractDocumentStyleSetFromDocx, extractEmbeddedFonts, filterHeadingsByDepth, finishAutocompleteSuggestion, fromMarkdown, getAnonymizationMatches, getAutocompleteSuggestion, getEmbeddedFontFaces, getFolioCaretViewportRect, getFolioDocumentOperationCapabilities, getFolioDocumentOperationIssues, getFolioDocumentOperationReceipts, getFolioParaIdFromBlockId, getFolioSelectionViewportRect, getGoogleFontsEnabled, getTemplateDirectives, getTemplateSlashMenu, hashFolioAIBlockText, inspectDocumentStyles, inspectDocumentStylesFromDocx, inspectDocxCompatibility, isFolioAIContentBlock, isFolioBlockId, isFolioDocumentOperationModeSupported, isSequentialFolioBlockId, isSuggestionStale, isSupportedFolioDocumentOperationVersion, mergeDocumentContent, normalizeFolioAIBlockText, parseFolioDocumentOperationBatch, resetTemplateSlashQuery, resolveSuggestionAnchor, scanDirectives, scopeEmbeddedFontFamily, scrollFolioPositionIntoView, setAICitationsMeta, setAISuggestionsMeta, setActiveCitationMeta, setAnonymizationTermsMeta, setEmbeddedFontFamilyMap, setFocusedSuggestionMeta, setGoogleFontsEnabled, setTemplatePreviewValues, shouldTriggerAutocomplete, startAutocompleteSuggestion, templateSlashMenuKey, toMarkdown, toMarkdownResult };
38
+ export { COMPARE_REVISION_FORMATS, COMPARE_UNSUPPORTED_REASONS, COMPARE_VERIFICATION_CAUSES, COMPARE_VERIFICATION_INVARIANTS, CompareDocxApplyError, CompareDocxFinalParagraphMarkError, CompareDocxOperationLimitError, CompareDocxParseError, CompareDocxRoundTripError, CompareDocxSerializeError, DEFAULT_AI_SUGGESTION_PRESETS, DEFAULT_AUTOCOMPLETE_DEAD_ZONE_NODES, DEFAULT_OUTLINE_DEPTH, DOCUMENT_PRESET_VERSION, DOCUMENT_STYLE_SET_VERSION, DOCX_CONFORMANCE_CLASSES, DRAWING_SAFETY_CLASSES, FOLIO_CONTENT_COMPARISON_LIMITS, FOLIO_DOCUMENT_OPERATION_BATCH_MODES, FOLIO_DOCUMENT_OPERATION_CONTRACT_VERSION, FOLIO_DOCUMENT_OPERATION_MODES, FOLIO_DOCUMENT_OPERATION_MODES_BY_TYPE, FOLIO_DOCUMENT_OPERATION_PRECONDITIONS, FOLIO_DOCUMENT_OPERATION_STORIES, FOLIO_DOCUMENT_OPERATION_TYPES, FOLIO_LINE_SPACING_RULE_VALUES, FOLIO_PARAGRAPH_ALIGNMENT_VALUES, FOLIO_YJS_ATTR_SCHEMA_VERSION, FolioContentComparisonLimitError, FolioContentInlinePresentationProjectionError, FolioYjsAttrSchemaVersionError, InvalidCompareDocxOptionsError, InvalidFolioContentComparisonError, InvalidFolioDocumentOperationBatchError, MAX_COMPARE_OPERATIONS, STELLA_STYLE_SET_NAME, UnsupportedFolioDocumentOperationVersionError, WORD_DIFF_GRANULARITIES, acceptAutocompleteSuggestion, acceptAutocompleteWord, anonymizationDecorationsKey, appendAutocompleteToken, applyFolioAIEditOperations, applyFolioDocumentOperations, applySuggestions, assertSupportedFolioDocumentOperationVersion, autocompleteSuggestionKey, autocompleteSuggestionPlugin, buildEmbeddedFontFamilyMap, buildPositionalText, clearAutocompleteSuggestion, clearTemplateSlashMenu, compareContent, compareDocx, consumeTemplateSlashQuery, createAICitationDecorationsPlugin, createDocx, createEmptyDocument, createFolioAIEditSnapshot, createStellaStyleDocumentPreset, createStellaStyleSet, currentFolioBlockId, deriveBlockId, diffWordSegments, extractDocumentStyleSet, extractDocumentStyleSetFromDocx, extractEmbeddedFonts, filterHeadingsByDepth, finishAutocompleteSuggestion, fromMarkdown, getAnonymizationMatches, getAutocompleteSuggestion, getEmbeddedFontFaces, getFolioCaretViewportRect, getFolioDocumentOperationCapabilities, getFolioDocumentOperationIssues, getFolioDocumentOperationReceipts, getFolioParaIdFromBlockId, getFolioSelectionViewportRect, getGoogleFontsEnabled, getTemplateDirectives, getTemplateSlashMenu, hashFolioAIBlockText, inspectDocumentStyles, inspectDocumentStylesFromDocx, inspectDocxCompatibility, isFolioAIContentBlock, isFolioBlockId, isFolioDocumentOperationModeSupported, isSequentialFolioBlockId, isSuggestionStale, isSupportedFolioDocumentOperationVersion, mergeDocumentContent, normalizeFolioAIBlockText, parseFolioDocumentOperationBatch, resetTemplateSlashQuery, resolveSuggestionAnchor, scanDirectives, scopeEmbeddedFontFamily, scrollFolioPositionIntoView, setAICitationsMeta, setAISuggestionsMeta, setActiveCitationMeta, setAnonymizationTermsMeta, setFocusedSuggestionMeta, setGoogleFontsEnabled, setTemplatePreviewValues, shouldTriggerAutocomplete, startAutocompleteSuggestion, templateSlashMenuKey, toMarkdown, toMarkdownResult };
@@ -2,8 +2,8 @@ import { foldListNumberFields, planParagraphListNumberFold, unfoldedListNumberCo
2
2
  import { computeListMarker } from "../docx/listMarkerComputation.js";
3
3
  import { listRenderingDefinitionsMatch } from "../docx/listRendering.js";
4
4
  import { computeListRendering, getCachedNumberingMap } from "../docx/numberingParser.js";
5
- import { mergeParagraphNumbering, paragraphNumberingReferenceId, sameStatedParagraphNumbering } from "../docx/numberingReference.js";
6
5
  import { assignParagraphIndentationProjection, cloneParagraphWithPropertySource, paragraphFormattingWithAuthoredIndentation, sameParagraphIndentationProjection } from "../docx/paragraphPropertySource.js";
6
+ import { effectiveParagraphNumberingReference, paragraphNumberingSourcesFromBoundary } from "../prosemirror/numberingAttr.js";
7
7
  import { paragraphIndentationFromFormatting } from "../prosemirror/paragraphIndentation.js";
8
8
  import { listIndentationProvenancePatch } from "../prosemirror/styles/resolvedStyleAttrs.js";
9
9
  import { createStyleResolver } from "../prosemirror/styles/styleResolver.js";
@@ -35,16 +35,8 @@ const normalizeCanonicalListRendering = (document) => {
35
35
  snapshot: paragraphFormattingWithAuthoredIndentation(paragraph)
36
36
  });
37
37
  const formatting = paragraph.formatting;
38
- const numPr = mergeParagraphNumbering(formatting?.numPrFromStyle, formatting?.numPr);
39
- if (paragraph.listRendering === void 0 && formatting?.numPrFromStyle === void 0 && (numPr?.kind !== "reference" || numbering === null)) {
40
- computeListMarker(paragraph, counters);
41
- return paragraph;
42
- }
43
- const definition = numPr?.kind === "reference" && numbering !== null ? computeListRendering(numPr, numbering) : null;
44
- const cached = paragraph.listRendering;
45
- const rendering = definition !== null && cached !== void 0 && listRenderingDefinitionsMatch(cached, definition) ? { ...cached } : definition;
46
38
  const next = cloneParagraphWithPropertySource(paragraph, {});
47
- if (formatting?.numPrFromStyle !== void 0 && formatting.numPr !== void 0 && paragraphNumberingReferenceId(numPr) !== paragraphNumberingReferenceId(formatting.numPrFromStyle)) {
39
+ if (formatting?.numPrFromStyle !== void 0 && (formatting.numPr?.kind === "reference" || formatting.numPr?.kind === "none")) {
48
40
  next.formatting = { ...formatting };
49
41
  delete next.formatting.numPrFromStyle;
50
42
  inverse.push({
@@ -54,18 +46,17 @@ const normalizeCanonicalListRendering = (document) => {
54
46
  patch: { numPrFromStyle: formatting.numPrFromStyle }
55
47
  });
56
48
  }
57
- if (formatting?.numPrFromStyle !== void 0 && numPr?.kind === "reference" && !sameStatedParagraphNumbering(formatting.numPr, numPr)) {
58
- next.formatting = {
59
- ...next.formatting,
60
- numPr
61
- };
62
- inverse.push({
63
- type: DOCUMENT_OP_TYPES.SET_PARAGRAPH_PROPS,
64
- story,
65
- blockId: paragraph.paraId ?? panic("Canonical numbering normalization requires paragraph identities."),
66
- patch: { numPr: formatting.numPr ?? null }
67
- });
49
+ const numPr = effectiveParagraphNumberingReference(paragraphNumberingSourcesFromBoundary({
50
+ numPr: next.formatting?.numPr,
51
+ numPrFromStyle: next.formatting?.numPrFromStyle
52
+ }));
53
+ if (paragraph.listRendering === void 0 && formatting?.numPrFromStyle === void 0 && (numPr?.kind !== "reference" || numbering === null)) {
54
+ computeListMarker(paragraph, counters);
55
+ return paragraph;
68
56
  }
57
+ const definition = numPr?.kind === "reference" && numbering !== null ? computeListRendering(numPr, numbering) : null;
58
+ const cached = paragraph.listRendering;
59
+ const rendering = definition !== null && cached !== void 0 && listRenderingDefinitionsMatch(cached, definition) ? { ...cached } : definition;
69
60
  const authoredFormatting = paragraphFormattingWithAuthoredIndentation(next);
70
61
  assignParagraphIndentationProjection({
71
62
  paragraph: next,
@@ -73,7 +64,7 @@ const normalizeCanonicalListRendering = (document) => {
73
64
  inherited: paragraphIndentationFromFormatting(listIndentationProvenancePatch({
74
65
  direct: paragraphIndentationFromFormatting(authoredFormatting),
75
66
  styleFormatting: styles.resolveParagraphStyle(next.formatting?.styleId).paragraphFormatting,
76
- numberingSource: next.formatting?.numPrFromStyle === void 0 ? "paragraph" : "style",
67
+ numberingSource: next.formatting?.numPr?.kind === "reference" || next.formatting?.numPrFromStyle === void 0 ? "paragraph" : "style",
77
68
  numPr: numPr?.kind === "reference" ? {
78
69
  numId: numPr.numId,
79
70
  ilvl: numPr.ilvl ?? 0
@@ -193,7 +193,7 @@ var CanonicalPublicOperations = class {
193
193
  skip(operation.id, "unsupportedMode", "Canonical pending suggestions are unavailable.");
194
194
  continue;
195
195
  }
196
- if (options.tableTemplates !== void 0 || options.undefinedStyles === "keep") {
196
+ if (options.tableTemplates !== void 0 || options.undefinedReferences === "keep") {
197
197
  refusals.set(operation.id, { gap: CANONICAL_GAP.publicUnsupportedInline });
198
198
  skip(operation.id, "unsupportedBlock", "This canonical compiler does not support the supplied execution options.");
199
199
  continue;
@@ -1,7 +1,7 @@
1
1
  import { splitsGraphemeCluster, splitsSurrogatePair } from "../ai-edits/character-boundaries.js";
2
2
  import { rangedCommentIds, visitCommentMarkers } from "../docx/commentAnchorIndex.js";
3
3
  import { cloneDocumentWithParagraphPropertySources, copyDocumentParagraphPropertySourceContract, copyParagraphPropertySource, restoreParagraphIndentationProjection } from "../docx/paragraphPropertySource.js";
4
- import { canonicalSelectionRange } from "../prosemirror/canonicalSelectionRange.js";
4
+ import { canonicalContentPosition, canonicalSelectionRange } from "../prosemirror/canonicalSelectionRange.js";
5
5
  import { collectPairedBookmarkIds, footnoteToProseDoc, headerFooterToProseDoc, toProseDoc } from "../prosemirror/conversion/toProseDoc.js";
6
6
  import { markPackageChange } from "../prosemirror/extensions/features/ParagraphChangeTrackerExtension.js";
7
7
  import { runFormattingPatchFromMarks } from "../prosemirror/runFormattingFromMarks.js";
@@ -147,6 +147,7 @@ var CanonicalProjection = class {
147
147
  }
148
148
  addressAt(position) {
149
149
  if (!Number.isInteger(position)) return refuse("The input position is not an integer.");
150
+ position = canonicalContentPosition(this.doc, position);
150
151
  const paragraph = this.paragraphs.find(({ start, node }) => position >= start && position <= start + node.content.size);
151
152
  if (paragraph === void 0) return refuse("The input is outside a plain paragraph.");
152
153
  const relative = position - paragraph.start;
@@ -169,7 +170,7 @@ var CanonicalProjection = class {
169
170
  if (paragraph === void 0) panic("Input lost its paragraph.");
170
171
  let destination = position;
171
172
  paragraph.node.forEach((node, start) => {
172
- if (node.marks.some((mark) => mark.type.name === "deletion") && position > paragraph.start + start && position < paragraph.start + start + node.nodeSize) destination = paragraph.start + start + node.nodeSize;
173
+ if (node.marks.some((mark) => mark.type.name === "deletion") && destination >= paragraph.start + start && destination < paragraph.start + start + node.nodeSize) destination = paragraph.start + start + node.nodeSize;
173
174
  });
174
175
  return destination === position ? address : this.addressAt(destination);
175
176
  }
@@ -1,12 +1,13 @@
1
1
  import { BUILT_IN_STYLE_NAME, createBuiltInStyleIndex } from "../docx/builtInStyles.js";
2
2
  import { getCachedNumberingMap, numberingLevelUsesBulletMarker } from "../docx/numberingParser.js";
3
3
  import { listRequestsForMarker } from "../prosemirror/listAutoformatMarkers.js";
4
+ import { effectiveParagraphNumbering, paragraphNumberingSourcesFromBoundary } from "../prosemirror/numberingAttr.js";
4
5
  import { CANONICAL_GAP } from "../types/canonicalCapabilities.js";
5
6
  import { collectHeadings } from "../utils/headingCollector.js";
6
7
  import { CanonicalSessionError } from "./canonicalSession.js";
7
- import { Result } from "better-result";
8
+ import { Result, panic } from "better-result";
8
9
  import { headingOutlineLevel, paragraphNumberingReference } from "@stll/docx-core/model";
9
- import { OP_STORIES } from "@stll/docx-core/ops";
10
+ import { OP_STORIES, editorParagraphGroups, editorPositionAtPhysicalPosition, physicalPositionAtEditorOffset } from "@stll/docx-core/ops";
10
11
  //#region src/controller/canonicalStructure.ts
11
12
  const DEFAULT_TOC_PAGE_WIDTH_TWIPS = 12240;
12
13
  const DEFAULT_TOC_MARGIN_TWIPS = 1440;
@@ -27,6 +28,10 @@ const selectedParagraphs = (session, state) => {
27
28
  });
28
29
  return session.document.package.document.content.filter((paragraph) => paragraph.type === "paragraph" && ids.has(paragraph.paraId ?? ""));
29
30
  };
31
+ const effectiveNumbering = (paragraph) => effectiveParagraphNumbering(paragraphNumberingSourcesFromBoundary({
32
+ numPr: paragraph?.formatting?.numPr,
33
+ numPrFromStyle: paragraph?.formatting?.numPrFromStyle
34
+ }));
30
35
  const numberingIntent = (session, paragraphs, request) => {
31
36
  const definitions = session.document.package.numbering;
32
37
  const map = definitions === void 0 ? void 0 : getCachedNumberingMap(definitions);
@@ -184,8 +189,8 @@ const prepareCanonicalCommands = (session, state, commands) => {
184
189
  case "toggleList": {
185
190
  const definitions = session.document.package.numbering;
186
191
  const map = definitions === void 0 ? void 0 : getCachedNumberingMap(definitions);
187
- if (!(paragraphs.length > 0 && paragraphs.every(({ formatting }) => {
188
- const numPr = formatting?.numPr;
192
+ if (!(paragraphs.length > 0 && paragraphs.every((paragraph) => {
193
+ const numPr = effectiveNumbering(paragraph);
189
194
  return numPr?.kind === "reference" && numberingLevelUsesBulletMarker(map?.getLevel(numPr.numId, numPr.ilvl ?? 0)) === (command.kind === "bullet");
190
195
  }))) {
191
196
  intents.push(numberingIntent(session, paragraphs, { kind: command.kind === "bullet" ? "bullet" : "numbered" }));
@@ -215,7 +220,7 @@ const prepareCanonicalCommands = (session, state, commands) => {
215
220
  break;
216
221
  case "changeListLevel":
217
222
  for (const paragraph of paragraphs) {
218
- const numPr = paragraph.formatting?.numPr;
223
+ const numPr = effectiveNumbering(paragraph);
219
224
  if (numPr?.kind !== "reference") continue;
220
225
  const at = {
221
226
  story: OP_STORIES.MAIN,
@@ -227,30 +232,46 @@ const prepareCanonicalCommands = (session, state, commands) => {
227
232
  intents.push({
228
233
  type: "formatParagraph",
229
234
  at,
230
- patch: { numPr: level < 0 ? { kind: "none" } : paragraphNumberingReference({
231
- numId: numPr.numId,
232
- ilvl: level
233
- }) }
235
+ patch: { numPr: (() => {
236
+ if (level < 0) return { kind: "none" };
237
+ if (paragraph.formatting?.numPr?.kind !== "reference" && paragraph.formatting?.numPrFromStyle?.kind === "reference") return {
238
+ kind: "levelOnly",
239
+ ilvl: level
240
+ };
241
+ return paragraphNumberingReference({
242
+ numId: numPr.numId,
243
+ ilvl: level
244
+ });
245
+ })() }
234
246
  });
235
247
  }
236
248
  break;
237
249
  case "restartNumbering":
238
250
  case "continueNumbering": {
239
251
  const source = paragraphs.at(0);
240
- const numPr = source?.formatting?.numPr;
252
+ const numPr = effectiveNumbering(source);
241
253
  const definitions = session.document.package.numbering;
242
254
  if (source === void 0 || numPr?.kind !== "reference" || definitions === void 0) return noChange("Numbering changes require a list paragraph.");
243
255
  const body = session.document.package.document.content;
244
256
  const index = body.findIndex((item) => item === source);
245
- const affected = body.slice(index).filter((item) => item.type === "paragraph" && item.formatting?.numPr?.kind === "reference" && item.formatting.numPr.numId === numPr.numId);
257
+ const affected = body.slice(index).filter((item) => {
258
+ if (item.type !== "paragraph") return false;
259
+ const effective = effectiveNumbering(item);
260
+ return effective?.kind === "reference" && effective.numId === numPr.numId;
261
+ });
246
262
  let targetId;
247
263
  let target;
248
264
  if (command.type === "continueNumbering") {
249
265
  const map = getCachedNumberingMap(definitions);
250
266
  const bullet = numberingLevelUsesBulletMarker(map.getLevel(numPr.numId, numPr.ilvl ?? 0));
251
- const earlier = body.slice(0, index).findLast((item) => item.type === "paragraph" && item.formatting?.numPr?.kind === "reference" && item.formatting.numPr.numId !== numPr.numId && numberingLevelUsesBulletMarker(map.getLevel(item.formatting.numPr.numId, item.formatting.numPr.ilvl ?? 0)) === bullet);
252
- if (earlier?.type !== "paragraph" || earlier.formatting?.numPr?.kind !== "reference") return noChange("There is no preceding compatible list.");
253
- targetId = earlier.formatting.numPr.numId;
267
+ const earlier = body.slice(0, index).findLast((item) => {
268
+ if (item.type !== "paragraph") return false;
269
+ const effective = effectiveNumbering(item);
270
+ return effective?.kind === "reference" && effective.numId !== numPr.numId && numberingLevelUsesBulletMarker(map.getLevel(effective.numId, effective.ilvl ?? 0)) === bullet;
271
+ });
272
+ const earlierNumbering = earlier?.type === "paragraph" ? effectiveNumbering(earlier) : void 0;
273
+ if (earlierNumbering?.kind !== "reference") return noChange("There is no preceding compatible list.");
274
+ targetId = earlierNumbering.numId;
254
275
  target = {
255
276
  type: "existing",
256
277
  numId: targetId
@@ -278,14 +299,17 @@ const prepareCanonicalCommands = (session, state, commands) => {
278
299
  intents.push({
279
300
  type: "setList",
280
301
  target,
281
- items: affected.map((paragraph) => ({
282
- at: {
283
- story: OP_STORIES.MAIN,
284
- blockId: paragraph.paraId ?? "",
285
- offset: 0
286
- },
287
- ilvl: paragraph.formatting?.numPr?.kind === "reference" ? paragraph.formatting.numPr.ilvl ?? 0 : 0
288
- }))
302
+ items: affected.map((paragraph) => {
303
+ const effective = effectiveNumbering(paragraph);
304
+ return {
305
+ at: {
306
+ story: OP_STORIES.MAIN,
307
+ blockId: paragraph.paraId ?? "",
308
+ offset: 0
309
+ },
310
+ ilvl: effective?.kind === "reference" ? effective.ilvl ?? 0 : 0
311
+ };
312
+ })
289
313
  });
290
314
  break;
291
315
  }
@@ -298,17 +322,20 @@ const prepareCanonicalAutoformat = (session, state, { from, to, text }) => {
298
322
  if (text !== " " || from !== to) return void 0;
299
323
  const at = session.projection.addressAt(from);
300
324
  if (at.isErr()) return void 0;
301
- const address = session.projection.paragraph(at.value.blockId);
302
- if (address === void 0 || address.source.formatting?.numPr?.kind === "reference") return void 0;
325
+ const logical = editorPositionAtPhysicalPosition(session.document, at.value);
326
+ const address = session.projection.paragraph(logical.blockId);
327
+ if (address === void 0 || effectiveNumbering(address.source)?.kind === "reference") return void 0;
328
+ const group = editorParagraphGroups(session.document, logical.story).find(({ blockId }) => blockId === logical.blockId);
329
+ if (group === void 0) panic("Autoformat lost its logical paragraph");
303
330
  const source = address.source;
304
- const prefix = address.text.slice(0, at.value.offset) + text;
331
+ const prefix = group.text.slice(0, logical.offset) + text;
305
332
  const requests = listRequestsForMarker(prefix);
306
333
  const heading = /^(?<hashes>#{1,6}) $/u.exec(prefix)?.groups?.["hashes"];
307
334
  if (requests === null && heading === void 0) return void 0;
308
- const start = {
309
- ...at.value,
335
+ const start = physicalPositionAtEditorOffset(session.document, {
336
+ ...logical,
310
337
  offset: 0
311
- };
338
+ });
312
339
  const request = requests?.at(0);
313
340
  const styleId = `Heading${heading?.length ?? 1}`;
314
341
  if (request === void 0 && !session.hasStyle(styleId)) return void 0;
@@ -227,7 +227,7 @@ function addLayoutFontFamilyNameFace(faces, family, descriptor, fontAlternates)
227
227
  * the painter and the measurer put in `ctx.font` and `style.fontFamily`.
228
228
  */
229
229
  function resolvedStackFamilies(family, alternate) {
230
- const { cssFallback } = resolveFontFamily(family, alternate);
230
+ const { cssFallback } = resolveFontFamily(family, { alternateFontName: alternate });
231
231
  return parseFontFamilyList(cssFallback).filter((name) => !CSS_GENERIC_FONT_FAMILIES.has(name));
232
232
  }
233
233
  function addLayoutFontFace(faces, family, descriptor) {
@@ -42,7 +42,7 @@ const formatEndnoteTexts = (numbers, formatNumber) => {
42
42
  for (const [id, displayNumber] of numbers) texts.set(id, formatNumber(displayNumber));
43
43
  return texts;
44
44
  };
45
- const sameMeasureInputs = (left, right) => left.styles === right.styles && left.theme === right.theme && left.defaultTabStop === right.defaultTabStop && left.pageContentHeight === right.pageContentHeight && left.fontSet === right.fontSet && left.fontAlternates.size === right.fontAlternates.size && [...left.fontAlternates].every(([name, alternate]) => right.fontAlternates.get(name) === alternate) && left.markupView === right.markupView;
45
+ const sameMeasureInputs = (left, right) => left.embeddedFontFamilyMap === right.embeddedFontFamilyMap && left.styles === right.styles && left.theme === right.theme && left.defaultTabStop === right.defaultTabStop && left.pageContentHeight === right.pageContentHeight && left.fontSet === right.fontSet && left.fontAlternates.size === right.fontAlternates.size && [...left.fontAlternates].every(([name, alternate]) => right.fontAlternates.get(name) === alternate) && left.markupView === right.markupView;
46
46
  /**
47
47
  * The range an incremental pass re-measures, or `null` for a full measure: the
48
48
  * committed measures must come from the same measure inputs, and the range is
@@ -154,7 +154,9 @@ function runLayoutPipelineMeasured(deps, state, options) {
154
154
  let phaseStartedAt = performance.now();
155
155
  const pageContentHeight = pageSize.h - margins.top - margins.bottom;
156
156
  const fontAlternates = buildFontAlternates(document?.package.fontTable);
157
+ const embeddedFontFamilies = session.embeddedFontFamilyMap ? { embeddedFontFamilyMap: session.embeddedFontFamilyMap } : {};
157
158
  const measureInputs = {
159
+ ...embeddedFontFamilies,
158
160
  styles,
159
161
  theme: _theme,
160
162
  defaultTabStop,
@@ -164,6 +166,7 @@ function runLayoutPipelineMeasured(deps, state, options) {
164
166
  markupView
165
167
  };
166
168
  const flowOpts = {
169
+ ...embeddedFontFamilies,
167
170
  pageContentHeight,
168
171
  fontAlternates,
169
172
  ...styles ? { styles } : {},
@@ -248,6 +251,7 @@ function runLayoutPipelineMeasured(deps, state, options) {
248
251
  ...flowOpts.defaultSize === void 0 ? {} : { defaultSize: flowOpts.defaultSize },
249
252
  ..._theme !== void 0 ? { theme: _theme } : {},
250
253
  fontAlternates,
254
+ ...embeddedFontFamilies,
251
255
  measureBlocks: hfMeasureBlocks,
252
256
  ...defaultTabStop !== void 0 ? { defaultTabStopTwips: defaultTabStop } : {},
253
257
  ...flowOpts.lineBreakRules ? { lineBreakRules: flowOpts.lineBreakRules } : {},
@@ -380,6 +384,7 @@ function runLayoutPipelineMeasured(deps, state, options) {
380
384
  if (_theme !== void 0) noteOptions.theme = _theme;
381
385
  if (document?.package.numbering !== void 0) noteOptions.numbering = document.package.numbering;
382
386
  noteOptions.fontAlternates = fontAlternates;
387
+ if (session.embeddedFontFamilyMap) noteOptions.embeddedFontFamilyMap = session.embeddedFontFamilyMap;
383
388
  if (defaultTabStop !== void 0) noteOptions.defaultTabStopTwips = defaultTabStop;
384
389
  if (flowOpts.lineBreakRules) noteOptions.lineBreakRules = flowOpts.lineBreakRules;
385
390
  if (flowOpts.justificationCompatibility) noteOptions.justificationCompatibility = flowOpts.justificationCompatibility;
@@ -579,6 +584,7 @@ function runLayoutPipelineMeasured(deps, state, options) {
579
584
  outcome.blockLookup = blockLookup;
580
585
  const footnotesByPage = hasFootnotes ? buildFootnoteRenderItems(pageFootnoteMap, footnoteContentMap, document) : void 0;
581
586
  const renderOpts = {
587
+ ...embeddedFontFamilies,
582
588
  pageGap,
583
589
  showShadow: true,
584
590
  blockLookup,
@@ -23,6 +23,7 @@ type LayoutTemplatePreview = {
23
23
  * that changes how text measures brings new styles or font alternates.
24
24
  */
25
25
  type LayoutMeasureInputs = {
26
+ embeddedFontFamilyMap?: ReadonlyMap<string, string>;
26
27
  styles: document_d_exports.StyleDefinitions | null | undefined;
27
28
  theme: document_d_exports.Theme | null | undefined;
28
29
  defaultTabStop: number | undefined;
@@ -37,6 +38,7 @@ type LayoutMeasureInputs = {
37
38
  markupView: DisplayMode;
38
39
  };
39
40
  type LayoutSession = {
41
+ embeddedFontFamilyMap?: ReadonlyMap<string, string>;
40
42
  artifacts: LayoutArtifacts | null;
41
43
  lastEditorState: EditorState | null;
42
44
  lastPmDoc: EditorState["doc"] | null;
@@ -1,6 +1,6 @@
1
1
  import { ptToPx } from "../../layout-engine/measure/measureHelpers.js";
2
2
  import { getFontMetrics } from "../../layout-engine/measure/measureProvider.js";
3
- import { resolveFontFamily } from "../../utils/fontResolver.js";
3
+ import { parseFontFamilyList, resolveFontFamily } from "../../utils/fontResolver.js";
4
4
  //#region src/display-list/build/fontTable.ts
5
5
  const CSS_NORMAL_WEIGHT = 400;
6
6
  const CSS_BOLD_WEIGHT = 700;
@@ -12,7 +12,6 @@ const GENERIC_FAMILIES = {
12
12
  fantasy: "fantasy"
13
13
  };
14
14
  const DEFAULT_GENERIC = "sans-serif";
15
- const splitFallbackStack = (cssFallback) => cssFallback.split(",").map((entry) => entry.trim().replace(/^["']|["']$/gu, ""));
16
15
  /**
17
16
  * The category `resolveFontFamily` chose. It is the last CSS generic in the
18
17
  * stack it built, which is where `detectFontCategory` puts it; reading it back
@@ -30,8 +29,8 @@ const faceKey = (family, weight, italic) => `${family.toLowerCase()} ${weight} $
30
29
  * Package faces keyed by every family name a run can resolve to.
31
30
  *
32
31
  * `resolveFontFamily` substitutes the scoped `folio-embedded-{nonce}-{name}`
33
- * family only while the document's embedded-family map is installed; a build
34
- * that never installed it resolves the same run to the authored name. Both
32
+ * family when the run carries its document-owned embedded-family map; a build
33
+ * without that context resolves the same run to the authored name. Both
35
34
  * names therefore key the same face, and the bytes are interned by id so one
36
35
  * face's binary appears once however many names reach it.
37
36
  */
@@ -64,7 +63,10 @@ var FontTable = class {
64
63
  this.embeddedByKey = indexEmbeddedFonts(embeddedFonts);
65
64
  }
66
65
  intern({ fontFamily, alternateFontFamily, bold, italic, measureStyle }) {
67
- const stack = splitFallbackStack(resolveFontFamily(fontFamily, alternateFontFamily).cssFallback);
66
+ const stack = parseFontFamilyList(resolveFontFamily(fontFamily, {
67
+ alternateFontName: alternateFontFamily,
68
+ embeddedFontFamilyMap: measureStyle.embeddedFontFamilyMap
69
+ }).cssFallback);
68
70
  const family = stack.at(0) ?? fontFamily;
69
71
  const weight = bold ? CSS_BOLD_WEIGHT : CSS_NORMAL_WEIGHT;
70
72
  const isItalic = italic === true;
@@ -12,6 +12,7 @@ import { PageComposer } from "./regions.js";
12
12
  * caller's `documentFeatures` shows the document had one.
13
13
  */
14
14
  type PageFurnitureInputs = {
15
+ embeddedFontFamilyMap?: ReadonlyMap<string, string>;
15
16
  /**
16
17
  * `w:pgBorders` for the section. Absent: no border is painted, and the gap is
17
18
  * reported unless `documentFeatures` says the document has none.
@@ -61,6 +61,7 @@ const paintPageFurniture = ({ page, furniture, context }) => {
61
61
  const watermark = !suppliesWatermark(furniture) || selected.watermark === void 0 ? [] : paintWatermark({
62
62
  page,
63
63
  watermark: selected.watermark,
64
+ ...furniture.embeddedFontFamilyMap ? { embeddedFontFamilyMap: furniture.embeddedFontFamilyMap } : {},
64
65
  ...furniture.watermarkImageSrc === void 0 ? {} : { imageSrc: furniture.watermarkImageSrc },
65
66
  context
66
67
  });
@@ -4,12 +4,13 @@ import { DisplayPrimitive } from "../types.js";
4
4
  import { BuildContext } from "./buildContext.js";
5
5
  //#region src/display-list/build/watermarkPrimitives.d.ts
6
6
  type WatermarkPaintOptions = {
7
+ embeddedFontFamilyMap?: ReadonlyMap<string, string> | undefined;
7
8
  readonly page: Page;
8
9
  readonly watermark: document_d_exports.Watermark;
9
10
  /** Resolved `data:` source for a picture watermark; absent means unresolved. */
10
11
  readonly imageSrc?: string;
11
12
  readonly context: BuildContext;
12
13
  };
13
- declare const paintWatermark: ({ page, watermark, imageSrc, context }: WatermarkPaintOptions) => readonly DisplayPrimitive[];
14
+ declare const paintWatermark: ({ page, watermark, imageSrc, context, embeddedFontFamilyMap }: WatermarkPaintOptions) => readonly DisplayPrimitive[];
14
15
  //#endregion
15
16
  export { WatermarkPaintOptions, paintWatermark };
@@ -29,9 +29,10 @@ const TEXT_DEFAULT_OPACITY = .5;
29
29
  const TEXT_DIAGONAL_DEGREES = -45;
30
30
  const PICTURE_NATIVE_SCALE = 1;
31
31
  const PICTURE_WASHOUT_OPACITY = .18;
32
- const paintTextWatermark = (watermark, page, context) => {
32
+ const paintTextWatermark = ({ watermark, page, context, embeddedFontFamilyMap }) => {
33
33
  if (watermark.text.length === 0) return [];
34
34
  const style = {
35
+ ...embeddedFontFamilyMap ? { embeddedFontFamilyMap } : {},
35
36
  fontFamily: watermark.font ?? TEXT_DEFAULT_FONT,
36
37
  fontSize: pxToPt(TEXT_FONT_SIZE_PX),
37
38
  bold: true
@@ -129,9 +130,14 @@ const paintPictureWatermark = (watermark, page, imageSrc, context) => {
129
130
  opacity: watermark.washout === false ? 1 : PICTURE_WASHOUT_OPACITY
130
131
  }];
131
132
  };
132
- const paintWatermark = ({ page, watermark, imageSrc, context }) => {
133
+ const paintWatermark = ({ page, watermark, imageSrc, context, embeddedFontFamilyMap }) => {
133
134
  switch (watermark.kind) {
134
- case "text": return paintTextWatermark(watermark, page, context);
135
+ case "text": return paintTextWatermark({
136
+ watermark,
137
+ page,
138
+ context,
139
+ embeddedFontFamilyMap
140
+ });
135
141
  case "picture": return paintPictureWatermark(watermark, page, imageSrc, context);
136
142
  default: return [];
137
143
  }
@@ -17,6 +17,7 @@ const isPageRendererName = (value) => value === PAGE_RENDERER.legacy || value ==
17
17
  * which header a page carries.
18
18
  */
19
19
  const displayListFurnitureFrom = (options) => ({
20
+ ...options.embeddedFontFamilyMap ? { embeddedFontFamilyMap: options.embeddedFontFamilyMap } : {},
20
21
  ...options.pageBorders === void 0 ? {} : { pageBorders: options.pageBorders },
21
22
  ...options.theme === void 0 ? {} : { theme: options.theme },
22
23
  ...options.watermark === void 0 ? {} : { watermark: options.watermark },
@@ -1,7 +1,7 @@
1
1
  import { document_d_exports } from "./types/document.js";
2
2
  import { FolioTableTemplates } from "./ai-edits/table-template.js";
3
3
  import { FolioAIEditAppliedOperation, FolioAIEditApplyMode, FolioAIEditNormalization, FolioAIEditOperation, FolioAIEditPrecondition, FolioAIEditSkippedOperation, FolioAIEditSnapshot, FolioAITextRangeHandle } from "./ai-edits/types.js";
4
- import { FolioAIEditView, FolioReplacementBackground, FolioRevisionStamp, FolioUndefinedStylePolicy, FolioWordDiffOptions } from "./ai-edits/apply.js";
4
+ import { FolioAIEditView, FolioReplacementBackground, FolioRevisionStamp, FolioUndefinedReferencePolicy, FolioWordDiffOptions } from "./ai-edits/apply.js";
5
5
  //#region src/document-operations.d.ts
6
6
  declare const FOLIO_DOCUMENT_OPERATION_CONTRACT_VERSION: 1;
7
7
  /** Direct paragraph-alignment values accepted by the operation contract. */
@@ -298,14 +298,9 @@ type ApplyFolioDocumentOperationsOptions = {
298
298
  * revised document — keeps them instead.
299
299
  */
300
300
  replacementBackground?: FolioReplacementBackground;
301
- /**
302
- * What an operation naming a paragraph style the document does not define
303
- * does. Refusing it (`missingStyle`) is the default; a caller copying the
304
- * style references of another document — a comparison reproducing the
305
- * revised one — keeps them instead.
306
- */
307
- undefinedStyles?: FolioUndefinedStylePolicy;
301
+ /** Required policy for undefined style and numbering references. */
302
+ undefinedReferences: FolioUndefinedReferencePolicy;
308
303
  };
309
- declare const applyFolioDocumentOperations: ({ view, snapshot, batch, story, author, createCommentId, createUndoHandle, revisionStamp, wordDiff, tableTemplates, replacementBackground, undefinedStyles }: ApplyFolioDocumentOperationsOptions) => FolioDocumentOperationResult;
304
+ declare const applyFolioDocumentOperations: ({ view, snapshot, batch, story, author, createCommentId, createUndoHandle, revisionStamp, wordDiff, tableTemplates, replacementBackground, undefinedReferences }: ApplyFolioDocumentOperationsOptions) => FolioDocumentOperationResult;
310
305
  //#endregion
311
306
  export { ApplyFolioDocumentOperationsOptions, FOLIO_DOCUMENT_OPERATION_BATCH_MODES, FOLIO_DOCUMENT_OPERATION_BATCH_PRECONDITIONS, FOLIO_DOCUMENT_OPERATION_CONTRACT_VERSION, FOLIO_DOCUMENT_OPERATION_KEYS_BY_TYPE, FOLIO_DOCUMENT_OPERATION_MODES, FOLIO_DOCUMENT_OPERATION_MODES_BY_TYPE, FOLIO_DOCUMENT_OPERATION_PRECONDITIONS, FOLIO_DOCUMENT_OPERATION_STORIES, FOLIO_DOCUMENT_OPERATION_TYPES, FOLIO_LINE_SPACING_RULE_VALUES, FOLIO_PAGE_BREAK_CLEAR_VALUES, FOLIO_PARAGRAPH_ALIGNMENT_VALUES, FolioDocumentOperation, FolioDocumentOperationAffectedTarget, FolioDocumentOperationBatch, FolioDocumentOperationBatchPrecondition, FolioDocumentOperationCapabilities, FolioDocumentOperationIssue, FolioDocumentOperationMode, FolioDocumentOperationPrecondition, FolioDocumentOperationQueuedOperation, FolioDocumentOperationReceipt, FolioDocumentOperationRecovery, FolioDocumentOperationResult, FolioDocumentOperationResultBase, FolioDocumentOperationStatus, FolioDocumentOperationStory, FolioDocumentOperationType, FolioDocumentOperationUndoFailureReason, FolioDocumentOperationUndoHandle, FolioDocumentOperationUndoResult, InvalidFolioDocumentOperationBatchError, UnsupportedFolioDocumentOperationVersionError, applyFolioDocumentOperations, assertSupportedFolioDocumentOperationVersion, getFolioDocumentOperationCapabilities, getFolioDocumentOperationIssues, getFolioDocumentOperationReceipts, getFolioDocumentOperationReceiptsForStory, isFolioDocumentOperationModeSupported, isSupportedFolioDocumentOperationVersion, parseFolioDocumentOperationBatch };