@dxos/plugin-registry 0.8.4-main.84f28bd → 0.8.4-main.ae835ea
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/browser/{app-graph-builder-LKQBQDUA.mjs → app-graph-builder-AOIN4N2Q.mjs} +26 -25
- package/dist/lib/browser/app-graph-builder-AOIN4N2Q.mjs.map +7 -0
- package/dist/lib/browser/chunk-XPEFEID2.mjs +19 -0
- package/dist/lib/browser/chunk-XPEFEID2.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +6 -8
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-W67CIJI3.mjs → intent-resolver-LKNUYBTN.mjs} +5 -5
- package/dist/lib/browser/{intent-resolver-W67CIJI3.mjs.map → intent-resolver-LKNUYBTN.mjs.map} +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-SRFVJQKE.mjs → react-surface-KP3NX4UD.mjs} +114 -92
- package/dist/lib/browser/react-surface-KP3NX4UD.mjs.map +7 -0
- package/dist/types/src/RegistryPlugin.d.ts +1 -1
- package/dist/types/src/RegistryPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +3 -3
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +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/components/PluginDetail.d.ts.map +1 -1
- package/dist/types/src/components/PluginDetail.stories.d.ts +29 -5
- package/dist/types/src/components/PluginDetail.stories.d.ts.map +1 -1
- package/dist/types/src/components/PluginItem.d.ts +1 -1
- package/dist/types/src/components/PluginItem.d.ts.map +1 -1
- package/dist/types/src/components/PluginList.d.ts.map +1 -1
- package/dist/types/src/components/PluginList.stories.d.ts +31 -8
- package/dist/types/src/components/PluginList.stories.d.ts.map +1 -1
- package/dist/types/src/components/RegistryContainer.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +0 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +3 -1
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +27 -29
- package/src/RegistryPlugin.tsx +23 -24
- package/src/capabilities/app-graph-builder.ts +22 -21
- package/src/capabilities/intent-resolver.ts +4 -4
- package/src/capabilities/react-surface.tsx +8 -13
- package/src/components/PluginDetail.stories.tsx +9 -9
- package/src/components/PluginDetail.tsx +53 -34
- package/src/components/PluginItem.tsx +53 -52
- package/src/components/PluginList.stories.tsx +25 -27
- package/src/components/PluginList.tsx +2 -4
- package/src/components/RegistryContainer.tsx +2 -2
- package/src/meta.ts +6 -3
- package/src/types.ts +5 -1
- package/dist/lib/browser/app-graph-builder-LKQBQDUA.mjs.map +0 -7
- package/dist/lib/browser/chunk-AEBASNOI.mjs +0 -16
- package/dist/lib/browser/chunk-AEBASNOI.mjs.map +0 -7
- package/dist/lib/browser/react-surface-SRFVJQKE.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-N44OGVQA.mjs +0 -162
- package/dist/lib/node-esm/app-graph-builder-N44OGVQA.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-R3GXMWPJ.mjs +0 -18
- package/dist/lib/node-esm/chunk-R3GXMWPJ.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -72
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-M2CBVUVQ.mjs +0 -24
- package/dist/lib/node-esm/intent-resolver-M2CBVUVQ.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/react-surface-5XAG2EYX.mjs +0 -336
- package/dist/lib/node-esm/react-surface-5XAG2EYX.mjs.map +0 -7
- package/dist/types/src/components/Icon.stories.d.ts +0 -6
- package/dist/types/src/components/Icon.stories.d.ts.map +0 -1
- package/src/components/Icon.stories.tsx +0 -107
|
@@ -5,10 +5,12 @@
|
|
|
5
5
|
import React, { type MouseEvent, useCallback } from 'react';
|
|
6
6
|
|
|
7
7
|
import { type Plugin } from '@dxos/app-framework';
|
|
8
|
-
import { Icon, IconButton, Input, Link, ListItem, Tag, useTranslation } from '@dxos/react-ui';
|
|
8
|
+
import { type ChromaticPalette, Icon, IconButton, Input, Link, ListItem, Tag, useTranslation } from '@dxos/react-ui';
|
|
9
9
|
import { descriptionText, mx } from '@dxos/react-ui-theme';
|
|
10
|
+
import { getStyles } from '@dxos/react-ui-theme';
|
|
10
11
|
|
|
11
|
-
import {
|
|
12
|
+
import { meta } from '../meta';
|
|
13
|
+
import { type RegistryTagType } from '../types';
|
|
12
14
|
|
|
13
15
|
export type PluginItemProps = {
|
|
14
16
|
plugin: Plugin;
|
|
@@ -25,11 +27,11 @@ export const PluginItem = ({
|
|
|
25
27
|
enabled = [],
|
|
26
28
|
onClick,
|
|
27
29
|
onChange,
|
|
28
|
-
hasSettings:
|
|
30
|
+
hasSettings: hasSettingsParam,
|
|
29
31
|
onSettings,
|
|
30
32
|
}: PluginItemProps) => {
|
|
31
|
-
const { t } = useTranslation(
|
|
32
|
-
const { id, name, description, tags, icon = 'ph--circle--regular' } = plugin.meta;
|
|
33
|
+
const { t } = useTranslation(meta.id);
|
|
34
|
+
const { id, name, description, tags, icon = 'ph--circle--regular', iconHue = 'neutral' } = plugin.meta;
|
|
33
35
|
const isEnabled = enabled.includes(id);
|
|
34
36
|
const inputId = `${id}-input`;
|
|
35
37
|
const labelId = `${id}-label`;
|
|
@@ -44,8 +46,11 @@ export const PluginItem = ({
|
|
|
44
46
|
[id, isEnabled, onChange],
|
|
45
47
|
);
|
|
46
48
|
|
|
47
|
-
const hasSettings =
|
|
49
|
+
const hasSettings = hasSettingsParam?.(id) ?? false;
|
|
48
50
|
const handleSettings = useCallback(() => onSettings?.(id), [id, onSettings]);
|
|
51
|
+
const styles = getStyles(iconHue);
|
|
52
|
+
const gridCols = 'grid grid-cols-[5rem_1fr]';
|
|
53
|
+
const gridRows = 'grid grid-rows-[40px_1fr_min-content_40px]';
|
|
49
54
|
|
|
50
55
|
return (
|
|
51
56
|
<ListItem.Root
|
|
@@ -53,67 +58,63 @@ export const PluginItem = ({
|
|
|
53
58
|
labelId={labelId}
|
|
54
59
|
data-testid={`pluginList.${id}`}
|
|
55
60
|
aria-describedby={descriptionId}
|
|
56
|
-
|
|
57
|
-
classNames='is-full bs-full grid grid-cols-[48px_1fr_48px] grid-rows-[40px_1fr_32px] p-1 border border-separator rounded-md'
|
|
61
|
+
classNames={mx(gridCols, 'bs-[12rem] is-full gap-3 pie-2 border border-separator rounded-md overflow-hidden')}
|
|
58
62
|
>
|
|
59
|
-
{
|
|
60
|
-
|
|
61
|
-
<Icon icon={icon} size={
|
|
62
|
-
</div>
|
|
63
|
-
<div className='flex items-center overflow-hidden cursor-pointer' onClick={handleClick}>
|
|
64
|
-
<span className='truncate'>{name ?? id}</span>
|
|
65
|
-
</div>
|
|
66
|
-
<div className='flex justify-center items-center'>
|
|
67
|
-
<Input.Root id={inputId}>
|
|
68
|
-
<Input.Switch classNames='self-center' checked={isEnabled} onClick={handleChange} />
|
|
69
|
-
</Input.Root>
|
|
63
|
+
<div className={mx(gridRows, 'justify-center rounded-l-md', styles.bg)}>
|
|
64
|
+
<div />
|
|
65
|
+
<Icon classNames={mx('cursor-pointer', styles.icon)} icon={icon} size={14} onClick={handleClick} />
|
|
70
66
|
</div>
|
|
71
67
|
|
|
72
|
-
{
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
<div id={descriptionId} className='col-span-2 flex flex-col w-full justify-between gap-2 pb-2'>
|
|
76
|
-
<div className='grow'>
|
|
77
|
-
<p className={mx(descriptionText, 'line-clamp-3 min-w-0 pie-2')}>{description}</p>
|
|
78
|
-
</div>
|
|
79
|
-
{tags && tags.length > 0 && (
|
|
80
|
-
<div>
|
|
81
|
-
{tags.map((tag) => (
|
|
82
|
-
<Tag key={tag} palette={'indigo'} classNames='text-xs capitalize'>
|
|
83
|
-
{tag}
|
|
84
|
-
</Tag>
|
|
85
|
-
))}
|
|
86
|
-
</div>
|
|
87
|
-
)}
|
|
68
|
+
<div className={mx(gridRows)}>
|
|
69
|
+
<div className='flex items-center overflow-hidden cursor-pointer' onClick={handleClick}>
|
|
70
|
+
<span className='text-lg truncate'>{name ?? id}</span>
|
|
88
71
|
</div>
|
|
89
|
-
)}
|
|
90
72
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
<Link
|
|
95
|
-
aria-describedby={descriptionId}
|
|
96
|
-
classNames='text-sm text-description cursor-pointer'
|
|
97
|
-
onClick={handleClick}
|
|
98
|
-
>
|
|
99
|
-
{t('details label')}
|
|
100
|
-
</Link>
|
|
73
|
+
<div>
|
|
74
|
+
<p className={mx(descriptionText, 'line-clamp-4 min-is-0')}>{description}</p>
|
|
75
|
+
</div>
|
|
101
76
|
|
|
102
|
-
<div className='flex-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
77
|
+
<div className='flex -mis-0.5 overflow-x-auto scrollbar-none'>
|
|
78
|
+
{tags?.map((tag) => (
|
|
79
|
+
<Tag key={tag} palette={tagColors[tag as RegistryTagType]} classNames='text-xs uppercase font-thin'>
|
|
80
|
+
{tag}
|
|
81
|
+
</Tag>
|
|
82
|
+
))}
|
|
83
|
+
</div>
|
|
84
|
+
|
|
85
|
+
<div className='flex gap-2 items-center text-sm'>
|
|
106
86
|
<IconButton
|
|
107
87
|
aria-describedby={descriptionId}
|
|
108
|
-
classNames='
|
|
88
|
+
classNames='cursor-pointer'
|
|
109
89
|
icon='ph--gear--regular'
|
|
110
90
|
label={t('settings label')}
|
|
111
91
|
iconOnly
|
|
112
92
|
size={4}
|
|
113
93
|
onClick={handleSettings}
|
|
94
|
+
disabled={!hasSettings}
|
|
114
95
|
/>
|
|
115
|
-
|
|
96
|
+
|
|
97
|
+
<Link aria-describedby={descriptionId} classNames='text-description cursor-pointer' onClick={handleClick}>
|
|
98
|
+
{t('details label')}
|
|
99
|
+
</Link>
|
|
100
|
+
|
|
101
|
+
<div className='grow' />
|
|
102
|
+
<div className='pie-1'>
|
|
103
|
+
<Input.Root id={inputId}>
|
|
104
|
+
<Input.Switch classNames='self-center' checked={isEnabled} onClick={handleChange} />
|
|
105
|
+
</Input.Root>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
116
108
|
</div>
|
|
117
109
|
</ListItem.Root>
|
|
118
110
|
);
|
|
119
111
|
};
|
|
112
|
+
|
|
113
|
+
const tagColors: Record<RegistryTagType, ChromaticPalette> = {
|
|
114
|
+
new: 'rose',
|
|
115
|
+
beta: 'teal',
|
|
116
|
+
labs: 'blue',
|
|
117
|
+
popular: 'green',
|
|
118
|
+
featured: 'pink',
|
|
119
|
+
experimental: 'amber',
|
|
120
|
+
};
|
|
@@ -2,19 +2,18 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '@
|
|
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 {
|
|
8
|
+
import { type Plugin, definePlugin } from '@dxos/app-framework';
|
|
11
9
|
import { faker } from '@dxos/random';
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import { withTheme, withLayout } from '@dxos/storybook-utils';
|
|
10
|
+
import { withLayout, withTheme } from '@dxos/react-ui/testing';
|
|
11
|
+
import { getHashHue } from '@dxos/react-ui-theme';
|
|
15
12
|
|
|
16
|
-
import { PluginList } from './PluginList';
|
|
17
13
|
import { translations } from '../translations';
|
|
14
|
+
import { RegistryTagType } from '../types';
|
|
15
|
+
|
|
16
|
+
import { PluginList } from './PluginList';
|
|
18
17
|
|
|
19
18
|
faker.seed(1);
|
|
20
19
|
|
|
@@ -27,7 +26,7 @@ const icons = [
|
|
|
27
26
|
'ph--github-logo--regular',
|
|
28
27
|
];
|
|
29
28
|
|
|
30
|
-
const DefaultStory = (
|
|
29
|
+
const DefaultStory = () => {
|
|
31
30
|
const [plugins] = useState<Plugin[]>(
|
|
32
31
|
faker.helpers.multiple(
|
|
33
32
|
() =>
|
|
@@ -36,16 +35,15 @@ const DefaultStory = ({ classNames }: ThemedClassName<{}>) => {
|
|
|
36
35
|
id: `dxos.org/plugin/plugin-${faker.string.uuid()}`,
|
|
37
36
|
name: `${faker.commerce.productName()}`,
|
|
38
37
|
description: faker.lorem.sentences(Math.ceil(Math.random() * 3)),
|
|
39
|
-
tags: faker.
|
|
40
|
-
? [faker.helpers.arrayElement(['labs', 'beta', 'alpha', 'stable', 'new', '新発売'])]
|
|
41
|
-
: undefined,
|
|
38
|
+
tags: faker.helpers.uniqueArray(RegistryTagType.literals as any, Math.floor(Math.random() * 3)),
|
|
42
39
|
icon: faker.helpers.arrayElement(icons),
|
|
40
|
+
iconHue: getHashHue(faker.string.uuid()),
|
|
43
41
|
homePage: faker.datatype.boolean({ probability: 0.5 }) ? faker.internet.url() : undefined,
|
|
44
42
|
source: faker.internet.url(),
|
|
45
43
|
},
|
|
46
|
-
[],
|
|
47
|
-
),
|
|
48
|
-
{ count:
|
|
44
|
+
() => [],
|
|
45
|
+
)(),
|
|
46
|
+
{ count: 32 },
|
|
49
47
|
),
|
|
50
48
|
);
|
|
51
49
|
const [enabled, setEnabled] = useState<string[]>([]);
|
|
@@ -54,29 +52,29 @@ const DefaultStory = ({ classNames }: ThemedClassName<{}>) => {
|
|
|
54
52
|
setEnabled((plugins) => (enabled ? [...plugins, id] : plugins.filter((plugin) => plugin === id)));
|
|
55
53
|
};
|
|
56
54
|
|
|
57
|
-
return (
|
|
58
|
-
<div className={mx('flex overflow-hidden', classNames)}>
|
|
59
|
-
<PluginList plugins={plugins} enabled={enabled} onChange={handleChange} hasSettings={() => true} />
|
|
60
|
-
</div>
|
|
61
|
-
);
|
|
55
|
+
return <PluginList plugins={plugins} enabled={enabled} onChange={handleChange} hasSettings={() => true} />;
|
|
62
56
|
};
|
|
63
57
|
|
|
64
|
-
const meta
|
|
58
|
+
const meta = {
|
|
65
59
|
title: 'plugins/plugin-registry/PluginList',
|
|
66
60
|
component: PluginList,
|
|
67
61
|
render: DefaultStory,
|
|
68
|
-
decorators: [withTheme, withLayout({ fullscreen: true, classNames: 'justify-center' })],
|
|
69
62
|
parameters: {
|
|
70
63
|
translations,
|
|
71
64
|
},
|
|
72
|
-
}
|
|
65
|
+
} satisfies Meta<typeof PluginList>;
|
|
73
66
|
|
|
74
67
|
export default meta;
|
|
75
68
|
|
|
76
|
-
|
|
69
|
+
type Story = StoryObj<typeof meta>;
|
|
70
|
+
|
|
71
|
+
export const Default: Story = {
|
|
72
|
+
decorators: [withTheme, withLayout({ container: 'column', scroll: true })],
|
|
73
|
+
};
|
|
77
74
|
|
|
78
|
-
export const
|
|
79
|
-
|
|
80
|
-
|
|
75
|
+
export const FullScreen: Story = {
|
|
76
|
+
decorators: [withTheme, withLayout({ scroll: true })],
|
|
77
|
+
parameters: {
|
|
78
|
+
layout: 'fullscreen',
|
|
81
79
|
},
|
|
82
80
|
};
|
|
@@ -15,11 +15,9 @@ export type PluginListProps = Omit<PluginItemProps, 'plugin'> & {
|
|
|
15
15
|
|
|
16
16
|
export const PluginList = ({ plugins = [], ...props }: PluginListProps) => {
|
|
17
17
|
return (
|
|
18
|
-
<List classNames='grid grid-cols-[repeat(auto-fill,minmax(
|
|
18
|
+
<List classNames='grid grid-cols-[repeat(auto-fill,minmax(18rem,1fr))] gap-4 p-4'>
|
|
19
19
|
{plugins.map((plugin) => (
|
|
20
|
-
<
|
|
21
|
-
<PluginItem plugin={plugin} {...props} />
|
|
22
|
-
</div>
|
|
20
|
+
<PluginItem key={plugin.meta.id} plugin={plugin} {...props} />
|
|
23
21
|
))}
|
|
24
22
|
</List>
|
|
25
23
|
);
|
|
@@ -6,10 +6,10 @@ import React, { useCallback, useMemo } from 'react';
|
|
|
6
6
|
|
|
7
7
|
import {
|
|
8
8
|
Capabilities,
|
|
9
|
-
createIntent,
|
|
10
9
|
LayoutAction,
|
|
11
10
|
type Plugin,
|
|
12
11
|
SettingsAction,
|
|
12
|
+
createIntent,
|
|
13
13
|
useCapability,
|
|
14
14
|
useIntentDispatcher,
|
|
15
15
|
usePluginManager,
|
|
@@ -70,7 +70,7 @@ export const RegistryContainer = ({ id, plugins: _plugins }: { id: string; plugi
|
|
|
70
70
|
);
|
|
71
71
|
|
|
72
72
|
return (
|
|
73
|
-
<StackItem.Content
|
|
73
|
+
<StackItem.Content scrollable>
|
|
74
74
|
<PluginList
|
|
75
75
|
plugins={plugins}
|
|
76
76
|
enabled={manager.enabled}
|
package/src/meta.ts
CHANGED
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { type PluginMeta } from '@dxos/app-framework';
|
|
6
|
-
|
|
7
|
-
export const REGISTRY_PLUGIN = 'dxos.org/plugin/registry';
|
|
6
|
+
import { trim } from '@dxos/util';
|
|
8
7
|
|
|
9
8
|
// TODO(wittjosiah): Deck does not currently support `/` in ids.
|
|
10
9
|
// TODO(wittjosiah): This is a hack to prevent the previous deck from being set for pinned items.
|
|
@@ -13,6 +12,10 @@ export const REGISTRY_ID = '!dxos:plugin-registry';
|
|
|
13
12
|
export const REGISTRY_KEY = 'plugin-registry';
|
|
14
13
|
|
|
15
14
|
export const meta: PluginMeta = {
|
|
16
|
-
id:
|
|
15
|
+
id: 'dxos.org/plugin/registry',
|
|
17
16
|
name: 'Plugins',
|
|
17
|
+
description: trim`
|
|
18
|
+
Plugin management system for discovering, installing, and configuring workspace extensions.
|
|
19
|
+
Browse available plugins and customize your workspace capabilities.
|
|
20
|
+
`,
|
|
18
21
|
};
|
package/src/types.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import * as Schema from 'effect/Schema';
|
|
6
6
|
|
|
7
7
|
export const RegistrySettingsSchema = Schema.mutable(
|
|
8
8
|
Schema.Struct({
|
|
@@ -11,3 +11,7 @@ export const RegistrySettingsSchema = Schema.mutable(
|
|
|
11
11
|
);
|
|
12
12
|
|
|
13
13
|
export type RegistrySettings = Schema.Schema.Type<typeof RegistrySettingsSchema>;
|
|
14
|
+
|
|
15
|
+
export const RegistryTagType = Schema.Literal('new', 'beta', 'labs', 'popular', 'featured', 'experimental');
|
|
16
|
+
|
|
17
|
+
export type RegistryTagType = Schema.Schema.Type<typeof RegistryTagType>;
|
|
@@ -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 { Rx } from '@effect-rx/rx-react';\nimport { Option, pipe } from 'effect';\n\nimport { Capabilities, contributes, createIntent, SettingsAction, type PluginContext } from '@dxos/app-framework';\nimport { createExtension } from '@dxos/plugin-graph';\n\nimport { REGISTRY_ID, REGISTRY_KEY, REGISTRY_PLUGIN } from '../meta';\n\nexport default (context: PluginContext) =>\n contributes(Capabilities.AppGraphBuilder, [\n createExtension({\n id: REGISTRY_PLUGIN,\n actions: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (node.id === 'root' ? Option.some(node) : Option.none())),\n Option.map((node) => [\n {\n id: REGISTRY_PLUGIN,\n data: async () => {\n const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n await dispatch(createIntent(SettingsAction.OpenPluginRegistry));\n },\n properties: {\n label: ['open plugin registry label', { ns: REGISTRY_PLUGIN }],\n icon: 'ph--squares-four--regular',\n disposition: 'menu',\n },\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n createExtension({\n id: REGISTRY_PLUGIN,\n connector: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (node.id === 'root' ? Option.some(node) : Option.none())),\n Option.map((node) => [\n {\n id: REGISTRY_ID,\n type: REGISTRY_PLUGIN,\n properties: {\n label: ['plugin registry label', { ns: REGISTRY_PLUGIN }],\n icon: 'ph--squares-four--regular',\n disposition: 'pin-end',\n testId: 'treeView.pluginRegistry',\n },\n nodes: [\n {\n id: `${REGISTRY_KEY}+all`,\n type: 'category',\n data: `${REGISTRY_KEY}+all`,\n properties: {\n label: ['all plugins label', { ns: REGISTRY_PLUGIN }],\n icon: 'ph--squares-four--regular',\n key: REGISTRY_KEY,\n testId: 'pluginRegistry.all',\n },\n },\n {\n id: `${REGISTRY_KEY}+installed`,\n type: 'category',\n data: `${REGISTRY_KEY}+installed`,\n properties: {\n label: ['installed plugins label', { ns: REGISTRY_PLUGIN }],\n icon: 'ph--check--regular',\n key: REGISTRY_KEY,\n testId: 'pluginRegistry.installed',\n },\n },\n {\n id: `${REGISTRY_KEY}+recommended`,\n type: 'category',\n data: `${REGISTRY_KEY}+recommended`,\n properties: {\n label: ['recommended plugins label', { ns: REGISTRY_PLUGIN }],\n icon: 'ph--star--regular',\n key: REGISTRY_KEY,\n testId: 'pluginRegistry.recommended',\n },\n },\n {\n id: `${REGISTRY_KEY}+labs`,\n type: 'category',\n data: `${REGISTRY_KEY}+labs`,\n properties: {\n label: ['labs plugins label', { ns: REGISTRY_PLUGIN }],\n icon: 'ph--flask--regular',\n key: REGISTRY_KEY,\n testId: 'pluginRegistry.labs',\n },\n },\n ],\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n createExtension({\n id: `${REGISTRY_PLUGIN}/actions`,\n actions: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (node.id === REGISTRY_ID ? Option.some(node) : Option.none())),\n Option.map(() => [\n {\n id: `${REGISTRY_PLUGIN}/load-by-url`,\n data: async () => {},\n properties: {\n label: ['load by url label', { ns: REGISTRY_PLUGIN }],\n icon: 'ph--cloud-arrow-down--regular',\n disabled: true,\n },\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n createExtension({\n id: `${REGISTRY_PLUGIN}/plugins`,\n connector: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (node.id === REGISTRY_ID ? Option.some(node) : Option.none())),\n Option.map(() => {\n const manager = context.getCapability(Capabilities.PluginManager);\n return manager.plugins.map((plugin) => ({\n id: plugin.meta.id.replaceAll('/', ':'),\n type: 'dxos.org/plugin',\n data: plugin,\n properties: {\n label: plugin.meta.name ?? plugin.meta.id,\n icon: plugin.meta.icon ?? 'ph--circle--regular',\n disposition: 'hidden',\n },\n }));\n }),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n ]);\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Rx", "Option", "pipe", "Capabilities", "contributes", "createIntent", "SettingsAction", "createExtension", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "REGISTRY_PLUGIN", "actions", "node", "Rx", "make", "get", "pipe", "Option", "flatMap", "some", "none", "map", "data", "dispatchPromise", "dispatch", "getCapability", "IntentDispatcher", "createIntent", "SettingsAction", "OpenPluginRegistry", "properties", "label", "ns", "icon", "disposition", "getOrElse", "connector", "REGISTRY_ID", "type", "testId", "nodes", "REGISTRY_KEY", "key", "disabled", "manager", "PluginManager", "plugins", "plugin", "meta", "replaceAll", "name"]
|
|
7
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
// src/meta.ts
|
|
2
|
-
var REGISTRY_PLUGIN = "dxos.org/plugin/registry";
|
|
3
|
-
var REGISTRY_ID = "!dxos:plugin-registry";
|
|
4
|
-
var REGISTRY_KEY = "plugin-registry";
|
|
5
|
-
var meta = {
|
|
6
|
-
id: REGISTRY_PLUGIN,
|
|
7
|
-
name: "Plugins"
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
export {
|
|
11
|
-
REGISTRY_PLUGIN,
|
|
12
|
-
REGISTRY_ID,
|
|
13
|
-
REGISTRY_KEY,
|
|
14
|
-
meta
|
|
15
|
-
};
|
|
16
|
-
//# sourceMappingURL=chunk-AEBASNOI.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/meta.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const REGISTRY_PLUGIN = 'dxos.org/plugin/registry';\n\n// TODO(wittjosiah): Deck does not currently support `/` in ids.\n// TODO(wittjosiah): This is a hack to prevent the previous deck from being set for pinned items.\n// Ideally this should be worked into the data model in a generic way.\nexport const REGISTRY_ID = '!dxos:plugin-registry';\nexport const REGISTRY_KEY = 'plugin-registry';\n\nexport const meta: PluginMeta = {\n id: REGISTRY_PLUGIN,\n name: 'Plugins',\n};\n"],
|
|
5
|
-
"mappings": ";AAMO,IAAMA,kBAAkB;AAKxB,IAAMC,cAAc;AACpB,IAAMC,eAAe;AAErB,IAAMC,OAAmB;EAC9BC,IAAIJ;EACJK,MAAM;AACR;",
|
|
6
|
-
"names": ["REGISTRY_PLUGIN", "REGISTRY_ID", "REGISTRY_KEY", "meta", "id", "name"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/react-surface.tsx", "../../../src/components/PluginDetail.tsx", "../../../src/components/PluginList.tsx", "../../../src/components/PluginItem.tsx", "../../../src/components/RegistryContainer.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { Capabilities, contributes, createSurface, Plugin, usePluginManager } from '@dxos/app-framework';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { PluginDetail, RegistryContainer } from '../components';\nimport { REGISTRY_KEY, REGISTRY_PLUGIN } from '../meta';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${REGISTRY_PLUGIN}/all`,\n role: 'article',\n filter: (data): data is any => data.subject === `${REGISTRY_KEY}+all`,\n component: () => {\n const manager = usePluginManager();\n const filtered = useMemo(() => manager.plugins.filter(({ meta }) => !manager.core.includes(meta.id)), []);\n\n return <RegistryContainer id={`${REGISTRY_KEY}+all`} plugins={filtered} />;\n },\n }),\n createSurface({\n id: `${REGISTRY_PLUGIN}/installed`,\n role: 'article',\n filter: (data): data is any => data.subject === `${REGISTRY_KEY}+installed`,\n component: () => {\n const manager = usePluginManager();\n const filtered = useMemo(\n () =>\n manager.plugins\n .filter(({ meta }) => !manager.core.includes(meta.id))\n .filter(({ meta }) => manager.enabled.includes(meta.id)),\n [],\n );\n\n return <RegistryContainer id={`${REGISTRY_KEY}+installed`} plugins={filtered} />;\n },\n }),\n createSurface({\n id: `${REGISTRY_PLUGIN}/recommended`,\n role: 'article',\n filter: (data): data is any => data.subject === `${REGISTRY_KEY}+recommended`,\n component: () => {\n const manager = usePluginManager();\n const filtered = useMemo(\n () =>\n manager.plugins\n .filter(({ meta }) => !manager.core.includes(meta.id))\n .filter(({ meta }) => !meta.tags?.includes('labs')),\n [],\n );\n\n return <RegistryContainer id={`${REGISTRY_KEY}+recommended`} plugins={filtered} />;\n },\n }),\n createSurface({\n id: `${REGISTRY_PLUGIN}/labs`,\n role: 'article',\n filter: (data): data is any => data.subject === `${REGISTRY_KEY}+labs`,\n component: () => {\n const manager = usePluginManager();\n const filtered = useMemo(() => manager.plugins.filter(({ meta }) => meta.tags?.includes('labs')), []);\n\n return <RegistryContainer id={`${REGISTRY_KEY}+labs`} plugins={filtered} />;\n },\n }),\n createSurface({\n id: `${REGISTRY_PLUGIN}/plugin-details`,\n role: 'article',\n filter: (data): data is { subject: Plugin } => data.subject instanceof Plugin,\n component: ({ data: { subject } }) => {\n const manager = usePluginManager();\n const enabled = manager.enabled.includes(subject.meta.id);\n const handleEnable = useCallback(\n () => (enabled ? manager.disable(subject.meta.id) : manager.enable(subject.meta.id)),\n [manager, subject.meta.id, enabled],\n );\n\n return (\n <StackItem.Content role='article'>\n <PluginDetail plugin={subject} enabled={enabled} onEnable={handleEnable} />\n </StackItem.Content>\n );\n },\n }),\n ]);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { Icon, Input, Link, useTranslation } from '@dxos/react-ui';\nimport { DeprecatedFormContainer } from '@dxos/react-ui-form';\n\nimport { REGISTRY_PLUGIN } from '../meta';\n\nexport type PluginDetailProps = {\n plugin: Plugin;\n enabled?: boolean;\n onEnable?: () => void;\n};\n\nexport const PluginDetail = ({ plugin, enabled, onEnable }: PluginDetailProps) => {\n const { t } = useTranslation(REGISTRY_PLUGIN);\n const { id, name, description, homePage, source, screenshots } = plugin.meta;\n\n return (\n <DeprecatedFormContainer classNames='gap-6'>\n <div role='none' className='flex justify-between items-center'>\n <p>{id}</p>\n <Input.Root>\n <Input.Switch classNames='self-center' checked={enabled} onClick={onEnable} />\n </Input.Root>\n </div>\n\n {screenshots && screenshots.length > 0 && (\n <div role='none'>\n <h1 className='text-lg mb-2'>Preview</h1>\n <img src={screenshots[0]} alt={name} className='aspect-video object-fit' />\n </div>\n )}\n\n <div role='none'>\n <p>{description}</p>\n </div>\n\n <div role='none'>\n <h1 className='text-lg mb-2'>Resources</h1>\n <div className='flex gap-2'>\n {homePage && (\n <Link href={homePage} target='_blank' rel='noreferrer' classNames='text-sm text-description'>\n {t('home page label')}\n <Icon icon='ph--arrow-square-out--bold' size={3} classNames='inline-block leading-none mli-1' />\n </Link>\n )}\n\n {source && (\n <Link href={source} target='_blank' rel='noreferrer' classNames='text-sm text-description'>\n {t('source label')}\n <Icon icon='ph--arrow-square-out--bold' size={3} classNames='inline-block leading-none mli-1' />\n </Link>\n )}\n </div>\n </div>\n </DeprecatedFormContainer>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { List } from '@dxos/react-ui';\n\nimport { PluginItem, type PluginItemProps } from './PluginItem';\n\nexport type PluginListProps = Omit<PluginItemProps, 'plugin'> & {\n plugins?: readonly Plugin[];\n};\n\nexport const PluginList = ({ plugins = [], ...props }: PluginListProps) => {\n return (\n <List classNames='grid grid-cols-[repeat(auto-fill,minmax(280px,1fr))] auto-rows-[12rem] gap-3 p-3'>\n {plugins.map((plugin) => (\n <div key={plugin.meta.id} className='flex'>\n <PluginItem plugin={plugin} {...props} />\n </div>\n ))}\n </List>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type MouseEvent, useCallback } from 'react';\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { Icon, IconButton, Input, Link, ListItem, Tag, useTranslation } from '@dxos/react-ui';\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\n\nimport { REGISTRY_PLUGIN } from '../meta';\n\nexport type PluginItemProps = {\n plugin: Plugin;\n installed?: readonly string[];\n enabled?: readonly string[];\n onClick?: (id: string) => void;\n onChange?: (id: string, enabled: boolean) => void;\n hasSettings?: (id: string) => boolean;\n onSettings?: (id: string) => void;\n};\n\nexport const PluginItem = ({\n plugin,\n enabled = [],\n onClick,\n onChange,\n hasSettings: _hasSettings,\n onSettings,\n}: PluginItemProps) => {\n const { t } = useTranslation(REGISTRY_PLUGIN);\n const { id, name, description, tags, icon = 'ph--circle--regular' } = plugin.meta;\n const isEnabled = enabled.includes(id);\n const inputId = `${id}-input`;\n const labelId = `${id}-label`;\n const descriptionId = `${id}-description`;\n const handleClick = useCallback(() => onClick?.(id), [id, onClick]);\n\n const handleChange = useCallback(\n (event: MouseEvent) => {\n event.stopPropagation();\n onChange?.(id, !isEnabled);\n },\n [id, isEnabled, onChange],\n );\n\n const hasSettings = _hasSettings?.(id) ?? false;\n const handleSettings = useCallback(() => onSettings?.(id), [id, onSettings]);\n\n return (\n <ListItem.Root\n key={id}\n labelId={labelId}\n data-testid={`pluginList.${id}`}\n aria-describedby={descriptionId}\n // TODO(burdon): Use Rail vars.\n classNames='is-full bs-full grid grid-cols-[48px_1fr_48px] grid-rows-[40px_1fr_32px] p-1 border border-separator rounded-md'\n >\n {/* Header. */}\n <div className='flex flex-col grow justify-center items-center'>\n <Icon icon={icon} size={6} onClick={handleClick} classNames='text-subdued cursor-pointer' />\n </div>\n <div className='flex items-center overflow-hidden cursor-pointer' onClick={handleClick}>\n <span className='truncate'>{name ?? id}</span>\n </div>\n <div className='flex justify-center items-center'>\n <Input.Root id={inputId}>\n <Input.Switch classNames='self-center' checked={isEnabled} onClick={handleChange} />\n </Input.Root>\n </div>\n\n {/* Body. */}\n <div />\n {(description || tags) && (\n <div id={descriptionId} className='col-span-2 flex flex-col w-full justify-between gap-2 pb-2'>\n <div className='grow'>\n <p className={mx(descriptionText, 'line-clamp-3 min-w-0 pie-2')}>{description}</p>\n </div>\n {tags && tags.length > 0 && (\n <div>\n {tags.map((tag) => (\n <Tag key={tag} palette={'indigo'} classNames='text-xs capitalize'>\n {tag}\n </Tag>\n ))}\n </div>\n )}\n </div>\n )}\n\n {/* Footer. */}\n <div />\n <div className='flex gap-2 items-center pie-1'>\n <Link\n aria-describedby={descriptionId}\n classNames='text-sm text-description cursor-pointer'\n onClick={handleClick}\n >\n {t('details label')}\n </Link>\n\n <div className='flex-1' />\n </div>\n <div className='flex justify-center items-center'>\n {hasSettings && (\n <IconButton\n aria-describedby={descriptionId}\n classNames='text-sm text-description cursor-pointer'\n icon='ph--gear--regular'\n label={t('settings label')}\n iconOnly\n size={4}\n onClick={handleSettings}\n />\n )}\n </div>\n </ListItem.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport {\n Capabilities,\n createIntent,\n LayoutAction,\n type Plugin,\n SettingsAction,\n useCapability,\n useIntentDispatcher,\n usePluginManager,\n} from '@dxos/app-framework';\nimport { ObservabilityAction } from '@dxos/plugin-observability/types';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { PluginList } from './PluginList';\n\nconst sortByPluginMeta = ({ meta: { name: a = '' } }: Plugin, { meta: { name: b = '' } }: Plugin) => a.localeCompare(b);\n\nexport const RegistryContainer = ({ id, plugins: _plugins }: { id: string; plugins: Plugin[] }) => {\n const manager = usePluginManager();\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const plugins = useMemo(() => _plugins.sort(sortByPluginMeta), [_plugins]);\n const settingsStore = useCapability(Capabilities.SettingsStore);\n\n // TODO(wittjosiah): Factor out to an intent?\n const handleChange = useCallback(\n async (id: string, enabled: boolean) => {\n if (enabled) {\n await manager.enable(id);\n } else {\n await manager.disable(id);\n }\n\n await dispatch(\n createIntent(ObservabilityAction.SendEvent, {\n name: 'plugins.toggle',\n properties: {\n plugin: id,\n enabled,\n },\n }),\n );\n },\n [dispatch, manager],\n );\n\n const handleClick = useCallback(\n (pluginId: string) =>\n dispatch(\n createIntent(LayoutAction.Open, {\n part: 'main',\n // TODO(wittjosiah): `/` currently is not supported in ids.\n subject: [pluginId.replaceAll('/', ':')],\n options: { pivotId: id, positioning: 'end' },\n }),\n ),\n [dispatch, id],\n );\n\n const hasSettings = useCallback((pluginId: string) => !!settingsStore.getStore(pluginId), [settingsStore]);\n\n const handleSettings = useCallback(\n (pluginId: string) => dispatch(createIntent(SettingsAction.Open, { plugin: pluginId })),\n [dispatch],\n );\n\n return (\n <StackItem.Content classNames='min-bs-0 overflow-y-auto scrollbar-thin contain-layout'>\n <PluginList\n plugins={plugins}\n enabled={manager.enabled}\n onClick={handleClick}\n onChange={handleChange}\n hasSettings={hasSettings}\n onSettings={handleSettings}\n />\n </StackItem.Content>\n );\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["React", "useCallback", "useMemo", "Capabilities", "contributes", "createSurface", "Plugin", "usePluginManager", "StackItem", "React", "Icon", "Input", "Link", "useTranslation", "DeprecatedFormContainer", "PluginDetail", "plugin", "enabled", "onEnable", "t", "useTranslation", "REGISTRY_PLUGIN", "id", "name", "description", "homePage", "source", "screenshots", "meta", "DeprecatedFormContainer", "classNames", "div", "role", "className", "p", "Input", "Root", "Switch", "checked", "onClick", "length", "h1", "img", "src", "alt", "Link", "href", "target", "rel", "Icon", "icon", "size", "React", "List", "React", "useCallback", "Icon", "IconButton", "Input", "Link", "ListItem", "Tag", "useTranslation", "descriptionText", "mx", "PluginItem", "plugin", "enabled", "onClick", "onChange", "hasSettings", "_hasSettings", "onSettings", "t", "useTranslation", "REGISTRY_PLUGIN", "id", "name", "description", "tags", "icon", "meta", "isEnabled", "includes", "inputId", "labelId", "descriptionId", "handleClick", "useCallback", "handleChange", "event", "stopPropagation", "handleSettings", "React", "ListItem", "Root", "key", "data-testid", "aria-describedby", "classNames", "div", "className", "Icon", "size", "span", "Input", "Switch", "checked", "p", "mx", "descriptionText", "length", "map", "tag", "Tag", "palette", "Link", "IconButton", "label", "iconOnly", "PluginList", "plugins", "props", "React", "List", "classNames", "map", "plugin", "div", "key", "meta", "id", "className", "PluginItem", "React", "useCallback", "useMemo", "Capabilities", "createIntent", "LayoutAction", "SettingsAction", "useCapability", "useIntentDispatcher", "usePluginManager", "ObservabilityAction", "StackItem", "sortByPluginMeta", "meta", "name", "a", "b", "localeCompare", "RegistryContainer", "id", "plugins", "_plugins", "manager", "usePluginManager", "dispatchPromise", "dispatch", "useIntentDispatcher", "useMemo", "sort", "settingsStore", "useCapability", "Capabilities", "SettingsStore", "handleChange", "useCallback", "enabled", "enable", "disable", "createIntent", "ObservabilityAction", "SendEvent", "properties", "plugin", "handleClick", "pluginId", "LayoutAction", "Open", "part", "subject", "replaceAll", "options", "pivotId", "positioning", "hasSettings", "getStore", "handleSettings", "SettingsAction", "React", "StackItem", "Content", "classNames", "PluginList", "onClick", "onChange", "onSettings", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "REGISTRY_PLUGIN", "role", "filter", "data", "subject", "REGISTRY_KEY", "component", "manager", "usePluginManager", "filtered", "useMemo", "plugins", "meta", "core", "includes", "React", "RegistryContainer", "enabled", "tags", "Plugin", "handleEnable", "useCallback", "disable", "enable", "StackItem", "Content", "PluginDetail", "plugin", "onEnable"]
|
|
7
|
-
}
|
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
-
import {
|
|
3
|
-
REGISTRY_ID,
|
|
4
|
-
REGISTRY_KEY,
|
|
5
|
-
REGISTRY_PLUGIN
|
|
6
|
-
} from "./chunk-R3GXMWPJ.mjs";
|
|
7
|
-
|
|
8
|
-
// src/capabilities/app-graph-builder.ts
|
|
9
|
-
import { Rx } from "@effect-rx/rx-react";
|
|
10
|
-
import { Option, pipe } from "effect";
|
|
11
|
-
import { Capabilities, contributes, createIntent, SettingsAction } from "@dxos/app-framework";
|
|
12
|
-
import { createExtension } from "@dxos/plugin-graph";
|
|
13
|
-
var app_graph_builder_default = (context) => contributes(Capabilities.AppGraphBuilder, [
|
|
14
|
-
createExtension({
|
|
15
|
-
id: REGISTRY_PLUGIN,
|
|
16
|
-
actions: (node) => Rx.make((get) => pipe(get(node), Option.flatMap((node2) => node2.id === "root" ? Option.some(node2) : Option.none()), Option.map((node2) => [
|
|
17
|
-
{
|
|
18
|
-
id: REGISTRY_PLUGIN,
|
|
19
|
-
data: async () => {
|
|
20
|
-
const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
|
|
21
|
-
await dispatch(createIntent(SettingsAction.OpenPluginRegistry));
|
|
22
|
-
},
|
|
23
|
-
properties: {
|
|
24
|
-
label: [
|
|
25
|
-
"open plugin registry label",
|
|
26
|
-
{
|
|
27
|
-
ns: REGISTRY_PLUGIN
|
|
28
|
-
}
|
|
29
|
-
],
|
|
30
|
-
icon: "ph--squares-four--regular",
|
|
31
|
-
disposition: "menu"
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
]), Option.getOrElse(() => [])))
|
|
35
|
-
}),
|
|
36
|
-
createExtension({
|
|
37
|
-
id: REGISTRY_PLUGIN,
|
|
38
|
-
connector: (node) => Rx.make((get) => pipe(get(node), Option.flatMap((node2) => node2.id === "root" ? Option.some(node2) : Option.none()), Option.map((node2) => [
|
|
39
|
-
{
|
|
40
|
-
id: REGISTRY_ID,
|
|
41
|
-
type: REGISTRY_PLUGIN,
|
|
42
|
-
properties: {
|
|
43
|
-
label: [
|
|
44
|
-
"plugin registry label",
|
|
45
|
-
{
|
|
46
|
-
ns: REGISTRY_PLUGIN
|
|
47
|
-
}
|
|
48
|
-
],
|
|
49
|
-
icon: "ph--squares-four--regular",
|
|
50
|
-
disposition: "pin-end",
|
|
51
|
-
testId: "treeView.pluginRegistry"
|
|
52
|
-
},
|
|
53
|
-
nodes: [
|
|
54
|
-
{
|
|
55
|
-
id: `${REGISTRY_KEY}+all`,
|
|
56
|
-
type: "category",
|
|
57
|
-
data: `${REGISTRY_KEY}+all`,
|
|
58
|
-
properties: {
|
|
59
|
-
label: [
|
|
60
|
-
"all plugins label",
|
|
61
|
-
{
|
|
62
|
-
ns: REGISTRY_PLUGIN
|
|
63
|
-
}
|
|
64
|
-
],
|
|
65
|
-
icon: "ph--squares-four--regular",
|
|
66
|
-
key: REGISTRY_KEY,
|
|
67
|
-
testId: "pluginRegistry.all"
|
|
68
|
-
}
|
|
69
|
-
},
|
|
70
|
-
{
|
|
71
|
-
id: `${REGISTRY_KEY}+installed`,
|
|
72
|
-
type: "category",
|
|
73
|
-
data: `${REGISTRY_KEY}+installed`,
|
|
74
|
-
properties: {
|
|
75
|
-
label: [
|
|
76
|
-
"installed plugins label",
|
|
77
|
-
{
|
|
78
|
-
ns: REGISTRY_PLUGIN
|
|
79
|
-
}
|
|
80
|
-
],
|
|
81
|
-
icon: "ph--check--regular",
|
|
82
|
-
key: REGISTRY_KEY,
|
|
83
|
-
testId: "pluginRegistry.installed"
|
|
84
|
-
}
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
id: `${REGISTRY_KEY}+recommended`,
|
|
88
|
-
type: "category",
|
|
89
|
-
data: `${REGISTRY_KEY}+recommended`,
|
|
90
|
-
properties: {
|
|
91
|
-
label: [
|
|
92
|
-
"recommended plugins label",
|
|
93
|
-
{
|
|
94
|
-
ns: REGISTRY_PLUGIN
|
|
95
|
-
}
|
|
96
|
-
],
|
|
97
|
-
icon: "ph--star--regular",
|
|
98
|
-
key: REGISTRY_KEY,
|
|
99
|
-
testId: "pluginRegistry.recommended"
|
|
100
|
-
}
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
id: `${REGISTRY_KEY}+labs`,
|
|
104
|
-
type: "category",
|
|
105
|
-
data: `${REGISTRY_KEY}+labs`,
|
|
106
|
-
properties: {
|
|
107
|
-
label: [
|
|
108
|
-
"labs plugins label",
|
|
109
|
-
{
|
|
110
|
-
ns: REGISTRY_PLUGIN
|
|
111
|
-
}
|
|
112
|
-
],
|
|
113
|
-
icon: "ph--flask--regular",
|
|
114
|
-
key: REGISTRY_KEY,
|
|
115
|
-
testId: "pluginRegistry.labs"
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
]
|
|
119
|
-
}
|
|
120
|
-
]), Option.getOrElse(() => [])))
|
|
121
|
-
}),
|
|
122
|
-
createExtension({
|
|
123
|
-
id: `${REGISTRY_PLUGIN}/actions`,
|
|
124
|
-
actions: (node) => Rx.make((get) => pipe(get(node), Option.flatMap((node2) => node2.id === REGISTRY_ID ? Option.some(node2) : Option.none()), Option.map(() => [
|
|
125
|
-
{
|
|
126
|
-
id: `${REGISTRY_PLUGIN}/load-by-url`,
|
|
127
|
-
data: async () => {
|
|
128
|
-
},
|
|
129
|
-
properties: {
|
|
130
|
-
label: [
|
|
131
|
-
"load by url label",
|
|
132
|
-
{
|
|
133
|
-
ns: REGISTRY_PLUGIN
|
|
134
|
-
}
|
|
135
|
-
],
|
|
136
|
-
icon: "ph--cloud-arrow-down--regular",
|
|
137
|
-
disabled: true
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
]), Option.getOrElse(() => [])))
|
|
141
|
-
}),
|
|
142
|
-
createExtension({
|
|
143
|
-
id: `${REGISTRY_PLUGIN}/plugins`,
|
|
144
|
-
connector: (node) => Rx.make((get) => pipe(get(node), Option.flatMap((node2) => node2.id === REGISTRY_ID ? Option.some(node2) : Option.none()), Option.map(() => {
|
|
145
|
-
const manager = context.getCapability(Capabilities.PluginManager);
|
|
146
|
-
return manager.plugins.map((plugin) => ({
|
|
147
|
-
id: plugin.meta.id.replaceAll("/", ":"),
|
|
148
|
-
type: "dxos.org/plugin",
|
|
149
|
-
data: plugin,
|
|
150
|
-
properties: {
|
|
151
|
-
label: plugin.meta.name ?? plugin.meta.id,
|
|
152
|
-
icon: plugin.meta.icon ?? "ph--circle--regular",
|
|
153
|
-
disposition: "hidden"
|
|
154
|
-
}
|
|
155
|
-
}));
|
|
156
|
-
}), Option.getOrElse(() => [])))
|
|
157
|
-
})
|
|
158
|
-
]);
|
|
159
|
-
export {
|
|
160
|
-
app_graph_builder_default as default
|
|
161
|
-
};
|
|
162
|
-
//# sourceMappingURL=app-graph-builder-N44OGVQA.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 { Rx } from '@effect-rx/rx-react';\nimport { Option, pipe } from 'effect';\n\nimport { Capabilities, contributes, createIntent, SettingsAction, type PluginContext } from '@dxos/app-framework';\nimport { createExtension } from '@dxos/plugin-graph';\n\nimport { REGISTRY_ID, REGISTRY_KEY, REGISTRY_PLUGIN } from '../meta';\n\nexport default (context: PluginContext) =>\n contributes(Capabilities.AppGraphBuilder, [\n createExtension({\n id: REGISTRY_PLUGIN,\n actions: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (node.id === 'root' ? Option.some(node) : Option.none())),\n Option.map((node) => [\n {\n id: REGISTRY_PLUGIN,\n data: async () => {\n const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n await dispatch(createIntent(SettingsAction.OpenPluginRegistry));\n },\n properties: {\n label: ['open plugin registry label', { ns: REGISTRY_PLUGIN }],\n icon: 'ph--squares-four--regular',\n disposition: 'menu',\n },\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n createExtension({\n id: REGISTRY_PLUGIN,\n connector: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (node.id === 'root' ? Option.some(node) : Option.none())),\n Option.map((node) => [\n {\n id: REGISTRY_ID,\n type: REGISTRY_PLUGIN,\n properties: {\n label: ['plugin registry label', { ns: REGISTRY_PLUGIN }],\n icon: 'ph--squares-four--regular',\n disposition: 'pin-end',\n testId: 'treeView.pluginRegistry',\n },\n nodes: [\n {\n id: `${REGISTRY_KEY}+all`,\n type: 'category',\n data: `${REGISTRY_KEY}+all`,\n properties: {\n label: ['all plugins label', { ns: REGISTRY_PLUGIN }],\n icon: 'ph--squares-four--regular',\n key: REGISTRY_KEY,\n testId: 'pluginRegistry.all',\n },\n },\n {\n id: `${REGISTRY_KEY}+installed`,\n type: 'category',\n data: `${REGISTRY_KEY}+installed`,\n properties: {\n label: ['installed plugins label', { ns: REGISTRY_PLUGIN }],\n icon: 'ph--check--regular',\n key: REGISTRY_KEY,\n testId: 'pluginRegistry.installed',\n },\n },\n {\n id: `${REGISTRY_KEY}+recommended`,\n type: 'category',\n data: `${REGISTRY_KEY}+recommended`,\n properties: {\n label: ['recommended plugins label', { ns: REGISTRY_PLUGIN }],\n icon: 'ph--star--regular',\n key: REGISTRY_KEY,\n testId: 'pluginRegistry.recommended',\n },\n },\n {\n id: `${REGISTRY_KEY}+labs`,\n type: 'category',\n data: `${REGISTRY_KEY}+labs`,\n properties: {\n label: ['labs plugins label', { ns: REGISTRY_PLUGIN }],\n icon: 'ph--flask--regular',\n key: REGISTRY_KEY,\n testId: 'pluginRegistry.labs',\n },\n },\n ],\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n createExtension({\n id: `${REGISTRY_PLUGIN}/actions`,\n actions: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (node.id === REGISTRY_ID ? Option.some(node) : Option.none())),\n Option.map(() => [\n {\n id: `${REGISTRY_PLUGIN}/load-by-url`,\n data: async () => {},\n properties: {\n label: ['load by url label', { ns: REGISTRY_PLUGIN }],\n icon: 'ph--cloud-arrow-down--regular',\n disabled: true,\n },\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n createExtension({\n id: `${REGISTRY_PLUGIN}/plugins`,\n connector: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (node.id === REGISTRY_ID ? Option.some(node) : Option.none())),\n Option.map(() => {\n const manager = context.getCapability(Capabilities.PluginManager);\n return manager.plugins.map((plugin) => ({\n id: plugin.meta.id.replaceAll('/', ':'),\n type: 'dxos.org/plugin',\n data: plugin,\n properties: {\n label: plugin.meta.name ?? plugin.meta.id,\n icon: plugin.meta.icon ?? 'ph--circle--regular',\n disposition: 'hidden',\n },\n }));\n }),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n ]);\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Rx", "Option", "pipe", "Capabilities", "contributes", "createIntent", "SettingsAction", "createExtension", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "REGISTRY_PLUGIN", "actions", "node", "Rx", "make", "get", "pipe", "Option", "flatMap", "some", "none", "map", "data", "dispatchPromise", "dispatch", "getCapability", "IntentDispatcher", "createIntent", "SettingsAction", "OpenPluginRegistry", "properties", "label", "ns", "icon", "disposition", "getOrElse", "connector", "REGISTRY_ID", "type", "testId", "nodes", "REGISTRY_KEY", "key", "disabled", "manager", "PluginManager", "plugins", "plugin", "meta", "replaceAll", "name"]
|
|
7
|
-
}
|