@stll/folio-core 0.10.0 → 0.12.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/dist/ai-edits/apply.js +602 -50
- package/dist/ai-edits/block-identity.d.ts +4 -0
- package/dist/ai-edits/block-identity.js +9 -0
- package/dist/ai-edits/blockRange.d.ts +28 -1
- package/dist/ai-edits/blockRange.js +67 -1
- package/dist/ai-edits/headless.d.ts +4 -4
- package/dist/ai-edits/headless.js +9 -9
- package/dist/ai-edits/index.d.ts +2 -2
- package/dist/ai-edits/index.js +2 -2
- package/dist/ai-edits/read.d.ts +7 -7
- package/dist/ai-edits/read.js +110 -3
- package/dist/ai-edits/table-cell-mutations.d.ts +48 -0
- package/dist/ai-edits/table-cell-mutations.js +237 -0
- package/dist/ai-edits/table-mutation-plan.d.ts +38 -0
- package/dist/ai-edits/table-mutation-plan.js +90 -0
- package/dist/ai-edits/table-row-column-mutations.d.ts +100 -0
- package/dist/ai-edits/table-row-column-mutations.js +300 -0
- package/dist/ai-edits/table-targets.d.ts +32 -0
- package/dist/ai-edits/table-targets.js +70 -0
- package/dist/ai-edits/types.d.ts +34 -0
- package/dist/compat/eigenpal.js +1 -1
- package/dist/content-controls/mutateContentControls.js +1 -1
- package/dist/controller/activeEditorStory.d.ts +36 -0
- package/dist/controller/activeEditorStory.js +30 -0
- package/dist/controller/collaborationModules.d.ts +7 -0
- package/dist/controller/collaborationModules.js +15 -0
- package/dist/controller/contentControlWidgetController.d.ts +55 -0
- package/dist/controller/contentControlWidgetController.js +141 -0
- package/dist/controller/folioEditor.d.ts +1 -1
- package/dist/controller/fontReadiness.js +2 -0
- package/dist/controller/headerFooterEditorManager.d.ts +41 -0
- package/dist/controller/headerFooterEditorManager.js +182 -0
- package/dist/controller/hiddenEditorApi.js +2 -2
- package/dist/controller/hiddenEditorManager.d.ts +13 -2
- package/dist/controller/hiddenEditorManager.js +32 -11
- package/dist/controller/layoutPipeline.d.ts +2 -0
- package/dist/controller/layoutPipeline.js +16 -1
- package/dist/controller/noteEditorManager.d.ts +36 -0
- package/dist/controller/noteEditorManager.js +210 -0
- package/dist/document-operations.d.ts +35 -3
- package/dist/document-operations.js +161 -3
- package/dist/docx/blockContentParser.js +2 -2
- package/dist/docx/commentParser.js +6 -1
- package/dist/docx/conformance.js +8 -1
- package/dist/docx/documentGrid.d.ts +8 -0
- package/dist/docx/documentGrid.js +8 -0
- package/dist/docx/drawingUtils.js +1 -1
- package/dist/docx/ensureParaIds.js +1 -1
- package/dist/docx/fieldParser.js +1 -1
- package/dist/docx/notePropertiesParser.js +1 -1
- package/dist/docx/numberingParser.js +1 -1
- package/dist/docx/paragraphParser.js +63 -58
- package/dist/docx/paragraphTextBoxEnrichment.d.ts +2 -1
- package/dist/docx/paragraphTextBoxEnrichment.js +67 -13
- package/dist/docx/paragraphTraversal.js +1 -1
- package/dist/docx/parser.js +3 -3
- package/dist/docx/rezip.js +1 -1
- package/dist/docx/runParser.js +4 -2
- package/dist/docx/sdtProperties.js +1 -1
- package/dist/docx/sectionParser.js +1 -1
- package/dist/docx/selectiveSave.js +1 -1
- package/dist/docx/serializer/commentSerializer.js +1 -2
- package/dist/docx/serializer/documentSerializer.js +2 -2
- package/dist/docx/serializer/headerFooterSerializer.js +2 -2
- package/dist/docx/serializer/noteSerializer.js +2 -2
- package/dist/docx/serializer/paragraphSerializer.js +7 -1
- package/dist/docx/serializer/runSerializer.js +4 -2
- package/dist/docx/serializer/stylesSerializer.js +1 -1
- package/dist/docx/serializer/tableSerializer.d.ts +5 -4
- package/dist/docx/serializer/tableSerializer.js +17 -13
- package/dist/docx/server/applyDocxXmlPatchProposal.d.ts +87 -0
- package/dist/docx/server/applyDocxXmlPatchProposal.js +204 -0
- package/dist/docx/server/boundedArchive.d.ts +14 -3
- package/dist/docx/server/boundedArchive.js +56 -11
- package/dist/docx/server/evaluateDocxXmlPatchProposal.d.ts +85 -0
- package/dist/docx/server/evaluateDocxXmlPatchProposal.js +361 -0
- package/dist/docx/server/inspectDocxPackage.d.ts +70 -0
- package/dist/docx/server/inspectDocxPackage.js +217 -0
- package/dist/docx/server/validateDocxConformance.d.ts +41 -0
- package/dist/docx/server/validateDocxConformance.js +336 -0
- package/dist/docx/settingsParser.js +11 -1
- package/dist/docx/shapeParser.js +1 -1
- package/dist/docx/styleParser.js +4 -2
- package/dist/docx/tableParser.js +18 -7
- package/dist/docx/textBoxParser.d.ts +3 -3
- package/dist/docx/textBoxParser.js +16 -12
- package/dist/docx/xmlSafety.d.ts +5 -0
- package/dist/docx/xmlSafety.js +9 -0
- package/dist/fields/resolveFieldValues.js +1 -3
- package/dist/i18n/messages/catalogs.gen.d.ts +17 -0
- package/dist/i18n/messages/catalogs.gen.js +17 -0
- package/dist/i18n/messages/messages.gen.d.ts +1 -0
- package/dist/index.js +1 -1
- package/dist/layout-bridge/convert/footnoteLayout.d.ts +1 -0
- package/dist/layout-bridge/convert/footnoteLayout.js +47 -40
- package/dist/layout-bridge/convert/headerFooterLayout.d.ts +1 -0
- package/dist/layout-bridge/convert/headerFooterLayout.js +3 -0
- package/dist/layout-bridge/convert/templatePreviewFlow.js +3 -3
- package/dist/layout-bridge/convert/toFlowBlocks.d.ts +4 -2
- package/dist/layout-bridge/convert/toFlowBlocks.js +136 -20
- package/dist/layout-bridge/dom/noteStoryDom.d.ts +6 -0
- package/dist/layout-bridge/dom/noteStoryDom.js +17 -0
- package/dist/layout-bridge/engine/clickToPosition.js +2 -2
- package/dist/layout-engine/index.d.ts +2 -2
- package/dist/layout-engine/index.js +43 -28
- package/dist/layout-engine/justificationCompatibility.d.ts +6 -0
- package/dist/layout-engine/justificationCompatibility.js +8 -0
- package/dist/layout-engine/keep-together.js +11 -1
- package/dist/layout-engine/measure/cache.js +21 -5
- package/dist/layout-engine/measure/lineBreakProvider.js +53 -34
- package/dist/layout-engine/measure/measureBlocks.js +6 -3
- package/dist/layout-engine/measure/measureContainer.js +1 -1
- package/dist/layout-engine/measure/measureHelpers.d.ts +1 -1
- package/dist/layout-engine/measure/measureHelpers.js +3 -3
- package/dist/layout-engine/measure/measureParagraph.js +69 -25
- package/dist/layout-engine/measure/measureProvider.js +4 -3
- package/dist/layout-engine/measure/tableCellFlow.js +5 -2
- package/dist/layout-engine/measure/textBoxParagraphLayout.d.ts +9 -7
- package/dist/layout-engine/measure/textBoxParagraphLayout.js +22 -6
- package/dist/layout-engine/measure/textMeasurementPolicy.d.ts +3 -1
- package/dist/layout-engine/measure/textMeasurementPolicy.js +7 -1
- package/dist/layout-engine/paginator.js +5 -1
- package/dist/layout-engine/paragraphSpacing.d.ts +28 -4
- package/dist/layout-engine/paragraphSpacing.js +107 -13
- package/dist/layout-engine/renderedBreakReconciliation.js +1 -1
- package/dist/layout-engine/types.d.ts +26 -13
- package/dist/layout-painter/registry/modules/textBox.js +5 -1
- package/dist/layout-painter/renderPage.d.ts +5 -2
- package/dist/layout-painter/renderPage.js +56 -12
- package/dist/layout-painter/renderParagraph.js +22 -6
- package/dist/layout-painter/renderTable.d.ts +5 -1
- package/dist/layout-painter/renderTable.js +5 -2
- package/dist/layout-painter/renderTextBox.d.ts +2 -1
- package/dist/layout-painter/renderTextBox.js +25 -14
- package/dist/managers/DocumentLoaderManager.js +1 -1
- package/dist/managers/FindReplaceManager.d.ts +8 -0
- package/dist/managers/FindReplaceManager.js +18 -0
- package/dist/managers/TableSelectionManager.d.ts +6 -0
- package/dist/managers/TableSelectionManager.js +14 -0
- package/dist/model.js +1 -1
- package/dist/prosemirror/attrs/index.d.ts +4 -2
- package/dist/prosemirror/attrs/index.js +154 -18
- package/dist/prosemirror/commands/comments.d.ts +3 -3
- package/dist/prosemirror/commands/comments.js +248 -12
- package/dist/prosemirror/commands/contentControls.js +1 -1
- package/dist/prosemirror/commands/index.js +1 -1
- package/dist/prosemirror/commands/pageBreak.js +1 -1
- package/dist/prosemirror/commands/propertyChangeScope.d.ts +2 -2
- package/dist/prosemirror/commands/propertyChangeScope.js +3 -2
- package/dist/prosemirror/commands/tableCellMergeResolution.d.ts +9 -0
- package/dist/prosemirror/commands/tableCellMergeResolution.js +181 -0
- package/dist/prosemirror/conversion/fromProseDoc.d.ts +2 -1
- package/dist/prosemirror/conversion/fromProseDoc.js +286 -61
- package/dist/prosemirror/conversion/sdtAttrs.d.ts +9 -0
- package/dist/prosemirror/conversion/sdtAttrs.js +49 -0
- package/dist/prosemirror/conversion/toProseDoc.d.ts +2 -1
- package/dist/prosemirror/conversion/toProseDoc.js +347 -98
- package/dist/prosemirror/extensions/ExtensionManager.js +1 -1
- package/dist/prosemirror/extensions/StarterKit.js +6 -1
- package/dist/prosemirror/extensions/core/ParagraphExtension.js +4 -1
- package/dist/prosemirror/extensions/features/BaseKeymapExtension.js +1 -0
- package/dist/prosemirror/extensions/features/ListExtension.js +1 -1
- package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.d.ts +10 -1
- package/dist/prosemirror/extensions/features/ParaIdAllocatorExtension.js +93 -2
- package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.d.ts +2 -1
- package/dist/prosemirror/extensions/features/ParagraphChangeTrackerExtension.js +6 -2
- package/dist/prosemirror/extensions/marks/CharacterSpacingExtension.js +1 -1
- package/dist/prosemirror/extensions/marks/TrackedChangeExtensions.d.ts +9 -1
- package/dist/prosemirror/extensions/marks/TrackedChangeExtensions.js +24 -1
- package/dist/prosemirror/extensions/nodes/FieldExtension.js +1 -1
- package/dist/prosemirror/extensions/nodes/RenderedPageBreakExtension.d.ts +7 -0
- package/dist/prosemirror/extensions/nodes/RenderedPageBreakExtension.js +22 -0
- package/dist/prosemirror/extensions/nodes/TableExtension.js +9 -3
- package/dist/prosemirror/extensions/nodes/TextBoxAnchorExtension.d.ts +13 -0
- package/dist/prosemirror/extensions/nodes/TextBoxAnchorExtension.js +41 -0
- package/dist/prosemirror/extensions/nodes/TextBoxExtension.d.ts +5 -2
- package/dist/prosemirror/extensions/nodes/TextBoxExtension.js +4 -1
- package/dist/prosemirror/findReplaceSelection.d.ts +6 -1
- package/dist/prosemirror/findReplaceSelection.js +57 -13
- package/dist/prosemirror/plugins/contentControlWidgets.d.ts +34 -8
- package/dist/prosemirror/plugins/contentControlWidgets.js +125 -91
- package/dist/prosemirror/plugins/selectionTracker.js +1 -0
- package/dist/prosemirror/plugins/suggestionMode.js +1 -1
- package/dist/prosemirror/schema/index.d.ts +2 -2
- package/dist/prosemirror/schema/marks.d.ts +5 -1
- package/dist/prosemirror/schema/nodes.d.ts +64 -7
- package/dist/prosemirror/selectionState.js +1 -0
- package/dist/prosemirror/styles/resolvedStyleAttrs.js +1 -0
- package/dist/prosemirror/tableCellMergeRevision.d.ts +9 -0
- package/dist/prosemirror/tableCellMergeRevision.js +22 -0
- package/dist/prosemirror/textBoxAnchorAttrs.d.ts +9 -0
- package/dist/prosemirror/textBoxAnchorAttrs.js +33 -0
- package/dist/prosemirror/utils/extractTrackedChanges.d.ts +1 -1
- package/dist/prosemirror/utils/extractTrackedChanges.js +62 -14
- package/dist/prosemirror/validation.js +9 -1
- package/dist/render-dom/BodySelectionOverlay.d.ts +31 -0
- package/dist/render-dom/BodySelectionOverlay.js +76 -0
- package/dist/render-dom/HeaderFooterSelectionOverlay.d.ts +28 -0
- package/dist/render-dom/HeaderFooterSelectionOverlay.js +121 -0
- package/dist/render-dom/RemoteSelectionOverlay.d.ts +30 -0
- package/dist/render-dom/RemoteSelectionOverlay.js +67 -0
- package/dist/render-dom/RenderedDomContext.d.ts +40 -0
- package/dist/render-dom/RenderedDomContext.js +126 -0
- package/dist/render-dom/resolveSidebarItemPositions.d.ts +33 -0
- package/dist/render-dom/resolveSidebarItemPositions.js +45 -0
- package/dist/server.d.ts +6 -2
- package/dist/server.js +5 -1
- package/dist/utils/findReplace.d.ts +32 -0
- package/dist/utils/findReplace.js +118 -0
- package/dist/utils/fontFamilyMerge.js +9 -11
- package/dist/utils/fontLoader.js +3 -2
- package/dist/utils/fontResolver.js +22 -4
- package/dist/utils/fontWeights.d.ts +1 -1
- package/dist/utils/fontWeights.js +1 -1
- package/dist/utils/headerFooter.js +24 -1
- package/dist/utils/paragraphFormattingMerge.js +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { RenderedDomContext } from "./RenderedDomContext.js";
|
|
2
|
+
|
|
3
|
+
//#region src/render-dom/resolveSidebarItemPositions.d.ts
|
|
4
|
+
type RenderedSidebarItem = {
|
|
5
|
+
id: string;
|
|
6
|
+
anchorPos: number;
|
|
7
|
+
anchorKey?: string;
|
|
8
|
+
priority?: number;
|
|
9
|
+
fixedY?: number;
|
|
10
|
+
estimatedHeight?: number;
|
|
11
|
+
};
|
|
12
|
+
type ResolvedSidebarItemPosition<T extends RenderedSidebarItem = RenderedSidebarItem> = {
|
|
13
|
+
item: T;
|
|
14
|
+
y: number;
|
|
15
|
+
};
|
|
16
|
+
type ResolveSidebarItemPositionsOptions<T extends RenderedSidebarItem> = {
|
|
17
|
+
items: T[];
|
|
18
|
+
anchorPositions: Map<string, number>;
|
|
19
|
+
renderedDomContext: RenderedDomContext | null;
|
|
20
|
+
zoom: number;
|
|
21
|
+
cardHeights: Map<string, number>;
|
|
22
|
+
lastKnown: Map<string, number>;
|
|
23
|
+
};
|
|
24
|
+
declare const resolveSidebarItemPositions: <T extends RenderedSidebarItem>({
|
|
25
|
+
items,
|
|
26
|
+
anchorPositions,
|
|
27
|
+
renderedDomContext,
|
|
28
|
+
zoom,
|
|
29
|
+
cardHeights,
|
|
30
|
+
lastKnown
|
|
31
|
+
}: ResolveSidebarItemPositionsOptions<T>) => ResolvedSidebarItemPosition<T>[];
|
|
32
|
+
//#endregion
|
|
33
|
+
export { RenderedSidebarItem, ResolveSidebarItemPositionsOptions, ResolvedSidebarItemPosition, resolveSidebarItemPositions };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
//#region src/render-dom/resolveSidebarItemPositions.ts
|
|
2
|
+
const MIN_CARD_GAP = 8;
|
|
3
|
+
const resolveSidebarItemPositions = ({ items, anchorPositions, renderedDomContext, zoom, cardHeights, lastKnown }) => {
|
|
4
|
+
if (items.length === 0) return [];
|
|
5
|
+
const containerOffset = renderedDomContext?.getContainerOffset();
|
|
6
|
+
const positioned = [];
|
|
7
|
+
for (const item of items) {
|
|
8
|
+
let targetY;
|
|
9
|
+
if (item.fixedY !== void 0) targetY = item.fixedY * zoom;
|
|
10
|
+
if (targetY === void 0 && item.anchorKey !== void 0) {
|
|
11
|
+
const anchorY = anchorPositions.get(item.anchorKey);
|
|
12
|
+
if (anchorY !== void 0) targetY = anchorY * zoom;
|
|
13
|
+
}
|
|
14
|
+
if (targetY === void 0 && renderedDomContext && containerOffset) {
|
|
15
|
+
const rect = renderedDomContext.getRectsForRange(item.anchorPos, item.anchorPos + 1).at(0);
|
|
16
|
+
if (rect) targetY = (rect.y + containerOffset.y) * zoom;
|
|
17
|
+
}
|
|
18
|
+
if (targetY === void 0) targetY = lastKnown.get(item.id);
|
|
19
|
+
if (targetY === void 0) continue;
|
|
20
|
+
positioned.push({
|
|
21
|
+
item,
|
|
22
|
+
targetY
|
|
23
|
+
});
|
|
24
|
+
lastKnown.set(item.id, targetY);
|
|
25
|
+
}
|
|
26
|
+
positioned.sort((left, right) => {
|
|
27
|
+
const positionDifference = left.targetY - right.targetY;
|
|
28
|
+
if (positionDifference !== 0) return positionDifference;
|
|
29
|
+
return (left.item.priority ?? 0) - (right.item.priority ?? 0);
|
|
30
|
+
});
|
|
31
|
+
const resolved = [];
|
|
32
|
+
let previousBottom = 0;
|
|
33
|
+
for (const position of positioned) {
|
|
34
|
+
const height = cardHeights.get(position.item.id) ?? position.item.estimatedHeight ?? 80;
|
|
35
|
+
const y = Math.max(position.targetY, previousBottom + MIN_CARD_GAP);
|
|
36
|
+
resolved.push({
|
|
37
|
+
item: position.item,
|
|
38
|
+
y
|
|
39
|
+
});
|
|
40
|
+
previousBottom = y + height;
|
|
41
|
+
}
|
|
42
|
+
return resolved;
|
|
43
|
+
};
|
|
44
|
+
//#endregion
|
|
45
|
+
export { resolveSidebarItemPositions };
|
package/dist/server.d.ts
CHANGED
|
@@ -13,8 +13,12 @@ import { createDocx } from "./docx/rezip.js";
|
|
|
13
13
|
import { EnsureParaIdsError, EnsureParaIdsOptions, EnsureParaIdsResult, ensureParaIds } from "./docx/ensureParaIds.js";
|
|
14
14
|
import { FOLIO_DOCUMENT_METADATA_PROPERTIES, FOLIO_DOCUMENT_PRIVACY_TRANSFORMS, FolioDocumentMetadataProperty, FolioDocumentPrivacyArchiveError, FolioDocumentPrivacyOptions, FolioDocumentPrivacyReport, FolioDocumentPrivacyTransform, InvalidFolioDocumentPrivacyOptionsError, RewriteDocxMetadataPrivacyResult, isFolioDocumentPrivacyTransform, rewriteDocxMetadataPrivacy } from "./docx/metadataPrivacy.js";
|
|
15
15
|
import { CreateCommentReplyInput, replyToComment } from "./docx/replyToComment.js";
|
|
16
|
-
import { DocxArchiveError } from "./docx/server/boundedArchive.js";
|
|
16
|
+
import { DocxArchiveError, DocxArchiveOptions } from "./docx/server/boundedArchive.js";
|
|
17
|
+
import { EvaluateDocxXmlPatchProposalArgs, FOLIO_DOCX_XML_PATCH_PROPOSAL_DEFAULTS, FOLIO_DOCX_XML_PATCH_PROPOSAL_ISSUE_CODES, FOLIO_DOCX_XML_PATCH_PROPOSAL_PROFILE, FOLIO_DOCX_XML_PATCH_PROPOSAL_VERSION, FolioDocxPreparedXmlReplacement, FolioDocxXmlPatchProposal, FolioDocxXmlPatchProposalEvaluation, FolioDocxXmlPatchProposalIssue, FolioDocxXmlPatchProposalIssueCode, FolioDocxXmlPatchProposalLimits, FolioDocxXmlReplacement, InvalidFolioDocxXmlPatchProposalError, InvalidFolioDocxXmlPatchProposalOptionsError, evaluateDocxXmlPatchProposal, parseFolioDocxXmlPatchProposal } from "./docx/server/evaluateDocxXmlPatchProposal.js";
|
|
18
|
+
import { FOLIO_DOCX_CONFORMANCE_CHECKS, FOLIO_DOCX_CONFORMANCE_ISSUE_CODES, FOLIO_DOCX_CONFORMANCE_PROFILE, FOLIO_DOCX_CONFORMANCE_REPORT_VERSION, FolioDocxConformanceCheck, FolioDocxConformanceCheckId, FolioDocxConformanceCheckStatus, FolioDocxConformanceIssue, FolioDocxConformanceIssueCode, FolioDocxConformanceReport, FolioDocxConformanceStatus, ValidateDocxConformanceOptions, validateDocxConformance } from "./docx/server/validateDocxConformance.js";
|
|
19
|
+
import { ApplyDocxXmlPatchProposalArgs, FOLIO_DOCX_XML_PATCH_APPLICATION_PROFILE, FOLIO_DOCX_XML_PATCH_APPLICATION_VERSION, FolioDocxXmlPatchApplication, FolioDocxXmlPatchApplicationError, FolioDocxXmlPatchApplicationReceipt, UnsupportedFolioDocxXmlPatchApplicationProfileError, applyDocxXmlPatchProposal } from "./docx/server/applyDocxXmlPatchProposal.js";
|
|
17
20
|
import { DocxParagraphSource, ExtractedDocxParagraph, ExtractedDocxText, extractDocxText } from "./docx/server/extractDocxText.js";
|
|
21
|
+
import { FOLIO_DOCX_PACKAGE_INSPECTION_DEFAULTS, FOLIO_DOCX_PACKAGE_INSPECTION_ERROR_CODES, FOLIO_DOCX_PACKAGE_INSPECTION_VERSION, FolioDocxInspectedXmlPart, FolioDocxPackageInspection, FolioDocxPackageInspectionError, FolioDocxPackageInspectionErrorCode, FolioDocxPackageInspectionLimits, FolioDocxPackagePart, FolioDocxPackagePartKind, InspectDocxPackageOptions, inspectDocxPackage } from "./docx/server/inspectDocxPackage.js";
|
|
18
22
|
import { GenerateRedlineDocxOptions, GenerateRedlineDocxResult, GenerateRedlineUnprocessedStory, InvalidGenerateRedlineDocxOptionsError, generateRedlineDocx } from "./redline.js";
|
|
19
23
|
import { FOLIO_VERSION_COMPARISON_PRIVACY_TRANSFORMS, FOLIO_VERSION_COMPARISON_SCOPES, FolioBlockDiff, FolioCompareDocxVersionsOptions, FolioDocumentMetadataValue, FolioFormatProperty, FolioMetadataDiff, FolioStoryDiff, FolioVersionBlockHandle, FolioVersionComparisonPrivacyTransform, FolioVersionComparisonScope, FolioVersionDiff, FolioVersionDiffPrivacyOptions, FolioVersionDiffPrivacyReport, FolioVersionDiffSegment, FolioVersionDiffSummaryCounts, InvalidFolioVersionComparisonOptionsError, applyFolioVersionDiffPrivacy, compareDocxVersions, isFolioVersionComparisonPrivacyTransform, isFolioVersionComparisonScope } from "./version-comparison.js";
|
|
20
|
-
export { type ApplyFolioAIEditsToBufferOptions, type ApplyFolioAIEditsToBufferResult, type CreateCommentReplyInput, type CreateEmptyDocumentOptions, DOCUMENT_PRESET_VERSION, DOCUMENT_STYLE_SET_VERSION, type DeriveBlockIdInput, type DocumentPreset, type DocumentStyleCatalog, type DocumentStyleCatalogEntry, type DocumentStyleSet, DocxArchiveError, type DocxParagraphSource, EnsureParaIdsError, type EnsureParaIdsOptions, type EnsureParaIdsResult, type ExtractDocumentStyleSetOptions, type ExtractedDocxParagraph, type ExtractedDocxText, FOLIO_DOCUMENT_METADATA_PROPERTIES, FOLIO_DOCUMENT_OPERATION_BATCH_MODES, FOLIO_DOCUMENT_OPERATION_CONTRACT_VERSION, FOLIO_DOCUMENT_OPERATION_MODES, FOLIO_DOCUMENT_OPERATION_MODES_BY_TYPE, FOLIO_DOCUMENT_OPERATION_PRECONDITIONS, FOLIO_DOCUMENT_OPERATION_STORIES, FOLIO_DOCUMENT_OPERATION_TYPES, FOLIO_DOCUMENT_PRIVACY_TRANSFORMS, FOLIO_RESOLVED_REVIEWED_VIEWS, FOLIO_REVIEWED_VIEWS, FOLIO_VERSION_COMPARISON_PRIVACY_TRANSFORMS, FOLIO_VERSION_COMPARISON_SCOPES, type FolioAIBlock, type FolioAIBlockAnchor, type FolioAIBlockKind, type FolioAIBlockPreviewRun, type FolioAIComment, type FolioAIEditApplyMode, type FolioAIEditApplyResult, type FolioAIEditOperation, type FolioAIEditPrecondition, type FolioAIEditSnapshot, type FolioAIInlineFormatting, type FolioAITextRangeHandle, type FolioApplyDocumentOperationsOptions, type FolioApplyDocumentOperationsToStoryOptions, type FolioApplyOperationsOptions, type FolioBlockDiff, type FolioBlockId, type FolioCompareDocxVersionsOptions, type FolioDocumentMetadataProperty, type FolioDocumentMetadataValue, type FolioDocumentNavigationTarget, 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 FolioDocumentOutline, type FolioDocumentOutlineEntry, FolioDocumentPrivacyArchiveError, type FolioDocumentPrivacyOptions, type FolioDocumentPrivacyReport, type FolioDocumentPrivacyTransform, type FolioDocumentSection, type FolioDocumentSectionHandle, type FolioDocumentSectionReadResult, type FolioDocumentStory, type FolioDocumentStoryHandle, FolioDocumentStoryNotFoundError, FolioDocxReviewer, type FolioDocxReviewerOptions, type FolioEditableDocumentStoryHandle, type FolioFormatProperty, type FolioMetadataDiff, type FolioReadReviewedStoryOptions, type FolioResolveReviewedStoryOptions, type FolioResolvedReviewedView, type FolioReviewChange, type FolioReviewChangeFilter, type FolioReviewChangeKind, type FolioReviewComment, type FolioReviewCommentFilter, type FolioReviewCommentReply, type FolioReviewReplyInput, type FolioReviewedStory, type FolioReviewedView, type FolioStoryDiff, type FolioVersionBlockHandle, type FolioVersionComparisonPrivacyTransform, type FolioVersionComparisonScope, type FolioVersionDiff, type FolioVersionDiffPrivacyOptions, type FolioVersionDiffPrivacyReport, type FolioVersionDiffSegment, type FolioVersionDiffSummaryCounts, type GenerateRedlineDocxOptions, type GenerateRedlineDocxResult, type GenerateRedlineUnprocessedStory, InvalidFolioDocumentOperationBatchError, InvalidFolioDocumentPrivacyOptionsError, InvalidFolioVersionComparisonOptionsError, InvalidGenerateRedlineDocxOptionsError, type RewriteDocxMetadataPrivacyResult, STELLA_STYLE_SET_NAME, UnsupportedFolioDocumentOperationVersionError, UnsupportedFolioReviewedViewError, applyFolioAIEditsToBuffer, applyFolioVersionDiffPrivacy, assertSupportedFolioDocumentOperationVersion, compareDocxVersions, createDocx, createEmptyDocument, createFolioAITextRangeHandle, createStellaStyleDocumentPreset, createStellaStyleSet, deriveBlockId, ensureParaIds, extractDocumentStyleSet, extractDocumentStyleSetFromDocx, extractDocxText, generateRedlineDocx, getFolioDocumentOperationCapabilities, getFolioDocumentOperationIssues, getFolioDocumentOperationReceipts, getFolioDocumentOutline, getFolioParaIdFromBlockId, inspectDocumentStyles, inspectDocumentStylesFromDocx, isFolioBlockId, isFolioDocumentOperationModeSupported, isFolioDocumentPrivacyTransform, isFolioResolvedReviewedView, isFolioReviewedView, isFolioVersionComparisonPrivacyTransform, isFolioVersionComparisonScope, isSequentialFolioBlockId, isSupportedFolioDocumentOperationVersion, parseFolioDocumentOperationBatch, readFolioDocumentSection, replyToComment, rewriteDocxMetadataPrivacy };
|
|
24
|
+
export { type ApplyDocxXmlPatchProposalArgs, type ApplyFolioAIEditsToBufferOptions, type ApplyFolioAIEditsToBufferResult, type CreateCommentReplyInput, type CreateEmptyDocumentOptions, DOCUMENT_PRESET_VERSION, DOCUMENT_STYLE_SET_VERSION, type DeriveBlockIdInput, type DocumentPreset, type DocumentStyleCatalog, type DocumentStyleCatalogEntry, type DocumentStyleSet, DocxArchiveError, type DocxArchiveOptions, type DocxParagraphSource, EnsureParaIdsError, type EnsureParaIdsOptions, type EnsureParaIdsResult, type EvaluateDocxXmlPatchProposalArgs, type ExtractDocumentStyleSetOptions, type ExtractedDocxParagraph, type ExtractedDocxText, FOLIO_DOCUMENT_METADATA_PROPERTIES, FOLIO_DOCUMENT_OPERATION_BATCH_MODES, FOLIO_DOCUMENT_OPERATION_CONTRACT_VERSION, FOLIO_DOCUMENT_OPERATION_MODES, FOLIO_DOCUMENT_OPERATION_MODES_BY_TYPE, FOLIO_DOCUMENT_OPERATION_PRECONDITIONS, FOLIO_DOCUMENT_OPERATION_STORIES, FOLIO_DOCUMENT_OPERATION_TYPES, FOLIO_DOCUMENT_PRIVACY_TRANSFORMS, FOLIO_DOCX_CONFORMANCE_CHECKS, FOLIO_DOCX_CONFORMANCE_ISSUE_CODES, FOLIO_DOCX_CONFORMANCE_PROFILE, FOLIO_DOCX_CONFORMANCE_REPORT_VERSION, FOLIO_DOCX_PACKAGE_INSPECTION_DEFAULTS, FOLIO_DOCX_PACKAGE_INSPECTION_ERROR_CODES, FOLIO_DOCX_PACKAGE_INSPECTION_VERSION, FOLIO_DOCX_XML_PATCH_APPLICATION_PROFILE, FOLIO_DOCX_XML_PATCH_APPLICATION_VERSION, FOLIO_DOCX_XML_PATCH_PROPOSAL_DEFAULTS, FOLIO_DOCX_XML_PATCH_PROPOSAL_ISSUE_CODES, FOLIO_DOCX_XML_PATCH_PROPOSAL_PROFILE, FOLIO_DOCX_XML_PATCH_PROPOSAL_VERSION, FOLIO_RESOLVED_REVIEWED_VIEWS, FOLIO_REVIEWED_VIEWS, FOLIO_VERSION_COMPARISON_PRIVACY_TRANSFORMS, FOLIO_VERSION_COMPARISON_SCOPES, type FolioAIBlock, type FolioAIBlockAnchor, type FolioAIBlockKind, type FolioAIBlockPreviewRun, type FolioAIComment, type FolioAIEditApplyMode, type FolioAIEditApplyResult, type FolioAIEditOperation, type FolioAIEditPrecondition, type FolioAIEditSnapshot, type FolioAIInlineFormatting, type FolioAITextRangeHandle, type FolioApplyDocumentOperationsOptions, type FolioApplyDocumentOperationsToStoryOptions, type FolioApplyOperationsOptions, type FolioBlockDiff, type FolioBlockId, type FolioCompareDocxVersionsOptions, type FolioDocumentMetadataProperty, type FolioDocumentMetadataValue, type FolioDocumentNavigationTarget, 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 FolioDocumentOutline, type FolioDocumentOutlineEntry, FolioDocumentPrivacyArchiveError, type FolioDocumentPrivacyOptions, type FolioDocumentPrivacyReport, type FolioDocumentPrivacyTransform, type FolioDocumentSection, type FolioDocumentSectionHandle, type FolioDocumentSectionReadResult, type FolioDocumentStory, type FolioDocumentStoryHandle, FolioDocumentStoryNotFoundError, type FolioDocxConformanceCheck, type FolioDocxConformanceCheckId, type FolioDocxConformanceCheckStatus, type FolioDocxConformanceIssue, type FolioDocxConformanceIssueCode, type FolioDocxConformanceReport, type FolioDocxConformanceStatus, type FolioDocxInspectedXmlPart, type FolioDocxPackageInspection, FolioDocxPackageInspectionError, type FolioDocxPackageInspectionErrorCode, type FolioDocxPackageInspectionLimits, type FolioDocxPackagePart, type FolioDocxPackagePartKind, type FolioDocxPreparedXmlReplacement, FolioDocxReviewer, type FolioDocxReviewerOptions, type FolioDocxXmlPatchApplication, FolioDocxXmlPatchApplicationError, type FolioDocxXmlPatchApplicationReceipt, type FolioDocxXmlPatchProposal, type FolioDocxXmlPatchProposalEvaluation, type FolioDocxXmlPatchProposalIssue, type FolioDocxXmlPatchProposalIssueCode, type FolioDocxXmlPatchProposalLimits, type FolioDocxXmlReplacement, type FolioEditableDocumentStoryHandle, type FolioFormatProperty, type FolioMetadataDiff, type FolioReadReviewedStoryOptions, type FolioResolveReviewedStoryOptions, type FolioResolvedReviewedView, type FolioReviewChange, type FolioReviewChangeFilter, type FolioReviewChangeKind, type FolioReviewComment, type FolioReviewCommentFilter, type FolioReviewCommentReply, type FolioReviewReplyInput, type FolioReviewedStory, type FolioReviewedView, type FolioStoryDiff, type FolioVersionBlockHandle, type FolioVersionComparisonPrivacyTransform, type FolioVersionComparisonScope, type FolioVersionDiff, type FolioVersionDiffPrivacyOptions, type FolioVersionDiffPrivacyReport, type FolioVersionDiffSegment, type FolioVersionDiffSummaryCounts, type GenerateRedlineDocxOptions, type GenerateRedlineDocxResult, type GenerateRedlineUnprocessedStory, type InspectDocxPackageOptions, InvalidFolioDocumentOperationBatchError, InvalidFolioDocumentPrivacyOptionsError, InvalidFolioDocxXmlPatchProposalError, InvalidFolioDocxXmlPatchProposalOptionsError, InvalidFolioVersionComparisonOptionsError, InvalidGenerateRedlineDocxOptionsError, type RewriteDocxMetadataPrivacyResult, STELLA_STYLE_SET_NAME, UnsupportedFolioDocumentOperationVersionError, UnsupportedFolioDocxXmlPatchApplicationProfileError, UnsupportedFolioReviewedViewError, type ValidateDocxConformanceOptions, applyDocxXmlPatchProposal, applyFolioAIEditsToBuffer, applyFolioVersionDiffPrivacy, assertSupportedFolioDocumentOperationVersion, compareDocxVersions, createDocx, createEmptyDocument, createFolioAITextRangeHandle, createStellaStyleDocumentPreset, createStellaStyleSet, deriveBlockId, ensureParaIds, evaluateDocxXmlPatchProposal, extractDocumentStyleSet, extractDocumentStyleSetFromDocx, extractDocxText, generateRedlineDocx, getFolioDocumentOperationCapabilities, getFolioDocumentOperationIssues, getFolioDocumentOperationReceipts, getFolioDocumentOutline, getFolioParaIdFromBlockId, inspectDocumentStyles, inspectDocumentStylesFromDocx, inspectDocxPackage, isFolioBlockId, isFolioDocumentOperationModeSupported, isFolioDocumentPrivacyTransform, isFolioResolvedReviewedView, isFolioReviewedView, isFolioVersionComparisonPrivacyTransform, isFolioVersionComparisonScope, isSequentialFolioBlockId, isSupportedFolioDocumentOperationVersion, parseFolioDocumentOperationBatch, parseFolioDocxXmlPatchProposal, readFolioDocumentSection, replyToComment, rewriteDocxMetadataPrivacy, validateDocxConformance };
|
package/dist/server.js
CHANGED
|
@@ -15,4 +15,8 @@ import { InvalidGenerateRedlineDocxOptionsError, generateRedlineDocx } from "./r
|
|
|
15
15
|
import { EnsureParaIdsError, ensureParaIds } from "./docx/ensureParaIds.js";
|
|
16
16
|
import { DocxArchiveError } from "./docx/server/boundedArchive.js";
|
|
17
17
|
import { extractDocxText } from "./docx/server/extractDocxText.js";
|
|
18
|
-
|
|
18
|
+
import { FOLIO_DOCX_PACKAGE_INSPECTION_DEFAULTS, FOLIO_DOCX_PACKAGE_INSPECTION_ERROR_CODES, FOLIO_DOCX_PACKAGE_INSPECTION_VERSION, FolioDocxPackageInspectionError, inspectDocxPackage } from "./docx/server/inspectDocxPackage.js";
|
|
19
|
+
import { FOLIO_DOCX_XML_PATCH_PROPOSAL_DEFAULTS, FOLIO_DOCX_XML_PATCH_PROPOSAL_ISSUE_CODES, FOLIO_DOCX_XML_PATCH_PROPOSAL_PROFILE, FOLIO_DOCX_XML_PATCH_PROPOSAL_VERSION, InvalidFolioDocxXmlPatchProposalError, InvalidFolioDocxXmlPatchProposalOptionsError, evaluateDocxXmlPatchProposal, parseFolioDocxXmlPatchProposal } from "./docx/server/evaluateDocxXmlPatchProposal.js";
|
|
20
|
+
import { FOLIO_DOCX_CONFORMANCE_CHECKS, FOLIO_DOCX_CONFORMANCE_ISSUE_CODES, FOLIO_DOCX_CONFORMANCE_PROFILE, FOLIO_DOCX_CONFORMANCE_REPORT_VERSION, validateDocxConformance } from "./docx/server/validateDocxConformance.js";
|
|
21
|
+
import { FOLIO_DOCX_XML_PATCH_APPLICATION_PROFILE, FOLIO_DOCX_XML_PATCH_APPLICATION_VERSION, FolioDocxXmlPatchApplicationError, UnsupportedFolioDocxXmlPatchApplicationProfileError, applyDocxXmlPatchProposal } from "./docx/server/applyDocxXmlPatchProposal.js";
|
|
22
|
+
export { DOCUMENT_PRESET_VERSION, DOCUMENT_STYLE_SET_VERSION, DocxArchiveError, EnsureParaIdsError, FOLIO_DOCUMENT_METADATA_PROPERTIES, FOLIO_DOCUMENT_OPERATION_BATCH_MODES, FOLIO_DOCUMENT_OPERATION_CONTRACT_VERSION, FOLIO_DOCUMENT_OPERATION_MODES, FOLIO_DOCUMENT_OPERATION_MODES_BY_TYPE, FOLIO_DOCUMENT_OPERATION_PRECONDITIONS, FOLIO_DOCUMENT_OPERATION_STORIES, FOLIO_DOCUMENT_OPERATION_TYPES, FOLIO_DOCUMENT_PRIVACY_TRANSFORMS, FOLIO_DOCX_CONFORMANCE_CHECKS, FOLIO_DOCX_CONFORMANCE_ISSUE_CODES, FOLIO_DOCX_CONFORMANCE_PROFILE, FOLIO_DOCX_CONFORMANCE_REPORT_VERSION, FOLIO_DOCX_PACKAGE_INSPECTION_DEFAULTS, FOLIO_DOCX_PACKAGE_INSPECTION_ERROR_CODES, FOLIO_DOCX_PACKAGE_INSPECTION_VERSION, FOLIO_DOCX_XML_PATCH_APPLICATION_PROFILE, FOLIO_DOCX_XML_PATCH_APPLICATION_VERSION, FOLIO_DOCX_XML_PATCH_PROPOSAL_DEFAULTS, FOLIO_DOCX_XML_PATCH_PROPOSAL_ISSUE_CODES, FOLIO_DOCX_XML_PATCH_PROPOSAL_PROFILE, FOLIO_DOCX_XML_PATCH_PROPOSAL_VERSION, FOLIO_RESOLVED_REVIEWED_VIEWS, FOLIO_REVIEWED_VIEWS, FOLIO_VERSION_COMPARISON_PRIVACY_TRANSFORMS, FOLIO_VERSION_COMPARISON_SCOPES, FolioDocumentPrivacyArchiveError, FolioDocumentStoryNotFoundError, FolioDocxPackageInspectionError, FolioDocxReviewer, FolioDocxXmlPatchApplicationError, InvalidFolioDocumentOperationBatchError, InvalidFolioDocumentPrivacyOptionsError, InvalidFolioDocxXmlPatchProposalError, InvalidFolioDocxXmlPatchProposalOptionsError, InvalidFolioVersionComparisonOptionsError, InvalidGenerateRedlineDocxOptionsError, STELLA_STYLE_SET_NAME, UnsupportedFolioDocumentOperationVersionError, UnsupportedFolioDocxXmlPatchApplicationProfileError, UnsupportedFolioReviewedViewError, applyDocxXmlPatchProposal, applyFolioAIEditsToBuffer, applyFolioVersionDiffPrivacy, assertSupportedFolioDocumentOperationVersion, compareDocxVersions, createDocx, createEmptyDocument, createFolioAITextRangeHandle, createStellaStyleDocumentPreset, createStellaStyleSet, deriveBlockId, ensureParaIds, evaluateDocxXmlPatchProposal, extractDocumentStyleSet, extractDocumentStyleSetFromDocx, extractDocxText, generateRedlineDocx, getFolioDocumentOperationCapabilities, getFolioDocumentOperationIssues, getFolioDocumentOperationReceipts, getFolioDocumentOutline, getFolioParaIdFromBlockId, inspectDocumentStyles, inspectDocumentStylesFromDocx, inspectDocxPackage, isFolioBlockId, isFolioDocumentOperationModeSupported, isFolioDocumentPrivacyTransform, isFolioResolvedReviewedView, isFolioReviewedView, isFolioVersionComparisonPrivacyTransform, isFolioVersionComparisonScope, isSequentialFolioBlockId, isSupportedFolioDocumentOperationVersion, parseFolioDocumentOperationBatch, parseFolioDocxXmlPatchProposal, readFolioDocumentSection, replyToComment, rewriteDocxMetadataPrivacy, validateDocxConformance };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { document_d_exports } from "../types/document.js";
|
|
2
|
+
import { Paragraph } from "../types/content.js";
|
|
3
|
+
|
|
4
|
+
//#region src/utils/findReplace.d.ts
|
|
5
|
+
type FindMatch = {
|
|
6
|
+
paragraphIndex: number;
|
|
7
|
+
contentIndex: number;
|
|
8
|
+
startOffset: number;
|
|
9
|
+
endOffset: number;
|
|
10
|
+
text: string;
|
|
11
|
+
};
|
|
12
|
+
type FindOptions = {
|
|
13
|
+
matchCase: boolean;
|
|
14
|
+
matchWholeWord: boolean;
|
|
15
|
+
useRegex?: boolean;
|
|
16
|
+
};
|
|
17
|
+
type FindResult = {
|
|
18
|
+
matches: FindMatch[];
|
|
19
|
+
totalCount: number;
|
|
20
|
+
currentIndex: number;
|
|
21
|
+
};
|
|
22
|
+
declare const createDefaultFindOptions: () => FindOptions;
|
|
23
|
+
declare const escapeRegexString: (value: string) => string;
|
|
24
|
+
declare const createSearchPattern: (searchText: string, options: FindOptions) => RegExp | null;
|
|
25
|
+
declare const findAllMatches: (content: string, searchText: string, options: FindOptions) => Array<{
|
|
26
|
+
start: number;
|
|
27
|
+
end: number;
|
|
28
|
+
}>;
|
|
29
|
+
declare const findInDocument: (document: document_d_exports.Document | null | undefined, searchText: string, options: FindOptions) => FindMatch[];
|
|
30
|
+
declare const findInParagraph: (paragraph: Paragraph, searchText: string, options: FindOptions, paragraphIndex: number) => FindMatch[];
|
|
31
|
+
//#endregion
|
|
32
|
+
export { FindMatch, FindOptions, FindResult, createDefaultFindOptions, createSearchPattern, escapeRegexString, findAllMatches, findInDocument, findInParagraph };
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
//#region src/utils/findReplace.ts
|
|
2
|
+
const createDefaultFindOptions = () => ({
|
|
3
|
+
matchCase: false,
|
|
4
|
+
matchWholeWord: false,
|
|
5
|
+
useRegex: false
|
|
6
|
+
});
|
|
7
|
+
const escapeRegexString = (value) => value.replace(/[.*+?^${}()|[\]\\]/gu, "\\$&");
|
|
8
|
+
const createSearchPattern = (searchText, options) => {
|
|
9
|
+
if (!searchText) return null;
|
|
10
|
+
try {
|
|
11
|
+
const source = options.useRegex ? searchText : escapeRegexString(searchText);
|
|
12
|
+
const pattern = options.matchWholeWord ? `\\b${source}\\b` : source;
|
|
13
|
+
return new RegExp(pattern, options.matchCase ? "gu" : "giu");
|
|
14
|
+
} catch {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
const findAllMatches = (content, searchText, options) => {
|
|
19
|
+
if (!content || !searchText) return [];
|
|
20
|
+
const searchFor = options.matchCase ? searchText : searchText.toLowerCase();
|
|
21
|
+
const source = escapeRegexString(searchFor);
|
|
22
|
+
const pattern = new RegExp(options.matchWholeWord ? `\\b${source}\\b` : source, options.matchCase ? "gu" : "giu");
|
|
23
|
+
const matches = [];
|
|
24
|
+
let match;
|
|
25
|
+
while ((match = pattern.exec(content)) !== null) {
|
|
26
|
+
matches.push({
|
|
27
|
+
start: match.index,
|
|
28
|
+
end: match.index + match[0].length
|
|
29
|
+
});
|
|
30
|
+
if (match[0].length === 0) pattern.lastIndex++;
|
|
31
|
+
}
|
|
32
|
+
return matches;
|
|
33
|
+
};
|
|
34
|
+
const findInDocument = (document, searchText, options) => {
|
|
35
|
+
if (!document || !searchText) return [];
|
|
36
|
+
const body = document.package.document;
|
|
37
|
+
if (!isRecord(body) || !Array.isArray(body.content)) return [];
|
|
38
|
+
const matches = [];
|
|
39
|
+
forEachParagraph(body.content, (paragraph, paragraphIndex) => {
|
|
40
|
+
matches.push(...findInParagraph(paragraph, searchText, options, paragraphIndex));
|
|
41
|
+
});
|
|
42
|
+
return matches;
|
|
43
|
+
};
|
|
44
|
+
const findInParagraph = (paragraph, searchText, options, paragraphIndex) => {
|
|
45
|
+
const paragraphText = getParagraphPlainText(paragraph);
|
|
46
|
+
if (!paragraphText) return [];
|
|
47
|
+
return findAllMatches(paragraphText, searchText, options).map(({ start, end }) => ({
|
|
48
|
+
paragraphIndex,
|
|
49
|
+
contentIndex: findContentIndexAtOffset(paragraph, start),
|
|
50
|
+
startOffset: start,
|
|
51
|
+
endOffset: end,
|
|
52
|
+
text: paragraphText.slice(start, end)
|
|
53
|
+
}));
|
|
54
|
+
};
|
|
55
|
+
const forEachParagraph = (blocks, visit) => {
|
|
56
|
+
let paragraphIndex = 0;
|
|
57
|
+
const walkBlocks = (items) => {
|
|
58
|
+
for (const block of items) {
|
|
59
|
+
if (isParagraph(block)) {
|
|
60
|
+
visit(block, paragraphIndex);
|
|
61
|
+
paragraphIndex++;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (isTable(block)) {
|
|
65
|
+
walkTable(block);
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (isBlockSdt(block)) walkBlocks(block.content);
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
const walkTable = (table) => {
|
|
72
|
+
for (const row of table.rows) {
|
|
73
|
+
if (!isTableRow(row)) continue;
|
|
74
|
+
for (const cell of row.cells) if (isTableCell(cell)) walkBlocks(cell.content);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
walkBlocks(blocks);
|
|
78
|
+
};
|
|
79
|
+
const getRunText = (run) => {
|
|
80
|
+
let text = "";
|
|
81
|
+
for (const item of run.content) if (item.type === "text") text += item.text;
|
|
82
|
+
else if (item.type === "tab") text += " ";
|
|
83
|
+
else if (item.type === "break" && item.breakType === "textWrapping") text += "\n";
|
|
84
|
+
return text;
|
|
85
|
+
};
|
|
86
|
+
const getHyperlinkText = (hyperlink) => {
|
|
87
|
+
let text = "";
|
|
88
|
+
for (const child of hyperlink.children) if (child.type === "run") text += getRunText(child);
|
|
89
|
+
return text;
|
|
90
|
+
};
|
|
91
|
+
const getParagraphContentText = (content) => {
|
|
92
|
+
if (content.type === "run") return getRunText(content);
|
|
93
|
+
if (content.type === "hyperlink") return getHyperlinkText(content);
|
|
94
|
+
if (content.type === "inlineSdt") return content.content.map(getParagraphContentText).join("");
|
|
95
|
+
if (content.type === "simpleField") return content.content.map((child) => child.type === "run" ? getRunText(child) : getHyperlinkText(child)).join("");
|
|
96
|
+
if (content.type === "complexField") return content.fieldResult.map(getRunText).join("");
|
|
97
|
+
return "";
|
|
98
|
+
};
|
|
99
|
+
const getParagraphPlainText = (paragraph) => paragraph.content.map(getParagraphContentText).join("");
|
|
100
|
+
const findContentIndexAtOffset = (paragraph, offset) => {
|
|
101
|
+
let currentOffset = 0;
|
|
102
|
+
for (let contentIndex = 0; contentIndex < paragraph.content.length; contentIndex++) {
|
|
103
|
+
const item = paragraph.content[contentIndex];
|
|
104
|
+
if (!item) continue;
|
|
105
|
+
const itemLength = getParagraphContentText(item).length;
|
|
106
|
+
if (currentOffset + itemLength > offset) return contentIndex;
|
|
107
|
+
currentOffset += itemLength;
|
|
108
|
+
}
|
|
109
|
+
return Math.max(0, paragraph.content.length - 1);
|
|
110
|
+
};
|
|
111
|
+
const isRecord = (value) => typeof value === "object" && value !== null;
|
|
112
|
+
const isParagraph = (value) => isRecord(value) && value["type"] === "paragraph" && Array.isArray(value["content"]);
|
|
113
|
+
const isTable = (value) => isRecord(value) && value["type"] === "table" && Array.isArray(value["rows"]);
|
|
114
|
+
const isTableRow = (value) => isRecord(value) && Array.isArray(value["cells"]);
|
|
115
|
+
const isTableCell = (value) => isRecord(value) && Array.isArray(value["content"]);
|
|
116
|
+
const isBlockSdt = (value) => isRecord(value) && value["type"] === "blockSdt" && Array.isArray(value["content"]);
|
|
117
|
+
//#endregion
|
|
118
|
+
export { createDefaultFindOptions, createSearchPattern, escapeRegexString, findAllMatches, findInDocument, findInParagraph };
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
//#region src/utils/fontFamilyMerge.ts
|
|
2
|
+
const FONT_FAMILY_PAIRS = [
|
|
3
|
+
["ascii", "asciiTheme"],
|
|
4
|
+
["hAnsi", "hAnsiTheme"],
|
|
5
|
+
["eastAsia", "eastAsiaTheme"],
|
|
6
|
+
["cs", "csTheme"]
|
|
7
|
+
];
|
|
8
|
+
const isFontFamilyPairKey = (key) => key === "ascii" || key === "asciiTheme" || key === "hAnsi" || key === "hAnsiTheme" || key === "eastAsia" || key === "eastAsiaTheme" || key === "cs" || key === "csTheme";
|
|
2
9
|
function mergeFontFamily(target, source) {
|
|
3
10
|
const result = {};
|
|
4
11
|
const src = source;
|
|
@@ -10,21 +17,12 @@ function mergeFontFamily(target, source) {
|
|
|
10
17
|
if (replacesAscii && (key === "ascii" || key === "asciiTheme") || replacesHAnsi && (key === "hAnsi" || key === "hAnsiTheme") || replacesEastAsia && (key === "eastAsia" || key === "eastAsiaTheme") || replacesCs && (key === "cs" || key === "csTheme")) continue;
|
|
11
18
|
result[key] = target[key];
|
|
12
19
|
}
|
|
13
|
-
const
|
|
14
|
-
["ascii", "asciiTheme"],
|
|
15
|
-
["hAnsi", "hAnsiTheme"],
|
|
16
|
-
["eastAsia", "eastAsiaTheme"],
|
|
17
|
-
["cs", "csTheme"]
|
|
18
|
-
];
|
|
19
|
-
const pairKeys = /* @__PURE__ */ new Set();
|
|
20
|
-
for (const [explicit, theme] of pairs) {
|
|
21
|
-
pairKeys.add(explicit);
|
|
22
|
-
pairKeys.add(theme);
|
|
20
|
+
for (const [explicit, theme] of FONT_FAMILY_PAIRS) {
|
|
23
21
|
if (src[explicit] === void 0 && src[theme] === void 0) continue;
|
|
24
22
|
if (src[explicit] !== void 0) result[explicit] = src[explicit];
|
|
25
23
|
if (src[theme] !== void 0) result[theme] = src[theme];
|
|
26
24
|
}
|
|
27
|
-
for (const key of Object.keys(src)) if (!
|
|
25
|
+
for (const key of Object.keys(src)) if (!isFontFamilyPairKey(key) && src[key] !== void 0) result[key] = src[key];
|
|
28
26
|
return result;
|
|
29
27
|
}
|
|
30
28
|
//#endregion
|
package/dist/utils/fontLoader.js
CHANGED
|
@@ -17,8 +17,8 @@ let isLoadingAny = false;
|
|
|
17
17
|
* this map is used for font availability checks and preloading.
|
|
18
18
|
*/
|
|
19
19
|
const FONT_MAPPING = {
|
|
20
|
-
Aptos: "
|
|
21
|
-
"Aptos Display": "
|
|
20
|
+
Aptos: "Lato",
|
|
21
|
+
"Aptos Display": "Lato",
|
|
22
22
|
Calibri: "Carlito",
|
|
23
23
|
Cambria: "Caladea",
|
|
24
24
|
Arial: "Arimo",
|
|
@@ -40,6 +40,7 @@ const BUNDLED_FONTS = /* @__PURE__ */ new Set([
|
|
|
40
40
|
"Arimo",
|
|
41
41
|
"Tinos",
|
|
42
42
|
"Cousine",
|
|
43
|
+
"Lato",
|
|
43
44
|
"Source Sans 3",
|
|
44
45
|
"Calibri",
|
|
45
46
|
"Cambria",
|
|
@@ -65,11 +65,11 @@ const APTOS_MEASURED_LINE_HEIGHT = {
|
|
|
65
65
|
*/
|
|
66
66
|
const FONT_MAPPINGS = {
|
|
67
67
|
aptos: {
|
|
68
|
-
googleFont: "
|
|
68
|
+
googleFont: "Lato",
|
|
69
69
|
category: "sans-serif",
|
|
70
70
|
fallbackStack: [
|
|
71
71
|
"Aptos",
|
|
72
|
-
"
|
|
72
|
+
"Lato",
|
|
73
73
|
"Arial",
|
|
74
74
|
"Helvetica",
|
|
75
75
|
"sans-serif"
|
|
@@ -77,11 +77,11 @@ const FONT_MAPPINGS = {
|
|
|
77
77
|
singleLineRatio: singleLineRatioOf(APTOS_MEASURED_LINE_HEIGHT)
|
|
78
78
|
},
|
|
79
79
|
"aptos display": {
|
|
80
|
-
googleFont: "
|
|
80
|
+
googleFont: "Lato",
|
|
81
81
|
category: "sans-serif",
|
|
82
82
|
fallbackStack: [
|
|
83
83
|
"Aptos Display",
|
|
84
|
-
"
|
|
84
|
+
"Lato",
|
|
85
85
|
"Arial",
|
|
86
86
|
"Helvetica",
|
|
87
87
|
"sans-serif"
|
|
@@ -242,6 +242,24 @@ const FONT_MAPPINGS = {
|
|
|
242
242
|
unitsPerEm: 2048
|
|
243
243
|
})
|
|
244
244
|
},
|
|
245
|
+
"segoe ui": {
|
|
246
|
+
googleFont: "Source Sans 3",
|
|
247
|
+
category: "sans-serif",
|
|
248
|
+
fallbackStack: [
|
|
249
|
+
"Segoe UI",
|
|
250
|
+
"Source Sans 3",
|
|
251
|
+
"Arial",
|
|
252
|
+
"Helvetica",
|
|
253
|
+
"sans-serif"
|
|
254
|
+
],
|
|
255
|
+
singleLineRatio: singleLineRatioOf({
|
|
256
|
+
source: "hhea",
|
|
257
|
+
hheaAscent: 2210,
|
|
258
|
+
hheaDescent: -514,
|
|
259
|
+
hheaLineGap: 0,
|
|
260
|
+
unitsPerEm: 2048
|
|
261
|
+
})
|
|
262
|
+
},
|
|
245
263
|
montserrat: {
|
|
246
264
|
googleFont: "Montserrat",
|
|
247
265
|
category: "sans-serif",
|
|
@@ -156,7 +156,18 @@ const createEmptyHeaderFooter = (document, position, isFirstPage) => {
|
|
|
156
156
|
const sectionProps = pkg.document.finalSectionProperties;
|
|
157
157
|
if (!sectionProps) return null;
|
|
158
158
|
const hdrFtrType = isFirstPage ? "first" : "default";
|
|
159
|
-
const
|
|
159
|
+
const baseRId = `rId_new_${position}_${hdrFtrType}`;
|
|
160
|
+
const usedRIds = /* @__PURE__ */ new Set([
|
|
161
|
+
...pkg.headers?.keys() ?? [],
|
|
162
|
+
...pkg.footers?.keys() ?? [],
|
|
163
|
+
...pkg.relationships?.keys() ?? []
|
|
164
|
+
]);
|
|
165
|
+
let rId = baseRId;
|
|
166
|
+
let rIdSuffix = 2;
|
|
167
|
+
while (usedRIds.has(rId)) {
|
|
168
|
+
rId = `${baseRId}_${rIdSuffix}`;
|
|
169
|
+
rIdSuffix++;
|
|
170
|
+
}
|
|
160
171
|
const emptyHf = {
|
|
161
172
|
type: position,
|
|
162
173
|
hdrFtrType,
|
|
@@ -174,11 +185,23 @@ const createEmptyHeaderFooter = (document, position, isFirstPage) => {
|
|
|
174
185
|
type: hdrFtrType,
|
|
175
186
|
rId
|
|
176
187
|
};
|
|
188
|
+
const usedTargets = /* @__PURE__ */ new Set();
|
|
189
|
+
for (const relationship of pkg.relationships?.values() ?? []) if (relationship.target) usedTargets.add(relationship.target);
|
|
190
|
+
let targetNumber = 1;
|
|
191
|
+
while (usedTargets.has(`${position}${targetNumber}.xml`)) targetNumber++;
|
|
192
|
+
const relationshipType = position === "header" ? "http://schemas.openxmlformats.org/officeDocument/2006/relationships/header" : "http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer";
|
|
193
|
+
const relationships = new Map(pkg.relationships);
|
|
194
|
+
relationships.set(rId, {
|
|
195
|
+
id: rId,
|
|
196
|
+
type: relationshipType,
|
|
197
|
+
target: `${position}${targetNumber}.xml`
|
|
198
|
+
});
|
|
177
199
|
return {
|
|
178
200
|
...document,
|
|
179
201
|
package: {
|
|
180
202
|
...pkg,
|
|
181
203
|
[mapKey]: newMap,
|
|
204
|
+
relationships,
|
|
182
205
|
document: {
|
|
183
206
|
...pkg.document,
|
|
184
207
|
finalSectionProperties: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stll/folio-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "Headless, framework-neutral core of folio: the OOXML (.docx) parser, document model, ProseMirror integration, and page-layout engine. No React.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"document-model",
|