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.
Files changed (271) hide show
  1. package/.eslintrc.json +43 -0
  2. package/.github/workflows/build.yml +64 -0
  3. package/.github/workflows/ci.yml +39 -0
  4. package/.vscode/extensions.json +3 -0
  5. package/Current.md +97 -0
  6. package/DocHub_Image.png +0 -0
  7. package/README.md +666 -0
  8. package/USER_GUIDE.md +1173 -0
  9. package/Updater.md +311 -0
  10. package/build/256x256.png +0 -0
  11. package/build/512x512.png +0 -0
  12. package/build/app-update.yml +4 -0
  13. package/build/create-icon.js +208 -0
  14. package/build/icon.ico +0 -0
  15. package/build/icon.png +0 -0
  16. package/build/icon_1024x1024.png +0 -0
  17. package/dist/assets/Analytics-BpsG9895.js +1 -0
  18. package/dist/assets/Card-IAZin8kp.js +1 -0
  19. package/dist/assets/CurrentSession-B-rFkHvf.js +12 -0
  20. package/dist/assets/Dashboard-C_5gMb0q.js +1 -0
  21. package/dist/assets/Documents-CqZ25axS.js +1 -0
  22. package/dist/assets/Input-l89xwXBi.js +1 -0
  23. package/dist/assets/Reporting-DqdHJY_a.js +1 -0
  24. package/dist/assets/Search-XNbu5z_3.js +1 -0
  25. package/dist/assets/SessionManager-lH9hZfzH.js +1 -0
  26. package/dist/assets/Sessions-ClZOPYNc.js +1 -0
  27. package/dist/assets/Settings-DUEHGURa.js +11 -0
  28. package/dist/assets/index-8xUe8ptc.js +24 -0
  29. package/dist/assets/index-RYyJqF7O.css +1 -0
  30. package/dist/assets/path-BkOl0AGO.js +1 -0
  31. package/dist/assets/promises-ID_B9S-h.js +1 -0
  32. package/dist/assets/urlHelpers-TvgahX0r.js +1 -0
  33. package/dist/assets/useToast-yRSO1dkm.js +1 -0
  34. package/dist/assets/vendor-charts-RkGK5ROP.js +36 -0
  35. package/dist/assets/vendor-db-l0sNRNKZ.js +1 -0
  36. package/dist/assets/vendor-react-BVZ_anCF.js +4 -0
  37. package/dist/assets/vendor-search-Dw8P0qyA.js +1 -0
  38. package/dist/assets/vendor-ui-BU7NfluV.js +53 -0
  39. package/dist/electron/PowerAutomateApiService-LfW09ZGr.js +147 -0
  40. package/dist/electron/main-CXkNtyv-.js +19789 -0
  41. package/dist/electron/main.js +5 -0
  42. package/dist/electron/preload.js +1 -0
  43. package/dist/icon.png +0 -0
  44. package/dist/index.html +27 -0
  45. package/docs/CODEBASE_ANALYSIS_REPORT.md +309 -0
  46. package/docs/DEBUG_LOGGING_GUIDE.md +244 -0
  47. package/docs/README.md +115 -0
  48. package/docs/TOC_WIRING_GUIDE.md +344 -0
  49. package/docs/analysis/Bullet_Symbol_Bug_Analysis.md +136 -0
  50. package/docs/analysis/DOCXMLATER_ANALYSIS_SUMMARY.txt +169 -0
  51. package/docs/analysis/Document_Processing_Issues_Analysis.md +704 -0
  52. package/docs/analysis/FIELD_PRESERVATION_ANALYSIS.md +1200 -0
  53. package/docs/analysis/INDENTATION_PRESERVE_ANALYSIS.md +181 -0
  54. package/docs/analysis/INDENTATION_PRESERVE_IMPLEMENTATION.md +207 -0
  55. package/docs/analysis/List_Implementation.md +206 -0
  56. package/docs/analysis/List_Implementation_Accuracy_Report.md +366 -0
  57. package/docs/analysis/PROCESSING_OPTIONS_UI_UPDATES.md +220 -0
  58. package/docs/analysis/RefactorStyles.md +852 -0
  59. package/docs/analysis/STYLE_PARAMETER_ENHANCEMENT.md +143 -0
  60. package/docs/analysis/docxmlater-comparison-todo-2025-11-13.md +636 -0
  61. package/docs/analysis/docxmlater-implementation-analysis-2025-11-13.md +340 -0
  62. package/docs/analysis/docxmlater-template_ui-integration-analysis.md +263 -0
  63. package/docs/analysis/github-issues-to-create.md +237 -0
  64. package/docs/api/API_README.md +538 -0
  65. package/docs/api/API_REFERENCE.md +751 -0
  66. package/docs/api/TYPE_DEFINITIONS.md +869 -0
  67. package/docs/architecture/FONT_EMBEDDING_GUIDE.md +318 -0
  68. package/docs/architecture/docxmlater-functions-and-structure.md +726 -0
  69. package/docs/docxmlater-readme.md +1341 -0
  70. package/docs/fixes/EXECUTION_LOG_TEST_BASE.md +573 -0
  71. package/docs/fixes/HYPERLINK_TEXT_SANITIZATION.md +253 -0
  72. package/docs/fixes/README.md +37 -0
  73. package/docs/github-issues/issue-1-body.md +125 -0
  74. package/docs/github-issues/issue-10-body.md +850 -0
  75. package/docs/github-issues/issue-2-body.md +200 -0
  76. package/docs/github-issues/issue-3-body.md +270 -0
  77. package/docs/github-issues/issue-4-body.md +169 -0
  78. package/docs/github-issues/issue-5-body.md +173 -0
  79. package/docs/github-issues/issue-6-body.md +158 -0
  80. package/docs/github-issues/issue-7-body.md +171 -0
  81. package/docs/github-issues/issue-8-body.md +407 -0
  82. package/docs/github-issues/issue-9-body.md +515 -0
  83. package/docs/github-issues/issue-tracker.md +274 -0
  84. package/docs/github-issues/predictive-analysis-2025-10-18.md +2131 -0
  85. package/docs/implementation/List_Framework_Refactor_Plan.md +336 -0
  86. package/docs/implementation/PRIMARY_TEXT_COLOR_FEATURE.md +217 -0
  87. package/docs/implementation/RELEASE_PLAN_v2.1.0.md +362 -0
  88. package/docs/implementation/RefactorStyles.md +588 -0
  89. package/docs/implementation/implement-plan.md +489 -0
  90. package/docs/implementation/missing-helpers-implementation.md +391 -0
  91. package/docs/implementation/refactor-plan.md +520 -0
  92. package/docs/implementation/session-implementation-complete.md +233 -0
  93. package/docs/implementation/session-management-plan.md +250 -0
  94. package/docs/setup-checklist.md +77 -0
  95. package/docs/versions/changelog.md +345 -0
  96. package/electron/customUpdater.ts +656 -0
  97. package/electron/main.ts +2441 -0
  98. package/electron/memoryConfig.ts +187 -0
  99. package/electron/preload.ts +394 -0
  100. package/electron/proxyConfig.ts +340 -0
  101. package/electron/services/BackupService.ts +452 -0
  102. package/electron/services/DictionaryService.ts +402 -0
  103. package/electron/services/LocalDictionaryLookupService.ts +147 -0
  104. package/electron/services/PowerAutomateApiService.ts +231 -0
  105. package/electron/services/SharePointSyncService.ts +474 -0
  106. package/electron/windowsCertStore.ts +427 -0
  107. package/electron/zscalerConfig.ts +381 -0
  108. package/eslint.config.js +92 -0
  109. package/jest.config.js +52 -0
  110. package/package.json +214 -0
  111. package/postcss.config.mjs +6 -0
  112. package/public/icon.png +0 -0
  113. package/publish-release.ps1 +5 -0
  114. package/renovate.json +30 -0
  115. package/src/App.tsx +216 -0
  116. package/src/__mocks__/p-limit.js +12 -0
  117. package/src/__mocks__/styleMock.js +1 -0
  118. package/src/components/common/BugReportButton.tsx +44 -0
  119. package/src/components/common/BugReportDialog.tsx +193 -0
  120. package/src/components/common/Button.tsx +153 -0
  121. package/src/components/common/Card.tsx +86 -0
  122. package/src/components/common/ColorPickerDialog.tsx +177 -0
  123. package/src/components/common/ConfirmDialog.tsx +96 -0
  124. package/src/components/common/DebugConsole.tsx +275 -0
  125. package/src/components/common/EmptyState.tsx +183 -0
  126. package/src/components/common/ErrorBoundary.tsx +98 -0
  127. package/src/components/common/ErrorDetailsDialog.tsx +153 -0
  128. package/src/components/common/ErrorFallback.tsx +218 -0
  129. package/src/components/common/Input.tsx +109 -0
  130. package/src/components/common/Skeleton.tsx +184 -0
  131. package/src/components/common/SplashScreen.tsx +81 -0
  132. package/src/components/common/Toast.tsx +155 -0
  133. package/src/components/common/Tooltip.tsx +79 -0
  134. package/src/components/common/UpdateNotification.tsx +320 -0
  135. package/src/components/comparison/ComparisonWindow.tsx +374 -0
  136. package/src/components/comparison/SideBySideDiff.tsx +486 -0
  137. package/src/components/comparison/index.ts +8 -0
  138. package/src/components/document/DocumentUploader.tsx +288 -0
  139. package/src/components/document/HyperlinkPreview.tsx +430 -0
  140. package/src/components/document/HyperlinkService.md +1484 -0
  141. package/src/components/document/Hyperlink_Technical_Documentation.md +496 -0
  142. package/src/components/document/InlineChangesView.tsx +707 -0
  143. package/src/components/document/ProcessingProgress.tsx +303 -0
  144. package/src/components/document/ProcessingResults.tsx +256 -0
  145. package/src/components/document/TrackedChangesDetail.tsx +530 -0
  146. package/src/components/document/TrackedChangesPanel.tsx +546 -0
  147. package/src/components/document/VirtualDocumentList.tsx +240 -0
  148. package/src/components/editor/DocumentEditor.tsx +723 -0
  149. package/src/components/editor/DocumentEditorModal.tsx +640 -0
  150. package/src/components/editor/EditorQuickActions.tsx +502 -0
  151. package/src/components/editor/EditorToolbar.tsx +312 -0
  152. package/src/components/editor/TableEditor.tsx +926 -0
  153. package/src/components/editor/index.ts +18 -0
  154. package/src/components/layout/Header.tsx +190 -0
  155. package/src/components/layout/Sidebar.tsx +313 -0
  156. package/src/components/layout/TitleBar.tsx +190 -0
  157. package/src/components/navigation/CommandPalette.tsx +233 -0
  158. package/src/components/navigation/KeyboardShortcutsModal.tsx +173 -0
  159. package/src/components/sessions/ChangeItem.tsx +408 -0
  160. package/src/components/sessions/ChangeViewer.tsx +1155 -0
  161. package/src/components/sessions/DocumentComparisonModal.tsx +314 -0
  162. package/src/components/sessions/ProcessingOptions.tsx +297 -0
  163. package/src/components/sessions/ReplacementsTab.tsx +438 -0
  164. package/src/components/sessions/RevisionHandlingOptions.tsx +87 -0
  165. package/src/components/sessions/SessionManager.tsx +188 -0
  166. package/src/components/sessions/StylesEditor.tsx +1335 -0
  167. package/src/components/sessions/TabContainer.tsx +151 -0
  168. package/src/components/sessions/VirtualSessionList.tsx +157 -0
  169. package/src/components/sessions/sessionToProcessorManager.tsx +420 -0
  170. package/src/components/settings/CertificateManager.tsx +410 -0
  171. package/src/components/settings/SegmentedControl.tsx +88 -0
  172. package/src/components/settings/SettingRow.tsx +52 -0
  173. package/src/contexts/GlobalStatsContext.tsx +396 -0
  174. package/src/contexts/SessionContext.tsx +2129 -0
  175. package/src/contexts/ThemeContext.tsx +428 -0
  176. package/src/contexts/UserSettingsContext.tsx +290 -0
  177. package/src/contexts/__tests__/GlobalStatsContext.test.tsx +390 -0
  178. package/src/global.d.ts +273 -0
  179. package/src/hooks/useDocumentQueue.tsx +210 -0
  180. package/src/hooks/useToast.tsx +55 -0
  181. package/src/main.tsx +10 -0
  182. package/src/pages/Analytics.tsx +386 -0
  183. package/src/pages/CurrentSession.tsx +1174 -0
  184. package/src/pages/Dashboard.tsx +319 -0
  185. package/src/pages/Documents.tsx +317 -0
  186. package/src/pages/Projects.tsx +250 -0
  187. package/src/pages/Reporting.tsx +386 -0
  188. package/src/pages/Search.tsx +349 -0
  189. package/src/pages/Sessions.tsx +285 -0
  190. package/src/pages/Settings.tsx +2662 -0
  191. package/src/services/HyperlinkService.ts +1085 -0
  192. package/src/services/document/DocXMLaterProcessor.ts +617 -0
  193. package/src/services/document/DocumentProcessingComparison.ts +856 -0
  194. package/src/services/document/DocumentSnapshotService.ts +575 -0
  195. package/src/services/document/WordDocumentProcessor.ts +10509 -0
  196. package/src/services/document/__tests__/DocXMLaterProcessor.hyperlinks.test.md +311 -0
  197. package/src/services/document/__tests__/WordDocumentProcessor.integration.test.ts +515 -0
  198. package/src/services/document/__tests__/WordDocumentProcessor.test.ts +812 -0
  199. package/src/services/document/blanklines/BlankLineManager.ts +658 -0
  200. package/src/services/document/blanklines/__tests__/paragraphChecks.test.ts +281 -0
  201. package/src/services/document/blanklines/helpers/blankLineInsertion.ts +87 -0
  202. package/src/services/document/blanklines/helpers/blankLineSnapshot.ts +251 -0
  203. package/src/services/document/blanklines/helpers/clearCustom.ts +121 -0
  204. package/src/services/document/blanklines/helpers/contextChecks.ts +117 -0
  205. package/src/services/document/blanklines/helpers/imageChecks.ts +51 -0
  206. package/src/services/document/blanklines/helpers/paragraphChecks.ts +236 -0
  207. package/src/services/document/blanklines/helpers/removeBlanksBetweenListItems.ts +91 -0
  208. package/src/services/document/blanklines/helpers/removeTrailingBlanks.ts +35 -0
  209. package/src/services/document/blanklines/helpers/tableGuards.ts +21 -0
  210. package/src/services/document/blanklines/index.ts +67 -0
  211. package/src/services/document/blanklines/rules/additionRules.ts +337 -0
  212. package/src/services/document/blanklines/rules/indentationRules.ts +317 -0
  213. package/src/services/document/blanklines/rules/removalRules.ts +362 -0
  214. package/src/services/document/blanklines/rules/ruleTypes.ts +92 -0
  215. package/src/services/document/blanklines/types.ts +29 -0
  216. package/src/services/document/helpers/ImageBorderCropper.ts +377 -0
  217. package/src/services/document/helpers/__tests__/whitespace.test.ts +272 -0
  218. package/src/services/document/helpers/whitespace.ts +117 -0
  219. package/src/services/document/list/ListNormalizer.ts +947 -0
  220. package/src/services/document/list/index.ts +45 -0
  221. package/src/services/document/list/list-detection.ts +275 -0
  222. package/src/services/document/list/list-types.ts +162 -0
  223. package/src/services/document/processors/HyperlinkProcessor.ts +370 -0
  224. package/src/services/document/processors/ListProcessor.ts +257 -0
  225. package/src/services/document/processors/StructureProcessor.ts +176 -0
  226. package/src/services/document/processors/StyleProcessor.ts +389 -0
  227. package/src/services/document/processors/TableProcessor.ts +2238 -0
  228. package/src/services/document/processors/__tests__/HyperlinkProcessor.test.ts +314 -0
  229. package/src/services/document/processors/__tests__/ListProcessor.test.ts +291 -0
  230. package/src/services/document/processors/__tests__/StructureProcessor.test.ts +257 -0
  231. package/src/services/document/processors/__tests__/TableProcessor.hlp-tips-bullets.test.ts +459 -0
  232. package/src/services/document/processors/__tests__/TableProcessor.test.ts +1604 -0
  233. package/src/services/document/processors/index.ts +28 -0
  234. package/src/services/document/types/docx-processing.ts +310 -0
  235. package/src/services/editor/EditorActionHandlers.ts +901 -0
  236. package/src/services/editor/index.ts +13 -0
  237. package/src/setupTests.ts +47 -0
  238. package/src/styles/global.css +782 -0
  239. package/src/types/backup.ts +132 -0
  240. package/src/types/dictionary.ts +125 -0
  241. package/src/types/document-processing.ts +331 -0
  242. package/src/types/docxmlater-augments.d.ts +142 -0
  243. package/src/types/editor.ts +280 -0
  244. package/src/types/electron.ts +340 -0
  245. package/src/types/globalStats.ts +155 -0
  246. package/src/types/hyperlink.ts +471 -0
  247. package/src/types/operations.ts +354 -0
  248. package/src/types/session.ts +427 -0
  249. package/src/types/settings.ts +112 -0
  250. package/src/utils/MemoryMonitor.ts +248 -0
  251. package/src/utils/cn.ts +6 -0
  252. package/src/utils/colorConvert.ts +306 -0
  253. package/src/utils/diffUtils.ts +347 -0
  254. package/src/utils/documentUtils.ts +202 -0
  255. package/src/utils/electronGuard.ts +62 -0
  256. package/src/utils/indexedDB.ts +915 -0
  257. package/src/utils/logger.ts +717 -0
  258. package/src/utils/pathSecurity.ts +232 -0
  259. package/src/utils/pathValidator.ts +236 -0
  260. package/src/utils/processingTimeEstimator.ts +153 -0
  261. package/src/utils/safeJsonParse.ts +62 -0
  262. package/src/utils/textSanitizer.ts +162 -0
  263. package/src/utils/urlHelpers.ts +304 -0
  264. package/src/utils/urlPatterns.ts +198 -0
  265. package/src/utils/urlSanitizer.ts +152 -0
  266. package/src/vite-env.d.ts +11 -0
  267. package/tsconfig.electron.json +19 -0
  268. package/tsconfig.json +36 -0
  269. package/tsconfig.node.json +12 -0
  270. package/typedoc.json +45 -0
  271. package/vite.config.ts +152 -0
@@ -0,0 +1,471 @@
1
+ /**
2
+ * Hyperlink-specific type definitions
3
+ * Implements the two-part OpenXML hyperlink reference system
4
+ */
5
+
6
+ import type { XMLElement } from './document-processing';
7
+
8
+ // Hyperlink types
9
+ export type HyperlinkType = 'external' | 'internal' | 'bookmark' | 'email' | 'file';
10
+
11
+ // Hyperlink data structure
12
+ export interface HyperlinkData {
13
+ id: string;
14
+ relationshipId: string;
15
+ type: HyperlinkType;
16
+ target: string;
17
+ displayText: string;
18
+ tooltip?: string;
19
+ created: Date;
20
+ modified?: Date;
21
+ isValid?: boolean;
22
+ validationMessage?: string;
23
+ }
24
+
25
+ // Detailed hyperlink information for processing
26
+ export interface DetailedHyperlinkInfo {
27
+ id: string;
28
+ relationshipId: string;
29
+ element: XMLElement;
30
+ containingPart: string; // e.g., 'document.xml', 'header1.xml'
31
+ url: string;
32
+ displayText: string;
33
+ tooltip?: string;
34
+ type: HyperlinkType;
35
+ isInternal: boolean;
36
+ isValid: boolean;
37
+ validationMessage?: string;
38
+ context?: string; // Surrounding text for context
39
+ paragraphIndex?: number;
40
+ characterPosition?: number;
41
+ }
42
+
43
+ // Patterns for identifying special URLs
44
+ export interface URLPattern {
45
+ name: string;
46
+ pattern: RegExp;
47
+ description: string;
48
+ action?: 'append' | 'replace' | 'validate';
49
+ }
50
+
51
+ // Pre-defined patterns for theSource URLs
52
+ export const URL_PATTERNS: Readonly<{
53
+ CONTENT_ID: URLPattern;
54
+ DOCUMENT_ID: URLPattern;
55
+ THE_SOURCE: URLPattern;
56
+ }> = {
57
+ CONTENT_ID: {
58
+ name: 'ContentId',
59
+ pattern: /(TSRC|CMS)-([a-zA-Z0-9]+)-(\d{6})/i,
60
+ description: 'Matches theSource Content IDs',
61
+ action: 'append',
62
+ },
63
+ DOCUMENT_ID: {
64
+ name: 'DocumentId',
65
+ pattern: /docid=([a-zA-Z0-9-]+)(?:[^a-zA-Z0-9-]|$)/i,
66
+ description: 'Matches theSource Document IDs',
67
+ action: 'append',
68
+ },
69
+ THE_SOURCE: {
70
+ name: 'TheSource',
71
+ pattern: /thesource\.cvshealth\.com/i,
72
+ description: 'Matches theSource domain URLs',
73
+ action: 'validate',
74
+ },
75
+ };
76
+
77
+ // Hyperlink processing options
78
+ export interface HyperlinkProcessingOptions {
79
+ processExternalLinks?: boolean;
80
+ processInternalLinks?: boolean;
81
+ validateUrls?: boolean;
82
+ updateDisplayText?: boolean;
83
+ appendContentId?: boolean;
84
+ contentIdToAppend?: string;
85
+ removeOrphanedRelationships?: boolean;
86
+ consolidateDuplicates?: boolean;
87
+ preserveTooltips?: boolean;
88
+ urlPattern?: string | RegExp;
89
+ displayTextPattern?: string | RegExp;
90
+ trackChanges?: boolean; // Enable DocHub change tracking for Document Changes UI
91
+ apiEndpoint?: string;
92
+ operations?: {
93
+ fixContentIds?: boolean;
94
+ updateTitles?: boolean;
95
+ replaceOutdatedTitles?: boolean; // Standalone title replacement (fallback when API unavailable)
96
+ fixInternalHyperlinks?: boolean;
97
+ updateTopHyperlinks?: boolean;
98
+ /**
99
+ * Populate/refresh the Table of Contents after save using docxmlater's
100
+ * replaceTableOfContents() helper. When true, the TOC field code is
101
+ * preserved but the entries themselves (hyperlinks) are generated so
102
+ * recipients do not need to "Right-click to update field".
103
+ */
104
+ updateTocHyperlinks?: boolean;
105
+ /**
106
+ * Force remove Heading 1 from Table of Contents entries.
107
+ * When true (default), excludes Heading 1 (document title) from TOC.
108
+ * This ensures the document title doesn't appear as a TOC entry.
109
+ */
110
+ forceRemoveHeading1FromTOC?: boolean;
111
+ /**
112
+ * Alias for updateTocHyperlinks for clearer intent in higher-level
113
+ * processing options (e.g., dochub-app). Either flag being true
114
+ * should trigger TOC population logic.
115
+ */
116
+ populateToc?: boolean;
117
+ standardizeHyperlinkColor?: boolean;
118
+ validateHeader2Tables?: boolean; // NEW in 1.6.0: Validate Header 2 table formatting
119
+ validateDocumentStyles?: boolean; // NEW in 1.6.0: Validate all document styles using applyStylesFromObjects()
120
+ processHyperlinks?: boolean; // Enable hyperlink defragmentation using docxmlater v1.15.0+
121
+ };
122
+ textReplacements?: any[];
123
+ styles?: any;
124
+ header2Spacing?: {
125
+ spaceBefore: number;
126
+ spaceAfter: number;
127
+ };
128
+ customStyleSpacing?: {
129
+ header1?: { spaceBefore: number; spaceAfter: number; lineSpacing?: number };
130
+ header2?: { spaceBefore: number; spaceAfter: number; lineSpacing?: number };
131
+ normal?: { spaceBefore: number; spaceAfter: number; lineSpacing?: number };
132
+ };
133
+ // Snapshot capture for document comparison
134
+ captureSnapshot?: boolean;
135
+ sessionId?: string;
136
+ documentId?: string;
137
+ }
138
+
139
+ // Hyperlink fixing options (advanced)
140
+ export interface HyperlinkFixingOptions extends HyperlinkProcessingOptions {
141
+ createBackup?: boolean;
142
+ updateTitles?: boolean;
143
+ powerAutomateUrl?: string;
144
+ apiTimeout?: number;
145
+ retryOnFailure?: boolean;
146
+ maxRetries?: number;
147
+ customPatterns?: URLPattern[];
148
+ }
149
+
150
+ // Hyperlink modification result
151
+ export interface HyperlinkModificationResult {
152
+ hyperlinkId: string;
153
+ relationshipId: string;
154
+ originalUrl: string;
155
+ newUrl?: string;
156
+ originalDisplayText: string;
157
+ newDisplayText?: string;
158
+ modificationType: 'url' | 'text' | 'both' | 'removed';
159
+ success: boolean;
160
+ error?: string;
161
+ }
162
+
163
+ // Hyperlink processing result
164
+ export interface HyperlinkProcessingResult {
165
+ success: boolean;
166
+ totalHyperlinks: number;
167
+ processedHyperlinks: number;
168
+ modifiedHyperlinks: number;
169
+ skippedHyperlinks: number;
170
+ updatedUrls?: number;
171
+ updatedDisplayTexts?: number;
172
+ appendedContentIds?: number;
173
+ mergedHyperlinks?: number; // Count of defragmented hyperlinks (docxmlater v1.15.0+)
174
+ errorCount: number;
175
+ errorMessages: string[];
176
+ processedLinks: HyperlinkSummary[];
177
+ validationIssues?: HyperlinkValidationIssue[];
178
+ backupPath?: string;
179
+ duration?: number; // in milliseconds
180
+ }
181
+
182
+ // Hyperlink fixing result (advanced)
183
+ export interface HyperlinkFixingResult extends HyperlinkProcessingResult {
184
+ updatedUrls: number;
185
+ updatedDisplayTexts: number;
186
+ appendedContentIds: number;
187
+ validationIssues: HyperlinkValidationIssue[];
188
+ apiResponses?: HyperlinkApiResponse[];
189
+ }
190
+
191
+ // Hyperlink summary for reporting
192
+ export interface HyperlinkSummary {
193
+ id: string;
194
+ url: string;
195
+ displayText: string;
196
+ type: HyperlinkType;
197
+ location: string; // e.g., 'Main Document', 'Header', 'Footer'
198
+ status: 'processed' | 'skipped' | 'error';
199
+ modifications?: string[];
200
+ before?: string;
201
+ after?: string;
202
+ }
203
+
204
+ // Hyperlink validation
205
+ export interface HyperlinkValidationIssue {
206
+ hyperlinkId: string;
207
+ url: string;
208
+ issueType: 'invalid_url' | 'broken_link' | 'missing_relationship' | 'duplicate' | 'orphaned';
209
+ severity: 'error' | 'warning' | 'info';
210
+ message: string;
211
+ suggestion?: string;
212
+ autoFixable: boolean;
213
+ }
214
+
215
+ // Hyperlink change tracking
216
+ export interface HyperlinkChange {
217
+ hyperlinkId: string;
218
+ relationshipId: string;
219
+ timestamp: Date;
220
+ changeType: HyperlinkChangeType;
221
+ originalUrl?: string;
222
+ newUrl?: string;
223
+ originalDisplayText?: string;
224
+ newDisplayText?: string;
225
+ author?: string;
226
+ reason?: string;
227
+ }
228
+
229
+ export enum HyperlinkChangeType {
230
+ URL_UPDATED = 'url_updated',
231
+ TEXT_UPDATED = 'text_updated',
232
+ BOTH_UPDATED = 'both_updated',
233
+ ADDED = 'added',
234
+ REMOVED = 'removed',
235
+ CONTENT_ID_APPENDED = 'content_id_appended',
236
+ }
237
+
238
+ // Hyperlink API integration
239
+ export interface HyperlinkApiSettings {
240
+ apiUrl: string;
241
+ apiKey?: string;
242
+ headers?: Record<string, string>;
243
+ timeout?: number;
244
+ retryAttempts?: number;
245
+ retryDelay?: number;
246
+ userAgent?: string;
247
+ }
248
+
249
+ export interface HyperlinkApiRequest {
250
+ urls: string[];
251
+ requestType?: 'validate' | 'update' | 'fetch_metadata';
252
+ options?: Record<string, unknown>;
253
+ }
254
+
255
+ export interface HyperlinkApiResponse {
256
+ success: boolean;
257
+ timestamp: Date;
258
+ body?: {
259
+ results: HyperlinkApiResult[];
260
+ errors?: string[];
261
+ };
262
+ error?: string;
263
+ statusCode?: number;
264
+ }
265
+
266
+ export interface HyperlinkApiResult {
267
+ url: string;
268
+ documentId: string;
269
+ contentId: string;
270
+ title?: string;
271
+ status: 'active' | 'deprecated' | 'expired' | 'moved' | 'not_found';
272
+ suggestedUrl?: string;
273
+ metadata?: Record<string, unknown>;
274
+ }
275
+
276
+ // Hyperlink replacement rules
277
+ export interface HyperlinkReplacementRule {
278
+ id: string;
279
+ enabled: boolean;
280
+ pattern: string | RegExp;
281
+ replacement: string;
282
+ scope: 'url' | 'text' | 'both';
283
+ caseSensitive?: boolean;
284
+ wholeWord?: boolean;
285
+ description?: string;
286
+ }
287
+
288
+ // Batch hyperlink operations
289
+ export interface HyperlinkBatchOperation {
290
+ documentPath: string;
291
+ operations: HyperlinkOperation[];
292
+ options?: HyperlinkProcessingOptions;
293
+ }
294
+
295
+ export interface HyperlinkOperation {
296
+ type: 'update' | 'validate' | 'remove' | 'append_content_id';
297
+ target?: string | RegExp;
298
+ value?: string;
299
+ options?: Record<string, unknown>;
300
+ }
301
+
302
+ // Hyperlink search and replace
303
+ export interface HyperlinkSearchCriteria {
304
+ urlPattern?: string | RegExp;
305
+ displayTextPattern?: string | RegExp;
306
+ type?: HyperlinkType;
307
+ location?: 'document' | 'header' | 'footer' | 'all';
308
+ isValid?: boolean;
309
+ hasContentId?: boolean;
310
+ }
311
+
312
+ export interface HyperlinkReplaceOptions {
313
+ searchCriteria: HyperlinkSearchCriteria;
314
+ newUrl?: string;
315
+ newDisplayText?: string;
316
+ preserveOriginal?: boolean;
317
+ createBackup?: boolean;
318
+ }
319
+
320
+ // Hyperlink statistics
321
+ export interface HyperlinkStatistics {
322
+ total: number;
323
+ byType: Record<HyperlinkType, number>;
324
+ byLocation: {
325
+ document: number;
326
+ headers: number;
327
+ footers: number;
328
+ };
329
+ valid: number;
330
+ invalid: number;
331
+ withContentId: number;
332
+ withoutContentId: number;
333
+ duplicates: number;
334
+ orphaned: number;
335
+ }
336
+
337
+ // Batch processing types from Feature implementation
338
+ export interface BatchProcessingOptions extends HyperlinkProcessingOptions {
339
+ maxConcurrency?: number;
340
+ continueOnError?: boolean;
341
+ progressCallback?: (progress: BatchProgress) => void;
342
+ abortSignal?: AbortSignal;
343
+ }
344
+
345
+ export interface BatchProgress {
346
+ completed: number;
347
+ total: number;
348
+ percentage: number;
349
+ currentFile?: string;
350
+ status: 'pending' | 'processing' | 'completed' | 'failed';
351
+ }
352
+
353
+ export interface BatchProcessingResult {
354
+ results: Map<string, HyperlinkProcessingResult>;
355
+ summary: {
356
+ totalFiles: number;
357
+ successfulFiles: number;
358
+ failedFiles: number;
359
+ totalHyperlinksProcessed: number;
360
+ totalHyperlinksModified: number;
361
+ processingTimeMs: number;
362
+ errors: Array<{ file: string; error: string }>;
363
+ };
364
+ }
365
+
366
+ export interface FileProcessingStatus {
367
+ filePath: string;
368
+ status: 'pending' | 'processing' | 'completed' | 'failed';
369
+ result?: HyperlinkProcessingResult;
370
+ error?: string;
371
+ startTime?: number;
372
+ endTime?: number;
373
+ }
374
+
375
+ // PowerAutomate specific types from Feature implementation
376
+ export interface PowerAutomateRequest {
377
+ Lookup_ID: string[];
378
+ }
379
+
380
+ export interface PowerAutomateResponse {
381
+ StatusCode: string;
382
+ Headers: {
383
+ 'Content-Type': string;
384
+ };
385
+ Body: {
386
+ Results: Array<{
387
+ Document_ID: string;
388
+ Content_ID: string;
389
+ Title: string;
390
+ Status: string;
391
+ }>;
392
+ Version?: string;
393
+ Changes?: string;
394
+ };
395
+ }
396
+
397
+ // IPC channel types for Electron integration
398
+ export interface IpcChannels {
399
+ 'hyperlink:process-document': {
400
+ request: {
401
+ filePath: string;
402
+ options: HyperlinkProcessingOptions;
403
+ };
404
+ response: HyperlinkProcessingResult;
405
+ };
406
+ 'hyperlink:batch-process': {
407
+ request: {
408
+ filePaths: string[];
409
+ options: BatchProcessingOptions;
410
+ };
411
+ response: BatchProcessingResult;
412
+ };
413
+ 'hyperlink:validate-api': {
414
+ request: {
415
+ apiUrl: string;
416
+ };
417
+ response: {
418
+ isValid: boolean;
419
+ message: string;
420
+ responseTime?: number;
421
+ };
422
+ };
423
+ 'hyperlink:cancel-operation': {
424
+ request: {
425
+ operationId: string;
426
+ };
427
+ response: {
428
+ success: boolean;
429
+ message?: string;
430
+ };
431
+ };
432
+ 'hyperlink:get-progress': {
433
+ request: {
434
+ operationId: string;
435
+ };
436
+ response: BatchProgress;
437
+ };
438
+ }
439
+
440
+ // Hyperlink export/import
441
+ export interface HyperlinkExport {
442
+ version: string;
443
+ exportDate: Date;
444
+ documentPath: string;
445
+ hyperlinks: ExportedHyperlink[];
446
+ statistics: HyperlinkStatistics;
447
+ }
448
+
449
+ export interface ExportedHyperlink {
450
+ id: string;
451
+ url: string;
452
+ displayText: string;
453
+ type: HyperlinkType;
454
+ location: string;
455
+ context?: string;
456
+ metadata?: Record<string, unknown>;
457
+ }
458
+
459
+ // Utility function type signatures
460
+ export interface HyperlinkUtilities {
461
+ isValidUrl(url: string): boolean;
462
+ extractDomain(url: string): string | null;
463
+ normalizeUrl(url: string): string;
464
+ isTheSourceUrl(url: string): boolean;
465
+ needsContentId(url: string): boolean;
466
+ extractContentId(url: string): string | null;
467
+ extractDocumentId(url: string): string | null;
468
+ buildTheSourceUrl(documentId: string, contentId?: string): string;
469
+ compareUrls(url1: string, url2: string): boolean;
470
+ generateRelationshipId(): string;
471
+ }