@dxos/plugin-settings 0.8.4-main.c85a9c8dae → 0.8.4-main.cb12b3f963

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 (90) hide show
  1. package/dist/lib/browser/SettingsPlugin-H7MYSTLT.mjs +9 -0
  2. package/dist/lib/browser/SettingsPlugin-H7MYSTLT.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-YMWZWP5N.mjs +20 -0
  4. package/dist/lib/browser/chunk-YMWZWP5N.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +30 -35
  6. package/dist/lib/browser/index.mjs.map +4 -4
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/lib/browser/plugin.mjs +7 -0
  9. package/dist/lib/browser/plugin.mjs.map +7 -0
  10. package/dist/lib/browser/translations.mjs +15 -0
  11. package/dist/lib/browser/translations.mjs.map +7 -0
  12. package/dist/lib/browser/types/index.mjs +9 -0
  13. package/dist/lib/browser/types/index.mjs.map +7 -0
  14. package/dist/lib/node-esm/SettingsPlugin-LSWDBQHF.mjs +10 -0
  15. package/dist/lib/node-esm/SettingsPlugin-LSWDBQHF.mjs.map +7 -0
  16. package/dist/lib/node-esm/chunk-H4MBYZ3E.mjs +22 -0
  17. package/dist/lib/node-esm/chunk-H4MBYZ3E.mjs.map +7 -0
  18. package/dist/lib/node-esm/index.mjs +30 -34
  19. package/dist/lib/node-esm/index.mjs.map +4 -4
  20. package/dist/lib/node-esm/meta.json +1 -1
  21. package/dist/lib/node-esm/plugin.mjs +8 -0
  22. package/dist/lib/node-esm/plugin.mjs.map +7 -0
  23. package/dist/lib/node-esm/translations.mjs +17 -0
  24. package/dist/lib/node-esm/translations.mjs.map +7 -0
  25. package/dist/lib/node-esm/types/index.mjs +11 -0
  26. package/dist/lib/node-esm/types/index.mjs.map +7 -0
  27. package/dist/types/src/SettingsPlugin.d.ts +1 -0
  28. package/dist/types/src/SettingsPlugin.d.ts.map +1 -1
  29. package/dist/types/src/SettingsPlugin.test.d.ts +2 -0
  30. package/dist/types/src/SettingsPlugin.test.d.ts.map +1 -0
  31. package/dist/types/src/actions.d.ts +6 -6
  32. package/dist/types/src/actions.d.ts.map +1 -1
  33. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  34. package/dist/types/src/capabilities/index.d.ts +4 -2
  35. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  36. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  37. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  38. package/dist/types/src/index.d.ts +3 -1
  39. package/dist/types/src/index.d.ts.map +1 -1
  40. package/dist/types/src/operations/index.d.ts +3 -0
  41. package/dist/types/src/operations/index.d.ts.map +1 -0
  42. package/dist/types/src/operations/open-plugin-registry.d.ts +5 -0
  43. package/dist/types/src/operations/open-plugin-registry.d.ts.map +1 -0
  44. package/dist/types/src/operations/open.d.ts +5 -0
  45. package/dist/types/src/operations/open.d.ts.map +1 -0
  46. package/dist/types/src/plugin.d.ts +2 -0
  47. package/dist/types/src/plugin.d.ts.map +1 -0
  48. package/dist/types/src/translations.d.ts +2 -4
  49. package/dist/types/src/translations.d.ts.map +1 -1
  50. package/dist/types/src/types/index.d.ts +3 -0
  51. package/dist/types/src/types/index.d.ts.map +1 -0
  52. package/dist/types/tsconfig.tsbuildinfo +1 -1
  53. package/package.json +36 -12
  54. package/src/SettingsPlugin.test.ts +33 -0
  55. package/src/SettingsPlugin.ts +6 -4
  56. package/src/actions.ts +5 -5
  57. package/src/capabilities/{app-graph-builder/app-graph-builder.ts → app-graph-builder.ts} +26 -23
  58. package/src/capabilities/index.ts +8 -2
  59. package/src/capabilities/operation-handler.ts +16 -0
  60. package/src/index.ts +8 -1
  61. package/src/meta.ts +1 -1
  62. package/src/operations/index.ts +10 -0
  63. package/src/operations/open-plugin-registry.ts +28 -0
  64. package/src/operations/open.ts +29 -0
  65. package/src/plugin.ts +7 -0
  66. package/src/translations.ts +2 -3
  67. package/src/types/index.ts +8 -0
  68. package/dist/lib/browser/app-graph-builder-CCZGWQMT.mjs +0 -97
  69. package/dist/lib/browser/app-graph-builder-CCZGWQMT.mjs.map +0 -7
  70. package/dist/lib/browser/chunk-ONAYSYBX.mjs +0 -35
  71. package/dist/lib/browser/chunk-ONAYSYBX.mjs.map +0 -7
  72. package/dist/lib/browser/operation-resolver-IIUEJRBW.mjs +0 -54
  73. package/dist/lib/browser/operation-resolver-IIUEJRBW.mjs.map +0 -7
  74. package/dist/lib/node-esm/app-graph-builder-LZWJ45UQ.mjs +0 -98
  75. package/dist/lib/node-esm/app-graph-builder-LZWJ45UQ.mjs.map +0 -7
  76. package/dist/lib/node-esm/chunk-TSHGTOLF.mjs +0 -37
  77. package/dist/lib/node-esm/chunk-TSHGTOLF.mjs.map +0 -7
  78. package/dist/lib/node-esm/operation-resolver-QRFPVUSP.mjs +0 -55
  79. package/dist/lib/node-esm/operation-resolver-QRFPVUSP.mjs.map +0 -7
  80. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +0 -1
  81. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +0 -3
  82. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +0 -1
  83. package/dist/types/src/capabilities/operation-resolver/index.d.ts +0 -3
  84. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +0 -1
  85. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +0 -5
  86. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +0 -1
  87. package/src/capabilities/app-graph-builder/index.ts +0 -7
  88. package/src/capabilities/operation-resolver/index.ts +0 -10
  89. package/src/capabilities/operation-resolver/operation-resolver.ts +0 -54
  90. /package/dist/types/src/capabilities/{app-graph-builder/app-graph-builder.d.ts → app-graph-builder.d.ts} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-settings",
3
- "version": "0.8.4-main.c85a9c8dae",
3
+ "version": "0.8.4-main.cb12b3f963",
4
4
  "description": "DXOS Settings plugin for managing application settings.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -12,36 +12,60 @@
12
12
  "author": "DXOS.org",
13
13
  "sideEffects": true,
14
14
  "type": "module",
15
+ "imports": {
16
+ "#plugin": "./src/SettingsPlugin.ts",
17
+ "#capabilities": "./src/capabilities/index.ts",
18
+ "#meta": "./src/meta.ts",
19
+ "#operations": "./src/operations/index.ts",
20
+ "#translations": "./src/translations.ts",
21
+ "#types": "./src/types/index.ts"
22
+ },
15
23
  "exports": {
16
24
  ".": {
17
25
  "source": "./src/index.ts",
18
26
  "browser": "./dist/lib/browser/index.mjs",
19
27
  "node": "./dist/lib/node-esm/index.mjs",
20
28
  "types": "./dist/types/src/index.d.ts"
29
+ },
30
+ "./plugin": {
31
+ "source": "./src/plugin.ts",
32
+ "types": "./dist/types/src/plugin.d.ts",
33
+ "browser": "./dist/lib/browser/plugin.mjs",
34
+ "node": "./dist/lib/node-esm/plugin.mjs"
35
+ },
36
+ "./translations": {
37
+ "source": "./src/translations.ts",
38
+ "types": "./dist/types/src/translations.d.ts",
39
+ "browser": "./dist/lib/browser/translations.mjs",
40
+ "node": "./dist/lib/node-esm/translations.mjs"
41
+ },
42
+ "./types": {
43
+ "source": "./src/types/index.ts",
44
+ "types": "./dist/types/src/types/index.d.ts",
45
+ "browser": "./dist/lib/browser/types/index.mjs",
46
+ "node": "./dist/lib/node-esm/types/index.mjs"
21
47
  }
22
48
  },
23
49
  "types": "dist/types/src/index.d.ts",
24
- "typesVersions": {
25
- "*": {}
26
- },
27
50
  "files": [
28
51
  "dist",
29
52
  "src"
30
53
  ],
31
54
  "dependencies": {
32
- "@dxos/app-framework": "0.8.4-main.c85a9c8dae",
33
- "@dxos/operation": "0.8.4-main.c85a9c8dae",
34
- "@dxos/app-toolkit": "0.8.4-main.c85a9c8dae",
35
- "@dxos/app-graph": "0.8.4-main.c85a9c8dae",
36
- "@dxos/util": "0.8.4-main.c85a9c8dae"
55
+ "@dxos/app-toolkit": "0.8.4-main.cb12b3f963",
56
+ "@dxos/app-framework": "0.8.4-main.cb12b3f963",
57
+ "@dxos/app-graph": "0.8.4-main.cb12b3f963",
58
+ "@dxos/compute": "0.8.4-main.cb12b3f963",
59
+ "@dxos/util": "0.8.4-main.cb12b3f963"
37
60
  },
38
61
  "devDependencies": {
39
62
  "@types/react": "~19.2.7",
40
- "effect": "3.19.16",
41
- "react": "~19.2.3"
63
+ "effect": "3.20.0",
64
+ "react": "~19.2.3",
65
+ "@dxos/plugin-graph": "0.8.4-main.cb12b3f963"
42
66
  },
43
67
  "peerDependencies": {
44
- "effect": "3.19.16",
68
+ "effect": "3.20.0",
45
69
  "react": "~19.2.3"
46
70
  },
47
71
  "publishConfig": {
@@ -0,0 +1,33 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { describe, test } from 'vitest';
6
+
7
+ import { OperationPlugin, RuntimePlugin } from '@dxos/app-framework';
8
+ import { createTestApp } from '@dxos/app-framework/testing';
9
+ import { GraphPlugin } from '@dxos/plugin-graph';
10
+
11
+ import { SettingsPlugin } from '#plugin';
12
+
13
+ import { meta } from './meta';
14
+
15
+ const moduleId = (name: string) => `${meta.id}.module.${name}`;
16
+
17
+ describe('SettingsPlugin', () => {
18
+ test('modules activate on the expected events', async ({ expect }) => {
19
+ // Use createTestApp directly to avoid a circular dep with plugin-testing.
20
+ // GraphPlugin fires SetupAppGraph (via firesBeforeActivation) during Startup,
21
+ // activating SettingsAppGraphBuilder. OperationPlugin fires SetupOperationHandler
22
+ // during Startup, activating OperationHandler.
23
+ await using harness = await createTestApp({
24
+ plugins: [GraphPlugin(), OperationPlugin(), RuntimePlugin(), SettingsPlugin()],
25
+ });
26
+
27
+ // SettingsAppGraphBuilder activates on SetupAppGraph (fired by GraphPlugin during Startup).
28
+ // OperationHandler activates on SetupOperationHandler (fired by OperationPlugin during Startup).
29
+ expect(harness.manager.getActive()).toEqual(
30
+ expect.arrayContaining([moduleId('SettingsAppGraphBuilder'), moduleId('OperationHandler')]),
31
+ );
32
+ });
33
+ });
@@ -5,13 +5,15 @@
5
5
  import { Plugin } from '@dxos/app-framework';
6
6
  import { AppPlugin } from '@dxos/app-toolkit';
7
7
 
8
- import { SettingsAppGraphBuilder, SettingsOperationResolver } from './capabilities';
9
- import { meta } from './meta';
10
- import { translations } from './translations';
8
+ import { OperationHandler, SettingsAppGraphBuilder } from '#capabilities';
9
+ import { meta } from '#meta';
10
+ import { translations } from '#translations';
11
11
 
12
12
  export const SettingsPlugin = Plugin.define(meta).pipe(
13
13
  AppPlugin.addAppGraphModule({ activate: SettingsAppGraphBuilder }),
14
- AppPlugin.addOperationResolverModule({ activate: SettingsOperationResolver }),
14
+ AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),
15
15
  AppPlugin.addTranslationsModule({ translations }),
16
16
  Plugin.make,
17
17
  );
18
+
19
+ export default SettingsPlugin;
package/src/actions.ts CHANGED
@@ -4,20 +4,20 @@
4
4
 
5
5
  import * as Schema from 'effect/Schema';
6
6
 
7
- import { meta } from './meta';
7
+ import { meta } from '#meta';
8
+ import { SETTINGS_ID, SETTINGS_KEY } from '#types';
8
9
 
9
- export const SETTINGS_ID = '!dxos:settings';
10
- export const SETTINGS_KEY = 'settings';
10
+ export { SETTINGS_ID, SETTINGS_KEY };
11
11
 
12
12
  export namespace SettingsAction {
13
- export class Open extends Schema.TaggedClass<Open>()(`${meta.id}/open`, {
13
+ export class Open extends Schema.TaggedClass<Open>()(`${meta.id}.open`, {
14
14
  input: Schema.Struct({
15
15
  plugin: Schema.optional(Schema.String),
16
16
  }),
17
17
  output: Schema.Void,
18
18
  }) {}
19
19
 
20
- export class OpenPluginRegistry extends Schema.TaggedClass<OpenPluginRegistry>()(`${meta.id}/open-plugin-registry`, {
20
+ export class OpenPluginRegistry extends Schema.TaggedClass<OpenPluginRegistry>()(`${meta.id}.open-plugin-registry`, {
21
21
  input: Schema.Void,
22
22
  output: Schema.Void,
23
23
  }) {}
@@ -5,13 +5,14 @@
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
7
  import { Capabilities, Capability, type Plugin as Plugin$ } from '@dxos/app-framework';
8
- import { GraphBuilder, NodeMatcher } from '@dxos/app-graph';
9
- import { AppCapabilities, SettingsOperation } from '@dxos/app-toolkit';
10
- import { Operation } from '@dxos/operation';
8
+ import { GraphBuilder, Node, NodeMatcher } from '@dxos/app-graph';
9
+ import { AppCapabilities, SettingsOperation, getSpacePath } from '@dxos/app-toolkit';
10
+ import { Operation } from '@dxos/compute';
11
11
  import { isNonNullable } from '@dxos/util';
12
12
 
13
- import { SETTINGS_ID, SETTINGS_KEY } from '../../actions';
14
- import { meta } from '../../meta';
13
+ import { meta } from '#meta';
14
+
15
+ import { SETTINGS_ID, SETTINGS_KEY } from '../actions';
15
16
 
16
17
  export default Capability.makeModule(
17
18
  Effect.fnUntraced(function* () {
@@ -22,15 +23,15 @@ export default Capability.makeModule(
22
23
 
23
24
  const extensions = yield* Effect.all([
24
25
  GraphBuilder.createExtension({
25
- id: `${meta.id}/action`,
26
+ id: 'action',
26
27
  match: NodeMatcher.whenRoot,
27
28
  actions: () =>
28
29
  Effect.succeed([
29
30
  {
30
- id: meta.id,
31
+ id: 'root',
31
32
  data: () => Operation.invoke(SettingsOperation.Open, {}),
32
33
  properties: {
33
- label: ['open settings label', { ns: meta.id }],
34
+ label: ['plugin-settings.label', { ns: meta.id }],
34
35
  icon: 'ph--gear--regular',
35
36
  disposition: 'menu',
36
37
  keyBinding: {
@@ -42,26 +43,26 @@ export default Capability.makeModule(
42
43
  ]),
43
44
  }),
44
45
  GraphBuilder.createExtension({
45
- id: `${meta.id}/core`,
46
+ id: 'core',
46
47
  match: NodeMatcher.whenRoot,
47
48
  connector: () =>
48
49
  Effect.succeed([
49
- {
50
+ Node.make({
50
51
  id: SETTINGS_ID,
51
52
  type: meta.id,
52
53
  properties: {
53
- label: ['app settings label', { ns: meta.id }],
54
+ label: ['plugin-settings.label', { ns: meta.id }],
54
55
  icon: 'ph--gear--regular',
55
56
  disposition: 'pin-end',
56
57
  position: 'hoist',
57
58
  testId: 'treeView.appSettings',
58
59
  },
59
- },
60
+ }),
60
61
  ]),
61
62
  }),
62
63
  GraphBuilder.createExtension({
63
- id: `${meta.id}/plugins`,
64
- match: NodeMatcher.whenId(SETTINGS_ID),
64
+ id: 'plugins',
65
+ match: NodeMatcher.whenId(getSpacePath(SETTINGS_ID)),
65
66
  connector: (node, get) => {
66
67
  const [manager] = get(managerAtom);
67
68
  const allSettings = get(settingsAtom);
@@ -77,15 +78,17 @@ export default Capability.makeModule(
77
78
  return [plugin.meta, settings];
78
79
  })
79
80
  .filter(isNonNullable)
80
- .map(([meta, settings]: [Plugin$.Meta, AppCapabilities.Settings]) => ({
81
- id: `${SETTINGS_KEY}:${meta.id.replaceAll('/', ':')}`,
82
- type: 'category',
83
- data: settings,
84
- properties: {
85
- label: meta.name ?? meta.id,
86
- icon: meta.icon ?? 'ph--circle--regular',
87
- },
88
- })),
81
+ .map(([meta, settings]: [Plugin$.Meta, AppCapabilities.Settings]) =>
82
+ Node.make({
83
+ id: `${SETTINGS_KEY}:${meta.id.replaceAll('/', ':')}`,
84
+ type: 'category',
85
+ data: settings,
86
+ properties: {
87
+ label: meta.name ?? meta.id,
88
+ icon: meta.icon ?? 'ph--circle--regular',
89
+ },
90
+ }),
91
+ ),
89
92
  );
90
93
  },
91
94
  }),
@@ -2,5 +2,11 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- export * from './app-graph-builder';
6
- export * from './operation-resolver';
5
+ import { Capability } from '@dxos/app-framework';
6
+ import { OperationHandlerSet } from '@dxos/compute';
7
+
8
+ export const SettingsAppGraphBuilder = Capability.lazy('SettingsAppGraphBuilder', () => import('./app-graph-builder'));
9
+ export const OperationHandler = Capability.lazy<OperationHandlerSet.OperationHandlerSet>(
10
+ 'OperationHandler',
11
+ () => import('./operation-handler'),
12
+ );
@@ -0,0 +1,16 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capabilities, Capability } from '@dxos/app-framework';
8
+ import type { OperationHandlerSet } from '@dxos/compute';
9
+
10
+ import { SettingsOperationHandlerSet } from '#operations';
11
+
12
+ export default Capability.makeModule<OperationHandlerSet.OperationHandlerSet>(
13
+ Effect.fnUntraced(function* () {
14
+ return Capability.contributes(Capabilities.OperationHandler, SettingsOperationHandlerSet);
15
+ }),
16
+ );
package/src/index.ts CHANGED
@@ -2,5 +2,12 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ import { Plugin } from '@dxos/app-framework';
6
+
7
+ import { meta } from './meta';
8
+
9
+ export const SettingsPlugin = Plugin.lazy(meta, () => import('./SettingsPlugin'));
10
+
11
+ export * from './meta';
12
+
5
13
  export * from './actions';
6
- export * from './SettingsPlugin';
package/src/meta.ts CHANGED
@@ -5,6 +5,6 @@
5
5
  import { type Plugin } from '@dxos/app-framework';
6
6
 
7
7
  export const meta: Plugin.Meta = {
8
- id: 'dxos.org/plugin/settings',
8
+ id: 'org.dxos.plugin.settings',
9
9
  name: 'Settings',
10
10
  };
@@ -0,0 +1,10 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { OperationHandlerSet } from '@dxos/compute';
6
+
7
+ export const SettingsOperationHandlerSet = OperationHandlerSet.lazy(
8
+ () => import('./open'),
9
+ () => import('./open-plugin-registry'),
10
+ );
@@ -0,0 +1,28 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capabilities, Capability } from '@dxos/app-framework';
8
+ import { LayoutOperation, SettingsOperation, getSpacePath } from '@dxos/app-toolkit';
9
+ import { Operation } from '@dxos/compute';
10
+
11
+ import { SETTINGS_ID, SETTINGS_KEY } from '../actions';
12
+
13
+ const handler: Operation.WithHandler<typeof SettingsOperation.OpenPluginRegistry> =
14
+ SettingsOperation.OpenPluginRegistry.pipe(
15
+ Operation.withHandler(() =>
16
+ Effect.gen(function* () {
17
+ const { invoke } = yield* Capability.get(Capabilities.OperationInvoker);
18
+ yield* invoke(LayoutOperation.SwitchWorkspace, { subject: getSpacePath(SETTINGS_ID) });
19
+ yield* Effect.fork(
20
+ invoke(LayoutOperation.Open, {
21
+ subject: [`${getSpacePath(SETTINGS_ID)}/${SETTINGS_KEY}:plugins`],
22
+ }),
23
+ );
24
+ }),
25
+ ),
26
+ );
27
+
28
+ export default handler;
@@ -0,0 +1,29 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capabilities, Capability } from '@dxos/app-framework';
8
+ import { LayoutOperation, SettingsOperation, getSpacePath } from '@dxos/app-toolkit';
9
+ import { Operation } from '@dxos/compute';
10
+
11
+ import { SETTINGS_ID, SETTINGS_KEY } from '../actions';
12
+
13
+ const handler: Operation.WithHandler<typeof SettingsOperation.Open> = SettingsOperation.Open.pipe(
14
+ Operation.withHandler((input) =>
15
+ Effect.gen(function* () {
16
+ const { invoke } = yield* Capability.get(Capabilities.OperationInvoker);
17
+ yield* invoke(LayoutOperation.SwitchWorkspace, { subject: getSpacePath(SETTINGS_ID) });
18
+ if (input.plugin) {
19
+ yield* Effect.fork(
20
+ invoke(LayoutOperation.Open, {
21
+ subject: [`${getSpacePath(SETTINGS_ID)}/${SETTINGS_KEY}:${input.plugin.replaceAll('/', ':')}`],
22
+ }),
23
+ );
24
+ }
25
+ }),
26
+ ),
27
+ );
28
+
29
+ export default handler;
package/src/plugin.ts ADDED
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ // Eager re-export of `SettingsPlugin`. See `@dxos/plugin-testing/src/core.ts`
6
+ // for the rationale.
7
+ export * from './SettingsPlugin';
@@ -4,14 +4,13 @@
4
4
 
5
5
  import { type Resource } from '@dxos/app-toolkit';
6
6
 
7
- import { meta } from './meta';
7
+ import { meta } from '#meta';
8
8
 
9
9
  export const translations = [
10
10
  {
11
11
  'en-US': {
12
12
  [meta.id]: {
13
- 'open settings label': 'Open settings',
14
- 'app settings label': 'Settings',
13
+ 'plugin-settings.label': 'Plugin Settings',
15
14
  },
16
15
  },
17
16
  },
@@ -0,0 +1,8 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { pinnedWorkspaceId } from '@dxos/app-toolkit';
6
+
7
+ export const SETTINGS_ID = pinnedWorkspaceId('dxos:settings');
8
+ export const SETTINGS_KEY = 'settings';
@@ -1,97 +0,0 @@
1
- import {
2
- SETTINGS_ID,
3
- SETTINGS_KEY,
4
- meta
5
- } from "./chunk-ONAYSYBX.mjs";
6
-
7
- // src/capabilities/app-graph-builder/app-graph-builder.ts
8
- import * as Effect from "effect/Effect";
9
- import { Capabilities, Capability } from "@dxos/app-framework";
10
- import { GraphBuilder, NodeMatcher } from "@dxos/app-graph";
11
- import { AppCapabilities, SettingsOperation } from "@dxos/app-toolkit";
12
- import { Operation } from "@dxos/operation";
13
- import { isNonNullable } from "@dxos/util";
14
- var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function* () {
15
- const capabilities = yield* Capability.Service;
16
- const managerAtom = capabilities.atom(Capabilities.PluginManager);
17
- const settingsAtom = capabilities.atom(AppCapabilities.Settings);
18
- const extensions = yield* Effect.all([
19
- GraphBuilder.createExtension({
20
- id: `${meta.id}/action`,
21
- match: NodeMatcher.whenRoot,
22
- actions: () => Effect.succeed([
23
- {
24
- id: meta.id,
25
- data: () => Operation.invoke(SettingsOperation.Open, {}),
26
- properties: {
27
- label: [
28
- "open settings label",
29
- {
30
- ns: meta.id
31
- }
32
- ],
33
- icon: "ph--gear--regular",
34
- disposition: "menu",
35
- keyBinding: {
36
- macos: "meta+,",
37
- windows: "alt+,"
38
- }
39
- }
40
- }
41
- ])
42
- }),
43
- GraphBuilder.createExtension({
44
- id: `${meta.id}/core`,
45
- match: NodeMatcher.whenRoot,
46
- connector: () => Effect.succeed([
47
- {
48
- id: SETTINGS_ID,
49
- type: meta.id,
50
- properties: {
51
- label: [
52
- "app settings label",
53
- {
54
- ns: meta.id
55
- }
56
- ],
57
- icon: "ph--gear--regular",
58
- disposition: "pin-end",
59
- position: "hoist",
60
- testId: "treeView.appSettings"
61
- }
62
- }
63
- ])
64
- }),
65
- GraphBuilder.createExtension({
66
- id: `${meta.id}/plugins`,
67
- match: NodeMatcher.whenId(SETTINGS_ID),
68
- connector: (node, get) => {
69
- const [manager] = get(managerAtom);
70
- const allSettings = get(settingsAtom);
71
- return Effect.succeed(manager.getPlugins().map((plugin) => {
72
- const settings = allSettings.find((s) => s.prefix === plugin.meta.id);
73
- if (!settings) {
74
- return null;
75
- }
76
- return [
77
- plugin.meta,
78
- settings
79
- ];
80
- }).filter(isNonNullable).map(([meta2, settings]) => ({
81
- id: `${SETTINGS_KEY}:${meta2.id.replaceAll("/", ":")}`,
82
- type: "category",
83
- data: settings,
84
- properties: {
85
- label: meta2.name ?? meta2.id,
86
- icon: meta2.icon ?? "ph--circle--regular"
87
- }
88
- })));
89
- }
90
- })
91
- ]);
92
- return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);
93
- }));
94
- export {
95
- app_graph_builder_default as default
96
- };
97
- //# sourceMappingURL=app-graph-builder-CCZGWQMT.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/app-graph-builder/app-graph-builder.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability, type Plugin as Plugin$ } from '@dxos/app-framework';\nimport { GraphBuilder, NodeMatcher } from '@dxos/app-graph';\nimport { AppCapabilities, SettingsOperation } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/operation';\nimport { isNonNullable } from '@dxos/util';\n\nimport { SETTINGS_ID, SETTINGS_KEY } from '../../actions';\nimport { meta } from '../../meta';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n // Get context for lazy capability access in callbacks.\n const capabilities = yield* Capability.Service;\n const managerAtom = capabilities.atom(Capabilities.PluginManager);\n const settingsAtom = capabilities.atom(AppCapabilities.Settings);\n\n const extensions = yield* Effect.all([\n GraphBuilder.createExtension({\n id: `${meta.id}/action`,\n match: NodeMatcher.whenRoot,\n actions: () =>\n Effect.succeed([\n {\n id: meta.id,\n data: () => Operation.invoke(SettingsOperation.Open, {}),\n properties: {\n label: ['open settings label', { ns: meta.id }],\n icon: 'ph--gear--regular',\n disposition: 'menu',\n keyBinding: {\n macos: 'meta+,',\n windows: 'alt+,',\n },\n },\n },\n ]),\n }),\n GraphBuilder.createExtension({\n id: `${meta.id}/core`,\n match: NodeMatcher.whenRoot,\n connector: () =>\n Effect.succeed([\n {\n id: SETTINGS_ID,\n type: meta.id,\n properties: {\n label: ['app settings label', { ns: meta.id }],\n icon: 'ph--gear--regular',\n disposition: 'pin-end',\n position: 'hoist',\n testId: 'treeView.appSettings',\n },\n },\n ]),\n }),\n GraphBuilder.createExtension({\n id: `${meta.id}/plugins`,\n match: NodeMatcher.whenId(SETTINGS_ID),\n connector: (node, get) => {\n const [manager] = get(managerAtom);\n const allSettings = get(settingsAtom);\n return Effect.succeed(\n manager\n .getPlugins()\n .map((plugin: Plugin$.Plugin): [Plugin$.Meta, AppCapabilities.Settings] | null => {\n const settings = allSettings.find((s) => s.prefix === plugin.meta.id);\n if (!settings) {\n return null;\n }\n\n return [plugin.meta, settings];\n })\n .filter(isNonNullable)\n .map(([meta, settings]: [Plugin$.Meta, AppCapabilities.Settings]) => ({\n id: `${SETTINGS_KEY}:${meta.id.replaceAll('/', ':')}`,\n type: 'category',\n data: settings,\n properties: {\n label: meta.name ?? meta.id,\n icon: meta.icon ?? 'ph--circle--regular',\n },\n })),\n );\n },\n }),\n ]);\n\n return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);\n }),\n);\n"],
5
- "mappings": ";;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,cAAcC,kBAA0C;AACjE,SAASC,cAAcC,mBAAmB;AAC1C,SAASC,iBAAiBC,yBAAyB;AACnD,SAASC,iBAAiB;AAC1B,SAASC,qBAAqB;AAK9B,IAAA,4BAAeC,WAAWC,WACjBC,kBAAW,aAAA;AAEhB,QAAMC,eAAe,OAAOH,WAAWI;AACvC,QAAMC,cAAcF,aAAaG,KAAKC,aAAaC,aAAa;AAChE,QAAMC,eAAeN,aAAaG,KAAKI,gBAAgBC,QAAQ;AAE/D,QAAMC,aAAa,OAAcC,WAAI;IACnCC,aAAaC,gBAAgB;MAC3BC,IAAI,GAAGC,KAAKD,EAAE;MACdE,OAAOC,YAAYC;MACnBC,SAAS,MACAC,eAAQ;QACb;UACEN,IAAIC,KAAKD;UACTO,MAAM,MAAMC,UAAUC,OAAOC,kBAAkBC,MAAM,CAAC,CAAA;UACtDC,YAAY;YACVC,OAAO;cAAC;cAAuB;gBAAEC,IAAIb,KAAKD;cAAG;;YAC7Ce,MAAM;YACNC,aAAa;YACbC,YAAY;cACVC,OAAO;cACPC,SAAS;YACX;UACF;QACF;OACD;IACL,CAAA;IACArB,aAAaC,gBAAgB;MAC3BC,IAAI,GAAGC,KAAKD,EAAE;MACdE,OAAOC,YAAYC;MACnBgB,WAAW,MACFd,eAAQ;QACb;UACEN,IAAIqB;UACJC,MAAMrB,KAAKD;UACXY,YAAY;YACVC,OAAO;cAAC;cAAsB;gBAAEC,IAAIb,KAAKD;cAAG;;YAC5Ce,MAAM;YACNC,aAAa;YACbO,UAAU;YACVC,QAAQ;UACV;QACF;OACD;IACL,CAAA;IACA1B,aAAaC,gBAAgB;MAC3BC,IAAI,GAAGC,KAAKD,EAAE;MACdE,OAAOC,YAAYsB,OAAOJ,WAAAA;MAC1BD,WAAW,CAACM,MAAMC,QAAAA;AAChB,cAAM,CAACC,OAAAA,IAAWD,IAAItC,WAAAA;AACtB,cAAMwC,cAAcF,IAAIlC,YAAAA;AACxB,eAAca,eACZsB,QACGE,WAAU,EACVC,IAAI,CAACC,WAAAA;AACJ,gBAAMC,WAAWJ,YAAYK,KAAK,CAACC,MAAMA,EAAEC,WAAWJ,OAAO/B,KAAKD,EAAE;AACpE,cAAI,CAACiC,UAAU;AACb,mBAAO;UACT;AAEA,iBAAO;YAACD,OAAO/B;YAAMgC;;QACvB,CAAA,EACCI,OAAOC,aAAAA,EACPP,IAAI,CAAC,CAAC9B,OAAMgC,QAAAA,OAAyD;UACpEjC,IAAI,GAAGuC,YAAAA,IAAgBtC,MAAKD,GAAGwC,WAAW,KAAK,GAAA,CAAA;UAC/ClB,MAAM;UACNf,MAAM0B;UACNrB,YAAY;YACVC,OAAOZ,MAAKwC,QAAQxC,MAAKD;YACzBe,MAAMd,MAAKc,QAAQ;UACrB;QACF,EAAA,CAAA;MAEN;IACF,CAAA;GACD;AAED,SAAO/B,WAAW0D,YAAYhD,gBAAgBiD,iBAAiB/C,UAAAA;AACjE,CAAA,CAAA;",
6
- "names": ["Effect", "Capabilities", "Capability", "GraphBuilder", "NodeMatcher", "AppCapabilities", "SettingsOperation", "Operation", "isNonNullable", "Capability", "makeModule", "fnUntraced", "capabilities", "Service", "managerAtom", "atom", "Capabilities", "PluginManager", "settingsAtom", "AppCapabilities", "Settings", "extensions", "all", "GraphBuilder", "createExtension", "id", "meta", "match", "NodeMatcher", "whenRoot", "actions", "succeed", "data", "Operation", "invoke", "SettingsOperation", "Open", "properties", "label", "ns", "icon", "disposition", "keyBinding", "macos", "windows", "connector", "SETTINGS_ID", "type", "position", "testId", "whenId", "node", "get", "manager", "allSettings", "getPlugins", "map", "plugin", "settings", "find", "s", "prefix", "filter", "isNonNullable", "SETTINGS_KEY", "replaceAll", "name", "contributes", "AppGraphBuilder"]
7
- }
@@ -1,35 +0,0 @@
1
- // src/meta.ts
2
- var meta = {
3
- id: "dxos.org/plugin/settings",
4
- name: "Settings"
5
- };
6
-
7
- // src/actions.ts
8
- import * as Schema from "effect/Schema";
9
- var SETTINGS_ID = "!dxos:settings";
10
- var SETTINGS_KEY = "settings";
11
- (function(SettingsAction2) {
12
- class Open extends Schema.TaggedClass()(`${meta.id}/open`, {
13
- input: Schema.Struct({
14
- plugin: Schema.optional(Schema.String)
15
- }),
16
- output: Schema.Void
17
- }) {
18
- }
19
- SettingsAction2.Open = Open;
20
- class OpenPluginRegistry extends Schema.TaggedClass()(`${meta.id}/open-plugin-registry`, {
21
- input: Schema.Void,
22
- output: Schema.Void
23
- }) {
24
- }
25
- SettingsAction2.OpenPluginRegistry = OpenPluginRegistry;
26
- })(SettingsAction || (SettingsAction = {}));
27
- var SettingsAction;
28
-
29
- export {
30
- meta,
31
- SETTINGS_ID,
32
- SETTINGS_KEY,
33
- SettingsAction
34
- };
35
- //# sourceMappingURL=chunk-ONAYSYBX.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/meta.ts", "../../../src/actions.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Plugin } from '@dxos/app-framework';\n\nexport const meta: Plugin.Meta = {\n id: 'dxos.org/plugin/settings',\n name: 'Settings',\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { meta } from './meta';\n\nexport const SETTINGS_ID = '!dxos:settings';\nexport const SETTINGS_KEY = 'settings';\n\nexport namespace SettingsAction {\n export class Open extends Schema.TaggedClass<Open>()(`${meta.id}/open`, {\n input: Schema.Struct({\n plugin: Schema.optional(Schema.String),\n }),\n output: Schema.Void,\n }) {}\n\n export class OpenPluginRegistry extends Schema.TaggedClass<OpenPluginRegistry>()(`${meta.id}/open-plugin-registry`, {\n input: Schema.Void,\n output: Schema.Void,\n }) {}\n}\n"],
5
- "mappings": ";AAMO,IAAMA,OAAoB;EAC/BC,IAAI;EACJC,MAAM;AACR;;;ACLA,YAAYC,YAAY;AAIjB,IAAMC,cAAc;AACpB,IAAMC,eAAe;UAEXC,iBAAAA;EACR,MAAMC,aAAoBC,mBAAW,EAAS,GAAGC,KAAKC,EAAE,SAAS;IACtEC,OAAcC,cAAO;MACnBC,QAAeC,gBAAgBC,aAAM;IACvC,CAAA;IACAC,QAAeC;EACjB,CAAA,EAAA;EAAI;kBALSV,OAAAA;EAON,MAAMW,2BAAkCV,mBAAW,EAAuB,GAAGC,KAAKC,EAAE,yBAAyB;IAClHC,OAAcM;IACdD,QAAeC;EACjB,CAAA,EAAA;EAAI;kBAHSC,qBAAAA;AAIf,GAZiBZ,mBAAAA,iBAAAA,CAAAA,EAAAA;;",
6
- "names": ["meta", "id", "name", "Schema", "SETTINGS_ID", "SETTINGS_KEY", "SettingsAction", "Open", "TaggedClass", "meta", "id", "input", "Struct", "plugin", "optional", "String", "output", "Void", "OpenPluginRegistry"]
7
- }
@@ -1,54 +0,0 @@
1
- import {
2
- SETTINGS_ID,
3
- SETTINGS_KEY
4
- } from "./chunk-ONAYSYBX.mjs";
5
-
6
- // src/capabilities/operation-resolver/operation-resolver.ts
7
- import * as Effect from "effect/Effect";
8
- import { Capabilities, Capability } from "@dxos/app-framework";
9
- import { LayoutOperation, SettingsOperation } from "@dxos/app-toolkit";
10
- import { OperationResolver } from "@dxos/operation";
11
- var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(function* () {
12
- return Capability.contributes(Capabilities.OperationResolver, [
13
- //
14
- // Open Settings
15
- //
16
- OperationResolver.make({
17
- operation: SettingsOperation.Open,
18
- handler: (input) => Effect.gen(function* () {
19
- const { invoke } = yield* Capability.get(Capabilities.OperationInvoker);
20
- yield* invoke(LayoutOperation.SwitchWorkspace, {
21
- subject: SETTINGS_ID
22
- });
23
- if (input.plugin) {
24
- yield* Effect.fork(invoke(LayoutOperation.Open, {
25
- subject: [
26
- `${SETTINGS_KEY}:${input.plugin.replaceAll("/", ":")}`
27
- ]
28
- }));
29
- }
30
- })
31
- }),
32
- //
33
- // Open Plugin Registry
34
- //
35
- OperationResolver.make({
36
- operation: SettingsOperation.OpenPluginRegistry,
37
- handler: () => Effect.gen(function* () {
38
- const { invoke } = yield* Capability.get(Capabilities.OperationInvoker);
39
- yield* invoke(LayoutOperation.SwitchWorkspace, {
40
- subject: SETTINGS_ID
41
- });
42
- yield* Effect.fork(invoke(LayoutOperation.Open, {
43
- subject: [
44
- `${SETTINGS_KEY}:plugins`
45
- ]
46
- }));
47
- })
48
- })
49
- ]);
50
- }));
51
- export {
52
- operation_resolver_default as default
53
- };
54
- //# sourceMappingURL=operation-resolver-IIUEJRBW.mjs.map