@stll/folio-core 0.8.0 → 0.10.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/headless.d.ts +73 -6
- package/dist/ai-edits/headless.js +299 -60
- package/dist/ai-edits/index.d.ts +3 -3
- package/dist/ai-edits/index.js +2 -1
- package/dist/ai-edits/snapshot.js +40 -3
- package/dist/ai-edits/types.d.ts +2 -1
- package/dist/compat/eigenpal.d.ts +6 -4
- package/dist/compat/eigenpal.js +5 -3
- package/dist/controller/latestRequestGate.d.ts +13 -0
- package/dist/controller/latestRequestGate.js +16 -0
- package/dist/controller/layoutPipeline.js +13 -1
- package/dist/document-operations.d.ts +20 -4
- package/dist/document-operations.js +36 -15
- package/dist/document-stories.d.ts +10 -0
- package/dist/document-stories.js +27 -0
- package/dist/docx/blockContentParser.js +2 -2
- package/dist/docx/commentParser.js +1 -1
- package/dist/docx/compatibility.d.ts +3 -7
- package/dist/docx/compatibility.js +0 -11
- package/dist/docx/corePropertiesParser.d.ts +8 -0
- package/dist/docx/corePropertiesParser.js +53 -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/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/index.d.ts +2 -1
- package/dist/docx/index.js +2 -1
- package/dist/docx/metadataPrivacy.d.ts +40 -0
- package/dist/docx/metadataPrivacy.js +131 -0
- package/dist/docx/normalizeBaseDirection.js +1 -1
- package/dist/docx/numberingParser.js +1 -0
- package/dist/docx/paragraphParser.js +12 -1
- package/dist/docx/parser.d.ts +1 -1
- package/dist/docx/parser.js +16 -10
- package/dist/docx/rezip.d.ts +5 -4
- package/dist/docx/rezip.js +76 -13
- package/dist/docx/runConsolidator.js +4 -0
- package/dist/docx/runParser.js +19 -1
- package/dist/docx/selectiveSave.js +3 -3
- 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 +4 -0
- package/dist/docx/serializer/runSerializer.js +7 -0
- 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 +25 -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 +11 -1
- package/dist/docx/vmlImageParser.js +1 -0
- package/dist/i18n/messages/catalogs.gen.d.ts +5916 -5916
- package/dist/i18n/messages/catalogs.gen.js +5910 -5910
- package/dist/index.d.ts +6 -4
- package/dist/index.js +5 -3
- 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 +6 -1
- package/dist/layout-bridge/convert/toFlowBlocks.d.ts +14 -2
- package/dist/layout-bridge/convert/toFlowBlocks.js +52 -14
- package/dist/layout-bridge/engine/measuring/index.d.ts +2 -1
- package/dist/layout-bridge/engine/measuring/index.js +2 -1
- package/dist/layout-engine/index.js +36 -28
- package/dist/layout-engine/measure/cache.js +6 -3
- package/dist/layout-engine/measure/effectiveLineBreakPolicy.d.ts +29 -0
- package/dist/layout-engine/measure/effectiveLineBreakPolicy.js +60 -0
- 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 +1 -0
- package/dist/layout-engine/measure/listMarkerWidth.js +12 -6
- package/dist/layout-engine/measure/measureBlocks.d.ts +1 -2
- package/dist/layout-engine/measure/measureBlocks.js +6 -36
- 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 +332 -73
- 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 +51 -37
- 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.js +1 -1
- package/dist/layout-engine/measure/textMeasurementPolicy.d.ts +18 -0
- package/dist/layout-engine/measure/textMeasurementPolicy.js +24 -0
- package/dist/layout-engine/renderedBreakReconciliation.d.ts +6 -1
- package/dist/layout-engine/renderedBreakReconciliation.js +34 -11
- package/dist/layout-engine/tableRowBreak.d.ts +5 -2
- package/dist/layout-engine/tableRowBreak.js +62 -29
- package/dist/layout-engine/types.d.ts +43 -8
- 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 +13 -99
- package/dist/layout-painter/renderParagraph.js +41 -23
- package/dist/layout-painter/renderTable.d.ts +2 -0
- package/dist/layout-painter/renderTable.js +223 -43
- package/dist/managers/DocumentLoaderManager.d.ts +1 -1
- package/dist/managers/DocumentLoaderManager.js +2 -2
- package/dist/prosemirror/attrs/index.d.ts +4 -2
- package/dist/prosemirror/attrs/index.js +22 -2
- package/dist/prosemirror/commands/propertyChangeScope.js +1 -1
- package/dist/prosemirror/conversion/effectiveTableCellFormatting.d.ts +62 -0
- package/dist/prosemirror/conversion/effectiveTableCellFormatting.js +131 -0
- package/dist/prosemirror/conversion/fromProseDoc.js +34 -18
- package/dist/prosemirror/conversion/toProseDoc.js +81 -77
- package/dist/prosemirror/extensions/StarterKit.js +2 -0
- package/dist/prosemirror/extensions/core/ParagraphExtension.js +7 -2
- package/dist/prosemirror/extensions/features/AutoBidiDetectionExtension.js +1 -1
- package/dist/prosemirror/extensions/features/ListExtension.js +1 -0
- 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 +3 -1
- package/dist/prosemirror/extensions/nodes/TableExtension.js +4 -2
- 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 +15 -12
- package/dist/prosemirror/styles/resolvedStyleAttrs.js +1 -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.d.ts +26 -11
- package/dist/redline.js +107 -64
- package/dist/server.d.ts +9 -5
- package/dist/server.js +8 -4
- 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/utils/createDocument.d.ts +12 -2
- package/dist/utils/createDocument.js +42 -31
- package/dist/utils/fontResolver.js +6 -6
- package/dist/utils/formatToStyle.js +1 -1
- package/dist/utils/paragraphFormattingMerge.d.ts +14 -3
- package/dist/utils/paragraphFormattingMerge.js +14 -4
- package/dist/version-comparison.d.ts +65 -11
- package/dist/version-comparison.js +187 -29
- package/package.json +5 -1
- package/dist/docx/capabilities.d.ts +0 -41
- package/dist/docx/capabilities.js +0 -322
|
@@ -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,10 +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 {
|
|
15
|
-
import { DocxCompatibility, DocxCompatibilityContext, DocxCompatibilityIssue, DocxCompatibilityLocation, DocxCompatibilityPart, InspectDocxCompatibilityOptions, inspectDocxCompatibility } from "../docx/compatibility.js";
|
|
17
|
+
import { DocxCompatibility, DocxCompatibilityContext, DocxCompatibilityIssue, DocxCompatibilityLocation, DocxCompatibilityPart, FolioDocxCompatibilityHost, FolioDocxCompatibilityProfile, InspectDocxCompatibilityOptions, inspectDocxCompatibility } from "../docx/compatibility.js";
|
|
16
18
|
import { setAISuggestionsMeta, setFocusedSuggestionMeta } from "../prosemirror/plugins/aiSuggestionDecorations.js";
|
|
17
19
|
import { scrollFolioPositionIntoView } from "../paged-layout/scrollToPmPosition.js";
|
|
18
20
|
import { getFolioCaretViewportRect, getFolioSelectionViewportRect } from "../paged-layout/selectionViewportRect.js";
|
|
@@ -30,4 +32,4 @@ import { getGoogleFontsEnabled, setGoogleFontsEnabled } from "../utils/fontResol
|
|
|
30
32
|
import { DOCX_CONFORMANCE_CLASSES } from "../index.js";
|
|
31
33
|
type Document = document_d_exports.Document;
|
|
32
34
|
type DocxConformanceClass = document_d_exports.DocxConformanceClass;
|
|
33
|
-
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, DOCX_CONFORMANCE_CLASSES, type DeriveBlockIdInput, type DirectiveKind, type DirectiveRange, type Document, type DocxCompatibility, type DocxCompatibilityContext, type DocxCompatibilityIssue, type DocxCompatibilityLocation, type DocxCompatibilityPart, type DocxConformanceClass, type EmbeddedFont, type EmbeddedFontParts, 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,
|
|
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/compat/eigenpal.js
CHANGED
|
@@ -3,16 +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";
|
|
8
|
-
import { FOLIO_DOCX_CAPABILITY_HOSTS, FOLIO_DOCX_CAPABILITY_IDS, FOLIO_DOCX_CAPABILITY_MANIFEST, FOLIO_DOCX_CAPABILITY_MANIFEST_VERSION, FOLIO_DOCX_CAPABILITY_OPERATIONS, FOLIO_DOCX_COMPATIBILITY_HOSTS, FOLIO_DOCX_COMPATIBILITY_PROFILES, FOLIO_DOCX_PROFILES, FOLIO_DOCX_SUPPORT_STATES, InvalidFolioDocxCapabilityIdError, getFolioDocxCapability, isFolioDocxCapabilityId } from "../docx/capabilities.js";
|
|
9
11
|
import { inspectDocxCompatibility } from "../docx/compatibility.js";
|
|
10
12
|
import { DEFAULT_AI_SUGGESTION_PRESETS } from "../ai-suggestions/types.js";
|
|
11
13
|
import { buildPositionalText } from "../ai-suggestions/text-positions.js";
|
|
12
14
|
import { isSuggestionStale, resolveSuggestionAnchor } from "../ai-suggestions/conflict.js";
|
|
13
15
|
import { applySuggestions } from "../ai-suggestions/apply.js";
|
|
14
|
-
import { setAISuggestionsMeta, setFocusedSuggestionMeta } from "../prosemirror/plugins/aiSuggestionDecorations.js";
|
|
15
16
|
import { getGoogleFontsEnabled, setGoogleFontsEnabled } from "../utils/fontResolver.js";
|
|
17
|
+
import { setAISuggestionsMeta, setFocusedSuggestionMeta } from "../prosemirror/plugins/aiSuggestionDecorations.js";
|
|
16
18
|
import { scrollFolioPositionIntoView } from "../paged-layout/scrollToPmPosition.js";
|
|
17
19
|
import { getFolioCaretViewportRect, getFolioSelectionViewportRect } from "../paged-layout/selectionViewportRect.js";
|
|
18
20
|
import { createAICitationDecorationsPlugin, setAICitationsMeta, setActiveCitationMeta } from "../prosemirror/plugins/aiCitationDecorations.js";
|
|
@@ -25,4 +27,4 @@ import { fromMarkdown } from "../markdown/fromMarkdown.js";
|
|
|
25
27
|
import { toMarkdown, toMarkdownResult } from "../markdown/index.js";
|
|
26
28
|
import { extractEmbeddedFonts, getEmbeddedFontFaces } from "../fonts/embeddedFonts.js";
|
|
27
29
|
import { DOCX_CONFORMANCE_CLASSES } from "../index.js";
|
|
28
|
-
export { DEFAULT_AI_SUGGESTION_PRESETS, DEFAULT_AUTOCOMPLETE_DEAD_ZONE_NODES, 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,
|
|
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 };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region src/controller/latestRequestGate.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Coordinates async work where only the most recently started request may
|
|
4
|
+
* commit a result. Each guard closes over an opaque identity, so callers
|
|
5
|
+
* cannot accidentally make an older request current again.
|
|
6
|
+
*/
|
|
7
|
+
type LatestRequestGate = {
|
|
8
|
+
/** Start a request and return a guard that remains true while it is latest. */begin: () => () => boolean; /** Supersede the current request without starting another one. */
|
|
9
|
+
invalidate: () => void;
|
|
10
|
+
};
|
|
11
|
+
declare const createLatestRequestGate: () => LatestRequestGate;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { LatestRequestGate, createLatestRequestGate };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//#region src/controller/latestRequestGate.ts
|
|
2
|
+
const createLatestRequestGate = () => {
|
|
3
|
+
let current = Symbol();
|
|
4
|
+
return {
|
|
5
|
+
begin: () => {
|
|
6
|
+
const request = Symbol();
|
|
7
|
+
current = request;
|
|
8
|
+
return () => current === request;
|
|
9
|
+
},
|
|
10
|
+
invalidate: () => {
|
|
11
|
+
current = Symbol();
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
//#endregion
|
|
16
|
+
export { createLatestRequestGate };
|
|
@@ -73,6 +73,14 @@ function runLayoutPipeline(deps, state, options = {}) {
|
|
|
73
73
|
const flowOpts = { pageContentHeight: pageSize.h - margins.top - margins.bottom };
|
|
74
74
|
if (_theme !== void 0) flowOpts.theme = _theme;
|
|
75
75
|
if (defaultTabStop !== void 0) flowOpts.defaultTabStopTwips = defaultTabStop;
|
|
76
|
+
if (document?.package.settings?.lineBreakRules) flowOpts.lineBreakRules = document.package.settings.lineBreakRules;
|
|
77
|
+
const documentSettings = document?.package.settings;
|
|
78
|
+
if (documentSettings?.autoHyphenation === true) flowOpts.automaticHyphenation = {
|
|
79
|
+
enabled: true,
|
|
80
|
+
...documentSettings.doNotHyphenateCaps !== void 0 ? { doNotHyphenateCaps: documentSettings.doNotHyphenateCaps } : {},
|
|
81
|
+
...documentSettings.consecutiveHyphenLimit !== void 0 ? { consecutiveLineLimit: documentSettings.consecutiveHyphenLimit } : {},
|
|
82
|
+
...documentSettings.hyphenationZoneTwips !== void 0 ? { hyphenationZoneTwips: documentSettings.hyphenationZoneTwips } : {}
|
|
83
|
+
};
|
|
76
84
|
let newBlocks = toFlowBlocks(state.doc, flowOpts);
|
|
77
85
|
const previewState = templatePreviewValuesKey.getState(state);
|
|
78
86
|
const previewEntries = previewState?.entries ?? EMPTY_TEMPLATE_PREVIEW_ENTRIES;
|
|
@@ -117,7 +125,9 @@ function runLayoutPipeline(deps, state, options = {}) {
|
|
|
117
125
|
...styles ? { styles } : {},
|
|
118
126
|
..._theme !== void 0 ? { theme: _theme } : {},
|
|
119
127
|
measureBlocks: hfMeasureBlocks,
|
|
120
|
-
...defaultTabStop !== void 0 ? { defaultTabStopTwips: defaultTabStop } : {}
|
|
128
|
+
...defaultTabStop !== void 0 ? { defaultTabStopTwips: defaultTabStop } : {},
|
|
129
|
+
...flowOpts.lineBreakRules ? { lineBreakRules: flowOpts.lineBreakRules } : {},
|
|
130
|
+
...flowOpts.automaticHyphenation ? { automaticHyphenation: flowOpts.automaticHyphenation } : {}
|
|
121
131
|
};
|
|
122
132
|
};
|
|
123
133
|
const hfOptions = buildHfOptions(hfPageCountEstimate);
|
|
@@ -245,6 +255,8 @@ function runLayoutPipeline(deps, state, options = {}) {
|
|
|
245
255
|
if (styles) footnoteOptions.styles = styles;
|
|
246
256
|
if (_theme !== void 0) footnoteOptions.theme = _theme;
|
|
247
257
|
if (defaultTabStop !== void 0) footnoteOptions.defaultTabStopTwips = defaultTabStop;
|
|
258
|
+
if (flowOpts.lineBreakRules) footnoteOptions.lineBreakRules = flowOpts.lineBreakRules;
|
|
259
|
+
if (flowOpts.automaticHyphenation) footnoteOptions.automaticHyphenation = flowOpts.automaticHyphenation;
|
|
248
260
|
return footnoteOptions;
|
|
249
261
|
})());
|
|
250
262
|
const footnoteHeightById = /* @__PURE__ */ new Map();
|
|
@@ -5,7 +5,7 @@ import { FolioAIEditView } from "./ai-edits/apply.js";
|
|
|
5
5
|
declare const FOLIO_DOCUMENT_OPERATION_CONTRACT_VERSION: 1;
|
|
6
6
|
declare const FOLIO_DOCUMENT_OPERATION_TYPES: readonly ["replaceInBlock", "replaceRange", "commentOnRange", "formatRange", "insertAfterBlock", "insertBeforeBlock", "replaceBlock", "deleteBlock", "commentOnBlock", "insertSignatureTable"];
|
|
7
7
|
declare const FOLIO_DOCUMENT_OPERATION_MODES: readonly ["direct", "tracked-changes"];
|
|
8
|
-
declare const FOLIO_DOCUMENT_OPERATION_STORIES: readonly ["main"];
|
|
8
|
+
declare const FOLIO_DOCUMENT_OPERATION_STORIES: readonly ["main", "header", "footer", "footnote", "endnote"];
|
|
9
9
|
declare const FOLIO_DOCUMENT_OPERATION_PRECONDITIONS: readonly ["blockTextHash"];
|
|
10
10
|
declare const FOLIO_DOCUMENT_OPERATION_BATCH_MODES: readonly ["best-effort", "atomic"];
|
|
11
11
|
type FolioDocumentOperation = FolioAIEditOperation;
|
|
@@ -67,19 +67,33 @@ type FolioDocumentOperationIssue = {
|
|
|
67
67
|
retryable: boolean;
|
|
68
68
|
recovery: FolioDocumentOperationRecovery;
|
|
69
69
|
};
|
|
70
|
+
type FolioDocumentOperationStory = "main" | {
|
|
71
|
+
type: "header";
|
|
72
|
+
relationshipId: string;
|
|
73
|
+
} | {
|
|
74
|
+
type: "footer";
|
|
75
|
+
relationshipId: string;
|
|
76
|
+
} | {
|
|
77
|
+
type: "footnote";
|
|
78
|
+
noteId: number;
|
|
79
|
+
} | {
|
|
80
|
+
type: "endnote";
|
|
81
|
+
noteId: number;
|
|
82
|
+
};
|
|
70
83
|
/** One typed target affected by a successfully applied document operation. */
|
|
71
84
|
type FolioDocumentOperationAffectedTarget = {
|
|
72
85
|
type: "block";
|
|
73
|
-
story:
|
|
86
|
+
story: FolioDocumentOperationStory;
|
|
74
87
|
blockId: string;
|
|
75
88
|
effect: "updated" | "deleted" | "commented";
|
|
76
89
|
} | {
|
|
77
90
|
type: "textRange";
|
|
78
91
|
range: FolioAITextRangeHandle;
|
|
79
92
|
effect: "formatted" | "commented";
|
|
93
|
+
story?: Exclude<FolioDocumentOperationStory, "main">;
|
|
80
94
|
} | {
|
|
81
95
|
type: "insertion";
|
|
82
|
-
story:
|
|
96
|
+
story: FolioDocumentOperationStory;
|
|
83
97
|
anchorBlockId: string;
|
|
84
98
|
position: "before" | "after";
|
|
85
99
|
content: "block" | "signatureTable";
|
|
@@ -123,6 +137,7 @@ type ApplyFolioDocumentOperationsOptions = {
|
|
|
123
137
|
view: FolioAIEditView;
|
|
124
138
|
snapshot: FolioAIEditSnapshot;
|
|
125
139
|
batch: FolioDocumentOperationBatch;
|
|
140
|
+
story?: FolioDocumentOperationStory;
|
|
126
141
|
author?: string;
|
|
127
142
|
createCommentId?: (text: string) => number;
|
|
128
143
|
createUndoHandle?: () => FolioDocumentOperationUndoHandle;
|
|
@@ -131,9 +146,10 @@ declare const applyFolioDocumentOperations: ({
|
|
|
131
146
|
view,
|
|
132
147
|
snapshot,
|
|
133
148
|
batch,
|
|
149
|
+
story,
|
|
134
150
|
author,
|
|
135
151
|
createCommentId,
|
|
136
152
|
createUndoHandle
|
|
137
153
|
}: ApplyFolioDocumentOperationsOptions) => FolioDocumentOperationResult;
|
|
138
154
|
//#endregion
|
|
139
|
-
export { 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 };
|
|
155
|
+
export { 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 };
|
|
@@ -15,7 +15,13 @@ const FOLIO_DOCUMENT_OPERATION_TYPES = Object.freeze([
|
|
|
15
15
|
"insertSignatureTable"
|
|
16
16
|
]);
|
|
17
17
|
const FOLIO_DOCUMENT_OPERATION_MODES = Object.freeze(["direct", "tracked-changes"]);
|
|
18
|
-
const FOLIO_DOCUMENT_OPERATION_STORIES = Object.freeze([
|
|
18
|
+
const FOLIO_DOCUMENT_OPERATION_STORIES = Object.freeze([
|
|
19
|
+
"main",
|
|
20
|
+
"header",
|
|
21
|
+
"footer",
|
|
22
|
+
"footnote",
|
|
23
|
+
"endnote"
|
|
24
|
+
]);
|
|
19
25
|
const FOLIO_DOCUMENT_OPERATION_PRECONDITIONS = Object.freeze(["blockTextHash"]);
|
|
20
26
|
const FOLIO_DOCUMENT_OPERATION_BATCH_MODES = Object.freeze(["best-effort", "atomic"]);
|
|
21
27
|
const DIRECT_AND_TRACKED_MODES = FOLIO_DOCUMENT_OPERATION_MODES;
|
|
@@ -438,54 +444,56 @@ const getFolioDocumentOperationIssues = (operations, skipped) => {
|
|
|
438
444
|
};
|
|
439
445
|
});
|
|
440
446
|
};
|
|
441
|
-
const getPrimaryAffectedTarget = (operation) => {
|
|
447
|
+
const getPrimaryAffectedTarget = (operation, story) => {
|
|
442
448
|
switch (operation.type) {
|
|
443
449
|
case "replaceInBlock":
|
|
444
450
|
case "replaceBlock": return {
|
|
445
451
|
type: "block",
|
|
446
|
-
story
|
|
452
|
+
story,
|
|
447
453
|
blockId: operation.blockId,
|
|
448
454
|
effect: "updated"
|
|
449
455
|
};
|
|
450
456
|
case "replaceRange": return {
|
|
451
457
|
type: "block",
|
|
452
|
-
story
|
|
458
|
+
story,
|
|
453
459
|
blockId: operation.range.blockId,
|
|
454
460
|
effect: "updated"
|
|
455
461
|
};
|
|
456
462
|
case "commentOnRange": return {
|
|
457
463
|
type: "textRange",
|
|
458
464
|
range: operation.range,
|
|
459
|
-
effect: "commented"
|
|
465
|
+
effect: "commented",
|
|
466
|
+
...story !== "main" && { story }
|
|
460
467
|
};
|
|
461
468
|
case "formatRange": return {
|
|
462
469
|
type: "textRange",
|
|
463
470
|
range: operation.range,
|
|
464
|
-
effect: "formatted"
|
|
471
|
+
effect: "formatted",
|
|
472
|
+
...story !== "main" && { story }
|
|
465
473
|
};
|
|
466
474
|
case "insertAfterBlock":
|
|
467
475
|
case "insertBeforeBlock": return {
|
|
468
476
|
type: "insertion",
|
|
469
|
-
story
|
|
477
|
+
story,
|
|
470
478
|
anchorBlockId: operation.blockId,
|
|
471
479
|
position: operation.type === "insertBeforeBlock" ? "before" : "after",
|
|
472
480
|
content: "block"
|
|
473
481
|
};
|
|
474
482
|
case "deleteBlock": return {
|
|
475
483
|
type: "block",
|
|
476
|
-
story
|
|
484
|
+
story,
|
|
477
485
|
blockId: operation.blockId,
|
|
478
486
|
effect: "deleted"
|
|
479
487
|
};
|
|
480
488
|
case "commentOnBlock": return {
|
|
481
489
|
type: "block",
|
|
482
|
-
story
|
|
490
|
+
story,
|
|
483
491
|
blockId: operation.blockId,
|
|
484
492
|
effect: "commented"
|
|
485
493
|
};
|
|
486
494
|
case "insertSignatureTable": return {
|
|
487
495
|
type: "insertion",
|
|
488
|
-
story
|
|
496
|
+
story,
|
|
489
497
|
anchorBlockId: operation.blockId,
|
|
490
498
|
position: operation.position ?? "after",
|
|
491
499
|
content: "signatureTable"
|
|
@@ -493,7 +501,12 @@ const getPrimaryAffectedTarget = (operation) => {
|
|
|
493
501
|
}
|
|
494
502
|
};
|
|
495
503
|
/** Build deterministic affected-target receipts from operations and their applied entries. */
|
|
496
|
-
const getFolioDocumentOperationReceipts = (operations, applied) => {
|
|
504
|
+
const getFolioDocumentOperationReceipts = (operations, applied) => getFolioDocumentOperationReceiptsForStory({
|
|
505
|
+
operations,
|
|
506
|
+
applied,
|
|
507
|
+
story: "main"
|
|
508
|
+
});
|
|
509
|
+
const getFolioDocumentOperationReceiptsForStory = ({ operations, applied, story }) => {
|
|
497
510
|
const appliedById = /* @__PURE__ */ new Map();
|
|
498
511
|
applied.forEach((operation) => {
|
|
499
512
|
appliedById.set(operation.id, operation);
|
|
@@ -502,7 +515,7 @@ const getFolioDocumentOperationReceipts = (operations, applied) => {
|
|
|
502
515
|
operations.forEach((operation, operationIndex) => {
|
|
503
516
|
const appliedOperation = appliedById.get(operation.id);
|
|
504
517
|
if (!appliedOperation) return;
|
|
505
|
-
const affected = [getPrimaryAffectedTarget(operation)];
|
|
518
|
+
const affected = [getPrimaryAffectedTarget(operation, story)];
|
|
506
519
|
if (appliedOperation.commentId !== void 0) affected.push({
|
|
507
520
|
type: "comment",
|
|
508
521
|
commentId: appliedOperation.commentId
|
|
@@ -515,7 +528,7 @@ const getFolioDocumentOperationReceipts = (operations, applied) => {
|
|
|
515
528
|
});
|
|
516
529
|
return receipts;
|
|
517
530
|
};
|
|
518
|
-
const applyFolioDocumentOperations = ({ view, snapshot, batch, author, createCommentId, createUndoHandle }) => {
|
|
531
|
+
const applyFolioDocumentOperations = ({ view, snapshot, batch, story = "main", author, createCommentId, createUndoHandle }) => {
|
|
519
532
|
const parsedBatch = parseFolioDocumentOperationBatch(batch);
|
|
520
533
|
const apply = ({ targetView, targetCreateCommentId = createCommentId, preview = false }) => {
|
|
521
534
|
return (preview ? previewFolioAIEditOperations : applyFolioAIEditOperations)({
|
|
@@ -556,7 +569,11 @@ const applyFolioDocumentOperations = ({ view, snapshot, batch, author, createCom
|
|
|
556
569
|
applied: previewResult.applied.map(({ id }) => ({ id })),
|
|
557
570
|
skipped: previewResult.skipped,
|
|
558
571
|
issues: getFolioDocumentOperationIssues(parsedBatch.operations, previewResult.skipped),
|
|
559
|
-
receipts:
|
|
572
|
+
receipts: getFolioDocumentOperationReceiptsForStory({
|
|
573
|
+
operations: parsedBatch.operations,
|
|
574
|
+
applied: previewResult.applied,
|
|
575
|
+
story
|
|
576
|
+
}),
|
|
560
577
|
undoHandle: null
|
|
561
578
|
};
|
|
562
579
|
}
|
|
@@ -570,7 +587,11 @@ const applyFolioDocumentOperations = ({ view, snapshot, batch, author, createCom
|
|
|
570
587
|
status: "committed",
|
|
571
588
|
...result,
|
|
572
589
|
issues: getFolioDocumentOperationIssues(parsedBatch.operations, result.skipped),
|
|
573
|
-
receipts:
|
|
590
|
+
receipts: getFolioDocumentOperationReceiptsForStory({
|
|
591
|
+
operations: parsedBatch.operations,
|
|
592
|
+
applied: result.applied,
|
|
593
|
+
story
|
|
594
|
+
}),
|
|
574
595
|
undoHandle: result.applied.length > 0 && createUndoHandle !== void 0 ? createUndoHandle() : null
|
|
575
596
|
};
|
|
576
597
|
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { FolioDocumentStoryHandle } from "./ai-edits/headless.js";
|
|
2
|
+
|
|
3
|
+
//#region src/document-stories.d.ts
|
|
4
|
+
type FolioDocumentStoryPair = {
|
|
5
|
+
baseStory: FolioDocumentStoryHandle | null;
|
|
6
|
+
revisedStory: FolioDocumentStoryHandle | null;
|
|
7
|
+
};
|
|
8
|
+
declare const pairFolioDocumentStories: (baseStories: readonly FolioDocumentStoryHandle[], revisedStories: readonly FolioDocumentStoryHandle[]) => FolioDocumentStoryPair[];
|
|
9
|
+
//#endregion
|
|
10
|
+
export { FolioDocumentStoryPair, pairFolioDocumentStories };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
//#region src/document-stories.ts
|
|
2
|
+
const documentStoryKey = (story) => {
|
|
3
|
+
if (story.type === "main") return story.type;
|
|
4
|
+
if (story.type === "header" || story.type === "footer") return `${story.type}:${story.relationshipId}`;
|
|
5
|
+
return `${story.type}:${String(story.noteId)}`;
|
|
6
|
+
};
|
|
7
|
+
const pairFolioDocumentStories = (baseStories, revisedStories) => {
|
|
8
|
+
const revisedByKey = new Map(revisedStories.map((story) => [documentStoryKey(story), story]));
|
|
9
|
+
const pairedKeys = /* @__PURE__ */ new Set();
|
|
10
|
+
const pairs = [];
|
|
11
|
+
for (const baseStory of baseStories) {
|
|
12
|
+
const key = documentStoryKey(baseStory);
|
|
13
|
+
const revisedStory = revisedByKey.get(key) ?? null;
|
|
14
|
+
pairs.push({
|
|
15
|
+
baseStory,
|
|
16
|
+
revisedStory
|
|
17
|
+
});
|
|
18
|
+
if (revisedStory) pairedKeys.add(key);
|
|
19
|
+
}
|
|
20
|
+
for (const revisedStory of revisedStories) if (!pairedKeys.has(documentStoryKey(revisedStory))) pairs.push({
|
|
21
|
+
baseStory: null,
|
|
22
|
+
revisedStory
|
|
23
|
+
});
|
|
24
|
+
return pairs;
|
|
25
|
+
};
|
|
26
|
+
//#endregion
|
|
27
|
+
export { pairFolioDocumentStories };
|
|
@@ -3,10 +3,10 @@ import { parseBookmarkEnd, parseBookmarkStart } from "./bookmarkParser.js";
|
|
|
3
3
|
import { parseSdtProperties } from "./sdtProperties.js";
|
|
4
4
|
import { parseParagraph } from "./paragraphParser.js";
|
|
5
5
|
import { appendBookmarkMarkerToLastParagraphInBlocks, prependBookmarkMarkersToFirstParagraphInBlocks } from "./bookmarkPlacement.js";
|
|
6
|
+
import { convertBulletToUnicode } from "./bulletMarkers.js";
|
|
7
|
+
import { padDecimal } from "./numberingParser.js";
|
|
6
8
|
import { enrichParagraphTextBoxes } from "./paragraphTextBoxEnrichment.js";
|
|
7
9
|
import { parseTable } from "./tableParser.js";
|
|
8
|
-
import { padDecimal } from "./numberingParser.js";
|
|
9
|
-
import { convertBulletToUnicode } from "./bulletMarkers.js";
|
|
10
10
|
//#region src/docx/blockContentParser.ts
|
|
11
11
|
const toRoman = (numParam) => {
|
|
12
12
|
let num = numParam;
|
|
@@ -75,7 +75,7 @@ function parseComments(commentsXml, styles, theme, rels, media, commentsExtensib
|
|
|
75
75
|
for (const child of children) {
|
|
76
76
|
if ((child.name?.replace(/^.*:/u, "") ?? "") !== "comment") continue;
|
|
77
77
|
const id = Number.parseInt(getAttribute(child, "w", "id") ?? "0", 10);
|
|
78
|
-
const author = getAttribute(child, "w", "author")
|
|
78
|
+
const author = getAttribute(child, "w", "author")?.trim() || "Unknown";
|
|
79
79
|
const rawInitials = getAttribute(child, "w", "initials");
|
|
80
80
|
const initials = rawInitials !== null ? String(rawInitials) : void 0;
|
|
81
81
|
const rawDate = getAttribute(child, "w", "date");
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { document_d_exports } from "../types/document.js";
|
|
2
|
-
import { FolioDocxCompatibilityHost, FolioDocxCompatibilityProfile, FolioDocxFeatureCapability } from "./capabilities.js";
|
|
3
2
|
|
|
4
3
|
//#region src/docx/compatibility.d.ts
|
|
5
4
|
type DocxCompatibilityReason = "opaqueDrawing";
|
|
5
|
+
type FolioDocxCompatibilityHost = "browser" | "server" | "unknown";
|
|
6
|
+
type FolioDocxCompatibilityProfile = document_d_exports.DocxConformanceClass;
|
|
6
7
|
type DocxCompatibilityContext = {
|
|
7
8
|
host: FolioDocxCompatibilityHost;
|
|
8
9
|
profile: FolioDocxCompatibilityProfile;
|
|
@@ -24,11 +25,6 @@ type DocxCompatibilityLocation = {
|
|
|
24
25
|
};
|
|
25
26
|
type DocxCompatibilityIssue = {
|
|
26
27
|
code: DocxCompatibilityReason;
|
|
27
|
-
capability: FolioDocxFeatureCapability;
|
|
28
|
-
coverage: {
|
|
29
|
-
host: "covered" | "unknown" | "unverified";
|
|
30
|
-
profile: "covered" | "unknown" | "unverified";
|
|
31
|
-
};
|
|
32
28
|
location: DocxCompatibilityLocation;
|
|
33
29
|
};
|
|
34
30
|
type DocxCompatibility = {
|
|
@@ -41,4 +37,4 @@ type DocxCompatibility = {
|
|
|
41
37
|
};
|
|
42
38
|
declare const inspectDocxCompatibility: (doc: document_d_exports.Document, options?: InspectDocxCompatibilityOptions) => DocxCompatibility;
|
|
43
39
|
//#endregion
|
|
44
|
-
export { DocxCompatibility, DocxCompatibilityContext, DocxCompatibilityIssue, DocxCompatibilityLocation, DocxCompatibilityPart, DocxCompatibilityReason, InspectDocxCompatibilityOptions, inspectDocxCompatibility };
|
|
40
|
+
export { DocxCompatibility, DocxCompatibilityContext, DocxCompatibilityIssue, DocxCompatibilityLocation, DocxCompatibilityPart, DocxCompatibilityReason, FolioDocxCompatibilityHost, FolioDocxCompatibilityProfile, InspectDocxCompatibilityOptions, inspectDocxCompatibility };
|
|
@@ -1,29 +1,18 @@
|
|
|
1
|
-
import { getFolioDocxCapability } from "./capabilities.js";
|
|
2
1
|
import { DOCX_CONFORMANCE_CLASSES } from "@stll/docx-core/model";
|
|
3
2
|
//#region src/docx/compatibility.ts
|
|
4
3
|
const resolveCompatibilityContext = (doc, options) => ({
|
|
5
4
|
host: options.host ?? "unknown",
|
|
6
5
|
profile: options.profile ?? doc.package.conformanceClass ?? DOCX_CONFORMANCE_CLASSES.UNKNOWN
|
|
7
6
|
});
|
|
8
|
-
const getCoverageState = (value, coveredValues) => {
|
|
9
|
-
if (value === "unknown") return "unknown";
|
|
10
|
-
return coveredValues.includes(value) ? "covered" : "unverified";
|
|
11
|
-
};
|
|
12
7
|
const inspectDocxCompatibility = (doc, options = {}) => {
|
|
13
8
|
const context = resolveCompatibilityContext(doc, options);
|
|
14
9
|
const reasons = /* @__PURE__ */ new Set();
|
|
15
10
|
const issues = [];
|
|
16
11
|
const record = (location) => {
|
|
17
12
|
const code = "opaqueDrawing";
|
|
18
|
-
const capability = getFolioDocxCapability(code);
|
|
19
13
|
reasons.add(code);
|
|
20
14
|
issues.push({
|
|
21
15
|
code,
|
|
22
|
-
capability,
|
|
23
|
-
coverage: {
|
|
24
|
-
host: getCoverageState(context.host, capability.hosts),
|
|
25
|
-
profile: getCoverageState(context.profile, capability.profiles)
|
|
26
|
-
},
|
|
27
16
|
location
|
|
28
17
|
});
|
|
29
18
|
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { document_d_exports } from "../types/document.js";
|
|
2
|
+
|
|
3
|
+
//#region src/docx/corePropertiesParser.d.ts
|
|
4
|
+
type DocumentProperties = NonNullable<document_d_exports.DocxPackage["properties"]>;
|
|
5
|
+
/** Parse recognized package metadata from `docProps/core.xml`. */
|
|
6
|
+
declare const parseCoreProperties: (xml: string | null) => DocumentProperties | undefined;
|
|
7
|
+
//#endregion
|
|
8
|
+
export { parseCoreProperties };
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { findChildByLocalName, getTextContent, parseXmlDocument } from "./xmlParser.js";
|
|
2
|
+
//#region src/docx/corePropertiesParser.ts
|
|
3
|
+
const STRING_PROPERTIES = [
|
|
4
|
+
"title",
|
|
5
|
+
"subject",
|
|
6
|
+
"creator",
|
|
7
|
+
"keywords",
|
|
8
|
+
"description",
|
|
9
|
+
"lastModifiedBy"
|
|
10
|
+
];
|
|
11
|
+
const parseRevision = (value) => {
|
|
12
|
+
if (!/^\d+$/u.test(value)) return;
|
|
13
|
+
const revision = Number(value);
|
|
14
|
+
return Number.isSafeInteger(revision) ? revision : void 0;
|
|
15
|
+
};
|
|
16
|
+
const parseDate = (value) => {
|
|
17
|
+
const timestamp = Date.parse(value);
|
|
18
|
+
return Number.isNaN(timestamp) ? void 0 : new Date(timestamp);
|
|
19
|
+
};
|
|
20
|
+
/** Parse recognized package metadata from `docProps/core.xml`. */
|
|
21
|
+
const parseCoreProperties = (xml) => {
|
|
22
|
+
if (!xml) return;
|
|
23
|
+
const root = parseXmlDocument(xml);
|
|
24
|
+
if (!root) return;
|
|
25
|
+
const properties = {};
|
|
26
|
+
let recognizedPropertyCount = 0;
|
|
27
|
+
for (const property of STRING_PROPERTIES) {
|
|
28
|
+
const element = findChildByLocalName(root, property);
|
|
29
|
+
if (!element) continue;
|
|
30
|
+
properties[property] = getTextContent(element);
|
|
31
|
+
recognizedPropertyCount++;
|
|
32
|
+
}
|
|
33
|
+
const revisionElement = findChildByLocalName(root, "revision");
|
|
34
|
+
if (revisionElement) {
|
|
35
|
+
const revision = parseRevision(getTextContent(revisionElement));
|
|
36
|
+
if (revision !== void 0) {
|
|
37
|
+
properties.revision = revision;
|
|
38
|
+
recognizedPropertyCount++;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
for (const property of ["created", "modified"]) {
|
|
42
|
+
const element = findChildByLocalName(root, property);
|
|
43
|
+
if (!element) continue;
|
|
44
|
+
const date = parseDate(getTextContent(element));
|
|
45
|
+
if (date !== void 0) {
|
|
46
|
+
properties[property] = date;
|
|
47
|
+
recognizedPropertyCount++;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return recognizedPropertyCount > 0 ? properties : void 0;
|
|
51
|
+
};
|
|
52
|
+
//#endregion
|
|
53
|
+
export { parseCoreProperties };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { bytesEqual, joinBytes, padToBlock, passwordToUtf16Le, toArrayBuffer, writeUint32Le } from "./cryptoBytes.js";
|
|
2
1
|
import { DOCX_ENCRYPTION_ERROR_CODES, DocxEncryptionError } from "./errors.js";
|
|
2
|
+
import { bytesEqual, joinBytes, padToBlock, passwordToUtf16Le, toArrayBuffer, writeUint32Le } from "./cryptoBytes.js";
|
|
3
3
|
//#region src/docx/encryption/agileDecryption.ts
|
|
4
4
|
/**
|
|
5
5
|
* Agile Encryption decryption (Office 2010+) using Web Crypto.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { decodeBase64 } from "./cryptoBytes.js";
|
|
2
1
|
import { DOCX_ENCRYPTION_ERROR_CODES, DocxEncryptionError } from "./errors.js";
|
|
2
|
+
import { decodeBase64 } from "./cryptoBytes.js";
|
|
3
3
|
//#region src/docx/encryption/encryptionInfo.ts
|
|
4
4
|
/**
|
|
5
5
|
* Parse the EncryptionInfo stream for Agile Encryption (Office 2010+).
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { toArrayBuffer } from "./cryptoBytes.js";
|
|
2
1
|
import { DOCX_ENCRYPTION_ERROR_CODES, DocxEncryptionError } from "./errors.js";
|
|
2
|
+
import { toArrayBuffer } from "./cryptoBytes.js";
|
|
3
3
|
import { decryptAgileEncryptedPackage } from "./agileDecryption.js";
|
|
4
4
|
import { readEncryptedPackageStreams } from "./compoundFile.js";
|
|
5
5
|
import { DOCX_CONTAINER_TYPES, detectDocxContainerType } from "./containerFormat.js";
|