@wonderwhy-er/desktop-commander 0.2.37 → 0.2.39

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 (383) hide show
  1. package/README.md +290 -100
  2. package/dist/command-manager.js +6 -3
  3. package/dist/config-field-definitions.d.ts +41 -0
  4. package/dist/config-field-definitions.js +37 -0
  5. package/dist/config-manager.d.ts +2 -0
  6. package/dist/config-manager.js +22 -2
  7. package/dist/handlers/filesystem-handlers.d.ts +5 -0
  8. package/dist/handlers/filesystem-handlers.js +19 -12
  9. package/dist/remote-device/desktop-commander-integration.js +1 -1
  10. package/dist/remote-device/remote-channel.js +1 -1
  11. package/dist/search-manager.js +31 -38
  12. package/dist/server.js +11 -4
  13. package/dist/terminal-manager.js +4 -2
  14. package/dist/tools/config.d.ts +71 -0
  15. package/dist/tools/config.js +117 -2
  16. package/dist/tools/edit.js +34 -1
  17. package/dist/tools/filesystem.js +91 -3
  18. package/dist/tools/improved-process-tools.js +2 -1
  19. package/dist/tools/schemas.d.ts +3 -0
  20. package/dist/tools/schemas.js +1 -0
  21. package/dist/types.d.ts +0 -1
  22. package/dist/ui/config-editor/app.d.ts +43 -0
  23. package/dist/ui/config-editor/app.js +840 -0
  24. package/dist/ui/config-editor/array-modal.d.ts +19 -0
  25. package/dist/ui/config-editor/array-modal.js +185 -0
  26. package/dist/ui/config-editor/config-editor-runtime.js +150 -0
  27. package/dist/ui/config-editor/index.html +13 -0
  28. package/dist/ui/config-editor/main.js +2 -0
  29. package/dist/ui/config-editor/src/App.d.ts +43 -0
  30. package/dist/ui/config-editor/src/App.js +840 -0
  31. package/dist/ui/config-editor/src/array-modal.d.ts +19 -0
  32. package/dist/ui/config-editor/src/array-modal.js +185 -0
  33. package/dist/ui/config-editor/src/components/layout.d.ts +4 -0
  34. package/dist/ui/config-editor/src/components/layout.js +83 -0
  35. package/dist/ui/config-editor/src/components/toolbar.d.ts +1 -0
  36. package/dist/ui/config-editor/src/components/toolbar.js +21 -0
  37. package/dist/ui/config-editor/src/config-values.d.ts +6 -0
  38. package/dist/ui/config-editor/src/config-values.js +61 -0
  39. package/dist/ui/config-editor/src/contracts.d.ts +14 -0
  40. package/dist/ui/config-editor/src/contracts.js +3 -0
  41. package/dist/ui/config-editor/src/directory-browser.d.ts +6 -0
  42. package/dist/ui/config-editor/src/directory-browser.js +71 -0
  43. package/dist/ui/config-editor/src/layout.d.ts +5 -0
  44. package/dist/ui/config-editor/src/layout.js +90 -0
  45. package/dist/ui/config-editor/src/main.js +2 -0
  46. package/dist/ui/config-editor/src/parsing.d.ts +5 -0
  47. package/dist/ui/config-editor/src/parsing.js +50 -0
  48. package/dist/ui/config-editor/src/toolbar.d.ts +1 -0
  49. package/dist/ui/config-editor/src/toolbar.js +18 -0
  50. package/dist/ui/config-editor/src/types.d.ts +17 -0
  51. package/dist/ui/config-editor/src/types.js +3 -0
  52. package/dist/ui/config-editor/src/utils/config-values.d.ts +9 -0
  53. package/dist/ui/config-editor/src/utils/config-values.js +61 -0
  54. package/dist/ui/config-editor/src/utils/directory-browser.d.ts +31 -0
  55. package/dist/ui/config-editor/src/utils/directory-browser.js +201 -0
  56. package/dist/ui/config-editor/src/utils/parsing.d.ts +8 -0
  57. package/dist/ui/config-editor/src/utils/parsing.js +50 -0
  58. package/dist/ui/config-editor/styles.css +587 -0
  59. package/dist/ui/file-preview/app.d.ts +8 -0
  60. package/dist/ui/file-preview/app.js +2020 -0
  61. package/dist/ui/file-preview/components/code-viewer.d.ts +6 -0
  62. package/dist/ui/file-preview/components/code-viewer.js +73 -0
  63. package/dist/ui/file-preview/components/highlighting.d.ts +2 -0
  64. package/dist/ui/file-preview/components/highlighting.js +54 -0
  65. package/dist/ui/file-preview/components/html-renderer.d.ts +5 -0
  66. package/dist/ui/file-preview/components/html-renderer.js +47 -0
  67. package/dist/ui/file-preview/components/markdown-renderer.d.ts +1 -0
  68. package/dist/ui/file-preview/components/markdown-renderer.js +67 -0
  69. package/dist/ui/file-preview/components/toolbar.d.ts +6 -0
  70. package/dist/ui/file-preview/components/toolbar.js +75 -0
  71. package/dist/ui/file-preview/image-preview.d.ts +3 -0
  72. package/dist/ui/file-preview/image-preview.js +21 -0
  73. package/dist/ui/file-preview/main.js +5 -0
  74. package/dist/ui/file-preview/markdown/editor.d.ts +36 -0
  75. package/dist/ui/file-preview/markdown/editor.js +643 -0
  76. package/dist/ui/file-preview/markdown/linking.d.ts +9 -0
  77. package/dist/ui/file-preview/markdown/linking.js +210 -0
  78. package/dist/ui/file-preview/markdown/outline.d.ts +7 -0
  79. package/dist/ui/file-preview/markdown/outline.js +40 -0
  80. package/dist/ui/file-preview/markdown/preview.d.ts +8 -0
  81. package/dist/ui/file-preview/markdown/preview.js +33 -0
  82. package/dist/ui/file-preview/markdown/slugify.d.ts +3 -0
  83. package/dist/ui/file-preview/markdown/slugify.js +31 -0
  84. package/dist/ui/file-preview/markdown/toc.d.ts +11 -0
  85. package/dist/ui/file-preview/markdown/toc.js +75 -0
  86. package/dist/ui/file-preview/markdown/utils.d.ts +1 -0
  87. package/dist/ui/file-preview/markdown/utils.js +15 -0
  88. package/dist/ui/file-preview/markdown/workspace-controller.d.ts +25 -0
  89. package/dist/ui/file-preview/markdown/workspace-controller.js +40 -0
  90. package/dist/ui/file-preview/preview-runtime.js +399 -13969
  91. package/dist/ui/file-preview/shared/preview-file-types.d.ts +1 -1
  92. package/dist/ui/file-preview/shared/preview-file-types.js +3 -1
  93. package/dist/ui/file-preview/src/App.d.ts +4 -0
  94. package/dist/ui/file-preview/src/App.js +564 -0
  95. package/dist/ui/file-preview/src/components/CodeViewer.d.ts +6 -0
  96. package/dist/ui/file-preview/src/components/CodeViewer.js +60 -0
  97. package/dist/ui/file-preview/src/components/HtmlRenderer.d.ts +8 -0
  98. package/dist/ui/file-preview/src/components/HtmlRenderer.js +45 -0
  99. package/dist/ui/file-preview/src/components/MarkdownRenderer.d.ts +1 -0
  100. package/dist/ui/file-preview/src/components/MarkdownRenderer.js +15 -0
  101. package/dist/ui/file-preview/src/components/editor-toolbar.d.ts +15 -0
  102. package/dist/ui/file-preview/src/components/editor-toolbar.js +384 -0
  103. package/dist/ui/file-preview/src/components/html-renderer.d.ts +1 -5
  104. package/dist/ui/file-preview/src/components/html-renderer.js +11 -27
  105. package/dist/ui/file-preview/src/components/markdown-editor.d.ts +29 -0
  106. package/dist/ui/file-preview/src/components/markdown-editor.js +535 -0
  107. package/dist/ui/file-preview/src/components/markdown-renderer.js +47 -9
  108. package/dist/ui/file-preview/src/directory-controller.d.ts +8 -0
  109. package/dist/ui/file-preview/src/directory-controller.js +233 -0
  110. package/dist/ui/file-preview/src/document-layout.d.ts +20 -0
  111. package/dist/ui/file-preview/src/document-layout.js +109 -0
  112. package/dist/ui/file-preview/src/document-outline.d.ts +17 -0
  113. package/dist/ui/file-preview/src/document-outline.js +97 -0
  114. package/dist/ui/file-preview/src/document-workspace.d.ts +19 -0
  115. package/dist/ui/file-preview/src/document-workspace.js +33 -0
  116. package/dist/ui/file-preview/src/file-type-handlers.d.ts +10 -0
  117. package/dist/ui/file-preview/src/file-type-handlers.js +98 -0
  118. package/dist/ui/file-preview/src/host/external-actions.d.ts +19 -0
  119. package/dist/ui/file-preview/src/host/external-actions.js +94 -0
  120. package/dist/ui/file-preview/src/host/selection-context.d.ts +9 -0
  121. package/dist/ui/file-preview/src/host/selection-context.js +106 -0
  122. package/dist/ui/file-preview/src/markdown/block-merge.d.ts +25 -0
  123. package/dist/ui/file-preview/src/markdown/block-merge.js +86 -0
  124. package/dist/ui/file-preview/src/markdown/conflict-dialog.d.ts +40 -0
  125. package/dist/ui/file-preview/src/markdown/conflict-dialog.js +163 -0
  126. package/dist/ui/file-preview/src/markdown/controller.d.ts +38 -0
  127. package/dist/ui/file-preview/src/markdown/controller.js +921 -0
  128. package/dist/ui/file-preview/src/markdown/editor.d.ts +35 -0
  129. package/dist/ui/file-preview/src/markdown/editor.js +691 -0
  130. package/dist/ui/file-preview/src/markdown/link-modal.d.ts +13 -0
  131. package/dist/ui/file-preview/src/markdown/link-modal.js +213 -0
  132. package/dist/ui/file-preview/src/markdown/linking.d.ts +16 -0
  133. package/dist/ui/file-preview/src/markdown/linking.js +228 -0
  134. package/dist/ui/file-preview/src/markdown/outline.d.ts +2 -0
  135. package/dist/ui/file-preview/src/markdown/outline.js +16 -0
  136. package/dist/ui/file-preview/src/markdown/parser.d.ts +30 -0
  137. package/dist/ui/file-preview/src/markdown/parser.js +38 -0
  138. package/dist/ui/file-preview/src/markdown/preview.d.ts +1 -0
  139. package/dist/ui/file-preview/src/markdown/preview.js +20 -0
  140. package/dist/ui/file-preview/src/markdown/raw-editor.d.ts +8 -0
  141. package/dist/ui/file-preview/src/markdown/raw-editor.js +61 -0
  142. package/dist/ui/file-preview/src/markdown/selection-toolbar.d.ts +14 -0
  143. package/dist/ui/file-preview/src/markdown/selection-toolbar.js +128 -0
  144. package/dist/ui/file-preview/src/markdown/slugify.d.ts +3 -0
  145. package/dist/ui/file-preview/src/markdown/slugify.js +31 -0
  146. package/dist/ui/file-preview/src/markdown/toc.d.ts +11 -0
  147. package/dist/ui/file-preview/src/markdown/toc.js +75 -0
  148. package/dist/ui/file-preview/src/markdown/utils.d.ts +1 -0
  149. package/dist/ui/file-preview/src/markdown/utils.js +15 -0
  150. package/dist/ui/file-preview/src/markdown-workspace/editor.d.ts +36 -0
  151. package/dist/ui/file-preview/src/markdown-workspace/editor.js +643 -0
  152. package/dist/ui/file-preview/src/markdown-workspace/linking.d.ts +9 -0
  153. package/dist/ui/file-preview/src/markdown-workspace/linking.js +210 -0
  154. package/dist/ui/file-preview/src/markdown-workspace/outline.d.ts +7 -0
  155. package/dist/ui/file-preview/src/markdown-workspace/outline.js +40 -0
  156. package/dist/ui/file-preview/src/markdown-workspace/preview.d.ts +8 -0
  157. package/dist/ui/file-preview/src/markdown-workspace/preview.js +33 -0
  158. package/dist/ui/file-preview/src/markdown-workspace/slugify.d.ts +3 -0
  159. package/dist/ui/file-preview/src/markdown-workspace/slugify.js +31 -0
  160. package/dist/ui/file-preview/src/markdown-workspace/toc.d.ts +11 -0
  161. package/dist/ui/file-preview/src/markdown-workspace/toc.js +75 -0
  162. package/dist/ui/file-preview/src/markdown-workspace/utils.d.ts +1 -0
  163. package/dist/ui/file-preview/src/markdown-workspace/utils.js +15 -0
  164. package/dist/ui/file-preview/src/markdown-workspace/workspace-controller.d.ts +25 -0
  165. package/dist/ui/file-preview/src/markdown-workspace/workspace-controller.js +40 -0
  166. package/dist/ui/file-preview/src/model.d.ts +34 -0
  167. package/dist/ui/file-preview/src/panel-actions.d.ts +17 -0
  168. package/dist/ui/file-preview/src/panel-actions.js +182 -0
  169. package/dist/ui/file-preview/src/path-utils.d.ts +6 -0
  170. package/dist/ui/file-preview/src/path-utils.js +64 -0
  171. package/dist/ui/file-preview/src/payload-utils.d.ts +11 -0
  172. package/dist/ui/file-preview/src/payload-utils.js +94 -0
  173. package/dist/ui/file-preview/styles.css +1144 -277
  174. package/dist/ui/file-preview/types.d.ts +1 -0
  175. package/dist/ui/file-preview/types.js +1 -0
  176. package/dist/ui/resources.d.ts +7 -0
  177. package/dist/ui/resources.js +16 -2
  178. package/dist/ui/server-integration.d.ts +13 -0
  179. package/dist/ui/server-integration.js +31 -0
  180. package/dist/ui/shared/ToolHeader.d.ts +9 -0
  181. package/dist/ui/shared/ToolHeader.js +29 -0
  182. package/dist/ui/shared/app-bootstrap.d.ts +9 -0
  183. package/dist/ui/shared/app-bootstrap.js +15 -0
  184. package/dist/ui/shared/compact-row.d.ts +11 -0
  185. package/dist/ui/shared/compact-row.js +18 -0
  186. package/dist/ui/shared/guards.d.ts +1 -0
  187. package/dist/ui/shared/guards.js +3 -0
  188. package/dist/ui/shared/host-context.d.ts +15 -0
  189. package/dist/ui/shared/host-context.js +51 -0
  190. package/dist/ui/shared/host-lifecycle.d.ts +1 -0
  191. package/dist/ui/shared/host-lifecycle.js +8 -2
  192. package/dist/ui/shared/tool-bridge.d.ts +30 -0
  193. package/dist/ui/shared/tool-bridge.js +137 -0
  194. package/dist/ui/shared/tool-shell.d.ts +9 -0
  195. package/dist/ui/shared/tool-shell.js +46 -4
  196. package/dist/ui/shared/ui-event-tracker.d.ts +9 -0
  197. package/dist/ui/shared/ui-event-tracker.js +27 -0
  198. package/dist/ui/shared/widget-state.d.ts +6 -1
  199. package/dist/ui/shared/widget-state.js +102 -4
  200. package/dist/utils/capture.js +3 -3
  201. package/dist/utils/files/base.d.ts +2 -0
  202. package/dist/utils/open-browser.js +1 -1
  203. package/dist/utils/ui-call-context.d.ts +8 -0
  204. package/dist/utils/ui-call-context.js +72 -0
  205. package/dist/version.d.ts +1 -1
  206. package/dist/version.js +1 -1
  207. package/package.json +13 -4
  208. package/dist/data/spec-kit-prompts.json +0 -123
  209. package/dist/handlers/node-handlers.d.ts +0 -6
  210. package/dist/handlers/node-handlers.js +0 -73
  211. package/dist/handlers/test-crash-handler.d.ts +0 -11
  212. package/dist/handlers/test-crash-handler.js +0 -26
  213. package/dist/http-index.d.ts +0 -45
  214. package/dist/http-index.js +0 -51
  215. package/dist/http-server-auto-tunnel.js +0 -667
  216. package/dist/http-server-named-tunnel.d.ts +0 -2
  217. package/dist/http-server-named-tunnel.js +0 -167
  218. package/dist/http-server-tunnel.d.ts +0 -2
  219. package/dist/http-server-tunnel.js +0 -111
  220. package/dist/http-server.d.ts +0 -2
  221. package/dist/http-server.js +0 -270
  222. package/dist/index-oauth.d.ts +0 -2
  223. package/dist/index-oauth.js +0 -201
  224. package/dist/oauth/auth-middleware.d.ts +0 -20
  225. package/dist/oauth/auth-middleware.js +0 -62
  226. package/dist/oauth/index.d.ts +0 -3
  227. package/dist/oauth/index.js +0 -3
  228. package/dist/oauth/oauth-manager.d.ts +0 -80
  229. package/dist/oauth/oauth-manager.js +0 -179
  230. package/dist/oauth/oauth-routes.d.ts +0 -3
  231. package/dist/oauth/oauth-routes.js +0 -377
  232. package/dist/oauth/provider.d.ts +0 -22
  233. package/dist/oauth/provider.js +0 -124
  234. package/dist/oauth/server.d.ts +0 -18
  235. package/dist/oauth/server.js +0 -160
  236. package/dist/oauth/types.d.ts +0 -54
  237. package/dist/oauth/types.js +0 -2
  238. package/dist/remote-device/templates/auth-success.d.ts +0 -1
  239. package/dist/remote-device/templates/auth-success.js +0 -30
  240. package/dist/setup.log +0 -275
  241. package/dist/test-setup.js +0 -14
  242. package/dist/tools/docx/builders/html-builder.d.ts +0 -17
  243. package/dist/tools/docx/builders/html-builder.js +0 -92
  244. package/dist/tools/docx/builders/image.d.ts +0 -14
  245. package/dist/tools/docx/builders/image.js +0 -84
  246. package/dist/tools/docx/builders/index.d.ts +0 -11
  247. package/dist/tools/docx/builders/index.js +0 -11
  248. package/dist/tools/docx/builders/markdown-builder.d.ts +0 -2
  249. package/dist/tools/docx/builders/markdown-builder.js +0 -260
  250. package/dist/tools/docx/builders/paragraph.d.ts +0 -12
  251. package/dist/tools/docx/builders/paragraph.js +0 -29
  252. package/dist/tools/docx/builders/table.d.ts +0 -10
  253. package/dist/tools/docx/builders/table.js +0 -138
  254. package/dist/tools/docx/builders/utils.d.ts +0 -5
  255. package/dist/tools/docx/builders/utils.js +0 -18
  256. package/dist/tools/docx/constants.d.ts +0 -32
  257. package/dist/tools/docx/constants.js +0 -61
  258. package/dist/tools/docx/converters/markdown-to-html.d.ts +0 -17
  259. package/dist/tools/docx/converters/markdown-to-html.js +0 -111
  260. package/dist/tools/docx/create.d.ts +0 -21
  261. package/dist/tools/docx/create.js +0 -386
  262. package/dist/tools/docx/dom.d.ts +0 -139
  263. package/dist/tools/docx/dom.js +0 -448
  264. package/dist/tools/docx/errors.d.ts +0 -28
  265. package/dist/tools/docx/errors.js +0 -48
  266. package/dist/tools/docx/extractors/images.d.ts +0 -14
  267. package/dist/tools/docx/extractors/images.js +0 -40
  268. package/dist/tools/docx/extractors/metadata.d.ts +0 -14
  269. package/dist/tools/docx/extractors/metadata.js +0 -64
  270. package/dist/tools/docx/extractors/sections.d.ts +0 -14
  271. package/dist/tools/docx/extractors/sections.js +0 -61
  272. package/dist/tools/docx/html.d.ts +0 -17
  273. package/dist/tools/docx/html.js +0 -111
  274. package/dist/tools/docx/index.d.ts +0 -10
  275. package/dist/tools/docx/index.js +0 -10
  276. package/dist/tools/docx/markdown.d.ts +0 -84
  277. package/dist/tools/docx/markdown.js +0 -507
  278. package/dist/tools/docx/modify.d.ts +0 -28
  279. package/dist/tools/docx/modify.js +0 -271
  280. package/dist/tools/docx/operations/handlers/index.d.ts +0 -39
  281. package/dist/tools/docx/operations/handlers/index.js +0 -152
  282. package/dist/tools/docx/operations/html-manipulator.d.ts +0 -24
  283. package/dist/tools/docx/operations/html-manipulator.js +0 -352
  284. package/dist/tools/docx/operations/index.d.ts +0 -14
  285. package/dist/tools/docx/operations/index.js +0 -61
  286. package/dist/tools/docx/operations/operation-handlers.d.ts +0 -3
  287. package/dist/tools/docx/operations/operation-handlers.js +0 -67
  288. package/dist/tools/docx/operations/preprocessor.d.ts +0 -14
  289. package/dist/tools/docx/operations/preprocessor.js +0 -44
  290. package/dist/tools/docx/operations/xml-replacer.d.ts +0 -9
  291. package/dist/tools/docx/operations/xml-replacer.js +0 -35
  292. package/dist/tools/docx/operations.d.ts +0 -13
  293. package/dist/tools/docx/operations.js +0 -13
  294. package/dist/tools/docx/ops/delete-paragraph-at-body-index.d.ts +0 -11
  295. package/dist/tools/docx/ops/delete-paragraph-at-body-index.js +0 -23
  296. package/dist/tools/docx/ops/header-replace-text-exact.d.ts +0 -13
  297. package/dist/tools/docx/ops/header-replace-text-exact.js +0 -55
  298. package/dist/tools/docx/ops/index.d.ts +0 -17
  299. package/dist/tools/docx/ops/index.js +0 -70
  300. package/dist/tools/docx/ops/insert-image-after-text.d.ts +0 -24
  301. package/dist/tools/docx/ops/insert-image-after-text.js +0 -128
  302. package/dist/tools/docx/ops/insert-paragraph-after-text.d.ts +0 -12
  303. package/dist/tools/docx/ops/insert-paragraph-after-text.js +0 -74
  304. package/dist/tools/docx/ops/insert-table-after-text.d.ts +0 -19
  305. package/dist/tools/docx/ops/insert-table-after-text.js +0 -57
  306. package/dist/tools/docx/ops/replace-hyperlink-url.d.ts +0 -12
  307. package/dist/tools/docx/ops/replace-hyperlink-url.js +0 -37
  308. package/dist/tools/docx/ops/replace-paragraph-at-body-index.d.ts +0 -9
  309. package/dist/tools/docx/ops/replace-paragraph-at-body-index.js +0 -25
  310. package/dist/tools/docx/ops/replace-paragraph-text-exact.d.ts +0 -21
  311. package/dist/tools/docx/ops/replace-paragraph-text-exact.js +0 -36
  312. package/dist/tools/docx/ops/replace-table-cell-text.d.ts +0 -25
  313. package/dist/tools/docx/ops/replace-table-cell-text.js +0 -85
  314. package/dist/tools/docx/ops/set-color-for-paragraph-exact.d.ts +0 -9
  315. package/dist/tools/docx/ops/set-color-for-paragraph-exact.js +0 -24
  316. package/dist/tools/docx/ops/set-color-for-style.d.ts +0 -13
  317. package/dist/tools/docx/ops/set-color-for-style.js +0 -31
  318. package/dist/tools/docx/ops/set-paragraph-style-at-body-index.d.ts +0 -8
  319. package/dist/tools/docx/ops/set-paragraph-style-at-body-index.js +0 -57
  320. package/dist/tools/docx/ops/table-set-cell-text.d.ts +0 -9
  321. package/dist/tools/docx/ops/table-set-cell-text.js +0 -40
  322. package/dist/tools/docx/parsers/image-extractor.d.ts +0 -18
  323. package/dist/tools/docx/parsers/image-extractor.js +0 -61
  324. package/dist/tools/docx/parsers/index.d.ts +0 -9
  325. package/dist/tools/docx/parsers/index.js +0 -9
  326. package/dist/tools/docx/parsers/paragraph-parser.d.ts +0 -2
  327. package/dist/tools/docx/parsers/paragraph-parser.js +0 -88
  328. package/dist/tools/docx/parsers/table-parser.d.ts +0 -9
  329. package/dist/tools/docx/parsers/table-parser.js +0 -72
  330. package/dist/tools/docx/parsers/xml-parser.d.ts +0 -25
  331. package/dist/tools/docx/parsers/xml-parser.js +0 -71
  332. package/dist/tools/docx/parsers/zip-reader.d.ts +0 -23
  333. package/dist/tools/docx/parsers/zip-reader.js +0 -52
  334. package/dist/tools/docx/read.d.ts +0 -27
  335. package/dist/tools/docx/read.js +0 -308
  336. package/dist/tools/docx/relationships.d.ts +0 -22
  337. package/dist/tools/docx/relationships.js +0 -76
  338. package/dist/tools/docx/structure.d.ts +0 -25
  339. package/dist/tools/docx/structure.js +0 -102
  340. package/dist/tools/docx/styled-html-parser.d.ts +0 -23
  341. package/dist/tools/docx/styled-html-parser.js +0 -1262
  342. package/dist/tools/docx/types.d.ts +0 -213
  343. package/dist/tools/docx/types.js +0 -5
  344. package/dist/tools/docx/utils/escaping.d.ts +0 -13
  345. package/dist/tools/docx/utils/escaping.js +0 -26
  346. package/dist/tools/docx/utils/images.d.ts +0 -9
  347. package/dist/tools/docx/utils/images.js +0 -26
  348. package/dist/tools/docx/utils/index.d.ts +0 -12
  349. package/dist/tools/docx/utils/index.js +0 -17
  350. package/dist/tools/docx/utils/markdown.d.ts +0 -13
  351. package/dist/tools/docx/utils/markdown.js +0 -32
  352. package/dist/tools/docx/utils/paths.d.ts +0 -15
  353. package/dist/tools/docx/utils/paths.js +0 -27
  354. package/dist/tools/docx/utils/versioning.d.ts +0 -25
  355. package/dist/tools/docx/utils/versioning.js +0 -55
  356. package/dist/tools/docx/utils.d.ts +0 -101
  357. package/dist/tools/docx/utils.js +0 -299
  358. package/dist/tools/docx/validate.d.ts +0 -33
  359. package/dist/tools/docx/validate.js +0 -49
  360. package/dist/tools/docx/validators.d.ts +0 -13
  361. package/dist/tools/docx/validators.js +0 -40
  362. package/dist/tools/docx/write.d.ts +0 -17
  363. package/dist/tools/docx/write.js +0 -88
  364. package/dist/tools/docx/xml-view-test.js +0 -63
  365. package/dist/tools/docx/xml-view.d.ts +0 -56
  366. package/dist/tools/docx/xml-view.js +0 -169
  367. package/dist/tools/docx/zip.d.ts +0 -21
  368. package/dist/tools/docx/zip.js +0 -35
  369. package/dist/tools/pdf-processor.js +0 -3
  370. package/dist/tools/search.d.ts +0 -32
  371. package/dist/tools/search.js +0 -202
  372. package/dist/ui/file-preview/src/app.d.ts +0 -4
  373. package/dist/ui/file-preview/src/app.js +0 -800
  374. package/dist/utils/crash-logger.d.ts +0 -18
  375. package/dist/utils/crash-logger.js +0 -44
  376. package/dist/utils/dedent.d.ts +0 -8
  377. package/dist/utils/dedent.js +0 -38
  378. /package/dist/{http-server-auto-tunnel.d.ts → ui/config-editor/main.d.ts} +0 -0
  379. /package/dist/{test-docx.d.ts → ui/config-editor/src/main.d.ts} +0 -0
  380. /package/dist/{tools/docx/xml-view-test.d.ts → ui/file-preview/main.d.ts} +0 -0
  381. /package/dist/ui/file-preview/src/components/{toolbar.d.ts → Toolbar.d.ts} +0 -0
  382. /package/dist/ui/file-preview/src/components/{toolbar.js → Toolbar.js} +0 -0
  383. /package/dist/{tools/pdf-processor.d.ts → ui/file-preview/src/model.js} +0 -0
@@ -1,85 +0,0 @@
1
- /**
2
- * Op: replace_table_cell_text
3
- *
4
- * Goal: Replace the "logical value" of a cell while preserving layout and styles.
5
- *
6
- * Matching strategy (tried in order):
7
- * 1. Match by full cell text (all paragraphs joined with spaces)
8
- * 2. Match by first paragraph text only
9
- *
10
- * When the caller passes FULL cell text in `from` / `to` (common for LLMs), we
11
- * interpret the change like this:
12
- *
13
- * from: "<OLD_TITLE> <SUBTITLE ...>"
14
- * to: "<NEW_TITLE> <SUBTITLE ...>"
15
- *
16
- * i.e. only the *title* (first paragraph) changed, the rest of the cell content
17
- * stayed the same. We detect the unchanged suffix and compute NEW_TITLE by
18
- * stripping that suffix from `to`. Then we only change the first paragraph text,
19
- * keeping all other paragraphs (subtitle, etc.) exactly as they were.
20
- *
21
- * If we cannot safely detect that pattern, we fall back to treating `from`/`to`
22
- * as simple first‑paragraph values.
23
- */
24
- import { getAllBodyTables, nodeListToArray, getCellText, getParagraphText, setCellTextPreservingStyles } from '../dom.js';
25
- export function applyReplaceTableCellText(body, op) {
26
- const target = op.from.trim();
27
- // Find all logical tables in the body, including those inside SDTs.
28
- const tables = getAllBodyTables(body);
29
- // Search through all tables
30
- for (const table of tables) {
31
- // Get all rows
32
- const rows = [];
33
- for (const child of nodeListToArray(table.childNodes)) {
34
- if (child.nodeType === 1 && child.nodeName === 'w:tr') {
35
- rows.push(child);
36
- }
37
- }
38
- // Search through all cells in all rows
39
- for (const row of rows) {
40
- const cells = [];
41
- for (const child of nodeListToArray(row.childNodes)) {
42
- if (child.nodeType === 1 && child.nodeName === 'w:tc') {
43
- cells.push(child);
44
- }
45
- }
46
- for (const cell of cells) {
47
- const cellText = getCellText(cell).trim();
48
- // Strategy 1: full cell text match — try to detect a "title-only" change
49
- if (cellText === target) {
50
- const paragraphs = cell.getElementsByTagName('w:p');
51
- if (paragraphs.length > 0) {
52
- const firstP = paragraphs.item(0);
53
- const firstPText = getParagraphText(firstP).trim();
54
- // Cell's "suffix" is everything after the first paragraph text
55
- const suffixFrom = cellText.slice(firstPText.length).trimStart();
56
- const toTrimmed = op.to.trim();
57
- let newFirstText = toTrimmed;
58
- if (suffixFrom.length > 0 && toTrimmed.endsWith(suffixFrom)) {
59
- // Common LLM pattern:
60
- // from: "<OLD_TITLE> <SUFFIX>"
61
- // to: "<NEW_TITLE> <SUFFIX>"
62
- // Extract "<NEW_TITLE>" by removing the unchanged suffix.
63
- newFirstText = toTrimmed
64
- .slice(0, toTrimmed.length - suffixFrom.length)
65
- .trimEnd();
66
- }
67
- setCellTextPreservingStyles(cell, newFirstText);
68
- return { op, status: 'applied', matched: 1 };
69
- }
70
- }
71
- // Strategy 2: match by first paragraph text only
72
- const paragraphs = cell.getElementsByTagName('w:p');
73
- if (paragraphs.length > 0) {
74
- const firstP = paragraphs.item(0);
75
- const firstParagraphText = getParagraphText(firstP).trim();
76
- if (firstParagraphText === target) {
77
- setCellTextPreservingStyles(cell, op.to);
78
- return { op, status: 'applied', matched: 1 };
79
- }
80
- }
81
- }
82
- }
83
- }
84
- return { op, status: 'skipped', matched: 0, reason: 'no_match' };
85
- }
@@ -1,9 +0,0 @@
1
- /**
2
- * Op: set_color_for_paragraph_exact
3
- *
4
- * Find FIRST paragraph whose trimmed text === `text` **anywhere in the body**,
5
- * including paragraphs inside tables and other containers.
6
- * Apply run-level colour to every w:r in that paragraph.
7
- */
8
- import type { SetColorForParagraphExactOp, OpResult } from '../types.js';
9
- export declare function applySetColorForParagraphExact(body: Element, op: SetColorForParagraphExactOp): OpResult;
@@ -1,24 +0,0 @@
1
- /**
2
- * Op: set_color_for_paragraph_exact
3
- *
4
- * Find FIRST paragraph whose trimmed text === `text` **anywhere in the body**,
5
- * including paragraphs inside tables and other containers.
6
- * Apply run-level colour to every w:r in that paragraph.
7
- */
8
- import { getParagraphText, ensureRunColor } from '../dom.js';
9
- export function applySetColorForParagraphExact(body, op) {
10
- const target = op.text.trim();
11
- // Traverse **all** paragraphs in the body, not just direct children.
12
- const paragraphs = body.getElementsByTagName('w:p');
13
- for (let i = 0; i < paragraphs.length; i++) {
14
- const p = paragraphs.item(i);
15
- if (getParagraphText(p).trim() !== target)
16
- continue;
17
- const runs = p.getElementsByTagName('w:r');
18
- for (let i = 0; i < runs.length; i++) {
19
- ensureRunColor(runs.item(i), op.color);
20
- }
21
- return { op, status: 'applied', matched: 1 };
22
- }
23
- return { op, status: 'skipped', matched: 0, reason: 'no_match' };
24
- }
@@ -1,13 +0,0 @@
1
- /**
2
- * Op: set_color_for_style
3
- *
4
- * For every paragraph whose w:pPr/w:pStyle/@w:val === style,
5
- * set run-level colour on every w:r in that paragraph.
6
- *
7
- * This now includes paragraphs inside tables and other containers,
8
- * not just direct w:p children of w:body.
9
- *
10
- * Does NOT modify word/styles.xml — only in-document run formatting.
11
- */
12
- import type { SetColorForStyleOp, OpResult } from '../types.js';
13
- export declare function applySetColorForStyle(body: Element, op: SetColorForStyleOp): OpResult;
@@ -1,31 +0,0 @@
1
- /**
2
- * Op: set_color_for_style
3
- *
4
- * For every paragraph whose w:pPr/w:pStyle/@w:val === style,
5
- * set run-level colour on every w:r in that paragraph.
6
- *
7
- * This now includes paragraphs inside tables and other containers,
8
- * not just direct w:p children of w:body.
9
- *
10
- * Does NOT modify word/styles.xml — only in-document run formatting.
11
- */
12
- import { getParagraphStyle, ensureRunColor } from '../dom.js';
13
- export function applySetColorForStyle(body, op) {
14
- // Traverse **all** paragraphs in the body.
15
- const paragraphs = body.getElementsByTagName('w:p');
16
- let matched = 0;
17
- for (let i = 0; i < paragraphs.length; i++) {
18
- const p = paragraphs.item(i);
19
- if (getParagraphStyle(p) !== op.style)
20
- continue;
21
- const runs = p.getElementsByTagName('w:r');
22
- for (let i = 0; i < runs.length; i++) {
23
- ensureRunColor(runs.item(i), op.color);
24
- }
25
- matched++;
26
- }
27
- if (matched === 0) {
28
- return { op, status: 'skipped', matched: 0, reason: 'no_match' };
29
- }
30
- return { op, status: 'applied', matched };
31
- }
@@ -1,8 +0,0 @@
1
- /**
2
- * Op: set_paragraph_style_at_body_index
3
- *
4
- * Set (or replace) the paragraph style (w:pPr/w:pStyle) at a given
5
- * bodyChildIndex. Skips if the child is not a w:p.
6
- */
7
- import type { SetParagraphStyleAtBodyIndexOp, OpResult } from '../types.js';
8
- export declare function applySetParagraphStyleAtBodyIndex(body: Element, op: SetParagraphStyleAtBodyIndexOp): OpResult;
@@ -1,57 +0,0 @@
1
- /**
2
- * Op: set_paragraph_style_at_body_index
3
- *
4
- * Set (or replace) the paragraph style (w:pPr/w:pStyle) at a given
5
- * bodyChildIndex. Skips if the child is not a w:p.
6
- */
7
- import { getBodyChildren, nodeListToArray } from '../dom.js';
8
- export function applySetParagraphStyleAtBodyIndex(body, op) {
9
- const children = getBodyChildren(body);
10
- const idx = op.bodyChildIndex;
11
- if (idx < 0 || idx >= children.length) {
12
- return { op, status: 'skipped', matched: 0, reason: 'index_out_of_range' };
13
- }
14
- const child = children[idx];
15
- if (child.nodeName !== 'w:p') {
16
- return { op, status: 'skipped', matched: 0, reason: 'not_a_paragraph' };
17
- }
18
- const doc = child.ownerDocument;
19
- if (!doc)
20
- return { op, status: 'skipped', matched: 0, reason: 'no_owner_document' };
21
- // Find or create w:pPr
22
- let pPr = null;
23
- for (const n of nodeListToArray(child.childNodes)) {
24
- if (n.nodeType === 1 && n.nodeName === 'w:pPr') {
25
- pPr = n;
26
- break;
27
- }
28
- }
29
- if (!pPr) {
30
- pPr = doc.createElement('w:pPr');
31
- if (child.firstChild) {
32
- child.insertBefore(pPr, child.firstChild);
33
- }
34
- else {
35
- child.appendChild(pPr);
36
- }
37
- }
38
- // Find or create w:pStyle inside pPr
39
- let pStyle = null;
40
- for (const n of nodeListToArray(pPr.childNodes)) {
41
- if (n.nodeType === 1 && n.nodeName === 'w:pStyle') {
42
- pStyle = n;
43
- break;
44
- }
45
- }
46
- if (!pStyle) {
47
- pStyle = doc.createElement('w:pStyle');
48
- if (pPr.firstChild) {
49
- pPr.insertBefore(pStyle, pPr.firstChild);
50
- }
51
- else {
52
- pPr.appendChild(pStyle);
53
- }
54
- }
55
- pStyle.setAttribute('w:val', op.style);
56
- return { op, status: 'applied', matched: 1 };
57
- }
@@ -1,9 +0,0 @@
1
- /**
2
- * Op: table_set_cell_text
3
- *
4
- * Set the text content of a specific table cell.
5
- * Targets by: tableIndex (0-based among w:tbl in body), row, col.
6
- * Applies minimal text replacement inside the cell's first paragraph.
7
- */
8
- import type { TableSetCellTextOp, OpResult } from '../types.js';
9
- export declare function applyTableSetCellText(body: Element, op: TableSetCellTextOp): OpResult;
@@ -1,40 +0,0 @@
1
- /**
2
- * Op: table_set_cell_text
3
- *
4
- * Set the text content of a specific table cell.
5
- * Targets by: tableIndex (0-based among w:tbl in body), row, col.
6
- * Applies minimal text replacement inside the cell's first paragraph.
7
- */
8
- import { getAllBodyTables, nodeListToArray, setCellTextPreservingStyles } from '../dom.js';
9
- export function applyTableSetCellText(body, op) {
10
- // Find the n‑th logical table in the body, including tables inside SDTs.
11
- const tables = getAllBodyTables(body);
12
- if (op.tableIndex < 0 || op.tableIndex >= tables.length) {
13
- return { op, status: 'skipped', matched: 0, reason: 'table_not_found' };
14
- }
15
- const table = tables[op.tableIndex];
16
- // Find the n-th w:tr
17
- const rows = [];
18
- for (const child of nodeListToArray(table.childNodes)) {
19
- if (child.nodeType === 1 && child.nodeName === 'w:tr') {
20
- rows.push(child);
21
- }
22
- }
23
- if (op.row < 0 || op.row >= rows.length) {
24
- return { op, status: 'skipped', matched: 0, reason: 'row_out_of_range' };
25
- }
26
- // Find the n-th w:tc in the row
27
- const cells = [];
28
- for (const child of nodeListToArray(rows[op.row].childNodes)) {
29
- if (child.nodeType === 1 && child.nodeName === 'w:tc') {
30
- cells.push(child);
31
- }
32
- }
33
- if (op.col < 0 || op.col >= cells.length) {
34
- return { op, status: 'skipped', matched: 0, reason: 'col_out_of_range' };
35
- }
36
- const cell = cells[op.col];
37
- // Replace cell text while preserving ALL styles (colors, bold, italic, etc.)
38
- setCellTextPreservingStyles(cell, op.text);
39
- return { op, status: 'applied', matched: 1 };
40
- }
@@ -1,18 +0,0 @@
1
- /**
2
- * Image Extractor
3
- * Utilities for extracting and handling images from DOCX files
4
- */
5
- import type { ZipArchive } from './zip-reader.js';
6
- import type { DocxRelationship } from '../types.js';
7
- /**
8
- * Get MIME type from file extension or target path
9
- */
10
- export declare function getMimeTypeForTarget(target: string): string;
11
- /**
12
- * Extract all images from a DOCX ZIP archive
13
- */
14
- export declare function extractImagesFromZip(zip: ZipArchive, relMap: Map<string, DocxRelationship>): Map<string, Buffer>;
15
- /**
16
- * Resolve image relationship ID from drawing or pict element
17
- */
18
- export declare function resolveImageRelId(element: Element): string | null;
@@ -1,61 +0,0 @@
1
- /**
2
- * Image Extractor
3
- * Utilities for extracting and handling images from DOCX files
4
- */
5
- import path from 'path';
6
- import { readZipFileBuffer } from './zip-reader.js';
7
- /**
8
- * Get MIME type from file extension or target path
9
- */
10
- export function getMimeTypeForTarget(target) {
11
- const ext = path.extname(target).toLowerCase();
12
- const mimeTypes = {
13
- '.png': 'image/png',
14
- '.jpg': 'image/jpeg',
15
- '.jpeg': 'image/jpeg',
16
- '.gif': 'image/gif',
17
- '.bmp': 'image/bmp',
18
- '.webp': 'image/webp',
19
- '.svg': 'image/svg+xml',
20
- };
21
- return mimeTypes[ext] || 'application/octet-stream';
22
- }
23
- /**
24
- * Extract all images from a DOCX ZIP archive
25
- */
26
- export function extractImagesFromZip(zip, relMap) {
27
- const images = new Map();
28
- for (const [relId, rel] of relMap.entries()) {
29
- if (!rel.type.includes('/image'))
30
- continue;
31
- const targetPath = rel.target.startsWith('word/')
32
- ? rel.target
33
- : `word/${rel.target.replace(/^\/?/, '')}`;
34
- const imgBuffer = readZipFileBuffer(zip, targetPath);
35
- if (imgBuffer) {
36
- images.set(relId, imgBuffer);
37
- }
38
- }
39
- return images;
40
- }
41
- /**
42
- * Resolve image relationship ID from drawing or pict element
43
- */
44
- export function resolveImageRelId(element) {
45
- // Try drawing element first (newer format)
46
- const blips = element.getElementsByTagName('a:blip');
47
- for (let i = 0; i < blips.length; i++) {
48
- const blip = blips[i];
49
- const relId = blip.getAttribute('r:embed') || blip.getAttribute('embed');
50
- if (relId)
51
- return relId;
52
- }
53
- // Try pict element (older format)
54
- const imagedata = element.getElementsByTagName('v:imagedata');
55
- for (let i = 0; i < imagedata.length; i++) {
56
- const relId = imagedata[i].getAttribute('r:id') || imagedata[i].getAttribute('id');
57
- if (relId)
58
- return relId;
59
- }
60
- return null;
61
- }
@@ -1,9 +0,0 @@
1
- /**
2
- * DOCX Parsers
3
- * Centralized exports for all parsing utilities
4
- */
5
- export * from './zip-reader.js';
6
- export * from './xml-parser.js';
7
- export * from './image-extractor.js';
8
- export * from './paragraph-parser.js';
9
- export * from './table-parser.js';
@@ -1,9 +0,0 @@
1
- /**
2
- * DOCX Parsers
3
- * Centralized exports for all parsing utilities
4
- */
5
- export * from './zip-reader.js';
6
- export * from './xml-parser.js';
7
- export * from './image-extractor.js';
8
- export * from './paragraph-parser.js';
9
- export * from './table-parser.js';
@@ -1,2 +0,0 @@
1
- import type { DocxParagraph } from '../types.js';
2
- export declare function parseParagraphElement(paragraph: Element, images: Map<string, Buffer>, headingLevel: number | null): DocxParagraph | null;
@@ -1,88 +0,0 @@
1
- import { createRequire } from 'module';
2
- const require = createRequire(import.meta.url);
3
- // @ts-ignore
4
- import * as docx from 'docx';
5
- const { Paragraph, TextRun, ImageRun, HeadingLevel } = docx;
6
- import { getElementChildren } from './xml-parser.js';
7
- import { resolveImageRelId } from './image-extractor.js';
8
- export function parseParagraphElement(paragraph, images, headingLevel) {
9
- const runs = extractRunsFromParagraph(paragraph, images);
10
- if (runs.length === 0) {
11
- return null;
12
- }
13
- return new Paragraph({
14
- children: runs,
15
- heading: headingLevel ? getDocxHeadingLevel(headingLevel) : undefined,
16
- });
17
- }
18
- function extractRunsFromParagraph(paragraph, images) {
19
- const runs = [];
20
- const children = getElementChildren(paragraph);
21
- for (const child of children) {
22
- const nodeName = child.nodeName;
23
- if (nodeName === 'w:r') {
24
- const textRuns = extractTextRun(child, images);
25
- runs.push(...textRuns);
26
- }
27
- else if (nodeName === 'w:hyperlink') {
28
- const linkRuns = child.getElementsByTagName('w:r');
29
- for (let i = 0; i < linkRuns.length; i++) {
30
- const textRuns = extractTextRun(linkRuns[i], images);
31
- runs.push(...textRuns);
32
- }
33
- }
34
- }
35
- return runs;
36
- }
37
- function extractTextRun(run, images) {
38
- const runs = [];
39
- const rPr = run.getElementsByTagName('w:rPr')[0];
40
- const isBold = rPr?.getElementsByTagName('w:b').length > 0;
41
- const isItalic = rPr?.getElementsByTagName('w:i').length > 0;
42
- const children = getElementChildren(run);
43
- for (const child of children) {
44
- const nodeName = child.nodeName;
45
- if (nodeName === 'w:t') {
46
- const text = child.textContent || '';
47
- if (text) {
48
- runs.push(new TextRun({
49
- text,
50
- bold: isBold,
51
- italics: isItalic,
52
- }));
53
- }
54
- }
55
- else if (nodeName === 'w:tab') {
56
- runs.push(new TextRun({ text: '\t' }));
57
- }
58
- else if (nodeName === 'w:br') {
59
- runs.push(new TextRun({ text: '\n', break: 1 }));
60
- }
61
- else if (nodeName === 'w:drawing' || nodeName === 'w:pict') {
62
- const relId = resolveImageRelId(child);
63
- if (relId && images.has(relId)) {
64
- try {
65
- runs.push(new ImageRun({
66
- data: images.get(relId),
67
- transformation: { width: 600, height: 400 },
68
- }));
69
- }
70
- catch (err) {
71
- // Skip invalid images
72
- }
73
- }
74
- }
75
- }
76
- return runs;
77
- }
78
- function getDocxHeadingLevel(level) {
79
- const levelMap = {
80
- 1: HeadingLevel.HEADING_1,
81
- 2: HeadingLevel.HEADING_2,
82
- 3: HeadingLevel.HEADING_3,
83
- 4: HeadingLevel.HEADING_4,
84
- 5: HeadingLevel.HEADING_5,
85
- 6: HeadingLevel.HEADING_6,
86
- };
87
- return levelMap[level] ?? HeadingLevel.HEADING_1;
88
- }
@@ -1,9 +0,0 @@
1
- /**
2
- * Table Parser
3
- * Parses DOCX table elements to DOCX library Table objects
4
- */
5
- import type { DocxTable } from '../types.js';
6
- /**
7
- * Parse a table element to DOCX Table
8
- */
9
- export declare function parseTableElement(table: Element, images: Map<string, Buffer>): DocxTable | null;
@@ -1,72 +0,0 @@
1
- /**
2
- * Table Parser
3
- * Parses DOCX table elements to DOCX library Table objects
4
- */
5
- import { createRequire } from 'module';
6
- const require = createRequire(import.meta.url);
7
- // @ts-ignore
8
- import * as docx from 'docx';
9
- const { Table, TableRow, TableCell, Paragraph, WidthType } = docx;
10
- import { parseParagraphElement } from './paragraph-parser.js';
11
- /**
12
- * Parse a table element to DOCX Table
13
- */
14
- export function parseTableElement(table, images) {
15
- const rows = [];
16
- const rowNodes = table.getElementsByTagName('w:tr');
17
- for (let i = 0; i < rowNodes.length; i++) {
18
- const rowNode = rowNodes[i];
19
- const row = parseTableRow(rowNode, images);
20
- if (row) {
21
- rows.push(row);
22
- }
23
- }
24
- if (rows.length === 0) {
25
- return null;
26
- }
27
- return new Table({
28
- width: { size: 100, type: WidthType.PERCENTAGE },
29
- rows,
30
- });
31
- }
32
- /**
33
- * Parse a table row element
34
- */
35
- function parseTableRow(rowNode, images) {
36
- const cells = [];
37
- const cellNodes = rowNode.getElementsByTagName('w:tc');
38
- for (let j = 0; j < cellNodes.length; j++) {
39
- const cellNode = cellNodes[j];
40
- const cell = parseTableCell(cellNode, images);
41
- if (cell) {
42
- cells.push(cell);
43
- }
44
- }
45
- if (cells.length === 0) {
46
- return null;
47
- }
48
- return new TableRow({
49
- children: cells,
50
- });
51
- }
52
- /**
53
- * Parse a table cell element
54
- */
55
- function parseTableCell(cellNode, images) {
56
- const cellParagraphs = [];
57
- const paragraphNodes = cellNode.getElementsByTagName('w:p');
58
- for (let k = 0; k < paragraphNodes.length; k++) {
59
- const paraNode = paragraphNodes[k];
60
- const para = parseParagraphElement(paraNode, images, null);
61
- if (para) {
62
- cellParagraphs.push(para);
63
- }
64
- }
65
- // Ensure at least one paragraph per cell
66
- if (cellParagraphs.length === 0) {
67
- cellParagraphs.push(new Paragraph({ text: '' }));
68
- }
69
- return new TableCell({
70
- children: cellParagraphs,
71
- });
72
- }
@@ -1,25 +0,0 @@
1
- /**
2
- * XML Parser Utilities
3
- * Helper functions for parsing DOCX XML content
4
- */
5
- import type { DocxRelationship } from '../types.js';
6
- /**
7
- * Get all element children of a node
8
- */
9
- export declare function getElementChildren(node: Node): Element[];
10
- /**
11
- * Get attribute value, checking both direct and namespaced attributes
12
- */
13
- export declare function getAttributeValue(node: Element, name: string): string | null;
14
- /**
15
- * Parse XML string to Document
16
- */
17
- export declare function parseXml(xml: string): Document;
18
- /**
19
- * Extract relationship map from relationships XML
20
- */
21
- export declare function extractRelationshipMap(relsXml: string | null): Map<string, DocxRelationship>;
22
- /**
23
- * Get heading level from paragraph element
24
- */
25
- export declare function getHeadingLevelFromParagraph(paragraph: Element): number | null;
@@ -1,71 +0,0 @@
1
- /**
2
- * XML Parser Utilities
3
- * Helper functions for parsing DOCX XML content
4
- */
5
- import { createRequire } from 'module';
6
- const require = createRequire(import.meta.url);
7
- const { DOMParser } = require('@xmldom/xmldom');
8
- /**
9
- * Get all element children of a node
10
- */
11
- export function getElementChildren(node) {
12
- const children = [];
13
- for (let i = 0; i < node.childNodes.length; i++) {
14
- const child = node.childNodes[i];
15
- if (child.nodeType === 1) { // ELEMENT_NODE
16
- children.push(child);
17
- }
18
- }
19
- return children;
20
- }
21
- /**
22
- * Get attribute value, checking both direct and namespaced attributes
23
- */
24
- export function getAttributeValue(node, name) {
25
- return node.getAttribute(name) || node.getAttribute(`w:${name}`) || null;
26
- }
27
- /**
28
- * Parse XML string to Document
29
- */
30
- export function parseXml(xml) {
31
- const parser = new DOMParser();
32
- return parser.parseFromString(xml, 'application/xml');
33
- }
34
- /**
35
- * Extract relationship map from relationships XML
36
- */
37
- export function extractRelationshipMap(relsXml) {
38
- const relMap = new Map();
39
- if (!relsXml)
40
- return relMap;
41
- const relDoc = parseXml(relsXml);
42
- const rels = relDoc.getElementsByTagName('Relationship');
43
- for (let i = 0; i < rels.length; i++) {
44
- const rel = rels[i];
45
- const id = rel.getAttribute('Id');
46
- const type = rel.getAttribute('Type') || '';
47
- const target = rel.getAttribute('Target') || '';
48
- if (id && target) {
49
- relMap.set(id, { target, type });
50
- }
51
- }
52
- return relMap;
53
- }
54
- /**
55
- * Get heading level from paragraph element
56
- */
57
- export function getHeadingLevelFromParagraph(paragraph) {
58
- const pPr = paragraph.getElementsByTagName('w:pPr')[0];
59
- if (!pPr)
60
- return null;
61
- const pStyle = pPr.getElementsByTagName('w:pStyle')[0];
62
- if (!pStyle)
63
- return null;
64
- const styleVal = getAttributeValue(pStyle, 'val');
65
- if (!styleVal)
66
- return null;
67
- const match = styleVal.match(/heading\s*([1-6])/i);
68
- if (!match)
69
- return null;
70
- return Number(match[1]);
71
- }