@dxos/plugin-magazine 0.10.0 → 0.11.1

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
@@ -1,230 +0,0 @@
1
- import "./chunk-J5LGTIGS.mjs";
2
-
3
- // src/containers/PostArticle/PostArticle.tsx
4
- import { Atom, RegistryContext } from "@effect-atom/atom-react";
5
- import React2, { useCallback, useContext, useEffect, useMemo, useRef } from "react";
6
- import { useOperationInvoker } from "@dxos/app-framework/ui";
7
- import { Filter, Obj, Ref } from "@dxos/echo";
8
- import { log } from "@dxos/log";
9
- import { useObject, useQuery } from "@dxos/react-client/echo";
10
- import { Panel as Panel2 } from "@dxos/react-ui";
11
- import { getParentId, isLinkedSegment } from "@dxos/react-ui-attention";
12
- import { usePostContentAtom } from "#atoms";
13
- import { PostContent } from "#components";
14
- import { meta as meta2 } from "#meta";
15
- import { FeedOperation } from "#types";
16
- import { Subscription } from "#types";
17
-
18
- // src/containers/PostArticle/PostToolbar.tsx
19
- import React from "react";
20
- import { Panel } from "@dxos/react-ui";
21
- import { Menu, MenuBuilder, useMenuBuilder } from "@dxos/react-ui-menu";
22
- import { postReadAtom, postTagsAtom } from "#atoms";
23
- import { meta } from "#meta";
24
- var PostToolbar = ({ post, refreshingAtom, attendableId, onSetStarred, onSetArchived, onMarkUnread, onRefresh, onOpenOriginal }) => {
25
- const menuActions = useMenuBuilder((get) => {
26
- const { starred, archived } = get(postTagsAtom(post));
27
- const { readAt } = get(postReadAtom(post));
28
- const read = readAt !== void 0;
29
- const refreshing = get(refreshingAtom);
30
- const hasLink = Boolean(post.link);
31
- return MenuBuilder.make().action("star", {
32
- label: [
33
- starred ? "unstar-post.label" : "star-post.label",
34
- {
35
- ns: meta.profile.key
36
- }
37
- ],
38
- icon: starred ? "ph--star--fill" : "ph--star--regular",
39
- iconOnly: true
40
- }, () => onSetStarred(!starred)).action("archive", {
41
- label: [
42
- archived ? "unarchive-post.label" : "archive-post.label",
43
- {
44
- ns: meta.profile.key
45
- }
46
- ],
47
- icon: archived ? "ph--archive--fill" : "ph--archive--regular",
48
- iconOnly: true
49
- }, () => onSetArchived(!archived)).action("mark-unread", {
50
- label: [
51
- "mark-unread.label",
52
- {
53
- ns: meta.profile.key
54
- }
55
- ],
56
- icon: "ph--envelope--regular",
57
- iconOnly: true,
58
- hidden: !read
59
- }, onMarkUnread).separator("gap").action("refresh", {
60
- label: [
61
- refreshing ? "refresh-content-pending.label" : "refresh-content.label",
62
- {
63
- ns: meta.profile.key
64
- }
65
- ],
66
- icon: "ph--arrows-clockwise--regular",
67
- iconClassNames: refreshing ? "animate-spin" : void 0,
68
- iconOnly: true,
69
- disabled: refreshing,
70
- hidden: !hasLink
71
- }, onRefresh).action("open-original", {
72
- label: [
73
- "open-original.label",
74
- {
75
- ns: meta.profile.key
76
- }
77
- ],
78
- icon: "ph--arrow-square-out--regular",
79
- iconOnly: true,
80
- hidden: !hasLink
81
- }, onOpenOriginal).build();
82
- }, [
83
- post,
84
- refreshingAtom,
85
- onSetStarred,
86
- onSetArchived,
87
- onMarkUnread,
88
- onRefresh,
89
- onOpenOriginal
90
- ]);
91
- return /* @__PURE__ */ React.createElement(Menu.Root, {
92
- ...menuActions,
93
- attendableId
94
- }, /* @__PURE__ */ React.createElement(Panel.Toolbar, {
95
- asChild: true
96
- }, /* @__PURE__ */ React.createElement(Menu.Toolbar, null)));
97
- };
98
- PostToolbar.displayName = "PostToolbar";
99
-
100
- // src/containers/PostArticle/PostArticle.tsx
101
- var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-magazine/src/containers/PostArticle/PostArticle.tsx";
102
- var PostArticle = ({ role, subject, attendableId }) => {
103
- const toolbarAttendableId = attendableId && isLinkedSegment(attendableId) ? getParentId(attendableId) : attendableId;
104
- const { invokePromise } = useOperationInvoker();
105
- const registry = useContext(RegistryContext);
106
- const [post] = useObject(subject);
107
- const db = Obj.getDatabase(post);
108
- const subscription = post.source?.target;
109
- const { id } = post;
110
- const postContent = usePostContentAtom(subject);
111
- const requestedContentFor = useRef(void 0);
112
- useEffect(() => {
113
- if (requestedContentFor.current === id) {
114
- return;
115
- }
116
- if (!post.link || postContent) {
117
- return;
118
- }
119
- requestedContentFor.current = id;
120
- void invokePromise(FeedOperation.LoadPostContent, {
121
- post: Ref.make(subject)
122
- }).catch((err) => log.catch(err, {
123
- postLink: post.link
124
- }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 45, S: void 0 }));
125
- }, [
126
- subject,
127
- post,
128
- post.link,
129
- postContent,
130
- invokePromise,
131
- id
132
- ]);
133
- const allFeeds = useQuery(db, Filter.type(Subscription.Subscription));
134
- const feedName = useMemo(() => {
135
- const dxn = post.source?.uri;
136
- if (!dxn) {
137
- return void 0;
138
- }
139
- return allFeeds.find((feed) => Obj.getURI(feed) === dxn)?.name;
140
- }, [
141
- post.source,
142
- allFeeds
143
- ]);
144
- const handleOpenOriginal = useCallback(() => {
145
- if (post.link) {
146
- window.open(post.link, "_blank", "noopener,noreferrer");
147
- }
148
- }, [
149
- post.link
150
- ]);
151
- const handleMarkUnread = useCallback(() => {
152
- if (subscription) {
153
- Subscription.setReadAt(subscription, id, void 0);
154
- }
155
- }, [
156
- subscription,
157
- id
158
- ]);
159
- const handleSetArchived = useCallback((value) => {
160
- if (db && subscription) {
161
- void Subscription.setTag(subscription, id, db, "archived", value);
162
- }
163
- }, [
164
- db,
165
- subscription,
166
- id
167
- ]);
168
- const handleSetStarred = useCallback((value) => {
169
- if (db && subscription) {
170
- void Subscription.setTag(subscription, id, db, "starred", value);
171
- }
172
- }, [
173
- db,
174
- subscription,
175
- id
176
- ]);
177
- const refreshingAtom = useMemo(() => Atom.make(false), []);
178
- const handleRefresh = useCallback(async () => {
179
- if (!post.link || registry.get(refreshingAtom)) {
180
- return;
181
- }
182
- registry.set(refreshingAtom, true);
183
- try {
184
- await invokePromise(FeedOperation.LoadPostContent, {
185
- post: Ref.make(subject),
186
- force: true
187
- }, {
188
- notify: {
189
- error: [
190
- "refresh-content-error.message",
191
- {
192
- ns: meta2.profile.key
193
- }
194
- ]
195
- }
196
- });
197
- } finally {
198
- registry.set(refreshingAtom, false);
199
- }
200
- }, [
201
- registry,
202
- refreshingAtom,
203
- subject,
204
- post.link,
205
- invokePromise
206
- ]);
207
- return /* @__PURE__ */ React2.createElement(Panel2.Root, {
208
- role
209
- }, /* @__PURE__ */ React2.createElement(PostToolbar, {
210
- post: subject,
211
- refreshingAtom,
212
- attendableId: toolbarAttendableId,
213
- onSetStarred: handleSetStarred,
214
- onSetArchived: handleSetArchived,
215
- onMarkUnread: handleMarkUnread,
216
- onRefresh: () => void handleRefresh(),
217
- onOpenOriginal: handleOpenOriginal
218
- }), /* @__PURE__ */ React2.createElement(Panel2.Content, {
219
- asChild: true
220
- }, /* @__PURE__ */ React2.createElement(PostContent, {
221
- post: subject,
222
- metadata: feedName ? [
223
- feedName
224
- ] : void 0
225
- })));
226
- };
227
- export {
228
- PostArticle as default
229
- };
230
- //# sourceMappingURL=PostArticle-BGIPU7XA.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/containers/PostArticle/PostArticle.tsx", "../../../src/containers/PostArticle/PostToolbar.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport { Atom, RegistryContext } from '@effect-atom/atom-react';\nimport React, { useCallback, useContext, useEffect, useMemo, useRef } from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { Filter, Obj, Ref } from '@dxos/echo';\nimport { log } from '@dxos/log';\nimport { useObject, useQuery } from '@dxos/react-client/echo';\nimport { Panel } from '@dxos/react-ui';\nimport { getParentId, isLinkedSegment } from '@dxos/react-ui-attention';\n\nimport { usePostContentAtom } from '#atoms';\nimport { PostContent } from '#components';\nimport { meta } from '#meta';\nimport { FeedOperation } from '#types';\nimport { Subscription } from '#types';\n\nimport { PostToolbar } from './PostToolbar';\n\nexport type PostArticleProps = AppSurface.ObjectArticleProps<Subscription.Post>;\n\nexport const PostArticle = ({ role, subject, attendableId }: PostArticleProps) => {\n // When shown as a companion the `attendableId` is a linked segment, but attention lives on the\n // parent plank — resolve to the parent so the toolbar reads as attended (active).\n const toolbarAttendableId = attendableId && isLinkedSegment(attendableId) ? getParentId(attendableId) : attendableId;\n const { invokePromise } = useOperationInvoker();\n const registry = useContext(RegistryContext);\n const [post] = useObject(subject);\n const db = Obj.getDatabase(post);\n const subscription = post.source?.target;\n const { id } = post;\n const postContent = usePostContentAtom(subject);\n\n // Lazily fetch full article content the first time this Post is shown — covers\n // entry points that bypass MagazineArticle's `handleOpen` (deep-link, agent surface,\n // restored attention). LoadPostContent is idempotent (no-op if `content` already\n // populated or `link` missing), so a unique guard per Post id is enough to keep us\n // from re-firing on every render.\n const requestedContentFor = useRef<string | undefined>(undefined);\n useEffect(() => {\n if (requestedContentFor.current === id) {\n return;\n }\n if (!post.link || postContent) {\n return;\n }\n requestedContentFor.current = id;\n void invokePromise(FeedOperation.LoadPostContent, { post: Ref.make(subject) }).catch((err) =>\n log.catch(err, { postLink: post.link }),\n );\n }, [subject, post, post.link, postContent, invokePromise, id]);\n\n // Reactive lookup of the source feed name. `post.feed?.target?.name` only renders\n // synchronously when the ref is already resolved; querying feeds via useQuery means\n // the meta line updates as soon as the feed object is loaded into the space.\n const allFeeds = useQuery(db, Filter.type(Subscription.Subscription));\n const feedName = useMemo(() => {\n const dxn = post.source?.uri;\n if (!dxn) {\n return undefined;\n }\n return allFeeds.find((feed) => Obj.getURI(feed) === dxn)?.name;\n }, [post.source, allFeeds]);\n\n const handleOpenOriginal = useCallback(() => {\n if (post.link) {\n window.open(post.link, '_blank', 'noopener,noreferrer');\n }\n }, [post.link]);\n\n const handleMarkUnread = useCallback(() => {\n if (subscription) {\n Subscription.setReadAt(subscription, id, undefined);\n }\n }, [subscription, id]);\n\n // Value-setters (not toggles): the toolbar reads the current star/archive state reactively via\n // `get` and passes the desired next value, so these don't need to subscribe to the current state.\n const handleSetArchived = useCallback(\n (value: boolean) => {\n if (db && subscription) {\n void Subscription.setTag(subscription, id, db, 'archived', value);\n }\n },\n [db, subscription, id],\n );\n\n const handleSetStarred = useCallback(\n (value: boolean) => {\n if (db && subscription) {\n void Subscription.setTag(subscription, id, db, 'starred', value);\n }\n },\n [db, subscription, id],\n );\n\n // Re-fetch the article body from the source via the LoadPostContent operation with `force`, so the\n // fetch/extraction/storage logic lives in one place (the operation) rather than inline here. Appends\n // a fresh content entry to the subscription's contentFeed; the reverse-ref lookup picks the newest.\n // `refreshing` is an atom so the toolbar subscribes to it via `get` rather than via React deps.\n const refreshingAtom = useMemo(() => Atom.make(false), []);\n const handleRefresh = useCallback(async () => {\n if (!post.link || registry.get(refreshingAtom)) {\n return;\n }\n registry.set(refreshingAtom, true);\n try {\n // Failures surface as a toast via `notify`; invokePromise resolves with `{ error }`, never throws.\n await invokePromise(\n FeedOperation.LoadPostContent,\n { post: Ref.make(subject), force: true },\n { notify: { error: ['refresh-content-error.message', { ns: meta.profile.key }] } },\n );\n } finally {\n registry.set(refreshingAtom, false);\n }\n }, [registry, refreshingAtom, subject, post.link, invokePromise]);\n\n return (\n <Panel.Root role={role}>\n <PostToolbar\n post={subject}\n refreshingAtom={refreshingAtom}\n attendableId={toolbarAttendableId}\n onSetStarred={handleSetStarred}\n onSetArchived={handleSetArchived}\n onMarkUnread={handleMarkUnread}\n onRefresh={() => void handleRefresh()}\n onOpenOriginal={handleOpenOriginal}\n />\n <Panel.Content asChild>\n <PostContent post={subject} metadata={feedName ? [feedName] : undefined} />\n </Panel.Content>\n </Panel.Root>\n );\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { type Atom } from '@effect-atom/atom-react';\nimport React from 'react';\n\nimport { Panel } from '@dxos/react-ui';\nimport { Menu, MenuBuilder, useMenuBuilder } from '@dxos/react-ui-menu';\n\nimport { postReadAtom, postTagsAtom } from '#atoms';\nimport { meta } from '#meta';\nimport { type Subscription } from '#types';\n\nexport type PostToolbarProps = {\n post: Subscription.Post;\n /** Whether a content re-fetch is in flight. */\n refreshingAtom: Atom.Atom<boolean>;\n attendableId?: string;\n onSetStarred: (value: boolean) => void;\n onSetArchived: (value: boolean) => void;\n onMarkUnread: () => void;\n onRefresh: () => void;\n onOpenOriginal: () => void;\n};\n\n/**\n * Reactive post toolbar built from the menu action-graph idiom. The action graph reads the post's\n * star/archive/read slices (and the refreshing flag) via `get` inside the builder, so it subscribes\n * to those atoms and rebuilds whenever this post's state changes. Deps hold only stable references\n * (the post, the refreshing atom, callbacks), never the reactive values.\n */\nexport const PostToolbar = ({\n post,\n refreshingAtom,\n attendableId,\n onSetStarred,\n onSetArchived,\n onMarkUnread,\n onRefresh,\n onOpenOriginal,\n}: PostToolbarProps) => {\n const menuActions = useMenuBuilder(\n (get) => {\n const { starred, archived } = get(postTagsAtom(post));\n const { readAt } = get(postReadAtom(post));\n const read = readAt !== undefined;\n const refreshing = get(refreshingAtom);\n const hasLink = Boolean(post.link);\n\n return (\n MenuBuilder.make()\n .action(\n 'star',\n {\n label: [starred ? 'unstar-post.label' : 'star-post.label', { ns: meta.profile.key }],\n icon: starred ? 'ph--star--fill' : 'ph--star--regular',\n iconOnly: true,\n },\n () => onSetStarred(!starred),\n )\n .action(\n 'archive',\n {\n label: [archived ? 'unarchive-post.label' : 'archive-post.label', { ns: meta.profile.key }],\n icon: archived ? 'ph--archive--fill' : 'ph--archive--regular',\n iconOnly: true,\n },\n () => onSetArchived(!archived),\n )\n .action(\n 'mark-unread',\n {\n label: ['mark-unread.label', { ns: meta.profile.key }],\n icon: 'ph--envelope--regular',\n iconOnly: true,\n hidden: !read,\n },\n onMarkUnread,\n )\n // `gap` is a flexible spacer that pushes the link actions to the trailing edge.\n .separator('gap')\n .action(\n 'refresh',\n {\n label: [refreshing ? 'refresh-content-pending.label' : 'refresh-content.label', { ns: meta.profile.key }],\n icon: 'ph--arrows-clockwise--regular',\n iconClassNames: refreshing ? 'animate-spin' : undefined,\n iconOnly: true,\n disabled: refreshing,\n hidden: !hasLink,\n },\n onRefresh,\n )\n .action(\n 'open-original',\n {\n label: ['open-original.label', { ns: meta.profile.key }],\n icon: 'ph--arrow-square-out--regular',\n iconOnly: true,\n hidden: !hasLink,\n },\n onOpenOriginal,\n )\n .build()\n );\n },\n [post, refreshingAtom, onSetStarred, onSetArchived, onMarkUnread, onRefresh, onOpenOriginal],\n );\n\n return (\n <Menu.Root {...menuActions} attendableId={attendableId}>\n <Panel.Toolbar asChild>\n <Menu.Toolbar />\n </Panel.Toolbar>\n </Menu.Root>\n );\n};\n\nPostToolbar.displayName = 'PostToolbar';\n"],
5
- "mappings": "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",
6
- "names": ["Atom", "RegistryContext", "React", "useCallback", "useContext", "useEffect", "useMemo", "useRef", "useOperationInvoker", "Filter", "Obj", "Ref", "log", "useObject", "useQuery", "Panel", "getParentId", "isLinkedSegment", "usePostContentAtom", "PostContent", "meta", "FeedOperation", "Subscription", "React", "Panel", "Menu", "MenuBuilder", "useMenuBuilder", "postReadAtom", "postTagsAtom", "meta", "PostToolbar", "post", "refreshingAtom", "attendableId", "onSetStarred", "onSetArchived", "onMarkUnread", "onRefresh", "onOpenOriginal", "menuActions", "get", "starred", "archived", "readAt", "read", "undefined", "refreshing", "hasLink", "Boolean", "link", "make", "action", "label", "ns", "profile", "key", "icon", "iconOnly", "hidden", "separator", "iconClassNames", "disabled", "build", "Root", "Toolbar", "asChild", "displayName", "PostArticle", "registry", "RegistryContext", "post", "useObject", "subject", "db", "getDatabase", "subscription", "postContent", "usePostContentAtom", "current", "requestedContentFor", "catch", "log", "postLink", "link", "invokePromise", "id", "source", "uri", "undefined", "allFeeds", "handleMarkUnread", "setReadAt", "setTag", "Subscription", "get", "refreshingAtom", "force", "notify", "meta", "React", "PostToolbar", "attendableId", "onSetStarred", "onSetArchived", "onMarkUnread", "onRefresh", "onOpenOriginal", "Panel", "asChild", "PostContent", "feedName"]
7
- }
@@ -1,60 +0,0 @@
1
- import {
2
- getImageUrl,
3
- getSnippet
4
- } from "./chunk-XCNCK47N.mjs";
5
- import "./chunk-APQRTYT3.mjs";
6
- import {
7
- formatDate
8
- } from "./chunk-SAWKLGJU.mjs";
9
- import "./chunk-J5LGTIGS.mjs";
10
-
11
- // src/containers/PostCard/PostCard.tsx
12
- import React, { useMemo } from "react";
13
- import { Filter, Obj } from "@dxos/echo";
14
- import { useObject, useQuery } from "@dxos/react-client/echo";
15
- import { Card } from "@dxos/react-ui";
16
- import { Subscription } from "#types";
17
- var PostCard = ({ subject }) => {
18
- const [post] = useObject(subject);
19
- const db = Obj.getDatabase(post);
20
- const allFeeds = useQuery(db, Filter.type(Subscription.Subscription));
21
- const feedName = useMemo(() => {
22
- const dxn = post.source?.uri;
23
- if (!dxn) {
24
- return void 0;
25
- }
26
- return allFeeds.find((feed) => Obj.getURI(feed) === dxn)?.name;
27
- }, [
28
- post.source,
29
- allFeeds
30
- ]);
31
- const published = formatDate(post.published);
32
- const imageUrl = getImageUrl(post);
33
- const snippet = useMemo(() => getSnippet(post) || void 0, [
34
- post.description
35
- ]);
36
- return /* @__PURE__ */ React.createElement(Card.Body, null, imageUrl && /* @__PURE__ */ React.createElement(Card.Poster, {
37
- alt: post.title ?? "",
38
- image: imageUrl,
39
- fit: "cover",
40
- classNames: "rounded-t-xs"
41
- }), post.title && /* @__PURE__ */ React.createElement(Card.Row, null, /* @__PURE__ */ React.createElement(Card.Title, {
42
- classNames: "line-clamp-2"
43
- }, post.title)), snippet && /* @__PURE__ */ React.createElement(Card.Row, null, /* @__PURE__ */ React.createElement(Card.Text, {
44
- variant: "description",
45
- classNames: "line-clamp-3"
46
- }, snippet)), (feedName || published) && /* @__PURE__ */ React.createElement(Card.Row, null, /* @__PURE__ */ React.createElement("div", {
47
- className: "grid grid-cols-[minmax(0,1fr)_auto] items-center gap-2 text-sm text-description overflow-hidden"
48
- }, /* @__PURE__ */ React.createElement("span", {
49
- className: "truncate"
50
- }, feedName ?? ""), /* @__PURE__ */ React.createElement("span", {
51
- className: "text-end shrink-0"
52
- }, published ?? ""))), post.link && /* @__PURE__ */ React.createElement(Card.Link, {
53
- label: post.link,
54
- href: post.link
55
- }));
56
- };
57
- export {
58
- PostCard as default
59
- };
60
- //# sourceMappingURL=PostCard-VDGN7BBA.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/containers/PostCard/PostCard.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { Filter, Obj } from '@dxos/echo';\nimport { useObject, useQuery } from '@dxos/react-client/echo';\nimport { Card } from '@dxos/react-ui';\n\nimport { Subscription } from '#types';\n\nimport { formatDate, getImageUrl, getSnippet } from '../../util';\n\nexport type PostCardProps = AppSurface.ObjectCardProps<Subscription.Post>;\n\n/**\n * Compact preview of a {@link Subscription.Post}. Rendered into the\n * `AppSurface.CardContent` slot — Card.Root is supplied by the surface host\n * (popovers, sections, related-objects), so the body emits Card.Body only.\n */\nexport const PostCard = ({ subject }: PostCardProps) => {\n const [post] = useObject(subject);\n\n // Resolve the source feed's display name when present. `post.feed?.target?.name` only\n // resolves synchronously when the ref is already loaded; querying via useQuery means\n // the meta line lights up as soon as the feed lands in the space.\n const db = Obj.getDatabase(post);\n const allFeeds = useQuery(db, Filter.type(Subscription.Subscription));\n const feedName = useMemo(() => {\n const dxn = post.source?.uri;\n if (!dxn) {\n return undefined;\n }\n return allFeeds.find((feed) => Obj.getURI(feed) === dxn)?.name;\n }, [post.source, allFeeds]);\n\n const published = formatDate(post.published);\n // snippet/imageUrl are derived from the Post's description (no content-feed entry in this surface).\n const imageUrl = getImageUrl(post);\n const snippet = useMemo(() => getSnippet(post) || undefined, [post.description]);\n\n return (\n <Card.Body>\n {imageUrl && <Card.Poster alt={post.title ?? ''} image={imageUrl} fit='cover' classNames='rounded-t-xs' />}\n {post.title && (\n <Card.Row>\n <Card.Title classNames='line-clamp-2'>{post.title}</Card.Title>\n </Card.Row>\n )}\n {snippet && (\n <Card.Row>\n <Card.Text variant='description' classNames='line-clamp-3'>\n {snippet}\n </Card.Text>\n </Card.Row>\n )}\n {(feedName || published) && (\n <Card.Row>\n <div className='grid grid-cols-[minmax(0,1fr)_auto] items-center gap-2 text-sm text-description overflow-hidden'>\n <span className='truncate'>{feedName ?? ''}</span>\n <span className='text-end shrink-0'>{published ?? ''}</span>\n </div>\n </Card.Row>\n )}\n {post.link && <Card.Link label={post.link} href={post.link} />}\n </Card.Body>\n );\n};\n"],
5
- "mappings": ";;;;;;;;;;;AAIA,OAAOA,SAASC,eAAe;AAG/B,SAASC,QAAQC,WAAW;AAC5B,SAASC,WAAWC,gBAAgB;AACpC,SAASC,YAAY;AAErB,SAASC,oBAAoB;AAWtB,IAAMC,WAAW,CAAC,EAAEC,QAAO,MAAiB;AACjD,QAAM,CAACC,IAAAA,IAAQC,UAAUF,OAAAA;AAKzB,QAAMG,KAAKC,IAAIC,YAAYJ,IAAAA;AAC3B,QAAMK,WAAWC,SAASJ,IAAIK,OAAOC,KAAKC,aAAaA,YAAY,CAAA;AACnE,QAAMC,WAAWC,QAAQ,MAAA;AACvB,UAAMC,MAAMZ,KAAKa,QAAQC;AACzB,QAAI,CAACF,KAAK;AACR,aAAOG;IACT;AACA,WAAOV,SAASW,KAAK,CAACC,SAASd,IAAIe,OAAOD,IAAAA,MAAUL,GAAAA,GAAMO;EAC5D,GAAG;IAACnB,KAAKa;IAAQR;GAAS;AAE1B,QAAMe,YAAYC,WAAWrB,KAAKoB,SAAS;AAE3C,QAAME,WAAWC,YAAYvB,IAAAA;AAC7B,QAAMwB,UAAUb,QAAQ,MAAMc,WAAWzB,IAAAA,KAASe,QAAW;IAACf,KAAK0B;GAAY;AAE/E,SACE,sBAAA,cAACC,KAAKC,MAAI,MACPN,YAAY,sBAAA,cAACK,KAAKE,QAAM;IAACC,KAAK9B,KAAK+B,SAAS;IAAIC,OAAOV;IAAUW,KAAI;IAAQC,YAAW;MACxFlC,KAAK+B,SACJ,sBAAA,cAACJ,KAAKQ,KAAG,MACP,sBAAA,cAACR,KAAKS,OAAK;IAACF,YAAW;KAAgBlC,KAAK+B,KAAK,CAAA,GAGpDP,WACC,sBAAA,cAACG,KAAKQ,KAAG,MACP,sBAAA,cAACR,KAAKU,MAAI;IAACC,SAAQ;IAAcJ,YAAW;KACzCV,OAAAA,CAAAA,IAILd,YAAYU,cACZ,sBAAA,cAACO,KAAKQ,KAAG,MACP,sBAAA,cAACI,OAAAA;IAAIC,WAAU;KACb,sBAAA,cAACC,QAAAA;IAAKD,WAAU;KAAY9B,YAAY,EAAA,GACxC,sBAAA,cAAC+B,QAAAA;IAAKD,WAAU;KAAqBpB,aAAa,EAAA,CAAA,CAAA,GAIvDpB,KAAK0C,QAAQ,sBAAA,cAACf,KAAKgB,MAAI;IAACC,OAAO5C,KAAK0C;IAAMG,MAAM7C,KAAK0C;;AAG5D;",
6
- "names": ["React", "useMemo", "Filter", "Obj", "useObject", "useQuery", "Card", "Subscription", "PostCard", "subject", "post", "useObject", "db", "Obj", "getDatabase", "allFeeds", "useQuery", "Filter", "type", "Subscription", "feedName", "useMemo", "dxn", "source", "uri", "undefined", "find", "feed", "getURI", "name", "published", "formatDate", "imageUrl", "getImageUrl", "snippet", "getSnippet", "description", "Card", "Body", "Poster", "alt", "title", "image", "fit", "classNames", "Row", "Title", "Text", "variant", "div", "className", "span", "link", "Link", "label", "href"]
7
- }
@@ -1,121 +0,0 @@
1
- import {
2
- getMagazinesPath
3
- } from "./chunk-GU725ZF4.mjs";
4
- import "./chunk-J5LGTIGS.mjs";
5
-
6
- // src/capabilities/app-graph-builder.ts
7
- import { Atom } from "@effect-atom/atom-react";
8
- import * as Effect from "effect/Effect";
9
- import * as Option from "effect/Option";
10
- import { Capability } from "@dxos/app-framework";
11
- import { AppCapabilities, AppNode, AppNodeMatcher, Paths, TypeSection } from "@dxos/app-toolkit";
12
- import { Operation } from "@dxos/compute";
13
- import { Obj, Ref, Type } from "@dxos/echo";
14
- import { AttentionCapabilities } from "@dxos/plugin-attention";
15
- import { GraphBuilder } from "@dxos/plugin-graph";
16
- import { SpaceOperation } from "@dxos/plugin-space";
17
- import { linkedSegment, selectionAspect } from "@dxos/react-ui-attention";
18
- import { meta } from "#meta";
19
- import { FeedOperation } from "#types";
20
- import { Magazine, Subscription } from "#types";
21
- var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function* () {
22
- const viewState = yield* Capability.get(AttentionCapabilities.ViewState);
23
- const selectedId = Atom.family((nodeId) => Atom.make((get) => {
24
- const selection = get(viewState.atom(selectionAspect, nodeId));
25
- return selection.mode === "single" ? selection.id : void 0;
26
- }));
27
- const extensions = yield* Effect.all([
28
- // Magazine type section in the content group.
29
- TypeSection.createTypeSectionExtension(Magazine.Magazine, {
30
- match: AppNodeMatcher.whenNavTreeGroup(Paths.GroupTypes.content),
31
- createObject: (space) => Operation.invoke(SpaceOperation.OpenCreateObject, {
32
- target: space.db,
33
- typename: Type.getTypename(Magazine.Magazine),
34
- targetNodeId: getMagazinesPath(space.db.spaceId)
35
- })
36
- }),
37
- // Feeds as children under each Magazine node.
38
- GraphBuilder.createExtension({
39
- id: "magazineFeeds",
40
- match: (node) => Magazine.instanceOf(node.data) ? Option.some(node.data) : Option.none(),
41
- connector: (magazine, get) => {
42
- const db = Obj.getDatabase(magazine);
43
- if (!db) {
44
- return Effect.succeed([]);
45
- }
46
- const feedRefs = get(Obj.atomProperty(magazine, "feeds"));
47
- const feeds = feedRefs.map((ref) => get(ref.atom)).filter((feed) => Subscription.instanceOf(feed));
48
- return Effect.succeed(feeds.map((feed) => AppNode.makeObject({
49
- get,
50
- db,
51
- object: feed
52
- })).filter((node) => node !== null));
53
- }
54
- }),
55
- // Companion panel: resolve the selected Post under a Magazine node.
56
- GraphBuilder.createExtension({
57
- id: "magazinePost",
58
- match: (node) => Magazine.instanceOf(node.data) ? Option.some({
59
- magazine: node.data,
60
- nodeId: node.id
61
- }) : Option.none(),
62
- connector: (matched, get) => {
63
- const { magazine, nodeId } = matched;
64
- const postId = get(selectedId(nodeId));
65
- let post;
66
- if (postId) {
67
- for (const ref of magazine.posts) {
68
- const resolved = get(ref.atom);
69
- if (resolved?.id === postId) {
70
- post = resolved;
71
- break;
72
- }
73
- }
74
- }
75
- return Effect.succeed([
76
- AppNode.makeCompanion({
77
- id: linkedSegment("post"),
78
- label: [
79
- "post-companion.label",
80
- {
81
- ns: meta.profile.key
82
- }
83
- ],
84
- icon: "ph--article--regular",
85
- data: post
86
- })
87
- ]);
88
- }
89
- }),
90
- // Actions on each Subscription.Subscription node.
91
- GraphBuilder.createExtension({
92
- id: "feedActions",
93
- match: (node) => Subscription.instanceOf(node.data) ? Option.some(node.data) : Option.none(),
94
- actions: (feed) => Effect.succeed([
95
- {
96
- id: "sync",
97
- data: () => Operation.invoke(FeedOperation.SyncFeed, {
98
- feed: Ref.make(feed)
99
- }, {
100
- spaceId: Obj.getDatabase(feed)?.spaceId
101
- }),
102
- properties: {
103
- label: [
104
- "sync-feed.label",
105
- {
106
- ns: meta.profile.key
107
- }
108
- ],
109
- icon: "ph--arrows-clockwise--regular",
110
- disposition: "list-item"
111
- }
112
- }
113
- ])
114
- })
115
- ]);
116
- return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);
117
- }));
118
- export {
119
- app_graph_builder_default as default
120
- };
121
- //# sourceMappingURL=app-graph-builder-JDPRBVHL.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/app-graph-builder.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom } from '@effect-atom/atom-react';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities, AppNode, AppNodeMatcher, Paths, TypeSection } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/compute';\nimport { Obj, Ref, Type } from '@dxos/echo';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport { GraphBuilder } from '@dxos/plugin-graph';\nimport { SpaceOperation } from '@dxos/plugin-space';\nimport { linkedSegment, selectionAspect } from '@dxos/react-ui-attention';\n\nimport { meta } from '#meta';\nimport { FeedOperation } from '#types';\nimport { Magazine, Subscription } from '#types';\n\nimport { getMagazinesPath } from '../paths';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const viewState = yield* Capability.get(AttentionCapabilities.ViewState);\n const selectedId = Atom.family((nodeId: string) =>\n Atom.make((get) => {\n const selection = get(viewState.atom(selectionAspect, nodeId));\n return selection.mode === 'single' ? selection.id : undefined;\n }),\n );\n\n const extensions = yield* Effect.all([\n // Magazine type section in the content group.\n TypeSection.createTypeSectionExtension(Magazine.Magazine, {\n match: AppNodeMatcher.whenNavTreeGroup(Paths.GroupTypes.content),\n createObject: (space) =>\n Operation.invoke(SpaceOperation.OpenCreateObject, {\n target: space.db,\n typename: Type.getTypename(Magazine.Magazine),\n targetNodeId: getMagazinesPath(space.db.spaceId),\n }),\n }),\n\n // Feeds as children under each Magazine node.\n GraphBuilder.createExtension({\n id: 'magazineFeeds',\n match: (node) => (Magazine.instanceOf(node.data) ? Option.some(node.data as Magazine.Magazine) : Option.none()),\n connector: (magazine, get) => {\n const db = Obj.getDatabase(magazine);\n if (!db) {\n return Effect.succeed([]);\n }\n const feedRefs = get(Obj.atomProperty(magazine, 'feeds'));\n const feeds = feedRefs\n .map((ref) => get(ref.atom))\n .filter((feed): feed is Subscription.Subscription => Subscription.instanceOf(feed));\n return Effect.succeed(\n feeds\n .map((feed) => AppNode.makeObject({ get, db, object: feed }))\n .filter((node): node is NonNullable<typeof node> => node !== null),\n );\n },\n }),\n\n // Companion panel: resolve the selected Post under a Magazine node.\n GraphBuilder.createExtension({\n id: 'magazinePost',\n match: (node) =>\n Magazine.instanceOf(node.data)\n ? Option.some({ magazine: node.data as Magazine.Magazine, nodeId: node.id })\n : Option.none(),\n connector: (matched, get) => {\n const { magazine, nodeId } = matched;\n const postId = get(selectedId(nodeId));\n let post: Subscription.Post | undefined;\n if (postId) {\n for (const ref of magazine.posts) {\n const resolved = get(ref.atom) as Subscription.Post | undefined;\n if (resolved?.id === postId) {\n post = resolved;\n break;\n }\n }\n }\n return Effect.succeed([\n AppNode.makeCompanion({\n id: linkedSegment('post'),\n label: ['post-companion.label', { ns: meta.profile.key }],\n icon: 'ph--article--regular',\n data: post,\n }),\n ]);\n },\n }),\n\n // Actions on each Subscription.Subscription node.\n GraphBuilder.createExtension({\n id: 'feedActions',\n match: (node) =>\n Subscription.instanceOf(node.data) ? Option.some(node.data as Subscription.Subscription) : Option.none(),\n actions: (feed) =>\n Effect.succeed([\n {\n id: 'sync',\n data: () =>\n Operation.invoke(\n FeedOperation.SyncFeed,\n { feed: Ref.make(feed) },\n { spaceId: Obj.getDatabase(feed)?.spaceId },\n ),\n properties: {\n label: ['sync-feed.label', { ns: meta.profile.key }],\n icon: 'ph--arrows-clockwise--regular',\n disposition: 'list-item',\n },\n },\n ]),\n }),\n ]);\n\n return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);\n }),\n);\n"],
5
- "mappings": "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",
6
- "names": ["Atom", "Effect", "Option", "Capability", "AppCapabilities", "AppNode", "AppNodeMatcher", "Paths", "TypeSection", "Operation", "Obj", "Ref", "Type", "AttentionCapabilities", "GraphBuilder", "SpaceOperation", "linkedSegment", "selectionAspect", "meta", "FeedOperation", "Magazine", "Subscription", "Capability", "makeModule", "fnUntraced", "viewState", "get", "AttentionCapabilities", "ViewState", "selectedId", "Atom", "family", "nodeId", "make", "selection", "atom", "selectionAspect", "mode", "id", "undefined", "extensions", "all", "TypeSection", "createTypeSectionExtension", "Magazine", "match", "AppNodeMatcher", "whenNavTreeGroup", "Paths", "GroupTypes", "content", "createObject", "space", "Operation", "invoke", "SpaceOperation", "OpenCreateObject", "target", "db", "typename", "Type", "getTypename", "targetNodeId", "getMagazinesPath", "spaceId", "GraphBuilder", "createExtension", "node", "instanceOf", "data", "some", "none", "connector", "magazine", "Obj", "getDatabase", "succeed", "feedRefs", "atomProperty", "feeds", "map", "ref", "filter", "feed", "Subscription", "AppNode", "makeObject", "object", "matched", "postId", "post", "posts", "resolved", "makeCompanion", "linkedSegment", "label", "ns", "meta", "profile", "key", "icon", "actions", "FeedOperation", "SyncFeed", "Ref", "properties", "disposition", "contributes", "AppCapabilities", "AppGraphBuilder"]
7
- }
@@ -1,21 +0,0 @@
1
- import "../chunk-J5LGTIGS.mjs";
2
-
3
- // src/capabilities/index.ts
4
- import { Capability } from "@dxos/app-framework";
5
- var AppGraphBuilder = Capability.lazy("AppGraphBuilder", () => import("../app-graph-builder-JDPRBVHL.mjs"));
6
- var RoutineTemplates = Capability.lazy("RoutineTemplates", () => import("../routine-templates-D5A2L4KL.mjs"));
7
- var SkillDefinition = Capability.lazy("SkillDefinition", () => import("../skill-definition-3KLMUEC5.mjs"));
8
- var CreateObject = Capability.lazy("CreateObject", () => import("../create-object-SYZMRR4H.mjs"));
9
- var OperationHandler = Capability.lazy("OperationHandler", () => import("../operation-handler-JE3743BU.mjs"));
10
- var ReactSurface = Capability.lazy("ReactSurface", () => import("../react-surface-TZESAMG2.mjs"));
11
- var NavigationResolver = Capability.lazy("NavigationResolver", () => import("../navigation-resolver-IN4OMCDR.mjs"));
12
- export {
13
- AppGraphBuilder,
14
- CreateObject,
15
- NavigationResolver,
16
- OperationHandler,
17
- ReactSurface,
18
- RoutineTemplates,
19
- SkillDefinition
20
- };
21
- //# sourceMappingURL=index.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../../src/capabilities/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capability } from '@dxos/app-framework';\nimport type { OperationHandlerSet } from '@dxos/compute';\n\nexport const AppGraphBuilder = Capability.lazy('AppGraphBuilder', () => import('./app-graph-builder'));\nexport const RoutineTemplates = Capability.lazy('RoutineTemplates', () => import('./routine-templates'));\nexport const SkillDefinition = Capability.lazy('SkillDefinition', () => import('./skill-definition'));\nexport const CreateObject = Capability.lazy('CreateObject', () => import('./create-object'));\nexport const OperationHandler = Capability.lazy<OperationHandlerSet.OperationHandlerSet>(\n 'OperationHandler',\n () => import('./operation-handler'),\n);\nexport const ReactSurface = Capability.lazy('ReactSurface', () => import('./react-surface'));\nexport const NavigationResolver = Capability.lazy('NavigationResolver', () => import('./navigation-resolver'));\n"],
5
- "mappings": ";;;AAIA,SAASA,kBAAkB;AAGpB,IAAMC,kBAAkBD,WAAWE,KAAK,mBAAmB,MAAM,OAAO,mCAAA,CAAA;AACxE,IAAMC,mBAAmBH,WAAWE,KAAK,oBAAoB,MAAM,OAAO,mCAAA,CAAA;AAC1E,IAAME,kBAAkBJ,WAAWE,KAAK,mBAAmB,MAAM,OAAO,kCAAA,CAAA;AACxE,IAAMG,eAAeL,WAAWE,KAAK,gBAAgB,MAAM,OAAO,+BAAA,CAAA;AAClE,IAAMI,mBAAmBN,WAAWE,KACzC,oBACA,MAAM,OAAO,mCAAA,CAAA;AAER,IAAMK,eAAeP,WAAWE,KAAK,gBAAgB,MAAM,OAAO,+BAAA,CAAA;AAClE,IAAMM,qBAAqBR,WAAWE,KAAK,sBAAsB,MAAM,OAAO,qCAAA,CAAA;",
6
- "names": ["Capability", "AppGraphBuilder", "lazy", "RoutineTemplates", "SkillDefinition", "CreateObject", "OperationHandler", "ReactSurface", "NavigationResolver"]
7
- }
@@ -1,12 +0,0 @@
1
- // src/capabilities/operation-handler.ts
2
- import * as Effect from "effect/Effect";
3
- import { Capabilities, Capability } from "@dxos/app-framework";
4
- import { MagazineOperationHandlerSet } from "#operations";
5
- var operation_handler_default = Capability.makeModule(Effect.fnUntraced(function* () {
6
- return Capability.contributes(Capabilities.OperationHandler, MagazineOperationHandlerSet);
7
- }));
8
-
9
- export {
10
- operation_handler_default
11
- };
12
- //# sourceMappingURL=chunk-3K4AQKBZ.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/operation-handler.ts"],
4
- "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"],
5
- "mappings": ";AAIA,YAAYA,YAAY;AAExB,SAASC,cAAcC,kBAAkB;AAGzC,SAASC,mCAAmC;AAE5C,IAAA,4BAAeD,WAAWE,WACjBC,kBAAW,aAAA;AAChB,SAAOH,WAAWI,YAAYL,aAAaM,kBAAkBJ,2BAAAA;AAC/D,CAAA,CAAA;",
6
- "names": ["Effect", "Capabilities", "Capability", "MagazineOperationHandlerSet", "makeModule", "fnUntraced", "contributes", "OperationHandler"]
7
- }