@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.
- package/dist/lib/MagazinePlugin.mjs +36 -0
- package/dist/lib/MagazinePlugin.mjs.map +1 -0
- package/dist/lib/MagazinePlugin.workerd.mjs +26 -0
- package/dist/lib/MagazinePlugin.workerd.mjs.map +1 -0
- package/dist/lib/atoms.mjs +175 -0
- package/dist/lib/atoms.mjs.map +1 -0
- package/dist/lib/capabilities.mjs +12 -0
- package/dist/lib/capabilities.mjs.map +1 -0
- package/dist/lib/chunk-FeedArticle.mjs +70 -0
- package/dist/lib/chunk-FeedArticle.mjs.map +1 -0
- package/dist/lib/chunk-FeedProperties.mjs +78 -0
- package/dist/lib/chunk-FeedProperties.mjs.map +1 -0
- package/dist/lib/chunk-MagazineArticle.mjs +267 -0
- package/dist/lib/chunk-MagazineArticle.mjs.map +1 -0
- package/dist/lib/chunk-PostArticle.mjs +174 -0
- package/dist/lib/chunk-PostArticle.mjs.map +1 -0
- package/dist/lib/chunk-PostCard.mjs +62 -0
- package/dist/lib/chunk-PostCard.mjs.map +1 -0
- package/dist/lib/chunk-app-graph-builder.mjs +91 -0
- package/dist/lib/chunk-app-graph-builder.mjs.map +1 -0
- package/dist/lib/chunk-clear-magazine.mjs +37 -0
- package/dist/lib/chunk-clear-magazine.mjs.map +1 -0
- package/dist/lib/chunk-create-object.mjs +59 -0
- package/dist/lib/chunk-create-object.mjs.map +1 -0
- package/dist/lib/chunk-curate-magazine.mjs +164 -0
- package/dist/lib/chunk-curate-magazine.mjs.map +1 -0
- package/dist/lib/chunk-date.mjs +25 -0
- package/dist/lib/chunk-date.mjs.map +1 -0
- package/dist/lib/chunk-fetch-article-content.mjs +26 -0
- package/dist/lib/chunk-fetch-article-content.mjs.map +1 -0
- package/dist/lib/chunk-load-post-content.mjs +57 -0
- package/dist/lib/chunk-load-post-content.mjs.map +1 -0
- package/dist/lib/{neutral/chunk-JFPR6OV4.mjs → chunk-meta.mjs} +19 -26
- package/dist/lib/chunk-meta.mjs.map +1 -0
- package/dist/lib/chunk-operation-handler.mjs +13 -0
- package/dist/lib/chunk-operation-handler.mjs.map +1 -0
- package/dist/lib/chunk-paths.mjs +8 -0
- package/dist/lib/chunk-paths.mjs.map +1 -0
- package/dist/lib/chunk-post-content.mjs +14 -0
- package/dist/lib/chunk-post-content.mjs.map +1 -0
- package/dist/lib/chunk-react-surface.mjs +60 -0
- package/dist/lib/chunk-react-surface.mjs.map +1 -0
- package/dist/lib/chunk-routine-templates.mjs +52 -0
- package/dist/lib/chunk-routine-templates.mjs.map +1 -0
- package/dist/lib/chunk-skill-definition.mjs +12 -0
- package/dist/lib/chunk-skill-definition.mjs.map +1 -0
- package/dist/lib/chunk-sources.mjs +576 -0
- package/dist/lib/chunk-sources.mjs.map +1 -0
- package/dist/lib/chunk-sync-feed.mjs +86 -0
- package/dist/lib/chunk-sync-feed.mjs.map +1 -0
- package/dist/lib/chunk-text.mjs +52 -0
- package/dist/lib/chunk-text.mjs.map +1 -0
- package/dist/lib/chunk-types.mjs +607 -0
- package/dist/lib/chunk-types.mjs.map +1 -0
- package/dist/lib/components.mjs +323 -0
- package/dist/lib/components.mjs.map +1 -0
- package/dist/lib/containers.mjs +11 -0
- package/dist/lib/containers.mjs.map +1 -0
- package/dist/lib/index.mjs +3 -0
- package/dist/lib/meta.mjs +2 -0
- package/dist/lib/operations.mjs +7 -0
- package/dist/lib/operations.mjs.map +1 -0
- package/dist/lib/plugin.mjs +9 -0
- package/dist/lib/plugin.mjs.map +1 -0
- package/dist/lib/plugin.workerd.mjs +3 -0
- package/dist/lib/{neutral/skills/index.mjs → skills.mjs} +15 -28
- package/dist/lib/skills.mjs.map +1 -0
- package/dist/lib/testing.mjs +71 -0
- package/dist/lib/testing.mjs.map +1 -0
- package/dist/lib/translations.mjs +74 -0
- package/dist/lib/translations.mjs.map +1 -0
- package/dist/lib/types.mjs +2 -0
- package/dist/types/src/MagazinePlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
- package/dist/types/src/capabilities/create-object.d.ts +1 -1
- package/dist/types/src/capabilities/index.d.ts +0 -1
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/routine-templates.d.ts +1 -1
- package/dist/types/src/components/PostContent/PostContent.d.ts +1 -13
- package/dist/types/src/components/PostContent/PostContent.d.ts.map +1 -1
- package/dist/types/src/components/PostContent/dedupe-images.d.ts +13 -0
- package/dist/types/src/components/PostContent/dedupe-images.d.ts.map +1 -0
- package/dist/types/src/components/PostContent/index.d.ts +1 -0
- package/dist/types/src/components/PostContent/index.d.ts.map +1 -1
- package/dist/types/src/components/PostStack/PostStack.d.ts +1 -1
- package/dist/types/src/components/PostStack/PostStack.d.ts.map +1 -1
- package/dist/types/src/components/SubscriptionStack/SubscriptionStack.d.ts +1 -1
- package/dist/types/src/components/SubscriptionStack/SubscriptionStack.d.ts.map +1 -1
- package/dist/types/src/containers/FeedArticle/FeedArticle.d.ts +4 -1
- package/dist/types/src/containers/FeedArticle/FeedArticle.d.ts.map +1 -1
- package/dist/types/src/containers/FeedProperties/FeedProperties.d.ts +4 -1
- package/dist/types/src/containers/FeedProperties/FeedProperties.d.ts.map +1 -1
- package/dist/types/src/containers/MagazineArticle/MagazineArticle.d.ts +4 -1
- package/dist/types/src/containers/MagazineArticle/MagazineArticle.d.ts.map +1 -1
- package/dist/types/src/containers/MagazineArticle/MagazineArticle.stories.d.ts.map +1 -1
- package/dist/types/src/containers/MagazineArticle/MagazineTile.d.ts +4 -1
- package/dist/types/src/containers/MagazineArticle/MagazineTile.d.ts.map +1 -1
- package/dist/types/src/containers/MagazineArticle/useToolbar.d.ts +4 -8
- package/dist/types/src/containers/MagazineArticle/useToolbar.d.ts.map +1 -1
- package/dist/types/src/containers/PostArticle/PostArticle.d.ts +4 -1
- package/dist/types/src/containers/PostArticle/PostArticle.d.ts.map +1 -1
- package/dist/types/src/containers/PostArticle/PostArticle.stories.d.ts.map +1 -1
- package/dist/types/src/containers/PostArticle/PostToolbar.d.ts +1 -1
- package/dist/types/src/containers/PostArticle/PostToolbar.d.ts.map +1 -1
- package/dist/types/src/containers/PostCard/PostCard.d.ts +4 -6
- package/dist/types/src/containers/PostCard/PostCard.d.ts.map +1 -1
- package/dist/types/src/containers/SubscriptionsArticle/SubscriptionsArticle.d.ts +4 -1
- package/dist/types/src/containers/SubscriptionsArticle/SubscriptionsArticle.d.ts.map +1 -1
- package/dist/types/src/containers/SubscriptionsArticle/SubscriptionsArticle.stories.d.ts.map +1 -1
- package/dist/types/src/stories/ArticleExtractor.stories.d.ts +1 -0
- package/dist/types/src/stories/ArticleExtractor.stories.d.ts.map +1 -1
- package/dist/types/src/stories/MagazineCurate.stories.d.ts.map +1 -1
- package/dist/types/src/templates/magazine-curation.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +1 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dx.config.ts +1 -1
- package/package.json +57 -60
- package/src/MagazinePlugin.tsx +0 -3
- package/src/atoms/atoms.test.ts +5 -4
- package/src/capabilities/app-graph-builder.ts +8 -6
- package/src/capabilities/index.ts +0 -1
- package/src/capabilities/{react-surface.tsx → react-surface.ts} +10 -12
- package/src/components/PostContent/PostContent.test.ts +1 -1
- package/src/components/PostContent/PostContent.tsx +1 -41
- package/src/components/PostContent/dedupe-images.ts +48 -0
- package/src/components/PostContent/index.ts +1 -0
- package/src/containers/FeedArticle/FeedArticle.stories.tsx +2 -2
- package/src/containers/FeedArticle/FeedArticle.tsx +4 -2
- package/src/containers/FeedProperties/FeedProperties.tsx +6 -4
- package/src/containers/MagazineArticle/MagazineArticle.stories.tsx +2 -1
- package/src/containers/MagazineArticle/MagazineArticle.tsx +8 -6
- package/src/containers/MagazineArticle/MagazineTile.tsx +2 -0
- package/src/containers/MagazineArticle/useToolbar.tsx +2 -0
- package/src/containers/PostArticle/PostArticle.stories.tsx +2 -1
- package/src/containers/PostArticle/PostArticle.tsx +6 -3
- package/src/containers/PostArticle/PostToolbar.tsx +1 -1
- package/src/containers/PostCard/PostCard.tsx +3 -1
- package/src/containers/SubscriptionsArticle/SubscriptionsArticle.stories.tsx +2 -1
- package/src/containers/SubscriptionsArticle/SubscriptionsArticle.tsx +5 -3
- package/src/operations/curate-magazine.test.ts +108 -4
- package/src/operations/sync-feed.test.ts +1 -1
- package/src/operations/sync-feed.ts +1 -1
- package/src/paths.ts +3 -3
- package/src/stories/ArticleExtractor.stories.tsx +1 -1
- package/src/stories/MagazineCurate.stories.tsx +3 -2
- package/src/templates/magazine-curation.ts +3 -2
- package/src/types/Magazine.test.ts +1 -1
- package/src/types/Subscription.ts +1 -1
- package/dist/lib/neutral/FeedArticle-PEWCFFSP.mjs +0 -90
- package/dist/lib/neutral/FeedArticle-PEWCFFSP.mjs.map +0 -7
- package/dist/lib/neutral/FeedProperties-EIO7IZOA.mjs +0 -97
- package/dist/lib/neutral/FeedProperties-EIO7IZOA.mjs.map +0 -7
- package/dist/lib/neutral/MagazineArticle-5T7RTIPS.mjs +0 -325
- package/dist/lib/neutral/MagazineArticle-5T7RTIPS.mjs.map +0 -7
- package/dist/lib/neutral/MagazinePlugin.mjs +0 -62
- package/dist/lib/neutral/MagazinePlugin.mjs.map +0 -7
- package/dist/lib/neutral/MagazinePlugin.workerd.mjs +0 -12
- package/dist/lib/neutral/MagazinePlugin.workerd.mjs.map +0 -7
- package/dist/lib/neutral/PostArticle-BGIPU7XA.mjs +0 -230
- package/dist/lib/neutral/PostArticle-BGIPU7XA.mjs.map +0 -7
- package/dist/lib/neutral/PostCard-VDGN7BBA.mjs +0 -60
- package/dist/lib/neutral/PostCard-VDGN7BBA.mjs.map +0 -7
- package/dist/lib/neutral/app-graph-builder-JDPRBVHL.mjs +0 -121
- package/dist/lib/neutral/app-graph-builder-JDPRBVHL.mjs.map +0 -7
- package/dist/lib/neutral/capabilities/index.mjs +0 -21
- package/dist/lib/neutral/capabilities/index.mjs.map +0 -7
- package/dist/lib/neutral/chunk-3K4AQKBZ.mjs +0 -12
- package/dist/lib/neutral/chunk-3K4AQKBZ.mjs.map +0 -7
- package/dist/lib/neutral/chunk-AFPBWBTK.mjs +0 -591
- package/dist/lib/neutral/chunk-AFPBWBTK.mjs.map +0 -7
- package/dist/lib/neutral/chunk-APQRTYT3.mjs +0 -57
- package/dist/lib/neutral/chunk-APQRTYT3.mjs.map +0 -7
- package/dist/lib/neutral/chunk-GU725ZF4.mjs +0 -11
- package/dist/lib/neutral/chunk-GU725ZF4.mjs.map +0 -7
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs +0 -10
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +0 -7
- package/dist/lib/neutral/chunk-JFPR6OV4.mjs.map +0 -7
- package/dist/lib/neutral/chunk-KTYLUOUG.mjs +0 -36
- package/dist/lib/neutral/chunk-KTYLUOUG.mjs.map +0 -7
- package/dist/lib/neutral/chunk-LFSQMLPK.mjs +0 -8
- package/dist/lib/neutral/chunk-LFSQMLPK.mjs.map +0 -7
- package/dist/lib/neutral/chunk-MBPX7RPI.mjs +0 -14
- package/dist/lib/neutral/chunk-MBPX7RPI.mjs.map +0 -7
- package/dist/lib/neutral/chunk-OYCDRSWB.mjs +0 -624
- package/dist/lib/neutral/chunk-OYCDRSWB.mjs.map +0 -7
- package/dist/lib/neutral/chunk-SAWKLGJU.mjs +0 -28
- package/dist/lib/neutral/chunk-SAWKLGJU.mjs.map +0 -7
- package/dist/lib/neutral/chunk-XCNCK47N.mjs +0 -15
- package/dist/lib/neutral/chunk-XCNCK47N.mjs.map +0 -7
- package/dist/lib/neutral/clear-magazine-KNY4OWY4.mjs +0 -59
- package/dist/lib/neutral/clear-magazine-KNY4OWY4.mjs.map +0 -7
- package/dist/lib/neutral/components/index.mjs +0 -338
- package/dist/lib/neutral/components/index.mjs.map +0 -7
- package/dist/lib/neutral/containers/index.mjs +0 -17
- package/dist/lib/neutral/containers/index.mjs.map +0 -7
- package/dist/lib/neutral/create-object-SYZMRR4H.mjs +0 -98
- package/dist/lib/neutral/create-object-SYZMRR4H.mjs.map +0 -7
- package/dist/lib/neutral/curate-magazine-7RMKSJC5.mjs +0 -184
- package/dist/lib/neutral/curate-magazine-7RMKSJC5.mjs.map +0 -7
- package/dist/lib/neutral/fetch-article-content-CXPKXIMR.mjs +0 -31
- package/dist/lib/neutral/fetch-article-content-CXPKXIMR.mjs.map +0 -7
- package/dist/lib/neutral/index.mjs +0 -18
- package/dist/lib/neutral/index.mjs.map +0 -7
- package/dist/lib/neutral/load-post-content-H3S4TKVM.mjs +0 -65
- package/dist/lib/neutral/load-post-content-H3S4TKVM.mjs.map +0 -7
- package/dist/lib/neutral/meta.json +0 -1
- package/dist/lib/neutral/meta.mjs +0 -8
- package/dist/lib/neutral/meta.mjs.map +0 -7
- package/dist/lib/neutral/navigation-resolver-IN4OMCDR.mjs +0 -18
- package/dist/lib/neutral/navigation-resolver-IN4OMCDR.mjs.map +0 -7
- package/dist/lib/neutral/operation-handler-JE3743BU.mjs +0 -8
- package/dist/lib/neutral/operation-handler-JE3743BU.mjs.map +0 -7
- package/dist/lib/neutral/operations/index.mjs +0 -8
- package/dist/lib/neutral/operations/index.mjs.map +0 -7
- package/dist/lib/neutral/plugin.mjs +0 -16
- package/dist/lib/neutral/plugin.mjs.map +0 -7
- package/dist/lib/neutral/plugin.workerd.mjs +0 -16
- package/dist/lib/neutral/plugin.workerd.mjs.map +0 -7
- package/dist/lib/neutral/react-surface-TZESAMG2.mjs +0 -60
- package/dist/lib/neutral/react-surface-TZESAMG2.mjs.map +0 -7
- package/dist/lib/neutral/routine-templates-D5A2L4KL.mjs +0 -52
- package/dist/lib/neutral/routine-templates-D5A2L4KL.mjs.map +0 -7
- package/dist/lib/neutral/skill-definition-3KLMUEC5.mjs +0 -8
- package/dist/lib/neutral/skill-definition-3KLMUEC5.mjs.map +0 -7
- package/dist/lib/neutral/skills/index.mjs.map +0 -7
- package/dist/lib/neutral/sync-feed-SDXYF7HU.mjs +0 -99
- package/dist/lib/neutral/sync-feed-SDXYF7HU.mjs.map +0 -7
- package/dist/lib/neutral/translations.mjs +0 -81
- package/dist/lib/neutral/translations.mjs.map +0 -7
- package/dist/lib/neutral/types/index.mjs +0 -14
- package/dist/lib/neutral/types/index.mjs.map +0 -7
- package/dist/types/src/capabilities/navigation-resolver.d.ts +0 -5
- package/dist/types/src/capabilities/navigation-resolver.d.ts.map +0 -1
- package/dist/types/src/operations/curate-magazine.skill.test.d.ts +0 -2
- package/dist/types/src/operations/curate-magazine.skill.test.d.ts.map +0 -1
- package/src/capabilities/navigation-resolver.ts +0 -21
- package/src/operations/curate-magazine.skill.conversations.json +0 -1
- 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": ";;;AAIA,SAASA,MAAMC,uBAAuB;AACtC,OAAOC,UAASC,aAAaC,YAAYC,WAAWC,SAASC,cAAc;AAE3E,SAASC,2BAA2B;AAEpC,SAASC,QAAQC,KAAKC,WAAW;AACjC,SAASC,WAAW;AACpB,SAASC,WAAWC,gBAAgB;AACpC,SAASC,SAAAA,cAAa;AACtB,SAASC,aAAaC,uBAAuB;AAE7C,SAASC,0BAA0B;AACnC,SAASC,mBAAmB;AAC5B,SAASC,QAAAA,aAAY;AACrB,SAASC,qBAAqB;AAC9B,SAASC,oBAAoB;;;ACd7B,OAAOC,WAAW;AAElB,SAASC,aAAa;AACtB,SAASC,MAAMC,aAAaC,sBAAsB;AAElD,SAASC,cAAcC,oBAAoB;AAC3C,SAASC,YAAY;AAqBd,IAAMC,cAAc,CAAC,EAC1BC,MACAC,gBACAC,cACAC,cACAC,eACAC,cACAC,WACAC,eAAc,MACG;AACjB,QAAMC,cAAcb,eAClB,CAACc,QAAAA;AACC,UAAM,EAAEC,SAASC,SAAQ,IAAKF,IAAIZ,aAAaG,IAAAA,CAAAA;AAC/C,UAAM,EAAEY,OAAM,IAAKH,IAAIb,aAAaI,IAAAA,CAAAA;AACpC,UAAMa,OAAOD,WAAWE;AACxB,UAAMC,aAAaN,IAAIR,cAAAA;AACvB,UAAMe,UAAUC,QAAQjB,KAAKkB,IAAI;AAEjC,WACExB,YAAYyB,KAAI,EACbC,OACC,QACA;MACEC,OAAO;QAACX,UAAU,sBAAsB;QAAmB;UAAEY,IAAIxB,KAAKyB,QAAQC;QAAI;;MAClFC,MAAMf,UAAU,mBAAmB;MACnCgB,UAAU;IACZ,GACA,MAAMvB,aAAa,CAACO,OAAAA,CAAAA,EAErBU,OACC,WACA;MACEC,OAAO;QAACV,WAAW,yBAAyB;QAAsB;UAAEW,IAAIxB,KAAKyB,QAAQC;QAAI;;MACzFC,MAAMd,WAAW,sBAAsB;MACvCe,UAAU;IACZ,GACA,MAAMtB,cAAc,CAACO,QAAAA,CAAAA,EAEtBS,OACC,eACA;MACEC,OAAO;QAAC;QAAqB;UAAEC,IAAIxB,KAAKyB,QAAQC;QAAI;;MACpDC,MAAM;MACNC,UAAU;MACVC,QAAQ,CAACd;IACX,GACAR,YAAAA,EAGDuB,UAAU,KAAA,EACVR,OACC,WACA;MACEC,OAAO;QAACN,aAAa,kCAAkC;QAAyB;UAAEO,IAAIxB,KAAKyB,QAAQC;QAAI;;MACvGC,MAAM;MACNI,gBAAgBd,aAAa,iBAAiBD;MAC9CY,UAAU;MACVI,UAAUf;MACVY,QAAQ,CAACX;IACX,GACAV,SAAAA,EAEDc,OACC,iBACA;MACEC,OAAO;QAAC;QAAuB;UAAEC,IAAIxB,KAAKyB,QAAQC;QAAI;;MACtDC,MAAM;MACNC,UAAU;MACVC,QAAQ,CAACX;IACX,GACAT,cAAAA,EAEDwB,MAAK;EAEZ,GACA;IAAC/B;IAAMC;IAAgBE;IAAcC;IAAeC;IAAcC;IAAWC;GAAe;AAG9F,SACE,sBAAA,cAACd,KAAKuC,MAAI;IAAE,GAAGxB;IAAaN;KAC1B,sBAAA,cAACV,MAAMyC,SAAO;IAACC,SAAAA;KACb,sBAAA,cAACzC,KAAKwC,SAAO,IAAA,CAAA,CAAA;AAIrB;AAEAlC,YAAYoC,cAAc;;;AD9F1B,IAAA,eAAaC;AAEX,IAAA,cAAA,CAAA,EAAA,MAAA,SAAA,aAAA,MAAA;AAGA,QAAMC,sBAAsBC,gBAAAA,gBAAAA,YAAAA,IAAAA,YAAAA,YAAAA,IAAAA;AAC5B,QAAM,EAACC,cAAQC,IAAUC,oBAAAA;AACzB,QAAMC,WAASC,WAAYJ,eAAAA;AAC3B,QAAMK,CAAAA,IAAAA,IAAAA,UAAeL,OAAW;AAChC,QAAM,KAAI,IAAKA,YAAAA,IAAAA;AACf,QAAMM,eAAcC,KAAAA,QAAAA;AAEpB,QAAA,EAAA,GAAA,IAAA;AACA,QAAA,cAAA,mBAAA,OAAA;QAME,sBAAwBC,OAAO,MAAS;YACtC,MAAA;AACF,QAAA,oBAAA,YAAA,IAAA;AACI;;AAEJ,QAAA,CAAA,KAAA,QAAA,aAAA;AACAC;IACA;wBAAmEP,UAAAA;AAAS,SAAGQ,cAC7EC,cAAe,iBAAA;YAAEC,IAAAA,KAAUZ,OAAKa;aAAK,CAAA,QAAA,IAAA,MAAA,KAAA;MAEtC,UAAA,KAAA;IAACX,GAAAA,EAAAA,YAAAA,YAAAA,GAAAA,cAAAA,GAAAA,IAAAA,GAAAA,OAAAA,CAAAA,CAAAA;;IAAeF;IAAWM;IAAaQ,KAAAA;IAAeC;IAAG;IAE7D;EACA,CAAA;QAIE,WAAYf,SAAKgB,IAAQC,OAAAA,KAAAA,aAAAA,YAAAA,CAAAA;QACzB,WAAU,QAAA,MAAA;UACR,MAAOC,KAAAA,QAAAA;AACT,QAAA,CAAA,KAAA;AACA,aAAOC;IACN;AAACnB,WAAKgB,SAAM,KAAA,CAAA,SAAA,IAAA,OAAA,IAAA,MAAA,GAAA,GAAA;;IAAW,KAAA;IAE1B;;6BAEqBH,YAAM,MAAU;AACnC,QAAA,KAAA,MAAA;AACC,aAAA,KAAA,KAAA,MAAA,UAAA,qBAAA;IAACb;KAAU;IAEd,KAAMoB;;2BAEWC,YAAUhB,MAAAA;AACzB,QAAA,cAAA;AACC,mBAAA,UAAA,cAAA,IAAA,MAAA;IAACA;;IAAiB;IAErB;EACA,CAAA;4BAIwBiB,YAAOjB,CAAAA,UAAcU;AACzC,QAAA,MAAA,cAAA;AAEF,WAAA,aAAA,OAAA,cAAA,IAAA,IAAA,YAAA,KAAA;IAACZ;;IAAkBY;IAAG;IAGxB;;2BAGWQ,YAAoBlB,CAAAA,UAAAA;AAC3B,QAAA,MAAA,cAAA;AAEF,WAAA,aAAA,OAAA,cAAA,IAAA,IAAA,WAAA,KAAA;IAACF;;IAAkBY;IAAG;IAGxB;EACA,CAAA;QAKE,iBAAkBjB,QAAS0B,MAAIC,KAAAA,KAAAA,KAAAA,GAAiB,CAAA,CAAA;wBAC9C,YAAA,YAAA;AACF,QAAA,CAAA,KAAA,QAAA,SAAA,IAAA,cAAA,GAAA;AACA3B;IACA;aACE,IAAA,gBAAA,IAAA;QACA;YAE6B4B,cAAO,cAAA,iBAAA;QAClC,MAAA,IAAA,KAAA,OAAA;QAAEC,OAAAA;;gBAAkB;iBAAiC;;YAAuB;cAAE,IAAAC,MAAA,QAAA;YAAC;UAAE;QAErF;MACE9B,CAAAA;IACF,UAAA;AACC,eAAA,IAAA,gBAAA,KAAA;IAACA;;IAA0BI;IAASF;IAAWc;IAAc,KAAA;IAEhE;;SAEI,gBAAAe,OAAA,cAACC,OAAAA,MAAAA;IACC9B;KACAyB,gBAAAA,OAAgBA,cAAAA,aAAAA;IAChBM,MAAAA;IACAC;IACAC,cAAAA;IACAC,cAAcd;IACde,eAAiB;IACjBC,cAAAA;qBAEF,KAAA,cAACC;IAAcC,gBAAAA;MACb,gBAAAT,OAAA,cAACU,OAAAA,SAAAA;IAAYvC,SAAME;KAAmBsC,gBAAAA,OAAAA,cAAW,aAAA;UAACA;cAAYtB,WAAAA;;IAIpE,IAAA;;;",
|
|
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
|
-
}
|