@dxos/plugin-registry 0.8.4-main.c1de068 → 0.8.4-main.c4373fc

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/dist/lib/browser/{app-graph-builder-LKQBQDUA.mjs → app-graph-builder-5BKKIS5T.mjs} +26 -25
  2. package/dist/lib/browser/app-graph-builder-5BKKIS5T.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-AEBASNOI.mjs → chunk-MWZPWWWF.mjs} +2 -4
  4. package/dist/lib/browser/chunk-MWZPWWWF.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +6 -8
  6. package/dist/lib/browser/index.mjs.map +3 -3
  7. package/dist/lib/browser/{intent-resolver-W67CIJI3.mjs → intent-resolver-RUD6WFGT.mjs} +5 -5
  8. package/dist/lib/browser/{intent-resolver-W67CIJI3.mjs.map → intent-resolver-RUD6WFGT.mjs.map} +3 -3
  9. package/dist/lib/browser/meta.json +1 -1
  10. package/dist/lib/browser/{react-surface-3GNB7AOY.mjs → react-surface-FYRVOQGA.mjs} +30 -28
  11. package/dist/lib/browser/react-surface-FYRVOQGA.mjs.map +7 -0
  12. package/dist/types/src/RegistryPlugin.d.ts +1 -1
  13. package/dist/types/src/RegistryPlugin.d.ts.map +1 -1
  14. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  15. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  16. package/dist/types/src/capabilities/index.d.ts +3 -3
  17. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  18. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  19. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  20. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  21. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  22. package/dist/types/src/components/Icon.stories.d.ts +12 -4
  23. package/dist/types/src/components/Icon.stories.d.ts.map +1 -1
  24. package/dist/types/src/components/PluginDetail.d.ts.map +1 -1
  25. package/dist/types/src/components/PluginDetail.stories.d.ts +30 -5
  26. package/dist/types/src/components/PluginDetail.stories.d.ts.map +1 -1
  27. package/dist/types/src/components/PluginList.stories.d.ts +34 -8
  28. package/dist/types/src/components/PluginList.stories.d.ts.map +1 -1
  29. package/dist/types/src/components/RegistryContainer.d.ts.map +1 -1
  30. package/dist/types/src/meta.d.ts +0 -1
  31. package/dist/types/src/meta.d.ts.map +1 -1
  32. package/dist/types/src/types.d.ts +1 -1
  33. package/dist/types/src/types.d.ts.map +1 -1
  34. package/dist/types/tsconfig.tsbuildinfo +1 -1
  35. package/package.json +28 -28
  36. package/src/RegistryPlugin.tsx +23 -24
  37. package/src/capabilities/app-graph-builder.ts +22 -21
  38. package/src/capabilities/intent-resolver.ts +4 -4
  39. package/src/capabilities/react-surface.tsx +8 -13
  40. package/src/components/Icon.stories.tsx +10 -8
  41. package/src/components/PluginDetail.stories.tsx +9 -9
  42. package/src/components/PluginDetail.tsx +36 -34
  43. package/src/components/PluginItem.tsx +2 -2
  44. package/src/components/PluginList.stories.tsx +27 -26
  45. package/src/components/RegistryContainer.tsx +2 -2
  46. package/src/meta.ts +1 -3
  47. package/src/types.ts +1 -1
  48. package/dist/lib/browser/app-graph-builder-LKQBQDUA.mjs.map +0 -7
  49. package/dist/lib/browser/chunk-AEBASNOI.mjs.map +0 -7
  50. package/dist/lib/browser/react-surface-3GNB7AOY.mjs.map +0 -7
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-registry",
3
- "version": "0.8.4-main.c1de068",
3
+ "version": "0.8.4-main.c4373fc",
4
4
  "description": "Braneframe plugin gallery",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -10,6 +10,7 @@
10
10
  "type": "module",
11
11
  "exports": {
12
12
  ".": {
13
+ "source": "./src/index.ts",
13
14
  "types": "./dist/types/src/index.d.ts",
14
15
  "browser": "./dist/lib/browser/index.mjs"
15
16
  }
@@ -24,40 +25,39 @@
24
25
  ],
25
26
  "dependencies": {
26
27
  "@preact-signals/safe-react": "^0.9.0",
27
- "@dxos/app-framework": "0.8.4-main.c1de068",
28
- "@dxos/echo": "0.8.4-main.c1de068",
29
- "@dxos/invariant": "0.8.4-main.c1de068",
30
- "@dxos/echo-schema": "0.8.4-main.c1de068",
31
- "@dxos/live-object": "0.8.4-main.c1de068",
32
- "@dxos/plugin-observability": "0.8.4-main.c1de068",
33
- "@dxos/react-ui-form": "0.8.4-main.c1de068",
34
- "@dxos/plugin-graph": "0.8.4-main.c1de068",
35
- "@dxos/util": "0.8.4-main.c1de068",
36
- "@dxos/react-ui-stack": "0.8.4-main.c1de068"
28
+ "@dxos/invariant": "0.8.4-main.c4373fc",
29
+ "@dxos/live-object": "0.8.4-main.c4373fc",
30
+ "@dxos/echo": "0.8.4-main.c4373fc",
31
+ "@dxos/plugin-observability": "0.8.4-main.c4373fc",
32
+ "@dxos/app-framework": "0.8.4-main.c4373fc",
33
+ "@dxos/react-ui-form": "0.8.4-main.c4373fc",
34
+ "@dxos/react-ui-stack": "0.8.4-main.c4373fc",
35
+ "@dxos/util": "0.8.4-main.c4373fc",
36
+ "@dxos/plugin-graph": "0.8.4-main.c4373fc"
37
37
  },
38
38
  "devDependencies": {
39
- "@effect-rx/rx-react": "0.38.0",
40
- "@effect/platform": "0.89.0",
41
- "@phosphor-icons/react": "^2.1.5",
42
- "@types/react": "~18.2.0",
43
- "@types/react-dom": "~18.2.0",
44
- "effect": "3.17.0",
45
- "react": "~18.2.0",
46
- "react-dom": "~18.2.0",
47
- "vite": "5.4.7",
48
- "@dxos/react-ui": "0.8.4-main.c1de068",
49
- "@dxos/react-ui-theme": "0.8.4-main.c1de068",
50
- "@dxos/storybook-utils": "0.8.4-main.c1de068",
51
- "@dxos/random": "0.8.4-main.c1de068"
39
+ "@effect-rx/rx-react": "0.42.4",
40
+ "@effect/platform": "0.92.1",
41
+ "@phosphor-icons/react": "^2.1.10",
42
+ "@types/react": "~19.2.2",
43
+ "@types/react-dom": "~19.2.1",
44
+ "effect": "3.18.3",
45
+ "react": "~19.2.0",
46
+ "react-dom": "~19.2.0",
47
+ "vite": "7.1.9",
48
+ "@dxos/random": "0.8.4-main.c4373fc",
49
+ "@dxos/storybook-utils": "0.8.4-main.c4373fc",
50
+ "@dxos/react-ui-theme": "0.8.4-main.c4373fc",
51
+ "@dxos/react-ui": "0.8.4-main.c4373fc"
52
52
  },
53
53
  "peerDependencies": {
54
54
  "@effect-rx/rx-react": "^0.34.1",
55
55
  "@effect/platform": "^0.80.12",
56
56
  "effect": "^3.13.3",
57
- "react": "~18.2.0",
58
- "react-dom": "~18.2.0",
59
- "@dxos/react-ui": "0.8.4-main.c1de068",
60
- "@dxos/react-ui-theme": "0.8.4-main.c1de068"
57
+ "react": "^19.0.0",
58
+ "react-dom": "^19.0.0",
59
+ "@dxos/react-ui": "0.8.4-main.c4373fc",
60
+ "@dxos/react-ui-theme": "0.8.4-main.c4373fc"
61
61
  },
62
62
  "publishConfig": {
63
63
  "access": "public"
@@ -2,32 +2,31 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Capabilities, contributes, defineModule, definePlugin, Events } from '@dxos/app-framework';
5
+ import { Capabilities, Events, contributes, defineModule, definePlugin } from '@dxos/app-framework';
6
6
 
7
7
  import { AppGraphBuilder, IntentResolver, ReactSurface } from './capabilities';
8
8
  import { meta } from './meta';
9
9
  import { translations } from './translations';
10
10
 
11
- export const RegistryPlugin = () =>
12
- definePlugin(meta, [
13
- defineModule({
14
- id: `${meta.id}/module/translations`,
15
- activatesOn: Events.SetupTranslations,
16
- activate: () => contributes(Capabilities.Translations, translations),
17
- }),
18
- defineModule({
19
- id: `${meta.id}/module/react-surface`,
20
- activatesOn: Events.SetupReactSurface,
21
- activate: ReactSurface,
22
- }),
23
- defineModule({
24
- id: `${meta.id}/module/intent-resolver`,
25
- activatesOn: Events.SetupIntentResolver,
26
- activate: IntentResolver,
27
- }),
28
- defineModule({
29
- id: `${meta.id}/module/app-graph-builder`,
30
- activatesOn: Events.SetupAppGraph,
31
- activate: AppGraphBuilder,
32
- }),
33
- ]);
11
+ export const RegistryPlugin = definePlugin(meta, () => [
12
+ defineModule({
13
+ id: `${meta.id}/module/translations`,
14
+ activatesOn: Events.SetupTranslations,
15
+ activate: () => contributes(Capabilities.Translations, translations),
16
+ }),
17
+ defineModule({
18
+ id: `${meta.id}/module/react-surface`,
19
+ activatesOn: Events.SetupReactSurface,
20
+ activate: ReactSurface,
21
+ }),
22
+ defineModule({
23
+ id: `${meta.id}/module/intent-resolver`,
24
+ activatesOn: Events.SetupIntentResolver,
25
+ activate: IntentResolver,
26
+ }),
27
+ defineModule({
28
+ id: `${meta.id}/module/app-graph-builder`,
29
+ activatesOn: Events.SetupAppGraph,
30
+ activate: AppGraphBuilder,
31
+ }),
32
+ ]);
@@ -3,31 +3,32 @@
3
3
  //
4
4
 
5
5
  import { Rx } from '@effect-rx/rx-react';
6
- import { Option, pipe } from 'effect';
6
+ import * as Function from 'effect/Function';
7
+ import * as Option from 'effect/Option';
7
8
 
8
- import { Capabilities, contributes, createIntent, SettingsAction, type PluginContext } from '@dxos/app-framework';
9
+ import { Capabilities, type PluginContext, SettingsAction, contributes, createIntent } from '@dxos/app-framework';
9
10
  import { createExtension } from '@dxos/plugin-graph';
10
11
 
11
- import { REGISTRY_ID, REGISTRY_KEY, REGISTRY_PLUGIN } from '../meta';
12
+ import { REGISTRY_ID, REGISTRY_KEY, meta } from '../meta';
12
13
 
13
14
  export default (context: PluginContext) =>
14
15
  contributes(Capabilities.AppGraphBuilder, [
15
16
  createExtension({
16
- id: REGISTRY_PLUGIN,
17
+ id: meta.id,
17
18
  actions: (node) =>
18
19
  Rx.make((get) =>
19
- pipe(
20
+ Function.pipe(
20
21
  get(node),
21
22
  Option.flatMap((node) => (node.id === 'root' ? Option.some(node) : Option.none())),
22
23
  Option.map((node) => [
23
24
  {
24
- id: REGISTRY_PLUGIN,
25
+ id: meta.id,
25
26
  data: async () => {
26
27
  const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
27
28
  await dispatch(createIntent(SettingsAction.OpenPluginRegistry));
28
29
  },
29
30
  properties: {
30
- label: ['open plugin registry label', { ns: REGISTRY_PLUGIN }],
31
+ label: ['open plugin registry label', { ns: meta.id }],
31
32
  icon: 'ph--squares-four--regular',
32
33
  disposition: 'menu',
33
34
  },
@@ -38,18 +39,18 @@ export default (context: PluginContext) =>
38
39
  ),
39
40
  }),
40
41
  createExtension({
41
- id: REGISTRY_PLUGIN,
42
+ id: meta.id,
42
43
  connector: (node) =>
43
44
  Rx.make((get) =>
44
- pipe(
45
+ Function.pipe(
45
46
  get(node),
46
47
  Option.flatMap((node) => (node.id === 'root' ? Option.some(node) : Option.none())),
47
48
  Option.map((node) => [
48
49
  {
49
50
  id: REGISTRY_ID,
50
- type: REGISTRY_PLUGIN,
51
+ type: meta.id,
51
52
  properties: {
52
- label: ['plugin registry label', { ns: REGISTRY_PLUGIN }],
53
+ label: ['plugin registry label', { ns: meta.id }],
53
54
  icon: 'ph--squares-four--regular',
54
55
  disposition: 'pin-end',
55
56
  testId: 'treeView.pluginRegistry',
@@ -60,7 +61,7 @@ export default (context: PluginContext) =>
60
61
  type: 'category',
61
62
  data: `${REGISTRY_KEY}+all`,
62
63
  properties: {
63
- label: ['all plugins label', { ns: REGISTRY_PLUGIN }],
64
+ label: ['all plugins label', { ns: meta.id }],
64
65
  icon: 'ph--squares-four--regular',
65
66
  key: REGISTRY_KEY,
66
67
  testId: 'pluginRegistry.all',
@@ -71,7 +72,7 @@ export default (context: PluginContext) =>
71
72
  type: 'category',
72
73
  data: `${REGISTRY_KEY}+installed`,
73
74
  properties: {
74
- label: ['installed plugins label', { ns: REGISTRY_PLUGIN }],
75
+ label: ['installed plugins label', { ns: meta.id }],
75
76
  icon: 'ph--check--regular',
76
77
  key: REGISTRY_KEY,
77
78
  testId: 'pluginRegistry.installed',
@@ -82,7 +83,7 @@ export default (context: PluginContext) =>
82
83
  type: 'category',
83
84
  data: `${REGISTRY_KEY}+recommended`,
84
85
  properties: {
85
- label: ['recommended plugins label', { ns: REGISTRY_PLUGIN }],
86
+ label: ['recommended plugins label', { ns: meta.id }],
86
87
  icon: 'ph--star--regular',
87
88
  key: REGISTRY_KEY,
88
89
  testId: 'pluginRegistry.recommended',
@@ -93,7 +94,7 @@ export default (context: PluginContext) =>
93
94
  type: 'category',
94
95
  data: `${REGISTRY_KEY}+labs`,
95
96
  properties: {
96
- label: ['labs plugins label', { ns: REGISTRY_PLUGIN }],
97
+ label: ['labs plugins label', { ns: meta.id }],
97
98
  icon: 'ph--flask--regular',
98
99
  key: REGISTRY_KEY,
99
100
  testId: 'pluginRegistry.labs',
@@ -107,18 +108,18 @@ export default (context: PluginContext) =>
107
108
  ),
108
109
  }),
109
110
  createExtension({
110
- id: `${REGISTRY_PLUGIN}/actions`,
111
+ id: `${meta.id}/actions`,
111
112
  actions: (node) =>
112
113
  Rx.make((get) =>
113
- pipe(
114
+ Function.pipe(
114
115
  get(node),
115
116
  Option.flatMap((node) => (node.id === REGISTRY_ID ? Option.some(node) : Option.none())),
116
117
  Option.map(() => [
117
118
  {
118
- id: `${REGISTRY_PLUGIN}/load-by-url`,
119
+ id: `${meta.id}/load-by-url`,
119
120
  data: async () => {},
120
121
  properties: {
121
- label: ['load by url label', { ns: REGISTRY_PLUGIN }],
122
+ label: ['load by url label', { ns: meta.id }],
122
123
  icon: 'ph--cloud-arrow-down--regular',
123
124
  disabled: true,
124
125
  },
@@ -129,10 +130,10 @@ export default (context: PluginContext) =>
129
130
  ),
130
131
  }),
131
132
  createExtension({
132
- id: `${REGISTRY_PLUGIN}/plugins`,
133
+ id: `${meta.id}/plugins`,
133
134
  connector: (node) =>
134
135
  Rx.make((get) =>
135
- pipe(
136
+ Function.pipe(
136
137
  get(node),
137
138
  Option.flatMap((node) => (node.id === REGISTRY_ID ? Option.some(node) : Option.none())),
138
139
  Option.map(() => {
@@ -3,12 +3,12 @@
3
3
  //
4
4
 
5
5
  import {
6
- contributes,
7
- SettingsAction,
8
- createResolver,
9
- LayoutAction,
10
6
  Capabilities,
7
+ LayoutAction,
8
+ SettingsAction,
9
+ contributes,
11
10
  createIntent,
11
+ createResolver,
12
12
  } from '@dxos/app-framework';
13
13
 
14
14
  import { REGISTRY_ID } from '../meta';
@@ -4,16 +4,15 @@
4
4
 
5
5
  import React, { useCallback, useMemo } from 'react';
6
6
 
7
- import { Capabilities, contributes, createSurface, Plugin, usePluginManager } from '@dxos/app-framework';
8
- import { StackItem } from '@dxos/react-ui-stack';
7
+ import { Capabilities, Plugin, contributes, createSurface, usePluginManager } from '@dxos/app-framework';
9
8
 
10
9
  import { PluginDetail, RegistryContainer } from '../components';
11
- import { REGISTRY_KEY, REGISTRY_PLUGIN } from '../meta';
10
+ import { REGISTRY_KEY, meta } from '../meta';
12
11
 
13
12
  export default () =>
14
13
  contributes(Capabilities.ReactSurface, [
15
14
  createSurface({
16
- id: `${REGISTRY_PLUGIN}/all`,
15
+ id: `${meta.id}/all`,
17
16
  role: 'article',
18
17
  filter: (data): data is any => data.subject === `${REGISTRY_KEY}+all`,
19
18
  component: () => {
@@ -24,7 +23,7 @@ export default () =>
24
23
  },
25
24
  }),
26
25
  createSurface({
27
- id: `${REGISTRY_PLUGIN}/installed`,
26
+ id: `${meta.id}/installed`,
28
27
  role: 'article',
29
28
  filter: (data): data is any => data.subject === `${REGISTRY_KEY}+installed`,
30
29
  component: () => {
@@ -41,7 +40,7 @@ export default () =>
41
40
  },
42
41
  }),
43
42
  createSurface({
44
- id: `${REGISTRY_PLUGIN}/recommended`,
43
+ id: `${meta.id}/recommended`,
45
44
  role: 'article',
46
45
  filter: (data): data is any => data.subject === `${REGISTRY_KEY}+recommended`,
47
46
  component: () => {
@@ -58,7 +57,7 @@ export default () =>
58
57
  },
59
58
  }),
60
59
  createSurface({
61
- id: `${REGISTRY_PLUGIN}/labs`,
60
+ id: `${meta.id}/labs`,
62
61
  role: 'article',
63
62
  filter: (data): data is any => data.subject === `${REGISTRY_KEY}+labs`,
64
63
  component: () => {
@@ -69,7 +68,7 @@ export default () =>
69
68
  },
70
69
  }),
71
70
  createSurface({
72
- id: `${REGISTRY_PLUGIN}/plugin-details`,
71
+ id: `${meta.id}/plugin-details`,
73
72
  role: 'article',
74
73
  filter: (data): data is { subject: Plugin } => data.subject instanceof Plugin,
75
74
  component: ({ data: { subject } }) => {
@@ -80,11 +79,7 @@ export default () =>
80
79
  [manager, subject.meta.id, enabled],
81
80
  );
82
81
 
83
- return (
84
- <StackItem.Content>
85
- <PluginDetail plugin={subject} enabled={enabled} onEnable={handleEnable} />
86
- </StackItem.Content>
87
- );
82
+ return <PluginDetail plugin={subject} enabled={enabled} onEnable={handleEnable} />;
88
83
  },
89
84
  }),
90
85
  ]);
@@ -2,13 +2,12 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
- import { IconBase, type IconWeight, type IconProps } from '@phosphor-icons/react';
8
- import { type Meta } from '@storybook/react-vite';
9
- import React, { forwardRef, type SVGProps, type ReactElement } from 'react';
5
+ import { IconBase, type IconProps, type IconWeight } from '@phosphor-icons/react';
6
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
7
+ import React, { type ReactElement, type SVGProps, forwardRef } from 'react';
10
8
 
11
9
  import { Icon } from '@dxos/react-ui';
10
+ import { withTheme } from '@dxos/react-ui/testing';
12
11
  import { getSize, mx } from '@dxos/react-ui-theme';
13
12
 
14
13
  /**
@@ -95,14 +94,17 @@ const DefaultStory = () => {
95
94
  );
96
95
  };
97
96
 
98
- export const Default = {};
97
+ export const Default: Story = {};
99
98
 
100
- const meta: Meta = {
99
+ const meta = {
101
100
  title: 'plugins/plugin-registry/Icon',
102
101
  render: DefaultStory,
102
+ decorators: [withTheme],
103
103
  parameters: {
104
104
  layout: 'centered',
105
105
  },
106
- };
106
+ } satisfies Meta<typeof IconBase>;
107
107
 
108
108
  export default meta;
109
+
110
+ type Story = StoryObj<typeof meta>;
@@ -2,28 +2,28 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
- import { type StoryObj, type Meta } from '@storybook/react-vite';
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
 
9
7
  import { faker } from '@dxos/random';
10
- import { withLayout, withTheme } from '@dxos/storybook-utils';
8
+ import { withTheme } from '@dxos/react-ui/testing';
11
9
 
12
- import { PluginDetail, type PluginDetailProps } from './PluginDetail';
13
10
  import { translations } from '../translations';
14
11
 
15
- const meta: Meta<PluginDetailProps> = {
12
+ import { PluginDetail } from './PluginDetail';
13
+
14
+ const meta = {
16
15
  title: 'plugins/plugin-registry/PluginDetail',
17
16
  component: PluginDetail,
18
- decorators: [withTheme, withLayout({ fullscreen: true, classNames: 'justify-center' })],
17
+ decorators: [withTheme],
19
18
  parameters: {
19
+ layout: 'column',
20
20
  translations,
21
21
  },
22
- };
22
+ } satisfies Meta<typeof PluginDetail>;
23
23
 
24
24
  export default meta;
25
25
 
26
- type Story = StoryObj<PluginDetailProps>;
26
+ type Story = StoryObj<typeof meta>;
27
27
 
28
28
  export const Default: Story = {
29
29
  args: {
@@ -6,9 +6,9 @@ import React from 'react';
6
6
 
7
7
  import { type Plugin } from '@dxos/app-framework';
8
8
  import { Icon, Input, Link, useTranslation } from '@dxos/react-ui';
9
- import { DeprecatedFormContainer } from '@dxos/react-ui-form';
9
+ import { StackItem } from '@dxos/react-ui-stack';
10
10
 
11
- import { REGISTRY_PLUGIN } from '../meta';
11
+ import { meta } from '../meta';
12
12
 
13
13
  export type PluginDetailProps = {
14
14
  plugin: Plugin;
@@ -17,47 +17,49 @@ export type PluginDetailProps = {
17
17
  };
18
18
 
19
19
  export const PluginDetail = ({ plugin, enabled, onEnable }: PluginDetailProps) => {
20
- const { t } = useTranslation(REGISTRY_PLUGIN);
20
+ const { t } = useTranslation(meta.id);
21
21
  const { id, name, description, homePage, source, screenshots } = plugin.meta;
22
22
 
23
23
  return (
24
- <DeprecatedFormContainer classNames='gap-6'>
25
- <div role='none' className='flex justify-between items-center'>
26
- <p>{id}</p>
27
- <Input.Root>
28
- <Input.Switch classNames='self-center' checked={enabled} onClick={onEnable} />
29
- </Input.Root>
30
- </div>
24
+ <StackItem.Content scrollable>
25
+ <div role='none' className='container-max-width p-4'>
26
+ <div role='none' className='flex justify-between items-center'>
27
+ <p>{id}</p>
28
+ <Input.Root>
29
+ <Input.Switch classNames='self-center' checked={enabled} onClick={onEnable} />
30
+ </Input.Root>
31
+ </div>
32
+
33
+ {screenshots && screenshots.length > 0 && (
34
+ <div role='none'>
35
+ <h1 className='text-lg mb-2'>Preview</h1>
36
+ <img src={screenshots[0]} alt={name} className='aspect-video object-fit' />
37
+ </div>
38
+ )}
31
39
 
32
- {screenshots && screenshots.length > 0 && (
33
40
  <div role='none'>
34
- <h1 className='text-lg mb-2'>Preview</h1>
35
- <img src={screenshots[0]} alt={name} className='aspect-video object-fit' />
41
+ <p>{description}</p>
36
42
  </div>
37
- )}
38
43
 
39
- <div role='none'>
40
- <p>{description}</p>
41
- </div>
44
+ <div role='none'>
45
+ <h1 className='text-lg mb-2'>Resources</h1>
46
+ <div className='flex gap-2'>
47
+ {homePage && (
48
+ <Link href={homePage} target='_blank' rel='noreferrer' classNames='text-sm text-description'>
49
+ {t('home page label')}
50
+ <Icon icon='ph--arrow-square-out--bold' size={3} classNames='inline-block leading-none mli-1' />
51
+ </Link>
52
+ )}
42
53
 
43
- <div role='none'>
44
- <h1 className='text-lg mb-2'>Resources</h1>
45
- <div className='flex gap-2'>
46
- {homePage && (
47
- <Link href={homePage} target='_blank' rel='noreferrer' classNames='text-sm text-description'>
48
- {t('home page label')}
49
- <Icon icon='ph--arrow-square-out--bold' size={3} classNames='inline-block leading-none mli-1' />
50
- </Link>
51
- )}
52
-
53
- {source && (
54
- <Link href={source} target='_blank' rel='noreferrer' classNames='text-sm text-description'>
55
- {t('source label')}
56
- <Icon icon='ph--arrow-square-out--bold' size={3} classNames='inline-block leading-none mli-1' />
57
- </Link>
58
- )}
54
+ {source && (
55
+ <Link href={source} target='_blank' rel='noreferrer' classNames='text-sm text-description'>
56
+ {t('source label')}
57
+ <Icon icon='ph--arrow-square-out--bold' size={3} classNames='inline-block leading-none mli-1' />
58
+ </Link>
59
+ )}
60
+ </div>
59
61
  </div>
60
62
  </div>
61
- </DeprecatedFormContainer>
63
+ </StackItem.Content>
62
64
  );
63
65
  };
@@ -8,7 +8,7 @@ import { type Plugin } from '@dxos/app-framework';
8
8
  import { Icon, IconButton, Input, Link, ListItem, Tag, useTranslation } from '@dxos/react-ui';
9
9
  import { descriptionText, mx } from '@dxos/react-ui-theme';
10
10
 
11
- import { REGISTRY_PLUGIN } from '../meta';
11
+ import { meta } from '../meta';
12
12
 
13
13
  export type PluginItemProps = {
14
14
  plugin: Plugin;
@@ -28,7 +28,7 @@ export const PluginItem = ({
28
28
  hasSettings: _hasSettings,
29
29
  onSettings,
30
30
  }: PluginItemProps) => {
31
- const { t } = useTranslation(REGISTRY_PLUGIN);
31
+ const { t } = useTranslation(meta.id);
32
32
  const { id, name, description, tags, icon = 'ph--circle--regular' } = plugin.meta;
33
33
  const isEnabled = enabled.includes(id);
34
34
  const inputId = `${id}-input`;
@@ -2,20 +2,19 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
- import { type Meta } from '@storybook/react-vite';
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
  import React, { useState } from 'react';
9
7
 
10
- import { definePlugin, type Plugin } from '@dxos/app-framework';
8
+ import { type Plugin, definePlugin } from '@dxos/app-framework';
11
9
  import { faker } from '@dxos/random';
12
10
  import { type ThemedClassName } from '@dxos/react-ui';
11
+ import { withTheme } from '@dxos/react-ui/testing';
13
12
  import { mx } from '@dxos/react-ui-theme';
14
- import { withTheme, withLayout } from '@dxos/storybook-utils';
15
13
 
16
- import { PluginList } from './PluginList';
17
14
  import { translations } from '../translations';
18
15
 
16
+ import { PluginList } from './PluginList';
17
+
19
18
  faker.seed(1);
20
19
 
21
20
  const icons = [
@@ -30,21 +29,20 @@ const icons = [
30
29
  const DefaultStory = ({ classNames }: ThemedClassName<{}>) => {
31
30
  const [plugins] = useState<Plugin[]>(
32
31
  faker.helpers.multiple(
33
- () =>
34
- definePlugin(
35
- {
36
- id: `dxos.org/plugin/plugin-${faker.string.uuid()}`,
37
- name: `${faker.commerce.productName()}`,
38
- description: faker.lorem.sentences(Math.ceil(Math.random() * 3)),
39
- tags: faker.datatype.boolean({ probability: 0.6 })
40
- ? [faker.helpers.arrayElement(['labs', 'beta', 'alpha', 'stable', 'new', '新発売'])]
41
- : undefined,
42
- icon: faker.helpers.arrayElement(icons),
43
- homePage: faker.datatype.boolean({ probability: 0.5 }) ? faker.internet.url() : undefined,
44
- source: faker.internet.url(),
45
- },
46
- [],
47
- ),
32
+ definePlugin(
33
+ {
34
+ id: `dxos.org/plugin/plugin-${faker.string.uuid()}`,
35
+ name: `${faker.commerce.productName()}`,
36
+ description: faker.lorem.sentences(Math.ceil(Math.random() * 3)),
37
+ tags: faker.datatype.boolean({ probability: 0.6 })
38
+ ? [faker.helpers.arrayElement(['labs', 'beta', 'alpha', 'stable', 'new', '新発売'])]
39
+ : undefined,
40
+ icon: faker.helpers.arrayElement(icons),
41
+ homePage: faker.datatype.boolean({ probability: 0.5 }) ? faker.internet.url() : undefined,
42
+ source: faker.internet.url(),
43
+ },
44
+ () => [],
45
+ ),
48
46
  { count: 16 },
49
47
  ),
50
48
  );
@@ -61,21 +59,24 @@ const DefaultStory = ({ classNames }: ThemedClassName<{}>) => {
61
59
  );
62
60
  };
63
61
 
64
- const meta: Meta = {
62
+ const meta = {
65
63
  title: 'plugins/plugin-registry/PluginList',
66
64
  component: PluginList,
67
65
  render: DefaultStory,
68
- decorators: [withTheme, withLayout({ fullscreen: true, classNames: 'justify-center' })],
66
+ decorators: [withTheme],
69
67
  parameters: {
68
+ layout: 'column',
70
69
  translations,
71
70
  },
72
- };
71
+ } satisfies Meta<typeof PluginList>;
73
72
 
74
73
  export default meta;
75
74
 
76
- export const Default = {};
75
+ type Story = StoryObj<typeof meta>;
76
+
77
+ export const Default: Story = {};
77
78
 
78
- export const Column = {
79
+ export const Column: Story = {
79
80
  args: {
80
81
  classNames: 'w-[30rem]',
81
82
  },