@dxos/plugin-settings 0.6.14-main.2b6a0f3 → 0.8.4-main.1068cf700f
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-CCZGWQMT.mjs +97 -0
- package/dist/lib/browser/app-graph-builder-CCZGWQMT.mjs.map +7 -0
- package/dist/lib/browser/chunk-ONAYSYBX.mjs +35 -0
- package/dist/lib/browser/chunk-ONAYSYBX.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +31 -242
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/operation-resolver-IIUEJRBW.mjs +54 -0
- package/dist/lib/browser/operation-resolver-IIUEJRBW.mjs.map +7 -0
- package/dist/lib/node-esm/app-graph-builder-LZWJ45UQ.mjs +98 -0
- package/dist/lib/node-esm/app-graph-builder-LZWJ45UQ.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-TSHGTOLF.mjs +37 -0
- package/dist/lib/node-esm/chunk-TSHGTOLF.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +31 -242
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/operation-resolver-QRFPVUSP.mjs +55 -0
- package/dist/lib/node-esm/operation-resolver-QRFPVUSP.mjs.map +7 -0
- package/dist/types/src/SettingsPlugin.d.ts +2 -6
- package/dist/types/src/SettingsPlugin.d.ts.map +1 -1
- package/dist/types/src/actions.d.ts +25 -0
- package/dist/types/src/actions.d.ts.map +1 -0
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +3 -0
- package/dist/types/src/capabilities/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
- package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +1 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +2 -5
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +7 -9
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -0
- package/package.json +21 -36
- package/src/SettingsPlugin.ts +17 -0
- package/src/actions.ts +24 -0
- package/src/capabilities/app-graph-builder/app-graph-builder.ts +96 -0
- package/src/capabilities/app-graph-builder/index.ts +7 -0
- package/src/capabilities/index.ts +6 -0
- package/src/capabilities/operation-resolver/index.ts +10 -0
- package/src/capabilities/operation-resolver/operation-resolver.ts +54 -0
- package/src/index.ts +2 -9
- package/src/meta.ts +6 -7
- package/src/translations.ts +9 -9
- package/README.md +0 -15
- package/dist/lib/browser/chunk-PD3C4TDW.mjs +0 -11
- package/dist/lib/browser/chunk-PD3C4TDW.mjs.map +0 -7
- package/dist/lib/browser/meta.mjs +0 -9
- package/dist/lib/browser/meta.mjs.map +0 -7
- package/dist/lib/node/chunk-AHM6OLF2.cjs +0 -34
- package/dist/lib/node/chunk-AHM6OLF2.cjs.map +0 -7
- package/dist/lib/node/index.cjs +0 -278
- package/dist/lib/node/index.cjs.map +0 -7
- package/dist/lib/node/meta.cjs +0 -30
- package/dist/lib/node/meta.cjs.map +0 -7
- package/dist/lib/node/meta.json +0 -1
- package/dist/lib/node-esm/chunk-PPOEIFFE.mjs +0 -13
- package/dist/lib/node-esm/chunk-PPOEIFFE.mjs.map +0 -7
- package/dist/lib/node-esm/meta.mjs +0 -10
- package/dist/lib/node-esm/meta.mjs.map +0 -7
- package/dist/types/src/components/SettingsDialog.d.ts +0 -6
- package/dist/types/src/components/SettingsDialog.d.ts.map +0 -1
- package/dist/types/src/components/SettingsValue.d.ts +0 -9
- package/dist/types/src/components/SettingsValue.d.ts.map +0 -1
- package/dist/types/src/components/index.d.ts +0 -3
- package/dist/types/src/components/index.d.ts.map +0 -1
- package/src/SettingsPlugin.tsx +0 -122
- package/src/components/SettingsDialog.tsx +0 -126
- package/src/components/SettingsValue.tsx +0 -49
- package/src/components/index.ts +0 -6
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
SETTINGS_ID,
|
|
4
|
+
SETTINGS_KEY,
|
|
5
|
+
meta
|
|
6
|
+
} from "./chunk-TSHGTOLF.mjs";
|
|
7
|
+
|
|
8
|
+
// src/capabilities/app-graph-builder/app-graph-builder.ts
|
|
9
|
+
import * as Effect from "effect/Effect";
|
|
10
|
+
import { Capabilities, Capability } from "@dxos/app-framework";
|
|
11
|
+
import { GraphBuilder, NodeMatcher } from "@dxos/app-graph";
|
|
12
|
+
import { AppCapabilities, SettingsOperation } from "@dxos/app-toolkit";
|
|
13
|
+
import { Operation } from "@dxos/operation";
|
|
14
|
+
import { isNonNullable } from "@dxos/util";
|
|
15
|
+
var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function* () {
|
|
16
|
+
const capabilities = yield* Capability.Service;
|
|
17
|
+
const managerAtom = capabilities.atom(Capabilities.PluginManager);
|
|
18
|
+
const settingsAtom = capabilities.atom(AppCapabilities.Settings);
|
|
19
|
+
const extensions = yield* Effect.all([
|
|
20
|
+
GraphBuilder.createExtension({
|
|
21
|
+
id: `${meta.id}/action`,
|
|
22
|
+
match: NodeMatcher.whenRoot,
|
|
23
|
+
actions: () => Effect.succeed([
|
|
24
|
+
{
|
|
25
|
+
id: meta.id,
|
|
26
|
+
data: () => Operation.invoke(SettingsOperation.Open, {}),
|
|
27
|
+
properties: {
|
|
28
|
+
label: [
|
|
29
|
+
"open settings label",
|
|
30
|
+
{
|
|
31
|
+
ns: meta.id
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
icon: "ph--gear--regular",
|
|
35
|
+
disposition: "menu",
|
|
36
|
+
keyBinding: {
|
|
37
|
+
macos: "meta+,",
|
|
38
|
+
windows: "alt+,"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
])
|
|
43
|
+
}),
|
|
44
|
+
GraphBuilder.createExtension({
|
|
45
|
+
id: `${meta.id}/core`,
|
|
46
|
+
match: NodeMatcher.whenRoot,
|
|
47
|
+
connector: () => Effect.succeed([
|
|
48
|
+
{
|
|
49
|
+
id: SETTINGS_ID,
|
|
50
|
+
type: meta.id,
|
|
51
|
+
properties: {
|
|
52
|
+
label: [
|
|
53
|
+
"app settings label",
|
|
54
|
+
{
|
|
55
|
+
ns: meta.id
|
|
56
|
+
}
|
|
57
|
+
],
|
|
58
|
+
icon: "ph--gear--regular",
|
|
59
|
+
disposition: "pin-end",
|
|
60
|
+
position: "hoist",
|
|
61
|
+
testId: "treeView.appSettings"
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
])
|
|
65
|
+
}),
|
|
66
|
+
GraphBuilder.createExtension({
|
|
67
|
+
id: `${meta.id}/plugins`,
|
|
68
|
+
match: NodeMatcher.whenId(SETTINGS_ID),
|
|
69
|
+
connector: (node, get) => {
|
|
70
|
+
const [manager] = get(managerAtom);
|
|
71
|
+
const allSettings = get(settingsAtom);
|
|
72
|
+
return Effect.succeed(manager.getPlugins().map((plugin) => {
|
|
73
|
+
const settings = allSettings.find((s) => s.prefix === plugin.meta.id);
|
|
74
|
+
if (!settings) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
return [
|
|
78
|
+
plugin.meta,
|
|
79
|
+
settings
|
|
80
|
+
];
|
|
81
|
+
}).filter(isNonNullable).map(([meta2, settings]) => ({
|
|
82
|
+
id: `${SETTINGS_KEY}:${meta2.id.replaceAll("/", ":")}`,
|
|
83
|
+
type: "category",
|
|
84
|
+
data: settings,
|
|
85
|
+
properties: {
|
|
86
|
+
label: meta2.name ?? meta2.id,
|
|
87
|
+
icon: meta2.icon ?? "ph--circle--regular"
|
|
88
|
+
}
|
|
89
|
+
})));
|
|
90
|
+
}
|
|
91
|
+
})
|
|
92
|
+
]);
|
|
93
|
+
return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);
|
|
94
|
+
}));
|
|
95
|
+
export {
|
|
96
|
+
app_graph_builder_default as default
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=app-graph-builder-LZWJ45UQ.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
+
|
|
3
|
+
// src/meta.ts
|
|
4
|
+
var meta = {
|
|
5
|
+
id: "dxos.org/plugin/settings",
|
|
6
|
+
name: "Settings"
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
// src/actions.ts
|
|
10
|
+
import * as Schema from "effect/Schema";
|
|
11
|
+
var SETTINGS_ID = "!dxos:settings";
|
|
12
|
+
var SETTINGS_KEY = "settings";
|
|
13
|
+
(function(SettingsAction2) {
|
|
14
|
+
class Open extends Schema.TaggedClass()(`${meta.id}/open`, {
|
|
15
|
+
input: Schema.Struct({
|
|
16
|
+
plugin: Schema.optional(Schema.String)
|
|
17
|
+
}),
|
|
18
|
+
output: Schema.Void
|
|
19
|
+
}) {
|
|
20
|
+
}
|
|
21
|
+
SettingsAction2.Open = Open;
|
|
22
|
+
class OpenPluginRegistry extends Schema.TaggedClass()(`${meta.id}/open-plugin-registry`, {
|
|
23
|
+
input: Schema.Void,
|
|
24
|
+
output: Schema.Void
|
|
25
|
+
}) {
|
|
26
|
+
}
|
|
27
|
+
SettingsAction2.OpenPluginRegistry = OpenPluginRegistry;
|
|
28
|
+
})(SettingsAction || (SettingsAction = {}));
|
|
29
|
+
var SettingsAction;
|
|
30
|
+
|
|
31
|
+
export {
|
|
32
|
+
meta,
|
|
33
|
+
SETTINGS_ID,
|
|
34
|
+
SETTINGS_KEY,
|
|
35
|
+
SettingsAction
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=chunk-TSHGTOLF.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
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,258 +1,47 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
SETTINGS_ID,
|
|
4
|
+
SETTINGS_KEY,
|
|
5
|
+
SettingsAction,
|
|
6
|
+
meta
|
|
7
|
+
} from "./chunk-TSHGTOLF.mjs";
|
|
6
8
|
|
|
7
|
-
//
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
10
|
-
import { LocalStorageStore } from "@dxos/local-storage";
|
|
11
|
-
import { createExtension } from "@dxos/plugin-graph";
|
|
9
|
+
// src/SettingsPlugin.ts
|
|
10
|
+
import { Plugin } from "@dxos/app-framework";
|
|
11
|
+
import { AppPlugin } from "@dxos/app-toolkit";
|
|
12
12
|
|
|
13
|
-
//
|
|
14
|
-
import
|
|
15
|
-
|
|
16
|
-
import { Button, Dialog, Icon, useTranslation } from "@dxos/react-ui";
|
|
17
|
-
import { Tabs } from "@dxos/react-ui-tabs";
|
|
18
|
-
import { getSize } from "@dxos/react-ui-theme";
|
|
19
|
-
import { nonNullable } from "@dxos/util";
|
|
20
|
-
var SettingsDialog = ({ selected, onSelected }) => {
|
|
21
|
-
const { t } = useTranslation(SETTINGS_PLUGIN);
|
|
22
|
-
const { plugins, enabled } = usePlugins();
|
|
23
|
-
const core = [
|
|
24
|
-
"dxos.org/plugin/layout",
|
|
25
|
-
"dxos.org/plugin/deck",
|
|
26
|
-
"dxos.org/plugin/files",
|
|
27
|
-
"dxos.org/plugin/space",
|
|
28
|
-
"dxos.org/plugin/stack",
|
|
29
|
-
"dxos.org/plugin/observability",
|
|
30
|
-
"dxos.org/plugin/registry"
|
|
31
|
-
];
|
|
32
|
-
const sortPlugin = ({ name: a }, { name: b }) => a?.localeCompare(b ?? "") ?? 0;
|
|
33
|
-
const corePlugins = core.map((id) => plugins.find((plugin) => plugin.meta.id === id)?.meta).filter(nonNullable).sort(sortPlugin);
|
|
34
|
-
const filteredPlugins = enabled.filter((id) => !core.includes(id)).map((id) => plugins.find((plugin) => plugin.meta.id === id)).filter((plugin) => plugin?.provides?.settings).map((plugin) => plugin.meta).sort(sortPlugin);
|
|
35
|
-
const [tabsActivePart, setTabsActivePart] = useState("list");
|
|
36
|
-
return /* @__PURE__ */ React.createElement(Dialog.Content, {
|
|
37
|
-
classNames: "p-0 bs-content max-bs-full md:max-is-[40rem] overflow-hidden"
|
|
38
|
-
}, /* @__PURE__ */ React.createElement("div", {
|
|
39
|
-
role: "none",
|
|
40
|
-
className: "flex justify-between mbe-1 pbs-3 pis-2 pie-3 @md:pbs-4 @md:pis-4 @md:pie-5"
|
|
41
|
-
}, /* @__PURE__ */ React.createElement(Dialog.Title, {
|
|
42
|
-
onClick: () => setTabsActivePart("list"),
|
|
43
|
-
"aria-description": t("click to return to tablist description"),
|
|
44
|
-
classNames: "flex cursor-pointer items-center group/title"
|
|
45
|
-
}, /* @__PURE__ */ React.createElement(Icon, {
|
|
46
|
-
icon: "ph--caret-left--regular",
|
|
47
|
-
classNames: [
|
|
48
|
-
"@md:hidden",
|
|
49
|
-
getSize(4),
|
|
50
|
-
tabsActivePart === "list" && "invisible"
|
|
51
|
-
]
|
|
52
|
-
}), /* @__PURE__ */ React.createElement("span", {
|
|
53
|
-
className: tabsActivePart !== "list" ? "group-hover/title:underline @md:group-hover/title:no-underline underline-offset-4 decoration-1" : ""
|
|
54
|
-
}, t("settings dialog title"))), /* @__PURE__ */ React.createElement(Dialog.Close, {
|
|
55
|
-
asChild: true
|
|
56
|
-
}, /* @__PURE__ */ React.createElement(Button, {
|
|
57
|
-
density: "fine",
|
|
58
|
-
variant: "ghost",
|
|
59
|
-
autoFocus: true
|
|
60
|
-
}, /* @__PURE__ */ React.createElement(Icon, {
|
|
61
|
-
icon: "ph--x--regular",
|
|
62
|
-
size: 3
|
|
63
|
-
})))), /* @__PURE__ */ React.createElement(Tabs.Root, {
|
|
64
|
-
orientation: "vertical",
|
|
65
|
-
value: selected,
|
|
66
|
-
onValueChange: (nextSelected) => onSelected(nextSelected),
|
|
67
|
-
activePart: tabsActivePart,
|
|
68
|
-
onActivePartChange: setTabsActivePart,
|
|
69
|
-
classNames: "flex flex-col flex-1 mbs-2"
|
|
70
|
-
}, /* @__PURE__ */ React.createElement(Tabs.Viewport, {
|
|
71
|
-
classNames: "flex-1 min-bs-0"
|
|
72
|
-
}, /* @__PURE__ */ React.createElement("div", {
|
|
73
|
-
role: "none",
|
|
74
|
-
className: "overflow-y-auto pli-3 @md:pis-2 @md:pie-0 mbe-4 border-r border-separator"
|
|
75
|
-
}, /* @__PURE__ */ React.createElement(Tabs.Tablist, {
|
|
76
|
-
classNames: "flex flex-col gap-4 max-bs-none overflow-y-visible"
|
|
77
|
-
}, /* @__PURE__ */ React.createElement(PluginList, {
|
|
78
|
-
title: "Options",
|
|
79
|
-
plugins: corePlugins
|
|
80
|
-
}), filteredPlugins.length > 0 && /* @__PURE__ */ React.createElement(PluginList, {
|
|
81
|
-
title: "Plugins",
|
|
82
|
-
plugins: filteredPlugins
|
|
83
|
-
}))), corePlugins.map((plugin) => /* @__PURE__ */ React.createElement(Tabs.Tabpanel, {
|
|
84
|
-
key: plugin.id,
|
|
85
|
-
value: plugin.id,
|
|
86
|
-
classNames: "pli-3 @md:pli-5 max-bs-dvh overflow-y-auto"
|
|
87
|
-
}, /* @__PURE__ */ React.createElement(Surface, {
|
|
88
|
-
role: "settings",
|
|
89
|
-
data: {
|
|
90
|
-
plugin: plugin.id
|
|
91
|
-
}
|
|
92
|
-
}))), filteredPlugins.map((plugin) => /* @__PURE__ */ React.createElement(Tabs.Tabpanel, {
|
|
93
|
-
key: plugin.id,
|
|
94
|
-
value: plugin.id,
|
|
95
|
-
classNames: "pli-3 @md:pli-5 max-bs-dvh overflow-y-auto"
|
|
96
|
-
}, /* @__PURE__ */ React.createElement(Surface, {
|
|
97
|
-
role: "settings",
|
|
98
|
-
data: {
|
|
99
|
-
plugin: plugin.id
|
|
100
|
-
}
|
|
101
|
-
}))))));
|
|
102
|
-
};
|
|
103
|
-
var PluginList = ({ title, plugins }) => {
|
|
104
|
-
return /* @__PURE__ */ React.createElement("div", {
|
|
105
|
-
role: "none"
|
|
106
|
-
}, /* @__PURE__ */ React.createElement(Tabs.TabGroupHeading, {
|
|
107
|
-
classNames: "pli-1 mlb-2 mbs-4 @md:mbs-2"
|
|
108
|
-
}, title), /* @__PURE__ */ React.createElement("div", {
|
|
109
|
-
className: "flex flex-col ml-1"
|
|
110
|
-
}, plugins.map((plugin) => /* @__PURE__ */ React.createElement(Tabs.Tab, {
|
|
111
|
-
key: plugin.id,
|
|
112
|
-
value: plugin.id
|
|
113
|
-
}, plugin.name))));
|
|
114
|
-
};
|
|
13
|
+
// src/capabilities/app-graph-builder/index.ts
|
|
14
|
+
import { Capability } from "@dxos/app-framework";
|
|
15
|
+
var SettingsAppGraphBuilder = Capability.lazy("SettingsAppGraphBuilder", () => import("./app-graph-builder-LZWJ45UQ.mjs"));
|
|
115
16
|
|
|
116
|
-
//
|
|
117
|
-
import
|
|
118
|
-
|
|
119
|
-
var SettingsValue = ({ label, description, secondary, children }) => {
|
|
120
|
-
const primary = /* @__PURE__ */ React2.createElement("div", {
|
|
121
|
-
role: "none",
|
|
122
|
-
className: "flex w-full gap-4 py-1"
|
|
123
|
-
}, /* @__PURE__ */ React2.createElement(Input.Root, null, /* @__PURE__ */ React2.createElement("div", {
|
|
124
|
-
role: "none",
|
|
125
|
-
className: "flex flex-col w-full"
|
|
126
|
-
}, /* @__PURE__ */ React2.createElement(Input.Label, {
|
|
127
|
-
classNames: "flex min-h-[40px] items-center"
|
|
128
|
-
}, label), description && /* @__PURE__ */ React2.createElement(Input.DescriptionAndValidation, {
|
|
129
|
-
classNames: "mbs-0.5"
|
|
130
|
-
}, /* @__PURE__ */ React2.createElement(Input.Description, null, description))), /* @__PURE__ */ React2.createElement("div", {
|
|
131
|
-
role: "none"
|
|
132
|
-
}, /* @__PURE__ */ React2.createElement("div", {
|
|
133
|
-
role: "none",
|
|
134
|
-
className: "flex min-h-[40px] items-center"
|
|
135
|
-
}, children))));
|
|
136
|
-
if (secondary) {
|
|
137
|
-
return /* @__PURE__ */ React2.createElement("div", {
|
|
138
|
-
role: "none",
|
|
139
|
-
className: "flex flex-col w-full"
|
|
140
|
-
}, primary, secondary);
|
|
141
|
-
}
|
|
142
|
-
return primary;
|
|
143
|
-
};
|
|
17
|
+
// src/capabilities/operation-resolver/index.ts
|
|
18
|
+
import { Capability as Capability2 } from "@dxos/app-framework";
|
|
19
|
+
var SettingsOperationResolver = Capability2.lazy("SettingsOperationResolver", () => import("./operation-resolver-QRFPVUSP.mjs"));
|
|
144
20
|
|
|
145
|
-
//
|
|
146
|
-
var
|
|
21
|
+
// src/translations.ts
|
|
22
|
+
var translations = [
|
|
147
23
|
{
|
|
148
24
|
"en-US": {
|
|
149
|
-
[
|
|
150
|
-
"open settings label": "
|
|
151
|
-
"settings
|
|
152
|
-
"back label": "Back",
|
|
153
|
-
"click to return to tablist description": "Click the title to return to the settings menu"
|
|
25
|
+
[meta.id]: {
|
|
26
|
+
"open settings label": "Open settings",
|
|
27
|
+
"app settings label": "Settings"
|
|
154
28
|
}
|
|
155
29
|
}
|
|
156
30
|
}
|
|
157
31
|
];
|
|
158
32
|
|
|
159
|
-
//
|
|
160
|
-
var
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
ready: async () => {
|
|
168
|
-
settings.prop({
|
|
169
|
-
key: "selected",
|
|
170
|
-
type: LocalStorageStore.string()
|
|
171
|
-
});
|
|
172
|
-
},
|
|
173
|
-
provides: {
|
|
174
|
-
surface: {
|
|
175
|
-
component: ({ data }) => {
|
|
176
|
-
switch (data.component) {
|
|
177
|
-
case `${SETTINGS_PLUGIN}/Settings`:
|
|
178
|
-
return /* @__PURE__ */ React3.createElement(SettingsDialog, {
|
|
179
|
-
selected: settings.values.selected,
|
|
180
|
-
onSelected: (selected) => settings.values.selected = selected
|
|
181
|
-
});
|
|
182
|
-
default:
|
|
183
|
-
return null;
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
},
|
|
187
|
-
intent: {
|
|
188
|
-
resolver: (intent) => {
|
|
189
|
-
switch (intent.action) {
|
|
190
|
-
case SettingsAction.OPEN: {
|
|
191
|
-
if (intent.data?.plugin) {
|
|
192
|
-
settings.values.selected = intent.data?.plugin;
|
|
193
|
-
}
|
|
194
|
-
return {
|
|
195
|
-
intents: [
|
|
196
|
-
[
|
|
197
|
-
{
|
|
198
|
-
action: LayoutAction.SET_LAYOUT,
|
|
199
|
-
data: {
|
|
200
|
-
element: "dialog",
|
|
201
|
-
component: `${SETTINGS_PLUGIN}/Settings`,
|
|
202
|
-
dialogBlockAlign: "start"
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
]
|
|
206
|
-
]
|
|
207
|
-
};
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
},
|
|
212
|
-
graph: {
|
|
213
|
-
builder: (plugins) => {
|
|
214
|
-
const intentPlugin = resolvePlugin(plugins, parseIntentPlugin);
|
|
215
|
-
return createExtension({
|
|
216
|
-
id: SETTINGS_PLUGIN,
|
|
217
|
-
filter: (node) => node.id === "root",
|
|
218
|
-
actions: () => [
|
|
219
|
-
{
|
|
220
|
-
id: SETTINGS_PLUGIN,
|
|
221
|
-
data: async () => {
|
|
222
|
-
await intentPlugin?.provides.intent.dispatch({
|
|
223
|
-
plugin: SETTINGS_PLUGIN,
|
|
224
|
-
action: SettingsAction.OPEN
|
|
225
|
-
});
|
|
226
|
-
},
|
|
227
|
-
properties: {
|
|
228
|
-
label: [
|
|
229
|
-
"open settings label",
|
|
230
|
-
{
|
|
231
|
-
ns: SETTINGS_PLUGIN
|
|
232
|
-
}
|
|
233
|
-
],
|
|
234
|
-
icon: "ph--gear--regular",
|
|
235
|
-
keyBinding: {
|
|
236
|
-
macos: "meta+,",
|
|
237
|
-
windows: "alt+,"
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
]
|
|
242
|
-
});
|
|
243
|
-
}
|
|
244
|
-
},
|
|
245
|
-
translations: translations_default
|
|
246
|
-
}
|
|
247
|
-
};
|
|
248
|
-
};
|
|
249
|
-
|
|
250
|
-
// packages/plugins/plugin-settings/src/index.ts
|
|
251
|
-
var src_default = SettingsPlugin;
|
|
33
|
+
// src/SettingsPlugin.ts
|
|
34
|
+
var SettingsPlugin = Plugin.define(meta).pipe(AppPlugin.addAppGraphModule({
|
|
35
|
+
activate: SettingsAppGraphBuilder
|
|
36
|
+
}), AppPlugin.addOperationResolverModule({
|
|
37
|
+
activate: SettingsOperationResolver
|
|
38
|
+
}), AppPlugin.addTranslationsModule({
|
|
39
|
+
translations
|
|
40
|
+
}), Plugin.make);
|
|
252
41
|
export {
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
42
|
+
SETTINGS_ID,
|
|
43
|
+
SETTINGS_KEY,
|
|
44
|
+
SettingsAction,
|
|
45
|
+
SettingsPlugin
|
|
257
46
|
};
|
|
258
47
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../src/SettingsPlugin.
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport {\n type IntentResolverProvides,\n type PluginDefinition,\n type SurfaceProvides,\n parseIntentPlugin,\n resolvePlugin,\n LayoutAction,\n SettingsAction,\n type GraphBuilderProvides,\n type TranslationsProvides,\n} from '@dxos/app-framework';\nimport { LocalStorageStore } from '@dxos/local-storage';\nimport { createExtension, type Node } from '@dxos/plugin-graph';\n\nimport { SettingsDialog } from './components';\nimport meta, { SETTINGS_PLUGIN } from './meta';\nimport translations from './translations';\n\nconst DEFAULT_PLUGIN = 'dxos.org/plugin/registry';\n\nexport type SettingsPluginProvides = SurfaceProvides &\n IntentResolverProvides &\n GraphBuilderProvides &\n TranslationsProvides;\n\ntype SettingsSettingsProps = {\n selected: string;\n};\n\n/**\n * Plugin for aggregating and rendering plugin settings.\n */\nexport const SettingsPlugin = (): PluginDefinition<SettingsPluginProvides> => {\n const settings = new LocalStorageStore<SettingsSettingsProps>(SETTINGS_PLUGIN, { selected: DEFAULT_PLUGIN });\n\n return {\n meta,\n ready: async () => {\n settings.prop({ key: 'selected', type: LocalStorageStore.string() });\n },\n provides: {\n surface: {\n component: ({ data }) => {\n switch (data.component) {\n case `${SETTINGS_PLUGIN}/Settings`:\n return (\n <SettingsDialog\n selected={settings.values.selected}\n onSelected={(selected) => (settings.values.selected = selected)}\n />\n );\n\n default:\n return null;\n }\n },\n },\n intent: {\n resolver: (intent) => {\n switch (intent.action) {\n case SettingsAction.OPEN: {\n if (intent.data?.plugin) {\n settings.values.selected = intent.data?.plugin;\n }\n\n return {\n intents: [\n [\n {\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n component: `${SETTINGS_PLUGIN}/Settings`,\n dialogBlockAlign: 'start',\n },\n },\n ],\n ],\n };\n }\n }\n },\n },\n graph: {\n builder: (plugins) => {\n const intentPlugin = resolvePlugin(plugins, parseIntentPlugin);\n\n return createExtension({\n id: SETTINGS_PLUGIN,\n filter: (node): node is Node<null> => node.id === 'root',\n actions: () => [\n {\n id: SETTINGS_PLUGIN,\n data: async () => {\n await intentPlugin?.provides.intent.dispatch({\n plugin: SETTINGS_PLUGIN,\n action: SettingsAction.OPEN,\n });\n },\n properties: {\n label: ['open settings label', { ns: SETTINGS_PLUGIN }],\n icon: 'ph--gear--regular',\n keyBinding: {\n macos: 'meta+,',\n windows: 'alt+,',\n },\n },\n },\n ],\n });\n },\n },\n translations,\n },\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useState } from 'react';\n\nimport { type PluginMeta, Surface, usePlugins } from '@dxos/app-framework';\nimport { Button, Dialog, Icon, useTranslation } from '@dxos/react-ui';\nimport { Tabs, type TabsActivePart } from '@dxos/react-ui-tabs';\nimport { getSize } from '@dxos/react-ui-theme';\nimport { nonNullable } from '@dxos/util';\n\nimport { SETTINGS_PLUGIN } from '../meta';\n\nexport const SettingsDialog = ({\n selected,\n onSelected,\n}: {\n selected: string;\n onSelected: (plugin: string) => void;\n}) => {\n const { t } = useTranslation(SETTINGS_PLUGIN);\n const { plugins, enabled } = usePlugins();\n\n // TODO(burdon): Factor out common defs?\n const core = [\n 'dxos.org/plugin/layout',\n 'dxos.org/plugin/deck',\n 'dxos.org/plugin/files',\n 'dxos.org/plugin/space',\n 'dxos.org/plugin/stack',\n 'dxos.org/plugin/observability',\n 'dxos.org/plugin/registry',\n ];\n\n const sortPlugin = ({ name: a }: PluginMeta, { name: b }: PluginMeta) => a?.localeCompare(b ?? '') ?? 0;\n\n const corePlugins = core\n .map((id) => plugins.find((plugin) => plugin.meta.id === id)?.meta)\n .filter(nonNullable)\n .sort(sortPlugin);\n\n const filteredPlugins = enabled\n .filter((id) => !core.includes(id))\n .map((id) => plugins.find((plugin) => plugin.meta.id === id))\n .filter((plugin) => (plugin?.provides as any)?.settings)\n .map((plugin) => plugin!.meta)\n .sort(sortPlugin);\n\n const [tabsActivePart, setTabsActivePart] = useState<TabsActivePart>('list');\n\n return (\n <Dialog.Content classNames='p-0 bs-content max-bs-full md:max-is-[40rem] overflow-hidden'>\n <div role='none' className='flex justify-between mbe-1 pbs-3 pis-2 pie-3 @md:pbs-4 @md:pis-4 @md:pie-5'>\n <Dialog.Title\n onClick={() => setTabsActivePart('list')}\n aria-description={t('click to return to tablist description')}\n classNames='flex cursor-pointer items-center group/title'\n >\n <Icon\n icon='ph--caret-left--regular'\n classNames={['@md:hidden', getSize(4), tabsActivePart === 'list' && 'invisible']}\n />\n <span\n className={\n tabsActivePart !== 'list'\n ? 'group-hover/title:underline @md:group-hover/title:no-underline underline-offset-4 decoration-1'\n : ''\n }\n >\n {t('settings dialog title')}\n </span>\n </Dialog.Title>\n <Dialog.Close asChild>\n <Button density='fine' variant='ghost' autoFocus>\n <Icon icon='ph--x--regular' size={3} />\n </Button>\n </Dialog.Close>\n </div>\n\n <Tabs.Root\n orientation='vertical'\n value={selected}\n onValueChange={(nextSelected) => onSelected(nextSelected)}\n activePart={tabsActivePart}\n onActivePartChange={setTabsActivePart}\n classNames='flex flex-col flex-1 mbs-2'\n >\n <Tabs.Viewport classNames='flex-1 min-bs-0'>\n <div role='none' className='overflow-y-auto pli-3 @md:pis-2 @md:pie-0 mbe-4 border-r border-separator'>\n <Tabs.Tablist classNames='flex flex-col gap-4 max-bs-none overflow-y-visible'>\n <PluginList title='Options' plugins={corePlugins} />\n {filteredPlugins.length > 0 && <PluginList title='Plugins' plugins={filteredPlugins} />}\n </Tabs.Tablist>\n </div>\n\n {corePlugins.map((plugin) => (\n <Tabs.Tabpanel key={plugin.id} value={plugin.id} classNames='pli-3 @md:pli-5 max-bs-dvh overflow-y-auto'>\n <Surface role='settings' data={{ plugin: plugin.id }} />\n </Tabs.Tabpanel>\n ))}\n {filteredPlugins.map((plugin) => (\n <Tabs.Tabpanel key={plugin.id} value={plugin.id} classNames='pli-3 @md:pli-5 max-bs-dvh overflow-y-auto'>\n <Surface role='settings' data={{ plugin: plugin.id }} />\n </Tabs.Tabpanel>\n ))}\n </Tabs.Viewport>\n </Tabs.Root>\n </Dialog.Content>\n );\n};\n\nconst PluginList = ({ title, plugins }: { title: string; plugins: PluginMeta[] }) => {\n return (\n <div role='none'>\n <Tabs.TabGroupHeading classNames={'pli-1 mlb-2 mbs-4 @md:mbs-2'}>{title}</Tabs.TabGroupHeading>\n <div className='flex flex-col ml-1'>\n {plugins.map((plugin) => (\n <Tabs.Tab key={plugin.id} value={plugin.id}>\n {plugin.name}\n </Tabs.Tab>\n ))}\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type JSX, type PropsWithChildren } from 'react';\n\nimport { Input } from '@dxos/react-ui';\n\ntype SettingValueProps = {\n label: string;\n description?: JSX.Element;\n secondary?: JSX.Element;\n};\n\nexport const SettingsValue = ({ label, description, secondary, children }: PropsWithChildren<SettingValueProps>) => {\n const primary = (\n <div role='none' className='flex w-full gap-4 py-1'>\n <Input.Root>\n <div role='none' className='flex flex-col w-full'>\n {/* TODO(burdon): Consistent height for controls (e.g., Select, Textbox, and Checkbox are all different). */}\n <Input.Label classNames='flex min-h-[40px] items-center'>{label}</Input.Label>\n {description && (\n <Input.DescriptionAndValidation classNames='mbs-0.5'>\n <Input.Description>{description}</Input.Description>\n </Input.DescriptionAndValidation>\n )}\n </div>\n\n <div role='none'>\n <div role='none' className='flex min-h-[40px] items-center'>\n {children}\n </div>\n </div>\n </Input.Root>\n </div>\n );\n\n if (secondary) {\n // console.log(secondary);\n return (\n <div role='none' className='flex flex-col w-full'>\n {primary}\n {secondary}\n </div>\n );\n }\n\n return primary;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SETTINGS_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [SETTINGS_PLUGIN]: {\n 'open settings label': 'Show settings',\n 'settings dialog title': 'Settings',\n 'back label': 'Back',\n 'click to return to tablist description': 'Click the title to return to the settings menu',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { SettingsPlugin } from './SettingsPlugin';\n\nexport default SettingsPlugin;\n\nexport * from './SettingsPlugin';\n\n// TODO(wittjosiah): Remove.\n// Settings should be exposed from plugins as state and intents rather than components.\nexport * from './components';\n"],
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["
|
|
3
|
+
"sources": ["../../../src/SettingsPlugin.ts", "../../../src/capabilities/app-graph-builder/index.ts", "../../../src/capabilities/operation-resolver/index.ts", "../../../src/translations.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\nimport { AppPlugin } from '@dxos/app-toolkit';\n\nimport { SettingsAppGraphBuilder, SettingsOperationResolver } from './capabilities';\nimport { meta } from './meta';\nimport { translations } from './translations';\n\nexport const SettingsPlugin = Plugin.define(meta).pipe(\n AppPlugin.addAppGraphModule({ activate: SettingsAppGraphBuilder }),\n AppPlugin.addOperationResolverModule({ activate: SettingsOperationResolver }),\n AppPlugin.addTranslationsModule({ translations }),\n Plugin.make,\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capability } from '@dxos/app-framework';\n\nexport const SettingsAppGraphBuilder = Capability.lazy('SettingsAppGraphBuilder', () => import('./app-graph-builder'));\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capability } from '@dxos/app-framework';\n\nexport const SettingsOperationResolver = Capability.lazy(\n 'SettingsOperationResolver',\n () => import('./operation-resolver'),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Resource } from '@dxos/app-toolkit';\n\nimport { meta } from './meta';\n\nexport const translations = [\n {\n 'en-US': {\n [meta.id]: {\n 'open settings label': 'Open settings',\n 'app settings label': 'Settings',\n },\n },\n },\n] as const satisfies Resource[];\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;AAIA,SAASA,cAAc;AACvB,SAASC,iBAAiB;;;ACD1B,SAASC,kBAAkB;AAEpB,IAAMC,0BAA0BC,WAAWC,KAAK,2BAA2B,MAAM,OAAO,kCAAA,CAAA;;;ACF/F,SAASC,cAAAA,mBAAkB;AAEpB,IAAMC,4BAA4BC,YAAWC,KAClD,6BACA,MAAM,OAAO,mCAAA,CAAA;;;ACAR,IAAMC,eAAe;EAC1B;IACE,SAAS;MACP,CAACC,KAAKC,EAAE,GAAG;QACT,uBAAuB;QACvB,sBAAsB;MACxB;IACF;EACF;;;;AHLK,IAAMC,iBAAiBC,OAAOC,OAAOC,IAAAA,EAAMC,KAChDC,UAAUC,kBAAkB;EAAEC,UAAUC;AAAwB,CAAA,GAChEH,UAAUI,2BAA2B;EAAEF,UAAUG;AAA0B,CAAA,GAC3EL,UAAUM,sBAAsB;EAAEC;AAAa,CAAA,GAC/CX,OAAOY,IAAI;",
|
|
6
|
+
"names": ["Plugin", "AppPlugin", "Capability", "SettingsAppGraphBuilder", "Capability", "lazy", "Capability", "SettingsOperationResolver", "Capability", "lazy", "translations", "meta", "id", "SettingsPlugin", "Plugin", "define", "meta", "pipe", "AppPlugin", "addAppGraphModule", "activate", "SettingsAppGraphBuilder", "addOperationResolverModule", "SettingsOperationResolver", "addTranslationsModule", "translations", "make"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"
|
|
1
|
+
{"inputs":{"src/meta.ts":{"bytes":752,"imports":[],"format":"esm"},"src/actions.ts":{"bytes":2730,"imports":[{"path":"effect/Schema","kind":"import-statement","external":true},{"path":"src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"src/capabilities/app-graph-builder/app-graph-builder.ts":{"bytes":12156,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@dxos/app-toolkit","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"src/actions.ts","kind":"import-statement","original":"../../actions"},{"path":"src/meta.ts","kind":"import-statement","original":"../../meta"}],"format":"esm"},"src/capabilities/app-graph-builder/index.ts":{"bytes":994,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"src/capabilities/app-graph-builder/app-graph-builder.ts","kind":"dynamic-import","original":"./app-graph-builder"}],"format":"esm"},"src/capabilities/operation-resolver/operation-resolver.ts":{"bytes":6600,"imports":[{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-toolkit","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"src/actions.ts","kind":"import-statement","original":"../../actions"}],"format":"esm"},"src/capabilities/operation-resolver/index.ts":{"bytes":1024,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"src/capabilities/operation-resolver/operation-resolver.ts","kind":"dynamic-import","original":"./operation-resolver"}],"format":"esm"},"src/capabilities/index.ts":{"bytes":611,"imports":[{"path":"src/capabilities/app-graph-builder/index.ts","kind":"import-statement","original":"./app-graph-builder"},{"path":"src/capabilities/operation-resolver/index.ts","kind":"import-statement","original":"./operation-resolver"}],"format":"esm"},"src/translations.ts":{"bytes":1287,"imports":[{"path":"src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"src/SettingsPlugin.ts":{"bytes":2427,"imports":[{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-toolkit","kind":"import-statement","external":true},{"path":"src/capabilities/index.ts","kind":"import-statement","original":"./capabilities"},{"path":"src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"src/translations.ts","kind":"import-statement","original":"./translations"}],"format":"esm"},"src/index.ts":{"bytes":564,"imports":[{"path":"src/actions.ts","kind":"import-statement","original":"./actions"},{"path":"src/SettingsPlugin.ts","kind":"import-statement","original":"./SettingsPlugin"}],"format":"esm"}},"outputs":{"dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2570},"dist/lib/node-esm/index.mjs":{"imports":[{"path":"dist/lib/node-esm/chunk-TSHGTOLF.mjs","kind":"import-statement"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-toolkit","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"dist/lib/node-esm/app-graph-builder-LZWJ45UQ.mjs","kind":"dynamic-import"},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"dist/lib/node-esm/operation-resolver-QRFPVUSP.mjs","kind":"dynamic-import"}],"exports":["SETTINGS_ID","SETTINGS_KEY","SettingsAction","SettingsPlugin"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":0},"src/SettingsPlugin.ts":{"bytesInOutput":357},"src/capabilities/app-graph-builder/index.ts":{"bytesInOutput":174},"src/capabilities/index.ts":{"bytesInOutput":0},"src/capabilities/operation-resolver/index.ts":{"bytesInOutput":195},"src/translations.ts":{"bytesInOutput":169}},"bytes":1369},"dist/lib/node-esm/app-graph-builder-LZWJ45UQ.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":5969},"dist/lib/node-esm/app-graph-builder-LZWJ45UQ.mjs":{"imports":[{"path":"dist/lib/node-esm/chunk-TSHGTOLF.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@dxos/app-toolkit","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/capabilities/app-graph-builder/app-graph-builder.ts","inputs":{"src/capabilities/app-graph-builder/app-graph-builder.ts":{"bytesInOutput":2761}},"bytes":3098},"dist/lib/node-esm/operation-resolver-QRFPVUSP.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3214},"dist/lib/node-esm/operation-resolver-QRFPVUSP.mjs":{"imports":[{"path":"dist/lib/node-esm/chunk-TSHGTOLF.mjs","kind":"import-statement"},{"path":"effect/Effect","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-toolkit","kind":"import-statement","external":true},{"path":"@dxos/operation","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"src/capabilities/operation-resolver/operation-resolver.ts","inputs":{"src/capabilities/operation-resolver/operation-resolver.ts":{"bytesInOutput":1481}},"bytes":1814},"dist/lib/node-esm/chunk-TSHGTOLF.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":1584},"dist/lib/node-esm/chunk-TSHGTOLF.mjs":{"imports":[{"path":"effect/Schema","kind":"import-statement","external":true}],"exports":["SETTINGS_ID","SETTINGS_KEY","SettingsAction","meta"],"inputs":{"src/meta.ts":{"bytesInOutput":69},"src/actions.ts":{"bytesInOutput":622}},"bytes":931}}}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
+
import {
|
|
3
|
+
SETTINGS_ID,
|
|
4
|
+
SETTINGS_KEY
|
|
5
|
+
} from "./chunk-TSHGTOLF.mjs";
|
|
6
|
+
|
|
7
|
+
// src/capabilities/operation-resolver/operation-resolver.ts
|
|
8
|
+
import * as Effect from "effect/Effect";
|
|
9
|
+
import { Capabilities, Capability } from "@dxos/app-framework";
|
|
10
|
+
import { LayoutOperation, SettingsOperation } from "@dxos/app-toolkit";
|
|
11
|
+
import { OperationResolver } from "@dxos/operation";
|
|
12
|
+
var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(function* () {
|
|
13
|
+
return Capability.contributes(Capabilities.OperationResolver, [
|
|
14
|
+
//
|
|
15
|
+
// Open Settings
|
|
16
|
+
//
|
|
17
|
+
OperationResolver.make({
|
|
18
|
+
operation: SettingsOperation.Open,
|
|
19
|
+
handler: (input) => Effect.gen(function* () {
|
|
20
|
+
const { invoke } = yield* Capability.get(Capabilities.OperationInvoker);
|
|
21
|
+
yield* invoke(LayoutOperation.SwitchWorkspace, {
|
|
22
|
+
subject: SETTINGS_ID
|
|
23
|
+
});
|
|
24
|
+
if (input.plugin) {
|
|
25
|
+
yield* Effect.fork(invoke(LayoutOperation.Open, {
|
|
26
|
+
subject: [
|
|
27
|
+
`${SETTINGS_KEY}:${input.plugin.replaceAll("/", ":")}`
|
|
28
|
+
]
|
|
29
|
+
}));
|
|
30
|
+
}
|
|
31
|
+
})
|
|
32
|
+
}),
|
|
33
|
+
//
|
|
34
|
+
// Open Plugin Registry
|
|
35
|
+
//
|
|
36
|
+
OperationResolver.make({
|
|
37
|
+
operation: SettingsOperation.OpenPluginRegistry,
|
|
38
|
+
handler: () => Effect.gen(function* () {
|
|
39
|
+
const { invoke } = yield* Capability.get(Capabilities.OperationInvoker);
|
|
40
|
+
yield* invoke(LayoutOperation.SwitchWorkspace, {
|
|
41
|
+
subject: SETTINGS_ID
|
|
42
|
+
});
|
|
43
|
+
yield* Effect.fork(invoke(LayoutOperation.Open, {
|
|
44
|
+
subject: [
|
|
45
|
+
`${SETTINGS_KEY}:plugins`
|
|
46
|
+
]
|
|
47
|
+
}));
|
|
48
|
+
})
|
|
49
|
+
})
|
|
50
|
+
]);
|
|
51
|
+
}));
|
|
52
|
+
export {
|
|
53
|
+
operation_resolver_default as default
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=operation-resolver-QRFPVUSP.mjs.map
|