@wonderwhy-er/desktop-commander 0.2.38 → 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 (364) hide show
  1. package/README.md +53 -2
  2. package/dist/handlers/filesystem-handlers.d.ts +5 -0
  3. package/dist/handlers/filesystem-handlers.js +14 -2
  4. package/dist/remote-device/desktop-commander-integration.js +1 -1
  5. package/dist/search-manager.js +31 -38
  6. package/dist/server.js +8 -3
  7. package/dist/terminal-manager.js +4 -2
  8. package/dist/tools/edit.js +34 -1
  9. package/dist/tools/filesystem.js +91 -3
  10. package/dist/tools/improved-process-tools.js +2 -1
  11. package/dist/ui/config-editor/app.js +840 -0
  12. package/dist/ui/config-editor/array-modal.d.ts +19 -0
  13. package/dist/ui/config-editor/array-modal.js +185 -0
  14. package/dist/ui/config-editor/config-editor-runtime.js +65 -14096
  15. package/dist/ui/config-editor/main.js +2 -0
  16. package/dist/ui/config-editor/src/App.d.ts +43 -0
  17. package/dist/ui/config-editor/src/components/layout.d.ts +4 -0
  18. package/dist/ui/config-editor/src/components/layout.js +83 -0
  19. package/dist/ui/config-editor/src/components/toolbar.d.ts +1 -0
  20. package/dist/ui/config-editor/src/components/toolbar.js +21 -0
  21. package/dist/ui/config-editor/src/config-values.d.ts +6 -0
  22. package/dist/ui/config-editor/src/config-values.js +61 -0
  23. package/dist/ui/config-editor/src/contracts.d.ts +14 -0
  24. package/dist/ui/config-editor/src/contracts.js +3 -0
  25. package/dist/ui/config-editor/src/directory-browser.d.ts +6 -0
  26. package/dist/ui/config-editor/src/directory-browser.js +71 -0
  27. package/dist/ui/config-editor/src/layout.d.ts +5 -0
  28. package/dist/ui/config-editor/src/layout.js +90 -0
  29. package/dist/ui/config-editor/src/parsing.d.ts +5 -0
  30. package/dist/ui/config-editor/src/parsing.js +50 -0
  31. package/dist/ui/config-editor/src/toolbar.d.ts +1 -0
  32. package/dist/ui/config-editor/src/toolbar.js +18 -0
  33. package/dist/ui/config-editor/src/types.d.ts +17 -0
  34. package/dist/ui/config-editor/src/types.js +3 -0
  35. package/dist/ui/config-editor/src/utils/config-values.d.ts +9 -0
  36. package/dist/ui/config-editor/src/utils/config-values.js +61 -0
  37. package/dist/ui/config-editor/src/utils/directory-browser.d.ts +31 -0
  38. package/dist/ui/config-editor/src/utils/directory-browser.js +201 -0
  39. package/dist/ui/config-editor/src/utils/parsing.d.ts +8 -0
  40. package/dist/ui/config-editor/src/utils/parsing.js +50 -0
  41. package/dist/ui/config-editor/styles.css +2 -1
  42. package/dist/ui/file-preview/{src/app.d.ts → app.d.ts} +1 -1
  43. package/dist/ui/file-preview/app.js +2020 -0
  44. package/dist/ui/file-preview/components/code-viewer.d.ts +6 -0
  45. package/dist/ui/file-preview/components/code-viewer.js +73 -0
  46. package/dist/ui/file-preview/components/highlighting.d.ts +2 -0
  47. package/dist/ui/file-preview/components/highlighting.js +54 -0
  48. package/dist/ui/file-preview/components/html-renderer.d.ts +5 -0
  49. package/dist/ui/file-preview/components/html-renderer.js +47 -0
  50. package/dist/ui/file-preview/components/markdown-renderer.d.ts +1 -0
  51. package/dist/ui/file-preview/components/markdown-renderer.js +67 -0
  52. package/dist/ui/file-preview/components/toolbar.d.ts +6 -0
  53. package/dist/ui/file-preview/components/toolbar.js +75 -0
  54. package/dist/ui/file-preview/image-preview.d.ts +3 -0
  55. package/dist/ui/file-preview/image-preview.js +21 -0
  56. package/dist/ui/file-preview/main.js +5 -0
  57. package/dist/ui/file-preview/markdown/editor.d.ts +36 -0
  58. package/dist/ui/file-preview/markdown/editor.js +643 -0
  59. package/dist/ui/file-preview/markdown/linking.d.ts +9 -0
  60. package/dist/ui/file-preview/markdown/linking.js +210 -0
  61. package/dist/ui/file-preview/markdown/outline.d.ts +7 -0
  62. package/dist/ui/file-preview/markdown/outline.js +40 -0
  63. package/dist/ui/file-preview/markdown/preview.d.ts +8 -0
  64. package/dist/ui/file-preview/markdown/preview.js +33 -0
  65. package/dist/ui/file-preview/markdown/slugify.d.ts +3 -0
  66. package/dist/ui/file-preview/markdown/slugify.js +31 -0
  67. package/dist/ui/file-preview/markdown/toc.d.ts +11 -0
  68. package/dist/ui/file-preview/markdown/toc.js +75 -0
  69. package/dist/ui/file-preview/markdown/utils.d.ts +1 -0
  70. package/dist/ui/file-preview/markdown/utils.js +15 -0
  71. package/dist/ui/file-preview/markdown/workspace-controller.d.ts +25 -0
  72. package/dist/ui/file-preview/markdown/workspace-controller.js +40 -0
  73. package/dist/ui/file-preview/preview-runtime.js +384 -26533
  74. package/dist/ui/file-preview/shared/preview-file-types.d.ts +1 -1
  75. package/dist/ui/file-preview/src/App.d.ts +4 -0
  76. package/dist/ui/file-preview/src/App.js +564 -0
  77. package/dist/ui/file-preview/src/components/CodeViewer.d.ts +6 -0
  78. package/dist/ui/file-preview/src/components/CodeViewer.js +60 -0
  79. package/dist/ui/file-preview/src/components/HtmlRenderer.d.ts +8 -0
  80. package/dist/ui/file-preview/src/components/HtmlRenderer.js +45 -0
  81. package/dist/ui/file-preview/src/components/MarkdownRenderer.d.ts +1 -0
  82. package/dist/ui/file-preview/src/components/MarkdownRenderer.js +15 -0
  83. package/dist/ui/file-preview/src/components/editor-toolbar.d.ts +15 -0
  84. package/dist/ui/file-preview/src/components/editor-toolbar.js +384 -0
  85. package/dist/ui/file-preview/src/components/markdown-editor.d.ts +29 -0
  86. package/dist/ui/file-preview/src/components/markdown-editor.js +535 -0
  87. package/dist/ui/file-preview/src/components/markdown-renderer.js +47 -9
  88. package/dist/ui/file-preview/src/directory-controller.d.ts +8 -0
  89. package/dist/ui/file-preview/src/directory-controller.js +233 -0
  90. package/dist/ui/file-preview/src/document-layout.d.ts +20 -0
  91. package/dist/ui/file-preview/src/document-layout.js +109 -0
  92. package/dist/ui/file-preview/src/document-outline.d.ts +17 -0
  93. package/dist/ui/file-preview/src/document-outline.js +97 -0
  94. package/dist/ui/file-preview/src/document-workspace.d.ts +19 -0
  95. package/dist/ui/file-preview/src/document-workspace.js +33 -0
  96. package/dist/ui/file-preview/src/file-type-handlers.d.ts +10 -0
  97. package/dist/ui/file-preview/src/file-type-handlers.js +98 -0
  98. package/dist/ui/file-preview/src/host/external-actions.d.ts +19 -0
  99. package/dist/ui/file-preview/src/host/external-actions.js +94 -0
  100. package/dist/ui/file-preview/src/host/selection-context.d.ts +9 -0
  101. package/dist/ui/file-preview/src/host/selection-context.js +106 -0
  102. package/dist/ui/file-preview/src/markdown/block-merge.d.ts +25 -0
  103. package/dist/ui/file-preview/src/markdown/block-merge.js +86 -0
  104. package/dist/ui/file-preview/src/markdown/conflict-dialog.d.ts +40 -0
  105. package/dist/ui/file-preview/src/markdown/conflict-dialog.js +163 -0
  106. package/dist/ui/file-preview/src/markdown/controller.d.ts +38 -0
  107. package/dist/ui/file-preview/src/markdown/controller.js +921 -0
  108. package/dist/ui/file-preview/src/markdown/editor.d.ts +35 -0
  109. package/dist/ui/file-preview/src/markdown/editor.js +691 -0
  110. package/dist/ui/file-preview/src/markdown/link-modal.d.ts +13 -0
  111. package/dist/ui/file-preview/src/markdown/link-modal.js +213 -0
  112. package/dist/ui/file-preview/src/markdown/linking.d.ts +16 -0
  113. package/dist/ui/file-preview/src/markdown/linking.js +228 -0
  114. package/dist/ui/file-preview/src/markdown/outline.d.ts +2 -0
  115. package/dist/ui/file-preview/src/markdown/outline.js +16 -0
  116. package/dist/ui/file-preview/src/markdown/parser.d.ts +30 -0
  117. package/dist/ui/file-preview/src/markdown/parser.js +38 -0
  118. package/dist/ui/file-preview/src/markdown/preview.d.ts +1 -0
  119. package/dist/ui/file-preview/src/markdown/preview.js +20 -0
  120. package/dist/ui/file-preview/src/markdown/raw-editor.d.ts +8 -0
  121. package/dist/ui/file-preview/src/markdown/raw-editor.js +61 -0
  122. package/dist/ui/file-preview/src/markdown/selection-toolbar.d.ts +14 -0
  123. package/dist/ui/file-preview/src/markdown/selection-toolbar.js +128 -0
  124. package/dist/ui/file-preview/src/markdown/slugify.d.ts +3 -0
  125. package/dist/ui/file-preview/src/markdown/slugify.js +31 -0
  126. package/dist/ui/file-preview/src/markdown/toc.d.ts +11 -0
  127. package/dist/ui/file-preview/src/markdown/toc.js +75 -0
  128. package/dist/ui/file-preview/src/markdown/utils.d.ts +1 -0
  129. package/dist/ui/file-preview/src/markdown/utils.js +15 -0
  130. package/dist/ui/file-preview/src/markdown-workspace/editor.d.ts +36 -0
  131. package/dist/ui/file-preview/src/markdown-workspace/editor.js +643 -0
  132. package/dist/ui/file-preview/src/markdown-workspace/linking.d.ts +9 -0
  133. package/dist/ui/file-preview/src/markdown-workspace/linking.js +210 -0
  134. package/dist/ui/file-preview/src/markdown-workspace/outline.d.ts +7 -0
  135. package/dist/ui/file-preview/src/markdown-workspace/outline.js +40 -0
  136. package/dist/ui/file-preview/src/markdown-workspace/preview.d.ts +8 -0
  137. package/dist/ui/file-preview/src/markdown-workspace/preview.js +33 -0
  138. package/dist/ui/file-preview/src/markdown-workspace/slugify.d.ts +3 -0
  139. package/dist/ui/file-preview/src/markdown-workspace/slugify.js +31 -0
  140. package/dist/ui/file-preview/src/markdown-workspace/toc.d.ts +11 -0
  141. package/dist/ui/file-preview/src/markdown-workspace/toc.js +75 -0
  142. package/dist/ui/file-preview/src/markdown-workspace/utils.d.ts +1 -0
  143. package/dist/ui/file-preview/src/markdown-workspace/utils.js +15 -0
  144. package/dist/ui/file-preview/src/markdown-workspace/workspace-controller.d.ts +25 -0
  145. package/dist/ui/file-preview/src/markdown-workspace/workspace-controller.js +40 -0
  146. package/dist/ui/file-preview/src/model.d.ts +34 -0
  147. package/dist/ui/file-preview/src/panel-actions.d.ts +17 -0
  148. package/dist/ui/file-preview/src/panel-actions.js +182 -0
  149. package/dist/ui/file-preview/src/path-utils.d.ts +6 -0
  150. package/dist/ui/file-preview/src/path-utils.js +64 -0
  151. package/dist/ui/file-preview/src/payload-utils.d.ts +11 -0
  152. package/dist/ui/file-preview/src/payload-utils.js +94 -0
  153. package/dist/ui/file-preview/styles.css +1066 -233
  154. package/dist/ui/file-preview/types.d.ts +1 -0
  155. package/dist/ui/server-integration.d.ts +13 -0
  156. package/dist/ui/server-integration.js +31 -0
  157. package/dist/ui/shared/ToolHeader.d.ts +9 -0
  158. package/dist/ui/shared/ToolHeader.js +29 -0
  159. package/dist/ui/shared/app-bootstrap.d.ts +9 -0
  160. package/dist/ui/shared/app-bootstrap.js +15 -0
  161. package/dist/ui/shared/guards.d.ts +1 -0
  162. package/dist/ui/shared/guards.js +3 -0
  163. package/dist/ui/shared/host-lifecycle.d.ts +1 -0
  164. package/dist/ui/shared/host-lifecycle.js +8 -2
  165. package/dist/ui/shared/widget-state.d.ts +6 -1
  166. package/dist/ui/shared/widget-state.js +102 -4
  167. package/dist/utils/files/base.d.ts +2 -0
  168. package/dist/utils/open-browser.js +1 -1
  169. package/dist/utils/ui-call-context.d.ts +8 -0
  170. package/dist/utils/ui-call-context.js +72 -0
  171. package/dist/version.d.ts +1 -1
  172. package/dist/version.js +1 -1
  173. package/package.json +6 -1
  174. package/dist/data/spec-kit-prompts.json +0 -123
  175. package/dist/handlers/macos-control-handlers.d.ts +0 -16
  176. package/dist/handlers/macos-control-handlers.js +0 -81
  177. package/dist/handlers/node-handlers.d.ts +0 -6
  178. package/dist/handlers/node-handlers.js +0 -73
  179. package/dist/handlers/test-crash-handler.d.ts +0 -11
  180. package/dist/handlers/test-crash-handler.js +0 -26
  181. package/dist/http-index.d.ts +0 -45
  182. package/dist/http-index.js +0 -51
  183. package/dist/http-server-auto-tunnel.js +0 -667
  184. package/dist/http-server-named-tunnel.d.ts +0 -2
  185. package/dist/http-server-named-tunnel.js +0 -167
  186. package/dist/http-server-tunnel.d.ts +0 -2
  187. package/dist/http-server-tunnel.js +0 -111
  188. package/dist/http-server.d.ts +0 -2
  189. package/dist/http-server.js +0 -270
  190. package/dist/index-oauth.d.ts +0 -2
  191. package/dist/index-oauth.js +0 -201
  192. package/dist/lib.d.ts +0 -10
  193. package/dist/lib.js +0 -10
  194. package/dist/oauth/auth-middleware.d.ts +0 -20
  195. package/dist/oauth/auth-middleware.js +0 -62
  196. package/dist/oauth/index.d.ts +0 -3
  197. package/dist/oauth/index.js +0 -3
  198. package/dist/oauth/oauth-manager.d.ts +0 -80
  199. package/dist/oauth/oauth-manager.js +0 -179
  200. package/dist/oauth/oauth-routes.d.ts +0 -3
  201. package/dist/oauth/oauth-routes.js +0 -377
  202. package/dist/oauth/provider.d.ts +0 -22
  203. package/dist/oauth/provider.js +0 -124
  204. package/dist/oauth/server.d.ts +0 -18
  205. package/dist/oauth/server.js +0 -160
  206. package/dist/oauth/types.d.ts +0 -54
  207. package/dist/oauth/types.js +0 -2
  208. package/dist/remote-device/templates/auth-success.d.ts +0 -1
  209. package/dist/remote-device/templates/auth-success.js +0 -30
  210. package/dist/setup.log +0 -275
  211. package/dist/test-setup.js +0 -14
  212. package/dist/tools/docx/builders/html-builder.d.ts +0 -17
  213. package/dist/tools/docx/builders/html-builder.js +0 -92
  214. package/dist/tools/docx/builders/image.d.ts +0 -14
  215. package/dist/tools/docx/builders/image.js +0 -84
  216. package/dist/tools/docx/builders/index.d.ts +0 -11
  217. package/dist/tools/docx/builders/index.js +0 -11
  218. package/dist/tools/docx/builders/markdown-builder.d.ts +0 -2
  219. package/dist/tools/docx/builders/markdown-builder.js +0 -260
  220. package/dist/tools/docx/builders/paragraph.d.ts +0 -12
  221. package/dist/tools/docx/builders/paragraph.js +0 -29
  222. package/dist/tools/docx/builders/table.d.ts +0 -10
  223. package/dist/tools/docx/builders/table.js +0 -138
  224. package/dist/tools/docx/builders/utils.d.ts +0 -5
  225. package/dist/tools/docx/builders/utils.js +0 -18
  226. package/dist/tools/docx/constants.d.ts +0 -32
  227. package/dist/tools/docx/constants.js +0 -61
  228. package/dist/tools/docx/converters/markdown-to-html.d.ts +0 -17
  229. package/dist/tools/docx/converters/markdown-to-html.js +0 -111
  230. package/dist/tools/docx/create.d.ts +0 -21
  231. package/dist/tools/docx/create.js +0 -386
  232. package/dist/tools/docx/dom.d.ts +0 -139
  233. package/dist/tools/docx/dom.js +0 -448
  234. package/dist/tools/docx/errors.d.ts +0 -28
  235. package/dist/tools/docx/errors.js +0 -48
  236. package/dist/tools/docx/extractors/images.d.ts +0 -14
  237. package/dist/tools/docx/extractors/images.js +0 -40
  238. package/dist/tools/docx/extractors/metadata.d.ts +0 -14
  239. package/dist/tools/docx/extractors/metadata.js +0 -64
  240. package/dist/tools/docx/extractors/sections.d.ts +0 -14
  241. package/dist/tools/docx/extractors/sections.js +0 -61
  242. package/dist/tools/docx/html.d.ts +0 -17
  243. package/dist/tools/docx/html.js +0 -111
  244. package/dist/tools/docx/index.d.ts +0 -10
  245. package/dist/tools/docx/index.js +0 -10
  246. package/dist/tools/docx/markdown.d.ts +0 -84
  247. package/dist/tools/docx/markdown.js +0 -507
  248. package/dist/tools/docx/modify.d.ts +0 -28
  249. package/dist/tools/docx/modify.js +0 -271
  250. package/dist/tools/docx/operations/handlers/index.d.ts +0 -39
  251. package/dist/tools/docx/operations/handlers/index.js +0 -152
  252. package/dist/tools/docx/operations/html-manipulator.d.ts +0 -24
  253. package/dist/tools/docx/operations/html-manipulator.js +0 -352
  254. package/dist/tools/docx/operations/index.d.ts +0 -14
  255. package/dist/tools/docx/operations/index.js +0 -61
  256. package/dist/tools/docx/operations/operation-handlers.d.ts +0 -3
  257. package/dist/tools/docx/operations/operation-handlers.js +0 -67
  258. package/dist/tools/docx/operations/preprocessor.d.ts +0 -14
  259. package/dist/tools/docx/operations/preprocessor.js +0 -44
  260. package/dist/tools/docx/operations/xml-replacer.d.ts +0 -9
  261. package/dist/tools/docx/operations/xml-replacer.js +0 -35
  262. package/dist/tools/docx/operations.d.ts +0 -13
  263. package/dist/tools/docx/operations.js +0 -13
  264. package/dist/tools/docx/ops/delete-paragraph-at-body-index.d.ts +0 -11
  265. package/dist/tools/docx/ops/delete-paragraph-at-body-index.js +0 -23
  266. package/dist/tools/docx/ops/header-replace-text-exact.d.ts +0 -13
  267. package/dist/tools/docx/ops/header-replace-text-exact.js +0 -55
  268. package/dist/tools/docx/ops/index.d.ts +0 -17
  269. package/dist/tools/docx/ops/index.js +0 -70
  270. package/dist/tools/docx/ops/insert-image-after-text.d.ts +0 -24
  271. package/dist/tools/docx/ops/insert-image-after-text.js +0 -128
  272. package/dist/tools/docx/ops/insert-paragraph-after-text.d.ts +0 -12
  273. package/dist/tools/docx/ops/insert-paragraph-after-text.js +0 -74
  274. package/dist/tools/docx/ops/insert-table-after-text.d.ts +0 -19
  275. package/dist/tools/docx/ops/insert-table-after-text.js +0 -57
  276. package/dist/tools/docx/ops/replace-hyperlink-url.d.ts +0 -12
  277. package/dist/tools/docx/ops/replace-hyperlink-url.js +0 -37
  278. package/dist/tools/docx/ops/replace-paragraph-at-body-index.d.ts +0 -9
  279. package/dist/tools/docx/ops/replace-paragraph-at-body-index.js +0 -25
  280. package/dist/tools/docx/ops/replace-paragraph-text-exact.d.ts +0 -21
  281. package/dist/tools/docx/ops/replace-paragraph-text-exact.js +0 -36
  282. package/dist/tools/docx/ops/replace-table-cell-text.d.ts +0 -25
  283. package/dist/tools/docx/ops/replace-table-cell-text.js +0 -85
  284. package/dist/tools/docx/ops/set-color-for-paragraph-exact.d.ts +0 -9
  285. package/dist/tools/docx/ops/set-color-for-paragraph-exact.js +0 -24
  286. package/dist/tools/docx/ops/set-color-for-style.d.ts +0 -13
  287. package/dist/tools/docx/ops/set-color-for-style.js +0 -31
  288. package/dist/tools/docx/ops/set-paragraph-style-at-body-index.d.ts +0 -8
  289. package/dist/tools/docx/ops/set-paragraph-style-at-body-index.js +0 -57
  290. package/dist/tools/docx/ops/table-set-cell-text.d.ts +0 -9
  291. package/dist/tools/docx/ops/table-set-cell-text.js +0 -40
  292. package/dist/tools/docx/parsers/image-extractor.d.ts +0 -18
  293. package/dist/tools/docx/parsers/image-extractor.js +0 -61
  294. package/dist/tools/docx/parsers/index.d.ts +0 -9
  295. package/dist/tools/docx/parsers/index.js +0 -9
  296. package/dist/tools/docx/parsers/paragraph-parser.d.ts +0 -2
  297. package/dist/tools/docx/parsers/paragraph-parser.js +0 -88
  298. package/dist/tools/docx/parsers/table-parser.d.ts +0 -9
  299. package/dist/tools/docx/parsers/table-parser.js +0 -72
  300. package/dist/tools/docx/parsers/xml-parser.d.ts +0 -25
  301. package/dist/tools/docx/parsers/xml-parser.js +0 -71
  302. package/dist/tools/docx/parsers/zip-reader.d.ts +0 -23
  303. package/dist/tools/docx/parsers/zip-reader.js +0 -52
  304. package/dist/tools/docx/read.d.ts +0 -27
  305. package/dist/tools/docx/read.js +0 -308
  306. package/dist/tools/docx/relationships.d.ts +0 -22
  307. package/dist/tools/docx/relationships.js +0 -76
  308. package/dist/tools/docx/structure.d.ts +0 -25
  309. package/dist/tools/docx/structure.js +0 -102
  310. package/dist/tools/docx/styled-html-parser.d.ts +0 -23
  311. package/dist/tools/docx/styled-html-parser.js +0 -1262
  312. package/dist/tools/docx/types.d.ts +0 -213
  313. package/dist/tools/docx/types.js +0 -5
  314. package/dist/tools/docx/utils/escaping.d.ts +0 -13
  315. package/dist/tools/docx/utils/escaping.js +0 -26
  316. package/dist/tools/docx/utils/images.d.ts +0 -9
  317. package/dist/tools/docx/utils/images.js +0 -26
  318. package/dist/tools/docx/utils/index.d.ts +0 -12
  319. package/dist/tools/docx/utils/index.js +0 -17
  320. package/dist/tools/docx/utils/markdown.d.ts +0 -13
  321. package/dist/tools/docx/utils/markdown.js +0 -32
  322. package/dist/tools/docx/utils/paths.d.ts +0 -15
  323. package/dist/tools/docx/utils/paths.js +0 -27
  324. package/dist/tools/docx/utils/versioning.d.ts +0 -25
  325. package/dist/tools/docx/utils/versioning.js +0 -55
  326. package/dist/tools/docx/utils.d.ts +0 -101
  327. package/dist/tools/docx/utils.js +0 -299
  328. package/dist/tools/docx/validate.d.ts +0 -33
  329. package/dist/tools/docx/validate.js +0 -49
  330. package/dist/tools/docx/validators.d.ts +0 -13
  331. package/dist/tools/docx/validators.js +0 -40
  332. package/dist/tools/docx/write.d.ts +0 -17
  333. package/dist/tools/docx/write.js +0 -88
  334. package/dist/tools/docx/xml-view-test.js +0 -63
  335. package/dist/tools/docx/xml-view.d.ts +0 -56
  336. package/dist/tools/docx/xml-view.js +0 -169
  337. package/dist/tools/docx/zip.d.ts +0 -21
  338. package/dist/tools/docx/zip.js +0 -35
  339. package/dist/tools/macos-control/ax-adapter.d.ts +0 -55
  340. package/dist/tools/macos-control/ax-adapter.js +0 -438
  341. package/dist/tools/macos-control/cdp-adapter.d.ts +0 -23
  342. package/dist/tools/macos-control/cdp-adapter.js +0 -402
  343. package/dist/tools/macos-control/orchestrator.d.ts +0 -77
  344. package/dist/tools/macos-control/orchestrator.js +0 -136
  345. package/dist/tools/macos-control/role-aliases.d.ts +0 -5
  346. package/dist/tools/macos-control/role-aliases.js +0 -34
  347. package/dist/tools/macos-control/types.d.ts +0 -129
  348. package/dist/tools/pdf-processor.d.ts +0 -1
  349. package/dist/tools/pdf-processor.js +0 -3
  350. package/dist/tools/search.d.ts +0 -32
  351. package/dist/tools/search.js +0 -202
  352. package/dist/ui/file-preview/src/app.js +0 -714
  353. package/dist/utils/crash-logger.d.ts +0 -18
  354. package/dist/utils/crash-logger.js +0 -44
  355. package/dist/utils/dedent.d.ts +0 -8
  356. package/dist/utils/dedent.js +0 -38
  357. /package/dist/ui/config-editor/{src/app.d.ts → app.d.ts} +0 -0
  358. /package/dist/{http-server-auto-tunnel.d.ts → ui/config-editor/main.d.ts} +0 -0
  359. /package/dist/ui/config-editor/src/{app.js → App.js} +0 -0
  360. /package/dist/{test-docx.d.ts → ui/file-preview/main.d.ts} +0 -0
  361. /package/dist/ui/file-preview/src/components/{toolbar.d.ts → Toolbar.d.ts} +0 -0
  362. /package/dist/ui/file-preview/src/components/{toolbar.js → Toolbar.js} +0 -0
  363. /package/dist/{tools/docx/xml-view-test.d.ts → ui/file-preview/src/model.js} +0 -0
  364. /package/dist/{tools/macos-control → ui/file-preview}/types.js +0 -0
@@ -50,7 +50,8 @@ body {
50
50
 
51
51
  body.dc-ready {
52
52
  max-height: none;
53
- overflow: visible;
53
+ overflow: auto;
54
+ overflow: clip;
54
55
  }
55
56
 
56
57
  #app {
@@ -139,212 +140,6 @@ body.dc-ready {
139
140
  }
140
141
 
141
142
 
142
- /*
143
- * Reusable styles for the shared tool header component. It provides consistent spacing, alignment, and action presentation across apps.
144
- */
145
- .toolbar {
146
- display: flex;
147
- gap: 10px;
148
- align-items: center;
149
- justify-content: space-between;
150
- padding: 8px 10px;
151
- border: 1px solid var(--border);
152
- border-radius: 12px;
153
- background: var(--panel);
154
- margin-bottom: 0;
155
- box-shadow: var(--shadow-sm);
156
- }
157
-
158
- .meta {
159
- display: flex;
160
- align-items: center;
161
- justify-content: space-between;
162
- gap: 12px;
163
- min-width: 0;
164
- width: 100%;
165
- flex: 1 1 auto;
166
- }
167
-
168
- .meta-main {
169
- display: flex;
170
- align-items: center;
171
- gap: 10px;
172
- min-width: 0;
173
- }
174
-
175
- .file-pill {
176
- width: 52px;
177
- height: 20px;
178
- border-radius: 6px;
179
- display: inline-flex;
180
- align-items: center;
181
- justify-content: center;
182
- font-size: 10px;
183
- font-weight: 700;
184
- letter-spacing: 0.2px;
185
- background: transparent;
186
- color: var(--text);
187
- border: 1px solid var(--border);
188
- flex-shrink: 0;
189
- text-align: center;
190
- }
191
-
192
- .file-pill--md {
193
- background: transparent;
194
- color: var(--text);
195
- border-color: var(--border);
196
- }
197
-
198
- .file-pill--html {
199
- background: transparent;
200
- color: var(--text);
201
- border-color: var(--border);
202
- }
203
-
204
- .file-pill--json {
205
- background: transparent;
206
- color: var(--text);
207
- border-color: var(--border);
208
- }
209
-
210
- .file-pill--text {
211
- background: transparent;
212
- color: var(--muted);
213
- border-color: var(--border);
214
- }
215
-
216
- .meta-text {
217
- display: flex;
218
- flex-direction: row;
219
- align-items: baseline;
220
- min-width: 0;
221
- gap: 8px;
222
- }
223
-
224
- .filename {
225
- font-weight: 600;
226
- white-space: nowrap;
227
- overflow: hidden;
228
- text-overflow: ellipsis;
229
- max-width: 460px;
230
- font-size: 12px;
231
- }
232
-
233
- .filepath {
234
- color: var(--muted);
235
- font-size: 10px;
236
- white-space: nowrap;
237
- overflow: hidden;
238
- text-overflow: ellipsis;
239
- max-width: 360px;
240
- }
241
-
242
- .meta-badges {
243
- display: flex;
244
- align-items: center;
245
- gap: 6px;
246
- flex-shrink: 0;
247
- }
248
-
249
- .badge {
250
- border-radius: 999px;
251
- border: 1px solid var(--border);
252
- color: var(--muted);
253
- padding: 2px 7px;
254
- font-size: 10px;
255
- background: var(--panel-subtle);
256
- }
257
-
258
- .actions {
259
- display: flex;
260
- align-items: center;
261
- gap: 6px;
262
- padding-left: 8px;
263
- border-left: 1px solid var(--border);
264
- flex: 0 0 auto;
265
- }
266
-
267
- .icon-button {
268
- width: 30px;
269
- height: 30px;
270
- border: 1px solid var(--border);
271
- background: var(--panel);
272
- color: var(--muted);
273
- border-radius: 9px;
274
- padding: 0;
275
- display: inline-flex;
276
- align-items: center;
277
- justify-content: center;
278
- cursor: pointer;
279
- transition: transform 120ms ease, box-shadow 120ms ease, background 120ms ease;
280
- }
281
-
282
- .icon-button svg {
283
- width: 14px;
284
- height: 14px;
285
- fill: currentColor;
286
- }
287
-
288
- .icon-button:hover {
289
- background: var(--panel-muted);
290
- border-color: var(--border);
291
- box-shadow: var(--shadow-sm);
292
- }
293
-
294
- .icon-button:active {
295
- transform: translateY(1px);
296
- }
297
-
298
- .icon-button:disabled {
299
- cursor: not-allowed;
300
- opacity: 0.6;
301
- }
302
-
303
- .icon-button:focus-visible {
304
- outline: 2px solid var(--border);
305
- outline-offset: 2px;
306
- }
307
-
308
- .icon-button--secondary {
309
- border-color: var(--border);
310
- background: var(--panel-subtle);
311
- color: var(--text-secondary);
312
- }
313
-
314
- @media (max-width: 720px) {
315
- .shell {
316
- padding: 12px;
317
- }
318
-
319
- .toolbar {
320
- gap: 8px;
321
- }
322
-
323
- .meta {
324
- gap: 8px;
325
- }
326
-
327
- .actions {
328
- padding-left: 6px;
329
- }
330
-
331
- .meta-badges {
332
- display: none;
333
- }
334
-
335
- .meta-text {
336
- flex-direction: column;
337
- align-items: flex-start;
338
- gap: 0;
339
- }
340
-
341
- .filename,
342
- .filepath {
343
- max-width: 100%;
344
- }
345
- }
346
-
347
-
348
143
  /*
349
144
  * App-specific styling for File Preview — tuned to blend with Claude's UI.
350
145
  */
@@ -359,7 +154,7 @@ body.dc-ready {
359
154
  --hljs-attr: var(--color-text-info, light-dark(#2563eb, #60a5fa));
360
155
  --hljs-built-in: light-dark(#6366f1, #818cf8);
361
156
  --hljs-tag: var(--color-text-info, light-dark(#0ea5a8, #67e8f9));
362
- --content-height: min(82vh, 920px);
157
+ --content-height: 920px;
363
158
  --markdown-text: var(--text);
364
159
  --markdown-muted: var(--text-secondary);
365
160
  --inline-code-bg: var(--panel-subtle);
@@ -368,6 +163,7 @@ body.dc-ready {
368
163
  --notice-bg: var(--panel-subtle);
369
164
  --notice-border: var(--border);
370
165
  --notice-text: var(--text-secondary);
166
+ --toc-rail-width: 320px;
371
167
  }
372
168
 
373
169
  /* ── Panel (Claude-style card) ── */
@@ -387,6 +183,45 @@ body.dc-ready {
387
183
 
388
184
  /* When the host hides the summary row (hideSummaryRow: true), it means the host
389
185
  provides its own outer frame/card. Strip inner chrome so only content remains. */
186
+ html:has(.fullscreen) {
187
+ height: 100%;
188
+ }
189
+
190
+ html:has(.fullscreen) body {
191
+ height: 100%;
192
+ display: flex;
193
+ flex-direction: column;
194
+ }
195
+
196
+ html:has(.fullscreen) #app {
197
+ flex: 1;
198
+ display: flex;
199
+ flex-direction: column;
200
+ }
201
+
202
+ .tool-shell.fullscreen {
203
+ flex: 1;
204
+ display: flex;
205
+ flex-direction: column;
206
+ }
207
+
208
+ .tool-shell.fullscreen .panel {
209
+ margin-top: 0;
210
+ border: none;
211
+ border-radius: 0;
212
+ flex: 1;
213
+ display: flex;
214
+ flex-direction: column;
215
+ }
216
+
217
+ .tool-shell.fullscreen {
218
+ --content-height: 89vh;
219
+ }
220
+
221
+ .tool-shell.fullscreen .panel-content-wrapper {
222
+ flex: 1;
223
+ }
224
+
390
225
  .tool-shell.host-framed .compact-row { display: none; }
391
226
  .tool-shell.host-framed .panel {
392
227
  margin-top: 0;
@@ -394,8 +229,30 @@ body.dc-ready {
394
229
  border-radius: 0;
395
230
  background: transparent;
396
231
  }
397
- .tool-shell.host-framed .panel-topbar { display: none; }
232
+ .tool-shell.host-framed .panel-breadcrumb { display: none; }
398
233
  .tool-shell.host-framed .panel-footer { display: none; }
234
+ .tool-shell.host-framed .panel { position: relative; }
235
+ .tool-shell.host-framed .panel-topbar {
236
+ position: absolute;
237
+ top: 0;
238
+ right: 0;
239
+ z-index: 10;
240
+ width: auto;
241
+ opacity: 0;
242
+ transition: opacity 0.2s ease 1.5s;
243
+ pointer-events: none;
244
+ padding: 4px 8px;
245
+ gap: 6px;
246
+ background: var(--panel);
247
+ border-radius: 0 0 0 var(--border-radius-md, 6px);
248
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
249
+ }
250
+ .tool-shell.host-framed .panel:hover .panel-topbar,
251
+ .tool-shell.host-framed .panel:focus-within .panel-topbar {
252
+ opacity: 1;
253
+ pointer-events: auto;
254
+ transition: opacity 0.2s ease;
255
+ }
399
256
  .tool-shell.host-framed .panel-content-wrapper { max-height: none; overflow: hidden; }
400
257
  .tool-shell.host-framed .image-content { background: transparent; }
401
258
 
@@ -408,16 +265,19 @@ body.dc-ready {
408
265
  gap: 12px;
409
266
  padding: 10px 16px;
410
267
  border-bottom: 1px solid color-mix(in srgb, var(--border) 40%, transparent);
268
+ overflow: visible;
411
269
  }
412
270
 
413
271
  .panel-breadcrumb {
414
272
  font-size: 13px;
415
273
  color: var(--text-secondary);
274
+ direction: rtl;
275
+ text-align: left;
416
276
  white-space: nowrap;
417
277
  overflow: hidden;
418
278
  text-overflow: ellipsis;
419
- flex: 1 1 0;
420
- width: 0;
279
+ flex: 0 1 auto;
280
+ max-width: 50%;
421
281
  min-width: 0;
422
282
  }
423
283
 
@@ -458,12 +318,49 @@ body.dc-ready {
458
318
  background: var(--panel-subtle);
459
319
  }
460
320
 
321
+ .panel-action--primary {
322
+ color: var(--text);
323
+ background: color-mix(in srgb, var(--panel-subtle) 72%, var(--border) 28%);
324
+ }
325
+
326
+ .panel-action--primary:hover {
327
+ background: color-mix(in srgb, var(--panel-subtle) 58%, var(--border) 42%);
328
+ }
329
+
461
330
  .panel-action:disabled {
462
331
  opacity: 0.35;
463
332
  cursor: not-allowed;
464
333
  }
465
334
 
466
335
  .panel-action svg { flex-shrink: 0; opacity: 0.7; }
336
+
337
+ .panel-action[title] {
338
+ position: relative;
339
+ }
340
+
341
+ .panel-action[title]::after {
342
+ content: attr(title);
343
+ position: absolute;
344
+ bottom: -28px;
345
+ left: 50%;
346
+ transform: translateX(-50%);
347
+ padding: 3px 8px;
348
+ border-radius: 6px;
349
+ background: var(--panel);
350
+ color: var(--text);
351
+ font-size: 11px;
352
+ font-weight: 400;
353
+ white-space: nowrap;
354
+ pointer-events: none;
355
+ opacity: 0;
356
+ transition: opacity 150ms ease;
357
+ z-index: 10;
358
+ box-shadow: 0 2px 8px rgba(0,0,0,0.25);
359
+ }
360
+
361
+ .panel-action[title]:hover::after {
362
+ opacity: 1;
363
+ }
467
364
  .panel-action:hover svg { opacity: 1; }
468
365
 
469
366
  /* ── Footer ── */
@@ -485,41 +382,614 @@ body.dc-ready {
485
382
 
486
383
  /* ── Selection hint (floating tooltip near selection) ── */
487
384
 
488
- .selection-hint {
385
+ .selection-hint {
386
+ position: absolute;
387
+ z-index: 10;
388
+ padding: 4px 10px;
389
+ font-size: 11px;
390
+ color: var(--text-secondary);
391
+ background: var(--panel);
392
+ border: 1px solid color-mix(in srgb, var(--border) 50%, transparent);
393
+ border-radius: 6px;
394
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12);
395
+ white-space: nowrap;
396
+ pointer-events: none;
397
+ opacity: 0;
398
+ transition: opacity 150ms ease;
399
+ }
400
+
401
+ .selection-hint.visible {
402
+ opacity: 1;
403
+ }
404
+
405
+ /* ── Content areas ── */
406
+
407
+ .panel-content-wrapper {
408
+ max-height: var(--content-height);
409
+ overflow: auto;
410
+ position: relative;
411
+ }
412
+
413
+ .panel-content {
414
+ min-height: 0;
415
+ }
416
+
417
+ .source-content .code-viewer { height: 100%; overflow: auto; }
418
+ .html-content .html-rendered-frame { min-height: 300px; height: var(--content-height); }
419
+ .markdown-content { overflow: auto; padding: 0 4px 0 0; }
420
+
421
+ .markdown-content--workspace {
422
+ padding: 0;
423
+ overflow: visible;
424
+ }
425
+
426
+ .markdown-workspace {
427
+ display: flex;
428
+ background: transparent;
429
+ }
430
+
431
+ .markdown-workspace--edit {
432
+ min-height: min(70vh, 880px);
433
+ }
434
+
435
+ .markdown-workspace--with-toc {
436
+ align-items: stretch;
437
+ }
438
+
439
+ .markdown-workspace-main {
440
+ flex: 1 1 auto;
441
+ min-width: 0;
442
+ padding-left: 18px;
443
+ }
444
+
445
+ .markdown-workspace-main--editor {
446
+ display: flex;
447
+ min-height: min(70vh, 880px);
448
+ }
449
+
450
+ .markdown-editor-shell {
451
+ display: grid;
452
+ gap: 14px;
453
+ width: 100%;
454
+ padding: 20px;
455
+ position: relative;
456
+ }
457
+
458
+ .markdown-editor-mode-toggle {
459
+ position: relative;
460
+ display: inline-grid;
461
+ grid-template-columns: repeat(2, minmax(0, 1fr));
462
+ align-items: center;
463
+ gap: 4px;
464
+ padding: 3px 4.5px 3px 3px;
465
+ border-radius: 999px;
466
+ background: color-mix(in srgb, var(--panel-subtle) 72%, transparent);
467
+ border: 1px solid color-mix(in srgb, var(--border) 45%, transparent);
468
+ }
469
+
470
+ .markdown-editor-mode-toggle-indicator {
471
+ position: absolute;
472
+ top: 3px;
473
+ bottom: 3px;
474
+ left: 3px;
475
+ width: calc(50% - 3.5px);
476
+ border-radius: 999px;
477
+ background: color-mix(in srgb, var(--panel) 96%, transparent);
478
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
479
+ transition: transform 220ms cubic-bezier(0.22, 1, 0.36, 1), box-shadow 220ms ease, background-color 220ms ease;
480
+ pointer-events: none;
481
+ }
482
+
483
+ .markdown-editor-mode-toggle-indicator--markdown {
484
+ transform: translateX(calc(100% + 2.5px));
485
+ }
486
+
487
+ .markdown-editor-mode-option {
488
+ position: relative;
489
+ z-index: 1;
490
+ border: none;
491
+ background: transparent;
492
+ color: var(--text-secondary);
493
+ min-width: 0;
494
+ height: 32px;
495
+ padding: 0 12px;
496
+ border-radius: 999px;
497
+ display: inline-flex;
498
+ align-items: center;
499
+ justify-content: center;
500
+ gap: 6px;
501
+ font: inherit;
502
+ font-size: 12px;
503
+ cursor: pointer;
504
+ transition: color 180ms ease, opacity 180ms ease, transform 220ms cubic-bezier(0.22, 1, 0.36, 1);
505
+ }
506
+
507
+ .markdown-editor-mode-option.is-active {
508
+ color: var(--text);
509
+ transform: translateY(-0.5px);
510
+ }
511
+
512
+ .markdown-editor-mode-option span {
513
+ white-space: nowrap;
514
+ transition: opacity 180ms ease;
515
+ }
516
+
517
+ .markdown-editor-mode-option:not(.is-active) {
518
+ opacity: 0.82;
519
+ }
520
+
521
+ .markdown-editor-mode-option.is-active svg,
522
+ .markdown-editor-mode-option.is-active span {
523
+ opacity: 1;
524
+ }
525
+
526
+ .markdown-editor-pane {
527
+ display: flex;
528
+ flex-direction: column;
529
+ min-height: min(70vh, 840px);
530
+ overflow: visible;
531
+ background: transparent;
532
+ }
533
+
534
+ .markdown-editor-pane--raw {
535
+ max-width: none;
536
+ }
537
+
538
+ .markdown-editor-pane--markdown {
539
+ max-width: none;
540
+ }
541
+
542
+ .markdown-editor-context-menu {
543
+ display: flex;
544
+ flex-wrap: wrap;
545
+ align-items: center;
546
+ gap: 6px;
547
+ padding: 6px;
548
+ background: #171717;
549
+ border: 1px solid color-mix(in srgb, var(--border) 34%, transparent);
550
+ border-radius: 10px;
551
+ position: absolute;
552
+ z-index: 20;
553
+ box-shadow: 0 12px 32px rgba(0, 0, 0, 0.28);
554
+ }
555
+
556
+ .markdown-editor-context-menu[hidden] {
557
+ display: none;
558
+ }
559
+
560
+ .markdown-format-button {
561
+ border: none;
562
+ background: transparent;
563
+ color: rgba(255, 255, 255, 0.9);
564
+ border-radius: 6px;
565
+ width: 32px;
566
+ height: 32px;
567
+ padding: 0;
568
+ font: inherit;
569
+ font-size: 13px;
570
+ cursor: pointer;
571
+ white-space: nowrap;
572
+ display: inline-flex;
573
+ align-items: center;
574
+ justify-content: center;
575
+ }
576
+
577
+ .markdown-format-button:hover {
578
+ background: rgba(255, 255, 255, 0.14);
579
+ }
580
+
581
+ .markdown-format-button--swatch {
582
+ padding: 0;
583
+ }
584
+
585
+ .markdown-format-size {
586
+ display: inline-flex;
587
+ align-items: center;
588
+ justify-content: center;
589
+ height: 32px;
590
+ border-radius: 6px;
591
+ overflow: hidden;
592
+ background: rgba(255, 255, 255, 0.08);
593
+ }
594
+
595
+ .markdown-format-size select {
596
+ height: 32px;
597
+ border: none;
598
+ background: transparent;
599
+ color: rgba(255, 255, 255, 0.9);
600
+ padding: 0 8px;
601
+ font: inherit;
602
+ font-size: 12px;
603
+ outline: none;
604
+ }
605
+
606
+ .markdown-format-sep {
607
+ width: 1px;
608
+ height: 20px;
609
+ background: rgba(255, 255, 255, 0.14);
610
+ }
611
+
612
+ .markdown-link-modal {
613
+ position: fixed;
614
+ inset: 0;
615
+ display: flex;
616
+ align-items: center;
617
+ justify-content: center;
618
+ background: transparent;
619
+ z-index: 30;
620
+ }
621
+
622
+ .markdown-link-modal[hidden] {
623
+ display: none;
624
+ }
625
+
626
+ .markdown-link-modal-card {
627
+ width: min(420px, calc(100% - 32px));
628
+ background: var(--panel);
629
+ border: 1px solid color-mix(in srgb, var(--border) 45%, transparent);
630
+ border-radius: 14px;
631
+ padding: 14px;
632
+ box-shadow: 0 18px 44px rgba(15, 23, 42, 0.22);
633
+ }
634
+
635
+ .markdown-link-mode-tabs {
636
+ display: inline-flex;
637
+ gap: 6px;
638
+ margin-bottom: 12px;
639
+ }
640
+
641
+ .markdown-link-mode-tab {
642
+ border: 1px solid color-mix(in srgb, var(--border) 55%, transparent);
643
+ background: transparent;
644
+ color: var(--text-secondary);
645
+ border-radius: 999px;
646
+ padding: 7px 12px;
647
+ font: inherit;
648
+ font-size: 12px;
649
+ cursor: pointer;
650
+ }
651
+
652
+ .markdown-link-mode-tab.is-active {
653
+ color: var(--text);
654
+ background: color-mix(in srgb, var(--panel-subtle) 72%, var(--border) 28%);
655
+ }
656
+
657
+ .markdown-link-modal-label {
658
+ display: block;
659
+ margin-bottom: 8px;
660
+ font-size: 12px;
661
+ font-weight: 600;
662
+ color: var(--text-secondary);
663
+ }
664
+
665
+ .markdown-link-modal-input {
666
+ width: 100%;
667
+ border: 1px solid color-mix(in srgb, var(--border) 60%, transparent);
668
+ border-radius: 10px;
669
+ padding: 10px 12px;
670
+ font: inherit;
671
+ font-size: 13px;
672
+ color: var(--text);
673
+ background: color-mix(in srgb, var(--panel-subtle) 68%, transparent);
674
+ }
675
+
676
+ .markdown-link-modal-select {
677
+ appearance: none;
678
+ }
679
+
680
+ .markdown-link-results {
681
+ display: flex;
682
+ flex-direction: column;
683
+ gap: 6px;
684
+ max-height: 160px;
685
+ overflow: auto;
686
+ margin: 10px 0 12px;
687
+ }
688
+
689
+ .markdown-link-results-empty {
690
+ padding: 10px 12px;
691
+ font-size: 12px;
692
+ color: var(--text-secondary);
693
+ border: 1px dashed color-mix(in srgb, var(--border) 45%, transparent);
694
+ border-radius: 10px;
695
+ }
696
+
697
+ .markdown-link-result {
698
+ display: flex;
699
+ flex-direction: column;
700
+ align-items: flex-start;
701
+ gap: 4px;
702
+ width: 100%;
703
+ border: 1px solid color-mix(in srgb, var(--border) 45%, transparent);
704
+ background: transparent;
705
+ border-radius: 10px;
706
+ padding: 10px 12px;
707
+ cursor: pointer;
708
+ text-align: left;
709
+ }
710
+
711
+ .markdown-link-result.is-active {
712
+ background: color-mix(in srgb, var(--panel-subtle) 72%, var(--border) 28%);
713
+ }
714
+
715
+ .markdown-link-result-title {
716
+ font-size: 13px;
717
+ color: var(--text);
718
+ }
719
+
720
+ .markdown-link-result-path {
721
+ font-size: 11px;
722
+ color: var(--text-secondary);
723
+ }
724
+
725
+ .markdown-link-modal-actions {
726
+ display: flex;
727
+ justify-content: flex-end;
728
+ gap: 8px;
729
+ margin-top: 12px;
730
+ }
731
+
732
+ .markdown-link-modal-button {
733
+ border: 1px solid color-mix(in srgb, var(--border) 50%, transparent);
734
+ background: transparent;
735
+ color: var(--text-secondary);
736
+ border-radius: 10px;
737
+ padding: 8px 12px;
738
+ font: inherit;
739
+ font-size: 13px;
740
+ cursor: pointer;
741
+ }
742
+
743
+ .markdown-link-modal-button--primary {
744
+ color: var(--text);
745
+ background: color-mix(in srgb, var(--panel-subtle) 72%, var(--border) 28%);
746
+ }
747
+
748
+ .markdown-editor-copy-button {
749
+ display: inline-flex;
750
+ align-items: center;
751
+ gap: 5px;
752
+ background: none;
753
+ border: none;
754
+ border-radius: 8px;
755
+ padding: 5px 12px;
756
+ font-size: 13px;
757
+ font-weight: 500;
758
+ color: var(--muted);
759
+ cursor: pointer;
760
+ white-space: nowrap;
761
+ transition: color 150ms ease, background 150ms ease;
762
+ line-height: 1.4;
763
+ font-family: inherit;
764
+ }
765
+
766
+ .markdown-editor-copy-button span {
767
+ white-space: nowrap;
768
+ }
769
+
770
+ .markdown-editor-copy-button:hover {
771
+ color: var(--text);
772
+ }
773
+
774
+ .markdown-editor-copy-button[data-status="Copied!"] {
775
+ color: var(--text);
776
+ }
777
+
778
+ .markdown-editor-copy-button[data-status="Copy failed"] {
779
+ color: #b91c1c;
780
+ }
781
+
782
+ .panel-save-status {
783
+ padding: 4px 10px;
784
+ border-radius: 999px;
785
+ font-size: 12px;
786
+ font-weight: 400;
787
+ color: var(--muted);
788
+ background: none;
789
+ white-space: nowrap;
790
+ pointer-events: none;
791
+ line-height: 1;
792
+ }
793
+
794
+ .panel-save-status--saving {
795
+ color: var(--text);
796
+ }
797
+
798
+ .panel-save-status--saved {
799
+ color: var(--muted);
800
+ opacity: 0.7;
801
+ }
802
+
803
+ .panel-save-status--pending {
804
+ color: var(--muted);
805
+ }
806
+
807
+ .panel-topbar .markdown-editor-mode-toggle {
808
+ margin-left: 2px;
809
+ }
810
+
811
+ .markdown-toc-shell {
812
+ flex: 0 0 var(--toc-rail-width);
813
+ width: var(--toc-rail-width);
814
+ border-right: 1px solid color-mix(in srgb, var(--border) 18%, transparent);
815
+ background: color-mix(in srgb, var(--panel-subtle) 90%, transparent);
816
+ padding: 18px 14px 18px 16px;
817
+ display: flex;
818
+ flex-direction: column;
819
+ align-self: flex-start;
820
+ position: sticky;
821
+ top: 12px;
822
+ max-height: calc(100vh - 120px);
823
+ overflow: visible;
824
+ transition: flex-basis 0.2s ease, width 0.2s ease, padding 0.2s ease;
825
+ }
826
+
827
+ .markdown-toc-header {
828
+ display: flex;
829
+ align-items: center;
830
+ justify-content: space-between;
831
+ margin-bottom: 12px;
832
+ min-height: 20px;
833
+ }
834
+
835
+ .markdown-toc-title {
836
+ font-size: 11px;
837
+ font-weight: 700;
838
+ letter-spacing: 0.08em;
839
+ text-transform: uppercase;
840
+ color: var(--text-secondary);
841
+ }
842
+
843
+ .document-outline-toggle {
844
+ border: none;
845
+ background: transparent;
846
+ color: var(--text-secondary);
847
+ cursor: pointer;
848
+ width: 24px;
849
+ height: 24px;
850
+ padding: 0;
851
+ border-radius: 6px;
852
+ display: flex;
853
+ align-items: center;
854
+ justify-content: center;
855
+ flex-shrink: 0;
856
+ opacity: 0.5;
857
+ transition: opacity 0.15s, background 0.15s;
858
+ }
859
+ .document-outline-toggle:hover {
860
+ opacity: 1;
861
+ background: color-mix(in srgb, var(--border) 20%, transparent);
862
+ }
863
+
864
+ .markdown-toc-collapsed {
865
+ flex: 0 0 44px !important;
866
+ width: 44px !important;
867
+ padding: 12px 6px !important;
868
+ overflow: hidden;
869
+ background: transparent !important;
870
+ border-right: none !important;
871
+ }
872
+ .markdown-toc-collapsed .markdown-toc-header {
873
+ justify-content: center;
874
+ }
875
+ .markdown-toc-collapsed .markdown-toc-title,
876
+ .markdown-toc-collapsed .markdown-toc-nav {
877
+ display: none;
878
+ }
879
+ .markdown-toc-collapsed .document-outline-toggle {
880
+ width: 30px;
881
+ height: 30px;
882
+ border: 1px solid color-mix(in srgb, var(--border) 50%, transparent);
883
+ border-radius: 8px;
884
+ opacity: 0.7;
885
+ }
886
+
887
+ .markdown-toc-nav {
888
+ display: flex;
889
+ flex-direction: column;
890
+ gap: 4px;
891
+ overflow: auto;
892
+ min-height: 0;
893
+ }
894
+
895
+ .markdown-toc-link {
896
+ border: none;
897
+ background: transparent;
898
+ color: var(--text-secondary);
899
+ text-align: left;
900
+ font: inherit;
901
+ font-size: 13px;
902
+ line-height: 1.35;
903
+ padding: 6px 8px;
904
+ border-radius: 8px;
905
+ cursor: pointer;
906
+ }
907
+
908
+ .markdown-toc-link[data-level="2"] { padding-left: 16px; }
909
+ .markdown-toc-link[data-level="3"] { padding-left: 24px; }
910
+ .markdown-toc-link[data-level="4"] { padding-left: 32px; }
911
+ .markdown-toc-link[data-level="5"] { padding-left: 40px; }
912
+ .markdown-toc-link[data-level="6"] { padding-left: 48px; }
913
+
914
+ .markdown-toc-link:hover {
915
+ color: var(--text);
916
+ background: color-mix(in srgb, var(--panel) 72%, transparent);
917
+ }
918
+
919
+ .markdown-toc-link.is-active {
920
+ color: var(--text);
921
+ background: color-mix(in srgb, var(--panel) 82%, var(--border) 18%);
922
+ }
923
+
924
+ .markdown-link-popover {
489
925
  position: absolute;
490
926
  z-index: 10;
491
- padding: 4px 10px;
492
- font-size: 11px;
493
- color: var(--text-secondary);
927
+ display: flex;
928
+ align-items: center;
929
+ gap: 2px;
494
930
  background: var(--panel);
495
- border: 1px solid color-mix(in srgb, var(--border) 50%, transparent);
931
+ border: 1px solid var(--border);
932
+ border-radius: 8px;
933
+ padding: 4px;
934
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);
935
+ }
936
+ .markdown-link-popover[hidden] { display: none; }
937
+ .markdown-link-popover-btn {
938
+ border: none;
939
+ background: transparent;
940
+ color: var(--text-secondary);
941
+ cursor: pointer;
942
+ width: 28px;
943
+ height: 28px;
944
+ padding: 0;
496
945
  border-radius: 6px;
497
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12);
498
- white-space: nowrap;
499
- pointer-events: none;
500
- opacity: 0;
501
- transition: opacity 150ms ease;
946
+ display: flex;
947
+ align-items: center;
948
+ justify-content: center;
949
+ }
950
+ .markdown-link-popover-btn:hover {
951
+ color: var(--text);
952
+ background: color-mix(in srgb, var(--border) 30%, transparent);
502
953
  }
503
954
 
504
- .selection-hint.visible {
505
- opacity: 1;
955
+ .markdown-editor-root {
956
+ flex: 1 1 auto;
957
+ min-height: 0;
958
+ padding: 0;
959
+ position: relative;
506
960
  }
507
961
 
508
- /* ── Content areas ── */
962
+ .markdown-editor-surface {
963
+ flex: 1 1 auto;
964
+ min-height: min(70vh, 760px);
965
+ outline: none;
966
+ }
509
967
 
510
- .panel-content-wrapper {
511
- max-height: var(--content-height);
512
- overflow: auto;
513
- position: relative;
968
+ .markdown-editor-surface--markdown {
969
+ max-width: none;
970
+ margin: 0;
971
+ padding: 22px 24px 28px;
514
972
  }
515
973
 
516
- .panel-content {
517
- min-height: 0;
974
+ .markdown-editor-textarea {
975
+ width: 100%;
976
+ min-height: min(70vh, 760px);
977
+ border: 0;
978
+ border-radius: 0;
979
+ background: transparent;
980
+ color: var(--text);
981
+ font-family: var(--font-mono, ui-monospace, monospace);
982
+ font-size: 14px;
983
+ line-height: 1.65;
984
+ padding: 18px 20px 24px;
985
+ resize: none;
986
+ overflow: hidden;
987
+ outline: none;
518
988
  }
519
989
 
520
- .source-content .code-viewer { height: 100%; overflow: auto; }
521
- .html-content .html-rendered-frame { min-height: 300px; height: var(--content-height); }
522
- .markdown-content { overflow: auto; padding: 0 4px 0 0; }
990
+ .markdown-editor-textarea:focus {
991
+ box-shadow: none;
992
+ }
523
993
 
524
994
  .image-content {
525
995
  display: flex;
@@ -775,6 +1245,17 @@ body.dc-ready {
775
1245
  border-radius: 10px;
776
1246
  }
777
1247
 
1248
+ .markdown-doc a {
1249
+ color: inherit;
1250
+ text-decoration: underline;
1251
+ text-decoration-color: color-mix(in srgb, var(--text-secondary) 45%, transparent);
1252
+ text-underline-offset: 0.18em;
1253
+ }
1254
+
1255
+ .markdown-doc a:hover {
1256
+ text-decoration-color: currentcolor;
1257
+ }
1258
+
778
1259
  /* ── HTML frame ── */
779
1260
 
780
1261
  .html-rendered-frame {
@@ -789,6 +1270,52 @@ body.dc-ready {
789
1270
  /* ── Responsive ── */
790
1271
 
791
1272
  @media (max-width: 720px) {
1273
+ .markdown-workspace {
1274
+ flex-direction: column;
1275
+ }
1276
+ .markdown-workspace--edit {
1277
+ min-height: auto;
1278
+ }
1279
+ .markdown-workspace--with-toc {
1280
+ background: transparent;
1281
+ }
1282
+ .markdown-editor-shell {
1283
+ padding: 12px;
1284
+ }
1285
+ .markdown-toc-shell {
1286
+ position: static;
1287
+ top: auto;
1288
+ max-height: none;
1289
+ overflow: visible;
1290
+ align-self: stretch;
1291
+ width: 100% !important;
1292
+ flex-basis: auto !important;
1293
+ border-right: none;
1294
+ border-bottom: 1px solid color-mix(in srgb, var(--border) 45%, transparent);
1295
+ }
1296
+ .markdown-toc-collapsed .markdown-toc-title,
1297
+ .markdown-toc-collapsed .markdown-toc-nav {
1298
+ display: flex;
1299
+ }
1300
+ .document-outline-toggle {
1301
+ display: none;
1302
+ }
1303
+ .markdown-workspace-main {
1304
+ padding-left: 0;
1305
+ }
1306
+ .markdown-toc-nav {
1307
+ max-height: 40vh;
1308
+ }
1309
+ .markdown-editor-root {
1310
+ padding: 0;
1311
+ }
1312
+ .markdown-editor-textarea {
1313
+ min-height: 58vh;
1314
+ padding: 14px;
1315
+ }
1316
+ .markdown-editor-surface--markdown {
1317
+ padding: 16px;
1318
+ }
792
1319
  .markdown-doc { padding: 16px; }
793
1320
  .markdown-doc h1 { font-size: 27px; }
794
1321
  .markdown-doc h2 { font-size: 22px; }
@@ -796,3 +1323,309 @@ body.dc-ready {
796
1323
  .markdown-doc p, .markdown-doc li { font-size: 15px; }
797
1324
  }
798
1325
 
1326
+ /* ── Directory tree ── */
1327
+
1328
+ .directory-content {
1329
+ padding: 12px 16px;
1330
+ font-family: var(--font-mono, ui-monospace, monospace);
1331
+ font-size: 13px;
1332
+ line-height: 1.6;
1333
+ }
1334
+
1335
+ .dir-tree {
1336
+ display: flex;
1337
+ flex-direction: column;
1338
+ }
1339
+
1340
+ .dir-entry, .dir-entry-group {
1341
+ display: flex;
1342
+ flex-direction: column;
1343
+ }
1344
+
1345
+ .dir-row {
1346
+ display: flex;
1347
+ align-items: center;
1348
+ gap: 4px;
1349
+ padding: 2px 6px;
1350
+ border-radius: 4px;
1351
+ cursor: pointer;
1352
+ user-select: none;
1353
+ }
1354
+
1355
+ .dir-row:hover {
1356
+ background: color-mix(in srgb, var(--text) 8%, transparent);
1357
+ }
1358
+
1359
+ .dir-row-file:active {
1360
+ background: color-mix(in srgb, var(--text) 14%, transparent);
1361
+ }
1362
+
1363
+ .dir-row.dir-loading {
1364
+ opacity: 0.5;
1365
+ pointer-events: none;
1366
+ }
1367
+
1368
+ .dir-children {
1369
+ padding-left: 20px;
1370
+ border-left: 1px solid color-mix(in srgb, var(--border) 40%, transparent);
1371
+ margin-left: 11px;
1372
+ }
1373
+
1374
+ .dir-children.dir-collapsed {
1375
+ display: none;
1376
+ }
1377
+
1378
+ .dir-chevron {
1379
+ display: inline-block;
1380
+ width: 14px;
1381
+ text-align: center;
1382
+ font-size: 10px;
1383
+ color: var(--secondary);
1384
+ flex-shrink: 0;
1385
+ transition: transform 0.15s ease;
1386
+ }
1387
+
1388
+ .dir-icon, .file-icon {
1389
+ font-size: 14px;
1390
+ flex-shrink: 0;
1391
+ }
1392
+
1393
+ .dir-name {
1394
+ font-weight: 600;
1395
+ color: var(--text);
1396
+ }
1397
+
1398
+ .dir-name-denied {
1399
+ color: var(--secondary);
1400
+ text-decoration: line-through;
1401
+ }
1402
+
1403
+ .file-name {
1404
+ color: var(--secondary);
1405
+ }
1406
+
1407
+ .dir-row-file:hover .file-name {
1408
+ color: var(--text);
1409
+ }
1410
+
1411
+ .dir-empty {
1412
+ color: var(--secondary);
1413
+ font-style: italic;
1414
+ padding: 4px 6px;
1415
+ }
1416
+
1417
+ .dir-row-warning {
1418
+ cursor: default;
1419
+ opacity: 0.7;
1420
+ font-style: italic;
1421
+ font-size: 12px;
1422
+ }
1423
+
1424
+ .dir-row-warning:hover {
1425
+ background: none;
1426
+ }
1427
+
1428
+ .dir-load-more {
1429
+ cursor: pointer;
1430
+ }
1431
+
1432
+ .dir-load-more:hover {
1433
+ background: color-mix(in srgb, var(--text) 8%, transparent) !important;
1434
+ opacity: 1;
1435
+ }
1436
+
1437
+ .dir-load-more:hover .dir-warning-text {
1438
+ text-decoration: underline;
1439
+ }
1440
+
1441
+ .dir-warning-text {
1442
+ color: var(--secondary);
1443
+ }
1444
+
1445
+ .dir-back-btn {
1446
+ flex-shrink: 0;
1447
+ margin-right: 4px;
1448
+ font-weight: 600;
1449
+ }
1450
+
1451
+ .dir-open-btn {
1452
+ margin-left: 6px;
1453
+ padding: 0 4px;
1454
+ border: none;
1455
+ background: none;
1456
+ cursor: pointer;
1457
+ font-size: 13px;
1458
+ opacity: 0;
1459
+ flex-shrink: 0;
1460
+ border-radius: 3px;
1461
+ pointer-events: none;
1462
+ transition: opacity 0.1s ease;
1463
+ }
1464
+
1465
+ .dir-open-btn:hover {
1466
+ background: color-mix(in srgb, var(--text) 10%, transparent);
1467
+ }
1468
+
1469
+ .dir-row-folder:hover .dir-open-btn {
1470
+ opacity: 0.6;
1471
+ pointer-events: auto;
1472
+ }
1473
+
1474
+ .dir-row-folder:hover .dir-open-btn:hover {
1475
+ opacity: 1;
1476
+ }
1477
+
1478
+ /* === File-changed-on-disk conflict modal === */
1479
+
1480
+ .md-conflict-modal[hidden] {
1481
+ display: none;
1482
+ }
1483
+
1484
+ .md-conflict-modal {
1485
+ position: fixed;
1486
+ inset: 0;
1487
+ background: rgba(0, 0, 0, 0.42);
1488
+ display: grid;
1489
+ place-items: center;
1490
+ z-index: 50;
1491
+ padding: 16px;
1492
+ box-sizing: border-box;
1493
+ }
1494
+
1495
+ .md-conflict-card {
1496
+ width: min(480px, 100%);
1497
+ max-height: min(80vh, 560px);
1498
+ background: var(--panel);
1499
+ color: var(--text);
1500
+ border: 1px solid var(--border);
1501
+ border-radius: 10px;
1502
+ box-shadow: 0 12px 32px rgba(0, 0, 0, 0.28);
1503
+ padding: 0;
1504
+ display: flex;
1505
+ flex-direction: column;
1506
+ overflow: hidden;
1507
+ }
1508
+
1509
+ .md-conflict-header {
1510
+ display: flex;
1511
+ align-items: center;
1512
+ justify-content: space-between;
1513
+ padding: 14px 16px 10px;
1514
+ border-bottom: 1px solid color-mix(in srgb, var(--border) 50%, transparent);
1515
+ }
1516
+
1517
+ .md-conflict-header h3 {
1518
+ margin: 0;
1519
+ font-size: 14px;
1520
+ font-weight: 600;
1521
+ color: var(--text);
1522
+ }
1523
+
1524
+ .md-conflict-close {
1525
+ display: inline-flex;
1526
+ align-items: center;
1527
+ justify-content: center;
1528
+ width: 24px;
1529
+ height: 24px;
1530
+ padding: 0;
1531
+ background: transparent;
1532
+ border: none;
1533
+ border-radius: 4px;
1534
+ color: var(--text-secondary);
1535
+ cursor: pointer;
1536
+ transition: background-color 120ms ease, color 120ms ease;
1537
+ }
1538
+
1539
+ .md-conflict-close:hover {
1540
+ background: var(--panel-subtle);
1541
+ color: var(--text);
1542
+ }
1543
+
1544
+ .md-conflict-close svg {
1545
+ width: 16px;
1546
+ height: 16px;
1547
+ }
1548
+
1549
+ .md-conflict-body {
1550
+ padding: 14px 16px;
1551
+ overflow-y: auto;
1552
+ font-size: 13px;
1553
+ line-height: 1.5;
1554
+ color: var(--text);
1555
+ }
1556
+
1557
+ .md-conflict-body p {
1558
+ margin: 0 0 10px;
1559
+ }
1560
+
1561
+ .md-conflict-body p:last-of-type {
1562
+ margin-bottom: 8px;
1563
+ }
1564
+
1565
+ .md-conflict-body ul {
1566
+ margin: 0 0 4px;
1567
+ padding-left: 20px;
1568
+ color: var(--text-secondary);
1569
+ }
1570
+
1571
+ .md-conflict-body li {
1572
+ margin-bottom: 4px;
1573
+ }
1574
+
1575
+ .md-conflict-filename {
1576
+ font-family: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);
1577
+ font-weight: 600;
1578
+ word-break: break-all;
1579
+ }
1580
+
1581
+ .md-conflict-footer {
1582
+ display: flex;
1583
+ justify-content: flex-end;
1584
+ gap: 8px;
1585
+ padding: 12px 16px 14px;
1586
+ border-top: 1px solid color-mix(in srgb, var(--border) 50%, transparent);
1587
+ background: color-mix(in srgb, var(--panel-subtle) 50%, transparent);
1588
+ }
1589
+
1590
+ .md-conflict-btn {
1591
+ appearance: none;
1592
+ font: inherit;
1593
+ font-size: 13px;
1594
+ font-weight: 500;
1595
+ padding: 7px 14px;
1596
+ border-radius: 6px;
1597
+ cursor: pointer;
1598
+ border: 1px solid var(--border);
1599
+ background: var(--panel);
1600
+ color: var(--text);
1601
+ transition: background-color 120ms ease, border-color 120ms ease, color 120ms ease;
1602
+ }
1603
+
1604
+ .md-conflict-btn:hover {
1605
+ background: var(--panel-subtle);
1606
+ }
1607
+
1608
+ .md-conflict-btn:focus-visible {
1609
+ outline: 2px solid var(--accent, #4a8cff);
1610
+ outline-offset: 2px;
1611
+ }
1612
+
1613
+ .md-conflict-btn--secondary {
1614
+ color: var(--text-secondary);
1615
+ }
1616
+
1617
+ .md-conflict-btn--secondary:hover {
1618
+ color: var(--text);
1619
+ border-color: color-mix(in srgb, var(--border) 80%, var(--text) 20%);
1620
+ }
1621
+
1622
+ .md-conflict-btn--primary {
1623
+ background: var(--accent, #4a8cff);
1624
+ color: #fff;
1625
+ border-color: color-mix(in srgb, var(--accent, #4a8cff) 85%, black 15%);
1626
+ }
1627
+
1628
+ .md-conflict-btn--primary:hover {
1629
+ background: color-mix(in srgb, var(--accent, #4a8cff) 88%, black 12%);
1630
+ }
1631
+