@dxos/plugin-magazine 0.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 (390) hide show
  1. package/LICENSE +105 -0
  2. package/PLUGIN.mdl +653 -0
  3. package/dist/lib/neutral/FeedArticle-PEWCFFSP.mjs +90 -0
  4. package/dist/lib/neutral/FeedArticle-PEWCFFSP.mjs.map +7 -0
  5. package/dist/lib/neutral/FeedProperties-EIO7IZOA.mjs +97 -0
  6. package/dist/lib/neutral/FeedProperties-EIO7IZOA.mjs.map +7 -0
  7. package/dist/lib/neutral/MagazineArticle-DEUTR23F.mjs +325 -0
  8. package/dist/lib/neutral/MagazineArticle-DEUTR23F.mjs.map +7 -0
  9. package/dist/lib/neutral/MagazinePlugin.mjs +62 -0
  10. package/dist/lib/neutral/MagazinePlugin.mjs.map +7 -0
  11. package/dist/lib/neutral/MagazinePlugin.workerd.mjs +12 -0
  12. package/dist/lib/neutral/MagazinePlugin.workerd.mjs.map +7 -0
  13. package/dist/lib/neutral/PostArticle-RERHXPXC.mjs +230 -0
  14. package/dist/lib/neutral/PostArticle-RERHXPXC.mjs.map +7 -0
  15. package/dist/lib/neutral/PostCard-VDGN7BBA.mjs +60 -0
  16. package/dist/lib/neutral/PostCard-VDGN7BBA.mjs.map +7 -0
  17. package/dist/lib/neutral/app-graph-builder-JDPRBVHL.mjs +121 -0
  18. package/dist/lib/neutral/app-graph-builder-JDPRBVHL.mjs.map +7 -0
  19. package/dist/lib/neutral/capabilities/index.mjs +21 -0
  20. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  21. package/dist/lib/neutral/chunk-3K4AQKBZ.mjs +12 -0
  22. package/dist/lib/neutral/chunk-3K4AQKBZ.mjs.map +7 -0
  23. package/dist/lib/neutral/chunk-AFPBWBTK.mjs +591 -0
  24. package/dist/lib/neutral/chunk-AFPBWBTK.mjs.map +7 -0
  25. package/dist/lib/neutral/chunk-APQRTYT3.mjs +57 -0
  26. package/dist/lib/neutral/chunk-APQRTYT3.mjs.map +7 -0
  27. package/dist/lib/neutral/chunk-GU725ZF4.mjs +11 -0
  28. package/dist/lib/neutral/chunk-GU725ZF4.mjs.map +7 -0
  29. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  30. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  31. package/dist/lib/neutral/chunk-JFPR6OV4.mjs +60 -0
  32. package/dist/lib/neutral/chunk-JFPR6OV4.mjs.map +7 -0
  33. package/dist/lib/neutral/chunk-KTYLUOUG.mjs +36 -0
  34. package/dist/lib/neutral/chunk-KTYLUOUG.mjs.map +7 -0
  35. package/dist/lib/neutral/chunk-MBPX7RPI.mjs +14 -0
  36. package/dist/lib/neutral/chunk-MBPX7RPI.mjs.map +7 -0
  37. package/dist/lib/neutral/chunk-MJ2AY2CK.mjs +8 -0
  38. package/dist/lib/neutral/chunk-MJ2AY2CK.mjs.map +7 -0
  39. package/dist/lib/neutral/chunk-OYCDRSWB.mjs +624 -0
  40. package/dist/lib/neutral/chunk-OYCDRSWB.mjs.map +7 -0
  41. package/dist/lib/neutral/chunk-SAWKLGJU.mjs +28 -0
  42. package/dist/lib/neutral/chunk-SAWKLGJU.mjs.map +7 -0
  43. package/dist/lib/neutral/chunk-XCNCK47N.mjs +15 -0
  44. package/dist/lib/neutral/chunk-XCNCK47N.mjs.map +7 -0
  45. package/dist/lib/neutral/clear-magazine-KNY4OWY4.mjs +59 -0
  46. package/dist/lib/neutral/clear-magazine-KNY4OWY4.mjs.map +7 -0
  47. package/dist/lib/neutral/components/index.mjs +338 -0
  48. package/dist/lib/neutral/components/index.mjs.map +7 -0
  49. package/dist/lib/neutral/containers/index.mjs +17 -0
  50. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  51. package/dist/lib/neutral/create-object-SYZMRR4H.mjs +98 -0
  52. package/dist/lib/neutral/create-object-SYZMRR4H.mjs.map +7 -0
  53. package/dist/lib/neutral/curate-magazine-MA6OLK2X.mjs +184 -0
  54. package/dist/lib/neutral/curate-magazine-MA6OLK2X.mjs.map +7 -0
  55. package/dist/lib/neutral/fetch-article-content-CZO6D3QD.mjs +31 -0
  56. package/dist/lib/neutral/fetch-article-content-CZO6D3QD.mjs.map +7 -0
  57. package/dist/lib/neutral/index.mjs +18 -0
  58. package/dist/lib/neutral/index.mjs.map +7 -0
  59. package/dist/lib/neutral/load-post-content-XGL6VFF6.mjs +65 -0
  60. package/dist/lib/neutral/load-post-content-XGL6VFF6.mjs.map +7 -0
  61. package/dist/lib/neutral/meta.json +1 -0
  62. package/dist/lib/neutral/meta.mjs +8 -0
  63. package/dist/lib/neutral/meta.mjs.map +7 -0
  64. package/dist/lib/neutral/navigation-resolver-IN4OMCDR.mjs +18 -0
  65. package/dist/lib/neutral/navigation-resolver-IN4OMCDR.mjs.map +7 -0
  66. package/dist/lib/neutral/operation-handler-JE3743BU.mjs +8 -0
  67. package/dist/lib/neutral/operation-handler-JE3743BU.mjs.map +7 -0
  68. package/dist/lib/neutral/operations/index.mjs +8 -0
  69. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  70. package/dist/lib/neutral/plugin.mjs +16 -0
  71. package/dist/lib/neutral/plugin.mjs.map +7 -0
  72. package/dist/lib/neutral/plugin.workerd.mjs +16 -0
  73. package/dist/lib/neutral/plugin.workerd.mjs.map +7 -0
  74. package/dist/lib/neutral/react-surface-TZESAMG2.mjs +60 -0
  75. package/dist/lib/neutral/react-surface-TZESAMG2.mjs.map +7 -0
  76. package/dist/lib/neutral/routine-templates-A2XTJOZO.mjs +52 -0
  77. package/dist/lib/neutral/routine-templates-A2XTJOZO.mjs.map +7 -0
  78. package/dist/lib/neutral/skill-definition-3KLMUEC5.mjs +8 -0
  79. package/dist/lib/neutral/skill-definition-3KLMUEC5.mjs.map +7 -0
  80. package/dist/lib/neutral/skills/index.mjs +46 -0
  81. package/dist/lib/neutral/skills/index.mjs.map +7 -0
  82. package/dist/lib/neutral/sync-feed-UZX2XHSQ.mjs +99 -0
  83. package/dist/lib/neutral/sync-feed-UZX2XHSQ.mjs.map +7 -0
  84. package/dist/lib/neutral/translations.mjs +81 -0
  85. package/dist/lib/neutral/translations.mjs.map +7 -0
  86. package/dist/lib/neutral/types/index.mjs +14 -0
  87. package/dist/lib/neutral/types/index.mjs.map +7 -0
  88. package/dist/types/dx.config.d.ts +28 -0
  89. package/dist/types/dx.config.d.ts.map +1 -0
  90. package/dist/types/src/MagazinePlugin.d.ts +4 -0
  91. package/dist/types/src/MagazinePlugin.d.ts.map +1 -0
  92. package/dist/types/src/MagazinePlugin.test.d.ts +2 -0
  93. package/dist/types/src/MagazinePlugin.test.d.ts.map +1 -0
  94. package/dist/types/src/MagazinePlugin.workerd.d.ts +4 -0
  95. package/dist/types/src/MagazinePlugin.workerd.d.ts.map +1 -0
  96. package/dist/types/src/atoms/atoms.test.d.ts +2 -0
  97. package/dist/types/src/atoms/atoms.test.d.ts.map +1 -0
  98. package/dist/types/src/atoms/index.d.ts +7 -0
  99. package/dist/types/src/atoms/index.d.ts.map +1 -0
  100. package/dist/types/src/atoms/magazine-posts.d.ts +16 -0
  101. package/dist/types/src/atoms/magazine-posts.d.ts.map +1 -0
  102. package/dist/types/src/atoms/post-content.d.ts +7 -0
  103. package/dist/types/src/atoms/post-content.d.ts.map +1 -0
  104. package/dist/types/src/atoms/post-curation.d.ts +16 -0
  105. package/dist/types/src/atoms/post-curation.d.ts.map +1 -0
  106. package/dist/types/src/atoms/post-display.d.ts +22 -0
  107. package/dist/types/src/atoms/post-display.d.ts.map +1 -0
  108. package/dist/types/src/atoms/post-read.d.ts +14 -0
  109. package/dist/types/src/atoms/post-read.d.ts.map +1 -0
  110. package/dist/types/src/atoms/post-tags.d.ts +16 -0
  111. package/dist/types/src/atoms/post-tags.d.ts.map +1 -0
  112. package/dist/types/src/capabilities/app-graph-builder.d.ts +5 -0
  113. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  114. package/dist/types/src/capabilities/create-object.d.ts +5 -0
  115. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  116. package/dist/types/src/capabilities/index.d.ts +10 -0
  117. package/dist/types/src/capabilities/index.d.ts.map +1 -0
  118. package/dist/types/src/capabilities/navigation-resolver.d.ts +5 -0
  119. package/dist/types/src/capabilities/navigation-resolver.d.ts.map +1 -0
  120. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  121. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  122. package/dist/types/src/capabilities/react-surface.d.ts +5 -0
  123. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  124. package/dist/types/src/capabilities/routine-templates.d.ts +5 -0
  125. package/dist/types/src/capabilities/routine-templates.d.ts.map +1 -0
  126. package/dist/types/src/capabilities/skill-definition.d.ts +5 -0
  127. package/dist/types/src/capabilities/skill-definition.d.ts.map +1 -0
  128. package/dist/types/src/components/PostContent/PostContent.d.ts +30 -0
  129. package/dist/types/src/components/PostContent/PostContent.d.ts.map +1 -0
  130. package/dist/types/src/components/PostContent/PostContent.test.d.ts +2 -0
  131. package/dist/types/src/components/PostContent/PostContent.test.d.ts.map +1 -0
  132. package/dist/types/src/components/PostContent/index.d.ts +2 -0
  133. package/dist/types/src/components/PostContent/index.d.ts.map +1 -0
  134. package/dist/types/src/components/PostStack/PostStack.d.ts +17 -0
  135. package/dist/types/src/components/PostStack/PostStack.d.ts.map +1 -0
  136. package/dist/types/src/components/PostStack/PostStack.stories.d.ts +10 -0
  137. package/dist/types/src/components/PostStack/PostStack.stories.d.ts.map +1 -0
  138. package/dist/types/src/components/PostStack/index.d.ts +2 -0
  139. package/dist/types/src/components/PostStack/index.d.ts.map +1 -0
  140. package/dist/types/src/components/SubscriptionStack/SubscriptionStack.d.ts +23 -0
  141. package/dist/types/src/components/SubscriptionStack/SubscriptionStack.d.ts.map +1 -0
  142. package/dist/types/src/components/SubscriptionStack/SubscriptionStack.stories.d.ts +8 -0
  143. package/dist/types/src/components/SubscriptionStack/SubscriptionStack.stories.d.ts.map +1 -0
  144. package/dist/types/src/components/SubscriptionStack/index.d.ts +2 -0
  145. package/dist/types/src/components/SubscriptionStack/index.d.ts.map +1 -0
  146. package/dist/types/src/components/index.d.ts +4 -0
  147. package/dist/types/src/components/index.d.ts.map +1 -0
  148. package/dist/types/src/containers/FeedArticle/FeedArticle.d.ts +6 -0
  149. package/dist/types/src/containers/FeedArticle/FeedArticle.d.ts.map +1 -0
  150. package/dist/types/src/containers/FeedArticle/FeedArticle.stories.d.ts +12 -0
  151. package/dist/types/src/containers/FeedArticle/FeedArticle.stories.d.ts.map +1 -0
  152. package/dist/types/src/containers/FeedArticle/FeedToolbar.d.ts +10 -0
  153. package/dist/types/src/containers/FeedArticle/FeedToolbar.d.ts.map +1 -0
  154. package/dist/types/src/containers/FeedArticle/index.d.ts +2 -0
  155. package/dist/types/src/containers/FeedArticle/index.d.ts.map +1 -0
  156. package/dist/types/src/containers/FeedProperties/FeedProperties.d.ts +6 -0
  157. package/dist/types/src/containers/FeedProperties/FeedProperties.d.ts.map +1 -0
  158. package/dist/types/src/containers/FeedProperties/index.d.ts +2 -0
  159. package/dist/types/src/containers/FeedProperties/index.d.ts.map +1 -0
  160. package/dist/types/src/containers/MagazineArticle/MagazineArticle.d.ts +6 -0
  161. package/dist/types/src/containers/MagazineArticle/MagazineArticle.d.ts.map +1 -0
  162. package/dist/types/src/containers/MagazineArticle/MagazineArticle.stories.d.ts +9 -0
  163. package/dist/types/src/containers/MagazineArticle/MagazineArticle.stories.d.ts.map +1 -0
  164. package/dist/types/src/containers/MagazineArticle/MagazineTile.d.ts +11 -0
  165. package/dist/types/src/containers/MagazineArticle/MagazineTile.d.ts.map +1 -0
  166. package/dist/types/src/containers/MagazineArticle/index.d.ts +2 -0
  167. package/dist/types/src/containers/MagazineArticle/index.d.ts.map +1 -0
  168. package/dist/types/src/containers/MagazineArticle/useToolbar.d.ts +18 -0
  169. package/dist/types/src/containers/MagazineArticle/useToolbar.d.ts.map +1 -0
  170. package/dist/types/src/containers/PostArticle/PostArticle.d.ts +6 -0
  171. package/dist/types/src/containers/PostArticle/PostArticle.d.ts.map +1 -0
  172. package/dist/types/src/containers/PostArticle/PostArticle.stories.d.ts +8 -0
  173. package/dist/types/src/containers/PostArticle/PostArticle.stories.d.ts.map +1 -0
  174. package/dist/types/src/containers/PostArticle/PostToolbar.d.ts +19 -0
  175. package/dist/types/src/containers/PostArticle/PostToolbar.d.ts.map +1 -0
  176. package/dist/types/src/containers/PostArticle/index.d.ts +2 -0
  177. package/dist/types/src/containers/PostArticle/index.d.ts.map +1 -0
  178. package/dist/types/src/containers/PostCard/PostCard.d.ts +11 -0
  179. package/dist/types/src/containers/PostCard/PostCard.d.ts.map +1 -0
  180. package/dist/types/src/containers/PostCard/index.d.ts +2 -0
  181. package/dist/types/src/containers/PostCard/index.d.ts.map +1 -0
  182. package/dist/types/src/containers/SubscriptionsArticle/SubscriptionsArticle.d.ts +5 -0
  183. package/dist/types/src/containers/SubscriptionsArticle/SubscriptionsArticle.d.ts.map +1 -0
  184. package/dist/types/src/containers/SubscriptionsArticle/SubscriptionsArticle.stories.d.ts +8 -0
  185. package/dist/types/src/containers/SubscriptionsArticle/SubscriptionsArticle.stories.d.ts.map +1 -0
  186. package/dist/types/src/containers/SubscriptionsArticle/index.d.ts +2 -0
  187. package/dist/types/src/containers/SubscriptionsArticle/index.d.ts.map +1 -0
  188. package/dist/types/src/containers/index.d.ts +7 -0
  189. package/dist/types/src/containers/index.d.ts.map +1 -0
  190. package/dist/types/src/index.d.ts +3 -0
  191. package/dist/types/src/index.d.ts.map +1 -0
  192. package/dist/types/src/meta.d.ts +33 -0
  193. package/dist/types/src/meta.d.ts.map +1 -0
  194. package/dist/types/src/operations/clear-magazine.d.ts +10 -0
  195. package/dist/types/src/operations/clear-magazine.d.ts.map +1 -0
  196. package/dist/types/src/operations/curate-magazine.d.ts +25 -0
  197. package/dist/types/src/operations/curate-magazine.d.ts.map +1 -0
  198. package/dist/types/src/operations/curate-magazine.skill.test.d.ts +2 -0
  199. package/dist/types/src/operations/curate-magazine.skill.test.d.ts.map +1 -0
  200. package/dist/types/src/operations/curate-magazine.test.d.ts +2 -0
  201. package/dist/types/src/operations/curate-magazine.test.d.ts.map +1 -0
  202. package/dist/types/src/operations/extraction/article.d.ts +37 -0
  203. package/dist/types/src/operations/extraction/article.d.ts.map +1 -0
  204. package/dist/types/src/operations/extraction/article.test.d.ts +2 -0
  205. package/dist/types/src/operations/extraction/article.test.d.ts.map +1 -0
  206. package/dist/types/src/operations/extraction/index.d.ts +2 -0
  207. package/dist/types/src/operations/extraction/index.d.ts.map +1 -0
  208. package/dist/types/src/operations/fetch-article-content.d.ts +5 -0
  209. package/dist/types/src/operations/fetch-article-content.d.ts.map +1 -0
  210. package/dist/types/src/operations/index.d.ts +3 -0
  211. package/dist/types/src/operations/index.d.ts.map +1 -0
  212. package/dist/types/src/operations/load-post-content.d.ts +8 -0
  213. package/dist/types/src/operations/load-post-content.d.ts.map +1 -0
  214. package/dist/types/src/operations/sources/article.d.ts +24 -0
  215. package/dist/types/src/operations/sources/article.d.ts.map +1 -0
  216. package/dist/types/src/operations/sources/cors.d.ts +12 -0
  217. package/dist/types/src/operations/sources/cors.d.ts.map +1 -0
  218. package/dist/types/src/operations/sources/feed-fetcher.d.ts +22 -0
  219. package/dist/types/src/operations/sources/feed-fetcher.d.ts.map +1 -0
  220. package/dist/types/src/operations/sources/feed-fetcher.test.d.ts +2 -0
  221. package/dist/types/src/operations/sources/feed-fetcher.test.d.ts.map +1 -0
  222. package/dist/types/src/operations/sources/http.d.ts +9 -0
  223. package/dist/types/src/operations/sources/http.d.ts.map +1 -0
  224. package/dist/types/src/operations/sources/index.d.ts +6 -0
  225. package/dist/types/src/operations/sources/index.d.ts.map +1 -0
  226. package/dist/types/src/operations/sources/rss.d.ts +4 -0
  227. package/dist/types/src/operations/sources/rss.d.ts.map +1 -0
  228. package/dist/types/src/operations/sources/rss.test.d.ts +2 -0
  229. package/dist/types/src/operations/sources/rss.test.d.ts.map +1 -0
  230. package/dist/types/src/operations/sources/standard-site.d.ts +33 -0
  231. package/dist/types/src/operations/sources/standard-site.d.ts.map +1 -0
  232. package/dist/types/src/operations/sync-feed.d.ts +5 -0
  233. package/dist/types/src/operations/sync-feed.d.ts.map +1 -0
  234. package/dist/types/src/operations/sync-feed.test.d.ts +2 -0
  235. package/dist/types/src/operations/sync-feed.test.d.ts.map +1 -0
  236. package/dist/types/src/operations/util.d.ts +25 -0
  237. package/dist/types/src/operations/util.d.ts.map +1 -0
  238. package/dist/types/src/operations/util.test.d.ts +2 -0
  239. package/dist/types/src/operations/util.test.d.ts.map +1 -0
  240. package/dist/types/src/paths.d.ts +3 -0
  241. package/dist/types/src/paths.d.ts.map +1 -0
  242. package/dist/types/src/plugin.d.ts +4 -0
  243. package/dist/types/src/plugin.d.ts.map +1 -0
  244. package/dist/types/src/plugin.workerd.d.ts +3 -0
  245. package/dist/types/src/plugin.workerd.d.ts.map +1 -0
  246. package/dist/types/src/skills/index.d.ts +2 -0
  247. package/dist/types/src/skills/index.d.ts.map +1 -0
  248. package/dist/types/src/skills/magazine-skill.d.ts +4 -0
  249. package/dist/types/src/skills/magazine-skill.d.ts.map +1 -0
  250. package/dist/types/src/stories/ArticleExtractor.stories.d.ts +267 -0
  251. package/dist/types/src/stories/ArticleExtractor.stories.d.ts.map +1 -0
  252. package/dist/types/src/stories/MagazineCurate.stories.d.ts +32 -0
  253. package/dist/types/src/stories/MagazineCurate.stories.d.ts.map +1 -0
  254. package/dist/types/src/stories/theregister-fixture.test.d.ts +2 -0
  255. package/dist/types/src/stories/theregister-fixture.test.d.ts.map +1 -0
  256. package/dist/types/src/templates/magazine-curation.d.ts +7 -0
  257. package/dist/types/src/templates/magazine-curation.d.ts.map +1 -0
  258. package/dist/types/src/testing/builder.d.ts +28 -0
  259. package/dist/types/src/testing/builder.d.ts.map +1 -0
  260. package/dist/types/src/testing/index.d.ts +2 -0
  261. package/dist/types/src/testing/index.d.ts.map +1 -0
  262. package/dist/types/src/translations.d.ts +247 -0
  263. package/dist/types/src/translations.d.ts.map +1 -0
  264. package/dist/types/src/types/CreateSubscription.d.ts +29 -0
  265. package/dist/types/src/types/CreateSubscription.d.ts.map +1 -0
  266. package/dist/types/src/types/FeedOperation.d.ts +52 -0
  267. package/dist/types/src/types/FeedOperation.d.ts.map +1 -0
  268. package/dist/types/src/types/Magazine.d.ts +87 -0
  269. package/dist/types/src/types/Magazine.d.ts.map +1 -0
  270. package/dist/types/src/types/Magazine.test.d.ts +2 -0
  271. package/dist/types/src/types/Magazine.test.d.ts.map +1 -0
  272. package/dist/types/src/types/Subscription.d.ts +144 -0
  273. package/dist/types/src/types/Subscription.d.ts.map +1 -0
  274. package/dist/types/src/types/Subscription.test.d.ts +2 -0
  275. package/dist/types/src/types/Subscription.test.d.ts.map +1 -0
  276. package/dist/types/src/types/index.d.ts +5 -0
  277. package/dist/types/src/types/index.d.ts.map +1 -0
  278. package/dist/types/src/util/date.d.ts +8 -0
  279. package/dist/types/src/util/date.d.ts.map +1 -0
  280. package/dist/types/src/util/index.d.ts +4 -0
  281. package/dist/types/src/util/index.d.ts.map +1 -0
  282. package/dist/types/src/util/post-content.d.ts +14 -0
  283. package/dist/types/src/util/post-content.d.ts.map +1 -0
  284. package/dist/types/src/util/text.d.ts +18 -0
  285. package/dist/types/src/util/text.d.ts.map +1 -0
  286. package/dist/types/tsconfig.tsbuildinfo +1 -0
  287. package/dx.config.ts +48 -0
  288. package/package.json +164 -0
  289. package/src/MagazinePlugin.test.ts +36 -0
  290. package/src/MagazinePlugin.tsx +61 -0
  291. package/src/MagazinePlugin.workerd.ts +31 -0
  292. package/src/atoms/atoms.test.ts +323 -0
  293. package/src/atoms/index.ts +10 -0
  294. package/src/atoms/magazine-posts.ts +70 -0
  295. package/src/atoms/post-content.ts +34 -0
  296. package/src/atoms/post-curation.ts +36 -0
  297. package/src/atoms/post-display.ts +59 -0
  298. package/src/atoms/post-read.ts +40 -0
  299. package/src/atoms/post-tags.ts +66 -0
  300. package/src/capabilities/app-graph-builder.ts +125 -0
  301. package/src/capabilities/create-object.ts +127 -0
  302. package/src/capabilities/index.ts +17 -0
  303. package/src/capabilities/navigation-resolver.ts +21 -0
  304. package/src/capabilities/operation-handler.ts +16 -0
  305. package/src/capabilities/react-surface.tsx +53 -0
  306. package/src/capabilities/routine-templates.ts +16 -0
  307. package/src/capabilities/skill-definition.ts +14 -0
  308. package/src/components/PostContent/PostContent.test.ts +81 -0
  309. package/src/components/PostContent/PostContent.tsx +111 -0
  310. package/src/components/PostContent/index.ts +5 -0
  311. package/src/components/PostStack/PostStack.stories.tsx +39 -0
  312. package/src/components/PostStack/PostStack.tsx +151 -0
  313. package/src/components/PostStack/index.ts +5 -0
  314. package/src/components/SubscriptionStack/SubscriptionStack.stories.tsx +52 -0
  315. package/src/components/SubscriptionStack/SubscriptionStack.tsx +161 -0
  316. package/src/components/SubscriptionStack/index.ts +5 -0
  317. package/src/components/index.ts +7 -0
  318. package/src/containers/FeedArticle/FeedArticle.stories.tsx +102 -0
  319. package/src/containers/FeedArticle/FeedArticle.tsx +68 -0
  320. package/src/containers/FeedArticle/FeedToolbar.tsx +47 -0
  321. package/src/containers/FeedArticle/index.ts +5 -0
  322. package/src/containers/FeedProperties/FeedProperties.tsx +107 -0
  323. package/src/containers/FeedProperties/index.ts +5 -0
  324. package/src/containers/MagazineArticle/MagazineArticle.stories.tsx +244 -0
  325. package/src/containers/MagazineArticle/MagazineArticle.tsx +146 -0
  326. package/src/containers/MagazineArticle/MagazineTile.tsx +88 -0
  327. package/src/containers/MagazineArticle/index.ts +5 -0
  328. package/src/containers/MagazineArticle/useToolbar.tsx +145 -0
  329. package/src/containers/PostArticle/PostArticle.stories.tsx +117 -0
  330. package/src/containers/PostArticle/PostArticle.tsx +140 -0
  331. package/src/containers/PostArticle/PostToolbar.tsx +120 -0
  332. package/src/containers/PostArticle/index.ts +5 -0
  333. package/src/containers/PostCard/PostCard.tsx +70 -0
  334. package/src/containers/PostCard/index.ts +5 -0
  335. package/src/containers/SubscriptionsArticle/SubscriptionsArticle.stories.tsx +80 -0
  336. package/src/containers/SubscriptionsArticle/SubscriptionsArticle.tsx +99 -0
  337. package/src/containers/SubscriptionsArticle/index.ts +5 -0
  338. package/src/containers/index.ts +11 -0
  339. package/src/index.ts +6 -0
  340. package/src/meta.ts +9 -0
  341. package/src/operations/clear-magazine.ts +83 -0
  342. package/src/operations/curate-magazine.skill.conversations.json +1 -0
  343. package/src/operations/curate-magazine.skill.test.ts +167 -0
  344. package/src/operations/curate-magazine.test.ts +91 -0
  345. package/src/operations/curate-magazine.ts +178 -0
  346. package/src/operations/extraction/article.test.ts +154 -0
  347. package/src/operations/extraction/article.ts +270 -0
  348. package/src/operations/extraction/index.ts +5 -0
  349. package/src/operations/fetch-article-content.ts +27 -0
  350. package/src/operations/index.ts +13 -0
  351. package/src/operations/load-post-content.ts +76 -0
  352. package/src/operations/sources/article.ts +122 -0
  353. package/src/operations/sources/cors.ts +19 -0
  354. package/src/operations/sources/feed-fetcher.test.ts +200 -0
  355. package/src/operations/sources/feed-fetcher.ts +26 -0
  356. package/src/operations/sources/http.ts +42 -0
  357. package/src/operations/sources/index.ts +9 -0
  358. package/src/operations/sources/rss.test.ts +201 -0
  359. package/src/operations/sources/rss.ts +138 -0
  360. package/src/operations/sources/standard-site.ts +381 -0
  361. package/src/operations/sources/testing/feed.xml +477 -0
  362. package/src/operations/sync-feed.test.ts +146 -0
  363. package/src/operations/sync-feed.ts +140 -0
  364. package/src/operations/util.test.ts +67 -0
  365. package/src/operations/util.ts +65 -0
  366. package/src/paths.ts +14 -0
  367. package/src/plugin.ts +11 -0
  368. package/src/plugin.workerd.ts +6 -0
  369. package/src/skills/index.ts +5 -0
  370. package/src/skills/magazine-skill.ts +45 -0
  371. package/src/stories/ArticleExtractor.stories.tsx +204 -0
  372. package/src/stories/MagazineCurate.stories.tsx +217 -0
  373. package/src/stories/fixtures/theregister-ai.xml +45 -0
  374. package/src/stories/theregister-fixture.test.ts +35 -0
  375. package/src/templates/magazine-curation.ts +47 -0
  376. package/src/testing/builder.ts +77 -0
  377. package/src/testing/index.ts +5 -0
  378. package/src/translations.ts +81 -0
  379. package/src/types/CreateSubscription.ts +61 -0
  380. package/src/types/FeedOperation.ts +134 -0
  381. package/src/types/Magazine.test.ts +69 -0
  382. package/src/types/Magazine.ts +214 -0
  383. package/src/types/Subscription.test.ts +171 -0
  384. package/src/types/Subscription.ts +366 -0
  385. package/src/types/index.ts +8 -0
  386. package/src/util/date.ts +27 -0
  387. package/src/util/index.ts +7 -0
  388. package/src/util/post-content.ts +19 -0
  389. package/src/util/text.ts +98 -0
  390. package/src/vite-env.d.ts +10 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/skills/magazine-skill.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport { Skill, Template } from '@dxos/compute';\nimport { trim } from '@dxos/util';\n\nimport { FeedOperation } from '#types';\nimport { Magazine } from '#types';\n\nconst operations = [FeedOperation.FetchArticleContent];\n\nconst make = () =>\n Skill.make({\n key: Magazine.SKILL_KEY,\n name: 'Magazine Curator',\n tools: Skill.toolDefinitions({ operations }),\n instructions: Template.make({\n // HOW only: input shape, tool usage, and the completeJob output contract. The editorial\n // methodology (what to select, dedup, snippet/image guidance) and the magazine's topic live on\n // the Routine's instructions (see Magazine.DEFAULT_INSTRUCTIONS), not here.\n source: trim`\n The candidate Posts are provided in the <input> as a JSON array under \"candidates\"; each\n candidate has an \"id\" plus title, description, author, feedName, published, and link. The\n editorial brief (the Topic and selection guidance) is provided in your instructions.\n\n When a candidate's title and description are not enough to judge relevance, you MAY call\n fetchArticleContent with the candidate's id to read the full article text (and find an image)\n before deciding.\n\n When you are done, call completeJob with the structured output:\n { \"posts\": [{ \"id\": \"<candidate id>\", \"snippet\": \"...\", \"imageUrl\": \"...\" }, ...] }\n listing the selected candidates in the order you want them shown. Only use ids that appear\n in the input — never invent ids. Omit \"imageUrl\" when no image is available. Do not attempt to\n add Posts yourself; the Magazine is updated mechanically from your output.\n `,\n }),\n });\n\nconst skill: Skill.Definition = {\n key: Magazine.SKILL_KEY,\n make,\n};\n\nexport default skill;\n"],
5
+ "mappings": ";;;AAIA,SAASA,OAAOC,gBAAgB;AAChC,SAASC,YAAY;AAErB,SAASC,qBAAqB;AAC9B,SAASC,gBAAgB;AAEzB,IAAMC,aAAa;EAACF,cAAcG;;AAElC,IAAMC,OAAO,MACXP,MAAMO,KAAK;EACTC,KAAKJ,SAASK;EACdC,MAAM;EACNC,OAAOX,MAAMY,gBAAgB;IAAEP;EAAW,CAAA;EAC1CQ,cAAcZ,SAASM,KAAK;;;;IAI1BO,QAAQZ;;;;;;;;;;;;;;;EAeV,CAAA;AACF,CAAA;AAEF,IAAMa,QAA0B;EAC9BP,KAAKJ,SAASK;EACdF;AACF;AAEA,IAAA,yBAAeQ;",
6
+ "names": ["Skill", "Template", "trim", "FeedOperation", "Magazine", "operations", "FetchArticleContent", "make", "key", "SKILL_KEY", "name", "tools", "toolDefinitions", "instructions", "source", "skill"]
7
+ }
@@ -0,0 +1,99 @@
1
+ import {
2
+ browserCorsProxy,
3
+ fetchRss,
4
+ fetchStandardSite
5
+ } from "./chunk-AFPBWBTK.mjs";
6
+ import {
7
+ FeedOperation_exports,
8
+ Subscription_exports
9
+ } from "./chunk-OYCDRSWB.mjs";
10
+ import "./chunk-APQRTYT3.mjs";
11
+ import "./chunk-J5LGTIGS.mjs";
12
+
13
+ // src/operations/sync-feed.ts
14
+ import * as Effect from "effect/Effect";
15
+ import { Operation } from "@dxos/compute";
16
+ import { Database, Feed, Filter, Obj, Ref } from "@dxos/echo";
17
+ import { invariant } from "@dxos/invariant";
18
+ var __dxlog_file = "/Users/jdw/Code/dxos/packages/plugins/plugin-magazine/src/operations/sync-feed.ts";
19
+ var postKey = (post) => post.guid ?? post.link;
20
+ var getFetcher = (type) => {
21
+ switch (type) {
22
+ case "standard-site":
23
+ return fetchStandardSite;
24
+ case "rss":
25
+ default:
26
+ return fetchRss;
27
+ }
28
+ };
29
+ var handler = FeedOperation_exports.SyncFeed.pipe(Operation.withHandler(Effect.fnUntraced(function* ({ feed }) {
30
+ const subscriptionFeed = yield* Database.load(feed);
31
+ const url = subscriptionFeed.url;
32
+ invariant(url, "Feed URL is required.", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 23, S: this, A: ["url", "'Feed URL is required.'"] });
33
+ const echoFeed = yield* Database.load(subscriptionFeed.feed);
34
+ invariant(echoFeed, "Backing ECHO feed not found.", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 25, S: this, A: ["echoFeed", "'Backing ECHO feed not found.'"] });
35
+ invariant(Feed.getQueueUri(echoFeed), "Feed not stored in a space.", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 26, S: this, A: ["Feed.getQueueUri(echoFeed)", "'Feed not stored in a space.'"] });
36
+ const fetcher = getFetcher(subscriptionFeed.type);
37
+ const { feed: feedMeta, posts } = yield* fetcher(url, {
38
+ corsProxy: browserCorsProxy()
39
+ });
40
+ yield* Feed.sync(echoFeed, {
41
+ shouldPush: false
42
+ });
43
+ const existing = yield* Feed.query(echoFeed, Filter.type(Subscription_exports.Post)).run;
44
+ const seenKeys = /* @__PURE__ */ new Set();
45
+ for (const post of existing) {
46
+ const key = postKey(post);
47
+ if (key) {
48
+ seenKeys.add(key);
49
+ }
50
+ }
51
+ const newPosts = [];
52
+ for (const post of posts) {
53
+ const key = postKey(post);
54
+ if (key && seenKeys.has(key)) {
55
+ continue;
56
+ }
57
+ if (key) {
58
+ seenKeys.add(key);
59
+ }
60
+ newPosts.push(post);
61
+ }
62
+ if (newPosts.length > 0) {
63
+ const feedRef = Ref.make(subscriptionFeed);
64
+ const postObjects = newPosts.map((post) => Obj.make(Subscription_exports.Post, {
65
+ source: feedRef,
66
+ title: post.title,
67
+ link: post.link,
68
+ description: post.description,
69
+ // Persist the body so Standard.site articles render offline (see `load-post-content`);
70
+ // RSS `content:encoded` rides along but its fetch path is unchanged.
71
+ content: post.content,
72
+ author: post.author,
73
+ published: post.published,
74
+ guid: post.guid
75
+ }));
76
+ yield* Feed.append(echoFeed, postObjects);
77
+ const newestGuid = posts[0]?.guid;
78
+ if (newestGuid) {
79
+ Obj.update(subscriptionFeed, (subscriptionFeed2) => {
80
+ subscriptionFeed2.cursor = newestGuid;
81
+ });
82
+ }
83
+ if (feedMeta.name && !subscriptionFeed.name) {
84
+ Obj.update(subscriptionFeed, (subscriptionFeed2) => {
85
+ subscriptionFeed2.name = feedMeta.name;
86
+ });
87
+ }
88
+ if (feedMeta.description && !subscriptionFeed.description) {
89
+ Obj.update(subscriptionFeed, (subscriptionFeed2) => {
90
+ subscriptionFeed2.description = feedMeta.description;
91
+ });
92
+ }
93
+ }
94
+ })));
95
+ var sync_feed_default = handler;
96
+ export {
97
+ sync_feed_default as default
98
+ };
99
+ //# sourceMappingURL=sync-feed-UZX2XHSQ.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/operations/sync-feed.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Operation } from '@dxos/compute';\nimport { Database, Feed, Filter, Obj, Ref } from '@dxos/echo';\nimport { invariant } from '@dxos/invariant';\n\nimport { FeedOperation, Subscription } from '../types';\nimport { type FeedFetcher, browserCorsProxy, fetchRss, fetchStandardSite } from './sources';\n\n/** Stable dedup key for a {@link Subscription.Post}. Both fields are optional, but every current fetcher populates `guid` (RSS falls back to `link`, Standard.site uses the record AT-URI). */\nconst postKey = (post: { guid?: string; link?: string }): string | undefined => post.guid ?? post.link;\n\n/** Resolves the appropriate fetcher for the given feed type. */\nconst getFetcher = (type: Subscription.FeedType | undefined): FeedFetcher => {\n switch (type) {\n case 'standard-site':\n return fetchStandardSite;\n case 'rss':\n default:\n return fetchRss;\n }\n};\n\nconst handler: Operation.WithHandler<typeof FeedOperation.SyncFeed> = FeedOperation.SyncFeed.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* ({ feed }) {\n const subscriptionFeed = yield* Database.load(feed);\n const url = subscriptionFeed.url;\n invariant(url, 'Feed URL is required.');\n const echoFeed = yield* Database.load(subscriptionFeed.feed);\n invariant(echoFeed, 'Backing ECHO feed not found.');\n invariant(Feed.getQueueUri(echoFeed), 'Feed not stored in a space.');\n\n const fetcher = getFetcher(subscriptionFeed.type);\n const { feed: feedMeta, posts } = yield* fetcher(url, { corsProxy: browserCorsProxy() });\n\n // Dedup against existing posts already in the backing queue. The\n // `cursor` field on the subscription was previously used as a single-guid\n // filter, but RSS feeds re-serve the same items across polls — filtering\n // out only the cursor's own guid let every other previously-synced post\n // re-pass the filter and re-append on each sync. Key-based dedup against\n // the queue is the source of truth and tolerant of out-of-order or\n // rotated-off-the-window upstream responses.\n //\n // The dedup key is `guid ?? link`: `Post.guid` is optional in the schema,\n // and while every current fetcher populates it (RSS falls back to `link`,\n // Standard.site uses the record AT-URI), a future fetcher or malformed item\n // could omit it. Falling back to `link` keeps such items dedup-able. Items\n // with neither field cannot be deduplicated and will sync as new every\n // time — that's an upstream data quality issue with no clean recovery.\n //\n // Pull the backing queue before reading existing posts: this handler runs in a\n // freshly-spawned process whose local queue replica may not have the blocks yet. Without\n // this, the query returns an empty set, `seenKeys` is empty, and every fetched item\n // re-appends — duplicating the whole feed on a cold sync.\n yield* Feed.sync(echoFeed, { shouldPush: false });\n const existing = yield* Feed.query(echoFeed, Filter.type(Subscription.Post)).run;\n const seenKeys = new Set<string>();\n for (const post of existing) {\n const key = postKey(post);\n if (key) {\n seenKeys.add(key);\n }\n }\n const newPosts: typeof posts = [];\n for (const post of posts) {\n const key = postKey(post);\n // Within-batch dedup: if the upstream serves the same item twice in one\n // response, only the first occurrence is appended.\n if (key && seenKeys.has(key)) {\n continue;\n }\n if (key) {\n seenKeys.add(key);\n }\n newPosts.push(post);\n }\n\n // Append new posts to the ECHO feed.\n // NOTE: The `Subscription.Subscription.keep` bound is currently NOT enforced\n // here via `Feed.remove()`. Doing so wipes the underlying queue's\n // `_objectCache` for the deleted posts, but those same Post objects\n // persist in `space.db` (they were added there when first curated\n // into a Magazine via `createRef` → `database.add`). On the next\n // sync/curate, `Feed.query(...).run` returns fresh proxies for the\n // kept items, and any magazine refs to *deleted* posts now\n // reference proxies whose `_internals.database` link is unset —\n // `createRef` then tries to re-add them, hitting the\n // `!_objects.has(core.id)` invariant in `EntityManager.addCore`.\n // Until feed/db lifecycle is reworked we leave the feed unbounded;\n // the `Magazine.keep` bound (enforced in\n // `MagazineArticle.handleCurate`) prevents the visible list from\n // growing unboundedly.\n if (newPosts.length > 0) {\n const feedRef = Ref.make(subscriptionFeed);\n const postObjects = newPosts.map((post) =>\n Obj.make(Subscription.Post, {\n source: feedRef,\n title: post.title,\n link: post.link,\n description: post.description,\n // Persist the body so Standard.site articles render offline (see `load-post-content`);\n // RSS `content:encoded` rides along but its fetch path is unchanged.\n content: post.content,\n author: post.author,\n published: post.published,\n guid: post.guid,\n }),\n );\n yield* Feed.append(echoFeed, postObjects);\n\n // Advance cursor to the newest post.\n const newestGuid = posts[0]?.guid;\n if (newestGuid) {\n Obj.update(subscriptionFeed, (subscriptionFeed) => {\n subscriptionFeed.cursor = newestGuid;\n });\n }\n\n // Update feed metadata from channel if not already set.\n if (feedMeta.name && !subscriptionFeed.name) {\n Obj.update(subscriptionFeed, (subscriptionFeed) => {\n subscriptionFeed.name = feedMeta.name;\n });\n }\n if (feedMeta.description && !subscriptionFeed.description) {\n Obj.update(subscriptionFeed, (subscriptionFeed) => {\n subscriptionFeed.description = feedMeta.description;\n });\n }\n }\n }),\n ),\n);\n\nexport default handler;\n"],
5
+ "mappings": ";;;;;;;;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,iBAAiB;AAC1B,SAASC,UAAUC,MAAMC,QAAQC,KAAKC,WAAW;AACjD,SAASC,iBAAiB;AAK1B,IAAA,eAAA;AAKUC,IAAAA,UAAAA,CAAAA,SAAAA,KAAAA,QAAAA,KAAAA;AACD,IAAA,aAAA,CAAA,SAAA;gBACH;IACF,KAAK;AACL,aAAA;SACE;IACJ;AACF,aAAA;EAEA;;IAIM,UAAYC,sBAAAA,SAAoB,KAAA,UAAA,YAAA,kBAAA,WAAA,EAAA,KAAA,GAAA;AAChCC,QAAAA,mBAAe,OAAA,SAAA,KAAA,IAAA;AACf,QAAMC,MAAAA,iBAAkBC;AACxBF,YAAUC,KAAAA,yBAAU,EAAA,YAAA,YAAA,GAAA,cAAA,GAAA,IAAA,GAAA,MAAA,GAAA,CAAA,OAAA,yBAAA,EAAA,CAAA;AACpBD,QAAAA,WAAeG,OAAAA,SAAYF,KAAW,iBAAA,IAAA;AAEtC,YAAMG,UAAUC,gCAAgC,EAAA,YAAA,YAAA,GAAA,cAAA,GAAA,IAAA,GAAA,MAAA,GAAA,CAAA,YAAA,gCAAA,EAAA,CAAA;AAChD,YAAQC,KAAMC,YAAUC,QAAU,GAAA,+BAAoB,EAAA,YAAA,YAAA,GAAA,cAAA,GAAA,IAAA,GAAA,MAAA,GAAA,CAAA,8BAAA,+BAAA,EAAA,CAAA;QAAEC,UAAWC,WAAAA,iBAAAA,IAAAA;AAAmB,QAAA,EAAA,MAAA,UAAA,MAAA,IAAA,OAAA,QAAA,KAAA;IAEtF,WAAA,iBAAA;EACA,CAAA;AAkB+C,SAAA,KAAA,KAAA,UAAA;IAC/C,YAAMC;EACN,CAAA;AACA,QAAK,WAAMC,OAAQD,KAAU,MAAA,UAAA,OAAA,KAAA,qBAAA,IAAA,CAAA,EAAA;QAC3B,WAAYE,oBAAAA,IAAQD;aAChBE,QAAK,UAAA;UACPC,MAAAA,QAAaD,IAAAA;AACf,QAAA,KAAA;AACF,eAAA,IAAA,GAAA;IACA;EACA;QACE,WAAYD,CAAAA;aACZ,QAAA,OAAA;AACA,UAAA,MAAA,QAAA,IAAA;AAGA,QAAA,OAAA,SAAA,IAAA,GAAA,GAAA;AACIC;;AAEJ,QAAA,KAAA;AACAE,eAAa,IAACJ,GAAAA;IAChB;AAEA,aAAA,KAAA,IAAA;EACA;MAgBE,SAAMK,SAAAA,GAAcD;oBAERE,IAAAA,KAAAA,gBAAAA;wBACIC,SAAK,IAAA,CAAA,SAAA,IAAA,KAAA,qBAAA,MAAA;MACjBC,QAAMR;MACNS,OAAAA,KAAAA;MACA,MAAA,KAAA;MACA,aAAA,KAAA;;;MAGAC,SAAAA,KAAWV;MACXW,QAAMX,KAAKW;MACb,WAAA,KAAA;MAEKC,MAAKC,KAAOxB;IAEnB,CAAA,CAAA;AACA,WAAMyB,KAAAA,OAAalB,UAAUe,WAAAA;UAE3BI,aAAW5B,MAAAA,CAAAA,GAAAA;oBACTA;AACF,UAAA,OAAA,kBAAA,CAAAA,sBAAA;AACF,QAAAA,kBAAA,SAAA;MAEA,CAAA;IACA;iBAEIA,QAAAA,CAAAA,iBAAwBQ,MAAa;AACvC,UAAA,OAAA,kBAAA,CAAAR,sBAAA;AACF,QAAAA,kBAAA,OAAA,SAAA;MACIQ,CAAAA;;iBAEAR,eAAiBsB,CAAAA,iBAAcd,aAAoB;AACrD,UAAA,OAAA,kBAAA,CAAAR,sBAAA;AACF,QAAAA,kBAAA,cAAA,SAAA;MACF,CAAA;IACF;EAIJ;;;",
6
+ "names": ["Effect", "Operation", "Database", "Feed", "Filter", "Obj", "Ref", "invariant", "type", "subscriptionFeed", "invariant", "echoFeed", "Database", "getQueueUri", "fetcher", "getFetcher", "feed", "feedMeta", "posts", "corsProxy", "browserCorsProxy", "existing", "post", "postKey", "key", "seenKeys", "newPosts", "postObjects", "feedRef", "title", "link", "description", "published", "guid", "Feed", "append", "newestGuid", "Obj"]
7
+ }
@@ -0,0 +1,81 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/translations.ts
4
+ import { Type } from "@dxos/echo";
5
+ import { translations as formTranslations } from "@dxos/react-ui-form/translations";
6
+ import { meta } from "#meta";
7
+ import { Magazine, Subscription } from "#types";
8
+ var translations = [
9
+ ...formTranslations,
10
+ {
11
+ "en-US": {
12
+ [Type.getTypename(Subscription.Subscription)]: {
13
+ "typename.label": "Feed",
14
+ "typename.label_zero": "Feeds",
15
+ "typename.label_one": "Feed",
16
+ "typename.label_other": "Feeds",
17
+ "object-name.placeholder": "New feed",
18
+ "add-object.label": "Add feed",
19
+ "rename-object.label": "Rename feed",
20
+ "delete-object.label": "Delete feed",
21
+ "object-deleted.label": "Feed deleted"
22
+ },
23
+ [Type.getTypename(Subscription.Post)]: {
24
+ "typename.label": "Post",
25
+ "typename.label_zero": "Posts",
26
+ "typename.label_one": "Post",
27
+ "typename.label_other": "Posts",
28
+ "post-title.placeholder": "Untitled"
29
+ },
30
+ [Type.getTypename(Magazine.Magazine)]: {
31
+ "typename.label": "Magazine",
32
+ "typename.label_zero": "Magazines",
33
+ "typename.label_one": "Magazine",
34
+ "typename.label_other": "Magazines",
35
+ "object-name.placeholder": "New magazine",
36
+ "add-object.label": "Add magazine",
37
+ "rename-object.label": "Rename magazine",
38
+ "delete-object.label": "Delete magazine",
39
+ "object-deleted.label": "Magazine deleted"
40
+ },
41
+ [meta.profile.key]: {
42
+ "plugin.name": "Feed",
43
+ "empty-feed.message": "No posts yet",
44
+ "feed-companion.label": "Feed",
45
+ "sync-feed.label": "Sync feed",
46
+ "sync-feed-error.title": "Failed to sync feed",
47
+ "feed-sync.label": "Feed Sync",
48
+ "view-trigger.label": "View trigger",
49
+ "add-feed.label": "Add feed",
50
+ "curate.label": "Curate",
51
+ "clear-magazine.label": "Clear (preserves starred)",
52
+ "refreshing-magazine.label": "Refreshing magazine...",
53
+ "no-feeds.label": "Add at least one feed first",
54
+ "empty-magazine.message": "No articles yet.",
55
+ "curate-error.message": "Failed to curate magazine.",
56
+ "clear-error.message": "Failed to clear magazine.",
57
+ "refresh-content-error.message": "Failed to refresh content.",
58
+ "post-companion.label": "Post",
59
+ "post-title.placeholder": "Untitled",
60
+ "open-original.label": "Open original",
61
+ "mark-unread.label": "Mark as unread",
62
+ "refresh-content.label": "Refresh content",
63
+ "refresh-content-pending.label": "Refreshing\u2026",
64
+ "archive-post.label": "Archive",
65
+ "unarchive-post.label": "Unarchive",
66
+ "star-post.label": "Star",
67
+ "unstar-post.label": "Unstar",
68
+ "sort-by-date.label": "Sort by date",
69
+ "sort-by-rank.label": "Sort by rank",
70
+ "view-filter.label": "Filter posts",
71
+ "show-archived.label": "Show archived",
72
+ "only-starred.label": "Show starred only",
73
+ "close.label": "Close"
74
+ }
75
+ }
76
+ }
77
+ ];
78
+ export {
79
+ translations
80
+ };
81
+ //# sourceMappingURL=translations.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/translations.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Type } from '@dxos/echo';\nimport { type Resource } from '@dxos/react-ui';\nimport { translations as formTranslations } from '@dxos/react-ui-form/translations';\n\nimport { meta } from '#meta';\nimport { Magazine, Subscription } from '#types';\n\nexport const translations = [\n ...formTranslations,\n {\n 'en-US': {\n [Type.getTypename(Subscription.Subscription)]: {\n 'typename.label': 'Feed',\n 'typename.label_zero': 'Feeds',\n 'typename.label_one': 'Feed',\n 'typename.label_other': 'Feeds',\n 'object-name.placeholder': 'New feed',\n 'add-object.label': 'Add feed',\n 'rename-object.label': 'Rename feed',\n 'delete-object.label': 'Delete feed',\n 'object-deleted.label': 'Feed deleted',\n },\n [Type.getTypename(Subscription.Post)]: {\n 'typename.label': 'Post',\n 'typename.label_zero': 'Posts',\n 'typename.label_one': 'Post',\n 'typename.label_other': 'Posts',\n 'post-title.placeholder': 'Untitled',\n },\n [Type.getTypename(Magazine.Magazine)]: {\n 'typename.label': 'Magazine',\n 'typename.label_zero': 'Magazines',\n 'typename.label_one': 'Magazine',\n 'typename.label_other': 'Magazines',\n 'object-name.placeholder': 'New magazine',\n 'add-object.label': 'Add magazine',\n 'rename-object.label': 'Rename magazine',\n 'delete-object.label': 'Delete magazine',\n 'object-deleted.label': 'Magazine deleted',\n },\n [meta.profile.key]: {\n 'plugin.name': 'Feed',\n 'empty-feed.message': 'No posts yet',\n 'feed-companion.label': 'Feed',\n 'sync-feed.label': 'Sync feed',\n 'sync-feed-error.title': 'Failed to sync feed',\n 'feed-sync.label': 'Feed Sync',\n 'view-trigger.label': 'View trigger',\n 'add-feed.label': 'Add feed',\n 'curate.label': 'Curate',\n 'clear-magazine.label': 'Clear (preserves starred)',\n 'refreshing-magazine.label': 'Refreshing magazine...',\n 'no-feeds.label': 'Add at least one feed first',\n 'empty-magazine.message': 'No articles yet.',\n 'curate-error.message': 'Failed to curate magazine.',\n 'clear-error.message': 'Failed to clear magazine.',\n 'refresh-content-error.message': 'Failed to refresh content.',\n 'post-companion.label': 'Post',\n 'post-title.placeholder': 'Untitled',\n 'open-original.label': 'Open original',\n 'mark-unread.label': 'Mark as unread',\n 'refresh-content.label': 'Refresh content',\n 'refresh-content-pending.label': 'Refreshing…',\n 'archive-post.label': 'Archive',\n 'unarchive-post.label': 'Unarchive',\n 'star-post.label': 'Star',\n 'unstar-post.label': 'Unstar',\n 'sort-by-date.label': 'Sort by date',\n 'sort-by-rank.label': 'Sort by rank',\n 'view-filter.label': 'Filter posts',\n 'show-archived.label': 'Show archived',\n 'only-starred.label': 'Show starred only',\n 'close.label': 'Close',\n },\n },\n },\n] as const satisfies Resource[];\n"],
5
+ "mappings": ";;;AAIA,SAASA,YAAY;AAErB,SAASC,gBAAgBC,wBAAwB;AAEjD,SAASC,YAAY;AACrB,SAASC,UAAUC,oBAAoB;AAEhC,IAAMJ,eAAe;KACvBC;EACH;IACE,SAAS;MACP,CAACF,KAAKM,YAAYD,aAAaA,YAAY,CAAA,GAAI;QAC7C,kBAAkB;QAClB,uBAAuB;QACvB,sBAAsB;QACtB,wBAAwB;QACxB,2BAA2B;QAC3B,oBAAoB;QACpB,uBAAuB;QACvB,uBAAuB;QACvB,wBAAwB;MAC1B;MACA,CAACL,KAAKM,YAAYD,aAAaE,IAAI,CAAA,GAAI;QACrC,kBAAkB;QAClB,uBAAuB;QACvB,sBAAsB;QACtB,wBAAwB;QACxB,0BAA0B;MAC5B;MACA,CAACP,KAAKM,YAAYF,SAASA,QAAQ,CAAA,GAAI;QACrC,kBAAkB;QAClB,uBAAuB;QACvB,sBAAsB;QACtB,wBAAwB;QACxB,2BAA2B;QAC3B,oBAAoB;QACpB,uBAAuB;QACvB,uBAAuB;QACvB,wBAAwB;MAC1B;MACA,CAACD,KAAKK,QAAQC,GAAG,GAAG;QAClB,eAAe;QACf,sBAAsB;QACtB,wBAAwB;QACxB,mBAAmB;QACnB,yBAAyB;QACzB,mBAAmB;QACnB,sBAAsB;QACtB,kBAAkB;QAClB,gBAAgB;QAChB,wBAAwB;QACxB,6BAA6B;QAC7B,kBAAkB;QAClB,0BAA0B;QAC1B,wBAAwB;QACxB,uBAAuB;QACvB,iCAAiC;QACjC,wBAAwB;QACxB,0BAA0B;QAC1B,uBAAuB;QACvB,qBAAqB;QACrB,yBAAyB;QACzB,iCAAiC;QACjC,sBAAsB;QACtB,wBAAwB;QACxB,mBAAmB;QACnB,qBAAqB;QACrB,sBAAsB;QACtB,sBAAsB;QACtB,qBAAqB;QACrB,uBAAuB;QACvB,sBAAsB;QACtB,eAAe;MACjB;IACF;EACF;;",
6
+ "names": ["Type", "translations", "formTranslations", "meta", "Magazine", "Subscription", "getTypename", "Post", "profile", "key"]
7
+ }
@@ -0,0 +1,14 @@
1
+ import {
2
+ CreateSubscription_exports,
3
+ FeedOperation_exports,
4
+ Magazine_exports,
5
+ Subscription_exports
6
+ } from "../chunk-OYCDRSWB.mjs";
7
+ import "../chunk-J5LGTIGS.mjs";
8
+ export {
9
+ CreateSubscription_exports as CreateSubscription,
10
+ FeedOperation_exports as FeedOperation,
11
+ Magazine_exports as Magazine,
12
+ Subscription_exports as Subscription
13
+ };
14
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,28 @@
1
+ declare const _default: {
2
+ readonly plugin: {
3
+ readonly key: string;
4
+ readonly name: string;
5
+ readonly description?: string | undefined;
6
+ readonly author?: string | undefined;
7
+ readonly homePage?: string | undefined;
8
+ readonly source?: string | undefined;
9
+ readonly screenshots?: readonly {
10
+ readonly light?: string | undefined;
11
+ readonly dark?: string | undefined;
12
+ }[] | undefined;
13
+ readonly tags?: readonly string[] | undefined;
14
+ readonly icon?: {
15
+ readonly key: string;
16
+ readonly hue?: string | undefined;
17
+ } | undefined;
18
+ readonly spec?: string | undefined;
19
+ readonly dependsOn?: readonly string[] | undefined;
20
+ };
21
+ readonly publish?: {
22
+ readonly buildCommand?: string | undefined;
23
+ readonly outputDirectory?: string | undefined;
24
+ readonly assetBaseUrl?: string | undefined;
25
+ } | undefined;
26
+ };
27
+ export default _default;
28
+ //# sourceMappingURL=dx.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dx.config.d.ts","sourceRoot":"","sources":["../../dx.config.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import { Plugin } from '@dxos/app-framework';
2
+ export declare const MagazinePlugin: Plugin.PluginFactory<void>;
3
+ export default MagazinePlugin;
4
+ //# sourceMappingURL=MagazinePlugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MagazinePlugin.d.ts","sourceRoot":"","sources":["../../../src/MagazinePlugin.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAmB,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAuB9D,eAAO,MAAM,cAAc,4BA+B1B,CAAC;eAEa,cAAc"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=MagazinePlugin.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MagazinePlugin.test.d.ts","sourceRoot":"","sources":["../../../src/MagazinePlugin.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ import { Plugin } from '@dxos/app-framework';
2
+ export declare const MagazinePlugin: Plugin.PluginFactory<void>;
3
+ export default MagazinePlugin;
4
+ //# sourceMappingURL=MagazinePlugin.workerd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MagazinePlugin.workerd.d.ts","sourceRoot":"","sources":["../../../src/MagazinePlugin.workerd.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAU7C,eAAO,MAAM,cAAc,4BAc1B,CAAC;eAEa,cAAc"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=atoms.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atoms.test.d.ts","sourceRoot":"","sources":["../../../../src/atoms/atoms.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ export * from './magazine-posts';
2
+ export * from './post-content';
3
+ export * from './post-curation';
4
+ export * from './post-display';
5
+ export * from './post-read';
6
+ export * from './post-tags';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/atoms/index.ts"],"names":[],"mappings":"AAIA,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { Atom } from '@effect-atom/atom-react';
2
+ import { type Magazine, type Subscription } from '../types';
3
+ /**
4
+ * Tile filter mode. Mutually exclusive — `default` shows everything except archived,
5
+ * `starred` filters to starred posts, `archived` shows only archived posts.
6
+ */
7
+ export type MagazineView = 'default' | 'starred' | 'archived';
8
+ /**
9
+ * Ordered, view-filtered Posts for a Magazine. Re-runs on membership change OR a Post crossing the
10
+ * view's filter boundary (star/archive); never on read-state changes. Keyed by a value-equal
11
+ * `Data.tuple([magazine, view])`.
12
+ */
13
+ export declare const visibleMagazinePostsAtom: (arg: readonly [Magazine.Magazine, MagazineView]) => Atom.Atom<Subscription.Post[]>;
14
+ /** Ordered, view-filtered Posts for a Magazine. */
15
+ export declare const useVisibleMagazinePosts: (magazine: Magazine.Magazine, view: MagazineView) => Subscription.Post[];
16
+ //# sourceMappingURL=magazine-posts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"magazine-posts.d.ts","sourceRoot":"","sources":["../../../../src/atoms/magazine-posts.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAgB,MAAM,yBAAyB,CAAC;AAK7D,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAI5D;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AAqC9D;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,qFAMpC,CAAC;AAEF,mDAAmD;AACnD,eAAO,MAAM,uBAAuB,aAAc,QAAQ,CAAC,QAAQ,QAAQ,YAAY,KAAG,YAAY,CAAC,IAAI,EACvC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { Atom } from '@effect-atom/atom-react';
2
+ import { Subscription } from '../types';
3
+ /** This Post's fetched body (newest {@link Subscription.PostContent} entry), or undefined. */
4
+ export declare const postContentAtom: (arg: Subscription.Post) => Atom.Atom<Subscription.PostContent | undefined>;
5
+ /** This Post's fetched body, reactively. */
6
+ export declare const usePostContentAtom: (post: Subscription.Post) => Subscription.PostContent | undefined;
7
+ //# sourceMappingURL=post-content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-content.d.ts","sourceRoot":"","sources":["../../../../src/atoms/post-content.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAgB,MAAM,yBAAyB,CAAC;AAI7D,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,8FAA8F;AAC9F,eAAO,MAAM,eAAe,6EAkB3B,CAAC;AAEF,4CAA4C;AAC5C,eAAO,MAAM,kBAAkB,SAAU,YAAY,CAAC,IAAI,KAAG,YAAY,CAAC,WAAW,GAAG,SACnD,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { Atom } from '@effect-atom/atom-react';
2
+ import { Magazine, type Subscription } from '../types';
3
+ /** Per-Post magazine-scoped curation slice (agent-written snippet/hero image). */
4
+ export type CurationSlice = {
5
+ snippet: string | undefined;
6
+ imageUrl: string | undefined;
7
+ };
8
+ /**
9
+ * This Post's magazine-scoped curation slice (snippet/imageUrl), sliced off the Magazine's
10
+ * `postState`. Fires only when this Post's slice changes — sibling Posts' curation mutations are
11
+ * discarded without propagating. Keyed by a value-equal `Data.tuple([post, magazine])`.
12
+ */
13
+ export declare const postCurationAtom: (arg: readonly [Subscription.Post, Magazine.Magazine]) => Atom.Atom<CurationSlice>;
14
+ /** This Post's magazine-scoped curation slice. */
15
+ export declare const usePostCuration: (post: Subscription.Post, magazine: Magazine.Magazine) => CurationSlice;
16
+ //# sourceMappingURL=post-curation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-curation.d.ts","sourceRoot":"","sources":["../../../../src/atoms/post-curation.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAgB,MAAM,yBAAyB,CAAC;AAK7D,OAAO,EAAE,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAEvD,kFAAkF;AAClF,MAAM,MAAM,aAAa,GAAG;IAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAI1F;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,oFAU5B,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,eAAe,SAAU,YAAY,CAAC,IAAI,YAAY,QAAQ,CAAC,QAAQ,KAAG,aAC3B,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { Atom } from '@effect-atom/atom-react';
2
+ import { Obj } from '@dxos/echo';
3
+ import { type Magazine, type Subscription } from '../types';
4
+ /** Aggregate per-Post display data folded from the Post + its source Subscription's per-Post slice. */
5
+ export type MagazinePostData = {
6
+ post: Obj.Snapshot<Subscription.Post>;
7
+ feedName: string | undefined;
8
+ read: boolean;
9
+ starred: boolean;
10
+ snippet: string;
11
+ imageUrl: string | undefined;
12
+ };
13
+ /**
14
+ * Aggregate display data for one tile within a magazine. Fires only on this Post's
15
+ * read/star/feed-name/curation changes. Keyed by a value-equal `Data.tuple([post, magazine])`.
16
+ *
17
+ * Snippet and imageUrl precedence: agent-written postState > RSS-derived description fallback.
18
+ */
19
+ export declare const postDisplayAtom: (arg: readonly [Subscription.Post, Magazine.Magazine]) => Atom.Atom<MagazinePostData>;
20
+ /** Aggregate per-Post display data for a magazine tile. */
21
+ export declare const useMagazinePostData: (post: Subscription.Post, magazine: Magazine.Magazine) => MagazinePostData;
22
+ //# sourceMappingURL=post-display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-display.d.ts","sourceRoot":"","sources":["../../../../src/atoms/post-display.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAgB,MAAM,yBAAyB,CAAC;AAG7D,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEjC,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,UAAU,CAAC;AAM5D,uGAAuG;AACvG,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACtC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,uFAuB3B,CAAC;AAEF,2DAA2D;AAC3D,eAAO,MAAM,mBAAmB,SAAU,YAAY,CAAC,IAAI,YAAY,QAAQ,CAAC,QAAQ,KAAG,gBAChC,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { Atom } from '@effect-atom/atom-react';
2
+ import { Subscription } from '../types';
3
+ /** Per-Post read slice. */
4
+ export type ReadSlice = {
5
+ readAt: string | undefined;
6
+ };
7
+ /**
8
+ * This Post's `readAt`, sliced off its source Subscription's `postState`. Fires only when this
9
+ * Post's `readAt` changes — sibling Posts' mutations are discarded without propagating.
10
+ */
11
+ export declare const postReadAtom: (arg: Subscription.Post) => Atom.Atom<ReadSlice>;
12
+ /** This Post's read slice. */
13
+ export declare const useReadState: (post: Subscription.Post) => ReadSlice;
14
+ //# sourceMappingURL=post-read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-read.d.ts","sourceRoot":"","sources":["../../../../src/atoms/post-read.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAgB,MAAM,yBAAyB,CAAC;AAI7D,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,2BAA2B;AAC3B,MAAM,MAAM,SAAS,GAAG;IAAE,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAIvD;;;GAGG;AACH,eAAO,MAAM,YAAY,kDAiBxB,CAAC;AAEF,8BAA8B;AAC9B,eAAO,MAAM,YAAY,SAAU,YAAY,CAAC,IAAI,KAAG,SAA6C,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { Atom } from '@effect-atom/atom-react';
2
+ import { Subscription } from '../types';
3
+ /** Per-Post tag slice (star/archive membership). */
4
+ export type TagSlice = {
5
+ starred: boolean;
6
+ archived: boolean;
7
+ };
8
+ /**
9
+ * This Post's `{ starred, archived }`, sliced off its source Subscription's `tags`. Fires only
10
+ * when this Post's tag membership flips — sibling Posts' tag mutations are discarded without
11
+ * propagating. Re-initialises its tag subscription when tag uris change (first star ever in the space).
12
+ */
13
+ export declare const postTagsAtom: (arg: Subscription.Post) => Atom.Atom<TagSlice>;
14
+ /** This Post's tag slice (star/archive). */
15
+ export declare const useTagState: (post: Subscription.Post) => TagSlice;
16
+ //# sourceMappingURL=post-tags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post-tags.d.ts","sourceRoot":"","sources":["../../../../src/atoms/post-tags.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,IAAI,EAAgB,MAAM,yBAAyB,CAAC;AAK7D,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC,oDAAoD;AACpD,MAAM,MAAM,QAAQ,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC;AAwB/D;;;;GAIG;AACH,eAAO,MAAM,YAAY,iDAqBxB,CAAC;AAEF,4CAA4C;AAC5C,eAAO,MAAM,WAAW,SAAU,YAAY,CAAC,IAAI,KAAG,QAA4C,CAAC"}
@@ -0,0 +1,5 @@
1
+ import * as Effect from 'effect/Effect';
2
+ import { Capability } from '@dxos/app-framework';
3
+ declare const _default: (props: void) => Effect.Effect<Capability.Any, Error, Capability.Service>;
4
+ export default _default;
5
+ //# sourceMappingURL=app-graph-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-graph-builder.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/app-graph-builder.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import * as Effect from 'effect/Effect';
2
+ import { Capability } from '@dxos/app-framework';
3
+ declare const _default: (props: void) => Effect.Effect<[Capability.Any, Capability.Any], never, never>;
4
+ export default _default;
5
+ //# sourceMappingURL=create-object.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-object.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/create-object.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { Capability } from '@dxos/app-framework';
2
+ import type { OperationHandlerSet } from '@dxos/compute';
3
+ export declare const AppGraphBuilder: Capability.LazyCapability<void, Capability.ModuleReturn, Error>;
4
+ export declare const RoutineTemplates: Capability.LazyCapability<void, Capability.ModuleReturn, Error>;
5
+ export declare const SkillDefinition: Capability.LazyCapability<void, Capability.ModuleReturn, Error>;
6
+ export declare const CreateObject: Capability.LazyCapability<void, Capability.ModuleReturn, Error>;
7
+ export declare const OperationHandler: Capability.LazyCapability<OperationHandlerSet.OperationHandlerSet, Capability.ModuleReturn, Error>;
8
+ export declare const ReactSurface: Capability.LazyCapability<void, Capability.ModuleReturn, Error>;
9
+ export declare const NavigationResolver: Capability.LazyCapability<void, Capability.ModuleReturn, Error>;
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEzD,eAAO,MAAM,eAAe,iEAA0E,CAAC;AACvG,eAAO,MAAM,gBAAgB,iEAA2E,CAAC;AACzG,eAAO,MAAM,eAAe,iEAAyE,CAAC;AACtG,eAAO,MAAM,YAAY,iEAAmE,CAAC;AAC7F,eAAO,MAAM,gBAAgB,oGAG5B,CAAC;AACF,eAAO,MAAM,YAAY,iEAAmE,CAAC;AAC7F,eAAO,MAAM,kBAAkB,iEAA+E,CAAC"}
@@ -0,0 +1,5 @@
1
+ import * as Effect from 'effect/Effect';
2
+ import { Capability } from '@dxos/app-framework';
3
+ declare const _default: (props: void) => Effect.Effect<[Capability.Any], never, never>;
4
+ export default _default;
5
+ //# sourceMappingURL=navigation-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"navigation-resolver.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/navigation-resolver.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import * as Effect from 'effect/Effect';
2
+ import { Capability } from '@dxos/app-framework';
3
+ import type { OperationHandlerSet } from '@dxos/compute';
4
+ declare const _default: (props: OperationHandlerSet.OperationHandlerSet) => Effect.Effect<Capability.ModuleReturn, Error, Capability.Service>;
5
+ export default _default;
6
+ //# sourceMappingURL=operation-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operation-handler.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/operation-handler.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAgB,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,5 @@
1
+ import * as Effect from 'effect/Effect';
2
+ import { Capability } from '@dxos/app-framework';
3
+ declare const _default: (props: void) => Effect.Effect<Capability.Any, never, never>;
4
+ export default _default;
5
+ //# sourceMappingURL=react-surface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react-surface.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/react-surface.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,EAAgB,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import * as Effect from 'effect/Effect';
2
+ import { Capability } from '@dxos/app-framework';
3
+ declare const _default: (props: void) => Effect.Effect<[Capability.Any], never, never>;
4
+ export default _default;
5
+ //# sourceMappingURL=routine-templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routine-templates.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/routine-templates.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import * as Effect from 'effect/Effect';
2
+ import { Capability } from '@dxos/app-framework';
3
+ declare const skillDefinition: () => Effect.Effect<Capability.Any[], never, never>;
4
+ export default skillDefinition;
5
+ //# sourceMappingURL=skill-definition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-definition.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/skill-definition.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAKjD,QAAA,MAAM,eAAe,qDAAiG,CAAC;eAExG,eAAe"}
@@ -0,0 +1,30 @@
1
+ import React from 'react';
2
+ import { Subscription } from '#types';
3
+ export type PostContentProps = {
4
+ /** Post to render. */
5
+ post: Subscription.Post;
6
+ /** Additional metadata, such as feed or source domain, rendered between author and published date. */
7
+ metadata?: string[];
8
+ };
9
+ /**
10
+ * Strips images from a markdown string whose URL is already on the
11
+ * `excluded` list, AND drops any image that appears more than once. The
12
+ * hero `post.imageUrl` is added to `excluded` by the caller so the
13
+ * extracted article body doesn't re-render the same image immediately
14
+ * below the hero. Captures both Markdown image syntax (`![alt](url
15
+ * "title")`) and inline HTML `<img>` tags that defuddle sometimes
16
+ * leaves behind.
17
+ */
18
+ export declare const dedupeImagesInMarkdown: (markdown: string, excluded: ReadonlyArray<string | undefined>) => string;
19
+ /** Returns true if the markdown contains at least one Markdown or inline HTML image. */
20
+ export declare const contentHasImage: (markdown: string) => boolean;
21
+ /**
22
+ * Shared presentational layout for an article-style post.
23
+ * Render order: title → hero image → Markdown body (subscription contentFeed
24
+ * entry for this Post id, falling back to `post.description`) → meta line
25
+ * (author · …extra · published).
26
+ */
27
+ export declare const PostContent: React.ForwardRefExoticComponent<Omit<PostContentProps, "className"> & {
28
+ classNames?: import("@dxos/ui-types").ClassNameValue;
29
+ } & Pick<React.HTMLAttributes<Element>, "children" | "className" | "role" | "style"> & React.RefAttributes<HTMLDivElement>>;
30
+ //# sourceMappingURL=PostContent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostContent.d.ts","sourceRoot":"","sources":["../../../../../src/components/PostContent/PostContent.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAOvC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,sBAAsB;IACtB,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC;IACxB,sGAAsG;IACtG,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,aAAc,MAAM,YAAY,aAAa,CAAC,MAAM,GAAG,SAAS,CAAC,KAAG,MA0BtG,CAAC;AAEF,wFAAwF;AACxF,eAAO,MAAM,eAAe,aAAc,MAAM,KAAG,OAC4C,CAAC;AAEhG;;;;;GAKG;AACH,eAAO,MAAM,WAAW;;2HAuCvB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=PostContent.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PostContent.test.d.ts","sourceRoot":"","sources":["../../../../../src/components/PostContent/PostContent.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export * from './PostContent';
2
+ //# sourceMappingURL=index.d.ts.map