@dxos/app-framework 0.8.4-main.fd6878d → 0.8.4-staging.60fe92afc8
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 +9 -0
- package/.storybook/preview.mts +8 -0
- package/LICENSE +102 -5
- package/README.md +1 -1
- package/dist/lib/browser/capability-BOPAKKWG.mjs +35 -0
- package/dist/lib/browser/capability-BOPAKKWG.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-CO3XLNUX.mjs +95 -0
- package/dist/lib/browser/chunk-CO3XLNUX.mjs.map +7 -0
- package/dist/lib/browser/chunk-DC3WRPBV.mjs +227 -0
- package/dist/lib/browser/chunk-DC3WRPBV.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-HFLKXMT7.mjs +587 -0
- package/dist/lib/browser/chunk-HFLKXMT7.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-KZUDO43J.mjs +422 -0
- package/dist/lib/browser/chunk-KZUDO43J.mjs.map +7 -0
- package/dist/lib/browser/chunk-Q2GLJTVV.mjs +12 -0
- package/dist/lib/browser/chunk-Q2GLJTVV.mjs.map +7 -0
- package/dist/lib/browser/chunk-SYXIYT6T.mjs +143 -0
- package/dist/lib/browser/chunk-SYXIYT6T.mjs.map +7 -0
- package/dist/lib/browser/chunk-XHS5KDNX.mjs +1471 -0
- package/dist/lib/browser/chunk-XHS5KDNX.mjs.map +7 -0
- package/dist/lib/browser/chunk-Y66ELD4U.mjs +476 -0
- package/dist/lib/browser/chunk-Y66ELD4U.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 +41 -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 -157
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/process-manager-capability-GXNUO7AR.mjs +132 -0
- package/dist/lib/browser/process-manager-capability-GXNUO7AR.mjs.map +7 -0
- package/dist/lib/browser/testing/index.mjs +321 -56
- 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 +52 -0
- package/dist/lib/browser/ui/index.mjs.map +7 -0
- package/dist/lib/node-esm/capability-KZWRTX7R.mjs +36 -0
- package/dist/lib/node-esm/capability-KZWRTX7R.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-A5CHGAZE.mjs +588 -0
- package/dist/lib/node-esm/chunk-A5CHGAZE.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-COHOWGGJ.mjs +144 -0
- package/dist/lib/node-esm/chunk-COHOWGGJ.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-FPW45EZH.mjs +14 -0
- package/dist/lib/node-esm/chunk-FPW45EZH.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-FSVGKTF6.mjs +477 -0
- package/dist/lib/node-esm/chunk-FSVGKTF6.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-NULBHQYS.mjs +96 -0
- package/dist/lib/node-esm/chunk-NULBHQYS.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-SX5NVETP.mjs +1472 -0
- package/dist/lib/node-esm/chunk-SX5NVETP.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-XGBUKRCK.mjs +423 -0
- package/dist/lib/node-esm/chunk-XGBUKRCK.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-XIGPWXCQ.mjs +228 -0
- package/dist/lib/node-esm/chunk-XIGPWXCQ.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 +42 -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 -157
- 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-TX5TA6YN.mjs +133 -0
- package/dist/lib/node-esm/process-manager-capability-TX5TA6YN.mjs.map +7 -0
- package/dist/lib/node-esm/testing/index.mjs +321 -56
- 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 +53 -0
- package/dist/lib/node-esm/ui/index.mjs.map +7 -0
- package/dist/plugin/node-esm/index.mjs +977 -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 -195
- package/dist/types/src/common/capabilities.d.ts.map +1 -1
- package/dist/types/src/common/index.d.ts +3 -8
- package/dist/types/src/common/index.d.ts.map +1 -1
- 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 +52 -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 +308 -41
- 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 +32 -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/idb-key-value-store.d.ts +10 -0
- package/dist/types/src/plugin-process-manager/idb-key-value-store.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 +3 -0
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/operationCapture.d.ts +64 -0
- package/dist/types/src/testing/operationCapture.d.ts.map +1 -0
- 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 +9 -10
- package/dist/types/src/testing/withPluginManager.d.ts.map +1 -1
- package/dist/types/src/testing/withPluginManager.stories.d.ts +9 -3
- package/dist/types/src/testing/withPluginManager.stories.d.ts.map +1 -1
- package/dist/types/src/ui/components/App/App.d.ts +41 -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/PluginManager/PluginManagerContext.stories.d.ts +13 -0
- 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/ui/components/Surface/SurfaceComponent.stories.d.ts +14 -0
- 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 +4 -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 +80 -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/ui/hooks/useLoading.d.ts +18 -0
- 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/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 +59 -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 +26 -3
- package/package.json +125 -55
- package/src/cli/cli.ts +102 -0
- package/src/{playground/layout → cli}/index.ts +1 -1
- package/src/common/activation-events.ts +39 -0
- package/src/{playground/debug/index.ts → common/annotations.ts} +0 -2
- package/src/common/capabilities.ts +287 -184
- package/src/common/index.ts +3 -8
- 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 +154 -0
- package/src/core/capability-manager.ts +213 -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 +1929 -0
- package/src/core/plugin-manager.ts +1696 -0
- package/src/core/plugin-manifest.test.ts +75 -0
- package/src/core/plugin-manifest.ts +134 -0
- package/src/core/plugin.ts +458 -46
- package/src/core/registry.ts +163 -0
- package/src/core/url-loader.test.ts +222 -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 +353 -0
- package/src/plugin-process-manager/history/history-tracker.ts +144 -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 +74 -0
- package/src/plugin-process-manager/history/undo-registry.ts +54 -0
- package/src/plugin-process-manager/idb-key-value-store.ts +64 -0
- package/src/plugin-process-manager/index.ts +6 -0
- package/src/plugin-process-manager/meta.ts +16 -0
- package/src/plugin-process-manager/process-manager-capability.ts +178 -0
- package/src/plugin-process-manager/testing.ts +156 -0
- package/src/testing/harness.ts +247 -0
- package/src/testing/index.ts +3 -0
- package/src/testing/operationCapture.ts +144 -0
- package/src/testing/react.test.tsx +50 -0
- package/src/testing/react.tsx +113 -0
- package/src/testing/service.ts +52 -0
- package/src/testing/withPluginManager.stories.tsx +15 -13
- package/src/testing/withPluginManager.tsx +81 -56
- package/src/ui/components/App/App.stories.tsx +84 -0
- package/src/ui/components/App/App.tsx +144 -0
- package/src/{playground/logger → ui/components/App}/index.ts +1 -1
- package/src/ui/components/PluginManager/PluginManagerContext.stories.tsx +179 -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 +290 -0
- package/src/ui/components/index.ts +7 -0
- package/src/ui/hooks/index.ts +10 -0
- package/src/ui/hooks/useApp.test.tsx +161 -0
- package/src/ui/hooks/useApp.tsx +404 -0
- package/src/ui/hooks/useCapabilities.ts +68 -0
- package/src/ui/hooks/useLoading.tsx +76 -0
- 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.solid-stories.tsx +198 -0
- package/src/vite-plugin/boot-loader/index.ts +5 -0
- package/src/vite-plugin/boot-loader/loader-app/Loader.tsx +166 -0
- package/src/vite-plugin/boot-loader/loader-app/boot-loader.css +311 -0
- package/src/vite-plugin/boot-loader/loader-app/bridge.ts +25 -0
- package/src/vite-plugin/boot-loader/loader-app/entry.tsx +21 -0
- package/src/vite-plugin/boot-loader/loader-app/mount.tsx +70 -0
- package/src/vite-plugin/boot-loader/loader-app/store.test.ts +137 -0
- package/src/vite-plugin/boot-loader/loader-app/store.ts +149 -0
- package/src/vite-plugin/boot-loader/loader-app/tsconfig.json +11 -0
- package/src/vite-plugin/boot-loader/loader-app/types.ts +78 -0
- package/src/vite-plugin/boot-loader/loader.ts +204 -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 +55 -0
- package/src/vite-plugin/manifest.ts +63 -0
- package/src/vite-plugin/packages.ts +187 -0
- package/tsconfig.json +31 -24
- package/tsconfig.node.json +2 -4
- package/typedoc.json +2 -4
- package/vitest.config.ts +8 -6
- package/.swc/plugins/v7_linux_x86_64_13.0.0/c614d7475354583212fbd7669acbae95b9832c305bf51bdaabe2e6de05abb6bf +0 -0
- package/.swc/plugins/v7_linux_x86_64_13.0.0/fce1bdb8e20a094e4af08bad09cc81497ed0e2e7c51223b07d371063cca18429 +0 -0
- package/dist/lib/browser/app-graph-builder-MOVKFH3J.mjs +0 -137
- package/dist/lib/browser/app-graph-builder-MOVKFH3J.mjs.map +0 -7
- package/dist/lib/browser/chunk-NKCIDYDI.mjs +0 -1598
- package/dist/lib/browser/chunk-NKCIDYDI.mjs.map +0 -7
- package/dist/lib/browser/chunk-ORWHM7CO.mjs +0 -32
- package/dist/lib/browser/chunk-ORWHM7CO.mjs.map +0 -7
- package/dist/lib/browser/chunk-OSBZFKMO.mjs +0 -428
- package/dist/lib/browser/chunk-OSBZFKMO.mjs.map +0 -7
- package/dist/lib/browser/intent-dispatcher-FTTJLVGN.mjs +0 -11
- package/dist/lib/browser/intent-resolver-ZCGEAG3E.mjs +0 -39
- package/dist/lib/browser/intent-resolver-ZCGEAG3E.mjs.map +0 -7
- package/dist/lib/browser/store-3QB6Q2BC.mjs +0 -30
- package/dist/lib/browser/store-3QB6Q2BC.mjs.map +0 -7
- package/dist/lib/browser/worker.mjs +0 -79
- package/dist/lib/node-esm/app-graph-builder-ODE4B5GT.mjs +0 -138
- package/dist/lib/node-esm/app-graph-builder-ODE4B5GT.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-UMZQERLE.mjs +0 -34
- package/dist/lib/node-esm/chunk-UMZQERLE.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-WU3QN5B6.mjs +0 -429
- package/dist/lib/node-esm/chunk-WU3QN5B6.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-YEN7NKTF.mjs +0 -1600
- package/dist/lib/node-esm/chunk-YEN7NKTF.mjs.map +0 -7
- package/dist/lib/node-esm/intent-dispatcher-YQIQ55LJ.mjs +0 -12
- package/dist/lib/node-esm/intent-resolver-KG27L7EQ.mjs +0 -40
- package/dist/lib/node-esm/intent-resolver-KG27L7EQ.mjs.map +0 -7
- package/dist/lib/node-esm/store-TIJAVO3D.mjs +0 -31
- package/dist/lib/node-esm/store-TIJAVO3D.mjs.map +0 -7
- package/dist/lib/node-esm/worker.mjs +0 -80
- package/dist/types/src/App.d.ts +0 -43
- package/dist/types/src/App.d.ts.map +0 -1
- package/dist/types/src/common/collaboration.d.ts +0 -19
- 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 -281
- package/dist/types/src/common/layout.d.ts.map +0 -1
- package/dist/types/src/common/surface.d.ts +0 -65
- package/dist/types/src/common/surface.d.ts.map +0 -1
- package/dist/types/src/core/capabilities.d.ts +0 -114
- 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 +0 -10
- 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 -38
- 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 -5
- 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-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 -27
- 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/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 -10
- 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 -16
- 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/App.tsx +0 -284
- package/src/common/collaboration.ts +0 -21
- 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 -278
- package/src/common/surface.ts +0 -86
- package/src/core/capabilities.test.ts +0 -136
- package/src/core/capabilities.ts +0 -255
- 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 -17
- 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 -23
- package/src/playground/layout/Layout.tsx +0 -33
- package/src/playground/layout/plugin.ts +0 -17
- package/src/playground/logger/Toolbar.tsx +0 -30
- package/src/playground/logger/plugin.ts +0 -37
- package/src/playground/logger/schema.ts +0 -12
- package/src/playground/playground.stories.tsx +0 -43
- package/src/plugin-intent/IntentPlugin.ts +0 -21
- package/src/plugin-intent/actions.ts +0 -33
- package/src/plugin-intent/errors.ts +0 -39
- package/src/plugin-intent/index.ts +0 -8
- 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-settings/SettingsPlugin.ts +0 -36
- package/src/plugin-settings/actions.ts +0 -29
- package/src/plugin-settings/app-graph-builder.ts +0 -158
- package/src/plugin-settings/index.ts +0 -6
- package/src/plugin-settings/intent-resolver.ts +0 -35
- 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 -97
- package/src/react/Surface.tsx +0 -78
- 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-FTTJLVGN.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-YQIQ55LJ.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
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { useEffect, useRef, useState } from 'react';
|
|
6
|
+
|
|
7
|
+
export enum LoadingState {
|
|
8
|
+
Loading = 0,
|
|
9
|
+
FadeIn = 1,
|
|
10
|
+
FadeOut = 2,
|
|
11
|
+
Done = 3,
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* To avoid "flashing" the placeholder, we wait a period of time before starting the loading animation.
|
|
16
|
+
* If loading completes during this time the placehoder is not shown, otherwise is it displayed for a minimum period of time.
|
|
17
|
+
*
|
|
18
|
+
* States:
|
|
19
|
+
* 0: Loading - Wait for a period of time before starting the loading animation.
|
|
20
|
+
* 1: Fade-in - Display a loading animation.
|
|
21
|
+
* 2: Fade-out - Fade out the loading animation.
|
|
22
|
+
* 3: Done - Remove the placeholder.
|
|
23
|
+
*/
|
|
24
|
+
export const useLoading = (ready: boolean, debounce = 0) => {
|
|
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
|
+
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
if (!debounce) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const i = setInterval(() => {
|
|
40
|
+
setStage((stage) => {
|
|
41
|
+
const isReady = readyRef.current;
|
|
42
|
+
switch (stage) {
|
|
43
|
+
case LoadingState.Loading: {
|
|
44
|
+
if (!isReady) {
|
|
45
|
+
return LoadingState.FadeIn;
|
|
46
|
+
}
|
|
47
|
+
clearInterval(i);
|
|
48
|
+
return LoadingState.Done;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
case LoadingState.FadeIn: {
|
|
52
|
+
if (isReady) {
|
|
53
|
+
return LoadingState.FadeOut;
|
|
54
|
+
}
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
case LoadingState.FadeOut: {
|
|
59
|
+
clearInterval(i);
|
|
60
|
+
return LoadingState.Done;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return stage;
|
|
65
|
+
});
|
|
66
|
+
}, debounce);
|
|
67
|
+
|
|
68
|
+
return () => clearInterval(i);
|
|
69
|
+
}, [debounce]);
|
|
70
|
+
|
|
71
|
+
if (!debounce) {
|
|
72
|
+
return ready ? LoadingState.Done : LoadingState.Loading;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
return stage;
|
|
76
|
+
};
|
|
@@ -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 { EffectEx } 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 EffectEx.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,198 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { createSignal, onCleanup, onMount } from 'solid-js';
|
|
6
|
+
import { type Meta, type StoryObj } from 'storybook-solidjs-vite';
|
|
7
|
+
|
|
8
|
+
import bootLoaderCss from './loader-app/boot-loader.css?raw';
|
|
9
|
+
import { mountLoader } from './loader-app/mount';
|
|
10
|
+
|
|
11
|
+
//
|
|
12
|
+
// Development surface for the boot loader. Mounts the *real* Solid `Loader`
|
|
13
|
+
// (via `mountLoader` — the same entry the inlined production bundle runs) into a
|
|
14
|
+
// `#boot-loader` backdrop, then drives it through `window.__bootLoader` exactly
|
|
15
|
+
// as the host app does. There is no reconstruction of the loader DOM, so the
|
|
16
|
+
// story and production cannot drift. Iterate the loader's look here with HMR.
|
|
17
|
+
//
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Inlined snapshot of `packages/ui/brand/assets/icons/composer-icon.svg` — keeps
|
|
21
|
+
* the story self-contained (production pipes the same file in via the plugin's
|
|
22
|
+
* `markSvg` option) while previewing the real brand palette.
|
|
23
|
+
*/
|
|
24
|
+
const COMPOSER_MARK = `
|
|
25
|
+
<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;">
|
|
26
|
+
<g transform="matrix(0.969697,0,0,1,-570.182,0)">
|
|
27
|
+
<rect x="588" y="0" width="264" height="256" style="fill:none;"/>
|
|
28
|
+
<g transform="matrix(0.917198,0,0,1,-223.93,-876)">
|
|
29
|
+
<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);"/>
|
|
30
|
+
</g>
|
|
31
|
+
<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);"/>
|
|
32
|
+
<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);"/>
|
|
33
|
+
<g transform="matrix(1.03125,0,0,1,588,0)">
|
|
34
|
+
<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);"/>
|
|
35
|
+
</g>
|
|
36
|
+
</g>
|
|
37
|
+
</svg>
|
|
38
|
+
`;
|
|
39
|
+
|
|
40
|
+
/** Approximate plugin count for the simulation (production count is dynamic). */
|
|
41
|
+
const STORY_PLUGIN_COUNT = 80;
|
|
42
|
+
/** Tick interval for the determinate-progress simulation, in ms. */
|
|
43
|
+
const STORY_TICK_MS = 50;
|
|
44
|
+
|
|
45
|
+
type SimState = 'creep' | 'progress' | 'done';
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Harness component: owns the `#boot-loader` backdrop, mounts the real loader,
|
|
49
|
+
* and emits `__bootLoader` calls to simulate the host. The driver is the source
|
|
50
|
+
* of truth — there is no React/Solid shadow of its progress.
|
|
51
|
+
*/
|
|
52
|
+
const LoaderHarness = () => {
|
|
53
|
+
let container!: HTMLDivElement;
|
|
54
|
+
let styleEl: HTMLStyleElement | undefined;
|
|
55
|
+
let dispose: (() => void) | undefined;
|
|
56
|
+
let timer: ReturnType<typeof setInterval> | undefined;
|
|
57
|
+
const [sim, setSim] = createSignal<SimState>('creep');
|
|
58
|
+
|
|
59
|
+
const teardown = () => {
|
|
60
|
+
if (timer != null) {
|
|
61
|
+
clearInterval(timer);
|
|
62
|
+
timer = undefined;
|
|
63
|
+
}
|
|
64
|
+
dispose?.();
|
|
65
|
+
dispose = undefined;
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const mount = () => {
|
|
69
|
+
teardown();
|
|
70
|
+
// The loader treats its host element as the `#boot-loader` backdrop (styled
|
|
71
|
+
// by the inline CSS) and renders the disc + status into it — mirroring the
|
|
72
|
+
// static markup the plugin injects in production.
|
|
73
|
+
const backdrop = document.createElement('div');
|
|
74
|
+
backdrop.id = 'boot-loader';
|
|
75
|
+
backdrop.setAttribute('role', 'status');
|
|
76
|
+
backdrop.setAttribute('aria-live', 'polite');
|
|
77
|
+
backdrop.setAttribute('aria-label', 'Initializing');
|
|
78
|
+
container.appendChild(backdrop);
|
|
79
|
+
dispose = mountLoader(backdrop, { markSvg: COMPOSER_MARK, status: 'Loading…' });
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const runCreepMessages = () => {
|
|
83
|
+
const phases = ['Loading framework…', 'Reading configuration…', 'Starting services…'];
|
|
84
|
+
let index = 0;
|
|
85
|
+
timer = setInterval(() => {
|
|
86
|
+
window.__bootLoader?.status({ humanized: phases[index] });
|
|
87
|
+
index += 1;
|
|
88
|
+
if (index >= phases.length && timer != null) {
|
|
89
|
+
clearInterval(timer);
|
|
90
|
+
timer = undefined;
|
|
91
|
+
}
|
|
92
|
+
}, 600);
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const runProgress = () => {
|
|
96
|
+
let loaded = 0;
|
|
97
|
+
timer = setInterval(() => {
|
|
98
|
+
loaded += Math.min(1.5, 0.4 + (loaded % 3) * 0.3);
|
|
99
|
+
const fraction = Math.min(1, loaded / STORY_PLUGIN_COUNT);
|
|
100
|
+
window.__bootLoader?.progress(fraction);
|
|
101
|
+
window.__bootLoader?.status({
|
|
102
|
+
humanized: 'Loading plugins',
|
|
103
|
+
range: { index: Math.round(loaded), total: STORY_PLUGIN_COUNT },
|
|
104
|
+
});
|
|
105
|
+
if (loaded >= STORY_PLUGIN_COUNT && timer != null) {
|
|
106
|
+
clearInterval(timer);
|
|
107
|
+
timer = undefined;
|
|
108
|
+
window.__bootLoader?.status({ humanized: 'Starting Composer…' });
|
|
109
|
+
setSim('done');
|
|
110
|
+
}
|
|
111
|
+
}, STORY_TICK_MS);
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
const advance = () => {
|
|
115
|
+
if (sim() === 'creep') {
|
|
116
|
+
setSim('progress');
|
|
117
|
+
if (timer != null) {
|
|
118
|
+
clearInterval(timer);
|
|
119
|
+
timer = undefined;
|
|
120
|
+
}
|
|
121
|
+
runProgress();
|
|
122
|
+
} else if (sim() === 'progress' || sim() === 'done') {
|
|
123
|
+
// Play the dismissal outro, then re-mount for another run.
|
|
124
|
+
window.__bootLoader?.ready();
|
|
125
|
+
setSim('creep');
|
|
126
|
+
setTimeout(() => {
|
|
127
|
+
mount();
|
|
128
|
+
runCreepMessages();
|
|
129
|
+
}, 700);
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
onMount(() => {
|
|
134
|
+
styleEl = document.createElement('style');
|
|
135
|
+
styleEl.textContent = bootLoaderCss;
|
|
136
|
+
document.head.appendChild(styleEl);
|
|
137
|
+
mount();
|
|
138
|
+
runCreepMessages();
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
onCleanup(() => {
|
|
142
|
+
teardown();
|
|
143
|
+
styleEl?.remove();
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
return (
|
|
147
|
+
<>
|
|
148
|
+
{/* Float the controls above the loader's `z-index: 10` fixed backdrop. */}
|
|
149
|
+
<div
|
|
150
|
+
style={{
|
|
151
|
+
position: 'fixed',
|
|
152
|
+
top: '12px',
|
|
153
|
+
left: '12px',
|
|
154
|
+
'z-index': 9999,
|
|
155
|
+
display: 'flex',
|
|
156
|
+
gap: '12px',
|
|
157
|
+
'align-items': 'center',
|
|
158
|
+
}}
|
|
159
|
+
>
|
|
160
|
+
<button
|
|
161
|
+
type='button'
|
|
162
|
+
onClick={advance}
|
|
163
|
+
style={{
|
|
164
|
+
padding: '6px 14px',
|
|
165
|
+
'font-size': '13px',
|
|
166
|
+
'font-weight': '600',
|
|
167
|
+
color: '#fff',
|
|
168
|
+
background: '#017ab7',
|
|
169
|
+
border: 'none',
|
|
170
|
+
'border-radius': '6px',
|
|
171
|
+
cursor: 'pointer',
|
|
172
|
+
'box-shadow': '0 1px 3px rgba(0,0,0,0.25)',
|
|
173
|
+
}}
|
|
174
|
+
>
|
|
175
|
+
{sim() === 'creep' ? 'Start progress' : 'Finish + reset'}
|
|
176
|
+
</button>
|
|
177
|
+
<span style={{ 'font-family': 'ui-sans-serif, system-ui, sans-serif', 'font-size': '12px', color: '#888' }}>
|
|
178
|
+
{sim()}
|
|
179
|
+
</span>
|
|
180
|
+
</div>
|
|
181
|
+
<div ref={container as any} />
|
|
182
|
+
</>
|
|
183
|
+
);
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
const meta: Meta = {
|
|
187
|
+
title: 'sdk/app-framework/vite-plugin/BootLoader',
|
|
188
|
+
render: () => <LoaderHarness />,
|
|
189
|
+
parameters: {
|
|
190
|
+
layout: 'fullscreen',
|
|
191
|
+
},
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
export default meta;
|
|
195
|
+
|
|
196
|
+
type Story = StoryObj;
|
|
197
|
+
|
|
198
|
+
export const Default: Story = {};
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type Component, For, createEffect, createSignal, onCleanup, onMount } from 'solid-js';
|
|
6
|
+
|
|
7
|
+
import { type LoaderStore } from './store';
|
|
8
|
+
|
|
9
|
+
// Ring geometry in the SVG's `0 0 100 100` viewBox. The radius leaves a couple
|
|
10
|
+
// of units of padding so the stroke, its round cap, and the end marker aren't
|
|
11
|
+
// clipped at the viewBox edge.
|
|
12
|
+
const RING_RADIUS = 48;
|
|
13
|
+
const RING_CENTER = 50;
|
|
14
|
+
// Leading-edge marker: a small dot drawn at the arc's head in an unmasked layer.
|
|
15
|
+
const MARKER_RADIUS = 1; // viewBox units → ~3.8px on the 384px disc
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Read an element's *current animated* translateY (px) from its live transform
|
|
19
|
+
* matrix — the interpolated value mid-transition, not the last-written property.
|
|
20
|
+
* Used by the status FLIP so successive appends chain off the in-flight position
|
|
21
|
+
* instead of yanking the track back to a fixed invert target.
|
|
22
|
+
*/
|
|
23
|
+
const readTranslateY = (element: HTMLElement): number => {
|
|
24
|
+
const computed = getComputedStyle(element).transform;
|
|
25
|
+
if (!computed || computed === 'none') {
|
|
26
|
+
return 0;
|
|
27
|
+
}
|
|
28
|
+
const match = computed.match(/matrix.*\(([^)]+)\)/);
|
|
29
|
+
if (!match) {
|
|
30
|
+
return 0;
|
|
31
|
+
}
|
|
32
|
+
const values = match[1].split(',');
|
|
33
|
+
// 2D `matrix(a, b, c, d, tx, ty)` → ty at index 5; 3D `matrix3d(...)` → ty at 13.
|
|
34
|
+
if (values.length === 6) {
|
|
35
|
+
return Number.parseFloat(values[5]) || 0;
|
|
36
|
+
}
|
|
37
|
+
if (values.length === 16) {
|
|
38
|
+
return Number.parseFloat(values[13]) || 0;
|
|
39
|
+
}
|
|
40
|
+
return 0;
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export type LoaderProps = {
|
|
44
|
+
/** Reactive source of truth for progress, status lines, and lifecycle phase. */
|
|
45
|
+
store: LoaderStore;
|
|
46
|
+
/** Inline SVG markup for the brand mark rendered inside the ring. */
|
|
47
|
+
markSvg?: string;
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* The boot loader, authored as a single Solid component — the one source of
|
|
52
|
+
* truth for the loader DOM. `bootLoaderPlugin` bundles this (Solid runtime
|
|
53
|
+
* inlined) into `index.html`; the storybook mounts the very same component, so
|
|
54
|
+
* the two can no longer drift. The DOM structure, ids, and classes mirror
|
|
55
|
+
* `boot-loader.css`.
|
|
56
|
+
*
|
|
57
|
+
* The full-screen backdrop (`#boot-loader`) is injected as static markup so it
|
|
58
|
+
* paints from CSS before this bundle executes; this component renders the disc
|
|
59
|
+
* and status log *into* that backdrop. The dismissal outro (fading `#boot-loader`)
|
|
60
|
+
* and its teardown are owned by {@link mountLoader}, which has the host element.
|
|
61
|
+
*/
|
|
62
|
+
export const Loader: Component<LoaderProps> = (props) => {
|
|
63
|
+
let trackRef: HTMLDivElement | undefined;
|
|
64
|
+
let previousCount = props.store.lines().length;
|
|
65
|
+
|
|
66
|
+
// FLIP-style slide on each appended line: snap the track down by one
|
|
67
|
+
// line-height (chained off any in-flight translate) with no transition, force
|
|
68
|
+
// a reflow, then animate back to translateY(0) so the new entry rises from
|
|
69
|
+
// below the bottom-anchored viewport. Range ticks (length unchanged) skip it.
|
|
70
|
+
createEffect(() => {
|
|
71
|
+
const count = props.store.lines().length;
|
|
72
|
+
const track = trackRef;
|
|
73
|
+
if (track && count > previousCount) {
|
|
74
|
+
const currentY = readTranslateY(track);
|
|
75
|
+
const lineHeight = track.lastElementChild?.getBoundingClientRect().height ?? 0;
|
|
76
|
+
track.style.transition = 'none';
|
|
77
|
+
track.style.transform = `translateY(${currentY + lineHeight}px)`;
|
|
78
|
+
void track.offsetHeight;
|
|
79
|
+
track.style.transition = '';
|
|
80
|
+
track.style.transform = 'translateY(0)';
|
|
81
|
+
}
|
|
82
|
+
previousCount = count;
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
// Eased display progress. A `<path>`'s `d` can't be CSS-transitioned, so the
|
|
86
|
+
// arc would snap on every store tick; instead we ease a displayed value toward
|
|
87
|
+
// the store's progress with a requestAnimationFrame loop (~per-frame lerp) and
|
|
88
|
+
// recompute the path each frame. This restores the compositor-smooth growth
|
|
89
|
+
// the old `transition: stroke-dashoffset` gave, while keeping the path +
|
|
90
|
+
// `marker-end` (the marker rides the arc's recomputed end automatically).
|
|
91
|
+
const [shown, setShown] = createSignal(props.store.progress());
|
|
92
|
+
let raf: number | undefined;
|
|
93
|
+
const animate = () => {
|
|
94
|
+
const target = props.store.progress();
|
|
95
|
+
const current = shown();
|
|
96
|
+
// Snap when within a hair to settle; otherwise lerp ~18% of the gap/frame.
|
|
97
|
+
const next = Math.abs(target - current) < 0.05 ? target : current + (target - current) * 0.18;
|
|
98
|
+
if (next !== current) {
|
|
99
|
+
setShown(next);
|
|
100
|
+
}
|
|
101
|
+
raf = requestAnimationFrame(animate);
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
onMount(() => {
|
|
105
|
+
raf = requestAnimationFrame(animate);
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
onCleanup(() => {
|
|
109
|
+
if (raf != null) {
|
|
110
|
+
cancelAnimationFrame(raf);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
// Determinate ring as an SVG `<path>` arc: an anticlockwise sweep starting at
|
|
115
|
+
// 12 o'clock whose angle grows with the eased `shown()` progress. The sweep is
|
|
116
|
+
// capped just shy of a full turn so the single arc command never degenerates at
|
|
117
|
+
// 100%. The leading-edge dot is its `head` point, rendered separately (below) in
|
|
118
|
+
// an *unmasked* layer — drawing it via `marker-end` on this path would put it
|
|
119
|
+
// under the ring's conic fade mask, whose hard edge bisects the dot into a
|
|
120
|
+
// half-circle.
|
|
121
|
+
const arc = () => {
|
|
122
|
+
const fraction = Math.min(shown() / 100, 0.9999);
|
|
123
|
+
const sweep = fraction * 2 * Math.PI;
|
|
124
|
+
const start = -Math.PI / 2; // 12 o'clock
|
|
125
|
+
const end = start - sweep; // anticlockwise (decreasing angle)
|
|
126
|
+
const x0 = RING_CENTER + RING_RADIUS * Math.cos(start);
|
|
127
|
+
const y0 = RING_CENTER + RING_RADIUS * Math.sin(start);
|
|
128
|
+
const headX = RING_CENTER + RING_RADIUS * Math.cos(end);
|
|
129
|
+
const headY = RING_CENTER + RING_RADIUS * Math.sin(end);
|
|
130
|
+
const largeArc = sweep > Math.PI ? 1 : 0;
|
|
131
|
+
// sweep-flag 0 = anticlockwise (negative-angle) direction.
|
|
132
|
+
return { d: `M ${x0} ${y0} A ${RING_RADIUS} ${RING_RADIUS} 0 ${largeArc} 0 ${headX} ${headY}`, headX, headY };
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
// Once host-driven, the brand mark eases grayscale → colour and stays there.
|
|
136
|
+
const isHostDriven = () => props.store.phase() !== 'creep';
|
|
137
|
+
|
|
138
|
+
return (
|
|
139
|
+
<>
|
|
140
|
+
<div id='boot-loader-disc' data-host-driven={isHostDriven() ? '' : undefined}>
|
|
141
|
+
<svg
|
|
142
|
+
id='boot-loader-ring'
|
|
143
|
+
viewBox='0 0 100 100'
|
|
144
|
+
aria-hidden='true'
|
|
145
|
+
style={{ '--boot-loader-arc': String(shown()) }}
|
|
146
|
+
>
|
|
147
|
+
{shown() > 0 ? <path class='boot-loader-ring-progress' d={arc().d} /> : null}
|
|
148
|
+
</svg>
|
|
149
|
+
{/* Leading-edge dot in its own unmasked layer (see `arc()`), so the ring's fade mask
|
|
150
|
+
never clips it. Stacked over `#boot-loader-ring` via the disc grid. */}
|
|
151
|
+
{shown() > 0 ? (
|
|
152
|
+
<svg id='boot-loader-ring-head' viewBox='0 0 100 100' aria-hidden='true'>
|
|
153
|
+
<circle class='boot-loader-ring-marker' cx={arc().headX} cy={arc().headY} r={MARKER_RADIUS} />
|
|
154
|
+
</svg>
|
|
155
|
+
) : null}
|
|
156
|
+
{props.markSvg ? <div id='boot-loader-mark' innerHTML={props.markSvg} /> : null}
|
|
157
|
+
</div>
|
|
158
|
+
<div id='boot-loader-status'>
|
|
159
|
+
<div id='boot-loader-status-fade' />
|
|
160
|
+
<div id='boot-loader-status-track' ref={trackRef}>
|
|
161
|
+
<For each={props.store.lines()}>{(line) => <div class='boot-loader-status-line'>{line.text}</div>}</For>
|
|
162
|
+
</div>
|
|
163
|
+
</div>
|
|
164
|
+
</>
|
|
165
|
+
);
|
|
166
|
+
};
|