@dxos/plugin-magazine 0.9.1-staging.ee54ba693a → 0.11.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 (242) hide show
  1. package/dist/lib/MagazinePlugin.mjs +36 -0
  2. package/dist/lib/MagazinePlugin.mjs.map +1 -0
  3. package/dist/lib/MagazinePlugin.workerd.mjs +26 -0
  4. package/dist/lib/MagazinePlugin.workerd.mjs.map +1 -0
  5. package/dist/lib/atoms.mjs +175 -0
  6. package/dist/lib/atoms.mjs.map +1 -0
  7. package/dist/lib/capabilities.mjs +12 -0
  8. package/dist/lib/capabilities.mjs.map +1 -0
  9. package/dist/lib/chunk-FeedArticle.mjs +70 -0
  10. package/dist/lib/chunk-FeedArticle.mjs.map +1 -0
  11. package/dist/lib/chunk-FeedProperties.mjs +78 -0
  12. package/dist/lib/chunk-FeedProperties.mjs.map +1 -0
  13. package/dist/lib/chunk-MagazineArticle.mjs +267 -0
  14. package/dist/lib/chunk-MagazineArticle.mjs.map +1 -0
  15. package/dist/lib/chunk-PostArticle.mjs +174 -0
  16. package/dist/lib/chunk-PostArticle.mjs.map +1 -0
  17. package/dist/lib/chunk-PostCard.mjs +62 -0
  18. package/dist/lib/chunk-PostCard.mjs.map +1 -0
  19. package/dist/lib/chunk-app-graph-builder.mjs +91 -0
  20. package/dist/lib/chunk-app-graph-builder.mjs.map +1 -0
  21. package/dist/lib/chunk-clear-magazine.mjs +37 -0
  22. package/dist/lib/chunk-clear-magazine.mjs.map +1 -0
  23. package/dist/lib/chunk-create-object.mjs +59 -0
  24. package/dist/lib/chunk-create-object.mjs.map +1 -0
  25. package/dist/lib/chunk-curate-magazine.mjs +164 -0
  26. package/dist/lib/chunk-curate-magazine.mjs.map +1 -0
  27. package/dist/lib/chunk-date.mjs +25 -0
  28. package/dist/lib/chunk-date.mjs.map +1 -0
  29. package/dist/lib/chunk-fetch-article-content.mjs +26 -0
  30. package/dist/lib/chunk-fetch-article-content.mjs.map +1 -0
  31. package/dist/lib/chunk-load-post-content.mjs +57 -0
  32. package/dist/lib/chunk-load-post-content.mjs.map +1 -0
  33. package/dist/lib/{neutral/chunk-JFPR6OV4.mjs → chunk-meta.mjs} +19 -26
  34. package/dist/lib/chunk-meta.mjs.map +1 -0
  35. package/dist/lib/chunk-operation-handler.mjs +13 -0
  36. package/dist/lib/chunk-operation-handler.mjs.map +1 -0
  37. package/dist/lib/chunk-paths.mjs +8 -0
  38. package/dist/lib/chunk-paths.mjs.map +1 -0
  39. package/dist/lib/chunk-post-content.mjs +14 -0
  40. package/dist/lib/chunk-post-content.mjs.map +1 -0
  41. package/dist/lib/chunk-react-surface.mjs +60 -0
  42. package/dist/lib/chunk-react-surface.mjs.map +1 -0
  43. package/dist/lib/chunk-routine-templates.mjs +52 -0
  44. package/dist/lib/chunk-routine-templates.mjs.map +1 -0
  45. package/dist/lib/chunk-skill-definition.mjs +12 -0
  46. package/dist/lib/chunk-skill-definition.mjs.map +1 -0
  47. package/dist/lib/chunk-sources.mjs +576 -0
  48. package/dist/lib/chunk-sources.mjs.map +1 -0
  49. package/dist/lib/chunk-sync-feed.mjs +86 -0
  50. package/dist/lib/chunk-sync-feed.mjs.map +1 -0
  51. package/dist/lib/chunk-text.mjs +52 -0
  52. package/dist/lib/chunk-text.mjs.map +1 -0
  53. package/dist/lib/chunk-types.mjs +607 -0
  54. package/dist/lib/chunk-types.mjs.map +1 -0
  55. package/dist/lib/components.mjs +323 -0
  56. package/dist/lib/components.mjs.map +1 -0
  57. package/dist/lib/containers.mjs +11 -0
  58. package/dist/lib/containers.mjs.map +1 -0
  59. package/dist/lib/index.mjs +3 -0
  60. package/dist/lib/meta.mjs +2 -0
  61. package/dist/lib/operations.mjs +7 -0
  62. package/dist/lib/operations.mjs.map +1 -0
  63. package/dist/lib/plugin.mjs +9 -0
  64. package/dist/lib/plugin.mjs.map +1 -0
  65. package/dist/lib/plugin.workerd.mjs +3 -0
  66. package/dist/lib/{neutral/skills/index.mjs → skills.mjs} +15 -28
  67. package/dist/lib/skills.mjs.map +1 -0
  68. package/dist/lib/testing.mjs +71 -0
  69. package/dist/lib/testing.mjs.map +1 -0
  70. package/dist/lib/translations.mjs +74 -0
  71. package/dist/lib/translations.mjs.map +1 -0
  72. package/dist/lib/types.mjs +2 -0
  73. package/dist/types/src/MagazinePlugin.d.ts.map +1 -1
  74. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  75. package/dist/types/src/capabilities/create-object.d.ts +1 -1
  76. package/dist/types/src/capabilities/index.d.ts +0 -1
  77. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  78. package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
  79. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  80. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  81. package/dist/types/src/capabilities/routine-templates.d.ts +1 -1
  82. package/dist/types/src/components/PostContent/PostContent.d.ts +1 -13
  83. package/dist/types/src/components/PostContent/PostContent.d.ts.map +1 -1
  84. package/dist/types/src/components/PostContent/dedupe-images.d.ts +13 -0
  85. package/dist/types/src/components/PostContent/dedupe-images.d.ts.map +1 -0
  86. package/dist/types/src/components/PostContent/index.d.ts +1 -0
  87. package/dist/types/src/components/PostContent/index.d.ts.map +1 -1
  88. package/dist/types/src/components/PostStack/PostStack.d.ts +1 -1
  89. package/dist/types/src/components/PostStack/PostStack.d.ts.map +1 -1
  90. package/dist/types/src/components/SubscriptionStack/SubscriptionStack.d.ts +1 -1
  91. package/dist/types/src/components/SubscriptionStack/SubscriptionStack.d.ts.map +1 -1
  92. package/dist/types/src/containers/FeedArticle/FeedArticle.d.ts +4 -1
  93. package/dist/types/src/containers/FeedArticle/FeedArticle.d.ts.map +1 -1
  94. package/dist/types/src/containers/FeedProperties/FeedProperties.d.ts +4 -1
  95. package/dist/types/src/containers/FeedProperties/FeedProperties.d.ts.map +1 -1
  96. package/dist/types/src/containers/MagazineArticle/MagazineArticle.d.ts +4 -1
  97. package/dist/types/src/containers/MagazineArticle/MagazineArticle.d.ts.map +1 -1
  98. package/dist/types/src/containers/MagazineArticle/MagazineArticle.stories.d.ts.map +1 -1
  99. package/dist/types/src/containers/MagazineArticle/MagazineTile.d.ts +4 -1
  100. package/dist/types/src/containers/MagazineArticle/MagazineTile.d.ts.map +1 -1
  101. package/dist/types/src/containers/MagazineArticle/useToolbar.d.ts +4 -8
  102. package/dist/types/src/containers/MagazineArticle/useToolbar.d.ts.map +1 -1
  103. package/dist/types/src/containers/PostArticle/PostArticle.d.ts +4 -1
  104. package/dist/types/src/containers/PostArticle/PostArticle.d.ts.map +1 -1
  105. package/dist/types/src/containers/PostArticle/PostArticle.stories.d.ts.map +1 -1
  106. package/dist/types/src/containers/PostArticle/PostToolbar.d.ts +1 -1
  107. package/dist/types/src/containers/PostArticle/PostToolbar.d.ts.map +1 -1
  108. package/dist/types/src/containers/PostCard/PostCard.d.ts +4 -6
  109. package/dist/types/src/containers/PostCard/PostCard.d.ts.map +1 -1
  110. package/dist/types/src/containers/SubscriptionsArticle/SubscriptionsArticle.d.ts +4 -1
  111. package/dist/types/src/containers/SubscriptionsArticle/SubscriptionsArticle.d.ts.map +1 -1
  112. package/dist/types/src/containers/SubscriptionsArticle/SubscriptionsArticle.stories.d.ts.map +1 -1
  113. package/dist/types/src/stories/ArticleExtractor.stories.d.ts +1 -0
  114. package/dist/types/src/stories/ArticleExtractor.stories.d.ts.map +1 -1
  115. package/dist/types/src/stories/MagazineCurate.stories.d.ts.map +1 -1
  116. package/dist/types/src/templates/magazine-curation.d.ts.map +1 -1
  117. package/dist/types/src/translations.d.ts +1 -0
  118. package/dist/types/src/translations.d.ts.map +1 -1
  119. package/dist/types/tsconfig.tsbuildinfo +1 -1
  120. package/dx.config.ts +1 -1
  121. package/package.json +57 -60
  122. package/src/MagazinePlugin.tsx +0 -3
  123. package/src/atoms/atoms.test.ts +5 -4
  124. package/src/capabilities/app-graph-builder.ts +8 -6
  125. package/src/capabilities/index.ts +0 -1
  126. package/src/capabilities/{react-surface.tsx → react-surface.ts} +10 -12
  127. package/src/components/PostContent/PostContent.test.ts +1 -1
  128. package/src/components/PostContent/PostContent.tsx +1 -41
  129. package/src/components/PostContent/dedupe-images.ts +48 -0
  130. package/src/components/PostContent/index.ts +1 -0
  131. package/src/containers/FeedArticle/FeedArticle.stories.tsx +2 -2
  132. package/src/containers/FeedArticle/FeedArticle.tsx +4 -2
  133. package/src/containers/FeedProperties/FeedProperties.tsx +6 -4
  134. package/src/containers/MagazineArticle/MagazineArticle.stories.tsx +2 -1
  135. package/src/containers/MagazineArticle/MagazineArticle.tsx +8 -6
  136. package/src/containers/MagazineArticle/MagazineTile.tsx +2 -0
  137. package/src/containers/MagazineArticle/useToolbar.tsx +2 -0
  138. package/src/containers/PostArticle/PostArticle.stories.tsx +2 -1
  139. package/src/containers/PostArticle/PostArticle.tsx +6 -3
  140. package/src/containers/PostArticle/PostToolbar.tsx +1 -1
  141. package/src/containers/PostCard/PostCard.tsx +3 -1
  142. package/src/containers/SubscriptionsArticle/SubscriptionsArticle.stories.tsx +2 -1
  143. package/src/containers/SubscriptionsArticle/SubscriptionsArticle.tsx +5 -3
  144. package/src/operations/curate-magazine.test.ts +108 -4
  145. package/src/operations/sync-feed.test.ts +1 -1
  146. package/src/operations/sync-feed.ts +1 -1
  147. package/src/paths.ts +3 -3
  148. package/src/stories/ArticleExtractor.stories.tsx +1 -1
  149. package/src/stories/MagazineCurate.stories.tsx +3 -2
  150. package/src/templates/magazine-curation.ts +3 -2
  151. package/src/types/Magazine.test.ts +1 -1
  152. package/src/types/Subscription.ts +1 -1
  153. package/dist/lib/neutral/FeedArticle-PEWCFFSP.mjs +0 -90
  154. package/dist/lib/neutral/FeedArticle-PEWCFFSP.mjs.map +0 -7
  155. package/dist/lib/neutral/FeedProperties-EIO7IZOA.mjs +0 -97
  156. package/dist/lib/neutral/FeedProperties-EIO7IZOA.mjs.map +0 -7
  157. package/dist/lib/neutral/MagazineArticle-5T7RTIPS.mjs +0 -325
  158. package/dist/lib/neutral/MagazineArticle-5T7RTIPS.mjs.map +0 -7
  159. package/dist/lib/neutral/MagazinePlugin.mjs +0 -62
  160. package/dist/lib/neutral/MagazinePlugin.mjs.map +0 -7
  161. package/dist/lib/neutral/MagazinePlugin.workerd.mjs +0 -12
  162. package/dist/lib/neutral/MagazinePlugin.workerd.mjs.map +0 -7
  163. package/dist/lib/neutral/PostArticle-BGIPU7XA.mjs +0 -230
  164. package/dist/lib/neutral/PostArticle-BGIPU7XA.mjs.map +0 -7
  165. package/dist/lib/neutral/PostCard-VDGN7BBA.mjs +0 -60
  166. package/dist/lib/neutral/PostCard-VDGN7BBA.mjs.map +0 -7
  167. package/dist/lib/neutral/app-graph-builder-JDPRBVHL.mjs +0 -121
  168. package/dist/lib/neutral/app-graph-builder-JDPRBVHL.mjs.map +0 -7
  169. package/dist/lib/neutral/capabilities/index.mjs +0 -21
  170. package/dist/lib/neutral/capabilities/index.mjs.map +0 -7
  171. package/dist/lib/neutral/chunk-3K4AQKBZ.mjs +0 -12
  172. package/dist/lib/neutral/chunk-3K4AQKBZ.mjs.map +0 -7
  173. package/dist/lib/neutral/chunk-AFPBWBTK.mjs +0 -591
  174. package/dist/lib/neutral/chunk-AFPBWBTK.mjs.map +0 -7
  175. package/dist/lib/neutral/chunk-APQRTYT3.mjs +0 -57
  176. package/dist/lib/neutral/chunk-APQRTYT3.mjs.map +0 -7
  177. package/dist/lib/neutral/chunk-GU725ZF4.mjs +0 -11
  178. package/dist/lib/neutral/chunk-GU725ZF4.mjs.map +0 -7
  179. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +0 -10
  180. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +0 -7
  181. package/dist/lib/neutral/chunk-JFPR6OV4.mjs.map +0 -7
  182. package/dist/lib/neutral/chunk-KTYLUOUG.mjs +0 -36
  183. package/dist/lib/neutral/chunk-KTYLUOUG.mjs.map +0 -7
  184. package/dist/lib/neutral/chunk-LFSQMLPK.mjs +0 -8
  185. package/dist/lib/neutral/chunk-LFSQMLPK.mjs.map +0 -7
  186. package/dist/lib/neutral/chunk-MBPX7RPI.mjs +0 -14
  187. package/dist/lib/neutral/chunk-MBPX7RPI.mjs.map +0 -7
  188. package/dist/lib/neutral/chunk-OYCDRSWB.mjs +0 -624
  189. package/dist/lib/neutral/chunk-OYCDRSWB.mjs.map +0 -7
  190. package/dist/lib/neutral/chunk-SAWKLGJU.mjs +0 -28
  191. package/dist/lib/neutral/chunk-SAWKLGJU.mjs.map +0 -7
  192. package/dist/lib/neutral/chunk-XCNCK47N.mjs +0 -15
  193. package/dist/lib/neutral/chunk-XCNCK47N.mjs.map +0 -7
  194. package/dist/lib/neutral/clear-magazine-KNY4OWY4.mjs +0 -59
  195. package/dist/lib/neutral/clear-magazine-KNY4OWY4.mjs.map +0 -7
  196. package/dist/lib/neutral/components/index.mjs +0 -338
  197. package/dist/lib/neutral/components/index.mjs.map +0 -7
  198. package/dist/lib/neutral/containers/index.mjs +0 -17
  199. package/dist/lib/neutral/containers/index.mjs.map +0 -7
  200. package/dist/lib/neutral/create-object-SYZMRR4H.mjs +0 -98
  201. package/dist/lib/neutral/create-object-SYZMRR4H.mjs.map +0 -7
  202. package/dist/lib/neutral/curate-magazine-7RMKSJC5.mjs +0 -184
  203. package/dist/lib/neutral/curate-magazine-7RMKSJC5.mjs.map +0 -7
  204. package/dist/lib/neutral/fetch-article-content-CXPKXIMR.mjs +0 -31
  205. package/dist/lib/neutral/fetch-article-content-CXPKXIMR.mjs.map +0 -7
  206. package/dist/lib/neutral/index.mjs +0 -18
  207. package/dist/lib/neutral/index.mjs.map +0 -7
  208. package/dist/lib/neutral/load-post-content-H3S4TKVM.mjs +0 -65
  209. package/dist/lib/neutral/load-post-content-H3S4TKVM.mjs.map +0 -7
  210. package/dist/lib/neutral/meta.json +0 -1
  211. package/dist/lib/neutral/meta.mjs +0 -8
  212. package/dist/lib/neutral/meta.mjs.map +0 -7
  213. package/dist/lib/neutral/navigation-resolver-IN4OMCDR.mjs +0 -18
  214. package/dist/lib/neutral/navigation-resolver-IN4OMCDR.mjs.map +0 -7
  215. package/dist/lib/neutral/operation-handler-JE3743BU.mjs +0 -8
  216. package/dist/lib/neutral/operation-handler-JE3743BU.mjs.map +0 -7
  217. package/dist/lib/neutral/operations/index.mjs +0 -8
  218. package/dist/lib/neutral/operations/index.mjs.map +0 -7
  219. package/dist/lib/neutral/plugin.mjs +0 -16
  220. package/dist/lib/neutral/plugin.mjs.map +0 -7
  221. package/dist/lib/neutral/plugin.workerd.mjs +0 -16
  222. package/dist/lib/neutral/plugin.workerd.mjs.map +0 -7
  223. package/dist/lib/neutral/react-surface-TZESAMG2.mjs +0 -60
  224. package/dist/lib/neutral/react-surface-TZESAMG2.mjs.map +0 -7
  225. package/dist/lib/neutral/routine-templates-D5A2L4KL.mjs +0 -52
  226. package/dist/lib/neutral/routine-templates-D5A2L4KL.mjs.map +0 -7
  227. package/dist/lib/neutral/skill-definition-3KLMUEC5.mjs +0 -8
  228. package/dist/lib/neutral/skill-definition-3KLMUEC5.mjs.map +0 -7
  229. package/dist/lib/neutral/skills/index.mjs.map +0 -7
  230. package/dist/lib/neutral/sync-feed-SDXYF7HU.mjs +0 -99
  231. package/dist/lib/neutral/sync-feed-SDXYF7HU.mjs.map +0 -7
  232. package/dist/lib/neutral/translations.mjs +0 -81
  233. package/dist/lib/neutral/translations.mjs.map +0 -7
  234. package/dist/lib/neutral/types/index.mjs +0 -14
  235. package/dist/lib/neutral/types/index.mjs.map +0 -7
  236. package/dist/types/src/capabilities/navigation-resolver.d.ts +0 -5
  237. package/dist/types/src/capabilities/navigation-resolver.d.ts.map +0 -1
  238. package/dist/types/src/operations/curate-magazine.skill.test.d.ts +0 -2
  239. package/dist/types/src/operations/curate-magazine.skill.test.d.ts.map +0 -1
  240. package/src/capabilities/navigation-resolver.ts +0 -21
  241. package/src/operations/curate-magazine.skill.conversations.json +0 -1
  242. package/src/operations/curate-magazine.skill.test.ts +0 -167
@@ -0,0 +1,13 @@
1
+ import { b as __exportAll } from "./chunk-types.mjs";
2
+ import { Capabilities, Capability } from "@dxos/app-framework";
3
+ import * as Effect from "effect/Effect";
4
+ import { MagazineOperationHandlerSet } from "#operations";
5
+ //#region src/capabilities/operation-handler.ts
6
+ var operation_handler_exports = /* @__PURE__ */ __exportAll({ default: () => operation_handler_default });
7
+ var operation_handler_default = Capability.makeModule(Effect.fnUntraced(function* () {
8
+ return Capability.contributes(Capabilities.OperationHandler, MagazineOperationHandlerSet);
9
+ }));
10
+ //#endregion
11
+ export { operation_handler_exports as n, operation_handler_default as t };
12
+
13
+ //# sourceMappingURL=chunk-operation-handler.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-operation-handler.mjs","names":[],"sources":["../../src/capabilities/operation-handler.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport type { OperationHandlerSet } from '@dxos/compute';\n\nimport { MagazineOperationHandlerSet } from '#operations';\n\nexport default Capability.makeModule<OperationHandlerSet.OperationHandlerSet>(\n Effect.fnUntraced(function* () {\n return Capability.contributes(Capabilities.OperationHandler, MagazineOperationHandlerSet);\n }),\n);\n"],"mappings":";;;;;;AAWA,IAAA,4BAAe,WAAW,WACxB,OAAO,WAAW,aAAa;CAC7B,OAAO,WAAW,YAAY,aAAa,kBAAkB,2BAA2B;AAC1F,CAAC,CACH"}
@@ -0,0 +1,8 @@
1
+ import { GraphPath } from "@dxos/app-toolkit";
2
+ import { Magazine } from "#types";
3
+ //#region src/paths.ts
4
+ var { getSectionPath: getMagazinesPath, getObjectPath: getMagazinePath } = GraphPath.createTypeSectionPaths(Magazine.Magazine, { groupId: GraphPath.GroupSegments.content });
5
+ //#endregion
6
+ export { getMagazinesPath as t };
7
+
8
+ //# sourceMappingURL=chunk-paths.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-paths.mjs","names":[],"sources":["../../src/paths.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport { GraphPath } from '@dxos/app-toolkit';\n\nimport { Magazine } from '#types';\n\nconst { getSectionPath: getMagazinesPath, getObjectPath: getMagazinePath } = GraphPath.createTypeSectionPaths(\n Magazine.Magazine,\n { groupId: GraphPath.GroupSegments.content },\n);\n\nexport { getMagazinePath, getMagazinesPath };\n"],"mappings":";;;AAQA,IAAM,EAAE,gBAAgB,kBAAkB,eAAe,oBAAoB,UAAU,uBACrF,SAAS,UACT,EAAE,SAAS,UAAU,cAAc,QAAQ,CAC7C"}
@@ -0,0 +1,14 @@
1
+ import { i as stripHtml, n as extractImageUrls, r as makeSnippet } from "./chunk-text.mjs";
2
+ //#region src/util/post-content.ts
3
+ /**
4
+ * Pure derivations of a Post's display snippet/hero-image, preferring the refined values on a
5
+ * fetched {@link Subscription.PostContent} entry when present, else derived from `post.description`.
6
+ */
7
+ /** Plain-text snippet: the refined contentFeed value if loaded, else derived from `post.description`. */
8
+ var getSnippet = (post, content) => content?.snippet ?? makeSnippet(stripHtml(post.description ?? ""));
9
+ /** Hero image url: the refined contentFeed value if loaded, else derived from `post.description`. */
10
+ var getImageUrl = (post, content) => content?.imageUrl ?? extractImageUrls(post.description ?? "")[0];
11
+ //#endregion
12
+ export { getSnippet as n, getImageUrl as t };
13
+
14
+ //# sourceMappingURL=chunk-post-content.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-post-content.mjs","names":[],"sources":["../../src/util/post-content.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport { type Subscription } from '../types';\nimport { extractImageUrls, makeSnippet, stripHtml } from './text';\n\n/**\n * Pure derivations of a Post's display snippet/hero-image, preferring the refined values on a\n * fetched {@link Subscription.PostContent} entry when present, else derived from `post.description`.\n */\n\n/** Plain-text snippet: the refined contentFeed value if loaded, else derived from `post.description`. */\nexport const getSnippet = (post: { description?: string }, content?: Subscription.PostContent): string =>\n content?.snippet ?? makeSnippet(stripHtml(post.description ?? ''));\n\n/** Hero image url: the refined contentFeed value if loaded, else derived from `post.description`. */\nexport const getImageUrl = (post: { description?: string }, content?: Subscription.PostContent): string | undefined =>\n content?.imageUrl ?? extractImageUrls(post.description ?? '')[0];\n"],"mappings":";;;;;;;AAaA,IAAa,cAAc,MAAgC,YACzD,SAAS,WAAW,YAAY,UAAU,KAAK,eAAe,EAAE,CAAC;;AAGnE,IAAa,eAAe,MAAgC,YAC1D,SAAS,YAAY,iBAAiB,KAAK,eAAe,EAAE,CAAC,CAAC"}
@@ -0,0 +1,60 @@
1
+ import { Capabilities, Capability } from "@dxos/app-framework";
2
+ import { Position } from "@dxos/util";
3
+ import * as Effect from "effect/Effect";
4
+ import { Magazine, Subscription } from "#types";
5
+ import { Surface } from "@dxos/app-framework/ui";
6
+ import { AppSurface } from "@dxos/app-toolkit/ui";
7
+ import { FeedArticle, FeedProperties, MagazineArticle, PostArticle, PostCard } from "#containers";
8
+ //#region src/capabilities/react-surface.ts
9
+ var react_surface_default = Capability.makeModule(() => Effect.succeed(Capability.contributes(Capabilities.ReactSurface, [
10
+ Surface.create({
11
+ id: "magazineArticle",
12
+ filter: AppSurface.object(AppSurface.Article, Magazine.Magazine),
13
+ component: MagazineArticle,
14
+ props: ({ role, data: { subject, attendableId } }) => ({
15
+ role,
16
+ subject,
17
+ attendableId
18
+ })
19
+ }),
20
+ Surface.create({
21
+ id: "feedArticle",
22
+ filter: AppSurface.object(AppSurface.Article, Subscription.Subscription),
23
+ component: FeedArticle,
24
+ props: ({ role, data: { subject, attendableId } }) => ({
25
+ role,
26
+ subject,
27
+ attendableId
28
+ })
29
+ }),
30
+ Surface.create({
31
+ id: "postArticle",
32
+ filter: AppSurface.object(AppSurface.Article, Subscription.Post),
33
+ component: PostArticle,
34
+ props: ({ role, data: { subject, attendableId } }) => ({
35
+ role,
36
+ subject,
37
+ attendableId
38
+ })
39
+ }),
40
+ Surface.create({
41
+ id: "postCard",
42
+ position: Position.first,
43
+ filter: AppSurface.object(AppSurface.CardContent, Subscription.Post),
44
+ component: PostCard,
45
+ props: ({ role, data: { subject } }) => ({
46
+ role,
47
+ subject
48
+ })
49
+ }),
50
+ Surface.create({
51
+ id: "feedProperties",
52
+ filter: AppSurface.object(AppSurface.ObjectProperties, Subscription.Subscription),
53
+ component: FeedProperties,
54
+ props: ({ data: { subject } }) => ({ subject })
55
+ })
56
+ ])));
57
+ //#endregion
58
+ export { react_surface_default as default };
59
+
60
+ //# sourceMappingURL=chunk-react-surface.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-react-surface.mjs","names":[],"sources":["../../src/capabilities/react-surface.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { Surface } from '@dxos/app-framework/ui';\nimport { AppSurface } from '@dxos/app-toolkit/ui';\nimport { Position } from '@dxos/util';\n\nimport { FeedArticle, FeedProperties, MagazineArticle, PostArticle, PostCard } from '#containers';\nimport { Magazine, Subscription } from '#types';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(Capabilities.ReactSurface, [\n Surface.create({\n id: 'magazineArticle',\n filter: AppSurface.object(AppSurface.Article, Magazine.Magazine),\n component: MagazineArticle,\n props: ({ role, data: { subject, attendableId } }) => ({ role, subject, attendableId }),\n }),\n Surface.create({\n id: 'feedArticle',\n filter: AppSurface.object(AppSurface.Article, Subscription.Subscription),\n component: FeedArticle,\n props: ({ role, data: { subject, attendableId } }) => ({ role, subject, attendableId }),\n }),\n Surface.create({\n id: 'postArticle',\n filter: AppSurface.object(AppSurface.Article, Subscription.Post),\n component: PostArticle,\n props: ({ role, data: { subject, attendableId } }) => ({ role, subject, attendableId }),\n }),\n Surface.create({\n id: 'postCard',\n position: Position.first,\n filter: AppSurface.object(AppSurface.CardContent, Subscription.Post),\n component: PostCard,\n props: ({ role, data: { subject } }) => ({ role, subject }),\n }),\n Surface.create({\n id: 'feedProperties',\n filter: AppSurface.object(AppSurface.ObjectProperties, Subscription.Subscription),\n component: FeedProperties,\n props: ({ data: { subject } }) => ({ subject }),\n }),\n ]),\n ),\n);\n"],"mappings":";;;;;;;;AAcA,IAAA,wBAAe,WAAW,iBACxB,OAAO,QACL,WAAW,YAAY,aAAa,cAAc;CAChD,QAAQ,OAAO;EACb,IAAI;EACJ,QAAQ,WAAW,OAAO,WAAW,SAAS,SAAS,QAAQ;EAC/D,WAAW;EACX,QAAQ,EAAE,MAAM,MAAM,EAAE,SAAS,sBAAsB;GAAE;GAAM;GAAS;EAAa;CACvF,CAAC;CACD,QAAQ,OAAO;EACb,IAAI;EACJ,QAAQ,WAAW,OAAO,WAAW,SAAS,aAAa,YAAY;EACvE,WAAW;EACX,QAAQ,EAAE,MAAM,MAAM,EAAE,SAAS,sBAAsB;GAAE;GAAM;GAAS;EAAa;CACvF,CAAC;CACD,QAAQ,OAAO;EACb,IAAI;EACJ,QAAQ,WAAW,OAAO,WAAW,SAAS,aAAa,IAAI;EAC/D,WAAW;EACX,QAAQ,EAAE,MAAM,MAAM,EAAE,SAAS,sBAAsB;GAAE;GAAM;GAAS;EAAa;CACvF,CAAC;CACD,QAAQ,OAAO;EACb,IAAI;EACJ,UAAU,SAAS;EACnB,QAAQ,WAAW,OAAO,WAAW,aAAa,aAAa,IAAI;EACnE,WAAW;EACX,QAAQ,EAAE,MAAM,MAAM,EAAE,iBAAiB;GAAE;GAAM;EAAQ;CAC3D,CAAC;CACD,QAAQ,OAAO;EACb,IAAI;EACJ,QAAQ,WAAW,OAAO,WAAW,kBAAkB,aAAa,YAAY;EAChF,WAAW;EACX,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ;CAC/C,CAAC;AACH,CAAC,CACH,CACF"}
@@ -0,0 +1,52 @@
1
+ import { Capability } from "@dxos/app-framework";
2
+ import { Ref } from "@dxos/echo";
3
+ import * as Effect from "effect/Effect";
4
+ import { Trigger } from "@dxos/compute";
5
+ import { FeedOperation, Magazine } from "#types";
6
+ import { RoutineCapabilities, makeRoutine } from "@dxos/plugin-routine";
7
+ import { invariant } from "@dxos/invariant";
8
+ //#region src/templates/magazine-curation.ts
9
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-magazine/src/templates/magazine-curation.ts";
10
+ /** Default cron for a magazine curation routine: daily at 9 AM. The user edits the schedule from the trigger. */
11
+ var DEFAULT_CRON = "0 9 * * *";
12
+ /**
13
+ * Magazine curation template. Creates a routine that invokes {@link FeedOperation.CurateMagazine} for
14
+ * the companion's Magazine subject on a daily schedule. Only visible in Magazine object companions.
15
+ */
16
+ var magazineCuration = {
17
+ id: "org.dxos.routine.magazineCuration",
18
+ label: "Curate Magazine",
19
+ icon: "ph--sparkle--regular",
20
+ appliesTo: (subject) => subject != null && Magazine.instanceOf(subject),
21
+ scaffold: ({ name, subject }) => Effect.gen(function* () {
22
+ invariant(subject != null && Magazine.instanceOf(subject), "Magazine curation template requires a Magazine subject.", {
23
+ "~LogMeta": "~LogMeta",
24
+ F: __dxlog_file,
25
+ L: 29,
26
+ S: this,
27
+ A: ["subject != null && Magazine.instanceOf(subject)", "'Magazine curation template requires a Magazine subject.'"]
28
+ });
29
+ const magazine = subject;
30
+ return makeRoutine({
31
+ name: name ?? magazine.name ?? "Curate Magazine",
32
+ spec: {
33
+ kind: "runnable",
34
+ runnable: Ref.fromURI(FeedOperation.CurateMagazine.meta.key)
35
+ },
36
+ trigger: Trigger.make({
37
+ enabled: false,
38
+ spec: Trigger.specTimer(DEFAULT_CRON),
39
+ input: { magazine: Ref.make(magazine) }
40
+ })
41
+ });
42
+ })
43
+ };
44
+ //#endregion
45
+ //#region src/capabilities/routine-templates.ts
46
+ var routine_templates_default = Capability.makeModule(Effect.fnUntraced(function* () {
47
+ return [Capability.contributes(RoutineCapabilities.Template, magazineCuration)];
48
+ }));
49
+ //#endregion
50
+ export { routine_templates_default as default };
51
+
52
+ //# sourceMappingURL=chunk-routine-templates.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-routine-templates.mjs","names":[],"sources":["../../src/templates/magazine-curation.ts","../../src/capabilities/routine-templates.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Trigger } from '@dxos/compute';\nimport { Ref } from '@dxos/echo';\nimport { invariant } from '@dxos/invariant';\nimport { makeRoutine } from '@dxos/plugin-routine';\nimport { type RoutineCapabilities } from '@dxos/plugin-routine/types';\n\nimport { FeedOperation, Magazine } from '#types';\n\n/** Default cron for a magazine curation routine: daily at 9 AM. The user edits the schedule from the trigger. */\nconst DEFAULT_CRON = '0 9 * * *';\n\n/**\n * Magazine curation template. Creates a routine that invokes {@link FeedOperation.CurateMagazine} for\n * the companion's Magazine subject on a daily schedule. Only visible in Magazine object companions.\n */\nexport const magazineCuration: RoutineCapabilities.Template = {\n id: 'org.dxos.routine.magazineCuration',\n label: 'Curate Magazine',\n icon: 'ph--sparkle--regular',\n appliesTo: (subject) => subject != null && Magazine.instanceOf(subject),\n scaffold: ({ name, subject }) =>\n Effect.gen(function* () {\n invariant(\n subject != null && Magazine.instanceOf(subject),\n 'Magazine curation template requires a Magazine subject.',\n );\n\n const magazine = subject;\n\n // Pre-populate the trigger's input so the magazine binding is preserved through the save flow.\n return makeRoutine({\n name: name ?? magazine.name ?? 'Curate Magazine',\n // Bind the CurateMagazine operation directly as the action (an operation action, not instructions-based).\n spec: { kind: 'runnable', runnable: Ref.fromURI(FeedOperation.CurateMagazine.meta.key) },\n trigger: Trigger.make({\n enabled: false,\n spec: Trigger.specTimer(DEFAULT_CRON),\n input: { magazine: Ref.make(magazine) },\n }),\n });\n }),\n};\n","//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { RoutineCapabilities } from '@dxos/plugin-routine';\n\nimport { magazineCuration } from '../templates/magazine-curation';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n return [Capability.contributes(RoutineCapabilities.Template, magazineCuration)];\n }),\n);\n"],"mappings":";;;;;;;;;;AAeA,IAAM,eAAe;;;;;AAMrB,IAAa,mBAAiD;CAC5D,IAAI;CACJ,OAAO;CACP,MAAM;CACN,YAAY,YAAY,WAAW,QAAQ,SAAS,WAAW,OAAO;CACtE,WAAW,EAAE,MAAM,cACjB,OAAO,IAAI,aAAa;EACtB,UACE,WAAW,QAAQ,SAAS,WAAW,OAAO,GAC9C,2DACH;GAAA,YAAA;GAAA,GAAA;GAAA,GAAA;GAAA,GAAA;GAAA,GAAA,CAAA,mDAAA,2DAAA;EAAA,CAAC;EAEA,MAAM,WAAW;EAGjB,OAAO,YAAY;GACjB,MAAM,QAAQ,SAAS,QAAQ;GAE/B,MAAM;IAAE,MAAM;IAAY,UAAU,IAAI,QAAQ,cAAc,eAAe,KAAK,GAAG;GAAE;GACvF,SAAS,QAAQ,KAAK;IACpB,SAAS;IACT,MAAM,QAAQ,UAAU,YAAY;IACpC,OAAO,EAAE,UAAU,IAAI,KAAK,QAAQ,EAAE;GACxC,CAAC;EACH,CAAC;CACH,CAAC;AACL;;;ACpCA,IAAA,4BAAe,WAAW,WACxB,OAAO,WAAW,aAAa;CAC7B,OAAO,CAAC,WAAW,YAAY,oBAAoB,UAAU,gBAAgB,CAAC;AAChF,CAAC,CACH"}
@@ -0,0 +1,12 @@
1
+ import { b as __exportAll } from "./chunk-types.mjs";
2
+ import { Capability } from "@dxos/app-framework";
3
+ import * as Effect from "effect/Effect";
4
+ import { AppCapabilities } from "@dxos/app-toolkit";
5
+ import { MagazineSkill } from "#skills";
6
+ //#region src/capabilities/skill-definition.ts
7
+ var skill_definition_exports = /* @__PURE__ */ __exportAll({ default: () => skillDefinition });
8
+ var skillDefinition = () => Effect.succeed([Capability.contributes(AppCapabilities.SkillDefinition, MagazineSkill)]);
9
+ //#endregion
10
+ export { skill_definition_exports as n, skillDefinition as t };
11
+
12
+ //# sourceMappingURL=chunk-skill-definition.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-skill-definition.mjs","names":[],"sources":["../../src/capabilities/skill-definition.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\n\nimport { MagazineSkill } from '#skills';\n\nconst skillDefinition = () => Effect.succeed([Capability.contributes(AppCapabilities.SkillDefinition, MagazineSkill)]);\n\nexport default skillDefinition;\n"],"mappings":";;;;;;;AAWA,IAAM,wBAAwB,OAAO,QAAQ,CAAC,WAAW,YAAY,gBAAgB,iBAAiB,aAAa,CAAC,CAAC"}