@dxos/app-framework 0.8.4-main.422d1c7879 → 0.8.4-main.4f23b4e393

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.
Files changed (272) hide show
  1. package/dist/lib/browser/{capability-DOMNPRJP.mjs → capability-5RRH3WIB.mjs} +11 -11
  2. package/dist/lib/browser/capability-5RRH3WIB.mjs.map +7 -0
  3. package/dist/lib/browser/{capability-KSNT34SN.mjs → capability-LUKGKUQH.mjs} +10 -10
  4. package/dist/lib/browser/{chunk-T3Y4AEKX.mjs → chunk-23D4SJUE.mjs} +3 -3
  5. package/dist/lib/browser/{chunk-T3Y4AEKX.mjs.map → chunk-23D4SJUE.mjs.map} +1 -1
  6. package/dist/lib/browser/{chunk-2CKCJ6PN.mjs → chunk-3JWJXGLK.mjs} +1 -1
  7. package/dist/lib/browser/{chunk-2CKCJ6PN.mjs.map → chunk-3JWJXGLK.mjs.map} +1 -1
  8. package/dist/lib/browser/{chunk-I34GF4NG.mjs → chunk-45CHLTBV.mjs} +2 -2
  9. package/dist/lib/browser/{chunk-QSXYHXCE.mjs → chunk-66IXTIVK.mjs} +1 -1
  10. package/dist/lib/browser/{chunk-QSXYHXCE.mjs.map → chunk-66IXTIVK.mjs.map} +2 -2
  11. package/dist/lib/browser/{chunk-QRTB4Q3U.mjs → chunk-7VZJR2OA.mjs} +4 -17
  12. package/dist/lib/browser/chunk-7VZJR2OA.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-CZ4BIAHH.mjs +422 -0
  14. package/dist/lib/browser/chunk-CZ4BIAHH.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-TGX63LTL.mjs → chunk-FJ4765WW.mjs} +1 -1
  16. package/dist/lib/browser/{chunk-TGX63LTL.mjs.map → chunk-FJ4765WW.mjs.map} +2 -2
  17. package/dist/lib/browser/chunk-FO3IYSLV.mjs +68 -0
  18. package/dist/lib/browser/chunk-FO3IYSLV.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-BMIAYUWT.mjs → chunk-JD3Z5NEF.mjs} +147 -75
  20. package/dist/lib/browser/chunk-JD3Z5NEF.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-NBXPP7JR.mjs +1174 -0
  22. package/dist/lib/browser/chunk-NBXPP7JR.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-JKWMHZP6.mjs → chunk-WBHCSOBW.mjs} +2 -2
  24. package/dist/lib/browser/chunk-WBHCSOBW.mjs.map +7 -0
  25. package/dist/lib/browser/{chunk-GDWTW4ZW.mjs → chunk-Z55LVAGN.mjs} +76 -11
  26. package/dist/lib/browser/chunk-Z55LVAGN.mjs.map +7 -0
  27. package/dist/lib/browser/{chunk-F7FW2RK2.mjs → chunk-ZGJAZSNE.mjs} +7 -32
  28. package/dist/lib/browser/chunk-ZGJAZSNE.mjs.map +7 -0
  29. package/dist/lib/browser/cli/index.mjs +14 -28
  30. package/dist/lib/browser/cli/index.mjs.map +3 -3
  31. package/dist/lib/browser/common/activation-events.mjs +7 -7
  32. package/dist/lib/browser/common/capabilities.mjs +7 -7
  33. package/dist/lib/browser/core/activation-event.mjs +1 -1
  34. package/dist/lib/browser/core/capability.mjs +1 -1
  35. package/dist/lib/browser/core/plugin-manager.mjs +8 -4
  36. package/dist/lib/browser/core/plugin.mjs +10 -2
  37. package/dist/lib/browser/core/url-loader.mjs +13 -5
  38. package/dist/lib/browser/index.mjs +34 -17
  39. package/dist/lib/browser/index.mjs.map +3 -3
  40. package/dist/lib/browser/{invoker-capability-VCMPQOIA.mjs → invoker-capability-K4GHUFXF.mjs} +12 -11
  41. package/dist/lib/browser/invoker-capability-K4GHUFXF.mjs.map +7 -0
  42. package/dist/lib/browser/meta.json +1 -1
  43. package/dist/lib/browser/testing/index.mjs +20 -32
  44. package/dist/lib/browser/testing/index.mjs.map +3 -3
  45. package/dist/lib/browser/testing/react.mjs +11 -11
  46. package/dist/lib/browser/ui/index.mjs +14 -12
  47. package/dist/lib/node-esm/{capability-EOQTORML.mjs → capability-FCGZVIEG.mjs} +10 -10
  48. package/dist/lib/node-esm/{capability-KJTQIWDK.mjs → capability-JOIQ2MQE.mjs} +11 -11
  49. package/dist/lib/node-esm/capability-JOIQ2MQE.mjs.map +7 -0
  50. package/dist/lib/node-esm/{chunk-FKE4Z3D6.mjs → chunk-37Z53PXZ.mjs} +1 -1
  51. package/dist/lib/node-esm/{chunk-FKE4Z3D6.mjs.map → chunk-37Z53PXZ.mjs.map} +2 -2
  52. package/dist/lib/node-esm/{chunk-WZCSOX5Q.mjs → chunk-6XW6LET6.mjs} +2 -2
  53. package/dist/lib/node-esm/{chunk-URWHJQT2.mjs → chunk-D347W3KO.mjs} +7 -32
  54. package/dist/lib/node-esm/chunk-D347W3KO.mjs.map +7 -0
  55. package/dist/lib/node-esm/{chunk-WZ6DHQER.mjs → chunk-DRZKO5UZ.mjs} +147 -75
  56. package/dist/lib/node-esm/chunk-DRZKO5UZ.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-HI3YBICQ.mjs → chunk-HTBJU5FX.mjs} +76 -11
  58. package/dist/lib/node-esm/chunk-HTBJU5FX.mjs.map +7 -0
  59. package/dist/lib/node-esm/chunk-M3HKPRPO.mjs +423 -0
  60. package/dist/lib/node-esm/chunk-M3HKPRPO.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-MUVUQC3G.mjs +1175 -0
  62. package/dist/lib/node-esm/chunk-MUVUQC3G.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-VKHGNEDB.mjs → chunk-SBS2YMPT.mjs} +3 -3
  64. package/dist/lib/node-esm/{chunk-VKHGNEDB.mjs.map → chunk-SBS2YMPT.mjs.map} +1 -1
  65. package/dist/lib/node-esm/{chunk-42KBWDE4.mjs → chunk-SDJ4B2LU.mjs} +1 -1
  66. package/dist/lib/node-esm/{chunk-42KBWDE4.mjs.map → chunk-SDJ4B2LU.mjs.map} +1 -1
  67. package/dist/lib/node-esm/{chunk-JPWVIQ5I.mjs → chunk-V24UWT36.mjs} +4 -17
  68. package/dist/lib/node-esm/chunk-V24UWT36.mjs.map +7 -0
  69. package/dist/lib/node-esm/{chunk-G3RTFSNG.mjs → chunk-WFSRZKBP.mjs} +2 -2
  70. package/dist/lib/node-esm/chunk-WFSRZKBP.mjs.map +7 -0
  71. package/dist/lib/node-esm/chunk-WK7OIQKI.mjs +70 -0
  72. package/dist/lib/node-esm/chunk-WK7OIQKI.mjs.map +7 -0
  73. package/dist/lib/node-esm/{chunk-ZZ7CKK6W.mjs → chunk-XOCUANHO.mjs} +1 -1
  74. package/dist/lib/node-esm/{chunk-ZZ7CKK6W.mjs.map → chunk-XOCUANHO.mjs.map} +2 -2
  75. package/dist/lib/node-esm/cli/index.mjs +14 -28
  76. package/dist/lib/node-esm/cli/index.mjs.map +3 -3
  77. package/dist/lib/node-esm/common/activation-events.mjs +7 -7
  78. package/dist/lib/node-esm/common/capabilities.mjs +7 -7
  79. package/dist/lib/node-esm/core/activation-event.mjs +1 -1
  80. package/dist/lib/node-esm/core/capability.mjs +1 -1
  81. package/dist/lib/node-esm/core/plugin-manager.mjs +8 -4
  82. package/dist/lib/node-esm/core/plugin.mjs +10 -2
  83. package/dist/lib/node-esm/core/url-loader.mjs +13 -5
  84. package/dist/lib/node-esm/index.mjs +34 -17
  85. package/dist/lib/node-esm/index.mjs.map +3 -3
  86. package/dist/lib/node-esm/{invoker-capability-EGA3XW6J.mjs → invoker-capability-XEPW5LMJ.mjs} +12 -11
  87. package/dist/lib/node-esm/invoker-capability-XEPW5LMJ.mjs.map +7 -0
  88. package/dist/lib/node-esm/meta.json +1 -1
  89. package/dist/lib/node-esm/testing/index.mjs +20 -32
  90. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  91. package/dist/lib/node-esm/testing/react.mjs +11 -11
  92. package/dist/lib/node-esm/ui/index.mjs +14 -12
  93. package/dist/plugin/node-esm/index.mjs +136 -37
  94. package/dist/plugin/node-esm/index.mjs.map +4 -4
  95. package/dist/plugin/node-esm/meta.json +1 -1
  96. package/dist/types/src/common/annotations.d.ts +1 -0
  97. package/dist/types/src/common/annotations.d.ts.map +1 -0
  98. package/dist/types/src/common/capabilities.d.ts +2 -1
  99. package/dist/types/src/common/capabilities.d.ts.map +1 -1
  100. package/dist/types/src/common/operations.d.ts +1 -1
  101. package/dist/types/src/common/operations.d.ts.map +1 -1
  102. package/dist/types/src/core/activation-event.d.ts +4 -4
  103. package/dist/types/src/core/activation-event.d.ts.map +1 -1
  104. package/dist/types/src/core/capability-manager.d.ts.map +1 -1
  105. package/dist/types/src/core/capability.d.ts +2 -2
  106. package/dist/types/src/core/capability.d.ts.map +1 -1
  107. package/dist/types/src/core/edge-registry-plugin-provider.d.ts +30 -0
  108. package/dist/types/src/core/edge-registry-plugin-provider.d.ts.map +1 -0
  109. package/dist/types/src/core/index.d.ts +5 -0
  110. package/dist/types/src/core/index.d.ts.map +1 -1
  111. package/dist/types/src/core/plugin-asset-cache.d.ts +71 -0
  112. package/dist/types/src/core/plugin-asset-cache.d.ts.map +1 -0
  113. package/dist/types/src/core/plugin-manager.d.ts +163 -2
  114. package/dist/types/src/core/plugin-manager.d.ts.map +1 -1
  115. package/dist/types/src/core/plugin-manifest.d.ts +101 -0
  116. package/dist/types/src/core/plugin-manifest.d.ts.map +1 -0
  117. package/dist/types/src/core/plugin-manifest.test.d.ts +2 -0
  118. package/dist/types/src/core/plugin-manifest.test.d.ts.map +1 -0
  119. package/dist/types/src/core/plugin.d.ts +80 -0
  120. package/dist/types/src/core/plugin.d.ts.map +1 -1
  121. package/dist/types/src/core/registry.d.ts +101 -0
  122. package/dist/types/src/core/registry.d.ts.map +1 -0
  123. package/dist/types/src/core/url-loader.d.ts +88 -3
  124. package/dist/types/src/core/url-loader.d.ts.map +1 -1
  125. package/dist/types/src/helpers.d.ts.map +1 -1
  126. package/dist/types/src/plugin-operation/history/capability.d.ts.map +1 -1
  127. package/dist/types/src/plugin-operation/history/errors.d.ts +6 -6
  128. package/dist/types/src/plugin-operation/history/errors.d.ts.map +1 -1
  129. package/dist/types/src/plugin-operation/history/history-tracker.d.ts +1 -1
  130. package/dist/types/src/plugin-operation/history/history-tracker.d.ts.map +1 -1
  131. package/dist/types/src/plugin-operation/history/types.d.ts +1 -1
  132. package/dist/types/src/plugin-operation/history/types.d.ts.map +1 -1
  133. package/dist/types/src/plugin-operation/history/undo-mapping.d.ts +1 -1
  134. package/dist/types/src/plugin-operation/history/undo-mapping.d.ts.map +1 -1
  135. package/dist/types/src/plugin-operation/history/undo-registry.d.ts +1 -1
  136. package/dist/types/src/plugin-operation/history/undo-registry.d.ts.map +1 -1
  137. package/dist/types/src/plugin-operation/invoker-capability.d.ts +1 -1
  138. package/dist/types/src/plugin-operation/invoker-capability.d.ts.map +1 -1
  139. package/dist/types/src/plugin-operation/meta.d.ts.map +1 -1
  140. package/dist/types/src/plugin-operation/testing.d.ts +2 -1
  141. package/dist/types/src/plugin-operation/testing.d.ts.map +1 -1
  142. package/dist/types/src/plugin-runtime/capability.d.ts +1 -1
  143. package/dist/types/src/plugin-runtime/capability.d.ts.map +1 -1
  144. package/dist/types/src/plugin-runtime/meta.d.ts.map +1 -1
  145. package/dist/types/src/testing/harness.d.ts +1 -1
  146. package/dist/types/src/testing/harness.d.ts.map +1 -1
  147. package/dist/types/src/testing/react.d.ts.map +1 -1
  148. package/dist/types/src/testing/service.d.ts.map +1 -1
  149. package/dist/types/src/testing/withPluginManager.d.ts.map +1 -1
  150. package/dist/types/src/testing/withPluginManager.stories.d.ts.map +1 -1
  151. package/dist/types/src/ui/components/App/App.d.ts.map +1 -1
  152. package/dist/types/src/ui/components/App/App.stories.d.ts.map +1 -1
  153. package/dist/types/src/ui/components/Placeholder/Placeholder.d.ts +64 -0
  154. package/dist/types/src/ui/components/Placeholder/Placeholder.d.ts.map +1 -0
  155. package/dist/types/src/ui/components/Placeholder/Placeholder.stories.d.ts +19 -0
  156. package/dist/types/src/ui/components/Placeholder/Placeholder.stories.d.ts.map +1 -0
  157. package/dist/types/src/ui/components/Placeholder/index.d.ts +2 -0
  158. package/dist/types/src/ui/components/Placeholder/index.d.ts.map +1 -0
  159. package/dist/types/src/ui/components/PluginManager/PluginManagerContext.stories.d.ts.map +1 -1
  160. package/dist/types/src/ui/components/Surface/SurfaceComponent.stories.d.ts.map +1 -1
  161. package/dist/types/src/ui/components/Surface/SurfaceInfo.d.ts.map +1 -1
  162. package/dist/types/src/ui/components/Surface/SurfaceProfilerContext.d.ts.map +1 -1
  163. package/dist/types/src/ui/components/Surface/index.d.ts +1 -1
  164. package/dist/types/src/ui/components/Surface/index.d.ts.map +1 -1
  165. package/dist/types/src/ui/components/Surface/types.d.ts.map +1 -1
  166. package/dist/types/src/ui/components/index.d.ts +1 -0
  167. package/dist/types/src/ui/components/index.d.ts.map +1 -1
  168. package/dist/types/src/ui/hooks/useApp.d.ts +30 -3
  169. package/dist/types/src/ui/hooks/useApp.d.ts.map +1 -1
  170. package/dist/types/src/ui/hooks/useCapabilities.d.ts.map +1 -1
  171. package/dist/types/src/ui/hooks/useLoading.d.ts.map +1 -1
  172. package/dist/types/src/ui/hooks/useSettingsState.d.ts.map +1 -1
  173. package/dist/types/src/vite-plugin/boot-loader/BootLoader.stories.d.ts +20 -36
  174. package/dist/types/src/vite-plugin/boot-loader/BootLoader.stories.d.ts.map +1 -1
  175. package/dist/types/src/vite-plugin/boot-loader/index.d.ts +1 -50
  176. package/dist/types/src/vite-plugin/boot-loader/index.d.ts.map +1 -1
  177. package/dist/types/src/vite-plugin/boot-loader/loader.d.ts +51 -0
  178. package/dist/types/src/vite-plugin/boot-loader/loader.d.ts.map +1 -0
  179. package/dist/types/src/vite-plugin/composer/index.d.ts +12 -12
  180. package/dist/types/src/vite-plugin/composer/index.d.ts.map +1 -1
  181. package/dist/types/src/vite-plugin/import-map/index.d.ts +13 -1
  182. package/dist/types/src/vite-plugin/import-map/index.d.ts.map +1 -1
  183. package/dist/types/src/vite-plugin/manifest.d.ts +30 -5
  184. package/dist/types/src/vite-plugin/manifest.d.ts.map +1 -1
  185. package/dist/types/src/vite-plugin/packages.d.ts.map +1 -1
  186. package/dist/types/tsconfig.tsbuildinfo +1 -1
  187. package/package.json +27 -23
  188. package/src/cli/cli.ts +1 -1
  189. package/src/common/annotations.ts +3 -0
  190. package/src/common/capabilities.ts +2 -1
  191. package/src/common/operations.ts +1 -1
  192. package/src/core/capability.ts +1 -1
  193. package/src/core/edge-registry-plugin-provider.ts +92 -0
  194. package/src/core/index.ts +5 -0
  195. package/src/core/plugin-asset-cache.ts +60 -0
  196. package/src/core/plugin-manager.test.ts +533 -4
  197. package/src/core/plugin-manager.ts +470 -28
  198. package/src/core/plugin-manifest.test.ts +75 -0
  199. package/src/core/plugin-manifest.ts +134 -0
  200. package/src/core/plugin.ts +103 -0
  201. package/src/core/registry.ts +157 -0
  202. package/src/core/url-loader.test.ts +115 -6
  203. package/src/core/url-loader.ts +253 -43
  204. package/src/plugin-operation/history/capability.ts +1 -1
  205. package/src/plugin-operation/history/history-tracker.test.ts +2 -1
  206. package/src/plugin-operation/history/history-tracker.ts +1 -1
  207. package/src/plugin-operation/history/types.ts +1 -1
  208. package/src/plugin-operation/history/undo-mapping.ts +1 -1
  209. package/src/plugin-operation/history/undo-registry.ts +1 -1
  210. package/src/plugin-operation/invoker-capability.ts +2 -1
  211. package/src/plugin-operation/meta.ts +1 -0
  212. package/src/plugin-operation/testing.ts +2 -1
  213. package/src/plugin-runtime/meta.ts +1 -0
  214. package/src/testing/harness.ts +2 -2
  215. package/src/testing/service.ts +1 -1
  216. package/src/testing/withPluginManager.stories.tsx +1 -1
  217. package/src/ui/components/App/App.stories.tsx +2 -6
  218. package/src/ui/components/App/App.tsx +12 -1
  219. package/src/ui/components/Placeholder/Placeholder.stories.tsx +77 -0
  220. package/src/ui/components/Placeholder/Placeholder.tsx +155 -0
  221. package/src/ui/components/Placeholder/index.ts +5 -0
  222. package/src/ui/components/PluginManager/PluginManagerContext.stories.tsx +4 -2
  223. package/src/ui/components/Surface/SurfaceComponent.stories.tsx +1 -1
  224. package/src/ui/components/Surface/SurfaceComponent.tsx +2 -2
  225. package/src/ui/components/Surface/SurfaceInfo.tsx +0 -1
  226. package/src/ui/components/index.ts +1 -0
  227. package/src/ui/hooks/useApp.test.tsx +1 -1
  228. package/src/ui/hooks/useApp.tsx +161 -26
  229. package/src/ui/hooks/useLoading.tsx +14 -6
  230. package/src/vite-plugin/boot-loader/BootLoader.stories.tsx +208 -100
  231. package/src/vite-plugin/boot-loader/boot-loader.css +248 -45
  232. package/src/vite-plugin/boot-loader/boot-loader.js +309 -39
  233. package/src/vite-plugin/boot-loader/index.ts +1 -95
  234. package/src/vite-plugin/boot-loader/loader.ts +123 -0
  235. package/src/vite-plugin/composer/index.ts +61 -39
  236. package/src/vite-plugin/import-map/index.ts +42 -5
  237. package/src/vite-plugin/index.ts +2 -2
  238. package/src/vite-plugin/manifest.test.ts +27 -4
  239. package/src/vite-plugin/manifest.ts +42 -5
  240. package/src/vite-plugin/packages.ts +8 -2
  241. package/tsconfig.json +16 -1
  242. package/.swc/plugins/linux_x86_64_19.0.0/727453fb3a62f7f1d952a41e051ca8a6f88cadc45cee43c6a4d1aa45f9b75665.wasmer-v7 +0 -0
  243. package/dist/lib/browser/capability-DOMNPRJP.mjs.map +0 -7
  244. package/dist/lib/browser/chunk-7B6AJK4D.mjs +0 -964
  245. package/dist/lib/browser/chunk-7B6AJK4D.mjs.map +0 -7
  246. package/dist/lib/browser/chunk-BMIAYUWT.mjs.map +0 -7
  247. package/dist/lib/browser/chunk-F7FW2RK2.mjs.map +0 -7
  248. package/dist/lib/browser/chunk-GDWTW4ZW.mjs.map +0 -7
  249. package/dist/lib/browser/chunk-JKWMHZP6.mjs.map +0 -7
  250. package/dist/lib/browser/chunk-QRTB4Q3U.mjs.map +0 -7
  251. package/dist/lib/browser/chunk-RFSO3JRG.mjs +0 -1
  252. package/dist/lib/browser/chunk-RFSO3JRG.mjs.map +0 -7
  253. package/dist/lib/browser/chunk-Y543KCO7.mjs +0 -174
  254. package/dist/lib/browser/chunk-Y543KCO7.mjs.map +0 -7
  255. package/dist/lib/browser/invoker-capability-VCMPQOIA.mjs.map +0 -7
  256. package/dist/lib/node-esm/capability-KJTQIWDK.mjs.map +0 -7
  257. package/dist/lib/node-esm/chunk-7PJ5OKRB.mjs +0 -965
  258. package/dist/lib/node-esm/chunk-7PJ5OKRB.mjs.map +0 -7
  259. package/dist/lib/node-esm/chunk-DXVXOGJ7.mjs +0 -175
  260. package/dist/lib/node-esm/chunk-DXVXOGJ7.mjs.map +0 -7
  261. package/dist/lib/node-esm/chunk-EL3R25OQ.mjs +0 -2
  262. package/dist/lib/node-esm/chunk-EL3R25OQ.mjs.map +0 -7
  263. package/dist/lib/node-esm/chunk-G3RTFSNG.mjs.map +0 -7
  264. package/dist/lib/node-esm/chunk-HI3YBICQ.mjs.map +0 -7
  265. package/dist/lib/node-esm/chunk-JPWVIQ5I.mjs.map +0 -7
  266. package/dist/lib/node-esm/chunk-URWHJQT2.mjs.map +0 -7
  267. package/dist/lib/node-esm/chunk-WZ6DHQER.mjs.map +0 -7
  268. package/dist/lib/node-esm/invoker-capability-EGA3XW6J.mjs.map +0 -7
  269. /package/dist/lib/browser/{capability-KSNT34SN.mjs.map → capability-LUKGKUQH.mjs.map} +0 -0
  270. /package/dist/lib/browser/{chunk-I34GF4NG.mjs.map → chunk-45CHLTBV.mjs.map} +0 -0
  271. /package/dist/lib/node-esm/{capability-EOQTORML.mjs.map → capability-FCGZVIEG.mjs.map} +0 -0
  272. /package/dist/lib/node-esm/{chunk-WZCSOX5Q.mjs.map → chunk-6XW6LET6.mjs.map} +0 -0
@@ -14,14 +14,31 @@
14
14
  * to React's `<Placeholder>`.
15
15
  */
16
16
  #boot-loader {
17
+ /*
18
+ * Tunable sizes — change these in one place and every derived calc()
19
+ * (mark size, dot orbit radius, status offset, …) follows.
20
+ */
21
+ /*
22
+ * Caps the disc / mark at the design pixel sizes on roomy viewports while
23
+ * shrinking proportionally on narrow ones (`vmin` follows the smaller of
24
+ * width / height) so neither the ring nor the mark crops on phones.
25
+ */
26
+ --boot-loader-disc-size: min(384px, 80vmin);
27
+ /*
28
+ * Match the React `Placeholder`'s logo box (`h-[300px] w-[300px]` at the
29
+ * `stage >= 1` keyframe) so the brand mark doesn't visibly jump size when
30
+ * the loader hands off — the responsive cap keeps the same 300/384 ratio
31
+ * (≈78%) at any viewport width.
32
+ */
33
+ --boot-loader-mark-size: min(300px, 62.5vmin);
34
+ --boot-loader-dot-size: 6px;
35
+ --boot-loader-line-thickness: 1px;
36
+ --boot-loader-line-feather: 1px;
37
+ --boot-loader-status-gap: 32px;
38
+
17
39
  position: fixed;
18
40
  inset: 0;
19
- z-index: 2147483647;
20
- display: flex;
21
- flex-direction: column;
22
- align-items: center;
23
- justify-content: center;
24
- gap: 16px;
41
+ z-index: 10;
25
42
  background: var(--boot-loader-bg-light, #fafafa);
26
43
  color: var(--boot-loader-fg-light, #0a0a0a);
27
44
  font-family:
@@ -41,77 +58,263 @@
41
58
  }
42
59
  }
43
60
 
61
+ /*
62
+ * Register the progress var as a typed custom property so the browser can
63
+ * interpolate it. Both the conic-gradient arc and the orbiting dot derive
64
+ * their angle from `--boot-loader-bar-progress`, so animating the var (rather
65
+ * than the resulting `background` / `transform`) keeps them in lockstep —
66
+ * `transition: background` on a conic-gradient doesn't interpolate smoothly
67
+ * in all engines, which previously caused the head of the arc to flicker
68
+ * against the dot during each progress step.
69
+ */
70
+ @property --boot-loader-bar-progress {
71
+ syntax: '<number>';
72
+ inherits: true;
73
+ initial-value: 0;
74
+ }
75
+
76
+ /*
77
+ * Stack the ring and the brand mark in the same square so the mark sits
78
+ * centered inside the circle. Grid stacking keeps the mark outside the ring's
79
+ * mask (the mask would otherwise clip the SVG to the 1px-thick arc shape).
80
+ */
81
+ #boot-loader-disc {
82
+ position: absolute;
83
+ top: 50%;
84
+ left: 50%;
85
+ display: grid;
86
+ place-items: center;
87
+ width: var(--boot-loader-disc-size);
88
+ height: var(--boot-loader-disc-size);
89
+ transform: translate(-50%, -50%);
90
+ transition: --boot-loader-bar-progress 240ms ease-out;
91
+ }
92
+
93
+ #boot-loader-disc > * {
94
+ grid-column: 1;
95
+ grid-row: 1;
96
+ }
97
+
98
+ /*
99
+ * Default to grayscale so the mark reads as a quiet monochrome silhouette
100
+ * before any host-driven progress lands; the brand palette swaps in once
101
+ * the driver flips `data-host-driven` on the disc (state-2 entry — the
102
+ * first `__bootLoader.progress()` call). Hover keeps a parallel reveal
103
+ * affordance for inspection in the storybook. The 600ms ease lets the
104
+ * grayscale → color transition play through the activation phase rather
105
+ * than snapping.
106
+ */
44
107
  #boot-loader-mark {
45
- width: 56px;
46
- height: 56px;
108
+ width: var(--boot-loader-mark-size);
109
+ height: var(--boot-loader-mark-size);
47
110
  display: flex;
48
111
  align-items: center;
49
112
  justify-content: center;
50
- opacity: 0.1;
113
+ filter: grayscale(100%);
114
+ transition: filter 1000ms ease-out;
115
+ }
116
+
117
+ /*
118
+ * `grayscale(0%)` (identity) rather than `none` — `filter: none` changes
119
+ * the filter function list and most engines treat that as a discrete
120
+ * transition (snap, not ease). Keeping `grayscale(...)` on both sides of
121
+ * the rule lets the browser interpolate the percentage smoothly.
122
+ */
123
+ #boot-loader-disc[data-host-driven] #boot-loader-mark,
124
+ #boot-loader-mark:hover {
125
+ filter: grayscale(0%);
51
126
  }
52
127
 
53
128
  #boot-loader-mark svg {
54
129
  width: 100%;
55
130
  height: 100%;
56
- /* `fill="currentColor"` on the host SVG inherits the loader's text colour. */
131
+ /*
132
+ * The host SVG carries its own brand-palette fills, so we don't apply a
133
+ * `color` cascade here. SVGs that intentionally use `fill="currentColor"`
134
+ * still pick up the loader's text colour via `#boot-loader`'s `color`.
135
+ */
57
136
  }
58
137
 
138
+ /*
139
+ * Circular determinate progress — a 1px-thick ring carved out of a filled
140
+ * disc by a radial-gradient mask. The mask applies to the element and its
141
+ * descendants so the `::before` progress arc is clipped to the ring shape
142
+ * too. There is no indeterminate state: the ring sits empty (0%) until the
143
+ * host calls `__bootLoader.progress(fraction)`, then the arc grows in place.
144
+ * The fill repaints on the compositor thread so progress remains visually
145
+ * smooth even while the JS main thread is busy parsing modules.
146
+ */
59
147
  #boot-loader-bar {
60
148
  position: relative;
61
- width: min(240px, 50vw);
62
- height: 2px;
63
- overflow: hidden;
149
+ width: 100%;
150
+ height: 100%;
151
+ border-radius: 50%;
64
152
  background: rgba(127, 127, 127, 0.18);
65
- border-radius: 1px;
153
+ opacity: 0.3;
154
+ /*
155
+ * Feather the inner edge so the thin line gets soft anti-aliased edges
156
+ * instead of a hard pixel cutoff (which can look stair-stepped on
157
+ * non-retina screens). The outer edge is clipped by `border-radius: 50%`,
158
+ * so only the inner side of the ring needs the gradient feather. The
159
+ * solid line lives in the outermost `--boot-loader-line-thickness` of the
160
+ * disc; the feather extends `--boot-loader-line-feather` further inward.
161
+ */
162
+ mask: radial-gradient(
163
+ circle closest-side,
164
+ transparent calc(100% - var(--boot-loader-line-thickness) - var(--boot-loader-line-feather)),
165
+ #000 calc(100% - var(--boot-loader-line-thickness))
166
+ );
167
+ -webkit-mask: radial-gradient(
168
+ circle closest-side,
169
+ transparent calc(100% - var(--boot-loader-line-thickness) - var(--boot-loader-line-feather)),
170
+ #000 calc(100% - var(--boot-loader-line-thickness))
171
+ );
66
172
  }
67
173
 
174
+ /*
175
+ * The host writes 0–100 into `--boot-loader-bar-progress` via
176
+ * `__bootLoader.progress(fraction)`. The `transition: background` smooths
177
+ * the transitions between counter ticks so the arc grows continuously
178
+ * rather than snapping. `conic-gradient` is clockwise-only, so the arc is
179
+ * mirrored horizontally with `scaleX(-1)` to grow anticlockwise from
180
+ * 12 o'clock.
181
+ */
68
182
  #boot-loader-bar::before {
69
183
  content: '';
70
184
  position: absolute;
71
185
  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;
186
+ border-radius: 50%;
187
+ background: conic-gradient(currentcolor calc(var(--boot-loader-bar-progress, 0) * 1%), transparent 0);
188
+ transform: scaleX(-1);
189
+ opacity: 0.5;
77
190
  }
78
191
 
79
- @keyframes boot-loader-bar {
80
- 0% {
81
- transform: translateX(-100%);
82
- }
83
- 100% {
84
- transform: translateX(250%);
85
- }
192
+ /*
193
+ * A small dot at the leading edge of the arc. Lives as a sibling of the
194
+ * masked ring (inside `#boot-loader-disc`) so the radial-gradient mask
195
+ * doesn't clip it. The `rotate(...) translateY(-50%)` recipe orbits the
196
+ * dot around the disc centre: at progress 0 it sits at 12 o'clock; the
197
+ * negative rotation grows it anticlockwise to match the arc.
198
+ */
199
+ #boot-loader-dot {
200
+ position: absolute;
201
+ top: 50%;
202
+ left: 50%;
203
+ width: var(--boot-loader-dot-size);
204
+ height: var(--boot-loader-dot-size);
205
+ margin: calc(var(--boot-loader-dot-size) / -2) 0 0 calc(var(--boot-loader-dot-size) / -2);
206
+ border-radius: 50%;
207
+ background: currentcolor;
208
+ opacity: 0.5;
209
+ /*
210
+ * Orbit radius = `disc/2 - line/2` so the dot's centre lands on the solid
211
+ * line's centre rather than on the disc's outer edge (the line lives in
212
+ * the outermost `--boot-loader-line-thickness` of the disc).
213
+ */
214
+ transform: rotate(calc(var(--boot-loader-bar-progress, 0) * -3.6deg))
215
+ translateY(calc(var(--boot-loader-disc-size) / -2 + var(--boot-loader-line-thickness) / 2));
216
+ transition: opacity 200ms ease-out;
86
217
  }
87
218
 
88
219
  /*
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.
220
+ * The driver sets `data-progress-active` on `#boot-loader-disc` while
221
+ * progress is strictly between 0 and 1, hiding the dot at the empty (0%)
222
+ * and full (100%) ring states where it would either sit on a bare ring or
223
+ * coincide with the start of the arc.
94
224
  */
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;
225
+ #boot-loader-disc[data-progress-active] #boot-loader-dot {
226
+ opacity: 0.5;
100
227
  }
101
228
 
102
229
  #boot-loader-status {
103
- opacity: 0.7;
230
+ position: absolute;
231
+ top: 50%;
232
+ left: 0;
233
+ right: 0;
234
+ /*
235
+ * Sit just below the centered disc — half the disc plus the configured gap.
236
+ */
237
+ transform: translate(0, calc(var(--boot-loader-disc-size) / 2 + var(--boot-loader-status-gap)));
104
238
  /*
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.
239
+ * Slightly de-emphasised vs body text so the brand mark + ring stay the
240
+ * dominant focus, but high enough to remain legible on both light and dark
241
+ * backgrounds without a custom palette.
112
242
  */
113
- height: 1.5em;
243
+ opacity: 0.5;
244
+ /*
245
+ * Terminal-style log viewport (3 rows at the default `line-height`) over
246
+ * a vertically-stacked track of every status the driver has emitted. The
247
+ * track is bottom-anchored via `justify-content: flex-end` so the newest
248
+ * line always sits on the last visible row, older lines stack above it,
249
+ * and anything that doesn't fit is clipped at the top by
250
+ * `overflow: hidden`. The driver runs a FLIP-style transform animation
251
+ * per append so each new line slides up from below the bottom edge —
252
+ * independent of any `scroll-behavior` smooth-scroll support, which
253
+ * Playwright/headless Chrome strips even from spec-compliant
254
+ * `scrollTo({ behavior: 'smooth' })` calls.
255
+ */
256
+ display: flex;
257
+ flex-direction: column;
258
+ justify-content: flex-end;
259
+ height: 4.5em;
114
260
  line-height: 1.5;
115
261
  letter-spacing: 0.01em;
262
+ /*
263
+ * Fixed-width digits so the `(i/n)` counter on range-bearing status
264
+ * updates ("Loading plugins (12/80)") doesn't jitter as the index
265
+ * ticks through different glyph widths.
266
+ */
267
+ font-variant-numeric: tabular-nums;
268
+ text-align: center;
269
+ overflow: hidden;
270
+ }
271
+
272
+ #boot-loader-status-fade {
273
+ position: absolute;
274
+ top: 0;
275
+ left: 0;
276
+ width: 100%;
277
+ height: 32px;
278
+ background: linear-gradient(to bottom, var(--boot-loader-bg-light, #fafafa), transparent);
279
+ z-index: 1;
280
+ }
281
+ @media (prefers-color-scheme: dark) {
282
+ #boot-loader-status-fade {
283
+ background: linear-gradient(to bottom, var(--boot-loader-bg-dark, #0a0a0a), transparent);
284
+ }
285
+ }
286
+
287
+ /*
288
+ * Track of every appended `.boot-loader-status-line`. The driver writes
289
+ * `--boot-loader-line` (0 = first line visible, 1 = second, …) on this
290
+ * element and the `transform` interpolates because `--boot-loader-line` is
291
+ * registered as a typed `<number>` custom property below.
292
+ */
293
+ #boot-loader-status-track {
294
+ display: flex;
295
+ flex-direction: column;
296
+ /*
297
+ * Resting transform is `translateY(0)` — the bottom-anchored flex
298
+ * parent already positions the newest line on the last visible row.
299
+ * On each append the driver does a one-shot FLIP: snap to
300
+ * `translateY(<lineHeight>px)` with no transition (placing the new
301
+ * line just below the viewport), force a reflow, then animate back to
302
+ * 0 so the track rises by one line-height and the new entry slides up
303
+ * into the bottom row. See `boot-loader.js`.
304
+ */
305
+ transform: translateY(0);
306
+ transition: transform 500ms ease-out;
307
+ }
308
+
309
+ /* Honour reduced-motion preferences explicitly — `transition` doesn't auto-respect it. */
310
+ @media (prefers-reduced-motion: reduce) {
311
+ #boot-loader-status-track {
312
+ transition: none;
313
+ }
314
+ }
315
+
316
+ .boot-loader-status-line {
317
+ flex: 0 0 auto;
318
+ height: 1.5em;
116
319
  white-space: nowrap;
117
320
  }