@dxos/app-framework 0.3.8-main.64c4d0a → 0.3.8-main.6e627a0

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.
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var chunk_BOQBLWMX_exports = {};
20
+ __export(chunk_BOQBLWMX_exports, {
21
+ IntentProvider: () => IntentProvider,
22
+ meta_default: () => meta_default,
23
+ parseIntentPlugin: () => parseIntentPlugin,
24
+ parseIntentResolverPlugin: () => parseIntentResolverPlugin,
25
+ useIntent: () => useIntent
26
+ });
27
+ module.exports = __toCommonJS(chunk_BOQBLWMX_exports);
28
+ var import_react = require("react");
29
+ var parseIntentPlugin = (plugin) => plugin.provides.intent?.dispatch ? plugin : void 0;
30
+ var parseIntentResolverPlugin = (plugin) => plugin.provides.intent?.resolver ? plugin : void 0;
31
+ var IntentContext = /* @__PURE__ */ (0, import_react.createContext)({
32
+ dispatch: async () => {
33
+ }
34
+ });
35
+ var useIntent = () => (0, import_react.useContext)(IntentContext);
36
+ var IntentProvider = IntentContext.Provider;
37
+ var IntentMeta = {
38
+ id: "dxos.org/plugin/intent"
39
+ };
40
+ var meta_default = IntentMeta;
41
+ // Annotate the CommonJS export names for ESM import in node:
42
+ 0 && (module.exports = {
43
+ IntentProvider,
44
+ meta_default,
45
+ parseIntentPlugin,
46
+ parseIntentResolverPlugin,
47
+ useIntent
48
+ });
49
+ //# sourceMappingURL=chunk-BOQBLWMX.cjs.map
@@ -0,0 +1,7 @@
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
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var chunk_VDKZ7AAF_exports = {};
20
+ __export(chunk_VDKZ7AAF_exports, {
21
+ filterPlugins: () => filterPlugins,
22
+ findPlugin: () => findPlugin,
23
+ getPlugin: () => getPlugin,
24
+ resolvePlugin: () => resolvePlugin
25
+ });
26
+ module.exports = __toCommonJS(chunk_VDKZ7AAF_exports);
27
+ var import_debug = require("@dxos/debug");
28
+ var findPlugin = (plugins, id) => {
29
+ return plugins.find((plugin) => plugin.meta.id === id || typeof plugin.meta.shortId === "string" && plugin.meta.shortId === id);
30
+ };
31
+ var getPlugin = (plugins, id) => {
32
+ return findPlugin(plugins, id) ?? (0, import_debug.raise)(new Error(`Plugin not found: ${id}`));
33
+ };
34
+ var filterPlugins = (plugins, predicate) => plugins.map((plugin) => predicate(plugin)).filter((plugin) => !!plugin);
35
+ var resolvePlugin = (plugins, predicate) => filterPlugins(plugins, predicate)[0];
36
+ // Annotate the CommonJS export names for ESM import in node:
37
+ 0 && (module.exports = {
38
+ filterPlugins,
39
+ findPlugin,
40
+ getPlugin,
41
+ resolvePlugin
42
+ });
43
+ //# sourceMappingURL=chunk-VDKZ7AAF.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/plugins/helpers.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { raise } from '@dxos/debug';\n\nimport { type Plugin } from './PluginHost';\n\n/**\n * Find a plugin by ID.\n */\nexport const findPlugin = <T>(plugins: Plugin[], id: string): Plugin<T> | undefined => {\n return plugins.find(\n (plugin) => plugin.meta.id === id || (typeof plugin.meta.shortId === 'string' && plugin.meta.shortId === id),\n ) as Plugin<T>;\n};\n\n/**\n * Find a plugin by ID, or raise an error if not found.\n */\nexport const getPlugin = <T>(plugins: Plugin[], id: string): Plugin<T> => {\n return findPlugin(plugins, id) ?? raise(new Error(`Plugin not found: ${id}`));\n};\n\n/**\n * Filter a list of plugins to only those that match a predicate.\n */\nexport const filterPlugins = <T>(\n plugins: Plugin[],\n predicate: (plugin: Plugin) => Plugin<T> | undefined,\n): Plugin<T>[] => plugins.map((plugin) => predicate(plugin)).filter((plugin): plugin is Plugin<T> => !!plugin);\n\n/**\n * Resolves a plugin by predicate.\n *\n * @example\n * import { parseIntentPlugin, resolvePlugin } from '@dxos/app-framework';\n * const intentPlugin = resolvePlugin(plugins, parseIntentPlugin);\n */\nexport const resolvePlugin = <T>(\n plugins: Plugin[],\n predicate: (plugin: Plugin) => Plugin<T> | undefined,\n): Plugin<T> | undefined => filterPlugins(plugins, predicate)[0];\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,mBAAsB;AAOf,IAAMA,aAAa,CAAIC,SAAmBC,OAAAA;AAC/C,SAAOD,QAAQE,KACb,CAACC,WAAWA,OAAOC,KAAKH,OAAOA,MAAO,OAAOE,OAAOC,KAAKC,YAAY,YAAYF,OAAOC,KAAKC,YAAYJ,EAAAA;AAE7G;AAKO,IAAMK,YAAY,CAAIN,SAAmBC,OAAAA;AAC9C,SAAOF,WAAWC,SAASC,EAAAA,SAAOM,oBAAM,IAAIC,MAAM,qBAAqBP,EAAAA,EAAI,CAAA;AAC7E;AAKO,IAAMQ,gBAAgB,CAC3BT,SACAU,cACgBV,QAAQW,IAAI,CAACR,WAAWO,UAAUP,MAAAA,CAAAA,EAASS,OAAO,CAACT,WAAgC,CAAC,CAACA,MAAAA;AAShG,IAAMU,gBAAgB,CAC3Bb,SACAU,cAC0BD,cAAcT,SAASU,SAAAA,EAAW,CAAA;",
6
+ "names": ["findPlugin", "plugins", "id", "find", "plugin", "meta", "shortId", "getPlugin", "raise", "Error", "filterPlugins", "predicate", "map", "filter", "resolvePlugin"]
7
+ }
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var chunk_YDKX45O3_exports = {};
20
+ __export(chunk_YDKX45O3_exports, {
21
+ SurfaceProvider: () => SurfaceProvider,
22
+ meta_default: () => meta_default,
23
+ parseRootSurfacePlugin: () => parseRootSurfacePlugin,
24
+ parseSurfacePlugin: () => parseSurfacePlugin,
25
+ useSurface: () => useSurface
26
+ });
27
+ module.exports = __toCommonJS(chunk_YDKX45O3_exports);
28
+ var import_react = require("react");
29
+ var parseRootSurfacePlugin = (plugin) => plugin?.provides?.surface?.components ? plugin : void 0;
30
+ var parseSurfacePlugin = (plugin) => plugin?.provides?.surface?.component ? plugin : void 0;
31
+ var SurfaceRootContext = /* @__PURE__ */ (0, import_react.createContext)({
32
+ components: {}
33
+ });
34
+ var useSurface = () => (0, import_react.useContext)(SurfaceRootContext);
35
+ var SurfaceProvider = SurfaceRootContext.Provider;
36
+ var SurfaceMeta = {
37
+ id: "dxos.org/plugin/surface"
38
+ };
39
+ var meta_default = SurfaceMeta;
40
+ // Annotate the CommonJS export names for ESM import in node:
41
+ 0 && (module.exports = {
42
+ SurfaceProvider,
43
+ meta_default,
44
+ parseRootSurfacePlugin,
45
+ parseSurfacePlugin,
46
+ useSurface
47
+ });
48
+ //# sourceMappingURL=chunk-YDKX45O3.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/plugins/SurfacePlugin/provides.ts", "../../../src/plugins/SurfacePlugin/SurfaceRootContext.tsx", "../../../src/plugins/SurfacePlugin/meta.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type SurfaceComponent, type SurfaceRootContext } from './SurfaceRootContext';\nimport { type Plugin } from '../PluginHost';\n\nexport type SurfaceProvides = {\n surface: {\n /**\n * Used by the `Surface` resolver to find a component to render.\n */\n component: SurfaceComponent;\n };\n};\n\nexport type SurfacePluginProvides = {\n surface: SurfaceRootContext;\n};\n\nexport const parseRootSurfacePlugin = (plugin?: Plugin) =>\n (plugin?.provides as any)?.surface?.components ? (plugin as Plugin<SurfacePluginProvides>) : undefined;\n\nexport const parseSurfacePlugin = (plugin?: Plugin) =>\n (plugin?.provides as any)?.surface?.component ? (plugin as Plugin<SurfaceProvides>) : undefined;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { createContext, useContext, type Context, type Provider, type ReactNode, type ForwardedRef } from 'react';\n\nimport { type SurfaceProps } from './Surface';\n\n// TODO(wittjosiah): Factor out.\ntype WithRequiredProperty<Type, Key extends keyof Type> = Type & {\n [Property in Key]-?: Type[Property];\n};\n\ntype SurfaceComponentProps = WithRequiredProperty<SurfaceProps, 'data'>;\n\n/**\n * Function which resolves a Surface.\n *\n * If a null value is returned, the rendering is deferred to other plugins.\n */\nexport type SurfaceComponent = (props: SurfaceComponentProps, forwardedRef: ForwardedRef<HTMLElement>) => ReactNode;\n\nexport type SurfaceRootContext = {\n components: Record<string, SurfaceComponent>;\n};\n\nconst SurfaceRootContext: Context<SurfaceRootContext> = createContext<SurfaceRootContext>({ components: {} });\n\nexport const useSurface = () => useContext(SurfaceRootContext);\n\nexport const SurfaceProvider: Provider<SurfaceRootContext> = SurfaceRootContext.Provider;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nconst SurfaceMeta = {\n id: 'dxos.org/plugin/surface',\n};\n\nexport default SurfaceMeta;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;ACIA,mBAA0G;ADgBnG,IAAMA,yBAAyB,CAACC,WACpCA,QAAQC,UAAkBC,SAASC,aAAcH,SAA2CI;AAExF,IAAMC,qBAAqB,CAACL,WAChCA,QAAQC,UAAkBC,SAASI,YAAaN,SAAqCI;ACExF,IAAMG,qBAAkDC,gDAAkC;EAAEL,YAAY,CAAC;AAAE,CAAA;AAEpG,IAAMM,aAAa,UAAMC,yBAAWH,kBAAAA;AAEpC,IAAMI,kBAAgDJ,mBAAmBK;AC1BhF,IAAMC,cAAc;EAClBC,IAAI;AACN;AAEA,IAAA,eAAeD;",
6
+ "names": ["parseRootSurfacePlugin", "plugin", "provides", "surface", "components", "undefined", "parseSurfacePlugin", "component", "SurfaceRootContext", "createContext", "useSurface", "useContext", "SurfaceProvider", "Provider", "SurfaceMeta", "id"]
7
+ }
@@ -5,9 +5,6 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __esm = (fn, res) => function __init() {
9
- return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
10
- };
11
8
  var __export = (target, all) => {
12
9
  for (var name in all)
13
10
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -29,207 +26,10 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
29
26
  mod
30
27
  ));
31
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
32
-
33
- // packages/sdk/app-framework/src/plugins/helpers.ts
34
- var import_debug, findPlugin, getPlugin, filterPlugins, resolvePlugin;
35
- var init_helpers = __esm({
36
- "packages/sdk/app-framework/src/plugins/helpers.ts"() {
37
- "use strict";
38
- import_debug = require("@dxos/debug");
39
- findPlugin = (plugins, id) => {
40
- return plugins.find((plugin) => plugin.meta.id === id || typeof plugin.meta.shortId === "string" && plugin.meta.shortId === id);
41
- };
42
- getPlugin = (plugins, id) => {
43
- return findPlugin(plugins, id) ?? (0, import_debug.raise)(new Error(`Plugin not found: ${id}`));
44
- };
45
- filterPlugins = (plugins, predicate) => plugins.map((plugin) => predicate(plugin)).filter((plugin) => !!plugin);
46
- resolvePlugin = (plugins, predicate) => filterPlugins(plugins, predicate)[0];
47
- }
48
- });
49
-
50
- // packages/sdk/app-framework/src/plugins/IntentPlugin/provides.ts
51
- var parseIntentPlugin, parseIntentResolverPlugin;
52
- var init_provides = __esm({
53
- "packages/sdk/app-framework/src/plugins/IntentPlugin/provides.ts"() {
54
- "use strict";
55
- parseIntentPlugin = (plugin) => plugin.provides.intent?.dispatch ? plugin : void 0;
56
- parseIntentResolverPlugin = (plugin) => plugin.provides.intent?.resolver ? plugin : void 0;
57
- }
58
- });
59
-
60
- // packages/sdk/app-framework/src/plugins/IntentPlugin/IntentContext.tsx
61
- var import_react, IntentContext, useIntent, IntentProvider;
62
- var init_IntentContext = __esm({
63
- "packages/sdk/app-framework/src/plugins/IntentPlugin/IntentContext.tsx"() {
64
- "use strict";
65
- import_react = require("react");
66
- IntentContext = /* @__PURE__ */ (0, import_react.createContext)({
67
- dispatch: async () => {
68
- }
69
- });
70
- useIntent = () => (0, import_react.useContext)(IntentContext);
71
- IntentProvider = IntentContext.Provider;
72
- }
73
- });
74
-
75
- // packages/sdk/app-framework/src/plugins/SurfacePlugin/provides.ts
76
- var parseRootSurfacePlugin, parseSurfacePlugin;
77
- var init_provides2 = __esm({
78
- "packages/sdk/app-framework/src/plugins/SurfacePlugin/provides.ts"() {
79
- "use strict";
80
- parseRootSurfacePlugin = (plugin) => plugin?.provides?.surface?.components ? plugin : void 0;
81
- parseSurfacePlugin = (plugin) => plugin?.provides?.surface?.component ? plugin : void 0;
82
- }
83
- });
84
-
85
- // packages/sdk/app-framework/src/plugins/SurfacePlugin/SurfaceRootContext.tsx
86
- var import_react6, SurfaceRootContext, useSurface, SurfaceProvider;
87
- var init_SurfaceRootContext = __esm({
88
- "packages/sdk/app-framework/src/plugins/SurfacePlugin/SurfaceRootContext.tsx"() {
89
- "use strict";
90
- import_react6 = require("react");
91
- SurfaceRootContext = /* @__PURE__ */ (0, import_react6.createContext)({
92
- components: {}
93
- });
94
- useSurface = () => (0, import_react6.useContext)(SurfaceRootContext);
95
- SurfaceProvider = SurfaceRootContext.Provider;
96
- }
97
- });
98
-
99
- // packages/sdk/app-framework/src/plugins/IntentPlugin/meta.ts
100
- var IntentMeta, meta_default;
101
- var init_meta = __esm({
102
- "packages/sdk/app-framework/src/plugins/IntentPlugin/meta.ts"() {
103
- "use strict";
104
- IntentMeta = {
105
- id: "dxos.org/plugin/intent"
106
- };
107
- meta_default = IntentMeta;
108
- }
109
- });
110
-
111
- // packages/sdk/app-framework/src/plugins/SurfacePlugin/meta.ts
112
- var SurfaceMeta, meta_default2;
113
- var init_meta2 = __esm({
114
- "packages/sdk/app-framework/src/plugins/SurfacePlugin/meta.ts"() {
115
- "use strict";
116
- SurfaceMeta = {
117
- id: "dxos.org/plugin/surface"
118
- };
119
- meta_default2 = SurfaceMeta;
120
- }
121
- });
122
-
123
- // packages/sdk/app-framework/src/plugins/SurfacePlugin/plugin.tsx
124
- var plugin_exports = {};
125
- __export(plugin_exports, {
126
- default: () => plugin_default
127
- });
128
- var import_react9, import_react10, SurfacePlugin, plugin_default;
129
- var init_plugin = __esm({
130
- "packages/sdk/app-framework/src/plugins/SurfacePlugin/plugin.tsx"() {
131
- "use strict";
132
- import_react9 = require("deepsignal/react");
133
- import_react10 = __toESM(require("react"));
134
- init_SurfaceRootContext();
135
- init_meta2();
136
- init_provides2();
137
- init_helpers();
138
- SurfacePlugin = () => {
139
- const state = (0, import_react9.deepSignal)({
140
- components: {}
141
- });
142
- return {
143
- meta: meta_default2,
144
- ready: async (plugins) => {
145
- state.components = (0, import_react9.shallow)(filterPlugins(plugins, parseSurfacePlugin).reduce((acc, plugin) => {
146
- return {
147
- ...acc,
148
- [plugin.meta.id]: plugin.provides.surface.component
149
- };
150
- }, {}));
151
- },
152
- provides: {
153
- surface: state,
154
- context: ({ children }) => /* @__PURE__ */ import_react10.default.createElement(SurfaceProvider, {
155
- value: state
156
- }, children)
157
- }
158
- };
159
- };
160
- plugin_default = SurfacePlugin;
161
- }
162
- });
163
-
164
- // packages/sdk/app-framework/src/plugins/IntentPlugin/plugin.tsx
165
- var plugin_exports2 = {};
166
- __export(plugin_exports2, {
167
- default: () => plugin_default2
168
- });
169
- var import_react11, import_react12, IntentPlugin, plugin_default2;
170
- var init_plugin2 = __esm({
171
- "packages/sdk/app-framework/src/plugins/IntentPlugin/plugin.tsx"() {
172
- "use strict";
173
- import_react11 = require("deepsignal/react");
174
- import_react12 = __toESM(require("react"));
175
- init_IntentContext();
176
- init_meta();
177
- init_provides();
178
- init_helpers();
179
- IntentPlugin = () => {
180
- const state = (0, import_react11.deepSignal)({
181
- dispatch: async () => {
182
- }
183
- });
184
- return {
185
- meta: meta_default,
186
- ready: async (plugins) => {
187
- const dispatch = async (intent) => {
188
- if (intent.plugin) {
189
- const plugin = findPlugin(plugins, intent.plugin);
190
- return plugin?.provides.intent.resolver(intent, plugins);
191
- }
192
- for (const plugin of filterPlugins(plugins, parseIntentResolverPlugin)) {
193
- const result = await plugin.provides.intent.resolver(intent, plugins);
194
- if (result) {
195
- return result;
196
- }
197
- }
198
- };
199
- state.dispatch = async (intentOrArray) => {
200
- let result = null;
201
- for (const intent of Array.isArray(intentOrArray) ? intentOrArray : [
202
- intentOrArray
203
- ]) {
204
- const data = intent.data ? {
205
- ...result,
206
- ...intent.data
207
- } : result;
208
- result = await dispatch({
209
- ...intent,
210
- data
211
- });
212
- }
213
- return result;
214
- };
215
- },
216
- provides: {
217
- intent: state,
218
- context: ({ children }) => /* @__PURE__ */ import_react12.default.createElement(IntentProvider, {
219
- value: state
220
- }, children)
221
- }
222
- };
223
- };
224
- plugin_default2 = IntentPlugin;
225
- }
226
- });
227
-
228
- // packages/sdk/app-framework/src/index.ts
229
- var src_exports = {};
230
- __export(src_exports, {
29
+ var node_exports = {};
30
+ __export(node_exports, {
231
31
  ErrorBoundary: () => ErrorBoundary,
232
- IntentProvider: () => IntentProvider,
32
+ IntentProvider: () => import_chunk_BOQBLWMX.IntentProvider,
233
33
  Layout: () => Layout,
234
34
  LayoutAction: () => LayoutAction,
235
35
  Plugin: () => Plugin,
@@ -239,39 +39,49 @@ __export(src_exports, {
239
39
  ResourceKey: () => ResourceKey,
240
40
  ResourceLanguage: () => ResourceLanguage,
241
41
  Surface: () => Surface,
242
- SurfaceProvider: () => SurfaceProvider,
42
+ SurfaceProvider: () => import_chunk_YDKX45O3.SurfaceProvider,
243
43
  createApp: () => createApp,
244
- filterPlugins: () => filterPlugins,
245
- findPlugin: () => findPlugin,
246
- getPlugin: () => getPlugin,
44
+ filterPlugins: () => import_chunk_VDKZ7AAF.filterPlugins,
45
+ findPlugin: () => import_chunk_VDKZ7AAF.findPlugin,
46
+ getPlugin: () => import_chunk_VDKZ7AAF.getPlugin,
247
47
  initializePlugin: () => initializePlugin,
248
48
  parseGraphBuilderPlugin: () => parseGraphBuilderPlugin,
249
49
  parseGraphPlugin: () => parseGraphPlugin,
250
- parseIntentPlugin: () => parseIntentPlugin,
251
- parseIntentResolverPlugin: () => parseIntentResolverPlugin,
50
+ parseIntentPlugin: () => import_chunk_BOQBLWMX.parseIntentPlugin,
51
+ parseIntentResolverPlugin: () => import_chunk_BOQBLWMX.parseIntentResolverPlugin,
252
52
  parseLayoutPlugin: () => parseLayoutPlugin,
253
53
  parseMetadataRecordsPlugin: () => parseMetadataRecordsPlugin,
254
54
  parseMetadataResolverPlugin: () => parseMetadataResolverPlugin,
255
55
  parsePluginHost: () => parsePluginHost,
256
- parseRootSurfacePlugin: () => parseRootSurfacePlugin,
257
- parseSurfacePlugin: () => parseSurfacePlugin,
56
+ parseRootSurfacePlugin: () => import_chunk_YDKX45O3.parseRootSurfacePlugin,
57
+ parseSurfacePlugin: () => import_chunk_YDKX45O3.parseSurfacePlugin,
258
58
  parseTranslationsPlugin: () => parseTranslationsPlugin,
259
59
  pluginMeta: () => pluginMeta,
260
- resolvePlugin: () => resolvePlugin,
261
- useIntent: () => useIntent,
60
+ resolvePlugin: () => import_chunk_VDKZ7AAF.resolvePlugin,
61
+ useIntent: () => import_chunk_BOQBLWMX.useIntent,
262
62
  usePlugin: () => usePlugin,
263
63
  usePlugins: () => usePlugins,
264
64
  useResolvePlugin: () => useResolvePlugin,
265
- useSurface: () => useSurface
65
+ useSurface: () => import_chunk_YDKX45O3.useSurface
266
66
  });
267
- module.exports = __toCommonJS(src_exports);
268
-
269
- // packages/sdk/app-framework/src/plugins/common/graph.ts
67
+ module.exports = __toCommonJS(node_exports);
68
+ var import_chunk_YDKX45O3 = require("./chunk-YDKX45O3.cjs");
69
+ var import_chunk_BOQBLWMX = require("./chunk-BOQBLWMX.cjs");
70
+ var import_chunk_VDKZ7AAF = require("./chunk-VDKZ7AAF.cjs");
71
+ var import_zod = require("zod");
72
+ var import_zod2 = require("zod");
73
+ var import_react = require("react");
74
+ var import_react2 = require("deepsignal/react");
75
+ var import_react3 = __toESM(require("react"));
76
+ var import_local_storage = require("@dxos/local-storage");
77
+ var import_log = require("@dxos/log");
78
+ var import_react4 = __toESM(require("react"));
79
+ var import_react5 = __toESM(require("react"));
80
+ var import_react6 = require("react");
81
+ var import_react7 = __toESM(require("react"));
82
+ var import_invariant = require("@dxos/invariant");
270
83
  var parseGraphPlugin = (plugin) => plugin.provides.graph?.root ? plugin : void 0;
271
84
  var parseGraphBuilderPlugin = (plugin) => plugin.provides.graph?.builder ? plugin : void 0;
272
-
273
- // packages/sdk/app-framework/src/plugins/common/layout.ts
274
- var import_zod = require("zod");
275
85
  var Layout = import_zod.z.object({
276
86
  fullscreen: import_zod.z.boolean(),
277
87
  sidebarOpen: import_zod.z.boolean(),
@@ -302,17 +112,12 @@ var LayoutAction;
302
112
  LayoutAction2[LayoutAction2["CLOSE_POPOVER"] = `${LAYOUT_ACTION}/close-popover`] = "CLOSE_POPOVER";
303
113
  LayoutAction2[LayoutAction2["ACTIVATE"] = `${LAYOUT_ACTION}/activate`] = "ACTIVATE";
304
114
  })(LayoutAction || (LayoutAction = {}));
305
-
306
- // packages/sdk/app-framework/src/plugins/common/metadata.ts
307
115
  var parseMetadataRecordsPlugin = (plugin) => {
308
116
  return plugin.provides.metadata?.records ? plugin : void 0;
309
117
  };
310
118
  var parseMetadataResolverPlugin = (plugin) => {
311
119
  return plugin.provides.metadata?.resolver ? plugin : void 0;
312
120
  };
313
-
314
- // packages/sdk/app-framework/src/plugins/common/translations.ts
315
- var import_zod2 = require("zod");
316
121
  var ResourceKey = import_zod2.z.union([
317
122
  import_zod2.z.string(),
318
123
  import_zod2.z.record(import_zod2.z.any())
@@ -323,15 +128,6 @@ var parseTranslationsPlugin = (plugin) => {
323
128
  const { success } = import_zod2.z.array(Resource).safeParse(plugin.provides.translations);
324
129
  return success ? plugin : void 0;
325
130
  };
326
-
327
- // packages/sdk/app-framework/src/plugins/index.ts
328
- init_helpers();
329
-
330
- // packages/sdk/app-framework/src/plugins/IntentPlugin/index.ts
331
- init_provides();
332
- init_IntentContext();
333
-
334
- // packages/sdk/app-framework/src/plugins/PluginHost/plugin.ts
335
131
  var pluginMeta = (meta) => meta;
336
132
  var Plugin;
337
133
  (function(Plugin2) {
@@ -341,11 +137,7 @@ var Plugin;
341
137
  });
342
138
  };
343
139
  })(Plugin || (Plugin = {}));
344
-
345
- // packages/sdk/app-framework/src/plugins/PluginHost/PluginContext.tsx
346
- var import_react2 = require("react");
347
- init_helpers();
348
- var PluginContext = /* @__PURE__ */ (0, import_react2.createContext)({
140
+ var PluginContext = /* @__PURE__ */ (0, import_react.createContext)({
349
141
  ready: false,
350
142
  enabled: [],
351
143
  plugins: [],
@@ -355,22 +147,16 @@ var PluginContext = /* @__PURE__ */ (0, import_react2.createContext)({
355
147
  disablePlugin: () => {
356
148
  }
357
149
  });
358
- var usePlugins = () => (0, import_react2.useContext)(PluginContext);
150
+ var usePlugins = () => (0, import_react.useContext)(PluginContext);
359
151
  var usePlugin = (id) => {
360
152
  const { plugins } = usePlugins();
361
- return findPlugin(plugins, id);
153
+ return (0, import_chunk_VDKZ7AAF.findPlugin)(plugins, id);
362
154
  };
363
155
  var useResolvePlugin = (predicate) => {
364
156
  const { plugins } = usePlugins();
365
- return resolvePlugin(plugins, predicate);
157
+ return (0, import_chunk_VDKZ7AAF.resolvePlugin)(plugins, predicate);
366
158
  };
367
159
  var PluginProvider = PluginContext.Provider;
368
-
369
- // packages/sdk/app-framework/src/plugins/PluginHost/PluginHost.tsx
370
- var import_react3 = require("deepsignal/react");
371
- var import_react4 = __toESM(require("react"));
372
- var import_local_storage = require("@dxos/local-storage");
373
- var import_log = require("@dxos/log");
374
160
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/sdk/app-framework/src/plugins/PluginHost/PluginHost.tsx";
375
161
  var parsePluginHost = (plugin) => plugin.provides.plugins ? plugin : void 0;
376
162
  var PLUGIN_HOST = "dxos.org/plugin/host";
@@ -400,11 +186,11 @@ var PluginHost = ({ order, plugins: definitions, core = [], defaults = [], fallb
400
186
  },
401
187
  provides: {
402
188
  plugins: state.values,
403
- context: ({ children }) => /* @__PURE__ */ import_react4.default.createElement(PluginProvider, {
189
+ context: ({ children }) => /* @__PURE__ */ import_react3.default.createElement(PluginProvider, {
404
190
  value: state.values
405
191
  }, children),
406
192
  root: () => {
407
- (0, import_react4.useEffect)(() => {
193
+ (0, import_react3.useEffect)(() => {
408
194
  (0, import_log.log)("initializing plugins", {
409
195
  enabled: state.values.enabled
410
196
  }, {
@@ -449,7 +235,7 @@ var PluginHost = ({ order, plugins: definitions, core = [], defaults = [], fallb
449
235
  S: void 0,
450
236
  C: (f, a) => f(...a)
451
237
  });
452
- state.values.plugins = (0, import_react3.shallow)(plugins);
238
+ state.values.plugins = (0, import_react2.shallow)(plugins);
453
239
  state.values.ready = true;
454
240
  });
455
241
  return () => {
@@ -458,10 +244,10 @@ var PluginHost = ({ order, plugins: definitions, core = [], defaults = [], fallb
458
244
  };
459
245
  }, []);
460
246
  if (!state.values.ready) {
461
- return /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, fallback);
247
+ return /* @__PURE__ */ import_react3.default.createElement(import_react3.default.Fragment, null, fallback);
462
248
  }
463
249
  const ComposedContext = composeContext(state.values.plugins);
464
- return /* @__PURE__ */ import_react4.default.createElement(ComposedContext, null, rootComponents(state.values.plugins));
250
+ return /* @__PURE__ */ import_react3.default.createElement(ComposedContext, null, rootComponents(state.values.plugins));
465
251
  }
466
252
  }
467
253
  };
@@ -480,7 +266,7 @@ var rootComponents = (plugins) => {
480
266
  return plugins.map((plugin) => {
481
267
  const Component2 = plugin.provides.root;
482
268
  if (Component2) {
483
- return /* @__PURE__ */ import_react4.default.createElement(Component2, {
269
+ return /* @__PURE__ */ import_react3.default.createElement(Component2, {
484
270
  key: plugin.meta.id
485
271
  });
486
272
  } else {
@@ -494,15 +280,9 @@ var composeContext = (plugins) => {
494
280
  var compose = (contexts) => {
495
281
  return [
496
282
  ...contexts
497
- ].reduce((Acc, Next) => ({ children }) => /* @__PURE__ */ import_react4.default.createElement(Acc, null, /* @__PURE__ */ import_react4.default.createElement(Next, null, children)));
283
+ ].reduce((Acc, Next) => ({ children }) => /* @__PURE__ */ import_react3.default.createElement(Acc, null, /* @__PURE__ */ import_react3.default.createElement(Next, null, children)));
498
284
  };
499
-
500
- // packages/sdk/app-framework/src/plugins/SurfacePlugin/index.ts
501
- init_provides2();
502
-
503
- // packages/sdk/app-framework/src/plugins/SurfacePlugin/ErrorBoundary.tsx
504
- var import_react5 = __toESM(require("react"));
505
- var ErrorBoundary = class extends import_react5.Component {
285
+ var ErrorBoundary = class extends import_react4.Component {
506
286
  constructor(props) {
507
287
  super(props);
508
288
  this.state = {
@@ -521,7 +301,7 @@ var ErrorBoundary = class extends import_react5.Component {
521
301
  }
522
302
  render() {
523
303
  if (this.state.error) {
524
- return /* @__PURE__ */ import_react5.default.createElement(this.props.fallback, {
304
+ return /* @__PURE__ */ import_react4.default.createElement(this.props.fallback, {
525
305
  error: this.state.error,
526
306
  reset: this.resetError
527
307
  });
@@ -534,35 +314,30 @@ var ErrorBoundary = class extends import_react5.Component {
534
314
  });
535
315
  }
536
316
  };
537
-
538
- // packages/sdk/app-framework/src/plugins/SurfacePlugin/Surface.tsx
539
- var import_react7 = __toESM(require("react"));
540
- var import_react8 = require("react");
541
- init_SurfaceRootContext();
542
- var Surface = /* @__PURE__ */ (0, import_react7.forwardRef)(({ role, name = role, fallback, ...rest }, forwardedRef) => {
317
+ var Surface = /* @__PURE__ */ (0, import_react5.forwardRef)(({ role, name = role, fallback, ...rest }, forwardedRef) => {
543
318
  const props = {
544
319
  role,
545
320
  name,
546
321
  fallback,
547
322
  ...rest
548
323
  };
549
- const context = (0, import_react8.useContext)(SurfaceContext);
324
+ const context = (0, import_react6.useContext)(SurfaceContext);
550
325
  const data = props.data ?? (name && context?.surfaces?.[name]?.data || {});
551
- return /* @__PURE__ */ import_react7.default.createElement(import_react7.default.Fragment, null, fallback ? /* @__PURE__ */ import_react7.default.createElement(ErrorBoundary, {
326
+ return /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, null, fallback ? /* @__PURE__ */ import_react5.default.createElement(ErrorBoundary, {
552
327
  data,
553
328
  fallback
554
- }, /* @__PURE__ */ import_react7.default.createElement(SurfaceResolver, {
329
+ }, /* @__PURE__ */ import_react5.default.createElement(SurfaceResolver, {
555
330
  ...props,
556
331
  ref: forwardedRef
557
- })) : /* @__PURE__ */ import_react7.default.createElement(SurfaceResolver, {
332
+ })) : /* @__PURE__ */ import_react5.default.createElement(SurfaceResolver, {
558
333
  ...props,
559
334
  ref: forwardedRef
560
335
  }));
561
336
  });
562
- var SurfaceContext = /* @__PURE__ */ (0, import_react8.createContext)(null);
563
- var SurfaceResolver = /* @__PURE__ */ (0, import_react7.forwardRef)((props, forwardedRef) => {
564
- const { components } = useSurface();
565
- const parent = (0, import_react8.useContext)(SurfaceContext);
337
+ var SurfaceContext = /* @__PURE__ */ (0, import_react6.createContext)(null);
338
+ var SurfaceResolver = /* @__PURE__ */ (0, import_react5.forwardRef)((props, forwardedRef) => {
339
+ const { components } = (0, import_chunk_YDKX45O3.useSurface)();
340
+ const parent = (0, import_react6.useContext)(SurfaceContext);
566
341
  const nodes = resolveNodes(components, props, parent, forwardedRef);
567
342
  const currentContext = {
568
343
  ...props,
@@ -571,9 +346,9 @@ var SurfaceResolver = /* @__PURE__ */ (0, import_react7.forwardRef)((props, forw
571
346
  ...props.surfaces
572
347
  }
573
348
  };
574
- return /* @__PURE__ */ import_react7.default.createElement(SurfaceContext.Provider, {
349
+ return /* @__PURE__ */ import_react5.default.createElement(SurfaceContext.Provider, {
575
350
  value: currentContext
576
- }, nodes.length > 0 ? nodes : props.contentFallback ? /* @__PURE__ */ import_react7.default.createElement(props.contentFallback, null) : null);
351
+ }, nodes.length > 0 ? nodes : props.contentFallback ? /* @__PURE__ */ import_react5.default.createElement(props.contentFallback, null) : null);
577
352
  });
578
353
  var resolveNodes = (components, props, context, forwardedRef) => {
579
354
  const data = {
@@ -585,37 +360,28 @@ var resolveNodes = (components, props, context, forwardedRef) => {
585
360
  ...props,
586
361
  data
587
362
  }, forwardedRef);
588
- return result ? /* @__PURE__ */ import_react7.default.createElement(import_react7.Fragment, {
363
+ return result ? /* @__PURE__ */ import_react5.default.createElement(import_react5.Fragment, {
589
364
  key
590
365
  }, result) : void 0;
591
366
  }).filter((Component2) => Boolean(Component2));
592
367
  return props.limit ? nodes.slice(0, props.limit) : nodes;
593
368
  };
594
-
595
- // packages/sdk/app-framework/src/plugins/SurfacePlugin/index.ts
596
- init_SurfaceRootContext();
597
-
598
- // packages/sdk/app-framework/src/App.tsx
599
- var import_react13 = __toESM(require("react"));
600
- var import_invariant = require("@dxos/invariant");
601
- init_meta();
602
- init_meta2();
603
369
  var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/sdk/app-framework/src/App.tsx";
604
370
  var createApp = ({ order, plugins, core = order.map(({ id }) => id), ...params }) => {
605
371
  const host = PluginHost({
606
372
  order: [
607
- meta_default2,
608
- meta_default,
373
+ import_chunk_YDKX45O3.meta_default,
374
+ import_chunk_BOQBLWMX.meta_default,
609
375
  ...order
610
376
  ],
611
377
  plugins: {
612
378
  ...plugins,
613
- [meta_default2.id]: Plugin.lazy(() => Promise.resolve().then(() => (init_plugin(), plugin_exports))),
614
- [meta_default.id]: Plugin.lazy(() => Promise.resolve().then(() => (init_plugin2(), plugin_exports2)))
379
+ [import_chunk_YDKX45O3.meta_default.id]: Plugin.lazy(() => import("./plugin-RCAOZKNL.cjs")),
380
+ [import_chunk_BOQBLWMX.meta_default.id]: Plugin.lazy(() => import("./plugin-WDNRX2SR.cjs"))
615
381
  },
616
382
  core: [
617
- meta_default2.id,
618
- meta_default.id,
383
+ import_chunk_YDKX45O3.meta_default.id,
384
+ import_chunk_BOQBLWMX.meta_default.id,
619
385
  ...core
620
386
  ],
621
387
  ...params
@@ -640,7 +406,7 @@ var createApp = ({ order, plugins, core = order.map(({ id }) => id), ...params }
640
406
  });
641
407
  const Context = host.provides.context;
642
408
  const Root = host.provides.root;
643
- return () => /* @__PURE__ */ import_react13.default.createElement(Context, null, /* @__PURE__ */ import_react13.default.createElement(Root, null));
409
+ return () => /* @__PURE__ */ import_react7.default.createElement(Context, null, /* @__PURE__ */ import_react7.default.createElement(Root, null));
644
410
  };
645
411
  // Annotate the CommonJS export names for ESM import in node:
646
412
  0 && (module.exports = {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/plugins/helpers.ts", "../../../src/plugins/IntentPlugin/provides.ts", "../../../src/plugins/IntentPlugin/IntentContext.tsx", "../../../src/plugins/SurfacePlugin/provides.ts", "../../../src/plugins/SurfacePlugin/SurfaceRootContext.tsx", "../../../src/plugins/IntentPlugin/meta.ts", "../../../src/plugins/SurfacePlugin/meta.ts", "../../../src/plugins/SurfacePlugin/plugin.tsx", "../../../src/plugins/IntentPlugin/plugin.tsx", "../../../src/index.ts", "../../../src/plugins/common/graph.ts", "../../../src/plugins/common/layout.ts", "../../../src/plugins/common/metadata.ts", "../../../src/plugins/common/translations.ts", "../../../src/plugins/index.ts", "../../../src/plugins/IntentPlugin/index.ts", "../../../src/plugins/PluginHost/plugin.ts", "../../../src/plugins/PluginHost/PluginContext.tsx", "../../../src/plugins/PluginHost/PluginHost.tsx", "../../../src/plugins/SurfacePlugin/index.ts", "../../../src/plugins/SurfacePlugin/ErrorBoundary.tsx", "../../../src/plugins/SurfacePlugin/Surface.tsx", "../../../src/App.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { raise } from '@dxos/debug';\n\nimport { type Plugin } from './PluginHost';\n\n/**\n * Find a plugin by ID.\n */\nexport const findPlugin = <T>(plugins: Plugin[], id: string): Plugin<T> | undefined => {\n return plugins.find(\n (plugin) => plugin.meta.id === id || (typeof plugin.meta.shortId === 'string' && plugin.meta.shortId === id),\n ) as Plugin<T>;\n};\n\n/**\n * Find a plugin by ID, or raise an error if not found.\n */\nexport const getPlugin = <T>(plugins: Plugin[], id: string): Plugin<T> => {\n return findPlugin(plugins, id) ?? raise(new Error(`Plugin not found: ${id}`));\n};\n\n/**\n * Filter a list of plugins to only those that match a predicate.\n */\nexport const filterPlugins = <T>(\n plugins: Plugin[],\n predicate: (plugin: Plugin) => Plugin<T> | undefined,\n): Plugin<T>[] => plugins.map((plugin) => predicate(plugin)).filter((plugin): plugin is Plugin<T> => !!plugin);\n\n/**\n * Resolves a plugin by predicate.\n *\n * @example\n * import { parseIntentPlugin, resolvePlugin } from '@dxos/app-framework';\n * const intentPlugin = resolvePlugin(plugins, parseIntentPlugin);\n */\nexport const resolvePlugin = <T>(\n plugins: Plugin[],\n predicate: (plugin: Plugin) => Plugin<T> | undefined,\n): Plugin<T> | undefined => filterPlugins(plugins, predicate)[0];\n", "//\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\nimport { type SurfaceComponent, type SurfaceRootContext } from './SurfaceRootContext';\nimport { type Plugin } from '../PluginHost';\n\nexport type SurfaceProvides = {\n surface: {\n /**\n * Used by the `Surface` resolver to find a component to render.\n */\n component: SurfaceComponent;\n };\n};\n\nexport type SurfacePluginProvides = {\n surface: SurfaceRootContext;\n};\n\nexport const parseRootSurfacePlugin = (plugin?: Plugin) =>\n (plugin?.provides as any)?.surface?.components ? (plugin as Plugin<SurfacePluginProvides>) : undefined;\n\nexport const parseSurfacePlugin = (plugin?: Plugin) =>\n (plugin?.provides as any)?.surface?.component ? (plugin as Plugin<SurfaceProvides>) : undefined;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { createContext, useContext, type Context, type Provider, type ReactNode, type ForwardedRef } from 'react';\n\nimport { type SurfaceProps } from './Surface';\n\n// TODO(wittjosiah): Factor out.\ntype WithRequiredProperty<Type, Key extends keyof Type> = Type & {\n [Property in Key]-?: Type[Property];\n};\n\ntype SurfaceComponentProps = WithRequiredProperty<SurfaceProps, 'data'>;\n\n/**\n * Function which resolves a Surface.\n *\n * If a null value is returned, the rendering is deferred to other plugins.\n */\nexport type SurfaceComponent = (props: SurfaceComponentProps, forwardedRef: ForwardedRef<HTMLElement>) => ReactNode;\n\nexport type SurfaceRootContext = {\n components: Record<string, SurfaceComponent>;\n};\n\nconst SurfaceRootContext: Context<SurfaceRootContext> = createContext<SurfaceRootContext>({ components: {} });\n\nexport const useSurface = () => useContext(SurfaceRootContext);\n\nexport const SurfaceProvider: Provider<SurfaceRootContext> = SurfaceRootContext.Provider;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nconst IntentMeta = {\n id: 'dxos.org/plugin/intent',\n};\n\nexport default IntentMeta;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nconst SurfaceMeta = {\n id: 'dxos.org/plugin/surface',\n};\n\nexport default SurfaceMeta;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { deepSignal, shallow } from 'deepsignal/react';\nimport React from 'react';\n\nimport { SurfaceProvider, type SurfaceRootContext } from './SurfaceRootContext';\nimport SurfaceMeta from './meta';\nimport { parseSurfacePlugin, type SurfacePluginProvides } from './provides';\nimport type { PluginDefinition } from '../PluginHost';\nimport { filterPlugins } from '../helpers';\n\n/**\n * Provides a registry of surface components.\n */\nconst SurfacePlugin = (): PluginDefinition<SurfacePluginProvides> => {\n const state = deepSignal<SurfaceRootContext>({ components: {} });\n\n return {\n meta: SurfaceMeta,\n ready: async (plugins) => {\n state.components = shallow(\n filterPlugins(plugins, parseSurfacePlugin).reduce((acc, plugin) => {\n return { ...acc, [plugin.meta.id]: plugin.provides.surface.component };\n }, {}),\n );\n },\n provides: {\n surface: state,\n context: ({ children }) => <SurfaceProvider value={state}>{children}</SurfaceProvider>,\n },\n };\n};\n\nexport default SurfacePlugin;\n", "//\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", "//\n// Copyright 2023 DXOS.org\n//\n\nexport * from './plugins';\n\nexport * from './App';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport type { Graph, Node } from '@dxos/app-graph';\nimport type { UnsubscribeCallback } from '@dxos/async';\n\nimport type { Plugin } from '../PluginHost';\n\n/**\n * Provides for a plugin that exposes the application graph.\n */\nexport type GraphPluginProvides = {\n graph: Graph;\n};\n\nexport type GraphBuilderProvides = {\n graph: {\n builder: (params: { parent: Node; plugins: Plugin[] }) => UnsubscribeCallback | void;\n };\n};\n\n/**\n * Type guard for graph plugins.\n */\nexport const parseGraphPlugin = (plugin: Plugin) =>\n (plugin.provides as any).graph?.root ? (plugin as Plugin<GraphPluginProvides>) : undefined;\n\n/**\n * Type guard for graph builder plugins.\n */\nexport const parseGraphBuilderPlugin = (plugin: Plugin) =>\n (plugin.provides as any).graph?.builder ? (plugin as Plugin<GraphBuilderProvides>) : undefined;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { z } from 'zod';\n\nimport type { Plugin } from '../PluginHost';\n\n//\n// Provides\n//\n\n/**\n * Basic state provided by a layout plugin.\n */\nexport const Layout = z.object({\n fullscreen: z.boolean(),\n sidebarOpen: z.boolean(),\n complementarySidebarOpen: z.boolean(),\n\n dialogContent: z.any().optional().describe('Data to be passed to the dialog Surface.'),\n dialogOpen: z.boolean(),\n\n popoverAnchorId: z.string().optional(),\n popoverContent: z.any().optional().describe('Data to be passed to the popover Surface.'),\n popoverOpen: z.boolean(),\n\n // TODO(wittjosiah): Array?\n active: z.string().optional().describe('Id of the currently active item.'),\n // TODO(wittjosiah): History?\n previous: z.string().optional(),\n});\n\nexport type Layout = z.infer<typeof Layout>;\n\n/**\n * Provides for a plugin that can manage the app layout.\n */\nexport type LayoutProvides = {\n layout: Readonly<Layout>;\n};\n\n/**\n * Type guard for layout plugins.\n */\nexport const parseLayoutPlugin = (plugin: Plugin) => {\n const { success } = Layout.safeParse((plugin.provides as any).layout);\n return success ? (plugin as Plugin<LayoutProvides>) : undefined;\n};\n\n//\n// Intents\n//\n\nconst LAYOUT_ACTION = 'dxos.org/plugin/intent';\n// TODO(wittjosiah): Consider consolidating some action types (e.g. toggle).\nexport enum LayoutAction {\n TOGGLE_FULLSCREEN = `${LAYOUT_ACTION}/toggle-fullscreen`,\n TOGGLE_SIDEBAR = `${LAYOUT_ACTION}/toggle-sidebar`,\n TOGGLE_COMPLEMENTARY_SIDEBAR = `${LAYOUT_ACTION}/toggle-complementary-sidebar`,\n OPEN_DIALOG = `${LAYOUT_ACTION}/open-dialog`,\n CLOSE_DIALOG = `${LAYOUT_ACTION}/close-dialog`,\n OPEN_POPOVER = `${LAYOUT_ACTION}/open-popover`,\n CLOSE_POPOVER = `${LAYOUT_ACTION}/close-popover`,\n ACTIVATE = `${LAYOUT_ACTION}/activate`,\n}\n\n/**\n * Expected payload for layout actions.\n */\nexport namespace LayoutAction {\n export type ToggleFullscreen = {\n state?: boolean;\n };\n\n export type ToggleSidebar = {\n state?: boolean;\n };\n\n export type ToggleComplementarySidebar = {\n state?: boolean;\n };\n\n export type OpenDialog = {\n component: string;\n subject: any;\n };\n\n export type CloseDialog = {};\n\n export type OpenPopover = {\n anchorId: string;\n component: string;\n subject: any;\n };\n\n export type ClosePopover = {};\n\n export type Activate = {\n id: string;\n };\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport type { Plugin } from '../PluginHost';\n\nexport type Metadata = Record<string, any>;\n\nexport type MetadataRecordsProvides = {\n metadata: {\n records: Record<string, Metadata>;\n };\n};\n\nexport type MetadataResolver = (type: string) => Metadata;\n\nexport type MetadataResolverProvides = {\n metadata: {\n resolver: MetadataResolver;\n };\n};\n\nexport const parseMetadataRecordsPlugin = (plugin: Plugin) => {\n return (plugin.provides as any).metadata?.records ? (plugin as Plugin<MetadataRecordsProvides>) : undefined;\n};\n\nexport const parseMetadataResolverPlugin = (plugin: Plugin) => {\n return (plugin.provides as any).metadata?.resolver ? (plugin as Plugin<MetadataResolverProvides>) : undefined;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { z } from 'zod';\n\nimport type { Plugin } from '../PluginHost';\n\nexport const ResourceKey = z.union([z.string(), z.record(z.any())]);\nexport type ResourceKey = z.infer<typeof ResourceKey>;\n\nexport const ResourceLanguage = z.record(ResourceKey);\nexport type ResourceLanguage = z.infer<typeof ResourceLanguage>;\n\n/**\n * A resource is a collection of translations for a language.\n */\nexport const Resource = z.record(ResourceLanguage);\nexport type Resource = z.infer<typeof Resource>;\n\n/**\n * Provides for a plugin that exposes translations.\n */\n// TODO(wittjosiah): Rename to TranslationResourcesProvides.\nexport type TranslationsProvides = {\n translations: Readonly<Resource[]>;\n};\n\n// TODO(wittjosiah): Add TranslationsProvides.\n// export type TranslationsProvides = {\n// translations: {\n// t: TFunction;\n// };\n// };\n\n/**\n * Type guard for translation plugins.\n */\nexport const parseTranslationsPlugin = (plugin: Plugin) => {\n const { success } = z.array(Resource).safeParse((plugin.provides as any).translations);\n return success ? (plugin as Plugin<TranslationsProvides>) : undefined;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport * from './common';\nexport * from './helpers';\n\nexport * from './IntentPlugin';\nexport * from './PluginHost';\nexport * from './SurfacePlugin';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport * from './intent';\nexport * from './provides';\n\nexport * from './IntentContext';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport type { IconProps } from '@phosphor-icons/react';\nimport type { FC, PropsWithChildren } from 'react';\n\n/**\n * Capabilities provided by a plugin.\n * The base surface capabilities are always included.\n */\nexport type PluginProvides<TProvides> = TProvides & {\n /**\n * React Context which is wrapped around the application to enable any hooks the plugin may provide.\n */\n context?: FC<PropsWithChildren>;\n\n /*\n * React component which is rendered at the root of the application.\n */\n root?: FC<PropsWithChildren>;\n};\n\n/**\n * A unit of containment of modular functionality that can be provided to an application.\n * Plugins provide things like components, state, actions, etc. to the application.\n */\nexport type Plugin<TProvides = {}> = {\n meta: {\n /**\n * Globally unique ID.\n *\n * Expected to be in the form of a valid URL.\n *\n * @example dxos.org/plugin/example\n */\n id: string;\n\n /**\n * Short ID for use in URLs.\n *\n * NOTE: This is especially experimental and likely to change.\n */\n // TODO(wittjosiah): How should these be managed?\n shortId?: string;\n\n /**\n * Human readable name.\n */\n name?: string;\n\n /**\n * Short description of plugin functionality.\n */\n description?: string;\n\n /**\n * Component to render icon for the plugin when displayed in a list.\n */\n // TODO(wittjosiah): Convert to `icon` and make serializable.\n iconComponent?: FC<IconProps>;\n };\n\n /**\n * Capabilities provided by the plugin.\n */\n provides: PluginProvides<TProvides>;\n};\n\n/**\n * Plugin definitions extend the base `Plugin` interface with additional lifecycle methods.\n */\nexport type PluginDefinition<TProvides = {}, TInitializeProvides = {}> = Omit<Plugin, 'provides'> & {\n /**\n * Capabilities provided by the plugin.\n */\n provides?: Plugin<TProvides>['provides'];\n\n /**\n * Initialize any async behavior required by the plugin.\n *\n * @return Capabilities provided by the plugin which are merged with base capabilities.\n */\n initialize?: () => Promise<PluginProvides<TInitializeProvides>>;\n\n /**\n * Called once all plugins have been initialized.\n * This is the place to do any initialization which requires other plugins to be ready.\n *\n * @param plugins All plugins which successfully initialized.\n */\n ready?: (plugins: Plugin[]) => Promise<void>;\n\n /**\n * Called when the plugin is unloaded.\n * This is the place to do any cleanup required by the plugin.\n */\n unload?: () => Promise<void>;\n};\n\nexport const pluginMeta = (meta: Plugin['meta']) => meta;\n\ntype LazyPlugin<T> = () => Promise<{ default: (props: T) => PluginDefinition }>;\n\nexport namespace Plugin {\n export const lazy = <T>(p: LazyPlugin<T>, props?: T) => {\n return () =>\n p().then(({ default: definition }) => {\n return definition(props as T);\n });\n };\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Context, type Provider, createContext, useContext } from 'react';\n\nimport { type Plugin } from './plugin';\nimport { findPlugin, resolvePlugin } from '../helpers';\n\nexport type PluginContext = {\n /**\n * All plugins are ready.\n */\n ready: boolean;\n\n /**\n * Ids of plugins which are enabled on this device.\n */\n enabled: string[];\n\n /**\n * Initialized and ready plugins.\n */\n plugins: Plugin[];\n\n /**\n * All available plugins.\n */\n available: Plugin['meta'][];\n\n /**\n * Mark plugin as enabled.\n *\n * Requires reload to take effect.\n */\n enablePlugin: (id: string) => void;\n\n /**\n * Mark plugin as disabled.\n *\n * Requires reload to take effect.\n */\n disablePlugin: (id: string) => void;\n};\n\nconst PluginContext: Context<PluginContext> = createContext<PluginContext>({\n ready: false,\n enabled: [],\n plugins: [],\n available: [],\n enablePlugin: () => {},\n disablePlugin: () => {},\n});\n\n/**\n * Get all plugins.\n */\nexport const usePlugins = (): PluginContext => useContext(PluginContext);\n\n/**\n * Get a plugin by ID.\n */\nexport const usePlugin = <T,>(id: string): Plugin<T> | undefined => {\n const { plugins } = usePlugins();\n return findPlugin<T>(plugins, id);\n};\n\n/**\n * Resolve a plugin by predicate.\n */\nexport const useResolvePlugin = <T,>(predicate: (plugin: Plugin) => Plugin<T> | undefined): Plugin<T> | undefined => {\n const { plugins } = usePlugins();\n return resolvePlugin(plugins, predicate);\n};\n\nexport const PluginProvider: Provider<PluginContext> = PluginContext.Provider;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { shallow } from 'deepsignal/react';\nimport React, { useEffect, type FC, type PropsWithChildren, type ReactNode } from 'react';\n\nimport { LocalStorageStore } from '@dxos/local-storage';\nimport { log } from '@dxos/log';\n\nimport { type PluginContext, PluginProvider } from './PluginContext';\nimport { type Plugin, type PluginDefinition, type PluginProvides } from './plugin';\n\nexport type BootstrapPluginsParams = {\n order: PluginDefinition['meta'][];\n plugins: Record<string, () => Promise<PluginDefinition>>;\n core?: string[];\n defaults?: string[];\n fallback?: ReactNode;\n};\n\nexport type PluginHostProvides = {\n plugins: PluginContext;\n};\n\nexport const parsePluginHost = (plugin: Plugin) =>\n (plugin.provides as PluginHostProvides).plugins ? (plugin as Plugin<PluginHostProvides>) : undefined;\n\nconst PLUGIN_HOST = 'dxos.org/plugin/host';\n\n/**\n * Bootstraps an application by initializing plugins and rendering root components.\n */\nexport const PluginHost = ({\n order,\n plugins: definitions,\n core = [],\n defaults = [],\n fallback = null,\n}: BootstrapPluginsParams): PluginDefinition<PluginHostProvides> => {\n const state = new LocalStorageStore<PluginContext>(PLUGIN_HOST, {\n ready: false,\n enabled: [...defaults],\n plugins: [],\n available: order.filter(({ id }) => !core.includes(id)),\n enablePlugin: (id: string) => {\n state.values.enabled = [...state.values.enabled, id];\n },\n disablePlugin: (id: string) => {\n state.values.enabled = state.values.enabled.filter((enabled) => enabled !== id);\n },\n });\n\n state.prop(state.values.$enabled!, 'enabled', LocalStorageStore.json);\n\n return {\n meta: {\n id: PLUGIN_HOST,\n name: 'Plugin host',\n },\n provides: {\n plugins: state.values,\n context: ({ children }) => <PluginProvider value={state.values}>{children}</PluginProvider>,\n root: () => {\n useEffect(() => {\n log('initializing plugins', { enabled: state.values.enabled });\n const timeout = setTimeout(async () => {\n const enabledIds = [...core, ...state.values.enabled].sort((a, b) => {\n const indexA = order.findIndex(({ id }) => id === a);\n const indexB = order.findIndex(({ id }) => id === b);\n return indexA - indexB;\n });\n\n const enabled = await Promise.all(\n enabledIds\n .map((id) => definitions[id])\n // If local storage indicates a plugin is enabled, but it is not available, ignore it.\n .filter((definition): definition is () => Promise<PluginDefinition> => Boolean(definition))\n .map((definition) => definition()),\n );\n\n const plugins = await Promise.all(\n enabled.map(async (definition) => {\n const plugin = await initializePlugin(definition).catch((err) => {\n console.error('Failed to initialize plugin:', definition.meta.id, err);\n return undefined;\n });\n return plugin;\n }),\n ).then((plugins) => plugins.filter((plugin): plugin is Plugin => Boolean(plugin)));\n log('plugins initialized', { plugins });\n\n await Promise.all(\n enabled.map(async (pluginDefinition) => {\n await pluginDefinition.ready?.(plugins);\n }),\n );\n log('plugins ready', { plugins });\n\n state.values.plugins = shallow(plugins);\n state.values.ready = true;\n });\n\n return () => {\n clearTimeout(timeout);\n state.values.ready = false;\n // TODO(wittjosiah): Does this ever need to be called prior to having dynamic plugins?\n // void Promise.all(enabled.map((definition) => definition.unload?.()));\n };\n }, []);\n\n if (!state.values.ready) {\n return <>{fallback}</>;\n }\n\n const ComposedContext = composeContext(state.values.plugins);\n\n return <ComposedContext>{rootComponents(state.values.plugins)}</ComposedContext>;\n },\n },\n };\n};\n\n/**\n * Resolve a `PluginDefinition` into a fully initialized `Plugin`.\n */\nexport const initializePlugin = async <T, U>(pluginDefinition: PluginDefinition<T, U>): Promise<Plugin<T & U>> => {\n const provides = await pluginDefinition.initialize?.();\n return {\n ...pluginDefinition,\n provides: {\n ...pluginDefinition.provides,\n ...provides,\n } as PluginProvides<T & U>,\n };\n};\n\nconst rootComponents = (plugins: Plugin[]) => {\n return plugins\n .map((plugin) => {\n const Component = plugin.provides.root;\n if (Component) {\n return <Component key={plugin.meta.id} />;\n } else {\n return null;\n }\n })\n .filter((node): node is JSX.Element => Boolean(node));\n};\n\nconst composeContext = (plugins: Plugin[]) => {\n return compose(plugins.map((p) => p.provides.context!).filter(Boolean));\n};\n\nconst compose = (contexts: FC<PropsWithChildren>[]) => {\n return [...contexts].reduce((Acc, Next) => ({ children }) => (\n <Acc>\n <Next>{children}</Next>\n </Acc>\n ));\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport * from './provides';\n\nexport * from './ErrorBoundary';\nexport * from './Surface';\nexport * from './SurfaceRootContext';\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { Component, type FC, type PropsWithChildren } from 'react';\n\ntype Props = PropsWithChildren<{ data?: any; fallback: FC<{ error: Error; reset: () => void }> }>;\ntype State = { error: Error | undefined };\n\n/**\n * Surface error boundary.\n *\n * For basic usage prefer providing a fallback component to `Surface`.\n *\n * For more information on error boundaries, see:\n * https://react.dev/reference/react/Component#catching-rendering-errors-with-an-error-boundary\n */\nexport class ErrorBoundary extends Component<Props, State> {\n constructor(props: Props) {\n super(props);\n this.state = { error: undefined };\n }\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n override componentDidUpdate(prevProps: Props): void {\n if (prevProps.data !== this.props.data) {\n this.resetError();\n }\n }\n\n override render() {\n if (this.state.error) {\n return <this.props.fallback error={this.state.error} reset={this.resetError} />;\n }\n\n return this.props.children;\n }\n\n private resetError() {\n this.setState({ error: undefined });\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport React, { forwardRef, type FC, type ReactNode, Fragment, type ForwardedRef, type PropsWithChildren } from 'react';\nimport { createContext, useContext } from 'react';\n\nimport { ErrorBoundary } from './ErrorBoundary';\nimport { type SurfaceComponent, useSurface } from './SurfaceRootContext';\n\n/**\n * Direction determines how multiple components are laid out.\n */\nexport type Direction = 'inline' | 'inline-reverse' | 'block' | 'block-reverse';\n\nexport type SurfaceProps = PropsWithChildren<{\n /**\n * Role defines how the data should be rendered.\n */\n role?: string;\n\n /**\n * Names allow nested surfaces to be specified in the parent context, similar to a slot.\n * Defaults to the value of `role` if not specified.\n */\n name?: string;\n\n /**\n * The data to be rendered by the surface.\n */\n data?: Record<string, unknown>;\n\n /**\n * Configure nested surfaces (indexed by the surface's `name`).\n */\n surfaces?: Record<string, Pick<SurfaceProps, 'data' | 'surfaces'>>;\n\n /**\n * If specified, the Surface will be wrapped in an error boundary.\n * The fallback component will be rendered if an error occurs.\n */\n fallback?: ErrorBoundary['props']['fallback'];\n\n /**\n * If specified, this will render if no plugin can offer renderable content for the surface.\n */\n contentFallback?: FC<{}>;\n\n /**\n * If more than one component is resolved, the limit determines how many are rendered.\n */\n limit?: number | undefined;\n\n /**\n * If more than one component is resolved, the direction determines how they are laid out.\n * NOTE: This is not yet implemented.\n */\n direction?: Direction;\n\n /**\n * Additional props to pass to the component.\n * These props are not used by Surface itself but may be used by components which resolve the surface.\n */\n [key: string]: unknown;\n}>;\n\n/**\n * A surface is a named region of the screen that can be populated by plugins.\n */\nexport const Surface = forwardRef<HTMLElement, SurfaceProps>(\n ({ role, name = role, fallback, ...rest }, forwardedRef) => {\n const props = { role, name, fallback, ...rest };\n const context = useContext(SurfaceContext);\n const data = props.data ?? ((name && context?.surfaces?.[name]?.data) || {});\n\n return (\n <>\n {fallback ? (\n <ErrorBoundary data={data} fallback={fallback}>\n <SurfaceResolver {...props} ref={forwardedRef} />\n </ErrorBoundary>\n ) : (\n <SurfaceResolver {...props} ref={forwardedRef} />\n )}\n </>\n );\n },\n);\n\nconst SurfaceContext = createContext<SurfaceProps | null>(null);\n\nconst SurfaceResolver = forwardRef<HTMLElement, SurfaceProps>((props, forwardedRef) => {\n const { components } = useSurface();\n const parent = useContext(SurfaceContext);\n const nodes = resolveNodes(components, props, parent, forwardedRef);\n const currentContext: SurfaceProps = {\n ...props,\n surfaces: {\n ...((props.name && parent?.surfaces?.[props.name]?.surfaces) || {}),\n ...props.surfaces,\n },\n };\n\n return (\n <SurfaceContext.Provider value={currentContext}>\n {nodes.length > 0 ? nodes : props.contentFallback ? <props.contentFallback /> : null}\n </SurfaceContext.Provider>\n );\n});\n\nconst resolveNodes = (\n components: Record<string, SurfaceComponent>,\n props: SurfaceProps,\n context: SurfaceProps | null,\n forwardedRef: ForwardedRef<HTMLElement>,\n): ReactNode[] => {\n const data = {\n ...((props.name && context?.surfaces?.[props.name]?.data) || {}),\n ...props.data,\n };\n\n const nodes = Object.entries(components)\n .map(([key, component]) => {\n const result = component({ ...props, data }, forwardedRef);\n return result ? <Fragment key={key}>{result}</Fragment> : undefined;\n })\n .filter((Component): Component is JSX.Element => Boolean(Component));\n\n return props.limit ? nodes.slice(0, props.limit) : nodes;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { invariant } from '@dxos/invariant';\n\nimport { type BootstrapPluginsParams, PluginHost, Plugin } from './plugins';\nimport IntentMeta from './plugins/IntentPlugin/meta';\nimport SurfaceMeta from './plugins/SurfacePlugin/meta';\n\n/**\n * Expected usage is for this to be the entrypoint of the application.\n * Initializes plugins and renders the root components.\n *\n * @example\n * const order = [LayoutMeta, MyPluginMeta];\n * const plugins = {\n * [LayoutMeta.id]: Plugin.lazy(() => import('./plugins/LayoutPlugin/plugin')),\n * [MyPluginMeta.id]: Plugin.lazy(() => import('./plugins/MyPlugin/plugin')),\n * };\n * const core = [LayoutMeta.id];\n * const default = [MyPluginMeta.id];\n * const fallback = <div>Initializing Plugins...</div>;\n * const App = createApp({ order, plugins, core, default, fallback });\n * createRoot(document.getElementById('root')!).render(\n * <StrictMode>\n * <App />\n * </StrictMode>,\n * );\n *\n * @param params.order Total ordering of plugins.\n * @param params.plugins All plugins available to the application.\n * @param params.core Core plugins which will always be enabled.\n * @param params.default Default plugins are enabled by default but can be disabled by the user.\n * @param params.fallback Fallback component to render while plugins are initializing.\n */\nexport const createApp = ({ order, plugins, core = order.map(({ id }) => id), ...params }: BootstrapPluginsParams) => {\n const host = PluginHost({\n order: [SurfaceMeta, IntentMeta, ...order],\n plugins: {\n ...plugins,\n [SurfaceMeta.id]: Plugin.lazy(() => import('./plugins/SurfacePlugin/plugin')),\n [IntentMeta.id]: Plugin.lazy(() => import('./plugins/IntentPlugin/plugin')),\n },\n core: [SurfaceMeta.id, IntentMeta.id, ...core],\n ...params,\n });\n\n invariant(host.provides?.context);\n invariant(host.provides?.root);\n const Context = host.provides.context;\n const Root = host.provides.root;\n\n return () => (\n <Context>\n <Root />\n </Context>\n );\n};\n"],
5
- "mappings": "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",
6
- "names": ["findPlugin", "getPlugin", "filterPlugins", "resolvePlugin", "plugins", "id", "find", "plugin", "meta", "shortId", "raise", "Error", "predicate", "map", "filter", "parseIntentPlugin", "parseIntentResolverPlugin", "plugin", "provides", "intent", "dispatch", "undefined", "resolver", "IntentContext", "useIntent", "IntentProvider", "createContext", "dispatch", "useContext", "Provider", "parseRootSurfacePlugin", "parseSurfacePlugin", "init_provides", "plugin", "provides", "surface", "components", "undefined", "component", "import_react", "SurfaceRootContext", "useSurface", "SurfaceProvider", "createContext", "components", "useContext", "Provider", "IntentMeta", "id", "SurfaceMeta", "meta_default", "init_meta", "id", "import_react", "SurfacePlugin", "init_meta", "init_provides", "state", "deepSignal", "components", "meta", "SurfaceMeta", "ready", "plugins", "shallow", "filterPlugins", "parseSurfacePlugin", "reduce", "acc", "plugin", "id", "provides", "surface", "component", "context", "children", "React", "SurfaceProvider", "value", "plugin_exports", "plugin_default", "import_react", "IntentPlugin", "init_plugin", "state", "deepSignal", "dispatch", "meta", "IntentMeta", "ready", "plugins", "intent", "plugin", "findPlugin", "provides", "resolver", "filterPlugins", "parseIntentResolverPlugin", "result", "intentOrArray", "Array", "isArray", "data", "context", "children", "React", "IntentProvider", "value", "parseGraphPlugin", "plugin", "provides", "graph", "root", "undefined", "parseGraphBuilderPlugin", "builder", "Layout", "z", "object", "fullscreen", "boolean", "sidebarOpen", "complementarySidebarOpen", "dialogContent", "any", "optional", "describe", "dialogOpen", "popoverAnchorId", "string", "popoverContent", "popoverOpen", "active", "previous", "parseLayoutPlugin", "plugin", "success", "safeParse", "provides", "layout", "undefined", "LAYOUT_ACTION", "LayoutAction", "TOGGLE_FULLSCREEN", "TOGGLE_SIDEBAR", "TOGGLE_COMPLEMENTARY_SIDEBAR", "OPEN_DIALOG", "CLOSE_DIALOG", "OPEN_POPOVER", "CLOSE_POPOVER", "ACTIVATE", "parseMetadataRecordsPlugin", "plugin", "provides", "metadata", "records", "undefined", "parseMetadataResolverPlugin", "resolver", "import_zod", "ResourceKey", "z", "union", "string", "record", "any", "ResourceLanguage", "Resource", "parseTranslationsPlugin", "plugin", "success", "array", "safeParse", "provides", "translations", "undefined", "pluginMeta", "meta", "Plugin", "lazy", "p", "props", "then", "default", "definition", "import_react", "PluginContext", "createContext", "ready", "enabled", "plugins", "available", "enablePlugin", "disablePlugin", "usePlugins", "useContext", "usePlugin", "id", "findPlugin", "useResolvePlugin", "predicate", "resolvePlugin", "PluginProvider", "Provider", "import_react", "parsePluginHost", "plugin", "provides", "plugins", "undefined", "PLUGIN_HOST", "PluginHost", "order", "definitions", "core", "defaults", "fallback", "state", "LocalStorageStore", "ready", "enabled", "available", "filter", "id", "includes", "enablePlugin", "values", "disablePlugin", "prop", "$enabled", "json", "meta", "name", "context", "children", "React", "PluginProvider", "value", "root", "useEffect", "log", "timeout", "setTimeout", "enabledIds", "sort", "a", "b", "indexA", "findIndex", "indexB", "Promise", "all", "map", "definition", "Boolean", "initializePlugin", "catch", "err", "console", "error", "then", "pluginDefinition", "shallow", "clearTimeout", "ComposedContext", "composeContext", "rootComponents", "initialize", "Component", "key", "node", "compose", "p", "contexts", "reduce", "Acc", "Next", "init_provides", "import_react", "ErrorBoundary", "Component", "constructor", "props", "state", "error", "undefined", "getDerivedStateFromError", "componentDidUpdate", "prevProps", "data", "resetError", "render", "React", "this", "fallback", "reset", "children", "setState", "import_react", "Surface", "forwardRef", "role", "name", "fallback", "rest", "forwardedRef", "props", "context", "useContext", "SurfaceContext", "data", "surfaces", "React", "ErrorBoundary", "SurfaceResolver", "ref", "createContext", "components", "useSurface", "parent", "nodes", "resolveNodes", "currentContext", "Provider", "value", "length", "contentFallback", "Object", "entries", "map", "key", "component", "result", "Fragment", "undefined", "filter", "Component", "Boolean", "limit", "slice", "import_react", "init_meta", "createApp", "order", "plugins", "core", "map", "id", "params", "host", "PluginHost", "SurfaceMeta", "IntentMeta", "Plugin", "lazy", "invariant", "provides", "context", "root", "Context", "Root", "React"]
3
+ "sources": ["../../../src/plugins/common/graph.ts", "../../../src/plugins/common/layout.ts", "../../../src/plugins/common/metadata.ts", "../../../src/plugins/common/translations.ts", "../../../src/plugins/PluginHost/plugin.ts", "../../../src/plugins/PluginHost/PluginContext.tsx", "../../../src/plugins/PluginHost/PluginHost.tsx", "../../../src/plugins/SurfacePlugin/ErrorBoundary.tsx", "../../../src/plugins/SurfacePlugin/Surface.tsx", "../../../src/App.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport type { Graph, Node } from '@dxos/app-graph';\nimport type { UnsubscribeCallback } from '@dxos/async';\n\nimport type { Plugin } from '../PluginHost';\n\n/**\n * Provides for a plugin that exposes the application graph.\n */\nexport type GraphPluginProvides = {\n graph: Graph;\n};\n\nexport type GraphBuilderProvides = {\n graph: {\n builder: (params: { parent: Node; plugins: Plugin[] }) => UnsubscribeCallback | void;\n };\n};\n\n/**\n * Type guard for graph plugins.\n */\nexport const parseGraphPlugin = (plugin: Plugin) =>\n (plugin.provides as any).graph?.root ? (plugin as Plugin<GraphPluginProvides>) : undefined;\n\n/**\n * Type guard for graph builder plugins.\n */\nexport const parseGraphBuilderPlugin = (plugin: Plugin) =>\n (plugin.provides as any).graph?.builder ? (plugin as Plugin<GraphBuilderProvides>) : undefined;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { z } from 'zod';\n\nimport type { Plugin } from '../PluginHost';\n\n//\n// Provides\n//\n\n/**\n * Basic state provided by a layout plugin.\n */\nexport const Layout = z.object({\n fullscreen: z.boolean(),\n sidebarOpen: z.boolean(),\n complementarySidebarOpen: z.boolean(),\n\n dialogContent: z.any().optional().describe('Data to be passed to the dialog Surface.'),\n dialogOpen: z.boolean(),\n\n popoverAnchorId: z.string().optional(),\n popoverContent: z.any().optional().describe('Data to be passed to the popover Surface.'),\n popoverOpen: z.boolean(),\n\n // TODO(wittjosiah): Array?\n active: z.string().optional().describe('Id of the currently active item.'),\n // TODO(wittjosiah): History?\n previous: z.string().optional(),\n});\n\nexport type Layout = z.infer<typeof Layout>;\n\n/**\n * Provides for a plugin that can manage the app layout.\n */\nexport type LayoutProvides = {\n layout: Readonly<Layout>;\n};\n\n/**\n * Type guard for layout plugins.\n */\nexport const parseLayoutPlugin = (plugin: Plugin) => {\n const { success } = Layout.safeParse((plugin.provides as any).layout);\n return success ? (plugin as Plugin<LayoutProvides>) : undefined;\n};\n\n//\n// Intents\n//\n\nconst LAYOUT_ACTION = 'dxos.org/plugin/intent';\n// TODO(wittjosiah): Consider consolidating some action types (e.g. toggle).\nexport enum LayoutAction {\n TOGGLE_FULLSCREEN = `${LAYOUT_ACTION}/toggle-fullscreen`,\n TOGGLE_SIDEBAR = `${LAYOUT_ACTION}/toggle-sidebar`,\n TOGGLE_COMPLEMENTARY_SIDEBAR = `${LAYOUT_ACTION}/toggle-complementary-sidebar`,\n OPEN_DIALOG = `${LAYOUT_ACTION}/open-dialog`,\n CLOSE_DIALOG = `${LAYOUT_ACTION}/close-dialog`,\n OPEN_POPOVER = `${LAYOUT_ACTION}/open-popover`,\n CLOSE_POPOVER = `${LAYOUT_ACTION}/close-popover`,\n ACTIVATE = `${LAYOUT_ACTION}/activate`,\n}\n\n/**\n * Expected payload for layout actions.\n */\nexport namespace LayoutAction {\n export type ToggleFullscreen = {\n state?: boolean;\n };\n\n export type ToggleSidebar = {\n state?: boolean;\n };\n\n export type ToggleComplementarySidebar = {\n state?: boolean;\n };\n\n export type OpenDialog = {\n component: string;\n subject: any;\n };\n\n export type CloseDialog = {};\n\n export type OpenPopover = {\n anchorId: string;\n component: string;\n subject: any;\n };\n\n export type ClosePopover = {};\n\n export type Activate = {\n id: string;\n };\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport type { Plugin } from '../PluginHost';\n\nexport type Metadata = Record<string, any>;\n\nexport type MetadataRecordsProvides = {\n metadata: {\n records: Record<string, Metadata>;\n };\n};\n\nexport type MetadataResolver = (type: string) => Metadata;\n\nexport type MetadataResolverProvides = {\n metadata: {\n resolver: MetadataResolver;\n };\n};\n\nexport const parseMetadataRecordsPlugin = (plugin: Plugin) => {\n return (plugin.provides as any).metadata?.records ? (plugin as Plugin<MetadataRecordsProvides>) : undefined;\n};\n\nexport const parseMetadataResolverPlugin = (plugin: Plugin) => {\n return (plugin.provides as any).metadata?.resolver ? (plugin as Plugin<MetadataResolverProvides>) : undefined;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { z } from 'zod';\n\nimport type { Plugin } from '../PluginHost';\n\nexport const ResourceKey = z.union([z.string(), z.record(z.any())]);\nexport type ResourceKey = z.infer<typeof ResourceKey>;\n\nexport const ResourceLanguage = z.record(ResourceKey);\nexport type ResourceLanguage = z.infer<typeof ResourceLanguage>;\n\n/**\n * A resource is a collection of translations for a language.\n */\nexport const Resource = z.record(ResourceLanguage);\nexport type Resource = z.infer<typeof Resource>;\n\n/**\n * Provides for a plugin that exposes translations.\n */\n// TODO(wittjosiah): Rename to TranslationResourcesProvides.\nexport type TranslationsProvides = {\n translations: Readonly<Resource[]>;\n};\n\n// TODO(wittjosiah): Add TranslationsProvides.\n// export type TranslationsProvides = {\n// translations: {\n// t: TFunction;\n// };\n// };\n\n/**\n * Type guard for translation plugins.\n */\nexport const parseTranslationsPlugin = (plugin: Plugin) => {\n const { success } = z.array(Resource).safeParse((plugin.provides as any).translations);\n return success ? (plugin as Plugin<TranslationsProvides>) : undefined;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport type { IconProps } from '@phosphor-icons/react';\nimport type { FC, PropsWithChildren } from 'react';\n\n/**\n * Capabilities provided by a plugin.\n * The base surface capabilities are always included.\n */\nexport type PluginProvides<TProvides> = TProvides & {\n /**\n * React Context which is wrapped around the application to enable any hooks the plugin may provide.\n */\n context?: FC<PropsWithChildren>;\n\n /*\n * React component which is rendered at the root of the application.\n */\n root?: FC<PropsWithChildren>;\n};\n\n/**\n * A unit of containment of modular functionality that can be provided to an application.\n * Plugins provide things like components, state, actions, etc. to the application.\n */\nexport type Plugin<TProvides = {}> = {\n meta: {\n /**\n * Globally unique ID.\n *\n * Expected to be in the form of a valid URL.\n *\n * @example dxos.org/plugin/example\n */\n id: string;\n\n /**\n * Short ID for use in URLs.\n *\n * NOTE: This is especially experimental and likely to change.\n */\n // TODO(wittjosiah): How should these be managed?\n shortId?: string;\n\n /**\n * Human readable name.\n */\n name?: string;\n\n /**\n * Short description of plugin functionality.\n */\n description?: string;\n\n /**\n * Component to render icon for the plugin when displayed in a list.\n */\n // TODO(wittjosiah): Convert to `icon` and make serializable.\n iconComponent?: FC<IconProps>;\n };\n\n /**\n * Capabilities provided by the plugin.\n */\n provides: PluginProvides<TProvides>;\n};\n\n/**\n * Plugin definitions extend the base `Plugin` interface with additional lifecycle methods.\n */\nexport type PluginDefinition<TProvides = {}, TInitializeProvides = {}> = Omit<Plugin, 'provides'> & {\n /**\n * Capabilities provided by the plugin.\n */\n provides?: Plugin<TProvides>['provides'];\n\n /**\n * Initialize any async behavior required by the plugin.\n *\n * @return Capabilities provided by the plugin which are merged with base capabilities.\n */\n initialize?: () => Promise<PluginProvides<TInitializeProvides>>;\n\n /**\n * Called once all plugins have been initialized.\n * This is the place to do any initialization which requires other plugins to be ready.\n *\n * @param plugins All plugins which successfully initialized.\n */\n ready?: (plugins: Plugin[]) => Promise<void>;\n\n /**\n * Called when the plugin is unloaded.\n * This is the place to do any cleanup required by the plugin.\n */\n unload?: () => Promise<void>;\n};\n\nexport const pluginMeta = (meta: Plugin['meta']) => meta;\n\ntype LazyPlugin<T> = () => Promise<{ default: (props: T) => PluginDefinition }>;\n\nexport namespace Plugin {\n export const lazy = <T>(p: LazyPlugin<T>, props?: T) => {\n return () =>\n p().then(({ default: definition }) => {\n return definition(props as T);\n });\n };\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Context, type Provider, createContext, useContext } from 'react';\n\nimport { type Plugin } from './plugin';\nimport { findPlugin, resolvePlugin } from '../helpers';\n\nexport type PluginContext = {\n /**\n * All plugins are ready.\n */\n ready: boolean;\n\n /**\n * Ids of plugins which are enabled on this device.\n */\n enabled: string[];\n\n /**\n * Initialized and ready plugins.\n */\n plugins: Plugin[];\n\n /**\n * All available plugins.\n */\n available: Plugin['meta'][];\n\n /**\n * Mark plugin as enabled.\n *\n * Requires reload to take effect.\n */\n enablePlugin: (id: string) => void;\n\n /**\n * Mark plugin as disabled.\n *\n * Requires reload to take effect.\n */\n disablePlugin: (id: string) => void;\n};\n\nconst PluginContext: Context<PluginContext> = createContext<PluginContext>({\n ready: false,\n enabled: [],\n plugins: [],\n available: [],\n enablePlugin: () => {},\n disablePlugin: () => {},\n});\n\n/**\n * Get all plugins.\n */\nexport const usePlugins = (): PluginContext => useContext(PluginContext);\n\n/**\n * Get a plugin by ID.\n */\nexport const usePlugin = <T,>(id: string): Plugin<T> | undefined => {\n const { plugins } = usePlugins();\n return findPlugin<T>(plugins, id);\n};\n\n/**\n * Resolve a plugin by predicate.\n */\nexport const useResolvePlugin = <T,>(predicate: (plugin: Plugin) => Plugin<T> | undefined): Plugin<T> | undefined => {\n const { plugins } = usePlugins();\n return resolvePlugin(plugins, predicate);\n};\n\nexport const PluginProvider: Provider<PluginContext> = PluginContext.Provider;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { shallow } from 'deepsignal/react';\nimport React, { useEffect, type FC, type PropsWithChildren, type ReactNode } from 'react';\n\nimport { LocalStorageStore } from '@dxos/local-storage';\nimport { log } from '@dxos/log';\n\nimport { type PluginContext, PluginProvider } from './PluginContext';\nimport { type Plugin, type PluginDefinition, type PluginProvides } from './plugin';\n\nexport type BootstrapPluginsParams = {\n order: PluginDefinition['meta'][];\n plugins: Record<string, () => Promise<PluginDefinition>>;\n core?: string[];\n defaults?: string[];\n fallback?: ReactNode;\n};\n\nexport type PluginHostProvides = {\n plugins: PluginContext;\n};\n\nexport const parsePluginHost = (plugin: Plugin) =>\n (plugin.provides as PluginHostProvides).plugins ? (plugin as Plugin<PluginHostProvides>) : undefined;\n\nconst PLUGIN_HOST = 'dxos.org/plugin/host';\n\n/**\n * Bootstraps an application by initializing plugins and rendering root components.\n */\nexport const PluginHost = ({\n order,\n plugins: definitions,\n core = [],\n defaults = [],\n fallback = null,\n}: BootstrapPluginsParams): PluginDefinition<PluginHostProvides> => {\n const state = new LocalStorageStore<PluginContext>(PLUGIN_HOST, {\n ready: false,\n enabled: [...defaults],\n plugins: [],\n available: order.filter(({ id }) => !core.includes(id)),\n enablePlugin: (id: string) => {\n state.values.enabled = [...state.values.enabled, id];\n },\n disablePlugin: (id: string) => {\n state.values.enabled = state.values.enabled.filter((enabled) => enabled !== id);\n },\n });\n\n state.prop(state.values.$enabled!, 'enabled', LocalStorageStore.json);\n\n return {\n meta: {\n id: PLUGIN_HOST,\n name: 'Plugin host',\n },\n provides: {\n plugins: state.values,\n context: ({ children }) => <PluginProvider value={state.values}>{children}</PluginProvider>,\n root: () => {\n useEffect(() => {\n log('initializing plugins', { enabled: state.values.enabled });\n const timeout = setTimeout(async () => {\n const enabledIds = [...core, ...state.values.enabled].sort((a, b) => {\n const indexA = order.findIndex(({ id }) => id === a);\n const indexB = order.findIndex(({ id }) => id === b);\n return indexA - indexB;\n });\n\n const enabled = await Promise.all(\n enabledIds\n .map((id) => definitions[id])\n // If local storage indicates a plugin is enabled, but it is not available, ignore it.\n .filter((definition): definition is () => Promise<PluginDefinition> => Boolean(definition))\n .map((definition) => definition()),\n );\n\n const plugins = await Promise.all(\n enabled.map(async (definition) => {\n const plugin = await initializePlugin(definition).catch((err) => {\n console.error('Failed to initialize plugin:', definition.meta.id, err);\n return undefined;\n });\n return plugin;\n }),\n ).then((plugins) => plugins.filter((plugin): plugin is Plugin => Boolean(plugin)));\n log('plugins initialized', { plugins });\n\n await Promise.all(\n enabled.map(async (pluginDefinition) => {\n await pluginDefinition.ready?.(plugins);\n }),\n );\n log('plugins ready', { plugins });\n\n state.values.plugins = shallow(plugins);\n state.values.ready = true;\n });\n\n return () => {\n clearTimeout(timeout);\n state.values.ready = false;\n // TODO(wittjosiah): Does this ever need to be called prior to having dynamic plugins?\n // void Promise.all(enabled.map((definition) => definition.unload?.()));\n };\n }, []);\n\n if (!state.values.ready) {\n return <>{fallback}</>;\n }\n\n const ComposedContext = composeContext(state.values.plugins);\n\n return <ComposedContext>{rootComponents(state.values.plugins)}</ComposedContext>;\n },\n },\n };\n};\n\n/**\n * Resolve a `PluginDefinition` into a fully initialized `Plugin`.\n */\nexport const initializePlugin = async <T, U>(pluginDefinition: PluginDefinition<T, U>): Promise<Plugin<T & U>> => {\n const provides = await pluginDefinition.initialize?.();\n return {\n ...pluginDefinition,\n provides: {\n ...pluginDefinition.provides,\n ...provides,\n } as PluginProvides<T & U>,\n };\n};\n\nconst rootComponents = (plugins: Plugin[]) => {\n return plugins\n .map((plugin) => {\n const Component = plugin.provides.root;\n if (Component) {\n return <Component key={plugin.meta.id} />;\n } else {\n return null;\n }\n })\n .filter((node): node is JSX.Element => Boolean(node));\n};\n\nconst composeContext = (plugins: Plugin[]) => {\n return compose(plugins.map((p) => p.provides.context!).filter(Boolean));\n};\n\nconst compose = (contexts: FC<PropsWithChildren>[]) => {\n return [...contexts].reduce((Acc, Next) => ({ children }) => (\n <Acc>\n <Next>{children}</Next>\n </Acc>\n ));\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { Component, type FC, type PropsWithChildren } from 'react';\n\ntype Props = PropsWithChildren<{ data?: any; fallback: FC<{ error: Error; reset: () => void }> }>;\ntype State = { error: Error | undefined };\n\n/**\n * Surface error boundary.\n *\n * For basic usage prefer providing a fallback component to `Surface`.\n *\n * For more information on error boundaries, see:\n * https://react.dev/reference/react/Component#catching-rendering-errors-with-an-error-boundary\n */\nexport class ErrorBoundary extends Component<Props, State> {\n constructor(props: Props) {\n super(props);\n this.state = { error: undefined };\n }\n\n static getDerivedStateFromError(error: Error) {\n return { error };\n }\n\n override componentDidUpdate(prevProps: Props): void {\n if (prevProps.data !== this.props.data) {\n this.resetError();\n }\n }\n\n override render() {\n if (this.state.error) {\n return <this.props.fallback error={this.state.error} reset={this.resetError} />;\n }\n\n return this.props.children;\n }\n\n private resetError() {\n this.setState({ error: undefined });\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport React, { forwardRef, type FC, type ReactNode, Fragment, type ForwardedRef, type PropsWithChildren } from 'react';\nimport { createContext, useContext } from 'react';\n\nimport { ErrorBoundary } from './ErrorBoundary';\nimport { type SurfaceComponent, useSurface } from './SurfaceRootContext';\n\n/**\n * Direction determines how multiple components are laid out.\n */\nexport type Direction = 'inline' | 'inline-reverse' | 'block' | 'block-reverse';\n\nexport type SurfaceProps = PropsWithChildren<{\n /**\n * Role defines how the data should be rendered.\n */\n role?: string;\n\n /**\n * Names allow nested surfaces to be specified in the parent context, similar to a slot.\n * Defaults to the value of `role` if not specified.\n */\n name?: string;\n\n /**\n * The data to be rendered by the surface.\n */\n data?: Record<string, unknown>;\n\n /**\n * Configure nested surfaces (indexed by the surface's `name`).\n */\n surfaces?: Record<string, Pick<SurfaceProps, 'data' | 'surfaces'>>;\n\n /**\n * If specified, the Surface will be wrapped in an error boundary.\n * The fallback component will be rendered if an error occurs.\n */\n fallback?: ErrorBoundary['props']['fallback'];\n\n /**\n * If specified, this will render if no plugin can offer renderable content for the surface.\n */\n contentFallback?: FC<{}>;\n\n /**\n * If more than one component is resolved, the limit determines how many are rendered.\n */\n limit?: number | undefined;\n\n /**\n * If more than one component is resolved, the direction determines how they are laid out.\n * NOTE: This is not yet implemented.\n */\n direction?: Direction;\n\n /**\n * Additional props to pass to the component.\n * These props are not used by Surface itself but may be used by components which resolve the surface.\n */\n [key: string]: unknown;\n}>;\n\n/**\n * A surface is a named region of the screen that can be populated by plugins.\n */\nexport const Surface = forwardRef<HTMLElement, SurfaceProps>(\n ({ role, name = role, fallback, ...rest }, forwardedRef) => {\n const props = { role, name, fallback, ...rest };\n const context = useContext(SurfaceContext);\n const data = props.data ?? ((name && context?.surfaces?.[name]?.data) || {});\n\n return (\n <>\n {fallback ? (\n <ErrorBoundary data={data} fallback={fallback}>\n <SurfaceResolver {...props} ref={forwardedRef} />\n </ErrorBoundary>\n ) : (\n <SurfaceResolver {...props} ref={forwardedRef} />\n )}\n </>\n );\n },\n);\n\nconst SurfaceContext = createContext<SurfaceProps | null>(null);\n\nconst SurfaceResolver = forwardRef<HTMLElement, SurfaceProps>((props, forwardedRef) => {\n const { components } = useSurface();\n const parent = useContext(SurfaceContext);\n const nodes = resolveNodes(components, props, parent, forwardedRef);\n const currentContext: SurfaceProps = {\n ...props,\n surfaces: {\n ...((props.name && parent?.surfaces?.[props.name]?.surfaces) || {}),\n ...props.surfaces,\n },\n };\n\n return (\n <SurfaceContext.Provider value={currentContext}>\n {nodes.length > 0 ? nodes : props.contentFallback ? <props.contentFallback /> : null}\n </SurfaceContext.Provider>\n );\n});\n\nconst resolveNodes = (\n components: Record<string, SurfaceComponent>,\n props: SurfaceProps,\n context: SurfaceProps | null,\n forwardedRef: ForwardedRef<HTMLElement>,\n): ReactNode[] => {\n const data = {\n ...((props.name && context?.surfaces?.[props.name]?.data) || {}),\n ...props.data,\n };\n\n const nodes = Object.entries(components)\n .map(([key, component]) => {\n const result = component({ ...props, data }, forwardedRef);\n return result ? <Fragment key={key}>{result}</Fragment> : undefined;\n })\n .filter((Component): Component is JSX.Element => Boolean(Component));\n\n return props.limit ? nodes.slice(0, props.limit) : nodes;\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { invariant } from '@dxos/invariant';\n\nimport { type BootstrapPluginsParams, PluginHost, Plugin } from './plugins';\nimport IntentMeta from './plugins/IntentPlugin/meta';\nimport SurfaceMeta from './plugins/SurfacePlugin/meta';\n\n/**\n * Expected usage is for this to be the entrypoint of the application.\n * Initializes plugins and renders the root components.\n *\n * @example\n * const order = [LayoutMeta, MyPluginMeta];\n * const plugins = {\n * [LayoutMeta.id]: Plugin.lazy(() => import('./plugins/LayoutPlugin/plugin')),\n * [MyPluginMeta.id]: Plugin.lazy(() => import('./plugins/MyPlugin/plugin')),\n * };\n * const core = [LayoutMeta.id];\n * const default = [MyPluginMeta.id];\n * const fallback = <div>Initializing Plugins...</div>;\n * const App = createApp({ order, plugins, core, default, fallback });\n * createRoot(document.getElementById('root')!).render(\n * <StrictMode>\n * <App />\n * </StrictMode>,\n * );\n *\n * @param params.order Total ordering of plugins.\n * @param params.plugins All plugins available to the application.\n * @param params.core Core plugins which will always be enabled.\n * @param params.default Default plugins are enabled by default but can be disabled by the user.\n * @param params.fallback Fallback component to render while plugins are initializing.\n */\nexport const createApp = ({ order, plugins, core = order.map(({ id }) => id), ...params }: BootstrapPluginsParams) => {\n const host = PluginHost({\n order: [SurfaceMeta, IntentMeta, ...order],\n plugins: {\n ...plugins,\n [SurfaceMeta.id]: Plugin.lazy(() => import('./plugins/SurfacePlugin/plugin')),\n [IntentMeta.id]: Plugin.lazy(() => import('./plugins/IntentPlugin/plugin')),\n },\n core: [SurfaceMeta.id, IntentMeta.id, ...core],\n ...params,\n });\n\n invariant(host.provides?.context);\n invariant(host.provides?.root);\n const Context = host.provides.context;\n const Root = host.provides.root;\n\n return () => (\n <Context>\n <Root />\n </Context>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["import_zod", "import_react", "parseGraphPlugin", "plugin", "provides", "graph", "root", "undefined", "parseGraphBuilderPlugin", "builder", "Layout", "z", "object", "fullscreen", "boolean", "sidebarOpen", "complementarySidebarOpen", "dialogContent", "any", "optional", "describe", "dialogOpen", "popoverAnchorId", "string", "popoverContent", "popoverOpen", "active", "previous", "parseLayoutPlugin", "success", "safeParse", "layout", "LAYOUT_ACTION", "LayoutAction", "TOGGLE_FULLSCREEN", "TOGGLE_SIDEBAR", "TOGGLE_COMPLEMENTARY_SIDEBAR", "OPEN_DIALOG", "CLOSE_DIALOG", "OPEN_POPOVER", "CLOSE_POPOVER", "ACTIVATE", "parseMetadataRecordsPlugin", "metadata", "records", "parseMetadataResolverPlugin", "resolver", "ResourceKey", "union", "record", "ResourceLanguage", "Resource", "parseTranslationsPlugin", "array", "translations", "pluginMeta", "meta", "Plugin", "lazy", "p", "props", "then", "default", "definition", "PluginContext", "createContext", "ready", "enabled", "plugins", "available", "enablePlugin", "disablePlugin", "usePlugins", "useContext", "usePlugin", "id", "findPlugin", "useResolvePlugin", "predicate", "resolvePlugin", "PluginProvider", "Provider", "parsePluginHost", "PLUGIN_HOST", "PluginHost", "order", "definitions", "core", "defaults", "fallback", "state", "LocalStorageStore", "filter", "includes", "values", "prop", "$enabled", "json", "name", "context", "children", "React", "value", "useEffect", "log", "timeout", "setTimeout", "enabledIds", "sort", "a", "b", "indexA", "findIndex", "indexB", "Promise", "all", "map", "Boolean", "initializePlugin", "catch", "err", "console", "error", "pluginDefinition", "shallow", "clearTimeout", "ComposedContext", "composeContext", "rootComponents", "initialize", "Component", "key", "node", "compose", "contexts", "reduce", "Acc", "Next", "ErrorBoundary", "constructor", "getDerivedStateFromError", "componentDidUpdate", "prevProps", "data", "resetError", "render", "this", "reset", "setState", "Surface", "forwardRef", "role", "rest", "forwardedRef", "SurfaceContext", "surfaces", "SurfaceResolver", "ref", "components", "useSurface", "parent", "nodes", "resolveNodes", "currentContext", "length", "contentFallback", "Object", "entries", "component", "result", "Fragment", "limit", "slice", "createApp", "params", "host", "SurfaceMeta", "IntentMeta", "invariant", "Context", "Root"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/sdk/app-framework/src/plugins/common/graph.ts":{"bytes":2213,"imports":[],"format":"esm"},"packages/sdk/app-framework/src/plugins/common/layout.ts":{"bytes":7754,"imports":[{"path":"zod","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/app-framework/src/plugins/common/metadata.ts":{"bytes":2058,"imports":[],"format":"esm"},"packages/sdk/app-framework/src/plugins/common/translations.ts":{"bytes":3465,"imports":[{"path":"zod","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/app-framework/src/plugins/common/index.ts":{"bytes":748,"imports":[{"path":"packages/sdk/app-framework/src/plugins/common/graph.ts","kind":"import-statement","original":"./graph"},{"path":"packages/sdk/app-framework/src/plugins/common/layout.ts","kind":"import-statement","original":"./layout"},{"path":"packages/sdk/app-framework/src/plugins/common/metadata.ts","kind":"import-statement","original":"./metadata"},{"path":"packages/sdk/app-framework/src/plugins/common/translations.ts","kind":"import-statement","original":"./translations"}],"format":"esm"},"packages/sdk/app-framework/src/plugins/helpers.ts":{"bytes":4017,"imports":[{"path":"@dxos/debug","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/app-framework/src/plugins/IntentPlugin/intent.ts":{"bytes":1706,"imports":[],"format":"esm"},"packages/sdk/app-framework/src/plugins/IntentPlugin/provides.ts":{"bytes":1874,"imports":[],"format":"esm"},"packages/sdk/app-framework/src/plugins/IntentPlugin/IntentContext.tsx":{"bytes":1616,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/app-framework/src/plugins/IntentPlugin/index.ts":{"bytes":678,"imports":[{"path":"packages/sdk/app-framework/src/plugins/IntentPlugin/intent.ts","kind":"import-statement","original":"./intent"},{"path":"packages/sdk/app-framework/src/plugins/IntentPlugin/provides.ts","kind":"import-statement","original":"./provides"},{"path":"packages/sdk/app-framework/src/plugins/IntentPlugin/IntentContext.tsx","kind":"import-statement","original":"./IntentContext"}],"format":"esm"},"packages/sdk/app-framework/src/plugins/PluginHost/plugin.ts":{"bytes":5027,"imports":[],"format":"esm"},"packages/sdk/app-framework/src/plugins/PluginHost/PluginContext.tsx":{"bytes":4312,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"packages/sdk/app-framework/src/plugins/helpers.ts","kind":"import-statement","original":"../helpers"}],"format":"esm"},"packages/sdk/app-framework/src/plugins/PluginHost/PluginHost.tsx":{"bytes":18413,"imports":[{"path":"deepsignal/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/local-storage","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/sdk/app-framework/src/plugins/PluginHost/PluginContext.tsx","kind":"import-statement","original":"./PluginContext"}],"format":"esm"},"packages/sdk/app-framework/src/plugins/PluginHost/index.ts":{"bytes":678,"imports":[{"path":"packages/sdk/app-framework/src/plugins/PluginHost/plugin.ts","kind":"import-statement","original":"./plugin"},{"path":"packages/sdk/app-framework/src/plugins/PluginHost/PluginContext.tsx","kind":"import-statement","original":"./PluginContext"},{"path":"packages/sdk/app-framework/src/plugins/PluginHost/PluginHost.tsx","kind":"import-statement","original":"./PluginHost"}],"format":"esm"},"packages/sdk/app-framework/src/plugins/SurfacePlugin/provides.ts":{"bytes":1954,"imports":[],"format":"esm"},"packages/sdk/app-framework/src/plugins/SurfacePlugin/ErrorBoundary.tsx":{"bytes":4120,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/app-framework/src/plugins/SurfacePlugin/SurfaceRootContext.tsx":{"bytes":2395,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/app-framework/src/plugins/SurfacePlugin/Surface.tsx":{"bytes":10679,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/sdk/app-framework/src/plugins/SurfacePlugin/ErrorBoundary.tsx","kind":"import-statement","original":"./ErrorBoundary"},{"path":"packages/sdk/app-framework/src/plugins/SurfacePlugin/SurfaceRootContext.tsx","kind":"import-statement","original":"./SurfaceRootContext"}],"format":"esm"},"packages/sdk/app-framework/src/plugins/SurfacePlugin/index.ts":{"bytes":794,"imports":[{"path":"packages/sdk/app-framework/src/plugins/SurfacePlugin/provides.ts","kind":"import-statement","original":"./provides"},{"path":"packages/sdk/app-framework/src/plugins/SurfacePlugin/ErrorBoundary.tsx","kind":"import-statement","original":"./ErrorBoundary"},{"path":"packages/sdk/app-framework/src/plugins/SurfacePlugin/Surface.tsx","kind":"import-statement","original":"./Surface"},{"path":"packages/sdk/app-framework/src/plugins/SurfacePlugin/SurfaceRootContext.tsx","kind":"import-statement","original":"./SurfaceRootContext"}],"format":"esm"},"packages/sdk/app-framework/src/plugins/index.ts":{"bytes":854,"imports":[{"path":"packages/sdk/app-framework/src/plugins/common/index.ts","kind":"import-statement","original":"./common"},{"path":"packages/sdk/app-framework/src/plugins/helpers.ts","kind":"import-statement","original":"./helpers"},{"path":"packages/sdk/app-framework/src/plugins/IntentPlugin/index.ts","kind":"import-statement","original":"./IntentPlugin"},{"path":"packages/sdk/app-framework/src/plugins/PluginHost/index.ts","kind":"import-statement","original":"./PluginHost"},{"path":"packages/sdk/app-framework/src/plugins/SurfacePlugin/index.ts","kind":"import-statement","original":"./SurfacePlugin"}],"format":"esm"},"packages/sdk/app-framework/src/plugins/IntentPlugin/meta.ts":{"bytes":690,"imports":[],"format":"esm"},"packages/sdk/app-framework/src/plugins/SurfacePlugin/meta.ts":{"bytes":698,"imports":[],"format":"esm"},"packages/sdk/app-framework/src/plugins/SurfacePlugin/plugin.tsx":{"bytes":4010,"imports":[{"path":"deepsignal/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/sdk/app-framework/src/plugins/SurfacePlugin/SurfaceRootContext.tsx","kind":"import-statement","original":"./SurfaceRootContext"},{"path":"packages/sdk/app-framework/src/plugins/SurfacePlugin/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/sdk/app-framework/src/plugins/SurfacePlugin/provides.ts","kind":"import-statement","original":"./provides"},{"path":"packages/sdk/app-framework/src/plugins/helpers.ts","kind":"import-statement","original":"../helpers"}],"format":"esm"},"packages/sdk/app-framework/src/plugins/IntentPlugin/plugin.tsx":{"bytes":7167,"imports":[{"path":"deepsignal/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/sdk/app-framework/src/plugins/IntentPlugin/IntentContext.tsx","kind":"import-statement","original":"./IntentContext"},{"path":"packages/sdk/app-framework/src/plugins/IntentPlugin/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/sdk/app-framework/src/plugins/IntentPlugin/provides.ts","kind":"import-statement","original":"./provides"},{"path":"packages/sdk/app-framework/src/plugins/helpers.ts","kind":"import-statement","original":"../helpers"}],"format":"esm"},"packages/sdk/app-framework/src/App.tsx":{"bytes":6903,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"packages/sdk/app-framework/src/plugins/index.ts","kind":"import-statement","original":"./plugins"},{"path":"packages/sdk/app-framework/src/plugins/IntentPlugin/meta.ts","kind":"import-statement","original":"./plugins/IntentPlugin/meta"},{"path":"packages/sdk/app-framework/src/plugins/SurfacePlugin/meta.ts","kind":"import-statement","original":"./plugins/SurfacePlugin/meta"},{"path":"packages/sdk/app-framework/src/plugins/SurfacePlugin/plugin.tsx","kind":"dynamic-import","original":"./plugins/SurfacePlugin/plugin"},{"path":"packages/sdk/app-framework/src/plugins/IntentPlugin/plugin.tsx","kind":"dynamic-import","original":"./plugins/IntentPlugin/plugin"}],"format":"esm"},"packages/sdk/app-framework/src/index.ts":{"bytes":544,"imports":[{"path":"packages/sdk/app-framework/src/plugins/index.ts","kind":"import-statement","original":"./plugins"},{"path":"packages/sdk/app-framework/src/App.tsx","kind":"import-statement","original":"./App"}],"format":"esm"}},"outputs":{"packages/sdk/app-framework/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":47799},"packages/sdk/app-framework/dist/lib/node/index.cjs":{"imports":[{"path":"@dxos/debug","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true},{"path":"deepsignal/react","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true},{"path":"deepsignal/react","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true},{"path":"zod","kind":"require-call","external":true},{"path":"zod","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true},{"path":"deepsignal/react","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true},{"path":"@dxos/local-storage","kind":"require-call","external":true},{"path":"@dxos/log","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true},{"path":"react","kind":"require-call","external":true},{"path":"@dxos/invariant","kind":"require-call","external":true}],"exports":[],"entryPoint":"packages/sdk/app-framework/src/index.ts","inputs":{"packages/sdk/app-framework/src/plugins/helpers.ts":{"bytesInOutput":747},"packages/sdk/app-framework/src/plugins/IntentPlugin/provides.ts":{"bytesInOutput":360},"packages/sdk/app-framework/src/plugins/IntentPlugin/IntentContext.tsx":{"bytesInOutput":462},"packages/sdk/app-framework/src/plugins/SurfacePlugin/provides.ts":{"bytesInOutput":367},"packages/sdk/app-framework/src/plugins/SurfacePlugin/SurfaceRootContext.tsx":{"bytesInOutput":484},"packages/sdk/app-framework/src/plugins/IntentPlugin/meta.ts":{"bytesInOutput":240},"packages/sdk/app-framework/src/plugins/SurfacePlugin/meta.ts":{"bytesInOutput":248},"packages/sdk/app-framework/src/plugins/SurfacePlugin/plugin.tsx":{"bytesInOutput":1203},"packages/sdk/app-framework/src/plugins/IntentPlugin/plugin.tsx":{"bytesInOutput":1952},"packages/sdk/app-framework/src/index.ts":{"bytesInOutput":1503},"packages/sdk/app-framework/src/plugins/common/graph.ts":{"bytesInOutput":174},"packages/sdk/app-framework/src/plugins/common/index.ts":{"bytesInOutput":0},"packages/sdk/app-framework/src/plugins/common/layout.ts":{"bytesInOutput":1853},"packages/sdk/app-framework/src/plugins/common/metadata.ts":{"bytesInOutput":226},"packages/sdk/app-framework/src/plugins/common/translations.ts":{"bytesInOutput":437},"packages/sdk/app-framework/src/plugins/index.ts":{"bytesInOutput":16},"packages/sdk/app-framework/src/plugins/IntentPlugin/index.ts":{"bytesInOutput":39},"packages/sdk/app-framework/src/plugins/PluginHost/plugin.ts":{"bytesInOutput":241},"packages/sdk/app-framework/src/plugins/PluginHost/index.ts":{"bytesInOutput":0},"packages/sdk/app-framework/src/plugins/PluginHost/PluginContext.tsx":{"bytesInOutput":586},"packages/sdk/app-framework/src/plugins/PluginHost/PluginHost.tsx":{"bytesInOutput":4737},"packages/sdk/app-framework/src/plugins/SurfacePlugin/index.ts":{"bytesInOutput":45},"packages/sdk/app-framework/src/plugins/SurfacePlugin/ErrorBoundary.tsx":{"bytesInOutput":709},"packages/sdk/app-framework/src/plugins/SurfacePlugin/Surface.tsx":{"bytesInOutput":2229},"packages/sdk/app-framework/src/App.tsx":{"bytesInOutput":1342}},"bytes":24016}}}
1
+ {"inputs":{"packages/sdk/app-framework/src/plugins/common/graph.ts":{"bytes":2213,"imports":[],"format":"esm"},"packages/sdk/app-framework/src/plugins/common/layout.ts":{"bytes":7754,"imports":[{"path":"zod","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/app-framework/src/plugins/common/metadata.ts":{"bytes":2058,"imports":[],"format":"esm"},"packages/sdk/app-framework/src/plugins/common/translations.ts":{"bytes":3465,"imports":[{"path":"zod","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/app-framework/src/plugins/common/index.ts":{"bytes":748,"imports":[{"path":"packages/sdk/app-framework/src/plugins/common/graph.ts","kind":"import-statement","original":"./graph"},{"path":"packages/sdk/app-framework/src/plugins/common/layout.ts","kind":"import-statement","original":"./layout"},{"path":"packages/sdk/app-framework/src/plugins/common/metadata.ts","kind":"import-statement","original":"./metadata"},{"path":"packages/sdk/app-framework/src/plugins/common/translations.ts","kind":"import-statement","original":"./translations"}],"format":"esm"},"packages/sdk/app-framework/src/plugins/helpers.ts":{"bytes":4017,"imports":[{"path":"@dxos/debug","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/app-framework/src/plugins/IntentPlugin/intent.ts":{"bytes":1706,"imports":[],"format":"esm"},"packages/sdk/app-framework/src/plugins/IntentPlugin/provides.ts":{"bytes":1874,"imports":[],"format":"esm"},"packages/sdk/app-framework/src/plugins/IntentPlugin/IntentContext.tsx":{"bytes":1616,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/app-framework/src/plugins/IntentPlugin/index.ts":{"bytes":678,"imports":[{"path":"packages/sdk/app-framework/src/plugins/IntentPlugin/intent.ts","kind":"import-statement","original":"./intent"},{"path":"packages/sdk/app-framework/src/plugins/IntentPlugin/provides.ts","kind":"import-statement","original":"./provides"},{"path":"packages/sdk/app-framework/src/plugins/IntentPlugin/IntentContext.tsx","kind":"import-statement","original":"./IntentContext"}],"format":"esm"},"packages/sdk/app-framework/src/plugins/PluginHost/plugin.ts":{"bytes":5027,"imports":[],"format":"esm"},"packages/sdk/app-framework/src/plugins/PluginHost/PluginContext.tsx":{"bytes":4312,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"packages/sdk/app-framework/src/plugins/helpers.ts","kind":"import-statement","original":"../helpers"}],"format":"esm"},"packages/sdk/app-framework/src/plugins/PluginHost/PluginHost.tsx":{"bytes":18413,"imports":[{"path":"deepsignal/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/local-storage","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"packages/sdk/app-framework/src/plugins/PluginHost/PluginContext.tsx","kind":"import-statement","original":"./PluginContext"}],"format":"esm"},"packages/sdk/app-framework/src/plugins/PluginHost/index.ts":{"bytes":678,"imports":[{"path":"packages/sdk/app-framework/src/plugins/PluginHost/plugin.ts","kind":"import-statement","original":"./plugin"},{"path":"packages/sdk/app-framework/src/plugins/PluginHost/PluginContext.tsx","kind":"import-statement","original":"./PluginContext"},{"path":"packages/sdk/app-framework/src/plugins/PluginHost/PluginHost.tsx","kind":"import-statement","original":"./PluginHost"}],"format":"esm"},"packages/sdk/app-framework/src/plugins/SurfacePlugin/provides.ts":{"bytes":1954,"imports":[],"format":"esm"},"packages/sdk/app-framework/src/plugins/SurfacePlugin/ErrorBoundary.tsx":{"bytes":4120,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/app-framework/src/plugins/SurfacePlugin/SurfaceRootContext.tsx":{"bytes":2395,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/sdk/app-framework/src/plugins/SurfacePlugin/Surface.tsx":{"bytes":10679,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/sdk/app-framework/src/plugins/SurfacePlugin/ErrorBoundary.tsx","kind":"import-statement","original":"./ErrorBoundary"},{"path":"packages/sdk/app-framework/src/plugins/SurfacePlugin/SurfaceRootContext.tsx","kind":"import-statement","original":"./SurfaceRootContext"}],"format":"esm"},"packages/sdk/app-framework/src/plugins/SurfacePlugin/index.ts":{"bytes":794,"imports":[{"path":"packages/sdk/app-framework/src/plugins/SurfacePlugin/provides.ts","kind":"import-statement","original":"./provides"},{"path":"packages/sdk/app-framework/src/plugins/SurfacePlugin/ErrorBoundary.tsx","kind":"import-statement","original":"./ErrorBoundary"},{"path":"packages/sdk/app-framework/src/plugins/SurfacePlugin/Surface.tsx","kind":"import-statement","original":"./Surface"},{"path":"packages/sdk/app-framework/src/plugins/SurfacePlugin/SurfaceRootContext.tsx","kind":"import-statement","original":"./SurfaceRootContext"}],"format":"esm"},"packages/sdk/app-framework/src/plugins/index.ts":{"bytes":854,"imports":[{"path":"packages/sdk/app-framework/src/plugins/common/index.ts","kind":"import-statement","original":"./common"},{"path":"packages/sdk/app-framework/src/plugins/helpers.ts","kind":"import-statement","original":"./helpers"},{"path":"packages/sdk/app-framework/src/plugins/IntentPlugin/index.ts","kind":"import-statement","original":"./IntentPlugin"},{"path":"packages/sdk/app-framework/src/plugins/PluginHost/index.ts","kind":"import-statement","original":"./PluginHost"},{"path":"packages/sdk/app-framework/src/plugins/SurfacePlugin/index.ts","kind":"import-statement","original":"./SurfacePlugin"}],"format":"esm"},"packages/sdk/app-framework/src/plugins/IntentPlugin/meta.ts":{"bytes":690,"imports":[],"format":"esm"},"packages/sdk/app-framework/src/plugins/SurfacePlugin/meta.ts":{"bytes":698,"imports":[],"format":"esm"},"packages/sdk/app-framework/src/plugins/SurfacePlugin/plugin.tsx":{"bytes":4010,"imports":[{"path":"deepsignal/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/sdk/app-framework/src/plugins/SurfacePlugin/SurfaceRootContext.tsx","kind":"import-statement","original":"./SurfaceRootContext"},{"path":"packages/sdk/app-framework/src/plugins/SurfacePlugin/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/sdk/app-framework/src/plugins/SurfacePlugin/provides.ts","kind":"import-statement","original":"./provides"},{"path":"packages/sdk/app-framework/src/plugins/helpers.ts","kind":"import-statement","original":"../helpers"}],"format":"esm"},"packages/sdk/app-framework/src/plugins/IntentPlugin/plugin.tsx":{"bytes":7167,"imports":[{"path":"deepsignal/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"packages/sdk/app-framework/src/plugins/IntentPlugin/IntentContext.tsx","kind":"import-statement","original":"./IntentContext"},{"path":"packages/sdk/app-framework/src/plugins/IntentPlugin/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/sdk/app-framework/src/plugins/IntentPlugin/provides.ts","kind":"import-statement","original":"./provides"},{"path":"packages/sdk/app-framework/src/plugins/helpers.ts","kind":"import-statement","original":"../helpers"}],"format":"esm"},"packages/sdk/app-framework/src/App.tsx":{"bytes":6903,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"packages/sdk/app-framework/src/plugins/index.ts","kind":"import-statement","original":"./plugins"},{"path":"packages/sdk/app-framework/src/plugins/IntentPlugin/meta.ts","kind":"import-statement","original":"./plugins/IntentPlugin/meta"},{"path":"packages/sdk/app-framework/src/plugins/SurfacePlugin/meta.ts","kind":"import-statement","original":"./plugins/SurfacePlugin/meta"},{"path":"packages/sdk/app-framework/src/plugins/SurfacePlugin/plugin.tsx","kind":"dynamic-import","original":"./plugins/SurfacePlugin/plugin"},{"path":"packages/sdk/app-framework/src/plugins/IntentPlugin/plugin.tsx","kind":"dynamic-import","original":"./plugins/IntentPlugin/plugin"}],"format":"esm"},"packages/sdk/app-framework/src/index.ts":{"bytes":544,"imports":[{"path":"packages/sdk/app-framework/src/plugins/index.ts","kind":"import-statement","original":"./plugins"},{"path":"packages/sdk/app-framework/src/App.tsx","kind":"import-statement","original":"./App"}],"format":"esm"}},"outputs":{"packages/sdk/app-framework/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":34423},"packages/sdk/app-framework/dist/lib/node/index.cjs":{"imports":[{"path":"packages/sdk/app-framework/dist/lib/node/chunk-YDKX45O3.cjs","kind":"import-statement"},{"path":"packages/sdk/app-framework/dist/lib/node/chunk-BOQBLWMX.cjs","kind":"import-statement"},{"path":"packages/sdk/app-framework/dist/lib/node/chunk-VDKZ7AAF.cjs","kind":"import-statement"},{"path":"zod","kind":"import-statement","external":true},{"path":"zod","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"deepsignal/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/local-storage","kind":"import-statement","external":true},{"path":"@dxos/log","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"packages/sdk/app-framework/dist/lib/node/plugin-RCAOZKNL.cjs","kind":"dynamic-import"},{"path":"packages/sdk/app-framework/dist/lib/node/plugin-WDNRX2SR.cjs","kind":"dynamic-import"}],"exports":["ErrorBoundary","IntentProvider","Layout","LayoutAction","Plugin","PluginHost","PluginProvider","Resource","ResourceKey","ResourceLanguage","Surface","SurfaceProvider","createApp","filterPlugins","findPlugin","getPlugin","initializePlugin","parseGraphBuilderPlugin","parseGraphPlugin","parseIntentPlugin","parseIntentResolverPlugin","parseLayoutPlugin","parseMetadataRecordsPlugin","parseMetadataResolverPlugin","parsePluginHost","parseRootSurfacePlugin","parseSurfacePlugin","parseTranslationsPlugin","pluginMeta","resolvePlugin","useIntent","usePlugin","usePlugins","useResolvePlugin","useSurface"],"entryPoint":"packages/sdk/app-framework/src/index.ts","inputs":{"packages/sdk/app-framework/src/plugins/common/graph.ts":{"bytesInOutput":174},"packages/sdk/app-framework/src/plugins/common/index.ts":{"bytesInOutput":0},"packages/sdk/app-framework/src/plugins/common/layout.ts":{"bytesInOutput":1724},"packages/sdk/app-framework/src/plugins/common/metadata.ts":{"bytesInOutput":226},"packages/sdk/app-framework/src/plugins/common/translations.ts":{"bytesInOutput":357},"packages/sdk/app-framework/src/plugins/index.ts":{"bytesInOutput":0},"packages/sdk/app-framework/src/plugins/IntentPlugin/index.ts":{"bytesInOutput":0},"packages/sdk/app-framework/src/plugins/PluginHost/plugin.ts":{"bytesInOutput":241},"packages/sdk/app-framework/src/plugins/PluginHost/index.ts":{"bytesInOutput":0},"packages/sdk/app-framework/src/plugins/PluginHost/PluginContext.tsx":{"bytesInOutput":545},"packages/sdk/app-framework/src/plugins/PluginHost/PluginHost.tsx":{"bytesInOutput":4479},"packages/sdk/app-framework/src/plugins/SurfacePlugin/index.ts":{"bytesInOutput":0},"packages/sdk/app-framework/src/plugins/SurfacePlugin/ErrorBoundary.tsx":{"bytesInOutput":676},"packages/sdk/app-framework/src/plugins/SurfacePlugin/Surface.tsx":{"bytesInOutput":2029},"packages/sdk/app-framework/src/index.ts":{"bytesInOutput":0},"packages/sdk/app-framework/src/App.tsx":{"bytesInOutput":1151}},"bytes":13311},"packages/sdk/app-framework/dist/lib/node/plugin-RCAOZKNL.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2039},"packages/sdk/app-framework/dist/lib/node/plugin-RCAOZKNL.cjs":{"imports":[{"path":"packages/sdk/app-framework/dist/lib/node/chunk-YDKX45O3.cjs","kind":"import-statement"},{"path":"packages/sdk/app-framework/dist/lib/node/chunk-VDKZ7AAF.cjs","kind":"import-statement"},{"path":"deepsignal/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"packages/sdk/app-framework/src/plugins/SurfacePlugin/plugin.tsx","inputs":{"packages/sdk/app-framework/src/plugins/SurfacePlugin/plugin.tsx":{"bytesInOutput":680}},"bytes":985},"packages/sdk/app-framework/dist/lib/node/chunk-YDKX45O3.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2799},"packages/sdk/app-framework/dist/lib/node/chunk-YDKX45O3.cjs":{"imports":[{"path":"react","kind":"import-statement","external":true}],"exports":["SurfaceProvider","meta_default","parseRootSurfacePlugin","parseSurfacePlugin","useSurface"],"inputs":{"packages/sdk/app-framework/src/plugins/SurfacePlugin/provides.ts":{"bytesInOutput":191},"packages/sdk/app-framework/src/plugins/SurfacePlugin/SurfaceRootContext.tsx":{"bytesInOutput":235},"packages/sdk/app-framework/src/plugins/SurfacePlugin/meta.ts":{"bytesInOutput":87}},"bytes":879},"packages/sdk/app-framework/dist/lib/node/plugin-WDNRX2SR.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":3442},"packages/sdk/app-framework/dist/lib/node/plugin-WDNRX2SR.cjs":{"imports":[{"path":"packages/sdk/app-framework/dist/lib/node/chunk-BOQBLWMX.cjs","kind":"import-statement"},{"path":"packages/sdk/app-framework/dist/lib/node/chunk-VDKZ7AAF.cjs","kind":"import-statement"},{"path":"deepsignal/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"exports":["default"],"entryPoint":"packages/sdk/app-framework/src/plugins/IntentPlugin/plugin.tsx","inputs":{"packages/sdk/app-framework/src/plugins/IntentPlugin/plugin.tsx":{"bytesInOutput":1348}},"bytes":1672},"packages/sdk/app-framework/dist/lib/node/chunk-BOQBLWMX.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2163},"packages/sdk/app-framework/dist/lib/node/chunk-BOQBLWMX.cjs":{"imports":[{"path":"react","kind":"import-statement","external":true}],"exports":["IntentProvider","meta_default","parseIntentPlugin","parseIntentResolverPlugin","useIntent"],"inputs":{"packages/sdk/app-framework/src/plugins/IntentPlugin/provides.ts":{"bytesInOutput":184},"packages/sdk/app-framework/src/plugins/IntentPlugin/IntentContext.tsx":{"bytesInOutput":231},"packages/sdk/app-framework/src/plugins/IntentPlugin/meta.ts":{"bytesInOutput":84}},"bytes":857},"packages/sdk/app-framework/dist/lib/node/chunk-VDKZ7AAF.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":2110},"packages/sdk/app-framework/dist/lib/node/chunk-VDKZ7AAF.cjs":{"imports":[{"path":"@dxos/debug","kind":"import-statement","external":true}],"exports":["filterPlugins","findPlugin","getPlugin","resolvePlugin"],"inputs":{"packages/sdk/app-framework/src/plugins/helpers.ts":{"bytesInOutput":525}},"bytes":695}}}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var plugin_RCAOZKNL_exports = {};
30
+ __export(plugin_RCAOZKNL_exports, {
31
+ default: () => plugin_default
32
+ });
33
+ module.exports = __toCommonJS(plugin_RCAOZKNL_exports);
34
+ var import_chunk_YDKX45O3 = require("./chunk-YDKX45O3.cjs");
35
+ var import_chunk_VDKZ7AAF = require("./chunk-VDKZ7AAF.cjs");
36
+ var import_react = require("deepsignal/react");
37
+ var import_react2 = __toESM(require("react"));
38
+ var SurfacePlugin = () => {
39
+ const state = (0, import_react.deepSignal)({
40
+ components: {}
41
+ });
42
+ return {
43
+ meta: import_chunk_YDKX45O3.meta_default,
44
+ ready: async (plugins) => {
45
+ state.components = (0, import_react.shallow)((0, import_chunk_VDKZ7AAF.filterPlugins)(plugins, import_chunk_YDKX45O3.parseSurfacePlugin).reduce((acc, plugin) => {
46
+ return {
47
+ ...acc,
48
+ [plugin.meta.id]: plugin.provides.surface.component
49
+ };
50
+ }, {}));
51
+ },
52
+ provides: {
53
+ surface: state,
54
+ context: ({ children }) => /* @__PURE__ */ import_react2.default.createElement(import_chunk_YDKX45O3.SurfaceProvider, {
55
+ value: state
56
+ }, children)
57
+ }
58
+ };
59
+ };
60
+ var plugin_default = SurfacePlugin;
61
+ //# sourceMappingURL=plugin-RCAOZKNL.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/plugins/SurfacePlugin/plugin.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { deepSignal, shallow } from 'deepsignal/react';\nimport React from 'react';\n\nimport { SurfaceProvider, type SurfaceRootContext } from './SurfaceRootContext';\nimport SurfaceMeta from './meta';\nimport { parseSurfacePlugin, type SurfacePluginProvides } from './provides';\nimport type { PluginDefinition } from '../PluginHost';\nimport { filterPlugins } from '../helpers';\n\n/**\n * Provides a registry of surface components.\n */\nconst SurfacePlugin = (): PluginDefinition<SurfacePluginProvides> => {\n const state = deepSignal<SurfaceRootContext>({ components: {} });\n\n return {\n meta: SurfaceMeta,\n ready: async (plugins) => {\n state.components = shallow(\n filterPlugins(plugins, parseSurfacePlugin).reduce((acc, plugin) => {\n return { ...acc, [plugin.meta.id]: plugin.provides.surface.component };\n }, {}),\n );\n },\n provides: {\n surface: state,\n context: ({ children }) => <SurfaceProvider value={state}>{children}</SurfaceProvider>,\n },\n };\n};\n\nexport default SurfacePlugin;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,mBAAoC;AACpC,IAAAA,gBAAkB;AAWlB,IAAMC,gBAAgB,MAAA;AACpB,QAAMC,YAAQC,yBAA+B;IAAEC,YAAY,CAAC;EAAE,CAAA;AAE9D,SAAO;IACLC,MAAMC;IACNC,OAAO,OAAOC,YAAAA;AACZN,YAAME,iBAAaK,0BACjBC,qCAAcF,SAASG,wCAAAA,EAAoBC,OAAO,CAACC,KAAKC,WAAAA;AACtD,eAAO;UAAE,GAAGD;UAAK,CAACC,OAAOT,KAAKU,EAAE,GAAGD,OAAOE,SAASC,QAAQC;QAAU;MACvE,GAAG,CAAC,CAAA,CAAA;IAER;IACAF,UAAU;MACRC,SAASf;MACTiB,SAAS,CAAC,EAAEC,SAAQ,MAAO,8BAAAC,QAAA,cAACC,uCAAAA;QAAgBC,OAAOrB;SAAQkB,QAAAA;IAC7D;EACF;AACF;AAEA,IAAA,iBAAenB;",
6
+ "names": ["import_react", "SurfacePlugin", "state", "deepSignal", "components", "meta", "SurfaceMeta", "ready", "plugins", "shallow", "filterPlugins", "parseSurfacePlugin", "reduce", "acc", "plugin", "id", "provides", "surface", "component", "context", "children", "React", "SurfaceProvider", "value"]
7
+ }
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var plugin_WDNRX2SR_exports = {};
30
+ __export(plugin_WDNRX2SR_exports, {
31
+ default: () => plugin_default
32
+ });
33
+ module.exports = __toCommonJS(plugin_WDNRX2SR_exports);
34
+ var import_chunk_BOQBLWMX = require("./chunk-BOQBLWMX.cjs");
35
+ var import_chunk_VDKZ7AAF = require("./chunk-VDKZ7AAF.cjs");
36
+ var import_react = require("deepsignal/react");
37
+ var import_react2 = __toESM(require("react"));
38
+ var IntentPlugin = () => {
39
+ const state = (0, import_react.deepSignal)({
40
+ dispatch: async () => {
41
+ }
42
+ });
43
+ return {
44
+ meta: import_chunk_BOQBLWMX.meta_default,
45
+ ready: async (plugins) => {
46
+ const dispatch = async (intent) => {
47
+ if (intent.plugin) {
48
+ const plugin = (0, import_chunk_VDKZ7AAF.findPlugin)(plugins, intent.plugin);
49
+ return plugin?.provides.intent.resolver(intent, plugins);
50
+ }
51
+ for (const plugin of (0, import_chunk_VDKZ7AAF.filterPlugins)(plugins, import_chunk_BOQBLWMX.parseIntentResolverPlugin)) {
52
+ const result = await plugin.provides.intent.resolver(intent, plugins);
53
+ if (result) {
54
+ return result;
55
+ }
56
+ }
57
+ };
58
+ state.dispatch = async (intentOrArray) => {
59
+ let result = null;
60
+ for (const intent of Array.isArray(intentOrArray) ? intentOrArray : [
61
+ intentOrArray
62
+ ]) {
63
+ const data = intent.data ? {
64
+ ...result,
65
+ ...intent.data
66
+ } : result;
67
+ result = await dispatch({
68
+ ...intent,
69
+ data
70
+ });
71
+ }
72
+ return result;
73
+ };
74
+ },
75
+ provides: {
76
+ intent: state,
77
+ context: ({ children }) => /* @__PURE__ */ import_react2.default.createElement(import_chunk_BOQBLWMX.IntentProvider, {
78
+ value: state
79
+ }, children)
80
+ }
81
+ };
82
+ };
83
+ var plugin_default = IntentPlugin;
84
+ //# sourceMappingURL=plugin-WDNRX2SR.cjs.map
@@ -0,0 +1,7 @@
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
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/app-framework",
3
- "version": "0.3.8-main.64c4d0a",
3
+ "version": "0.3.8-main.6e627a0",
4
4
  "description": "A framework for building applications from composible plugins.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -16,12 +16,12 @@
16
16
  "@preact/signals-react": "^1.3.6",
17
17
  "deepsignal": "1.4.0-shallow.0",
18
18
  "zod": "^3.19.1",
19
- "@dxos/app-graph": "0.3.8-main.64c4d0a",
20
- "@dxos/async": "0.3.8-main.64c4d0a",
21
- "@dxos/debug": "0.3.8-main.64c4d0a",
22
- "@dxos/log": "0.3.8-main.64c4d0a",
23
- "@dxos/local-storage": "0.3.8-main.64c4d0a",
24
- "@dxos/invariant": "0.3.8-main.64c4d0a"
19
+ "@dxos/async": "0.3.8-main.6e627a0",
20
+ "@dxos/app-graph": "0.3.8-main.6e627a0",
21
+ "@dxos/debug": "0.3.8-main.6e627a0",
22
+ "@dxos/invariant": "0.3.8-main.6e627a0",
23
+ "@dxos/log": "0.3.8-main.6e627a0",
24
+ "@dxos/local-storage": "0.3.8-main.6e627a0"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/react": "^18.0.21",