@dxos/plugin-crx 0.0.0 → 0.14.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/CrxCapabilities.mjs.map +1 -1
- package/dist/lib/capabilities.browser.mjs +39 -0
- package/dist/lib/capabilities.browser.mjs.map +1 -0
- package/dist/lib/capabilities.mjs +1 -3
- package/dist/lib/capabilities.mjs.map +1 -1
- package/dist/lib/capabilities.tauri.mjs +39 -0
- package/dist/lib/capabilities.tauri.mjs.map +1 -0
- package/dist/lib/chunk-PLUGIN.mjs +6 -0
- package/dist/lib/chunk-PLUGIN.mjs.map +1 -0
- package/dist/lib/chunk-install-page-actions.mjs +2 -2
- package/dist/lib/chunk-react-surface.mjs +2 -2
- package/dist/lib/chunk-react-surface.mjs.map +1 -1
- package/dist/lib/chunk-settings.mjs +2 -2
- package/dist/lib/chunk-settings.mjs.map +1 -1
- package/dist/lib/containers.mjs +12 -10
- package/dist/lib/containers.mjs.map +1 -1
- package/dist/lib/index.mjs +0 -1
- package/dist/lib/translations.mjs.map +1 -1
- package/dist/types/src/capabilities/gen/browser.d.ts +9 -0
- package/dist/types/src/capabilities/gen/browser.d.ts.map +1 -0
- package/dist/types/src/capabilities/gen/tauri.d.ts +9 -0
- package/dist/types/src/capabilities/gen/tauri.d.ts.map +1 -0
- package/dist/types/src/containers/CrxSettings/CrxSettings.d.ts +1 -1
- package/dist/types/src/containers/CrxSettings/CrxSettings.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +0 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/stories/Testbench.stories.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/CrxCapabilities.d.ts +1 -1
- package/dist/types/src/types/CrxCapabilities.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +27 -25
- package/src/capabilities/gen/browser.ts +54 -0
- package/src/capabilities/gen/tauri.ts +54 -0
- package/src/capabilities/react-surface.ts +2 -2
- package/src/capabilities/settings.ts +2 -2
- package/src/containers/CrxSettings/CrxSettings.stories.tsx +1 -1
- package/src/containers/CrxSettings/CrxSettings.tsx +15 -12
- package/src/index.ts +0 -1
- package/src/stories/Testbench.stories.tsx +4 -3
- package/src/translations.ts +2 -2
- package/src/types/CrxCapabilities.ts +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/plugin-crx",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"description": "Composer plugin for coordinating with the composer-crx browser extension.",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -10,19 +10,21 @@
|
|
|
10
10
|
},
|
|
11
11
|
"license": "FSL-1.1-Apache-2.0",
|
|
12
12
|
"author": "DXOS.org",
|
|
13
|
-
"sideEffects":
|
|
13
|
+
"sideEffects": false,
|
|
14
14
|
"type": "module",
|
|
15
15
|
"imports": {
|
|
16
16
|
"#capabilities": {
|
|
17
17
|
"source": {
|
|
18
18
|
"workerd": "./src/capabilities/gen/workerd.ts",
|
|
19
19
|
"node": "./src/capabilities/gen/node.ts",
|
|
20
|
-
"
|
|
20
|
+
"tauri": "./src/capabilities/gen/tauri.ts",
|
|
21
|
+
"browser": "./src/capabilities/gen/browser.ts"
|
|
21
22
|
},
|
|
22
23
|
"types": "./dist/types/src/capabilities/index.d.ts",
|
|
23
24
|
"workerd": "./dist/lib/capabilities.workerd.mjs",
|
|
24
25
|
"node": "./dist/lib/capabilities.node.mjs",
|
|
25
|
-
"
|
|
26
|
+
"tauri": "./dist/lib/capabilities.tauri.mjs",
|
|
27
|
+
"browser": "./dist/lib/capabilities.browser.mjs"
|
|
26
28
|
},
|
|
27
29
|
"#containers": {
|
|
28
30
|
"source": "./src/containers/index.ts",
|
|
@@ -126,35 +128,35 @@
|
|
|
126
128
|
"PLUGIN.mdl"
|
|
127
129
|
],
|
|
128
130
|
"dependencies": {
|
|
129
|
-
"effect": "4.0.0
|
|
130
|
-
"@dxos/app-framework": "0.
|
|
131
|
-
"@dxos/
|
|
132
|
-
"@dxos/
|
|
133
|
-
"@dxos/crx-protocol": "0.
|
|
134
|
-
"@dxos/echo": "0.
|
|
135
|
-
"@dxos/effect": "0.
|
|
136
|
-
"@dxos/
|
|
137
|
-
"@dxos/
|
|
138
|
-
"@dxos/
|
|
139
|
-
"@dxos/plugin-
|
|
140
|
-
"@dxos/
|
|
141
|
-
"@dxos/react-ui
|
|
142
|
-
"@dxos/
|
|
143
|
-
"@dxos/
|
|
144
|
-
"@dxos/
|
|
131
|
+
"effect": "4.0.0",
|
|
132
|
+
"@dxos/app-framework": "0.14.0",
|
|
133
|
+
"@dxos/app-toolkit": "0.14.0",
|
|
134
|
+
"@dxos/compute": "0.14.0",
|
|
135
|
+
"@dxos/crx-protocol": "0.14.0",
|
|
136
|
+
"@dxos/echo": "0.14.0",
|
|
137
|
+
"@dxos/effect": "0.14.0",
|
|
138
|
+
"@dxos/keys": "0.14.0",
|
|
139
|
+
"@dxos/log": "0.14.0",
|
|
140
|
+
"@dxos/plugin-client": "0.14.0",
|
|
141
|
+
"@dxos/plugin-markdown": "0.14.0",
|
|
142
|
+
"@dxos/plugin-space": "0.14.0",
|
|
143
|
+
"@dxos/react-ui": "0.14.0",
|
|
144
|
+
"@dxos/react-ui-form": "0.14.0",
|
|
145
|
+
"@dxos/types": "0.14.0",
|
|
146
|
+
"@dxos/util": "0.14.0"
|
|
145
147
|
},
|
|
146
148
|
"devDependencies": {
|
|
147
|
-
"@effect/atom-react": "4.0.0
|
|
148
|
-
"@storybook/react-vite": "^10.
|
|
149
|
+
"@effect/atom-react": "4.0.0",
|
|
150
|
+
"@storybook/react-vite": "^10.6.0",
|
|
149
151
|
"@types/react": "~19.2.17",
|
|
150
152
|
"react": "~19.2.7",
|
|
151
|
-
"vite": "^8.2.
|
|
153
|
+
"vite": "^8.2.2",
|
|
152
154
|
"vitest": "4.1.10",
|
|
153
|
-
"@dxos/random": "0.
|
|
155
|
+
"@dxos/random": "0.14.0"
|
|
154
156
|
},
|
|
155
157
|
"peerDependencies": {
|
|
156
158
|
"react": "~19.2.7",
|
|
157
|
-
"@dxos/react-ui": "^0.
|
|
159
|
+
"@dxos/react-ui": "^0.14.0"
|
|
158
160
|
},
|
|
159
161
|
"publishConfig": {
|
|
160
162
|
"access": "public"
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
// GENERATED by dx-plugin — do not edit. Sliced from ../index.ts for the 'browser' condition.
|
|
6
|
+
|
|
7
|
+
import * as ActivationEvents from '@dxos/app-framework/ActivationEvents';
|
|
8
|
+
import * as Capabilities from '@dxos/app-framework/Capabilities';
|
|
9
|
+
import * as Capability from '@dxos/app-framework/Capability';
|
|
10
|
+
import * as AppCapability from '@dxos/app-toolkit/AppCapability';
|
|
11
|
+
|
|
12
|
+
import { meta } from '#meta';
|
|
13
|
+
import { translations } from '#translations';
|
|
14
|
+
import { CrxCapabilities, CrxEvents } from '#types';
|
|
15
|
+
|
|
16
|
+
import pluginSpec from '../../../PLUGIN.mdl?raw';
|
|
17
|
+
|
|
18
|
+
export const CrxSettings = AppCapability.settings(() => import('../settings.ts'), {
|
|
19
|
+
activatesOn: ActivationEvents.Idle,
|
|
20
|
+
provides: [CrxCapabilities.Settings],
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
export const InstallPageActions = Capability.lazyModule(
|
|
24
|
+
'InstallPageActions',
|
|
25
|
+
{
|
|
26
|
+
requires: [Capabilities.OperationInvoker, Capabilities.AtomRegistry, CrxCapabilities.Settings],
|
|
27
|
+
provides: [],
|
|
28
|
+
activatesOn: CrxEvents.Start,
|
|
29
|
+
},
|
|
30
|
+
() => import('../install-page-actions.ts'),
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
export const OperationHandler = AppCapability.operationHandler(() => import('../operation-handler.ts'), {
|
|
34
|
+
activatesOn: ActivationEvents.Idle,
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
export const PageActionProvider = Capability.lazyModule(
|
|
38
|
+
'PageActionProvider',
|
|
39
|
+
{ provides: [CrxCapabilities.PageAction], activatesOn: CrxEvents.Start },
|
|
40
|
+
() => import('../page-action-provider.ts'),
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
export const PluginAsset = AppCapability.pluginAsset({
|
|
44
|
+
pluginId: meta.profile.key,
|
|
45
|
+
path: 'PLUGIN.mdl',
|
|
46
|
+
content: pluginSpec,
|
|
47
|
+
mimeType: 'application/x-mdl',
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
export const ReactSurface = AppCapability.surface(() => import('../react-surface.ts'), {
|
|
51
|
+
roles: ['org.dxos.role.article'],
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
export const Translations = AppCapability.translations(translations);
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
// GENERATED by dx-plugin — do not edit. Sliced from ../index.ts for the 'tauri' condition.
|
|
6
|
+
|
|
7
|
+
import * as ActivationEvents from '@dxos/app-framework/ActivationEvents';
|
|
8
|
+
import * as Capabilities from '@dxos/app-framework/Capabilities';
|
|
9
|
+
import * as Capability from '@dxos/app-framework/Capability';
|
|
10
|
+
import * as AppCapability from '@dxos/app-toolkit/AppCapability';
|
|
11
|
+
|
|
12
|
+
import { meta } from '#meta';
|
|
13
|
+
import { translations } from '#translations';
|
|
14
|
+
import { CrxCapabilities, CrxEvents } from '#types';
|
|
15
|
+
|
|
16
|
+
import pluginSpec from '../../../PLUGIN.mdl?raw';
|
|
17
|
+
|
|
18
|
+
export const CrxSettings = AppCapability.settings(() => import('../settings.ts'), {
|
|
19
|
+
activatesOn: ActivationEvents.Idle,
|
|
20
|
+
provides: [CrxCapabilities.Settings],
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
export const InstallPageActions = Capability.lazyModule(
|
|
24
|
+
'InstallPageActions',
|
|
25
|
+
{
|
|
26
|
+
requires: [Capabilities.OperationInvoker, Capabilities.AtomRegistry, CrxCapabilities.Settings],
|
|
27
|
+
provides: [],
|
|
28
|
+
activatesOn: CrxEvents.Start,
|
|
29
|
+
},
|
|
30
|
+
() => import('../install-page-actions.ts'),
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
export const OperationHandler = AppCapability.operationHandler(() => import('../operation-handler.ts'), {
|
|
34
|
+
activatesOn: ActivationEvents.Idle,
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
export const PageActionProvider = Capability.lazyModule(
|
|
38
|
+
'PageActionProvider',
|
|
39
|
+
{ provides: [CrxCapabilities.PageAction], activatesOn: CrxEvents.Start },
|
|
40
|
+
() => import('../page-action-provider.ts'),
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
export const PluginAsset = AppCapability.pluginAsset({
|
|
44
|
+
pluginId: meta.profile.key,
|
|
45
|
+
path: 'PLUGIN.mdl',
|
|
46
|
+
content: pluginSpec,
|
|
47
|
+
mimeType: 'application/x-mdl',
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
export const ReactSurface = AppCapability.surface(() => import('../react-surface.ts'), {
|
|
51
|
+
roles: ['org.dxos.role.article'],
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
export const Translations = AppCapability.translations(translations);
|
|
@@ -6,8 +6,8 @@ import * as Effect from 'effect/Effect';
|
|
|
6
6
|
|
|
7
7
|
import * as Capabilities from '@dxos/app-framework/Capabilities';
|
|
8
8
|
import * as Capability from '@dxos/app-framework/Capability';
|
|
9
|
-
import
|
|
10
|
-
import
|
|
9
|
+
import * as Surface from '@dxos/app-framework/Surface';
|
|
10
|
+
import * as AppSurface from '@dxos/app-toolkit/AppSurface';
|
|
11
11
|
|
|
12
12
|
import { CrxSettings } from '#containers';
|
|
13
13
|
import { meta } from '#meta';
|
|
@@ -6,7 +6,7 @@ import * as Effect from 'effect/Effect';
|
|
|
6
6
|
|
|
7
7
|
import * as Capability from '@dxos/app-framework/Capability';
|
|
8
8
|
import * as AppCapabilities from '@dxos/app-toolkit/AppCapabilities';
|
|
9
|
-
import
|
|
9
|
+
import * as KvsStore from '@dxos/effect/KvsStore';
|
|
10
10
|
|
|
11
11
|
import { meta } from '#meta';
|
|
12
12
|
import { CrxCapabilities, Settings } from '#types';
|
|
@@ -18,7 +18,7 @@ import { CrxCapabilities, Settings } from '#types';
|
|
|
18
18
|
*/
|
|
19
19
|
export default Capability.makeModule(() =>
|
|
20
20
|
Effect.sync(() => {
|
|
21
|
-
const settingsAtom =
|
|
21
|
+
const settingsAtom = KvsStore.make({
|
|
22
22
|
key: meta.profile.key,
|
|
23
23
|
schema: Settings.Settings,
|
|
24
24
|
defaultValue: () => Settings.defaults,
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { type Decorator, type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
|
-
import * as Atom from 'effect/
|
|
6
|
+
import * as Atom from 'effect/reactivity/Atom';
|
|
7
7
|
import React, { useEffect, useMemo } from 'react';
|
|
8
8
|
|
|
9
9
|
import { withPluginManager } from '@dxos/app-framework/testing';
|
|
@@ -4,10 +4,13 @@
|
|
|
4
4
|
|
|
5
5
|
import React, { useCallback, useState } from 'react';
|
|
6
6
|
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
7
|
+
import * as Hooks from '@dxos/app-framework/Hooks';
|
|
8
|
+
import type * as AppSurface from '@dxos/app-toolkit/AppSurface';
|
|
9
|
+
import * as SettingsScope from '@dxos/app-toolkit/SettingsScope';
|
|
10
10
|
import { Form } from '@dxos/react-ui-form';
|
|
11
|
+
import * as Button from '@dxos/react-ui/Button';
|
|
12
|
+
import * as UiHooks from '@dxos/react-ui/Hooks';
|
|
13
|
+
import * as Layout from '@dxos/react-ui/Layout';
|
|
11
14
|
|
|
12
15
|
import { meta } from '#meta';
|
|
13
16
|
import { Settings } from '#types';
|
|
@@ -27,8 +30,8 @@ export type CrxSettingsProps = AppSurface.SettingsData<{ readonly?: boolean }>;
|
|
|
27
30
|
* round-trip connection test against the extension's content relay.
|
|
28
31
|
*/
|
|
29
32
|
export const CrxSettings = ({ subject, readonly }: CrxSettingsProps) => {
|
|
30
|
-
const { t } = useTranslation(meta.profile.key);
|
|
31
|
-
const { settings, updateSettings } = useSettingsState<Settings.Settings>(subject.atom);
|
|
33
|
+
const { t } = UiHooks.useTranslation(meta.profile.key);
|
|
34
|
+
const { settings, updateSettings } = Hooks.useSettingsState<Settings.Settings>(subject.atom);
|
|
32
35
|
const [test, setTest] = useState<TestState>({ kind: 'idle' });
|
|
33
36
|
|
|
34
37
|
// Round-trip a ping to the extension and report its identity (or why it failed).
|
|
@@ -58,14 +61,14 @@ export const CrxSettings = ({ subject, readonly }: CrxSettingsProps) => {
|
|
|
58
61
|
<Form.FieldSet
|
|
59
62
|
label={meta.profile.name ?? meta.profile.key}
|
|
60
63
|
description={t('settings.description')}
|
|
61
|
-
actions={readonly ? undefined : <SettingsScope prefix={subject.prefix} />}
|
|
64
|
+
actions={readonly ? undefined : <SettingsScope.Root prefix={subject.prefix} />}
|
|
62
65
|
>
|
|
63
66
|
<Form.Fields />
|
|
64
67
|
</Form.FieldSet>
|
|
65
68
|
|
|
66
69
|
<Form.FieldSet label={t('test.title')}>
|
|
67
|
-
<Flex gap='sm'>
|
|
68
|
-
<
|
|
70
|
+
<Layout.Flex gap='sm'>
|
|
71
|
+
<Button.Root
|
|
69
72
|
disabled={test.kind === 'pending'}
|
|
70
73
|
icon='ph--plug--regular'
|
|
71
74
|
label={t('test.button.label')}
|
|
@@ -73,7 +76,7 @@ export const CrxSettings = ({ subject, readonly }: CrxSettingsProps) => {
|
|
|
73
76
|
/>
|
|
74
77
|
|
|
75
78
|
{/* role=status + aria-live so screen readers announce the async outcome. */}
|
|
76
|
-
<Flex align='center'>
|
|
79
|
+
<Layout.Flex align='center'>
|
|
77
80
|
<span
|
|
78
81
|
role='status'
|
|
79
82
|
aria-live='polite'
|
|
@@ -82,14 +85,14 @@ export const CrxSettings = ({ subject, readonly }: CrxSettingsProps) => {
|
|
|
82
85
|
? 'text-sm text-success-text'
|
|
83
86
|
: test.kind === 'error'
|
|
84
87
|
? 'text-sm text-error-text'
|
|
85
|
-
: 'text-sm text-
|
|
88
|
+
: 'text-sm text-fg-muted'
|
|
86
89
|
}
|
|
87
90
|
>
|
|
88
91
|
{test.kind === 'ok' || test.kind === 'error' ? test.message : ''}
|
|
89
92
|
{test.kind === 'pending' ? t('test.pending.message') : ''}
|
|
90
93
|
</span>
|
|
91
|
-
</Flex>
|
|
92
|
-
</Flex>
|
|
94
|
+
</Layout.Flex>
|
|
95
|
+
</Layout.Flex>
|
|
93
96
|
</Form.FieldSet>
|
|
94
97
|
</Form.Content>
|
|
95
98
|
</Form.Viewport>
|
package/src/index.ts
CHANGED
|
@@ -6,7 +6,8 @@ import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
|
6
6
|
import React, { useMemo } from 'react';
|
|
7
7
|
|
|
8
8
|
import { random } from '@dxos/random';
|
|
9
|
-
import
|
|
9
|
+
import * as Media from '@dxos/react-ui/Media';
|
|
10
|
+
import * as ScrollArea from '@dxos/react-ui/ScrollArea';
|
|
10
11
|
import { withLayout, withTheme } from '@dxos/react-ui/testing';
|
|
11
12
|
|
|
12
13
|
const DefaultStory = () => {
|
|
@@ -20,10 +21,10 @@ const DefaultStory = () => {
|
|
|
20
21
|
);
|
|
21
22
|
|
|
22
23
|
return (
|
|
23
|
-
<ScrollArea.Root
|
|
24
|
+
<ScrollArea.Root>
|
|
24
25
|
<ScrollArea.Viewport classNames='flex flex-col gap-2 py-3'>
|
|
25
26
|
<h1 className='text-2xl'>{title}</h1>
|
|
26
|
-
<Image src={image} alt={title} fit='cover' />
|
|
27
|
+
<Media.Image src={image} alt={title} fit='cover' />
|
|
27
28
|
{paragraphs.map((paragraph, index) => (
|
|
28
29
|
<p key={index}>{paragraph}</p>
|
|
29
30
|
))}
|
package/src/translations.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2026 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import type * as Theme from '@dxos/react-ui/Theme';
|
|
6
6
|
|
|
7
7
|
import { meta } from '#meta';
|
|
8
8
|
|
|
@@ -28,4 +28,4 @@ export const translations = [
|
|
|
28
28
|
},
|
|
29
29
|
},
|
|
30
30
|
},
|
|
31
|
-
] as const satisfies Resource[];
|
|
31
|
+
] as const satisfies Theme.Resource[];
|