@dxos/app-framework 0.7.4 → 0.7.5-labs.071a3e2

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 (389) hide show
  1. package/dist/lib/browser/app-graph-builder-MOLT4EHG.mjs +137 -0
  2. package/dist/lib/browser/app-graph-builder-MOLT4EHG.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-G3HBVVT5.mjs +1403 -0
  4. package/dist/lib/browser/chunk-G3HBVVT5.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-LDJ3T4V3.mjs +32 -0
  6. package/dist/lib/browser/chunk-LDJ3T4V3.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-TGOF2WQZ.mjs +285 -0
  8. package/dist/lib/browser/chunk-TGOF2WQZ.mjs.map +7 -0
  9. package/dist/lib/browser/index.mjs +135 -543
  10. package/dist/lib/browser/index.mjs.map +4 -4
  11. package/dist/lib/browser/intent-dispatcher-LJKNIGAM.mjs +11 -0
  12. package/dist/lib/browser/intent-resolver-Z724VAMC.mjs +38 -0
  13. package/dist/lib/browser/intent-resolver-Z724VAMC.mjs.map +7 -0
  14. package/dist/lib/browser/meta.json +1 -1
  15. package/dist/lib/browser/store-NWCY7LAP.mjs +19 -0
  16. package/dist/lib/browser/store-NWCY7LAP.mjs.map +7 -0
  17. package/dist/lib/browser/testing/index.mjs +74 -0
  18. package/dist/lib/browser/testing/index.mjs.map +7 -0
  19. package/dist/lib/browser/worker.mjs +77 -0
  20. package/dist/lib/node/app-graph-builder-G7SRXDFD.cjs +146 -0
  21. package/dist/lib/node/app-graph-builder-G7SRXDFD.cjs.map +7 -0
  22. package/dist/lib/node/chunk-55KIQ6YK.cjs +1437 -0
  23. package/dist/lib/node/chunk-55KIQ6YK.cjs.map +7 -0
  24. package/dist/lib/node/chunk-5GABBW2Q.cjs +308 -0
  25. package/dist/lib/node/chunk-5GABBW2Q.cjs.map +7 -0
  26. package/dist/lib/node/chunk-QLVQ6PND.cjs +58 -0
  27. package/dist/lib/node/chunk-QLVQ6PND.cjs.map +7 -0
  28. package/dist/lib/node/index.cjs +136 -558
  29. package/dist/lib/node/index.cjs.map +4 -4
  30. package/dist/lib/node/{plugin-settings-OZ6IKAE5.cjs → intent-dispatcher-CGUK3BCJ.cjs} +10 -10
  31. package/dist/lib/node/intent-dispatcher-CGUK3BCJ.cjs.map +7 -0
  32. package/dist/lib/node/intent-resolver-7GNKPRWT.cjs +45 -0
  33. package/dist/lib/node/intent-resolver-7GNKPRWT.cjs.map +7 -0
  34. package/dist/lib/node/meta.json +1 -1
  35. package/dist/lib/node/store-WMJSEQPC.cjs +34 -0
  36. package/dist/lib/node/store-WMJSEQPC.cjs.map +7 -0
  37. package/dist/lib/node/testing/index.cjs +98 -0
  38. package/dist/lib/node/testing/index.cjs.map +7 -0
  39. package/dist/lib/node/worker.cjs +99 -0
  40. package/dist/lib/node/worker.cjs.map +7 -0
  41. package/dist/lib/node-esm/app-graph-builder-MKLYH3NE.mjs +138 -0
  42. package/dist/lib/node-esm/app-graph-builder-MKLYH3NE.mjs.map +7 -0
  43. package/dist/lib/node-esm/chunk-47FG42II.mjs +286 -0
  44. package/dist/lib/node-esm/chunk-47FG42II.mjs.map +7 -0
  45. package/dist/lib/node-esm/chunk-CNJYZNSL.mjs +34 -0
  46. package/dist/lib/node-esm/chunk-CNJYZNSL.mjs.map +7 -0
  47. package/dist/lib/node-esm/chunk-ZTB4TA6Q.mjs +1405 -0
  48. package/dist/lib/node-esm/chunk-ZTB4TA6Q.mjs.map +7 -0
  49. package/dist/lib/node-esm/index.mjs +135 -543
  50. package/dist/lib/node-esm/index.mjs.map +4 -4
  51. package/dist/lib/node-esm/intent-dispatcher-RZAWA4XD.mjs +12 -0
  52. package/dist/lib/node-esm/intent-resolver-UIU37CKJ.mjs +39 -0
  53. package/dist/lib/node-esm/intent-resolver-UIU37CKJ.mjs.map +7 -0
  54. package/dist/lib/node-esm/meta.json +1 -1
  55. package/dist/lib/node-esm/store-YUWINFBN.mjs +20 -0
  56. package/dist/lib/node-esm/store-YUWINFBN.mjs.map +7 -0
  57. package/dist/lib/node-esm/testing/index.mjs +75 -0
  58. package/dist/lib/node-esm/testing/index.mjs.map +7 -0
  59. package/dist/lib/node-esm/worker.mjs +78 -0
  60. package/dist/types/src/App.d.ts +22 -13
  61. package/dist/types/src/App.d.ts.map +1 -1
  62. package/dist/types/src/common/capabilities.d.ts +296 -0
  63. package/dist/types/src/common/capabilities.d.ts.map +1 -0
  64. package/dist/types/src/common/events.d.ts +48 -0
  65. package/dist/types/src/common/events.d.ts.map +1 -0
  66. package/dist/types/src/common/file.d.ts +14 -0
  67. package/dist/types/src/common/file.d.ts.map +1 -0
  68. package/dist/types/src/common/graph.d.ts +21 -0
  69. package/dist/types/src/common/graph.d.ts.map +1 -0
  70. package/dist/types/src/common/index.d.ts +8 -0
  71. package/dist/types/src/common/index.d.ts.map +1 -0
  72. package/dist/types/src/common/layout.d.ts +248 -0
  73. package/dist/types/src/common/layout.d.ts.map +1 -0
  74. package/dist/types/src/common/surface.d.ts +68 -0
  75. package/dist/types/src/common/surface.d.ts.map +1 -0
  76. package/dist/types/src/common/translations.d.ts +11 -0
  77. package/dist/types/src/common/translations.d.ts.map +1 -0
  78. package/dist/types/src/core/capabilities.d.ts +94 -0
  79. package/dist/types/src/core/capabilities.d.ts.map +1 -0
  80. package/dist/types/src/core/capabilities.test.d.ts +2 -0
  81. package/dist/types/src/core/capabilities.test.d.ts.map +1 -0
  82. package/dist/types/src/core/events.d.ts +58 -0
  83. package/dist/types/src/core/events.d.ts.map +1 -0
  84. package/dist/types/src/core/index.d.ts +5 -0
  85. package/dist/types/src/core/index.d.ts.map +1 -0
  86. package/dist/types/src/core/manager.d.ts +119 -0
  87. package/dist/types/src/core/manager.d.ts.map +1 -0
  88. package/dist/types/src/core/manager.test.d.ts +2 -0
  89. package/dist/types/src/core/manager.test.d.ts.map +1 -0
  90. package/dist/types/src/core/plugin.d.ts +97 -0
  91. package/dist/types/src/core/plugin.d.ts.map +1 -0
  92. package/dist/types/src/helpers.d.ts +10 -0
  93. package/dist/types/src/helpers.d.ts.map +1 -0
  94. package/dist/types/src/helpers.test.d.ts +2 -0
  95. package/dist/types/src/helpers.test.d.ts.map +1 -0
  96. package/dist/types/src/index.d.ts +5 -1
  97. package/dist/types/src/index.d.ts.map +1 -1
  98. package/dist/types/src/playground/debug/Debug.d.ts +6 -0
  99. package/dist/types/src/playground/debug/Debug.d.ts.map +1 -0
  100. package/dist/types/src/playground/debug/index.d.ts +2 -0
  101. package/dist/types/src/playground/debug/index.d.ts.map +1 -0
  102. package/dist/types/src/playground/debug/plugin.d.ts +2 -0
  103. package/dist/types/src/playground/debug/plugin.d.ts.map +1 -0
  104. package/dist/types/src/playground/generator/Main.d.ts +6 -0
  105. package/dist/types/src/playground/generator/Main.d.ts.map +1 -0
  106. package/dist/types/src/playground/generator/Toolbar.d.ts +6 -0
  107. package/dist/types/src/playground/generator/Toolbar.d.ts.map +1 -0
  108. package/dist/types/src/playground/generator/generator.d.ts +7 -0
  109. package/dist/types/src/playground/generator/generator.d.ts.map +1 -0
  110. package/dist/types/src/playground/generator/index.d.ts +3 -0
  111. package/dist/types/src/playground/generator/index.d.ts.map +1 -0
  112. package/dist/types/src/playground/generator/plugin.d.ts +2 -0
  113. package/dist/types/src/playground/generator/plugin.d.ts.map +1 -0
  114. package/dist/types/src/playground/layout/Layout.d.ts +8 -0
  115. package/dist/types/src/playground/layout/Layout.d.ts.map +1 -0
  116. package/dist/types/src/playground/layout/index.d.ts +2 -0
  117. package/dist/types/src/playground/layout/index.d.ts.map +1 -0
  118. package/dist/types/src/playground/layout/plugin.d.ts +2 -0
  119. package/dist/types/src/playground/layout/plugin.d.ts.map +1 -0
  120. package/dist/types/src/playground/logger/Toolbar.d.ts +6 -0
  121. package/dist/types/src/playground/logger/Toolbar.d.ts.map +1 -0
  122. package/dist/types/src/playground/logger/index.d.ts +2 -0
  123. package/dist/types/src/playground/logger/index.d.ts.map +1 -0
  124. package/dist/types/src/playground/logger/plugin.d.ts +2 -0
  125. package/dist/types/src/playground/logger/plugin.d.ts.map +1 -0
  126. package/dist/types/src/playground/logger/schema.d.ts +13 -0
  127. package/dist/types/src/playground/logger/schema.d.ts.map +1 -0
  128. package/dist/types/src/playground/playground.stories.d.ts +10 -0
  129. package/dist/types/src/playground/playground.stories.d.ts.map +1 -0
  130. package/dist/types/src/plugin-intent/IntentPlugin.d.ts +2 -0
  131. package/dist/types/src/plugin-intent/IntentPlugin.d.ts.map +1 -0
  132. package/dist/types/src/plugin-intent/actions.d.ts +23 -0
  133. package/dist/types/src/plugin-intent/actions.d.ts.map +1 -0
  134. package/dist/types/src/plugin-intent/errors.d.ts +16 -0
  135. package/dist/types/src/plugin-intent/errors.d.ts.map +1 -0
  136. package/dist/types/src/plugin-intent/index.d.ts +5 -0
  137. package/dist/types/src/plugin-intent/index.d.ts.map +1 -0
  138. package/dist/types/src/plugin-intent/intent-dispatcher.d.ts +113 -0
  139. package/dist/types/src/plugin-intent/intent-dispatcher.d.ts.map +1 -0
  140. package/dist/types/src/plugin-intent/intent-dispatcher.test.d.ts +2 -0
  141. package/dist/types/src/plugin-intent/intent-dispatcher.test.d.ts.map +1 -0
  142. package/dist/types/src/plugin-intent/intent.d.ts +68 -0
  143. package/dist/types/src/plugin-intent/intent.d.ts.map +1 -0
  144. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts +2 -0
  145. package/dist/types/src/plugin-settings/SettingsPlugin.d.ts.map +1 -0
  146. package/dist/types/src/plugin-settings/actions.d.ts +27 -0
  147. package/dist/types/src/plugin-settings/actions.d.ts.map +1 -0
  148. package/dist/types/src/plugin-settings/app-graph-builder.d.ts +197 -0
  149. package/dist/types/src/plugin-settings/app-graph-builder.d.ts.map +1 -0
  150. package/dist/types/src/plugin-settings/index.d.ts +3 -0
  151. package/dist/types/src/plugin-settings/index.d.ts.map +1 -0
  152. package/dist/types/src/plugin-settings/intent-resolver.d.ts +4 -0
  153. package/dist/types/src/plugin-settings/intent-resolver.d.ts.map +1 -0
  154. package/dist/types/src/plugin-settings/store.d.ts +5 -0
  155. package/dist/types/src/plugin-settings/store.d.ts.map +1 -0
  156. package/dist/types/src/plugin-settings/translations.d.ts +11 -0
  157. package/dist/types/src/plugin-settings/translations.d.ts.map +1 -0
  158. package/dist/types/src/react/ErrorBoundary.d.ts.map +1 -0
  159. package/dist/types/src/react/IntentContext.d.ts +8 -0
  160. package/dist/types/src/react/IntentContext.d.ts.map +1 -0
  161. package/dist/types/src/react/PluginManagerProvider.d.ts +10 -0
  162. package/dist/types/src/react/PluginManagerProvider.d.ts.map +1 -0
  163. package/dist/types/src/react/Surface.d.ts +12 -0
  164. package/dist/types/src/react/Surface.d.ts.map +1 -0
  165. package/dist/types/src/react/Surface.stories.d.ts +16 -0
  166. package/dist/types/src/react/Surface.stories.d.ts.map +1 -0
  167. package/dist/types/src/react/common.d.ts +12 -0
  168. package/dist/types/src/react/common.d.ts.map +1 -0
  169. package/dist/types/src/react/index.d.ts +7 -0
  170. package/dist/types/src/react/index.d.ts.map +1 -0
  171. package/dist/types/src/react/useCapabilities.d.ts +13 -0
  172. package/dist/types/src/react/useCapabilities.d.ts.map +1 -0
  173. package/dist/types/src/react/useIntentResolver.d.ts +3 -0
  174. package/dist/types/src/react/useIntentResolver.d.ts.map +1 -0
  175. package/dist/types/src/testing/index.d.ts +2 -0
  176. package/dist/types/src/testing/index.d.ts.map +1 -0
  177. package/dist/types/src/testing/withPluginManager.d.ts +10 -0
  178. package/dist/types/src/testing/withPluginManager.d.ts.map +1 -0
  179. package/dist/types/src/testing/withPluginManager.stories.d.ts +5 -0
  180. package/dist/types/src/testing/withPluginManager.stories.d.ts.map +1 -0
  181. package/dist/types/src/worker.d.ts +4 -0
  182. package/dist/types/src/worker.d.ts.map +1 -0
  183. package/dist/types/tsconfig.tsbuildinfo +1 -0
  184. package/package.json +39 -17
  185. package/project.json +4 -3
  186. package/src/App.tsx +139 -34
  187. package/src/common/capabilities.ts +97 -0
  188. package/src/common/events.ts +72 -0
  189. package/src/common/file.ts +22 -0
  190. package/src/common/graph.ts +30 -0
  191. package/src/{plugins/common → common}/index.ts +3 -2
  192. package/src/common/layout.ts +225 -0
  193. package/src/common/surface.ts +81 -0
  194. package/src/common/translations.ts +17 -0
  195. package/src/core/capabilities.test.ts +116 -0
  196. package/src/core/capabilities.ts +222 -0
  197. package/src/core/events.ts +58 -0
  198. package/src/core/index.ts +8 -0
  199. package/src/core/manager.test.ts +516 -0
  200. package/src/core/manager.ts +511 -0
  201. package/src/core/plugin.ts +131 -0
  202. package/src/helpers.test.ts +97 -0
  203. package/src/helpers.ts +45 -0
  204. package/src/index.ts +6 -3
  205. package/src/playground/debug/Debug.tsx +39 -0
  206. package/src/playground/debug/index.ts +5 -0
  207. package/src/playground/debug/plugin.ts +17 -0
  208. package/src/playground/generator/Main.tsx +71 -0
  209. package/src/playground/generator/Toolbar.tsx +46 -0
  210. package/src/playground/generator/generator.ts +48 -0
  211. package/src/playground/generator/index.ts +6 -0
  212. package/src/playground/generator/plugin.ts +23 -0
  213. package/src/playground/layout/Layout.tsx +33 -0
  214. package/src/playground/layout/index.ts +5 -0
  215. package/src/playground/layout/plugin.ts +17 -0
  216. package/src/playground/logger/Toolbar.tsx +29 -0
  217. package/src/playground/logger/index.ts +5 -0
  218. package/src/playground/logger/plugin.ts +36 -0
  219. package/src/playground/logger/schema.ts +12 -0
  220. package/src/playground/playground.stories.tsx +34 -0
  221. package/src/plugin-intent/IntentPlugin.tsx +20 -0
  222. package/src/plugin-intent/actions.ts +22 -0
  223. package/src/plugin-intent/errors.ts +39 -0
  224. package/src/plugin-intent/index.ts +8 -0
  225. package/src/plugin-intent/intent-dispatcher.test.ts +299 -0
  226. package/src/plugin-intent/intent-dispatcher.ts +304 -0
  227. package/src/plugin-intent/intent.ts +146 -0
  228. package/src/plugin-settings/SettingsPlugin.ts +35 -0
  229. package/src/plugin-settings/actions.ts +27 -0
  230. package/src/plugin-settings/app-graph-builder.ts +122 -0
  231. package/src/plugin-settings/index.ts +6 -0
  232. package/src/plugin-settings/intent-resolver.ts +28 -0
  233. package/src/plugin-settings/store.ts +20 -0
  234. package/src/plugin-settings/translations.ts +17 -0
  235. package/src/react/IntentContext.tsx +34 -0
  236. package/src/react/PluginManagerProvider.ts +22 -0
  237. package/src/react/Surface.stories.tsx +96 -0
  238. package/src/react/Surface.tsx +75 -0
  239. package/src/react/common.ts +12 -0
  240. package/src/react/index.ts +10 -0
  241. package/src/react/useCapabilities.ts +40 -0
  242. package/src/react/useIntentResolver.ts +22 -0
  243. package/src/testing/index.ts +5 -0
  244. package/src/testing/withPluginManager.stories.tsx +47 -0
  245. package/src/testing/withPluginManager.tsx +75 -0
  246. package/src/worker.ts +11 -0
  247. package/tsconfig.json +54 -2
  248. package/dist/lib/browser/chunk-3E7RY3CE.mjs +0 -72
  249. package/dist/lib/browser/chunk-3E7RY3CE.mjs.map +0 -7
  250. package/dist/lib/browser/chunk-653Y45CL.mjs +0 -41
  251. package/dist/lib/browser/chunk-653Y45CL.mjs.map +0 -7
  252. package/dist/lib/browser/chunk-FRXJ25VI.mjs +0 -214
  253. package/dist/lib/browser/chunk-FRXJ25VI.mjs.map +0 -7
  254. package/dist/lib/browser/chunk-YXM35XRE.mjs +0 -213
  255. package/dist/lib/browser/chunk-YXM35XRE.mjs.map +0 -7
  256. package/dist/lib/browser/plugin-intent-LU4KL2RO.mjs +0 -22
  257. package/dist/lib/browser/plugin-settings-OM3G2QFY.mjs +0 -11
  258. package/dist/lib/browser/plugin-surface-LECZMKSQ.mjs +0 -24
  259. package/dist/lib/node/chunk-JZ2JVKRY.cjs +0 -58
  260. package/dist/lib/node/chunk-JZ2JVKRY.cjs.map +0 -7
  261. package/dist/lib/node/chunk-QBM42OQ6.cjs +0 -97
  262. package/dist/lib/node/chunk-QBM42OQ6.cjs.map +0 -7
  263. package/dist/lib/node/chunk-QSVP5HOW.cjs +0 -238
  264. package/dist/lib/node/chunk-QSVP5HOW.cjs.map +0 -7
  265. package/dist/lib/node/chunk-SOVLKUWI.cjs +0 -236
  266. package/dist/lib/node/chunk-SOVLKUWI.cjs.map +0 -7
  267. package/dist/lib/node/plugin-intent-FVFR2LKB.cjs +0 -43
  268. package/dist/lib/node/plugin-intent-FVFR2LKB.cjs.map +0 -7
  269. package/dist/lib/node/plugin-settings-OZ6IKAE5.cjs.map +0 -7
  270. package/dist/lib/node/plugin-surface-YWDRXQTD.cjs +0 -45
  271. package/dist/lib/node/plugin-surface-YWDRXQTD.cjs.map +0 -7
  272. package/dist/lib/node-esm/chunk-2R4GVK7O.mjs +0 -215
  273. package/dist/lib/node-esm/chunk-2R4GVK7O.mjs.map +0 -7
  274. package/dist/lib/node-esm/chunk-EYCTSFEJ.mjs +0 -74
  275. package/dist/lib/node-esm/chunk-EYCTSFEJ.mjs.map +0 -7
  276. package/dist/lib/node-esm/chunk-YFMFQBB4.mjs +0 -214
  277. package/dist/lib/node-esm/chunk-YFMFQBB4.mjs.map +0 -7
  278. package/dist/lib/node-esm/chunk-YNU7FTGJ.mjs +0 -43
  279. package/dist/lib/node-esm/chunk-YNU7FTGJ.mjs.map +0 -7
  280. package/dist/lib/node-esm/plugin-intent-V7ER24Y6.mjs +0 -23
  281. package/dist/lib/node-esm/plugin-settings-37UVWF2V.mjs +0 -12
  282. package/dist/lib/node-esm/plugin-settings-37UVWF2V.mjs.map +0 -7
  283. package/dist/lib/node-esm/plugin-surface-TEU42XQN.mjs +0 -25
  284. package/dist/lib/node-esm/plugin-surface-TEU42XQN.mjs.map +0 -7
  285. package/dist/types/src/plugins/common/file.d.ts +0 -22
  286. package/dist/types/src/plugins/common/file.d.ts.map +0 -1
  287. package/dist/types/src/plugins/common/graph.d.ts +0 -51
  288. package/dist/types/src/plugins/common/graph.d.ts.map +0 -1
  289. package/dist/types/src/plugins/common/index.d.ts +0 -7
  290. package/dist/types/src/plugins/common/index.d.ts.map +0 -1
  291. package/dist/types/src/plugins/common/layout.d.ts +0 -202
  292. package/dist/types/src/plugins/common/layout.d.ts.map +0 -1
  293. package/dist/types/src/plugins/common/metadata.d.ts +0 -16
  294. package/dist/types/src/plugins/common/metadata.d.ts.map +0 -1
  295. package/dist/types/src/plugins/common/navigation.d.ts +0 -196
  296. package/dist/types/src/plugins/common/navigation.d.ts.map +0 -1
  297. package/dist/types/src/plugins/common/translations.d.ts +0 -22
  298. package/dist/types/src/plugins/common/translations.d.ts.map +0 -1
  299. package/dist/types/src/plugins/helpers.d.ts +0 -41
  300. package/dist/types/src/plugins/helpers.d.ts.map +0 -1
  301. package/dist/types/src/plugins/index.d.ts +0 -7
  302. package/dist/types/src/plugins/index.d.ts.map +0 -1
  303. package/dist/types/src/plugins/plugin-host/HostPlugin.d.ts +0 -21
  304. package/dist/types/src/plugins/plugin-host/HostPlugin.d.ts.map +0 -1
  305. package/dist/types/src/plugins/plugin-host/PluginContainer.d.ts +0 -14
  306. package/dist/types/src/plugins/plugin-host/PluginContainer.d.ts.map +0 -1
  307. package/dist/types/src/plugins/plugin-host/PluginContext.d.ts +0 -47
  308. package/dist/types/src/plugins/plugin-host/PluginContext.d.ts.map +0 -1
  309. package/dist/types/src/plugins/plugin-host/index.d.ts +0 -4
  310. package/dist/types/src/plugins/plugin-host/index.d.ts.map +0 -1
  311. package/dist/types/src/plugins/plugin-host/plugin.d.ts +0 -98
  312. package/dist/types/src/plugins/plugin-host/plugin.d.ts.map +0 -1
  313. package/dist/types/src/plugins/plugin-host/plugin.test.d.ts +0 -35
  314. package/dist/types/src/plugins/plugin-host/plugin.test.d.ts.map +0 -1
  315. package/dist/types/src/plugins/plugin-intent/IntentContext.d.ts +0 -21
  316. package/dist/types/src/plugins/plugin-intent/IntentContext.d.ts.map +0 -1
  317. package/dist/types/src/plugins/plugin-intent/IntentPlugin.d.ts +0 -8
  318. package/dist/types/src/plugins/plugin-intent/IntentPlugin.d.ts.map +0 -1
  319. package/dist/types/src/plugins/plugin-intent/helpers.d.ts +0 -6
  320. package/dist/types/src/plugins/plugin-intent/helpers.d.ts.map +0 -1
  321. package/dist/types/src/plugins/plugin-intent/index.d.ts +0 -6
  322. package/dist/types/src/plugins/plugin-intent/index.d.ts.map +0 -1
  323. package/dist/types/src/plugins/plugin-intent/intent.d.ts +0 -81
  324. package/dist/types/src/plugins/plugin-intent/intent.d.ts.map +0 -1
  325. package/dist/types/src/plugins/plugin-intent/meta.d.ts +0 -5
  326. package/dist/types/src/plugins/plugin-intent/meta.d.ts.map +0 -1
  327. package/dist/types/src/plugins/plugin-intent/provides.d.ts +0 -20
  328. package/dist/types/src/plugins/plugin-intent/provides.d.ts.map +0 -1
  329. package/dist/types/src/plugins/plugin-settings/SettingsPlugin.d.ts +0 -4
  330. package/dist/types/src/plugins/plugin-settings/SettingsPlugin.d.ts.map +0 -1
  331. package/dist/types/src/plugins/plugin-settings/index.d.ts +0 -4
  332. package/dist/types/src/plugins/plugin-settings/index.d.ts.map +0 -1
  333. package/dist/types/src/plugins/plugin-settings/meta.d.ts +0 -5
  334. package/dist/types/src/plugins/plugin-settings/meta.d.ts.map +0 -1
  335. package/dist/types/src/plugins/plugin-settings/provides.d.ts +0 -13
  336. package/dist/types/src/plugins/plugin-settings/provides.d.ts.map +0 -1
  337. package/dist/types/src/plugins/plugin-surface/ErrorBoundary.d.ts.map +0 -1
  338. package/dist/types/src/plugins/plugin-surface/Surface.d.ts +0 -62
  339. package/dist/types/src/plugins/plugin-surface/Surface.d.ts.map +0 -1
  340. package/dist/types/src/plugins/plugin-surface/SurfacePlugin.d.ts +0 -7
  341. package/dist/types/src/plugins/plugin-surface/SurfacePlugin.d.ts.map +0 -1
  342. package/dist/types/src/plugins/plugin-surface/SurfaceRootContext.d.ts +0 -39
  343. package/dist/types/src/plugins/plugin-surface/SurfaceRootContext.d.ts.map +0 -1
  344. package/dist/types/src/plugins/plugin-surface/helpers.d.ts +0 -21
  345. package/dist/types/src/plugins/plugin-surface/helpers.d.ts.map +0 -1
  346. package/dist/types/src/plugins/plugin-surface/index.d.ts +0 -8
  347. package/dist/types/src/plugins/plugin-surface/index.d.ts.map +0 -1
  348. package/dist/types/src/plugins/plugin-surface/meta.d.ts +0 -5
  349. package/dist/types/src/plugins/plugin-surface/meta.d.ts.map +0 -1
  350. package/dist/types/src/plugins/plugin-surface/provides.d.ts +0 -16
  351. package/dist/types/src/plugins/plugin-surface/provides.d.ts.map +0 -1
  352. package/src/plugins/common/file.ts +0 -36
  353. package/src/plugins/common/graph.ts +0 -70
  354. package/src/plugins/common/layout.ts +0 -155
  355. package/src/plugins/common/metadata.ts +0 -29
  356. package/src/plugins/common/navigation.ts +0 -185
  357. package/src/plugins/common/translations.ts +0 -36
  358. package/src/plugins/helpers.ts +0 -92
  359. package/src/plugins/index.ts +0 -11
  360. package/src/plugins/plugin-host/HostPlugin.tsx +0 -96
  361. package/src/plugins/plugin-host/PluginContainer.tsx +0 -120
  362. package/src/plugins/plugin-host/PluginContext.tsx +0 -79
  363. package/src/plugins/plugin-host/index.ts +0 -8
  364. package/src/plugins/plugin-host/plugin.test.ts +0 -158
  365. package/src/plugins/plugin-host/plugin.ts +0 -126
  366. package/src/plugins/plugin-intent/IntentContext.tsx +0 -49
  367. package/src/plugins/plugin-intent/IntentPlugin.tsx +0 -151
  368. package/src/plugins/plugin-intent/helpers.ts +0 -11
  369. package/src/plugins/plugin-intent/index.ts +0 -12
  370. package/src/plugins/plugin-intent/intent.ts +0 -101
  371. package/src/plugins/plugin-intent/meta.ts +0 -9
  372. package/src/plugins/plugin-intent/provides.ts +0 -38
  373. package/src/plugins/plugin-settings/SettingsPlugin.tsx +0 -22
  374. package/src/plugins/plugin-settings/index.ts +0 -9
  375. package/src/plugins/plugin-settings/meta.ts +0 -9
  376. package/src/plugins/plugin-settings/provides.ts +0 -29
  377. package/src/plugins/plugin-surface/Surface.tsx +0 -195
  378. package/src/plugins/plugin-surface/SurfacePlugin.tsx +0 -33
  379. package/src/plugins/plugin-surface/SurfaceRootContext.tsx +0 -60
  380. package/src/plugins/plugin-surface/helpers.ts +0 -22
  381. package/src/plugins/plugin-surface/index.ts +0 -14
  382. package/src/plugins/plugin-surface/meta.ts +0 -9
  383. package/src/plugins/plugin-surface/provides.ts +0 -26
  384. /package/dist/lib/browser/{plugin-intent-LU4KL2RO.mjs.map → intent-dispatcher-LJKNIGAM.mjs.map} +0 -0
  385. /package/dist/lib/browser/{plugin-settings-OM3G2QFY.mjs.map → worker.mjs.map} +0 -0
  386. /package/dist/lib/{browser/plugin-surface-LECZMKSQ.mjs.map → node-esm/intent-dispatcher-RZAWA4XD.mjs.map} +0 -0
  387. /package/dist/lib/node-esm/{plugin-intent-V7ER24Y6.mjs.map → worker.mjs.map} +0 -0
  388. /package/dist/types/src/{plugins/plugin-surface → react}/ErrorBoundary.d.ts +0 -0
  389. /package/src/{plugins/plugin-surface → react}/ErrorBoundary.tsx +0 -0
@@ -1,49 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { type Context, createContext, useContext, type Provider } from 'react';
6
- import { useEffect } from 'react';
7
-
8
- import type { UnsubscribeCallback } from '@dxos/async';
9
-
10
- import type { Intent, IntentDispatcher, IntentResolver, IntentResult } from './intent';
11
-
12
- export type IntentExecution = {
13
- intent: Intent;
14
- result: IntentResult;
15
- };
16
-
17
- export type IntentContext = {
18
- dispatch: IntentDispatcher;
19
- undo: () => Promise<IntentResult | void>;
20
- history: IntentExecution[][];
21
- registerResolver: (pluginId: string, resolver: IntentResolver) => UnsubscribeCallback;
22
- };
23
-
24
- const IntentContext: Context<IntentContext> = createContext<IntentContext>({
25
- dispatch: async () => ({}),
26
- undo: async () => ({}),
27
- history: [],
28
- registerResolver: () => () => {},
29
- });
30
-
31
- /**
32
- * @deprecated Prefer granular hooks.
33
- */
34
- // TODO(burdon): Remove. Use useIntentDispatcher.
35
- export const useIntent = () => useContext(IntentContext);
36
-
37
- export const useIntentDispatcher = (): IntentDispatcher => {
38
- const { dispatch } = useIntent();
39
- return dispatch;
40
- };
41
-
42
- export const useIntentResolver = (plugin: string, resolver: IntentResolver) => {
43
- const { registerResolver } = useIntent();
44
- useEffect(() => {
45
- return registerResolver(plugin, resolver);
46
- }, [plugin, resolver]);
47
- };
48
-
49
- export const IntentProvider: Provider<IntentContext> = IntentContext.Provider;
@@ -1,151 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import React from 'react';
6
-
7
- import { create } from '@dxos/live-object';
8
- import { log } from '@dxos/log';
9
-
10
- import { type IntentContext, type IntentExecution, IntentProvider } from './IntentContext';
11
- import { isUndoable } from './helpers';
12
- import type { Intent, IntentResolver } from './intent';
13
- import IntentMeta from './meta';
14
- import {
15
- IntentAction,
16
- type IntentPluginProvides,
17
- type IntentResolverProvides,
18
- parseIntentResolverPlugin,
19
- } from './provides';
20
- import { filterPlugins, findPlugin } from '../helpers';
21
- import { type PluginDefinition } from '../plugin-host';
22
-
23
- const EXECUTION_LIMIT = 1000;
24
- const HISTORY_LIMIT = 100;
25
-
26
- /**
27
- * Allows plugins to register intent handlers and routes sent intents to the appropriate plugin.
28
- * Inspired by https://developer.android.com/reference/android/content/Intent.
29
- */
30
- export const IntentPlugin = (): PluginDefinition<IntentPluginProvides> => {
31
- const state = create<IntentContext>({
32
- dispatch: async () => ({}),
33
- undo: async () => ({}),
34
- history: [],
35
- registerResolver: () => () => {},
36
- });
37
-
38
- const dynamicResolvers = new Set<{ plugin: string; resolver: IntentResolver }>();
39
-
40
- return {
41
- meta: IntentMeta,
42
- ready: async (plugins) => {
43
- // Dispatch intent to associated plugin.
44
- const dispatch = async (intent: Intent) => {
45
- log('dispatch', { action: intent.action, intent });
46
- if (intent.plugin) {
47
- for (const entry of dynamicResolvers) {
48
- if (entry.plugin === intent.plugin) {
49
- const result = await entry.resolver(intent, plugins);
50
- if (result) {
51
- return result;
52
- }
53
- }
54
- }
55
-
56
- const plugin = findPlugin<IntentResolverProvides>(plugins, intent.plugin);
57
- return plugin?.provides.intent.resolver(intent, plugins);
58
- }
59
-
60
- for (const entry of dynamicResolvers) {
61
- const result = await entry.resolver(intent, plugins);
62
- if (result) {
63
- return result;
64
- }
65
- }
66
-
67
- // Return resolved value from first plugin that handles the intent.
68
- for (const plugin of filterPlugins(plugins, parseIntentResolverPlugin)) {
69
- const result = await plugin.provides.intent.resolver(intent, plugins);
70
- if (result) {
71
- return result;
72
- }
73
- }
74
-
75
- // https://vitejs.dev/guide/env-and-mode#env-variables
76
- // TODO(wittjosiah): How to handle this more generically?
77
- if (import.meta?.env?.DEV) {
78
- log.warn('No plugin found to handle intent', intent);
79
- }
80
- };
81
-
82
- // Sequentially dispatch array of invents.
83
- const dispatchChain = async (intentOrArray: Intent | Intent[], depth = 0) => {
84
- if (depth > EXECUTION_LIMIT) {
85
- return {
86
- error: new Error(
87
- `Intent execution limit exceeded (${EXECUTION_LIMIT} iterations). This is likely due to an infinite loop within intent resolvers.`,
88
- ),
89
- };
90
- }
91
-
92
- const executionResults: IntentExecution[] = [];
93
- const chain = Array.isArray(intentOrArray) ? intentOrArray : [intentOrArray];
94
- for (const intent of chain) {
95
- const { result: prevResult } = executionResults.at(-1) ?? {};
96
- const data = intent.data ? { result: prevResult?.data, ...intent.data } : prevResult?.data;
97
- const result = await dispatch({ ...intent, data });
98
-
99
- if (!result || result?.error) {
100
- break;
101
- }
102
-
103
- executionResults.push({ intent, result });
104
-
105
- // TODO(wittjosiah): How does undo work with returned intents?
106
- result?.intents?.forEach((intents) => {
107
- void dispatchChain(intents, depth + 1);
108
- });
109
- }
110
-
111
- state.history.push(executionResults);
112
- if (state.history.length > HISTORY_LIMIT) {
113
- state.history.splice(0, state.history.length - HISTORY_LIMIT);
114
- }
115
-
116
- if (isUndoable(executionResults)) {
117
- void dispatch({ action: IntentAction.SHOW_UNDO, data: { results: executionResults } });
118
- }
119
-
120
- return executionResults.at(-1)?.result;
121
- };
122
-
123
- const undo = async () => {
124
- const last = state.history.findLastIndex(isUndoable);
125
- const chain =
126
- last !== -1 &&
127
- state.history[last]?.map(({ intent, result }): Intent => {
128
- const data = result.undoable?.data ? { ...intent.data, ...result.undoable.data } : intent.data;
129
- return { ...intent, data, undo: true };
130
- });
131
- if (chain) {
132
- const result = await dispatchChain(chain);
133
- state.history = state.history.filter((_, index) => index !== last);
134
- return result;
135
- }
136
- };
137
-
138
- state.dispatch = dispatchChain;
139
- state.undo = undo;
140
- state.registerResolver = (plugin, resolver) => {
141
- const entry = { plugin, resolver };
142
- dynamicResolvers.add(entry);
143
- return () => dynamicResolvers.delete(entry);
144
- };
145
- },
146
- provides: {
147
- intent: state,
148
- context: ({ children }) => <IntentProvider value={state}>{children}</IntentProvider>,
149
- },
150
- };
151
- };
@@ -1,11 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { type IntentExecution } from './IntentContext';
6
-
7
- /**
8
- * Check if the chain of intents is undoable.
9
- */
10
- export const isUndoable = (chain: IntentExecution[]): boolean =>
11
- chain.length > 0 && chain.every(({ result }) => result.undoable);
@@ -1,12 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { IntentPlugin } from './IntentPlugin';
6
-
7
- export * from './intent';
8
- export * from './provides';
9
-
10
- export * from './IntentContext';
11
-
12
- export default IntentPlugin;
@@ -1,101 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import type { MaybePromise } from '@dxos/util';
6
-
7
- import type { Plugin } from '../plugin-host';
8
-
9
- /**
10
- * Type of data returned from an intent.
11
- */
12
- export type IntentData<T extends Record<string, any> = Record<string, any>> = T & {
13
- /**
14
- * The data from the result of the previous intent.
15
- */
16
- // TODO(burdon): Chainable types? (see Effect hooks).
17
- result?: any;
18
- };
19
-
20
- /**
21
- * An intent is an abstract description of an operation to be performed.
22
- * Intents allow actions to be performed across plugins.
23
- */
24
- export type Intent = {
25
- /**
26
- * Plugin ID.
27
- * If specified, the intent will be sent explicitly to the plugin.
28
- * Otherwise, the intent will be sent to all plugins, in order and the first to resolve a non-null value will be used.
29
- */
30
- plugin?: string;
31
-
32
- /**
33
- * The action to perform.
34
- */
35
- action: string;
36
-
37
- /**
38
- * Whether or not the intent is being undone.
39
- */
40
- undo?: boolean;
41
-
42
- /**
43
- * Any data needed to perform the desired action.
44
- */
45
- // TODO(burdon): Typed intents.
46
- data?: IntentData;
47
- };
48
-
49
- export type IntentResult = {
50
- /**
51
- * The output of the action that was performed.
52
- *
53
- * If the intent is apart of a chain of intents, the data will be passed to the next intent.
54
- */
55
- data?: any;
56
-
57
- /**
58
- * If provided, the action will be undoable.
59
- */
60
- undoable?: {
61
- /**
62
- * Message to display to the user when indicating that the action can be undone.
63
- */
64
- message: string;
65
-
66
- /**
67
- * Will be merged with the original intent data when firing the undo intent.
68
- */
69
- data?: IntentData;
70
- };
71
-
72
- /**
73
- * An error that occurred while performing the action.
74
- *
75
- * If the intent is apart of a chain of intents and an error occurs, the chain will be aborted.
76
- */
77
- error?: Error;
78
-
79
- /**
80
- * Other intent chains to be triggered.
81
- */
82
- intents?: Intent[][];
83
- };
84
-
85
- /**
86
- * Trigger one or more intents to be sent.
87
- * If multiple intents are specified, the result of each will be merged with the data to the next.
88
- *
89
- * @returns The result of the last intent.
90
- */
91
- // TODO(burdon): Generic/typed intents.
92
- export type IntentDispatcher = (intent: Intent | Intent[]) => Promise<IntentResult | void>;
93
-
94
- /**
95
- * Resolves an intent that was dispatched.
96
- * If the intent is not handled, nothing should be returned.
97
- *
98
- * @returns The result of the intent.
99
- */
100
- // TODO(burdon): All graph callback should use objects.
101
- export type IntentResolver = (intent: Intent, plugins: Plugin[]) => MaybePromise<IntentResult | void>;
@@ -1,9 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- const IntentMeta = {
6
- id: 'dxos.org/plugin/intent',
7
- };
8
-
9
- export default IntentMeta;
@@ -1,38 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { type IntentContext } from './IntentContext';
6
- import { type IntentResolver } from './intent';
7
- import { type Plugin } from '../plugin-host';
8
-
9
- export type IntentResolverProvides = {
10
- intent: {
11
- resolver: IntentResolver;
12
- };
13
- };
14
-
15
- export type IntentPluginProvides = {
16
- intent: IntentContext;
17
- };
18
-
19
- export const parseIntentPlugin = (plugin: Plugin) =>
20
- (plugin.provides as any).intent?.dispatch ? (plugin as Plugin<IntentPluginProvides>) : undefined;
21
-
22
- export const parseIntentResolverPlugin = (plugin: Plugin) =>
23
- (plugin.provides as any).intent?.resolver ? (plugin as Plugin<IntentResolverProvides>) : undefined;
24
-
25
- //
26
- // Intents
27
- //
28
-
29
- const INTENT_PLUGIN = 'dxos.org/plugin/intent';
30
-
31
- const INTENT_ACTION = `${INTENT_PLUGIN}/action`;
32
-
33
- export enum IntentAction {
34
- /**
35
- * Fired after an intent is dispatched if the intent is undoable.
36
- */
37
- SHOW_UNDO = `${INTENT_ACTION}/show-undo`,
38
- }
@@ -1,22 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { RootSettingsStore } from '@dxos/local-storage';
6
-
7
- import SettingsMeta from './meta';
8
- import { type SettingsPluginProvides } from './provides';
9
- import { type PluginDefinition } from '../plugin-host';
10
-
11
- export const SettingsPlugin = (): PluginDefinition<SettingsPluginProvides> => {
12
- // Global settings singleton.
13
- // TODO(burdon): Make settings storage extensible so that other plugins can decide the persistence of them.
14
- const settingsStore = new RootSettingsStore();
15
-
16
- return {
17
- meta: SettingsMeta,
18
- provides: {
19
- settingsStore,
20
- },
21
- };
22
- };
@@ -1,9 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { SettingsPlugin } from './SettingsPlugin';
6
-
7
- export * from './provides';
8
-
9
- export default SettingsPlugin;
@@ -1,9 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- const SettingsMeta = {
6
- id: 'dxos.org/plugin/settings',
7
- };
8
-
9
- export default SettingsMeta;
@@ -1,29 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { type SettingsStoreFactory, type SettingsValue } from '@dxos/local-storage';
6
-
7
- import { type Plugin } from '../plugin-host';
8
-
9
- export type SettingsProvides<T extends SettingsValue> = {
10
- settings: T;
11
- };
12
-
13
- export type SettingsPluginProvides = {
14
- settingsStore: SettingsStoreFactory;
15
- };
16
-
17
- export const parseSettingsPlugin = (plugin: Plugin) => {
18
- return typeof (plugin.provides as any).settingsStore === 'object'
19
- ? (plugin as Plugin<SettingsPluginProvides>)
20
- : undefined;
21
- };
22
-
23
- const SETTINGS_PLUGIN = 'dxos.org/plugin/settings';
24
-
25
- const SETTINGS_ACTION = `${SETTINGS_PLUGIN}/action`;
26
-
27
- export enum SettingsAction {
28
- OPEN = `${SETTINGS_ACTION}/open`,
29
- }
@@ -1,195 +0,0 @@
1
- //
2
- // Copyright 2022 DXOS.org
3
- //
4
-
5
- import React, {
6
- Fragment,
7
- type ForwardedRef,
8
- type PropsWithChildren,
9
- type ReactNode,
10
- Suspense,
11
- createContext,
12
- forwardRef,
13
- isValidElement,
14
- memo,
15
- useContext,
16
- useEffect,
17
- useState,
18
- } from 'react';
19
-
20
- import { raise } from '@dxos/debug';
21
- import { log } from '@dxos/log';
22
-
23
- import { ErrorBoundary } from './ErrorBoundary';
24
- import { type SurfaceComponent, type SurfaceResult, useSurfaceRoot } from './SurfaceRootContext';
25
-
26
- /**
27
- * Direction determines how multiple components are laid out.
28
- */
29
- export type Direction = 'inline' | 'inline-reverse' | 'block' | 'block-reverse';
30
-
31
- /**
32
- * SurfaceProps are the props that are passed to the Surface component.
33
- */
34
- export type SurfaceProps = PropsWithChildren<{
35
- /**
36
- * Optional ID for debugging.
37
- */
38
- id?: string;
39
-
40
- /**
41
- * Role defines how the data should be rendered.
42
- */
43
- role?: string;
44
-
45
- /**
46
- * Names allow nested surfaces to be specified in the parent context, similar to a slot.
47
- * Defaults to the value of `role` if not specified.
48
- */
49
- name?: string;
50
-
51
- /**
52
- * The data to be rendered by the surface.
53
- */
54
- data?: Record<string, unknown>;
55
-
56
- /**
57
- * Configure nested surfaces (indexed by the surface's `name`).
58
- */
59
- surfaces?: Record<string, Pick<SurfaceProps, 'data' | 'surfaces'>>;
60
-
61
- /**
62
- * If specified, the Surface will be wrapped in an error boundary.
63
- * The fallback component will be rendered if an error occurs.
64
- */
65
- fallback?: ErrorBoundary['props']['fallback'];
66
-
67
- /**
68
- * If specified, the Surface will be wrapped in a suspense boundary.
69
- * The placeholder component will be rendered while the surface component is loading.
70
- */
71
- placeholder?: ReactNode;
72
-
73
- /**
74
- * If more than one component is resolved, the limit determines how many are rendered.
75
- */
76
- limit?: number | undefined;
77
-
78
- /**
79
- * If more than one component is resolved, the direction determines how they are laid out.
80
- * NOTE: This is not yet implemented.
81
- */
82
- direction?: Direction;
83
-
84
- /**
85
- * Additional props to pass to the component.
86
- * These props are not used by Surface itself but may be used by components which resolve the surface.
87
- */
88
- [key: string]: unknown;
89
- }>;
90
-
91
- let count = 0;
92
-
93
- /**
94
- * A surface is a named region of the screen that can be populated by plugins.
95
- */
96
- export const Surface = memo(
97
- forwardRef<HTMLElement, SurfaceProps>(
98
- ({ id: _id, role, name = role, fallback, placeholder, ...rest }, forwardedRef) => {
99
- const props = { role, name, fallback, ...rest };
100
- const { debugInfo } = useSurfaceRoot();
101
-
102
- // Track debug info.
103
- const [id] = useState<string>(() => _id ?? `surface-${++count}`);
104
- useEffect(() => {
105
- debugInfo?.set(id, { id, created: Date.now(), name, role, renderCount: 0 });
106
- return () => {
107
- debugInfo?.delete(id);
108
- };
109
- }, [id]);
110
-
111
- if (debugInfo?.get(id)) {
112
- debugInfo.get(id)!.renderCount++;
113
- }
114
-
115
- const context = useContext(SurfaceContext);
116
- const data = props.data ?? ((name && context?.surfaces?.[name]?.data) || {});
117
-
118
- const resolver = <SurfaceResolver {...props} id={id} ref={forwardedRef} />;
119
- const suspense = placeholder ? <Suspense fallback={placeholder}>{resolver}</Suspense> : resolver;
120
-
121
- return fallback ? (
122
- <ErrorBoundary data={data} fallback={fallback}>
123
- {suspense}
124
- </ErrorBoundary>
125
- ) : (
126
- suspense
127
- );
128
- },
129
- ),
130
- );
131
-
132
- const SurfaceContext = createContext<SurfaceProps | undefined>(undefined);
133
-
134
- export const useSurface = (): SurfaceProps =>
135
- useContext(SurfaceContext) ?? raise(new Error('Surface context not found'));
136
-
137
- /**
138
- * Root surface component.
139
- */
140
- const SurfaceResolver = forwardRef<HTMLElement, SurfaceProps>((props, forwardedRef) => {
141
- const { components } = useSurfaceRoot();
142
- const parent = useContext(SurfaceContext);
143
- const nodes = resolveNodes(components, props, parent, forwardedRef);
144
- const currentContext: SurfaceProps = {
145
- ...props,
146
- surfaces: {
147
- ...((props.name && parent?.surfaces?.[props.name]?.surfaces) || {}),
148
- ...props.surfaces,
149
- },
150
- };
151
-
152
- return <SurfaceContext.Provider value={currentContext}>{nodes}</SurfaceContext.Provider>;
153
- });
154
-
155
- /**
156
- * Resolve surface nodes from across all component.
157
- */
158
- const resolveNodes = (
159
- components: Record<string, SurfaceComponent>,
160
- props: SurfaceProps,
161
- context: SurfaceProps | undefined,
162
- forwardedRef: ForwardedRef<HTMLElement>,
163
- ): ReactNode[] => {
164
- const data = {
165
- ...((props.name && context?.surfaces?.[props.name]?.data) || {}),
166
- ...props.data,
167
- };
168
-
169
- const candidates = Object.entries(components)
170
- .map(([key, component]): [string, SurfaceResult] | undefined => {
171
- // TODO(burdon): Avoid variable return types in plugin contract.
172
- const result = component({ ...props, data }, forwardedRef);
173
- if (!result || typeof result !== 'object') {
174
- return undefined;
175
- }
176
-
177
- // Normalize tuple.
178
- if ('node' in result) {
179
- return [key, result];
180
- } else if (isValidElement(result)) {
181
- return [key, { node: result }];
182
- } else {
183
- log.warn('invalid result', { result });
184
- return undefined;
185
- }
186
- })
187
- .filter((result): result is [string, SurfaceResult] => Boolean(result))
188
- .sort(([, { disposition: a = 'default' }], [, { disposition: b = 'default' }]) => {
189
- return a === b ? 0 : a === 'hoist' || b === 'fallback' ? -1 : b === 'hoist' || a === 'fallback' ? 1 : 0;
190
- });
191
-
192
- // TODO(burdon): Does this prematurely process the node?
193
- const nodes = candidates.map(([key, result]) => <Fragment key={key}>{result.node}</Fragment>);
194
- return props.limit ? nodes.slice(0, props.limit) : nodes;
195
- };
@@ -1,33 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import React from 'react';
6
-
7
- import { create } from '@dxos/live-object';
8
-
9
- import { SurfaceProvider, type SurfaceRootContext } from './SurfaceRootContext';
10
- import SurfaceMeta from './meta';
11
- import { parseSurfacePlugin, type SurfacePluginProvides } from './provides';
12
- import { filterPlugins } from '../helpers';
13
- import { type PluginDefinition } from '../plugin-host';
14
-
15
- /**
16
- * Provides a registry of surface components.
17
- */
18
- export const SurfacePlugin = (): PluginDefinition<SurfacePluginProvides> => {
19
- const state = create<SurfaceRootContext>({ components: {}, debugInfo: new Map() });
20
-
21
- return {
22
- meta: SurfaceMeta,
23
- ready: async (plugins) => {
24
- state.components = filterPlugins(plugins, parseSurfacePlugin).reduce((acc, plugin) => {
25
- return { ...acc, [plugin.meta.id]: plugin.provides.surface.component };
26
- }, {});
27
- },
28
- provides: {
29
- surface: state,
30
- context: ({ children }) => <SurfaceProvider value={state}>{children}</SurfaceProvider>,
31
- },
32
- };
33
- };