@dxos/app-framework 0.3.11-main.bd26370 → 0.3.11-main.c86e105

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/lib/browser/{chunk-C2K6M6WC.mjs → chunk-QYIBDGYI.mjs} +19 -1
  2. package/dist/lib/browser/chunk-QYIBDGYI.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +179 -142
  4. package/dist/lib/browser/index.mjs.map +3 -3
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/{plugin-CBPJO5NB.mjs → plugin-YLDDUID4.mjs} +27 -2
  7. package/dist/lib/browser/plugin-YLDDUID4.mjs.map +7 -0
  8. package/dist/lib/node/{chunk-BOQBLWMX.cjs → chunk-YWRBMGDT.cjs} +26 -6
  9. package/dist/lib/node/chunk-YWRBMGDT.cjs.map +7 -0
  10. package/dist/lib/node/index.cjs +172 -137
  11. package/dist/lib/node/index.cjs.map +3 -3
  12. package/dist/lib/node/meta.json +1 -1
  13. package/dist/lib/node/{plugin-WDNRX2SR.cjs → plugin-NP3IH5Q3.cjs} +33 -8
  14. package/dist/lib/node/plugin-NP3IH5Q3.cjs.map +7 -0
  15. package/dist/types/src/plugins/IntentPlugin/IntentContext.d.ts +10 -2
  16. package/dist/types/src/plugins/IntentPlugin/IntentContext.d.ts.map +1 -1
  17. package/dist/types/src/plugins/IntentPlugin/intent.d.ts +3 -1
  18. package/dist/types/src/plugins/IntentPlugin/intent.d.ts.map +1 -1
  19. package/dist/types/src/plugins/IntentPlugin/plugin.d.ts.map +1 -1
  20. package/dist/types/src/plugins/IntentPlugin/provides.d.ts +2 -2
  21. package/dist/types/src/plugins/IntentPlugin/provides.d.ts.map +1 -1
  22. package/dist/types/src/plugins/PluginHost/PluginHost.d.ts +4 -2
  23. package/dist/types/src/plugins/PluginHost/PluginHost.d.ts.map +1 -1
  24. package/dist/types/src/plugins/PluginHost/plugin.d.ts.map +1 -1
  25. package/dist/types/src/plugins/common/layout.d.ts +2 -1
  26. package/dist/types/src/plugins/common/layout.d.ts.map +1 -1
  27. package/package.json +7 -7
  28. package/project.json +3 -1
  29. package/src/plugins/IntentPlugin/IntentContext.tsx +27 -3
  30. package/src/plugins/IntentPlugin/intent.ts +5 -1
  31. package/src/plugins/IntentPlugin/plugin.tsx +26 -2
  32. package/src/plugins/IntentPlugin/provides.ts +2 -2
  33. package/src/plugins/PluginHost/PluginHost.tsx +92 -57
  34. package/src/plugins/PluginHost/plugin.ts +1 -0
  35. package/src/plugins/common/layout.ts +1 -0
  36. package/dist/lib/browser/chunk-C2K6M6WC.mjs.map +0 -7
  37. package/dist/lib/browser/plugin-CBPJO5NB.mjs.map +0 -7
  38. package/dist/lib/node/chunk-BOQBLWMX.cjs.map +0 -7
  39. package/dist/lib/node/plugin-WDNRX2SR.cjs.map +0 -7
@@ -3,20 +3,22 @@
3
3
  //
4
4
 
5
5
  import { shallow } from 'deepsignal/react';
6
- import React, { useEffect, type FC, type PropsWithChildren, type ReactNode } from 'react';
6
+ import React, { useEffect, type FC, type PropsWithChildren, type ReactNode, useState } from 'react';
7
7
 
8
8
  import { LocalStorageStore } from '@dxos/local-storage';
9
9
  import { log } from '@dxos/log';
10
10
 
11
11
  import { type PluginContext, PluginProvider } from './PluginContext';
12
12
  import { type Plugin, type PluginDefinition, type PluginProvides } from './plugin';
13
+ import { ErrorBoundary } from '../SurfacePlugin';
13
14
 
14
15
  export type BootstrapPluginsParams = {
15
16
  order: PluginDefinition['meta'][];
16
17
  plugins: Record<string, () => Promise<PluginDefinition>>;
17
18
  core?: string[];
18
19
  defaults?: string[];
19
- fallback?: ReactNode;
20
+ fallback?: ErrorBoundary['props']['fallback'];
21
+ placeholder?: ReactNode;
20
22
  };
21
23
 
22
24
  export type PluginHostProvides = {
@@ -36,7 +38,8 @@ export const PluginHost = ({
36
38
  plugins: definitions,
37
39
  core = [],
38
40
  defaults = [],
39
- fallback = null,
41
+ fallback = DefaultFallback,
42
+ placeholder = null,
40
43
  }: BootstrapPluginsParams): PluginDefinition<PluginHostProvides> => {
41
44
  const state = new LocalStorageStore<PluginContext>(PLUGIN_HOST, {
42
45
  ready: false,
@@ -63,65 +66,97 @@ export const PluginHost = ({
63
66
  plugins: state.values,
64
67
  context: ({ children }) => <PluginProvider value={state.values}>{children}</PluginProvider>,
65
68
  root: () => {
66
- useEffect(() => {
67
- log('initializing plugins', { enabled: state.values.enabled });
68
- const timeout = setTimeout(async () => {
69
- const enabledIds = [...core, ...state.values.enabled].sort((a, b) => {
70
- const indexA = order.findIndex(({ id }) => id === a);
71
- const indexB = order.findIndex(({ id }) => id === b);
72
- return indexA - indexB;
73
- });
74
-
75
- const enabled = await Promise.all(
76
- enabledIds
77
- .map((id) => definitions[id])
78
- // If local storage indicates a plugin is enabled, but it is not available, ignore it.
79
- .filter((definition): definition is () => Promise<PluginDefinition> => Boolean(definition))
80
- .map((definition) => definition()),
81
- );
82
-
83
- const plugins = await Promise.all(
84
- enabled.map(async (definition) => {
85
- const plugin = await initializePlugin(definition).catch((err) => {
86
- console.error('Failed to initialize plugin:', definition.meta.id, err);
87
- return undefined;
88
- });
89
- return plugin;
90
- }),
91
- ).then((plugins) => plugins.filter((plugin): plugin is Plugin => Boolean(plugin)));
92
- log('plugins initialized', { plugins });
93
-
94
- await Promise.all(
95
- enabled.map(async (pluginDefinition) => {
96
- await pluginDefinition.ready?.(plugins);
97
- }),
98
- );
99
- log('plugins ready', { plugins });
100
-
101
- state.values.plugins = shallow(plugins);
102
- state.values.ready = true;
103
- });
104
-
105
- return () => {
106
- clearTimeout(timeout);
107
- state.values.ready = false;
108
- // TODO(wittjosiah): Does this ever need to be called prior to having dynamic plugins?
109
- // void Promise.all(enabled.map((definition) => definition.unload?.()));
110
- };
111
- }, []);
112
-
113
- if (!state.values.ready) {
114
- return <>{fallback}</>;
115
- }
116
-
117
- const ComposedContext = composeContext(state.values.plugins);
118
-
119
- return <ComposedContext>{rootComponents(state.values.plugins)}</ComposedContext>;
69
+ return (
70
+ <ErrorBoundary fallback={fallback}>
71
+ <Root order={order} core={core} definitions={definitions} state={state.values} placeholder={placeholder} />
72
+ </ErrorBoundary>
73
+ );
120
74
  },
121
75
  },
122
76
  };
123
77
  };
124
78
 
79
+ const DefaultFallback = ({ error }: { error: Error }) => {
80
+ return (
81
+ <div style={{ padding: '1rem' }}>
82
+ {/* TODO(wittjosiah): Link to docs for replacing default. */}
83
+ <h1 style={{ fontSize: '1.2rem', fontWeight: 700, margin: '0.5rem 0' }}>{error.message}</h1>
84
+ <pre>{error.stack}</pre>
85
+ </div>
86
+ );
87
+ };
88
+
89
+ type RootProps = {
90
+ order: PluginDefinition['meta'][];
91
+ state: PluginContext;
92
+ definitions: Record<string, () => Promise<PluginDefinition>>;
93
+ core: string[];
94
+ placeholder: ReactNode;
95
+ };
96
+
97
+ const Root = ({ order, core: corePluginIds, definitions, state, placeholder }: RootProps) => {
98
+ const [error, setError] = useState<unknown>();
99
+
100
+ useEffect(() => {
101
+ log('initializing plugins', { enabled: state.enabled });
102
+ const timeout = setTimeout(async () => {
103
+ try {
104
+ const enabledIds = [...corePluginIds, ...state.enabled].sort((a, b) => {
105
+ const indexA = order.findIndex(({ id }) => id === a);
106
+ const indexB = order.findIndex(({ id }) => id === b);
107
+ return indexA - indexB;
108
+ });
109
+
110
+ const enabled = await Promise.all(
111
+ enabledIds
112
+ .map((id) => definitions[id])
113
+ // If local storage indicates a plugin is enabled, but it is not available, ignore it.
114
+ .filter((definition): definition is () => Promise<PluginDefinition> => Boolean(definition))
115
+ .map((definition) => definition()),
116
+ );
117
+
118
+ const plugins = await Promise.all(
119
+ enabled.map(async (definition) => {
120
+ const plugin = await initializePlugin(definition).catch((err) => {
121
+ console.error('Failed to initialize plugin:', definition.meta.id, err);
122
+ return undefined;
123
+ });
124
+ return plugin;
125
+ }),
126
+ ).then((plugins) => plugins.filter((plugin): plugin is Plugin => Boolean(plugin)));
127
+ log('plugins initialized', { plugins });
128
+
129
+ await Promise.all(enabled.map((pluginDefinition) => pluginDefinition.ready?.(plugins)));
130
+ log('plugins ready', { plugins });
131
+
132
+ state.plugins = shallow(plugins);
133
+ state.ready = true;
134
+ } catch (err) {
135
+ setError(err);
136
+ }
137
+ });
138
+
139
+ return () => {
140
+ clearTimeout(timeout);
141
+ state.ready = false;
142
+ // TODO(wittjosiah): Does this ever need to be called prior to having dynamic plugins?
143
+ // void Promise.all(enabled.map((definition) => definition.unload?.()));
144
+ };
145
+ }, []);
146
+
147
+ if (error) {
148
+ throw error;
149
+ }
150
+
151
+ if (!state.ready) {
152
+ return <>{placeholder}</>;
153
+ }
154
+
155
+ const ComposedContext = composeContext(state.plugins);
156
+
157
+ return <ComposedContext>{rootComponents(state.plugins)}</ComposedContext>;
158
+ };
159
+
125
160
  /**
126
161
  * Resolve a `PluginDefinition` into a fully initialized `Plugin`.
127
162
  */
@@ -99,6 +99,7 @@ export type PluginDefinition<TProvides = {}, TInitializeProvides = {}> = Omit<Pl
99
99
  *
100
100
  * @param plugins All plugins which successfully initialized.
101
101
  */
102
+ // TODO(wittjosiah): Rename `ready` to a verb?
102
103
  ready?: (plugins: Plugin[]) => Promise<void>;
103
104
 
104
105
  /**
@@ -65,6 +65,7 @@ export enum LayoutAction {
65
65
  OPEN_POPOVER = `${LAYOUT_ACTION}/open-popover`,
66
66
  CLOSE_POPOVER = `${LAYOUT_ACTION}/close-popover`,
67
67
  ACTIVATE = `${LAYOUT_ACTION}/activate`,
68
+ FOCUS = `${LAYOUT_ACTION}/focus`,
68
69
  }
69
70
 
70
71
  /**
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/plugins/IntentPlugin/provides.ts", "../../../src/plugins/IntentPlugin/IntentContext.tsx", "../../../src/plugins/IntentPlugin/meta.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type IntentContext } from './IntentContext';\nimport { type Intent } from './intent';\nimport { type Plugin } from '../PluginHost';\n\nexport type IntentResolverProvides = {\n intent: {\n resolver: (intent: Intent, plugins: Plugin[]) => any;\n };\n};\n\nexport type IntentPluginProvides = {\n intent: IntentContext;\n};\n\nexport const parseIntentPlugin = (plugin: Plugin) =>\n (plugin.provides as any).intent?.dispatch ? (plugin as Plugin<IntentPluginProvides>) : undefined;\n\nexport const parseIntentResolverPlugin = (plugin: Plugin) =>\n (plugin.provides as any).intent?.resolver ? (plugin as Plugin<IntentResolverProvides>) : undefined;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Context, createContext, useContext, type Provider } from 'react';\n\nimport { type DispatchIntent } from './intent';\n\nexport type IntentContext = {\n dispatch: DispatchIntent;\n};\n\nconst IntentContext: Context<IntentContext> = createContext<IntentContext>({ dispatch: async () => {} });\n\nexport const useIntent = () => useContext(IntentContext);\n\nexport const IntentProvider: Provider<IntentContext> = IntentContext.Provider;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nconst IntentMeta = {\n id: 'dxos.org/plugin/intent',\n};\n\nexport default IntentMeta;\n"],
5
- "mappings": ";AAkBO,IAAMA,oBAAoB,CAACC,WAC/BA,OAAOC,SAAiBC,QAAQC,WAAYH,SAA0CI;AAElF,IAAMC,4BAA4B,CAACL,WACvCA,OAAOC,SAAiBC,QAAQI,WAAYN,SAA4CI;;;AClB3F,SAAuBG,eAAeC,kBAAiC;AAQvE,IAAMC,gBAAwCC,8BAA6B;EAAEC,UAAU,YAAA;EAAa;AAAE,CAAA;AAE/F,IAAMC,YAAY,MAAMC,WAAWJ,aAAAA;AAEnC,IAAMK,iBAA0CL,cAAcM;;;ACZrE,IAAMC,aAAa;EACjBC,IAAI;AACN;AAEA,IAAA,eAAeD;",
6
- "names": ["parseIntentPlugin", "plugin", "provides", "intent", "dispatch", "undefined", "parseIntentResolverPlugin", "resolver", "createContext", "useContext", "IntentContext", "createContext", "dispatch", "useIntent", "useContext", "IntentProvider", "Provider", "IntentMeta", "id"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/plugins/IntentPlugin/plugin.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { deepSignal } from 'deepsignal/react';\nimport React from 'react';\n\nimport { type IntentContext, IntentProvider } from './IntentContext';\nimport type { Intent } from './intent';\nimport IntentMeta from './meta';\nimport { type IntentPluginProvides, type IntentResolverProvides, parseIntentResolverPlugin } from './provides';\nimport type { PluginDefinition } from '../PluginHost';\nimport { filterPlugins, findPlugin } from '../helpers';\n\n/**\n * Allows plugins to register intent handlers and routes sent intents to the appropriate plugin.\n * Inspired by https://developer.android.com/reference/android/content/Intent.\n */\nconst IntentPlugin = (): PluginDefinition<IntentPluginProvides> => {\n const state = deepSignal<IntentContext>({ dispatch: async () => {} });\n\n return {\n meta: IntentMeta,\n ready: async (plugins) => {\n // Dispatch intent to associated plugin.\n const dispatch = async (intent: Intent) => {\n if (intent.plugin) {\n const plugin = findPlugin<IntentResolverProvides>(plugins, intent.plugin);\n return plugin?.provides.intent.resolver(intent, plugins);\n }\n\n // Return resolved value from first plugin that handles the intent.\n for (const plugin of filterPlugins(plugins, parseIntentResolverPlugin)) {\n const result = await plugin.provides.intent.resolver(intent, plugins);\n if (result) {\n return result;\n }\n }\n };\n\n // Sequentially dispatch array of invents.\n state.dispatch = async (intentOrArray) => {\n let result: any = null;\n for (const intent of Array.isArray(intentOrArray) ? intentOrArray : [intentOrArray]) {\n const data = intent.data ? { ...result, ...intent.data } : result;\n result = await dispatch({ ...intent, data });\n }\n return result;\n };\n },\n provides: {\n intent: state,\n context: ({ children }) => <IntentProvider value={state}>{children}</IntentProvider>,\n },\n };\n};\n\nexport default IntentPlugin;\n"],
5
- "mappings": ";;;;;;;;;;;AAIA,SAASA,kBAAkB;AAC3B,OAAOC,WAAW;AAalB,IAAMC,eAAe,MAAA;AACnB,QAAMC,QAAQC,WAA0B;IAAEC,UAAU,YAAA;IAAa;EAAE,CAAA;AAEnE,SAAO;IACLC,MAAMC;IACNC,OAAO,OAAOC,YAAAA;AAEZ,YAAMJ,WAAW,OAAOK,WAAAA;AACtB,YAAIA,OAAOC,QAAQ;AACjB,gBAAMA,SAASC,WAAmCH,SAASC,OAAOC,MAAM;AACxE,iBAAOA,QAAQE,SAASH,OAAOI,SAASJ,QAAQD,OAAAA;QAClD;AAGA,mBAAWE,UAAUI,cAAcN,SAASO,yBAAAA,GAA4B;AACtE,gBAAMC,SAAS,MAAMN,OAAOE,SAASH,OAAOI,SAASJ,QAAQD,OAAAA;AAC7D,cAAIQ,QAAQ;AACV,mBAAOA;UACT;QACF;MACF;AAGAd,YAAME,WAAW,OAAOa,kBAAAA;AACtB,YAAID,SAAc;AAClB,mBAAWP,UAAUS,MAAMC,QAAQF,aAAAA,IAAiBA,gBAAgB;UAACA;WAAgB;AACnF,gBAAMG,OAAOX,OAAOW,OAAO;YAAE,GAAGJ;YAAQ,GAAGP,OAAOW;UAAK,IAAIJ;AAC3DA,mBAAS,MAAMZ,SAAS;YAAE,GAAGK;YAAQW;UAAK,CAAA;QAC5C;AACA,eAAOJ;MACT;IACF;IACAJ,UAAU;MACRH,QAAQP;MACRmB,SAAS,CAAC,EAAEC,SAAQ,MAAO,sBAAA,cAACC,gBAAAA;QAAeC,OAAOtB;SAAQoB,QAAAA;IAC5D;EACF;AACF;AAEA,IAAA,iBAAerB;",
6
- "names": ["deepSignal", "React", "IntentPlugin", "state", "deepSignal", "dispatch", "meta", "IntentMeta", "ready", "plugins", "intent", "plugin", "findPlugin", "provides", "resolver", "filterPlugins", "parseIntentResolverPlugin", "result", "intentOrArray", "Array", "isArray", "data", "context", "children", "IntentProvider", "value"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/plugins/IntentPlugin/provides.ts", "../../../src/plugins/IntentPlugin/IntentContext.tsx", "../../../src/plugins/IntentPlugin/meta.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type IntentContext } from './IntentContext';\nimport { type Intent } from './intent';\nimport { type Plugin } from '../PluginHost';\n\nexport type IntentResolverProvides = {\n intent: {\n resolver: (intent: Intent, plugins: Plugin[]) => any;\n };\n};\n\nexport type IntentPluginProvides = {\n intent: IntentContext;\n};\n\nexport const parseIntentPlugin = (plugin: Plugin) =>\n (plugin.provides as any).intent?.dispatch ? (plugin as Plugin<IntentPluginProvides>) : undefined;\n\nexport const parseIntentResolverPlugin = (plugin: Plugin) =>\n (plugin.provides as any).intent?.resolver ? (plugin as Plugin<IntentResolverProvides>) : undefined;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Context, createContext, useContext, type Provider } from 'react';\n\nimport { type DispatchIntent } from './intent';\n\nexport type IntentContext = {\n dispatch: DispatchIntent;\n};\n\nconst IntentContext: Context<IntentContext> = createContext<IntentContext>({ dispatch: async () => {} });\n\nexport const useIntent = () => useContext(IntentContext);\n\nexport const IntentProvider: Provider<IntentContext> = IntentContext.Provider;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nconst IntentMeta = {\n id: 'dxos.org/plugin/intent',\n};\n\nexport default IntentMeta;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;ACIA,mBAAuE;ADchE,IAAMA,oBAAoB,CAACC,WAC/BA,OAAOC,SAAiBC,QAAQC,WAAYH,SAA0CI;AAElF,IAAMC,4BAA4B,CAACL,WACvCA,OAAOC,SAAiBC,QAAQI,WAAYN,SAA4CI;ACV3F,IAAMG,gBAAwCC,gDAA6B;EAAEL,UAAU,YAAA;EAAa;AAAE,CAAA;AAE/F,IAAMM,YAAY,UAAMC,yBAAWH,aAAAA;AAEnC,IAAMI,iBAA0CJ,cAAcK;ACZrE,IAAMC,aAAa;EACjBC,IAAI;AACN;AAEA,IAAA,eAAeD;",
6
- "names": ["parseIntentPlugin", "plugin", "provides", "intent", "dispatch", "undefined", "parseIntentResolverPlugin", "resolver", "IntentContext", "createContext", "useIntent", "useContext", "IntentProvider", "Provider", "IntentMeta", "id"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/plugins/IntentPlugin/plugin.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { deepSignal } from 'deepsignal/react';\nimport React from 'react';\n\nimport { type IntentContext, IntentProvider } from './IntentContext';\nimport type { Intent } from './intent';\nimport IntentMeta from './meta';\nimport { type IntentPluginProvides, type IntentResolverProvides, parseIntentResolverPlugin } from './provides';\nimport type { PluginDefinition } from '../PluginHost';\nimport { filterPlugins, findPlugin } from '../helpers';\n\n/**\n * Allows plugins to register intent handlers and routes sent intents to the appropriate plugin.\n * Inspired by https://developer.android.com/reference/android/content/Intent.\n */\nconst IntentPlugin = (): PluginDefinition<IntentPluginProvides> => {\n const state = deepSignal<IntentContext>({ dispatch: async () => {} });\n\n return {\n meta: IntentMeta,\n ready: async (plugins) => {\n // Dispatch intent to associated plugin.\n const dispatch = async (intent: Intent) => {\n if (intent.plugin) {\n const plugin = findPlugin<IntentResolverProvides>(plugins, intent.plugin);\n return plugin?.provides.intent.resolver(intent, plugins);\n }\n\n // Return resolved value from first plugin that handles the intent.\n for (const plugin of filterPlugins(plugins, parseIntentResolverPlugin)) {\n const result = await plugin.provides.intent.resolver(intent, plugins);\n if (result) {\n return result;\n }\n }\n };\n\n // Sequentially dispatch array of invents.\n state.dispatch = async (intentOrArray) => {\n let result: any = null;\n for (const intent of Array.isArray(intentOrArray) ? intentOrArray : [intentOrArray]) {\n const data = intent.data ? { ...result, ...intent.data } : result;\n result = await dispatch({ ...intent, data });\n }\n return result;\n };\n },\n provides: {\n intent: state,\n context: ({ children }) => <IntentProvider value={state}>{children}</IntentProvider>,\n },\n };\n};\n\nexport default IntentPlugin;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,mBAA2B;AAC3B,IAAAA,gBAAkB;AAalB,IAAMC,eAAe,MAAA;AACnB,QAAMC,YAAQC,yBAA0B;IAAEC,UAAU,YAAA;IAAa;EAAE,CAAA;AAEnE,SAAO;IACLC,MAAMC;IACNC,OAAO,OAAOC,YAAAA;AAEZ,YAAMJ,WAAW,OAAOK,WAAAA;AACtB,YAAIA,OAAOC,QAAQ;AACjB,gBAAMA,aAASC,kCAAmCH,SAASC,OAAOC,MAAM;AACxE,iBAAOA,QAAQE,SAASH,OAAOI,SAASJ,QAAQD,OAAAA;QAClD;AAGA,mBAAWE,cAAUI,qCAAcN,SAASO,+CAAAA,GAA4B;AACtE,gBAAMC,SAAS,MAAMN,OAAOE,SAASH,OAAOI,SAASJ,QAAQD,OAAAA;AAC7D,cAAIQ,QAAQ;AACV,mBAAOA;UACT;QACF;MACF;AAGAd,YAAME,WAAW,OAAOa,kBAAAA;AACtB,YAAID,SAAc;AAClB,mBAAWP,UAAUS,MAAMC,QAAQF,aAAAA,IAAiBA,gBAAgB;UAACA;WAAgB;AACnF,gBAAMG,OAAOX,OAAOW,OAAO;YAAE,GAAGJ;YAAQ,GAAGP,OAAOW;UAAK,IAAIJ;AAC3DA,mBAAS,MAAMZ,SAAS;YAAE,GAAGK;YAAQW;UAAK,CAAA;QAC5C;AACA,eAAOJ;MACT;IACF;IACAJ,UAAU;MACRH,QAAQP;MACRmB,SAAS,CAAC,EAAEC,SAAQ,MAAO,8BAAAC,QAAA,cAACC,sCAAAA;QAAeC,OAAOvB;SAAQoB,QAAAA;IAC5D;EACF;AACF;AAEA,IAAA,iBAAerB;",
6
- "names": ["import_react", "IntentPlugin", "state", "deepSignal", "dispatch", "meta", "IntentMeta", "ready", "plugins", "intent", "plugin", "findPlugin", "provides", "resolver", "filterPlugins", "parseIntentResolverPlugin", "result", "intentOrArray", "Array", "isArray", "data", "context", "children", "React", "IntentProvider", "value"]
7
- }