@ecsplico/editor 0.0.0-stage → 2.0.0

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 (1230) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/LICENSE +21 -0
  3. package/README.md +232 -2
  4. package/dist/code/CodeSurface.d.ts +24 -0
  5. package/dist/code/CodeSurface.js +57 -0
  6. package/dist/code/CodeSurface.js.map +1 -0
  7. package/dist/code/CodeSurface.vue.d.ts +29 -0
  8. package/dist/code/CodeSurface2.js +75 -0
  9. package/dist/code/CodeSurface2.js.map +1 -0
  10. package/dist/code/chrome-theme.js +76 -0
  11. package/dist/code/chrome-theme.js.map +1 -0
  12. package/dist/code/compartments.js +19 -0
  13. package/dist/code/compartments.js.map +1 -0
  14. package/dist/code/editor-factory.d.ts +41 -0
  15. package/dist/code/editor-factory.js +126 -0
  16. package/dist/code/editor-factory.js.map +1 -0
  17. package/dist/code/format-json.d.ts +27 -0
  18. package/dist/code/format-json.js +94 -0
  19. package/dist/code/format-json.js.map +1 -0
  20. package/dist/code/highlight-style.js +118 -0
  21. package/dist/code/highlight-style.js.map +1 -0
  22. package/dist/code/index.d.ts +6 -0
  23. package/dist/code/index.js +6 -0
  24. package/dist/code/jsonl-language.d.ts +6 -0
  25. package/dist/code/jsonl-language.js +33 -0
  26. package/dist/code/jsonl-language.js.map +1 -0
  27. package/dist/code/kind.d.ts +15 -0
  28. package/dist/code/kind.js +142 -0
  29. package/dist/code/kind.js.map +1 -0
  30. package/dist/code/lang-registry.d.ts +31 -0
  31. package/dist/code/lang-registry.js +54 -0
  32. package/dist/code/lang-registry.js.map +1 -0
  33. package/dist/code/react.d.ts +2 -0
  34. package/dist/code/react.js +1 -0
  35. package/dist/code/vue.d.ts +2 -0
  36. package/dist/code/vue.js +1 -0
  37. package/dist/core/abilities.d.ts +32 -0
  38. package/dist/core/abilities.js +160 -0
  39. package/dist/core/abilities.js.map +1 -0
  40. package/dist/core/block-convert.d.ts +59 -0
  41. package/dist/core/block-convert.js +164 -0
  42. package/dist/core/block-convert.js.map +1 -0
  43. package/dist/core/block-drag.d.ts +12 -0
  44. package/dist/core/block-drag.js +62 -0
  45. package/dist/core/block-drag.js.map +1 -0
  46. package/dist/core/block-flash.d.ts +19 -0
  47. package/dist/core/block-flash.js +66 -0
  48. package/dist/core/block-flash.js.map +1 -0
  49. package/dist/core/context.d.ts +63 -0
  50. package/dist/core/context.js +108 -0
  51. package/dist/core/context.js.map +1 -0
  52. package/dist/core/convert.d.ts +96 -0
  53. package/dist/core/convert.js +241 -0
  54. package/dist/core/convert.js.map +1 -0
  55. package/dist/core/core-feature.d.ts +17 -0
  56. package/dist/core/core-feature.js +100 -0
  57. package/dist/core/core-feature.js.map +1 -0
  58. package/dist/core/define-editor.d.ts +23 -0
  59. package/dist/core/define-editor.js +110 -0
  60. package/dist/core/define-editor.js.map +1 -0
  61. package/dist/core/doc-anchors.d.ts +67 -0
  62. package/dist/core/doc-anchors.js +112 -0
  63. package/dist/core/doc-anchors.js.map +1 -0
  64. package/dist/core/document-markdown.d.ts +13 -0
  65. package/dist/core/document-markdown.js +31 -0
  66. package/dist/core/document-markdown.js.map +1 -0
  67. package/dist/core/download.d.ts +5 -0
  68. package/dist/core/download.js +16 -0
  69. package/dist/core/download.js.map +1 -0
  70. package/dist/core/editor-ui.d.ts +45 -0
  71. package/dist/core/editor-ui.js +38 -0
  72. package/dist/core/editor-ui.js.map +1 -0
  73. package/dist/core/extension-points.d.ts +64 -0
  74. package/dist/core/feature-context.d.ts +32 -0
  75. package/dist/core/feature-context.js +46 -0
  76. package/dist/core/feature-context.js.map +1 -0
  77. package/dist/core/feature.d.ts +234 -0
  78. package/dist/core/feature.js +13 -0
  79. package/dist/core/feature.js.map +1 -0
  80. package/dist/core/fences.d.ts +16 -0
  81. package/dist/core/fences.js +105 -0
  82. package/dist/core/fences.js.map +1 -0
  83. package/dist/core/fetch-error.d.ts +5 -0
  84. package/dist/core/fetch-error.js +11 -0
  85. package/dist/core/fetch-error.js.map +1 -0
  86. package/dist/core/index.d.ts +28 -0
  87. package/dist/core/index.js +27 -0
  88. package/dist/core/metadata-types.d.ts +27 -0
  89. package/dist/core/metadata-types.js +10 -0
  90. package/dist/core/metadata-types.js.map +1 -0
  91. package/dist/core/metadata.d.ts +39 -0
  92. package/dist/core/metadata.js +76 -0
  93. package/dist/core/metadata.js.map +1 -0
  94. package/dist/core/notify.d.ts +31 -0
  95. package/dist/core/notify.js +7 -0
  96. package/dist/core/notify.js.map +1 -0
  97. package/dist/core/pipeline.d.ts +52 -0
  98. package/dist/core/pipeline.js +78 -0
  99. package/dist/core/pipeline.js.map +1 -0
  100. package/dist/core/schema/abilities.d.ts +55 -0
  101. package/dist/core/schema/abilities.js +113 -0
  102. package/dist/core/schema/abilities.js.map +1 -0
  103. package/dist/core/schema/block-ids.d.ts +29 -0
  104. package/dist/core/schema/block-ids.js +134 -0
  105. package/dist/core/schema/block-ids.js.map +1 -0
  106. package/dist/core/schema/hex-color.d.ts +5 -0
  107. package/dist/core/schema/hex-color.js +7 -0
  108. package/dist/core/schema/hex-color.js.map +1 -0
  109. package/dist/core/schema/index.d.ts +21 -0
  110. package/dist/core/schema/index.js +33 -0
  111. package/dist/core/schema/index.js.map +1 -0
  112. package/dist/core/schema/mark-flags.d.ts +12 -0
  113. package/dist/core/schema/node-flags.d.ts +23 -0
  114. package/dist/core/schema/node-flags.js +34 -0
  115. package/dist/core/schema/node-flags.js.map +1 -0
  116. package/dist/core/schema/opaque-fence.d.ts +11 -0
  117. package/dist/core/schema/opaque-fence.js +57 -0
  118. package/dist/core/schema/opaque-fence.js.map +1 -0
  119. package/dist/core/schema/strike.d.ts +4 -0
  120. package/dist/core/schema/strike.js +9 -0
  121. package/dist/core/schema/strike.js.map +1 -0
  122. package/dist/core/selection-range.d.ts +13 -0
  123. package/dist/core/selection-range.js +28 -0
  124. package/dist/core/selection-range.js.map +1 -0
  125. package/dist/core/slash.d.ts +24 -0
  126. package/dist/core/slash.js +60 -0
  127. package/dist/core/slash.js.map +1 -0
  128. package/dist/core/store.d.ts +22 -0
  129. package/dist/core/store.js +61 -0
  130. package/dist/core/store.js.map +1 -0
  131. package/dist/core/suggestion-popup.d.ts +63 -0
  132. package/dist/core/suggestion-popup.js +57 -0
  133. package/dist/core/suggestion-popup.js.map +1 -0
  134. package/dist/core/tag-name.js +11 -0
  135. package/dist/core/tag-name.js.map +1 -0
  136. package/dist/core/toolbar-items.d.ts +10 -0
  137. package/dist/core/toolbar-items.js +206 -0
  138. package/dist/core/toolbar-items.js.map +1 -0
  139. package/dist/core/toolbar.d.ts +74 -0
  140. package/dist/core/toolbar.js +45 -0
  141. package/dist/core/toolbar.js.map +1 -0
  142. package/dist/document/DocumentSurface.d.ts +38 -0
  143. package/dist/document/DocumentSurface.js +44 -0
  144. package/dist/document/DocumentSurface.js.map +1 -0
  145. package/dist/document/DocumentSurface.vue.d.ts +56 -0
  146. package/dist/document/DocumentSurface2.js +71 -0
  147. package/dist/document/DocumentSurface2.js.map +1 -0
  148. package/dist/document/react.d.ts +2 -0
  149. package/dist/document/react.js +1 -0
  150. package/dist/document/vue.d.ts +2 -0
  151. package/dist/document/vue.js +1 -0
  152. package/dist/features/ai/agent-op-review.d.ts +69 -0
  153. package/dist/features/ai/agent-op-review.js +182 -0
  154. package/dist/features/ai/agent-op-review.js.map +1 -0
  155. package/dist/features/ai/agent-ops.d.ts +15 -0
  156. package/dist/features/ai/agent-ops.js +228 -0
  157. package/dist/features/ai/agent-ops.js.map +1 -0
  158. package/dist/features/ai/ai-apply.d.ts +76 -0
  159. package/dist/features/ai/ai-apply.js +193 -0
  160. package/dist/features/ai/ai-apply.js.map +1 -0
  161. package/dist/features/ai/ai-menu.d.ts +38 -0
  162. package/dist/features/ai/ai-menu.js +20 -0
  163. package/dist/features/ai/ai-menu.js.map +1 -0
  164. package/dist/features/ai/ai-review.d.ts +136 -0
  165. package/dist/features/ai/ai-review.js +543 -0
  166. package/dist/features/ai/ai-review.js.map +1 -0
  167. package/dist/features/ai/ai-selection-highlight.d.ts +21 -0
  168. package/dist/features/ai/ai-selection-highlight.js +44 -0
  169. package/dist/features/ai/ai-selection-highlight.js.map +1 -0
  170. package/dist/features/ai/ai-sse.d.ts +28 -0
  171. package/dist/features/ai/ai-sse.js +82 -0
  172. package/dist/features/ai/ai-sse.js.map +1 -0
  173. package/dist/features/ai/assistant.d.ts +53 -0
  174. package/dist/features/ai/assistant.js +82 -0
  175. package/dist/features/ai/assistant.js.map +1 -0
  176. package/dist/features/ai/block-actions.d.ts +20 -0
  177. package/dist/features/ai/block-actions.js +55 -0
  178. package/dist/features/ai/block-actions.js.map +1 -0
  179. package/dist/features/ai/components/AiReviewBar.js +145 -0
  180. package/dist/features/ai/components/AiReviewBar.js.map +1 -0
  181. package/dist/features/ai/components/AiReviewBar.vue.d.ts +15 -0
  182. package/dist/features/ai/components/AiSelectionMenu.js +519 -0
  183. package/dist/features/ai/components/AiSelectionMenu.js.map +1 -0
  184. package/dist/features/ai/components/AiSelectionMenu.vue.d.ts +17 -0
  185. package/dist/features/ai/components/AiSidebar.js +378 -0
  186. package/dist/features/ai/components/AiSidebar.js.map +1 -0
  187. package/dist/features/ai/components/AiSidebar.vue.d.ts +26 -0
  188. package/dist/features/ai/components/DocumentChatAnswer.js +67 -0
  189. package/dist/features/ai/components/DocumentChatAnswer.js.map +1 -0
  190. package/dist/features/ai/components/DocumentChatAnswer.vue.d.ts +13 -0
  191. package/dist/features/ai/components/DocumentChatOps.js +113 -0
  192. package/dist/features/ai/components/DocumentChatOps.js.map +1 -0
  193. package/dist/features/ai/components/DocumentChatOps.vue.d.ts +27 -0
  194. package/dist/features/ai/components/ModelQuickSwitch.js +84 -0
  195. package/dist/features/ai/components/ModelQuickSwitch.js.map +1 -0
  196. package/dist/features/ai/components/ModelQuickSwitch.vue.d.ts +23 -0
  197. package/dist/features/ai/components/SettingsAiTab.js +88 -0
  198. package/dist/features/ai/components/SettingsAiTab.js.map +1 -0
  199. package/dist/features/ai/components/SettingsAiTab.vue.d.ts +6 -0
  200. package/dist/features/ai/components/SettingsModelProfiles.js +260 -0
  201. package/dist/features/ai/components/SettingsModelProfiles.js.map +1 -0
  202. package/dist/features/ai/components/SettingsModelProfiles.vue.d.ts +6 -0
  203. package/dist/features/ai/document-chat-model.d.ts +88 -0
  204. package/dist/features/ai/document-chat-model.js +190 -0
  205. package/dist/features/ai/document-chat-model.js.map +1 -0
  206. package/dist/features/ai/document-chat.d.ts +17 -0
  207. package/dist/features/ai/document-chat.js +112 -0
  208. package/dist/features/ai/document-chat.js.map +1 -0
  209. package/dist/features/ai/feature.d.ts +25 -0
  210. package/dist/features/ai/feature.js +89 -0
  211. package/dist/features/ai/feature.js.map +1 -0
  212. package/dist/features/ai/ghost-autocomplete.d.ts +47 -0
  213. package/dist/features/ai/ghost-autocomplete.js +204 -0
  214. package/dist/features/ai/ghost-autocomplete.js.map +1 -0
  215. package/dist/features/ai/index.d.ts +24 -0
  216. package/dist/features/ai/index.js +23 -0
  217. package/dist/features/ai/model-profiles.d.ts +36 -0
  218. package/dist/features/ai/model-profiles.js +111 -0
  219. package/dist/features/ai/model-profiles.js.map +1 -0
  220. package/dist/features/ai/preview-extensions.js +14 -0
  221. package/dist/features/ai/preview-extensions.js.map +1 -0
  222. package/dist/features/ai/protocol/agent-ops.d.ts +120 -0
  223. package/dist/features/ai/protocol/agent-ops.js +298 -0
  224. package/dist/features/ai/protocol/agent-ops.js.map +1 -0
  225. package/dist/features/ai/protocol/chat.d.ts +57 -0
  226. package/dist/features/ai/protocol/chat.js +146 -0
  227. package/dist/features/ai/protocol/chat.js.map +1 -0
  228. package/dist/features/ai/protocol/complete.d.ts +21 -0
  229. package/dist/features/ai/protocol/complete.js +81 -0
  230. package/dist/features/ai/protocol/complete.js.map +1 -0
  231. package/dist/features/ai/protocol/index.d.ts +7 -0
  232. package/dist/features/ai/protocol/index.js +7 -0
  233. package/dist/features/ai/protocol/models.d.ts +48 -0
  234. package/dist/features/ai/protocol/models.js +41 -0
  235. package/dist/features/ai/protocol/models.js.map +1 -0
  236. package/dist/features/ai/protocol/schemas.d.ts +36 -0
  237. package/dist/features/ai/protocol/schemas.js +40 -0
  238. package/dist/features/ai/protocol/schemas.js.map +1 -0
  239. package/dist/features/ai/protocol/tasks.d.ts +107 -0
  240. package/dist/features/ai/protocol/tasks.js +227 -0
  241. package/dist/features/ai/protocol/tasks.js.map +1 -0
  242. package/dist/features/ai/rate-limit.d.ts +9 -0
  243. package/dist/features/ai/rate-limit.js +20 -0
  244. package/dist/features/ai/rate-limit.js.map +1 -0
  245. package/dist/features/ai/react/AiReviewBar.d.ts +12 -0
  246. package/dist/features/ai/react/AiReviewBar.js +156 -0
  247. package/dist/features/ai/react/AiReviewBar.js.map +1 -0
  248. package/dist/features/ai/react/AiSelectionMenu.d.ts +14 -0
  249. package/dist/features/ai/react/AiSelectionMenu.js +513 -0
  250. package/dist/features/ai/react/AiSelectionMenu.js.map +1 -0
  251. package/dist/features/ai/react/AiSidebar.d.ts +19 -0
  252. package/dist/features/ai/react/AiSidebar.js +339 -0
  253. package/dist/features/ai/react/AiSidebar.js.map +1 -0
  254. package/dist/features/ai/react/DocumentChatAnswer.d.ts +10 -0
  255. package/dist/features/ai/react/DocumentChatAnswer.js +70 -0
  256. package/dist/features/ai/react/DocumentChatAnswer.js.map +1 -0
  257. package/dist/features/ai/react/DocumentChatOps.d.ts +19 -0
  258. package/dist/features/ai/react/DocumentChatOps.js +111 -0
  259. package/dist/features/ai/react/DocumentChatOps.js.map +1 -0
  260. package/dist/features/ai/react/ModelQuickSwitch.d.ts +19 -0
  261. package/dist/features/ai/react/ModelQuickSwitch.js +89 -0
  262. package/dist/features/ai/react/ModelQuickSwitch.js.map +1 -0
  263. package/dist/features/ai/react/SettingsAiTab.d.ts +5 -0
  264. package/dist/features/ai/react/SettingsAiTab.js +103 -0
  265. package/dist/features/ai/react/SettingsAiTab.js.map +1 -0
  266. package/dist/features/ai/react/SettingsModelProfiles.d.ts +8 -0
  267. package/dist/features/ai/react/SettingsModelProfiles.js +318 -0
  268. package/dist/features/ai/react/SettingsModelProfiles.js.map +1 -0
  269. package/dist/features/ai/react/use-ai-assistant.d.ts +22 -0
  270. package/dist/features/ai/react/use-ai-assistant.js +36 -0
  271. package/dist/features/ai/react/use-ai-assistant.js.map +1 -0
  272. package/dist/features/ai/react/use-document-chat.d.ts +32 -0
  273. package/dist/features/ai/react/use-document-chat.js +43 -0
  274. package/dist/features/ai/react/use-document-chat.js.map +1 -0
  275. package/dist/features/ai/react/use-model-profiles.d.ts +20 -0
  276. package/dist/features/ai/react/use-model-profiles.js +33 -0
  277. package/dist/features/ai/react/use-model-profiles.js.map +1 -0
  278. package/dist/features/ai/react.d.ts +23 -0
  279. package/dist/features/ai/react.js +28 -0
  280. package/dist/features/ai/react.js.map +1 -0
  281. package/dist/features/ai/sidebar-flow.d.ts +61 -0
  282. package/dist/features/ai/sidebar-flow.js +125 -0
  283. package/dist/features/ai/sidebar-flow.js.map +1 -0
  284. package/dist/features/ai/use-ai-assistant.d.ts +22 -0
  285. package/dist/features/ai/use-ai-assistant.js +39 -0
  286. package/dist/features/ai/use-ai-assistant.js.map +1 -0
  287. package/dist/features/ai/use-document-chat.d.ts +33 -0
  288. package/dist/features/ai/use-document-chat.js +45 -0
  289. package/dist/features/ai/use-document-chat.js.map +1 -0
  290. package/dist/features/ai/use-model-profiles.d.ts +23 -0
  291. package/dist/features/ai/use-model-profiles.js +50 -0
  292. package/dist/features/ai/use-model-profiles.js.map +1 -0
  293. package/dist/features/ai/vue.d.ts +21 -0
  294. package/dist/features/ai/vue.js +28 -0
  295. package/dist/features/ai/vue.js.map +1 -0
  296. package/dist/features/authors/attribution.d.ts +36 -0
  297. package/dist/features/authors/attribution.js +94 -0
  298. package/dist/features/authors/attribution.js.map +1 -0
  299. package/dist/features/authors/author-color-styles.d.ts +12 -0
  300. package/dist/features/authors/author-color-styles.js +24 -0
  301. package/dist/features/authors/author-color-styles.js.map +1 -0
  302. package/dist/features/authors/components/AuthorColorsButton.js +50 -0
  303. package/dist/features/authors/components/AuthorColorsButton.js.map +1 -0
  304. package/dist/features/authors/components/AuthorColorsButton.vue.d.ts +11 -0
  305. package/dist/features/authors/components/AuthorColorsPanel.js +72 -0
  306. package/dist/features/authors/components/AuthorColorsPanel.js.map +1 -0
  307. package/dist/features/authors/components/AuthorColorsPanel.vue.d.ts +11 -0
  308. package/dist/features/authors/components/SettingsAuthorsTab.js +49 -0
  309. package/dist/features/authors/components/SettingsAuthorsTab.js.map +1 -0
  310. package/dist/features/authors/components/SettingsAuthorsTab.vue.d.ts +6 -0
  311. package/dist/features/authors/feature.d.ts +22 -0
  312. package/dist/features/authors/feature.js +47 -0
  313. package/dist/features/authors/feature.js.map +1 -0
  314. package/dist/features/authors/index.d.ts +7 -0
  315. package/dist/features/authors/index.js +6 -0
  316. package/dist/features/authors/react/AuthorColorsButton.d.ts +8 -0
  317. package/dist/features/authors/react/AuthorColorsButton.js +41 -0
  318. package/dist/features/authors/react/AuthorColorsButton.js.map +1 -0
  319. package/dist/features/authors/react/AuthorColorsPanel.d.ts +8 -0
  320. package/dist/features/authors/react/AuthorColorsPanel.js +125 -0
  321. package/dist/features/authors/react/AuthorColorsPanel.js.map +1 -0
  322. package/dist/features/authors/react/SettingsAuthorsTab.d.ts +5 -0
  323. package/dist/features/authors/react/SettingsAuthorsTab.js +92 -0
  324. package/dist/features/authors/react/SettingsAuthorsTab.js.map +1 -0
  325. package/dist/features/authors/react.d.ts +11 -0
  326. package/dist/features/authors/react.js +16 -0
  327. package/dist/features/authors/react.js.map +1 -0
  328. package/dist/features/authors/schema.d.ts +22 -0
  329. package/dist/features/authors/schema.js +70 -0
  330. package/dist/features/authors/schema.js.map +1 -0
  331. package/dist/features/authors/vue.d.ts +10 -0
  332. package/dist/features/authors/vue.js +16 -0
  333. package/dist/features/authors/vue.js.map +1 -0
  334. package/dist/features/block-ui/block-actions.d.ts +17 -0
  335. package/dist/features/block-ui/block-actions.js +37 -0
  336. package/dist/features/block-ui/block-actions.js.map +1 -0
  337. package/dist/features/block-ui/components/BlockActionsOverlay.js +142 -0
  338. package/dist/features/block-ui/components/BlockActionsOverlay.js.map +1 -0
  339. package/dist/features/block-ui/components/BlockActionsOverlay.vue.d.ts +25 -0
  340. package/dist/features/block-ui/components/BlockHandles.js +113 -0
  341. package/dist/features/block-ui/components/BlockHandles.js.map +1 -0
  342. package/dist/features/block-ui/components/BlockUi.js +181 -0
  343. package/dist/features/block-ui/components/BlockUi.js.map +1 -0
  344. package/dist/features/block-ui/components/BlockUi.vue.d.ts +17 -0
  345. package/dist/features/block-ui/feature.d.ts +21 -0
  346. package/dist/features/block-ui/feature.js +23 -0
  347. package/dist/features/block-ui/feature.js.map +1 -0
  348. package/dist/features/block-ui/handle-geometry.js +52 -0
  349. package/dist/features/block-ui/handle-geometry.js.map +1 -0
  350. package/dist/features/block-ui/index.d.ts +3 -0
  351. package/dist/features/block-ui/index.js +3 -0
  352. package/dist/features/block-ui/react/BlockActionsOverlay.d.ts +19 -0
  353. package/dist/features/block-ui/react/BlockActionsOverlay.js +142 -0
  354. package/dist/features/block-ui/react/BlockActionsOverlay.js.map +1 -0
  355. package/dist/features/block-ui/react/BlockHandles.d.ts +15 -0
  356. package/dist/features/block-ui/react/BlockHandles.js +104 -0
  357. package/dist/features/block-ui/react/BlockHandles.js.map +1 -0
  358. package/dist/features/block-ui/react/BlockUi.d.ts +14 -0
  359. package/dist/features/block-ui/react/BlockUi.js +174 -0
  360. package/dist/features/block-ui/react/BlockUi.js.map +1 -0
  361. package/dist/features/block-ui/react.d.ts +11 -0
  362. package/dist/features/block-ui/react.js +13 -0
  363. package/dist/features/block-ui/react.js.map +1 -0
  364. package/dist/features/block-ui/vue.d.ts +9 -0
  365. package/dist/features/block-ui/vue.js +12 -0
  366. package/dist/features/block-ui/vue.js.map +1 -0
  367. package/dist/features/collab/anchor-resolver.d.ts +7 -0
  368. package/dist/features/collab/anchor-resolver.js +92 -0
  369. package/dist/features/collab/anchor-resolver.js.map +1 -0
  370. package/dist/features/collab/feature.d.ts +22 -0
  371. package/dist/features/collab/feature.js +36 -0
  372. package/dist/features/collab/feature.js.map +1 -0
  373. package/dist/features/collab/index.d.ts +3 -0
  374. package/dist/features/collab/index.js +3 -0
  375. package/dist/features/collab/react.d.ts +7 -0
  376. package/dist/features/collab/react.js +10 -0
  377. package/dist/features/collab/react.js.map +1 -0
  378. package/dist/features/collab/vue.d.ts +6 -0
  379. package/dist/features/collab/vue.js +37 -0
  380. package/dist/features/collab/vue.js.map +1 -0
  381. package/dist/features/comments/comments-plugin.d.ts +71 -0
  382. package/dist/features/comments/comments-plugin.js +185 -0
  383. package/dist/features/comments/comments-plugin.js.map +1 -0
  384. package/dist/features/comments/components/CommentBubble.js +54 -0
  385. package/dist/features/comments/components/CommentBubble.js.map +1 -0
  386. package/dist/features/comments/components/CommentBubble.vue.d.ts +14 -0
  387. package/dist/features/comments/components/CommentComposer.js +87 -0
  388. package/dist/features/comments/components/CommentComposer.js.map +1 -0
  389. package/dist/features/comments/components/CommentComposer.vue.d.ts +21 -0
  390. package/dist/features/comments/components/CommentThreadView.js +255 -0
  391. package/dist/features/comments/components/CommentThreadView.js.map +1 -0
  392. package/dist/features/comments/components/CommentThreadView.vue.d.ts +29 -0
  393. package/dist/features/comments/components/CommentsListMenu.js +134 -0
  394. package/dist/features/comments/components/CommentsListMenu.js.map +1 -0
  395. package/dist/features/comments/components/CommentsListMenu.vue.d.ts +10 -0
  396. package/dist/features/comments/components/CommentsMargin.js +291 -0
  397. package/dist/features/comments/components/CommentsMargin.js.map +1 -0
  398. package/dist/features/comments/components/CommentsMargin.vue.d.ts +16 -0
  399. package/dist/features/comments/components/CommentsOverlay.js +39 -0
  400. package/dist/features/comments/components/CommentsOverlay.js.map +1 -0
  401. package/dist/features/comments/components/CommentsPopover.js +124 -0
  402. package/dist/features/comments/components/CommentsPopover.js.map +1 -0
  403. package/dist/features/comments/components/CommentsPopover.vue.d.ts +10 -0
  404. package/dist/features/comments/components/CommentsToolbarButton.js +61 -0
  405. package/dist/features/comments/components/CommentsToolbarButton.js.map +1 -0
  406. package/dist/features/comments/components/SettingsCommentsTab.js +46 -0
  407. package/dist/features/comments/components/SettingsCommentsTab.js.map +1 -0
  408. package/dist/features/comments/components/SettingsCommentsTab.vue.d.ts +6 -0
  409. package/dist/features/comments/feature.d.ts +39 -0
  410. package/dist/features/comments/feature.js +128 -0
  411. package/dist/features/comments/feature.js.map +1 -0
  412. package/dist/features/comments/index.d.ts +6 -0
  413. package/dist/features/comments/index.js +6 -0
  414. package/dist/features/comments/model.d.ts +87 -0
  415. package/dist/features/comments/model.js +390 -0
  416. package/dist/features/comments/model.js.map +1 -0
  417. package/dist/features/comments/react/CommentAvatar.js +24 -0
  418. package/dist/features/comments/react/CommentAvatar.js.map +1 -0
  419. package/dist/features/comments/react/CommentBubble.d.ts +11 -0
  420. package/dist/features/comments/react/CommentBubble.js +43 -0
  421. package/dist/features/comments/react/CommentBubble.js.map +1 -0
  422. package/dist/features/comments/react/CommentComposer.d.ts +15 -0
  423. package/dist/features/comments/react/CommentComposer.js +69 -0
  424. package/dist/features/comments/react/CommentComposer.js.map +1 -0
  425. package/dist/features/comments/react/CommentThreadView.d.ts +24 -0
  426. package/dist/features/comments/react/CommentThreadView.js +249 -0
  427. package/dist/features/comments/react/CommentThreadView.js.map +1 -0
  428. package/dist/features/comments/react/CommentsListMenu.d.ts +8 -0
  429. package/dist/features/comments/react/CommentsListMenu.js +115 -0
  430. package/dist/features/comments/react/CommentsListMenu.js.map +1 -0
  431. package/dist/features/comments/react/CommentsMargin.d.ts +16 -0
  432. package/dist/features/comments/react/CommentsMargin.js +294 -0
  433. package/dist/features/comments/react/CommentsMargin.js.map +1 -0
  434. package/dist/features/comments/react/CommentsOverlay.d.ts +11 -0
  435. package/dist/features/comments/react/CommentsOverlay.js +52 -0
  436. package/dist/features/comments/react/CommentsOverlay.js.map +1 -0
  437. package/dist/features/comments/react/CommentsPopover.d.ts +15 -0
  438. package/dist/features/comments/react/CommentsPopover.js +107 -0
  439. package/dist/features/comments/react/CommentsPopover.js.map +1 -0
  440. package/dist/features/comments/react/CommentsToolbarButton.d.ts +12 -0
  441. package/dist/features/comments/react/CommentsToolbarButton.js +52 -0
  442. package/dist/features/comments/react/CommentsToolbarButton.js.map +1 -0
  443. package/dist/features/comments/react/SettingsCommentsTab.d.ts +5 -0
  444. package/dist/features/comments/react/SettingsCommentsTab.js +77 -0
  445. package/dist/features/comments/react/SettingsCommentsTab.js.map +1 -0
  446. package/dist/features/comments/react/use-comments.d.ts +17 -0
  447. package/dist/features/comments/react/use-comments.js +37 -0
  448. package/dist/features/comments/react/use-comments.js.map +1 -0
  449. package/dist/features/comments/react.d.ts +23 -0
  450. package/dist/features/comments/react.js +28 -0
  451. package/dist/features/comments/react.js.map +1 -0
  452. package/dist/features/comments/schema.d.ts +51 -0
  453. package/dist/features/comments/schema.js +41 -0
  454. package/dist/features/comments/schema.js.map +1 -0
  455. package/dist/features/comments/shortcuts.js +34 -0
  456. package/dist/features/comments/shortcuts.js.map +1 -0
  457. package/dist/features/comments/use-comments.d.ts +37 -0
  458. package/dist/features/comments/use-comments.js +45 -0
  459. package/dist/features/comments/use-comments.js.map +1 -0
  460. package/dist/features/comments/vue.d.ts +20 -0
  461. package/dist/features/comments/vue.js +28 -0
  462. package/dist/features/comments/vue.js.map +1 -0
  463. package/dist/features/composites/ai-brief.d.ts +31 -0
  464. package/dist/features/composites/ai-brief.js +56 -0
  465. package/dist/features/composites/ai-brief.js.map +1 -0
  466. package/dist/features/composites/anchors.d.ts +47 -0
  467. package/dist/features/composites/anchors.js +137 -0
  468. package/dist/features/composites/anchors.js.map +1 -0
  469. package/dist/features/composites/components/CompositeChrome.js +243 -0
  470. package/dist/features/composites/components/CompositeChrome.js.map +1 -0
  471. package/dist/features/composites/components/CompositeChrome.vue.d.ts +19 -0
  472. package/dist/features/composites/components/CompositeDetails.js +158 -0
  473. package/dist/features/composites/components/CompositeDetails.js.map +1 -0
  474. package/dist/features/composites/components/CompositeDetails.vue.d.ts +19 -0
  475. package/dist/features/composites/components/CompositeFieldEditor.js +114 -0
  476. package/dist/features/composites/components/CompositeFieldEditor.js.map +1 -0
  477. package/dist/features/composites/components/CompositeFieldEditor.vue.d.ts +23 -0
  478. package/dist/features/composites/components/CompositeInspector.js +439 -0
  479. package/dist/features/composites/components/CompositeInspector.js.map +1 -0
  480. package/dist/features/composites/components/CompositeInspector.vue.d.ts +32 -0
  481. package/dist/features/composites/components/CompositeStatusMenu.js +51 -0
  482. package/dist/features/composites/components/CompositeStatusMenu.js.map +1 -0
  483. package/dist/features/composites/components/CompositeStatusMenu.vue.d.ts +28 -0
  484. package/dist/features/composites/components/CompositeSummaryEditor.js +79 -0
  485. package/dist/features/composites/components/CompositeSummaryEditor.js.map +1 -0
  486. package/dist/features/composites/components/CompositeSummaryEditor.vue.d.ts +18 -0
  487. package/dist/features/composites/components/CompositeTable.js +348 -0
  488. package/dist/features/composites/components/CompositeTable.js.map +1 -0
  489. package/dist/features/composites/components/CompositeTable.vue.d.ts +15 -0
  490. package/dist/features/composites/components/CompositeTagsEditor.js +95 -0
  491. package/dist/features/composites/components/CompositeTagsEditor.js.map +1 -0
  492. package/dist/features/composites/components/CompositeTagsEditor.vue.d.ts +13 -0
  493. package/dist/features/composites/components/CompositeView.js +46 -0
  494. package/dist/features/composites/components/CompositeView.js.map +1 -0
  495. package/dist/features/composites/components/CompositeView.vue.d.ts +96 -0
  496. package/dist/features/composites/components/SettingsEditingTab.js +119 -0
  497. package/dist/features/composites/components/SettingsEditingTab.js.map +1 -0
  498. package/dist/features/composites/components/SettingsEditingTab.vue.d.ts +11 -0
  499. package/dist/features/composites/convert.d.ts +24 -0
  500. package/dist/features/composites/convert.js +145 -0
  501. package/dist/features/composites/convert.js.map +1 -0
  502. package/dist/features/composites/editing-settings-keys.js +47 -0
  503. package/dist/features/composites/editing-settings-keys.js.map +1 -0
  504. package/dist/features/composites/feature.d.ts +30 -0
  505. package/dist/features/composites/feature.js +305 -0
  506. package/dist/features/composites/feature.js.map +1 -0
  507. package/dist/features/composites/fences.d.ts +20 -0
  508. package/dist/features/composites/fences.js +86 -0
  509. package/dist/features/composites/fences.js.map +1 -0
  510. package/dist/features/composites/heading-composites.d.ts +36 -0
  511. package/dist/features/composites/heading-composites.js +140 -0
  512. package/dist/features/composites/heading-composites.js.map +1 -0
  513. package/dist/features/composites/index.d.ts +20 -0
  514. package/dist/features/composites/index.js +20 -0
  515. package/dist/features/composites/kinds.d.ts +49 -0
  516. package/dist/features/composites/kinds.js +131 -0
  517. package/dist/features/composites/kinds.js.map +1 -0
  518. package/dist/features/composites/legacy.d.ts +8 -0
  519. package/dist/features/composites/legacy.js +25 -0
  520. package/dist/features/composites/legacy.js.map +1 -0
  521. package/dist/features/composites/markdown-export.d.ts +17 -0
  522. package/dist/features/composites/markdown-export.js +49 -0
  523. package/dist/features/composites/markdown-export.js.map +1 -0
  524. package/dist/features/composites/meta-display.js +46 -0
  525. package/dist/features/composites/meta-display.js.map +1 -0
  526. package/dist/features/composites/node-views.d.ts +17 -0
  527. package/dist/features/composites/node-views.js +18 -0
  528. package/dist/features/composites/node-views.js.map +1 -0
  529. package/dist/features/composites/nodes.d.ts +56 -0
  530. package/dist/features/composites/nodes.js +480 -0
  531. package/dist/features/composites/nodes.js.map +1 -0
  532. package/dist/features/composites/outline.d.ts +35 -0
  533. package/dist/features/composites/outline.js +69 -0
  534. package/dist/features/composites/outline.js.map +1 -0
  535. package/dist/features/composites/react/CompositeChrome.d.ts +16 -0
  536. package/dist/features/composites/react/CompositeChrome.js +234 -0
  537. package/dist/features/composites/react/CompositeChrome.js.map +1 -0
  538. package/dist/features/composites/react/CompositeDetails.d.ts +16 -0
  539. package/dist/features/composites/react/CompositeDetails.js +149 -0
  540. package/dist/features/composites/react/CompositeDetails.js.map +1 -0
  541. package/dist/features/composites/react/CompositeFieldEditor.d.ts +18 -0
  542. package/dist/features/composites/react/CompositeFieldEditor.js +131 -0
  543. package/dist/features/composites/react/CompositeFieldEditor.js.map +1 -0
  544. package/dist/features/composites/react/CompositeInspector.d.ts +23 -0
  545. package/dist/features/composites/react/CompositeInspector.js +506 -0
  546. package/dist/features/composites/react/CompositeInspector.js.map +1 -0
  547. package/dist/features/composites/react/CompositeStatusMenu.d.ts +15 -0
  548. package/dist/features/composites/react/CompositeStatusMenu.js +36 -0
  549. package/dist/features/composites/react/CompositeStatusMenu.js.map +1 -0
  550. package/dist/features/composites/react/CompositeSummaryEditor.d.ts +15 -0
  551. package/dist/features/composites/react/CompositeSummaryEditor.js +85 -0
  552. package/dist/features/composites/react/CompositeSummaryEditor.js.map +1 -0
  553. package/dist/features/composites/react/CompositeTable.d.ts +11 -0
  554. package/dist/features/composites/react/CompositeTable.js +342 -0
  555. package/dist/features/composites/react/CompositeTable.js.map +1 -0
  556. package/dist/features/composites/react/CompositeTagsEditor.d.ts +10 -0
  557. package/dist/features/composites/react/CompositeTagsEditor.js +122 -0
  558. package/dist/features/composites/react/CompositeTagsEditor.js.map +1 -0
  559. package/dist/features/composites/react/CompositeView.d.ts +6 -0
  560. package/dist/features/composites/react/CompositeView.js +30 -0
  561. package/dist/features/composites/react/CompositeView.js.map +1 -0
  562. package/dist/features/composites/react/SettingsEditingTab.d.ts +8 -0
  563. package/dist/features/composites/react/SettingsEditingTab.js +153 -0
  564. package/dist/features/composites/react/SettingsEditingTab.js.map +1 -0
  565. package/dist/features/composites/react/use-composite-anchors.d.ts +17 -0
  566. package/dist/features/composites/react/use-composite-anchors.js +46 -0
  567. package/dist/features/composites/react/use-composite-anchors.js.map +1 -0
  568. package/dist/features/composites/react/use-composite-rows.d.ts +11 -0
  569. package/dist/features/composites/react/use-composite-rows.js +26 -0
  570. package/dist/features/composites/react/use-composite-rows.js.map +1 -0
  571. package/dist/features/composites/react.d.ts +24 -0
  572. package/dist/features/composites/react.js +30 -0
  573. package/dist/features/composites/react.js.map +1 -0
  574. package/dist/features/composites/rows-model.d.ts +38 -0
  575. package/dist/features/composites/rows-model.js +92 -0
  576. package/dist/features/composites/rows-model.js.map +1 -0
  577. package/dist/features/composites/rows.d.ts +76 -0
  578. package/dist/features/composites/rows.js +159 -0
  579. package/dist/features/composites/rows.js.map +1 -0
  580. package/dist/features/composites/schema.d.ts +21 -0
  581. package/dist/features/composites/schema.js +26 -0
  582. package/dist/features/composites/schema.js.map +1 -0
  583. package/dist/features/composites/structure-mode.d.ts +11 -0
  584. package/dist/features/composites/structure-mode.js +16 -0
  585. package/dist/features/composites/structure-mode.js.map +1 -0
  586. package/dist/features/composites/structure.d.ts +19 -0
  587. package/dist/features/composites/structure.js +19 -0
  588. package/dist/features/composites/structure.js.map +1 -0
  589. package/dist/features/composites/table-model.js +117 -0
  590. package/dist/features/composites/table-model.js.map +1 -0
  591. package/dist/features/composites/tree-root.d.ts +11 -0
  592. package/dist/features/composites/tree-root.js +16 -0
  593. package/dist/features/composites/tree-root.js.map +1 -0
  594. package/dist/features/composites/use-composite-anchors.d.ts +18 -0
  595. package/dist/features/composites/use-composite-anchors.js +42 -0
  596. package/dist/features/composites/use-composite-anchors.js.map +1 -0
  597. package/dist/features/composites/use-composite-rows.d.ts +25 -0
  598. package/dist/features/composites/use-composite-rows.js +28 -0
  599. package/dist/features/composites/use-composite-rows.js.map +1 -0
  600. package/dist/features/composites/vue.d.ts +23 -0
  601. package/dist/features/composites/vue.js +30 -0
  602. package/dist/features/composites/vue.js.map +1 -0
  603. package/dist/features/media/assets.d.ts +30 -0
  604. package/dist/features/media/assets.js +26 -0
  605. package/dist/features/media/assets.js.map +1 -0
  606. package/dist/features/media/audio-recorder.d.ts +25 -0
  607. package/dist/features/media/audio-recorder.js +123 -0
  608. package/dist/features/media/audio-recorder.js.map +1 -0
  609. package/dist/features/media/components/AudioRecorderModal.js +152 -0
  610. package/dist/features/media/components/AudioRecorderModal.js.map +1 -0
  611. package/dist/features/media/components/AudioRecorderModal.vue.d.ts +15 -0
  612. package/dist/features/media/components/AudioView.js +46 -0
  613. package/dist/features/media/components/AudioView.js.map +1 -0
  614. package/dist/features/media/components/FileView.js +73 -0
  615. package/dist/features/media/components/FileView.js.map +1 -0
  616. package/dist/features/media/components/VideoView.js +47 -0
  617. package/dist/features/media/components/VideoView.js.map +1 -0
  618. package/dist/features/media/feature.d.ts +22 -0
  619. package/dist/features/media/feature.js +101 -0
  620. package/dist/features/media/feature.js.map +1 -0
  621. package/dist/features/media/file-import.d.ts +21 -0
  622. package/dist/features/media/file-import.js +76 -0
  623. package/dist/features/media/file-import.js.map +1 -0
  624. package/dist/features/media/index.d.ts +7 -0
  625. package/dist/features/media/index.js +7 -0
  626. package/dist/features/media/node-views.d.ts +28 -0
  627. package/dist/features/media/node-views.js +28 -0
  628. package/dist/features/media/node-views.js.map +1 -0
  629. package/dist/features/media/react/AudioRecorderModal.d.ts +12 -0
  630. package/dist/features/media/react/AudioRecorderModal.js +147 -0
  631. package/dist/features/media/react/AudioRecorderModal.js.map +1 -0
  632. package/dist/features/media/react/AudioView.js +32 -0
  633. package/dist/features/media/react/AudioView.js.map +1 -0
  634. package/dist/features/media/react/FileView.js +61 -0
  635. package/dist/features/media/react/FileView.js.map +1 -0
  636. package/dist/features/media/react/TitleField.js +30 -0
  637. package/dist/features/media/react/TitleField.js.map +1 -0
  638. package/dist/features/media/react/VideoView.js +33 -0
  639. package/dist/features/media/react/VideoView.js.map +1 -0
  640. package/dist/features/media/react/use-audio-recorder.d.ts +11 -0
  641. package/dist/features/media/react/use-audio-recorder.js +21 -0
  642. package/dist/features/media/react/use-audio-recorder.js.map +1 -0
  643. package/dist/features/media/react.d.ts +19 -0
  644. package/dist/features/media/react.js +37 -0
  645. package/dist/features/media/react.js.map +1 -0
  646. package/dist/features/media/schema.d.ts +59 -0
  647. package/dist/features/media/schema.js +194 -0
  648. package/dist/features/media/schema.js.map +1 -0
  649. package/dist/features/media/upload.d.ts +41 -0
  650. package/dist/features/media/upload.js +106 -0
  651. package/dist/features/media/upload.js.map +1 -0
  652. package/dist/features/media/use-audio-recorder.d.ts +12 -0
  653. package/dist/features/media/use-audio-recorder.js +21 -0
  654. package/dist/features/media/use-audio-recorder.js.map +1 -0
  655. package/dist/features/media/vue.d.ts +19 -0
  656. package/dist/features/media/vue.js +35 -0
  657. package/dist/features/media/vue.js.map +1 -0
  658. package/dist/features/mentions/index.d.ts +22 -0
  659. package/dist/features/mentions/index.js +34 -0
  660. package/dist/features/mentions/index.js.map +1 -0
  661. package/dist/features/mentions/mention-suggestion.d.ts +11 -0
  662. package/dist/features/mentions/mention-suggestion.js +34 -0
  663. package/dist/features/mentions/mention-suggestion.js.map +1 -0
  664. package/dist/features/mentions/mention-text.d.ts +18 -0
  665. package/dist/features/mentions/mention-text.js +75 -0
  666. package/dist/features/mentions/mention-text.js.map +1 -0
  667. package/dist/features/mentions/mention.d.ts +20 -0
  668. package/dist/features/mentions/mention.js +33 -0
  669. package/dist/features/mentions/mention.js.map +1 -0
  670. package/dist/features/mentions/metadata-defaults.d.ts +8 -0
  671. package/dist/features/mentions/metadata-defaults.js +30 -0
  672. package/dist/features/mentions/metadata-defaults.js.map +1 -0
  673. package/dist/features/mentions/normalize.d.ts +10 -0
  674. package/dist/features/mentions/normalize.js +31 -0
  675. package/dist/features/mentions/normalize.js.map +1 -0
  676. package/dist/features/mentions/schema.d.ts +10 -0
  677. package/dist/features/mentions/schema.js +10 -0
  678. package/dist/features/mentions/schema.js.map +1 -0
  679. package/dist/features/mentions/tag-suggestion.d.ts +11 -0
  680. package/dist/features/mentions/tag-suggestion.js +45 -0
  681. package/dist/features/mentions/tag-suggestion.js.map +1 -0
  682. package/dist/features/mentions/tag.d.ts +43 -0
  683. package/dist/features/mentions/tag.js +155 -0
  684. package/dist/features/mentions/tag.js.map +1 -0
  685. package/dist/features/tables/feature.d.ts +14 -0
  686. package/dist/features/tables/feature.js +100 -0
  687. package/dist/features/tables/feature.js.map +1 -0
  688. package/dist/features/tables/index.d.ts +3 -0
  689. package/dist/features/tables/index.js +3 -0
  690. package/dist/features/tables/schema.d.ts +6 -0
  691. package/dist/features/tables/schema.js +27 -0
  692. package/dist/features/tables/schema.js.map +1 -0
  693. package/dist/features/themes/components/SettingsAppearanceTab.js +227 -0
  694. package/dist/features/themes/components/SettingsAppearanceTab.js.map +1 -0
  695. package/dist/features/themes/components/SettingsAppearanceTab.vue.d.ts +6 -0
  696. package/dist/features/themes/feature.d.ts +24 -0
  697. package/dist/features/themes/feature.js +25 -0
  698. package/dist/features/themes/feature.js.map +1 -0
  699. package/dist/features/themes/index.d.ts +6 -0
  700. package/dist/features/themes/index.js +6 -0
  701. package/dist/features/themes/react/SettingsAppearanceTab.d.ts +5 -0
  702. package/dist/features/themes/react/SettingsAppearanceTab.js +221 -0
  703. package/dist/features/themes/react/SettingsAppearanceTab.js.map +1 -0
  704. package/dist/features/themes/react.d.ts +13 -0
  705. package/dist/features/themes/react.js +15 -0
  706. package/dist/features/themes/react.js.map +1 -0
  707. package/dist/features/themes/schema.d.ts +21 -0
  708. package/dist/features/themes/schema.js +16 -0
  709. package/dist/features/themes/schema.js.map +1 -0
  710. package/dist/features/themes/scope-css.d.ts +5 -0
  711. package/dist/features/themes/scope-css.js +142 -0
  712. package/dist/features/themes/scope-css.js.map +1 -0
  713. package/dist/features/themes/theme-runtime.d.ts +14 -0
  714. package/dist/features/themes/theme-runtime.js +147 -0
  715. package/dist/features/themes/theme-runtime.js.map +1 -0
  716. package/dist/features/themes/vue.d.ts +13 -0
  717. package/dist/features/themes/vue.js +29 -0
  718. package/dist/features/themes/vue.js.map +1 -0
  719. package/dist/features/transcript/TranscriptSegmentView.js +169 -0
  720. package/dist/features/transcript/TranscriptSegmentView.js.map +1 -0
  721. package/dist/features/transcript/TranscriptSegmentView.vue.d.ts +96 -0
  722. package/dist/features/transcript/convert.d.ts +11 -0
  723. package/dist/features/transcript/convert.js +40 -0
  724. package/dist/features/transcript/convert.js.map +1 -0
  725. package/dist/features/transcript/feature.d.ts +25 -0
  726. package/dist/features/transcript/feature.js +59 -0
  727. package/dist/features/transcript/feature.js.map +1 -0
  728. package/dist/features/transcript/index.d.ts +7 -0
  729. package/dist/features/transcript/index.js +7 -0
  730. package/dist/features/transcript/react/TranscriptSegmentView.d.ts +6 -0
  731. package/dist/features/transcript/react/TranscriptSegmentView.js +155 -0
  732. package/dist/features/transcript/react/TranscriptSegmentView.js.map +1 -0
  733. package/dist/features/transcript/react.d.ts +9 -0
  734. package/dist/features/transcript/react.js +12 -0
  735. package/dist/features/transcript/react.js.map +1 -0
  736. package/dist/features/transcript/schema.d.ts +9 -0
  737. package/dist/features/transcript/schema.js +9 -0
  738. package/dist/features/transcript/schema.js.map +1 -0
  739. package/dist/features/transcript/segment-node.d.ts +21 -0
  740. package/dist/features/transcript/segment-node.js +113 -0
  741. package/dist/features/transcript/segment-node.js.map +1 -0
  742. package/dist/features/transcript/segment.d.ts +10 -0
  743. package/dist/features/transcript/segment.js +26 -0
  744. package/dist/features/transcript/segment.js.map +1 -0
  745. package/dist/features/transcript/speakers.d.ts +8 -0
  746. package/dist/features/transcript/speakers.js +22 -0
  747. package/dist/features/transcript/speakers.js.map +1 -0
  748. package/dist/features/transcript/vue.d.ts +8 -0
  749. package/dist/features/transcript/vue.js +12 -0
  750. package/dist/features/transcript/vue.js.map +1 -0
  751. package/dist/i18n/de/ai.js +168 -0
  752. package/dist/i18n/de/ai.js.map +1 -0
  753. package/dist/i18n/de/authors.js +21 -0
  754. package/dist/i18n/de/authors.js.map +1 -0
  755. package/dist/i18n/de/block.js +16 -0
  756. package/dist/i18n/de/block.js.map +1 -0
  757. package/dist/i18n/de/comments.js +35 -0
  758. package/dist/i18n/de/comments.js.map +1 -0
  759. package/dist/i18n/de/common.js +10 -0
  760. package/dist/i18n/de/common.js.map +1 -0
  761. package/dist/i18n/de/composites.js +147 -0
  762. package/dist/i18n/de/composites.js.map +1 -0
  763. package/dist/i18n/de/integrations.js +42 -0
  764. package/dist/i18n/de/integrations.js.map +1 -0
  765. package/dist/i18n/de/markdown.js +16 -0
  766. package/dist/i18n/de/markdown.js.map +1 -0
  767. package/dist/i18n/de/media.js +27 -0
  768. package/dist/i18n/de/media.js.map +1 -0
  769. package/dist/i18n/de/mentions.js +10 -0
  770. package/dist/i18n/de/mentions.js.map +1 -0
  771. package/dist/i18n/de/outline.js +9 -0
  772. package/dist/i18n/de/outline.js.map +1 -0
  773. package/dist/i18n/de/settings.js +12 -0
  774. package/dist/i18n/de/settings.js.map +1 -0
  775. package/dist/i18n/de/tables.js +15 -0
  776. package/dist/i18n/de/tables.js.map +1 -0
  777. package/dist/i18n/de/themes.js +26 -0
  778. package/dist/i18n/de/themes.js.map +1 -0
  779. package/dist/i18n/de/toolbar.js +22 -0
  780. package/dist/i18n/de/toolbar.js.map +1 -0
  781. package/dist/i18n/de/transcript.js +10 -0
  782. package/dist/i18n/de/transcript.js.map +1 -0
  783. package/dist/i18n/de/tree.js +31 -0
  784. package/dist/i18n/de/tree.js.map +1 -0
  785. package/dist/i18n/de.d.ts +502 -0
  786. package/dist/i18n/de.js +42 -0
  787. package/dist/i18n/de.js.map +1 -0
  788. package/dist/i18n/en/ai.js +168 -0
  789. package/dist/i18n/en/ai.js.map +1 -0
  790. package/dist/i18n/en/authors.js +21 -0
  791. package/dist/i18n/en/authors.js.map +1 -0
  792. package/dist/i18n/en/block.js +16 -0
  793. package/dist/i18n/en/block.js.map +1 -0
  794. package/dist/i18n/en/comments.js +35 -0
  795. package/dist/i18n/en/comments.js.map +1 -0
  796. package/dist/i18n/en/common.js +10 -0
  797. package/dist/i18n/en/common.js.map +1 -0
  798. package/dist/i18n/en/composites.js +145 -0
  799. package/dist/i18n/en/composites.js.map +1 -0
  800. package/dist/i18n/en/integrations.js +42 -0
  801. package/dist/i18n/en/integrations.js.map +1 -0
  802. package/dist/i18n/en/markdown.js +16 -0
  803. package/dist/i18n/en/markdown.js.map +1 -0
  804. package/dist/i18n/en/media.js +27 -0
  805. package/dist/i18n/en/media.js.map +1 -0
  806. package/dist/i18n/en/mentions.js +10 -0
  807. package/dist/i18n/en/mentions.js.map +1 -0
  808. package/dist/i18n/en/outline.js +9 -0
  809. package/dist/i18n/en/outline.js.map +1 -0
  810. package/dist/i18n/en/settings.js +12 -0
  811. package/dist/i18n/en/settings.js.map +1 -0
  812. package/dist/i18n/en/tables.js +15 -0
  813. package/dist/i18n/en/tables.js.map +1 -0
  814. package/dist/i18n/en/themes.js +26 -0
  815. package/dist/i18n/en/themes.js.map +1 -0
  816. package/dist/i18n/en/toolbar.js +22 -0
  817. package/dist/i18n/en/toolbar.js.map +1 -0
  818. package/dist/i18n/en/transcript.js +10 -0
  819. package/dist/i18n/en/transcript.js.map +1 -0
  820. package/dist/i18n/en/tree.js +31 -0
  821. package/dist/i18n/en/tree.js.map +1 -0
  822. package/dist/i18n/en.js +42 -0
  823. package/dist/i18n/en.js.map +1 -0
  824. package/dist/i18n/index.d.ts +24 -0
  825. package/dist/i18n/index.js +31 -0
  826. package/dist/i18n/index.js.map +1 -0
  827. package/dist/index.d.ts +6 -0
  828. package/dist/index.js +0 -0
  829. package/dist/integrations/composite-ai/composite-fill.d.ts +17 -0
  830. package/dist/integrations/composite-ai/composite-fill.js +129 -0
  831. package/dist/integrations/composite-ai/composite-fill.js.map +1 -0
  832. package/dist/integrations/composite-ai/composite-summary.d.ts +28 -0
  833. package/dist/integrations/composite-ai/composite-summary.js +143 -0
  834. package/dist/integrations/composite-ai/composite-summary.js.map +1 -0
  835. package/dist/integrations/composite-ai/document-transcribe.d.ts +14 -0
  836. package/dist/integrations/composite-ai/document-transcribe.js +89 -0
  837. package/dist/integrations/composite-ai/document-transcribe.js.map +1 -0
  838. package/dist/integrations/composite-ai/index.d.ts +22 -0
  839. package/dist/integrations/composite-ai/index.js +80 -0
  840. package/dist/integrations/composite-ai/index.js.map +1 -0
  841. package/dist/integrations/composite-media/index.d.ts +19 -0
  842. package/dist/integrations/composite-media/index.js +72 -0
  843. package/dist/integrations/composite-media/index.js.map +1 -0
  844. package/dist/integrations/transcript-ai/index.d.ts +16 -0
  845. package/dist/integrations/transcript-ai/index.js +63 -0
  846. package/dist/integrations/transcript-ai/index.js.map +1 -0
  847. package/dist/integrations/transcript-ai/protocol.d.ts +68 -0
  848. package/dist/integrations/transcript-ai/protocol.js +132 -0
  849. package/dist/integrations/transcript-ai/protocol.js.map +1 -0
  850. package/dist/integrations/transcript-ai/transcript-cleanup.d.ts +35 -0
  851. package/dist/integrations/transcript-ai/transcript-cleanup.js +169 -0
  852. package/dist/integrations/transcript-ai/transcript-cleanup.js.map +1 -0
  853. package/dist/markdown/MarkdownSurface.d.ts +25 -0
  854. package/dist/markdown/MarkdownSurface.js +93 -0
  855. package/dist/markdown/MarkdownSurface.js.map +1 -0
  856. package/dist/markdown/MarkdownSurface.vue.d.ts +76 -0
  857. package/dist/markdown/MarkdownSurface2.js +237 -0
  858. package/dist/markdown/MarkdownSurface2.js.map +1 -0
  859. package/dist/markdown/clipboard.d.ts +17 -0
  860. package/dist/markdown/clipboard.js +125 -0
  861. package/dist/markdown/clipboard.js.map +1 -0
  862. package/dist/markdown/document.d.ts +36 -0
  863. package/dist/markdown/document.js +100 -0
  864. package/dist/markdown/document.js.map +1 -0
  865. package/dist/markdown/frontmatter.d.ts +18 -0
  866. package/dist/markdown/frontmatter.js +32 -0
  867. package/dist/markdown/frontmatter.js.map +1 -0
  868. package/dist/markdown/index.d.ts +6 -0
  869. package/dist/markdown/index.js +6 -0
  870. package/dist/markdown/policy.d.ts +34 -0
  871. package/dist/markdown/policy.js +78 -0
  872. package/dist/markdown/policy.js.map +1 -0
  873. package/dist/markdown/react.d.ts +2 -0
  874. package/dist/markdown/react.js +1 -0
  875. package/dist/markdown/source-mode.d.ts +49 -0
  876. package/dist/markdown/source-mode.js +86 -0
  877. package/dist/markdown/source-mode.js.map +1 -0
  878. package/dist/markdown/vue.d.ts +2 -0
  879. package/dist/markdown/vue.js +1 -0
  880. package/dist/nuxt/module.d.ts +62 -0
  881. package/dist/nuxt/module.js +101 -0
  882. package/dist/nuxt/module.js.map +1 -0
  883. package/dist/nuxt/runtime/install-context.d.ts +16 -0
  884. package/dist/nuxt/runtime/install-context.js +25 -0
  885. package/dist/nuxt/runtime/install-context.js.map +1 -0
  886. package/dist/nuxt/runtime/plugins/editor-context-nuxt-ui.client.ts +8 -0
  887. package/dist/nuxt/runtime/server/api/ai/chat.post.d.ts +5 -0
  888. package/dist/nuxt/runtime/server/api/ai/chat.post.js +8 -0
  889. package/dist/nuxt/runtime/server/api/ai/chat.post.js.map +1 -0
  890. package/dist/nuxt/runtime/server/api/ai/complete.post.d.ts +5 -0
  891. package/dist/nuxt/runtime/server/api/ai/complete.post.js +8 -0
  892. package/dist/nuxt/runtime/server/api/ai/complete.post.js.map +1 -0
  893. package/dist/nuxt/runtime/server/api/ai/generate.post.d.ts +5 -0
  894. package/dist/nuxt/runtime/server/api/ai/generate.post.js +8 -0
  895. package/dist/nuxt/runtime/server/api/ai/generate.post.js.map +1 -0
  896. package/dist/nuxt/runtime/server/api/ai/models.get.d.ts +5 -0
  897. package/dist/nuxt/runtime/server/api/ai/models.get.js +8 -0
  898. package/dist/nuxt/runtime/server/api/ai/models.get.js.map +1 -0
  899. package/dist/nuxt/runtime/server/api/ai/transcribe.post.d.ts +5 -0
  900. package/dist/nuxt/runtime/server/api/ai/transcribe.post.js +8 -0
  901. package/dist/nuxt/runtime/server/api/ai/transcribe.post.js.map +1 -0
  902. package/dist/nuxt/runtime/server/api/ai/transcript-cleanup.post.d.ts +5 -0
  903. package/dist/nuxt/runtime/server/api/ai/transcript-cleanup.post.js +8 -0
  904. package/dist/nuxt/runtime/server/api/ai/transcript-cleanup.post.js.map +1 -0
  905. package/dist/nuxt/runtime/server/api/editor/assets/[id]/[name].get.d.ts +5 -0
  906. package/dist/nuxt/runtime/server/api/editor/assets/[id]/[name].get.js +8 -0
  907. package/dist/nuxt/runtime/server/api/editor/assets/[id]/[name].get.js.map +1 -0
  908. package/dist/nuxt/runtime/server/api/editor/assets/[id].post.d.ts +5 -0
  909. package/dist/nuxt/runtime/server/api/editor/assets/[id].post.js +8 -0
  910. package/dist/nuxt/runtime/server/api/editor/assets/[id].post.js.map +1 -0
  911. package/dist/nuxt/runtime/server/api/editor/settings.get.d.ts +5 -0
  912. package/dist/nuxt/runtime/server/api/editor/settings.get.js +8 -0
  913. package/dist/nuxt/runtime/server/api/editor/settings.get.js.map +1 -0
  914. package/dist/nuxt/runtime/server/api/editor/settings.put.d.ts +5 -0
  915. package/dist/nuxt/runtime/server/api/editor/settings.put.js +8 -0
  916. package/dist/nuxt/runtime/server/api/editor/settings.put.js.map +1 -0
  917. package/dist/nuxt/runtime/server/api/editor/tags.get.d.ts +5 -0
  918. package/dist/nuxt/runtime/server/api/editor/tags.get.js +8 -0
  919. package/dist/nuxt/runtime/server/api/editor/tags.get.js.map +1 -0
  920. package/dist/nuxt/runtime/server/api/editor/themes/[id].delete.d.ts +5 -0
  921. package/dist/nuxt/runtime/server/api/editor/themes/[id].delete.js +8 -0
  922. package/dist/nuxt/runtime/server/api/editor/themes/[id].delete.js.map +1 -0
  923. package/dist/nuxt/runtime/server/api/editor/themes/[id].get.d.ts +5 -0
  924. package/dist/nuxt/runtime/server/api/editor/themes/[id].get.js +8 -0
  925. package/dist/nuxt/runtime/server/api/editor/themes/[id].get.js.map +1 -0
  926. package/dist/nuxt/runtime/server/api/editor/themes/index.get.d.ts +5 -0
  927. package/dist/nuxt/runtime/server/api/editor/themes/index.get.js +8 -0
  928. package/dist/nuxt/runtime/server/api/editor/themes/index.get.js.map +1 -0
  929. package/dist/nuxt/runtime/server/api/editor/themes/index.post.d.ts +5 -0
  930. package/dist/nuxt/runtime/server/api/editor/themes/index.post.js +8 -0
  931. package/dist/nuxt/runtime/server/api/editor/themes/index.post.js.map +1 -0
  932. package/dist/nuxt/runtime/server/api/editor/users.get.d.ts +5 -0
  933. package/dist/nuxt/runtime/server/api/editor/users.get.js +8 -0
  934. package/dist/nuxt/runtime/server/api/editor/users.get.js.map +1 -0
  935. package/dist/nuxt/runtime/server/plugins/collab.d.ts +5 -0
  936. package/dist/nuxt/runtime/server/plugins/collab.js +10 -0
  937. package/dist/nuxt/runtime/server/plugins/collab.js.map +1 -0
  938. package/dist/nuxt/runtime/server/plugins/editor-server.d.ts +5 -0
  939. package/dist/nuxt/runtime/server/plugins/editor-server.js +20 -0
  940. package/dist/nuxt/runtime/server/plugins/editor-server.js.map +1 -0
  941. package/dist/nuxt/runtime/server/routes/collab/[id].d.ts +5 -0
  942. package/dist/nuxt/runtime/server/routes/collab/[id].js +35 -0
  943. package/dist/nuxt/runtime/server/routes/collab/[id].js.map +1 -0
  944. package/dist/nuxt/runtime/server/utils/editor-route.d.ts +11 -0
  945. package/dist/nuxt/runtime/server/utils/editor-route.js +49 -0
  946. package/dist/nuxt/runtime/server/utils/editor-route.js.map +1 -0
  947. package/dist/outline/EditorOutline.js +124 -0
  948. package/dist/outline/EditorOutline.js.map +1 -0
  949. package/dist/outline/EditorOutline.vue.d.ts +15 -0
  950. package/dist/outline/heading-outline.d.ts +26 -0
  951. package/dist/outline/heading-outline.js +46 -0
  952. package/dist/outline/heading-outline.js.map +1 -0
  953. package/dist/outline/index.d.ts +2 -0
  954. package/dist/outline/index.js +1 -0
  955. package/dist/outline/react/EditorOutline.d.ts +12 -0
  956. package/dist/outline/react/EditorOutline.js +112 -0
  957. package/dist/outline/react/EditorOutline.js.map +1 -0
  958. package/dist/outline/react.d.ts +2 -0
  959. package/dist/outline/react.js +1 -0
  960. package/dist/outline/vue.d.ts +2 -0
  961. package/dist/outline/vue.js +1 -0
  962. package/dist/presets/advanced.d.ts +33 -0
  963. package/dist/presets/advanced.js +50 -0
  964. package/dist/presets/advanced.js.map +1 -0
  965. package/dist/presets/simple.d.ts +9 -0
  966. package/dist/presets/simple.js +12 -0
  967. package/dist/presets/simple.js.map +1 -0
  968. package/dist/react/AdvancedEditor.d.ts +23 -0
  969. package/dist/react/AdvancedEditor.js +24 -0
  970. package/dist/react/AdvancedEditor.js.map +1 -0
  971. package/dist/react/EditorSettingsModal.d.ts +14 -0
  972. package/dist/react/EditorSettingsModal.js +40 -0
  973. package/dist/react/EditorSettingsModal.js.map +1 -0
  974. package/dist/react/EditorSettingsPanel.d.ts +18 -0
  975. package/dist/react/EditorSettingsPanel.js +40 -0
  976. package/dist/react/EditorSettingsPanel.js.map +1 -0
  977. package/dist/react/EditorSurface.d.ts +61 -0
  978. package/dist/react/EditorSurface.js +277 -0
  979. package/dist/react/EditorSurface.js.map +1 -0
  980. package/dist/react/EditorToolbar.d.ts +15 -0
  981. package/dist/react/EditorToolbar.js +182 -0
  982. package/dist/react/EditorToolbar.js.map +1 -0
  983. package/dist/react/Icon.d.ts +13 -0
  984. package/dist/react/Icon.js +19 -0
  985. package/dist/react/Icon.js.map +1 -0
  986. package/dist/react/SettingsSection.d.ts +10 -0
  987. package/dist/react/SettingsSection.js +22 -0
  988. package/dist/react/SettingsSection.js.map +1 -0
  989. package/dist/react/SimpleEditor.d.ts +27 -0
  990. package/dist/react/SimpleEditor.js +22 -0
  991. package/dist/react/SimpleEditor.js.map +1 -0
  992. package/dist/react/advanced-preset.d.ts +11 -0
  993. package/dist/react/advanced-preset.js +31 -0
  994. package/dist/react/advanced-preset.js.map +1 -0
  995. package/dist/react/advanced.d.ts +4 -0
  996. package/dist/react/advanced.js +3 -0
  997. package/dist/react/context.d.ts +12 -0
  998. package/dist/react/context.js +21 -0
  999. package/dist/react/context.js.map +1 -0
  1000. package/dist/react/editor-ui.d.ts +14 -0
  1001. package/dist/react/editor-ui.js +20 -0
  1002. package/dist/react/editor-ui.js.map +1 -0
  1003. package/dist/react/index.d.ts +17 -0
  1004. package/dist/react/index.js +17 -0
  1005. package/dist/react/notify.d.ts +6 -0
  1006. package/dist/react/notify.js +25 -0
  1007. package/dist/react/notify.js.map +1 -0
  1008. package/dist/react/settings.d.ts +17 -0
  1009. package/dist/react/settings.js +27 -0
  1010. package/dist/react/settings.js.map +1 -0
  1011. package/dist/react/simple.d.ts +2 -0
  1012. package/dist/react/simple.js +1 -0
  1013. package/dist/react/styles/advanced.css +18 -0
  1014. package/dist/react/styles/themes-bridge.css +26 -0
  1015. package/dist/react/styles/ui-vars.css +20 -0
  1016. package/dist/react/suggestion-renderer.d.ts +12 -0
  1017. package/dist/react/suggestion-renderer.js +90 -0
  1018. package/dist/react/suggestion-renderer.js.map +1 -0
  1019. package/dist/react/ui/alert.js +38 -0
  1020. package/dist/react/ui/alert.js.map +1 -0
  1021. package/dist/react/ui/avatar.js +24 -0
  1022. package/dist/react/ui/avatar.js.map +1 -0
  1023. package/dist/react/ui/badge.js +30 -0
  1024. package/dist/react/ui/badge.js.map +1 -0
  1025. package/dist/react/ui/button.js +50 -0
  1026. package/dist/react/ui/button.js.map +1 -0
  1027. package/dist/react/ui/collapsible.js +19 -0
  1028. package/dist/react/ui/collapsible.js.map +1 -0
  1029. package/dist/react/ui/command.js +47 -0
  1030. package/dist/react/ui/command.js.map +1 -0
  1031. package/dist/react/ui/dialog.js +88 -0
  1032. package/dist/react/ui/dialog.js.map +1 -0
  1033. package/dist/react/ui/dropdown-menu.js +70 -0
  1034. package/dist/react/ui/dropdown-menu.js.map +1 -0
  1035. package/dist/react/ui/input-group.js +57 -0
  1036. package/dist/react/ui/input-group.js.map +1 -0
  1037. package/dist/react/ui/input.js +16 -0
  1038. package/dist/react/ui/input.js.map +1 -0
  1039. package/dist/react/ui/label.js +17 -0
  1040. package/dist/react/ui/label.js.map +1 -0
  1041. package/dist/react/ui/popover.js +36 -0
  1042. package/dist/react/ui/popover.js.map +1 -0
  1043. package/dist/react/ui/radio-group.js +29 -0
  1044. package/dist/react/ui/radio-group.js.map +1 -0
  1045. package/dist/react/ui/select.js +88 -0
  1046. package/dist/react/ui/select.js.map +1 -0
  1047. package/dist/react/ui/separator.js +18 -0
  1048. package/dist/react/ui/separator.js.map +1 -0
  1049. package/dist/react/ui/switch.js +21 -0
  1050. package/dist/react/ui/switch.js.map +1 -0
  1051. package/dist/react/ui/table.js +44 -0
  1052. package/dist/react/ui/table.js.map +1 -0
  1053. package/dist/react/ui/tabs.js +41 -0
  1054. package/dist/react/ui/tabs.js.map +1 -0
  1055. package/dist/react/ui/textarea.js +15 -0
  1056. package/dist/react/ui/textarea.js.map +1 -0
  1057. package/dist/react/ui/tooltip.js +37 -0
  1058. package/dist/react/ui/tooltip.js.map +1 -0
  1059. package/dist/react/ui/utils.d.ts +5 -0
  1060. package/dist/react/ui/utils.js +10 -0
  1061. package/dist/react/ui/utils.js.map +1 -0
  1062. package/dist/react/use-editor-i18n.d.ts +12 -0
  1063. package/dist/react/use-editor-i18n.js +17 -0
  1064. package/dist/react/use-editor-i18n.js.map +1 -0
  1065. package/dist/react/use-notifier.d.ts +11 -0
  1066. package/dist/react/use-notifier.js +25 -0
  1067. package/dist/react/use-notifier.js.map +1 -0
  1068. package/dist/react/use-store.d.ts +6 -0
  1069. package/dist/react/use-store.js +10 -0
  1070. package/dist/react/use-store.js.map +1 -0
  1071. package/dist/schema/advanced.d.ts +14 -0
  1072. package/dist/schema/advanced.js +43 -0
  1073. package/dist/schema/advanced.js.map +1 -0
  1074. package/dist/schema/simple.d.ts +10 -0
  1075. package/dist/schema/simple.js +13 -0
  1076. package/dist/schema/simple.js.map +1 -0
  1077. package/dist/server/adapter.d.ts +101 -0
  1078. package/dist/server/ai.d.ts +101 -0
  1079. package/dist/server/ai.js +105 -0
  1080. package/dist/server/ai.js.map +1 -0
  1081. package/dist/server/collab-state.d.ts +16 -0
  1082. package/dist/server/collab-state.js +43 -0
  1083. package/dist/server/collab-state.js.map +1 -0
  1084. package/dist/server/collab.d.ts +68 -0
  1085. package/dist/server/collab.js +187 -0
  1086. package/dist/server/collab.js.map +1 -0
  1087. package/dist/server/errors.d.ts +17 -0
  1088. package/dist/server/errors.js +26 -0
  1089. package/dist/server/errors.js.map +1 -0
  1090. package/dist/server/handlers/ai.d.ts +223 -0
  1091. package/dist/server/handlers/ai.js +422 -0
  1092. package/dist/server/handlers/ai.js.map +1 -0
  1093. package/dist/server/handlers/context.d.ts +64 -0
  1094. package/dist/server/handlers/context.js +85 -0
  1095. package/dist/server/handlers/context.js.map +1 -0
  1096. package/dist/server/handlers/editor.d.ts +107 -0
  1097. package/dist/server/handlers/editor.js +241 -0
  1098. package/dist/server/handlers/editor.js.map +1 -0
  1099. package/dist/server/handlers/index.d.ts +4 -0
  1100. package/dist/server/handlers/index.js +4 -0
  1101. package/dist/server/host.d.ts +61 -0
  1102. package/dist/server/host.js +105 -0
  1103. package/dist/server/host.js.map +1 -0
  1104. package/dist/server/index.d.ts +8 -0
  1105. package/dist/server/index.js +7 -0
  1106. package/dist/server/node.d.ts +24 -0
  1107. package/dist/server/node.js +54 -0
  1108. package/dist/server/node.js.map +1 -0
  1109. package/dist/server/rate-limit.d.ts +22 -0
  1110. package/dist/server/rate-limit.js +34 -0
  1111. package/dist/server/rate-limit.js.map +1 -0
  1112. package/dist/settings/index.d.ts +110 -0
  1113. package/dist/settings/index.js +114 -0
  1114. package/dist/settings/index.js.map +1 -0
  1115. package/dist/settings/values.d.ts +35 -0
  1116. package/dist/settings/values.js +41 -0
  1117. package/dist/settings/values.js.map +1 -0
  1118. package/dist/styles/ai.css +77 -0
  1119. package/dist/styles/authors.css +18 -0
  1120. package/dist/styles/block-ui.css +16 -0
  1121. package/dist/styles/collab.css +26 -0
  1122. package/dist/styles/comments.css +11 -0
  1123. package/dist/styles/composites.css +56 -0
  1124. package/dist/styles/core.css +99 -0
  1125. package/dist/styles/media.css +8 -0
  1126. package/dist/styles/mentions.css +24 -0
  1127. package/dist/styles/tables.css +25 -0
  1128. package/dist/styles/themes.css +622 -0
  1129. package/dist/styles/tokens.css +29 -0
  1130. package/dist/styles/transcript.css +13 -0
  1131. package/dist/tree/DocumentTree.js +595 -0
  1132. package/dist/tree/DocumentTree.js.map +1 -0
  1133. package/dist/tree/DocumentTree.vue.d.ts +36 -0
  1134. package/dist/tree/folder-paths.js +11 -0
  1135. package/dist/tree/folder-paths.js.map +1 -0
  1136. package/dist/tree/index.d.ts +4 -0
  1137. package/dist/tree/index.js +1 -0
  1138. package/dist/tree/react/DocumentTree.d.ts +24 -0
  1139. package/dist/tree/react/DocumentTree.js +579 -0
  1140. package/dist/tree/react/DocumentTree.js.map +1 -0
  1141. package/dist/tree/react/use-tree-view.d.ts +14 -0
  1142. package/dist/tree/react/use-tree-view.js +21 -0
  1143. package/dist/tree/react/use-tree-view.js.map +1 -0
  1144. package/dist/tree/react.d.ts +3 -0
  1145. package/dist/tree/react.js +3 -0
  1146. package/dist/tree/store.d.ts +45 -0
  1147. package/dist/tree/tree-items.js +221 -0
  1148. package/dist/tree/tree-items.js.map +1 -0
  1149. package/dist/tree/tree-view-model.d.ts +29 -0
  1150. package/dist/tree/tree-view-model.js +71 -0
  1151. package/dist/tree/tree-view-model.js.map +1 -0
  1152. package/dist/tree/tree-view.d.ts +15 -0
  1153. package/dist/tree/tree-view.js +21 -0
  1154. package/dist/tree/tree-view.js.map +1 -0
  1155. package/dist/tree/types.d.ts +23 -0
  1156. package/dist/tree/types.js +0 -0
  1157. package/dist/tree/vue.d.ts +3 -0
  1158. package/dist/tree/vue.js +3 -0
  1159. package/dist/vue/AdvancedEditor.js +100 -0
  1160. package/dist/vue/AdvancedEditor.js.map +1 -0
  1161. package/dist/vue/AdvancedEditor.vue.d.ts +71 -0
  1162. package/dist/vue/SimpleEditor.js +61 -0
  1163. package/dist/vue/SimpleEditor.js.map +1 -0
  1164. package/dist/vue/SimpleEditor.vue.d.ts +36 -0
  1165. package/dist/vue/advanced-preset.d.ts +13 -0
  1166. package/dist/vue/advanced-preset.js +33 -0
  1167. package/dist/vue/advanced-preset.js.map +1 -0
  1168. package/dist/vue/advanced.d.ts +3 -0
  1169. package/dist/vue/advanced.js +3 -0
  1170. package/dist/vue/components/EditorSettingsModal.js +69 -0
  1171. package/dist/vue/components/EditorSettingsModal.js.map +1 -0
  1172. package/dist/vue/components/EditorSettingsModal.vue.d.ts +24 -0
  1173. package/dist/vue/components/EditorSettingsPanel.js +58 -0
  1174. package/dist/vue/components/EditorSettingsPanel.js.map +1 -0
  1175. package/dist/vue/components/EditorSettingsPanel.vue.d.ts +29 -0
  1176. package/dist/vue/components/EditorSurface.js +229 -0
  1177. package/dist/vue/components/EditorSurface.js.map +1 -0
  1178. package/dist/vue/components/EditorSurface.vue.d.ts +68 -0
  1179. package/dist/vue/components/EditorToolbar.js +189 -0
  1180. package/dist/vue/components/EditorToolbar.js.map +1 -0
  1181. package/dist/vue/components/EditorToolbar.vue.d.ts +17 -0
  1182. package/dist/vue/components/SettingsSection.js +26 -0
  1183. package/dist/vue/components/SettingsSection.js.map +1 -0
  1184. package/dist/vue/components/SettingsSection.vue.d.ts +21 -0
  1185. package/dist/vue/components/SuggestionList.js +91 -0
  1186. package/dist/vue/components/SuggestionList.js.map +1 -0
  1187. package/dist/vue/components/SuggestionList.vue.d.ts +19 -0
  1188. package/dist/vue/context.d.ts +24 -0
  1189. package/dist/vue/context.js +42 -0
  1190. package/dist/vue/context.js.map +1 -0
  1191. package/dist/vue/index.d.ts +26 -0
  1192. package/dist/vue/index.js +16 -0
  1193. package/dist/vue/kit/index.d.ts +3 -0
  1194. package/dist/vue/kit/index.js +1 -0
  1195. package/dist/vue/kit/nuxt-ui.css +24 -0
  1196. package/dist/vue/kit/nuxt-ui.d.ts +31 -0
  1197. package/dist/vue/kit/nuxt-ui.js +101 -0
  1198. package/dist/vue/kit/nuxt-ui.js.map +1 -0
  1199. package/dist/vue/kit/types.d.ts +370 -0
  1200. package/dist/vue/kit/use-ui-kit.d.ts +12 -0
  1201. package/dist/vue/kit/use-ui-kit.js +17 -0
  1202. package/dist/vue/kit/use-ui-kit.js.map +1 -0
  1203. package/dist/vue/notify.d.ts +12 -0
  1204. package/dist/vue/notify.js +27 -0
  1205. package/dist/vue/notify.js.map +1 -0
  1206. package/dist/vue/settings.d.ts +16 -0
  1207. package/dist/vue/settings.js +64 -0
  1208. package/dist/vue/settings.js.map +1 -0
  1209. package/dist/vue/simple.d.ts +2 -0
  1210. package/dist/vue/simple.js +1 -0
  1211. package/dist/vue/store-ref.d.ts +20 -0
  1212. package/dist/vue/store-ref.js +59 -0
  1213. package/dist/vue/store-ref.js.map +1 -0
  1214. package/dist/vue/suggestion-renderer.d.ts +6 -0
  1215. package/dist/vue/suggestion-renderer.js +20 -0
  1216. package/dist/vue/suggestion-renderer.js.map +1 -0
  1217. package/dist/vue/use-editor-i18n.d.ts +12 -0
  1218. package/dist/vue/use-editor-i18n.js +17 -0
  1219. package/dist/vue/use-editor-i18n.js.map +1 -0
  1220. package/dist/vue/use-editor-ui.d.ts +15 -0
  1221. package/dist/vue/use-editor-ui.js +23 -0
  1222. package/dist/vue/use-editor-ui.js.map +1 -0
  1223. package/dist/vue/use-notifier.d.ts +11 -0
  1224. package/dist/vue/use-notifier.js +19 -0
  1225. package/dist/vue/use-notifier.js.map +1 -0
  1226. package/docs/extending.md +538 -0
  1227. package/docs/integration.md +537 -0
  1228. package/docs/llms.md +375 -0
  1229. package/docs/usage.md +1071 -0
  1230. package/package.json +619 -4
@@ -0,0 +1,71 @@
1
+ import { kindOf, languageOf } from "../code/kind.js";
2
+ import _sfc_main$1 from "../code/CodeSurface2.js";
3
+ import _sfc_main$2 from "../markdown/MarkdownSurface2.js";
4
+ import { computed, createBlock, createSlots, defineComponent, guardReactiveProps, mergeProps, normalizeProps, openBlock, renderList, renderSlot, withCtx } from "vue";
5
+ //#region src/document/DocumentSurface.vue
6
+ const _sfc_main = /*@__PURE__*/ defineComponent({
7
+ __name: "DocumentSurface",
8
+ props: {
9
+ path: {},
10
+ modelValue: { default: "" },
11
+ mime: {},
12
+ editable: {
13
+ type: Boolean,
14
+ default: true
15
+ },
16
+ language: {},
17
+ wordWrap: {
18
+ type: Boolean,
19
+ default: true
20
+ },
21
+ markdown: {}
22
+ },
23
+ emits: [
24
+ "update:modelValue",
25
+ "save",
26
+ "ready"
27
+ ],
28
+ setup(__props, { emit: __emit }) {
29
+ const props = __props;
30
+ const emit = __emit;
31
+ const kind = computed(() => kindOf(props.path, props.mime));
32
+ const language = computed(() => props.language ?? languageOf(props.path));
33
+ return (_ctx, _cache) => {
34
+ return kind.value === "markdown" ? (openBlock(), createBlock(_sfc_main$2, mergeProps({ key: 0 }, __props.markdown, {
35
+ "model-value": __props.modelValue,
36
+ editable: __props.editable,
37
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = (text) => emit("update:modelValue", text)),
38
+ onReady: _cache[1] || (_cache[1] = (editor) => emit("ready", {
39
+ kind: "markdown",
40
+ editor
41
+ }))
42
+ }), createSlots({ _: 2 }, [renderList(_ctx.$slots, (_, name) => {
43
+ return {
44
+ name,
45
+ fn: withCtx((slotProps) => [renderSlot(_ctx.$slots, name, normalizeProps(guardReactiveProps(slotProps ?? {})))])
46
+ };
47
+ })]), 1040, ["model-value", "editable"])) : kind.value === "code" ? (openBlock(), createBlock(_sfc_main$1, {
48
+ key: 1,
49
+ "model-value": __props.modelValue,
50
+ editable: __props.editable,
51
+ language: language.value,
52
+ "word-wrap": __props.wordWrap,
53
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = (text) => emit("update:modelValue", text)),
54
+ onSave: _cache[3] || (_cache[3] = (text) => emit("save", text)),
55
+ onReady: _cache[4] || (_cache[4] = (view) => emit("ready", {
56
+ kind: "code",
57
+ view
58
+ }))
59
+ }, null, 8, [
60
+ "model-value",
61
+ "editable",
62
+ "language",
63
+ "word-wrap"
64
+ ])) : renderSlot(_ctx.$slots, "binary", { path: __props.path }, void 0, void 0, 2);
65
+ };
66
+ }
67
+ });
68
+ //#endregion
69
+ export { _sfc_main as default };
70
+
71
+ //# sourceMappingURL=DocumentSurface2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentSurface2.js","names":["$slots","_openBlock","_createBlock","MarkdownSurface","_mergeProps","_createSlots","_renderList","_withCtx","_renderSlot","_normalizeProps","_guardReactiveProps","CodeSurface"],"sources":["../../src/document/DocumentSurface.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { Editor } from '@tiptap/vue-3'\nimport type { EditorView } from '@codemirror/view'\nimport { computed } from 'vue'\nimport CodeSurface from '../code/CodeSurface.vue'\nimport { type DocumentKind, kindOf, languageOf } from '../code/kind'\nimport MarkdownSurface from '../markdown/MarkdownSurface.vue'\n\ntype MarkdownProps = Omit<InstanceType<typeof MarkdownSurface>['$props'], 'modelValue' | 'editable' | 'onReady' | 'onUpdate:modelValue'>\n\n/** Which surface was mounted and its editor, for the `ready` event. */\nexport type DocumentSurfaceTarget = { kind: 'markdown', editor: Editor } | { kind: 'code', view: EditorView }\n\nconst props = withDefaults(defineProps<{\n /** The document's path; its extension (and `mime`) decides the surface (`kindOf`) and the code language (`languageOf`). */\n path: string\n /** The document text. */\n modelValue?: string\n mime?: string\n editable?: boolean\n /** Code surface only: the language id, overriding the one the path implies. */\n language?: string\n /** Code surface only. */\n wordWrap?: boolean\n /** The Markdown surface's own props (`preset` at least), used when `path` is a Markdown file. */\n markdown: MarkdownProps\n}>(), { modelValue: '', editable: true, wordWrap: true })\n\nconst emit = defineEmits<{\n 'update:modelValue': [text: string]\n /** Mod-S in the code surface, with the current text. */\n 'save': [text: string]\n 'ready': [target: DocumentSurfaceTarget]\n}>()\n\nconst kind = computed<DocumentKind>(() => kindOf(props.path, props.mime))\nconst language = computed(() => props.language ?? languageOf(props.path))\n</script>\n\n<template>\n <MarkdownSurface\n v-if=\"kind === 'markdown'\"\n v-bind=\"markdown\"\n :model-value=\"modelValue\"\n :editable=\"editable\"\n @update:model-value=\"text => emit('update:modelValue', text)\"\n @ready=\"editor => emit('ready', { kind: 'markdown', editor })\"\n >\n <template v-for=\"(_, name) in $slots\" :key=\"name\" #[name]=\"slotProps\">\n <slot :name=\"name\" v-bind=\"slotProps ?? {}\" />\n </template>\n </MarkdownSurface>\n <CodeSurface\n v-else-if=\"kind === 'code'\"\n :model-value=\"modelValue\"\n :editable=\"editable\"\n :language=\"language\"\n :word-wrap=\"wordWrap\"\n @update:model-value=\"text => emit('update:modelValue', text)\"\n @save=\"text => emit('save', text)\"\n @ready=\"view => emit('ready', { kind: 'code', view })\"\n />\n <slot v-else name=\"binary\" :path=\"path\" />\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;EAaA,MAAM,QAAQ;EAed,MAAM,OAAO;EAOb,MAAM,OAAO,eAA6B,OAAO,MAAM,MAAM,MAAM,IAAI,CAAC;EACxE,MAAM,WAAW,eAAe,MAAM,YAAY,WAAW,MAAM,IAAI,CAAC;;GAK9D,OAAA,KAAA,UAAI,cADZC,UAAA,GAAAC,YAWkBC,aAXlBC,WAWkB,EAAA,KAAA,EAAA,GATR,QAAA,UAAQ;IACf,eAAa,QAAA;IACb,UAAU,QAAA;IACV,uBAAkB,OAAA,OAAA,OAAA,MAAE,SAAQ,KAAI,qBAAsB,IAAI;IAC1D,SAAK,OAAA,OAAA,OAAA,MAAE,WAAU,KAAI,SAAA;KAAA,MAAA;KAA8B;IAAM,CAAA;GAE5BJ,CAAAA,GAAAA,YAAAA,EAAAA,GAAAA,EAAAA,GAAAA,CAAAA,WAAAA,KAAAA,SAAZ,GAAG,SAAI;;KAA0B;KACjD,IAAAO,SADyD,cAAS,CAClEC,WAA8C,KAAA,QAAjC,MAAIC,eAAAC,mBAAU,aAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;GAI3B,CAAA,CAAA,CAAA,GAAA,MAAA,CAAA,eAAA,UAAA,CAAA,KAAA,KAAA,UAAI,UADjBT,UAAA,GAAAC,YASES,aAAA;;IAPC,eAAa,QAAA;IACb,UAAU,QAAA;IACV,UAAU,SAAA;IACV,aAAW,QAAA;IACX,uBAAkB,OAAA,OAAA,OAAA,MAAE,SAAQ,KAAI,qBAAsB,IAAI;IAC1D,QAAI,OAAA,OAAA,OAAA,MAAE,SAAQ,KAAI,QAAS,IAAI;IAC/B,SAAK,OAAA,OAAA,OAAA,MAAE,SAAQ,KAAI,SAAA;KAAA,MAAA;KAA0B;IAAI,CAAA;;;;;;GAEpD,CAAA,KAAAH,WAA0C,KAAA,QAAA,UAAA,EAAd,MAAM,QAAA,KAAI,GAAA,KAAA,GAAA,KAAA,GAAA,CAAA"}
@@ -0,0 +1,2 @@
1
+ import { DocumentSurface, DocumentSurfaceProps, DocumentSurfaceTarget } from "./DocumentSurface.js";
2
+ export { DocumentSurface, type DocumentSurfaceProps, type DocumentSurfaceTarget };
@@ -0,0 +1 @@
1
+ export { DocumentSurface } from "./DocumentSurface.js";
@@ -0,0 +1,2 @@
1
+ import _default, { DocumentSurfaceTarget } from "./DocumentSurface.vue.js";
2
+ export { _default as DocumentSurface, type DocumentSurfaceTarget };
@@ -0,0 +1 @@
1
+ export { default as DocumentSurface } from "./DocumentSurface2.js";
@@ -0,0 +1,69 @@
1
+ import { Translate } from "../../i18n/index.js";
2
+ import { Notifier } from "../../core/notify.js";
3
+ import { ReadonlyStore } from "../../core/store.js";
4
+ import { AiReviewOutcome } from "./ai-review.js";
5
+ import { AgentOp, AgentOpFeedback, AgentOpOutcome } from "./protocol/agent-ops.js";
6
+ import "./protocol/index.js";
7
+ import { AgentScope } from "./agent-ops.js";
8
+ import { Editor } from "@tiptap/core";
9
+ //#region src/features/ai/agent-op-review.d.ts
10
+ /** Client state of a proposed operation: its outcome so far, the target's text, its review hunks. */
11
+ export interface AgentOpState {
12
+ outcome: AgentOpOutcome;
13
+ snippet: string;
14
+ hunks: string[];
15
+ decided: Record<AiReviewOutcome, number>;
16
+ /** Its final outcome went to the model with a user message. */
17
+ reported: boolean;
18
+ }
19
+ /** Snapshot of the proposed operations; every change replaces `ops` (never mutated in place). */
20
+ export interface AgentOpReviewState {
21
+ /** Operation states by operation id. */
22
+ ops: Readonly<Record<string, AgentOpState>>;
23
+ }
24
+ export interface AgentOpReviewOptions {
25
+ /** Receives the notice of a decision that could not be applied because the text changed underneath. */
26
+ notify: Notifier;
27
+ /** The app's translator (`EditorContext.t`): that notice and the snippets of the operations' target blocks. */
28
+ t: Translate;
29
+ }
30
+ export interface AgentOpReview {
31
+ state: ReadonlyStore<AgentOpReviewState>;
32
+ /**
33
+ * Opens the in-document review of `ops`: every operation is checked against `scope` (the selected blocks; null:
34
+ * the whole document) and the document as it is now. Returns the outcome of each operation, in order: `pending`
35
+ * while it waits for the user's decision, otherwise why nothing is shown (`blocked`, `missing`, `unchanged`,
36
+ * `overlap`, `empty`). Operation IDs (`op`) must be unique within this review.
37
+ */
38
+ propose: (editor: Editor, ops: AgentOp[], scope: AgentScope | null) => AgentOpOutcome[];
39
+ /** Accepts or rejects the open hunks of operation `id`. */
40
+ decide: (editor: Editor, id: string, accept: boolean) => void;
41
+ /** Scrolls to operation `op`: its first open hunk (selected for accept/reject), else its target block. */
42
+ reveal: (editor: Editor, op: AgentOp) => boolean;
43
+ /**
44
+ * What the user decided since the last call: every operation whose outcome the model has not heard yet (open ones
45
+ * too, as `pending`). Operations with a final outcome count as reported afterwards, so the next call omits them.
46
+ */
47
+ feedback: () => AgentOpFeedback[];
48
+ /** Like `feedback`, but reports nothing as heard: for a transport that marks the operations only once its message went out (`markReported`). */
49
+ unreported: () => AgentOpFeedback[];
50
+ /** Marks the operations `ids` as heard by the model; unknown IDs and operations that are still pending are left alone. */
51
+ markReported: (ids: readonly string[]) => void;
52
+ /** The number the next operation ID of a conversation-wide sequence (`op1`, `op2`, …) starts at; never reset. */
53
+ nextOp: () => number;
54
+ /** Advances `nextOp` past `count` operations that were given IDs. */
55
+ advanceOp: (count: number) => void;
56
+ /** Forgets every operation state and feedback; reviews still open in an editor stay open and their decisions are ignored from now on. */
57
+ reset: () => void;
58
+ /** Rejects the reviews still open in `editor` that this one started, then forgets everything (`reset`). */
59
+ end: (editor: Editor) => void;
60
+ }
61
+ /**
62
+ * The review of agent edit operations, framework free: the chat's own transport and a host's (an agent working
63
+ * elsewhere that proposes edits through an action) drive it the same way. `propose` shows the operations as in-document
64
+ * hunks the user accepts or rejects (AiReviewBar); `state` follows the decisions; `feedback` reads them back.
65
+ * Client only: needs the `AiReview` extension in the editor.
66
+ */
67
+ export declare function createAgentOpReview({ notify, t }: AgentOpReviewOptions): AgentOpReview;
68
+ //#endregion
69
+ //# sourceMappingURL=agent-op-review.d.ts.map
@@ -0,0 +1,182 @@
1
+ import { createStore } from "../../core/store.js";
2
+ import { releaseRanges } from "../../core/doc-anchors.js";
3
+ import { agentOpTarget } from "./protocol/agent-ops.js";
4
+ import { agentOpChange, agentOpSnippet } from "./agent-ops.js";
5
+ import { acceptAiReview, aiReviewKey, rejectAiReview, setActiveAiReviewHunk, startAiReview } from "./ai-review.js";
6
+ //#region src/features/ai/agent-op-review.ts
7
+ /** The state without operations; shared so an emptied review and an emptied chat hold the identical object. */
8
+ const NO_AGENT_OPS = Object.freeze({});
9
+ /**
10
+ * The review of agent edit operations, framework free: the chat's own transport and a host's (an agent working
11
+ * elsewhere that proposes edits through an action) drive it the same way. `propose` shows the operations as in-document
12
+ * hunks the user accepts or rejects (AiReviewBar); `state` follows the decisions; `feedback` reads them back.
13
+ * Client only: needs the `AiReview` extension in the editor.
14
+ */
15
+ function createAgentOpReview({ notify, t }) {
16
+ const store = createStore({ ops: NO_AGENT_OPS });
17
+ const targets = /* @__PURE__ */ new Map();
18
+ const open = /* @__PURE__ */ new Set();
19
+ let nextOp = 1;
20
+ const patch = (ops) => store.set({ ops });
21
+ function onDecision(decisions) {
22
+ const ops = { ...store.get().ops };
23
+ for (const { changeId, outcome } of decisions) {
24
+ const current = ops[changeId];
25
+ if (!current) continue;
26
+ const decided = {
27
+ ...current.decided,
28
+ [outcome]: current.decided[outcome] + 1
29
+ };
30
+ const { accepted, rejected, invalid } = decided;
31
+ const state = {
32
+ ...current,
33
+ decided
34
+ };
35
+ if (accepted + rejected + invalid >= state.hunks.length) {
36
+ const kinds = [
37
+ "accepted",
38
+ "rejected",
39
+ "invalid"
40
+ ].filter((kind) => decided[kind] > 0);
41
+ state.outcome = kinds.length === 1 ? kinds[0] : "partial";
42
+ }
43
+ ops[changeId] = state;
44
+ if (outcome === "invalid") notify({
45
+ id: "ai-review-invalid",
46
+ title: t("ai.op.invalid.title"),
47
+ description: t("ai.op.invalid.description"),
48
+ kind: "info"
49
+ });
50
+ }
51
+ patch(ops);
52
+ }
53
+ function propose(editor, proposed, scope) {
54
+ const allowed = scope ? new Set(scope.ids) : null;
55
+ const changes = [];
56
+ const states = {};
57
+ for (const op of proposed) {
58
+ const change = agentOpChange(editor, op, allowed);
59
+ states[op.op] = {
60
+ outcome: typeof change === "string" ? change : "pending",
61
+ snippet: agentOpSnippet(editor.state.doc, op, t),
62
+ hunks: [],
63
+ decided: {
64
+ accepted: 0,
65
+ rejected: 0,
66
+ invalid: 0
67
+ },
68
+ reported: false
69
+ };
70
+ targets.set(op.op, {
71
+ type: op.type,
72
+ target: agentOpTarget(op)
73
+ });
74
+ if (typeof change !== "string") changes.push(change);
75
+ }
76
+ patch({
77
+ ...store.get().ops,
78
+ ...states
79
+ });
80
+ if (changes.length) {
81
+ let started;
82
+ const review = startAiReview(editor, changes, {
83
+ onDecision,
84
+ onDone: () => {
85
+ if (started) open.delete(started);
86
+ }
87
+ });
88
+ started = review;
89
+ if (review.hunks) open.add(review);
90
+ releaseRanges(editor, changes.map((c) => c.kind === "insert" ? c.at : c.range));
91
+ const ops = { ...store.get().ops };
92
+ for (const { id, reason } of review.skipped) if (ops[id]) ops[id] = {
93
+ ...ops[id],
94
+ outcome: reason
95
+ };
96
+ for (const hunk of aiReviewKey.getState(editor.state)?.hunks ?? []) {
97
+ const state = hunk.reviewId === review.id ? ops[hunk.changeId] : void 0;
98
+ if (state) ops[hunk.changeId] = {
99
+ ...state,
100
+ hunks: [...state.hunks, hunk.id]
101
+ };
102
+ }
103
+ patch(ops);
104
+ }
105
+ const { ops } = store.get();
106
+ return proposed.map((op) => ops[op.op].outcome);
107
+ }
108
+ function decide(editor, id, accept) {
109
+ const hunks = store.get().ops[id]?.hunks;
110
+ if (!hunks?.length) return;
111
+ if (accept) acceptAiReview(editor, hunks);
112
+ else rejectAiReview(editor, hunks);
113
+ }
114
+ function reveal(editor, op) {
115
+ const hunks = store.get().ops[op.op]?.hunks;
116
+ const pending = aiReviewKey.getState(editor.state)?.hunks.find((hunk) => hunks?.includes(hunk.id));
117
+ if (pending) {
118
+ setActiveAiReviewHunk(editor.view, pending.id);
119
+ editor.view.dom.querySelector(`[data-ai-hunk="${pending.id}"]`)?.scrollIntoView({
120
+ block: "center",
121
+ behavior: "smooth"
122
+ });
123
+ return true;
124
+ }
125
+ const target = agentOpTarget(op);
126
+ return target !== null && editor.commands.revealBlock(target);
127
+ }
128
+ /** Operations whose final outcome the model has not heard yet (open ones too, as „noch nicht entschieden“), in proposal order. */
129
+ function unreported() {
130
+ return Object.entries(store.get().ops).flatMap(([op, state]) => {
131
+ const known = targets.get(op);
132
+ return known && !state.reported ? [{
133
+ op,
134
+ ...known,
135
+ outcome: state.outcome
136
+ }] : [];
137
+ });
138
+ }
139
+ function markReported(ids) {
140
+ const { ops } = store.get();
141
+ if (!ids.some((id) => ops[id] && ops[id].outcome !== "pending")) return;
142
+ const next = { ...ops };
143
+ for (const id of ids) if (next[id] && next[id].outcome !== "pending") next[id] = {
144
+ ...next[id],
145
+ reported: true
146
+ };
147
+ patch(next);
148
+ }
149
+ function feedback() {
150
+ const heard = unreported();
151
+ markReported(heard.map(({ op }) => op));
152
+ return heard;
153
+ }
154
+ function reset() {
155
+ targets.clear();
156
+ open.clear();
157
+ patch(NO_AGENT_OPS);
158
+ }
159
+ function end(editor) {
160
+ if (!editor.isDestroyed) for (const review of [...open]) review.cancel();
161
+ reset();
162
+ }
163
+ return {
164
+ state: store,
165
+ propose,
166
+ decide,
167
+ reveal,
168
+ feedback,
169
+ unreported,
170
+ markReported,
171
+ nextOp: () => nextOp,
172
+ advanceOp: (count) => {
173
+ nextOp += count;
174
+ },
175
+ reset,
176
+ end
177
+ };
178
+ }
179
+ //#endregion
180
+ export { NO_AGENT_OPS, createAgentOpReview };
181
+
182
+ //# sourceMappingURL=agent-op-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-op-review.js","names":[],"sources":["../../../src/features/ai/agent-op-review.ts"],"sourcesContent":["import type { Editor } from '@tiptap/core'\nimport { releaseRanges } from '../../core'\nimport type { Notifier } from '../../core/notify'\nimport { createStore, type ReadonlyStore } from '../../core/store'\nimport type { Translate } from '../../i18n'\nimport { type AgentScope, agentOpChange, agentOpSnippet } from './agent-ops'\nimport { type AiReviewChange, type AiReviewDecision, type AiReviewHandle, type AiReviewOutcome, acceptAiReview, aiReviewKey, rejectAiReview, setActiveAiReviewHunk, startAiReview } from './ai-review'\nimport { type AgentOp, type AgentOpFeedback, type AgentOpOutcome, agentOpTarget } from './protocol'\n\n/** Client state of a proposed operation: its outcome so far, the target's text, its review hunks. */\nexport interface AgentOpState {\n outcome: AgentOpOutcome\n snippet: string\n hunks: string[]\n decided: Record<AiReviewOutcome, number>\n /** Its final outcome went to the model with a user message. */\n reported: boolean\n}\n\n/** Snapshot of the proposed operations; every change replaces `ops` (never mutated in place). */\nexport interface AgentOpReviewState {\n /** Operation states by operation id. */\n ops: Readonly<Record<string, AgentOpState>>\n}\n\nexport interface AgentOpReviewOptions {\n /** Receives the notice of a decision that could not be applied because the text changed underneath. */\n notify: Notifier\n /** The app's translator (`EditorContext.t`): that notice and the snippets of the operations' target blocks. */\n t: Translate\n}\n\nexport interface AgentOpReview {\n state: ReadonlyStore<AgentOpReviewState>\n /**\n * Opens the in-document review of `ops`: every operation is checked against `scope` (the selected blocks; null:\n * the whole document) and the document as it is now. Returns the outcome of each operation, in order: `pending`\n * while it waits for the user's decision, otherwise why nothing is shown (`blocked`, `missing`, `unchanged`,\n * `overlap`, `empty`). Operation IDs (`op`) must be unique within this review.\n */\n propose: (editor: Editor, ops: AgentOp[], scope: AgentScope | null) => AgentOpOutcome[]\n /** Accepts or rejects the open hunks of operation `id`. */\n decide: (editor: Editor, id: string, accept: boolean) => void\n /** Scrolls to operation `op`: its first open hunk (selected for accept/reject), else its target block. */\n reveal: (editor: Editor, op: AgentOp) => boolean\n /**\n * What the user decided since the last call: every operation whose outcome the model has not heard yet (open ones\n * too, as `pending`). Operations with a final outcome count as reported afterwards, so the next call omits them.\n */\n feedback: () => AgentOpFeedback[]\n /** Like `feedback`, but reports nothing as heard: for a transport that marks the operations only once its message went out (`markReported`). */\n unreported: () => AgentOpFeedback[]\n /** Marks the operations `ids` as heard by the model; unknown IDs and operations that are still pending are left alone. */\n markReported: (ids: readonly string[]) => void\n /** The number the next operation ID of a conversation-wide sequence (`op1`, `op2`, …) starts at; never reset. */\n nextOp: () => number\n /** Advances `nextOp` past `count` operations that were given IDs. */\n advanceOp: (count: number) => void\n /** Forgets every operation state and feedback; reviews still open in an editor stay open and their decisions are ignored from now on. */\n reset: () => void\n /** Rejects the reviews still open in `editor` that this one started, then forgets everything (`reset`). */\n end: (editor: Editor) => void\n}\n\n/** The state without operations; shared so an emptied review and an emptied chat hold the identical object. */\nexport const NO_AGENT_OPS: AgentOpReviewState['ops'] = Object.freeze({})\n\n/**\n * The review of agent edit operations, framework free: the chat's own transport and a host's (an agent working\n * elsewhere that proposes edits through an action) drive it the same way. `propose` shows the operations as in-document\n * hunks the user accepts or rejects (AiReviewBar); `state` follows the decisions; `feedback` reads them back.\n * Client only: needs the `AiReview` extension in the editor.\n */\nexport function createAgentOpReview({ notify, t }: AgentOpReviewOptions): AgentOpReview {\n const store = createStore<AgentOpReviewState>({ ops: NO_AGENT_OPS })\n // What `AgentOpFeedback` names beyond the state: the operation's type and target block.\n const targets = new Map<string, Pick<AgentOpFeedback, 'type' | 'target'>>()\n const open = new Set<AiReviewHandle>()\n // Never reset, so operation IDs stay unique even for reviews still open from an earlier conversation.\n let nextOp = 1\n\n const patch = (ops: Readonly<Record<string, AgentOpState>>) => store.set({ ops })\n\n function onDecision(decisions: AiReviewDecision[]) {\n const ops = { ...store.get().ops }\n for (const { changeId, outcome } of decisions) {\n const current = ops[changeId]\n if (!current) continue // from a conversation that was reset\n const decided = { ...current.decided, [outcome]: current.decided[outcome] + 1 }\n const { accepted, rejected, invalid } = decided\n const state: AgentOpState = { ...current, decided }\n if (accepted + rejected + invalid >= state.hunks.length) {\n const kinds = (['accepted', 'rejected', 'invalid'] as const).filter(kind => decided[kind] > 0)\n state.outcome = kinds.length === 1 ? kinds[0]! : 'partial'\n }\n ops[changeId] = state\n if (outcome === 'invalid') notify({ id: 'ai-review-invalid', title: t('ai.op.invalid.title'), description: t('ai.op.invalid.description'), kind: 'info' })\n }\n patch(ops)\n }\n\n function propose(editor: Editor, proposed: AgentOp[], scope: AgentScope | null): AgentOpOutcome[] {\n const allowed = scope ? new Set(scope.ids) : null\n const changes: AiReviewChange[] = []\n const states: Record<string, AgentOpState> = {}\n for (const op of proposed) {\n const change = agentOpChange(editor, op, allowed)\n states[op.op] = {\n outcome: typeof change === 'string' ? change : 'pending',\n snippet: agentOpSnippet(editor.state.doc, op, t),\n hunks: [],\n decided: { accepted: 0, rejected: 0, invalid: 0 },\n reported: false,\n }\n targets.set(op.op, { type: op.type, target: agentOpTarget(op) })\n if (typeof change !== 'string') changes.push(change)\n }\n // The states are published before the review starts: it may report decisions synchronously.\n patch({ ...store.get().ops, ...states })\n if (changes.length) {\n let started: AiReviewHandle | undefined\n const review = startAiReview(editor, changes, {\n onDecision,\n onDone: () => { if (started) open.delete(started) },\n })\n started = review\n if (review.hunks) open.add(review)\n // The review keeps anchors of its own.\n releaseRanges(editor, changes.map(c => c.kind === 'insert' ? c.at : c.range))\n const ops = { ...store.get().ops }\n for (const { id, reason } of review.skipped) {\n if (ops[id]) ops[id] = { ...ops[id], outcome: reason }\n }\n for (const hunk of aiReviewKey.getState(editor.state)?.hunks ?? []) {\n const state = hunk.reviewId === review.id ? ops[hunk.changeId] : undefined\n if (state) ops[hunk.changeId] = { ...state, hunks: [...state.hunks, hunk.id] }\n }\n patch(ops)\n }\n const { ops } = store.get()\n return proposed.map(op => ops[op.op]!.outcome)\n }\n\n function decide(editor: Editor, id: string, accept: boolean) {\n const hunks = store.get().ops[id]?.hunks\n if (!hunks?.length) return\n if (accept) acceptAiReview(editor, hunks)\n else rejectAiReview(editor, hunks)\n }\n\n function reveal(editor: Editor, op: AgentOp): boolean {\n const hunks = store.get().ops[op.op]?.hunks\n const pending = aiReviewKey.getState(editor.state)?.hunks.find(hunk => hunks?.includes(hunk.id))\n if (pending) {\n setActiveAiReviewHunk(editor.view, pending.id)\n editor.view.dom.querySelector(`[data-ai-hunk=\"${pending.id}\"]`)?.scrollIntoView({ block: 'center', behavior: 'smooth' })\n return true\n }\n const target = agentOpTarget(op)\n return target !== null && editor.commands.revealBlock(target)\n }\n\n /** Operations whose final outcome the model has not heard yet (open ones too, as „noch nicht entschieden“), in proposal order. */\n function unreported(): AgentOpFeedback[] {\n return Object.entries(store.get().ops).flatMap(([op, state]) => {\n const known = targets.get(op)\n return known && !state.reported ? [{ op, ...known, outcome: state.outcome }] : []\n })\n }\n\n function markReported(ids: readonly string[]) {\n const { ops } = store.get()\n if (!ids.some(id => ops[id] && ops[id].outcome !== 'pending')) return\n const next = { ...ops }\n for (const id of ids) {\n if (next[id] && next[id].outcome !== 'pending') next[id] = { ...next[id], reported: true }\n }\n patch(next)\n }\n\n function feedback(): AgentOpFeedback[] {\n const heard = unreported()\n markReported(heard.map(({ op }) => op))\n return heard\n }\n\n function reset() {\n targets.clear()\n open.clear()\n patch(NO_AGENT_OPS)\n }\n\n function end(editor: Editor) {\n if (!editor.isDestroyed) for (const review of [...open]) review.cancel()\n reset()\n }\n\n return { state: store, propose, decide, reveal, feedback, unreported, markReported, nextOp: () => nextOp, advanceOp: (count) => { nextOp += count }, reset, end }\n}\n"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import "./ai-review.js";
2
+ import "./protocol/index.js";
3
+ import { Editor } from "@tiptap/core";
4
+ import { EditorState } from "@tiptap/pm/state";
5
+ import { Node as Node$1 } from "@tiptap/pm/model";
6
+ //#region src/features/ai/agent-ops.d.ts
7
+ /** Edit scope of a non-empty selection: the top-level blocks it touches, and every block ID inside them. */
8
+ export interface AgentScope {
9
+ blocks: number;
10
+ ids: string[];
11
+ }
12
+ /** The scope chat edits are limited to: the top-level blocks the selection touches; null without a selection (whole document). */
13
+ export declare function selectionScope(state: EditorState): AgentScope | null;
14
+ //#endregion
15
+ //# sourceMappingURL=agent-ops.d.ts.map
@@ -0,0 +1,228 @@
1
+ import { blockIdOf, findBlockById } from "../../core/schema/block-ids.js";
2
+ import { isBlockContainer, isChromeNode } from "../../core/schema/node-flags.js";
3
+ import { isWrapperBlock } from "../../core/convert.js";
4
+ import { conversionsOf, parseBlocks } from "../../core/pipeline.js";
5
+ import { blockConversion, parseConversionTarget } from "../../core/block-convert.js";
6
+ import { captureRange } from "../../core/doc-anchors.js";
7
+ import { selectionRange } from "../../core/selection-range.js";
8
+ import { agentOpTarget } from "./protocol/agent-ops.js";
9
+ import { Fragment } from "@tiptap/pm/model";
10
+ //#region src/features/ai/agent-ops.ts
11
+ /** The scope chat edits are limited to: the top-level blocks the selection touches; null without a selection (whole document). */
12
+ function selectionScope(state) {
13
+ if (state.selection.empty) return null;
14
+ const { from, to } = selectionRange(state);
15
+ const ids = [];
16
+ let blocks = 0;
17
+ state.doc.forEach((node, offset) => {
18
+ if (offset >= to || offset + node.nodeSize <= from) return;
19
+ blocks++;
20
+ const own = blockIdOf(node);
21
+ if (own) ids.push(own);
22
+ node.descendants((child) => {
23
+ const id = blockIdOf(child);
24
+ if (id) ids.push(id);
25
+ return !child.isTextblock;
26
+ });
27
+ });
28
+ return {
29
+ blocks,
30
+ ids
31
+ };
32
+ }
33
+ /** Catalog keys of how the chat shows an outcome: the badge label and the badge's hover text. */
34
+ const AGENT_OP_OUTCOME_KEYS = {
35
+ pending: {
36
+ badge: "ai.opBadge.pending",
37
+ hover: "ai.opTitle.pending"
38
+ },
39
+ accepted: {
40
+ badge: "ai.opBadge.accepted",
41
+ hover: "ai.opTitle.accepted"
42
+ },
43
+ rejected: {
44
+ badge: "ai.opBadge.rejected",
45
+ hover: "ai.opTitle.rejected"
46
+ },
47
+ partial: {
48
+ badge: "ai.opBadge.partial",
49
+ hover: "ai.opTitle.partial"
50
+ },
51
+ invalid: {
52
+ badge: "ai.opBadge.invalid",
53
+ hover: "ai.opTitle.invalid"
54
+ },
55
+ unchanged: {
56
+ badge: "ai.opBadge.unchanged",
57
+ hover: "ai.opTitle.unchanged"
58
+ },
59
+ missing: {
60
+ badge: "ai.opBadge.missing",
61
+ hover: "ai.opTitle.missing"
62
+ },
63
+ overlap: {
64
+ badge: "ai.opBadge.overlap",
65
+ hover: "ai.opTitle.overlap"
66
+ },
67
+ empty: {
68
+ badge: "ai.opBadge.empty",
69
+ hover: "ai.opTitle.empty"
70
+ },
71
+ blocked: {
72
+ badge: "ai.opBadge.blocked",
73
+ hover: "ai.opTitle.blocked"
74
+ }
75
+ };
76
+ /** Catalog keys of the snippets of text-less media blocks. */
77
+ const MEDIA_BLOCK_KEYS = {
78
+ image: "ai.op.snippet.image",
79
+ audio: "ai.op.snippet.audio",
80
+ video: "ai.op.snippet.video",
81
+ file: "ai.op.snippet.file"
82
+ };
83
+ /** Short text of the block an operation targets, for the chat („Dokumentanfang“ for an insertion at the start). */
84
+ function agentOpSnippet(doc, op, t) {
85
+ const target = agentOpTarget(op);
86
+ if (target === null) return t("ai.op.snippet.documentStart");
87
+ const node = findBlockById(doc, target)?.node;
88
+ if (!node) return t("ai.op.snippet.missing");
89
+ const text = node.textContent.replace(/\s+/g, " ").trim();
90
+ if (!text) return t(MEDIA_BLOCK_KEYS[node.type.name] ?? "ai.op.snippet.emptyBlock");
91
+ return text.length > 60 ? `${text.slice(0, 60)}…` : text;
92
+ }
93
+ /** List and quote markers the model may echo from the document lines (`- `, `1. `, `> `) at the start of each line. */
94
+ const LINE_PREFIX = /^(?:[ \t]*(?:[-*+]|\d+[.)])[ \t]+|[ \t]*>[ \t]?)+/gm;
95
+ /**
96
+ * The review change of an operation, re-checked against the scope the request was sent with (`allowed`, null: whole
97
+ * document): 'blocked' when it points outside, 'missing' when its block is gone, 'unchanged' for a conversion that
98
+ * changes nothing or is impossible there.
99
+ * - update: a single paragraph, or a single block of the same type and attributes (a speaker line of the same
100
+ * speaker), is diffed within the block's content, so the block keeps its type and speaker; anything else (another
101
+ * speaker's `**Name:**`, several blocks, a different block type) replaces the whole block. On a composite, a
102
+ * `::: kind` fence (exactly one composite) replaces the whole composite, anything else only its body.
103
+ * - delete: the block, or the smallest list item, list or quote around it that would be invalid without it.
104
+ * - add: after the target's block in the document, in a composite body or in the body of a host block holding blocks
105
+ * (a callout); a list of the same type after a list item goes after that item, a host block of the same type after
106
+ * one of its body blocks after that whole block.
107
+ * - convert: the block (a heading becoming a composite with its group) replaced by `convertBlockTo`'s result.
108
+ */
109
+ function agentOpChange(editor, op, allowed) {
110
+ const target = agentOpTarget(op);
111
+ if (allowed && (target === null || !allowed.has(target))) return "blocked";
112
+ const { state } = editor;
113
+ const { doc, schema } = state;
114
+ if (op.type === "add" && target === null) return {
115
+ id: op.op,
116
+ kind: "insert",
117
+ at: captureRange(editor, {
118
+ from: 0,
119
+ to: 0
120
+ }),
121
+ markdown: op.markdown
122
+ };
123
+ const found = target === null ? null : findBlockById(doc, target);
124
+ if (!found) return "missing";
125
+ const { node, pos } = found;
126
+ const $pos = doc.resolve(pos);
127
+ if (op.type === "add") {
128
+ const firstType = parseBlocks(editor, op.markdown).blocks[0]?.type;
129
+ const holdsBody = (n) => isBlockContainer(n) || isWrapperBlock(n);
130
+ let container = $pos.depth;
131
+ while (container > 0 && !holdsBody($pos.node(container))) container--;
132
+ let at = container === $pos.depth ? pos + node.nodeSize : $pos.after(container + 1);
133
+ if (container > 0 && isWrapperBlock($pos.node(container)) && $pos.node(container).type.name === firstType) at = $pos.after(container);
134
+ for (let depth = $pos.depth; depth > 0; depth--) {
135
+ if ($pos.node(depth).type.name !== "listItem") continue;
136
+ if ($pos.node(depth - 1).type.name === firstType) at = $pos.after(depth);
137
+ break;
138
+ }
139
+ return {
140
+ id: op.op,
141
+ kind: "insert",
142
+ at: captureRange(editor, {
143
+ from: at,
144
+ to: at
145
+ }),
146
+ markdown: op.markdown
147
+ };
148
+ }
149
+ if (op.type === "delete") {
150
+ let from = pos;
151
+ let to = pos + node.nodeSize;
152
+ for (let $from = $pos; $from.depth > 0; $from = doc.resolve(from)) {
153
+ const parent = $from.parent;
154
+ const start = $from.start();
155
+ if (parent.type.validContent(parent.content.cut(0, from - start).append(parent.content.cut(to - start)))) break;
156
+ from = $from.before();
157
+ to = $from.after();
158
+ }
159
+ return {
160
+ id: op.op,
161
+ kind: "delete",
162
+ range: captureRange(editor, {
163
+ from,
164
+ to
165
+ })
166
+ };
167
+ }
168
+ if (op.type === "convert") {
169
+ const providers = conversionsOf(editor);
170
+ const to = parseConversionTarget(providers, op.to);
171
+ const conversion = to && blockConversion(providers, state, $pos, to);
172
+ if (!conversion) return "unchanged";
173
+ return {
174
+ id: op.op,
175
+ kind: "blocks",
176
+ range: captureRange(editor, conversion),
177
+ blocks: Fragment.from(conversion.blocks)
178
+ };
179
+ }
180
+ const whole = {
181
+ from: pos,
182
+ to: pos + node.nodeSize
183
+ };
184
+ if (isBlockContainer(node)) {
185
+ const { blocks } = parseBlocks(editor, op.markdown);
186
+ if (blocks.length === 1 && blocks[0].type === node.type.name) return {
187
+ id: op.op,
188
+ range: captureRange(editor, whole),
189
+ markdown: op.markdown
190
+ };
191
+ let body = pos + 1;
192
+ node.forEach((child) => {
193
+ if (isChromeNode(child)) body += child.nodeSize;
194
+ });
195
+ return {
196
+ id: op.op,
197
+ range: captureRange(editor, {
198
+ from: body,
199
+ to: pos + node.nodeSize - 1
200
+ }),
201
+ markdown: op.markdown
202
+ };
203
+ }
204
+ if (!node.isTextblock) return {
205
+ id: op.op,
206
+ range: captureRange(editor, whole),
207
+ markdown: op.markdown
208
+ };
209
+ let marked = false;
210
+ for (let depth = $pos.depth; depth > 0 && !marked; depth--) marked = ["listItem", "blockquote"].includes($pos.node(depth).type.name);
211
+ const markdown = marked ? op.markdown.replace(LINE_PREFIX, "") : op.markdown;
212
+ const { blocks } = parseBlocks(editor, markdown);
213
+ const result = blocks.length === 1 ? schema.nodeFromJSON(blocks[0]) : null;
214
+ const sameKind = result?.type === node.type && Object.keys(node.attrs).every((name) => name === "id" || result.attrs[name] === node.attrs[name]);
215
+ const range = node.content.size > 0 && (sameKind || result?.type.name === "paragraph") ? {
216
+ from: pos + 1,
217
+ to: pos + 1 + node.content.size
218
+ } : whole;
219
+ return {
220
+ id: op.op,
221
+ range: captureRange(editor, range),
222
+ markdown
223
+ };
224
+ }
225
+ //#endregion
226
+ export { AGENT_OP_OUTCOME_KEYS, agentOpChange, agentOpSnippet, selectionScope };
227
+
228
+ //# sourceMappingURL=agent-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-ops.js","names":[],"sources":["../../../src/features/ai/agent-ops.ts"],"sourcesContent":["import type { Editor } from '@tiptap/core'\nimport { Fragment, type Node as PMNode } from '@tiptap/pm/model'\nimport type { EditorState } from '@tiptap/pm/state'\nimport { blockConversion, captureRange, conversionsOf, isWrapperBlock, parseBlocks, parseConversionTarget, selectionRange } from '../../core'\nimport { BLOCK_ID_ATTR, blockIdOf, findBlockById, isBlockContainer, isChromeNode } from '../../core/schema'\nimport type { MessageKey, Translate } from '../../i18n'\nimport type { AiReviewChange } from './ai-review'\nimport { type AgentOp, type AgentOpOutcome, agentOpTarget } from './protocol'\n\n/** Edit scope of a non-empty selection: the top-level blocks it touches, and every block ID inside them. */\nexport interface AgentScope { blocks: number, ids: string[] }\n\n/** The scope chat edits are limited to: the top-level blocks the selection touches; null without a selection (whole document). */\nexport function selectionScope(state: EditorState): AgentScope | null {\n if (state.selection.empty) return null\n const { from, to } = selectionRange(state)\n const ids: string[] = []\n let blocks = 0\n state.doc.forEach((node, offset) => {\n if (offset >= to || offset + node.nodeSize <= from) return\n blocks++\n const own = blockIdOf(node)\n if (own) ids.push(own)\n node.descendants((child) => {\n const id = blockIdOf(child)\n if (id) ids.push(id)\n return !child.isTextblock\n })\n })\n return { blocks, ids }\n}\n\n/** Catalog keys of how the chat shows an outcome: the badge label and the badge's hover text. */\nexport const AGENT_OP_OUTCOME_KEYS: Record<AgentOpOutcome, { badge: MessageKey, hover: MessageKey }> = {\n pending: { badge: 'ai.opBadge.pending', hover: 'ai.opTitle.pending' },\n accepted: { badge: 'ai.opBadge.accepted', hover: 'ai.opTitle.accepted' },\n rejected: { badge: 'ai.opBadge.rejected', hover: 'ai.opTitle.rejected' },\n partial: { badge: 'ai.opBadge.partial', hover: 'ai.opTitle.partial' },\n invalid: { badge: 'ai.opBadge.invalid', hover: 'ai.opTitle.invalid' },\n unchanged: { badge: 'ai.opBadge.unchanged', hover: 'ai.opTitle.unchanged' },\n missing: { badge: 'ai.opBadge.missing', hover: 'ai.opTitle.missing' },\n overlap: { badge: 'ai.opBadge.overlap', hover: 'ai.opTitle.overlap' },\n empty: { badge: 'ai.opBadge.empty', hover: 'ai.opTitle.empty' },\n blocked: { badge: 'ai.opBadge.blocked', hover: 'ai.opTitle.blocked' },\n}\n\n/** Catalog keys of the snippets of text-less media blocks. */\nconst MEDIA_BLOCK_KEYS: Record<string, MessageKey> = { image: 'ai.op.snippet.image', audio: 'ai.op.snippet.audio', video: 'ai.op.snippet.video', file: 'ai.op.snippet.file' }\n\n/** Short text of the block an operation targets, for the chat („Dokumentanfang“ for an insertion at the start). */\nexport function agentOpSnippet(doc: PMNode, op: AgentOp, t: Translate): string {\n const target = agentOpTarget(op)\n if (target === null) return t('ai.op.snippet.documentStart')\n const node = findBlockById(doc, target)?.node\n if (!node) return t('ai.op.snippet.missing')\n const text = node.textContent.replace(/\\s+/g, ' ').trim()\n if (!text) return t(MEDIA_BLOCK_KEYS[node.type.name] ?? 'ai.op.snippet.emptyBlock')\n return text.length > 60 ? `${text.slice(0, 60)}…` : text\n}\n\n/** List and quote markers the model may echo from the document lines (`- `, `1. `, `> `) at the start of each line. */\nconst LINE_PREFIX = /^(?:[ \\t]*(?:[-*+]|\\d+[.)])[ \\t]+|[ \\t]*>[ \\t]?)+/gm\n\n/**\n * The review change of an operation, re-checked against the scope the request was sent with (`allowed`, null: whole\n * document): 'blocked' when it points outside, 'missing' when its block is gone, 'unchanged' for a conversion that\n * changes nothing or is impossible there.\n * - update: a single paragraph, or a single block of the same type and attributes (a speaker line of the same\n * speaker), is diffed within the block's content, so the block keeps its type and speaker; anything else (another\n * speaker's `**Name:**`, several blocks, a different block type) replaces the whole block. On a composite, a\n * `::: kind` fence (exactly one composite) replaces the whole composite, anything else only its body.\n * - delete: the block, or the smallest list item, list or quote around it that would be invalid without it.\n * - add: after the target's block in the document, in a composite body or in the body of a host block holding blocks\n * (a callout); a list of the same type after a list item goes after that item, a host block of the same type after\n * one of its body blocks after that whole block.\n * - convert: the block (a heading becoming a composite with its group) replaced by `convertBlockTo`'s result.\n */\nexport function agentOpChange(editor: Editor, op: AgentOp, allowed: ReadonlySet<string> | null): AiReviewChange | 'blocked' | 'missing' | 'unchanged' {\n const target = agentOpTarget(op)\n if (allowed && (target === null || !allowed.has(target))) return 'blocked'\n const { state } = editor\n const { doc, schema } = state\n\n if (op.type === 'add' && target === null) return { id: op.op, kind: 'insert', at: captureRange(editor, { from: 0, to: 0 }), markdown: op.markdown }\n const found = target === null ? null : findBlockById(doc, target)\n if (!found) return 'missing'\n const { node, pos } = found\n const $pos = doc.resolve(pos)\n\n if (op.type === 'add') {\n const firstType = parseBlocks(editor, op.markdown).blocks[0]?.type\n // After the block around the target that sits in the document, in a composite body or in a host block that holds\n // blocks (a callout), so an insertion after a body block stays inside its wrapper, unless it adds a wrapper of the\n // same type (then after the whole wrapper). Lists and quotes insert after the whole list or quote.\n const holdsBody = (n: PMNode) => isBlockContainer(n) || isWrapperBlock(n)\n let container = $pos.depth\n while (container > 0 && !holdsBody($pos.node(container))) container--\n let at = container === $pos.depth ? pos + node.nodeSize : $pos.after(container + 1)\n if (container > 0 && isWrapperBlock($pos.node(container)) && $pos.node(container).type.name === firstType) at = $pos.after(container)\n for (let depth = $pos.depth; depth > 0; depth--) {\n if ($pos.node(depth).type.name !== 'listItem') continue\n if ($pos.node(depth - 1).type.name === firstType) at = $pos.after(depth)\n break\n }\n return { id: op.op, kind: 'insert', at: captureRange(editor, { from: at, to: at }), markdown: op.markdown }\n }\n\n if (op.type === 'delete') {\n let from = pos\n let to = pos + node.nodeSize\n for (let $from = $pos; $from.depth > 0; $from = doc.resolve(from)) {\n const parent = $from.parent\n const start = $from.start()\n if (parent.type.validContent(parent.content.cut(0, from - start).append(parent.content.cut(to - start)))) break\n from = $from.before()\n to = $from.after()\n }\n return { id: op.op, kind: 'delete', range: captureRange(editor, { from, to }) }\n }\n\n if (op.type === 'convert') {\n const providers = conversionsOf(editor)\n const to = parseConversionTarget(providers, op.to)\n const conversion = to && blockConversion(providers, state, $pos, to)\n if (!conversion) return 'unchanged'\n return { id: op.op, kind: 'blocks', range: captureRange(editor, conversion), blocks: Fragment.from(conversion.blocks) }\n }\n\n const whole = { from: pos, to: pos + node.nodeSize }\n if (isBlockContainer(node)) {\n const { blocks } = parseBlocks(editor, op.markdown)\n if (blocks.length === 1 && blocks[0]!.type === node.type.name) return { id: op.op, range: captureRange(editor, whole), markdown: op.markdown }\n let body = pos + 1\n node.forEach((child) => {\n if (isChromeNode(child)) body += child.nodeSize\n })\n return { id: op.op, range: captureRange(editor, { from: body, to: pos + node.nodeSize - 1 }), markdown: op.markdown }\n }\n if (!node.isTextblock) return { id: op.op, range: captureRange(editor, whole), markdown: op.markdown }\n // Lines of blocks in lists and quotes carry their markers, which the model may echo; composite bodies carry none (a\n // fence the model writes there keeps its `> description` and list items).\n let marked = false\n for (let depth = $pos.depth; depth > 0 && !marked; depth--) marked = ['listItem', 'blockquote'].includes($pos.node(depth).type.name)\n const markdown = marked ? op.markdown.replace(LINE_PREFIX, '') : op.markdown\n const { blocks } = parseBlocks(editor, markdown)\n const result = blocks.length === 1 ? schema.nodeFromJSON(blocks[0]!) : null\n const sameKind = result?.type === node.type && Object.keys(node.attrs).every(name => name === BLOCK_ID_ATTR || result.attrs[name] === node.attrs[name])\n const inside = node.content.size > 0 && (sameKind || result?.type.name === 'paragraph')\n const range = inside ? { from: pos + 1, to: pos + 1 + node.content.size } : whole\n return { id: op.op, range: captureRange(editor, range), markdown }\n}\n"],"mappings":"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"}