@agimon-ai/doompi-author 0.0.1-alpha.2 → 0.0.1-alpha.21

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 (318) hide show
  1. package/README.md +5 -1
  2. package/dist/apiContracts.cjs +316 -0
  3. package/dist/apiContracts.cjs.map +1 -0
  4. package/dist/apiContracts.d.mts +53 -0
  5. package/dist/apiContracts.d.mts.map +1 -0
  6. package/dist/apiContracts.mjs +311 -0
  7. package/dist/apiContracts.mjs.map +1 -0
  8. package/dist/authorCommand-B90ghX5J.mjs +226 -0
  9. package/dist/authorCommand-B90ghX5J.mjs.map +1 -0
  10. package/dist/authorCommand-Cd5dnLF7.cjs +315 -0
  11. package/dist/authorCommand-Cd5dnLF7.cjs.map +1 -0
  12. package/dist/authorFacade-B9-Re3Ga.mjs +75 -0
  13. package/dist/authorFacade-B9-Re3Ga.mjs.map +1 -0
  14. package/dist/authorFacade-BvCSzZ5K.cjs +104 -0
  15. package/dist/authorFacade-BvCSzZ5K.cjs.map +1 -0
  16. package/dist/authorFacade-RZ6EXlR5.d.mts +113 -0
  17. package/dist/authorFacade-RZ6EXlR5.d.mts.map +1 -0
  18. package/dist/authorFacade.cjs +26 -0
  19. package/dist/authorFacade.d.mts +3 -0
  20. package/dist/authorFacade.mjs +3 -0
  21. package/dist/extensions/pi.cjs +172 -1
  22. package/dist/extensions/pi.cjs.map +1 -0
  23. package/dist/extensions/pi.d.mts +6 -2
  24. package/dist/extensions/pi.d.mts.map +1 -0
  25. package/dist/extensions/pi.mjs +167 -1
  26. package/dist/extensions/pi.mjs.map +1 -0
  27. package/dist/extensions/server.cjs +659 -0
  28. package/dist/extensions/server.cjs.map +1 -0
  29. package/dist/extensions/server.d.mts +5 -0
  30. package/dist/extensions/server.d.mts.map +1 -0
  31. package/dist/extensions/server.mjs +652 -0
  32. package/dist/extensions/server.mjs.map +1 -0
  33. package/dist/extensions/web.mjs +4231 -0
  34. package/dist/extensions/web.mjs.map +1 -0
  35. package/dist/index-Btm_xNOb.d.mts +386 -0
  36. package/dist/index-Btm_xNOb.d.mts.map +1 -0
  37. package/dist/index.cjs +35 -1
  38. package/dist/index.d.mts +2 -21
  39. package/dist/index.mjs +4 -1
  40. package/dist/monitor-7T5YF6px.mjs +70 -0
  41. package/dist/monitor-7T5YF6px.mjs.map +1 -0
  42. package/dist/monitor-BxY8s_AX.cjs +81 -0
  43. package/dist/monitor-BxY8s_AX.cjs.map +1 -0
  44. package/dist/structuredDocuments-Bg6DIqu5.cjs +960 -0
  45. package/dist/structuredDocuments-Bg6DIqu5.cjs.map +1 -0
  46. package/dist/structuredDocuments-CzMYD0Bq.mjs +810 -0
  47. package/dist/structuredDocuments-CzMYD0Bq.mjs.map +1 -0
  48. package/package.json +48 -38
  49. package/src/types/authorPreview.ts +76 -0
  50. package/src/types/webAuthor.ts +1 -1
  51. package/dist/_virtual/_rolldown/runtime.cjs +0 -1
  52. package/dist/adapters/authorApi.cjs +0 -2
  53. package/dist/adapters/authorApi.cjs.map +0 -1
  54. package/dist/adapters/authorBridgeApi.cjs +0 -2
  55. package/dist/adapters/authorBridgeApi.cjs.map +0 -1
  56. package/dist/adapters/authorDocumentApi.cjs +0 -2
  57. package/dist/adapters/authorDocumentApi.cjs.map +0 -1
  58. package/dist/adapters/pi/authorBridgeClient.cjs +0 -2
  59. package/dist/adapters/pi/authorBridgeClient.cjs.map +0 -1
  60. package/dist/adapters/pi/authorTools.cjs +0 -2
  61. package/dist/adapters/pi/authorTools.cjs.map +0 -1
  62. package/dist/adapters/pi/extension.cjs +0 -2
  63. package/dist/adapters/pi/extension.cjs.map +0 -1
  64. package/dist/adapters/structuredDocuments/common.cjs +0 -2
  65. package/dist/adapters/structuredDocuments/common.cjs.map +0 -1
  66. package/dist/adapters/structuredDocuments/csv.cjs +0 -7
  67. package/dist/adapters/structuredDocuments/csv.cjs.map +0 -1
  68. package/dist/adapters/structuredDocuments/index.cjs +0 -2
  69. package/dist/adapters/structuredDocuments/index.cjs.map +0 -1
  70. package/dist/adapters/structuredDocuments/markdownSlides.cjs +0 -6
  71. package/dist/adapters/structuredDocuments/markdownSlides.cjs.map +0 -1
  72. package/dist/adapters/structuredDocuments/ooxmlArchive.cjs +0 -2
  73. package/dist/adapters/structuredDocuments/ooxmlArchive.cjs.map +0 -1
  74. package/dist/adapters/structuredDocuments/pptx.cjs +0 -2
  75. package/dist/adapters/structuredDocuments/pptx.cjs.map +0 -1
  76. package/dist/adapters/structuredDocuments/xlsx.cjs +0 -2
  77. package/dist/adapters/structuredDocuments/xlsx.cjs.map +0 -1
  78. package/dist/adapters/structuredDocuments/xmlText.cjs +0 -2
  79. package/dist/adapters/structuredDocuments/xmlText.cjs.map +0 -1
  80. package/dist/adapters/webAuthorChannel.cjs +0 -2
  81. package/dist/adapters/webAuthorChannel.cjs.map +0 -1
  82. package/dist/commands/doomAuthorCommand.cjs +0 -2
  83. package/dist/commands/doomAuthorCommand.cjs.map +0 -1
  84. package/dist/container/index.cjs +0 -2
  85. package/dist/container/index.cjs.map +0 -1
  86. package/dist/extensions/pi.d.cts +0 -2
  87. package/dist/index.d.cts +0 -21
  88. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/engine/helpers/union.d.cts +0 -6
  89. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/engine/helpers/union.d.cts.map +0 -1
  90. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/engine/helpers/union.d.mts +0 -6
  91. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/engine/helpers/union.d.mts.map +0 -1
  92. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/_optional.d.cts +0 -7
  93. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/_optional.d.cts.map +0 -1
  94. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/_optional.d.mts +0 -7
  95. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/_optional.d.mts.map +0 -1
  96. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/object.d.cts +0 -12
  97. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/object.d.cts.map +0 -1
  98. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/object.d.mts +0 -12
  99. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/object.d.mts.map +0 -1
  100. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/properties.d.cts +0 -12
  101. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/properties.d.cts.map +0 -1
  102. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/properties.d.mts +0 -12
  103. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/properties.d.mts.map +0 -1
  104. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/record.d.cts +0 -9
  105. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/record.d.cts.map +0 -1
  106. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/record.d.mts +0 -9
  107. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/record.d.mts.map +0 -1
  108. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/schema.d.cts +0 -4
  109. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/schema.d.cts.map +0 -1
  110. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/schema.d.mts +0 -4
  111. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/schema.d.mts.map +0 -1
  112. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/string.d.cts +0 -9
  113. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/string.d.cts.map +0 -1
  114. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/string.d.mts +0 -9
  115. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/string.d.mts.map +0 -1
  116. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/unknown.d.cts +0 -8
  117. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/unknown.d.cts.map +0 -1
  118. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/unknown.d.mts +0 -8
  119. package/dist/node_modules/.pnpm/typebox@1.3.25/node_modules/typebox/build/type/types/unknown.d.mts.map +0 -1
  120. package/dist/packages/minor/doompi-author/src/adapters/authorApi.d.cts +0 -15
  121. package/dist/packages/minor/doompi-author/src/adapters/authorApi.d.cts.map +0 -1
  122. package/dist/packages/minor/doompi-author/src/adapters/authorApi.d.mts +0 -15
  123. package/dist/packages/minor/doompi-author/src/adapters/authorApi.d.mts.map +0 -1
  124. package/dist/packages/minor/doompi-author/src/adapters/authorApi.mjs +0 -2
  125. package/dist/packages/minor/doompi-author/src/adapters/authorApi.mjs.map +0 -1
  126. package/dist/packages/minor/doompi-author/src/adapters/authorBridgeApi.d.cts +0 -6
  127. package/dist/packages/minor/doompi-author/src/adapters/authorBridgeApi.d.cts.map +0 -1
  128. package/dist/packages/minor/doompi-author/src/adapters/authorBridgeApi.d.mts +0 -6
  129. package/dist/packages/minor/doompi-author/src/adapters/authorBridgeApi.d.mts.map +0 -1
  130. package/dist/packages/minor/doompi-author/src/adapters/authorBridgeApi.mjs +0 -2
  131. package/dist/packages/minor/doompi-author/src/adapters/authorBridgeApi.mjs.map +0 -1
  132. package/dist/packages/minor/doompi-author/src/adapters/authorDocumentApi.d.cts +0 -11
  133. package/dist/packages/minor/doompi-author/src/adapters/authorDocumentApi.d.cts.map +0 -1
  134. package/dist/packages/minor/doompi-author/src/adapters/authorDocumentApi.d.mts +0 -11
  135. package/dist/packages/minor/doompi-author/src/adapters/authorDocumentApi.d.mts.map +0 -1
  136. package/dist/packages/minor/doompi-author/src/adapters/authorDocumentApi.mjs +0 -2
  137. package/dist/packages/minor/doompi-author/src/adapters/authorDocumentApi.mjs.map +0 -1
  138. package/dist/packages/minor/doompi-author/src/adapters/pi/authorBridgeClient.d.cts +0 -18
  139. package/dist/packages/minor/doompi-author/src/adapters/pi/authorBridgeClient.d.cts.map +0 -1
  140. package/dist/packages/minor/doompi-author/src/adapters/pi/authorBridgeClient.d.mts +0 -18
  141. package/dist/packages/minor/doompi-author/src/adapters/pi/authorBridgeClient.d.mts.map +0 -1
  142. package/dist/packages/minor/doompi-author/src/adapters/pi/authorBridgeClient.mjs +0 -2
  143. package/dist/packages/minor/doompi-author/src/adapters/pi/authorBridgeClient.mjs.map +0 -1
  144. package/dist/packages/minor/doompi-author/src/adapters/pi/authorTools.d.cts +0 -9
  145. package/dist/packages/minor/doompi-author/src/adapters/pi/authorTools.d.cts.map +0 -1
  146. package/dist/packages/minor/doompi-author/src/adapters/pi/authorTools.d.mts +0 -9
  147. package/dist/packages/minor/doompi-author/src/adapters/pi/authorTools.d.mts.map +0 -1
  148. package/dist/packages/minor/doompi-author/src/adapters/pi/authorTools.mjs +0 -2
  149. package/dist/packages/minor/doompi-author/src/adapters/pi/authorTools.mjs.map +0 -1
  150. package/dist/packages/minor/doompi-author/src/adapters/pi/extension.d.cts +0 -19
  151. package/dist/packages/minor/doompi-author/src/adapters/pi/extension.d.cts.map +0 -1
  152. package/dist/packages/minor/doompi-author/src/adapters/pi/extension.d.mts +0 -19
  153. package/dist/packages/minor/doompi-author/src/adapters/pi/extension.d.mts.map +0 -1
  154. package/dist/packages/minor/doompi-author/src/adapters/pi/extension.mjs +0 -2
  155. package/dist/packages/minor/doompi-author/src/adapters/pi/extension.mjs.map +0 -1
  156. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/common.mjs +0 -2
  157. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/common.mjs.map +0 -1
  158. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/csv.d.cts +0 -7
  159. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/csv.d.cts.map +0 -1
  160. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/csv.d.mts +0 -7
  161. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/csv.d.mts.map +0 -1
  162. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/csv.mjs +0 -7
  163. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/csv.mjs.map +0 -1
  164. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/index.d.cts +0 -13
  165. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/index.d.cts.map +0 -1
  166. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/index.d.mts +0 -13
  167. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/index.d.mts.map +0 -1
  168. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/index.mjs +0 -2
  169. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/index.mjs.map +0 -1
  170. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/markdownSlides.d.cts +0 -7
  171. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/markdownSlides.d.cts.map +0 -1
  172. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/markdownSlides.d.mts +0 -7
  173. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/markdownSlides.d.mts.map +0 -1
  174. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/markdownSlides.mjs +0 -6
  175. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/markdownSlides.mjs.map +0 -1
  176. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/ooxmlArchive.d.cts +0 -13
  177. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/ooxmlArchive.d.cts.map +0 -1
  178. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/ooxmlArchive.d.mts +0 -13
  179. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/ooxmlArchive.d.mts.map +0 -1
  180. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/ooxmlArchive.mjs +0 -2
  181. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/ooxmlArchive.mjs.map +0 -1
  182. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/pptx.d.cts +0 -7
  183. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/pptx.d.cts.map +0 -1
  184. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/pptx.d.mts +0 -7
  185. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/pptx.d.mts.map +0 -1
  186. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/pptx.mjs +0 -2
  187. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/pptx.mjs.map +0 -1
  188. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/xlsx.d.cts +0 -7
  189. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/xlsx.d.cts.map +0 -1
  190. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/xlsx.d.mts +0 -7
  191. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/xlsx.d.mts.map +0 -1
  192. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/xlsx.mjs +0 -2
  193. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/xlsx.mjs.map +0 -1
  194. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/xmlText.mjs +0 -2
  195. package/dist/packages/minor/doompi-author/src/adapters/structuredDocuments/xmlText.mjs.map +0 -1
  196. package/dist/packages/minor/doompi-author/src/adapters/webAuthorChannel.d.cts +0 -6
  197. package/dist/packages/minor/doompi-author/src/adapters/webAuthorChannel.d.cts.map +0 -1
  198. package/dist/packages/minor/doompi-author/src/adapters/webAuthorChannel.d.mts +0 -6
  199. package/dist/packages/minor/doompi-author/src/adapters/webAuthorChannel.d.mts.map +0 -1
  200. package/dist/packages/minor/doompi-author/src/adapters/webAuthorChannel.mjs +0 -2
  201. package/dist/packages/minor/doompi-author/src/adapters/webAuthorChannel.mjs.map +0 -1
  202. package/dist/packages/minor/doompi-author/src/commands/doomAuthorCommand.mjs +0 -2
  203. package/dist/packages/minor/doompi-author/src/commands/doomAuthorCommand.mjs.map +0 -1
  204. package/dist/packages/minor/doompi-author/src/container/index.d.cts +0 -5
  205. package/dist/packages/minor/doompi-author/src/container/index.d.cts.map +0 -1
  206. package/dist/packages/minor/doompi-author/src/container/index.d.mts +0 -5
  207. package/dist/packages/minor/doompi-author/src/container/index.d.mts.map +0 -1
  208. package/dist/packages/minor/doompi-author/src/container/index.mjs +0 -2
  209. package/dist/packages/minor/doompi-author/src/container/index.mjs.map +0 -1
  210. package/dist/packages/minor/doompi-author/src/schemas/authorTools.d.cts +0 -16
  211. package/dist/packages/minor/doompi-author/src/schemas/authorTools.d.cts.map +0 -1
  212. package/dist/packages/minor/doompi-author/src/schemas/authorTools.d.mts +0 -16
  213. package/dist/packages/minor/doompi-author/src/schemas/authorTools.d.mts.map +0 -1
  214. package/dist/packages/minor/doompi-author/src/schemas/authorTools.mjs +0 -2
  215. package/dist/packages/minor/doompi-author/src/schemas/authorTools.mjs.map +0 -1
  216. package/dist/packages/minor/doompi-author/src/services/authorBridgeState.d.cts +0 -31
  217. package/dist/packages/minor/doompi-author/src/services/authorBridgeState.d.cts.map +0 -1
  218. package/dist/packages/minor/doompi-author/src/services/authorBridgeState.d.mts +0 -31
  219. package/dist/packages/minor/doompi-author/src/services/authorBridgeState.d.mts.map +0 -1
  220. package/dist/packages/minor/doompi-author/src/services/authorBridgeState.mjs +0 -2
  221. package/dist/packages/minor/doompi-author/src/services/authorBridgeState.mjs.map +0 -1
  222. package/dist/packages/minor/doompi-author/src/services/authorCatalog.d.cts +0 -10
  223. package/dist/packages/minor/doompi-author/src/services/authorCatalog.d.cts.map +0 -1
  224. package/dist/packages/minor/doompi-author/src/services/authorCatalog.d.mts +0 -10
  225. package/dist/packages/minor/doompi-author/src/services/authorCatalog.d.mts.map +0 -1
  226. package/dist/packages/minor/doompi-author/src/services/authorMode.d.cts +0 -19
  227. package/dist/packages/minor/doompi-author/src/services/authorMode.d.cts.map +0 -1
  228. package/dist/packages/minor/doompi-author/src/services/authorMode.d.mts +0 -19
  229. package/dist/packages/minor/doompi-author/src/services/authorMode.d.mts.map +0 -1
  230. package/dist/packages/minor/doompi-author/src/services/authorMode.mjs +0 -3
  231. package/dist/packages/minor/doompi-author/src/services/authorMode.mjs.map +0 -1
  232. package/dist/packages/minor/doompi-author/src/services/extensionService.d.cts +0 -7
  233. package/dist/packages/minor/doompi-author/src/services/extensionService.d.cts.map +0 -1
  234. package/dist/packages/minor/doompi-author/src/services/extensionService.d.mts +0 -7
  235. package/dist/packages/minor/doompi-author/src/services/extensionService.d.mts.map +0 -1
  236. package/dist/packages/minor/doompi-author/src/services/extensionService.mjs +0 -2
  237. package/dist/packages/minor/doompi-author/src/services/extensionService.mjs.map +0 -1
  238. package/dist/packages/minor/doompi-author/src/types/author.d.cts +0 -39
  239. package/dist/packages/minor/doompi-author/src/types/author.d.cts.map +0 -1
  240. package/dist/packages/minor/doompi-author/src/types/author.d.mts +0 -39
  241. package/dist/packages/minor/doompi-author/src/types/author.d.mts.map +0 -1
  242. package/dist/packages/minor/doompi-author/src/types/author.mjs +0 -2
  243. package/dist/packages/minor/doompi-author/src/types/author.mjs.map +0 -1
  244. package/dist/packages/minor/doompi-author/src/types/authorApi.d.cts +0 -23
  245. package/dist/packages/minor/doompi-author/src/types/authorApi.d.cts.map +0 -1
  246. package/dist/packages/minor/doompi-author/src/types/authorApi.d.mts +0 -23
  247. package/dist/packages/minor/doompi-author/src/types/authorApi.d.mts.map +0 -1
  248. package/dist/packages/minor/doompi-author/src/types/authorApi.mjs +0 -2
  249. package/dist/packages/minor/doompi-author/src/types/authorApi.mjs.map +0 -1
  250. package/dist/packages/minor/doompi-author/src/types/extension.d.cts +0 -16
  251. package/dist/packages/minor/doompi-author/src/types/extension.d.cts.map +0 -1
  252. package/dist/packages/minor/doompi-author/src/types/extension.d.mts +0 -16
  253. package/dist/packages/minor/doompi-author/src/types/extension.d.mts.map +0 -1
  254. package/dist/packages/minor/doompi-author/src/types/structuredDocuments.d.cts +0 -60
  255. package/dist/packages/minor/doompi-author/src/types/structuredDocuments.d.cts.map +0 -1
  256. package/dist/packages/minor/doompi-author/src/types/structuredDocuments.d.mts +0 -60
  257. package/dist/packages/minor/doompi-author/src/types/structuredDocuments.d.mts.map +0 -1
  258. package/dist/packages/minor/doompi-author/src/types/webAuthor.d.cts +0 -67
  259. package/dist/packages/minor/doompi-author/src/types/webAuthor.d.cts.map +0 -1
  260. package/dist/packages/minor/doompi-author/src/types/webAuthor.d.mts +0 -67
  261. package/dist/packages/minor/doompi-author/src/types/webAuthor.d.mts.map +0 -1
  262. package/dist/packages/minor/doompi-author/src/types/webAuthor.mjs +0 -2
  263. package/dist/packages/minor/doompi-author/src/types/webAuthor.mjs.map +0 -1
  264. package/dist/schemas/authorTools.cjs +0 -2
  265. package/dist/schemas/authorTools.cjs.map +0 -1
  266. package/dist/services/authorBridgeState.cjs +0 -2
  267. package/dist/services/authorBridgeState.cjs.map +0 -1
  268. package/dist/services/authorMode.cjs +0 -3
  269. package/dist/services/authorMode.cjs.map +0 -1
  270. package/dist/services/extensionService.cjs +0 -2
  271. package/dist/services/extensionService.cjs.map +0 -1
  272. package/dist/sessionApi.cjs +0 -1
  273. package/dist/sessionApi.d.cts +0 -7
  274. package/dist/sessionApi.d.mts +0 -7
  275. package/dist/sessionApi.mjs +0 -1
  276. package/dist/types/author.cjs +0 -2
  277. package/dist/types/author.cjs.map +0 -1
  278. package/dist/types/authorApi.cjs +0 -2
  279. package/dist/types/authorApi.cjs.map +0 -1
  280. package/dist/types/webAuthor.cjs +0 -2
  281. package/dist/types/webAuthor.cjs.map +0 -1
  282. package/dist/webHub.cjs +0 -1
  283. package/dist/webHub.d.cts +0 -2
  284. package/dist/webHub.d.mts +0 -2
  285. package/dist/webHub.mjs +0 -1
  286. package/src/exports/webClient.ts +0 -76
  287. package/src/web/api/authorBroker.ts +0 -14
  288. package/src/web/api/authorBrowserBridge.ts +0 -225
  289. package/src/web/api/authorFiles.ts +0 -219
  290. package/src/web/api/authorMedia.ts +0 -19
  291. package/src/web/api/authorRuntime.ts +0 -164
  292. package/src/web/components/AuthorDocumentPanel.tsx +0 -232
  293. package/src/web/components/AuthorGridOverlay.tsx +0 -81
  294. package/src/web/components/AuthorMediaPreview.tsx +0 -41
  295. package/src/web/components/AuthorMediaView.tsx +0 -356
  296. package/src/web/components/AuthorPanel.tsx +0 -105
  297. package/src/web/components/AuthorRegionDrafts.tsx +0 -102
  298. package/src/web/components/AuthorRequestLog.tsx +0 -179
  299. package/src/web/components/AuthorStructuredView.tsx +0 -121
  300. package/src/web/components/AuthorTextView.tsx +0 -97
  301. package/src/web/components/AuthorToolPalette.tsx +0 -103
  302. package/src/web/components/AuthorVideoControls.tsx +0 -111
  303. package/src/web/components/DescribeAuthorToolsToolCard.tsx +0 -50
  304. package/src/web/components/OpenAuthoringFileToolCard.tsx +0 -66
  305. package/src/web/components/UseAuthorToolsToolCard.tsx +0 -50
  306. package/src/web/index.ts +0 -68
  307. package/src/web/lib/authorGrid.ts +0 -124
  308. package/src/web/lib/authorRegions.ts +0 -30
  309. package/src/web/lib/authorViewportTypes.ts +0 -202
  310. package/src/web/lib/describeAuthorToolsToolRender.ts +0 -20
  311. package/src/web/lib/useAuthorToolsToolRender.ts +0 -20
  312. package/src/web/stores/authorCapture.ts +0 -322
  313. package/src/web/stores/authorGridTools.ts +0 -316
  314. package/src/web/stores/authorProfiles.ts +0 -130
  315. package/src/web/stores/authorRequestLifecycle.ts +0 -82
  316. package/src/web/stores/authorStore.ts +0 -60
  317. package/src/web/stores/authorWorkspaceStore.ts +0 -525
  318. package/src/web/tsconfig.json +0 -22
@@ -1,164 +0,0 @@
1
- import type {
2
- ModelContext,
3
- ModelContextAbortSignal,
4
- ModelContextToolDescriptor,
5
- WebPluginRuntime,
6
- } from '@agimon-ai/doompi-web-contracts';
7
- import type { AuthorTrustedProfile, AuthorTrustedTool } from '../lib/authorViewportTypes.ts';
8
-
9
- export const AUTHOR_RUNTIME_BINDING_IDS = {
10
- text: 'author.viewport.text',
11
- media: 'author.viewport.media',
12
- } as const;
13
-
14
- interface ActiveCatalog {
15
- generation: number;
16
- controller: AbortController;
17
- profiles: ReadonlyMap<string, AuthorTrustedProfile>;
18
- }
19
-
20
- function assertProfile(profile: AuthorTrustedProfile): void {
21
- if (profile.id.trim() === '') throw new Error('Author profile id must not be empty');
22
- if (profile.tools.length > 15) throw new Error('Author profiles may expose at most 15 tools');
23
- const names = new Set<string>();
24
- for (const tool of profile.tools) {
25
- if (!/^[a-z][a-z0-9_]{0,29}$/.test(tool.name)) throw new Error(`Invalid Author tool name: ${tool.name}`);
26
- if (names.has(tool.name)) throw new Error(`Duplicate Author tool name: ${tool.name}`);
27
- names.add(tool.name);
28
- }
29
- }
30
-
31
- function descriptorMatches(actual: ModelContextToolDescriptor, expected: AuthorTrustedTool): boolean {
32
- return (
33
- actual.name === expected.name &&
34
- actual.description === expected.description &&
35
- JSON.stringify(actual.inputSchema) === JSON.stringify(expected.inputSchema)
36
- );
37
- }
38
-
39
- function staleError(): Error {
40
- return new Error('Author viewport catalog is stale');
41
- }
42
-
43
- function invocationSignal(
44
- catalogSignal: AbortSignal,
45
- requestSignal: ModelContextAbortSignal,
46
- ): { signal: AbortSignal; release: () => void } {
47
- const controller = new AbortController();
48
- const abortCatalog = (): void => controller.abort(catalogSignal.reason);
49
- const abortRequest = (): void => controller.abort(requestSignal.reason);
50
- if (catalogSignal.aborted) abortCatalog();
51
- else if (requestSignal.aborted) abortRequest();
52
- else {
53
- catalogSignal.addEventListener('abort', abortCatalog, { once: true });
54
- requestSignal.addEventListener('abort', abortRequest, { once: true });
55
- }
56
- return {
57
- signal: controller.signal,
58
- release: () => {
59
- catalogSignal.removeEventListener('abort', abortCatalog);
60
- requestSignal.removeEventListener('abort', abortRequest);
61
- },
62
- };
63
- }
64
-
65
- /** Owns page-lifetime WebMCP registrations. Profiles are replaced as one abortable catalog. */
66
- export class AuthorRuntime {
67
- readonly #runtime: WebPluginRuntime;
68
- #context: ModelContext | undefined;
69
- #active: ActiveCatalog | undefined;
70
- #pending: ActiveCatalog | undefined;
71
- #generation = 0;
72
- #disposed = false;
73
-
74
- constructor(runtime: WebPluginRuntime) {
75
- this.#runtime = runtime;
76
- }
77
-
78
- async replaceProfiles(profiles: readonly AuthorTrustedProfile[]): Promise<() => void> {
79
- if (this.#disposed) throw new Error('Author runtime is disposed');
80
- for (const profile of profiles) assertProfile(profile);
81
- const profileMap = new Map(profiles.map((profile) => [profile.id, profile]));
82
- const tools = profiles.flatMap((profile) => profile.tools);
83
- if (new Set(tools.map((tool) => tool.name)).size !== tools.length) {
84
- throw new Error('Author tool names must be unique across trusted profiles');
85
- }
86
-
87
- const context = this.#context ?? (await this.#runtime.acquireModelContext?.())?.modelContext;
88
- if (context === undefined) throw new Error('Model Context is unavailable');
89
- this.#context = context;
90
- const generation = ++this.#generation;
91
- const controller = new AbortController();
92
- const candidate: ActiveCatalog = { generation, controller, profiles: profileMap };
93
- const inactive = staleError();
94
- this.#pending?.controller.abort(inactive);
95
- this.#active?.controller.abort(inactive);
96
- this.#pending = candidate;
97
- this.#active = undefined;
98
- const assertCurrent = (): void => {
99
- if (controller.signal.aborted || this.#disposed || this.#active?.generation !== generation) throw staleError();
100
- };
101
-
102
- try {
103
- await Promise.all(
104
- tools.map(async (tool) =>
105
- context.registerTool(
106
- {
107
- name: tool.name,
108
- description: tool.description,
109
- inputSchema: tool.inputSchema,
110
- execute: async (input, options) => {
111
- assertCurrent();
112
- const parsed: unknown = JSON.parse(input);
113
- assertCurrent();
114
- const invocation = invocationSignal(controller.signal, options.signal);
115
- try {
116
- const result = await tool.execute(parsed, invocation.signal);
117
- assertCurrent();
118
- return result;
119
- } finally {
120
- invocation.release();
121
- }
122
- },
123
- },
124
- { signal: controller.signal },
125
- ),
126
- ),
127
- );
128
- const registered = await context.getTools();
129
- if (!tools.every((tool) => registered.some((descriptor) => descriptorMatches(descriptor, tool)))) {
130
- throw new Error('Model Context did not confirm the Author catalog');
131
- }
132
- if (this.#disposed || generation !== this.#generation || this.#pending !== candidate) throw staleError();
133
- this.#pending = undefined;
134
- this.#active = candidate;
135
- } catch (error) {
136
- controller.abort(error);
137
- if (this.#pending === candidate) this.#pending = undefined;
138
- throw error;
139
- }
140
-
141
- return () => {
142
- if (this.#active?.generation !== generation) return;
143
- controller.abort(staleError());
144
- this.#active = undefined;
145
- this.#generation += 1;
146
- };
147
- }
148
-
149
- async execute(name: string, input: unknown, signal: AbortSignal): Promise<unknown> {
150
- const context = this.#context;
151
- if (context === undefined || this.#active === undefined) throw new Error('Author catalog is not registered');
152
- return context.executeTool(name, JSON.stringify(input), { signal });
153
- }
154
-
155
- dispose(): void {
156
- if (this.#disposed) return;
157
- this.#disposed = true;
158
- this.#generation += 1;
159
- this.#pending?.controller.abort(new Error('Author runtime disposed'));
160
- this.#active?.controller.abort(new Error('Author runtime disposed'));
161
- this.#pending = undefined;
162
- this.#active = undefined;
163
- }
164
- }
@@ -1,232 +0,0 @@
1
- import { Button } from '@agimon-ai/doompi-web-components';
2
- import { AuthorGridOverlay, autonomousVoiceGridVisible } from './AuthorGridOverlay.tsx';
3
- import { AuthorMediaView } from './AuthorMediaView.tsx';
4
- import { AuthorTextView } from './AuthorTextView.tsx';
5
- import type { FileLinkSource, TransientTab, WebPluginSlotProps } from '@agimon-ai/doompi-web-contracts';
6
- import { useStore } from '@tanstack/react-store';
7
- import { useEffect, useRef, useState } from 'react';
8
- import { focusAuthorViewport } from '../api/authorBrowserBridge.ts';
9
- import { loadAuthorDocument, saveAuthorDocument } from '../api/authorFiles.ts';
10
- import { authorProfilesForDocument } from '../stores/authorProfiles.ts';
11
- import type { AuthorDisplayedRegion } from '../lib/authorViewportTypes.ts';
12
- import {
13
- authorDocumentKey,
14
- authorWorkspace,
15
- completeAuthorSave,
16
- failAuthorSave,
17
- focusAuthorDocument,
18
- normalizeAuthorPath,
19
- putAuthorDocument,
20
- releaseAuthorDocumentFocus,
21
- requestAuthorSave,
22
- syncAuthorDocumentFocus,
23
- type AuthorSessionWorkspace,
24
- } from '../stores/authorWorkspaceStore.ts';
25
- import { AuthorStructuredView } from './AuthorStructuredView.tsx';
26
- interface AuthorDocumentPanelProps extends WebPluginSlotProps {
27
- path: string;
28
- }
29
-
30
- function tabId(path: string): string {
31
- let hash = 2166136261;
32
- for (const char of normalizeAuthorPath(path)) hash = Math.imul(hash ^ char.charCodeAt(0), 16777619);
33
- return `author-file-${(hash >>> 0).toString(36)}`;
34
- }
35
-
36
- export function displayedAuthorRegions(
37
- workspace: AuthorSessionWorkspace | undefined,
38
- ): readonly AuthorDisplayedRegion[] {
39
- const draftRegions = workspace?.regions ?? [];
40
- if (draftRegions.length > 0) return draftRegions.map((region, index) => ({ ordinal: index + 1, region }));
41
- const activeRequest = workspace?.requests.findLast(
42
- (request) => request.status === 'REQUESTED' || request.status === 'CHANGING',
43
- );
44
- return (activeRequest?.pendingRegions ?? []).map((region) => ({
45
- ordinal: Math.max(1, (activeRequest?.regions.findIndex((original) => original.id === region.id) ?? 0) + 1),
46
- region,
47
- }));
48
- }
49
- export function AuthorDocumentPanel(props: AuthorDocumentPanelProps) {
50
- if (!props.activeMinorModes?.includes('author')) {
51
- const fallback = props.fileTabFor(props.path);
52
- if (fallback !== undefined && fallback.id !== tabId(props.path)) {
53
- return <fallback.panel {...props} />;
54
- }
55
- return (
56
- <p data-testid="author-mode-inactive" className="p-3 text-xs text-doom-dim">
57
- No file viewer is available for this path.
58
- </p>
59
- );
60
- }
61
- return <ActiveAuthorDocumentPanel {...props} />;
62
- }
63
-
64
- function ActiveAuthorDocumentPanel({ path, sessionId, statuses }: AuthorDocumentPanelProps) {
65
- const document = useStore(authorWorkspace.store, (state) =>
66
- sessionId === null ? undefined : state.documents[authorDocumentKey(sessionId, path)],
67
- );
68
- const focusGeneration = useRef<number | undefined>(undefined);
69
- const workspace = useStore(authorWorkspace.store, (state) =>
70
- sessionId === null ? undefined : state.sessions[sessionId],
71
- );
72
- const activeTool = workspace?.activeTool ?? 'select';
73
- const [markdownPreview, setMarkdownPreview] = useState(true);
74
- const [status, setStatus] = useState<string | undefined>();
75
- const kind = document?.kind;
76
- useEffect(() => {
77
- if (document !== undefined || sessionId === null) return;
78
- const controller = new AbortController();
79
- setStatus('loading');
80
- void loadAuthorDocument(sessionId, path, controller.signal)
81
- .then((loaded) => {
82
- if (controller.signal.aborted) return;
83
- putAuthorDocument(sessionId, loaded);
84
- setStatus(undefined);
85
- })
86
- .catch((error: unknown) => {
87
- if (!controller.signal.aborted) setStatus(error instanceof Error ? error.message : String(error));
88
- });
89
- return () => controller.abort();
90
- }, [document, path, sessionId]);
91
- useEffect(() => {
92
- if (document === undefined || sessionId === null) return;
93
- const generation = focusAuthorDocument(sessionId, path, document.version, document.sourceSha256);
94
- focusGeneration.current = generation;
95
- return () => releaseAuthorDocumentFocus(sessionId, generation);
96
- }, [kind, document?.sourceSha256, path, sessionId]);
97
- useEffect(() => {
98
- const generation = focusGeneration.current;
99
- if (document === undefined || sessionId === null || generation === undefined) return;
100
- syncAuthorDocumentFocus(sessionId, generation, document.version, document.sourceSha256);
101
- }, [document?.sourceSha256, document?.version, sessionId]);
102
- useEffect(() => {
103
- if (kind === undefined || sessionId === null) return;
104
- const profiles = authorProfilesForDocument(sessionId, path, kind);
105
- let release: (() => void) | undefined;
106
- let cancelled = false;
107
- void focusAuthorViewport(sessionId, profiles).then((nextRelease) => {
108
- if (cancelled) nextRelease();
109
- else release = nextRelease;
110
- });
111
- return () => {
112
- cancelled = true;
113
- release?.();
114
- };
115
- }, [kind, path, sessionId]);
116
- if (document === undefined || sessionId === null) {
117
- return <p className="p-4 text-[11px] text-doom-faint">{status ?? 'Loading document...'}</p>;
118
- }
119
-
120
- const save = async (): Promise<void> => {
121
- const savedVersion = document.version;
122
- const savedFragments = document.fragments;
123
- requestAuthorSave(sessionId, path);
124
- setStatus('saving');
125
- try {
126
- const sha256 = await saveAuthorDocument(sessionId, document);
127
- completeAuthorSave(sessionId, path, sha256, savedVersion, savedFragments);
128
- setStatus('saved');
129
- } catch (error) {
130
- failAuthorSave(sessionId, path, savedVersion);
131
- setStatus(error instanceof Error ? error.message : String(error));
132
- }
133
- };
134
- const gridVisible = autonomousVoiceGridVisible(statuses);
135
- const displayedRegions = displayedAuthorRegions(workspace);
136
- const textPanel = (
137
- <AuthorTextView
138
- sessionId={sessionId}
139
- document={document}
140
- preview={document.kind === 'markdown' && markdownPreview && activeTool === 'select' && !gridVisible}
141
- displayedRegions={displayedRegions}
142
- />
143
- );
144
-
145
- return (
146
- <section data-testid="author-document" className="flex min-h-0 flex-1 flex-col">
147
- <header className="flex items-center gap-2 border-b border-doom-border px-4 py-2">
148
- <strong className="min-w-0 flex-1 truncate text-sm text-doom-hi">{document.title ?? document.path}</strong>
149
- {document.kind === 'markdown' ? (
150
- <Button
151
- size="xs"
152
- variant="ghost"
153
- data-testid="author-markdown-toggle"
154
- onClick={() => setMarkdownPreview(!markdownPreview)}
155
- >
156
- {markdownPreview ? 'edit' : 'preview'}
157
- </Button>
158
- ) : null}
159
- {document.kind === 'video' ? (
160
- <span className="text-sm text-doom-dim">Video feedback</span>
161
- ) : (
162
- <Button
163
- className="min-h-11 px-4 text-sm"
164
- variant="outline"
165
- data-testid="author-save"
166
- disabled={document.revisions.length === 0 || document.savingVersion !== undefined}
167
- onClick={() => void save()}
168
- >
169
- Save
170
- </Button>
171
- )}
172
- </header>
173
- {status === undefined ? null : <output className="px-4 py-1 text-[10px] text-doom-faint">{status}</output>}
174
- <div className="relative flex min-h-0 flex-1 overflow-hidden">
175
- {document.kind === 'text' || document.kind === 'markdown' ? (
176
- textPanel
177
- ) : document.structuredFormat !== undefined ? (
178
- <AuthorStructuredView sessionId={sessionId} document={document} displayedRegions={displayedRegions} />
179
- ) : (
180
- <AuthorMediaView
181
- key={document.path}
182
- sessionId={sessionId}
183
- document={document}
184
- activeTool={activeTool}
185
- displayedRegions={displayedRegions}
186
- pendingCandidate={workspace?.candidate !== undefined}
187
- seekRequest={workspace?.videoSeekRequest}
188
- />
189
- )}
190
- <AuthorGridOverlay sessionId={sessionId} document={document} visible={gridVisible} />
191
- </div>
192
- </section>
193
- );
194
- }
195
-
196
- export function authorFileTab(path: string): TransientTab {
197
- const normalized = normalizeAuthorPath(path);
198
- return {
199
- id: tabId(normalized),
200
- label: normalized.split('/').at(-1) ?? normalized,
201
- retainComposer: true,
202
- panel: (props) => <AuthorDocumentPanel {...props} path={normalized} />,
203
- };
204
- }
205
-
206
- export const authorFileLinks: FileLinkSource = {
207
- requiredMinorMode: 'author',
208
- subscribe(listener) {
209
- const subscription = authorWorkspace.store.subscribe(listener);
210
- return () => subscription.unsubscribe();
211
- },
212
- fingerprint(sessionId) {
213
- if (sessionId === null) return '';
214
- const prefix = `${sessionId}\n`;
215
- return Object.keys(authorWorkspace.store.state.documents)
216
- .filter((key) => key.startsWith(prefix))
217
- .sort()
218
- .join('\n');
219
- },
220
- resolve(sessionId, path) {
221
- if (sessionId === null) return undefined;
222
- const normalized = normalizeAuthorPath(path.replace(/:\d+(?::\d+)?$/, ''));
223
- return authorWorkspace.store.state.documents[authorDocumentKey(sessionId, normalized)] === undefined
224
- ? undefined
225
- : authorFileTab(normalized);
226
- },
227
- openPath(sessionId, path) {
228
- if (sessionId === null) return undefined;
229
- const normalized = normalizeAuthorPath(path);
230
- return normalized === '' ? undefined : authorFileTab(normalized);
231
- },
232
- };
@@ -1,81 +0,0 @@
1
- import { useEffect, useRef } from 'react';
2
- import {
3
- AUTHOR_GRID_COLUMNS,
4
- AUTHOR_GRID_SIZE,
5
- clearAuthorGridGeometry,
6
- updateAuthorGridGeometry,
7
- } from '../lib/authorGrid.ts';
8
- import type { AuthorWorkspaceDocument } from '../stores/authorWorkspaceStore.ts';
9
-
10
- export function autonomousVoiceGridVisible(statuses: Readonly<Record<string, string>>): boolean {
11
- return statuses['doom-voice']?.trimStart().startsWith('voice auto:') === true;
12
- }
13
-
14
- export function AuthorGridOverlay({
15
- sessionId,
16
- document,
17
- visible,
18
- }: {
19
- sessionId: string;
20
- document: AuthorWorkspaceDocument;
21
- visible: boolean;
22
- }) {
23
- const host = useRef<HTMLDivElement>(null);
24
- useEffect(() => {
25
- const element = host.current?.parentElement;
26
- if (!visible || element === null || element === undefined) {
27
- clearAuthorGridGeometry(sessionId);
28
- return;
29
- }
30
- const publish = () => {
31
- const bounds = element.getBoundingClientRect();
32
- updateAuthorGridGeometry(sessionId, {
33
- documentPath: document.path,
34
- revision: document.version,
35
- sourceSha256: document.sourceSha256,
36
- viewport: {
37
- width: bounds.width,
38
- height: bounds.height,
39
- originX: bounds.left,
40
- originY: bounds.top,
41
- scrollX: element.scrollLeft,
42
- scrollY: element.scrollTop,
43
- zoom: window.devicePixelRatio,
44
- },
45
- });
46
- };
47
- publish();
48
- const observer = new ResizeObserver(publish);
49
- observer.observe(element);
50
- element.addEventListener('scroll', publish, { passive: true, capture: true });
51
- window.addEventListener('focus', publish);
52
- return () => {
53
- observer.disconnect();
54
- element.removeEventListener('scroll', publish, true);
55
- window.removeEventListener('focus', publish);
56
- clearAuthorGridGeometry(sessionId);
57
- };
58
- }, [document.path, document.sourceSha256, document.version, sessionId, visible]);
59
- if (!visible) return null;
60
- return (
61
- <div
62
- ref={host}
63
- data-testid="author-grid"
64
- aria-hidden="true"
65
- className="pointer-events-none absolute inset-0 z-20 grid grid-cols-8 grid-rows-8"
66
- >
67
- {Array.from({ length: AUTHOR_GRID_SIZE * AUTHOR_GRID_SIZE }, (_, index) => {
68
- const column = index % AUTHOR_GRID_SIZE;
69
- const row = Math.floor(index / AUTHOR_GRID_SIZE);
70
- return (
71
- <div key={index} className="relative border border-doom-red/25">
72
- <span className="absolute left-1 top-0.5 rounded bg-doom-deep/80 px-1 text-[8px] font-bold text-doom-red">
73
- {AUTHOR_GRID_COLUMNS[column]}
74
- {row + 1}
75
- </span>
76
- </div>
77
- );
78
- })}
79
- </div>
80
- );
81
- }
@@ -1,41 +0,0 @@
1
- import { MediaPreview } from '@agimon-ai/doompi-web-components';
2
- import { useEffect, useState } from 'react';
3
- import { authorSessionFileUrl } from '../api/authorFiles.ts';
4
- import { loadAuthorMedia } from '../api/authorMedia.ts';
5
-
6
- /** Viewing an attachment does not require enabling authoring or its editing tools. */
7
- export function AuthorMediaPreview({ sessionId, path }: { sessionId: string; path: string }) {
8
- const source = authorSessionFileUrl(sessionId, path);
9
- const [loaded, setLoaded] = useState<{ source: string; url?: string; error?: string }>();
10
- useEffect(() => {
11
- const controller = new AbortController();
12
- let dispose: (() => void) | undefined;
13
- void loadAuthorMedia(source, controller.signal)
14
- .then((asset) => {
15
- if (controller.signal.aborted) {
16
- asset.dispose();
17
- return;
18
- }
19
- dispose = () => asset.dispose();
20
- setLoaded({ source, url: asset.url });
21
- })
22
- .catch((error: unknown) => {
23
- if (!controller.signal.aborted)
24
- setLoaded({ source, error: error instanceof Error ? error.message : String(error) });
25
- });
26
- return () => {
27
- controller.abort();
28
- dispose?.();
29
- };
30
- }, [source]);
31
- const current = loaded?.source === source ? loaded : undefined;
32
- return (
33
- <div className="min-h-0 flex-1 overflow-auto p-4">
34
- {current?.url === undefined ? (
35
- <p role={current?.error ? 'alert' : 'status'}>{current?.error ?? 'Loading media...'}</p>
36
- ) : (
37
- <MediaPreview src={current.url} path={path} data-testid="author-media-preview" />
38
- )}
39
- </div>
40
- );
41
- }