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,340 @@
1
+ /**
2
+ * Electron API Type Definitions
3
+ *
4
+ * This file contains type definitions for the Electron API exposed via contextBridge.
5
+ * These types are shared between the preload script and the renderer process.
6
+ *
7
+ * NOTE: The actual ElectronAPI type is derived from the preload.ts implementation.
8
+ * This file re-exports and augments those types for use in the renderer.
9
+ */
10
+
11
+ import type {
12
+ HyperlinkProcessingOptions,
13
+ BatchProcessingOptions,
14
+ BatchProgress,
15
+ } from './hyperlink';
16
+
17
+ import type {
18
+ BackupCreateResponse,
19
+ BackupRestoreResponse,
20
+ BackupListResponse,
21
+ BackupDeleteResponse,
22
+ BackupCleanupResponse,
23
+ BackupVerifyResponse,
24
+ BackupStorageInfoResponse,
25
+ BackupSetConfigResponse,
26
+ BackupConfig,
27
+ } from './backup';
28
+
29
+ import type {
30
+ SharePointConfig,
31
+ DictionarySyncStatus,
32
+ DictionarySyncResponse,
33
+ DictionaryInitResponse,
34
+ DictionaryCredentialsResponse,
35
+ SyncProgressUpdate,
36
+ } from './dictionary';
37
+
38
+ /**
39
+ * Update event info types
40
+ */
41
+ export interface UpdateAvailableInfo {
42
+ version: string;
43
+ releaseDate: string;
44
+ releaseNotes: string;
45
+ }
46
+
47
+ export interface UpdateNotAvailableInfo {
48
+ version: string;
49
+ }
50
+
51
+ export interface UpdateErrorInfo {
52
+ message: string;
53
+ }
54
+
55
+ export interface UpdateDownloadProgress {
56
+ bytesPerSecond: number;
57
+ percent: number;
58
+ transferred: number;
59
+ total: number;
60
+ }
61
+
62
+ export interface UpdateDownloadedInfo {
63
+ version: string;
64
+ releaseNotes: string;
65
+ fallbackUsed?: boolean;
66
+ }
67
+
68
+ export interface UpdateStatusInfo {
69
+ message: string;
70
+ }
71
+
72
+ /**
73
+ * SharePoint update source configuration
74
+ */
75
+ export interface UpdateProviderConfig {
76
+ type: 'github' | 'sharepoint';
77
+ sharePointUrl?: string;
78
+ }
79
+
80
+ export interface SharePointConnectionTestResult {
81
+ success: boolean;
82
+ message: string;
83
+ authenticated?: boolean;
84
+ }
85
+
86
+ export interface SharePointLoginResult {
87
+ success: boolean;
88
+ error?: string;
89
+ }
90
+
91
+ export interface UpdateManualDownloadInfo {
92
+ message: string;
93
+ downloadUrl: string;
94
+ }
95
+
96
+ export interface CertificateCheckInfo {
97
+ success: boolean;
98
+ error?: string;
99
+ timestamp: string;
100
+ }
101
+
102
+ export interface CertificateConfiguredInfo {
103
+ message: string;
104
+ certPath?: string;
105
+ }
106
+
107
+ /**
108
+ * Display/Monitor information for multi-monitor support
109
+ */
110
+ export interface DisplayInfo {
111
+ id: number;
112
+ label: string;
113
+ bounds: { x: number; y: number; width: number; height: number };
114
+ workArea: { x: number; y: number; width: number; height: number };
115
+ scaleFactor: number;
116
+ isPrimary: boolean;
117
+ }
118
+
119
+ /**
120
+ * Display API interface for monitor selection and comparison
121
+ */
122
+ export interface DisplayAPI {
123
+ getAllDisplays: () => Promise<DisplayInfo[]>;
124
+ identifyMonitors: () => Promise<{ success: boolean }>;
125
+ openComparison: (
126
+ backupPath: string,
127
+ processedPath: string,
128
+ monitorIndex: number
129
+ ) => Promise<{ success: boolean; error?: string }>;
130
+ }
131
+
132
+ /**
133
+ * Backup API interface
134
+ */
135
+ export interface BackupAPI {
136
+ create: (documentPath: string) => Promise<BackupCreateResponse>;
137
+ restore: (backupPath: string, targetPath: string) => Promise<BackupRestoreResponse>;
138
+ list: (documentPath: string) => Promise<BackupListResponse>;
139
+ delete: (backupPath: string) => Promise<BackupDeleteResponse>;
140
+ cleanup: (documentPath: string) => Promise<BackupCleanupResponse>;
141
+ cleanupAll: () => Promise<BackupCleanupResponse>;
142
+ verify: (backupPath: string) => Promise<BackupVerifyResponse>;
143
+ getStorageInfo: () => Promise<BackupStorageInfoResponse>;
144
+ setConfig: (config: Partial<BackupConfig>) => Promise<BackupSetConfigResponse>;
145
+ }
146
+
147
+ /**
148
+ * Hyperlink lookup result type (from local dictionary)
149
+ */
150
+ export interface HyperlinkLookupResult {
151
+ Document_ID: string;
152
+ Content_ID: string;
153
+ Title: string;
154
+ Status: string;
155
+ }
156
+
157
+ /**
158
+ * Dictionary API interface
159
+ */
160
+ export interface DictionaryAPI {
161
+ initialize: () => Promise<DictionaryInitResponse>;
162
+ configureSync: (config: SharePointConfig) => Promise<{ success: boolean; error?: string }>;
163
+ setCredentials: (clientSecret: string) => Promise<DictionaryCredentialsResponse>;
164
+ sync: () => Promise<DictionarySyncResponse>;
165
+ startScheduler: (intervalHours: number) => Promise<{ success: boolean; error?: string }>;
166
+ stopScheduler: () => Promise<{ success: boolean; error?: string }>;
167
+ lookup: (lookupId: string) => Promise<{ success: boolean; result?: HyperlinkLookupResult; error?: string }>;
168
+ batchLookup: (lookupIds: string[]) => Promise<{ success: boolean; results?: HyperlinkLookupResult[]; error?: string }>;
169
+ getStatus: () => Promise<{ success: boolean; status?: DictionarySyncStatus; error?: string }>;
170
+ // Interactive SharePoint retrieval (using browser login)
171
+ retrieveFromSharePoint: (fileUrl: string) => Promise<{ success: boolean; entriesImported?: number; error?: string }>;
172
+ sharePointLogin: () => Promise<{ success: boolean; error?: string }>;
173
+ isSharePointAuthenticated: () => Promise<{ authenticated: boolean }>;
174
+ onSyncProgress: (callback: (progress: SyncProgressUpdate) => void) => () => void;
175
+ onSyncComplete: (callback: (result: DictionarySyncResponse) => void) => () => void;
176
+ }
177
+
178
+ /**
179
+ * Main Electron API interface
180
+ * This type defines all methods exposed to the renderer via contextBridge.
181
+ */
182
+ export interface ElectronAPI {
183
+ // Window controls
184
+ minimizeWindow: () => Promise<void>;
185
+ maximizeWindow: () => Promise<void>;
186
+ closeWindow: () => Promise<void>;
187
+ isMaximized: () => Promise<boolean>;
188
+ isFullscreen: () => Promise<boolean>;
189
+ getAppVersion: () => Promise<string>;
190
+ getPlatform: () => Promise<NodeJS.Platform>;
191
+ openDevTools: () => Promise<void>;
192
+
193
+ // Always on top (pin window)
194
+ setAlwaysOnTop: (flag: boolean) => Promise<boolean>;
195
+ isAlwaysOnTop: () => Promise<boolean>;
196
+ onAlwaysOnTopChanged: (callback: (isOnTop: boolean) => void) => () => void;
197
+
198
+ // File handling
199
+ selectDocuments: () => Promise<string[] | null>;
200
+ processDocument: (path: string) => Promise<unknown>;
201
+ showInFolder: (path: string) => Promise<void>;
202
+ openDocument: (path: string) => Promise<void>;
203
+ getFileStats: (filePath: string) => Promise<unknown>;
204
+ restoreFromBackup: (
205
+ backupPath: string,
206
+ targetPath: string
207
+ ) => Promise<{ success: boolean; error?: string }>;
208
+ getPathsForFiles: (files: File[]) => string[];
209
+
210
+ // Export and Reporting
211
+ selectFolder: () => Promise<string | null>;
212
+ copyFilesToFolder: (
213
+ filePaths: string[],
214
+ destinationFolder: string
215
+ ) => Promise<{ copied: number; skipped: number }>;
216
+ getDownloadsPath: () => Promise<string>;
217
+ createFolder: (folderPath: string) => Promise<boolean>;
218
+ copyFileToFolder: (sourcePath: string, destFolder: string) => Promise<boolean>;
219
+ createReportZip: (folderPath: string, zipName: string) => Promise<string>;
220
+ openOutlookEmail: (subject: string, attachmentPath: string) => Promise<{
221
+ success: boolean;
222
+ method: 'outlook' | 'mailto';
223
+ }>;
224
+
225
+ // Document text extraction (for comparison views)
226
+ extractDocumentText: (filePath: string) => Promise<{
227
+ success: boolean;
228
+ textContent?: string[];
229
+ error?: string;
230
+ }>;
231
+
232
+ // Read file as buffer (for snapshot capture)
233
+ readFileAsBuffer: (filePath: string) => Promise<ArrayBuffer>;
234
+
235
+ // Hyperlink processing
236
+ selectFiles: () => Promise<string[] | null>;
237
+ processHyperlinkDocument: (
238
+ filePath: string,
239
+ options: HyperlinkProcessingOptions
240
+ ) => Promise<unknown>;
241
+ batchProcessDocuments: (
242
+ filePaths: string[],
243
+ options: BatchProcessingOptions
244
+ ) => Promise<unknown>;
245
+ validateApi: (apiUrl: string) => Promise<unknown>;
246
+ callPowerAutomateApi: (
247
+ apiUrl: string,
248
+ payload: {
249
+ Lookup_ID: string[];
250
+ Hyperlinks_Checked: number;
251
+ Total_Hyperlinks: number;
252
+ First_Name: string;
253
+ Last_Name: string;
254
+ Email: string;
255
+ },
256
+ timeout?: number
257
+ ) => Promise<{
258
+ success: boolean;
259
+ statusCode?: number;
260
+ data?: unknown;
261
+ error?: string;
262
+ rawResponse?: string;
263
+ }>;
264
+ cancelOperation: (operationId: string) => Promise<void>;
265
+ onBatchProgress: (callback: (progress: BatchProgress) => void) => () => void;
266
+
267
+ // Window events
268
+ onWindowMaximized: (callback: () => void) => () => void;
269
+ onWindowUnmaximized: (callback: () => void) => () => void;
270
+ onWindowFullscreen: (callback: () => void) => () => void;
271
+ onWindowUnfullscreen: (callback: () => void) => () => void;
272
+
273
+ // Export/Import
274
+ exportSettings: () => Promise<string | null>;
275
+ importSettings: () => Promise<unknown>;
276
+ saveExportData: (filePath: string, data: unknown) => Promise<boolean>;
277
+
278
+ // Backup operations
279
+ backup: BackupAPI;
280
+
281
+ // Dictionary operations (Local SharePoint Dictionary)
282
+ dictionary: DictionaryAPI;
283
+
284
+ // Display/Monitor operations
285
+ display: DisplayAPI;
286
+
287
+ // Auto-updater
288
+ checkForUpdates: () => Promise<void>;
289
+ downloadUpdate: () => Promise<void>;
290
+ installUpdate: () => Promise<void>;
291
+ getCurrentVersion: () => Promise<string>;
292
+
293
+ // SharePoint update source
294
+ setUpdateProvider: (config: UpdateProviderConfig) => Promise<{ success: boolean; error?: string }>;
295
+ testSharePointConnection: (url: string) => Promise<SharePointConnectionTestResult>;
296
+ sharePointLogin: () => Promise<SharePointLoginResult>;
297
+ sharePointLogout: () => Promise<void>;
298
+
299
+ // Update event listeners
300
+ onUpdateChecking: (callback: () => void) => () => void;
301
+ onUpdateAvailable: (callback: (info: UpdateAvailableInfo) => void) => () => void;
302
+ onUpdateNotAvailable: (callback: (info: UpdateNotAvailableInfo) => void) => () => void;
303
+ onUpdateError: (callback: (error: UpdateErrorInfo) => void) => () => void;
304
+ onUpdateDownloadProgress: (callback: (progress: UpdateDownloadProgress) => void) => () => void;
305
+ onUpdateDownloaded: (callback: (info: UpdateDownloadedInfo) => void) => () => void;
306
+ onUpdateFallbackMode: (callback: (data: UpdateStatusInfo) => void) => () => void;
307
+ onUpdateExtracting: (callback: (data: UpdateStatusInfo) => void) => () => void;
308
+ onUpdateStatus: (callback: (data: UpdateStatusInfo) => void) => () => void;
309
+
310
+ // Manual download
311
+ openUpdateInBrowser: () => Promise<void>;
312
+
313
+ // Certificate Management
314
+ checkZscalerStatus: () => Promise<unknown>;
315
+ getCertificatePath: () => Promise<string | null>;
316
+ getInstalledCertificates: () => Promise<string[]>;
317
+ importCertificate: () => Promise<unknown>;
318
+ autoDetectCertificates: () => Promise<unknown>;
319
+ removeCertificate: (certPath: string) => Promise<boolean>;
320
+ testGitHubConnection: () => Promise<unknown>;
321
+ openExternal: (url: string) => Promise<void>;
322
+
323
+ // Event system helpers
324
+ on: (channel: string, callback: (...args: unknown[]) => void) => () => void;
325
+ removeListener: (channel: string, callback: (...args: unknown[]) => void) => void;
326
+
327
+ // Debug events
328
+ onDebugNetworkRequest: (callback: (data: unknown) => void) => () => void;
329
+ onDebugCertError: (callback: (data: unknown) => void) => () => void;
330
+ onDebugNetworkError: (callback: (data: unknown) => void) => () => void;
331
+ onDebugTLSError: (callback: (data: unknown) => void) => () => void;
332
+ onUpdateManualDownload: (callback: (data: UpdateManualDownloadInfo) => void) => () => void;
333
+
334
+ // Certificate check events (background)
335
+ onCertificateCheckComplete: (callback: (data: CertificateCheckInfo) => void) => () => void;
336
+ onCertificateConfigured: (callback: (data: CertificateConfiguredInfo) => void) => () => void;
337
+ }
338
+
339
+ // NOTE: Window.electronAPI declaration is in src/global.d.ts
340
+ // Do not duplicate it here to avoid TypeScript errors
@@ -0,0 +1,155 @@
1
+ export interface DailyStats {
2
+ date: string; // ISO date string (YYYY-MM-DD)
3
+ documentsProcessed: number;
4
+ hyperlinksChecked: number;
5
+ feedbackImported: number;
6
+ timeSaved: number; // in minutes
7
+ }
8
+
9
+ export interface WeeklyStats {
10
+ weekStart: string; // ISO date string for Monday of the week
11
+ weekEnd: string; // ISO date string for Sunday of the week
12
+ documentsProcessed: number;
13
+ hyperlinksChecked: number;
14
+ feedbackImported: number;
15
+ timeSaved: number;
16
+ dailyBreakdown: DailyStats[];
17
+ }
18
+
19
+ export interface MonthlyStats {
20
+ month: string; // Format: YYYY-MM
21
+ documentsProcessed: number;
22
+ hyperlinksChecked: number;
23
+ feedbackImported: number;
24
+ timeSaved: number;
25
+ weeklyBreakdown: WeeklyStats[];
26
+ }
27
+
28
+ export interface GlobalStats {
29
+ // Overall totals (never reset unless explicitly requested)
30
+ allTime: {
31
+ documentsProcessed: number;
32
+ hyperlinksChecked: number;
33
+ feedbackImported: number;
34
+ timeSaved: number;
35
+ firstActivityDate?: string; // ISO date string
36
+ lastActivityDate?: string; // ISO date string
37
+ };
38
+
39
+ // Current period stats
40
+ today: DailyStats;
41
+ currentWeek: WeeklyStats;
42
+ currentMonth: MonthlyStats;
43
+
44
+ // Historical data (last 30 days)
45
+ dailyHistory: DailyStats[];
46
+
47
+ // Historical data (last 12 weeks)
48
+ weeklyHistory: WeeklyStats[];
49
+
50
+ // Historical data (last 12 months)
51
+ monthlyHistory: MonthlyStats[];
52
+
53
+ // Metadata
54
+ lastUpdated: string; // ISO timestamp
55
+ version: number; // Schema version for future migrations
56
+ }
57
+
58
+ export interface StatsUpdate {
59
+ documentsProcessed?: number;
60
+ hyperlinksChecked?: number;
61
+ feedbackImported?: number;
62
+ timeSaved?: number;
63
+ }
64
+
65
+ export interface GlobalStatsContextType {
66
+ stats: GlobalStats;
67
+
68
+ // Update methods
69
+ updateStats: (update: StatsUpdate) => Promise<void>;
70
+
71
+ // Retrieval methods
72
+ getTodayStats: () => DailyStats;
73
+ getWeekStats: () => WeeklyStats;
74
+ getMonthStats: () => MonthlyStats;
75
+ getDailyHistory: (days?: number) => DailyStats[];
76
+ getWeeklyHistory: (weeks?: number) => WeeklyStats[];
77
+ getMonthlyHistory: (months?: number) => MonthlyStats[];
78
+
79
+ // Comparison methods
80
+ getTodayChange: () => StatsUpdate; // Change from yesterday
81
+ getWeekChange: () => StatsUpdate; // Change from last week
82
+ getMonthChange: () => StatsUpdate; // Change from last month
83
+
84
+ // Reset method
85
+ resetAllStats: () => Promise<void>;
86
+
87
+ // Loading state
88
+ isLoading: boolean;
89
+ }
90
+
91
+ export const createEmptyDailyStats = (date: string): DailyStats => ({
92
+ date,
93
+ documentsProcessed: 0,
94
+ hyperlinksChecked: 0,
95
+ feedbackImported: 0,
96
+ timeSaved: 0,
97
+ });
98
+
99
+ export const createEmptyWeeklyStats = (weekStart: string, weekEnd: string): WeeklyStats => ({
100
+ weekStart,
101
+ weekEnd,
102
+ documentsProcessed: 0,
103
+ hyperlinksChecked: 0,
104
+ feedbackImported: 0,
105
+ timeSaved: 0,
106
+ dailyBreakdown: [],
107
+ });
108
+
109
+ export const createEmptyMonthlyStats = (month: string): MonthlyStats => ({
110
+ month,
111
+ documentsProcessed: 0,
112
+ hyperlinksChecked: 0,
113
+ feedbackImported: 0,
114
+ timeSaved: 0,
115
+ weeklyBreakdown: [],
116
+ });
117
+
118
+ export const createDefaultGlobalStats = (): GlobalStats => {
119
+ const today = new Date().toISOString().split('T')[0];
120
+ const monday = getMonday(new Date()).toISOString().split('T')[0];
121
+ const sunday = getSunday(new Date()).toISOString().split('T')[0];
122
+ const month = today.substring(0, 7); // YYYY-MM
123
+
124
+ return {
125
+ allTime: {
126
+ documentsProcessed: 0,
127
+ hyperlinksChecked: 0,
128
+ feedbackImported: 0,
129
+ timeSaved: 0,
130
+ },
131
+ today: createEmptyDailyStats(today),
132
+ currentWeek: createEmptyWeeklyStats(monday, sunday),
133
+ currentMonth: createEmptyMonthlyStats(month),
134
+ dailyHistory: [],
135
+ weeklyHistory: [],
136
+ monthlyHistory: [],
137
+ lastUpdated: new Date().toISOString(),
138
+ version: 1,
139
+ };
140
+ };
141
+
142
+ // Helper functions
143
+ function getMonday(date: Date): Date {
144
+ const d = new Date(date);
145
+ const day = d.getDay();
146
+ const diff = d.getDate() - day + (day === 0 ? -6 : 1); // adjust when day is sunday
147
+ return new Date(d.setDate(diff));
148
+ }
149
+
150
+ function getSunday(date: Date): Date {
151
+ const monday = getMonday(date);
152
+ const sunday = new Date(monday);
153
+ sunday.setDate(monday.getDate() + 6);
154
+ return sunday;
155
+ }