@stll/folio-core 0.7.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -0
- package/dist/ai-edits/apply.js +18 -4
- package/dist/ai-edits/blockRange.d.ts +13 -2
- package/dist/ai-edits/blockRange.js +23 -2
- package/dist/ai-edits/headless.d.ts +31 -4
- package/dist/ai-edits/headless.js +148 -35
- package/dist/ai-edits/index.d.ts +6 -4
- package/dist/ai-edits/index.js +4 -1
- package/dist/ai-edits/scoped-reading.d.ts +9 -0
- package/dist/ai-edits/scoped-reading.js +60 -0
- package/dist/ai-edits/snapshot.js +53 -7
- package/dist/ai-edits/types.d.ts +46 -3
- package/dist/compat/eigenpal.d.ts +8 -3
- package/dist/compat/eigenpal.js +7 -2
- package/dist/controller/fontReadiness.d.ts +29 -0
- package/dist/controller/fontReadiness.js +139 -0
- package/dist/controller/latestRequestGate.d.ts +13 -0
- package/dist/controller/latestRequestGate.js +16 -0
- package/dist/controller/layoutPipeline.js +88 -10
- package/dist/document-operations.d.ts +10 -3
- package/dist/document-operations.js +29 -14
- package/dist/docx/blockContentParser.js +53 -10
- package/dist/docx/commentParser.js +1 -1
- package/dist/docx/compatibility.d.ts +30 -2
- package/dist/docx/compatibility.js +118 -39
- package/dist/docx/conformance.d.ts +6 -0
- package/dist/docx/conformance.js +18 -0
- package/dist/docx/encryption/agileDecryption.js +1 -1
- package/dist/docx/encryption/encryptionInfo.js +1 -1
- package/dist/docx/encryption/openEncryptedDocx.js +1 -1
- package/dist/docx/ensureParaIds.d.ts +29 -0
- package/dist/docx/ensureParaIds.js +423 -0
- package/dist/docx/fontTableParser.d.ts +6 -0
- package/dist/docx/fontTableParser.js +72 -0
- package/dist/docx/groupDrawingParser.js +7 -2
- package/dist/docx/headerFooterParser.js +1 -1
- package/dist/docx/normalizeBaseDirection.js +1 -1
- package/dist/docx/numberingParser.js +2 -0
- package/dist/docx/paragraphParser.js +21 -1
- package/dist/docx/paragraphTextBoxEnrichment.js +141 -2
- package/dist/docx/parser.d.ts +1 -1
- package/dist/docx/parser.js +14 -9
- package/dist/docx/rezip.js +70 -5
- package/dist/docx/runConsolidator.js +4 -0
- package/dist/docx/runParser.js +19 -1
- package/dist/docx/selectiveSave.js +3 -3
- package/dist/docx/selectiveXmlPatch.d.ts +10 -1
- package/dist/docx/selectiveXmlPatch.js +1 -1
- package/dist/docx/serializer/fontTableSerializer.d.ts +6 -0
- package/dist/docx/serializer/fontTableSerializer.js +26 -0
- package/dist/docx/serializer/headerFooterSerializer.js +1 -1
- package/dist/docx/serializer/paragraphSerializer.js +8 -0
- package/dist/docx/serializer/runSerializer.js +14 -2
- package/dist/docx/serializer/settingsSerializer.d.ts +6 -0
- package/dist/docx/serializer/settingsSerializer.js +16 -0
- package/dist/docx/serializer/stylesSerializer.d.ts +6 -0
- package/dist/docx/serializer/stylesSerializer.js +56 -0
- package/dist/docx/serializer/tableSerializer.js +29 -26
- package/dist/docx/serializer/themeSerializer.d.ts +6 -0
- package/dist/docx/serializer/themeSerializer.js +36 -0
- package/dist/docx/settingsParser.js +46 -0
- package/dist/docx/styleParser.js +26 -1
- package/dist/docx/tableParser.js +19 -1
- package/dist/docx/textBoxParser.js +6 -1
- package/dist/docx/vmlImageParser.js +146 -1
- package/dist/i18n/messages/catalogs.gen.d.ts +5916 -5916
- package/dist/i18n/messages/catalogs.gen.js +5910 -5910
- package/dist/index.d.ts +8 -3
- package/dist/index.js +7 -2
- package/dist/layout-bridge/convert/footnoteLayout.d.ts +3 -0
- package/dist/layout-bridge/convert/footnoteLayout.js +3 -1
- package/dist/layout-bridge/convert/headerFooterLayout.d.ts +3 -0
- package/dist/layout-bridge/convert/headerFooterLayout.js +22 -3
- package/dist/layout-bridge/convert/paragraphFrames.d.ts +7 -0
- package/dist/layout-bridge/convert/paragraphFrames.js +136 -0
- package/dist/layout-bridge/convert/toFlowBlocks.d.ts +14 -2
- package/dist/layout-bridge/convert/toFlowBlocks.js +93 -17
- package/dist/layout-bridge/engine/hitTest.js +2 -1
- package/dist/layout-bridge/engine/measuring/index.d.ts +2 -1
- package/dist/layout-bridge/engine/measuring/index.js +2 -1
- package/dist/layout-bridge/engine/selectionRects.js +2 -1
- package/dist/layout-engine/headerFooterRefs.d.ts +7 -0
- package/dist/layout-engine/headerFooterRefs.js +40 -0
- package/dist/layout-engine/index.d.ts +3 -2
- package/dist/layout-engine/index.js +68 -106
- package/dist/layout-engine/measure/cache.js +11 -3
- package/dist/layout-engine/measure/font-metrics.worker.js +1 -0
- package/dist/layout-engine/measure/index.d.ts +2 -1
- package/dist/layout-engine/measure/index.js +2 -1
- package/dist/layout-engine/measure/lineBreakProvider.d.ts +33 -0
- package/dist/layout-engine/measure/lineBreakProvider.js +252 -0
- package/dist/layout-engine/measure/lineBreaks.d.ts +7 -2
- package/dist/layout-engine/measure/lineBreaks.js +11 -18
- package/dist/layout-engine/measure/listMarkerWidth.d.ts +4 -1
- package/dist/layout-engine/measure/listMarkerWidth.js +33 -8
- package/dist/layout-engine/measure/measureBlocks.d.ts +4 -2
- package/dist/layout-engine/measure/measureBlocks.js +138 -86
- package/dist/layout-engine/measure/measureContainer.js +32 -9
- package/dist/layout-engine/measure/measureHelpers.js +5 -2
- package/dist/layout-engine/measure/measureParagraph.js +346 -74
- package/dist/layout-engine/measure/measureTypes.d.ts +2 -1
- package/dist/layout-engine/measure/measureWorker.d.ts +2 -2
- package/dist/layout-engine/measure/measureWorker.js +8 -19
- package/dist/layout-engine/measure/measureWorkerProtocol.d.ts +3 -14
- package/dist/layout-engine/measure/tableCellFloating.d.ts +10 -3
- package/dist/layout-engine/measure/tableCellFloating.js +37 -29
- package/dist/layout-engine/measure/tableCellFlow.d.ts +27 -0
- package/dist/layout-engine/measure/tableCellFlow.js +73 -0
- package/dist/layout-engine/measure/tableCellGrid.d.ts +15 -0
- package/dist/layout-engine/measure/tableCellGrid.js +62 -0
- package/dist/layout-engine/measure/textBoxParagraphLayout.d.ts +18 -0
- package/dist/layout-engine/measure/textBoxParagraphLayout.js +32 -0
- package/dist/layout-engine/measure/textMeasurementPolicy.d.ts +18 -0
- package/dist/layout-engine/measure/textMeasurementPolicy.js +24 -0
- package/dist/layout-engine/paginator.d.ts +2 -1
- package/dist/layout-engine/paginator.js +7 -6
- package/dist/layout-engine/paragraphFrame.d.ts +22 -0
- package/dist/layout-engine/paragraphFrame.js +17 -0
- package/dist/layout-engine/paragraphSequence.d.ts +7 -0
- package/dist/layout-engine/paragraphSequence.js +25 -0
- package/dist/layout-engine/paragraphSpacing.d.ts +17 -0
- package/dist/layout-engine/paragraphSpacing.js +30 -0
- package/dist/layout-engine/renderedBreakReconciliation.d.ts +63 -0
- package/dist/layout-engine/renderedBreakReconciliation.js +86 -0
- package/dist/layout-engine/tableRowBreak.d.ts +5 -2
- package/dist/layout-engine/tableRowBreak.js +62 -29
- package/dist/layout-engine/types.d.ts +54 -12
- package/dist/layout-engine/types.js +15 -2
- package/dist/layout-painter/anchoredImagePosition.d.ts +23 -0
- package/dist/layout-painter/anchoredImagePosition.js +95 -0
- package/dist/layout-painter/borderStroke.d.ts +23 -0
- package/dist/layout-painter/borderStroke.js +39 -0
- package/dist/layout-painter/renderImage.d.ts +5 -4
- package/dist/layout-painter/renderImage.js +18 -4
- package/dist/layout-painter/renderPage.d.ts +2 -27
- package/dist/layout-painter/renderPage.js +15 -101
- package/dist/layout-painter/renderParagraph.js +45 -26
- package/dist/layout-painter/renderTable.d.ts +2 -0
- package/dist/layout-painter/renderTable.js +257 -47
- package/dist/layout-painter/renderTextBox.js +17 -7
- package/dist/managers/DocumentLoaderManager.d.ts +1 -1
- package/dist/managers/DocumentLoaderManager.js +2 -2
- package/dist/paged-layout/sectionBlockWidths.d.ts +3 -0
- package/dist/paged-layout/sectionBlockWidths.js +9 -0
- package/dist/paged-layout/sectionGeometry.js +1 -1
- package/dist/prosemirror/attrs/index.d.ts +4 -2
- package/dist/prosemirror/attrs/index.js +32 -2
- package/dist/prosemirror/commands/propertyChangeScope.js +1 -1
- package/dist/prosemirror/conversion/fromProseDoc.js +35 -18
- package/dist/prosemirror/conversion/toProseDoc.js +73 -37
- package/dist/prosemirror/extensions/StarterKit.js +2 -0
- package/dist/prosemirror/extensions/core/ParagraphExtension.js +8 -2
- package/dist/prosemirror/extensions/features/AutoBidiDetectionExtension.js +1 -1
- package/dist/prosemirror/extensions/features/ListExtension.js +2 -0
- package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.js +68 -16
- package/dist/prosemirror/extensions/marks/FootnoteRefExtension.js +1 -0
- package/dist/prosemirror/extensions/marks/HighlightExtension.js +1 -1
- package/dist/prosemirror/extensions/marks/LanguageExtension.d.ts +7 -0
- package/dist/prosemirror/extensions/marks/LanguageExtension.js +30 -0
- package/dist/prosemirror/extensions/marks/RunShadingExtension.js +1 -1
- package/dist/prosemirror/extensions/marks/TextColorExtension.js +1 -1
- package/dist/prosemirror/extensions/marks/TrackedChangeExtensions.js +1 -1
- package/dist/prosemirror/extensions/marks/markUtils.js +12 -0
- package/dist/prosemirror/extensions/nodes/ImageExtension.js +2 -1
- package/dist/prosemirror/extensions/nodes/TableExtension.js +4 -2
- package/dist/prosemirror/extensions/nodes/TextBoxExtension.d.ts +2 -1
- package/dist/prosemirror/extensions/nodes/TextBoxExtension.js +7 -0
- package/dist/prosemirror/schema/index.d.ts +2 -2
- package/dist/prosemirror/schema/marks.d.ts +6 -1
- package/dist/prosemirror/schema/nodes.d.ts +16 -12
- package/dist/prosemirror/styles/resolvedStyleAttrs.js +2 -0
- package/dist/prosemirror/utils/tabCalculator.d.ts +3 -1
- package/dist/prosemirror/utils/tabCalculator.js +12 -10
- package/dist/prosemirror/validation.js +4 -1
- package/dist/redline.js +13 -3
- package/dist/server.d.ts +9 -4
- package/dist/server.js +7 -2
- package/dist/style-sets/extract.d.ts +35 -0
- package/dist/style-sets/extract.js +123 -0
- package/dist/style-sets/stellaStyle.d.ts +13 -0
- package/dist/style-sets/stellaStyle.js +516 -0
- package/dist/style-sets/types.d.ts +31 -0
- package/dist/style-sets/types.js +5 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/utils/createDocument.d.ts +12 -2
- package/dist/utils/createDocument.js +55 -36
- package/dist/utils/fontResolver.js +6 -6
- package/dist/utils/formatToStyle.js +1 -1
- package/dist/utils/hexId.d.ts +8 -1
- package/dist/utils/hexId.js +11 -3
- package/dist/utils/paragraphFormattingMerge.d.ts +14 -3
- package/dist/utils/paragraphFormattingMerge.js +14 -4
- package/package.json +5 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { FolioAIBlock, FolioAIBlockAnchor, FolioAIBlockKind, FolioAIBlockPreviewRun, FolioAIComment, FolioAIEditAppliedOperation, FolioAIEditApplyMode, FolioAIEditApplyResult, FolioAIEditOperation, FolioAIEditPrecondition, FolioAIEditReviewMeta, FolioAIEditSeverity, FolioAIEditSkipReason, FolioAIEditSkippedOperation, FolioAIEditSnapshot, FolioAISignatureParty } from "./ai-edits/types.js";
|
|
2
2
|
import { applyFolioAIEditOperations } from "./ai-edits/apply.js";
|
|
3
3
|
import { document_d_exports } from "./types/document.js";
|
|
4
|
-
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, FolioDocumentOperation, FolioDocumentOperationAffectedTarget, FolioDocumentOperationBatch, FolioDocumentOperationCapabilities, FolioDocumentOperationIssue, FolioDocumentOperationMode, FolioDocumentOperationPrecondition, FolioDocumentOperationReceipt, FolioDocumentOperationRecovery, FolioDocumentOperationResult, FolioDocumentOperationStatus, FolioDocumentOperationType, FolioDocumentOperationUndoFailureReason, FolioDocumentOperationUndoHandle, FolioDocumentOperationUndoResult, InvalidFolioDocumentOperationBatchError, UnsupportedFolioDocumentOperationVersionError, applyFolioDocumentOperations, assertSupportedFolioDocumentOperationVersion, getFolioDocumentOperationCapabilities, getFolioDocumentOperationIssues, getFolioDocumentOperationReceipts, isFolioDocumentOperationModeSupported, isSupportedFolioDocumentOperationVersion, parseFolioDocumentOperationBatch } from "./document-operations.js";
|
|
4
|
+
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, FolioDocumentOperation, FolioDocumentOperationAffectedTarget, FolioDocumentOperationBatch, FolioDocumentOperationCapabilities, FolioDocumentOperationIssue, FolioDocumentOperationMode, FolioDocumentOperationPrecondition, FolioDocumentOperationReceipt, FolioDocumentOperationRecovery, FolioDocumentOperationResult, FolioDocumentOperationStatus, FolioDocumentOperationStory, FolioDocumentOperationType, FolioDocumentOperationUndoFailureReason, FolioDocumentOperationUndoHandle, FolioDocumentOperationUndoResult, InvalidFolioDocumentOperationBatchError, UnsupportedFolioDocumentOperationVersionError, applyFolioDocumentOperations, assertSupportedFolioDocumentOperationVersion, getFolioDocumentOperationCapabilities, getFolioDocumentOperationIssues, getFolioDocumentOperationReceipts, isFolioDocumentOperationModeSupported, isSupportedFolioDocumentOperationVersion, parseFolioDocumentOperationBatch } from "./document-operations.js";
|
|
5
5
|
import { createFolioAIEditSnapshot, hashFolioAIBlockText, normalizeFolioAIBlockText } from "./ai-edits/snapshot.js";
|
|
6
6
|
import { DeriveBlockIdInput, FolioBlockId, deriveBlockId, getFolioParaIdFromBlockId, isFolioBlockId, isSequentialFolioBlockId } from "./types/block-id.js";
|
|
7
7
|
import { WordDiffSegment, diffWordSegments } from "./ai-edits/word-diff.js";
|
|
@@ -9,9 +9,12 @@ import { AIBarStatus, AIChatMode, AICitation, AICitationSource, AIGenerateInput,
|
|
|
9
9
|
import { ApplyResult, applySuggestions } from "./ai-suggestions/apply.js";
|
|
10
10
|
import { ResolvedAnchor, isSuggestionStale, resolveSuggestionAnchor } from "./ai-suggestions/conflict.js";
|
|
11
11
|
import { PositionalText, buildPositionalText } from "./ai-suggestions/text-positions.js";
|
|
12
|
+
import { DOCUMENT_PRESET_VERSION, DOCUMENT_STYLE_SET_VERSION, DocumentPreset, DocumentStyleSet } from "./style-sets/types.js";
|
|
12
13
|
import { CreateEmptyDocumentOptions, createEmptyDocument } from "./utils/createDocument.js";
|
|
14
|
+
import { DocumentStyleCatalog, DocumentStyleCatalogEntry, ExtractDocumentStyleSetOptions, extractDocumentStyleSet, extractDocumentStyleSetFromDocx, inspectDocumentStyles, inspectDocumentStylesFromDocx } from "./style-sets/extract.js";
|
|
15
|
+
import { STELLA_STYLE_SET_NAME, createStellaStyleDocumentPreset, createStellaStyleSet } from "./style-sets/stellaStyle.js";
|
|
13
16
|
import { createDocx } from "./docx/rezip.js";
|
|
14
|
-
import { DocxCompatibility } from "./docx/compatibility.js";
|
|
17
|
+
import { DocxCompatibility, DocxCompatibilityContext, DocxCompatibilityIssue, DocxCompatibilityLocation, DocxCompatibilityPart, FolioDocxCompatibilityHost, FolioDocxCompatibilityProfile, InspectDocxCompatibilityOptions, inspectDocxCompatibility } from "./docx/compatibility.js";
|
|
15
18
|
import { setAISuggestionsMeta, setFocusedSuggestionMeta } from "./prosemirror/plugins/aiSuggestionDecorations.js";
|
|
16
19
|
import { scrollFolioPositionIntoView } from "./paged-layout/scrollToPmPosition.js";
|
|
17
20
|
import { getFolioCaretViewportRect, getFolioSelectionViewportRect } from "./paged-layout/selectionViewportRect.js";
|
|
@@ -26,5 +29,7 @@ import { fromMarkdown } from "./markdown/fromMarkdown.js";
|
|
|
26
29
|
import { toMarkdown, toMarkdownResult } from "./markdown/index.js";
|
|
27
30
|
import { EmbeddedFont, EmbeddedFontParts, extractEmbeddedFonts, getEmbeddedFontFaces } from "./fonts/embeddedFonts.js";
|
|
28
31
|
import { getGoogleFontsEnabled, setGoogleFontsEnabled } from "./utils/fontResolver.js";
|
|
32
|
+
import { DOCX_CONFORMANCE_CLASSES } from "@stll/docx-core/model";
|
|
29
33
|
type Document = document_d_exports.Document;
|
|
30
|
-
|
|
34
|
+
type DocxConformanceClass = document_d_exports.DocxConformanceClass;
|
|
35
|
+
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 CreateEmptyDocumentOptions, DEFAULT_AI_SUGGESTION_PRESETS, DEFAULT_AUTOCOMPLETE_DEAD_ZONE_NODES, DOCUMENT_PRESET_VERSION, DOCUMENT_STYLE_SET_VERSION, DOCX_CONFORMANCE_CLASSES, type DeriveBlockIdInput, type DirectiveKind, type DirectiveRange, type Document, type DocumentPreset, type DocumentStyleCatalog, type DocumentStyleCatalogEntry, type DocumentStyleSet, type DocxCompatibility, type DocxCompatibilityContext, type DocxCompatibilityIssue, type DocxCompatibilityLocation, type DocxCompatibilityPart, type DocxConformanceClass, type EmbeddedFont, type EmbeddedFontParts, type ExtractDocumentStyleSetOptions, 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, type FolioAIBlock, type FolioAIBlockAnchor, type FolioAIBlockKind, type FolioAIBlockPreviewRun, type FolioAIComment, type FolioAIEditAppliedOperation, type FolioAIEditApplyMode, type FolioAIEditApplyResult, type FolioAIEditOperation, type FolioAIEditPrecondition, type FolioAIEditReviewMeta, type FolioAIEditSeverity, type FolioAIEditSkipReason, type FolioAIEditSkippedOperation, type FolioAIEditSnapshot, type FolioAISignatureParty, type FolioBlockId, type FolioDocumentOperation, type FolioDocumentOperationAffectedTarget, type FolioDocumentOperationBatch, type FolioDocumentOperationCapabilities, type FolioDocumentOperationIssue, type FolioDocumentOperationMode, type FolioDocumentOperationPrecondition, type FolioDocumentOperationReceipt, type FolioDocumentOperationRecovery, type FolioDocumentOperationResult, type FolioDocumentOperationStatus, type FolioDocumentOperationStory, type FolioDocumentOperationType, type FolioDocumentOperationUndoFailureReason, type FolioDocumentOperationUndoHandle, type FolioDocumentOperationUndoResult, type FolioDocxCompatibilityHost, type FolioDocxCompatibilityProfile, type ImageMeta, type ImageRef, type InspectDocxCompatibilityOptions, InvalidFolioDocumentOperationBatchError, type MarkdownOptions, type MarkdownResult, type PositionalText, type ResolvedAnchor, STELLA_STYLE_SET_NAME, type TemplatePreviewSpan, type TemplatePreviewValue, type TemplatePreviewValues, type TemplateSlashMenuKeyAction, type TemplateSlashMenuState, UnsupportedFolioDocumentOperationVersionError, type WordDiffSegment, acceptAutocompleteSuggestion, acceptAutocompleteWord, anonymizationDecorationsKey, appendAutocompleteToken, applyFolioAIEditOperations, applyFolioDocumentOperations, applySuggestions, assertSupportedFolioDocumentOperationVersion, autocompleteSuggestionKey, autocompleteSuggestionPlugin, buildPositionalText, clearAutocompleteSuggestion, clearTemplateSlashMenu, consumeTemplateSlashQuery, createAICitationDecorationsPlugin, createDocx, createEmptyDocument, createFolioAIEditSnapshot, createStellaStyleDocumentPreset, createStellaStyleSet, deriveBlockId, diffWordSegments, extractDocumentStyleSet, extractDocumentStyleSetFromDocx, extractEmbeddedFonts, finishAutocompleteSuggestion, fromMarkdown, getAnonymizationMatches, getAutocompleteSuggestion, getEmbeddedFontFaces, getFolioCaretViewportRect, getFolioDocumentOperationCapabilities, getFolioDocumentOperationIssues, getFolioDocumentOperationReceipts, getFolioParaIdFromBlockId, getFolioSelectionViewportRect, getGoogleFontsEnabled, getTemplateDirectives, getTemplateSlashMenu, hashFolioAIBlockText, inspectDocumentStyles, inspectDocumentStylesFromDocx, inspectDocxCompatibility, isFolioBlockId, isFolioDocumentOperationModeSupported, isSequentialFolioBlockId, isSuggestionStale, isSupportedFolioDocumentOperationVersion, normalizeFolioAIBlockText, parseFolioDocumentOperationBatch, resetTemplateSlashQuery, resolveSuggestionAnchor, scanDirectives, scrollFolioPositionIntoView, setAICitationsMeta, setAISuggestionsMeta, setActiveCitationMeta, setAnonymizationTermsMeta, setFocusedSuggestionMeta, setGoogleFontsEnabled, setTemplatePreviewValues, shouldTriggerAutocomplete, startAutocompleteSuggestion, templateSlashMenuKey, toMarkdown, toMarkdownResult };
|
package/dist/index.js
CHANGED
|
@@ -3,14 +3,18 @@ import { createFolioAIEditSnapshot, hashFolioAIBlockText, normalizeFolioAIBlockT
|
|
|
3
3
|
import { diffWordSegments } from "./ai-edits/word-diff.js";
|
|
4
4
|
import { applyFolioAIEditOperations } from "./ai-edits/apply.js";
|
|
5
5
|
import { 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, InvalidFolioDocumentOperationBatchError, UnsupportedFolioDocumentOperationVersionError, applyFolioDocumentOperations, assertSupportedFolioDocumentOperationVersion, getFolioDocumentOperationCapabilities, getFolioDocumentOperationIssues, getFolioDocumentOperationReceipts, isFolioDocumentOperationModeSupported, isSupportedFolioDocumentOperationVersion, parseFolioDocumentOperationBatch } from "./document-operations.js";
|
|
6
|
+
import { DOCUMENT_PRESET_VERSION, DOCUMENT_STYLE_SET_VERSION } from "./style-sets/types.js";
|
|
6
7
|
import { createEmptyDocument } from "./utils/createDocument.js";
|
|
8
|
+
import { extractDocumentStyleSet, extractDocumentStyleSetFromDocx, inspectDocumentStyles, inspectDocumentStylesFromDocx } from "./style-sets/extract.js";
|
|
9
|
+
import { STELLA_STYLE_SET_NAME, createStellaStyleDocumentPreset, createStellaStyleSet } from "./style-sets/stellaStyle.js";
|
|
7
10
|
import { createDocx } from "./docx/rezip.js";
|
|
11
|
+
import { inspectDocxCompatibility } from "./docx/compatibility.js";
|
|
8
12
|
import { DEFAULT_AI_SUGGESTION_PRESETS } from "./ai-suggestions/types.js";
|
|
9
13
|
import { buildPositionalText } from "./ai-suggestions/text-positions.js";
|
|
10
14
|
import { isSuggestionStale, resolveSuggestionAnchor } from "./ai-suggestions/conflict.js";
|
|
11
15
|
import { applySuggestions } from "./ai-suggestions/apply.js";
|
|
12
|
-
import { setAISuggestionsMeta, setFocusedSuggestionMeta } from "./prosemirror/plugins/aiSuggestionDecorations.js";
|
|
13
16
|
import { getGoogleFontsEnabled, setGoogleFontsEnabled } from "./utils/fontResolver.js";
|
|
17
|
+
import { setAISuggestionsMeta, setFocusedSuggestionMeta } from "./prosemirror/plugins/aiSuggestionDecorations.js";
|
|
14
18
|
import { scrollFolioPositionIntoView } from "./paged-layout/scrollToPmPosition.js";
|
|
15
19
|
import { getFolioCaretViewportRect, getFolioSelectionViewportRect } from "./paged-layout/selectionViewportRect.js";
|
|
16
20
|
import { createAICitationDecorationsPlugin, setAICitationsMeta, setActiveCitationMeta } from "./prosemirror/plugins/aiCitationDecorations.js";
|
|
@@ -22,4 +26,5 @@ import { DEFAULT_AUTOCOMPLETE_DEAD_ZONE_NODES, acceptAutocompleteSuggestion, acc
|
|
|
22
26
|
import { fromMarkdown } from "./markdown/fromMarkdown.js";
|
|
23
27
|
import { toMarkdown, toMarkdownResult } from "./markdown/index.js";
|
|
24
28
|
import { extractEmbeddedFonts, getEmbeddedFontFaces } from "./fonts/embeddedFonts.js";
|
|
25
|
-
|
|
29
|
+
import { DOCX_CONFORMANCE_CLASSES } from "@stll/docx-core/model";
|
|
30
|
+
export { DEFAULT_AI_SUGGESTION_PRESETS, DEFAULT_AUTOCOMPLETE_DEAD_ZONE_NODES, DOCUMENT_PRESET_VERSION, DOCUMENT_STYLE_SET_VERSION, DOCX_CONFORMANCE_CLASSES, 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, InvalidFolioDocumentOperationBatchError, STELLA_STYLE_SET_NAME, UnsupportedFolioDocumentOperationVersionError, acceptAutocompleteSuggestion, acceptAutocompleteWord, anonymizationDecorationsKey, appendAutocompleteToken, applyFolioAIEditOperations, applyFolioDocumentOperations, applySuggestions, assertSupportedFolioDocumentOperationVersion, autocompleteSuggestionKey, autocompleteSuggestionPlugin, buildPositionalText, clearAutocompleteSuggestion, clearTemplateSlashMenu, consumeTemplateSlashQuery, createAICitationDecorationsPlugin, createDocx, createEmptyDocument, createFolioAIEditSnapshot, createStellaStyleDocumentPreset, createStellaStyleSet, deriveBlockId, diffWordSegments, extractDocumentStyleSet, extractDocumentStyleSetFromDocx, extractEmbeddedFonts, finishAutocompleteSuggestion, fromMarkdown, getAnonymizationMatches, getAutocompleteSuggestion, getEmbeddedFontFaces, getFolioCaretViewportRect, getFolioDocumentOperationCapabilities, getFolioDocumentOperationIssues, getFolioDocumentOperationReceipts, getFolioParaIdFromBlockId, getFolioSelectionViewportRect, getGoogleFontsEnabled, getTemplateDirectives, getTemplateSlashMenu, hashFolioAIBlockText, inspectDocumentStyles, inspectDocumentStylesFromDocx, inspectDocxCompatibility, isFolioBlockId, isFolioDocumentOperationModeSupported, isSequentialFolioBlockId, isSuggestionStale, isSupportedFolioDocumentOperationVersion, normalizeFolioAIBlockText, parseFolioDocumentOperationBatch, resetTemplateSlashQuery, resolveSuggestionAnchor, scanDirectives, scrollFolioPositionIntoView, setAICitationsMeta, setAISuggestionsMeta, setActiveCitationMeta, setAnonymizationTermsMeta, setFocusedSuggestionMeta, setGoogleFontsEnabled, setTemplatePreviewValues, shouldTriggerAutocomplete, startAutocompleteSuggestion, templateSlashMenuKey, toMarkdown, toMarkdownResult };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { document_d_exports } from "../../types/document.js";
|
|
2
2
|
import { FOOTNOTE_ENTRY_MARGIN_BOTTOM, FOOTNOTE_FALLBACK_LINE_HEIGHT, FOOTNOTE_SEPARATOR_HEIGHT, FlowBlock, FootnoteContent, Measure, Page } from "../../layout-engine/types.js";
|
|
3
|
+
import { ToFlowBlocksOptions } from "./toFlowBlocks.js";
|
|
3
4
|
|
|
4
5
|
//#region src/layout-bridge/convert/footnoteLayout.d.ts
|
|
5
6
|
type MeasureBlocksFn = (blocks: FlowBlock[], contentWidth: number) => Measure[];
|
|
@@ -8,6 +9,8 @@ type ConvertFootnoteOptions = {
|
|
|
8
9
|
theme?: document_d_exports.Theme | null;
|
|
9
10
|
measureBlocks?: MeasureBlocksFn; /** Document-wide `w:defaultTabStop` in twips — forwarded to toFlowBlocks. */
|
|
10
11
|
defaultTabStopTwips?: number;
|
|
12
|
+
lineBreakRules?: ToFlowBlocksOptions["lineBreakRules"];
|
|
13
|
+
automaticHyphenation?: ToFlowBlocksOptions["automaticHyphenation"];
|
|
11
14
|
};
|
|
12
15
|
/**
|
|
13
16
|
* Scan FlowBlocks for runs with footnoteRefId set.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { footnoteToProseDoc } from "../../prosemirror/conversion/toProseDoc.js";
|
|
1
2
|
import { DEFAULT_TEXTBOX_MARGINS, FOOTNOTE_ENTRY_MARGIN_BOTTOM, FOOTNOTE_FALLBACK_LINE_HEIGHT, FOOTNOTE_SEPARATOR_HEIGHT } from "../../layout-engine/types.js";
|
|
2
3
|
import { measureParagraph } from "../../layout-engine/measure/measureParagraph.js";
|
|
3
4
|
import { toFlowBlocks } from "./toFlowBlocks.js";
|
|
4
|
-
import { footnoteToProseDoc } from "../../prosemirror/conversion/toProseDoc.js";
|
|
5
5
|
//#region src/layout-bridge/convert/footnoteLayout.ts
|
|
6
6
|
/** Default footnote font size in points */
|
|
7
7
|
const FOOTNOTE_FONT_SIZE = 8;
|
|
@@ -196,6 +196,8 @@ function convertFootnoteToContent(footnote, displayNumber, contentWidth, options
|
|
|
196
196
|
const flowOptions = {};
|
|
197
197
|
if (options.theme !== void 0) flowOptions.theme = options.theme;
|
|
198
198
|
if (options.defaultTabStopTwips !== void 0) flowOptions.defaultTabStopTwips = options.defaultTabStopTwips;
|
|
199
|
+
if (options.lineBreakRules) flowOptions.lineBreakRules = options.lineBreakRules;
|
|
200
|
+
if (options.automaticHyphenation) flowOptions.automaticHyphenation = options.automaticHyphenation;
|
|
199
201
|
const blocks = applyFootnotePresentation(toFlowBlocks(pmDoc, flowOptions), displayNumber);
|
|
200
202
|
const measures = options.measureBlocks ? options.measureBlocks(blocks, contentWidth) : measureFootnoteBlocks(blocks, contentWidth);
|
|
201
203
|
let totalHeight = 0;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { document_d_exports } from "../../types/document.js";
|
|
2
2
|
import { FlowBlock, HeaderFooterContent, ImageRun, ImageRunPosition, Measure, PageMargins } from "../../layout-engine/types.js";
|
|
3
|
+
import { ToFlowBlocksOptions } from "./toFlowBlocks.js";
|
|
3
4
|
import { MeasureBlocksFn } from "./footnoteLayout.js";
|
|
4
5
|
import { Node } from "prosemirror-model";
|
|
5
6
|
|
|
@@ -35,6 +36,8 @@ type ConvertHeaderFooterOptions = {
|
|
|
35
36
|
theme?: document_d_exports.Theme | null;
|
|
36
37
|
measureBlocks: MeasureBlocksFn; /** Document-wide `w:defaultTabStop` in twips — forwarded to toFlowBlocks. */
|
|
37
38
|
defaultTabStopTwips?: number;
|
|
39
|
+
lineBreakRules?: ToFlowBlocksOptions["lineBreakRules"];
|
|
40
|
+
automaticHyphenation?: ToFlowBlocksOptions["automaticHyphenation"];
|
|
38
41
|
/**
|
|
39
42
|
* Relationship id of the source HF part. Stamped onto the returned
|
|
40
43
|
* `HeaderFooterContent.rId` so the painter can emit `data-rid` on the
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { emuToPixels } from "../../utils/units.js";
|
|
2
|
+
import { headerFooterToProseDoc } from "../../prosemirror/conversion/toProseDoc.js";
|
|
2
3
|
import { isFloatingImageRun, isFloatingTextBoxBlock } from "../../layout-engine/types.js";
|
|
3
4
|
import { toFlowBlocks } from "./toFlowBlocks.js";
|
|
4
|
-
import { headerFooterToProseDoc } from "../../prosemirror/conversion/toProseDoc.js";
|
|
5
5
|
//#region src/layout-bridge/convert/headerFooterLayout.ts
|
|
6
6
|
function isAnchoredImageRun(run) {
|
|
7
7
|
if (run.kind !== "image") return false;
|
|
@@ -16,6 +16,10 @@ function hasAuthoredVisualContent(block) {
|
|
|
16
16
|
if (attrs.spacingExplicit?.before || attrs.spacingExplicit?.after) return true;
|
|
17
17
|
return false;
|
|
18
18
|
}
|
|
19
|
+
function preservesInheritedSpacing(block) {
|
|
20
|
+
if (!isVisuallyEmptyParagraph(block)) return false;
|
|
21
|
+
return block.attrs?.styleId !== void 0 || block.attrs?.hasDirectParagraphFormatting === true || block.attrs?.hasDirectParagraphMarkFormatting === true;
|
|
22
|
+
}
|
|
19
23
|
function normalizeHeaderFooterMeasureBlocks(blocks, section = "header") {
|
|
20
24
|
return normalizeFlowBlockArray(blocks, { suppressTrailingEmptyAfterTable: section === "header" });
|
|
21
25
|
}
|
|
@@ -33,8 +37,9 @@ function normalizeFlowBlockArray(blocks, normalization) {
|
|
|
33
37
|
const explicit = block.attrs?.spacingExplicit;
|
|
34
38
|
const hasResolvedBefore = block.attrs?.spacing?.before != null;
|
|
35
39
|
const hasResolvedAfter = block.attrs?.spacing?.after != null;
|
|
36
|
-
const
|
|
37
|
-
const
|
|
40
|
+
const preserveInherited = preservesInheritedSpacing(block);
|
|
41
|
+
const beforeIsInherited = hasResolvedBefore && !explicit?.before && !preserveInherited;
|
|
42
|
+
const afterIsInherited = hasResolvedAfter && !explicit?.after && !preserveInherited;
|
|
38
43
|
const stripsSpacing = beforeIsInherited || afterIsInherited;
|
|
39
44
|
const stripsImages = block.runs.some(isAnchoredImageRun);
|
|
40
45
|
if (!stripsSpacing && !stripsImages && !isTrailingEmpty) return block;
|
|
@@ -79,6 +84,10 @@ function isVisuallyEmptyParagraph(block) {
|
|
|
79
84
|
if (block.kind !== "paragraph") return false;
|
|
80
85
|
return block.runs.every((run) => run.kind === "text" && run.text.trim().length === 0);
|
|
81
86
|
}
|
|
87
|
+
function isPaintlessParagraph(block) {
|
|
88
|
+
if (block.kind !== "paragraph") return false;
|
|
89
|
+
return block.runs.every((run) => run.kind === "text" && run.text.trim().length === 0 || run.kind === "tab" || run.kind === "lineBreak");
|
|
90
|
+
}
|
|
82
91
|
function normalizeTableBlock(block) {
|
|
83
92
|
const blockState = { changed: false };
|
|
84
93
|
const rows = block.rows.map((row) => {
|
|
@@ -232,6 +241,10 @@ function calculateHeaderFooterVisualBounds(blocks, measures, flowHeight, metrics
|
|
|
232
241
|
* these bounds separately describe the in-flow portion for API consumers.
|
|
233
242
|
*/
|
|
234
243
|
function calculateHeaderFooterMarginPushBounds(blocks, measures, flowHeight, metrics) {
|
|
244
|
+
if (blocks.length > 0 && blocks.every((block) => isPaintlessParagraph(block) && !hasAuthoredVisualContent(block))) return {
|
|
245
|
+
top: 0,
|
|
246
|
+
bottom: 0
|
|
247
|
+
};
|
|
235
248
|
let top = 0;
|
|
236
249
|
let bottom = 0;
|
|
237
250
|
let cursorY = 0;
|
|
@@ -298,6 +311,8 @@ function convertHeaderFooterToContent(headerFooter, contentWidth, metrics, optio
|
|
|
298
311
|
const flowOptions = {};
|
|
299
312
|
if (options.theme !== void 0) flowOptions.theme = options.theme;
|
|
300
313
|
if (options.defaultTabStopTwips !== void 0) flowOptions.defaultTabStopTwips = options.defaultTabStopTwips;
|
|
314
|
+
if (options.lineBreakRules) flowOptions.lineBreakRules = options.lineBreakRules;
|
|
315
|
+
if (options.automaticHyphenation) flowOptions.automaticHyphenation = options.automaticHyphenation;
|
|
301
316
|
return finalizeHeaderFooterContent(toFlowBlocks(pmDoc, flowOptions), contentWidth, metrics, options);
|
|
302
317
|
}
|
|
303
318
|
/**
|
|
@@ -316,6 +331,8 @@ function convertHeaderFooterPmDocToContent(pmDoc, contentWidth, metrics, options
|
|
|
316
331
|
const flowOptions = {};
|
|
317
332
|
if (options.theme !== void 0) flowOptions.theme = options.theme;
|
|
318
333
|
if (options.defaultTabStopTwips !== void 0) flowOptions.defaultTabStopTwips = options.defaultTabStopTwips;
|
|
334
|
+
if (options.lineBreakRules) flowOptions.lineBreakRules = options.lineBreakRules;
|
|
335
|
+
if (options.automaticHyphenation) flowOptions.automaticHyphenation = options.automaticHyphenation;
|
|
319
336
|
return finalizeHeaderFooterContent(toFlowBlocks(pmDoc, flowOptions), contentWidth, metrics, options);
|
|
320
337
|
}
|
|
321
338
|
function finalizeHeaderFooterContent(blocks, contentWidth, metrics, options) {
|
|
@@ -422,6 +439,8 @@ function serializeParagraphAttrs(attrs) {
|
|
|
422
439
|
"listMarker",
|
|
423
440
|
"listIsBullet",
|
|
424
441
|
"listMarkerHidden",
|
|
442
|
+
"listMarkerBold",
|
|
443
|
+
"listMarkerAlignment",
|
|
425
444
|
"listMarkerSuffix",
|
|
426
445
|
"tabs"
|
|
427
446
|
];
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { BlockId, FlowBlock } from "../../layout-engine/types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/layout-bridge/convert/paragraphFrames.d.ts
|
|
4
|
+
type BlockIdFactory = () => BlockId;
|
|
5
|
+
declare function groupParagraphFrames(blocks: FlowBlock[], nextBlockId: BlockIdFactory): FlowBlock[];
|
|
6
|
+
//#endregion
|
|
7
|
+
export { groupParagraphFrames };
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { pixelsToEmu } from "../../utils/units.js";
|
|
2
|
+
import { setTextBoxGroupId } from "../../layout-engine/textBoxGroup.js";
|
|
3
|
+
import { getParagraphFrame, markParagraphFrameTextBox } from "../../layout-engine/paragraphFrame.js";
|
|
4
|
+
//#region src/layout-bridge/convert/paragraphFrames.ts
|
|
5
|
+
const FRAME_PROPERTIES = [
|
|
6
|
+
"width",
|
|
7
|
+
"height",
|
|
8
|
+
"hSpace",
|
|
9
|
+
"vSpace",
|
|
10
|
+
"hAnchor",
|
|
11
|
+
"vAnchor",
|
|
12
|
+
"x",
|
|
13
|
+
"y",
|
|
14
|
+
"xAlign",
|
|
15
|
+
"yAlign",
|
|
16
|
+
"wrap"
|
|
17
|
+
];
|
|
18
|
+
function framesEqual(left, right) {
|
|
19
|
+
return FRAME_PROPERTIES.every((property) => left[property] === right[property]);
|
|
20
|
+
}
|
|
21
|
+
function horizontalRelativeTo(anchor) {
|
|
22
|
+
if (anchor === "page" || anchor === "margin") return anchor;
|
|
23
|
+
return "column";
|
|
24
|
+
}
|
|
25
|
+
function verticalRelativeTo(anchor) {
|
|
26
|
+
if (anchor === "page" || anchor === "margin") return anchor;
|
|
27
|
+
return "paragraph";
|
|
28
|
+
}
|
|
29
|
+
function framePosition(frame) {
|
|
30
|
+
const horizontal = frame.x !== void 0 || frame.xAlign !== void 0 || frame.hAnchor !== void 0 ? {
|
|
31
|
+
relativeTo: horizontalRelativeTo(frame.hAnchor),
|
|
32
|
+
...frame.x !== void 0 ? { posOffset: pixelsToEmu(frame.x) } : {},
|
|
33
|
+
...frame.xAlign !== void 0 ? { align: frame.xAlign } : {}
|
|
34
|
+
} : void 0;
|
|
35
|
+
const verticalAlign = frame.yAlign === "inline" ? void 0 : frame.yAlign;
|
|
36
|
+
const vertical = frame.y !== void 0 || verticalAlign !== void 0 || frame.vAnchor !== void 0 ? {
|
|
37
|
+
relativeTo: verticalRelativeTo(frame.vAnchor),
|
|
38
|
+
...frame.y !== void 0 ? { posOffset: pixelsToEmu(frame.y) } : {},
|
|
39
|
+
...verticalAlign !== void 0 ? { align: verticalAlign } : {}
|
|
40
|
+
} : void 0;
|
|
41
|
+
if (horizontal === void 0 && vertical === void 0) return;
|
|
42
|
+
return {
|
|
43
|
+
...horizontal !== void 0 ? { horizontal } : {},
|
|
44
|
+
...vertical !== void 0 ? { vertical } : {}
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
function frameWrapType(frame) {
|
|
48
|
+
switch (frame.wrap) {
|
|
49
|
+
case "notBeside": return "topAndBottom";
|
|
50
|
+
case "none": return "inFront";
|
|
51
|
+
case "through": return "through";
|
|
52
|
+
case "tight": return "tight";
|
|
53
|
+
case "around":
|
|
54
|
+
case "auto":
|
|
55
|
+
case void 0: return "square";
|
|
56
|
+
default:
|
|
57
|
+
frame.wrap;
|
|
58
|
+
return "square";
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function toFrameTextBox(content, frame, nextBlockId) {
|
|
62
|
+
const first = content.at(0);
|
|
63
|
+
const last = content.at(-1);
|
|
64
|
+
const textBox = {
|
|
65
|
+
kind: "textBox",
|
|
66
|
+
id: nextBlockId(),
|
|
67
|
+
width: frame.width ?? 200,
|
|
68
|
+
margins: {
|
|
69
|
+
top: 0,
|
|
70
|
+
right: 0,
|
|
71
|
+
bottom: 0,
|
|
72
|
+
left: 0
|
|
73
|
+
},
|
|
74
|
+
content,
|
|
75
|
+
displayMode: "float",
|
|
76
|
+
wrapType: frameWrapType(frame),
|
|
77
|
+
wrapText: "bothSides",
|
|
78
|
+
distTop: frame.vSpace ?? 0,
|
|
79
|
+
distBottom: frame.vSpace ?? 0,
|
|
80
|
+
distLeft: frame.hSpace ?? 0,
|
|
81
|
+
distRight: frame.hSpace ?? 0,
|
|
82
|
+
...first?.pmStart !== void 0 ? { pmStart: first.pmStart } : {},
|
|
83
|
+
...last?.pmEnd !== void 0 ? { pmEnd: last.pmEnd } : {}
|
|
84
|
+
};
|
|
85
|
+
if (frame.height !== void 0) textBox.height = frame.height;
|
|
86
|
+
const position = framePosition(frame);
|
|
87
|
+
if (position !== void 0) textBox.position = position;
|
|
88
|
+
markParagraphFrameTextBox(textBox);
|
|
89
|
+
return textBox;
|
|
90
|
+
}
|
|
91
|
+
function groupParagraphFrames(blocks, nextBlockId) {
|
|
92
|
+
const grouped = [];
|
|
93
|
+
let index = 0;
|
|
94
|
+
let activeFrameSetId;
|
|
95
|
+
while (index < blocks.length) {
|
|
96
|
+
const block = blocks[index];
|
|
97
|
+
if (block?.kind !== "paragraph") {
|
|
98
|
+
if (block) grouped.push(block);
|
|
99
|
+
activeFrameSetId = void 0;
|
|
100
|
+
index += 1;
|
|
101
|
+
continue;
|
|
102
|
+
}
|
|
103
|
+
const frame = getParagraphFrame(block);
|
|
104
|
+
if (frame === void 0) {
|
|
105
|
+
grouped.push(block);
|
|
106
|
+
if (block.runs.length > 0 || activeFrameSetId === void 0 || !hasFollowingParagraphFrame(blocks, index + 1)) activeFrameSetId = void 0;
|
|
107
|
+
index += 1;
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
activeFrameSetId ??= `paragraph-frame-${block.pmStart ?? block.id}`;
|
|
111
|
+
const content = [];
|
|
112
|
+
while (index < blocks.length) {
|
|
113
|
+
const paragraph = blocks[index];
|
|
114
|
+
if (paragraph?.kind !== "paragraph") break;
|
|
115
|
+
const paragraphFrame = getParagraphFrame(paragraph);
|
|
116
|
+
if (paragraphFrame === void 0 || !framesEqual(frame, paragraphFrame)) break;
|
|
117
|
+
content.push(paragraph);
|
|
118
|
+
index += 1;
|
|
119
|
+
}
|
|
120
|
+
const textBox = toFrameTextBox(content, frame, nextBlockId);
|
|
121
|
+
setTextBoxGroupId(textBox, activeFrameSetId);
|
|
122
|
+
grouped.push(textBox);
|
|
123
|
+
}
|
|
124
|
+
return grouped;
|
|
125
|
+
}
|
|
126
|
+
function hasFollowingParagraphFrame(blocks, startIndex) {
|
|
127
|
+
for (let index = startIndex; index < blocks.length; index++) {
|
|
128
|
+
const block = blocks[index];
|
|
129
|
+
if (block?.kind !== "paragraph") return false;
|
|
130
|
+
if (getParagraphFrame(block) !== void 0) return true;
|
|
131
|
+
if (block.runs.length > 0) return false;
|
|
132
|
+
}
|
|
133
|
+
return false;
|
|
134
|
+
}
|
|
135
|
+
//#endregion
|
|
136
|
+
export { groupParagraphFrames };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { document_d_exports } from "../../types/document.js";
|
|
2
|
-
import { BorderStyle, FlowBlock } from "../../layout-engine/types.js";
|
|
2
|
+
import { BorderStyle, FlowBlock, ParagraphAttrs } from "../../layout-engine/types.js";
|
|
3
3
|
import { Node } from "prosemirror-model";
|
|
4
4
|
|
|
5
5
|
//#region src/layout-bridge/convert/toFlowBlocks.d.ts
|
|
@@ -31,7 +31,19 @@ type ToFlowBlocksOptions = {
|
|
|
31
31
|
* tab-stop math) can read it without taking a `Document` reference.
|
|
32
32
|
* Defaults to the OOXML 720-twip value when absent.
|
|
33
33
|
*/
|
|
34
|
-
defaultTabStopTwips?: number;
|
|
34
|
+
defaultTabStopTwips?: number; /** Document-wide custom Word line-breaking settings. */
|
|
35
|
+
lineBreakRules?: {
|
|
36
|
+
noLineBreaksBefore?: {
|
|
37
|
+
language?: string;
|
|
38
|
+
characters: string;
|
|
39
|
+
};
|
|
40
|
+
noLineBreaksAfter?: {
|
|
41
|
+
language?: string;
|
|
42
|
+
characters: string;
|
|
43
|
+
};
|
|
44
|
+
useLegacyEthiopicAmharicRules?: boolean;
|
|
45
|
+
}; /** Document-wide automatic hyphenation policy. */
|
|
46
|
+
automaticHyphenation?: NonNullable<ParagraphAttrs["automaticHyphenation"]>;
|
|
35
47
|
};
|
|
36
48
|
declare function formatCounter(value: number, format: document_d_exports.NumberFormat | undefined): string;
|
|
37
49
|
declare function resolveListTemplate(template: string, counters: number[], levelFormats: document_d_exports.NumberFormat[] | undefined, forceDecimal?: boolean): string;
|