@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.
- 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
package/dx.config.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/plugin-magazine",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.1",
|
|
4
4
|
"description": "Magazine plugin for RSS and open protocol subscriptions.",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -16,37 +16,37 @@
|
|
|
16
16
|
"#atoms": {
|
|
17
17
|
"source": "./src/atoms/index.ts",
|
|
18
18
|
"types": "./dist/types/src/atoms/index.d.ts",
|
|
19
|
-
"default": "./dist/lib/
|
|
19
|
+
"default": "./dist/lib/atoms.mjs"
|
|
20
20
|
},
|
|
21
21
|
"#skills": {
|
|
22
22
|
"source": "./src/skills/index.ts",
|
|
23
23
|
"types": "./dist/types/src/skills/index.d.ts",
|
|
24
|
-
"default": "./dist/lib/
|
|
24
|
+
"default": "./dist/lib/skills.mjs"
|
|
25
25
|
},
|
|
26
26
|
"#capabilities": {
|
|
27
27
|
"source": "./src/capabilities/index.ts",
|
|
28
28
|
"types": "./dist/types/src/capabilities/index.d.ts",
|
|
29
|
-
"default": "./dist/lib/
|
|
29
|
+
"default": "./dist/lib/capabilities.mjs"
|
|
30
30
|
},
|
|
31
31
|
"#components": {
|
|
32
32
|
"source": "./src/components/index.ts",
|
|
33
33
|
"types": "./dist/types/src/components/index.d.ts",
|
|
34
|
-
"default": "./dist/lib/
|
|
34
|
+
"default": "./dist/lib/components.mjs"
|
|
35
35
|
},
|
|
36
36
|
"#containers": {
|
|
37
37
|
"source": "./src/containers/index.ts",
|
|
38
38
|
"types": "./dist/types/src/containers/index.d.ts",
|
|
39
|
-
"default": "./dist/lib/
|
|
39
|
+
"default": "./dist/lib/containers.mjs"
|
|
40
40
|
},
|
|
41
41
|
"#meta": {
|
|
42
42
|
"source": "./src/meta.ts",
|
|
43
43
|
"types": "./dist/types/src/meta.d.ts",
|
|
44
|
-
"default": "./dist/lib/
|
|
44
|
+
"default": "./dist/lib/meta.mjs"
|
|
45
45
|
},
|
|
46
46
|
"#operations": {
|
|
47
47
|
"source": "./src/operations/index.ts",
|
|
48
48
|
"types": "./dist/types/src/operations/index.d.ts",
|
|
49
|
-
"default": "./dist/lib/
|
|
49
|
+
"default": "./dist/lib/operations.mjs"
|
|
50
50
|
},
|
|
51
51
|
"#plugin": {
|
|
52
52
|
"source": {
|
|
@@ -54,41 +54,37 @@
|
|
|
54
54
|
"default": "./src/MagazinePlugin.tsx"
|
|
55
55
|
},
|
|
56
56
|
"types": "./dist/types/src/MagazinePlugin.d.ts",
|
|
57
|
-
"workerd": "./dist/lib/
|
|
58
|
-
"default": "./dist/lib/
|
|
57
|
+
"workerd": "./dist/lib/MagazinePlugin.workerd.mjs",
|
|
58
|
+
"default": "./dist/lib/MagazinePlugin.mjs"
|
|
59
59
|
},
|
|
60
60
|
"#testing": "./src/testing/index.ts",
|
|
61
61
|
"#translations": {
|
|
62
62
|
"source": "./src/translations.ts",
|
|
63
63
|
"types": "./dist/types/src/translations.d.ts",
|
|
64
|
-
"default": "./dist/lib/
|
|
64
|
+
"default": "./dist/lib/translations.mjs"
|
|
65
65
|
},
|
|
66
66
|
"#types": {
|
|
67
67
|
"source": "./src/types/index.ts",
|
|
68
68
|
"types": "./dist/types/src/types/index.d.ts",
|
|
69
|
-
"default": "./dist/lib/
|
|
69
|
+
"default": "./dist/lib/types.mjs"
|
|
70
70
|
}
|
|
71
71
|
},
|
|
72
72
|
"exports": {
|
|
73
73
|
".": {
|
|
74
74
|
"source": "./src/index.ts",
|
|
75
75
|
"types": "./dist/types/src/index.d.ts",
|
|
76
|
-
"
|
|
76
|
+
"import": "./dist/lib/index.mjs"
|
|
77
77
|
},
|
|
78
78
|
"./assets/PLUGIN.mdl": "./PLUGIN.mdl",
|
|
79
79
|
"./plugin": {
|
|
80
|
-
"source":
|
|
81
|
-
"workerd": "./src/plugin.workerd.ts",
|
|
82
|
-
"default": "./src/plugin.ts"
|
|
83
|
-
},
|
|
80
|
+
"source": "./src/plugin.ts",
|
|
84
81
|
"types": "./dist/types/src/plugin.d.ts",
|
|
85
|
-
"
|
|
86
|
-
"default": "./dist/lib/neutral/plugin.mjs"
|
|
82
|
+
"import": "./dist/lib/plugin.mjs"
|
|
87
83
|
},
|
|
88
84
|
"./translations": {
|
|
89
85
|
"source": "./src/translations.ts",
|
|
90
86
|
"types": "./dist/types/src/translations.d.ts",
|
|
91
|
-
"
|
|
87
|
+
"import": "./dist/lib/translations.mjs"
|
|
92
88
|
}
|
|
93
89
|
},
|
|
94
90
|
"types": "dist/types/src/index.d.ts",
|
|
@@ -99,37 +95,38 @@
|
|
|
99
95
|
"PLUGIN.mdl"
|
|
100
96
|
],
|
|
101
97
|
"dependencies": {
|
|
98
|
+
"@effect-atom/atom": "^0.5.3",
|
|
102
99
|
"@effect-atom/atom-react": "^0.5.0",
|
|
103
100
|
"@effect/platform": "0.96.2",
|
|
104
101
|
"date-fns": "^3.6.0",
|
|
105
102
|
"defuddle": "^0.18.1",
|
|
106
103
|
"fast-xml-parser": "^5.5.9",
|
|
107
|
-
"@dxos/app-
|
|
108
|
-
"@dxos/
|
|
109
|
-
"@dxos/
|
|
110
|
-
"@dxos/
|
|
111
|
-
"@dxos/compute": "0.
|
|
112
|
-
"@dxos/echo": "0.
|
|
113
|
-
"@dxos/
|
|
114
|
-
"@dxos/
|
|
115
|
-
"@dxos/invariant": "0.
|
|
116
|
-
"@dxos/keys": "0.
|
|
117
|
-
"@dxos/log": "0.
|
|
118
|
-
"@dxos/
|
|
119
|
-
"@dxos/
|
|
120
|
-
"@dxos/plugin-
|
|
121
|
-
"@dxos/plugin-
|
|
122
|
-
"@dxos/plugin-routine": "0.
|
|
123
|
-
"@dxos/plugin-
|
|
124
|
-
"@dxos/
|
|
125
|
-
"@dxos/react-ui-attention": "0.
|
|
126
|
-
"@dxos/react-
|
|
127
|
-
"@dxos/react-ui-
|
|
128
|
-
"@dxos/react-ui-
|
|
129
|
-
"@dxos/
|
|
130
|
-
"@dxos/
|
|
131
|
-
"@dxos/
|
|
132
|
-
"@dxos/util": "0.
|
|
104
|
+
"@dxos/app-framework": "0.11.1",
|
|
105
|
+
"@dxos/app-toolkit": "0.11.1",
|
|
106
|
+
"@dxos/assistant-toolkit": "0.11.1",
|
|
107
|
+
"@dxos/client": "0.11.1",
|
|
108
|
+
"@dxos/compute": "0.11.1",
|
|
109
|
+
"@dxos/echo": "0.11.1",
|
|
110
|
+
"@dxos/echo-react": "0.11.1",
|
|
111
|
+
"@dxos/effect": "0.11.1",
|
|
112
|
+
"@dxos/invariant": "0.11.1",
|
|
113
|
+
"@dxos/keys": "0.11.1",
|
|
114
|
+
"@dxos/log": "0.11.1",
|
|
115
|
+
"@dxos/markdown": "0.11.1",
|
|
116
|
+
"@dxos/plugin-attention": "0.11.1",
|
|
117
|
+
"@dxos/plugin-client": "0.11.1",
|
|
118
|
+
"@dxos/plugin-graph": "0.11.1",
|
|
119
|
+
"@dxos/plugin-routine": "0.11.1",
|
|
120
|
+
"@dxos/plugin-assistant": "0.11.1",
|
|
121
|
+
"@dxos/plugin-space": "0.11.1",
|
|
122
|
+
"@dxos/react-ui-attention": "0.11.1",
|
|
123
|
+
"@dxos/react-client": "0.11.1",
|
|
124
|
+
"@dxos/react-ui-form": "0.11.1",
|
|
125
|
+
"@dxos/react-ui-markdown": "0.11.1",
|
|
126
|
+
"@dxos/react-ui-masonry": "0.11.1",
|
|
127
|
+
"@dxos/react-ui-menu": "0.11.1",
|
|
128
|
+
"@dxos/schema": "0.11.1",
|
|
129
|
+
"@dxos/util": "0.11.1"
|
|
133
130
|
},
|
|
134
131
|
"devDependencies": {
|
|
135
132
|
"@storybook/react-vite": "^10.4.2",
|
|
@@ -138,25 +135,25 @@
|
|
|
138
135
|
"effect": "3.21.4",
|
|
139
136
|
"react": "~19.2.7",
|
|
140
137
|
"react-dom": "~19.2.7",
|
|
141
|
-
"vite": "^8.
|
|
142
|
-
"@dxos/
|
|
143
|
-
"@dxos/ai": "0.
|
|
144
|
-
"@dxos/
|
|
145
|
-
"@dxos/
|
|
146
|
-
"@dxos/react-ui": "0.
|
|
147
|
-
"@dxos/
|
|
148
|
-
"@dxos/react-ui-mosaic": "0.
|
|
149
|
-
"@dxos/
|
|
150
|
-
"@dxos/
|
|
151
|
-
"@dxos/
|
|
138
|
+
"vite": "^8.1.4",
|
|
139
|
+
"@dxos/agent-runtime": "0.11.1",
|
|
140
|
+
"@dxos/ai": "0.11.1",
|
|
141
|
+
"@dxos/echo-client": "0.11.1",
|
|
142
|
+
"@dxos/random": "0.11.1",
|
|
143
|
+
"@dxos/react-ui": "0.11.1",
|
|
144
|
+
"@dxos/plugin-testing": "0.11.1",
|
|
145
|
+
"@dxos/react-ui-mosaic": "0.11.1",
|
|
146
|
+
"@dxos/react-ui-syntax-highlighter": "0.11.1",
|
|
147
|
+
"@dxos/storybook-utils": "0.11.1",
|
|
148
|
+
"@dxos/ui-theme": "0.11.1"
|
|
152
149
|
},
|
|
153
150
|
"peerDependencies": {
|
|
154
151
|
"effect": "3.21.4",
|
|
155
152
|
"react": "~19.2.7",
|
|
156
153
|
"react-dom": "~19.2.7",
|
|
157
|
-
"@dxos/react-ui": "0.
|
|
158
|
-
"@dxos/react-ui-mosaic": "0.
|
|
159
|
-
"@dxos/ui-theme": "0.
|
|
154
|
+
"@dxos/react-ui": "^0.11.1",
|
|
155
|
+
"@dxos/react-ui-mosaic": "^0.11.1",
|
|
156
|
+
"@dxos/ui-theme": "^0.11.1"
|
|
160
157
|
},
|
|
161
158
|
"publishConfig": {
|
|
162
159
|
"access": "public"
|
package/src/MagazinePlugin.tsx
CHANGED
|
@@ -6,13 +6,11 @@ import { ActivationEvent, Plugin } from '@dxos/app-framework';
|
|
|
6
6
|
import { AppActivationEvents, AppPlugin } from '@dxos/app-toolkit';
|
|
7
7
|
import { Instructions } from '@dxos/compute';
|
|
8
8
|
import { AttentionEvents } from '@dxos/plugin-attention';
|
|
9
|
-
import { ClientEvents } from '@dxos/plugin-client';
|
|
10
9
|
import { StateMap, TagIndex } from '@dxos/schema';
|
|
11
10
|
|
|
12
11
|
import {
|
|
13
12
|
AppGraphBuilder,
|
|
14
13
|
CreateObject,
|
|
15
|
-
NavigationResolver,
|
|
16
14
|
OperationHandler,
|
|
17
15
|
ReactSurface,
|
|
18
16
|
RoutineTemplates,
|
|
@@ -31,7 +29,6 @@ export const MagazinePlugin = Plugin.define(meta).pipe(
|
|
|
31
29
|
activate: AppGraphBuilder,
|
|
32
30
|
}),
|
|
33
31
|
AppPlugin.addCreateObjectModule({ activate: CreateObject }),
|
|
34
|
-
AppPlugin.addNavigationResolverModule({ activatesOn: ClientEvents.ClientReady, activate: NavigationResolver }),
|
|
35
32
|
AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),
|
|
36
33
|
AppPlugin.addPluginAssetModule({
|
|
37
34
|
asset: { pluginId: meta.profile.key, path: 'PLUGIN.mdl', content: pluginSpec, mimeType: 'application/x-mdl' },
|
package/src/atoms/atoms.test.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2026 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { Registry } from '@effect-atom/atom
|
|
5
|
+
import { Registry } from '@effect-atom/atom';
|
|
6
6
|
import * as Data from 'effect/Data';
|
|
7
7
|
import { afterEach, beforeEach, describe, test } from 'vitest';
|
|
8
8
|
|
|
@@ -117,9 +117,10 @@ describe('postTagsAtom', () => {
|
|
|
117
117
|
|
|
118
118
|
await Subscription.setTag(subscription, post.id, db, 'starred', true);
|
|
119
119
|
await db.flush();
|
|
120
|
-
//
|
|
121
|
-
//
|
|
122
|
-
|
|
120
|
+
// At least one further fire carries the mutation; the exact count is not part of the contract —
|
|
121
|
+
// the update scheduler coalesces, so an intermediate re-run (Tag.Tag created, still
|
|
122
|
+
// starred=false) may or may not surface as its own notification.
|
|
123
|
+
expect(fireCount).toBeGreaterThan(1);
|
|
123
124
|
expect(registry.get(atom).starred).toBe(true);
|
|
124
125
|
});
|
|
125
126
|
|
|
@@ -2,18 +2,18 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { Atom } from '@effect-atom/atom
|
|
5
|
+
import { Atom } from '@effect-atom/atom';
|
|
6
6
|
import * as Effect from 'effect/Effect';
|
|
7
7
|
import * as Option from 'effect/Option';
|
|
8
8
|
|
|
9
9
|
import { Capability } from '@dxos/app-framework';
|
|
10
|
-
import { AppCapabilities, AppNode, AppNodeMatcher,
|
|
10
|
+
import { AppCapabilities, AppNode, AppNodeMatcher, GraphPath, TypeSection } from '@dxos/app-toolkit';
|
|
11
11
|
import { Operation } from '@dxos/compute';
|
|
12
12
|
import { Obj, Ref, Type } from '@dxos/echo';
|
|
13
13
|
import { AttentionCapabilities } from '@dxos/plugin-attention';
|
|
14
14
|
import { GraphBuilder } from '@dxos/plugin-graph';
|
|
15
15
|
import { SpaceOperation } from '@dxos/plugin-space';
|
|
16
|
-
import {
|
|
16
|
+
import { Selection } from '@dxos/react-ui-attention';
|
|
17
17
|
|
|
18
18
|
import { meta } from '#meta';
|
|
19
19
|
import { FeedOperation } from '#types';
|
|
@@ -26,7 +26,7 @@ export default Capability.makeModule(
|
|
|
26
26
|
const viewState = yield* Capability.get(AttentionCapabilities.ViewState);
|
|
27
27
|
const selectedId = Atom.family((nodeId: string) =>
|
|
28
28
|
Atom.make((get) => {
|
|
29
|
-
const selection = get(viewState.atom(
|
|
29
|
+
const selection = get(viewState.atom(Selection.aspect, nodeId));
|
|
30
30
|
return selection.mode === 'single' ? selection.id : undefined;
|
|
31
31
|
}),
|
|
32
32
|
);
|
|
@@ -34,7 +34,9 @@ export default Capability.makeModule(
|
|
|
34
34
|
const extensions = yield* Effect.all([
|
|
35
35
|
// Magazine type section in the content group.
|
|
36
36
|
TypeSection.createTypeSectionExtension(Magazine.Magazine, {
|
|
37
|
-
|
|
37
|
+
urlKey: 'magazine',
|
|
38
|
+
match: AppNodeMatcher.whenNavTreeGroup(GraphPath.GroupTypes.content),
|
|
39
|
+
groupSegment: GraphPath.GroupSegments.content,
|
|
38
40
|
createObject: (space) =>
|
|
39
41
|
Operation.invoke(SpaceOperation.OpenCreateObject, {
|
|
40
42
|
target: space.db,
|
|
@@ -86,7 +88,7 @@ export default Capability.makeModule(
|
|
|
86
88
|
}
|
|
87
89
|
return Effect.succeed([
|
|
88
90
|
AppNode.makeCompanion({
|
|
89
|
-
|
|
91
|
+
variant: 'post',
|
|
90
92
|
label: ['post-companion.label', { ns: meta.profile.key }],
|
|
91
93
|
icon: 'ph--article--regular',
|
|
92
94
|
data: post,
|
|
@@ -14,4 +14,3 @@ export const OperationHandler = Capability.lazy<OperationHandlerSet.OperationHan
|
|
|
14
14
|
() => import('./operation-handler'),
|
|
15
15
|
);
|
|
16
16
|
export const ReactSurface = Capability.lazy('ReactSurface', () => import('./react-surface'));
|
|
17
|
-
export const NavigationResolver = Capability.lazy('NavigationResolver', () => import('./navigation-resolver'));
|
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import * as Effect from 'effect/Effect';
|
|
6
|
-
import React from 'react';
|
|
7
6
|
|
|
8
7
|
import { Capabilities, Capability } from '@dxos/app-framework';
|
|
9
8
|
import { Surface } from '@dxos/app-framework/ui';
|
|
@@ -19,34 +18,33 @@ export default Capability.makeModule(() =>
|
|
|
19
18
|
Surface.create({
|
|
20
19
|
id: 'magazineArticle',
|
|
21
20
|
filter: AppSurface.object(AppSurface.Article, Magazine.Magazine),
|
|
22
|
-
component:
|
|
23
|
-
|
|
24
|
-
),
|
|
21
|
+
component: MagazineArticle,
|
|
22
|
+
props: ({ role, data: { subject, attendableId } }) => ({ role, subject, attendableId }),
|
|
25
23
|
}),
|
|
26
24
|
Surface.create({
|
|
27
25
|
id: 'feedArticle',
|
|
28
26
|
filter: AppSurface.object(AppSurface.Article, Subscription.Subscription),
|
|
29
|
-
component:
|
|
30
|
-
|
|
31
|
-
),
|
|
27
|
+
component: FeedArticle,
|
|
28
|
+
props: ({ role, data: { subject, attendableId } }) => ({ role, subject, attendableId }),
|
|
32
29
|
}),
|
|
33
30
|
Surface.create({
|
|
34
31
|
id: 'postArticle',
|
|
35
32
|
filter: AppSurface.object(AppSurface.Article, Subscription.Post),
|
|
36
|
-
component:
|
|
37
|
-
|
|
38
|
-
),
|
|
33
|
+
component: PostArticle,
|
|
34
|
+
props: ({ role, data: { subject, attendableId } }) => ({ role, subject, attendableId }),
|
|
39
35
|
}),
|
|
40
36
|
Surface.create({
|
|
41
37
|
id: 'postCard',
|
|
42
38
|
position: Position.first,
|
|
43
39
|
filter: AppSurface.object(AppSurface.CardContent, Subscription.Post),
|
|
44
|
-
component:
|
|
40
|
+
component: PostCard,
|
|
41
|
+
props: ({ role, data: { subject } }) => ({ role, subject }),
|
|
45
42
|
}),
|
|
46
43
|
Surface.create({
|
|
47
44
|
id: 'feedProperties',
|
|
48
45
|
filter: AppSurface.object(AppSurface.ObjectProperties, Subscription.Subscription),
|
|
49
|
-
component:
|
|
46
|
+
component: FeedProperties,
|
|
47
|
+
props: ({ data: { subject } }) => ({ subject }),
|
|
50
48
|
}),
|
|
51
49
|
]),
|
|
52
50
|
),
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import { describe, expect, test } from 'vitest';
|
|
6
6
|
|
|
7
|
-
import { dedupeImagesInMarkdown } from './
|
|
7
|
+
import { dedupeImagesInMarkdown } from './dedupe-images';
|
|
8
8
|
|
|
9
9
|
describe('dedupeImagesInMarkdown', () => {
|
|
10
10
|
test('strips an image whose URL matches the hero imageUrl', () => {
|
|
@@ -12,6 +12,7 @@ import { usePostContentAtom } from '#atoms';
|
|
|
12
12
|
import { Subscription } from '#types';
|
|
13
13
|
|
|
14
14
|
import { formatDate, getImageUrl } from '../../util';
|
|
15
|
+
import { contentHasImage, dedupeImagesInMarkdown } from './dedupe-images';
|
|
15
16
|
|
|
16
17
|
export type PostContentProps = {
|
|
17
18
|
/** Post to render. */
|
|
@@ -20,47 +21,6 @@ export type PostContentProps = {
|
|
|
20
21
|
metadata?: string[];
|
|
21
22
|
};
|
|
22
23
|
|
|
23
|
-
/**
|
|
24
|
-
* Strips images from a markdown string whose URL is already on the
|
|
25
|
-
* `excluded` list, AND drops any image that appears more than once. The
|
|
26
|
-
* hero `post.imageUrl` is added to `excluded` by the caller so the
|
|
27
|
-
* extracted article body doesn't re-render the same image immediately
|
|
28
|
-
* below the hero. Captures both Markdown image syntax (``) and inline HTML `<img>` tags that defuddle sometimes
|
|
30
|
-
* leaves behind.
|
|
31
|
-
*/
|
|
32
|
-
export const dedupeImagesInMarkdown = (markdown: string, excluded: ReadonlyArray<string | undefined>): string => {
|
|
33
|
-
const seen = new Set<string>();
|
|
34
|
-
for (const url of excluded) {
|
|
35
|
-
if (url) {
|
|
36
|
-
seen.add(url);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// Markdown image: `` or ``.
|
|
41
|
-
const markdownImg = /!\[[^\]]*\]\(\s*([^)\s]+)(?:\s+"[^"]*")?\s*\)/g;
|
|
42
|
-
// HTML image: `<img ... src="url" ...>`.
|
|
43
|
-
const htmlImg = /<img\b[^>]*\bsrc=["']([^"']+)["'][^>]*>/gi;
|
|
44
|
-
|
|
45
|
-
const dedupe = (input: string, regex: RegExp): string =>
|
|
46
|
-
input.replace(regex, (match, url) => {
|
|
47
|
-
if (typeof url !== 'string') {
|
|
48
|
-
return match;
|
|
49
|
-
}
|
|
50
|
-
if (seen.has(url)) {
|
|
51
|
-
return '';
|
|
52
|
-
}
|
|
53
|
-
seen.add(url);
|
|
54
|
-
return match;
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
return dedupe(dedupe(markdown, markdownImg), htmlImg);
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
/** Returns true if the markdown contains at least one Markdown or inline HTML image. */
|
|
61
|
-
export const contentHasImage = (markdown: string): boolean =>
|
|
62
|
-
/!\[[^\]]*\]\(\s*[^)\s]+/.test(markdown) || /<img\b[^>]*\bsrc=["'][^"']+["']/i.test(markdown);
|
|
63
|
-
|
|
64
24
|
/**
|
|
65
25
|
* Shared presentational layout for an article-style post.
|
|
66
26
|
* Render order: title → hero image → Markdown body (subscription contentFeed
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
// Kept out of `PostContent.tsx`: react-refresh only fast-refreshes a module whose
|
|
6
|
+
// exports are all components, so values exported beside them force a full page reload on
|
|
7
|
+
// every edit.
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Strips images from a markdown string whose URL is already on the
|
|
11
|
+
* `excluded` list, AND drops any image that appears more than once. The
|
|
12
|
+
* hero `post.imageUrl` is added to `excluded` by the caller so the
|
|
13
|
+
* extracted article body doesn't re-render the same image immediately
|
|
14
|
+
* below the hero. Captures both Markdown image syntax (``) and inline HTML `<img>` tags that defuddle sometimes
|
|
16
|
+
* leaves behind.
|
|
17
|
+
*/
|
|
18
|
+
export const dedupeImagesInMarkdown = (markdown: string, excluded: ReadonlyArray<string | undefined>): string => {
|
|
19
|
+
const seen = new Set<string>();
|
|
20
|
+
for (const url of excluded) {
|
|
21
|
+
if (url) {
|
|
22
|
+
seen.add(url);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Markdown image: `` or ``.
|
|
27
|
+
const markdownImg = /!\[[^\]]*\]\(\s*([^)\s]+)(?:\s+"[^"]*")?\s*\)/g;
|
|
28
|
+
// HTML image: `<img ... src="url" ...>`.
|
|
29
|
+
const htmlImg = /<img\b[^>]*\bsrc=["']([^"']+)["'][^>]*>/gi;
|
|
30
|
+
|
|
31
|
+
const dedupe = (input: string, regex: RegExp): string =>
|
|
32
|
+
input.replace(regex, (match, url) => {
|
|
33
|
+
if (typeof url !== 'string') {
|
|
34
|
+
return match;
|
|
35
|
+
}
|
|
36
|
+
if (seen.has(url)) {
|
|
37
|
+
return '';
|
|
38
|
+
}
|
|
39
|
+
seen.add(url);
|
|
40
|
+
return match;
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
return dedupe(dedupe(markdown, markdownImg), htmlImg);
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/** Returns true if the markdown contains at least one Markdown or inline HTML image. */
|
|
47
|
+
export const contentHasImage = (markdown: string): boolean =>
|
|
48
|
+
/!\[[^\]]*\]\(\s*[^)\s]+/.test(markdown) || /<img\b[^>]*\bsrc=["'][^"']+["']/i.test(markdown);
|
|
@@ -67,13 +67,13 @@ const DefaultStory = ({ feedUrl }: FeedArticleStoryProps) => {
|
|
|
67
67
|
const { feed, posts } = data;
|
|
68
68
|
|
|
69
69
|
return (
|
|
70
|
-
<Panel.Root role='article'
|
|
70
|
+
<Panel.Root role='article' classNames='dx-document'>
|
|
71
71
|
<Panel.Toolbar asChild>
|
|
72
72
|
<Toolbar.Root>
|
|
73
73
|
<Toolbar.Text>{feed.name}</Toolbar.Text>
|
|
74
74
|
</Toolbar.Root>
|
|
75
75
|
</Panel.Toolbar>
|
|
76
|
-
<Panel.Content>
|
|
76
|
+
<Panel.Content asChild>
|
|
77
77
|
<PostStack id='story-feed' posts={posts} currentId={currentPostId} onAction={handleAction} />
|
|
78
78
|
</Panel.Content>
|
|
79
79
|
</Panel.Root>
|
|
@@ -7,7 +7,7 @@ import React, { useCallback, useState } from 'react';
|
|
|
7
7
|
import { useOperationInvoker } from '@dxos/app-framework/ui';
|
|
8
8
|
import { type AppSurface } from '@dxos/app-toolkit/ui';
|
|
9
9
|
import { Filter, Obj, Query, Ref, Scope } from '@dxos/echo';
|
|
10
|
-
import { useObject, useQuery } from '@dxos/react
|
|
10
|
+
import { useObject, useQuery } from '@dxos/echo-react';
|
|
11
11
|
import { Panel } from '@dxos/react-ui';
|
|
12
12
|
|
|
13
13
|
import { PostStack, type PostStackAction } from '#components';
|
|
@@ -53,7 +53,7 @@ export const FeedArticle = ({ role, subject, attendableId }: FeedArticleProps) =
|
|
|
53
53
|
}, [subject, invokePromise]);
|
|
54
54
|
|
|
55
55
|
return (
|
|
56
|
-
<Panel.Root role={role}
|
|
56
|
+
<Panel.Root role={role} classNames='dx-document'>
|
|
57
57
|
<FeedToolbar attendableId={attendableId} onSync={handleSync} />
|
|
58
58
|
<Panel.Content asChild>
|
|
59
59
|
<PostStack
|
|
@@ -66,3 +66,5 @@ export const FeedArticle = ({ role, subject, attendableId }: FeedArticleProps) =
|
|
|
66
66
|
</Panel.Root>
|
|
67
67
|
);
|
|
68
68
|
};
|
|
69
|
+
|
|
70
|
+
FeedArticle.displayName = 'FeedArticle';
|
|
@@ -5,11 +5,11 @@
|
|
|
5
5
|
import React, { useCallback, useMemo, useState } from 'react';
|
|
6
6
|
|
|
7
7
|
import { useOperationInvoker } from '@dxos/app-framework/ui';
|
|
8
|
-
import {
|
|
8
|
+
import { GraphPath, LayoutOperation } from '@dxos/app-toolkit';
|
|
9
9
|
import { type AppSurface } from '@dxos/app-toolkit/ui';
|
|
10
10
|
import { Operation, Trigger } from '@dxos/compute';
|
|
11
11
|
import { Filter, Obj, Query, Ref } from '@dxos/echo';
|
|
12
|
-
import { useObject, useQuery } from '@dxos/react
|
|
12
|
+
import { useObject, useQuery } from '@dxos/echo-react';
|
|
13
13
|
import { IconButton, Input, useTranslation } from '@dxos/react-ui';
|
|
14
14
|
import { Form } from '@dxos/react-ui-form';
|
|
15
15
|
|
|
@@ -68,8 +68,8 @@ export const FeedProperties = ({ subject }: FeedPropertiesProps) => {
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
void invokePromise(LayoutOperation.Open, {
|
|
71
|
-
subject: [
|
|
72
|
-
workspace:
|
|
71
|
+
subject: [GraphPath.getSpacePath(db.spaceId, 'settings', 'org.dxos.plugin.routine.routines')],
|
|
72
|
+
workspace: GraphPath.getSpacePath(db.spaceId),
|
|
73
73
|
});
|
|
74
74
|
}, [invokePromise, db]);
|
|
75
75
|
|
|
@@ -105,3 +105,5 @@ const ensureSyncFeedOperation = async (db: NonNullable<ReturnType<typeof Obj.get
|
|
|
105
105
|
|
|
106
106
|
return db.add(Operation.serialize(FeedOperation.SyncFeed));
|
|
107
107
|
};
|
|
108
|
+
|
|
109
|
+
FeedProperties.displayName = 'FeedProperties';
|
|
@@ -11,11 +11,12 @@ import { withPluginManager } from '@dxos/app-framework/testing';
|
|
|
11
11
|
import { type Client } from '@dxos/client';
|
|
12
12
|
import { type Space } from '@dxos/client/echo';
|
|
13
13
|
import { Feed, Filter, Obj, Ref } from '@dxos/echo';
|
|
14
|
+
import { useQuery } from '@dxos/echo-react';
|
|
14
15
|
import { ClientPlugin } from '@dxos/plugin-client/testing';
|
|
15
16
|
import { initializeIdentity } from '@dxos/plugin-client/testing';
|
|
16
17
|
import { SpacePlugin } from '@dxos/plugin-space/testing';
|
|
17
18
|
import { StorybookPlugin, corePlugins } from '@dxos/plugin-testing';
|
|
18
|
-
import {
|
|
19
|
+
import { useSpaces } from '@dxos/react-client/echo';
|
|
19
20
|
import { Loading, withLayout } from '@dxos/react-ui/testing';
|
|
20
21
|
|
|
21
22
|
import { MagazineSkill } from '#skills';
|
|
@@ -6,13 +6,13 @@ import { useAtomValue } from '@effect-atom/atom-react';
|
|
|
6
6
|
import React, { useCallback, useEffect, useMemo } from 'react';
|
|
7
7
|
|
|
8
8
|
import { useOperationInvoker } from '@dxos/app-framework/ui';
|
|
9
|
-
import {
|
|
9
|
+
import { GraphPath, LayoutOperation } from '@dxos/app-toolkit';
|
|
10
10
|
import { type AppSurface, useShowItem } from '@dxos/app-toolkit/ui';
|
|
11
11
|
import { Obj, Ref } from '@dxos/echo';
|
|
12
|
+
import { useObject } from '@dxos/echo-react';
|
|
12
13
|
import { log } from '@dxos/log';
|
|
13
|
-
import { useObject } from '@dxos/react-client/echo';
|
|
14
14
|
import { Panel, useTranslation } from '@dxos/react-ui';
|
|
15
|
-
import {
|
|
15
|
+
import { Attention, useSelection } from '@dxos/react-ui-attention';
|
|
16
16
|
import { Masonry } from '@dxos/react-ui-masonry';
|
|
17
17
|
import { Menu } from '@dxos/react-ui-menu';
|
|
18
18
|
|
|
@@ -65,8 +65,8 @@ export const MagazineArticle = ({ role, subject, attendableId }: MagazineArticle
|
|
|
65
65
|
void showItem({
|
|
66
66
|
contextId: id,
|
|
67
67
|
selectionId: post.id,
|
|
68
|
-
companion: linkedSegment('post'),
|
|
69
|
-
path:
|
|
68
|
+
companion: Attention.linkedSegment('post'),
|
|
69
|
+
path: GraphPath.getObjectPathFromObject(subject),
|
|
70
70
|
});
|
|
71
71
|
},
|
|
72
72
|
[id, showItem, invoker, subject],
|
|
@@ -76,7 +76,7 @@ export const MagazineArticle = ({ role, subject, attendableId }: MagazineArticle
|
|
|
76
76
|
useEffect(() => {
|
|
77
77
|
if (noPosts) {
|
|
78
78
|
void invoker.invokePromise(LayoutOperation.UpdateCompanion, {
|
|
79
|
-
subject: linkedSegment('settings'),
|
|
79
|
+
subject: Attention.linkedSegment('settings'),
|
|
80
80
|
});
|
|
81
81
|
}
|
|
82
82
|
}, [noPosts, invoker]);
|
|
@@ -144,3 +144,5 @@ const TileAdapter = ({ data }: { data: TileData | undefined; index: number }) =>
|
|
|
144
144
|
/>
|
|
145
145
|
);
|
|
146
146
|
};
|
|
147
|
+
|
|
148
|
+
MagazineArticle.displayName = 'MagazineArticle';
|
|
@@ -86,3 +86,5 @@ export const MagazineTile = ({ post, magazine, current, onToggleStar, onOpen }:
|
|
|
86
86
|
/** Convenience: format a Post's published date the way the magazine view shows it. */
|
|
87
87
|
const formatPublished = (post: Obj.Snapshot<Subscription.Post>): string | undefined =>
|
|
88
88
|
post.published ? formatDate(post.published) : undefined;
|
|
89
|
+
|
|
90
|
+
MagazineTile.displayName = 'MagazineTile';
|