@dxos/app-framework 0.8.4-main.406dc2a → 0.8.4-main.422d1c7879
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.storybook/main.mts +2 -4
- package/.storybook/preview.mts +2 -2
- package/dist/lib/browser/capability-DOMNPRJP.mjs +35 -0
- package/dist/lib/browser/capability-DOMNPRJP.mjs.map +7 -0
- package/dist/lib/browser/capability-KSNT34SN.mjs +38 -0
- package/dist/lib/browser/capability-KSNT34SN.mjs.map +7 -0
- package/dist/lib/browser/chunk-2CKCJ6PN.mjs +79 -0
- package/dist/lib/browser/chunk-2CKCJ6PN.mjs.map +7 -0
- package/dist/lib/browser/chunk-7B6AJK4D.mjs +964 -0
- package/dist/lib/browser/chunk-7B6AJK4D.mjs.map +7 -0
- package/dist/lib/browser/chunk-BMIAYUWT.mjs +397 -0
- package/dist/lib/browser/chunk-BMIAYUWT.mjs.map +7 -0
- package/dist/lib/browser/chunk-F7FW2RK2.mjs +167 -0
- package/dist/lib/browser/chunk-F7FW2RK2.mjs.map +7 -0
- package/dist/lib/browser/chunk-GDWTW4ZW.mjs +148 -0
- package/dist/lib/browser/chunk-GDWTW4ZW.mjs.map +7 -0
- package/dist/lib/browser/chunk-I34GF4NG.mjs +34 -0
- package/dist/lib/browser/chunk-I34GF4NG.mjs.map +7 -0
- package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/browser/chunk-JKWMHZP6.mjs +80 -0
- package/dist/lib/browser/chunk-JKWMHZP6.mjs.map +7 -0
- package/dist/lib/browser/chunk-QRTB4Q3U.mjs +594 -0
- package/dist/lib/browser/chunk-QRTB4Q3U.mjs.map +7 -0
- package/dist/lib/browser/chunk-QSXYHXCE.mjs +48 -0
- package/dist/lib/browser/chunk-QSXYHXCE.mjs.map +7 -0
- package/dist/lib/browser/chunk-RFSO3JRG.mjs +1 -0
- package/dist/lib/browser/chunk-T3Y4AEKX.mjs +42 -0
- package/dist/lib/browser/chunk-T3Y4AEKX.mjs.map +7 -0
- package/dist/lib/browser/chunk-TGX63LTL.mjs +8 -0
- package/dist/lib/browser/chunk-TGX63LTL.mjs.map +7 -0
- package/dist/lib/browser/chunk-Y543KCO7.mjs +174 -0
- package/dist/lib/browser/chunk-Y543KCO7.mjs.map +7 -0
- package/dist/lib/browser/cli/index.mjs +90 -0
- package/dist/lib/browser/cli/index.mjs.map +7 -0
- package/dist/lib/browser/common/activation-events.mjs +24 -0
- package/dist/lib/browser/common/capabilities.mjs +46 -0
- package/dist/lib/browser/core/activation-event.mjs +20 -0
- package/dist/lib/browser/core/activation-event.mjs.map +7 -0
- package/dist/lib/browser/core/capability.mjs +30 -0
- package/dist/lib/browser/core/capability.mjs.map +7 -0
- package/dist/lib/browser/core/plugin-manager.mjs +15 -0
- package/dist/lib/browser/core/plugin-manager.mjs.map +7 -0
- package/dist/lib/browser/core/plugin.mjs +29 -0
- package/dist/lib/browser/core/plugin.mjs.map +7 -0
- package/dist/lib/browser/core/url-loader.mjs +16 -0
- package/dist/lib/browser/core/url-loader.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +91 -148
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/invoker-capability-VCMPQOIA.mjs +43 -0
- package/dist/lib/browser/invoker-capability-VCMPQOIA.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +243 -41
- package/dist/lib/browser/testing/index.mjs.map +4 -4
- package/dist/lib/browser/testing/react.mjs +78 -0
- package/dist/lib/browser/testing/react.mjs.map +7 -0
- package/dist/lib/browser/ui/index.mjs +46 -0
- package/dist/lib/browser/ui/index.mjs.map +7 -0
- package/dist/lib/node-esm/capability-EOQTORML.mjs +39 -0
- package/dist/lib/node-esm/capability-EOQTORML.mjs.map +7 -0
- package/dist/lib/node-esm/capability-KJTQIWDK.mjs +36 -0
- package/dist/lib/node-esm/capability-KJTQIWDK.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-42KBWDE4.mjs +80 -0
- package/dist/lib/node-esm/chunk-42KBWDE4.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-7PJ5OKRB.mjs +965 -0
- package/dist/lib/node-esm/chunk-7PJ5OKRB.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-DXVXOGJ7.mjs +175 -0
- package/dist/lib/node-esm/chunk-DXVXOGJ7.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-EL3R25OQ.mjs +2 -0
- package/dist/lib/node-esm/chunk-EL3R25OQ.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-FKE4Z3D6.mjs +10 -0
- package/dist/lib/node-esm/chunk-FKE4Z3D6.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-G3RTFSNG.mjs +81 -0
- package/dist/lib/node-esm/chunk-G3RTFSNG.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-HI3YBICQ.mjs +149 -0
- package/dist/lib/node-esm/chunk-HI3YBICQ.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-JPWVIQ5I.mjs +595 -0
- package/dist/lib/node-esm/chunk-JPWVIQ5I.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-URWHJQT2.mjs +168 -0
- package/dist/lib/node-esm/chunk-URWHJQT2.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-VKHGNEDB.mjs +43 -0
- package/dist/lib/node-esm/chunk-VKHGNEDB.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-WZ6DHQER.mjs +398 -0
- package/dist/lib/node-esm/chunk-WZ6DHQER.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-WZCSOX5Q.mjs +35 -0
- package/dist/lib/node-esm/chunk-WZCSOX5Q.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-ZZ7CKK6W.mjs +49 -0
- package/dist/lib/node-esm/chunk-ZZ7CKK6W.mjs.map +7 -0
- package/dist/lib/node-esm/cli/index.mjs +91 -0
- package/dist/lib/node-esm/cli/index.mjs.map +7 -0
- package/dist/lib/node-esm/common/activation-events.mjs +25 -0
- package/dist/lib/node-esm/common/activation-events.mjs.map +7 -0
- package/dist/lib/node-esm/common/capabilities.mjs +47 -0
- package/dist/lib/node-esm/common/capabilities.mjs.map +7 -0
- package/dist/lib/node-esm/core/activation-event.mjs +21 -0
- package/dist/lib/node-esm/core/activation-event.mjs.map +7 -0
- package/dist/lib/node-esm/core/capability.mjs +31 -0
- package/dist/lib/node-esm/core/capability.mjs.map +7 -0
- package/dist/lib/node-esm/core/plugin-manager.mjs +16 -0
- package/dist/lib/node-esm/core/plugin-manager.mjs.map +7 -0
- package/dist/lib/node-esm/core/plugin.mjs +30 -0
- package/dist/lib/node-esm/core/plugin.mjs.map +7 -0
- package/dist/lib/node-esm/core/url-loader.mjs +17 -0
- package/dist/lib/node-esm/core/url-loader.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +91 -148
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/invoker-capability-EGA3XW6J.mjs +44 -0
- package/dist/lib/node-esm/invoker-capability-EGA3XW6J.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +243 -41
- package/dist/lib/node-esm/testing/index.mjs.map +4 -4
- package/dist/lib/node-esm/testing/react.mjs +79 -0
- package/dist/lib/node-esm/testing/react.mjs.map +7 -0
- package/dist/lib/node-esm/ui/index.mjs +47 -0
- package/dist/lib/node-esm/ui/index.mjs.map +7 -0
- package/dist/plugin/node-esm/index.mjs +794 -0
- package/dist/plugin/node-esm/index.mjs.map +7 -0
- package/dist/plugin/node-esm/meta.json +1 -0
- package/dist/types/src/cli/cli.d.ts +39 -0
- package/dist/types/src/cli/cli.d.ts.map +1 -0
- package/dist/types/src/cli/index.d.ts +2 -0
- package/dist/types/src/cli/index.d.ts.map +1 -0
- package/dist/types/src/common/activation-events.d.ts +27 -0
- package/dist/types/src/common/activation-events.d.ts.map +1 -0
- package/dist/types/src/common/capabilities.d.ts +109 -200
- 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} +7 -7
- package/dist/types/src/core/activation-event.d.ts.map +1 -0
- package/dist/types/src/core/capability-manager.d.ts +48 -0
- package/dist/types/src/core/capability-manager.d.ts.map +1 -0
- package/dist/types/src/core/capability-manager.test.d.ts +2 -0
- package/dist/types/src/core/capability-manager.test.d.ts.map +1 -0
- package/dist/types/src/core/capability.d.ts +156 -0
- package/dist/types/src/core/capability.d.ts.map +1 -0
- package/dist/types/src/core/index.d.ts +6 -4
- package/dist/types/src/core/index.d.ts.map +1 -1
- package/dist/types/src/core/plugin-manager.d.ts +78 -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.d.ts +127 -39
- package/dist/types/src/core/plugin.d.ts.map +1 -1
- package/dist/types/src/core/url-loader.d.ts +42 -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/index.d.ts +3 -4
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/plugin-operation/OperationPlugin.d.ts +3 -0
- package/dist/types/src/plugin-operation/OperationPlugin.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/capability.d.ts +7 -0
- package/dist/types/src/plugin-operation/history/capability.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/errors.d.ts +32 -0
- package/dist/types/src/plugin-operation/history/errors.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/history-tracker.d.ts +18 -0
- package/dist/types/src/plugin-operation/history/history-tracker.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/history-tracker.test.d.ts +2 -0
- package/dist/types/src/plugin-operation/history/history-tracker.test.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/index.d.ts +6 -0
- package/dist/types/src/plugin-operation/history/index.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/types.d.ts +13 -0
- package/dist/types/src/plugin-operation/history/types.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/undo-mapping.d.ts +101 -0
- package/dist/types/src/plugin-operation/history/undo-mapping.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/undo-registry.d.ts +23 -0
- package/dist/types/src/plugin-operation/history/undo-registry.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/history/undo-registry.test.d.ts +2 -0
- package/dist/types/src/plugin-operation/history/undo-registry.test.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/index.d.ts +3 -0
- package/dist/types/src/plugin-operation/index.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/invoker-capability.d.ts +6 -0
- package/dist/types/src/plugin-operation/invoker-capability.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/meta.d.ts +3 -0
- package/dist/types/src/plugin-operation/meta.d.ts.map +1 -0
- package/dist/types/src/plugin-operation/testing.d.ts +58 -0
- package/dist/types/src/plugin-operation/testing.d.ts.map +1 -0
- package/dist/types/src/plugin-runtime/RuntimePlugin.d.ts +3 -0
- package/dist/types/src/plugin-runtime/RuntimePlugin.d.ts.map +1 -0
- package/dist/types/src/plugin-runtime/capability.d.ts +6 -0
- package/dist/types/src/plugin-runtime/capability.d.ts.map +1 -0
- package/dist/types/src/plugin-runtime/index.d.ts +2 -0
- package/dist/types/src/plugin-runtime/index.d.ts.map +1 -0
- package/dist/types/src/plugin-runtime/meta.d.ts +3 -0
- package/dist/types/src/plugin-runtime/meta.d.ts.map +1 -0
- package/dist/types/src/testing/harness.d.ts +67 -0
- package/dist/types/src/testing/harness.d.ts.map +1 -0
- package/dist/types/src/testing/index.d.ts +2 -0
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/react.d.ts +27 -0
- package/dist/types/src/testing/react.d.ts.map +1 -0
- package/dist/types/src/testing/react.test.d.ts +2 -0
- package/dist/types/src/testing/react.test.d.ts.map +1 -0
- package/dist/types/src/testing/service.d.ts +8 -0
- package/dist/types/src/testing/service.d.ts.map +1 -0
- package/dist/types/src/testing/withPluginManager.d.ts +7 -6
- package/dist/types/src/testing/withPluginManager.d.ts.map +1 -1
- package/dist/types/src/testing/withPluginManager.stories.d.ts.map +1 -1
- package/dist/types/src/ui/components/App/App.d.ts +9 -0
- package/dist/types/src/ui/components/App/App.d.ts.map +1 -0
- package/dist/types/src/ui/components/App/App.stories.d.ts +19 -0
- package/dist/types/src/ui/components/App/App.stories.d.ts.map +1 -0
- package/dist/types/src/ui/components/App/index.d.ts +2 -0
- package/dist/types/src/ui/components/App/index.d.ts.map +1 -0
- package/dist/types/src/{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 +4 -0
- package/dist/types/src/ui/components/index.d.ts.map +1 -0
- package/dist/types/src/ui/hooks/index.d.ts +6 -0
- package/dist/types/src/ui/hooks/index.d.ts.map +1 -0
- package/dist/types/src/ui/hooks/useApp.d.ts +62 -0
- package/dist/types/src/ui/hooks/useApp.d.ts.map +1 -0
- package/dist/types/src/ui/hooks/useApp.test.d.ts +2 -0
- package/dist/types/src/ui/hooks/useApp.test.d.ts.map +1 -0
- package/dist/types/src/ui/hooks/useCapabilities.d.ts +31 -0
- package/dist/types/src/ui/hooks/useCapabilities.d.ts.map +1 -0
- package/dist/types/src/{components → ui/hooks}/useLoading.d.ts +1 -2
- package/dist/types/src/ui/hooks/useLoading.d.ts.map +1 -0
- package/dist/types/src/ui/hooks/useSettingsState.d.ts +10 -0
- package/dist/types/src/ui/hooks/useSettingsState.d.ts.map +1 -0
- package/dist/types/src/ui/hooks/useSurface.d.ts +3 -0
- package/dist/types/src/ui/hooks/useSurface.d.ts.map +1 -0
- package/dist/types/src/ui/index.d.ts +3 -0
- package/dist/types/src/ui/index.d.ts.map +1 -0
- package/dist/types/src/vite-plugin/boot-loader/BootLoader.stories.d.ts +50 -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 +51 -0
- package/dist/types/src/vite-plugin/boot-loader/index.d.ts.map +1 -0
- package/dist/types/src/vite-plugin/composer/index.d.ts +34 -0
- package/dist/types/src/vite-plugin/composer/index.d.ts.map +1 -0
- package/dist/types/src/vite-plugin/import-map/index.d.ts +16 -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 +16 -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 +110 -55
- package/src/cli/cli.ts +107 -0
- package/src/{components → cli}/index.ts +1 -1
- package/src/common/activation-events.ts +44 -0
- package/src/common/capabilities.ts +168 -213
- package/src/common/index.ts +4 -8
- package/src/common/operations.ts +35 -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 +247 -0
- package/src/core/index.ts +6 -4
- package/src/core/plugin-manager.test.ts +1142 -0
- package/src/core/plugin-manager.ts +893 -0
- package/src/core/plugin.ts +263 -46
- package/src/core/url-loader.test.ts +112 -0
- package/src/core/url-loader.ts +178 -0
- package/src/index.ts +3 -4
- package/src/plugin-operation/OperationPlugin.ts +24 -0
- package/src/plugin-operation/history/capability.ts +36 -0
- package/src/plugin-operation/history/errors.ts +7 -0
- package/src/plugin-operation/history/history-tracker.test.ts +373 -0
- package/src/plugin-operation/history/history-tracker.ts +128 -0
- package/src/plugin-operation/history/index.ts +9 -0
- package/src/plugin-operation/history/types.ts +17 -0
- package/src/plugin-operation/history/undo-mapping.ts +135 -0
- package/src/plugin-operation/history/undo-registry.test.ts +72 -0
- package/src/plugin-operation/history/undo-registry.ts +54 -0
- package/src/plugin-operation/index.ts +6 -0
- package/src/plugin-operation/invoker-capability.ts +54 -0
- package/src/plugin-operation/meta.ts +11 -0
- package/src/plugin-operation/testing.ts +154 -0
- package/src/plugin-runtime/RuntimePlugin.ts +19 -0
- package/src/plugin-runtime/capability.ts +53 -0
- package/src/{playground/logger → plugin-runtime}/index.ts +1 -1
- package/src/plugin-runtime/meta.ts +11 -0
- package/src/testing/harness.ts +229 -0
- package/src/testing/index.ts +2 -0
- package/src/testing/react.test.tsx +48 -0
- package/src/testing/react.tsx +113 -0
- package/src/testing/service.ts +52 -0
- package/src/testing/withPluginManager.stories.tsx +7 -8
- package/src/testing/withPluginManager.tsx +68 -40
- package/src/ui/components/App/App.stories.tsx +92 -0
- package/src/ui/components/App/App.tsx +70 -0
- package/src/{playground/debug → ui/components/App}/index.ts +1 -1
- package/src/ui/components/PluginManager/PluginManagerContext.stories.tsx +183 -0
- package/src/{react → ui/components/PluginManager}/PluginManagerProvider.ts +3 -3
- package/src/ui/components/PluginManager/index.ts +5 -0
- package/src/ui/components/Surface/SurfaceComponent.stories.tsx +144 -0
- package/src/ui/components/Surface/SurfaceComponent.tsx +303 -0
- package/src/ui/components/Surface/SurfaceInfo.tsx +107 -0
- package/src/ui/components/Surface/SurfaceProfilerContext.tsx +207 -0
- package/src/ui/components/Surface/context.ts +12 -0
- package/src/ui/components/Surface/index.ts +54 -0
- package/src/ui/components/Surface/types.test.ts +126 -0
- package/src/ui/components/Surface/types.ts +269 -0
- package/src/ui/components/index.ts +7 -0
- package/src/ui/hooks/index.ts +9 -0
- package/src/ui/hooks/useApp.test.tsx +159 -0
- package/src/ui/hooks/useApp.tsx +289 -0
- package/src/ui/hooks/useCapabilities.ts +67 -0
- package/src/{components → ui/hooks}/useLoading.tsx +4 -6
- 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 +162 -0
- package/src/vite-plugin/boot-loader/boot-loader.css +117 -0
- package/src/vite-plugin/boot-loader/boot-loader.js +55 -0
- package/src/vite-plugin/boot-loader/index.ts +99 -0
- package/src/vite-plugin/composer/index.ts +284 -0
- package/src/vite-plugin/import-map/index.ts +490 -0
- package/src/vite-plugin/index.ts +10 -0
- package/src/vite-plugin/manifest.test.ts +23 -0
- package/src/vite-plugin/manifest.ts +20 -0
- package/src/vite-plugin/packages.ts +181 -0
- package/tsconfig.json +13 -19
- 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/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/index.ts +0 -5
- 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 → chunk-RFSO3JRG.mjs.map} +0 -0
- /package/dist/lib/{node-esm/intent-dispatcher-SIYQ5ZIU.mjs.map → browser/common/activation-events.mjs.map} +0 -0
- /package/dist/lib/{node-esm/worker.mjs.map → browser/common/capabilities.mjs.map} +0 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Boot loader stylesheet — injected into the host's `<head>` by `bootLoaderPlugin`.
|
|
3
|
+
* The keyframe animation runs on the browser's compositor thread, so the bar
|
|
4
|
+
* keeps moving even while the JS main thread is busy parsing modules.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/*
|
|
8
|
+
* Defaults match `@dxos/ui-theme`'s `--color-base-surface`, which resolves to
|
|
9
|
+
* Tailwind's `neutral-50` / `neutral-950` in light / dark mode respectively
|
|
10
|
+
* (see `packages/ui/ui-theme/src/css/theme/semantic.css`). Hosts can override
|
|
11
|
+
* with the `--boot-loader-bg-*` / `--boot-loader-fg-*` custom properties on
|
|
12
|
+
* `:root` if they need a different palette. Keeping the boot loader's
|
|
13
|
+
* background identical to the app's `body` eliminates the flash on handoff
|
|
14
|
+
* to React's `<Placeholder>`.
|
|
15
|
+
*/
|
|
16
|
+
#boot-loader {
|
|
17
|
+
position: fixed;
|
|
18
|
+
inset: 0;
|
|
19
|
+
z-index: 2147483647;
|
|
20
|
+
display: flex;
|
|
21
|
+
flex-direction: column;
|
|
22
|
+
align-items: center;
|
|
23
|
+
justify-content: center;
|
|
24
|
+
gap: 16px;
|
|
25
|
+
background: var(--boot-loader-bg-light, #fafafa);
|
|
26
|
+
color: var(--boot-loader-fg-light, #0a0a0a);
|
|
27
|
+
font-family:
|
|
28
|
+
ui-sans-serif,
|
|
29
|
+
system-ui,
|
|
30
|
+
-apple-system,
|
|
31
|
+
BlinkMacSystemFont,
|
|
32
|
+
'Segoe UI',
|
|
33
|
+
sans-serif;
|
|
34
|
+
font-size: 13px;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@media (prefers-color-scheme: dark) {
|
|
38
|
+
#boot-loader {
|
|
39
|
+
background: var(--boot-loader-bg-dark, #0a0a0a);
|
|
40
|
+
color: var(--boot-loader-fg-dark, #fafafa);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
#boot-loader-mark {
|
|
45
|
+
width: 56px;
|
|
46
|
+
height: 56px;
|
|
47
|
+
display: flex;
|
|
48
|
+
align-items: center;
|
|
49
|
+
justify-content: center;
|
|
50
|
+
opacity: 0.1;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
#boot-loader-mark svg {
|
|
54
|
+
width: 100%;
|
|
55
|
+
height: 100%;
|
|
56
|
+
/* `fill="currentColor"` on the host SVG inherits the loader's text colour. */
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
#boot-loader-bar {
|
|
60
|
+
position: relative;
|
|
61
|
+
width: min(240px, 50vw);
|
|
62
|
+
height: 2px;
|
|
63
|
+
overflow: hidden;
|
|
64
|
+
background: rgba(127, 127, 127, 0.18);
|
|
65
|
+
border-radius: 1px;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
#boot-loader-bar::before {
|
|
69
|
+
content: '';
|
|
70
|
+
position: absolute;
|
|
71
|
+
inset: 0;
|
|
72
|
+
width: 40%;
|
|
73
|
+
background: currentcolor;
|
|
74
|
+
opacity: 0.7;
|
|
75
|
+
border-radius: 1px;
|
|
76
|
+
animation: boot-loader-bar 1.4s ease-in-out infinite;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
@keyframes boot-loader-bar {
|
|
80
|
+
0% {
|
|
81
|
+
transform: translateX(-100%);
|
|
82
|
+
}
|
|
83
|
+
100% {
|
|
84
|
+
transform: translateX(250%);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/*
|
|
89
|
+
* Determinate state — host called `window.__bootLoader.progress(fraction)`.
|
|
90
|
+
* Cancel the slide animation and pin the fill to whatever percentage the
|
|
91
|
+
* driver wrote into `--boot-loader-bar-progress` (0–100). The transition on
|
|
92
|
+
* `width` smooths the transitions between counter ticks so the fill grows
|
|
93
|
+
* continuously rather than snapping.
|
|
94
|
+
*/
|
|
95
|
+
#boot-loader-bar[data-determinate]::before {
|
|
96
|
+
width: calc(var(--boot-loader-bar-progress, 0) * 1%);
|
|
97
|
+
animation: none;
|
|
98
|
+
transform: none;
|
|
99
|
+
transition: width 240ms ease-out;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
#boot-loader-status {
|
|
103
|
+
opacity: 0.7;
|
|
104
|
+
/*
|
|
105
|
+
* Pin both `line-height` and `height` so the status box stays exactly the
|
|
106
|
+
* same size regardless of which phase string is currently displayed. With
|
|
107
|
+
* only `min-height: 1em`, the browser's `line-height: normal` resolved to
|
|
108
|
+
* slightly different rendered heights as the text changed, which reflowed
|
|
109
|
+
* the flex column and bumped the progress bar a few pixels each time.
|
|
110
|
+
* `white-space: nowrap` makes sure long phase strings ("Loading
|
|
111
|
+
* framework…") never wrap to a second line.
|
|
112
|
+
*/
|
|
113
|
+
height: 1.5em;
|
|
114
|
+
line-height: 1.5;
|
|
115
|
+
letter-spacing: 0.01em;
|
|
116
|
+
white-space: nowrap;
|
|
117
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
// Inline driver script — injected into the host's `<body>` by `bootLoaderPlugin`.
|
|
6
|
+
// Runs before the module bundle is fetched, so the host can observe `boot:html-parsed`
|
|
7
|
+
// and update the visible status from `main.tsx` between phases.
|
|
8
|
+
//
|
|
9
|
+
// `window.__bootLoader.status(text)` updates the visible status line.
|
|
10
|
+
// `window.__bootLoader.dismiss()` removes the loader DOM. Once the loader is
|
|
11
|
+
// gone, both calls become no-ops.
|
|
12
|
+
//
|
|
13
|
+
// Kept ES5-flavoured so the bundler never has to touch it.
|
|
14
|
+
|
|
15
|
+
performance.mark('boot:html-parsed');
|
|
16
|
+
|
|
17
|
+
window.__bootLoader = {
|
|
18
|
+
status: function (text) {
|
|
19
|
+
var element = document.getElementById('boot-loader-status');
|
|
20
|
+
if (element) {
|
|
21
|
+
element.textContent = text;
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
/**
|
|
25
|
+
* Switch the progress bar from the default indeterminate slide animation
|
|
26
|
+
* to a determinate fill at `fraction` ∈ [0, 1]. Calling this once flips the
|
|
27
|
+
* `[data-determinate]` flag; subsequent calls just update the percentage.
|
|
28
|
+
* Pass a value < 0 (or omit) to revert to indeterminate.
|
|
29
|
+
*/
|
|
30
|
+
progress: function (fraction) {
|
|
31
|
+
var element = document.getElementById('boot-loader-bar');
|
|
32
|
+
if (!element) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
// `Number.isFinite` rejects NaN and Infinity; without this guard
|
|
36
|
+
// `NaN < 0` is false, so NaN slips past and ends up in
|
|
37
|
+
// `--boot-loader-bar-progress`, which CSS treats as invalid and silently
|
|
38
|
+
// resets the bar to the var() default (0%) — surprising visual snap if a
|
|
39
|
+
// caller ever passes `0/0` or a parsed-but-invalid value.
|
|
40
|
+
if (typeof fraction !== 'number' || !isFinite(fraction) || fraction < 0) {
|
|
41
|
+
element.removeAttribute('data-determinate');
|
|
42
|
+
element.style.removeProperty('--boot-loader-bar-progress');
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
var clamped = Math.max(0, Math.min(1, fraction));
|
|
46
|
+
element.setAttribute('data-determinate', '');
|
|
47
|
+
element.style.setProperty('--boot-loader-bar-progress', String(clamped * 100));
|
|
48
|
+
},
|
|
49
|
+
dismiss: function () {
|
|
50
|
+
var element = document.getElementById('boot-loader');
|
|
51
|
+
if (element && element.parentNode) {
|
|
52
|
+
element.parentNode.removeChild(element);
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
};
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type Plugin } from 'vite';
|
|
6
|
+
|
|
7
|
+
import css from './boot-loader.css?raw';
|
|
8
|
+
import driverScript from './boot-loader.js?raw';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Options for {@link bootLoaderPlugin}.
|
|
12
|
+
*/
|
|
13
|
+
export type BootLoaderOptions = {
|
|
14
|
+
/**
|
|
15
|
+
* Initial status text rendered by the loader (replaced via
|
|
16
|
+
* `window.__bootLoader.status(...)` once the host starts firing phase callbacks).
|
|
17
|
+
*
|
|
18
|
+
* @default "Loading…"
|
|
19
|
+
*/
|
|
20
|
+
status?: string;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Inline SVG markup for an optional brand mark rendered above the progress bar.
|
|
24
|
+
* Use `currentColor` for fill so the mark inherits the loader's text colour
|
|
25
|
+
* (which itself follows `prefers-color-scheme`). Leave empty/undefined to
|
|
26
|
+
* render only the bar.
|
|
27
|
+
*/
|
|
28
|
+
markSvg?: string;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Vite plugin that injects a tiny native-DOM "boot loader" into the host app's
|
|
33
|
+
* `index.html`.
|
|
34
|
+
*
|
|
35
|
+
* The loader paints on the very first frame, before any JS bundle is fetched —
|
|
36
|
+
* so the user sees something immediately on cold load instead of staring at a
|
|
37
|
+
* blank document while the compiled module graph is parsed. The CSS-only
|
|
38
|
+
* keyframe animation runs on the browser's compositor thread, so it keeps
|
|
39
|
+
* moving even while the JS main thread is fully busy.
|
|
40
|
+
*
|
|
41
|
+
* The host app drives the loader from `main.tsx`:
|
|
42
|
+
*
|
|
43
|
+
* - `window.__bootLoader.status(text)` updates the status line per phase.
|
|
44
|
+
* - `window.__bootLoader.dismiss()` removes the loader once React has mounted.
|
|
45
|
+
*
|
|
46
|
+
* Inject order:
|
|
47
|
+
* - `<style>` → `<head>` (parses before any bundled stylesheet).
|
|
48
|
+
* - `<div id="boot-loader">…</div>` → start of `<body>` (sibling of `#root`).
|
|
49
|
+
* - inline `<script>` defining `window.__bootLoader` → start of `<body>`.
|
|
50
|
+
*
|
|
51
|
+
* Keeping the loader as a sibling of `#root` (rather than a child of it) means
|
|
52
|
+
* `createRoot(document.getElementById('root')).render(...)` does not fight the
|
|
53
|
+
* loader for ownership; the host explicitly calls `dismiss()` after the first
|
|
54
|
+
* React commit, which gives a deterministic handoff.
|
|
55
|
+
*
|
|
56
|
+
* Color tokens are exposed as CSS custom properties (`--boot-loader-bg-light`,
|
|
57
|
+
* `--boot-loader-bg-dark`, etc.) defined in `boot-loader.css`, so consumers can
|
|
58
|
+
* override them at the document level without us re-parameterizing this plugin.
|
|
59
|
+
*/
|
|
60
|
+
export const bootLoaderPlugin = ({ status = 'Loading…', markSvg }: BootLoaderOptions = {}): Plugin => {
|
|
61
|
+
return {
|
|
62
|
+
name: 'app-framework:boot-loader',
|
|
63
|
+
transformIndexHtml() {
|
|
64
|
+
// The mark slot uses `children: <raw-svg>` (vite emits string children as
|
|
65
|
+
// raw HTML, not text-escaped) so the host can pass an SVG file's contents
|
|
66
|
+
// straight through. Falls back to a single-line empty `<div>` so the
|
|
67
|
+
// skeleton DOM stays predictable for the smoke-test selector.
|
|
68
|
+
const markChildren = markSvg ? [{ tag: 'div', attrs: { id: 'boot-loader-mark' }, children: markSvg }] : [];
|
|
69
|
+
|
|
70
|
+
return [
|
|
71
|
+
{
|
|
72
|
+
tag: 'style',
|
|
73
|
+
injectTo: 'head',
|
|
74
|
+
children: css,
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
tag: 'div',
|
|
78
|
+
injectTo: 'body-prepend',
|
|
79
|
+
attrs: {
|
|
80
|
+
id: 'boot-loader',
|
|
81
|
+
role: 'status',
|
|
82
|
+
'aria-live': 'polite',
|
|
83
|
+
'aria-label': 'Initializing',
|
|
84
|
+
},
|
|
85
|
+
children: [
|
|
86
|
+
...markChildren,
|
|
87
|
+
{ tag: 'div', attrs: { id: 'boot-loader-bar' }, children: '' },
|
|
88
|
+
{ tag: 'div', attrs: { id: 'boot-loader-status' }, children: status },
|
|
89
|
+
],
|
|
90
|
+
},
|
|
91
|
+
{
|
|
92
|
+
tag: 'script',
|
|
93
|
+
injectTo: 'body-prepend',
|
|
94
|
+
children: driverScript,
|
|
95
|
+
},
|
|
96
|
+
];
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
};
|
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type Plugin as VitePlugin } from 'vite';
|
|
6
|
+
import cssInjectedByJs from 'vite-plugin-css-injected-by-js';
|
|
7
|
+
|
|
8
|
+
import { type Plugin } from '../../core';
|
|
9
|
+
import { MANIFEST_ASSET_NAME, serializeManifest } from '../manifest';
|
|
10
|
+
import { DEFAULT_PACKAGES, isSharedPackage } from '../packages';
|
|
11
|
+
|
|
12
|
+
export { MANIFEST_ASSET_NAME, serializeManifest };
|
|
13
|
+
|
|
14
|
+
const JSX_DEV_RUNTIME = 'react/jsx-dev-runtime';
|
|
15
|
+
|
|
16
|
+
const DEFAULT_MODULE_FILE = 'plugin.mjs';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Whether an import should be externalized by the plugin bundle.
|
|
20
|
+
* Uses the shared-package predicate directly so plugins automatically pick up any
|
|
21
|
+
* new `@dxos/*` (non-plugin) package the host provides, without a code change here.
|
|
22
|
+
*/
|
|
23
|
+
const isExternal = (id: string) => id !== JSX_DEV_RUNTIME && isSharedPackage(id);
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Banner injected at the top of every plugin bundle.
|
|
27
|
+
*
|
|
28
|
+
* Why: rolldown emits ESM `import` for externalized deps, but when a *bundled* module
|
|
29
|
+
* is CJS and contains `require('react')` (or any other external), rolldown keeps the
|
|
30
|
+
* `require(...)` call in the output and relies on a runtime `require` function. The
|
|
31
|
+
* browser doesn't have `require`, so rolldown's fallback shim throws:
|
|
32
|
+
* `Calling `require` for "react" in an environment that doesn't expose the `require`
|
|
33
|
+
* function`.
|
|
34
|
+
*
|
|
35
|
+
* The full dependency graphs of non-trivial plugins unavoidably drag in CJS-only
|
|
36
|
+
* helpers (`use-sync-external-store` via xstate / zustand / preact-signals / … ),
|
|
37
|
+
* and waiting for every one of those packages to ship ESM isn't realistic. Instead
|
|
38
|
+
* we install a tiny module-local `require` at the top of the bundle that looks up
|
|
39
|
+
* a handful of well-known host-provided modules by name and returns their already
|
|
40
|
+
* ESM-imported namespaces. Rolldown's own shim honours an existing `require`
|
|
41
|
+
* before falling through to the throw path, so this entirely removes the runtime
|
|
42
|
+
* error without changing how externalization itself works.
|
|
43
|
+
*
|
|
44
|
+
* Keep the list aligned with the externals that CJS code actually reaches for;
|
|
45
|
+
* adding entries here is safe (unused imports get tree-shaken), but the list is
|
|
46
|
+
* deliberately small to keep the banner noise-free.
|
|
47
|
+
*/
|
|
48
|
+
const REQUIRE_SHIM_BANNER = [
|
|
49
|
+
'// --- composer-plugin: CJS require shim ---',
|
|
50
|
+
'// See @dxos/app-framework/vite-plugin/composer-plugin.ts for rationale.',
|
|
51
|
+
"import * as __composerReact from 'react';",
|
|
52
|
+
"import * as __composerReactDom from 'react-dom';",
|
|
53
|
+
"import * as __composerReactJsxRuntime from 'react/jsx-runtime';",
|
|
54
|
+
'const __composerRequireShim = new Map([',
|
|
55
|
+
" ['react', __composerReact.default ?? __composerReact],",
|
|
56
|
+
" ['react-dom', __composerReactDom.default ?? __composerReactDom],",
|
|
57
|
+
" ['react/jsx-runtime', __composerReactJsxRuntime],",
|
|
58
|
+
']);',
|
|
59
|
+
"// Module-local binding: rolldown's CJS fallback does a `typeof require` check",
|
|
60
|
+
'// and uses whichever `require` is in lexical scope. Declaring this as `const`',
|
|
61
|
+
"// (instead of `globalThis.require ??=`) keeps each bundle's shim isolated from",
|
|
62
|
+
'// the host page and from other plugins sharing the window.',
|
|
63
|
+
'const require = (id) => {',
|
|
64
|
+
' if (__composerRequireShim.has(id)) return __composerRequireShim.get(id);',
|
|
65
|
+
" throw new Error('composer-plugin: unsupported CJS require at runtime: ' + id);",
|
|
66
|
+
'};',
|
|
67
|
+
'// --- end CJS require shim ---',
|
|
68
|
+
].join('\n');
|
|
69
|
+
|
|
70
|
+
export type ComposerPluginOptions = {
|
|
71
|
+
/** Entry point for the plugin bundle. Defaults to `src/plugin.tsx`. */
|
|
72
|
+
entry?: string;
|
|
73
|
+
/** Dev server port. Defaults to `3967`. */
|
|
74
|
+
port?: number;
|
|
75
|
+
/**
|
|
76
|
+
* Plugin metadata. When provided, a `manifest.json` asset is emitted alongside the bundle
|
|
77
|
+
* so the output directory can be uploaded directly as a GitHub Release and picked up by
|
|
78
|
+
* the DXOS community registry.
|
|
79
|
+
*/
|
|
80
|
+
meta?: Plugin.Meta;
|
|
81
|
+
/** Filename of the built module asset that the registry will load. Defaults to `plugin.mjs`. */
|
|
82
|
+
moduleFile?: string;
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Vite plugin for **external Composer plugin projects**. Configures the build to produce
|
|
87
|
+
* an ESM bundle that externalizes all framework dependencies, which the Composer host app
|
|
88
|
+
* provides at runtime via import map.
|
|
89
|
+
*
|
|
90
|
+
* Handles:
|
|
91
|
+
* 1. Build config — lib mode entry point, ES format output, rollup externals.
|
|
92
|
+
* 2. Dev externalization — marks shared deps as external during `vite serve` and strips
|
|
93
|
+
* the `/@id/` prefix that Vite's import analysis adds to external bare specifiers.
|
|
94
|
+
* 3. JSX dev runtime shim — bridges `react/jsx-dev-runtime` (used by React refresh in dev)
|
|
95
|
+
* to `react/jsx-runtime` (which is what the externalized React provides).
|
|
96
|
+
* 4. Optional manifest emit — when `meta` is supplied, writes `manifest.json` next to the
|
|
97
|
+
* bundled module so a GitHub Release can carry both artifacts.
|
|
98
|
+
*/
|
|
99
|
+
export const composerPlugin = (options?: ComposerPluginOptions): VitePlugin[] => {
|
|
100
|
+
const entry = options?.entry ?? 'src/plugin.tsx';
|
|
101
|
+
const port = options?.port ?? 3967;
|
|
102
|
+
const moduleFile = options?.moduleFile ?? DEFAULT_MODULE_FILE;
|
|
103
|
+
const meta = options?.meta;
|
|
104
|
+
const resolved = new Set<string>();
|
|
105
|
+
let base = '/';
|
|
106
|
+
|
|
107
|
+
const plugins: VitePlugin[] = [
|
|
108
|
+
// Inline every imported stylesheet into the bundled module. Each community plugin
|
|
109
|
+
// is distributed as a single GitHub Release asset (per {@link moduleFile}); a sibling
|
|
110
|
+
// `.css` file would silently be dropped at runtime because Composer only fetches the
|
|
111
|
+
// module URL the registry advertises.
|
|
112
|
+
// TODO(wittjosiah): Once the registry supports multi-asset releases, move CSS (and
|
|
113
|
+
// fonts/images/wasm) back to sibling assets so plugins don't ship stylesheets inside
|
|
114
|
+
// their JS bundle.
|
|
115
|
+
...cssInjectedByJs(),
|
|
116
|
+
|
|
117
|
+
// Configure vite for library-mode builds with externalized deps.
|
|
118
|
+
{
|
|
119
|
+
name: 'composer-plugin',
|
|
120
|
+
config: () => ({
|
|
121
|
+
server: {
|
|
122
|
+
port,
|
|
123
|
+
// Allow the Composer host (different origin) to dynamically import plugin modules.
|
|
124
|
+
cors: true,
|
|
125
|
+
},
|
|
126
|
+
preview: { port },
|
|
127
|
+
build: {
|
|
128
|
+
sourcemap: true,
|
|
129
|
+
// Transitively-bundled WASM modules (automerge, tiktoken, …) emit top-level
|
|
130
|
+
// await; `esnext` lets rolldown pass that through without an explicit polyfill.
|
|
131
|
+
target: 'esnext',
|
|
132
|
+
lib: {
|
|
133
|
+
entry,
|
|
134
|
+
formats: ['es'],
|
|
135
|
+
fileName: () => moduleFile,
|
|
136
|
+
},
|
|
137
|
+
// Inline every asset as a data URL. GitHub Releases sign each asset with a
|
|
138
|
+
// per-file URL, so sibling-file imports from the plugin module can't resolve.
|
|
139
|
+
// TODO(wittjosiah): Drop once the registry can serve multi-asset releases and
|
|
140
|
+
// plugins can ship fonts/images/wasm as siblings of plugin.mjs.
|
|
141
|
+
assetsInlineLimit: () => true,
|
|
142
|
+
rolldownOptions: {
|
|
143
|
+
external: (id: string) => isExternal(id),
|
|
144
|
+
output: {
|
|
145
|
+
// Produce a single bundle per plugin for GitHub Release distribution.
|
|
146
|
+
// TODO(wittjosiah): Drop once the registry can serve multi-asset releases.
|
|
147
|
+
inlineDynamicImports: true,
|
|
148
|
+
// Install the CJS require shim at the top of plugin.mjs so transitively
|
|
149
|
+
// bundled CJS helpers (that call `require('react')` et al. at runtime) can
|
|
150
|
+
// resolve against the host-provided externals instead of throwing.
|
|
151
|
+
banner: REQUIRE_SHIM_BANNER,
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
},
|
|
155
|
+
}),
|
|
156
|
+
},
|
|
157
|
+
|
|
158
|
+
// Dev-time externalization.
|
|
159
|
+
// Vite's dev server doesn't use rollup externals, so we need to handle it manually.
|
|
160
|
+
// We intercept imports of shared deps at resolve time, mark them external, and then
|
|
161
|
+
// strip the `/@id/` prefix that Vite's import analysis injects for external modules.
|
|
162
|
+
{
|
|
163
|
+
name: 'composer-plugin:externalize',
|
|
164
|
+
enforce: 'pre',
|
|
165
|
+
apply: 'serve',
|
|
166
|
+
// Exclude shared packages from Vite's dependency pre-bundling.
|
|
167
|
+
config: () => ({
|
|
168
|
+
optimizeDeps: {
|
|
169
|
+
exclude: DEFAULT_PACKAGES,
|
|
170
|
+
},
|
|
171
|
+
}),
|
|
172
|
+
// Mark shared deps as external so Vite doesn't try to bundle them.
|
|
173
|
+
resolveId: (id) => {
|
|
174
|
+
if (isExternal(id)) {
|
|
175
|
+
resolved.add(id);
|
|
176
|
+
return { id, external: true };
|
|
177
|
+
}
|
|
178
|
+
},
|
|
179
|
+
// Return a stub for any externalized module that Vite tries to load directly.
|
|
180
|
+
load: (id) => {
|
|
181
|
+
if (resolved.has(id)) {
|
|
182
|
+
return { code: 'export default {};' };
|
|
183
|
+
}
|
|
184
|
+
},
|
|
185
|
+
// After all plugins are resolved, inject a late-stage transform plugin that strips
|
|
186
|
+
// the `/@id/` prefix from externalized bare specifiers in the output.
|
|
187
|
+
// This must run after Vite's internal import analysis which rewrites bare specifiers.
|
|
188
|
+
configResolved: (config) => {
|
|
189
|
+
base = config.base ?? '/';
|
|
190
|
+
(config.plugins as VitePlugin[]).push({
|
|
191
|
+
name: 'composer-plugin:strip-prefix',
|
|
192
|
+
transform: (code: string) => {
|
|
193
|
+
if (resolved.size === 0) {
|
|
194
|
+
return;
|
|
195
|
+
}
|
|
196
|
+
const escaped = [...resolved].map((s) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('|');
|
|
197
|
+
const pattern = new RegExp(`${base}@id/(${escaped})`, 'g');
|
|
198
|
+
if (pattern.test(code)) {
|
|
199
|
+
return code.replace(pattern, (_: string, dep: string) => dep);
|
|
200
|
+
}
|
|
201
|
+
},
|
|
202
|
+
});
|
|
203
|
+
},
|
|
204
|
+
},
|
|
205
|
+
|
|
206
|
+
// JSX dev runtime shim.
|
|
207
|
+
// React refresh (used by @vitejs/plugin-react) imports from `react/jsx-dev-runtime`,
|
|
208
|
+
// but the externalized React only exposes `react/jsx-runtime`. This virtual module
|
|
209
|
+
// bridges the gap by re-exporting jsx-runtime's functions under jsx-dev-runtime's API.
|
|
210
|
+
{
|
|
211
|
+
name: 'composer-plugin:jsx-dev-shim',
|
|
212
|
+
enforce: 'pre',
|
|
213
|
+
apply: 'serve',
|
|
214
|
+
resolveId: (id) => (id === JSX_DEV_RUNTIME ? `\0${JSX_DEV_RUNTIME}` : undefined),
|
|
215
|
+
load: (id) =>
|
|
216
|
+
id === `\0${JSX_DEV_RUNTIME}`
|
|
217
|
+
? [
|
|
218
|
+
'import { jsx, jsxs, Fragment } from "react/jsx-runtime";',
|
|
219
|
+
'export { Fragment };',
|
|
220
|
+
'export function jsxDEV(type, props, key, isStaticChildren) {',
|
|
221
|
+
' return isStaticChildren ? jsxs(type, props, key) : jsx(type, props, key);',
|
|
222
|
+
'}',
|
|
223
|
+
].join('\n')
|
|
224
|
+
: undefined,
|
|
225
|
+
},
|
|
226
|
+
|
|
227
|
+
// React Refresh preamble stub.
|
|
228
|
+
//
|
|
229
|
+
// @vitejs/plugin-react's JSX transform prepends a runtime check to every module:
|
|
230
|
+
// if (!window.$RefreshReg$) throw new Error("@vitejs/plugin-react can't detect preamble…");
|
|
231
|
+
// In a normal single-origin app, vite injects a `<script type="module">` preamble
|
|
232
|
+
// into `index.html` that sets up `$RefreshReg$` / `$RefreshSig$` on `window` before any
|
|
233
|
+
// app code runs. When a community plugin is dev-served at its own origin and then
|
|
234
|
+
// dynamic-imported into the Composer host at a different origin, the host's window
|
|
235
|
+
// never receives that preamble, so every JSX module throws on first import.
|
|
236
|
+
//
|
|
237
|
+
// Inject a no-op refresh shim on the host's window from the plugin's entrypoint: fast-
|
|
238
|
+
// refresh itself doesn't work cross-origin anyway, so silencing the check lets the
|
|
239
|
+
// plugin load and ordinary page reloads take care of picking up edits. Production
|
|
240
|
+
// builds are untouched (`apply: 'serve'`).
|
|
241
|
+
{
|
|
242
|
+
name: 'composer-plugin:react-refresh-shim',
|
|
243
|
+
enforce: 'pre',
|
|
244
|
+
apply: 'serve',
|
|
245
|
+
transform(code, id) {
|
|
246
|
+
// Only patch the plugin entrypoint (an absolute path ending in the configured entry).
|
|
247
|
+
// Matching by suffix keeps us from prepending the shim to every transformed module,
|
|
248
|
+
// which would both bloat the output and defeat vite's caching.
|
|
249
|
+
if (!id.endsWith(entry.replace(/^\.?\//, '/'))) {
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
const shim = [
|
|
253
|
+
'// composer-plugin: no-op React Refresh shim so cross-origin plugin modules',
|
|
254
|
+
"// don't throw the @vitejs/plugin-react preamble check at dynamic-import time.",
|
|
255
|
+
'if (typeof window !== "undefined") {',
|
|
256
|
+
' window.$RefreshReg$ = window.$RefreshReg$ || (() => {});',
|
|
257
|
+
' window.$RefreshSig$ = window.$RefreshSig$ || (() => (type) => type);',
|
|
258
|
+
' window.__vite_plugin_react_preamble_installed__ = true;',
|
|
259
|
+
'}',
|
|
260
|
+
'',
|
|
261
|
+
].join('\n');
|
|
262
|
+
return { code: shim + code, map: null };
|
|
263
|
+
},
|
|
264
|
+
},
|
|
265
|
+
];
|
|
266
|
+
|
|
267
|
+
if (meta) {
|
|
268
|
+
// Emit `manifest.json` alongside the built module so the dist output can be uploaded as-is
|
|
269
|
+
// to a GitHub Release for the DXOS community registry to pick up.
|
|
270
|
+
plugins.push({
|
|
271
|
+
name: 'composer-plugin:emit-manifest',
|
|
272
|
+
apply: 'build',
|
|
273
|
+
generateBundle() {
|
|
274
|
+
this.emitFile({
|
|
275
|
+
type: 'asset',
|
|
276
|
+
fileName: MANIFEST_ASSET_NAME,
|
|
277
|
+
source: serializeManifest(meta, { moduleFile }),
|
|
278
|
+
});
|
|
279
|
+
},
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
return plugins;
|
|
284
|
+
};
|