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,142 @@
1
+ /**
2
+ * Type augmentations for DocXMLater library
3
+ *
4
+ * This file declares optional methods that exist on the DocXMLater Document class
5
+ * but are not included in the library's type definitions. These augmentations
6
+ * provide type safety for feature detection patterns.
7
+ *
8
+ * @module docxmlater-augments
9
+ */
10
+
11
+ import type { Document } from 'docxmlater';
12
+ import type { SessionStyle } from './session';
13
+ import type { TableShadingSettings } from '@/services/document/processors/TableProcessor';
14
+
15
+ /**
16
+ * Configuration for the applyStyles method
17
+ */
18
+ export interface ApplyStylesConfig {
19
+ heading1?: StyleConfig;
20
+ heading2?: StyleConfig;
21
+ heading3?: StyleConfig;
22
+ normal?: StyleConfig;
23
+ listParagraph?: StyleConfig;
24
+ heading2Tables?: Heading2TableConfig;
25
+ }
26
+
27
+ /**
28
+ * Style configuration for individual style types
29
+ */
30
+ export interface StyleConfig {
31
+ fontFamily?: string;
32
+ fontSize?: number;
33
+ bold?: boolean;
34
+ italic?: boolean;
35
+ underline?: boolean;
36
+ color?: string;
37
+ alignment?: 'left' | 'center' | 'right' | 'justify';
38
+ spaceBefore?: number;
39
+ spaceAfter?: number;
40
+ lineSpacing?: number;
41
+ preserveBold?: boolean;
42
+ preserveItalic?: boolean;
43
+ preserveUnderline?: boolean;
44
+ }
45
+
46
+ /**
47
+ * Configuration for Heading 2 table styling
48
+ */
49
+ export interface Heading2TableConfig {
50
+ enabled: boolean;
51
+ shadingColor?: string;
52
+ fontFamily?: string;
53
+ fontSize?: number;
54
+ }
55
+
56
+ /**
57
+ * Result from applyStyles operation
58
+ */
59
+ export interface StyleResults {
60
+ heading1: number;
61
+ heading2: number;
62
+ heading3: number;
63
+ normal: number;
64
+ listParagraph: number;
65
+ }
66
+
67
+ /**
68
+ * Change entry from tracked changes
69
+ */
70
+ export interface ChangeEntry {
71
+ id: string;
72
+ type: 'insertion' | 'deletion' | 'formatting';
73
+ author: string;
74
+ date?: string;
75
+ text?: string;
76
+ location?: string;
77
+ }
78
+
79
+ // Augment the docxmlater module to include optional methods
80
+ declare module 'docxmlater' {
81
+ interface Document {
82
+ /**
83
+ * Apply custom styles to paragraphs based on configuration.
84
+ * This method may not be available in all versions of DocXMLater.
85
+ *
86
+ * @param config - Style configuration object
87
+ * @returns Results indicating how many paragraphs were styled
88
+ */
89
+ applyStyles?(config: ApplyStylesConfig): StyleResults;
90
+
91
+ /**
92
+ * Flush any pending tracked changes to the document.
93
+ * This method may not be available in all versions of DocXMLater.
94
+ *
95
+ * @returns Array of change entries that were flushed, or null if none
96
+ */
97
+ flushPendingChanges?(): ChangeEntry[] | null;
98
+
99
+ /**
100
+ * Accept all tracked revisions in the document.
101
+ * This method may not be available in all versions of DocXMLater.
102
+ */
103
+ acceptAllRevisions?(): Promise<void>;
104
+ }
105
+ }
106
+
107
+ /**
108
+ * Type guard to check if a Document has the applyStyles method
109
+ *
110
+ * @param doc - The document to check
111
+ * @returns true if the document has the applyStyles method
112
+ *
113
+ * @example
114
+ * ```typescript
115
+ * if (hasApplyStyles(doc)) {
116
+ * const result = doc.applyStyles(config);
117
+ * }
118
+ * ```
119
+ */
120
+ export function hasApplyStyles(doc: Document): doc is Document & { applyStyles: NonNullable<Document['applyStyles']> } {
121
+ return typeof (doc as Document).applyStyles === 'function';
122
+ }
123
+
124
+ /**
125
+ * Type guard to check if a Document has the flushPendingChanges method
126
+ *
127
+ * @param doc - The document to check
128
+ * @returns true if the document has the flushPendingChanges method
129
+ */
130
+ export function hasFlushPendingChanges(doc: Document): doc is Document & { flushPendingChanges: NonNullable<Document['flushPendingChanges']> } {
131
+ return typeof (doc as Document).flushPendingChanges === 'function';
132
+ }
133
+
134
+ /**
135
+ * Type guard to check if a Document has the acceptAllRevisions method
136
+ *
137
+ * @param doc - The document to check
138
+ * @returns true if the document has the acceptAllRevisions method
139
+ */
140
+ export function hasAcceptAllRevisions(doc: Document): doc is Document & { acceptAllRevisions: NonNullable<Document['acceptAllRevisions']> } {
141
+ return typeof (doc as Document).acceptAllRevisions === 'function';
142
+ }
@@ -0,0 +1,280 @@
1
+ /**
2
+ * Editor Types - Types for document comparison, tracked changes display,
3
+ * and the document editor functionality
4
+ */
5
+
6
+ /**
7
+ * Document snapshot captured before processing for comparison
8
+ * Stores both the raw buffer and extracted text for diffing
9
+ */
10
+ export interface DocumentSnapshot {
11
+ /** Unique document identifier */
12
+ documentId: string;
13
+ /** Session the document belongs to */
14
+ sessionId: string;
15
+ /** When the snapshot was captured */
16
+ timestamp: Date;
17
+ /** Original document buffer for full restoration */
18
+ buffer: ArrayBuffer;
19
+ /** Extracted paragraph text for efficient diffing */
20
+ textContent: string[];
21
+ /** Hyperlink state for comparison */
22
+ hyperlinkSnapshot: HyperlinkSnapshot[];
23
+ }
24
+
25
+ /**
26
+ * Hyperlink state at time of snapshot
27
+ */
28
+ export interface HyperlinkSnapshot {
29
+ paragraphIndex: number;
30
+ hyperlinkIndex: number;
31
+ url: string;
32
+ text: string;
33
+ }
34
+
35
+ /**
36
+ * Serialized snapshot for IndexedDB storage
37
+ * Dates converted to ISO strings
38
+ */
39
+ export interface SerializedDocumentSnapshot {
40
+ documentId: string;
41
+ sessionId: string;
42
+ timestamp: string;
43
+ buffer: ArrayBuffer;
44
+ textContent: string[];
45
+ hyperlinkSnapshot: HyperlinkSnapshot[];
46
+ }
47
+
48
+ /**
49
+ * Text selection state in the editor
50
+ */
51
+ export interface EditorSelection {
52
+ /** Paragraph containing the selection start */
53
+ paragraphIndex: number;
54
+ /** First selected run index */
55
+ runStartIndex: number;
56
+ /** Last selected run index */
57
+ runEndIndex: number;
58
+ /** Character offset within first run */
59
+ characterStart: number;
60
+ /** Character offset within last run */
61
+ characterEnd: number;
62
+ }
63
+
64
+ /**
65
+ * Table cell selection state
66
+ */
67
+ export interface CellSelection {
68
+ /** Starting row (0-based) */
69
+ startRow: number;
70
+ /** Starting column (0-based) */
71
+ startCol: number;
72
+ /** Ending row (0-based, inclusive) */
73
+ endRow: number;
74
+ /** Ending column (0-based, inclusive) */
75
+ endCol: number;
76
+ }
77
+
78
+ /**
79
+ * Undo/redo action for editor history
80
+ */
81
+ export interface EditorAction {
82
+ /** Type of action */
83
+ type: 'text' | 'formatting' | 'structure' | 'table';
84
+ /** When action was performed */
85
+ timestamp: Date;
86
+ /** Function to undo this action */
87
+ undo: () => void;
88
+ /** Function to redo this action */
89
+ redo: () => void;
90
+ /** Human-readable description */
91
+ description: string;
92
+ }
93
+
94
+ /**
95
+ * Quick action identifiers for editor toolbar
96
+ */
97
+ export type QuickActionId =
98
+ // Shading
99
+ | 'apply-h2-shading'
100
+ | 'apply-other-shading'
101
+ // Text formatting
102
+ | 'bold'
103
+ | 'italic'
104
+ | 'underline'
105
+ | 'clear-formatting'
106
+ // Hyperlinks
107
+ | 'insert-hyperlink'
108
+ | 'remove-hyperlink'
109
+ // Styles
110
+ | 'style-heading1'
111
+ | 'style-heading2'
112
+ | 'style-normal'
113
+ | 'style-list-paragraph'
114
+ // Structure
115
+ | 'page-break'
116
+ | 'find-replace'
117
+ // Tracked changes
118
+ | 'accept-all-changes'
119
+ | 'reject-all-changes'
120
+ // Table operations
121
+ | 'table-add-row-above'
122
+ | 'table-add-row-below'
123
+ | 'table-add-col-left'
124
+ | 'table-add-col-right'
125
+ | 'table-delete-row'
126
+ | 'table-delete-col'
127
+ | 'table-merge-cells'
128
+ | 'table-split-cell'
129
+ | 'table-cell-shading'
130
+ | 'table-cell-borders'
131
+ | 'table-vertical-align';
132
+
133
+ /**
134
+ * Quick action configuration
135
+ */
136
+ export interface QuickAction {
137
+ id: QuickActionId;
138
+ label: string;
139
+ icon: string;
140
+ shortcut?: string;
141
+ category: 'formatting' | 'style' | 'structure' | 'table' | 'revision';
142
+ requiresSelection?: boolean;
143
+ requiresTableSelection?: boolean;
144
+ }
145
+
146
+ /**
147
+ * Diff segment for word-level comparison
148
+ */
149
+ export interface DiffSegment {
150
+ /** Text content of this segment */
151
+ text: string;
152
+ /** Type of change */
153
+ type: 'unchanged' | 'added' | 'removed' | 'modified';
154
+ }
155
+
156
+ /**
157
+ * Paragraph diff result
158
+ */
159
+ export interface ParagraphDiff {
160
+ /** Paragraph index */
161
+ index: number;
162
+ /** Original text (before processing) */
163
+ original: string;
164
+ /** Modified text (after processing) */
165
+ modified: string;
166
+ /** Word-level diff segments for original */
167
+ originalSegments: DiffSegment[];
168
+ /** Word-level diff segments for modified */
169
+ modifiedSegments: DiffSegment[];
170
+ /** Whether this paragraph changed */
171
+ hasChanges: boolean;
172
+ }
173
+
174
+ /**
175
+ * Complete document diff result
176
+ */
177
+ export interface DocumentDiff {
178
+ /** Original document text (paragraph array) */
179
+ original: string[];
180
+ /** Modified document text (paragraph array) */
181
+ modified: string[];
182
+ /** Per-paragraph diff results */
183
+ paragraphDiffs: ParagraphDiff[];
184
+ /** Summary statistics */
185
+ stats: {
186
+ totalParagraphs: number;
187
+ changedParagraphs: number;
188
+ addedParagraphs: number;
189
+ removedParagraphs: number;
190
+ wordsAdded: number;
191
+ wordsRemoved: number;
192
+ wordsModified: number;
193
+ };
194
+ }
195
+
196
+ /**
197
+ * Editor state for the document editor modal
198
+ */
199
+ export interface EditorState {
200
+ /** Whether there are unsaved changes */
201
+ isDirty: boolean;
202
+ /** Current text selection */
203
+ selection: EditorSelection | null;
204
+ /** Current table cell selection */
205
+ tableSelection: CellSelection | null;
206
+ /** Currently selected element type */
207
+ selectedElementType: 'paragraph' | 'table' | 'image' | null;
208
+ /** Selected paragraph index */
209
+ selectedParagraphIndex: number | null;
210
+ /** Selected table index */
211
+ selectedTableIndex: number | null;
212
+ /** Undo stack */
213
+ undoStack: EditorAction[];
214
+ /** Redo stack */
215
+ redoStack: EditorAction[];
216
+ /** Active quick action being applied */
217
+ activeQuickAction: QuickActionId | null;
218
+ /** Whether editor is in loading state */
219
+ isLoading: boolean;
220
+ /** Error message if any */
221
+ error: string | null;
222
+ }
223
+
224
+ /**
225
+ * View mode for tracked changes panel
226
+ */
227
+ export type TrackedChangesViewMode = 'inline' | 'list' | 'comparison';
228
+
229
+ /**
230
+ * Props for tracked changes panel
231
+ */
232
+ export interface TrackedChangesPanelProps {
233
+ sessionId: string;
234
+ documentId: string;
235
+ onOpenEditor: () => void;
236
+ }
237
+
238
+ /**
239
+ * Inline change display configuration
240
+ */
241
+ export interface InlineChangeStyle {
242
+ insertion: {
243
+ background: string;
244
+ textColor: string;
245
+ };
246
+ deletion: {
247
+ background: string;
248
+ textColor: string;
249
+ textDecoration: string;
250
+ };
251
+ formatting: {
252
+ borderStyle: string;
253
+ borderColor: string;
254
+ };
255
+ hyperlink: {
256
+ iconColor: string;
257
+ };
258
+ }
259
+
260
+ /**
261
+ * Default inline change styles
262
+ */
263
+ export const DEFAULT_INLINE_CHANGE_STYLES: InlineChangeStyle = {
264
+ insertion: {
265
+ background: 'bg-green-100 dark:bg-green-900/30',
266
+ textColor: 'text-green-700 dark:text-green-300',
267
+ },
268
+ deletion: {
269
+ background: 'bg-red-100 dark:bg-red-900/30',
270
+ textColor: 'text-red-700 dark:text-red-300',
271
+ textDecoration: 'line-through',
272
+ },
273
+ formatting: {
274
+ borderStyle: 'border-b-2 border-dashed',
275
+ borderColor: 'border-blue-500',
276
+ },
277
+ hyperlink: {
278
+ iconColor: 'text-cyan-500',
279
+ },
280
+ };