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,427 @@
|
|
|
1
|
+
// Revision handling mode type
|
|
2
|
+
export type RevisionHandlingMode = 'accept_all' | 'preserve' | 'preserve_and_wrap';
|
|
3
|
+
|
|
4
|
+
// Change category type
|
|
5
|
+
export type ChangeCategory =
|
|
6
|
+
| 'content'
|
|
7
|
+
| 'formatting'
|
|
8
|
+
| 'structural'
|
|
9
|
+
| 'table'
|
|
10
|
+
| 'hyperlink'
|
|
11
|
+
| 'image'
|
|
12
|
+
| 'field'
|
|
13
|
+
| 'comment'
|
|
14
|
+
| 'bookmark'
|
|
15
|
+
| 'contentControl';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Change entry from Word tracked changes (compatible with docxmlater ChangeEntry)
|
|
19
|
+
*/
|
|
20
|
+
export interface ChangeEntry {
|
|
21
|
+
id: string;
|
|
22
|
+
revisionType: string;
|
|
23
|
+
category: ChangeCategory;
|
|
24
|
+
description: string;
|
|
25
|
+
author: string;
|
|
26
|
+
date: Date;
|
|
27
|
+
location?: {
|
|
28
|
+
sectionIndex?: number;
|
|
29
|
+
paragraphIndex: number;
|
|
30
|
+
runIndex?: number;
|
|
31
|
+
nearestHeading?: string;
|
|
32
|
+
characterOffset?: number;
|
|
33
|
+
};
|
|
34
|
+
content?: {
|
|
35
|
+
before?: string;
|
|
36
|
+
after?: string;
|
|
37
|
+
affectedText?: string;
|
|
38
|
+
hyperlinkChange?: {
|
|
39
|
+
urlBefore?: string;
|
|
40
|
+
urlAfter?: string;
|
|
41
|
+
textBefore?: string;
|
|
42
|
+
textAfter?: string;
|
|
43
|
+
/** Status of the hyperlink source (for theSource links) */
|
|
44
|
+
status?: 'updated' | 'not_found' | 'expired';
|
|
45
|
+
/** Content ID for theSource documents */
|
|
46
|
+
contentId?: string;
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
propertyChange?: {
|
|
50
|
+
property: string;
|
|
51
|
+
oldValue?: string;
|
|
52
|
+
newValue?: string;
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Summary statistics for changelog entries
|
|
58
|
+
*/
|
|
59
|
+
export interface ChangelogSummary {
|
|
60
|
+
total: number;
|
|
61
|
+
byCategory: Record<ChangeCategory, number>;
|
|
62
|
+
byType: Record<string, number>;
|
|
63
|
+
byAuthor: Record<string, number>;
|
|
64
|
+
dateRange: { earliest: Date; latest: Date } | null;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* Unified change entry for UI display - combines Word revisions and processing changes
|
|
69
|
+
*/
|
|
70
|
+
export interface UnifiedChange {
|
|
71
|
+
id: string;
|
|
72
|
+
source: 'word' | 'processing';
|
|
73
|
+
category: ChangeCategory; // 'content' | 'formatting' | 'structural' | 'table' | 'hyperlink'
|
|
74
|
+
description: string;
|
|
75
|
+
author?: string;
|
|
76
|
+
date?: Date;
|
|
77
|
+
location?: {
|
|
78
|
+
paragraphIndex?: number;
|
|
79
|
+
nearestHeading?: string;
|
|
80
|
+
};
|
|
81
|
+
before?: string;
|
|
82
|
+
after?: string;
|
|
83
|
+
affectedText?: string; // The text that was affected by this change
|
|
84
|
+
count?: number; // For consolidated changes
|
|
85
|
+
hyperlinkChange?: {
|
|
86
|
+
urlBefore?: string;
|
|
87
|
+
urlAfter?: string;
|
|
88
|
+
textBefore?: string;
|
|
89
|
+
textAfter?: string;
|
|
90
|
+
/** Status of the hyperlink source (for theSource links) */
|
|
91
|
+
status?: 'updated' | 'not_found' | 'expired';
|
|
92
|
+
/** Content ID for theSource documents */
|
|
93
|
+
contentId?: string;
|
|
94
|
+
};
|
|
95
|
+
/** Property change details (for formatting changes) */
|
|
96
|
+
propertyChange?: {
|
|
97
|
+
property: string;
|
|
98
|
+
oldValue?: string;
|
|
99
|
+
newValue?: string;
|
|
100
|
+
};
|
|
101
|
+
/** Multiple property changes grouped together (when same text has multiple formatting changes) */
|
|
102
|
+
groupedProperties?: Array<{
|
|
103
|
+
property: string;
|
|
104
|
+
oldValue?: string;
|
|
105
|
+
newValue?: string;
|
|
106
|
+
}>;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Previous revision state - tracked changes that existed in the document BEFORE DocHub processing
|
|
111
|
+
* These are captured on document load and displayed separately in the UI
|
|
112
|
+
*/
|
|
113
|
+
export interface PreviousRevisionState {
|
|
114
|
+
/** Whether document had pre-existing tracked changes */
|
|
115
|
+
hadRevisions: boolean;
|
|
116
|
+
/** Changelog entries from pre-existing Word revisions (before DocHub processing) */
|
|
117
|
+
entries: ChangeEntry[];
|
|
118
|
+
/** Summary statistics for pre-existing revisions */
|
|
119
|
+
summary: ChangelogSummary | null;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Word revision state for a document - tracked changes from DocHub processing
|
|
124
|
+
*/
|
|
125
|
+
export interface WordRevisionState {
|
|
126
|
+
/** Whether document has Word tracked changes */
|
|
127
|
+
hasRevisions: boolean;
|
|
128
|
+
/** Changelog entries from DocHub processing (author is typically 'DocHub' or user name) */
|
|
129
|
+
entries: ChangeEntry[];
|
|
130
|
+
/** Summary statistics */
|
|
131
|
+
summary: ChangelogSummary | null;
|
|
132
|
+
/** How revisions were handled during processing */
|
|
133
|
+
handlingMode: RevisionHandlingMode;
|
|
134
|
+
/** Author name used for DocHub processing changes - used to distinguish DocHub vs pre-existing changes */
|
|
135
|
+
processingAuthor?: string;
|
|
136
|
+
/** Result of revision handling */
|
|
137
|
+
handlingResult?: {
|
|
138
|
+
accepted: string[];
|
|
139
|
+
preserved: string[];
|
|
140
|
+
conflicts: number;
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export interface Document {
|
|
145
|
+
id: string;
|
|
146
|
+
name: string;
|
|
147
|
+
path?: string;
|
|
148
|
+
size: number;
|
|
149
|
+
type?: string;
|
|
150
|
+
status: 'pending' | 'processing' | 'completed' | 'error';
|
|
151
|
+
processedAt?: Date;
|
|
152
|
+
errors?: string[];
|
|
153
|
+
errorType?: 'file_locked' | 'api_timeout' | 'word_compatibility' | 'general';
|
|
154
|
+
fileData?: ArrayBuffer; // Store file data for processing
|
|
155
|
+
/** Pre-existing tracked changes that were in the document BEFORE DocHub processing */
|
|
156
|
+
previousRevisions?: PreviousRevisionState;
|
|
157
|
+
/** Word tracked changes state from DocHub processing */
|
|
158
|
+
wordRevisions?: WordRevisionState;
|
|
159
|
+
// Processing results
|
|
160
|
+
processingResult?: {
|
|
161
|
+
hyperlinksProcessed?: number;
|
|
162
|
+
hyperlinksModified?: number;
|
|
163
|
+
contentIdsAppended?: number;
|
|
164
|
+
backupPath?: string;
|
|
165
|
+
duration?: number;
|
|
166
|
+
changes?: DocumentChange[];
|
|
167
|
+
optionsUsed?: string[]; // IDs of processing options that were enabled during processing
|
|
168
|
+
warnings?: string[]; // Any warnings or issues encountered (e.g., "Header 2 spacing could not be applied")
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
export interface DocumentChange {
|
|
173
|
+
id?: string; // Unique identifier for the change (for reversion)
|
|
174
|
+
type: 'hyperlink' | 'text' | 'style' | 'structure' | 'table' | 'deletion';
|
|
175
|
+
description: string;
|
|
176
|
+
before?: string;
|
|
177
|
+
after?: string;
|
|
178
|
+
count?: number;
|
|
179
|
+
// Location tracking for precise reversion
|
|
180
|
+
elementPath?: string; // XPath-like identifier for element
|
|
181
|
+
paragraphIndex?: number; // Paragraph index in document
|
|
182
|
+
runIndex?: number; // Run index within paragraph
|
|
183
|
+
context?: string; // Surrounding context for better identification
|
|
184
|
+
|
|
185
|
+
// NEW: Enhanced location context
|
|
186
|
+
nearestHeader2?: string; // Closest Header 2 above this change
|
|
187
|
+
sectionContext?: string; // Additional section info
|
|
188
|
+
|
|
189
|
+
// NEW: Grouping and categorization
|
|
190
|
+
category?: 'blank_lines' | 'hyperlink_update' | 'hyperlink_failed' | 'list_fix' |
|
|
191
|
+
'style_application' | 'structure' | 'other';
|
|
192
|
+
affectedItems?: string[]; // For grouped changes (e.g., list of URLs updated)
|
|
193
|
+
|
|
194
|
+
// NEW: Hyperlink-specific metadata
|
|
195
|
+
contentId?: string; // Content ID if applicable
|
|
196
|
+
hyperlinkStatus?: 'updated' | 'expired' | 'not_found' | 'valid';
|
|
197
|
+
|
|
198
|
+
// NEW: URL change tracking for hyperlinks
|
|
199
|
+
urlBefore?: string; // Original URL (before change)
|
|
200
|
+
urlAfter?: string; // New URL (after change)
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
export interface SessionStats {
|
|
204
|
+
documentsProcessed: number;
|
|
205
|
+
hyperlinksChecked: number;
|
|
206
|
+
feedbackImported: number;
|
|
207
|
+
timeSaved: number; // in minutes
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
export interface Session {
|
|
211
|
+
id: string;
|
|
212
|
+
name: string;
|
|
213
|
+
createdAt: Date;
|
|
214
|
+
lastModified: Date;
|
|
215
|
+
closedAt?: Date;
|
|
216
|
+
documents: Document[];
|
|
217
|
+
stats: SessionStats;
|
|
218
|
+
status: 'active' | 'closed';
|
|
219
|
+
// Processing configuration
|
|
220
|
+
processingOptions?: {
|
|
221
|
+
appendContentId?: boolean; // DEPRECATED: #content should never be appended
|
|
222
|
+
contentIdToAppend?: string; // DEPRECATED: #content should never be appended
|
|
223
|
+
validateUrls: boolean;
|
|
224
|
+
createBackup: boolean;
|
|
225
|
+
processInternalLinks: boolean;
|
|
226
|
+
processExternalLinks: boolean;
|
|
227
|
+
enabledOperations: string[];
|
|
228
|
+
/** How to handle Word tracked changes during processing */
|
|
229
|
+
revisionHandlingMode?: RevisionHandlingMode;
|
|
230
|
+
/** Author name for preserve_and_wrap mode */
|
|
231
|
+
revisionAuthor?: string;
|
|
232
|
+
/** Auto-accept all revisions after processing for clean output (default: false) */
|
|
233
|
+
autoAcceptRevisions?: boolean;
|
|
234
|
+
};
|
|
235
|
+
// Style configuration
|
|
236
|
+
styles?: SessionStyle[];
|
|
237
|
+
// Document uniformity settings
|
|
238
|
+
listBulletSettings?: ListBulletSettings;
|
|
239
|
+
tableUniformitySettings?: TableUniformitySettings; // Legacy - will be deprecated
|
|
240
|
+
tableShadingSettings?: TableShadingSettings; // NEW: Simplified table shading colors
|
|
241
|
+
tableOfContentsSettings?: TableOfContentsSettings;
|
|
242
|
+
// Replacement rules
|
|
243
|
+
replacements?: ReplacementRule[];
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
export interface SessionStyle {
|
|
247
|
+
id: string; // CRITICAL: needed to identify which style (header1, header2, header3, normal, listParagraph)
|
|
248
|
+
name: string;
|
|
249
|
+
fontFamily: string;
|
|
250
|
+
fontSize: number;
|
|
251
|
+
bold: boolean; // Required: true = apply bold, false = remove bold
|
|
252
|
+
italic: boolean; // Required: true = apply italic, false = remove italic
|
|
253
|
+
underline: boolean; // Required: true = apply underline, false = remove underline
|
|
254
|
+
preserveBold?: boolean; // Optional: true = preserve existing bold (ignore bold property)
|
|
255
|
+
preserveItalic?: boolean; // Optional: true = preserve existing italic (ignore italic property)
|
|
256
|
+
preserveUnderline?: boolean; // Optional: true = preserve existing underline (ignore underline property)
|
|
257
|
+
preserveCenterAlignment?: boolean; // Optional: true = preserve center alignment if paragraph is already centered
|
|
258
|
+
alignment: 'left' | 'center' | 'right' | 'justify';
|
|
259
|
+
color: string;
|
|
260
|
+
spaceBefore: number;
|
|
261
|
+
spaceAfter: number;
|
|
262
|
+
lineSpacing: number;
|
|
263
|
+
noSpaceBetweenSame?: boolean; // Don't add space between paragraphs of the same style (List Paragraph)
|
|
264
|
+
indentation?: {
|
|
265
|
+
left?: number; // Left indent in inches (e.g., 0.25" for bullet position)
|
|
266
|
+
firstLine?: number; // First line indent in inches (e.g., 0.5" for text position)
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
export interface IndentationLevel {
|
|
271
|
+
level: number;
|
|
272
|
+
symbolIndent: number; // Symbol/bullet position from left margin in inches
|
|
273
|
+
textIndent: number; // Text position from left margin in inches
|
|
274
|
+
bulletChar?: string; // bullet character for this level
|
|
275
|
+
numberedFormat?: string; // format for numbered lists (1., a., i., etc.)
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
export interface ListBulletSettings {
|
|
279
|
+
enabled: boolean;
|
|
280
|
+
indentationLevels: IndentationLevel[];
|
|
281
|
+
// Note: List item spacing uses the List Paragraph style's spaceBefore/spaceAfter values
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
export interface TableUniformitySettings {
|
|
285
|
+
enabled: boolean;
|
|
286
|
+
borderStyle: 'none' | 'single' | 'double' | 'dashed';
|
|
287
|
+
borderWidth: number; // in points
|
|
288
|
+
headerRowBold: boolean;
|
|
289
|
+
headerRowShaded: boolean;
|
|
290
|
+
headerRowShadingColor: string; // color hex for header row shading
|
|
291
|
+
alternatingRowColors: boolean;
|
|
292
|
+
cellPadding: number; // in points
|
|
293
|
+
autoFit: 'content' | 'window';
|
|
294
|
+
// Header 2 in 1x1 table cell settings
|
|
295
|
+
header2In1x1CellShading: string; // color hex
|
|
296
|
+
header2In1x1Alignment: 'left' | 'center' | 'right' | 'justify';
|
|
297
|
+
// Large table (>1x1) settings
|
|
298
|
+
largeTableSettings: {
|
|
299
|
+
font: string;
|
|
300
|
+
fontSize: number;
|
|
301
|
+
bold: boolean;
|
|
302
|
+
italic: boolean;
|
|
303
|
+
underline: boolean;
|
|
304
|
+
alignment: 'left' | 'center' | 'right' | 'justify';
|
|
305
|
+
cellPadding: number;
|
|
306
|
+
};
|
|
307
|
+
applyToIfThenPattern: boolean; // Apply to cells with "If...Then" pattern
|
|
308
|
+
applyToTopRow: boolean; // Apply to top row if not 1x1
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
export interface TableOfContentsSettings {
|
|
312
|
+
enabled: boolean;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
export interface TableShadingSettings {
|
|
316
|
+
header2Shading: string; // Hex color for Header 2 / 1x1 table cells (default: #BFBFBF)
|
|
317
|
+
otherShading: string; // Hex color for other table cells (default: #DFDFDF)
|
|
318
|
+
imageBorderWidth?: number; // Border width in points for images (default: 1.0)
|
|
319
|
+
preserveBold?: boolean; // If true, preserve original bold formatting in table cells (default: use Normal style's preserveBold)
|
|
320
|
+
heading2FontFamily?: string; // Font family for Heading 2 / 1x1 table cells (default: from Heading 2 style config)
|
|
321
|
+
heading2FontSize?: number; // Font size in points for Heading 2 / 1x1 table cells (default: from Heading 2 style config)
|
|
322
|
+
|
|
323
|
+
// Table cell padding in inches
|
|
324
|
+
// 1x1 Tables padding
|
|
325
|
+
padding1x1Top?: number; // default: 0
|
|
326
|
+
padding1x1Bottom?: number; // default: 0
|
|
327
|
+
padding1x1Left?: number; // default: 0.08
|
|
328
|
+
padding1x1Right?: number; // default: 0.08
|
|
329
|
+
|
|
330
|
+
// Other Tables padding (>1x1)
|
|
331
|
+
paddingOtherTop?: number; // default: 0
|
|
332
|
+
paddingOtherBottom?: number; // default: 0
|
|
333
|
+
paddingOtherLeft?: number; // default: 0.08
|
|
334
|
+
paddingOtherRight?: number; // default: 0.08
|
|
335
|
+
|
|
336
|
+
// Cell border settings
|
|
337
|
+
cellBorderThickness?: number; // Border thickness in points (default: 0.5)
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
export interface ReplacementRule {
|
|
341
|
+
id: string;
|
|
342
|
+
enabled: boolean;
|
|
343
|
+
type: 'hyperlink' | 'text';
|
|
344
|
+
pattern: string;
|
|
345
|
+
replacement: string;
|
|
346
|
+
caseSensitive?: boolean;
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
/**
|
|
350
|
+
* Custom session defaults stored in localStorage
|
|
351
|
+
* Used when user clicks "Save as Default" to persist their preferred settings
|
|
352
|
+
*/
|
|
353
|
+
export interface CustomSessionDefaults {
|
|
354
|
+
styles?: SessionStyle[];
|
|
355
|
+
listBulletSettings?: ListBulletSettings;
|
|
356
|
+
processingOptions?: Session['processingOptions'];
|
|
357
|
+
tableShadingSettings?: TableShadingSettings;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
export interface SessionContextType {
|
|
361
|
+
sessions: Session[];
|
|
362
|
+
activeSessions: Session[];
|
|
363
|
+
currentSession: Session | null;
|
|
364
|
+
recentSessions: Session[];
|
|
365
|
+
|
|
366
|
+
// Actions
|
|
367
|
+
createSession: (name: string) => Session;
|
|
368
|
+
loadSession: (id: string) => void;
|
|
369
|
+
reopenSession: (id: string) => void;
|
|
370
|
+
closeSession: (id: string) => void;
|
|
371
|
+
deleteSession: (id: string) => void;
|
|
372
|
+
switchSession: (id: string) => void;
|
|
373
|
+
|
|
374
|
+
// Document actions
|
|
375
|
+
addDocuments: (sessionId: string, files: File[]) => Promise<void>;
|
|
376
|
+
removeDocument: (sessionId: string, documentId: string) => void;
|
|
377
|
+
processDocument: (sessionId: string, documentId: string) => Promise<void>;
|
|
378
|
+
|
|
379
|
+
// Revert actions
|
|
380
|
+
revertChange: (sessionId: string, documentId: string, changeId: string) => Promise<void>;
|
|
381
|
+
revertAllChanges: (sessionId: string, documentId: string) => Promise<void>;
|
|
382
|
+
|
|
383
|
+
// Stats
|
|
384
|
+
updateSessionStats: (sessionId: string, stats: Partial<SessionStats>) => void;
|
|
385
|
+
updateSessionName: (sessionId: string, name: string) => void;
|
|
386
|
+
updateSessionOptions: (
|
|
387
|
+
sessionId: string,
|
|
388
|
+
processingOptions: Session['processingOptions']
|
|
389
|
+
) => void;
|
|
390
|
+
updateSessionReplacements: (sessionId: string, replacements: ReplacementRule[]) => void;
|
|
391
|
+
updateSessionStyles: (sessionId: string, styles: SessionStyle[]) => void;
|
|
392
|
+
updateSessionListBulletSettings: (
|
|
393
|
+
sessionId: string,
|
|
394
|
+
listBulletSettings: ListBulletSettings
|
|
395
|
+
) => void;
|
|
396
|
+
updateSessionTableUniformitySettings: (
|
|
397
|
+
sessionId: string,
|
|
398
|
+
tableUniformitySettings: TableUniformitySettings
|
|
399
|
+
) => void;
|
|
400
|
+
updateSessionTableShadingSettings: (
|
|
401
|
+
sessionId: string,
|
|
402
|
+
tableShadingSettings: TableShadingSettings
|
|
403
|
+
) => void;
|
|
404
|
+
updateSessionTableOfContentsSettings: (
|
|
405
|
+
sessionId: string,
|
|
406
|
+
tableOfContentsSettings: TableOfContentsSettings
|
|
407
|
+
) => void;
|
|
408
|
+
|
|
409
|
+
// Persistence
|
|
410
|
+
saveSession: (session: Session) => void;
|
|
411
|
+
loadSessionFromStorage: (id: string) => Session | null;
|
|
412
|
+
|
|
413
|
+
// Defaults management
|
|
414
|
+
resetSessionToDefaults: (sessionId: string) => void;
|
|
415
|
+
saveAsCustomDefaults: (sessionId: string) => void;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
/**
|
|
419
|
+
* Queue item for sequential document processing
|
|
420
|
+
* Used by useDocumentQueue hook to process documents one at a time
|
|
421
|
+
*/
|
|
422
|
+
export interface QueueItem {
|
|
423
|
+
documentId: string;
|
|
424
|
+
sessionId: string;
|
|
425
|
+
addedAt: Date;
|
|
426
|
+
status: 'queued' | 'processing' | 'completed' | 'error';
|
|
427
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
export interface UserProfile {
|
|
2
|
+
firstName: string;
|
|
3
|
+
lastName: string;
|
|
4
|
+
email: string;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export interface NotificationSettings {
|
|
8
|
+
emailNotifications: boolean;
|
|
9
|
+
pushNotifications: boolean;
|
|
10
|
+
projectUpdates: boolean;
|
|
11
|
+
teamMentions: boolean;
|
|
12
|
+
weeklyDigest: boolean;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface ApiConnections {
|
|
16
|
+
powerAutomateUrl: string;
|
|
17
|
+
bugReportUrl: string;
|
|
18
|
+
submitIdeaUrl: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface UpdateSettings {
|
|
22
|
+
autoUpdateOnLaunch: boolean;
|
|
23
|
+
checkForPreReleases: boolean;
|
|
24
|
+
// SharePoint update source (alternative to GitHub)
|
|
25
|
+
useSharePointSource: boolean;
|
|
26
|
+
sharePointFolderUrl: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Local Dictionary Settings for SharePoint Dictionary integration
|
|
31
|
+
* When enabled, hyperlink lookups use local SQLite database instead of API
|
|
32
|
+
*
|
|
33
|
+
* Uses interactive browser authentication (like the Updates feature)
|
|
34
|
+
* to download and parse an Excel file containing Document_ID, Content_ID, Title, Status
|
|
35
|
+
*/
|
|
36
|
+
export interface LocalDictionarySettings {
|
|
37
|
+
enabled: boolean;
|
|
38
|
+
sharePointFileUrl: string; // Direct URL to .xlsx file on SharePoint
|
|
39
|
+
lastRetrievalTime: string | null;
|
|
40
|
+
lastRetrievalSuccess: boolean;
|
|
41
|
+
totalEntries: number;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Backup Settings for document backup configuration
|
|
46
|
+
*/
|
|
47
|
+
export interface BackupSettings {
|
|
48
|
+
enabled: boolean;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Display Settings for monitor configuration
|
|
53
|
+
* Used for document comparison feature
|
|
54
|
+
*/
|
|
55
|
+
export interface DisplaySettings {
|
|
56
|
+
comparisonMonitorId: number; // Index of selected monitor (0 = primary)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export interface UserSettings {
|
|
60
|
+
profile: UserProfile;
|
|
61
|
+
notifications: NotificationSettings;
|
|
62
|
+
apiConnections: ApiConnections;
|
|
63
|
+
language: string;
|
|
64
|
+
timezone: string;
|
|
65
|
+
dateFormat: string;
|
|
66
|
+
updateSettings: UpdateSettings;
|
|
67
|
+
localDictionary: LocalDictionarySettings;
|
|
68
|
+
backupSettings: BackupSettings;
|
|
69
|
+
displaySettings: DisplaySettings;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export const defaultUserSettings: UserSettings = {
|
|
73
|
+
profile: {
|
|
74
|
+
firstName: 'John',
|
|
75
|
+
lastName: 'Doe',
|
|
76
|
+
email: 'john.doe@example.com',
|
|
77
|
+
},
|
|
78
|
+
notifications: {
|
|
79
|
+
emailNotifications: false,
|
|
80
|
+
pushNotifications: false,
|
|
81
|
+
projectUpdates: false,
|
|
82
|
+
teamMentions: false,
|
|
83
|
+
weeklyDigest: false,
|
|
84
|
+
},
|
|
85
|
+
apiConnections: {
|
|
86
|
+
powerAutomateUrl: 'https://www.example.com',
|
|
87
|
+
bugReportUrl: 'https://www.example.com',
|
|
88
|
+
submitIdeaUrl: 'https://www.example.com',
|
|
89
|
+
},
|
|
90
|
+
language: 'English (US)',
|
|
91
|
+
timezone: 'UTC-05:00 Eastern Time (ET)',
|
|
92
|
+
dateFormat: 'MM/DD/YYYY',
|
|
93
|
+
updateSettings: {
|
|
94
|
+
autoUpdateOnLaunch: true,
|
|
95
|
+
checkForPreReleases: false,
|
|
96
|
+
useSharePointSource: false,
|
|
97
|
+
sharePointFolderUrl: '',
|
|
98
|
+
},
|
|
99
|
+
localDictionary: {
|
|
100
|
+
enabled: false,
|
|
101
|
+
sharePointFileUrl: '',
|
|
102
|
+
lastRetrievalTime: null,
|
|
103
|
+
lastRetrievalSuccess: false,
|
|
104
|
+
totalEntries: 0,
|
|
105
|
+
},
|
|
106
|
+
backupSettings: {
|
|
107
|
+
enabled: true,
|
|
108
|
+
},
|
|
109
|
+
displaySettings: {
|
|
110
|
+
comparisonMonitorId: 0, // Default to primary monitor
|
|
111
|
+
},
|
|
112
|
+
};
|