@dxos/app-framework 0.8.2-main.f11618f → 0.8.2-staging.42af850
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-OHM2Z6YQ.mjs → app-graph-builder-DYEAGZPS.mjs} +23 -23
- package/dist/lib/browser/app-graph-builder-DYEAGZPS.mjs.map +7 -0
- package/dist/lib/browser/{chunk-DVNSCQJ5.mjs → chunk-5GE2ERNU.mjs} +314 -280
- package/dist/lib/browser/chunk-5GE2ERNU.mjs.map +7 -0
- package/dist/lib/browser/{chunk-SFPT4Z2C.mjs → chunk-WWEJRWFX.mjs} +10 -10
- package/dist/lib/browser/chunk-WWEJRWFX.mjs.map +7 -0
- package/dist/lib/browser/{chunk-X2YC645Z.mjs → chunk-ZMXJV64L.mjs} +122 -62
- package/dist/lib/browser/chunk-ZMXJV64L.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +10 -10
- package/dist/lib/browser/{intent-dispatcher-J7QIFHLO.mjs → intent-dispatcher-ELZN5EM7.mjs} +2 -2
- package/dist/lib/browser/{intent-resolver-QV5MDMDV.mjs → intent-resolver-SGWLINTO.mjs} +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{store-XMPVLJOQ.mjs → store-YIU6IPZ2.mjs} +7 -6
- package/dist/lib/browser/store-YIU6IPZ2.mjs.map +7 -0
- package/dist/lib/browser/testing/index.mjs +30 -14
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/browser/worker.mjs +3 -3
- package/dist/lib/node/app-graph-builder-GBLISL7L.cjs +146 -0
- package/dist/lib/node/app-graph-builder-GBLISL7L.cjs.map +7 -0
- package/dist/lib/node/{chunk-JUSEAFDU.cjs → chunk-G774ASXO.cjs} +5 -5
- package/dist/lib/node/chunk-G774ASXO.cjs.map +7 -0
- package/dist/lib/node/{chunk-I3CJYEBC.cjs → chunk-HIVITTZD.cjs} +156 -122
- package/dist/lib/node/chunk-HIVITTZD.cjs.map +7 -0
- package/dist/lib/node/{chunk-5UOVF3OR.cjs → chunk-Z2PMVDJ5.cjs} +155 -95
- package/dist/lib/node/chunk-Z2PMVDJ5.cjs.map +7 -0
- package/dist/lib/node/index.cjs +81 -81
- package/dist/lib/node/{intent-dispatcher-FQPJNKIZ.cjs → intent-dispatcher-LFXZJTAS.cjs} +8 -8
- package/dist/lib/node/{intent-dispatcher-FQPJNKIZ.cjs.map → intent-dispatcher-LFXZJTAS.cjs.map} +2 -2
- package/dist/lib/node/{intent-resolver-PBAOGJS6.cjs → intent-resolver-EPSFTHL6.cjs} +12 -12
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{store-N7JLYYDI.cjs → store-CVVRXUTH.cjs} +10 -9
- package/dist/lib/node/store-CVVRXUTH.cjs.map +7 -0
- package/dist/lib/node/testing/index.cjs +34 -17
- package/dist/lib/node/testing/index.cjs.map +3 -3
- package/dist/lib/node/worker.cjs +39 -39
- package/dist/lib/node/worker.cjs.map +1 -1
- package/dist/lib/node-esm/{app-graph-builder-OMH534A4.mjs → app-graph-builder-LUBDEIT6.mjs} +23 -23
- package/dist/lib/node-esm/app-graph-builder-LUBDEIT6.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-QHXUTJHE.mjs → chunk-6IKYKERU.mjs} +122 -62
- package/dist/lib/node-esm/chunk-6IKYKERU.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-PHOUQACM.mjs → chunk-I6BVZMAH.mjs} +10 -10
- package/dist/lib/node-esm/chunk-I6BVZMAH.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-GSDBF2CK.mjs → chunk-Z2ZHH4HN.mjs} +314 -280
- package/dist/lib/node-esm/chunk-Z2ZHH4HN.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +10 -10
- package/dist/lib/node-esm/{intent-dispatcher-QDUGA7NT.mjs → intent-dispatcher-A2JCMWRD.mjs} +2 -2
- package/dist/lib/node-esm/{intent-resolver-P7TC5RBD.mjs → intent-resolver-5C4O43GK.mjs} +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{store-M2BYJL6K.mjs → store-HRZXZ2D2.mjs} +7 -6
- package/dist/lib/node-esm/store-HRZXZ2D2.mjs.map +7 -0
- package/dist/lib/node-esm/testing/index.mjs +30 -14
- package/dist/lib/node-esm/testing/index.mjs.map +3 -3
- package/dist/lib/node-esm/worker.mjs +3 -3
- package/dist/types/src/App.d.ts +3 -1
- package/dist/types/src/App.d.ts.map +1 -1
- package/dist/types/src/common/capabilities.d.ts +40 -222
- package/dist/types/src/common/capabilities.d.ts.map +1 -1
- package/dist/types/src/common/collaboration.d.ts +8 -8
- package/dist/types/src/common/collaboration.d.ts.map +1 -1
- package/dist/types/src/common/events.d.ts.map +1 -1
- 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/layout.d.ts +165 -163
- package/dist/types/src/common/layout.d.ts.map +1 -1
- package/dist/types/src/common/surface.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 +28 -13
- package/dist/types/src/core/capabilities.d.ts.map +1 -1
- package/dist/types/src/core/events.d.ts.map +1 -1
- package/dist/types/src/core/manager.d.ts +6 -3
- package/dist/types/src/core/manager.d.ts.map +1 -1
- package/dist/types/src/core/plugin.d.ts +2 -2
- package/dist/types/src/core/plugin.d.ts.map +1 -1
- package/dist/types/src/helpers.d.ts.map +1 -1
- package/dist/types/src/playground/generator/generator.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/playground/playground.stories.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 +3 -3
- package/dist/types/src/plugin-intent/intent-dispatcher.d.ts.map +1 -1
- package/dist/types/src/plugin-intent/intent.d.ts +14 -20
- 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/dist/types/src/plugin-settings/app-graph-builder.d.ts +2 -195
- package/dist/types/src/plugin-settings/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/plugin-settings/store.d.ts +2 -2
- package/dist/types/src/plugin-settings/store.d.ts.map +1 -1
- package/dist/types/src/react/ErrorBoundary.d.ts +1 -1
- package/dist/types/src/react/ErrorBoundary.d.ts.map +1 -1
- package/dist/types/src/react/IntentContext.d.ts.map +1 -1
- package/dist/types/src/react/Surface.d.ts +2 -2
- package/dist/types/src/react/Surface.d.ts.map +1 -1
- package/dist/types/src/react/useCapabilities.d.ts +2 -2
- package/dist/types/src/react/useCapabilities.d.ts.map +1 -1
- package/dist/types/src/react/useIntentResolver.d.ts.map +1 -1
- package/dist/types/src/testing/withPluginManager.d.ts +6 -2
- package/dist/types/src/testing/withPluginManager.d.ts.map +1 -1
- package/dist/types/src/testing/withPluginManager.stories.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +28 -21
- package/src/App.tsx +97 -47
- package/src/common/capabilities.ts +18 -7
- package/src/common/collaboration.ts +9 -9
- package/src/common/file.ts +7 -7
- package/src/common/layout.ts +156 -136
- package/src/common/translations.ts +7 -7
- package/src/core/capabilities.test.ts +55 -36
- package/src/core/capabilities.ts +79 -59
- package/src/core/manager.test.ts +19 -19
- package/src/core/manager.ts +24 -16
- package/src/core/plugin.ts +2 -2
- package/src/playground/generator/generator.ts +4 -4
- package/src/playground/logger/schema.ts +5 -5
- package/src/playground/playground.stories.tsx +13 -9
- package/src/plugin-intent/actions.ts +9 -9
- package/src/plugin-intent/intent-dispatcher.test.ts +23 -42
- package/src/plugin-intent/intent-dispatcher.ts +7 -11
- package/src/plugin-intent/intent.ts +22 -20
- package/src/plugin-settings/actions.ts +8 -8
- package/src/plugin-settings/app-graph-builder.ts +129 -94
- package/src/plugin-settings/store.ts +20 -17
- package/src/react/ErrorBoundary.tsx +3 -3
- package/src/react/Surface.stories.tsx +1 -1
- package/src/react/Surface.tsx +3 -3
- package/src/react/useCapabilities.ts +9 -19
- package/src/testing/withPluginManager.stories.tsx +0 -1
- package/src/testing/withPluginManager.tsx +35 -16
- package/tsconfig.json +1 -53
- package/typedoc/assets/navigation.js +1 -1
- package/typedoc/assets/search.js +1 -1
- package/typedoc/classes/CollaborationActions.InsertContent.html +280 -280
- package/typedoc/classes/ErrorBoundary.html +6 -6
- package/typedoc/classes/IntentAction.ShowUndo.html +125 -125
- package/typedoc/classes/IntentAction.Track.html +239 -239
- package/typedoc/classes/LayoutAction.AddToast.html +163 -163
- package/typedoc/classes/LayoutAction.Close.html +352 -352
- package/typedoc/classes/LayoutAction.Expose.html +238 -238
- package/typedoc/classes/LayoutAction.Open.html +904 -748
- package/typedoc/classes/LayoutAction.RevertWorkspace.html +241 -241
- package/typedoc/classes/LayoutAction.ScrollIntoView.html +280 -280
- package/typedoc/classes/LayoutAction.Set.html +436 -358
- package/typedoc/classes/LayoutAction.SetLayoutMode.html +469 -391
- package/typedoc/classes/LayoutAction.SwitchWorkspace.html +238 -238
- package/typedoc/classes/LayoutAction.UpdateComplementary.html +358 -358
- package/typedoc/classes/LayoutAction.UpdateDialog.html +865 -475
- package/typedoc/classes/LayoutAction.UpdateLayout.html +281 -281
- package/typedoc/classes/LayoutAction.UpdatePopover.html +826 -826
- package/typedoc/classes/LayoutAction.UpdateSidebar.html +397 -319
- package/typedoc/classes/Plugin.html +3 -3
- package/typedoc/classes/PluginContext.html +38 -0
- package/typedoc/classes/PluginManager.html +17 -16
- package/typedoc/classes/PluginModule.html +9 -9
- package/typedoc/classes/SettingsAction.Open.html +199 -199
- package/typedoc/classes/SettingsAction.OpenPluginRegistry.html +124 -124
- package/typedoc/functions/Events.createStateEvent.html +2 -2
- package/typedoc/functions/IntentPlugin.html +1 -1
- package/typedoc/functions/SettingsPlugin.html +1 -1
- package/typedoc/functions/allOf.html +2 -2
- package/typedoc/functions/chain.html +2 -2
- package/typedoc/functions/contributes.html +2 -2
- package/typedoc/functions/createDispatcher.html +3 -3
- package/typedoc/functions/createIntent.html +3 -3
- package/typedoc/functions/createResolver.html +2 -2
- package/typedoc/functions/createSurface.html +2 -2
- package/typedoc/functions/defineCapability.html +2 -2
- package/typedoc/functions/defineEvent.html +2 -2
- package/typedoc/functions/defineModule.html +2 -2
- package/typedoc/functions/definePlugin.html +2 -2
- package/typedoc/functions/eventKey.html +2 -2
- package/typedoc/functions/getEvents.html +2 -2
- package/typedoc/functions/isAllOf.html +2 -2
- package/typedoc/functions/isOneOf.html +2 -2
- package/typedoc/functions/isSurfaceAvailable.html +2 -2
- package/typedoc/functions/lazy.html +2 -2
- package/typedoc/functions/oneOf.html +2 -2
- package/typedoc/functions/{createApp.html → useApp.html} +2 -2
- package/typedoc/functions/useAppGraph.html +1 -1
- package/typedoc/functions/useCapabilities.html +3 -3
- package/typedoc/functions/useCapability.html +3 -3
- package/typedoc/functions/useIntentDispatcher.html +1 -1
- package/typedoc/functions/useIntentResolver.html +1 -1
- package/typedoc/functions/useLayout.html +1 -1
- package/typedoc/functions/usePluginManager.html +2 -2
- package/typedoc/hierarchy.html +1 -1
- package/typedoc/index.html +2 -2
- package/typedoc/interfaces/LayoutAction.Toast.html +2 -2
- package/typedoc/modules/Capabilities.html +1 -1
- package/typedoc/modules/CollaborationActions.html +1 -1
- package/typedoc/modules/Events.html +1 -1
- package/typedoc/modules/IntentAction.html +1 -1
- package/typedoc/modules/LayoutAction.html +2 -2
- package/typedoc/modules/SettingsAction.html +1 -1
- package/typedoc/modules.html +1 -1
- package/typedoc/types/ActivationEvent.html +3 -3
- package/typedoc/types/ActivationEvents.html +2 -2
- package/typedoc/types/AnyCapability.html +1 -1
- package/typedoc/types/AnyIntent.html +1 -1
- package/typedoc/types/AnyIntentChain.html +1 -1
- package/typedoc/types/AnyIntentEffectResult.html +1 -1
- package/typedoc/types/AnyIntentResolver.html +1 -1
- package/typedoc/types/AnyIntentResult.html +1 -1
- package/typedoc/types/Capabilities.FileUploader.html +1 -1
- package/typedoc/types/Capabilities.IntentResolver.html +1 -1
- package/typedoc/types/Capabilities.Layout.html +1 -1
- package/typedoc/types/Capabilities.Metadata.html +1 -1
- package/typedoc/types/Capabilities.ReactContext.html +1 -1
- package/typedoc/types/Capabilities.ReactRoot.html +1 -1
- package/typedoc/types/Capabilities.ReactSurface.html +1 -1
- package/typedoc/types/Capabilities.Settings.html +2 -2
- package/typedoc/types/Capability.html +5 -5
- package/typedoc/types/CreateAppOptions.html +3 -2
- package/typedoc/types/FileInfo.html +1 -1
- package/typedoc/types/Intent.html +6 -10
- package/typedoc/types/IntentChain.html +3 -3
- package/typedoc/types/IntentContext.html +2 -2
- package/typedoc/types/IntentData.html +1 -1
- package/typedoc/types/IntentDispatcher.html +2 -2
- package/typedoc/types/IntentDispatcherResult.html +2 -2
- package/typedoc/types/IntentEffectDefinition.html +2 -2
- package/typedoc/types/IntentEffectResult.html +6 -6
- package/typedoc/types/IntentParams.html +2 -2
- package/typedoc/types/IntentResolver.html +2 -2
- package/typedoc/types/IntentResultData.html +1 -1
- package/typedoc/types/IntentSchema.html +1 -1
- package/typedoc/types/IntentUndo.html +2 -2
- package/typedoc/types/InterfaceDef.html +3 -3
- package/typedoc/types/Label.html +1 -1
- package/typedoc/types/NodeSerializer.html +3 -3
- package/typedoc/types/PluginManagerOptions.html +3 -2
- package/typedoc/types/PluginMeta.html +9 -9
- package/typedoc/types/PromiseIntentDispatcher.html +2 -2
- package/typedoc/types/PromiseIntentUndo.html +2 -2
- package/typedoc/types/Resource.html +1 -1
- package/typedoc/types/ResourceKey.html +1 -1
- package/typedoc/types/ResourceLanguage.html +1 -1
- package/typedoc/types/SerializedNode.html +2 -2
- package/typedoc/types/SurfaceComponent.html +2 -2
- package/typedoc/types/SurfaceDefinition.html +2 -2
- package/typedoc/types/SurfaceProps.html +2 -2
- package/typedoc/variables/Capabilities.AnchorSort.html +1 -0
- package/typedoc/variables/Capabilities.AppGraph.html +1 -1
- package/typedoc/variables/Capabilities.AppGraphBuilder.html +1 -1
- package/typedoc/variables/Capabilities.AppGraphSerializer.html +1 -1
- package/typedoc/variables/Capabilities.ArtifactDefinition.html +1 -1
- package/typedoc/variables/Capabilities.FileUploader.html +1 -1
- package/typedoc/variables/Capabilities.IntentDispatcher.html +1 -1
- package/typedoc/variables/Capabilities.IntentResolver.html +1 -1
- package/typedoc/variables/Capabilities.Layout.html +1 -1
- package/typedoc/variables/Capabilities.Metadata.html +1 -1
- package/typedoc/variables/Capabilities.Null.html +1 -1
- package/typedoc/variables/Capabilities.PluginManager.html +1 -1
- package/typedoc/variables/Capabilities.ReactContext.html +1 -1
- package/typedoc/variables/Capabilities.ReactRoot.html +1 -1
- package/typedoc/variables/Capabilities.ReactSurface.html +1 -1
- package/typedoc/variables/Capabilities.RxRegistry.html +1 -0
- package/typedoc/variables/Capabilities.Settings.html +1 -1
- package/typedoc/variables/Capabilities.SettingsStore.html +1 -1
- package/typedoc/variables/Capabilities.Tools.html +1 -1
- package/typedoc/variables/Capabilities.Translations.html +1 -1
- package/typedoc/variables/Events.AppGraphReady.html +2 -2
- package/typedoc/variables/Events.DispatcherReady.html +2 -2
- package/typedoc/variables/Events.LayoutReady.html +1 -1
- package/typedoc/variables/Events.SettingsReady.html +2 -2
- package/typedoc/variables/Events.SetupAppGraph.html +2 -2
- package/typedoc/variables/Events.SetupArtifactDefinition.html +2 -2
- package/typedoc/variables/Events.SetupIntentResolver.html +2 -2
- package/typedoc/variables/Events.SetupMetadata.html +2 -2
- package/typedoc/variables/Events.SetupReactSurface.html +2 -2
- package/typedoc/variables/Events.SetupSettings.html +2 -2
- package/typedoc/variables/Events.SetupTranslations.html +2 -2
- package/typedoc/variables/Events.Startup.html +2 -2
- package/typedoc/variables/FileInfoSchema.html +1 -1
- package/typedoc/variables/INTENT_ACTION.html +1 -1
- package/typedoc/variables/INTENT_PLUGIN.html +1 -1
- package/typedoc/variables/LAYOUT_ACTION.html +1 -1
- package/typedoc/variables/LAYOUT_PLUGIN.html +1 -1
- package/typedoc/variables/Label.html +1 -1
- package/typedoc/variables/LayoutAction.Toast.html +1 -1
- package/typedoc/variables/LayoutAction.UPDATE_LAYOUT.html +1 -1
- package/typedoc/variables/PluginManagerProvider.html +2 -2
- package/typedoc/variables/Resource.html +2 -2
- package/typedoc/variables/ResourceKey.html +1 -1
- package/typedoc/variables/ResourceLanguage.html +1 -1
- package/typedoc/variables/SETTINGS_ACTION.html +1 -1
- package/typedoc/variables/SETTINGS_ID.html +1 -1
- package/typedoc/variables/SETTINGS_KEY.html +1 -1
- package/typedoc/variables/SETTINGS_PLUGIN.html +1 -1
- package/typedoc/variables/Surface.html +2 -2
- package/typedoc/variables/defaultFileTypes.html +1 -1
- package/dist/lib/browser/app-graph-builder-OHM2Z6YQ.mjs.map +0 -7
- package/dist/lib/browser/chunk-DVNSCQJ5.mjs.map +0 -7
- package/dist/lib/browser/chunk-SFPT4Z2C.mjs.map +0 -7
- package/dist/lib/browser/chunk-X2YC645Z.mjs.map +0 -7
- package/dist/lib/browser/store-XMPVLJOQ.mjs.map +0 -7
- package/dist/lib/node/app-graph-builder-Z45FKS52.cjs +0 -146
- package/dist/lib/node/app-graph-builder-Z45FKS52.cjs.map +0 -7
- package/dist/lib/node/chunk-5UOVF3OR.cjs.map +0 -7
- package/dist/lib/node/chunk-I3CJYEBC.cjs.map +0 -7
- package/dist/lib/node/chunk-JUSEAFDU.cjs.map +0 -7
- package/dist/lib/node/store-N7JLYYDI.cjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-OMH534A4.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-GSDBF2CK.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-PHOUQACM.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-QHXUTJHE.mjs.map +0 -7
- package/dist/lib/node-esm/store-M2BYJL6K.mjs.map +0 -7
- package/typedoc/classes/PluginsContext.html +0 -25
- /package/dist/lib/browser/{intent-dispatcher-J7QIFHLO.mjs.map → intent-dispatcher-ELZN5EM7.mjs.map} +0 -0
- /package/dist/lib/browser/{intent-resolver-QV5MDMDV.mjs.map → intent-resolver-SGWLINTO.mjs.map} +0 -0
- /package/dist/lib/node/{intent-resolver-PBAOGJS6.cjs.map → intent-resolver-EPSFTHL6.cjs.map} +0 -0
- /package/dist/lib/node-esm/{intent-dispatcher-QDUGA7NT.mjs.map → intent-dispatcher-A2JCMWRD.mjs.map} +0 -0
- /package/dist/lib/node-esm/{intent-resolver-P7TC5RBD.mjs.map → intent-resolver-5C4O43GK.mjs.map} +0 -0
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
|
|
5
|
+
import { useRxValue } from '@effect-rx/rx-react';
|
|
6
|
+
|
|
7
|
+
import { invariant } from '@dxos/invariant';
|
|
7
8
|
|
|
8
9
|
import { usePluginManager } from './PluginManagerProvider';
|
|
9
10
|
import { type InterfaceDef } from '../core';
|
|
@@ -12,17 +13,9 @@ import { type InterfaceDef } from '../core';
|
|
|
12
13
|
* Hook to request capabilities from the plugin context.
|
|
13
14
|
* @returns An array of capabilities.
|
|
14
15
|
*/
|
|
15
|
-
export const useCapabilities = <T
|
|
16
|
-
interfaceDef: InterfaceDef<T>,
|
|
17
|
-
filter?: (capability: T, moduleId: string) => capability is U,
|
|
18
|
-
) => {
|
|
16
|
+
export const useCapabilities = <T>(interfaceDef: InterfaceDef<T>) => {
|
|
19
17
|
const manager = usePluginManager();
|
|
20
|
-
|
|
21
|
-
() => computed(() => manager.context.requestCapabilities(interfaceDef, filter)),
|
|
22
|
-
[interfaceDef],
|
|
23
|
-
);
|
|
24
|
-
|
|
25
|
-
return signal.value;
|
|
18
|
+
return useRxValue(manager.context.capabilities(interfaceDef));
|
|
26
19
|
};
|
|
27
20
|
|
|
28
21
|
/**
|
|
@@ -30,11 +23,8 @@ export const useCapabilities = <T, U extends T = T>(
|
|
|
30
23
|
* @returns The capability.
|
|
31
24
|
* @throws If no capability is found.
|
|
32
25
|
*/
|
|
33
|
-
export const useCapability = <T
|
|
34
|
-
interfaceDef
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
const manager = usePluginManager();
|
|
38
|
-
const signal = useMemo(() => computed(() => manager.context.requestCapability(interfaceDef, filter)), [interfaceDef]);
|
|
39
|
-
return signal.value;
|
|
26
|
+
export const useCapability = <T>(interfaceDef: InterfaceDef<T>) => {
|
|
27
|
+
const capabilities = useCapabilities(interfaceDef);
|
|
28
|
+
invariant(capabilities.length > 0, `No capability found for ${interfaceDef.identifier}`);
|
|
29
|
+
return capabilities[0];
|
|
40
30
|
};
|
|
@@ -3,21 +3,29 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { type Decorator } from '@storybook/react';
|
|
6
|
-
import React, { useEffect } from 'react';
|
|
6
|
+
import React, { useEffect, useMemo } from 'react';
|
|
7
7
|
|
|
8
8
|
import { raise } from '@dxos/debug';
|
|
9
9
|
|
|
10
|
-
import {
|
|
10
|
+
import { useApp, type CreateAppOptions } from '../App';
|
|
11
11
|
import { Capabilities, Events } from '../common';
|
|
12
12
|
import {
|
|
13
|
-
type ActivationEvent,
|
|
14
|
-
type AnyCapability,
|
|
15
13
|
contributes,
|
|
16
14
|
defineModule,
|
|
17
15
|
definePlugin,
|
|
16
|
+
type ActivationEvent,
|
|
17
|
+
type AnyCapability,
|
|
18
18
|
PluginManager,
|
|
19
|
+
type PluginContext,
|
|
19
20
|
} from '../core';
|
|
20
21
|
|
|
22
|
+
// TODO(burdon): Factor out (use consistently in plugin framework?)
|
|
23
|
+
export type Provider<C, R> = (context: C) => R;
|
|
24
|
+
export type ProviderOrValue<C, R> = Provider<C, R> | R;
|
|
25
|
+
export const getValue = <C, R>(providerOrValue: ProviderOrValue<C, R>, context: C): R => {
|
|
26
|
+
return typeof providerOrValue === 'function' ? (providerOrValue as Provider<C, R>)(context) : providerOrValue;
|
|
27
|
+
};
|
|
28
|
+
|
|
21
29
|
/**
|
|
22
30
|
* @internal
|
|
23
31
|
*/
|
|
@@ -26,7 +34,7 @@ export const setupPluginManager = ({
|
|
|
26
34
|
plugins = [],
|
|
27
35
|
core = plugins.map(({ meta }) => meta.id),
|
|
28
36
|
...options
|
|
29
|
-
}: CreateAppOptions &
|
|
37
|
+
}: CreateAppOptions & Pick<WithPluginManagerOptions, 'capabilities'> = {}) => {
|
|
30
38
|
const pluginManager = new PluginManager({
|
|
31
39
|
pluginLoader: () => raise(new Error('Not implemented')),
|
|
32
40
|
plugins: [StoryPlugin(), ...plugins],
|
|
@@ -35,7 +43,7 @@ export const setupPluginManager = ({
|
|
|
35
43
|
});
|
|
36
44
|
|
|
37
45
|
if (capabilities) {
|
|
38
|
-
capabilities.forEach((capability) => {
|
|
46
|
+
getValue(capabilities, pluginManager.context).forEach((capability) => {
|
|
39
47
|
pluginManager.context.contributeCapability({
|
|
40
48
|
interface: capability.interface,
|
|
41
49
|
implementation: capability.implementation,
|
|
@@ -48,22 +56,19 @@ export const setupPluginManager = ({
|
|
|
48
56
|
};
|
|
49
57
|
|
|
50
58
|
export type WithPluginManagerOptions = CreateAppOptions & {
|
|
51
|
-
capabilities?: AnyCapability[]
|
|
59
|
+
capabilities?: ProviderOrValue<PluginContext, AnyCapability[]>;
|
|
52
60
|
fireEvents?: (ActivationEvent | string)[];
|
|
53
61
|
};
|
|
54
62
|
|
|
55
63
|
/**
|
|
56
64
|
* Wraps a story with a plugin manager.
|
|
65
|
+
* NOTE: This builds up and tears down the plugin manager on every render.
|
|
57
66
|
*/
|
|
58
67
|
export const withPluginManager = (options: WithPluginManagerOptions = {}): Decorator => {
|
|
59
|
-
const pluginManager = setupPluginManager(options);
|
|
60
|
-
const App = createApp({ pluginManager });
|
|
61
|
-
|
|
62
|
-
options.fireEvents?.forEach((event) => {
|
|
63
|
-
void pluginManager.activate(event);
|
|
64
|
-
});
|
|
65
|
-
|
|
66
68
|
return (Story, context) => {
|
|
69
|
+
const pluginManager = useMemo(() => setupPluginManager(options), [options]);
|
|
70
|
+
|
|
71
|
+
// Set-up root capability.
|
|
67
72
|
useEffect(() => {
|
|
68
73
|
const capability = contributes(Capabilities.ReactRoot, {
|
|
69
74
|
id: context.id,
|
|
@@ -75,8 +80,22 @@ export const withPluginManager = (options: WithPluginManagerOptions = {}): Decor
|
|
|
75
80
|
module: 'dxos.org/app-framework/withPluginManager',
|
|
76
81
|
});
|
|
77
82
|
|
|
78
|
-
return () =>
|
|
79
|
-
|
|
83
|
+
return () => {
|
|
84
|
+
pluginManager.context.removeCapability(capability.interface, capability.implementation);
|
|
85
|
+
};
|
|
86
|
+
}, [pluginManager, context]);
|
|
87
|
+
|
|
88
|
+
// Fire events.
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
const timeout = setTimeout(async () => {
|
|
91
|
+
await Promise.all(options.fireEvents?.map((event) => pluginManager.activate(event)) ?? []);
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
return () => clearTimeout(timeout);
|
|
95
|
+
}, [pluginManager]);
|
|
96
|
+
|
|
97
|
+
// Create app.
|
|
98
|
+
const App = useApp({ pluginManager });
|
|
80
99
|
|
|
81
100
|
return <App />;
|
|
82
101
|
};
|
package/tsconfig.json
CHANGED
|
@@ -7,59 +7,7 @@
|
|
|
7
7
|
"include": [
|
|
8
8
|
"src"
|
|
9
9
|
],
|
|
10
|
-
"references": [
|
|
11
|
-
{
|
|
12
|
-
"path": "../../common/async"
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
"path": "../../common/debug"
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
"path": "../../common/invariant"
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
"path": "../../common/local-storage"
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
"path": "../../common/log"
|
|
25
|
-
},
|
|
26
|
-
{
|
|
27
|
-
"path": "../../common/random"
|
|
28
|
-
},
|
|
29
|
-
{
|
|
30
|
-
"path": "../../common/storybook-utils"
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
"path": "../../common/util"
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
"path": "../../core/echo/echo-schema"
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
"path": "../../core/echo/echo-signals"
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
"path": "../../core/echo/live-object"
|
|
43
|
-
},
|
|
44
|
-
{
|
|
45
|
-
"path": "../../experimental/artifact"
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
"path": "../../ui/primitives/react-hooks"
|
|
49
|
-
},
|
|
50
|
-
{
|
|
51
|
-
"path": "../../ui/react-ui"
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
"path": "../../ui/react-ui-syntax-highlighter"
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
"path": "../app-graph"
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
"path": "../client-protocol"
|
|
61
|
-
}
|
|
62
|
-
],
|
|
10
|
+
"references": [],
|
|
63
11
|
"ts-node": {
|
|
64
12
|
"compilerOptions": {
|
|
65
13
|
"module": "CommonJS"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
window.navigationData = "eJylmmFv2zYQhv+LPwfbmrTdlm+
|
|
1
|
+
window.navigationData = "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"
|
package/typedoc/assets/search.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
window.searchData = "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";
|
|
1
|
+
window.searchData = "eJy9XWGT2zaS/S/y17mcuimRor954+yWa7NJKnbuasuVctESZ8yKRlRRlJ1cKv/9igA5ajQeKFCc9Se7hsBrEHgAGv0a1J+Lpv5yWrx8/+fit+qwW7xc3S0OxWO5eLn4tjgWH6t91VblaXG3ODf7xcvFY70778vTf8uH33xqH/eLu8V2X5xO5WnxcrH4627A42We0ZqfUP9e7ctfjvu62JXNE2r7x1FjynLAwN3iWDTlodXtDBt+c2jLQ/tzear3n8dNuyWfxfj3xR/1uR0zaks8i7F/lW2xK9pizNxQ5lkM/lwW2/bb+tCWv4++oyz3fIZ/ruvrVrtCz2fy7bm5L7blVat9uWcx/LZs2+rwcBozOpS5ySAt+TL5j015X/0ebevFU/nrJp9qhmyftp/Kx1H2urafyj+D7c/F/jw6rq7pofhtlpPL6L46bD/Vzdu6uVD5c9FUxUdvsb2UvGmUpc3j8R9Ncfx01WJf7rns/e1c7eXqf8VsX/y5rL8tm6rYV/8X34BLjdltaNrqvti2r8v76lC1VX242gavxtw2wA04YH32Jpzo/fd1dToW7fbTddu6/PPY9/b/UeuzfIAkuP0HbM5wAZKR3T9gbZYHIOz9cN7vr9nqysy189P+/FAd/lUciofrw+cUnmsZujcBw7NdHG3X8W7GjN7s4WiL2rkZMzrHwZF2f/+5fKhObfPHVatPJefa9PypgMVZPhWw97atm6ud6xSea/ldXe+vvqYpNNtSUxxO+6Lbpq4bFGVvsitOqvV+X3ysGwP2auuafzqxgkKjJ1fijdg8TmVj5/XhMh37ahjaqXLlBVH7Aw5qdTieb27Bi6H2pR3tafdf1em/qsOnsqnacnetXS5qqJX1uZ3TzKfq/4F2Xhr53efy0PpEsX8epQZwK38uix1avXo0p9g4G/pmQWsXd+iKPVXwdovWKbliTRS63dKw5l2x5RSbZe18HDkBXaxdis21FuP9O3YnOv9XW3DVB5bWp7jAVy2PeKXSZpxTetXaFT9GWox3Y65aHfEopMU4h+KqtSt7rbQYv9WOWm2Lpj0fR2zZAhMtpJcFeduURVu+bYu2NMWeTN2fD3ZVH0zpkhNtrtSp0O4Z3k4gH0a7Cm8/1V9+Oexqb/Nz0IZS4w13WjfJIQgbm+gDQKCJ2/5IYybu9FdbIwbiXVNsfxtviynyVYbgYmlO/9tXmtH5ohlzel63Y6XchcB8kg+j59Or3e5dXZz8F3PQhlLjg+m0btJgho1NHE8INHFIRxozcVSvtkYMxLf7+lSOt8UU+SpDcLE0p//tK83ofNGMOT3vtUN0+3e/H6/2uy3zVTpemJrT8/1bzeh62ZA5fe+3RHT+j8fyMN6MrsRX6fgnQ3O63bzPjE6/NGJOl+tWiA7/ufxcNu3/1s1vp6N03mFrVOGvMgzI5pwR0S88Y3Bg0+aM00jbpMO7ber9/s2hrf+nKr+MN9Et+1UGDJicM17qbWcMF2rYnNEKt0wOVnmtVeXX8aEGO7PGopzlOT01YVavlyF/6W3Z2pL/qndXFjKn6NfqfmVx5kCIV503JLpZMwcHt0sO05eq3X6K3HFU4a8zVMDmrMFSLzxnuFDTZg1YuG1iyH457oq2/LZ+PO7Lx/LQFkI3hO0EFb7K0IXszhk+9PIzhjDYxDnDeKWN3lC+rop9/RDTUFvyKw6eMDh/1Pr3nD1cslHzx8lvlTdAKoFlpGkxSSzPOkDC4PwB6t9z9gDJRs0fIL9V3gD9VB9rKemMtK0v+hWHSFqcP0bDq84eJKdZ80cJtMsbprfVrvxYRA1TX/QrDpO0OH+YhledPUxOs+YPk98uXqciV0aGmqtDWxplUDXsmULNhXn6aj/F4Atbqdjf2Amj8WaL/X3xsdxPb9K+r/bcjdp2wdHJbTK1/lNN2pWnbVMdHZEjok1utWdv1NkmwExq0aXOczen2k5rSl/+2Zuxm9SI3X+gCUNO0pSG1Idi6w3Mbebbqt2XU2wPFZ6hH5wsRLmyXpIHnmlhFZZ++en1q3ffffj+1b9//OXdNYtO4ZssX3p6yOwIyJ/u42gBFGoQCuu6CqHaNslXCBmb6CQAmIneQbAhE92CKy1RnW+Tyb0M5ZFGuTW+6sAA0/OHSfXA7EFDjZw/hOFWSjm1aermb/X5sENRI+fp6Axd02XB2daHU9uct23te/Y+4gu3eCBlyWmmvBW42gi7j8f6YG7J7KxzG2e+r7Wrdueh1oxWNOVhB06ewPJTyRnWHsr2ddlUn8udyf76e1M/mnox9h/Kdmfrnrq69039WPZ1p7VIEsqyzjNv//wsFBJQUdzpWxSYpY+lyMJEJvoCN2HbnW4c/qlMrAWvs/VdHNdM+PbNrV0vESeMwNDMQGd92KIL9iOWdYVnse2vgaOW/5hnt3NqP6N1ChgVZWdYbMoTkDyBuaHgNFvO2jS0+KemfqxAzs7ISx6fqsywP5VQs/iELUfRaQab9F4AP1IxYvqhbJ/vraX9qBeX1me+u6HrBKKZ8s/Csi9F1f69bqa9eVfpvm7mrCPeNqDvgrrmw5c/b90GJOKEbWBo5viSKA+MI2ad0jOsbke3UP2mfdEZ9prQ6QkYFGWnWeSUaaV6NjQ5/F69Ni2u2tvKi52jHdrMtlUeuljGLsbcpeg8i+YSxd+rJtKqKX7fF59ledyrdKzGOZdXLR7Lw646PPw84js4ZvvyMS7EddumWNTbXopOtIiclgmrzw3sdSzuohhki82wsyunvJtTeo7V6tTNtyiTT0Vn2LPTO34hmGetKR/ruDX1qeQsa5ET8LaZB1wKs36ELJqHz+lQXACn+BO2jbedsKTJWL5H2Tu9um/Dvhiweir6Cs9g+2/l/cjei4x/HGo8g/Ufg54bsnzdcxu1WgXXTmGsurpyahv6a2OvnvxM9yam/SKWejouZQRaH0Yaa75uV8DO6Vhuq/vK+84fNCcLT7V6pd/019r049Ge87APf4BDVw8sn01FfeN+1uIJ8U3o2xURaN9+KkRUVEGah7fhfnd/X267W+nnfbDFssxtVgKfifSe34w+0vob2h2kRSQnVHKDt4dAsBiPSTQstCI85Yg6R2Bs0St8s9VBBb9mUJSbYMsbH3Nd/dXx+KNJ/vC+4agex4/Vtth+Kr9TZ8ER0BemwrUTodfcYBCh8ToQWx3ba2Ot7cr74rz3llRsURSeZ/W+2O8/yovkY1ZF4XlWj/tiW36q9+AjudCwW36u7c5D+B5+oTdgvKvw9EXB57CuQ3vXzT8+1XgO+3Eku3b+jrV5Ku5L55LQmNGu8KMtPNkq+hjzm8N9rQwPf560B0EnIsKDcHUp+O1XgfLiw5Wvvb4Z/S4V+CyyBO8f34LsebYSd8ShHUc9yw+J+Lj940hkPGLIUYv10tzzkPgOJIZ5YYuMNde2JrQWV80JM0zYGArdbGVfXDfSl5liI9D78KvZzrMJnlv/0a+raC9EydF3GNdWBxQtQ101e02HirIenBuOyYgpEmEn+g27wre+HWbI69CS9Rp/J+sqnv8FXgd17IO78djwiIML3WDHHvDAd9SkHV3oZjsj7xJ90ozbhTy4mB3JaWTAYumkSI2bHE+JirdZmZLakwpZvZSea7ebgk5IfNywKH6DZcybn4qmeMRvbh9NiJg5iZ8BJJDh6b9B36i45M2QIZClGWFp0m9xzIiwyABKcN28PL4B+23YP7WPbsD8JbSRBT4QN45nwhWvy3uAODyKZ997We3dH8fyze7Xa8CXoMmuvO/KXPF+nxoc9KzLQ4uCucCyLDrJov+DLfK+kbVn/jZpPH6odyX4vQEL5z6cEp87DbWuI75wS+M+Uc0cW4k6DkRYNWVbW3aOTbvcRBq1hZ/B6rE+IbcC2RRF51icMqIzxlPz0xFGcWwSFZkQn/QjhEHACXkxV+IpOjnmmuFJGTK3R8/CDYiKoE1vRfRYTsskuWLbS/W6Znxavtf1qFZfvPT2/8uDSautd9UTogVvd4I36ZoWsPepfix/Kh4Cs+bJWFfsaIvdasm5oImteHcyJ1oITMEL/tU5N4Ju/hnH74vcauG0bcrycPpUe6cYbcgtebO9+tx4kpRnaih0q5W28H5ETNvoi0yw4M1BGwO5EnIIlJrkYzkYwJX2nk9C744hYFCGP9+E9c9Sr43iyU2I3xeHh7O/aOjHk7CfHIjdD7404T6cFfkAUONRD9Ww+NUBWRpdIeIstb53iiyN+qVBS96o2C/Vfzvc4dOG1eNpI34eDkY4rOY9vwX9p6Y+6uVHPhrFFJe8e4G3k6q64wH6BL4uMiHo8lg8xEO+eCqOB9er9OGDIUPA+GO5q9DvJGDbQ+lnMR34hStsefRSwHXDiS9DquDKpQFugViKvPnh3Xc/vPvw6tt3b378AaA6zyeC/vT9L/94MwJqn8eCutEG+aWCaxEHCWI+YRB+Xef5RNDg6zrPY0Edf/6npv5c4d8ihOVijXg79wU3avcGUHLj9tGubd4A0Nu3fdSovVv+Ssd37969+eEfb8M8UCUmA795PQb65vVkwH9+9+8xxH9+9+/JkEG+qhLRwMHfkgn/dMwFSPzESbHf/3gJzV5+18T8PRZk60j2F5DtVcFegtSHtqk+nlux0Qmoy9NoQJN3Anx9gaqKTINWGSYaNiLXxIP0JAgNGiVD+D9ho+iiUSeSZtd5XCVI8rzg6iLToEO/tiOeTgNU9yg0YsRNCg9SfWdBQ0Z8b0FAmttpcjm/wA2PYqEeylalel+wnp7FgvX6WehV5eNYyOr0KrDm9E/igX48lAEg8yQeqOf/q89FtXekWompC8XC74v/Q+Pa/TkWog68aD3lNYcv1ARH0y0QC3s+dbl9AM4+mAbj/vqdxgr96F0IEF7Gd0CdXwC9ARgNrPN8AmgwNuVAT4pNIQMjW4xXZgK4+iKvAxr8Bm8IDN+ndzCvXqr/9W5RHXbl74uXfy4+l82pix+8XPA3yTf54m5xX5X73Wnx8v0QmNnWj49209nV27P57699sf8pu1twXWFb+r+Xi7v3y7vV5htapr/+evd+qGwemD8MGJe/mIq0uHtPqCJ5FcmpyIu793y3Wn2TrcipyF5Fdiomi7v3CbKYeBUTp+Jqcfd+hSquvIorp+J6cfd+jSquvYprp2K6uHufooqpVzF1KmaLu/cZqph5FTOn4mZx936DKm68ihunYr64e5/frZNvmFZOxdyrmLsE6PhAS1SVfPKQYo+hD8HKgEAug6jjBTGs7JOIXBZRxw1KYGWfSOQyiTp+0ApW9slELpuo4witYWWfUOQyijqeUAor+6Qil1WUBSerzytyiUUdXQhyknxukUsuykOTnXx6kcsvXobmO/v0YpdeTKEpzz67WK1Phl0b1NMMliiXXWzYlcPlzWcXu+ziVWi9YZ9c7JKL16Elh31uscstTkOrDvvUYpda3LGF4SrAPrfY5RYHVy32qcUutdhQC64g7HOLXW4lHV0YriCJT67EJVfS8YXhCpL47EpcdiVm+4MrSOKzK1E7YMcXhitIAjZBl11JRxhO7zj7Zpmqyj69EpdeSccYzmBln1+Jy6+kowzDGZX4BEtcgiWGYHCHSnyCJS7Bko4zCWRn4jMscRmWdJxJIMMSn2GJy7CVWb0gw1Y+w1Yuw1YdZxLIsJXPsJXLsFXHmQQybOUzbOUybGWcLMiwlc+wlfKzOs4kcI9aAVfLZdiq40ySwco+w1Yuw1YdZxLIsJXPsJXLsFXHmQQybOUzbOUybNVxZgUZtvIZtnIZtuo4s4IMW/kMW7kMW3ecWUGGrX2GrV2Grc0GCRm29hm2dhm25uBKsvYZtnYZtk6CK8naZ9jaZdjauPKQ22ufYWvlza/DzQYOvcuwdRputs+wtcuwdceZFZxVa59ha5dha8MwOKvWPsPWLsPWefidfYatXYaly+A7pz7DUpdhqWEYnM+pz7DUZVgaZljqMyx1GZaGGZb6DEtdhqWGYXAlSX2GpS7D0jDDUp9hqTozhhmWgmOjy7DUMCyHR06fYanLsHQTbrbPsNRlWJqHm+0zLHUZlnWcWcPVM/MZlrkMyyjY7MxnWOYyLONgszOfYZnLsKzjzBqu25nPsMxlWBb2wzKfYZnLsCzsh2U+wzKXYVnHmTXcMTKfYZmKTGThZoPghMuwbBNuts+wzGVY1nFmDfeqzGdY5jJssww2e+MzbOMybEPBZm98hm1chm06zqzhXrXxGbZxGbZJws32GbZxGbZZhZvtM2zjMmxjgl5wr9r4DNu4DNuk4Wb7DNu4DNtk4Wb7DNuo+FfHmTXcJTcgBOYybBPeJTc+wzYuw/LwLpn7DMtdhuUdZ9Zwl8x9huUuw/LwLpn7DMtdhuXhXTL3GZa7DMtNpALukrnPsNxlWB7eJXOfYbnLsDy8S+Y+w3KXYXnHmTWOdvoMy12G5eFdMvcZlqsoa3iXzEGgVUdaO9KkMExvn7nVxd/6+h1vUhxtXYJw61LFW5cddVIccF2CiOtShVyXHXtSHHNdgqDrUkVdlx2BUhjPs890fRV4XZrgGI68LkHodalir0sTz4fRNftM11fh12XHpDS7Wy2/YVZx0CWIwC5VCHbZkSmF080+0/VVFHbZ8SmFvLfPdH3FPxrhH4r1e8H+jk8ZlgpguF/xz4Tws4BaAPinQ/4mio+9Y0JBfx31p7DLRijurwP/FPbaCIX+dezfhPMzPP9Q9F+H/ynsuxFSALQEQGH3jZAIoFUAE9nP8PxHQoBSAshE97MVnD9ADCClBpCJ8Gd4/gNBgJQiQCbIn2HxBWgCpEQBMnH+DO7yBGQBUroAmVh/huc/kAZIaQNk4v2h/gP8U/oAWYEArx9AIiClEZAJ+2/w+gFUAlIyAVmdAM9/oBSQkgrIRP9D7w/4p9QCMgLABs8/oBeQEgzIaACbgOYI+Kc0AzIywGYFdTSgGpCSDcgoARuoLBEQDkgpB2TEgA3mP9AOSIkHZPQAPPxAPSAlH5BRBDZYggQCAikFgYwosMHTB2gIpEQEMrrABtMfyAikdAQy0kCOtz+gJJCSEsioAzmmPxATSKkJZAQCLEoS0BNICQpkNILA9AGSAilNgYxMkOPpA1QFUrICGaUgx9MHCAuklAUyYkGO3UegLZASF8joBTnePoC8QEpfICMZ5Cnuf8A/JTGQUQ1yzH8gMpBSGcgIBznmP9AZSAkNZLSDwPINpAZSWgMZ+SDH8weoDaTkBjIKAi2XsAOB4kBKciCjIgTWTyA6kFIdyAgJtMQzEAgPpJQHMmICLRl3IUr+UBQ0ggIt8RwAAgQpBYKMqEBLnLoCRAhSKgQZYYGWgfQVwEKlRJARFwKbENAiSIkRlNp8o0AKDKChEiTIaAyBZQxIEqQ0CUpHdmGgSpCSJcgoDbTEbiBQJkhJE5RaGuKJDNQJUvIEpZaGeCYChYKUREFGdQgcZIFIQUqlICM8UCBpDAgVpJQKMuJDqAGAhEqsIKM/UCDxDOgVpAQLMhoEBZLPgGZBSrSgzGa+4ZkMdAtSwgUZLYICSWhAuyAlXpDRIyiQiAb0C1ICBhlNggLJaEDDICVikNEliPBMADoGKSGDjDZBOEmLgJZBSswgo08EXEogZ5DSMyjbjCzoQNIgpWlQZomIpyKQNUjpGmSkCsKZVwSkDVLaBhm5gnAGFQF5g5S+QRubhomnApA4SGkcZGSLgF8EVA5SMgcZ5YJwJhYBpYOU1EFGvSCcjUVA7SAld5BRMAhnZBFQPEhJHmRUDGIcWgSqBynZg4ySEfDtgfBBSvkgI2aEfCsgfpBSPyi3PMRzGQggpBQQyi0P8VwGIggpFYRyy0M8lYAQQkoJodymBOOpBMQQUmoIGYGDEsKJroCIShEhI3IEtjWgiZASRcjoHJTg5QjoIqSEETJaB+GUMwLaCClxhIzeQTjtjIA+QkogIaN5EE49I6CRkBJJ2IgehNPPGKgkrFQSNqoH4RQ0BjIJK5mEjexBOA2NgU7CSifhpSUiZDIDoYSVUMLLVZgHDJQSVkoJG+WDcD4bA6mElVTCRvognNPGQCthpZWw0T5wvjkDrYSVVsJG+yCcF8dALGEllrARPwjnxjFQS1ipJWwvRuAsNQZyCSu5hO3lCLycMNBLWOklbC9I4IQzBoIJK8GE7SUJnHTGQDFhpZhwf1ECzyUgmbCSTNhelsCJWAw0E1aaCVM4FYGBZsJKM2EKZyMw0ExYaSZsNRM8hICFSjJhsizESwHQTFjfnjAaCOHcKkY3KPQVCiOCEM5yYnSNwrtHYViI840YXqVQLLSXKXDmD6PrFPo+hdFBCOfgMLpToS9VsL2yg+9koIsV+maFUUII56Uwul2hr1cYKYRwhgijGxb6ioXRQgjnajC6ZqHvWRgxhHDWBKOrFko9YaOGUIqZCOQTVvIJGzmEcP4CA/2ElX7CRg8hnMDAQEBhJaBwEj6pMBBQWAkobAQRHMFlIKCwElA4WYePCQwkFFYSCidp2M1noKGw0lDYaCI4hs5AQ2GlobDRRAjngDAQUViJKGxEEZwDwkBEYSWi8MqyEK8FQEVhpaKwUUVwEggDFYWVisJGFcE+PgMVhZWKwkYVoTRwPwyQUMkobGQRSvFaBHQUVjoKG12EUrwWASGFlZDCK3uJEa9FQElhpaSwUUYIZ7IwkFJYSSm8srcZ8VoEtBRWWgobbYQyeJmSgZjCSkxhI45Qhl10oKawUlPYqCOU4ZuRQE5hJaewlVMyPBOAnMJKTuF1MuKfAj2FlZ7CVk8JUBnoKaz0FLZ6Cs7oYKCnsNJT2OopOKWDgZ7CSk9hq6fgnA4GegorPYWtnoKTOhjoKaz0FF5bJuK5AAQVVoIKW0Flg+cCEFRYCSpsBBLCeRkMFBVWigqn9qot3peBpMJKUmErqeDMCgaSCitJha2kssFzAUgqrCQVtpLKBjMRSCqsJBVO0xEXE2gqrDQVtpoKzs5goKmw0lTYaCS0wVQGogorUYWtqIITLBiIKqxEFbaiSmBRBaIKK1GFragSWFSBqMJKVGErqgQWVSCqsBJV2IoqOEmEgajCSlRhK6rgLBEGogorUYWtqILTRBiIKqxEFbaiCs7TYCCqsBJV2IgkhBM1GKgqrFQVtqpKjmcjUFVYqSpsVRWcqsFAVWGlqrBVVXI8mYCqwkpVYauq5HgyAVWFlarCVlXB2RoMVBVWqgpv7CcIMBOBrMJKVmF7fWSJmQhkFVayChuVhHG6BANZhZWswvYayRIzEcgqrGQVtldJcLoEA1mFlazCRiZhnC7BQFdhpauwvVKC0yUY6CqsdBW210pwugMDXYWVrsJGJmGcbsBAV2Glq7C9XoLTDRjoKqx0FbZXTHC6AQNdhZWuwkYmYZwuwEBXYaWrsL1qguV+BsIKK2GF7XUTLPczEFZYCStsdBLGcj8DYYWVsML22gmW+xkIK6yEFbZXT7Dcz0BYYSWsJEYnYSz3J0BYSZSwkhidhLHcnwBhJVHCSmJ0EsZyfwKElUQJK4nRSRir7QkQVhIlrCRGJ2GstidAWEmUsJIYnYSx2p4AYWX4m/n01+eyacvdG/sJsPfvFx+2ztfg/lx86D8Ptnn6rOqfiy4L+eWff/11+R7Yyz//Ep8E6551Ji9gfzhQiYSiOKjhB2QvMJ2sesHJkyicwnwbreh+GPCClJIAWsY1yALt7SegBZTspiVHQ9nfYxd9tJJ9xLZmlz1o/5NOQ376bUthIJUGVpPgTsV9231xTozFMhNwafxYGLiP5b35ESGJt5F4E5vXfQNfYuUSaz0Fq3Khcjm6q0lvWdWH0n6vVbSMJIPT7Ba8kwsoG5jFzVID6PR+vpavmcah7HZup8s5tY4cwN2urc1v9F6AVoKn600czH7vrhNyLuXRGPW9g5ILlO50EIVy2H6qm1PduMMuBylyIh/+wGtpl+4nRjxy7Tr8UfVfZZZIspuy6HZZpP7j1hJOkiiLnCsDXGl+t7Ppf8JVosplK4uk1YDaPH3UUyLKlSuLXB0EotdCuXJlkZPneHyw33SVtJUL9CSYj+dqv1OvKQc3stt6tKYsdg7nWKynSeSi1WOdxM8qisZJqkSOQNNW98W23YmfPRGAkiVxQ7Attp/Kp5+Uk5NVztZN3LQIOVFiuV/2O3kS974BT0pyN0l7yCxuTPwpK9f9Ln4RhbKvXcdiJdqUxq1HBsN3peQEWMbNgG293xcf68bsj9ZFcwaAxTRIIsdy+FWeXbU7H3fKT8skdTnydevDqW3O3edyHSg5RXngB6+H/+T9f1aDNxjbu8OP1YsNXnbtKm45cH55QJJGzLUuZhWH5bp7EqO7o2Tfb9N7u53mHYVqvtJfHI/10Rv4LhtZTOPInjOAO/GtafnemXzvKYBg7803EiySmAYM7ml5LuGm9N6pLdrSc1RXovNWkeuChRt+UkFMweVSNi6OfPanxeTmKIczX/VEIer/s457512Jzl5d8r3Yj4YJGOnz9b+hdF/ty9b+xJVAzuTArON6sgdUdJYzOLYTzU8u4J2Epb/eRU3jAT22sOy/LoAaj/XY/wKFBEskWNzWZsGO/Sf8JZh04jexAyp+IVRsT3K5Xg4MTGLHVPwesHSE5KLCkS9bneyvMUgGS3qsI0egX+fceSYXpsh4xmXB9FxHGbJJIru/RwMxjC6fWbQucs6fG+9cn8pdfBlHfusrur0uKbGOGz3gcsqdpbtx2zMrbpKXTVMrz196dZHnTYPysT4fdkXjDGAmiUVxZDcLxG+lWm9kqzYTgFx/TtAziaO5BbmvGtXp8tgWuceVvx+18ytQIqNW98V+/7HY/uYu75JJkatxt+NUh/vaBZKvlcd5KQMQCLnK0C1Hhvk6uPNx+JlsASZaNmyxkYCNGyPq7naIt4wbvIeyDca6ZadFnnAlnHtGk9HHyDXvoWx3ZVN9LnfGH7tv6kdvXmdyleC4oXgoWzCHltKDz+M8+MsvWctTt9xdV3FA9seqxVIsjwLL/kjbZTxGgTlTOpU9tBxOFelwTE77lbW78tRbiVscq115aKv7Sgcx5Ntz3OQffoNUTjHpHqeRnfh43JfdX7ydrbsHKsJRcVOjOhzPrkcnBiXpXZ11fwwd/ON1fz5N+7+n/d+Hbs76SZ719bN+QDb9SXc47W368dn0eHmPN4xSPgwbrYb/9EgcGeoxr2d/2FcOn/R0OG6eVodT2bTmgK1cYLEgRZ5ewalQBtoojySngflgYx8usSQ/IzenHs33pLu8NIEWt0NZNL9pK3FeWEcyPhB1TqR/ksct3T2WHybpbuwJ/zJyDTJo3oFVHqF5GUtUA4XjD3JxG3zE5ZQXlm66F8WWQ9LdY4uHtaH7QFx2Jf2HZexqNKoIrCStaQp7jkVTPLqLr/TfODIU3YOBw6ZkT6TvFRYq5IAMG9ew7k0ZH9uFPj/lUSrSsbeAqgelMxGpW/Q4vru5lnshTxnb82HnOsJrOf8iA7UdlBe/6j6MIGZefKMM0q50VcW1HFaOX+IHsG4bc72e7labgIwcgZMneLKU4Dl29znVh1LjSGZFpmlUpz5yWFx+bFJASt2c87itzNMXusxo0VGDE5jGrc37Qp9BJPGXcbTY9z8HKAIkwm8YFvUJUHDflw2LTDLo0dC+Lxe1NG7hsWhg3xcDEBkusVB+XEnM7sgQnP3BUUkquULkcWv/Y7mr1AlZokQqNI+luxjLKHH3xctYDL2oi53xKUIeB2bCsO6ZWK56PBymIr01U9E5KcqptxqYHpkmcqhF+FSdwSTXI3vucFb5Is5BIApi0Bqd06cMIkR6UP7iKXNFugzQKJRj6U4zQad0GLnIrbnDsqtAUz5Up1ZFA6VQEnn6qs+tPl2KJSUZTpM9J9b9aTDtT4lp//fhFJ/2PlDW+0RZXz/rXeJNf+rc9BNg079/3uPlPV7e4+WDykqD7PPkXEdGp+z7+cdLuQty3BJ1LA+76vDQlKfSlW/l+rCOm9LHfbEtP9VeXog8qVKkVuNvC5kke2Tsw6KAY5dcQinyJG7BQJBRhi5oGH2OzLqwqI/DL+xKhVWM5pCUuRrCmJHCkoOONGuZTMqR6QoO6LGpP1e6R2R0k9NIJlpUtU+RTNHgyNhmD+UJfbR0knbiNhYL5vaa1JdpiFLREE7iSJngWJ9AWpH0OyOToI9NeV/97kzfC0hk71vpazQckEpGruKWKgfXOzFl8mVXcYPbdII6mNLS0evHIW6RMIBNXbv52mI/G1yHeDSQkyA2oGGFiGMJ2hRzJ9VueN1IGaEpH+vPal442XGx43BQ0z6TsyvSrfE2Hhn0o2RY9yLzGAwaUHFzOV8jnfcuQHJu1ME8k673apjvkVnQA6LSKUm6OLxeDqBxm+4Aui8OD2etlkgplddD5kpk4m1Tdjc3vtTNb6ejIrMMmsS+/O+IyDLQEZmLcCruuxwOFTCRocpIfQkEgyRNYkGasjycPtUqRiU1Jo5Mfzttm3q/rw5t/bkqvzj9LWgXmeeMkz/kNRSOvBfzhLQ76G6X+YS8jqOVmu8yOhWZynwqW3tG1zSQYalIHepUtm11eHDPoReUwTGPWxIHMBgikZtn9Bj2eCr8ljuzJpJcA5ZefXJJicjk9CcwEL2RF1g4fkQNnt9vcsGlyMySAQ3Ey2XGO0dqNwOcHxESbxopRQ9Yp1alp7ITGYrFOh9RWr8UqCJVbYs1mvAur7hEqtgGNSw3yJSKyJtOBhHFoWRoNHa57bBC7pqU5VbRk+J8ROuJTHCLvOpksNqmOJz2hXdokylpkW746VP9RXvfUiiLPOEDj0hmQHBsTx3LrZ/cIIOjFHloPLVF056PzmuJxTHySAHGn2T+Okded+hxntL53b1SegSR+ZI9YEDplOk5HBnc7hGPTX1UacPyyB55BDh9qdrtJ+whitUiMtm8LR6UDyWbFDlxPH1dXirmyDutbdW6gQN58qVITdm7Zpg63uVw+SLSz2zreu+mVIn3igwTtI3KAZS6dmRgPLQmyWTxSL/Si1/Kiy68jltKvJCC3JRpCLnyMu7tOjQv5VbeNuLIi20dEMomlosTR2YB2xtBH3whT0ZPiOI63YJ1K1SfzeWex6ReGZkTahF3VbGvHxwosd5FRistlP+iMmU9MsnBQh3rY62cDpmDFSnrWqxTtSs/Fi6WDLPFrb/nU3d7yPX85CEq8u6whfE8P5bXHDkyS/V8KkNZqixvOSaRirPEU/KnVGEic53O40FJllJaEnl74AkTJsHIwHsSmfF/PgHasoxuJLFL0KkMSgIsTwlJ5PLxudif3UXIOVJFYXwpqva+bvCwygMkxZyDfr1bHKtjua8O5eLl+1//+uv/AcYrKZA=";
|