documentation-hub 5.7.2
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/.eslintrc.json +43 -0
- package/.github/workflows/build.yml +64 -0
- package/.github/workflows/ci.yml +39 -0
- package/.vscode/extensions.json +3 -0
- package/Current.md +97 -0
- package/DocHub_Image.png +0 -0
- package/README.md +666 -0
- package/USER_GUIDE.md +1173 -0
- package/Updater.md +311 -0
- package/build/256x256.png +0 -0
- package/build/512x512.png +0 -0
- package/build/app-update.yml +4 -0
- package/build/create-icon.js +208 -0
- package/build/icon.ico +0 -0
- package/build/icon.png +0 -0
- package/build/icon_1024x1024.png +0 -0
- package/dist/assets/Analytics-BpsG9895.js +1 -0
- package/dist/assets/Card-IAZin8kp.js +1 -0
- package/dist/assets/CurrentSession-B-rFkHvf.js +12 -0
- package/dist/assets/Dashboard-C_5gMb0q.js +1 -0
- package/dist/assets/Documents-CqZ25axS.js +1 -0
- package/dist/assets/Input-l89xwXBi.js +1 -0
- package/dist/assets/Reporting-DqdHJY_a.js +1 -0
- package/dist/assets/Search-XNbu5z_3.js +1 -0
- package/dist/assets/SessionManager-lH9hZfzH.js +1 -0
- package/dist/assets/Sessions-ClZOPYNc.js +1 -0
- package/dist/assets/Settings-DUEHGURa.js +11 -0
- package/dist/assets/index-8xUe8ptc.js +24 -0
- package/dist/assets/index-RYyJqF7O.css +1 -0
- package/dist/assets/path-BkOl0AGO.js +1 -0
- package/dist/assets/promises-ID_B9S-h.js +1 -0
- package/dist/assets/urlHelpers-TvgahX0r.js +1 -0
- package/dist/assets/useToast-yRSO1dkm.js +1 -0
- package/dist/assets/vendor-charts-RkGK5ROP.js +36 -0
- package/dist/assets/vendor-db-l0sNRNKZ.js +1 -0
- package/dist/assets/vendor-react-BVZ_anCF.js +4 -0
- package/dist/assets/vendor-search-Dw8P0qyA.js +1 -0
- package/dist/assets/vendor-ui-BU7NfluV.js +53 -0
- package/dist/electron/PowerAutomateApiService-LfW09ZGr.js +147 -0
- package/dist/electron/main-CXkNtyv-.js +19789 -0
- package/dist/electron/main.js +5 -0
- package/dist/electron/preload.js +1 -0
- package/dist/icon.png +0 -0
- package/dist/index.html +27 -0
- package/docs/CODEBASE_ANALYSIS_REPORT.md +309 -0
- package/docs/DEBUG_LOGGING_GUIDE.md +244 -0
- package/docs/README.md +115 -0
- package/docs/TOC_WIRING_GUIDE.md +344 -0
- package/docs/analysis/Bullet_Symbol_Bug_Analysis.md +136 -0
- package/docs/analysis/DOCXMLATER_ANALYSIS_SUMMARY.txt +169 -0
- package/docs/analysis/Document_Processing_Issues_Analysis.md +704 -0
- package/docs/analysis/FIELD_PRESERVATION_ANALYSIS.md +1200 -0
- package/docs/analysis/INDENTATION_PRESERVE_ANALYSIS.md +181 -0
- package/docs/analysis/INDENTATION_PRESERVE_IMPLEMENTATION.md +207 -0
- package/docs/analysis/List_Implementation.md +206 -0
- package/docs/analysis/List_Implementation_Accuracy_Report.md +366 -0
- package/docs/analysis/PROCESSING_OPTIONS_UI_UPDATES.md +220 -0
- package/docs/analysis/RefactorStyles.md +852 -0
- package/docs/analysis/STYLE_PARAMETER_ENHANCEMENT.md +143 -0
- package/docs/analysis/docxmlater-comparison-todo-2025-11-13.md +636 -0
- package/docs/analysis/docxmlater-implementation-analysis-2025-11-13.md +340 -0
- package/docs/analysis/docxmlater-template_ui-integration-analysis.md +263 -0
- package/docs/analysis/github-issues-to-create.md +237 -0
- package/docs/api/API_README.md +538 -0
- package/docs/api/API_REFERENCE.md +751 -0
- package/docs/api/TYPE_DEFINITIONS.md +869 -0
- package/docs/architecture/FONT_EMBEDDING_GUIDE.md +318 -0
- package/docs/architecture/docxmlater-functions-and-structure.md +726 -0
- package/docs/docxmlater-readme.md +1341 -0
- package/docs/fixes/EXECUTION_LOG_TEST_BASE.md +573 -0
- package/docs/fixes/HYPERLINK_TEXT_SANITIZATION.md +253 -0
- package/docs/fixes/README.md +37 -0
- package/docs/github-issues/issue-1-body.md +125 -0
- package/docs/github-issues/issue-10-body.md +850 -0
- package/docs/github-issues/issue-2-body.md +200 -0
- package/docs/github-issues/issue-3-body.md +270 -0
- package/docs/github-issues/issue-4-body.md +169 -0
- package/docs/github-issues/issue-5-body.md +173 -0
- package/docs/github-issues/issue-6-body.md +158 -0
- package/docs/github-issues/issue-7-body.md +171 -0
- package/docs/github-issues/issue-8-body.md +407 -0
- package/docs/github-issues/issue-9-body.md +515 -0
- package/docs/github-issues/issue-tracker.md +274 -0
- package/docs/github-issues/predictive-analysis-2025-10-18.md +2131 -0
- package/docs/implementation/List_Framework_Refactor_Plan.md +336 -0
- package/docs/implementation/PRIMARY_TEXT_COLOR_FEATURE.md +217 -0
- package/docs/implementation/RELEASE_PLAN_v2.1.0.md +362 -0
- package/docs/implementation/RefactorStyles.md +588 -0
- package/docs/implementation/implement-plan.md +489 -0
- package/docs/implementation/missing-helpers-implementation.md +391 -0
- package/docs/implementation/refactor-plan.md +520 -0
- package/docs/implementation/session-implementation-complete.md +233 -0
- package/docs/implementation/session-management-plan.md +250 -0
- package/docs/setup-checklist.md +77 -0
- package/docs/versions/changelog.md +345 -0
- package/electron/customUpdater.ts +656 -0
- package/electron/main.ts +2441 -0
- package/electron/memoryConfig.ts +187 -0
- package/electron/preload.ts +394 -0
- package/electron/proxyConfig.ts +340 -0
- package/electron/services/BackupService.ts +452 -0
- package/electron/services/DictionaryService.ts +402 -0
- package/electron/services/LocalDictionaryLookupService.ts +147 -0
- package/electron/services/PowerAutomateApiService.ts +231 -0
- package/electron/services/SharePointSyncService.ts +474 -0
- package/electron/windowsCertStore.ts +427 -0
- package/electron/zscalerConfig.ts +381 -0
- package/eslint.config.js +92 -0
- package/jest.config.js +52 -0
- package/package.json +214 -0
- package/postcss.config.mjs +6 -0
- package/public/icon.png +0 -0
- package/publish-release.ps1 +5 -0
- package/renovate.json +30 -0
- package/src/App.tsx +216 -0
- package/src/__mocks__/p-limit.js +12 -0
- package/src/__mocks__/styleMock.js +1 -0
- package/src/components/common/BugReportButton.tsx +44 -0
- package/src/components/common/BugReportDialog.tsx +193 -0
- package/src/components/common/Button.tsx +153 -0
- package/src/components/common/Card.tsx +86 -0
- package/src/components/common/ColorPickerDialog.tsx +177 -0
- package/src/components/common/ConfirmDialog.tsx +96 -0
- package/src/components/common/DebugConsole.tsx +275 -0
- package/src/components/common/EmptyState.tsx +183 -0
- package/src/components/common/ErrorBoundary.tsx +98 -0
- package/src/components/common/ErrorDetailsDialog.tsx +153 -0
- package/src/components/common/ErrorFallback.tsx +218 -0
- package/src/components/common/Input.tsx +109 -0
- package/src/components/common/Skeleton.tsx +184 -0
- package/src/components/common/SplashScreen.tsx +81 -0
- package/src/components/common/Toast.tsx +155 -0
- package/src/components/common/Tooltip.tsx +79 -0
- package/src/components/common/UpdateNotification.tsx +320 -0
- package/src/components/comparison/ComparisonWindow.tsx +374 -0
- package/src/components/comparison/SideBySideDiff.tsx +486 -0
- package/src/components/comparison/index.ts +8 -0
- package/src/components/document/DocumentUploader.tsx +288 -0
- package/src/components/document/HyperlinkPreview.tsx +430 -0
- package/src/components/document/HyperlinkService.md +1484 -0
- package/src/components/document/Hyperlink_Technical_Documentation.md +496 -0
- package/src/components/document/InlineChangesView.tsx +707 -0
- package/src/components/document/ProcessingProgress.tsx +303 -0
- package/src/components/document/ProcessingResults.tsx +256 -0
- package/src/components/document/TrackedChangesDetail.tsx +530 -0
- package/src/components/document/TrackedChangesPanel.tsx +546 -0
- package/src/components/document/VirtualDocumentList.tsx +240 -0
- package/src/components/editor/DocumentEditor.tsx +723 -0
- package/src/components/editor/DocumentEditorModal.tsx +640 -0
- package/src/components/editor/EditorQuickActions.tsx +502 -0
- package/src/components/editor/EditorToolbar.tsx +312 -0
- package/src/components/editor/TableEditor.tsx +926 -0
- package/src/components/editor/index.ts +18 -0
- package/src/components/layout/Header.tsx +190 -0
- package/src/components/layout/Sidebar.tsx +313 -0
- package/src/components/layout/TitleBar.tsx +190 -0
- package/src/components/navigation/CommandPalette.tsx +233 -0
- package/src/components/navigation/KeyboardShortcutsModal.tsx +173 -0
- package/src/components/sessions/ChangeItem.tsx +408 -0
- package/src/components/sessions/ChangeViewer.tsx +1155 -0
- package/src/components/sessions/DocumentComparisonModal.tsx +314 -0
- package/src/components/sessions/ProcessingOptions.tsx +297 -0
- package/src/components/sessions/ReplacementsTab.tsx +438 -0
- package/src/components/sessions/RevisionHandlingOptions.tsx +87 -0
- package/src/components/sessions/SessionManager.tsx +188 -0
- package/src/components/sessions/StylesEditor.tsx +1335 -0
- package/src/components/sessions/TabContainer.tsx +151 -0
- package/src/components/sessions/VirtualSessionList.tsx +157 -0
- package/src/components/sessions/sessionToProcessorManager.tsx +420 -0
- package/src/components/settings/CertificateManager.tsx +410 -0
- package/src/components/settings/SegmentedControl.tsx +88 -0
- package/src/components/settings/SettingRow.tsx +52 -0
- package/src/contexts/GlobalStatsContext.tsx +396 -0
- package/src/contexts/SessionContext.tsx +2129 -0
- package/src/contexts/ThemeContext.tsx +428 -0
- package/src/contexts/UserSettingsContext.tsx +290 -0
- package/src/contexts/__tests__/GlobalStatsContext.test.tsx +390 -0
- package/src/global.d.ts +273 -0
- package/src/hooks/useDocumentQueue.tsx +210 -0
- package/src/hooks/useToast.tsx +55 -0
- package/src/main.tsx +10 -0
- package/src/pages/Analytics.tsx +386 -0
- package/src/pages/CurrentSession.tsx +1174 -0
- package/src/pages/Dashboard.tsx +319 -0
- package/src/pages/Documents.tsx +317 -0
- package/src/pages/Projects.tsx +250 -0
- package/src/pages/Reporting.tsx +386 -0
- package/src/pages/Search.tsx +349 -0
- package/src/pages/Sessions.tsx +285 -0
- package/src/pages/Settings.tsx +2662 -0
- package/src/services/HyperlinkService.ts +1085 -0
- package/src/services/document/DocXMLaterProcessor.ts +617 -0
- package/src/services/document/DocumentProcessingComparison.ts +856 -0
- package/src/services/document/DocumentSnapshotService.ts +575 -0
- package/src/services/document/WordDocumentProcessor.ts +10509 -0
- package/src/services/document/__tests__/DocXMLaterProcessor.hyperlinks.test.md +311 -0
- package/src/services/document/__tests__/WordDocumentProcessor.integration.test.ts +515 -0
- package/src/services/document/__tests__/WordDocumentProcessor.test.ts +812 -0
- package/src/services/document/blanklines/BlankLineManager.ts +658 -0
- package/src/services/document/blanklines/__tests__/paragraphChecks.test.ts +281 -0
- package/src/services/document/blanklines/helpers/blankLineInsertion.ts +87 -0
- package/src/services/document/blanklines/helpers/blankLineSnapshot.ts +251 -0
- package/src/services/document/blanklines/helpers/clearCustom.ts +121 -0
- package/src/services/document/blanklines/helpers/contextChecks.ts +117 -0
- package/src/services/document/blanklines/helpers/imageChecks.ts +51 -0
- package/src/services/document/blanklines/helpers/paragraphChecks.ts +236 -0
- package/src/services/document/blanklines/helpers/removeBlanksBetweenListItems.ts +91 -0
- package/src/services/document/blanklines/helpers/removeTrailingBlanks.ts +35 -0
- package/src/services/document/blanklines/helpers/tableGuards.ts +21 -0
- package/src/services/document/blanklines/index.ts +67 -0
- package/src/services/document/blanklines/rules/additionRules.ts +337 -0
- package/src/services/document/blanklines/rules/indentationRules.ts +317 -0
- package/src/services/document/blanklines/rules/removalRules.ts +362 -0
- package/src/services/document/blanklines/rules/ruleTypes.ts +92 -0
- package/src/services/document/blanklines/types.ts +29 -0
- package/src/services/document/helpers/ImageBorderCropper.ts +377 -0
- package/src/services/document/helpers/__tests__/whitespace.test.ts +272 -0
- package/src/services/document/helpers/whitespace.ts +117 -0
- package/src/services/document/list/ListNormalizer.ts +947 -0
- package/src/services/document/list/index.ts +45 -0
- package/src/services/document/list/list-detection.ts +275 -0
- package/src/services/document/list/list-types.ts +162 -0
- package/src/services/document/processors/HyperlinkProcessor.ts +370 -0
- package/src/services/document/processors/ListProcessor.ts +257 -0
- package/src/services/document/processors/StructureProcessor.ts +176 -0
- package/src/services/document/processors/StyleProcessor.ts +389 -0
- package/src/services/document/processors/TableProcessor.ts +2238 -0
- package/src/services/document/processors/__tests__/HyperlinkProcessor.test.ts +314 -0
- package/src/services/document/processors/__tests__/ListProcessor.test.ts +291 -0
- package/src/services/document/processors/__tests__/StructureProcessor.test.ts +257 -0
- package/src/services/document/processors/__tests__/TableProcessor.hlp-tips-bullets.test.ts +459 -0
- package/src/services/document/processors/__tests__/TableProcessor.test.ts +1604 -0
- package/src/services/document/processors/index.ts +28 -0
- package/src/services/document/types/docx-processing.ts +310 -0
- package/src/services/editor/EditorActionHandlers.ts +901 -0
- package/src/services/editor/index.ts +13 -0
- package/src/setupTests.ts +47 -0
- package/src/styles/global.css +782 -0
- package/src/types/backup.ts +132 -0
- package/src/types/dictionary.ts +125 -0
- package/src/types/document-processing.ts +331 -0
- package/src/types/docxmlater-augments.d.ts +142 -0
- package/src/types/editor.ts +280 -0
- package/src/types/electron.ts +340 -0
- package/src/types/globalStats.ts +155 -0
- package/src/types/hyperlink.ts +471 -0
- package/src/types/operations.ts +354 -0
- package/src/types/session.ts +427 -0
- package/src/types/settings.ts +112 -0
- package/src/utils/MemoryMonitor.ts +248 -0
- package/src/utils/cn.ts +6 -0
- package/src/utils/colorConvert.ts +306 -0
- package/src/utils/diffUtils.ts +347 -0
- package/src/utils/documentUtils.ts +202 -0
- package/src/utils/electronGuard.ts +62 -0
- package/src/utils/indexedDB.ts +915 -0
- package/src/utils/logger.ts +717 -0
- package/src/utils/pathSecurity.ts +232 -0
- package/src/utils/pathValidator.ts +236 -0
- package/src/utils/processingTimeEstimator.ts +153 -0
- package/src/utils/safeJsonParse.ts +62 -0
- package/src/utils/textSanitizer.ts +162 -0
- package/src/utils/urlHelpers.ts +304 -0
- package/src/utils/urlPatterns.ts +198 -0
- package/src/utils/urlSanitizer.ts +152 -0
- package/src/vite-env.d.ts +11 -0
- package/tsconfig.electron.json +19 -0
- package/tsconfig.json +36 -0
- package/tsconfig.node.json +12 -0
- package/typedoc.json +45 -0
- package/vite.config.ts +152 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type augmentations for DocXMLater library
|
|
3
|
+
*
|
|
4
|
+
* This file declares optional methods that exist on the DocXMLater Document class
|
|
5
|
+
* but are not included in the library's type definitions. These augmentations
|
|
6
|
+
* provide type safety for feature detection patterns.
|
|
7
|
+
*
|
|
8
|
+
* @module docxmlater-augments
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { Document } from 'docxmlater';
|
|
12
|
+
import type { SessionStyle } from './session';
|
|
13
|
+
import type { TableShadingSettings } from '@/services/document/processors/TableProcessor';
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Configuration for the applyStyles method
|
|
17
|
+
*/
|
|
18
|
+
export interface ApplyStylesConfig {
|
|
19
|
+
heading1?: StyleConfig;
|
|
20
|
+
heading2?: StyleConfig;
|
|
21
|
+
heading3?: StyleConfig;
|
|
22
|
+
normal?: StyleConfig;
|
|
23
|
+
listParagraph?: StyleConfig;
|
|
24
|
+
heading2Tables?: Heading2TableConfig;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Style configuration for individual style types
|
|
29
|
+
*/
|
|
30
|
+
export interface StyleConfig {
|
|
31
|
+
fontFamily?: string;
|
|
32
|
+
fontSize?: number;
|
|
33
|
+
bold?: boolean;
|
|
34
|
+
italic?: boolean;
|
|
35
|
+
underline?: boolean;
|
|
36
|
+
color?: string;
|
|
37
|
+
alignment?: 'left' | 'center' | 'right' | 'justify';
|
|
38
|
+
spaceBefore?: number;
|
|
39
|
+
spaceAfter?: number;
|
|
40
|
+
lineSpacing?: number;
|
|
41
|
+
preserveBold?: boolean;
|
|
42
|
+
preserveItalic?: boolean;
|
|
43
|
+
preserveUnderline?: boolean;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Configuration for Heading 2 table styling
|
|
48
|
+
*/
|
|
49
|
+
export interface Heading2TableConfig {
|
|
50
|
+
enabled: boolean;
|
|
51
|
+
shadingColor?: string;
|
|
52
|
+
fontFamily?: string;
|
|
53
|
+
fontSize?: number;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Result from applyStyles operation
|
|
58
|
+
*/
|
|
59
|
+
export interface StyleResults {
|
|
60
|
+
heading1: number;
|
|
61
|
+
heading2: number;
|
|
62
|
+
heading3: number;
|
|
63
|
+
normal: number;
|
|
64
|
+
listParagraph: number;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Change entry from tracked changes
|
|
69
|
+
*/
|
|
70
|
+
export interface ChangeEntry {
|
|
71
|
+
id: string;
|
|
72
|
+
type: 'insertion' | 'deletion' | 'formatting';
|
|
73
|
+
author: string;
|
|
74
|
+
date?: string;
|
|
75
|
+
text?: string;
|
|
76
|
+
location?: string;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Augment the docxmlater module to include optional methods
|
|
80
|
+
declare module 'docxmlater' {
|
|
81
|
+
interface Document {
|
|
82
|
+
/**
|
|
83
|
+
* Apply custom styles to paragraphs based on configuration.
|
|
84
|
+
* This method may not be available in all versions of DocXMLater.
|
|
85
|
+
*
|
|
86
|
+
* @param config - Style configuration object
|
|
87
|
+
* @returns Results indicating how many paragraphs were styled
|
|
88
|
+
*/
|
|
89
|
+
applyStyles?(config: ApplyStylesConfig): StyleResults;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Flush any pending tracked changes to the document.
|
|
93
|
+
* This method may not be available in all versions of DocXMLater.
|
|
94
|
+
*
|
|
95
|
+
* @returns Array of change entries that were flushed, or null if none
|
|
96
|
+
*/
|
|
97
|
+
flushPendingChanges?(): ChangeEntry[] | null;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Accept all tracked revisions in the document.
|
|
101
|
+
* This method may not be available in all versions of DocXMLater.
|
|
102
|
+
*/
|
|
103
|
+
acceptAllRevisions?(): Promise<void>;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Type guard to check if a Document has the applyStyles method
|
|
109
|
+
*
|
|
110
|
+
* @param doc - The document to check
|
|
111
|
+
* @returns true if the document has the applyStyles method
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* ```typescript
|
|
115
|
+
* if (hasApplyStyles(doc)) {
|
|
116
|
+
* const result = doc.applyStyles(config);
|
|
117
|
+
* }
|
|
118
|
+
* ```
|
|
119
|
+
*/
|
|
120
|
+
export function hasApplyStyles(doc: Document): doc is Document & { applyStyles: NonNullable<Document['applyStyles']> } {
|
|
121
|
+
return typeof (doc as Document).applyStyles === 'function';
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Type guard to check if a Document has the flushPendingChanges method
|
|
126
|
+
*
|
|
127
|
+
* @param doc - The document to check
|
|
128
|
+
* @returns true if the document has the flushPendingChanges method
|
|
129
|
+
*/
|
|
130
|
+
export function hasFlushPendingChanges(doc: Document): doc is Document & { flushPendingChanges: NonNullable<Document['flushPendingChanges']> } {
|
|
131
|
+
return typeof (doc as Document).flushPendingChanges === 'function';
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Type guard to check if a Document has the acceptAllRevisions method
|
|
136
|
+
*
|
|
137
|
+
* @param doc - The document to check
|
|
138
|
+
* @returns true if the document has the acceptAllRevisions method
|
|
139
|
+
*/
|
|
140
|
+
export function hasAcceptAllRevisions(doc: Document): doc is Document & { acceptAllRevisions: NonNullable<Document['acceptAllRevisions']> } {
|
|
141
|
+
return typeof (doc as Document).acceptAllRevisions === 'function';
|
|
142
|
+
}
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Editor Types - Types for document comparison, tracked changes display,
|
|
3
|
+
* and the document editor functionality
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Document snapshot captured before processing for comparison
|
|
8
|
+
* Stores both the raw buffer and extracted text for diffing
|
|
9
|
+
*/
|
|
10
|
+
export interface DocumentSnapshot {
|
|
11
|
+
/** Unique document identifier */
|
|
12
|
+
documentId: string;
|
|
13
|
+
/** Session the document belongs to */
|
|
14
|
+
sessionId: string;
|
|
15
|
+
/** When the snapshot was captured */
|
|
16
|
+
timestamp: Date;
|
|
17
|
+
/** Original document buffer for full restoration */
|
|
18
|
+
buffer: ArrayBuffer;
|
|
19
|
+
/** Extracted paragraph text for efficient diffing */
|
|
20
|
+
textContent: string[];
|
|
21
|
+
/** Hyperlink state for comparison */
|
|
22
|
+
hyperlinkSnapshot: HyperlinkSnapshot[];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Hyperlink state at time of snapshot
|
|
27
|
+
*/
|
|
28
|
+
export interface HyperlinkSnapshot {
|
|
29
|
+
paragraphIndex: number;
|
|
30
|
+
hyperlinkIndex: number;
|
|
31
|
+
url: string;
|
|
32
|
+
text: string;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Serialized snapshot for IndexedDB storage
|
|
37
|
+
* Dates converted to ISO strings
|
|
38
|
+
*/
|
|
39
|
+
export interface SerializedDocumentSnapshot {
|
|
40
|
+
documentId: string;
|
|
41
|
+
sessionId: string;
|
|
42
|
+
timestamp: string;
|
|
43
|
+
buffer: ArrayBuffer;
|
|
44
|
+
textContent: string[];
|
|
45
|
+
hyperlinkSnapshot: HyperlinkSnapshot[];
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Text selection state in the editor
|
|
50
|
+
*/
|
|
51
|
+
export interface EditorSelection {
|
|
52
|
+
/** Paragraph containing the selection start */
|
|
53
|
+
paragraphIndex: number;
|
|
54
|
+
/** First selected run index */
|
|
55
|
+
runStartIndex: number;
|
|
56
|
+
/** Last selected run index */
|
|
57
|
+
runEndIndex: number;
|
|
58
|
+
/** Character offset within first run */
|
|
59
|
+
characterStart: number;
|
|
60
|
+
/** Character offset within last run */
|
|
61
|
+
characterEnd: number;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Table cell selection state
|
|
66
|
+
*/
|
|
67
|
+
export interface CellSelection {
|
|
68
|
+
/** Starting row (0-based) */
|
|
69
|
+
startRow: number;
|
|
70
|
+
/** Starting column (0-based) */
|
|
71
|
+
startCol: number;
|
|
72
|
+
/** Ending row (0-based, inclusive) */
|
|
73
|
+
endRow: number;
|
|
74
|
+
/** Ending column (0-based, inclusive) */
|
|
75
|
+
endCol: number;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Undo/redo action for editor history
|
|
80
|
+
*/
|
|
81
|
+
export interface EditorAction {
|
|
82
|
+
/** Type of action */
|
|
83
|
+
type: 'text' | 'formatting' | 'structure' | 'table';
|
|
84
|
+
/** When action was performed */
|
|
85
|
+
timestamp: Date;
|
|
86
|
+
/** Function to undo this action */
|
|
87
|
+
undo: () => void;
|
|
88
|
+
/** Function to redo this action */
|
|
89
|
+
redo: () => void;
|
|
90
|
+
/** Human-readable description */
|
|
91
|
+
description: string;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Quick action identifiers for editor toolbar
|
|
96
|
+
*/
|
|
97
|
+
export type QuickActionId =
|
|
98
|
+
// Shading
|
|
99
|
+
| 'apply-h2-shading'
|
|
100
|
+
| 'apply-other-shading'
|
|
101
|
+
// Text formatting
|
|
102
|
+
| 'bold'
|
|
103
|
+
| 'italic'
|
|
104
|
+
| 'underline'
|
|
105
|
+
| 'clear-formatting'
|
|
106
|
+
// Hyperlinks
|
|
107
|
+
| 'insert-hyperlink'
|
|
108
|
+
| 'remove-hyperlink'
|
|
109
|
+
// Styles
|
|
110
|
+
| 'style-heading1'
|
|
111
|
+
| 'style-heading2'
|
|
112
|
+
| 'style-normal'
|
|
113
|
+
| 'style-list-paragraph'
|
|
114
|
+
// Structure
|
|
115
|
+
| 'page-break'
|
|
116
|
+
| 'find-replace'
|
|
117
|
+
// Tracked changes
|
|
118
|
+
| 'accept-all-changes'
|
|
119
|
+
| 'reject-all-changes'
|
|
120
|
+
// Table operations
|
|
121
|
+
| 'table-add-row-above'
|
|
122
|
+
| 'table-add-row-below'
|
|
123
|
+
| 'table-add-col-left'
|
|
124
|
+
| 'table-add-col-right'
|
|
125
|
+
| 'table-delete-row'
|
|
126
|
+
| 'table-delete-col'
|
|
127
|
+
| 'table-merge-cells'
|
|
128
|
+
| 'table-split-cell'
|
|
129
|
+
| 'table-cell-shading'
|
|
130
|
+
| 'table-cell-borders'
|
|
131
|
+
| 'table-vertical-align';
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Quick action configuration
|
|
135
|
+
*/
|
|
136
|
+
export interface QuickAction {
|
|
137
|
+
id: QuickActionId;
|
|
138
|
+
label: string;
|
|
139
|
+
icon: string;
|
|
140
|
+
shortcut?: string;
|
|
141
|
+
category: 'formatting' | 'style' | 'structure' | 'table' | 'revision';
|
|
142
|
+
requiresSelection?: boolean;
|
|
143
|
+
requiresTableSelection?: boolean;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Diff segment for word-level comparison
|
|
148
|
+
*/
|
|
149
|
+
export interface DiffSegment {
|
|
150
|
+
/** Text content of this segment */
|
|
151
|
+
text: string;
|
|
152
|
+
/** Type of change */
|
|
153
|
+
type: 'unchanged' | 'added' | 'removed' | 'modified';
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Paragraph diff result
|
|
158
|
+
*/
|
|
159
|
+
export interface ParagraphDiff {
|
|
160
|
+
/** Paragraph index */
|
|
161
|
+
index: number;
|
|
162
|
+
/** Original text (before processing) */
|
|
163
|
+
original: string;
|
|
164
|
+
/** Modified text (after processing) */
|
|
165
|
+
modified: string;
|
|
166
|
+
/** Word-level diff segments for original */
|
|
167
|
+
originalSegments: DiffSegment[];
|
|
168
|
+
/** Word-level diff segments for modified */
|
|
169
|
+
modifiedSegments: DiffSegment[];
|
|
170
|
+
/** Whether this paragraph changed */
|
|
171
|
+
hasChanges: boolean;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Complete document diff result
|
|
176
|
+
*/
|
|
177
|
+
export interface DocumentDiff {
|
|
178
|
+
/** Original document text (paragraph array) */
|
|
179
|
+
original: string[];
|
|
180
|
+
/** Modified document text (paragraph array) */
|
|
181
|
+
modified: string[];
|
|
182
|
+
/** Per-paragraph diff results */
|
|
183
|
+
paragraphDiffs: ParagraphDiff[];
|
|
184
|
+
/** Summary statistics */
|
|
185
|
+
stats: {
|
|
186
|
+
totalParagraphs: number;
|
|
187
|
+
changedParagraphs: number;
|
|
188
|
+
addedParagraphs: number;
|
|
189
|
+
removedParagraphs: number;
|
|
190
|
+
wordsAdded: number;
|
|
191
|
+
wordsRemoved: number;
|
|
192
|
+
wordsModified: number;
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Editor state for the document editor modal
|
|
198
|
+
*/
|
|
199
|
+
export interface EditorState {
|
|
200
|
+
/** Whether there are unsaved changes */
|
|
201
|
+
isDirty: boolean;
|
|
202
|
+
/** Current text selection */
|
|
203
|
+
selection: EditorSelection | null;
|
|
204
|
+
/** Current table cell selection */
|
|
205
|
+
tableSelection: CellSelection | null;
|
|
206
|
+
/** Currently selected element type */
|
|
207
|
+
selectedElementType: 'paragraph' | 'table' | 'image' | null;
|
|
208
|
+
/** Selected paragraph index */
|
|
209
|
+
selectedParagraphIndex: number | null;
|
|
210
|
+
/** Selected table index */
|
|
211
|
+
selectedTableIndex: number | null;
|
|
212
|
+
/** Undo stack */
|
|
213
|
+
undoStack: EditorAction[];
|
|
214
|
+
/** Redo stack */
|
|
215
|
+
redoStack: EditorAction[];
|
|
216
|
+
/** Active quick action being applied */
|
|
217
|
+
activeQuickAction: QuickActionId | null;
|
|
218
|
+
/** Whether editor is in loading state */
|
|
219
|
+
isLoading: boolean;
|
|
220
|
+
/** Error message if any */
|
|
221
|
+
error: string | null;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* View mode for tracked changes panel
|
|
226
|
+
*/
|
|
227
|
+
export type TrackedChangesViewMode = 'inline' | 'list' | 'comparison';
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Props for tracked changes panel
|
|
231
|
+
*/
|
|
232
|
+
export interface TrackedChangesPanelProps {
|
|
233
|
+
sessionId: string;
|
|
234
|
+
documentId: string;
|
|
235
|
+
onOpenEditor: () => void;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Inline change display configuration
|
|
240
|
+
*/
|
|
241
|
+
export interface InlineChangeStyle {
|
|
242
|
+
insertion: {
|
|
243
|
+
background: string;
|
|
244
|
+
textColor: string;
|
|
245
|
+
};
|
|
246
|
+
deletion: {
|
|
247
|
+
background: string;
|
|
248
|
+
textColor: string;
|
|
249
|
+
textDecoration: string;
|
|
250
|
+
};
|
|
251
|
+
formatting: {
|
|
252
|
+
borderStyle: string;
|
|
253
|
+
borderColor: string;
|
|
254
|
+
};
|
|
255
|
+
hyperlink: {
|
|
256
|
+
iconColor: string;
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Default inline change styles
|
|
262
|
+
*/
|
|
263
|
+
export const DEFAULT_INLINE_CHANGE_STYLES: InlineChangeStyle = {
|
|
264
|
+
insertion: {
|
|
265
|
+
background: 'bg-green-100 dark:bg-green-900/30',
|
|
266
|
+
textColor: 'text-green-700 dark:text-green-300',
|
|
267
|
+
},
|
|
268
|
+
deletion: {
|
|
269
|
+
background: 'bg-red-100 dark:bg-red-900/30',
|
|
270
|
+
textColor: 'text-red-700 dark:text-red-300',
|
|
271
|
+
textDecoration: 'line-through',
|
|
272
|
+
},
|
|
273
|
+
formatting: {
|
|
274
|
+
borderStyle: 'border-b-2 border-dashed',
|
|
275
|
+
borderColor: 'border-blue-500',
|
|
276
|
+
},
|
|
277
|
+
hyperlink: {
|
|
278
|
+
iconColor: 'text-cyan-500',
|
|
279
|
+
},
|
|
280
|
+
};
|