@dxos/app-framework 0.8.1 → 0.8.2-main.2f9c567
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-576BHZC7.mjs → app-graph-builder-FB4NWT25.mjs} +3 -3
- package/dist/lib/browser/{chunk-PPIBZ5N4.mjs → chunk-A7XUUTJN.mjs} +4 -4
- package/dist/lib/browser/chunk-A7XUUTJN.mjs.map +7 -0
- package/dist/lib/browser/{chunk-SFPT4Z2C.mjs → chunk-KPRHX73H.mjs} +9 -9
- package/dist/lib/browser/chunk-KPRHX73H.mjs.map +7 -0
- package/dist/lib/browser/{chunk-6AVTZPMT.mjs → chunk-M6UBP7YP.mjs} +204 -173
- package/dist/lib/browser/chunk-M6UBP7YP.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +8 -6
- package/dist/lib/browser/index.mjs.map +1 -1
- package/dist/lib/browser/{intent-dispatcher-3Q67MHZZ.mjs → intent-dispatcher-SICNXT2G.mjs} +2 -2
- package/dist/lib/browser/{intent-resolver-O763LCLG.mjs → intent-resolver-2K6LNSUE.mjs} +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{store-URSN7DZI.mjs → store-P4XZF26P.mjs} +2 -2
- package/dist/lib/browser/testing/index.mjs +2 -2
- package/dist/lib/browser/worker.mjs +3 -1
- package/dist/lib/node/{app-graph-builder-JZCSKYPY.cjs → app-graph-builder-5QJ6YDE7.cjs} +28 -28
- package/dist/lib/node/{chunk-JUSEAFDU.cjs → chunk-JQMNABMK.cjs} +4 -4
- package/dist/lib/node/chunk-JQMNABMK.cjs.map +7 -0
- package/dist/lib/node/{chunk-YIFTVCOR.cjs → chunk-LPUJODXZ.cjs} +180 -150
- package/dist/lib/node/chunk-LPUJODXZ.cjs.map +7 -0
- package/dist/lib/node/{chunk-YNTKVTVX.cjs → chunk-MTROSTO7.cjs} +20 -20
- package/dist/lib/node/{chunk-YNTKVTVX.cjs.map → chunk-MTROSTO7.cjs.map} +3 -3
- package/dist/lib/node/index.cjs +80 -78
- package/dist/lib/node/index.cjs.map +1 -1
- package/dist/lib/node/{intent-dispatcher-H334XLFD.cjs → intent-dispatcher-XXFKXEHF.cjs} +8 -8
- package/dist/lib/node/{intent-dispatcher-H334XLFD.cjs.map → intent-dispatcher-XXFKXEHF.cjs.map} +2 -2
- package/dist/lib/node/{intent-resolver-3F4POWAM.cjs → intent-resolver-ZP6S7QKG.cjs} +12 -12
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{store-OFDHTDCB.cjs → store-MALHSPHZ.cjs} +7 -7
- package/dist/lib/node/testing/index.cjs +8 -8
- package/dist/lib/node/worker.cjs +39 -37
- package/dist/lib/node/worker.cjs.map +2 -2
- package/dist/lib/node-esm/{app-graph-builder-VYKLSMSZ.mjs → app-graph-builder-2KB5VMTB.mjs} +3 -3
- package/dist/lib/node-esm/{chunk-PHOUQACM.mjs → chunk-JUJF5L4G.mjs} +9 -9
- package/dist/lib/node-esm/chunk-JUJF5L4G.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-R6A7Z4LU.mjs → chunk-MX6ITPIG.mjs} +4 -4
- package/dist/lib/{browser/chunk-PPIBZ5N4.mjs.map → node-esm/chunk-MX6ITPIG.mjs.map} +3 -3
- package/dist/lib/node-esm/{chunk-AHKIPS2L.mjs → chunk-OZD32CQN.mjs} +204 -173
- package/dist/lib/node-esm/chunk-OZD32CQN.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +8 -6
- package/dist/lib/node-esm/index.mjs.map +1 -1
- package/dist/lib/node-esm/{intent-dispatcher-YDE2ONZA.mjs → intent-dispatcher-FF5HNHPQ.mjs} +2 -2
- package/dist/lib/node-esm/{intent-resolver-LAGJ7LXM.mjs → intent-resolver-QWIKXIGI.mjs} +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{store-EYSUVNCS.mjs → store-3NM6AWB4.mjs} +2 -2
- package/dist/lib/node-esm/testing/index.mjs +2 -2
- package/dist/lib/node-esm/worker.mjs +3 -1
- package/dist/types/src/common/capabilities.d.ts +2 -2
- package/dist/types/src/common/capabilities.d.ts.map +1 -1
- package/dist/types/src/common/collaboration.d.ts +19 -0
- package/dist/types/src/common/collaboration.d.ts.map +1 -0
- package/dist/types/src/common/file.d.ts +7 -7
- package/dist/types/src/common/file.d.ts.map +1 -1
- package/dist/types/src/common/index.d.ts +1 -0
- package/dist/types/src/common/index.d.ts.map +1 -1
- package/dist/types/src/common/layout.d.ts +164 -158
- package/dist/types/src/common/layout.d.ts.map +1 -1
- package/dist/types/src/common/translations.d.ts +7 -7
- package/dist/types/src/common/translations.d.ts.map +1 -1
- package/dist/types/src/core/capabilities.d.ts +5 -2
- package/dist/types/src/core/capabilities.d.ts.map +1 -1
- package/dist/types/src/core/events.d.ts +4 -1
- package/dist/types/src/core/events.d.ts.map +1 -1
- package/dist/types/src/core/manager.d.ts +8 -8
- package/dist/types/src/core/manager.d.ts.map +1 -1
- package/dist/types/src/core/plugin.d.ts +2 -1
- package/dist/types/src/core/plugin.d.ts.map +1 -1
- package/dist/types/src/playground/logger/schema.d.ts +6 -6
- package/dist/types/src/playground/logger/schema.d.ts.map +1 -1
- package/dist/types/src/plugin-intent/actions.d.ts +14 -14
- package/dist/types/src/plugin-intent/actions.d.ts.map +1 -1
- package/dist/types/src/plugin-intent/intent-dispatcher.d.ts +27 -1
- package/dist/types/src/plugin-intent/intent-dispatcher.d.ts.map +1 -1
- package/dist/types/src/plugin-intent/intent.d.ts +12 -12
- package/dist/types/src/plugin-intent/intent.d.ts.map +1 -1
- package/dist/types/src/plugin-settings/actions.d.ts +10 -10
- package/dist/types/src/plugin-settings/actions.d.ts.map +1 -1
- package/package.json +23 -19
- package/project.json +2 -1
- package/src/App.tsx +2 -2
- package/src/common/capabilities.ts +2 -2
- package/src/common/collaboration.ts +22 -0
- package/src/common/file.ts +7 -7
- package/src/common/index.ts +1 -0
- package/src/common/layout.ts +159 -128
- package/src/common/translations.ts +7 -7
- package/src/core/capabilities.ts +9 -5
- package/src/core/events.ts +4 -1
- package/src/core/manager.test.ts +3 -3
- package/src/core/manager.ts +10 -10
- package/src/core/plugin.ts +2 -1
- package/src/playground/generator/generator.ts +4 -4
- package/src/playground/logger/schema.ts +5 -5
- package/src/plugin-intent/actions.ts +9 -9
- package/src/plugin-intent/intent-dispatcher.test.ts +23 -23
- package/src/plugin-intent/intent-dispatcher.ts +18 -2
- package/src/plugin-intent/intent.ts +20 -11
- package/src/plugin-settings/actions.ts +8 -8
- package/typedoc/.nojekyll +1 -0
- package/typedoc/assets/hierarchy.js +1 -0
- package/typedoc/assets/highlight.css +106 -0
- package/typedoc/assets/icons.js +18 -0
- package/typedoc/assets/icons.svg +1 -0
- package/typedoc/assets/main.js +60 -0
- package/typedoc/assets/navigation.js +1 -0
- package/typedoc/assets/search.js +1 -0
- package/typedoc/assets/style.css +1640 -0
- package/typedoc/classes/CollaborationActions.InsertContent.html +460 -0
- package/typedoc/classes/ErrorBoundary.html +125 -0
- package/typedoc/classes/IntentAction.ShowUndo.html +227 -0
- package/typedoc/classes/IntentAction.Track.html +266 -0
- package/typedoc/classes/LayoutAction.AddToast.html +265 -0
- package/typedoc/classes/LayoutAction.Close.html +382 -0
- package/typedoc/classes/LayoutAction.Expose.html +265 -0
- package/typedoc/classes/LayoutAction.Open.html +1123 -0
- package/typedoc/classes/LayoutAction.RevertWorkspace.html +343 -0
- package/typedoc/classes/LayoutAction.ScrollIntoView.html +460 -0
- package/typedoc/classes/LayoutAction.Set.html +460 -0
- package/typedoc/classes/LayoutAction.SetLayoutMode.html +499 -0
- package/typedoc/classes/LayoutAction.SwitchWorkspace.html +265 -0
- package/typedoc/classes/LayoutAction.UpdateComplementary.html +616 -0
- package/typedoc/classes/LayoutAction.UpdateDialog.html +811 -0
- package/typedoc/classes/LayoutAction.UpdateLayout.html +461 -0
- package/typedoc/classes/LayoutAction.UpdatePopover.html +1435 -0
- package/typedoc/classes/LayoutAction.UpdateSidebar.html +616 -0
- package/typedoc/classes/Plugin.html +6 -0
- package/typedoc/classes/PluginManager.html +42 -0
- package/typedoc/classes/PluginModule.html +18 -0
- package/typedoc/classes/PluginsContext.html +25 -0
- package/typedoc/classes/SettingsAction.Open.html +226 -0
- package/typedoc/classes/SettingsAction.OpenPluginRegistry.html +265 -0
- package/typedoc/functions/Events.createStateEvent.html +2 -0
- package/typedoc/functions/IntentPlugin.html +1 -0
- package/typedoc/functions/SettingsPlugin.html +1 -0
- package/typedoc/functions/allOf.html +2 -0
- package/typedoc/functions/chain.html +3 -0
- package/typedoc/functions/contributes.html +2 -0
- package/typedoc/functions/createApp.html +6 -0
- package/typedoc/functions/createDispatcher.html +3 -0
- package/typedoc/functions/createIntent.html +6 -0
- package/typedoc/functions/createResolver.html +2 -0
- package/typedoc/functions/createSurface.html +2 -0
- package/typedoc/functions/defineCapability.html +2 -0
- package/typedoc/functions/defineEvent.html +2 -0
- package/typedoc/functions/defineModule.html +2 -0
- package/typedoc/functions/definePlugin.html +2 -0
- package/typedoc/functions/eventKey.html +2 -0
- package/typedoc/functions/getEvents.html +2 -0
- package/typedoc/functions/isAllOf.html +2 -0
- package/typedoc/functions/isOneOf.html +2 -0
- package/typedoc/functions/isSurfaceAvailable.html +2 -0
- package/typedoc/functions/lazy.html +2 -0
- package/typedoc/functions/oneOf.html +2 -0
- package/typedoc/functions/useAppGraph.html +1 -0
- package/typedoc/functions/useCapabilities.html +3 -0
- package/typedoc/functions/useCapability.html +4 -0
- package/typedoc/functions/useIntentDispatcher.html +1 -0
- package/typedoc/functions/useIntentResolver.html +1 -0
- package/typedoc/functions/useLayout.html +1 -0
- package/typedoc/functions/usePluginManager.html +2 -0
- package/typedoc/hierarchy.html +1 -0
- package/typedoc/index.html +16 -0
- package/typedoc/interfaces/LayoutAction.Toast.html +10 -0
- package/typedoc/media/LICENSE +8 -0
- package/typedoc/modules/Capabilities.html +1 -0
- package/typedoc/modules/CollaborationActions.html +1 -0
- package/typedoc/modules/Events.html +1 -0
- package/typedoc/modules/IntentAction.html +1 -0
- package/typedoc/modules/LayoutAction.html +2 -0
- package/typedoc/modules/SettingsAction.html +1 -0
- package/typedoc/modules.html +1 -0
- package/typedoc/types/ActivationEvent.html +8 -0
- package/typedoc/types/ActivationEvents.html +2 -0
- package/typedoc/types/AnyCapability.html +1 -0
- package/typedoc/types/AnyIntent.html +1 -0
- package/typedoc/types/AnyIntentChain.html +1 -0
- package/typedoc/types/AnyIntentEffectResult.html +1 -0
- package/typedoc/types/AnyIntentResolver.html +1 -0
- package/typedoc/types/AnyIntentResult.html +1 -0
- package/typedoc/types/Capabilities.FileUploader.html +1 -0
- package/typedoc/types/Capabilities.IntentResolver.html +1 -0
- package/typedoc/types/Capabilities.Layout.html +1 -0
- package/typedoc/types/Capabilities.Metadata.html +1 -0
- package/typedoc/types/Capabilities.ReactContext.html +1 -0
- package/typedoc/types/Capabilities.ReactRoot.html +1 -0
- package/typedoc/types/Capabilities.ReactSurface.html +1 -0
- package/typedoc/types/Capabilities.Settings.html +4 -0
- package/typedoc/types/Capability.html +9 -0
- package/typedoc/types/CreateAppOptions.html +9 -0
- package/typedoc/types/FileInfo.html +1 -0
- package/typedoc/types/Intent.html +14 -0
- package/typedoc/types/IntentChain.html +6 -0
- package/typedoc/types/IntentContext.html +5 -0
- package/typedoc/types/IntentData.html +1 -0
- package/typedoc/types/IntentDispatcher.html +2 -0
- package/typedoc/types/IntentDispatcherResult.html +2 -0
- package/typedoc/types/IntentEffectDefinition.html +2 -0
- package/typedoc/types/IntentEffectResult.html +15 -0
- package/typedoc/types/IntentParams.html +3 -0
- package/typedoc/types/IntentResolver.html +2 -0
- package/typedoc/types/IntentResultData.html +1 -0
- package/typedoc/types/IntentSchema.html +1 -0
- package/typedoc/types/IntentUndo.html +2 -0
- package/typedoc/types/InterfaceDef.html +4 -0
- package/typedoc/types/Label.html +1 -0
- package/typedoc/types/NodeSerializer.html +8 -0
- package/typedoc/types/PluginManagerOptions.html +5 -0
- package/typedoc/types/PluginMeta.html +21 -0
- package/typedoc/types/PromiseIntentDispatcher.html +2 -0
- package/typedoc/types/PromiseIntentUndo.html +2 -0
- package/typedoc/types/Resource.html +1 -0
- package/typedoc/types/ResourceKey.html +1 -0
- package/typedoc/types/ResourceLanguage.html +1 -0
- package/typedoc/types/SerializedNode.html +4 -0
- package/typedoc/types/SurfaceComponent.html +2 -0
- package/typedoc/types/SurfaceDefinition.html +2 -0
- package/typedoc/types/SurfaceProps.html +4 -0
- package/typedoc/variables/Capabilities.AppGraph.html +1 -0
- package/typedoc/variables/Capabilities.AppGraphBuilder.html +1 -0
- package/typedoc/variables/Capabilities.AppGraphSerializer.html +1 -0
- package/typedoc/variables/Capabilities.ArtifactDefinition.html +1 -0
- package/typedoc/variables/Capabilities.FileUploader.html +1 -0
- package/typedoc/variables/Capabilities.IntentDispatcher.html +1 -0
- package/typedoc/variables/Capabilities.IntentResolver.html +1 -0
- package/typedoc/variables/Capabilities.Layout.html +1 -0
- package/typedoc/variables/Capabilities.Metadata.html +1 -0
- package/typedoc/variables/Capabilities.Null.html +1 -0
- package/typedoc/variables/Capabilities.PluginManager.html +1 -0
- package/typedoc/variables/Capabilities.ReactContext.html +1 -0
- package/typedoc/variables/Capabilities.ReactRoot.html +1 -0
- package/typedoc/variables/Capabilities.ReactSurface.html +1 -0
- package/typedoc/variables/Capabilities.Settings.html +1 -0
- package/typedoc/variables/Capabilities.SettingsStore.html +1 -0
- package/typedoc/variables/Capabilities.Tools.html +1 -0
- package/typedoc/variables/Capabilities.Translations.html +1 -0
- package/typedoc/variables/Events.AppGraphReady.html +2 -0
- package/typedoc/variables/Events.DispatcherReady.html +2 -0
- package/typedoc/variables/Events.LayoutReady.html +1 -0
- package/typedoc/variables/Events.SettingsReady.html +2 -0
- package/typedoc/variables/Events.SetupAppGraph.html +2 -0
- package/typedoc/variables/Events.SetupArtifactDefinition.html +2 -0
- package/typedoc/variables/Events.SetupIntentResolver.html +2 -0
- package/typedoc/variables/Events.SetupMetadata.html +2 -0
- package/typedoc/variables/Events.SetupReactSurface.html +2 -0
- package/typedoc/variables/Events.SetupSettings.html +2 -0
- package/typedoc/variables/Events.SetupTranslations.html +2 -0
- package/typedoc/variables/Events.Startup.html +2 -0
- package/typedoc/variables/FileInfoSchema.html +1 -0
- package/typedoc/variables/INTENT_ACTION.html +1 -0
- package/typedoc/variables/INTENT_PLUGIN.html +1 -0
- package/typedoc/variables/LAYOUT_ACTION.html +1 -0
- package/typedoc/variables/LAYOUT_PLUGIN.html +1 -0
- package/typedoc/variables/Label.html +1 -0
- package/typedoc/variables/LayoutAction.Toast.html +1 -0
- package/typedoc/variables/LayoutAction.UPDATE_LAYOUT.html +1 -0
- package/typedoc/variables/PluginManagerProvider.html +2 -0
- package/typedoc/variables/Resource.html +2 -0
- package/typedoc/variables/ResourceKey.html +1 -0
- package/typedoc/variables/ResourceLanguage.html +1 -0
- package/typedoc/variables/SETTINGS_ACTION.html +1 -0
- package/typedoc/variables/SETTINGS_ID.html +1 -0
- package/typedoc/variables/SETTINGS_KEY.html +1 -0
- package/typedoc/variables/SETTINGS_PLUGIN.html +1 -0
- package/typedoc/variables/Surface.html +2 -0
- package/typedoc/variables/defaultFileTypes.html +1 -0
- package/dist/lib/browser/chunk-6AVTZPMT.mjs.map +0 -7
- package/dist/lib/browser/chunk-SFPT4Z2C.mjs.map +0 -7
- package/dist/lib/node/chunk-JUSEAFDU.cjs.map +0 -7
- package/dist/lib/node/chunk-YIFTVCOR.cjs.map +0 -7
- package/dist/lib/node-esm/chunk-AHKIPS2L.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-PHOUQACM.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-R6A7Z4LU.mjs.map +0 -7
- /package/dist/lib/browser/{app-graph-builder-576BHZC7.mjs.map → app-graph-builder-FB4NWT25.mjs.map} +0 -0
- /package/dist/lib/browser/{intent-dispatcher-3Q67MHZZ.mjs.map → intent-dispatcher-SICNXT2G.mjs.map} +0 -0
- /package/dist/lib/browser/{intent-resolver-O763LCLG.mjs.map → intent-resolver-2K6LNSUE.mjs.map} +0 -0
- /package/dist/lib/browser/{store-URSN7DZI.mjs.map → store-P4XZF26P.mjs.map} +0 -0
- /package/dist/lib/node/{app-graph-builder-JZCSKYPY.cjs.map → app-graph-builder-5QJ6YDE7.cjs.map} +0 -0
- /package/dist/lib/node/{intent-resolver-3F4POWAM.cjs.map → intent-resolver-ZP6S7QKG.cjs.map} +0 -0
- /package/dist/lib/node/{store-OFDHTDCB.cjs.map → store-MALHSPHZ.cjs.map} +0 -0
- /package/dist/lib/node-esm/{app-graph-builder-VYKLSMSZ.mjs.map → app-graph-builder-2KB5VMTB.mjs.map} +0 -0
- /package/dist/lib/node-esm/{intent-dispatcher-YDE2ONZA.mjs.map → intent-dispatcher-FF5HNHPQ.mjs.map} +0 -0
- /package/dist/lib/node-esm/{intent-resolver-LAGJ7LXM.mjs.map → intent-resolver-QWIKXIGI.mjs.map} +0 -0
- /package/dist/lib/node-esm/{store-EYSUVNCS.mjs.map → store-3NM6AWB4.mjs.map} +0 -0
package/src/common/layout.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { Schema
|
|
5
|
+
import { Schema } from 'effect';
|
|
6
6
|
|
|
7
7
|
import { Label } from '../plugin-intent';
|
|
8
8
|
|
|
@@ -18,17 +18,17 @@ export namespace LayoutAction {
|
|
|
18
18
|
/**
|
|
19
19
|
* Generic layout action.
|
|
20
20
|
*/
|
|
21
|
-
export class UpdateLayout extends
|
|
22
|
-
input:
|
|
23
|
-
part:
|
|
24
|
-
subject:
|
|
25
|
-
options:
|
|
26
|
-
|
|
21
|
+
export class UpdateLayout extends Schema.TaggedClass<UpdateLayout>()(UPDATE_LAYOUT, {
|
|
22
|
+
input: Schema.Struct({
|
|
23
|
+
part: Schema.String.annotations({ description: 'The part of the layout to mutate.' }),
|
|
24
|
+
subject: Schema.optional(Schema.Any.annotations({ description: 'The subject of the layout update.' })),
|
|
25
|
+
options: Schema.optional(
|
|
26
|
+
Schema.Record({ key: Schema.String, value: Schema.Any }).annotations({
|
|
27
27
|
description: 'Additional options for the layout action.',
|
|
28
28
|
}),
|
|
29
29
|
),
|
|
30
30
|
}),
|
|
31
|
-
output:
|
|
31
|
+
output: Schema.Void,
|
|
32
32
|
}) {}
|
|
33
33
|
|
|
34
34
|
//
|
|
@@ -41,199 +41,230 @@ export namespace LayoutAction {
|
|
|
41
41
|
// This allows for plugins to update the layout without depending on a specific layout plugin.
|
|
42
42
|
// The expectation is that other norms other than these will emerge over time.
|
|
43
43
|
|
|
44
|
-
export class SetLayoutMode extends
|
|
45
|
-
input:
|
|
46
|
-
part:
|
|
47
|
-
subject:
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
44
|
+
export class SetLayoutMode extends Schema.TaggedClass<SetLayoutMode>()(UPDATE_LAYOUT, {
|
|
45
|
+
input: Schema.Struct({
|
|
46
|
+
part: Schema.Literal('mode').annotations({ description: 'Setting the layout mode.' }),
|
|
47
|
+
subject: Schema.optional(
|
|
48
|
+
Schema.String.annotations({ description: 'Item which is the subject of the new layout mode.' }),
|
|
49
|
+
),
|
|
50
|
+
options: Schema.Union(
|
|
51
|
+
Schema.Struct({ mode: Schema.String.annotations({ description: 'The new layout mode.' }) }),
|
|
52
|
+
Schema.Struct({ revert: Schema.Boolean.annotations({ description: 'Revert to the previous layout mode.' }) }),
|
|
51
53
|
),
|
|
52
54
|
}),
|
|
53
|
-
output:
|
|
55
|
+
output: Schema.Void,
|
|
54
56
|
}) {}
|
|
55
57
|
|
|
56
|
-
export class UpdateSidebar extends
|
|
57
|
-
input:
|
|
58
|
-
part:
|
|
59
|
-
subject:
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
58
|
+
export class UpdateSidebar extends Schema.TaggedClass<UpdateSidebar>()(UPDATE_LAYOUT, {
|
|
59
|
+
input: Schema.Struct({
|
|
60
|
+
part: Schema.Literal('sidebar').annotations({ description: 'Updating the sidebar.' }),
|
|
61
|
+
subject: Schema.optional(
|
|
62
|
+
Schema.String.annotations({ description: 'URI of the component to display in the sidebar.' }),
|
|
63
|
+
),
|
|
64
|
+
options: Schema.optional(
|
|
65
|
+
Schema.Struct({
|
|
66
|
+
state: Schema.Literal('closed', 'collapsed', 'expanded').annotations({
|
|
63
67
|
description: 'Whether the sidebar is closed, collapsed, or expanded.',
|
|
64
68
|
}),
|
|
65
69
|
}),
|
|
66
70
|
),
|
|
67
71
|
}),
|
|
68
|
-
output:
|
|
72
|
+
output: Schema.Void,
|
|
69
73
|
}) {}
|
|
70
74
|
|
|
71
|
-
export class UpdateComplementary extends
|
|
72
|
-
input:
|
|
73
|
-
part:
|
|
74
|
-
subject:
|
|
75
|
-
|
|
75
|
+
export class UpdateComplementary extends Schema.TaggedClass<UpdateComplementary>()(UPDATE_LAYOUT, {
|
|
76
|
+
input: Schema.Struct({
|
|
77
|
+
part: Schema.Literal('complementary').annotations({ description: 'Updating the complementary sidebar.' }),
|
|
78
|
+
subject: Schema.optional(
|
|
79
|
+
Schema.String.annotations({ description: 'URI of the component to display in the complementary area.' }),
|
|
76
80
|
),
|
|
77
|
-
options:
|
|
78
|
-
|
|
79
|
-
state:
|
|
81
|
+
options: Schema.optional(
|
|
82
|
+
Schema.Struct({
|
|
83
|
+
state: Schema.Literal('closed', 'collapsed', 'expanded').annotations({
|
|
80
84
|
description: 'Whether the complementary sidebar is closed, collapsed, or expanded.',
|
|
81
85
|
}),
|
|
82
86
|
}),
|
|
83
87
|
),
|
|
84
88
|
}),
|
|
85
|
-
output:
|
|
89
|
+
output: Schema.Void,
|
|
86
90
|
}) {}
|
|
87
91
|
|
|
88
|
-
export class UpdateDialog extends
|
|
89
|
-
input:
|
|
90
|
-
part:
|
|
91
|
-
subject:
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
92
|
+
export class UpdateDialog extends Schema.TaggedClass<UpdateDialog>()(UPDATE_LAYOUT, {
|
|
93
|
+
input: Schema.Struct({
|
|
94
|
+
part: Schema.Literal('dialog').annotations({ description: 'Updating the dialog.' }),
|
|
95
|
+
subject: Schema.optional(
|
|
96
|
+
Schema.String.annotations({ description: 'URI of the component to display in the dialog.' }),
|
|
97
|
+
),
|
|
98
|
+
options: Schema.Struct({
|
|
99
|
+
state: Schema.optional(Schema.Boolean.annotations({ description: 'Whether the dialog is open or closed.' })),
|
|
100
|
+
blockAlign: Schema.optional(
|
|
101
|
+
Schema.Literal('start', 'center', 'end').annotations({ description: 'The alignment of the dialog.' }),
|
|
96
102
|
),
|
|
97
|
-
type:
|
|
98
|
-
props:
|
|
99
|
-
|
|
103
|
+
type: Schema.optional(Schema.Literal('default', 'alert').annotations({ description: 'The type of dialog.' })),
|
|
104
|
+
props: Schema.optional(
|
|
105
|
+
Schema.Record({ key: Schema.String, value: Schema.Any }).annotations({
|
|
100
106
|
description: 'Additional props for the dialog.',
|
|
101
107
|
}),
|
|
102
108
|
),
|
|
103
109
|
}),
|
|
104
110
|
}),
|
|
105
|
-
output:
|
|
111
|
+
output: Schema.Void,
|
|
106
112
|
}) {}
|
|
107
113
|
|
|
108
|
-
export class UpdatePopover extends
|
|
109
|
-
input:
|
|
110
|
-
part:
|
|
111
|
-
subject:
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
export class UpdatePopover extends Schema.TaggedClass<UpdatePopover>()(UPDATE_LAYOUT, {
|
|
115
|
+
input: Schema.Struct({
|
|
116
|
+
part: Schema.Literal('popover').annotations({ description: 'Updating the popover.' }),
|
|
117
|
+
subject: Schema.optional(
|
|
118
|
+
Schema.Any.annotations({
|
|
119
|
+
description: 'URI of the component to display in the popover or data to pass to the popover.',
|
|
120
|
+
}),
|
|
121
|
+
),
|
|
122
|
+
options: Schema.Struct({
|
|
123
|
+
side: Schema.optional(
|
|
124
|
+
Schema.Literal('top', 'right', 'bottom', 'left').annotations({ description: 'The side of the anchor.' }),
|
|
116
125
|
),
|
|
117
|
-
state:
|
|
118
|
-
props:
|
|
119
|
-
|
|
126
|
+
state: Schema.optional(Schema.Boolean.annotations({ description: 'Whether the popover is open or closed.' })),
|
|
127
|
+
props: Schema.optional(
|
|
128
|
+
Schema.Record({ key: Schema.String, value: Schema.Any }).annotations({
|
|
120
129
|
description: 'Additional props for the popover.',
|
|
121
130
|
}),
|
|
122
131
|
),
|
|
123
|
-
})
|
|
132
|
+
}).pipe(
|
|
133
|
+
Schema.extend(
|
|
134
|
+
Schema.Union(
|
|
135
|
+
Schema.Struct({
|
|
136
|
+
variant: Schema.Literal('virtual'),
|
|
137
|
+
anchor: Schema.Any.annotations({ description: 'The DOM element to anchor the popover to.' }),
|
|
138
|
+
}),
|
|
139
|
+
Schema.Struct({
|
|
140
|
+
variant: Schema.optional(Schema.Literal('react')),
|
|
141
|
+
anchorId: Schema.String.annotations({
|
|
142
|
+
description: 'An id that can be used to determine whether to render the anchor subcomponent.',
|
|
143
|
+
}),
|
|
144
|
+
}),
|
|
145
|
+
),
|
|
146
|
+
),
|
|
147
|
+
),
|
|
124
148
|
}),
|
|
125
|
-
output:
|
|
149
|
+
output: Schema.Void,
|
|
126
150
|
}) {}
|
|
127
151
|
|
|
128
|
-
export const Toast =
|
|
129
|
-
id:
|
|
130
|
-
title:
|
|
131
|
-
description:
|
|
132
|
-
icon:
|
|
133
|
-
duration:
|
|
134
|
-
closeLabel:
|
|
135
|
-
actionLabel:
|
|
136
|
-
actionAlt:
|
|
137
|
-
onAction:
|
|
138
|
-
|
|
152
|
+
export const Toast = Schema.Struct({
|
|
153
|
+
id: Schema.String.annotations({ description: 'The id of the toast.' }),
|
|
154
|
+
title: Schema.optional(Label.annotations({ description: 'The title of the toast.' })),
|
|
155
|
+
description: Schema.optional(Label.annotations({ description: 'The description of the toast.' })),
|
|
156
|
+
icon: Schema.optional(Schema.String.annotations({ description: 'The icon of the toast.' })),
|
|
157
|
+
duration: Schema.optional(Schema.Number.annotations({ description: 'The duration of the toast.' })),
|
|
158
|
+
closeLabel: Schema.optional(Label.annotations({ description: 'The label of the close button.' })),
|
|
159
|
+
actionLabel: Schema.optional(Label.annotations({ description: 'The label of the action button.' })),
|
|
160
|
+
actionAlt: Schema.optional(Label.annotations({ description: 'The alt text of the action button.' })),
|
|
161
|
+
onAction: Schema.optional(
|
|
162
|
+
Schema.Any.annotations({ description: 'The action to perform when the action button is clicked.' }),
|
|
139
163
|
),
|
|
140
164
|
});
|
|
141
165
|
|
|
142
|
-
export interface Toast extends Omit<
|
|
166
|
+
export interface Toast extends Omit<Schema.Schema.Type<typeof Toast>, 'onAction'> {
|
|
143
167
|
onAction?: () => void;
|
|
144
168
|
}
|
|
145
169
|
|
|
146
|
-
export class AddToast extends
|
|
147
|
-
input:
|
|
148
|
-
part:
|
|
170
|
+
export class AddToast extends Schema.TaggedClass<AddToast>()(UPDATE_LAYOUT, {
|
|
171
|
+
input: Schema.Struct({
|
|
172
|
+
part: Schema.Literal('toast').annotations({ description: 'Adding a toast.' }),
|
|
149
173
|
subject: Toast.annotations({ description: 'The toast to add.' }),
|
|
150
174
|
}),
|
|
151
|
-
output:
|
|
175
|
+
output: Schema.Void,
|
|
152
176
|
}) {}
|
|
153
177
|
|
|
154
|
-
export class SwitchWorkspace extends
|
|
155
|
-
input:
|
|
156
|
-
part:
|
|
157
|
-
subject:
|
|
178
|
+
export class SwitchWorkspace extends Schema.TaggedClass<SwitchWorkspace>()(UPDATE_LAYOUT, {
|
|
179
|
+
input: Schema.Struct({
|
|
180
|
+
part: Schema.Literal('workspace').annotations({ description: 'Switching the workspace.' }),
|
|
181
|
+
subject: Schema.String.annotations({ description: 'The id of the workspace to switch to.' }),
|
|
158
182
|
}),
|
|
159
|
-
output:
|
|
183
|
+
output: Schema.Void,
|
|
160
184
|
}) {}
|
|
161
185
|
|
|
162
|
-
export class RevertWorkspace extends
|
|
163
|
-
input:
|
|
164
|
-
part:
|
|
165
|
-
options:
|
|
166
|
-
revert:
|
|
186
|
+
export class RevertWorkspace extends Schema.TaggedClass<RevertWorkspace>()(UPDATE_LAYOUT, {
|
|
187
|
+
input: Schema.Struct({
|
|
188
|
+
part: Schema.Literal('workspace').annotations({ description: 'Switching the workspace.' }),
|
|
189
|
+
options: Schema.Struct({
|
|
190
|
+
revert: Schema.Literal(true).annotations({ description: 'Revert to the previous workspace.' }),
|
|
167
191
|
}),
|
|
168
192
|
}),
|
|
169
|
-
output:
|
|
193
|
+
output: Schema.Void,
|
|
170
194
|
}) {}
|
|
171
195
|
|
|
172
|
-
export class Open extends
|
|
173
|
-
input:
|
|
174
|
-
part:
|
|
175
|
-
subject:
|
|
176
|
-
options:
|
|
177
|
-
|
|
178
|
-
state:
|
|
179
|
-
variant:
|
|
180
|
-
key:
|
|
181
|
-
|
|
196
|
+
export class Open extends Schema.TaggedClass<Open>()(UPDATE_LAYOUT, {
|
|
197
|
+
input: Schema.Struct({
|
|
198
|
+
part: Schema.Literal('main').annotations({ description: 'Opening an item in the main content area.' }),
|
|
199
|
+
subject: Schema.Array(Schema.String.annotations({ description: 'Ids of the items to open.' })),
|
|
200
|
+
options: Schema.optional(
|
|
201
|
+
Schema.Struct({
|
|
202
|
+
state: Schema.optional(Schema.Literal(true).annotations({ description: 'The items are being added.' })),
|
|
203
|
+
variant: Schema.optional(Schema.String.annotations({ description: 'The variant of the item to open.' })),
|
|
204
|
+
key: Schema.optional(
|
|
205
|
+
Schema.String.annotations({
|
|
206
|
+
description: 'If provided, will replace item with a matching key (id prefix).',
|
|
207
|
+
}),
|
|
182
208
|
),
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
209
|
+
workspace: Schema.optional(Schema.String.annotations({ description: 'The workspace to open the items in.' })),
|
|
210
|
+
scrollIntoView: Schema.optional(Schema.Boolean.annotations({ description: 'Scroll the items into view.' })),
|
|
211
|
+
pivotId: Schema.optional(
|
|
212
|
+
Schema.String.annotations({ description: 'The id of the item to place new items next to.' }),
|
|
213
|
+
),
|
|
214
|
+
positioning: Schema.optional(
|
|
215
|
+
Schema.Union(
|
|
216
|
+
Schema.Literal('start').annotations({ description: 'The items are being added before the pivot item.' }),
|
|
217
|
+
Schema.Literal('end').annotations({ description: 'The items are being added after the pivot item.' }),
|
|
189
218
|
),
|
|
190
219
|
),
|
|
191
220
|
}),
|
|
192
221
|
),
|
|
193
222
|
}),
|
|
194
|
-
output:
|
|
223
|
+
output: Schema.Void,
|
|
195
224
|
}) {}
|
|
196
225
|
|
|
197
|
-
export class Set extends
|
|
198
|
-
input:
|
|
199
|
-
part:
|
|
200
|
-
subject:
|
|
201
|
-
options:
|
|
202
|
-
override:
|
|
226
|
+
export class Set extends Schema.TaggedClass<Set>()(UPDATE_LAYOUT, {
|
|
227
|
+
input: Schema.Struct({
|
|
228
|
+
part: Schema.Literal('main').annotations({ description: 'Setting items in the main content area.' }),
|
|
229
|
+
subject: Schema.Array(Schema.String.annotations({ description: 'Ids of the items to set.' })),
|
|
230
|
+
options: Schema.Struct({
|
|
231
|
+
override: Schema.Literal(true).annotations({
|
|
232
|
+
description: 'Override the current items in the main content area.',
|
|
233
|
+
}),
|
|
203
234
|
}),
|
|
204
235
|
}),
|
|
205
|
-
output:
|
|
236
|
+
output: Schema.Void,
|
|
206
237
|
}) {}
|
|
207
238
|
|
|
208
|
-
export class Close extends
|
|
209
|
-
input:
|
|
210
|
-
part:
|
|
211
|
-
subject:
|
|
212
|
-
options:
|
|
213
|
-
state:
|
|
239
|
+
export class Close extends Schema.TaggedClass<Close>()(UPDATE_LAYOUT, {
|
|
240
|
+
input: Schema.Struct({
|
|
241
|
+
part: Schema.Literal('main').annotations({ description: 'Closing items in the main content area.' }),
|
|
242
|
+
subject: Schema.Array(Schema.String.annotations({ description: 'Ids of the items to close.' })),
|
|
243
|
+
options: Schema.Struct({
|
|
244
|
+
state: Schema.Literal(false).annotations({ description: 'The items are being removed.' }),
|
|
214
245
|
}),
|
|
215
246
|
}),
|
|
216
|
-
output:
|
|
247
|
+
output: Schema.Void,
|
|
217
248
|
}) {}
|
|
218
249
|
|
|
219
|
-
export class ScrollIntoView extends
|
|
220
|
-
input:
|
|
221
|
-
part:
|
|
222
|
-
subject:
|
|
223
|
-
options:
|
|
224
|
-
|
|
250
|
+
export class ScrollIntoView extends Schema.TaggedClass<ScrollIntoView>()(UPDATE_LAYOUT, {
|
|
251
|
+
input: Schema.Struct({
|
|
252
|
+
part: Schema.Literal('current').annotations({ description: 'Setting the current item' }),
|
|
253
|
+
subject: Schema.optional(Schema.String.annotations({ description: 'The id of the item to set as current.' })),
|
|
254
|
+
options: Schema.optional(
|
|
255
|
+
Schema.Record({ key: Schema.String, value: Schema.Any }).annotations({
|
|
225
256
|
description: 'Additional options for the scroll into view.',
|
|
226
257
|
}),
|
|
227
258
|
),
|
|
228
259
|
}),
|
|
229
|
-
output:
|
|
260
|
+
output: Schema.Void,
|
|
230
261
|
}) {}
|
|
231
262
|
|
|
232
|
-
export class Expose extends
|
|
233
|
-
input:
|
|
234
|
-
part:
|
|
235
|
-
subject:
|
|
263
|
+
export class Expose extends Schema.TaggedClass<Expose>()(UPDATE_LAYOUT, {
|
|
264
|
+
input: Schema.Struct({
|
|
265
|
+
part: Schema.Literal('navigation').annotations({ description: 'Exposing an item in the navigation area.' }),
|
|
266
|
+
subject: Schema.String.annotations({ description: 'The id of the item to expose.' }),
|
|
236
267
|
}),
|
|
237
|
-
output:
|
|
268
|
+
output: Schema.Void,
|
|
238
269
|
}) {}
|
|
239
270
|
}
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { Schema
|
|
5
|
+
import { Schema } from 'effect';
|
|
6
6
|
|
|
7
|
-
export const ResourceKey =
|
|
8
|
-
export type ResourceKey =
|
|
7
|
+
export const ResourceKey = Schema.Union(Schema.String, Schema.Record({ key: Schema.String, value: Schema.Any }));
|
|
8
|
+
export type ResourceKey = Schema.Schema.Type<typeof ResourceKey>;
|
|
9
9
|
|
|
10
|
-
export const ResourceLanguage =
|
|
11
|
-
export type ResourceLanguage =
|
|
10
|
+
export const ResourceLanguage = Schema.Record({ key: Schema.String, value: ResourceKey });
|
|
11
|
+
export type ResourceLanguage = Schema.Schema.Type<typeof ResourceLanguage>;
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* A resource is a collection of translations for a language.
|
|
15
15
|
*/
|
|
16
|
-
export const Resource =
|
|
17
|
-
export type Resource =
|
|
16
|
+
export const Resource = Schema.Record({ key: Schema.String, value: ResourceLanguage });
|
|
17
|
+
export type Resource = Schema.Schema.Type<typeof Resource>;
|
package/src/core/capabilities.ts
CHANGED
|
@@ -10,7 +10,7 @@ import { Effect } from 'effect';
|
|
|
10
10
|
|
|
11
11
|
import { Trigger } from '@dxos/async';
|
|
12
12
|
import { invariant } from '@dxos/invariant';
|
|
13
|
-
import {
|
|
13
|
+
import { live } from '@dxos/live-object';
|
|
14
14
|
import { log } from '@dxos/log';
|
|
15
15
|
import { type MaybePromise } from '@dxos/util';
|
|
16
16
|
|
|
@@ -34,7 +34,8 @@ export const defineCapability = <T>(identifier: string) => {
|
|
|
34
34
|
};
|
|
35
35
|
|
|
36
36
|
/**
|
|
37
|
-
*
|
|
37
|
+
* A unique string identifier with a Typescript type associated with it.
|
|
38
|
+
* When a capability is contributed to the application an implementation of the interface is provided.
|
|
38
39
|
*/
|
|
39
40
|
export type Capability<T> = {
|
|
40
41
|
/**
|
|
@@ -95,8 +96,11 @@ export const lazy =
|
|
|
95
96
|
};
|
|
96
97
|
|
|
97
98
|
/**
|
|
98
|
-
*
|
|
99
|
+
* Facilitates the dependency injection between [plugin modules](#pluginmodule) by allowing them contribute and request capabilities from each other.
|
|
100
|
+
* It tracks the capabilities that are contributed in an in-memory live object.
|
|
101
|
+
* This allows the application to subscribe to this state and incorporate plugins which are added dynamically.
|
|
99
102
|
*/
|
|
103
|
+
// TOOD(burdon): Rename PluginContext.
|
|
100
104
|
export class PluginsContext {
|
|
101
105
|
private readonly _definedCapabilities = new Map<string, CapabilityImpl<unknown>[]>();
|
|
102
106
|
|
|
@@ -133,7 +137,7 @@ export class PluginsContext {
|
|
|
133
137
|
}) {
|
|
134
138
|
let current = this._definedCapabilities.get(interfaceDef.identifier);
|
|
135
139
|
if (!current) {
|
|
136
|
-
const object =
|
|
140
|
+
const object = live<{ value: CapabilityImpl<unknown>[] }>({ value: [] });
|
|
137
141
|
current = untracked(() => object.value);
|
|
138
142
|
this._definedCapabilities.set(interfaceDef.identifier, current);
|
|
139
143
|
}
|
|
@@ -175,7 +179,7 @@ export class PluginsContext {
|
|
|
175
179
|
): U[] {
|
|
176
180
|
let current = this._definedCapabilities.get(interfaceDef.identifier);
|
|
177
181
|
if (!current) {
|
|
178
|
-
const object =
|
|
182
|
+
const object = live<{ value: CapabilityImpl<unknown>[] }>({ value: [] });
|
|
179
183
|
current = untracked(() => object.value);
|
|
180
184
|
this._definedCapabilities.set(interfaceDef.identifier, current);
|
|
181
185
|
}
|
package/src/core/events.ts
CHANGED
|
@@ -3,7 +3,10 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
6
|
+
* A unique string identifier representing an event.
|
|
7
|
+
* This is expected to be a URI, where initial parts are often the id of the plugin whose package defines the event.
|
|
8
|
+
*
|
|
9
|
+
* @example dxos.org/plugin/example/event/ready
|
|
7
10
|
*/
|
|
8
11
|
export type ActivationEvent = {
|
|
9
12
|
id: string;
|
package/src/core/manager.test.ts
CHANGED
|
@@ -11,7 +11,7 @@ import { raise } from '@dxos/debug';
|
|
|
11
11
|
import { updateCounter } from '@dxos/echo-schema/testing';
|
|
12
12
|
import { registerSignalsRuntime } from '@dxos/echo-signals';
|
|
13
13
|
import { invariant } from '@dxos/invariant';
|
|
14
|
-
import {
|
|
14
|
+
import { live } from '@dxos/live-object';
|
|
15
15
|
|
|
16
16
|
import { contributes, defineCapability, type PluginsContext } from './capabilities';
|
|
17
17
|
import { allOf, defineEvent, oneOf } from './events';
|
|
@@ -358,14 +358,14 @@ describe('PluginManager', () => {
|
|
|
358
358
|
id,
|
|
359
359
|
activatesOn: Events.Startup,
|
|
360
360
|
activatesAfter: [stateEvent],
|
|
361
|
-
activate: () => contributes(Number,
|
|
361
|
+
activate: () => contributes(Number, live({ number: 1 })),
|
|
362
362
|
}),
|
|
363
363
|
defineModule({
|
|
364
364
|
id: 'dxos.org/test/doubler',
|
|
365
365
|
activatesOn: stateEvent,
|
|
366
366
|
activate: (context) => {
|
|
367
367
|
const counter = context.requestCapability(Number);
|
|
368
|
-
const state =
|
|
368
|
+
const state = live({ total: counter.number * 2 });
|
|
369
369
|
const unsubscribe = effect(() => {
|
|
370
370
|
state.total = counter.number * 2;
|
|
371
371
|
});
|
package/src/core/manager.ts
CHANGED
|
@@ -6,7 +6,7 @@ import { untracked } from '@preact/signals-core';
|
|
|
6
6
|
import { Array as A, Effect, Either, Match, pipe } from 'effect';
|
|
7
7
|
|
|
8
8
|
import { Event } from '@dxos/async';
|
|
9
|
-
import {
|
|
9
|
+
import { live, type Live } from '@dxos/live-object';
|
|
10
10
|
import { log } from '@dxos/log';
|
|
11
11
|
import { type MaybePromise } from '@dxos/util';
|
|
12
12
|
|
|
@@ -49,7 +49,7 @@ export class PluginManager {
|
|
|
49
49
|
reset: (id) => this._reset(id),
|
|
50
50
|
});
|
|
51
51
|
|
|
52
|
-
private readonly _state:
|
|
52
|
+
private readonly _state: Live<PluginManagerState>;
|
|
53
53
|
private readonly _pluginLoader: PluginManagerOptions['pluginLoader'];
|
|
54
54
|
private readonly _capabilities = new Map<string, AnyCapability[]>();
|
|
55
55
|
|
|
@@ -60,7 +60,7 @@ export class PluginManager {
|
|
|
60
60
|
enabled = [],
|
|
61
61
|
}: PluginManagerOptions) {
|
|
62
62
|
this._pluginLoader = pluginLoader;
|
|
63
|
-
this._state =
|
|
63
|
+
this._state = live({
|
|
64
64
|
plugins,
|
|
65
65
|
core,
|
|
66
66
|
enabled,
|
|
@@ -79,7 +79,7 @@ export class PluginManager {
|
|
|
79
79
|
*
|
|
80
80
|
* @reactive
|
|
81
81
|
*/
|
|
82
|
-
get plugins():
|
|
82
|
+
get plugins(): Live<readonly Plugin[]> {
|
|
83
83
|
return this._state.plugins;
|
|
84
84
|
}
|
|
85
85
|
|
|
@@ -88,7 +88,7 @@ export class PluginManager {
|
|
|
88
88
|
*
|
|
89
89
|
* @reactive
|
|
90
90
|
*/
|
|
91
|
-
get core():
|
|
91
|
+
get core(): Live<readonly string[]> {
|
|
92
92
|
return this._state.core;
|
|
93
93
|
}
|
|
94
94
|
|
|
@@ -97,7 +97,7 @@ export class PluginManager {
|
|
|
97
97
|
*
|
|
98
98
|
* @reactive
|
|
99
99
|
*/
|
|
100
|
-
get enabled():
|
|
100
|
+
get enabled(): Live<readonly string[]> {
|
|
101
101
|
return this._state.enabled;
|
|
102
102
|
}
|
|
103
103
|
|
|
@@ -106,7 +106,7 @@ export class PluginManager {
|
|
|
106
106
|
*
|
|
107
107
|
* @reactive
|
|
108
108
|
*/
|
|
109
|
-
get modules():
|
|
109
|
+
get modules(): Live<readonly PluginModule[]> {
|
|
110
110
|
return this._state.modules;
|
|
111
111
|
}
|
|
112
112
|
|
|
@@ -115,7 +115,7 @@ export class PluginManager {
|
|
|
115
115
|
*
|
|
116
116
|
* @reactive
|
|
117
117
|
*/
|
|
118
|
-
get active():
|
|
118
|
+
get active(): Live<readonly string[]> {
|
|
119
119
|
return this._state.active;
|
|
120
120
|
}
|
|
121
121
|
|
|
@@ -124,7 +124,7 @@ export class PluginManager {
|
|
|
124
124
|
*
|
|
125
125
|
* @reactive
|
|
126
126
|
*/
|
|
127
|
-
get eventsFired():
|
|
127
|
+
get eventsFired(): Live<readonly string[]> {
|
|
128
128
|
return this._state.eventsFired;
|
|
129
129
|
}
|
|
130
130
|
|
|
@@ -133,7 +133,7 @@ export class PluginManager {
|
|
|
133
133
|
*
|
|
134
134
|
* @reactive
|
|
135
135
|
*/
|
|
136
|
-
get pendingReset():
|
|
136
|
+
get pendingReset(): Live<readonly string[]> {
|
|
137
137
|
return this._state.pendingReset;
|
|
138
138
|
}
|
|
139
139
|
|
package/src/core/plugin.ts
CHANGED
|
@@ -42,7 +42,7 @@ interface PluginModuleInterface {
|
|
|
42
42
|
|
|
43
43
|
/**
|
|
44
44
|
* A unit of containment of modular functionality that can be provided to an application.
|
|
45
|
-
*
|
|
45
|
+
* Activation of a module is async allowing for code to split and loaded lazily.
|
|
46
46
|
*/
|
|
47
47
|
// NOTE: This is implemented as a class to prevent it from being proxied by PluginManager state.
|
|
48
48
|
export class PluginModule implements PluginModuleInterface {
|
|
@@ -114,6 +114,7 @@ export type PluginMeta = {
|
|
|
114
114
|
|
|
115
115
|
/**
|
|
116
116
|
* A collection of modules that are be enabled/disabled as a unit.
|
|
117
|
+
* Plugins provide things such as components, state, actions, etc. to the application.
|
|
117
118
|
*/
|
|
118
119
|
// NOTE: This is implemented as a class to prevent it from being proxied by PluginManager state.
|
|
119
120
|
export class Plugin {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { Schema
|
|
5
|
+
import { Schema } from 'effect';
|
|
6
6
|
|
|
7
7
|
import { Capabilities, Events } from '../../common';
|
|
8
8
|
import { contributes, defineEvent, defineCapability, defineModule, definePlugin } from '../../core';
|
|
@@ -15,9 +15,9 @@ export const CountEvent = defineEvent('dxos.org/test/generator/count');
|
|
|
15
15
|
export const createPluginId = (id: string) => `dxos.org/test/generator/${id}`;
|
|
16
16
|
|
|
17
17
|
export const createGeneratorIntent = (id: string) => {
|
|
18
|
-
class Alert extends
|
|
19
|
-
input:
|
|
20
|
-
output:
|
|
18
|
+
class Alert extends Schema.TaggedClass<Alert>()(`${createPluginId(id)}/action/alert`, {
|
|
19
|
+
input: Schema.Void,
|
|
20
|
+
output: Schema.Void,
|
|
21
21
|
}) {}
|
|
22
22
|
|
|
23
23
|
return Alert as unknown as IntentSchema<any, any>;
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { Schema
|
|
5
|
+
import { Schema } from 'effect';
|
|
6
6
|
|
|
7
|
-
export class Log extends
|
|
8
|
-
input:
|
|
9
|
-
message:
|
|
7
|
+
export class Log extends Schema.TaggedClass<Log>()('dxos.org/test/logger/log', {
|
|
8
|
+
input: Schema.Struct({
|
|
9
|
+
message: Schema.String,
|
|
10
10
|
}),
|
|
11
|
-
output:
|
|
11
|
+
output: Schema.Void,
|
|
12
12
|
}) {}
|