@dxos/app-framework 0.8.4-main.a4bbb77 → 0.8.4-main.abd8ff62ef
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.storybook/main.mts +2 -4
- package/.storybook/preview.mts +2 -2
- package/dist/lib/browser/capability-Q5XRXRD2.mjs +38 -0
- package/dist/lib/browser/capability-Q5XRXRD2.mjs.map +7 -0
- package/dist/lib/browser/capability-V7LR4LQN.mjs +35 -0
- package/dist/lib/browser/capability-V7LR4LQN.mjs.map +7 -0
- package/dist/lib/browser/chunk-23D4SJUE.mjs +42 -0
- package/dist/lib/browser/chunk-23D4SJUE.mjs.map +7 -0
- package/dist/lib/browser/chunk-3JWJXGLK.mjs +79 -0
- package/dist/lib/browser/chunk-3JWJXGLK.mjs.map +7 -0
- package/dist/lib/browser/chunk-3ZS2A3DN.mjs +907 -0
- package/dist/lib/browser/chunk-3ZS2A3DN.mjs.map +7 -0
- package/dist/lib/browser/chunk-45CHLTBV.mjs +34 -0
- package/dist/lib/browser/chunk-45CHLTBV.mjs.map +7 -0
- package/dist/lib/browser/chunk-5LAIGWLU.mjs +467 -0
- package/dist/lib/browser/chunk-5LAIGWLU.mjs.map +7 -0
- package/dist/lib/browser/chunk-66IXTIVK.mjs +48 -0
- package/dist/lib/browser/chunk-66IXTIVK.mjs.map +7 -0
- package/dist/lib/browser/chunk-FJ4765WW.mjs +8 -0
- package/dist/lib/browser/chunk-FJ4765WW.mjs.map +7 -0
- package/dist/lib/browser/chunk-G7SDBRKH.mjs +1 -0
- package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/browser/chunk-JXCBZSBJ.mjs +372 -0
- package/dist/lib/browser/chunk-JXCBZSBJ.mjs.map +7 -0
- package/dist/lib/browser/chunk-MX5DKEJH.mjs +584 -0
- package/dist/lib/browser/chunk-MX5DKEJH.mjs.map +7 -0
- package/dist/lib/browser/chunk-WBHCSOBW.mjs +80 -0
- package/dist/lib/browser/chunk-WBHCSOBW.mjs.map +7 -0
- package/dist/lib/browser/chunk-Z55LVAGN.mjs +213 -0
- package/dist/lib/browser/chunk-Z55LVAGN.mjs.map +7 -0
- package/dist/lib/browser/chunk-ZGJAZSNE.mjs +142 -0
- package/dist/lib/browser/chunk-ZGJAZSNE.mjs.map +7 -0
- package/dist/lib/browser/cli/index.mjs +74 -0
- package/dist/lib/browser/cli/index.mjs.map +7 -0
- package/dist/lib/browser/common/activation-events.mjs +24 -0
- package/dist/lib/browser/common/capabilities.mjs +46 -0
- package/dist/lib/browser/core/activation-event.mjs +20 -0
- package/dist/lib/browser/core/activation-event.mjs.map +7 -0
- package/dist/lib/browser/core/capability.mjs +30 -0
- package/dist/lib/browser/core/capability.mjs.map +7 -0
- package/dist/lib/browser/core/plugin-manager.mjs +17 -0
- package/dist/lib/browser/core/plugin-manager.mjs.map +7 -0
- package/dist/lib/browser/core/plugin.mjs +37 -0
- package/dist/lib/browser/core/plugin.mjs.map +7 -0
- package/dist/lib/browser/core/url-loader.mjs +20 -0
- package/dist/lib/browser/core/url-loader.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +95 -148
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/invoker-capability-LNX4CGIV.mjs +44 -0
- package/dist/lib/browser/invoker-capability-LNX4CGIV.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +227 -41
- package/dist/lib/browser/testing/index.mjs.map +4 -4
- package/dist/lib/browser/testing/react.mjs +78 -0
- package/dist/lib/browser/testing/react.mjs.map +7 -0
- package/dist/lib/browser/ui/index.mjs +48 -0
- package/dist/lib/browser/ui/index.mjs.map +7 -0
- package/dist/lib/node-esm/capability-EW5GJCI6.mjs +39 -0
- package/dist/lib/node-esm/capability-EW5GJCI6.mjs.map +7 -0
- package/dist/lib/node-esm/capability-YKBMMD53.mjs +36 -0
- package/dist/lib/node-esm/capability-YKBMMD53.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-37Z53PXZ.mjs +10 -0
- package/dist/lib/node-esm/chunk-37Z53PXZ.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-6XW6LET6.mjs +35 -0
- package/dist/lib/node-esm/chunk-6XW6LET6.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-D347W3KO.mjs +143 -0
- package/dist/lib/node-esm/chunk-D347W3KO.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-D5PO2WXX.mjs +373 -0
- package/dist/lib/node-esm/chunk-D5PO2WXX.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-HTBJU5FX.mjs +214 -0
- package/dist/lib/node-esm/chunk-HTBJU5FX.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-KM2F6GH6.mjs +468 -0
- package/dist/lib/node-esm/chunk-KM2F6GH6.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-OZ7DZA5Z.mjs +2 -0
- package/dist/lib/node-esm/chunk-OZ7DZA5Z.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-Q7XBFII4.mjs +908 -0
- package/dist/lib/node-esm/chunk-Q7XBFII4.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-SBS2YMPT.mjs +43 -0
- package/dist/lib/node-esm/chunk-SBS2YMPT.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-SDJ4B2LU.mjs +80 -0
- package/dist/lib/node-esm/chunk-SDJ4B2LU.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-WFSRZKBP.mjs +81 -0
- package/dist/lib/node-esm/chunk-WFSRZKBP.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-WKTLE7MG.mjs +585 -0
- package/dist/lib/node-esm/chunk-WKTLE7MG.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-XOCUANHO.mjs +49 -0
- package/dist/lib/node-esm/chunk-XOCUANHO.mjs.map +7 -0
- package/dist/lib/node-esm/cli/index.mjs +75 -0
- package/dist/lib/node-esm/cli/index.mjs.map +7 -0
- package/dist/lib/node-esm/common/activation-events.mjs +25 -0
- package/dist/lib/node-esm/common/activation-events.mjs.map +7 -0
- package/dist/lib/node-esm/common/capabilities.mjs +47 -0
- package/dist/lib/node-esm/common/capabilities.mjs.map +7 -0
- package/dist/lib/node-esm/core/activation-event.mjs +21 -0
- package/dist/lib/node-esm/core/activation-event.mjs.map +7 -0
- package/dist/lib/node-esm/core/capability.mjs +31 -0
- package/dist/lib/node-esm/core/capability.mjs.map +7 -0
- package/dist/lib/node-esm/core/plugin-manager.mjs +18 -0
- package/dist/lib/node-esm/core/plugin-manager.mjs.map +7 -0
- package/dist/lib/node-esm/core/plugin.mjs +38 -0
- package/dist/lib/node-esm/core/plugin.mjs.map +7 -0
- package/dist/lib/node-esm/core/url-loader.mjs +21 -0
- package/dist/lib/node-esm/core/url-loader.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +95 -148
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/invoker-capability-O4T5PHLA.mjs +45 -0
- package/dist/lib/node-esm/invoker-capability-O4T5PHLA.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +227 -41
- package/dist/lib/node-esm/testing/index.mjs.map +4 -4
- package/dist/lib/node-esm/testing/react.mjs +79 -0
- package/dist/lib/node-esm/testing/react.mjs.map +7 -0
- package/dist/lib/node-esm/ui/index.mjs +49 -0
- package/dist/lib/node-esm/ui/index.mjs.map +7 -0
- package/dist/plugin/node-esm/index.mjs +832 -0
- package/dist/plugin/node-esm/index.mjs.map +7 -0
- package/dist/plugin/node-esm/meta.json +1 -0
- package/dist/types/src/cli/cli.d.ts +39 -0
- package/dist/types/src/cli/cli.d.ts.map +1 -0
- package/dist/types/src/cli/index.d.ts +2 -0
- package/dist/types/src/cli/index.d.ts.map +1 -0
- package/dist/types/src/common/activation-events.d.ts +27 -0
- package/dist/types/src/common/activation-events.d.ts.map +1 -0
- package/dist/types/src/common/capabilities.d.ts +110 -197
- package/dist/types/src/common/capabilities.d.ts.map +1 -1
- package/dist/types/src/common/index.d.ts +4 -8
- package/dist/types/src/common/index.d.ts.map +1 -1
- package/dist/types/src/common/operations.d.ts +19 -0
- package/dist/types/src/common/operations.d.ts.map +1 -0
- package/dist/types/src/common/translations.d.ts +8 -8
- package/dist/types/src/common/translations.d.ts.map +1 -1
- package/dist/types/src/context.d.ts +5 -0
- package/dist/types/src/context.d.ts.map +1 -0
- package/dist/types/src/core/{events.d.ts → activation-event.d.ts} +11 -11
- package/dist/types/src/core/activation-event.d.ts.map +1 -0
- package/dist/types/src/core/capability-manager.d.ts +48 -0
- package/dist/types/src/core/capability-manager.d.ts.map +1 -0
- package/dist/types/src/core/capability-manager.test.d.ts +2 -0
- package/dist/types/src/core/capability-manager.test.d.ts.map +1 -0
- package/dist/types/src/core/capability.d.ts +156 -0
- package/dist/types/src/core/capability.d.ts.map +1 -0
- package/dist/types/src/core/index.d.ts +8 -4
- package/dist/types/src/core/index.d.ts.map +1 -1
- package/dist/types/src/core/plugin-asset-cache.d.ts +71 -0
- package/dist/types/src/core/plugin-asset-cache.d.ts.map +1 -0
- package/dist/types/src/core/plugin-manager.d.ts +122 -0
- package/dist/types/src/core/plugin-manager.d.ts.map +1 -0
- package/dist/types/src/core/plugin-manager.test.d.ts +2 -0
- package/dist/types/src/core/plugin-manager.test.d.ts.map +1 -0
- package/dist/types/src/core/plugin-manifest.d.ts +76 -0
- package/dist/types/src/core/plugin-manifest.d.ts.map +1 -0
- package/dist/types/src/core/plugin-manifest.test.d.ts +2 -0
- package/dist/types/src/core/plugin-manifest.test.d.ts.map +1 -0
- package/dist/types/src/core/plugin.d.ts +207 -39
- package/dist/types/src/core/plugin.d.ts.map +1 -1
- package/dist/types/src/core/url-loader.d.ts +112 -0
- package/dist/types/src/core/url-loader.d.ts.map +1 -0
- package/dist/types/src/core/url-loader.test.d.ts +2 -0
- package/dist/types/src/core/url-loader.test.d.ts.map +1 -0
- package/dist/types/src/helpers.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +3 -4
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/plugin-operation/OperationPlugin.d.ts +3 -0
- package/dist/types/src/plugin-operation/OperationPlugin.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/capability.d.ts +7 -0
- package/dist/types/src/plugin-operation/history/capability.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/errors.d.ts +32 -0
- package/dist/types/src/plugin-operation/history/errors.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/history-tracker.d.ts +18 -0
- package/dist/types/src/plugin-operation/history/history-tracker.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/history-tracker.test.d.ts +2 -0
- package/dist/types/src/plugin-operation/history/history-tracker.test.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/index.d.ts +6 -0
- package/dist/types/src/plugin-operation/history/index.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/types.d.ts +13 -0
- package/dist/types/src/plugin-operation/history/types.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/undo-mapping.d.ts +101 -0
- package/dist/types/src/plugin-operation/history/undo-mapping.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/undo-registry.d.ts +23 -0
- package/dist/types/src/plugin-operation/history/undo-registry.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/undo-registry.test.d.ts +2 -0
- package/dist/types/src/plugin-operation/history/undo-registry.test.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/index.d.ts +3 -0
- package/dist/types/src/plugin-operation/index.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/invoker-capability.d.ts +6 -0
- package/dist/types/src/plugin-operation/invoker-capability.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/meta.d.ts +3 -0
- package/dist/types/src/plugin-operation/meta.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/testing.d.ts +59 -0
- package/dist/types/src/plugin-operation/testing.d.ts.map +1 -0
- package/dist/types/src/plugin-runtime/RuntimePlugin.d.ts +3 -0
- package/dist/types/src/plugin-runtime/RuntimePlugin.d.ts.map +1 -0
- package/dist/types/src/plugin-runtime/capability.d.ts +6 -0
- package/dist/types/src/plugin-runtime/capability.d.ts.map +1 -0
- package/dist/types/src/plugin-runtime/index.d.ts +2 -0
- package/dist/types/src/plugin-runtime/index.d.ts.map +1 -0
- package/dist/types/src/plugin-runtime/meta.d.ts +3 -0
- package/dist/types/src/plugin-runtime/meta.d.ts.map +1 -0
- package/dist/types/src/testing/harness.d.ts +67 -0
- package/dist/types/src/testing/harness.d.ts.map +1 -0
- package/dist/types/src/testing/index.d.ts +2 -0
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/react.d.ts +27 -0
- package/dist/types/src/testing/react.d.ts.map +1 -0
- package/dist/types/src/testing/react.test.d.ts +2 -0
- package/dist/types/src/testing/react.test.d.ts.map +1 -0
- package/dist/types/src/testing/service.d.ts +8 -0
- package/dist/types/src/testing/service.d.ts.map +1 -0
- package/dist/types/src/testing/withPluginManager.d.ts +7 -6
- package/dist/types/src/testing/withPluginManager.d.ts.map +1 -1
- package/dist/types/src/testing/withPluginManager.stories.d.ts.map +1 -1
- package/dist/types/src/ui/components/App/App.d.ts +9 -0
- package/dist/types/src/ui/components/App/App.d.ts.map +1 -0
- package/dist/types/src/ui/components/App/App.stories.d.ts +19 -0
- package/dist/types/src/ui/components/App/App.stories.d.ts.map +1 -0
- package/dist/types/src/ui/components/App/index.d.ts +2 -0
- package/dist/types/src/ui/components/App/index.d.ts.map +1 -0
- package/dist/types/src/ui/components/Placeholder/Placeholder.d.ts +64 -0
- package/dist/types/src/ui/components/Placeholder/Placeholder.d.ts.map +1 -0
- package/dist/types/src/ui/components/Placeholder/Placeholder.stories.d.ts +19 -0
- package/dist/types/src/ui/components/Placeholder/Placeholder.stories.d.ts.map +1 -0
- package/dist/types/src/ui/components/Placeholder/index.d.ts +2 -0
- package/dist/types/src/ui/components/Placeholder/index.d.ts.map +1 -0
- package/dist/types/src/{playground/playground.stories.d.ts → ui/components/PluginManager/PluginManagerContext.stories.d.ts} +5 -3
- package/dist/types/src/ui/components/PluginManager/PluginManagerContext.stories.d.ts.map +1 -0
- package/dist/types/src/ui/components/PluginManager/PluginManagerProvider.d.ts +10 -0
- package/dist/types/src/ui/components/PluginManager/PluginManagerProvider.d.ts.map +1 -0
- package/dist/types/src/ui/components/PluginManager/index.d.ts +2 -0
- package/dist/types/src/ui/components/PluginManager/index.d.ts.map +1 -0
- package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts +24 -0
- package/dist/types/src/ui/components/Surface/SurfaceComponent.d.ts.map +1 -0
- package/dist/types/src/{components/App.stories.d.ts → ui/components/Surface/SurfaceComponent.stories.d.ts} +1 -1
- package/dist/types/src/ui/components/Surface/SurfaceComponent.stories.d.ts.map +1 -0
- package/dist/types/src/ui/components/Surface/SurfaceInfo.d.ts +11 -0
- package/dist/types/src/ui/components/Surface/SurfaceInfo.d.ts.map +1 -0
- package/dist/types/src/ui/components/Surface/SurfaceProfilerContext.d.ts +48 -0
- package/dist/types/src/ui/components/Surface/SurfaceProfilerContext.d.ts.map +1 -0
- package/dist/types/src/ui/components/Surface/context.d.ts +5 -0
- package/dist/types/src/ui/components/Surface/context.d.ts.map +1 -0
- package/dist/types/src/ui/components/Surface/index.d.ts +36 -0
- package/dist/types/src/ui/components/Surface/index.d.ts.map +1 -0
- package/dist/types/src/ui/components/Surface/types.d.ts +197 -0
- package/dist/types/src/ui/components/Surface/types.d.ts.map +1 -0
- package/dist/types/src/ui/components/Surface/types.test.d.ts +2 -0
- package/dist/types/src/ui/components/Surface/types.test.d.ts.map +1 -0
- package/dist/types/src/ui/components/index.d.ts +5 -0
- package/dist/types/src/ui/components/index.d.ts.map +1 -0
- package/dist/types/src/ui/hooks/index.d.ts +6 -0
- package/dist/types/src/ui/hooks/index.d.ts.map +1 -0
- package/dist/types/src/ui/hooks/useApp.d.ts +88 -0
- package/dist/types/src/ui/hooks/useApp.d.ts.map +1 -0
- package/dist/types/src/ui/hooks/useApp.test.d.ts +2 -0
- package/dist/types/src/ui/hooks/useApp.test.d.ts.map +1 -0
- package/dist/types/src/ui/hooks/useCapabilities.d.ts +31 -0
- package/dist/types/src/ui/hooks/useCapabilities.d.ts.map +1 -0
- package/dist/types/src/{components → ui/hooks}/useLoading.d.ts +1 -2
- package/dist/types/src/ui/hooks/useLoading.d.ts.map +1 -0
- package/dist/types/src/ui/hooks/useSettingsState.d.ts +10 -0
- package/dist/types/src/ui/hooks/useSettingsState.d.ts.map +1 -0
- package/dist/types/src/ui/hooks/useSurface.d.ts +3 -0
- package/dist/types/src/ui/hooks/useSurface.d.ts.map +1 -0
- package/dist/types/src/ui/index.d.ts +3 -0
- package/dist/types/src/ui/index.d.ts.map +1 -0
- package/dist/types/src/vite-plugin/boot-loader/BootLoader.stories.d.ts +34 -0
- package/dist/types/src/vite-plugin/boot-loader/BootLoader.stories.d.ts.map +1 -0
- package/dist/types/src/vite-plugin/boot-loader/index.d.ts +52 -0
- package/dist/types/src/vite-plugin/boot-loader/index.d.ts.map +1 -0
- package/dist/types/src/vite-plugin/composer/index.d.ts +34 -0
- package/dist/types/src/vite-plugin/composer/index.d.ts.map +1 -0
- package/dist/types/src/vite-plugin/import-map/index.d.ts +28 -0
- package/dist/types/src/vite-plugin/import-map/index.d.ts.map +1 -0
- package/dist/types/src/vite-plugin/index.d.ts +5 -0
- package/dist/types/src/vite-plugin/index.d.ts.map +1 -0
- package/dist/types/src/vite-plugin/manifest.d.ts +37 -0
- package/dist/types/src/vite-plugin/manifest.d.ts.map +1 -0
- package/dist/types/src/vite-plugin/manifest.test.d.ts +2 -0
- package/dist/types/src/vite-plugin/manifest.test.d.ts.map +1 -0
- package/dist/types/src/vite-plugin/packages.d.ts +13 -0
- package/dist/types/src/vite-plugin/packages.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/moon.yml +25 -6
- package/package.json +112 -55
- package/src/cli/cli.ts +107 -0
- package/src/{components → cli}/index.ts +1 -1
- package/src/common/activation-events.ts +44 -0
- package/src/common/capabilities.ts +169 -210
- package/src/common/index.ts +4 -8
- package/src/common/operations.ts +35 -0
- package/src/common/translations.ts +18 -10
- package/src/context.ts +9 -0
- package/src/core/{events.ts → activation-event.ts} +10 -7
- package/src/core/capability-manager.test.ts +151 -0
- package/src/core/capability-manager.ts +192 -0
- package/src/core/capability.ts +247 -0
- package/src/core/index.ts +8 -4
- package/src/core/plugin-asset-cache.ts +60 -0
- package/src/core/plugin-manager.test.ts +1354 -0
- package/src/core/plugin-manager.ts +1025 -0
- package/src/core/plugin-manifest.test.ts +48 -0
- package/src/core/plugin-manifest.ts +102 -0
- package/src/core/plugin.ts +365 -45
- package/src/core/url-loader.test.ts +178 -0
- package/src/core/url-loader.ts +337 -0
- package/src/index.ts +3 -4
- package/src/plugin-operation/OperationPlugin.ts +24 -0
- package/src/plugin-operation/history/capability.ts +36 -0
- package/src/plugin-operation/history/errors.ts +7 -0
- package/src/plugin-operation/history/history-tracker.test.ts +374 -0
- package/src/plugin-operation/history/history-tracker.ts +128 -0
- package/src/plugin-operation/history/index.ts +9 -0
- package/src/plugin-operation/history/types.ts +17 -0
- package/src/plugin-operation/history/undo-mapping.ts +135 -0
- package/src/plugin-operation/history/undo-registry.test.ts +72 -0
- package/src/plugin-operation/history/undo-registry.ts +54 -0
- package/src/plugin-operation/index.ts +6 -0
- package/src/plugin-operation/invoker-capability.ts +55 -0
- package/src/plugin-operation/meta.ts +11 -0
- package/src/plugin-operation/testing.ts +155 -0
- package/src/plugin-runtime/RuntimePlugin.ts +19 -0
- package/src/plugin-runtime/capability.ts +53 -0
- package/src/{playground/layout → plugin-runtime}/index.ts +1 -1
- package/src/plugin-runtime/meta.ts +11 -0
- package/src/testing/harness.ts +229 -0
- package/src/testing/index.ts +2 -0
- package/src/testing/react.test.tsx +48 -0
- package/src/testing/react.tsx +113 -0
- package/src/testing/service.ts +52 -0
- package/src/testing/withPluginManager.stories.tsx +8 -9
- package/src/testing/withPluginManager.tsx +68 -40
- package/src/ui/components/App/App.stories.tsx +92 -0
- package/src/ui/components/App/App.tsx +81 -0
- package/src/{playground/debug → ui/components/App}/index.ts +1 -1
- package/src/ui/components/Placeholder/Placeholder.stories.tsx +77 -0
- package/src/ui/components/Placeholder/Placeholder.tsx +155 -0
- package/src/{playground/logger → ui/components/Placeholder}/index.ts +1 -1
- package/src/ui/components/PluginManager/PluginManagerContext.stories.tsx +185 -0
- package/src/{react → ui/components/PluginManager}/PluginManagerProvider.ts +3 -3
- package/src/ui/components/PluginManager/index.ts +5 -0
- package/src/ui/components/Surface/SurfaceComponent.stories.tsx +144 -0
- package/src/ui/components/Surface/SurfaceComponent.tsx +303 -0
- package/src/ui/components/Surface/SurfaceInfo.tsx +107 -0
- package/src/ui/components/Surface/SurfaceProfilerContext.tsx +207 -0
- package/src/ui/components/Surface/context.ts +12 -0
- package/src/ui/components/Surface/index.ts +54 -0
- package/src/ui/components/Surface/types.test.ts +126 -0
- package/src/ui/components/Surface/types.ts +269 -0
- package/src/ui/components/index.ts +8 -0
- package/src/ui/hooks/index.ts +9 -0
- package/src/ui/hooks/useApp.test.tsx +159 -0
- package/src/ui/hooks/useApp.tsx +413 -0
- package/src/ui/hooks/useCapabilities.ts +67 -0
- package/src/{components → ui/hooks}/useLoading.tsx +16 -10
- package/src/ui/hooks/useSettingsState.ts +26 -0
- package/src/ui/hooks/useSurface.ts +13 -0
- package/src/ui/index.ts +6 -0
- package/src/vite-plugin/boot-loader/BootLoader.stories.tsx +263 -0
- package/src/vite-plugin/boot-loader/boot-loader.css +294 -0
- package/src/vite-plugin/boot-loader/boot-loader.js +274 -0
- package/src/vite-plugin/boot-loader/index.ts +112 -0
- package/src/vite-plugin/composer/index.ts +277 -0
- package/src/vite-plugin/import-map/index.ts +524 -0
- package/src/vite-plugin/index.ts +10 -0
- package/src/vite-plugin/manifest.test.ts +24 -0
- package/src/vite-plugin/manifest.ts +50 -0
- package/src/vite-plugin/packages.ts +188 -0
- package/tsconfig.json +18 -15
- package/tsconfig.node.json +2 -4
- package/typedoc.json +2 -4
- package/vitest.config.ts +1 -1
- package/.swc/plugins/linux_x86_64_19.0.0/727453fb3a62f7f1d952a41e051ca8a6f88cadc45cee43c6a4d1aa45f9b75665.wasmer-v7 +0 -0
- package/.swc/plugins/linux_x86_64_19.0.0/fce1bdb8e20a094e4af08bad09cc81497ed0e2e7c51223b07d371063cca18429.wasmer-v7 +0 -0
- package/dist/lib/browser/app-graph-builder-XH4OYQLC.mjs +0 -137
- package/dist/lib/browser/app-graph-builder-XH4OYQLC.mjs.map +0 -7
- package/dist/lib/browser/chunk-6V54SRFL.mjs +0 -1638
- package/dist/lib/browser/chunk-6V54SRFL.mjs.map +0 -7
- package/dist/lib/browser/chunk-RGKMLI6U.mjs +0 -35
- package/dist/lib/browser/chunk-RGKMLI6U.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZZVFNUHZ.mjs +0 -467
- package/dist/lib/browser/chunk-ZZVFNUHZ.mjs.map +0 -7
- package/dist/lib/browser/intent-dispatcher-VFMJVO2M.mjs +0 -11
- package/dist/lib/browser/intent-resolver-ICAPD4JL.mjs +0 -39
- package/dist/lib/browser/intent-resolver-ICAPD4JL.mjs.map +0 -7
- package/dist/lib/browser/store-7ZGMHOGB.mjs +0 -30
- package/dist/lib/browser/store-7ZGMHOGB.mjs.map +0 -7
- package/dist/lib/browser/worker.mjs +0 -77
- package/dist/lib/node-esm/app-graph-builder-C7H22SOL.mjs +0 -138
- package/dist/lib/node-esm/app-graph-builder-C7H22SOL.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-AXSZKZFD.mjs +0 -468
- package/dist/lib/node-esm/chunk-AXSZKZFD.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-LKPMRTRR.mjs +0 -37
- package/dist/lib/node-esm/chunk-LKPMRTRR.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-SOVTUUAY.mjs +0 -1640
- package/dist/lib/node-esm/chunk-SOVTUUAY.mjs.map +0 -7
- package/dist/lib/node-esm/intent-dispatcher-SAPOKSLZ.mjs +0 -12
- package/dist/lib/node-esm/intent-resolver-CRNJ6BMD.mjs +0 -40
- package/dist/lib/node-esm/intent-resolver-CRNJ6BMD.mjs.map +0 -7
- package/dist/lib/node-esm/store-H4F4RMYD.mjs +0 -31
- package/dist/lib/node-esm/store-H4F4RMYD.mjs.map +0 -7
- package/dist/lib/node-esm/worker.mjs +0 -78
- package/dist/types/src/common/collaboration.d.ts +0 -20
- package/dist/types/src/common/collaboration.d.ts.map +0 -1
- package/dist/types/src/common/events.d.ts +0 -52
- package/dist/types/src/common/events.d.ts.map +0 -1
- package/dist/types/src/common/file.d.ts +0 -14
- package/dist/types/src/common/file.d.ts.map +0 -1
- package/dist/types/src/common/graph.d.ts +0 -21
- package/dist/types/src/common/graph.d.ts.map +0 -1
- package/dist/types/src/common/layout.d.ts +0 -279
- package/dist/types/src/common/layout.d.ts.map +0 -1
- package/dist/types/src/common/surface.d.ts +0 -59
- package/dist/types/src/common/surface.d.ts.map +0 -1
- package/dist/types/src/components/App.d.ts +0 -10
- package/dist/types/src/components/App.d.ts.map +0 -1
- package/dist/types/src/components/App.stories.d.ts.map +0 -1
- package/dist/types/src/components/DefaultFallback.d.ts +0 -8
- package/dist/types/src/components/DefaultFallback.d.ts.map +0 -1
- package/dist/types/src/components/index.d.ts +0 -2
- package/dist/types/src/components/index.d.ts.map +0 -1
- package/dist/types/src/components/useApp.d.ts +0 -44
- package/dist/types/src/components/useApp.d.ts.map +0 -1
- package/dist/types/src/components/useLoading.d.ts.map +0 -1
- package/dist/types/src/core/capabilities.d.ts +0 -117
- package/dist/types/src/core/capabilities.d.ts.map +0 -1
- package/dist/types/src/core/capabilities.test.d.ts +0 -2
- package/dist/types/src/core/capabilities.test.d.ts.map +0 -1
- package/dist/types/src/core/events.d.ts.map +0 -1
- package/dist/types/src/core/manager.d.ts +0 -126
- package/dist/types/src/core/manager.d.ts.map +0 -1
- package/dist/types/src/core/manager.test.d.ts +0 -2
- package/dist/types/src/core/manager.test.d.ts.map +0 -1
- package/dist/types/src/playground/debug/Debug.d.ts +0 -6
- package/dist/types/src/playground/debug/Debug.d.ts.map +0 -1
- package/dist/types/src/playground/debug/index.d.ts +0 -2
- package/dist/types/src/playground/debug/index.d.ts.map +0 -1
- package/dist/types/src/playground/debug/plugin.d.ts +0 -2
- package/dist/types/src/playground/debug/plugin.d.ts.map +0 -1
- package/dist/types/src/playground/generator/Main.d.ts +0 -6
- package/dist/types/src/playground/generator/Main.d.ts.map +0 -1
- package/dist/types/src/playground/generator/Toolbar.d.ts +0 -6
- package/dist/types/src/playground/generator/Toolbar.d.ts.map +0 -1
- package/dist/types/src/playground/generator/generator.d.ts +0 -7
- package/dist/types/src/playground/generator/generator.d.ts.map +0 -1
- package/dist/types/src/playground/generator/index.d.ts +0 -3
- package/dist/types/src/playground/generator/index.d.ts.map +0 -1
- package/dist/types/src/playground/generator/plugin.d.ts +0 -2
- package/dist/types/src/playground/generator/plugin.d.ts.map +0 -1
- package/dist/types/src/playground/layout/Layout.d.ts +0 -8
- package/dist/types/src/playground/layout/Layout.d.ts.map +0 -1
- package/dist/types/src/playground/layout/index.d.ts +0 -2
- package/dist/types/src/playground/layout/index.d.ts.map +0 -1
- package/dist/types/src/playground/layout/plugin.d.ts +0 -2
- package/dist/types/src/playground/layout/plugin.d.ts.map +0 -1
- package/dist/types/src/playground/logger/Toolbar.d.ts +0 -6
- package/dist/types/src/playground/logger/Toolbar.d.ts.map +0 -1
- package/dist/types/src/playground/logger/index.d.ts +0 -2
- package/dist/types/src/playground/logger/index.d.ts.map +0 -1
- package/dist/types/src/playground/logger/plugin.d.ts +0 -2
- package/dist/types/src/playground/logger/plugin.d.ts.map +0 -1
- package/dist/types/src/playground/logger/schema.d.ts +0 -13
- package/dist/types/src/playground/logger/schema.d.ts.map +0 -1
- package/dist/types/src/playground/playground.stories.d.ts.map +0 -1
- package/dist/types/src/plugin-intent/IntentPlugin.d.ts +0 -2
- package/dist/types/src/plugin-intent/IntentPlugin.d.ts.map +0 -1
- package/dist/types/src/plugin-intent/actions.d.ts +0 -36
- package/dist/types/src/plugin-intent/actions.d.ts.map +0 -1
- package/dist/types/src/plugin-intent/errors.d.ts +0 -16
- package/dist/types/src/plugin-intent/errors.d.ts.map +0 -1
- package/dist/types/src/plugin-intent/index.d.ts +0 -6
- package/dist/types/src/plugin-intent/index.d.ts.map +0 -1
- package/dist/types/src/plugin-intent/intent-dispatcher.d.ts +0 -139
- package/dist/types/src/plugin-intent/intent-dispatcher.d.ts.map +0 -1
- package/dist/types/src/plugin-intent/intent-dispatcher.test.d.ts +0 -2
- package/dist/types/src/plugin-intent/intent-dispatcher.test.d.ts.map +0 -1
- package/dist/types/src/plugin-intent/intent.d.ts +0 -63
- package/dist/types/src/plugin-intent/intent.d.ts.map +0 -1
- package/dist/types/src/plugin-intent/meta.d.ts +0 -3
- package/dist/types/src/plugin-intent/meta.d.ts.map +0 -1
- package/dist/types/src/plugin-settings/SettingsPlugin.d.ts +0 -2
- package/dist/types/src/plugin-settings/SettingsPlugin.d.ts.map +0 -1
- package/dist/types/src/plugin-settings/actions.d.ts +0 -25
- package/dist/types/src/plugin-settings/actions.d.ts.map +0 -1
- package/dist/types/src/plugin-settings/app-graph-builder.d.ts +0 -4
- package/dist/types/src/plugin-settings/app-graph-builder.d.ts.map +0 -1
- package/dist/types/src/plugin-settings/index.d.ts +0 -3
- package/dist/types/src/plugin-settings/index.d.ts.map +0 -1
- package/dist/types/src/plugin-settings/intent-resolver.d.ts +0 -4
- package/dist/types/src/plugin-settings/intent-resolver.d.ts.map +0 -1
- package/dist/types/src/plugin-settings/meta.d.ts +0 -3
- package/dist/types/src/plugin-settings/meta.d.ts.map +0 -1
- package/dist/types/src/plugin-settings/store.d.ts +0 -5
- package/dist/types/src/plugin-settings/store.d.ts.map +0 -1
- package/dist/types/src/plugin-settings/translations.d.ts +0 -11
- package/dist/types/src/plugin-settings/translations.d.ts.map +0 -1
- package/dist/types/src/react/ErrorBoundary.d.ts +0 -30
- package/dist/types/src/react/ErrorBoundary.d.ts.map +0 -1
- package/dist/types/src/react/IntentContext.d.ts +0 -8
- package/dist/types/src/react/IntentContext.d.ts.map +0 -1
- package/dist/types/src/react/PluginManagerProvider.d.ts +0 -10
- package/dist/types/src/react/PluginManagerProvider.d.ts.map +0 -1
- package/dist/types/src/react/Surface.d.ts +0 -12
- package/dist/types/src/react/Surface.d.ts.map +0 -1
- package/dist/types/src/react/Surface.stories.d.ts +0 -17
- package/dist/types/src/react/Surface.stories.d.ts.map +0 -1
- package/dist/types/src/react/common.d.ts +0 -13
- package/dist/types/src/react/common.d.ts.map +0 -1
- package/dist/types/src/react/index.d.ts +0 -7
- package/dist/types/src/react/index.d.ts.map +0 -1
- package/dist/types/src/react/useCapabilities.d.ts +0 -13
- package/dist/types/src/react/useCapabilities.d.ts.map +0 -1
- package/dist/types/src/react/useIntentResolver.d.ts +0 -3
- package/dist/types/src/react/useIntentResolver.d.ts.map +0 -1
- package/dist/types/src/worker.d.ts +0 -4
- package/dist/types/src/worker.d.ts.map +0 -1
- package/src/common/collaboration.ts +0 -18
- package/src/common/events.ts +0 -79
- package/src/common/file.ts +0 -22
- package/src/common/graph.ts +0 -30
- package/src/common/layout.ts +0 -277
- package/src/common/surface.ts +0 -83
- package/src/components/App.stories.tsx +0 -33
- package/src/components/App.tsx +0 -59
- package/src/components/DefaultFallback.tsx +0 -26
- package/src/components/useApp.tsx +0 -164
- package/src/core/capabilities.test.ts +0 -136
- package/src/core/capabilities.ts +0 -259
- package/src/core/manager.test.ts +0 -516
- package/src/core/manager.ts +0 -597
- package/src/playground/debug/Debug.tsx +0 -39
- package/src/playground/debug/plugin.ts +0 -16
- package/src/playground/generator/Main.tsx +0 -71
- package/src/playground/generator/Toolbar.tsx +0 -47
- package/src/playground/generator/generator.ts +0 -48
- package/src/playground/generator/index.ts +0 -6
- package/src/playground/generator/plugin.ts +0 -22
- package/src/playground/layout/Layout.tsx +0 -33
- package/src/playground/layout/plugin.ts +0 -18
- package/src/playground/logger/Toolbar.tsx +0 -30
- package/src/playground/logger/plugin.ts +0 -41
- package/src/playground/logger/schema.ts +0 -12
- package/src/playground/playground.stories.tsx +0 -46
- package/src/plugin-intent/IntentPlugin.ts +0 -20
- package/src/plugin-intent/actions.ts +0 -31
- package/src/plugin-intent/errors.ts +0 -40
- package/src/plugin-intent/index.ts +0 -9
- package/src/plugin-intent/intent-dispatcher.test.ts +0 -279
- package/src/plugin-intent/intent-dispatcher.ts +0 -334
- package/src/plugin-intent/intent.ts +0 -154
- package/src/plugin-intent/meta.ts +0 -10
- package/src/plugin-settings/SettingsPlugin.ts +0 -34
- package/src/plugin-settings/actions.ts +0 -25
- package/src/plugin-settings/app-graph-builder.ts +0 -159
- package/src/plugin-settings/index.ts +0 -6
- package/src/plugin-settings/intent-resolver.ts +0 -35
- package/src/plugin-settings/meta.ts +0 -10
- package/src/plugin-settings/store.ts +0 -33
- package/src/plugin-settings/translations.ts +0 -19
- package/src/react/ErrorBoundary.tsx +0 -54
- package/src/react/IntentContext.tsx +0 -35
- package/src/react/Surface.stories.tsx +0 -101
- package/src/react/Surface.tsx +0 -86
- package/src/react/common.ts +0 -13
- package/src/react/index.ts +0 -10
- package/src/react/useCapabilities.ts +0 -31
- package/src/react/useIntentResolver.ts +0 -22
- package/src/worker.ts +0 -11
- /package/dist/lib/browser/{intent-dispatcher-VFMJVO2M.mjs.map → chunk-G7SDBRKH.mjs.map} +0 -0
- /package/dist/lib/browser/{worker.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
- /package/dist/lib/{node-esm/intent-dispatcher-SAPOKSLZ.mjs.map → browser/common/activation-events.mjs.map} +0 -0
- /package/dist/lib/{node-esm/worker.mjs.map → browser/common/capabilities.mjs.map} +0 -0
package/src/common/layout.ts
DELETED
|
@@ -1,277 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2023 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import { Schema } from 'effect';
|
|
6
|
-
|
|
7
|
-
import { Label } from '../plugin-intent';
|
|
8
|
-
|
|
9
|
-
const LAYOUT_PLUGIN = 'dxos.org/plugin/layout';
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Expected payload for layout actions.
|
|
13
|
-
*/
|
|
14
|
-
export namespace LayoutAction {
|
|
15
|
-
export const UPDATE_LAYOUT = `${LAYOUT_PLUGIN}/action/update-layout`;
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Generic layout action.
|
|
19
|
-
*/
|
|
20
|
-
export class UpdateLayout extends Schema.TaggedClass<UpdateLayout>()(UPDATE_LAYOUT, {
|
|
21
|
-
input: Schema.Struct({
|
|
22
|
-
part: Schema.String.annotations({ description: 'The part of the layout to mutate.' }),
|
|
23
|
-
subject: Schema.optional(Schema.Any.annotations({ description: 'The subject of the layout update.' })),
|
|
24
|
-
options: Schema.optional(
|
|
25
|
-
Schema.Record({ key: Schema.String, value: Schema.Any }).annotations({
|
|
26
|
-
description: 'Additional options for the layout action.',
|
|
27
|
-
}),
|
|
28
|
-
),
|
|
29
|
-
}),
|
|
30
|
-
output: Schema.Void,
|
|
31
|
-
}) {}
|
|
32
|
-
|
|
33
|
-
//
|
|
34
|
-
// Common layout actions.
|
|
35
|
-
//
|
|
36
|
-
|
|
37
|
-
// NOTE: These are layout actions which are currently in common use.
|
|
38
|
-
// They constrain the generic layout action types to provide additional type safety.
|
|
39
|
-
// However, they all follow the same generic structure and intent id.
|
|
40
|
-
// This allows for plugins to update the layout without depending on a specific layout plugin.
|
|
41
|
-
// The expectation is that other norms other than these will emerge over time.
|
|
42
|
-
|
|
43
|
-
export class SetLayoutMode extends Schema.TaggedClass<SetLayoutMode>()(UPDATE_LAYOUT, {
|
|
44
|
-
input: Schema.Struct({
|
|
45
|
-
part: Schema.Literal('mode').annotations({ description: 'Setting the layout mode.' }),
|
|
46
|
-
subject: Schema.optional(
|
|
47
|
-
Schema.String.annotations({ description: 'Item which is the subject of the new layout mode.' }),
|
|
48
|
-
),
|
|
49
|
-
options: Schema.Union(
|
|
50
|
-
Schema.Struct({ mode: Schema.String.annotations({ description: 'The new layout mode.' }) }),
|
|
51
|
-
Schema.Struct({ revert: Schema.Boolean.annotations({ description: 'Revert to the previous layout mode.' }) }),
|
|
52
|
-
),
|
|
53
|
-
}),
|
|
54
|
-
output: Schema.Void,
|
|
55
|
-
}) {}
|
|
56
|
-
|
|
57
|
-
export class UpdateSidebar extends Schema.TaggedClass<UpdateSidebar>()(UPDATE_LAYOUT, {
|
|
58
|
-
input: Schema.Struct({
|
|
59
|
-
part: Schema.Literal('sidebar').annotations({ description: 'Updating the sidebar.' }),
|
|
60
|
-
subject: Schema.optional(
|
|
61
|
-
Schema.String.annotations({ description: 'URI of the component to display in the sidebar.' }),
|
|
62
|
-
),
|
|
63
|
-
options: Schema.optional(
|
|
64
|
-
Schema.Struct({
|
|
65
|
-
state: Schema.Literal('closed', 'collapsed', 'expanded').annotations({
|
|
66
|
-
description: 'Whether the sidebar is closed, collapsed, or expanded.',
|
|
67
|
-
}),
|
|
68
|
-
}),
|
|
69
|
-
),
|
|
70
|
-
}),
|
|
71
|
-
output: Schema.Void,
|
|
72
|
-
}) {}
|
|
73
|
-
|
|
74
|
-
export class UpdateComplementary extends Schema.TaggedClass<UpdateComplementary>()(UPDATE_LAYOUT, {
|
|
75
|
-
input: Schema.Struct({
|
|
76
|
-
part: Schema.Literal('complementary').annotations({ description: 'Updating the complementary sidebar.' }),
|
|
77
|
-
subject: Schema.optional(
|
|
78
|
-
Schema.String.annotations({ description: 'URI of the component to display in the complementary area.' }),
|
|
79
|
-
),
|
|
80
|
-
options: Schema.optional(
|
|
81
|
-
Schema.Struct({
|
|
82
|
-
state: Schema.Literal('closed', 'collapsed', 'expanded').annotations({
|
|
83
|
-
description: 'Whether the complementary sidebar is closed, collapsed, or expanded.',
|
|
84
|
-
}),
|
|
85
|
-
}),
|
|
86
|
-
),
|
|
87
|
-
}),
|
|
88
|
-
output: Schema.Void,
|
|
89
|
-
}) {}
|
|
90
|
-
|
|
91
|
-
export class UpdateDialog extends Schema.TaggedClass<UpdateDialog>()(UPDATE_LAYOUT, {
|
|
92
|
-
input: Schema.Struct({
|
|
93
|
-
part: Schema.Literal('dialog').annotations({ description: 'Updating the dialog.' }),
|
|
94
|
-
subject: Schema.optional(
|
|
95
|
-
Schema.String.annotations({ description: 'URI of the component to display in the dialog.' }),
|
|
96
|
-
),
|
|
97
|
-
options: Schema.Struct({
|
|
98
|
-
state: Schema.optional(Schema.Boolean.annotations({ description: 'Whether the dialog is open or closed.' })),
|
|
99
|
-
type: Schema.optional(Schema.Literal('default', 'alert').annotations({ description: 'The type of dialog.' })),
|
|
100
|
-
blockAlign: Schema.optional(
|
|
101
|
-
Schema.Literal('start', 'center', 'end').annotations({ description: 'The alignment of the dialog.' }),
|
|
102
|
-
),
|
|
103
|
-
overlayClasses: Schema.optional(
|
|
104
|
-
Schema.String.annotations({ description: 'Additional classes for the dialog overlay.' }),
|
|
105
|
-
),
|
|
106
|
-
overlayStyle: Schema.optional(
|
|
107
|
-
Schema.Record({ key: Schema.String, value: Schema.Any }).annotations({
|
|
108
|
-
description: 'Additional styles for the dialog overlay.',
|
|
109
|
-
}),
|
|
110
|
-
),
|
|
111
|
-
props: Schema.optional(
|
|
112
|
-
Schema.Record({ key: Schema.String, value: Schema.Any }).annotations({
|
|
113
|
-
description: 'Additional props for the dialog.',
|
|
114
|
-
}),
|
|
115
|
-
),
|
|
116
|
-
}),
|
|
117
|
-
}),
|
|
118
|
-
output: Schema.Void,
|
|
119
|
-
}) {}
|
|
120
|
-
|
|
121
|
-
export class UpdatePopover extends Schema.TaggedClass<UpdatePopover>()(UPDATE_LAYOUT, {
|
|
122
|
-
input: Schema.Struct({
|
|
123
|
-
part: Schema.Literal('popover').annotations({ description: 'Updating the popover.' }),
|
|
124
|
-
subject: Schema.optional(
|
|
125
|
-
Schema.Any.annotations({
|
|
126
|
-
description: 'URI of the component to display in the popover or data to pass to the popover.',
|
|
127
|
-
}),
|
|
128
|
-
),
|
|
129
|
-
options: Schema.Struct({
|
|
130
|
-
side: Schema.optional(
|
|
131
|
-
Schema.Literal('top', 'right', 'bottom', 'left').annotations({ description: 'The side of the anchor.' }),
|
|
132
|
-
),
|
|
133
|
-
state: Schema.optional(Schema.Boolean.annotations({ description: 'Whether the popover is open or closed.' })),
|
|
134
|
-
props: Schema.optional(
|
|
135
|
-
Schema.Record({ key: Schema.String, value: Schema.Any }).annotations({
|
|
136
|
-
description: 'Additional props for the popover.',
|
|
137
|
-
}),
|
|
138
|
-
),
|
|
139
|
-
}).pipe(
|
|
140
|
-
Schema.extend(
|
|
141
|
-
Schema.Union(
|
|
142
|
-
Schema.Struct({
|
|
143
|
-
variant: Schema.Literal('virtual'),
|
|
144
|
-
anchor: Schema.Any.annotations({ description: 'The DOM element to anchor the popover to.' }),
|
|
145
|
-
}),
|
|
146
|
-
Schema.Struct({
|
|
147
|
-
variant: Schema.optional(Schema.Literal('react')),
|
|
148
|
-
anchorId: Schema.String.annotations({
|
|
149
|
-
description: 'An id that can be used to determine whether to render the anchor subcomponent.',
|
|
150
|
-
}),
|
|
151
|
-
}),
|
|
152
|
-
),
|
|
153
|
-
),
|
|
154
|
-
),
|
|
155
|
-
}),
|
|
156
|
-
output: Schema.Void,
|
|
157
|
-
}) {}
|
|
158
|
-
|
|
159
|
-
export const Toast = Schema.Struct({
|
|
160
|
-
id: Schema.String.annotations({ description: 'The id of the toast.' }),
|
|
161
|
-
title: Schema.optional(Label.annotations({ description: 'The title of the toast.' })),
|
|
162
|
-
description: Schema.optional(Label.annotations({ description: 'The description of the toast.' })),
|
|
163
|
-
icon: Schema.optional(Schema.String.annotations({ description: 'The icon of the toast.' })),
|
|
164
|
-
duration: Schema.optional(Schema.Number.annotations({ description: 'The duration of the toast.' })),
|
|
165
|
-
closeLabel: Schema.optional(Label.annotations({ description: 'The label of the close button.' })),
|
|
166
|
-
actionLabel: Schema.optional(Label.annotations({ description: 'The label of the action button.' })),
|
|
167
|
-
actionAlt: Schema.optional(Label.annotations({ description: 'The alt text of the action button.' })),
|
|
168
|
-
onAction: Schema.optional(
|
|
169
|
-
Schema.Any.annotations({ description: 'The action to perform when the action button is clicked.' }),
|
|
170
|
-
),
|
|
171
|
-
});
|
|
172
|
-
|
|
173
|
-
export interface Toast extends Omit<Schema.Schema.Type<typeof Toast>, 'onAction'> {
|
|
174
|
-
onAction?: () => void;
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
export class AddToast extends Schema.TaggedClass<AddToast>()(UPDATE_LAYOUT, {
|
|
178
|
-
input: Schema.Struct({
|
|
179
|
-
part: Schema.Literal('toast').annotations({ description: 'Adding a toast.' }),
|
|
180
|
-
subject: Toast.annotations({ description: 'The toast to add.' }),
|
|
181
|
-
}),
|
|
182
|
-
output: Schema.Void,
|
|
183
|
-
}) {}
|
|
184
|
-
|
|
185
|
-
export class SwitchWorkspace extends Schema.TaggedClass<SwitchWorkspace>()(UPDATE_LAYOUT, {
|
|
186
|
-
input: Schema.Struct({
|
|
187
|
-
part: Schema.Literal('workspace').annotations({ description: 'Switching the workspace.' }),
|
|
188
|
-
subject: Schema.String.annotations({ description: 'The id of the workspace to switch to.' }),
|
|
189
|
-
}),
|
|
190
|
-
output: Schema.Void,
|
|
191
|
-
}) {}
|
|
192
|
-
|
|
193
|
-
export class RevertWorkspace extends Schema.TaggedClass<RevertWorkspace>()(UPDATE_LAYOUT, {
|
|
194
|
-
input: Schema.Struct({
|
|
195
|
-
part: Schema.Literal('workspace').annotations({ description: 'Switching the workspace.' }),
|
|
196
|
-
options: Schema.Struct({
|
|
197
|
-
revert: Schema.Literal(true).annotations({ description: 'Revert to the previous workspace.' }),
|
|
198
|
-
}),
|
|
199
|
-
}),
|
|
200
|
-
output: Schema.Void,
|
|
201
|
-
}) {}
|
|
202
|
-
|
|
203
|
-
export class Open extends Schema.TaggedClass<Open>()(UPDATE_LAYOUT, {
|
|
204
|
-
input: Schema.Struct({
|
|
205
|
-
part: Schema.Literal('main').annotations({ description: 'Opening an item in the main content area.' }),
|
|
206
|
-
subject: Schema.Array(Schema.String.annotations({ description: 'Ids of the items to open.' })),
|
|
207
|
-
options: Schema.optional(
|
|
208
|
-
Schema.Struct({
|
|
209
|
-
state: Schema.optional(Schema.Literal(true).annotations({ description: 'The items are being added.' })),
|
|
210
|
-
variant: Schema.optional(Schema.String.annotations({ description: 'The variant of the item to open.' })),
|
|
211
|
-
key: Schema.optional(
|
|
212
|
-
Schema.String.annotations({
|
|
213
|
-
description: 'If provided, will replace item with a matching key (id prefix).',
|
|
214
|
-
}),
|
|
215
|
-
),
|
|
216
|
-
workspace: Schema.optional(Schema.String.annotations({ description: 'The workspace to open the items in.' })),
|
|
217
|
-
scrollIntoView: Schema.optional(Schema.Boolean.annotations({ description: 'Scroll the items into view.' })),
|
|
218
|
-
pivotId: Schema.optional(
|
|
219
|
-
Schema.String.annotations({ description: 'The id of the item to place new items next to.' }),
|
|
220
|
-
),
|
|
221
|
-
positioning: Schema.optional(
|
|
222
|
-
Schema.Union(
|
|
223
|
-
Schema.Literal('start').annotations({ description: 'The items are being added before the pivot item.' }),
|
|
224
|
-
Schema.Literal('end').annotations({ description: 'The items are being added after the pivot item.' }),
|
|
225
|
-
),
|
|
226
|
-
),
|
|
227
|
-
}),
|
|
228
|
-
),
|
|
229
|
-
}),
|
|
230
|
-
output: Schema.Void,
|
|
231
|
-
}) {}
|
|
232
|
-
|
|
233
|
-
export class Set extends Schema.TaggedClass<Set>()(UPDATE_LAYOUT, {
|
|
234
|
-
input: Schema.Struct({
|
|
235
|
-
part: Schema.Literal('main').annotations({ description: 'Setting items in the main content area.' }),
|
|
236
|
-
subject: Schema.Array(Schema.String.annotations({ description: 'Ids of the items to set.' })),
|
|
237
|
-
options: Schema.Struct({
|
|
238
|
-
override: Schema.Literal(true).annotations({
|
|
239
|
-
description: 'Override the current items in the main content area.',
|
|
240
|
-
}),
|
|
241
|
-
}),
|
|
242
|
-
}),
|
|
243
|
-
output: Schema.Void,
|
|
244
|
-
}) {}
|
|
245
|
-
|
|
246
|
-
export class Close extends Schema.TaggedClass<Close>()(UPDATE_LAYOUT, {
|
|
247
|
-
input: Schema.Struct({
|
|
248
|
-
part: Schema.Literal('main').annotations({ description: 'Closing items in the main content area.' }),
|
|
249
|
-
subject: Schema.Array(Schema.String.annotations({ description: 'Ids of the items to close.' })),
|
|
250
|
-
options: Schema.Struct({
|
|
251
|
-
state: Schema.Literal(false).annotations({ description: 'The items are being removed.' }),
|
|
252
|
-
}),
|
|
253
|
-
}),
|
|
254
|
-
output: Schema.Void,
|
|
255
|
-
}) {}
|
|
256
|
-
|
|
257
|
-
export class ScrollIntoView extends Schema.TaggedClass<ScrollIntoView>()(UPDATE_LAYOUT, {
|
|
258
|
-
input: Schema.Struct({
|
|
259
|
-
part: Schema.Literal('current').annotations({ description: 'Setting the current item' }),
|
|
260
|
-
subject: Schema.optional(Schema.String.annotations({ description: 'The id of the item to set as current.' })),
|
|
261
|
-
options: Schema.optional(
|
|
262
|
-
Schema.Record({ key: Schema.String, value: Schema.Any }).annotations({
|
|
263
|
-
description: 'Additional options for the scroll into view.',
|
|
264
|
-
}),
|
|
265
|
-
),
|
|
266
|
-
}),
|
|
267
|
-
output: Schema.Void,
|
|
268
|
-
}) {}
|
|
269
|
-
|
|
270
|
-
export class Expose extends Schema.TaggedClass<Expose>()(UPDATE_LAYOUT, {
|
|
271
|
-
input: Schema.Struct({
|
|
272
|
-
part: Schema.Literal('navigation').annotations({ description: 'Exposing an item in the navigation area.' }),
|
|
273
|
-
subject: Schema.String.annotations({ description: 'The id of the item to expose.' }),
|
|
274
|
-
}),
|
|
275
|
-
output: Schema.Void,
|
|
276
|
-
}) {}
|
|
277
|
-
}
|
package/src/common/surface.ts
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2023 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import type { ComponentType, PropsWithChildren, ReactNode } from 'react';
|
|
6
|
-
|
|
7
|
-
import { type GuardedType, type MakeOptional, type Position } from '@dxos/util';
|
|
8
|
-
|
|
9
|
-
import { type ErrorBoundary } from '../react';
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* SurfaceProps are the props that are passed to the Surface component.
|
|
13
|
-
*/
|
|
14
|
-
export type SurfaceProps<T extends Record<string, any> = Record<string, unknown>> = {
|
|
15
|
-
/**
|
|
16
|
-
* If specified, the Surface will be wrapped in an error boundary.
|
|
17
|
-
* The fallback component will be rendered if an error occurs.
|
|
18
|
-
*/
|
|
19
|
-
fallback?: ErrorBoundary['props']['fallback'];
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* If specified, the Surface will be wrapped in a suspense boundary.
|
|
23
|
-
* The placeholder component will be rendered while the surface component is loading.
|
|
24
|
-
*/
|
|
25
|
-
placeholder?: ReactNode;
|
|
26
|
-
} & MakeOptional<CoreSurfaceProps<T>, 'id' | 'data'> &
|
|
27
|
-
// Additional props to pass to the component.
|
|
28
|
-
// These props are not used by Surface itself but may be used by components which resolve the surface.
|
|
29
|
-
// Exclude known prop names to prevent overriding well-defined props.
|
|
30
|
-
{
|
|
31
|
-
[K in keyof Record<string, any>]: K extends keyof CoreSurfaceProps<T> | 'fallback' | 'placeholder' ? never : any;
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
// NOTE: If `[key: string]: unknown` is included in shared types, when re-used other fields become unknown as well.
|
|
35
|
-
type CoreSurfaceProps<T extends Record<string, any> = Record<string, unknown>> = PropsWithChildren<{
|
|
36
|
-
/**
|
|
37
|
-
* ID for debugging.
|
|
38
|
-
*/
|
|
39
|
-
id: string;
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Role defines how the data should be rendered.
|
|
43
|
-
*/
|
|
44
|
-
role: string;
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* The data to be rendered by the surface.
|
|
48
|
-
*/
|
|
49
|
-
data: T;
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* If more than one component is resolved, the limit determines how many are rendered.
|
|
53
|
-
*/
|
|
54
|
-
limit?: number | undefined;
|
|
55
|
-
}>;
|
|
56
|
-
|
|
57
|
-
type SurfaceComponentProps<T extends Record<string, any> = Record<string, unknown>> = CoreSurfaceProps<T> &
|
|
58
|
-
Record<string, any>;
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* React component used to render a surface once is has matched.
|
|
62
|
-
*/
|
|
63
|
-
export type SurfaceComponent<T extends Record<string, any> = Record<string, unknown>> = ComponentType<
|
|
64
|
-
SurfaceComponentProps<T>
|
|
65
|
-
>;
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Definition of when a SurfaceComponent should be rendered.
|
|
69
|
-
*/
|
|
70
|
-
export type SurfaceDefinition<T extends Record<string, any> = any> = Readonly<{
|
|
71
|
-
id: string;
|
|
72
|
-
role: string | string[];
|
|
73
|
-
position?: Position;
|
|
74
|
-
filter?: (data: Record<string, unknown>) => data is T;
|
|
75
|
-
component: SurfaceComponent<GuardedType<SurfaceDefinition<T>['filter']>>;
|
|
76
|
-
}>;
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* Creates a surface definition.
|
|
80
|
-
*/
|
|
81
|
-
export const createSurface = <T extends Record<string, any> = any>(
|
|
82
|
-
definition: SurfaceDefinition<T>,
|
|
83
|
-
): SurfaceDefinition<T> => definition;
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2022 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
|
-
import React from 'react';
|
|
7
|
-
|
|
8
|
-
import { withTheme } from '@dxos/react-ui/testing';
|
|
9
|
-
|
|
10
|
-
import { useApp } from './useApp';
|
|
11
|
-
|
|
12
|
-
const DefaultStory = () => {
|
|
13
|
-
const App = useApp({
|
|
14
|
-
placeholder: () => <div className='fixed inset-0 flex items-center justify-center'>Loading...</div>,
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
return <App />;
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
const meta = {
|
|
21
|
-
title: 'sdk/app-framework/App',
|
|
22
|
-
render: DefaultStory,
|
|
23
|
-
decorators: [withTheme],
|
|
24
|
-
parameters: {
|
|
25
|
-
layout: 'fullscreen',
|
|
26
|
-
},
|
|
27
|
-
} satisfies Meta;
|
|
28
|
-
|
|
29
|
-
export default meta;
|
|
30
|
-
|
|
31
|
-
type Story = StoryObj<typeof meta>;
|
|
32
|
-
|
|
33
|
-
export const Default: Story = {};
|
package/src/components/App.tsx
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2025 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import React, { type PropsWithChildren } from 'react';
|
|
6
|
-
|
|
7
|
-
import { Capabilities } from '../common';
|
|
8
|
-
import { topologicalSort } from '../helpers';
|
|
9
|
-
import { useCapabilities } from '../react';
|
|
10
|
-
|
|
11
|
-
import { type UseAppOptions } from './useApp';
|
|
12
|
-
import { LoadingState, useLoading } from './useLoading';
|
|
13
|
-
|
|
14
|
-
export type AppProps = Pick<UseAppOptions, 'placeholder' | 'debounce'> & {
|
|
15
|
-
state: { ready: boolean; error: unknown };
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
export const App = ({ placeholder: Placeholder, state, debounce }: AppProps) => {
|
|
19
|
-
const reactContexts = useCapabilities(Capabilities.ReactContext);
|
|
20
|
-
const reactRoots = useCapabilities(Capabilities.ReactRoot);
|
|
21
|
-
const stage = useLoading(state, debounce);
|
|
22
|
-
|
|
23
|
-
if (state.error) {
|
|
24
|
-
// This triggers the error boundary to provide UI feedback for the startup error.
|
|
25
|
-
throw state.error;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
// TODO(wittjosiah): Consider using Suspense instead.
|
|
29
|
-
if (stage < LoadingState.Done) {
|
|
30
|
-
if (!Placeholder) {
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
return <Placeholder stage={stage} />;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
const ComposedContext = composeContexts(reactContexts);
|
|
38
|
-
return (
|
|
39
|
-
<ComposedContext>
|
|
40
|
-
{reactRoots.map(({ id, root: Component }) => (
|
|
41
|
-
<Component key={id} />
|
|
42
|
-
))}
|
|
43
|
-
</ComposedContext>
|
|
44
|
-
);
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
const composeContexts = (contexts: Capabilities.ReactContext[]) => {
|
|
48
|
-
if (contexts.length === 0) {
|
|
49
|
-
return ({ children }: PropsWithChildren) => <>{children}</>;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
return topologicalSort(contexts)
|
|
53
|
-
.map(({ context }) => context)
|
|
54
|
-
.reduce((Acc, Next) => ({ children }) => (
|
|
55
|
-
<Acc>
|
|
56
|
-
<Next>{children}</Next>
|
|
57
|
-
</Acc>
|
|
58
|
-
));
|
|
59
|
-
};
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2025 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import React from 'react';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* NOTE: Default fallback should not use tailwind or theme.
|
|
9
|
-
*/
|
|
10
|
-
export const DefaultFallback = ({ error }: { error: Error }) => {
|
|
11
|
-
return (
|
|
12
|
-
<div
|
|
13
|
-
style={{
|
|
14
|
-
margin: '1rem',
|
|
15
|
-
padding: '1rem',
|
|
16
|
-
overflow: 'hidden',
|
|
17
|
-
border: '4px solid teal',
|
|
18
|
-
borderRadius: '1rem',
|
|
19
|
-
}}
|
|
20
|
-
>
|
|
21
|
-
{/* TODO(wittjosiah): Link to docs for replacing default. */}
|
|
22
|
-
<h1 style={{ margin: '0.5rem 0', fontSize: '1.2rem' }}>[ERROR]: {error.message}</h1>
|
|
23
|
-
<pre style={{ overflow: 'auto', fontSize: '1rem', whiteSpace: 'pre-wrap', color: '#888888' }}>{error.stack}</pre>
|
|
24
|
-
</div>
|
|
25
|
-
);
|
|
26
|
-
};
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2025 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import { RegistryContext } from '@effect-rx/rx-react';
|
|
6
|
-
import { effect } from '@preact/signals-core';
|
|
7
|
-
import React, { type FC, useCallback, useEffect, useMemo } from 'react';
|
|
8
|
-
|
|
9
|
-
import { invariant } from '@dxos/invariant';
|
|
10
|
-
import { live } from '@dxos/live-object';
|
|
11
|
-
import { useAsyncEffect, useDefaultValue } from '@dxos/react-hooks';
|
|
12
|
-
|
|
13
|
-
import { Capabilities, Events } from '../common';
|
|
14
|
-
import { type Plugin, PluginManager, type PluginManagerOptions } from '../core';
|
|
15
|
-
import { ErrorBoundary, PluginManagerProvider } from '../react';
|
|
16
|
-
|
|
17
|
-
import { App } from './App';
|
|
18
|
-
import { DefaultFallback } from './DefaultFallback';
|
|
19
|
-
|
|
20
|
-
const ENABLED_KEY = 'dxos.org/app-framework/enabled';
|
|
21
|
-
|
|
22
|
-
export type UseAppOptions = {
|
|
23
|
-
pluginManager?: PluginManager;
|
|
24
|
-
pluginLoader?: PluginManagerOptions['pluginLoader'];
|
|
25
|
-
plugins?: Plugin[];
|
|
26
|
-
core?: string[];
|
|
27
|
-
defaults?: string[];
|
|
28
|
-
placeholder?: FC<{ stage: number }>;
|
|
29
|
-
fallback?: ErrorBoundary['props']['fallback'];
|
|
30
|
-
cacheEnabled?: boolean;
|
|
31
|
-
safeMode?: boolean;
|
|
32
|
-
debounce?: number;
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Expected usage is for this to be the entrypoint of the application.
|
|
37
|
-
* Initializes plugins and renders the root components.
|
|
38
|
-
*
|
|
39
|
-
* @example
|
|
40
|
-
* const plugins = [LayoutPlugin(), MyPlugin()];
|
|
41
|
-
* const core = [LayoutPluginId];
|
|
42
|
-
* const default = [MyPluginId];
|
|
43
|
-
* const fallback = <div>Initializing Plugins...</div>;
|
|
44
|
-
* const App = useApp({ plugins, core, default, fallback });
|
|
45
|
-
* createRoot(document.getElementById('root')!).render(
|
|
46
|
-
* <StrictMode>
|
|
47
|
-
* <App />
|
|
48
|
-
* </StrictMode>,
|
|
49
|
-
* );
|
|
50
|
-
*
|
|
51
|
-
* @param params.pluginLoader A function which loads new plugins.
|
|
52
|
-
* @param params.plugins All plugins available to the application.
|
|
53
|
-
* @param params.core Core plugins which will always be enabled.
|
|
54
|
-
* @param params.defaults Default plugins are enabled by default but can be disabled by the user.
|
|
55
|
-
* @param params.placeholder Placeholder component to render during startup.
|
|
56
|
-
* @param params.fallback Fallback component to render if an error occurs during startup.
|
|
57
|
-
* @param params.cacheEnabled Whether to cache enabled plugins in localStorage.
|
|
58
|
-
* @param params.safeMode Whether to enable safe mode, which disables optional plugins.
|
|
59
|
-
*/
|
|
60
|
-
export const useApp = ({
|
|
61
|
-
pluginManager,
|
|
62
|
-
pluginLoader: _pluginLoader,
|
|
63
|
-
plugins: _plugins,
|
|
64
|
-
core: _core,
|
|
65
|
-
defaults: _defaults,
|
|
66
|
-
placeholder,
|
|
67
|
-
fallback = DefaultFallback,
|
|
68
|
-
cacheEnabled = false,
|
|
69
|
-
safeMode = false,
|
|
70
|
-
debounce = 0,
|
|
71
|
-
}: UseAppOptions) => {
|
|
72
|
-
const plugins = useDefaultValue(_plugins, () => []);
|
|
73
|
-
const core = useDefaultValue(_core, () => plugins.map(({ meta }) => meta.id));
|
|
74
|
-
const defaults = useDefaultValue(_defaults, () => []);
|
|
75
|
-
|
|
76
|
-
// TODO(wittjosiah): Provide a custom plugin loader which supports loading via url.
|
|
77
|
-
const pluginLoader = useMemo(
|
|
78
|
-
() =>
|
|
79
|
-
_pluginLoader ??
|
|
80
|
-
((id: string) => {
|
|
81
|
-
const plugin = plugins.find((plugin) => plugin.meta.id === id);
|
|
82
|
-
invariant(plugin, `Plugin not found: ${id}`);
|
|
83
|
-
return plugin;
|
|
84
|
-
}),
|
|
85
|
-
[_pluginLoader, plugins],
|
|
86
|
-
);
|
|
87
|
-
|
|
88
|
-
const state = useMemo(() => live({ ready: false, error: null }), []);
|
|
89
|
-
const cached: string[] = useMemo(() => JSON.parse(localStorage.getItem(ENABLED_KEY) ?? '[]'), []);
|
|
90
|
-
const enabled = useMemo(
|
|
91
|
-
() => (safeMode ? [] : cacheEnabled && cached.length > 0 ? cached : defaults),
|
|
92
|
-
[safeMode, cacheEnabled, cached, defaults],
|
|
93
|
-
);
|
|
94
|
-
const manager = useMemo(
|
|
95
|
-
() => pluginManager ?? new PluginManager({ pluginLoader, plugins, core, enabled }),
|
|
96
|
-
[pluginManager, pluginLoader, plugins, core, enabled],
|
|
97
|
-
);
|
|
98
|
-
|
|
99
|
-
useEffect(() => {
|
|
100
|
-
return manager.activation.on(({ event, state: _state, error }) => {
|
|
101
|
-
// Once the app is ready the first time, don't show the fallback again.
|
|
102
|
-
if (!state.ready && event === Events.Startup.id) {
|
|
103
|
-
state.ready = _state === 'activated';
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
if (error && !state.ready && !state.error) {
|
|
107
|
-
state.error = error;
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
}, [manager, state]);
|
|
111
|
-
|
|
112
|
-
useEffect(() => {
|
|
113
|
-
effect(() => {
|
|
114
|
-
cacheEnabled && localStorage.setItem(ENABLED_KEY, JSON.stringify(manager.enabled));
|
|
115
|
-
});
|
|
116
|
-
}, [cacheEnabled, manager]);
|
|
117
|
-
|
|
118
|
-
useEffect(() => {
|
|
119
|
-
setupDevtools(manager);
|
|
120
|
-
}, [manager]);
|
|
121
|
-
|
|
122
|
-
useAsyncEffect(async () => {
|
|
123
|
-
manager.context.contributeCapability({
|
|
124
|
-
interface: Capabilities.PluginManager,
|
|
125
|
-
implementation: manager,
|
|
126
|
-
module: 'dxos.org/app-framework/plugin-manager',
|
|
127
|
-
});
|
|
128
|
-
|
|
129
|
-
manager.context.contributeCapability({
|
|
130
|
-
interface: Capabilities.RxRegistry,
|
|
131
|
-
implementation: manager.registry,
|
|
132
|
-
module: 'dxos.org/app-framework/rx-registry',
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
await Promise.all([
|
|
136
|
-
// TODO(wittjosiah): Factor out such that this could be called per surface role when attempting to render.
|
|
137
|
-
manager.activate(Events.SetupReactSurface),
|
|
138
|
-
manager.activate(Events.Startup),
|
|
139
|
-
]);
|
|
140
|
-
|
|
141
|
-
return () => {
|
|
142
|
-
manager.context.removeCapability(Capabilities.PluginManager, manager);
|
|
143
|
-
manager.context.removeCapability(Capabilities.RxRegistry, manager.registry);
|
|
144
|
-
};
|
|
145
|
-
}, [manager]);
|
|
146
|
-
|
|
147
|
-
return useCallback(
|
|
148
|
-
() => (
|
|
149
|
-
<ErrorBoundary fallback={fallback}>
|
|
150
|
-
<PluginManagerProvider value={manager}>
|
|
151
|
-
<RegistryContext.Provider value={manager.registry}>
|
|
152
|
-
<App placeholder={placeholder} state={state} debounce={debounce} />
|
|
153
|
-
</RegistryContext.Provider>
|
|
154
|
-
</PluginManagerProvider>
|
|
155
|
-
</ErrorBoundary>
|
|
156
|
-
),
|
|
157
|
-
[fallback, manager, placeholder, state],
|
|
158
|
-
);
|
|
159
|
-
};
|
|
160
|
-
|
|
161
|
-
const setupDevtools = (manager: PluginManager) => {
|
|
162
|
-
(globalThis as any).composer ??= {};
|
|
163
|
-
(globalThis as any).composer.manager = manager;
|
|
164
|
-
};
|