@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,107 @@
1
+ import { HandlerContext, HandlerRequest, HandlerResponse } from "./context.js";
2
+ //#region src/server/handlers/editor.d.ts
3
+ /** Body schema of `settingsPut`: the complete editor settings. */
4
+ export declare const settingsPutBodySchema: import("zod").ZodObject<{
5
+ version: import("zod").ZodLiteral<1>;
6
+ editing: import("zod").ZodObject<{
7
+ headingConversionScope: import("zod").ZodEnum<{
8
+ container: "container";
9
+ document: "document";
10
+ heading: "heading";
11
+ }>;
12
+ authorColors: import("zod").ZodBoolean;
13
+ authorColorStyle: import("zod").ZodEnum<{
14
+ background: "background";
15
+ text: "text";
16
+ }>;
17
+ commentsLayout: import("zod").ZodEnum<{
18
+ margin: "margin";
19
+ inline: "inline";
20
+ }>;
21
+ }, import("zod/v4/core").$strip>;
22
+ ai: import("zod").ZodObject<{
23
+ autocomplete: import("zod").ZodBoolean;
24
+ slots: import("zod").ZodRecord<import("zod").ZodEnum<{
25
+ complete: "complete";
26
+ rewrite: "rewrite";
27
+ generate: "generate";
28
+ }> & import("zod/v4/core").$partial, import("zod").ZodString>;
29
+ translateLanguage: import("zod").ZodEnum<{
30
+ Deutsch: "Deutsch";
31
+ Englisch: "Englisch";
32
+ Französisch: "Französisch";
33
+ Spanisch: "Spanisch";
34
+ Italienisch: "Italienisch";
35
+ }>;
36
+ }, import("zod/v4/core").$strip>;
37
+ blocks: import("zod").ZodObject<{
38
+ defaultKind: import("zod").ZodString;
39
+ structure: import("zod").ZodEnum<{
40
+ flat: "flat";
41
+ composite: "composite";
42
+ }>;
43
+ treeRoot: import("zod").ZodEnum<{
44
+ file: "file";
45
+ folders: "folders";
46
+ }>;
47
+ kindIcon: import("zod").ZodEnum<{
48
+ always: "always";
49
+ hover: "hover";
50
+ }>;
51
+ dragHandle: import("zod").ZodEnum<{
52
+ always: "always";
53
+ hover: "hover";
54
+ }>;
55
+ }, import("zod/v4/core").$strip>;
56
+ appearance: import("zod").ZodObject<{
57
+ theme: import("zod").ZodNullable<import("zod").ZodString>;
58
+ }, import("zod/v4/core").$strip>;
59
+ }, import("zod/v4/core").$strip>;
60
+ /**
61
+ * The authenticated user's editor settings, normalized with `parseEditorSettings`. `204` when the adapter keeps no
62
+ * settings (the client stays on localStorage); `200` with JSON `null` when the user has none stored yet (the client
63
+ * uploads its local ones).
64
+ */
65
+ export declare function settingsGet(ctx: HandlerContext, request: HandlerRequest): Promise<HandlerResponse>;
66
+ /** Stores the authenticated user's editor settings (complete, validated: 400 otherwise); `501` when the adapter keeps none. */
67
+ export declare function settingsPut(ctx: HandlerContext, request: HandlerRequest): Promise<HandlerResponse>;
68
+ /**
69
+ * All `#` tag names used in any document, deduplicated and sorted. Documents currently open in the collaboration server
70
+ * are read from their live Y.Doc (a tag added in document A shows up in document B before the debounced store); all
71
+ * others from the adapter's stored content.
72
+ */
73
+ export declare function listWorkspaceTags({ adapter, collab }: HandlerContext): Promise<string[]>;
74
+ /**
75
+ * Tag names for the `#` popup: tags used in any document, filtered by the normalised `?q=` (prefix matches first, then
76
+ * substrings). Requires an authenticated user via the adapter.
77
+ */
78
+ export declare function tagsGet(ctx: HandlerContext, request: HandlerRequest): Promise<HandlerResponse>;
79
+ /**
80
+ * Users for the `@` mention popup, filtered case-insensitively by `?q=` (prefix matches first, then substrings).
81
+ * Requires an authenticated user via the adapter.
82
+ */
83
+ export declare function usersGet(ctx: HandlerContext, request: HandlerRequest): Promise<HandlerResponse>;
84
+ /**
85
+ * Stores a file (multipart field `file`) in the package of document `params.id` (or `scratch` for editors not bound to
86
+ * a stored document); answers `{ url, name }`. Requires an authenticated user via the adapter.
87
+ */
88
+ export declare function assetPost(ctx: HandlerContext, request: HandlerRequest): Promise<HandlerResponse>;
89
+ /**
90
+ * The stored file `params.name` of document `params.id`, with `Range` support (media elements send the session cookie
91
+ * like any same-origin request). Requires an authenticated user via the adapter.
92
+ */
93
+ export declare function assetGet(ctx: HandlerContext, request: HandlerRequest): Promise<HandlerResponse>;
94
+ /** The theme library (builtins and uploads) as `ThemeRecord[]`. `501` when the adapter has no theme support. */
95
+ export declare function themesGet(ctx: HandlerContext, request: HandlerRequest): Promise<HandlerResponse>;
96
+ /** `theme.css` of theme `params.id` as `text/css`. `400` for a malformed id, `404` for an unknown one, `501` when the adapter has no theme support. */
97
+ export declare function themeGet(ctx: HandlerContext, request: HandlerRequest): Promise<HandlerResponse>;
98
+ /** Deletes the uploaded theme `params.id` (`204`). `400` for a malformed id, `404` for an unknown one, `403` for a builtin, `501` when the adapter has no theme write support. */
99
+ export declare function themeDelete(ctx: HandlerContext, request: HandlerRequest): Promise<HandlerResponse>;
100
+ /**
101
+ * Uploads an Obsidian theme into the shared library: multipart `css` (File, required), `manifest` (File) and `name`
102
+ * (string) optional. Answers 201 with the new `ThemeRecord`; the id is the slug of the name, made unique with `-2`,
103
+ * `-3` … against the library.
104
+ */
105
+ export declare function themePost(ctx: HandlerContext, request: HandlerRequest): Promise<HandlerResponse>;
106
+ //#endregion
107
+ //# sourceMappingURL=editor.d.ts.map
@@ -0,0 +1,241 @@
1
+ import { THEME_ID, editorSettingsSchema, parseEditorSettings } from "../../settings/index.js";
2
+ import { collectTagNames, normalizeTagName } from "../../features/mentions/tag.js";
3
+ import { ASSET_DOCUMENT_ID, ASSET_NAME, assetUrl } from "../../features/media/assets.js";
4
+ import { MAX_MEDIA_BYTES, MEDIA_TYPES, mediaKindOf, mediaMime } from "../../features/media/schema.js";
5
+ import { HttpError } from "../errors.js";
6
+ import { COLLAB_FIELD } from "../collab.js";
7
+ import { authenticated, empty, json, readBody, text } from "./context.js";
8
+ import { MAX_THEME_BYTES, themeManifestSchema } from "../../features/themes/schema.js";
9
+ import { yDocToProsemirrorJSON } from "@tiptap/y-tiptap";
10
+ //#region src/server/handlers/editor.ts
11
+ /** Body schema of `settingsPut`: the complete editor settings. */
12
+ const settingsPutBodySchema = editorSettingsSchema;
13
+ const MAX_USERS = 20;
14
+ const MAX_TAGS = 20;
15
+ /**
16
+ * The authenticated user's editor settings, normalized with `parseEditorSettings`. `204` when the adapter keeps no
17
+ * settings (the client stays on localStorage); `200` with JSON `null` when the user has none stored yet (the client
18
+ * uploads its local ones).
19
+ */
20
+ async function settingsGet(ctx, request) {
21
+ const user = await authenticated(ctx, request);
22
+ if (!ctx.adapter.loadSettings) return empty();
23
+ const stored = await ctx.adapter.loadSettings(user);
24
+ if (stored === null || stored === void 0) return json(null);
25
+ return json(parseEditorSettings(stored));
26
+ }
27
+ /** Stores the authenticated user's editor settings (complete, validated: 400 otherwise); `501` when the adapter keeps none. */
28
+ async function settingsPut(ctx, request) {
29
+ const user = await authenticated(ctx, request);
30
+ if (!ctx.adapter.storeSettings) throw new HttpError(501, "Einstellungen werden nicht gespeichert");
31
+ const settings = await readBody(request, settingsPutBodySchema);
32
+ await ctx.adapter.storeSettings(user, settings);
33
+ return empty();
34
+ }
35
+ /**
36
+ * All `#` tag names used in any document, deduplicated and sorted. Documents currently open in the collaboration server
37
+ * are read from their live Y.Doc (a tag added in document A shows up in document B before the debounced store); all
38
+ * others from the adapter's stored content.
39
+ */
40
+ async function listWorkspaceTags({ adapter, collab }) {
41
+ const names = /* @__PURE__ */ new Set();
42
+ const open = collab?.hocuspocus.documents;
43
+ if (open) for (const doc of open.values()) collectTagNames(yDocToProsemirrorJSON(doc, COLLAB_FIELD), names);
44
+ for (const { id, content } of await adapter.listContents()) if (!open?.has(id)) collectTagNames(content, names);
45
+ return [...names].sort((a, b) => a.localeCompare(b, "de"));
46
+ }
47
+ /**
48
+ * Tag names for the `#` popup: tags used in any document, filtered by the normalised `?q=` (prefix matches first, then
49
+ * substrings). Requires an authenticated user via the adapter.
50
+ */
51
+ async function tagsGet(ctx, request) {
52
+ await authenticated(ctx, request);
53
+ const q = normalizeTagName(String(request.query?.q ?? ""));
54
+ const matches = (await listWorkspaceTags(ctx)).filter((tag) => tag.includes(q));
55
+ const prefixMatches = matches.filter((tag) => tag.startsWith(q));
56
+ return json([...prefixMatches, ...matches.filter((tag) => !tag.startsWith(q))].slice(0, MAX_TAGS));
57
+ }
58
+ /**
59
+ * Users for the `@` mention popup, filtered case-insensitively by `?q=` (prefix matches first, then substrings).
60
+ * Requires an authenticated user via the adapter.
61
+ */
62
+ async function usersGet(ctx, request) {
63
+ await authenticated(ctx, request);
64
+ const q = String(request.query?.q ?? "").trim().toLowerCase();
65
+ const matches = (await ctx.adapter.listUsers()).map(({ id, username, color }) => ({
66
+ id,
67
+ username,
68
+ color
69
+ })).filter((u) => u.username.toLowerCase().includes(q)).sort((a, b) => a.username.localeCompare(b.username, "de"));
70
+ const prefixMatches = matches.filter((u) => u.username.toLowerCase().startsWith(q));
71
+ return json([...prefixMatches, ...matches.filter((u) => !prefixMatches.includes(u))].slice(0, MAX_USERS));
72
+ }
73
+ /**
74
+ * Stores a file (multipart field `file`) in the package of document `params.id` (or `scratch` for editors not bound to
75
+ * a stored document); answers `{ url, name }`. Requires an authenticated user via the adapter.
76
+ */
77
+ async function assetPost(ctx, request) {
78
+ await authenticated(ctx, request);
79
+ const id = request.params?.id ?? "";
80
+ if (!ASSET_DOCUMENT_ID.test(id)) throw new HttpError(400, "Ungültige Dokument-ID");
81
+ const file = (await request.readForm?.().catch(() => null))?.get("file");
82
+ if (!(file instanceof File)) throw new HttpError(400, "Keine Datei übermittelt");
83
+ const mime = mediaMime(file.type) || "application/octet-stream";
84
+ const maxBytes = MAX_MEDIA_BYTES[mediaKindOf(mime) ?? "file"];
85
+ if (file.size > maxBytes) throw new HttpError(413, `Datei ist größer als ${maxBytes / 1024 / 1024} MB`);
86
+ const nameExt = file.name.includes(".") ? file.name.split(".").pop()?.toLowerCase() : void 0;
87
+ const ext = MEDIA_TYPES[mime]?.ext ?? (nameExt && /^[a-z0-9]{1,8}$/.test(nameExt) ? nameExt : "bin");
88
+ const name = `${globalThis.crypto.randomUUID()}.${ext}`;
89
+ await ctx.adapter.storeAsset(id, {
90
+ name,
91
+ filename: file.name.slice(0, 255) || name,
92
+ mimeType: mime,
93
+ size: file.size,
94
+ createdAt: (/* @__PURE__ */ new Date()).toISOString(),
95
+ data: Buffer.from(await file.arrayBuffer())
96
+ });
97
+ return json({
98
+ url: assetUrl(id, name),
99
+ name
100
+ });
101
+ }
102
+ const BYTE_RANGE = /^bytes=(\d*)-(\d*)$/;
103
+ /**
104
+ * The stored file `params.name` of document `params.id`, with `Range` support (media elements send the session cookie
105
+ * like any same-origin request). Requires an authenticated user via the adapter.
106
+ */
107
+ async function assetGet(ctx, request) {
108
+ await authenticated(ctx, request);
109
+ const id = request.params?.id ?? "";
110
+ const name = request.params?.name ?? "";
111
+ if (!ASSET_DOCUMENT_ID.test(id) || !ASSET_NAME.test(name)) throw new HttpError(404, "Datei nicht gefunden");
112
+ const asset = await ctx.adapter.loadAsset(id, name);
113
+ if (!asset) throw new HttpError(404, "Datei nicht gefunden");
114
+ const { record, data } = asset;
115
+ const total = data.length;
116
+ const disposition = record.mimeType === "application/octet-stream" ? "attachment" : "inline";
117
+ const headers = {
118
+ "accept-ranges": "bytes",
119
+ "cache-control": "private, max-age=31536000, immutable",
120
+ "content-type": record.mimeType,
121
+ "content-disposition": `${disposition}; filename*=UTF-8''${encodeURIComponent(record.filename)}`
122
+ };
123
+ const range = BYTE_RANGE.exec(request.headers.get("range") ?? "");
124
+ if (!range) return {
125
+ status: 200,
126
+ headers: {
127
+ ...headers,
128
+ "content-length": String(total)
129
+ },
130
+ body: data
131
+ };
132
+ const [, first, last] = range;
133
+ const start = first ? Number(first) : Math.max(0, total - Number(last));
134
+ const end = first && last ? Math.min(Number(last), total - 1) : total - 1;
135
+ if (start >= total || start > end) return empty(416, { "content-range": `bytes */${total}` });
136
+ return {
137
+ status: 206,
138
+ headers: {
139
+ ...headers,
140
+ "content-range": `bytes ${start}-${end}/${total}`,
141
+ "content-length": String(end - start + 1)
142
+ },
143
+ body: data.subarray(start, end + 1)
144
+ };
145
+ }
146
+ const themesUnsupported = () => new HttpError(501, "Themes werden vom Adapter nicht unterstützt");
147
+ /** The theme library (builtins and uploads) as `ThemeRecord[]`. `501` when the adapter has no theme support. */
148
+ async function themesGet(ctx, request) {
149
+ await authenticated(ctx, request);
150
+ if (!ctx.adapter.listThemes) throw themesUnsupported();
151
+ return json(await ctx.adapter.listThemes());
152
+ }
153
+ /** `theme.css` of theme `params.id` as `text/css`. `400` for a malformed id, `404` for an unknown one, `501` when the adapter has no theme support. */
154
+ async function themeGet(ctx, request) {
155
+ await authenticated(ctx, request);
156
+ if (!ctx.adapter.loadTheme) throw themesUnsupported();
157
+ const id = request.params?.id ?? "";
158
+ if (!THEME_ID.test(id)) throw new HttpError(400, "Ungültige Theme-ID");
159
+ const theme = await ctx.adapter.loadTheme(id);
160
+ if (!theme) throw new HttpError(404, "Theme nicht gefunden");
161
+ const etag = `"${theme.record.version ?? "0"}-${new TextEncoder().encode(theme.css).length}"`;
162
+ const headers = {
163
+ "cache-control": "private, max-age=0, must-revalidate",
164
+ "etag": etag
165
+ };
166
+ if (request.headers.get("if-none-match") === etag) return empty(304, headers);
167
+ return text(theme.css, "text/css; charset=utf-8", headers);
168
+ }
169
+ /** Deletes the uploaded theme `params.id` (`204`). `400` for a malformed id, `404` for an unknown one, `403` for a builtin, `501` when the adapter has no theme write support. */
170
+ async function themeDelete(ctx, request) {
171
+ await authenticated(ctx, request);
172
+ const { adapter } = ctx;
173
+ if (!adapter.listThemes || !adapter.removeTheme) throw themesUnsupported();
174
+ const id = request.params?.id ?? "";
175
+ if (!THEME_ID.test(id)) throw new HttpError(400, "Ungültige Theme-ID");
176
+ const record = (await adapter.listThemes()).find((t) => t.id === id);
177
+ if (!record) throw new HttpError(404, "Theme nicht gefunden");
178
+ if (record.builtin) throw new HttpError(403, "Mitgelieferte Themes können nicht gelöscht werden");
179
+ if (!await adapter.removeTheme(id)) throw new HttpError(404, "Theme nicht gefunden");
180
+ return empty();
181
+ }
182
+ const MAX_MANIFEST_BYTES = 65536;
183
+ const MAX_ID_LENGTH = 64;
184
+ const MARKUP_HEAD = /<script|<\?xml/i;
185
+ /** `[^a-z0-9]+` → `-`, trimmed, at most `max` characters; `theme` when nothing is left. */
186
+ function slugOf(name, max) {
187
+ return name.normalize("NFKD").toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+/, "").slice(0, max).replace(/-+$/, "") || "theme";
188
+ }
189
+ /**
190
+ * Uploads an Obsidian theme into the shared library: multipart `css` (File, required), `manifest` (File) and `name`
191
+ * (string) optional. Answers 201 with the new `ThemeRecord`; the id is the slug of the name, made unique with `-2`,
192
+ * `-3` … against the library.
193
+ */
194
+ async function themePost(ctx, request) {
195
+ await authenticated(ctx, request);
196
+ const { adapter } = ctx;
197
+ if (!adapter.listThemes || !adapter.storeTheme) throw themesUnsupported();
198
+ const form = await request.readForm?.().catch(() => null);
199
+ const cssFile = form?.get("css");
200
+ if (!(cssFile instanceof File) || cssFile.size === 0) throw new HttpError(400, "Keine CSS-Datei übermittelt");
201
+ if (cssFile.size > 2097152) throw new HttpError(413, `Theme ist größer als ${MAX_THEME_BYTES / 1024 / 1024} MB`);
202
+ const bytes = new Uint8Array(await cssFile.arrayBuffer());
203
+ if (bytes.includes(0) || MARKUP_HEAD.test(new TextDecoder("latin1").decode(bytes.subarray(0, 512)))) throw new HttpError(400, "Theme ist keine CSS-Textdatei");
204
+ let css;
205
+ try {
206
+ css = new TextDecoder("utf-8", { fatal: true }).decode(bytes);
207
+ } catch {
208
+ throw new HttpError(400, "Theme ist keine gültige UTF-8-Textdatei");
209
+ }
210
+ let manifest;
211
+ const manifestFile = form?.get("manifest");
212
+ if (manifestFile instanceof File && manifestFile.size > 0) try {
213
+ if (manifestFile.size > MAX_MANIFEST_BYTES) throw new Error("manifest too large");
214
+ manifest = themeManifestSchema.parse(JSON.parse(await manifestFile.text()));
215
+ } catch {
216
+ throw new HttpError(400, "Ungültiges manifest.json");
217
+ }
218
+ const nameField = form?.get("name");
219
+ const cssBaseName = cssFile.name.replace(/\.css$/i, "");
220
+ const name = manifest?.name ?? [typeof nameField === "string" ? nameField : "", cssBaseName].map((n) => n.trim().slice(0, 120)).find(Boolean) ?? "Theme";
221
+ const taken = new Set((await adapter.listThemes()).map((t) => t.id));
222
+ let id = slugOf(name, MAX_ID_LENGTH);
223
+ for (let n = 2; taken.has(id); n++) {
224
+ const suffix = `-${n}`;
225
+ id = `${slugOf(name, MAX_ID_LENGTH - suffix.length)}${suffix}`;
226
+ }
227
+ const record = {
228
+ ...manifest,
229
+ name,
230
+ id
231
+ };
232
+ await adapter.storeTheme(record, css);
233
+ return json({
234
+ ...record,
235
+ builtin: false
236
+ }, 201);
237
+ }
238
+ //#endregion
239
+ export { assetGet, assetPost, listWorkspaceTags, settingsGet, settingsPut, settingsPutBodySchema, tagsGet, themeDelete, themeGet, themePost, themesGet, usersGet };
240
+
241
+ //# sourceMappingURL=editor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"editor.js","names":[],"sources":["../../../src/server/handlers/editor.ts"],"sourcesContent":["import { yDocToProsemirrorJSON } from '@tiptap/y-tiptap'\nimport { ASSET_DOCUMENT_ID, ASSET_NAME, assetUrl, MAX_MEDIA_BYTES, MEDIA_TYPES, mediaKindOf, mediaMime } from '../../features/media/schema'\nimport { collectTagNames, normalizeTagName } from '../../features/mentions/schema'\nimport { MAX_THEME_BYTES, THEME_ID, themeManifestSchema, type ThemeManifest, type ThemeRecord } from '../../features/themes/schema'\nimport { editorSettingsSchema, parseEditorSettings } from '../../settings'\nimport { COLLAB_FIELD } from '../collab'\nimport { HttpError } from '../errors'\nimport { authenticated, empty, type HandlerContext, type HandlerRequest, type HandlerResponse, json, readBody, text } from './context'\n\n/** Body schema of `settingsPut`: the complete editor settings. */\nexport const settingsPutBodySchema = editorSettingsSchema\n\nconst MAX_USERS = 20\nconst MAX_TAGS = 20\n\n/**\n * The authenticated user's editor settings, normalized with `parseEditorSettings`. `204` when the adapter keeps no\n * settings (the client stays on localStorage); `200` with JSON `null` when the user has none stored yet (the client\n * uploads its local ones).\n */\nexport async function settingsGet(ctx: HandlerContext, request: HandlerRequest): Promise<HandlerResponse> {\n const user = await authenticated(ctx, request)\n if (!ctx.adapter.loadSettings) return empty()\n const stored = await ctx.adapter.loadSettings(user)\n if (stored === null || stored === undefined) return json(null)\n return json(parseEditorSettings(stored))\n}\n\n/** Stores the authenticated user's editor settings (complete, validated: 400 otherwise); `501` when the adapter keeps none. */\nexport async function settingsPut(ctx: HandlerContext, request: HandlerRequest): Promise<HandlerResponse> {\n const user = await authenticated(ctx, request)\n if (!ctx.adapter.storeSettings) throw new HttpError(501, 'Einstellungen werden nicht gespeichert')\n const settings = await readBody(request, settingsPutBodySchema)\n await ctx.adapter.storeSettings(user, settings)\n return empty()\n}\n\n/**\n * All `#` tag names used in any document, deduplicated and sorted. Documents currently open in the collaboration server\n * are read from their live Y.Doc (a tag added in document A shows up in document B before the debounced store); all\n * others from the adapter's stored content.\n */\nexport async function listWorkspaceTags({ adapter, collab }: HandlerContext): Promise<string[]> {\n const names = new Set<string>()\n const open = collab?.hocuspocus.documents\n if (open) for (const doc of open.values()) collectTagNames(yDocToProsemirrorJSON(doc, COLLAB_FIELD), names)\n for (const { id, content } of await adapter.listContents()) {\n if (!open?.has(id)) collectTagNames(content, names)\n }\n return [...names].sort((a, b) => a.localeCompare(b, 'de'))\n}\n\n/**\n * Tag names for the `#` popup: tags used in any document, filtered by the normalised `?q=` (prefix matches first, then\n * substrings). Requires an authenticated user via the adapter.\n */\nexport async function tagsGet(ctx: HandlerContext, request: HandlerRequest): Promise<HandlerResponse> {\n await authenticated(ctx, request)\n const q = normalizeTagName(String(request.query?.q ?? ''))\n const matches = (await listWorkspaceTags(ctx)).filter(tag => tag.includes(q))\n const prefixMatches = matches.filter(tag => tag.startsWith(q))\n return json([...prefixMatches, ...matches.filter(tag => !tag.startsWith(q))].slice(0, MAX_TAGS))\n}\n\n/**\n * Users for the `@` mention popup, filtered case-insensitively by `?q=` (prefix matches first, then substrings).\n * Requires an authenticated user via the adapter.\n */\nexport async function usersGet(ctx: HandlerContext, request: HandlerRequest): Promise<HandlerResponse> {\n await authenticated(ctx, request)\n const q = String(request.query?.q ?? '').trim().toLowerCase()\n // Re-pick the fields so an adapter returning richer user records cannot leak them.\n const matches = (await ctx.adapter.listUsers())\n .map(({ id, username, color }) => ({ id, username, color }))\n .filter(u => u.username.toLowerCase().includes(q))\n .sort((a, b) => a.username.localeCompare(b.username, 'de'))\n const prefixMatches = matches.filter(u => u.username.toLowerCase().startsWith(q))\n return json([...prefixMatches, ...matches.filter(u => !prefixMatches.includes(u))].slice(0, MAX_USERS))\n}\n\n/**\n * Stores a file (multipart field `file`) in the package of document `params.id` (or `scratch` for editors not bound to\n * a stored document); answers `{ url, name }`. Requires an authenticated user via the adapter.\n */\nexport async function assetPost(ctx: HandlerContext, request: HandlerRequest): Promise<HandlerResponse> {\n await authenticated(ctx, request)\n const id = request.params?.id ?? ''\n if (!ASSET_DOCUMENT_ID.test(id)) throw new HttpError(400, 'Ungültige Dokument-ID')\n // A body that is no multipart form at all counts as „no file“.\n const form = await request.readForm?.().catch(() => null)\n const file = form?.get('file')\n if (!(file instanceof File)) throw new HttpError(400, 'Keine Datei übermittelt')\n const mime = mediaMime(file.type) || 'application/octet-stream'\n const maxBytes = MAX_MEDIA_BYTES[mediaKindOf(mime) ?? 'file']\n if (file.size > maxBytes) throw new HttpError(413, `Datei ist größer als ${maxBytes / 1024 / 1024} MB`)\n const nameExt = file.name.includes('.') ? file.name.split('.').pop()?.toLowerCase() : undefined\n const ext = MEDIA_TYPES[mime]?.ext ?? (nameExt && /^[a-z0-9]{1,8}$/.test(nameExt) ? nameExt : 'bin')\n const name = `${globalThis.crypto.randomUUID()}.${ext}`\n await ctx.adapter.storeAsset(id, {\n name,\n filename: file.name.slice(0, 255) || name,\n mimeType: mime,\n size: file.size,\n createdAt: new Date().toISOString(),\n data: Buffer.from(await file.arrayBuffer()),\n })\n return json({ url: assetUrl(id, name), name })\n}\n\n// Answers single byte ranges (`Range: bytes=a-b`, `bytes=a-`, `bytes=-n`): Safari only plays and seeks audio/video\n// served with range support. Other Range forms (several ranges) get the whole file, which RFC 9110 allows.\nconst BYTE_RANGE = /^bytes=(\\d*)-(\\d*)$/\n\n/**\n * The stored file `params.name` of document `params.id`, with `Range` support (media elements send the session cookie\n * like any same-origin request). Requires an authenticated user via the adapter.\n */\nexport async function assetGet(ctx: HandlerContext, request: HandlerRequest): Promise<HandlerResponse> {\n await authenticated(ctx, request)\n const id = request.params?.id ?? ''\n const name = request.params?.name ?? ''\n if (!ASSET_DOCUMENT_ID.test(id) || !ASSET_NAME.test(name)) throw new HttpError(404, 'Datei nicht gefunden')\n const asset = await ctx.adapter.loadAsset(id, name)\n if (!asset) throw new HttpError(404, 'Datei nicht gefunden')\n const { record, data } = asset\n const total = data.length\n const disposition = record.mimeType === 'application/octet-stream' ? 'attachment' : 'inline'\n const headers: Record<string, string> = {\n 'accept-ranges': 'bytes',\n 'cache-control': 'private, max-age=31536000, immutable',\n 'content-type': record.mimeType,\n 'content-disposition': `${disposition}; filename*=UTF-8''${encodeURIComponent(record.filename)}`,\n }\n const range = BYTE_RANGE.exec(request.headers.get('range') ?? '')\n if (!range) return { status: 200, headers: { ...headers, 'content-length': String(total) }, body: data }\n const [, first, last] = range\n const start = first ? Number(first) : Math.max(0, total - Number(last))\n const end = first && last ? Math.min(Number(last), total - 1) : total - 1\n if (start >= total || start > end) return empty(416, { 'content-range': `bytes */${total}` })\n return {\n status: 206,\n headers: { ...headers, 'content-range': `bytes ${start}-${end}/${total}`, 'content-length': String(end - start + 1) },\n body: data.subarray(start, end + 1),\n }\n}\n\nconst themesUnsupported = () => new HttpError(501, 'Themes werden vom Adapter nicht unterstützt')\n\n/** The theme library (builtins and uploads) as `ThemeRecord[]`. `501` when the adapter has no theme support. */\nexport async function themesGet(ctx: HandlerContext, request: HandlerRequest): Promise<HandlerResponse> {\n await authenticated(ctx, request)\n if (!ctx.adapter.listThemes) throw themesUnsupported()\n return json(await ctx.adapter.listThemes())\n}\n\n/** `theme.css` of theme `params.id` as `text/css`. `400` for a malformed id, `404` for an unknown one, `501` when the adapter has no theme support. */\nexport async function themeGet(ctx: HandlerContext, request: HandlerRequest): Promise<HandlerResponse> {\n await authenticated(ctx, request)\n if (!ctx.adapter.loadTheme) throw themesUnsupported()\n const id = request.params?.id ?? ''\n if (!THEME_ID.test(id)) throw new HttpError(400, 'Ungültige Theme-ID')\n const theme = await ctx.adapter.loadTheme(id)\n if (!theme) throw new HttpError(404, 'Theme nicht gefunden')\n const etag = `\"${theme.record.version ?? '0'}-${new TextEncoder().encode(theme.css).length}\"`\n const headers = { 'cache-control': 'private, max-age=0, must-revalidate', 'etag': etag }\n if (request.headers.get('if-none-match') === etag) return empty(304, headers)\n return text(theme.css, 'text/css; charset=utf-8', headers)\n}\n\n/** Deletes the uploaded theme `params.id` (`204`). `400` for a malformed id, `404` for an unknown one, `403` for a builtin, `501` when the adapter has no theme write support. */\nexport async function themeDelete(ctx: HandlerContext, request: HandlerRequest): Promise<HandlerResponse> {\n await authenticated(ctx, request)\n const { adapter } = ctx\n if (!adapter.listThemes || !adapter.removeTheme) throw themesUnsupported()\n const id = request.params?.id ?? ''\n if (!THEME_ID.test(id)) throw new HttpError(400, 'Ungültige Theme-ID')\n // `removeTheme` answers `false` for builtins and unknown ids alike, so the record decides between 403 and 404.\n const record = (await adapter.listThemes()).find(t => t.id === id)\n if (!record) throw new HttpError(404, 'Theme nicht gefunden')\n if (record.builtin) throw new HttpError(403, 'Mitgelieferte Themes können nicht gelöscht werden')\n if (!await adapter.removeTheme(id)) throw new HttpError(404, 'Theme nicht gefunden')\n return empty()\n}\n\nconst MAX_MANIFEST_BYTES = 64 * 1024\nconst MAX_ID_LENGTH = 64\n// Markers of an HTML/XML/SVG document in the head of a „stylesheet“.\nconst MARKUP_HEAD = /<script|<\\?xml/i\n\n/** `[^a-z0-9]+` → `-`, trimmed, at most `max` characters; `theme` when nothing is left. */\nfunction slugOf(name: string, max: number): string {\n const slug = name.normalize('NFKD').toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-+/, '').slice(0, max).replace(/-+$/, '')\n return slug || 'theme'\n}\n\n/**\n * Uploads an Obsidian theme into the shared library: multipart `css` (File, required), `manifest` (File) and `name`\n * (string) optional. Answers 201 with the new `ThemeRecord`; the id is the slug of the name, made unique with `-2`,\n * `-3` … against the library.\n */\nexport async function themePost(ctx: HandlerContext, request: HandlerRequest): Promise<HandlerResponse> {\n await authenticated(ctx, request)\n const { adapter } = ctx\n if (!adapter.listThemes || !adapter.storeTheme) throw themesUnsupported()\n // A body that is no multipart form counts as „no file“.\n const form = await request.readForm?.().catch(() => null)\n const cssFile = form?.get('css')\n if (!(cssFile instanceof File) || cssFile.size === 0) throw new HttpError(400, 'Keine CSS-Datei übermittelt')\n if (cssFile.size > MAX_THEME_BYTES) throw new HttpError(413, `Theme ist größer als ${MAX_THEME_BYTES / 1024 / 1024} MB`)\n const bytes = new Uint8Array(await cssFile.arrayBuffer())\n if (bytes.includes(0) || MARKUP_HEAD.test(new TextDecoder('latin1').decode(bytes.subarray(0, 512)))) {\n throw new HttpError(400, 'Theme ist keine CSS-Textdatei')\n }\n let css: string\n try {\n css = new TextDecoder('utf-8', { fatal: true }).decode(bytes)\n }\n catch {\n throw new HttpError(400, 'Theme ist keine gültige UTF-8-Textdatei')\n }\n\n let manifest: ThemeManifest | undefined\n const manifestFile = form?.get('manifest')\n if (manifestFile instanceof File && manifestFile.size > 0) {\n try {\n if (manifestFile.size > MAX_MANIFEST_BYTES) throw new Error('manifest too large')\n manifest = themeManifestSchema.parse(JSON.parse(await manifestFile.text()))\n }\n catch {\n throw new HttpError(400, 'Ungültiges manifest.json')\n }\n }\n\n const nameField = form?.get('name')\n const cssBaseName = cssFile.name.replace(/\\.css$/i, '')\n const name = manifest?.name\n ?? [typeof nameField === 'string' ? nameField : '', cssBaseName].map(n => n.trim().slice(0, 120)).find(Boolean)\n ?? 'Theme'\n\n const taken = new Set((await adapter.listThemes()).map(t => t.id))\n const base = slugOf(name, MAX_ID_LENGTH)\n let id = base\n for (let n = 2; taken.has(id); n++) {\n const suffix = `-${n}`\n id = `${slugOf(name, MAX_ID_LENGTH - suffix.length)}${suffix}`\n }\n\n const record: Omit<ThemeRecord, 'builtin'> = { ...manifest, name, id }\n await adapter.storeTheme(record, css)\n return json({ ...record, builtin: false } satisfies ThemeRecord, 201)\n}\n"],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { AiHandlerContext, HandlerContext, HandlerRequest, HandlerResponse, authenticated, empty, enforceRateLimit, eventStream, json, readBody, text } from "./context.js";
2
+ import { chatBodySchema, chatPost, completeBodySchema, completePost, generateBodySchema, generatePost, modelsGet, transcribeBodySchema, transcribePost, transcriptCleanupBodySchema, transcriptCleanupPost } from "./ai.js";
3
+ import { assetGet, assetPost, listWorkspaceTags, settingsGet, settingsPut, settingsPutBodySchema, tagsGet, themeDelete, themeGet, themePost, themesGet, usersGet } from "./editor.js";
4
+ export { type AiHandlerContext, type HandlerContext, type HandlerRequest, type HandlerResponse, assetGet, assetPost, authenticated, chatBodySchema, chatPost, completeBodySchema, completePost, empty, enforceRateLimit, eventStream, generateBodySchema, generatePost, json, listWorkspaceTags, modelsGet, readBody, settingsGet, settingsPut, settingsPutBodySchema, tagsGet, text, themeDelete, themeGet, themePost, themesGet, transcribeBodySchema, transcribePost, transcriptCleanupBodySchema, transcriptCleanupPost, usersGet };
@@ -0,0 +1,4 @@
1
+ import { authenticated, empty, enforceRateLimit, eventStream, json, readBody, text } from "./context.js";
2
+ import { chatBodySchema, chatPost, completeBodySchema, completePost, generateBodySchema, generatePost, modelsGet, transcribeBodySchema, transcribePost, transcriptCleanupBodySchema, transcriptCleanupPost } from "./ai.js";
3
+ import { assetGet, assetPost, listWorkspaceTags, settingsGet, settingsPut, settingsPutBodySchema, tagsGet, themeDelete, themeGet, themePost, themesGet, usersGet } from "./editor.js";
4
+ export { assetGet, assetPost, authenticated, chatBodySchema, chatPost, completeBodySchema, completePost, empty, enforceRateLimit, eventStream, generateBodySchema, generatePost, json, listWorkspaceTags, modelsGet, readBody, settingsGet, settingsPut, settingsPutBodySchema, tagsGet, text, themeDelete, themeGet, themePost, themesGet, transcribeBodySchema, transcribePost, transcriptCleanupBodySchema, transcriptCleanupPost, usersGet };
@@ -0,0 +1,61 @@
1
+ import { ModelProfile, ModelRef } from "../features/ai/protocol/models.js";
2
+ import "../features/ai/protocol/index.js";
3
+ import { AiModels, AiModelsConfig } from "./ai.js";
4
+ import { EditorAdapter } from "./adapter.js";
5
+ import { CollabServer } from "./collab.js";
6
+ import { JSONContent } from "@tiptap/core";
7
+ import { LanguageModel } from "ai";
8
+ //#region src/server/host.d.ts
9
+ export interface EditorServerConfig {
10
+ /**
11
+ * The AI models: presets, shared key, transcription, slots. `languageModel`/`listModels` default to the adapter's
12
+ * methods of the same names.
13
+ */
14
+ ai?: Partial<AiModelsConfig>;
15
+ /** Per-user limit shared by the AI endpoints. Default 30 requests per minute. */
16
+ rateLimit?: {
17
+ max: number;
18
+ windowMs: number;
19
+ };
20
+ }
21
+ /** Registers the host's adapter; the collaboration server and the AI models are created from it on first use. Replaces (and closes) those of a previous adapter. */
22
+ export declare function setEditorAdapter(next: EditorAdapter): void;
23
+ export declare function useEditorAdapter(): EditorAdapter;
24
+ /** Sets the AI configuration and the rate limit of the process-wide server. Call before the first request. */
25
+ export declare function configureEditorServer(next: EditorServerConfig): void;
26
+ /** The process-wide collaboration server, created from the registered adapter on first use. */
27
+ export declare function useCollabServer(): CollabServer;
28
+ /** The process-wide AI models: the configured presets, with the adapter's `languageModel`/`listModels` hooks. */
29
+ export declare function useAiModels(): AiModels;
30
+ /** Closes the process-wide collaboration server (pending stores are written first) and forgets it. */
31
+ export declare function closeEditorServer(): Promise<void>;
32
+ /** Open collaboration connections and loaded documents of this process (zeros before the first connection). */
33
+ export declare function collabStats(): {
34
+ connections: number;
35
+ documents: number;
36
+ };
37
+ /** Tell connected clients the document is gone, disconnect them and drop the Yjs state. Call before removing the JSON. */
38
+ export declare function forgetCollabDocument(id: string): Promise<void>;
39
+ /** Current content of a document that is open in the collaboration server (unsaved edits included), `null` when nobody has it open. */
40
+ export declare function liveContent(id: string): JSONContent | null;
41
+ /** The host rewrote a document's content (an agent wrote the file): merge it into the open document now, see `CollabServer.contentChanged`. */
42
+ export declare function collabContentChanged(id: string): Promise<void>;
43
+ /** AI SDK language model for `ref`, see `AiModels.resolveModel`. */
44
+ export declare function resolveModel(ref: ModelRef, user: object | null): Promise<LanguageModel>;
45
+ /** The models listed for `user`, see `AiModels.listModels`. */
46
+ export declare function listAiModels(user: object | null): Promise<ModelProfile[]>;
47
+ /**
48
+ * Per-user limit for host-defined AI routes: the same limiter as the editor's own AI endpoints. Call first in the route.
49
+ * Throws 401 (`HttpError`) without a user, 429 when exceeded; returns the user the adapter authenticated, for `resolveModel`.
50
+ * With a Node-backed request (`event.node.res`, as h3 events have) the 429's `Retry-After` header is set on the response too.
51
+ */
52
+ export declare function enforceAiRateLimit(request: {
53
+ headers: Headers;
54
+ node?: {
55
+ res: {
56
+ setHeader(name: string, value: string): unknown;
57
+ };
58
+ };
59
+ }): Promise<object>;
60
+ //#endregion
61
+ //# sourceMappingURL=host.d.ts.map
@@ -0,0 +1,105 @@
1
+ import { HttpError } from "./errors.js";
2
+ import { createAiModels } from "./ai.js";
3
+ import { createCollabServer } from "./collab.js";
4
+ import { createRateLimiter } from "./rate-limit.js";
5
+ import { enforceRateLimit } from "./handlers/context.js";
6
+ //#region src/server/host.ts
7
+ let adapter;
8
+ let config = {};
9
+ let collab;
10
+ let models;
11
+ let limiter;
12
+ /** Registers the host's adapter; the collaboration server and the AI models are created from it on first use. Replaces (and closes) those of a previous adapter. */
13
+ function setEditorAdapter(next) {
14
+ const previous = collab;
15
+ adapter = next;
16
+ collab = void 0;
17
+ models = void 0;
18
+ if (previous) previous.close();
19
+ }
20
+ function useEditorAdapter() {
21
+ if (!adapter) throw new Error("tiptap-editor: setEditorAdapter() wurde nicht aufgerufen");
22
+ return adapter;
23
+ }
24
+ /** Sets the AI configuration and the rate limit of the process-wide server. Call before the first request. */
25
+ function configureEditorServer(next) {
26
+ config = next;
27
+ models = void 0;
28
+ limiter = void 0;
29
+ }
30
+ /** The process-wide collaboration server, created from the registered adapter on first use. */
31
+ function useCollabServer() {
32
+ return collab ??= createCollabServer({ adapter: useEditorAdapter() });
33
+ }
34
+ /** The process-wide AI models: the configured presets, with the adapter's `languageModel`/`listModels` hooks. */
35
+ function useAiModels() {
36
+ if (models) return models;
37
+ const current = useEditorAdapter();
38
+ return models = createAiModels({
39
+ presets: {},
40
+ languageModel: current.languageModel && ((ref, user) => current.languageModel(ref, user)),
41
+ listModels: current.listModels && ((user) => current.listModels(user)),
42
+ ...config.ai
43
+ });
44
+ }
45
+ /** The process-wide AI rate limiter. */
46
+ function useRateLimiter() {
47
+ return limiter ??= createRateLimiter(config.rateLimit ?? {
48
+ max: 30,
49
+ windowMs: 6e4
50
+ });
51
+ }
52
+ /** Closes the process-wide collaboration server (pending stores are written first) and forgets it. */
53
+ async function closeEditorServer() {
54
+ const open = collab;
55
+ collab = void 0;
56
+ await open?.close();
57
+ }
58
+ /** Open collaboration connections and loaded documents of this process (zeros before the first connection). */
59
+ function collabStats() {
60
+ return collab?.stats() ?? {
61
+ connections: 0,
62
+ documents: 0
63
+ };
64
+ }
65
+ /** Tell connected clients the document is gone, disconnect them and drop the Yjs state. Call before removing the JSON. */
66
+ function forgetCollabDocument(id) {
67
+ return useCollabServer().forgetDocument(id);
68
+ }
69
+ /** Current content of a document that is open in the collaboration server (unsaved edits included), `null` when nobody has it open. */
70
+ function liveContent(id) {
71
+ return collab?.liveContent(id) ?? null;
72
+ }
73
+ /** The host rewrote a document's content (an agent wrote the file): merge it into the open document now, see `CollabServer.contentChanged`. */
74
+ function collabContentChanged(id) {
75
+ return collab?.contentChanged(id) ?? Promise.resolve();
76
+ }
77
+ /** AI SDK language model for `ref`, see `AiModels.resolveModel`. */
78
+ function resolveModel(ref, user) {
79
+ return useAiModels().resolveModel(ref, user);
80
+ }
81
+ /** The models listed for `user`, see `AiModels.listModels`. */
82
+ function listAiModels(user) {
83
+ return useAiModels().listModels(user);
84
+ }
85
+ /**
86
+ * Per-user limit for host-defined AI routes: the same limiter as the editor's own AI endpoints. Call first in the route.
87
+ * Throws 401 (`HttpError`) without a user, 429 when exceeded; returns the user the adapter authenticated, for `resolveModel`.
88
+ * With a Node-backed request (`event.node.res`, as h3 events have) the 429's `Retry-After` header is set on the response too.
89
+ */
90
+ async function enforceAiRateLimit(request) {
91
+ try {
92
+ return await enforceRateLimit({
93
+ adapter: useEditorAdapter(),
94
+ ai: useAiModels(),
95
+ limiter: useRateLimiter()
96
+ }, { headers: request.headers });
97
+ } catch (error) {
98
+ if (error instanceof HttpError) for (const [name, value] of Object.entries(error.headers)) request.node?.res.setHeader(name, value);
99
+ throw error;
100
+ }
101
+ }
102
+ //#endregion
103
+ export { closeEditorServer, collabContentChanged, collabStats, configureEditorServer, enforceAiRateLimit, forgetCollabDocument, listAiModels, liveContent, resolveModel, setEditorAdapter, useAiModels, useCollabServer, useEditorAdapter, useRateLimiter };
104
+
105
+ //# sourceMappingURL=host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.js","names":[],"sources":["../../src/server/host.ts"],"sourcesContent":["import type { JSONContent } from '@tiptap/core'\nimport type { LanguageModel } from 'ai'\nimport type { ModelProfile, ModelRef } from '../features/ai/protocol'\nimport type { EditorAdapter } from './adapter'\nimport { type AiModels, type AiModelsConfig, createAiModels } from './ai'\nimport { type CollabServer, createCollabServer } from './collab'\nimport { HttpError } from './errors'\nimport { enforceRateLimit } from './handlers/context'\nimport { createRateLimiter, type RateLimiter } from './rate-limit'\n\n// The process-wide editor server of hosts that wire the editor once at startup (the Nuxt module, a script with several\n// modules): one adapter, one collaboration server, one set of AI models, one rate limiter. Everything here is a\n// convenience over `createCollabServer` / `createAiModels` / `createRateLimiter`, which take their configuration\n// explicitly and can be instantiated any number of times (tests, several tenants).\n\nexport interface EditorServerConfig {\n /**\n * The AI models: presets, shared key, transcription, slots. `languageModel`/`listModels` default to the adapter's\n * methods of the same names.\n */\n ai?: Partial<AiModelsConfig>\n /** Per-user limit shared by the AI endpoints. Default 30 requests per minute. */\n rateLimit?: { max: number, windowMs: number }\n}\n\nlet adapter: EditorAdapter | undefined\nlet config: EditorServerConfig = {}\nlet collab: CollabServer | undefined\nlet models: AiModels | undefined\nlet limiter: RateLimiter | undefined\n\n/** Registers the host's adapter; the collaboration server and the AI models are created from it on first use. Replaces (and closes) those of a previous adapter. */\nexport function setEditorAdapter(next: EditorAdapter) {\n const previous = collab\n adapter = next\n collab = undefined\n models = undefined\n if (previous) void previous.close()\n}\n\nexport function useEditorAdapter(): EditorAdapter {\n if (!adapter) throw new Error('tiptap-editor: setEditorAdapter() wurde nicht aufgerufen')\n return adapter\n}\n\n/** Sets the AI configuration and the rate limit of the process-wide server. Call before the first request. */\nexport function configureEditorServer(next: EditorServerConfig) {\n config = next\n models = undefined\n limiter = undefined\n}\n\n/** The process-wide collaboration server, created from the registered adapter on first use. */\nexport function useCollabServer(): CollabServer {\n return collab ??= createCollabServer({ adapter: useEditorAdapter() })\n}\n\n/** The process-wide AI models: the configured presets, with the adapter's `languageModel`/`listModels` hooks. */\nexport function useAiModels(): AiModels {\n if (models) return models\n const current = useEditorAdapter()\n return models = createAiModels({\n presets: {},\n languageModel: current.languageModel && ((ref, user) => current.languageModel!(ref, user)),\n listModels: current.listModels && (user => current.listModels!(user)),\n ...config.ai,\n })\n}\n\n/** The process-wide AI rate limiter. */\nexport function useRateLimiter(): RateLimiter {\n return limiter ??= createRateLimiter(config.rateLimit ?? { max: 30, windowMs: 60_000 })\n}\n\n/** Closes the process-wide collaboration server (pending stores are written first) and forgets it. */\nexport async function closeEditorServer() {\n const open = collab\n collab = undefined\n await open?.close()\n}\n\n/** Open collaboration connections and loaded documents of this process (zeros before the first connection). */\nexport function collabStats(): { connections: number, documents: number } {\n return collab?.stats() ?? { connections: 0, documents: 0 }\n}\n\n/** Tell connected clients the document is gone, disconnect them and drop the Yjs state. Call before removing the JSON. */\nexport function forgetCollabDocument(id: string): Promise<void> {\n return useCollabServer().forgetDocument(id)\n}\n\n/** Current content of a document that is open in the collaboration server (unsaved edits included), `null` when nobody has it open. */\nexport function liveContent(id: string): JSONContent | null {\n return collab?.liveContent(id) ?? null\n}\n\n/** The host rewrote a document's content (an agent wrote the file): merge it into the open document now, see `CollabServer.contentChanged`. */\nexport function collabContentChanged(id: string): Promise<void> {\n return collab?.contentChanged(id) ?? Promise.resolve()\n}\n\n/** AI SDK language model for `ref`, see `AiModels.resolveModel`. */\nexport function resolveModel(ref: ModelRef, user: object | null): Promise<LanguageModel> {\n return useAiModels().resolveModel(ref, user)\n}\n\n/** The models listed for `user`, see `AiModels.listModels`. */\nexport function listAiModels(user: object | null): Promise<ModelProfile[]> {\n return useAiModels().listModels(user)\n}\n\n/**\n * Per-user limit for host-defined AI routes: the same limiter as the editor's own AI endpoints. Call first in the route.\n * Throws 401 (`HttpError`) without a user, 429 when exceeded; returns the user the adapter authenticated, for `resolveModel`.\n * With a Node-backed request (`event.node.res`, as h3 events have) the 429's `Retry-After` header is set on the response too.\n */\nexport async function enforceAiRateLimit(request: { headers: Headers, node?: { res: { setHeader(name: string, value: string): unknown } } }): Promise<object> {\n try {\n return await enforceRateLimit({ adapter: useEditorAdapter(), ai: useAiModels(), limiter: useRateLimiter() }, { headers: request.headers })\n }\n catch (error) {\n if (error instanceof HttpError) for (const [name, value] of Object.entries(error.headers)) request.node?.res.setHeader(name, value)\n throw error\n }\n}\n"],"mappings":";;;;;;AAyBA,IAAI;AACJ,IAAI,SAA6B,CAAC;AAClC,IAAI;AACJ,IAAI;AACJ,IAAI;;AAGJ,SAAgB,iBAAiB,MAAqB;CACpD,MAAM,WAAW;CACjB,UAAU;CACV,SAAS,KAAA;CACT,SAAS,KAAA;CACT,IAAI,UAAU,SAAc,MAAM;AACpC;AAEA,SAAgB,mBAAkC;CAChD,IAAI,CAAC,SAAS,MAAM,IAAI,MAAM,0DAA0D;CACxF,OAAO;AACT;;AAGA,SAAgB,sBAAsB,MAA0B;CAC9D,SAAS;CACT,SAAS,KAAA;CACT,UAAU,KAAA;AACZ;;AAGA,SAAgB,kBAAgC;CAC9C,OAAO,WAAW,mBAAmB,EAAE,SAAS,iBAAiB,EAAE,CAAC;AACtE;;AAGA,SAAgB,cAAwB;CACtC,IAAI,QAAQ,OAAO;CACnB,MAAM,UAAU,iBAAiB;CACjC,OAAO,SAAS,eAAe;EAC7B,SAAS,CAAC;EACV,eAAe,QAAQ,mBAAmB,KAAK,SAAS,QAAQ,cAAe,KAAK,IAAI;EACxF,YAAY,QAAQ,gBAAe,SAAQ,QAAQ,WAAY,IAAI;EACnE,GAAG,OAAO;CACZ,CAAC;AACH;;AAGA,SAAgB,iBAA8B;CAC5C,OAAO,YAAY,kBAAkB,OAAO,aAAa;EAAE,KAAK;EAAI,UAAU;CAAO,CAAC;AACxF;;AAGA,eAAsB,oBAAoB;CACxC,MAAM,OAAO;CACb,SAAS,KAAA;CACT,MAAM,MAAM,MAAM;AACpB;;AAGA,SAAgB,cAA0D;CACxE,OAAO,QAAQ,MAAM,KAAK;EAAE,aAAa;EAAG,WAAW;CAAE;AAC3D;;AAGA,SAAgB,qBAAqB,IAA2B;CAC9D,OAAO,gBAAgB,CAAC,CAAC,eAAe,EAAE;AAC5C;;AAGA,SAAgB,YAAY,IAAgC;CAC1D,OAAO,QAAQ,YAAY,EAAE,KAAK;AACpC;;AAGA,SAAgB,qBAAqB,IAA2B;CAC9D,OAAO,QAAQ,eAAe,EAAE,KAAK,QAAQ,QAAQ;AACvD;;AAGA,SAAgB,aAAa,KAAe,MAA6C;CACvF,OAAO,YAAY,CAAC,CAAC,aAAa,KAAK,IAAI;AAC7C;;AAGA,SAAgB,aAAa,MAA8C;CACzE,OAAO,YAAY,CAAC,CAAC,WAAW,IAAI;AACtC;;;;;;AAOA,eAAsB,mBAAmB,SAAqH;CAC5J,IAAI;EACF,OAAO,MAAM,iBAAiB;GAAE,SAAS,iBAAiB;GAAG,IAAI,YAAY;GAAG,SAAS,eAAe;EAAE,GAAG,EAAE,SAAS,QAAQ,QAAQ,CAAC;CAC3I,SACO,OAAO;EACZ,IAAI,iBAAiB,WAAW,KAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,MAAM,OAAO,GAAG,QAAQ,MAAM,IAAI,UAAU,MAAM,KAAK;EAClI,MAAM;CACR;AACF"}
@@ -0,0 +1,8 @@
1
+ import { HttpError } from "./errors.js";
2
+ import { AiModels, AiModelsConfig, ChatMessage, ChatTurnPart, PresetConfig, TranscriptionConfig, createAiModels, streamChat, streamChatTurn, upstreamError } from "./ai.js";
3
+ import { AuthenticateRequest, EditorAdapter } from "./adapter.js";
4
+ import { COLLAB_FIELD, CollabConnection, CollabServer, CollabServerOptions, WebSocketLike, createCollabServer } from "./collab.js";
5
+ import { RateLimiter, RateLimiterOptions, createRateLimiter, userKey } from "./rate-limit.js";
6
+ import { decodeCollabState, encodeCollabState, isStateStale } from "./collab-state.js";
7
+ import { EditorServerConfig, closeEditorServer, collabContentChanged, collabStats, configureEditorServer, enforceAiRateLimit, forgetCollabDocument, listAiModels, liveContent, resolveModel, setEditorAdapter, useAiModels, useCollabServer, useEditorAdapter } from "./host.js";
8
+ export { type AiModels, type AiModelsConfig, type AuthenticateRequest, COLLAB_FIELD, type ChatMessage, type ChatTurnPart, type CollabConnection, type CollabServer, type CollabServerOptions, type EditorAdapter, type EditorServerConfig, HttpError, type PresetConfig, type RateLimiter, type RateLimiterOptions, type TranscriptionConfig, type WebSocketLike, closeEditorServer, collabContentChanged, collabStats, configureEditorServer, createAiModels, createCollabServer, createRateLimiter, decodeCollabState, encodeCollabState, enforceAiRateLimit, forgetCollabDocument, isStateStale, listAiModels, liveContent, resolveModel, setEditorAdapter, streamChat, streamChatTurn, upstreamError, useAiModels, useCollabServer, useEditorAdapter, userKey };
@@ -0,0 +1,7 @@
1
+ import { HttpError } from "./errors.js";
2
+ import { createAiModels, streamChat, streamChatTurn, upstreamError } from "./ai.js";
3
+ import { decodeCollabState, encodeCollabState, isStateStale } from "./collab-state.js";
4
+ import { COLLAB_FIELD, createCollabServer } from "./collab.js";
5
+ import { createRateLimiter, userKey } from "./rate-limit.js";
6
+ import { closeEditorServer, collabContentChanged, collabStats, configureEditorServer, enforceAiRateLimit, forgetCollabDocument, listAiModels, liveContent, resolveModel, setEditorAdapter, useAiModels, useCollabServer, useEditorAdapter } from "./host.js";
7
+ export { COLLAB_FIELD, HttpError, closeEditorServer, collabContentChanged, collabStats, configureEditorServer, createAiModels, createCollabServer, createRateLimiter, decodeCollabState, encodeCollabState, enforceAiRateLimit, forgetCollabDocument, isStateStale, listAiModels, liveContent, resolveModel, setEditorAdapter, streamChat, streamChatTurn, upstreamError, useAiModels, useCollabServer, useEditorAdapter, userKey };
@@ -0,0 +1,24 @@
1
+ import { CollabServer } from "./collab.js";
2
+ //#region src/server/node.d.ts
3
+ export interface CollabListenOptions {
4
+ /** Port to listen on; 0 picks a free one (see `CollabListener.port`). Default 0. */
5
+ port?: number;
6
+ /** Address to bind. Default: all interfaces. */
7
+ host?: string;
8
+ }
9
+ export interface CollabListener {
10
+ /** The port the server listens on. */
11
+ port: number;
12
+ /** `ws://` URL of the server: use it as the `HocuspocusProvider` `url`; the document is the provider's `name`. */
13
+ url: string;
14
+ /** Closes the collab server (pending stores are written first), the websocket connections and the listening socket. */
15
+ close(): Promise<void>;
16
+ }
17
+ /**
18
+ * Serves `collab` on its own Node HTTP server: every websocket upgrade becomes a collaboration connection, whose user
19
+ * the adapter authenticates from the upgrade request's headers and the client's `token`. For a plain Node script;
20
+ * hosts with a web framework mount `collab.handleConnection` on its websocket support instead.
21
+ */
22
+ export declare function listenCollab(collab: CollabServer, { port, host }?: CollabListenOptions): Promise<CollabListener>;
23
+ //#endregion
24
+ //# sourceMappingURL=node.d.ts.map