@dxos/app-framework 0.8.4-main.ead640a → 0.8.4-main.effb148878
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/LICENSE +102 -5
- package/README.md +1 -1
- package/dist/lib/browser/capability-C4WE22TJ.mjs +35 -0
- package/dist/lib/browser/capability-C4WE22TJ.mjs.map +7 -0
- package/dist/lib/browser/chunk-2ZIYRDAF.mjs +95 -0
- package/dist/lib/browser/chunk-2ZIYRDAF.mjs.map +7 -0
- package/dist/lib/browser/chunk-5GY3YOEL.mjs +28 -0
- package/dist/lib/browser/chunk-5GY3YOEL.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-67GCXX5I.mjs +581 -0
- package/dist/lib/browser/chunk-67GCXX5I.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-FO3IYSLV.mjs +68 -0
- package/dist/lib/browser/chunk-FO3IYSLV.mjs.map +7 -0
- package/dist/lib/browser/chunk-IW44C7UL.mjs +83 -0
- package/dist/lib/browser/chunk-IW44C7UL.mjs.map +7 -0
- package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/browser/chunk-KLHQNYJ2.mjs +422 -0
- package/dist/lib/browser/chunk-KLHQNYJ2.mjs.map +7 -0
- package/dist/lib/browser/chunk-LPWOVOOB.mjs +142 -0
- package/dist/lib/browser/chunk-LPWOVOOB.mjs.map +7 -0
- package/dist/lib/browser/chunk-LUQOVTWB.mjs +43 -0
- package/dist/lib/browser/chunk-LUQOVTWB.mjs.map +7 -0
- package/dist/lib/browser/chunk-SLX73WRZ.mjs +218 -0
- package/dist/lib/browser/chunk-SLX73WRZ.mjs.map +7 -0
- package/dist/lib/browser/chunk-SZMB3K2N.mjs +517 -0
- package/dist/lib/browser/chunk-SZMB3K2N.mjs.map +7 -0
- package/dist/lib/browser/chunk-VJ5PFAWC.mjs +1446 -0
- package/dist/lib/browser/chunk-VJ5PFAWC.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 +20 -0
- package/dist/lib/browser/common/capabilities.mjs +56 -0
- package/dist/lib/browser/core/activation-event.mjs +20 -0
- package/dist/lib/browser/core/capability.mjs +32 -0
- package/dist/lib/browser/core/capability.mjs.map +7 -0
- package/dist/lib/browser/core/plugin-manager.mjs +19 -0
- package/dist/lib/browser/core/plugin-manager.mjs.map +7 -0
- package/dist/lib/browser/core/plugin.mjs +39 -0
- package/dist/lib/browser/core/plugin.mjs.map +7 -0
- package/dist/lib/browser/core/url-loader.mjs +24 -0
- package/dist/lib/browser/core/url-loader.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +85 -148
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/process-manager-capability-3Q4TA73T.mjs +89 -0
- package/dist/lib/browser/process-manager-capability-3Q4TA73T.mjs.map +7 -0
- package/dist/lib/browser/testing/index.mjs +245 -47
- 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 +54 -0
- package/dist/lib/browser/ui/index.mjs.map +7 -0
- package/dist/lib/node-esm/capability-GPN6OS6M.mjs +36 -0
- package/dist/lib/node-esm/capability-GPN6OS6M.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-42UNAKYO.mjs +423 -0
- package/dist/lib/node-esm/chunk-42UNAKYO.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-6S45OMUP.mjs +219 -0
- package/dist/lib/node-esm/chunk-6S45OMUP.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-CTKEZHKF.mjs +84 -0
- package/dist/lib/node-esm/chunk-CTKEZHKF.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-FEVJEUD7.mjs +143 -0
- package/dist/lib/node-esm/chunk-FEVJEUD7.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-GBHZF46K.mjs +518 -0
- package/dist/lib/node-esm/chunk-GBHZF46K.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-GUE5V5CG.mjs +582 -0
- package/dist/lib/node-esm/chunk-GUE5V5CG.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-KFZEB6BV.mjs +29 -0
- package/dist/lib/node-esm/chunk-KFZEB6BV.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-MXWDXYV2.mjs +44 -0
- package/dist/lib/node-esm/chunk-MXWDXYV2.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-QBUGLR4H.mjs +96 -0
- package/dist/lib/node-esm/chunk-QBUGLR4H.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-SFYCO3PT.mjs +1447 -0
- package/dist/lib/node-esm/chunk-SFYCO3PT.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-WK7OIQKI.mjs +70 -0
- package/dist/lib/node-esm/chunk-WK7OIQKI.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 +21 -0
- package/dist/lib/node-esm/common/activation-events.mjs.map +7 -0
- package/dist/lib/node-esm/common/capabilities.mjs +57 -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 +33 -0
- package/dist/lib/node-esm/core/capability.mjs.map +7 -0
- package/dist/lib/node-esm/core/plugin-manager.mjs +20 -0
- package/dist/lib/node-esm/core/plugin-manager.mjs.map +7 -0
- package/dist/lib/node-esm/core/plugin.mjs +40 -0
- package/dist/lib/node-esm/core/plugin.mjs.map +7 -0
- package/dist/lib/node-esm/core/url-loader.mjs +25 -0
- package/dist/lib/node-esm/core/url-loader.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +85 -148
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/process-manager-capability-5KCLSNQM.mjs +90 -0
- package/dist/lib/node-esm/process-manager-capability-5KCLSNQM.mjs.map +7 -0
- package/dist/lib/node-esm/testing/index.mjs +245 -47
- 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 +55 -0
- package/dist/lib/node-esm/ui/index.mjs.map +7 -0
- package/dist/plugin/node-esm/index.mjs +893 -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 +37 -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 +24 -0
- package/dist/types/src/common/activation-events.d.ts.map +1 -0
- package/dist/types/src/common/annotations.d.ts +1 -0
- package/dist/types/src/common/annotations.d.ts.map +1 -0
- package/dist/types/src/common/capabilities.d.ts +214 -199
- 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 +7 -7
- 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 +161 -0
- package/dist/types/src/core/capability.d.ts.map +1 -0
- package/dist/types/src/core/edge-registry-plugin-provider.d.ts +30 -0
- package/dist/types/src/core/edge-registry-plugin-provider.d.ts.map +1 -0
- package/dist/types/src/core/index.d.ts +11 -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 +297 -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 +101 -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 +276 -39
- package/dist/types/src/core/plugin.d.ts.map +1 -1
- package/dist/types/src/core/registry.d.ts +107 -0
- package/dist/types/src/core/registry.d.ts.map +1 -0
- package/dist/types/src/core/url-loader.d.ts +127 -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 +2 -4
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/plugin-process-manager/ProcessManagerPlugin.d.ts +3 -0
- package/dist/types/src/plugin-process-manager/ProcessManagerPlugin.d.ts.map +1 -0
- package/dist/types/src/plugin-process-manager/history/capability.d.ts +7 -0
- package/dist/types/src/plugin-process-manager/history/capability.d.ts.map +1 -0
- package/dist/types/src/plugin-process-manager/history/errors.d.ts +32 -0
- package/dist/types/src/plugin-process-manager/history/errors.d.ts.map +1 -0
- package/dist/types/src/plugin-process-manager/history/history-tracker.d.ts +18 -0
- package/dist/types/src/plugin-process-manager/history/history-tracker.d.ts.map +1 -0
- package/dist/types/src/plugin-process-manager/history/history-tracker.test.d.ts +2 -0
- package/dist/types/src/plugin-process-manager/history/history-tracker.test.d.ts.map +1 -0
- package/dist/types/src/plugin-process-manager/history/index.d.ts +6 -0
- package/dist/types/src/plugin-process-manager/history/index.d.ts.map +1 -0
- package/dist/types/src/plugin-process-manager/history/types.d.ts +13 -0
- package/dist/types/src/plugin-process-manager/history/types.d.ts.map +1 -0
- package/dist/types/src/plugin-process-manager/history/undo-mapping.d.ts +101 -0
- package/dist/types/src/plugin-process-manager/history/undo-mapping.d.ts.map +1 -0
- package/dist/types/src/plugin-process-manager/history/undo-registry.d.ts +23 -0
- package/dist/types/src/plugin-process-manager/history/undo-registry.d.ts.map +1 -0
- package/dist/types/src/plugin-process-manager/history/undo-registry.test.d.ts +2 -0
- package/dist/types/src/plugin-process-manager/history/undo-registry.test.d.ts.map +1 -0
- package/dist/types/src/plugin-process-manager/index.d.ts +3 -0
- package/dist/types/src/plugin-process-manager/index.d.ts.map +1 -0
- package/dist/types/src/plugin-process-manager/meta.d.ts +3 -0
- package/dist/types/src/plugin-process-manager/meta.d.ts.map +1 -0
- package/dist/types/src/plugin-process-manager/process-manager-capability.d.ts +8 -0
- package/dist/types/src/plugin-process-manager/process-manager-capability.d.ts.map +1 -0
- package/dist/types/src/plugin-process-manager/testing.d.ts +59 -0
- package/dist/types/src/plugin-process-manager/testing.d.ts.map +1 -0
- package/dist/types/src/testing/harness.d.ts +79 -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 +7 -0
- package/dist/types/src/ui/hooks/index.d.ts.map +1 -0
- package/dist/types/src/ui/hooks/useApp.d.ts +86 -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/useProcessManagerRuntime.d.ts +30 -0
- package/dist/types/src/ui/hooks/useProcessManagerRuntime.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 +2 -0
- package/dist/types/src/vite-plugin/boot-loader/index.d.ts.map +1 -0
- package/dist/types/src/vite-plugin/boot-loader/loader.d.ts +51 -0
- package/dist/types/src/vite-plugin/boot-loader/loader.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 +41 -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 +119 -56
- package/src/cli/cli.ts +102 -0
- package/src/{components → cli}/index.ts +1 -1
- package/src/common/activation-events.ts +39 -0
- package/src/{playground/layout/index.ts → common/annotations.ts} +0 -2
- package/src/common/capabilities.ts +287 -195
- package/src/common/index.ts +4 -8
- package/src/common/operations.ts +36 -0
- package/src/common/translations.ts +17 -9
- 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 +254 -0
- package/src/core/edge-registry-plugin-provider.ts +92 -0
- package/src/core/index.ts +11 -4
- package/src/core/plugin-asset-cache.ts +60 -0
- package/src/core/plugin-manager.test.ts +1899 -0
- package/src/core/plugin-manager.ts +1687 -0
- package/src/core/plugin-manifest.test.ts +75 -0
- package/src/core/plugin-manifest.ts +134 -0
- package/src/core/plugin.ts +415 -45
- package/src/core/registry.ts +163 -0
- package/src/core/url-loader.test.ts +221 -0
- package/src/core/url-loader.ts +388 -0
- package/src/index.ts +2 -4
- package/src/plugin-process-manager/ProcessManagerPlugin.ts +24 -0
- package/src/plugin-process-manager/history/capability.ts +36 -0
- package/src/plugin-process-manager/history/errors.ts +7 -0
- package/src/plugin-process-manager/history/history-tracker.test.ts +374 -0
- package/src/plugin-process-manager/history/history-tracker.ts +128 -0
- package/src/plugin-process-manager/history/index.ts +9 -0
- package/src/plugin-process-manager/history/types.ts +17 -0
- package/src/plugin-process-manager/history/undo-mapping.ts +135 -0
- package/src/plugin-process-manager/history/undo-registry.test.ts +72 -0
- package/src/plugin-process-manager/history/undo-registry.ts +54 -0
- package/src/plugin-process-manager/index.ts +6 -0
- package/src/plugin-process-manager/meta.ts +14 -0
- package/src/plugin-process-manager/process-manager-capability.ts +178 -0
- package/src/plugin-process-manager/testing.ts +155 -0
- package/src/testing/harness.ts +247 -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 +73 -42
- package/src/ui/components/App/App.stories.tsx +86 -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 +156 -0
- package/src/{playground/logger → ui/components/Placeholder}/index.ts +1 -1
- package/src/ui/components/PluginManager/PluginManagerContext.stories.tsx +184 -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 +106 -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 +10 -0
- package/src/ui/hooks/useApp.test.tsx +159 -0
- package/src/ui/hooks/useApp.tsx +418 -0
- package/src/ui/hooks/useCapabilities.ts +68 -0
- package/src/{components → ui/hooks}/useLoading.tsx +16 -10
- package/src/ui/hooks/useProcessManagerRuntime.ts +78 -0
- 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 +270 -0
- package/src/vite-plugin/boot-loader/boot-loader.css +320 -0
- package/src/vite-plugin/boot-loader/boot-loader.js +325 -0
- package/src/vite-plugin/boot-loader/index.ts +5 -0
- package/src/vite-plugin/boot-loader/loader.ts +123 -0
- package/src/vite-plugin/composer/index.ts +306 -0
- package/src/vite-plugin/import-map/index.ts +527 -0
- package/src/vite-plugin/index.ts +10 -0
- package/src/vite-plugin/manifest.test.ts +46 -0
- package/src/vite-plugin/manifest.ts +57 -0
- package/src/vite-plugin/packages.ts +187 -0
- package/tsconfig.json +30 -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-LG4RG2LM.mjs +0 -138
- package/dist/lib/browser/app-graph-builder-LG4RG2LM.mjs.map +0 -7
- package/dist/lib/browser/chunk-2GRQ4QXA.mjs +0 -1646
- package/dist/lib/browser/chunk-2GRQ4QXA.mjs.map +0 -7
- package/dist/lib/browser/chunk-FRUTKCPG.mjs +0 -467
- package/dist/lib/browser/chunk-FRUTKCPG.mjs.map +0 -7
- package/dist/lib/browser/chunk-SCPE4ZO2.mjs +0 -35
- package/dist/lib/browser/chunk-SCPE4ZO2.mjs.map +0 -7
- package/dist/lib/browser/intent-dispatcher-6SHA5B3N.mjs +0 -11
- package/dist/lib/browser/intent-resolver-UZZ4OANZ.mjs +0 -39
- package/dist/lib/browser/intent-resolver-UZZ4OANZ.mjs.map +0 -7
- package/dist/lib/browser/store-ACBEYK4B.mjs +0 -30
- package/dist/lib/browser/store-ACBEYK4B.mjs.map +0 -7
- package/dist/lib/browser/worker.mjs +0 -77
- package/dist/lib/node-esm/app-graph-builder-FMHVHPWA.mjs +0 -139
- package/dist/lib/node-esm/app-graph-builder-FMHVHPWA.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CXT6CYPE.mjs +0 -468
- package/dist/lib/node-esm/chunk-CXT6CYPE.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-KSPOOYT3.mjs +0 -1648
- package/dist/lib/node-esm/chunk-KSPOOYT3.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ZX63QUGE.mjs +0 -37
- package/dist/lib/node-esm/chunk-ZX63QUGE.mjs.map +0 -7
- package/dist/lib/node-esm/intent-dispatcher-SIYQ5ZIU.mjs +0 -12
- package/dist/lib/node-esm/intent-resolver-7FYJMXAG.mjs +0 -40
- package/dist/lib/node-esm/intent-resolver-7FYJMXAG.mjs.map +0 -7
- package/dist/lib/node-esm/store-6OBLTVXC.mjs +0 -31
- package/dist/lib/node-esm/store-6OBLTVXC.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 -604
- 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 -286
- package/src/plugin-intent/intent-dispatcher.ts +0 -337
- 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 -160
- 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 -56
- 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-6SHA5B3N.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
- /package/dist/lib/browser/{worker.mjs.map → common/activation-events.mjs.map} +0 -0
- /package/dist/lib/{node-esm/intent-dispatcher-SIYQ5ZIU.mjs.map → browser/common/capabilities.mjs.map} +0 -0
- /package/dist/lib/{node-esm/worker.mjs.map → browser/core/activation-event.mjs.map} +0 -0
|
@@ -2,9 +2,7 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { useEffect, useState } from 'react';
|
|
6
|
-
|
|
7
|
-
import { type AppProps } from './App';
|
|
5
|
+
import { useEffect, useRef, useState } from 'react';
|
|
8
6
|
|
|
9
7
|
export enum LoadingState {
|
|
10
8
|
Loading = 0,
|
|
@@ -23,8 +21,16 @@ export enum LoadingState {
|
|
|
23
21
|
* 2: Fade-out - Fade out the loading animation.
|
|
24
22
|
* 3: Done - Remove the placeholder.
|
|
25
23
|
*/
|
|
26
|
-
export const useLoading = (
|
|
24
|
+
export const useLoading = (ready: boolean, debounce = 0) => {
|
|
27
25
|
const [stage, setStage] = useState<LoadingState>(LoadingState.Loading);
|
|
26
|
+
// Mirror `ready` into a ref so the interval's `setStage` callback can read
|
|
27
|
+
// the latest value without depending on the effect re-running. The pure
|
|
28
|
+
// closure-capture pattern (with `ready` in deps) sticks the FSM at
|
|
29
|
+
// `FadeIn` whenever HMR doesn't propagate the dep change end-to-end —
|
|
30
|
+
// a ref sidesteps that entirely and fires the read on every tick.
|
|
31
|
+
const readyRef = useRef(ready);
|
|
32
|
+
readyRef.current = ready;
|
|
33
|
+
|
|
28
34
|
useEffect(() => {
|
|
29
35
|
if (!debounce) {
|
|
30
36
|
return;
|
|
@@ -32,18 +38,18 @@ export const useLoading = (state: AppProps['state'], debounce = 0) => {
|
|
|
32
38
|
|
|
33
39
|
const i = setInterval(() => {
|
|
34
40
|
setStage((stage) => {
|
|
41
|
+
const isReady = readyRef.current;
|
|
35
42
|
switch (stage) {
|
|
36
43
|
case LoadingState.Loading: {
|
|
37
|
-
if (!
|
|
44
|
+
if (!isReady) {
|
|
38
45
|
return LoadingState.FadeIn;
|
|
39
|
-
} else {
|
|
40
|
-
clearInterval(i);
|
|
41
|
-
return LoadingState.Done;
|
|
42
46
|
}
|
|
47
|
+
clearInterval(i);
|
|
48
|
+
return LoadingState.Done;
|
|
43
49
|
}
|
|
44
50
|
|
|
45
51
|
case LoadingState.FadeIn: {
|
|
46
|
-
if (
|
|
52
|
+
if (isReady) {
|
|
47
53
|
return LoadingState.FadeOut;
|
|
48
54
|
}
|
|
49
55
|
break;
|
|
@@ -63,7 +69,7 @@ export const useLoading = (state: AppProps['state'], debounce = 0) => {
|
|
|
63
69
|
}, [debounce]);
|
|
64
70
|
|
|
65
71
|
if (!debounce) {
|
|
66
|
-
return
|
|
72
|
+
return ready ? LoadingState.Done : LoadingState.Loading;
|
|
67
73
|
}
|
|
68
74
|
|
|
69
75
|
return stage;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as Context from 'effect/Context';
|
|
6
|
+
import * as Effect from 'effect/Effect';
|
|
7
|
+
import * as Layer from 'effect/Layer';
|
|
8
|
+
import { type DependencyList, use, useCallback, useMemo } from 'react';
|
|
9
|
+
|
|
10
|
+
import { Operation, ServiceResolver } from '@dxos/compute';
|
|
11
|
+
import { unwrapExit } from '@dxos/effect';
|
|
12
|
+
import type { SpaceId } from '@dxos/keys';
|
|
13
|
+
|
|
14
|
+
import { Capabilities } from '../../common';
|
|
15
|
+
import { useCapability } from './useCapabilities';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Resolve the shared {@link Capabilities.ProcessManagerRuntime} from the plugin context.
|
|
19
|
+
*/
|
|
20
|
+
export const useProcessManagerRuntime = (): Capabilities.ProcessManagerRuntime =>
|
|
21
|
+
useCapability(Capabilities.ProcessManagerRuntime);
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Build a callback that runs an effect on the {@link Capabilities.ProcessManagerRuntime}
|
|
25
|
+
* with space-scoped services resolved via {@link ServiceResolver.provide}.
|
|
26
|
+
*
|
|
27
|
+
* The `tags` tuple must list every service the effect requires (beyond the
|
|
28
|
+
* fixed {@link Capabilities.ProcessManagerRuntimeServices}); these services are
|
|
29
|
+
* resolved for the given `spaceId` through the runtime's service resolver.
|
|
30
|
+
*
|
|
31
|
+
* Nested `Operation.invoke` / `Operation.schedule` calls within the effect
|
|
32
|
+
* inherit `spaceId` as a default {@link Operation.InvokeOptions} so that
|
|
33
|
+
* spawned operation processes have a space context (and therefore can resolve
|
|
34
|
+
* space-scoped services like `Database.Service`) without each call site having
|
|
35
|
+
* to thread the id through manually.
|
|
36
|
+
*/
|
|
37
|
+
export const useSpaceCallback = <const Tags extends readonly Context.Tag<any, any>[], T>(
|
|
38
|
+
spaceId: SpaceId | undefined,
|
|
39
|
+
tags: Tags,
|
|
40
|
+
fn: () => Effect.Effect<T, any, Context.Tag.Identifier<Tags[number]> | Capabilities.ProcessManagerRuntimeServices>,
|
|
41
|
+
deps?: DependencyList,
|
|
42
|
+
): (() => Promise<T>) => {
|
|
43
|
+
const runtime = useProcessManagerRuntime();
|
|
44
|
+
return useCallback(() => {
|
|
45
|
+
if (spaceId === undefined) {
|
|
46
|
+
throw new TypeError('Space not provided to useSpaceCallback');
|
|
47
|
+
}
|
|
48
|
+
const layer = Layer.merge(
|
|
49
|
+
ServiceResolver.provide({ space: spaceId }, ...tags),
|
|
50
|
+
Operation.withInvocationOptions({ spaceId }),
|
|
51
|
+
);
|
|
52
|
+
return runtime.runPromise(fn().pipe(Effect.provide(layer)) as Effect.Effect<T, any, any>);
|
|
53
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
54
|
+
}, [runtime, spaceId, ...(deps ?? [])]);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Suspensefully resolve a single space-scoped service via the
|
|
59
|
+
* {@link Capabilities.ProcessManagerRuntime}'s service resolver.
|
|
60
|
+
*/
|
|
61
|
+
export const useSpaceService = <T extends Context.Tag<any, any>>(
|
|
62
|
+
tag: T,
|
|
63
|
+
spaceId: SpaceId | undefined,
|
|
64
|
+
): Context.Tag.Service<T> | undefined => {
|
|
65
|
+
const runtime = useProcessManagerRuntime();
|
|
66
|
+
const promise = useMemo(() => {
|
|
67
|
+
if (spaceId === undefined) {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
const layer = ServiceResolver.provide({ space: spaceId }, tag);
|
|
71
|
+
const effect = Effect.flatMap(tag, (service) => Effect.succeed(service)).pipe(Effect.provide(layer));
|
|
72
|
+
return runtime.runPromiseExit(effect as Effect.Effect<Context.Tag.Service<T>, any, any>);
|
|
73
|
+
}, [runtime, spaceId, tag]);
|
|
74
|
+
if (!promise) {
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
return unwrapExit(use(promise));
|
|
78
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type Atom, RegistryContext, useAtomValue } from '@effect-atom/atom-react';
|
|
6
|
+
import { useCallback, useContext } from 'react';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Hook to read and update a settings atom.
|
|
10
|
+
* Returns the current value and an update function.
|
|
11
|
+
*/
|
|
12
|
+
export const useSettingsState = <T>(
|
|
13
|
+
atom: Atom.Writable<T>,
|
|
14
|
+
): { settings: T; updateSettings: (fn: (current: T) => T) => void } => {
|
|
15
|
+
const registry = useContext(RegistryContext);
|
|
16
|
+
const settings = useAtomValue(atom);
|
|
17
|
+
|
|
18
|
+
const updateSettings = useCallback(
|
|
19
|
+
(fn: (current: T) => T) => {
|
|
20
|
+
registry.set(atom, fn(registry.get(atom)));
|
|
21
|
+
},
|
|
22
|
+
[registry, atom],
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
return { settings, updateSettings };
|
|
26
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { useContext } from 'react';
|
|
6
|
+
|
|
7
|
+
import { raise } from '@dxos/debug';
|
|
8
|
+
|
|
9
|
+
import { Surface } from '../components';
|
|
10
|
+
|
|
11
|
+
export const useSurface = (): Surface.Context => {
|
|
12
|
+
return useContext(Surface.Context) ?? raise(new Error('Missing SurfaceContext'));
|
|
13
|
+
};
|
package/src/ui/index.ts
ADDED
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
|
+
import React, { useEffect, useRef, useState } from 'react';
|
|
7
|
+
|
|
8
|
+
import { Composer } from '@dxos/brand';
|
|
9
|
+
import { Toolbar } from '@dxos/react-ui';
|
|
10
|
+
import { withTheme } from '@dxos/react-ui/testing';
|
|
11
|
+
|
|
12
|
+
import { Placeholder } from '../../ui';
|
|
13
|
+
import bootLoaderCss from './boot-loader.css?raw';
|
|
14
|
+
import bootLoaderScript from './boot-loader.js?raw';
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Storybook host that runs the **real** inline driver script (`boot-loader.js`)
|
|
18
|
+
* against the same DOM structure {@link bootLoaderPlugin} injects in production
|
|
19
|
+
* via `transformIndexHtml`. The component injects `<style>` + the loader DOM,
|
|
20
|
+
* evaluates the driver, and exposes `window.__bootLoader` for the stories to
|
|
21
|
+
* call — no React reimplementation of the state machine.
|
|
22
|
+
*
|
|
23
|
+
* On unmount, the host calls `__bootLoader.dismiss()` (which clears the creep
|
|
24
|
+
* timer and removes the `#boot-loader` node) and clears the global so a fresh
|
|
25
|
+
* mount re-runs the driver from scratch.
|
|
26
|
+
*/
|
|
27
|
+
type BootLoaderHostProps = {
|
|
28
|
+
initialStatus?: string;
|
|
29
|
+
markSvg?: string;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
// `__bootLoader` is declared globally by `../../ui/components/Placeholder/Placeholder.tsx`
|
|
33
|
+
// so consumers don't have to redeclare it. The story imports `Placeholder` for the
|
|
34
|
+
// handoff scenarios, which pulls the declaration into scope.
|
|
35
|
+
|
|
36
|
+
const BootLoaderHost = ({ initialStatus = 'Loading…', markSvg }: BootLoaderHostProps) => {
|
|
37
|
+
const containerRef = useRef<HTMLDivElement | null>(null);
|
|
38
|
+
|
|
39
|
+
useEffect(() => {
|
|
40
|
+
const container = containerRef.current;
|
|
41
|
+
if (!container) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
// Mirror the HTML structure produced by `bootLoaderPlugin.transformIndexHtml`.
|
|
46
|
+
const initialLine = initialStatus ? `<div class="boot-loader-status-line">${escapeHtml(initialStatus)}</div>` : '';
|
|
47
|
+
const markHtml = markSvg ? `<div id="boot-loader-mark">${markSvg}</div>` : '';
|
|
48
|
+
container.innerHTML = `
|
|
49
|
+
<div id="boot-loader" role="status" aria-live="polite" aria-label="Initializing">
|
|
50
|
+
<div id="boot-loader-disc">
|
|
51
|
+
<div id="boot-loader-bar"></div>
|
|
52
|
+
<div id="boot-loader-dot"></div>
|
|
53
|
+
${markHtml}
|
|
54
|
+
</div>
|
|
55
|
+
<div id="boot-loader-status">
|
|
56
|
+
<div id="boot-loader-status-fade"></div>
|
|
57
|
+
<div id="boot-loader-status-track">
|
|
58
|
+
${initialLine}
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
`;
|
|
63
|
+
|
|
64
|
+
// Evaluate the driver IIFE — it auto-promotes idle → state 1 (slow creep)
|
|
65
|
+
// and exposes `window.__bootLoader.{status, progress, dismiss}` globally.
|
|
66
|
+
const driverEl = document.createElement('script');
|
|
67
|
+
driverEl.textContent = bootLoaderScript;
|
|
68
|
+
container.appendChild(driverEl);
|
|
69
|
+
|
|
70
|
+
return () => {
|
|
71
|
+
try {
|
|
72
|
+
window.__bootLoader?.dismiss();
|
|
73
|
+
} catch {
|
|
74
|
+
// Driver removes its own DOM — swallow errors from idempotent retries.
|
|
75
|
+
}
|
|
76
|
+
delete window.__bootLoader;
|
|
77
|
+
container.innerHTML = '';
|
|
78
|
+
};
|
|
79
|
+
}, [initialStatus, markSvg]);
|
|
80
|
+
|
|
81
|
+
return (
|
|
82
|
+
<>
|
|
83
|
+
<style>{bootLoaderCss}</style>
|
|
84
|
+
<div ref={containerRef} />
|
|
85
|
+
</>
|
|
86
|
+
);
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
const escapeHtml = (text: string): string =>
|
|
90
|
+
text.replace(/[&<>"']/g, (ch) => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' })[ch]!);
|
|
91
|
+
|
|
92
|
+
// Inlined snapshot of `packages/ui/brand/assets/icons/composer-icon.svg` —
|
|
93
|
+
// keeps storybook self-contained (production pipes the same file in from
|
|
94
|
+
// vite.config.ts via the plugin's `markSvg` option) while previewing the
|
|
95
|
+
// real brand palette the loader will render in production.
|
|
96
|
+
const PLACEHOLDER_MARK = `
|
|
97
|
+
<svg viewBox="0 0 256 256" xmlns="http://www.w3.org/2000/svg" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
|
98
|
+
<g transform="matrix(0.969697,0,0,1,-570.182,0)">
|
|
99
|
+
<rect x="588" y="0" width="264" height="256" style="fill:none;"/>
|
|
100
|
+
<g transform="matrix(0.917198,0,0,1,-223.93,-876)">
|
|
101
|
+
<path d="M1065.83,1064L1029.14,1064C991.913,1064 961.684,1037.12 961.684,1004C961.684,971.197 991.282,944.542 1028.02,944.008L1028.02,944L1047.85,944L1039.21,968L1029.14,968C1006.79,968 988.669,984.118 988.669,1004C988.669,1023.87 1006.81,1040 1029.14,1040C1029.38,1040 1029.62,1040 1029.85,1040L1029.85,1040L1074.47,1040L1065.83,1064ZM1083.11,1040L1083.11,1040L1083.11,1064L1083.11,1064L1083.11,1040Z" style="fill:rgb(1,122,183);"/>
|
|
102
|
+
</g>
|
|
103
|
+
<path d="M761.579,164L720,164C699.51,164 682.875,147.869 682.875,128C682.875,108.452 698.942,92.543 718.969,92.014L718.969,92L729.238,92L721.317,116L720,116C713.165,116 707.625,121.373 707.625,128C707.625,134.623 713.17,140 720,140C720.072,140 720.144,139.999 720.216,139.998L720.216,140L769.5,140L761.579,164Z" style="fill:rgb(6,197,253);"/>
|
|
104
|
+
<path d="M745.738,212L720.025,212L720,212C672.202,212 633.389,174.377 633.375,128.024C633.361,81.958 671.591,44.542 718.969,44.006L718.969,44L719.975,44L745.079,44L737.159,68L719.982,68C685.809,68.01 658.115,94.88 658.125,128.017C658.135,161.126 685.858,188 720,188L720.018,188C720.378,188 720.738,187.997 721.098,187.991L721.098,188L753.659,188L745.738,212Z" style="fill:rgb(10,75,105);"/>
|
|
105
|
+
<g transform="matrix(1.03125,0,0,1,588,0)">
|
|
106
|
+
<path d="M128,236C68.393,236 20,187.607 20,128C20,68.353 68.353,20 128,20L160,20L152.319,44L128,44C81.608,44 44,81.608 44,128C44,174.361 81.639,212 128,212C127.756,212.004 127.878,212.004 128,212.003C128.122,212.002 128.244,212 128,212L152.958,212L145.277,236L128,236ZM128,236C128.628,236 127.372,236.011 128,236Z" style="fill:rgb(5,40,61);"/>
|
|
107
|
+
</g>
|
|
108
|
+
</g>
|
|
109
|
+
</svg>
|
|
110
|
+
`;
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* Approximate plugin count used by the simulation. Hardcoded here to keep the
|
|
114
|
+
* storybook self-contained — the production count comes from
|
|
115
|
+
* `composer-app/src/plugin-defs.tsx`'s dynamic-import list.
|
|
116
|
+
*/
|
|
117
|
+
const STORY_PLUGIN_COUNT = 80;
|
|
118
|
+
|
|
119
|
+
/** Tick interval for the determinate-progress simulation, in ms. */
|
|
120
|
+
const STORY_TICK_MS = 50;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Story controls — emits real `__bootLoader.status(...)` and `progress(...)`
|
|
124
|
+
* calls into the running driver script, which then drives the visible DOM.
|
|
125
|
+
* No React state shadow of the loader's progress; the driver is the source
|
|
126
|
+
* of truth.
|
|
127
|
+
*/
|
|
128
|
+
type SimRunningState = 'idle' | 'creep' | 'progress' | 'done';
|
|
129
|
+
|
|
130
|
+
const useBootLoaderDriver = ({ withHandoff = false }: { withHandoff?: boolean } = {}) => {
|
|
131
|
+
const [running, setRunning] = useState<SimRunningState>('creep');
|
|
132
|
+
const [stage, setStage] = useState(0);
|
|
133
|
+
|
|
134
|
+
// `creep` state — driver auto-creeps; the story emits a sequence of
|
|
135
|
+
// status messages so the appended-log behaviour is observable.
|
|
136
|
+
useEffect(() => {
|
|
137
|
+
if (running !== 'creep') {
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
const phases = ['Loading framework…', 'Reading configuration…', 'Starting services…'];
|
|
141
|
+
let index = 0;
|
|
142
|
+
const handle = setInterval(() => {
|
|
143
|
+
window.__bootLoader?.status({ humanized: phases[index] });
|
|
144
|
+
index += 1;
|
|
145
|
+
if (index >= phases.length) {
|
|
146
|
+
clearInterval(handle);
|
|
147
|
+
}
|
|
148
|
+
}, 600);
|
|
149
|
+
return () => clearInterval(handle);
|
|
150
|
+
}, [running]);
|
|
151
|
+
|
|
152
|
+
// `progress` state — random-walk through the plugin count, calling the
|
|
153
|
+
// real `__bootLoader.progress(...)` so the driver's no-regress + creep
|
|
154
|
+
// logic runs as it does in production.
|
|
155
|
+
useEffect(() => {
|
|
156
|
+
if (running !== 'progress') {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
let loaded = 0;
|
|
160
|
+
const handle = setInterval(() => {
|
|
161
|
+
loaded += Math.abs(Math.random()) * 1.5;
|
|
162
|
+
const fraction = Math.min(1, loaded / STORY_PLUGIN_COUNT);
|
|
163
|
+
window.__bootLoader?.progress(fraction);
|
|
164
|
+
// Range-bearing payload — replaces the current line in place
|
|
165
|
+
// instead of appending one entry per plugin tick.
|
|
166
|
+
window.__bootLoader?.status({
|
|
167
|
+
humanized: 'Loading plugins',
|
|
168
|
+
range: { index: Math.round(loaded), total: STORY_PLUGIN_COUNT },
|
|
169
|
+
});
|
|
170
|
+
if (loaded >= STORY_PLUGIN_COUNT) {
|
|
171
|
+
clearInterval(handle);
|
|
172
|
+
window.__bootLoader?.status({ humanized: 'Starting Composer…' });
|
|
173
|
+
setRunning('done');
|
|
174
|
+
}
|
|
175
|
+
}, STORY_TICK_MS);
|
|
176
|
+
return () => clearInterval(handle);
|
|
177
|
+
}, [running]);
|
|
178
|
+
|
|
179
|
+
// Handoff phase — fade the placeholder in/out once the driver hits 100%.
|
|
180
|
+
useEffect(() => {
|
|
181
|
+
if (!withHandoff || running !== 'done') {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
const handles: ReturnType<typeof setTimeout>[] = [];
|
|
185
|
+
handles.push(setTimeout(() => setStage(1), 200));
|
|
186
|
+
handles.push(setTimeout(() => setStage(2), 2_000));
|
|
187
|
+
return () => handles.forEach(clearTimeout);
|
|
188
|
+
}, [running, withHandoff]);
|
|
189
|
+
|
|
190
|
+
const advance = () => {
|
|
191
|
+
if (running === 'creep') {
|
|
192
|
+
setRunning('progress');
|
|
193
|
+
} else {
|
|
194
|
+
setRunning('creep');
|
|
195
|
+
setStage(0);
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
return { running, stage, advance };
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
const SimToolbar = ({ running, advance }: { running: SimRunningState; advance: () => void }) => {
|
|
203
|
+
const button =
|
|
204
|
+
running === 'creep'
|
|
205
|
+
? { icon: 'ph--play--regular', label: 'Start progress' }
|
|
206
|
+
: { icon: 'ph--arrow-counter-clockwise--regular', label: 'Reset' };
|
|
207
|
+
return (
|
|
208
|
+
<Toolbar.Root classNames='relative z-20'>
|
|
209
|
+
<Toolbar.IconButton icon={button.icon} label={button.label} iconOnly onClick={advance} />
|
|
210
|
+
<Toolbar.Text>{running}</Toolbar.Text>
|
|
211
|
+
</Toolbar.Root>
|
|
212
|
+
);
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
const DefaultStory = () => {
|
|
216
|
+
const { running, advance } = useBootLoaderDriver();
|
|
217
|
+
return (
|
|
218
|
+
<>
|
|
219
|
+
<SimToolbar running={running} advance={advance} />
|
|
220
|
+
<BootLoaderHost markSvg={PLACEHOLDER_MARK} />
|
|
221
|
+
</>
|
|
222
|
+
);
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
const meta: Meta<typeof BootLoaderHost> = {
|
|
226
|
+
title: 'sdk/app-framework/vite-plugin/BootLoader',
|
|
227
|
+
component: BootLoaderHost,
|
|
228
|
+
render: DefaultStory,
|
|
229
|
+
decorators: [withTheme({})],
|
|
230
|
+
parameters: {
|
|
231
|
+
layout: 'fullscreen',
|
|
232
|
+
},
|
|
233
|
+
argTypes: {
|
|
234
|
+
initialStatus: { control: 'text' },
|
|
235
|
+
markSvg: { control: 'text' },
|
|
236
|
+
},
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
export default meta;
|
|
240
|
+
|
|
241
|
+
type Story = StoryObj<typeof BootLoaderHost>;
|
|
242
|
+
|
|
243
|
+
export const Default: Story = {};
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Renders the React `Placeholder` from `@dxos/app-framework/ui` on its own —
|
|
247
|
+
* useful for eyeballing the handoff target the boot loader dismisses to.
|
|
248
|
+
*/
|
|
249
|
+
export const PlaceholderHandoff: Story = {
|
|
250
|
+
name: 'Placeholder',
|
|
251
|
+
render: () => <Placeholder stage={1} logo={(logoProps) => <Composer {...logoProps} />} />,
|
|
252
|
+
};
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* End-to-end handoff sim: the driver ticks 0 → 100% then the host calls
|
|
256
|
+
* `dismiss()` and the underlying `Placeholder` fades the mark in / out,
|
|
257
|
+
* mirroring the production sequence.
|
|
258
|
+
*/
|
|
259
|
+
export const Handoff: Story = {
|
|
260
|
+
render: () => {
|
|
261
|
+
const { running, stage, advance } = useBootLoaderDriver({ withHandoff: true });
|
|
262
|
+
return (
|
|
263
|
+
<>
|
|
264
|
+
<SimToolbar running={running} advance={advance} />
|
|
265
|
+
<Placeholder stage={stage} logo={(logoProps) => <Composer {...logoProps} />} />
|
|
266
|
+
{stage < 1 && <BootLoaderHost markSvg={PLACEHOLDER_MARK} />}
|
|
267
|
+
</>
|
|
268
|
+
);
|
|
269
|
+
},
|
|
270
|
+
};
|