@dxos/plugin-space 0.10.0 → 0.11.1

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 (646) hide show
  1. package/PLUGIN.mdl +11 -0
  2. package/dist/lib/SpacePlugin.mjs +2 -0
  3. package/dist/lib/SpacePlugin.node.mjs +628 -0
  4. package/dist/lib/SpacePlugin.node.mjs.map +1 -0
  5. package/dist/lib/SpacePlugin.workerd.mjs +26 -0
  6. package/dist/lib/SpacePlugin.workerd.mjs.map +1 -0
  7. package/dist/lib/capabilities/node.mjs +10 -0
  8. package/dist/lib/capabilities/node.mjs.map +1 -0
  9. package/dist/lib/capabilities.mjs +24 -0
  10. package/dist/lib/capabilities.mjs.map +1 -0
  11. package/dist/lib/chunk-CollectionArticle.mjs +90 -0
  12. package/dist/lib/chunk-CollectionArticle.mjs.map +1 -0
  13. package/dist/lib/chunk-CollectionSection.mjs +21 -0
  14. package/dist/lib/chunk-CollectionSection.mjs.map +1 -0
  15. package/dist/lib/chunk-CreateObjectDialog.mjs +178 -0
  16. package/dist/lib/chunk-CreateObjectDialog.mjs.map +1 -0
  17. package/dist/lib/chunk-CreateSpaceDialog.mjs +68 -0
  18. package/dist/lib/chunk-CreateSpaceDialog.mjs.map +1 -0
  19. package/dist/lib/chunk-DefaultProperties.mjs +59 -0
  20. package/dist/lib/chunk-DefaultProperties.mjs.map +1 -0
  21. package/dist/lib/chunk-ImportSpaceDialog.mjs +58 -0
  22. package/dist/lib/chunk-ImportSpaceDialog.mjs.map +1 -0
  23. package/dist/lib/chunk-InlineSyncStatus.mjs +37 -0
  24. package/dist/lib/chunk-InlineSyncStatus.mjs.map +1 -0
  25. package/dist/lib/chunk-JoinDialog.mjs +65 -0
  26. package/dist/lib/chunk-JoinDialog.mjs.map +1 -0
  27. package/dist/lib/chunk-MembersContainer.mjs +263 -0
  28. package/dist/lib/chunk-MembersContainer.mjs.map +1 -0
  29. package/dist/lib/chunk-MergePreview.mjs +91 -0
  30. package/dist/lib/chunk-MergePreview.mjs.map +1 -0
  31. package/dist/lib/chunk-ObjectCardStack.mjs +68 -0
  32. package/dist/lib/chunk-ObjectCardStack.mjs.map +1 -0
  33. package/dist/lib/chunk-RecordArticle.mjs +106 -0
  34. package/dist/lib/chunk-RecordArticle.mjs.map +1 -0
  35. package/dist/lib/chunk-RelatedArticle.mjs +71 -0
  36. package/dist/lib/chunk-RelatedArticle.mjs.map +1 -0
  37. package/dist/lib/chunk-RenamePopover.mjs +94 -0
  38. package/dist/lib/chunk-RenamePopover.mjs.map +1 -0
  39. package/dist/lib/chunk-SchemaContainer.mjs +53 -0
  40. package/dist/lib/chunk-SchemaContainer.mjs.map +1 -0
  41. package/dist/lib/chunk-SmallPresenceLive.mjs +2 -0
  42. package/dist/lib/chunk-SpaceHomeArticle.mjs +82 -0
  43. package/dist/lib/chunk-SpaceHomeArticle.mjs.map +1 -0
  44. package/dist/lib/chunk-SpaceHomeDashboard.mjs +96 -0
  45. package/dist/lib/chunk-SpaceHomeDashboard.mjs.map +1 -0
  46. package/dist/lib/chunk-SpaceHomeRecent.mjs +79 -0
  47. package/dist/lib/chunk-SpaceHomeRecent.mjs.map +1 -0
  48. package/dist/lib/chunk-SpacePlugin.mjs +97 -0
  49. package/dist/lib/chunk-SpacePlugin.mjs.map +1 -0
  50. package/dist/lib/chunk-SpacePresence.mjs +155 -0
  51. package/dist/lib/chunk-SpacePresence.mjs.map +1 -0
  52. package/dist/lib/chunk-SpaceSettings.mjs +63 -0
  53. package/dist/lib/chunk-SpaceSettings.mjs.map +1 -0
  54. package/dist/lib/chunk-SpaceSettingsContainer.mjs +278 -0
  55. package/dist/lib/chunk-SpaceSettingsContainer.mjs.map +1 -0
  56. package/dist/lib/chunk-SyncStatus.mjs +166 -0
  57. package/dist/lib/chunk-SyncStatus.mjs.map +1 -0
  58. package/dist/lib/chunk-TypeArticle.mjs +469 -0
  59. package/dist/lib/chunk-TypeArticle.mjs.map +1 -0
  60. package/dist/lib/chunk-ViewEditor.mjs +78 -0
  61. package/dist/lib/chunk-ViewEditor.mjs.map +1 -0
  62. package/dist/lib/chunk-add-object.mjs +74 -0
  63. package/dist/lib/chunk-add-object.mjs.map +1 -0
  64. package/dist/lib/chunk-add-relation.mjs +16 -0
  65. package/dist/lib/chunk-add-relation.mjs.map +1 -0
  66. package/dist/lib/chunk-add-type.mjs +41 -0
  67. package/dist/lib/chunk-add-type.mjs.map +1 -0
  68. package/dist/lib/chunk-app-graph-builder.mjs +1056 -0
  69. package/dist/lib/chunk-app-graph-builder.mjs.map +1 -0
  70. package/dist/lib/chunk-close.mjs +11 -0
  71. package/dist/lib/chunk-close.mjs.map +1 -0
  72. package/dist/lib/chunk-collection-path.mjs +65 -0
  73. package/dist/lib/chunk-collection-path.mjs.map +1 -0
  74. package/dist/lib/chunk-create-object.mjs +80 -0
  75. package/dist/lib/chunk-create-object.mjs.map +1 -0
  76. package/dist/lib/chunk-create.mjs +62 -0
  77. package/dist/lib/chunk-create.mjs.map +1 -0
  78. package/dist/lib/chunk-definitions.mjs +466 -0
  79. package/dist/lib/chunk-definitions.mjs.map +1 -0
  80. package/dist/lib/chunk-delete-field.mjs +52 -0
  81. package/dist/lib/chunk-delete-field.mjs.map +1 -0
  82. package/dist/lib/chunk-delete.mjs +11 -0
  83. package/dist/lib/chunk-delete.mjs.map +1 -0
  84. package/dist/lib/chunk-duplicate-object.mjs +11 -0
  85. package/dist/lib/chunk-duplicate-object.mjs.map +1 -0
  86. package/dist/lib/chunk-errors.mjs +10 -0
  87. package/dist/lib/chunk-errors.mjs.map +1 -0
  88. package/dist/lib/chunk-export-space.mjs +24 -0
  89. package/dist/lib/chunk-export-space.mjs.map +1 -0
  90. package/dist/lib/chunk-find-duplicates.mjs +19 -0
  91. package/dist/lib/chunk-find-duplicates.mjs.map +1 -0
  92. package/dist/lib/chunk-get-share-link.mjs +29 -0
  93. package/dist/lib/chunk-get-share-link.mjs.map +1 -0
  94. package/dist/lib/chunk-helpers.mjs +14 -0
  95. package/dist/lib/chunk-helpers.mjs.map +1 -0
  96. package/dist/lib/chunk-identity-created.mjs +26 -0
  97. package/dist/lib/chunk-identity-created.mjs.map +1 -0
  98. package/dist/lib/chunk-import-space.mjs +16 -0
  99. package/dist/lib/chunk-import-space.mjs.map +1 -0
  100. package/dist/lib/chunk-join.mjs +35 -0
  101. package/dist/lib/chunk-join.mjs.map +1 -0
  102. package/dist/lib/chunk-merge-duplicates.mjs +62 -0
  103. package/dist/lib/chunk-merge-duplicates.mjs.map +1 -0
  104. package/dist/lib/{neutral/chunk-5ZZS3KMK.mjs → chunk-meta.mjs} +15 -24
  105. package/dist/lib/chunk-meta.mjs.map +1 -0
  106. package/dist/lib/chunk-migrate.mjs +45 -0
  107. package/dist/lib/chunk-migrate.mjs.map +1 -0
  108. package/dist/lib/chunk-navigation-handler.mjs +63 -0
  109. package/dist/lib/chunk-navigation-handler.mjs.map +1 -0
  110. package/dist/lib/chunk-navigation-target-resolver.mjs +79 -0
  111. package/dist/lib/chunk-navigation-target-resolver.mjs.map +1 -0
  112. package/dist/lib/chunk-open-create-object.mjs +32 -0
  113. package/dist/lib/chunk-open-create-object.mjs.map +1 -0
  114. package/dist/lib/chunk-open-create-space.mjs +16 -0
  115. package/dist/lib/chunk-open-create-space.mjs.map +1 -0
  116. package/dist/lib/chunk-open-import-space.mjs +16 -0
  117. package/dist/lib/chunk-open-import-space.mjs.map +1 -0
  118. package/dist/lib/chunk-open-members.mjs +15 -0
  119. package/dist/lib/chunk-open-members.mjs.map +1 -0
  120. package/dist/lib/chunk-open-settings.mjs +15 -0
  121. package/dist/lib/chunk-open-settings.mjs.map +1 -0
  122. package/dist/lib/chunk-open.mjs +11 -0
  123. package/dist/lib/chunk-open.mjs.map +1 -0
  124. package/dist/lib/chunk-operation-handler.mjs +13 -0
  125. package/dist/lib/chunk-operation-handler.mjs.map +1 -0
  126. package/dist/lib/chunk-react-root.mjs +20 -0
  127. package/dist/lib/chunk-react-root.mjs.map +1 -0
  128. package/dist/lib/chunk-react-surface.mjs +384 -0
  129. package/dist/lib/chunk-react-surface.mjs.map +1 -0
  130. package/dist/lib/chunk-remove-objects.mjs +83 -0
  131. package/dist/lib/chunk-remove-objects.mjs.map +1 -0
  132. package/dist/lib/chunk-rename-object.mjs +18 -0
  133. package/dist/lib/chunk-rename-object.mjs.map +1 -0
  134. package/dist/lib/chunk-rename.mjs +18 -0
  135. package/dist/lib/chunk-rename.mjs.map +1 -0
  136. package/dist/lib/chunk-repair.mjs +28 -0
  137. package/dist/lib/chunk-repair.mjs.map +1 -0
  138. package/dist/lib/chunk-restore-field.mjs +50 -0
  139. package/dist/lib/chunk-restore-field.mjs.map +1 -0
  140. package/dist/lib/chunk-restore-objects.mjs +33 -0
  141. package/dist/lib/chunk-restore-objects.mjs.map +1 -0
  142. package/dist/lib/chunk-settings.mjs +23 -0
  143. package/dist/lib/chunk-settings.mjs.map +1 -0
  144. package/dist/lib/chunk-share.mjs +23 -0
  145. package/dist/lib/chunk-share.mjs.map +1 -0
  146. package/dist/lib/chunk-snapshot.mjs +24 -0
  147. package/dist/lib/chunk-snapshot.mjs.map +1 -0
  148. package/dist/lib/chunk-spaces-ready.mjs +242 -0
  149. package/dist/lib/chunk-spaces-ready.mjs.map +1 -0
  150. package/dist/lib/chunk-state.mjs +48 -0
  151. package/dist/lib/chunk-state.mjs.map +1 -0
  152. package/dist/lib/chunk-types.mjs +56 -0
  153. package/dist/lib/chunk-types.mjs.map +1 -0
  154. package/dist/lib/chunk-undo-mappings.mjs +40 -0
  155. package/dist/lib/chunk-undo-mappings.mjs.map +1 -0
  156. package/dist/lib/chunk-util.mjs +34 -0
  157. package/dist/lib/chunk-util.mjs.map +1 -0
  158. package/dist/lib/chunk-wait-for-object.mjs +16 -0
  159. package/dist/lib/chunk-wait-for-object.mjs.map +1 -0
  160. package/dist/lib/components.mjs +329 -0
  161. package/dist/lib/components.mjs.map +1 -0
  162. package/dist/lib/{neutral/chunk-C2ULK22J.mjs → constants.mjs} +5 -10
  163. package/dist/lib/constants.mjs.map +1 -0
  164. package/dist/lib/containers.mjs +31 -0
  165. package/dist/lib/containers.mjs.map +1 -0
  166. package/dist/lib/hooks.mjs +185 -0
  167. package/dist/lib/hooks.mjs.map +1 -0
  168. package/dist/lib/index.mjs +7 -0
  169. package/dist/lib/meta.mjs +2 -0
  170. package/dist/lib/operations.mjs +8 -0
  171. package/dist/lib/operations.mjs.map +1 -0
  172. package/dist/lib/plugin.mjs +9 -0
  173. package/dist/lib/plugin.mjs.map +1 -0
  174. package/dist/lib/testing.mjs +2 -0
  175. package/dist/lib/translations.mjs +350 -0
  176. package/dist/lib/translations.mjs.map +1 -0
  177. package/dist/lib/types.mjs +60 -0
  178. package/dist/lib/types.mjs.map +1 -0
  179. package/dist/types/src/SpacePlugin.workerd.d.ts.map +1 -1
  180. package/dist/types/src/capabilities/SpaceFormFields.d.ts +10 -0
  181. package/dist/types/src/capabilities/SpaceFormFields.d.ts.map +1 -0
  182. package/dist/types/src/capabilities/SpaceSurfaces.d.ts +50 -0
  183. package/dist/types/src/capabilities/SpaceSurfaces.d.ts.map +1 -0
  184. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +1 -1
  185. package/dist/types/src/capabilities/app-graph-builder/extensions/collections.d.ts +6 -1
  186. package/dist/types/src/capabilities/app-graph-builder/extensions/collections.d.ts.map +1 -1
  187. package/dist/types/src/capabilities/app-graph-builder/extensions/companions.d.ts +1 -1
  188. package/dist/types/src/capabilities/app-graph-builder/extensions/companions.d.ts.map +1 -1
  189. package/dist/types/src/capabilities/app-graph-builder/extensions/database.d.ts +7 -1
  190. package/dist/types/src/capabilities/app-graph-builder/extensions/database.d.ts.map +1 -1
  191. package/dist/types/src/capabilities/app-graph-builder/extensions/settings.d.ts +2 -7
  192. package/dist/types/src/capabilities/app-graph-builder/extensions/settings.d.ts.map +1 -1
  193. package/dist/types/src/capabilities/app-graph-builder/extensions/shared.d.ts +3 -2
  194. package/dist/types/src/capabilities/app-graph-builder/extensions/shared.d.ts.map +1 -1
  195. package/dist/types/src/capabilities/app-graph-builder/extensions/spaces.d.ts +5 -0
  196. package/dist/types/src/capabilities/app-graph-builder/extensions/spaces.d.ts.map +1 -1
  197. package/dist/types/src/capabilities/create-object.d.ts +1 -1
  198. package/dist/types/src/capabilities/identity-created.d.ts +1 -1
  199. package/dist/types/src/capabilities/index.d.ts +1 -1
  200. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  201. package/dist/types/src/capabilities/navigation-handler/navigation-handler.d.ts +3 -1
  202. package/dist/types/src/capabilities/navigation-handler/navigation-handler.d.ts.map +1 -1
  203. package/dist/types/src/capabilities/navigation-target-resolver.d.ts +5 -0
  204. package/dist/types/src/capabilities/navigation-target-resolver.d.ts.map +1 -0
  205. package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
  206. package/dist/types/src/capabilities/react-root.d.ts +1 -1
  207. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  208. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  209. package/dist/types/src/capabilities/repair.d.ts +1 -1
  210. package/dist/types/src/capabilities/settings.d.ts +1 -1
  211. package/dist/types/src/capabilities/spaces-ready.d.ts +1 -1
  212. package/dist/types/src/capabilities/state.d.ts +1 -1
  213. package/dist/types/src/capabilities/try-get-view.d.ts +7 -0
  214. package/dist/types/src/capabilities/try-get-view.d.ts.map +1 -0
  215. package/dist/types/src/capabilities/undo-mappings.d.ts +1 -1
  216. package/dist/types/src/collection-path.d.ts +28 -0
  217. package/dist/types/src/collection-path.d.ts.map +1 -0
  218. package/dist/types/src/collection-path.test.d.ts +2 -0
  219. package/dist/types/src/collection-path.test.d.ts.map +1 -0
  220. package/dist/types/src/commands/space/export/export.d.ts +23 -0
  221. package/dist/types/src/commands/space/export/export.d.ts.map +1 -0
  222. package/dist/types/src/commands/space/export/export.test.d.ts +2 -0
  223. package/dist/types/src/commands/space/export/export.test.d.ts.map +1 -0
  224. package/dist/types/src/commands/space/export/index.d.ts +2 -0
  225. package/dist/types/src/commands/space/export/index.d.ts.map +1 -0
  226. package/dist/types/src/commands/space/import/import.d.ts +17 -0
  227. package/dist/types/src/commands/space/import/import.d.ts.map +1 -0
  228. package/dist/types/src/commands/space/import/import.test.d.ts +2 -0
  229. package/dist/types/src/commands/space/import/import.test.d.ts.map +1 -0
  230. package/dist/types/src/commands/space/import/index.d.ts +2 -0
  231. package/dist/types/src/commands/space/import/index.d.ts.map +1 -0
  232. package/dist/types/src/commands/space/index.d.ts +8 -1
  233. package/dist/types/src/commands/space/index.d.ts.map +1 -1
  234. package/dist/types/src/components/AwaitingObject/AwaitingObject.d.ts.map +1 -1
  235. package/dist/types/src/components/SyncStatus/status.d.ts +7 -4
  236. package/dist/types/src/components/SyncStatus/status.d.ts.map +1 -1
  237. package/dist/types/src/components/SyncStatus/status.test.d.ts +2 -0
  238. package/dist/types/src/components/SyncStatus/status.test.d.ts.map +1 -0
  239. package/dist/types/src/containers/CollectionArticle/CollectionArticle.d.ts +4 -4
  240. package/dist/types/src/containers/CollectionArticle/CollectionArticle.d.ts.map +1 -1
  241. package/dist/types/src/containers/CollectionSection/CollectionSection.d.ts +4 -1
  242. package/dist/types/src/containers/CollectionSection/CollectionSection.d.ts.map +1 -1
  243. package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.d.ts +4 -1
  244. package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.d.ts.map +1 -1
  245. package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.stories.d.ts +420 -9
  246. package/dist/types/src/containers/CreateObjectDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  247. package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.d.ts +4 -1
  248. package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.d.ts.map +1 -1
  249. package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.stories.d.ts +423 -10
  250. package/dist/types/src/containers/CreateSpaceDialog/CreateSpaceDialog.stories.d.ts.map +1 -1
  251. package/dist/types/src/containers/ImportSpaceDialog/ImportSpaceDialog.d.ts +4 -1
  252. package/dist/types/src/containers/ImportSpaceDialog/ImportSpaceDialog.d.ts.map +1 -1
  253. package/dist/types/src/containers/InlineSyncStatus/InlineSyncStatus.d.ts +5 -2
  254. package/dist/types/src/containers/InlineSyncStatus/InlineSyncStatus.d.ts.map +1 -1
  255. package/dist/types/src/containers/JoinDialog/JoinDialog.d.ts +4 -1
  256. package/dist/types/src/containers/JoinDialog/JoinDialog.d.ts.map +1 -1
  257. package/dist/types/src/containers/JoinDialog/JoinDialog.stories.d.ts +423 -10
  258. package/dist/types/src/containers/JoinDialog/JoinDialog.stories.d.ts.map +1 -1
  259. package/dist/types/src/containers/MembersContainer/MembersContainer.d.ts +4 -1
  260. package/dist/types/src/containers/MembersContainer/MembersContainer.d.ts.map +1 -1
  261. package/dist/types/src/containers/MergePreview/MergePreview.d.ts +16 -0
  262. package/dist/types/src/containers/MergePreview/MergePreview.d.ts.map +1 -0
  263. package/dist/types/src/containers/MergePreview/index.d.ts +2 -0
  264. package/dist/types/src/containers/MergePreview/index.d.ts.map +1 -0
  265. package/dist/types/src/containers/ObjectCardStack/ObjectCardStack.d.ts +3 -2
  266. package/dist/types/src/containers/ObjectCardStack/ObjectCardStack.d.ts.map +1 -1
  267. package/dist/types/src/containers/RecordArticle/RecordArticle.d.ts +4 -1
  268. package/dist/types/src/containers/RecordArticle/RecordArticle.d.ts.map +1 -1
  269. package/dist/types/src/containers/RecordArticle/RecordArticle.stories.d.ts.map +1 -1
  270. package/dist/types/src/containers/RelatedArticle/RelatedArticle.d.ts +4 -1
  271. package/dist/types/src/containers/RelatedArticle/RelatedArticle.d.ts.map +1 -1
  272. package/dist/types/src/containers/RenamePopover/RenamePopover.d.ts +4 -4
  273. package/dist/types/src/containers/RenamePopover/RenamePopover.d.ts.map +1 -1
  274. package/dist/types/src/containers/SchemaContainer/SchemaContainer.d.ts +4 -7
  275. package/dist/types/src/containers/SchemaContainer/SchemaContainer.d.ts.map +1 -1
  276. package/dist/types/src/containers/SchemaContainer/use-query-space-types.d.ts +7 -0
  277. package/dist/types/src/containers/SchemaContainer/use-query-space-types.d.ts.map +1 -0
  278. package/dist/types/src/containers/SpaceHomeArticle/SpaceHomeArticle.d.ts +4 -11
  279. package/dist/types/src/containers/SpaceHomeArticle/SpaceHomeArticle.d.ts.map +1 -1
  280. package/dist/types/src/containers/SpaceHomeArticle/SpaceHomeArticle.stories.d.ts +14 -0
  281. package/dist/types/src/containers/SpaceHomeArticle/SpaceHomeArticle.stories.d.ts.map +1 -0
  282. package/dist/types/src/containers/SpaceHomeDashboard/SpaceHomeDashboard.d.ts +15 -0
  283. package/dist/types/src/containers/SpaceHomeDashboard/SpaceHomeDashboard.d.ts.map +1 -0
  284. package/dist/types/src/containers/SpaceHomeDashboard/SpaceHomeDashboard.stories.d.ts +20 -0
  285. package/dist/types/src/containers/SpaceHomeDashboard/SpaceHomeDashboard.stories.d.ts.map +1 -0
  286. package/dist/types/src/containers/SpaceHomeDashboard/index.d.ts +2 -0
  287. package/dist/types/src/containers/SpaceHomeDashboard/index.d.ts.map +1 -0
  288. package/dist/types/src/containers/SpaceHomeRecent/SpaceHomeRecent.d.ts +5 -8
  289. package/dist/types/src/containers/SpaceHomeRecent/SpaceHomeRecent.d.ts.map +1 -1
  290. package/dist/types/src/containers/SpacePresence/SpacePresence.d.ts +7 -4
  291. package/dist/types/src/containers/SpacePresence/SpacePresence.d.ts.map +1 -1
  292. package/dist/types/src/containers/SpacePresence/SpacePresence.stories.d.ts +419 -9
  293. package/dist/types/src/containers/SpacePresence/SpacePresence.stories.d.ts.map +1 -1
  294. package/dist/types/src/containers/SpaceSettings/SpaceSettings.d.ts +4 -1
  295. package/dist/types/src/containers/SpaceSettings/SpaceSettings.d.ts.map +1 -1
  296. package/dist/types/src/containers/SpaceSettings/SpaceSettings.stories.d.ts +423 -10
  297. package/dist/types/src/containers/SpaceSettings/SpaceSettings.stories.d.ts.map +1 -1
  298. package/dist/types/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.stories.d.ts +419 -9
  299. package/dist/types/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.stories.d.ts.map +1 -1
  300. package/dist/types/src/containers/SyncStatus/SyncStatus.d.ts +7 -2
  301. package/dist/types/src/containers/SyncStatus/SyncStatus.d.ts.map +1 -1
  302. package/dist/types/src/containers/SyncStatus/SyncStatus.stories.d.ts +434 -11
  303. package/dist/types/src/containers/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  304. package/dist/types/src/containers/TypeArticle/TypeArticle.d.ts +14 -0
  305. package/dist/types/src/containers/TypeArticle/TypeArticle.d.ts.map +1 -0
  306. package/dist/types/src/containers/TypeArticle/TypeArticle.stories.d.ts +45 -0
  307. package/dist/types/src/containers/TypeArticle/TypeArticle.stories.d.ts.map +1 -0
  308. package/dist/types/src/containers/TypeArticle/duplicatesGroup.d.ts +19 -0
  309. package/dist/types/src/containers/TypeArticle/duplicatesGroup.d.ts.map +1 -0
  310. package/dist/types/src/containers/TypeArticle/index.d.ts +2 -0
  311. package/dist/types/src/containers/TypeArticle/index.d.ts.map +1 -0
  312. package/dist/types/src/containers/TypeArticle/useDuplicates.d.ts +34 -0
  313. package/dist/types/src/containers/TypeArticle/useDuplicates.d.ts.map +1 -0
  314. package/dist/types/src/containers/ViewEditor/ViewEditor.d.ts +4 -1
  315. package/dist/types/src/containers/ViewEditor/ViewEditor.d.ts.map +1 -1
  316. package/dist/types/src/containers/index.d.ts +3 -2
  317. package/dist/types/src/containers/index.d.ts.map +1 -1
  318. package/dist/types/src/errors.d.ts +30 -0
  319. package/dist/types/src/errors.d.ts.map +1 -1
  320. package/dist/types/src/hooks/index.d.ts +2 -0
  321. package/dist/types/src/hooks/index.d.ts.map +1 -1
  322. package/dist/types/src/hooks/useEdgeStatus.d.ts +6 -0
  323. package/dist/types/src/hooks/useEdgeStatus.d.ts.map +1 -0
  324. package/dist/types/src/hooks/useInputSurfaceLookup.d.ts.map +1 -1
  325. package/dist/types/src/hooks/useStalled.d.ts +13 -0
  326. package/dist/types/src/hooks/useStalled.d.ts.map +1 -0
  327. package/dist/types/src/operations/create.d.ts.map +1 -1
  328. package/dist/types/src/operations/definitions.d.ts +29 -1
  329. package/dist/types/src/operations/definitions.d.ts.map +1 -1
  330. package/dist/types/src/operations/find-duplicates.d.ts +5 -0
  331. package/dist/types/src/operations/find-duplicates.d.ts.map +1 -0
  332. package/dist/types/src/operations/helpers.d.ts +3 -0
  333. package/dist/types/src/operations/helpers.d.ts.map +1 -1
  334. package/dist/types/src/operations/index.d.ts.map +1 -1
  335. package/dist/types/src/operations/join.d.ts.map +1 -1
  336. package/dist/types/src/operations/merge-duplicates.d.ts +5 -0
  337. package/dist/types/src/operations/merge-duplicates.d.ts.map +1 -0
  338. package/dist/types/src/operations/open-settings.d.ts.map +1 -1
  339. package/dist/types/src/operations/remove-objects.d.ts.map +1 -1
  340. package/dist/types/src/translations.d.ts +419 -9
  341. package/dist/types/src/translations.d.ts.map +1 -1
  342. package/dist/types/src/type-section-path.d.ts +22 -0
  343. package/dist/types/src/type-section-path.d.ts.map +1 -0
  344. package/dist/types/src/type-section-path.test.d.ts +2 -0
  345. package/dist/types/src/type-section-path.test.d.ts.map +1 -0
  346. package/dist/types/src/types/capabilities.d.ts +22 -2
  347. package/dist/types/src/types/capabilities.d.ts.map +1 -1
  348. package/dist/types/src/types/surface.d.ts +4 -4
  349. package/dist/types/src/types/surface.d.ts.map +1 -1
  350. package/dist/types/src/types/types.d.ts +6 -0
  351. package/dist/types/src/types/types.d.ts.map +1 -1
  352. package/dist/types/tsconfig.tsbuildinfo +1 -1
  353. package/package.json +87 -72
  354. package/src/SpacePlugin.ts +6 -6
  355. package/src/SpacePlugin.workerd.ts +3 -1
  356. package/src/capabilities/SpaceFormFields.tsx +72 -0
  357. package/src/capabilities/SpaceSurfaces.tsx +219 -0
  358. package/src/capabilities/app-graph-builder/extensions/collections.ts +74 -21
  359. package/src/capabilities/app-graph-builder/extensions/companions.ts +10 -5
  360. package/src/capabilities/app-graph-builder/extensions/database.ts +64 -57
  361. package/src/capabilities/app-graph-builder/extensions/settings.ts +23 -13
  362. package/src/capabilities/app-graph-builder/extensions/shared.ts +3 -2
  363. package/src/capabilities/app-graph-builder/extensions/spaces.ts +6 -7
  364. package/src/capabilities/create-object.ts +1 -14
  365. package/src/capabilities/index.ts +4 -1
  366. package/src/capabilities/navigation-handler/navigation-handler.ts +27 -7
  367. package/src/capabilities/navigation-target-resolver.ts +77 -0
  368. package/src/capabilities/react-surface.ts +274 -0
  369. package/src/capabilities/spaces-ready.ts +31 -18
  370. package/src/capabilities/state.ts +3 -1
  371. package/src/capabilities/try-get-view.ts +24 -0
  372. package/src/collection-path.test.ts +161 -0
  373. package/src/collection-path.ts +97 -0
  374. package/src/commands/space/export/export.test.ts +68 -0
  375. package/src/commands/space/export/export.ts +118 -0
  376. package/src/commands/space/export/index.ts +5 -0
  377. package/src/commands/space/import/import.test.ts +80 -0
  378. package/src/commands/space/import/import.ts +65 -0
  379. package/src/commands/space/import/index.ts +5 -0
  380. package/src/commands/space/index.ts +16 -1
  381. package/src/components/AwaitingObject/AwaitingObject.tsx +10 -4
  382. package/src/components/CreateObjectPanel/CreateObjectPanel.tsx +16 -18
  383. package/src/components/SyncStatus/status.test.ts +49 -0
  384. package/src/components/SyncStatus/status.ts +25 -12
  385. package/src/containers/CollectionArticle/CollectionArticle.tsx +5 -3
  386. package/src/containers/CollectionSection/CollectionSection.tsx +2 -0
  387. package/src/containers/CreateObjectDialog/CreateObjectDialog.stories.tsx +18 -4
  388. package/src/containers/CreateObjectDialog/CreateObjectDialog.tsx +13 -17
  389. package/src/containers/CreateSpaceDialog/CreateSpaceDialog.tsx +28 -19
  390. package/src/containers/DefaultProperties/DefaultProperties.tsx +4 -2
  391. package/src/containers/ImportSpaceDialog/ImportSpaceDialog.tsx +4 -2
  392. package/src/containers/InlineSyncStatus/InlineSyncStatus.tsx +7 -17
  393. package/src/containers/JoinDialog/JoinDialog.tsx +5 -3
  394. package/src/containers/MembersContainer/MembersContainer.tsx +2 -0
  395. package/src/containers/MergePreview/MergePreview.tsx +90 -0
  396. package/src/containers/MergePreview/index.ts +5 -0
  397. package/src/containers/ObjectCardStack/ObjectCardStack.tsx +46 -43
  398. package/src/containers/RecordArticle/RecordArticle.stories.tsx +2 -1
  399. package/src/containers/RecordArticle/RecordArticle.tsx +8 -4
  400. package/src/containers/RelatedArticle/RelatedArticle.tsx +7 -3
  401. package/src/containers/RenamePopover/RenamePopover.tsx +2 -0
  402. package/src/containers/SchemaContainer/SchemaContainer.tsx +4 -17
  403. package/src/containers/SchemaContainer/use-query-space-types.ts +28 -0
  404. package/src/containers/SpaceHomeArticle/SpaceHomeArticle.stories.tsx +116 -0
  405. package/src/containers/SpaceHomeArticle/SpaceHomeArticle.tsx +6 -5
  406. package/src/containers/SpaceHomeDashboard/SpaceHomeDashboard.stories.tsx +99 -0
  407. package/src/containers/SpaceHomeDashboard/SpaceHomeDashboard.tsx +109 -0
  408. package/src/containers/SpaceHomeDashboard/index.ts +5 -0
  409. package/src/containers/SpaceHomeRecent/SpaceHomeRecent.tsx +17 -15
  410. package/src/containers/SpacePresence/SpacePresence.stories.tsx +4 -4
  411. package/src/containers/SpacePresence/SpacePresence.tsx +37 -36
  412. package/src/containers/SpaceSettings/SpaceSettings.tsx +3 -1
  413. package/src/containers/SpaceSettingsContainer/SpaceSettingsContainer.tsx +7 -2
  414. package/src/containers/SyncStatus/SyncStatus.stories.tsx +80 -1
  415. package/src/containers/SyncStatus/SyncStatus.tsx +36 -46
  416. package/src/containers/TypeArticle/TypeArticle.stories.tsx +249 -0
  417. package/src/containers/TypeArticle/TypeArticle.tsx +362 -0
  418. package/src/containers/TypeArticle/duplicatesGroup.tsx +150 -0
  419. package/src/containers/TypeArticle/index.ts +5 -0
  420. package/src/containers/TypeArticle/useDuplicates.ts +119 -0
  421. package/src/containers/ViewEditor/ViewEditor.tsx +3 -1
  422. package/src/containers/index.ts +3 -2
  423. package/src/errors.ts +6 -0
  424. package/src/hooks/index.ts +2 -0
  425. package/src/hooks/useEdgeStatus.ts +40 -0
  426. package/src/hooks/useInputSurfaceLookup.tsx +5 -4
  427. package/src/hooks/useRelatedObjects.ts +1 -1
  428. package/src/hooks/useStalled.ts +39 -0
  429. package/src/operations/add-object.ts +7 -7
  430. package/src/operations/create.ts +11 -3
  431. package/src/operations/definitions.ts +54 -1
  432. package/src/operations/find-duplicates.ts +33 -0
  433. package/src/operations/get-share-link.ts +1 -1
  434. package/src/operations/helpers.ts +11 -0
  435. package/src/operations/index.ts +2 -0
  436. package/src/operations/join.ts +6 -5
  437. package/src/operations/merge-duplicates.ts +51 -0
  438. package/src/operations/open-members.ts +3 -3
  439. package/src/operations/open-settings.ts +5 -3
  440. package/src/operations/remove-objects.ts +42 -3
  441. package/src/translations.ts +52 -11
  442. package/src/type-section-path.test.ts +48 -0
  443. package/src/type-section-path.ts +39 -0
  444. package/src/types/capabilities.ts +26 -2
  445. package/src/types/surface.ts +4 -8
  446. package/src/types/types.ts +7 -0
  447. package/dist/lib/neutral/CollectionArticle-BMH7SZ7Q.mjs +0 -93
  448. package/dist/lib/neutral/CollectionArticle-BMH7SZ7Q.mjs.map +0 -7
  449. package/dist/lib/neutral/CollectionSection-BLYTGOKH.mjs +0 -19
  450. package/dist/lib/neutral/CollectionSection-BLYTGOKH.mjs.map +0 -7
  451. package/dist/lib/neutral/CreateObjectDialog-5454N3FJ.mjs +0 -221
  452. package/dist/lib/neutral/CreateObjectDialog-5454N3FJ.mjs.map +0 -7
  453. package/dist/lib/neutral/CreateSpaceDialog-WWNUTLVK.mjs +0 -61
  454. package/dist/lib/neutral/CreateSpaceDialog-WWNUTLVK.mjs.map +0 -7
  455. package/dist/lib/neutral/DefaultProperties-5SAWQC6I.mjs +0 -58
  456. package/dist/lib/neutral/DefaultProperties-5SAWQC6I.mjs.map +0 -7
  457. package/dist/lib/neutral/ImportSpaceDialog-CSSRTFAO.mjs +0 -64
  458. package/dist/lib/neutral/ImportSpaceDialog-CSSRTFAO.mjs.map +0 -7
  459. package/dist/lib/neutral/InlineSyncStatus-UOUTAPCU.mjs +0 -49
  460. package/dist/lib/neutral/InlineSyncStatus-UOUTAPCU.mjs.map +0 -7
  461. package/dist/lib/neutral/JoinDialog-ATNUCNL2.mjs +0 -97
  462. package/dist/lib/neutral/JoinDialog-ATNUCNL2.mjs.map +0 -7
  463. package/dist/lib/neutral/MembersContainer-C4ZTP6ZW.mjs +0 -231
  464. package/dist/lib/neutral/MembersContainer-C4ZTP6ZW.mjs.map +0 -7
  465. package/dist/lib/neutral/MenuFooter-FWE5LFM4.mjs +0 -33
  466. package/dist/lib/neutral/MenuFooter-FWE5LFM4.mjs.map +0 -7
  467. package/dist/lib/neutral/ObjectCardStack-DHVDRNRK.mjs +0 -55
  468. package/dist/lib/neutral/ObjectCardStack-DHVDRNRK.mjs.map +0 -7
  469. package/dist/lib/neutral/RecordArticle-JSORXRAA.mjs +0 -102
  470. package/dist/lib/neutral/RecordArticle-JSORXRAA.mjs.map +0 -7
  471. package/dist/lib/neutral/RelatedArticle-Z777WVDW.mjs +0 -69
  472. package/dist/lib/neutral/RelatedArticle-Z777WVDW.mjs.map +0 -7
  473. package/dist/lib/neutral/RenamePopover-AZT2KPOF.mjs +0 -104
  474. package/dist/lib/neutral/RenamePopover-AZT2KPOF.mjs.map +0 -7
  475. package/dist/lib/neutral/SchemaContainer-4GJKQBXM.mjs +0 -53
  476. package/dist/lib/neutral/SchemaContainer-4GJKQBXM.mjs.map +0 -7
  477. package/dist/lib/neutral/SmallPresenceLive-FW3AMEY5.mjs +0 -8
  478. package/dist/lib/neutral/SmallPresenceLive-FW3AMEY5.mjs.map +0 -7
  479. package/dist/lib/neutral/SpaceHomeArticle-Y47TLZ72.mjs +0 -78
  480. package/dist/lib/neutral/SpaceHomeArticle-Y47TLZ72.mjs.map +0 -7
  481. package/dist/lib/neutral/SpaceHomeRecent-S57AO3EV.mjs +0 -89
  482. package/dist/lib/neutral/SpaceHomeRecent-S57AO3EV.mjs.map +0 -7
  483. package/dist/lib/neutral/SpacePlugin.mjs +0 -10
  484. package/dist/lib/neutral/SpacePlugin.mjs.map +0 -7
  485. package/dist/lib/neutral/SpacePlugin.node.mjs +0 -838
  486. package/dist/lib/neutral/SpacePlugin.node.mjs.map +0 -7
  487. package/dist/lib/neutral/SpacePlugin.workerd.mjs +0 -34
  488. package/dist/lib/neutral/SpacePlugin.workerd.mjs.map +0 -7
  489. package/dist/lib/neutral/SpacePresence-T37WH43Y.mjs +0 -11
  490. package/dist/lib/neutral/SpacePresence-T37WH43Y.mjs.map +0 -7
  491. package/dist/lib/neutral/SpaceSettings-6CZF7GEO.mjs +0 -60
  492. package/dist/lib/neutral/SpaceSettings-6CZF7GEO.mjs.map +0 -7
  493. package/dist/lib/neutral/SpaceSettingsContainer-72CJWELM.mjs +0 -279
  494. package/dist/lib/neutral/SpaceSettingsContainer-72CJWELM.mjs.map +0 -7
  495. package/dist/lib/neutral/SyncStatus-J7CHLO5O.mjs +0 -147
  496. package/dist/lib/neutral/SyncStatus-J7CHLO5O.mjs.map +0 -7
  497. package/dist/lib/neutral/TypeCollectionArticle-W76ADS2G.mjs +0 -143
  498. package/dist/lib/neutral/TypeCollectionArticle-W76ADS2G.mjs.map +0 -7
  499. package/dist/lib/neutral/ViewEditor-QXRUOKXR.mjs +0 -101
  500. package/dist/lib/neutral/ViewEditor-QXRUOKXR.mjs.map +0 -7
  501. package/dist/lib/neutral/add-object-H2N4AOQJ.mjs +0 -77
  502. package/dist/lib/neutral/add-object-H2N4AOQJ.mjs.map +0 -7
  503. package/dist/lib/neutral/add-relation-BGTLART5.mjs +0 -26
  504. package/dist/lib/neutral/add-relation-BGTLART5.mjs.map +0 -7
  505. package/dist/lib/neutral/add-type-JIDLRANR.mjs +0 -57
  506. package/dist/lib/neutral/add-type-JIDLRANR.mjs.map +0 -7
  507. package/dist/lib/neutral/app-graph-builder-7H2KOD4B.mjs +0 -1332
  508. package/dist/lib/neutral/app-graph-builder-7H2KOD4B.mjs.map +0 -7
  509. package/dist/lib/neutral/capabilities/index.mjs +0 -46
  510. package/dist/lib/neutral/capabilities/index.mjs.map +0 -7
  511. package/dist/lib/neutral/capabilities/node.mjs +0 -15
  512. package/dist/lib/neutral/capabilities/node.mjs.map +0 -7
  513. package/dist/lib/neutral/chunk-52ASDNRA.mjs +0 -41
  514. package/dist/lib/neutral/chunk-52ASDNRA.mjs.map +0 -7
  515. package/dist/lib/neutral/chunk-5ZZS3KMK.mjs.map +0 -7
  516. package/dist/lib/neutral/chunk-C2ULK22J.mjs.map +0 -7
  517. package/dist/lib/neutral/chunk-F5KLUP2P.mjs +0 -115
  518. package/dist/lib/neutral/chunk-F5KLUP2P.mjs.map +0 -7
  519. package/dist/lib/neutral/chunk-G2KHP7FX.mjs +0 -8
  520. package/dist/lib/neutral/chunk-G2KHP7FX.mjs.map +0 -7
  521. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +0 -10
  522. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +0 -7
  523. package/dist/lib/neutral/chunk-LMUG6PEJ.mjs +0 -572
  524. package/dist/lib/neutral/chunk-LMUG6PEJ.mjs.map +0 -7
  525. package/dist/lib/neutral/chunk-RAAHDTVF.mjs +0 -167
  526. package/dist/lib/neutral/chunk-RAAHDTVF.mjs.map +0 -7
  527. package/dist/lib/neutral/chunk-SPWAMXNR.mjs +0 -131
  528. package/dist/lib/neutral/chunk-SPWAMXNR.mjs.map +0 -7
  529. package/dist/lib/neutral/chunk-U5WTDOMV.mjs +0 -8
  530. package/dist/lib/neutral/chunk-U5WTDOMV.mjs.map +0 -7
  531. package/dist/lib/neutral/chunk-V7JALUM3.mjs +0 -9
  532. package/dist/lib/neutral/chunk-V7JALUM3.mjs.map +0 -7
  533. package/dist/lib/neutral/close-5WEQZRNK.mjs +0 -17
  534. package/dist/lib/neutral/close-5WEQZRNK.mjs.map +0 -7
  535. package/dist/lib/neutral/components/index.mjs +0 -401
  536. package/dist/lib/neutral/components/index.mjs.map +0 -7
  537. package/dist/lib/neutral/constants.mjs +0 -16
  538. package/dist/lib/neutral/constants.mjs.map +0 -7
  539. package/dist/lib/neutral/containers/index.mjs +0 -55
  540. package/dist/lib/neutral/containers/index.mjs.map +0 -7
  541. package/dist/lib/neutral/create-QZ47FHQU.mjs +0 -75
  542. package/dist/lib/neutral/create-QZ47FHQU.mjs.map +0 -7
  543. package/dist/lib/neutral/create-object-ZU6FZW5X.mjs +0 -96
  544. package/dist/lib/neutral/create-object-ZU6FZW5X.mjs.map +0 -7
  545. package/dist/lib/neutral/delete-SPCU2VFM.mjs +0 -17
  546. package/dist/lib/neutral/delete-SPCU2VFM.mjs.map +0 -7
  547. package/dist/lib/neutral/delete-field-TAKJVEAD.mjs +0 -42
  548. package/dist/lib/neutral/delete-field-TAKJVEAD.mjs.map +0 -7
  549. package/dist/lib/neutral/duplicate-object-BUPZOO6S.mjs +0 -17
  550. package/dist/lib/neutral/duplicate-object-BUPZOO6S.mjs.map +0 -7
  551. package/dist/lib/neutral/export-space-S5SCAL4M.mjs +0 -34
  552. package/dist/lib/neutral/export-space-S5SCAL4M.mjs.map +0 -7
  553. package/dist/lib/neutral/get-share-link-CLM5IQRL.mjs +0 -41
  554. package/dist/lib/neutral/get-share-link-CLM5IQRL.mjs.map +0 -7
  555. package/dist/lib/neutral/hooks/index.mjs +0 -133
  556. package/dist/lib/neutral/hooks/index.mjs.map +0 -7
  557. package/dist/lib/neutral/identity-created-BEYMLBK4.mjs +0 -32
  558. package/dist/lib/neutral/identity-created-BEYMLBK4.mjs.map +0 -7
  559. package/dist/lib/neutral/import-space-LJQK3KT7.mjs +0 -28
  560. package/dist/lib/neutral/import-space-LJQK3KT7.mjs.map +0 -7
  561. package/dist/lib/neutral/index.mjs +0 -62
  562. package/dist/lib/neutral/index.mjs.map +0 -7
  563. package/dist/lib/neutral/join-FSODYIOC.mjs +0 -54
  564. package/dist/lib/neutral/join-FSODYIOC.mjs.map +0 -7
  565. package/dist/lib/neutral/meta.json +0 -1
  566. package/dist/lib/neutral/meta.mjs +0 -8
  567. package/dist/lib/neutral/meta.mjs.map +0 -7
  568. package/dist/lib/neutral/migrate-WHM6LU7L.mjs +0 -52
  569. package/dist/lib/neutral/migrate-WHM6LU7L.mjs.map +0 -7
  570. package/dist/lib/neutral/navigation-handler-ZF7MV2HL.mjs +0 -44
  571. package/dist/lib/neutral/navigation-handler-ZF7MV2HL.mjs.map +0 -7
  572. package/dist/lib/neutral/navigation-resolver-KBESOSWU.mjs +0 -82
  573. package/dist/lib/neutral/navigation-resolver-KBESOSWU.mjs.map +0 -7
  574. package/dist/lib/neutral/open-JCXTL3SK.mjs +0 -17
  575. package/dist/lib/neutral/open-JCXTL3SK.mjs.map +0 -7
  576. package/dist/lib/neutral/open-create-object-WAIAU7TA.mjs +0 -42
  577. package/dist/lib/neutral/open-create-object-WAIAU7TA.mjs.map +0 -7
  578. package/dist/lib/neutral/open-create-space-VU47FWPZ.mjs +0 -24
  579. package/dist/lib/neutral/open-create-space-VU47FWPZ.mjs.map +0 -7
  580. package/dist/lib/neutral/open-import-space-GUHIEWYB.mjs +0 -24
  581. package/dist/lib/neutral/open-import-space-GUHIEWYB.mjs.map +0 -7
  582. package/dist/lib/neutral/open-members-MLLBHKUU.mjs +0 -23
  583. package/dist/lib/neutral/open-members-MLLBHKUU.mjs.map +0 -7
  584. package/dist/lib/neutral/open-settings-DTPZF4U4.mjs +0 -23
  585. package/dist/lib/neutral/open-settings-DTPZF4U4.mjs.map +0 -7
  586. package/dist/lib/neutral/operation-handler-YPIRQOH2.mjs +0 -13
  587. package/dist/lib/neutral/operation-handler-YPIRQOH2.mjs.map +0 -7
  588. package/dist/lib/neutral/operations/index.mjs +0 -13
  589. package/dist/lib/neutral/operations/index.mjs.map +0 -7
  590. package/dist/lib/neutral/plugin.mjs +0 -18
  591. package/dist/lib/neutral/plugin.mjs.map +0 -7
  592. package/dist/lib/neutral/react-root-YLYRCSAZ.mjs +0 -23
  593. package/dist/lib/neutral/react-root-YLYRCSAZ.mjs.map +0 -7
  594. package/dist/lib/neutral/react-surface-LRA7GIFN.mjs +0 -367
  595. package/dist/lib/neutral/react-surface-LRA7GIFN.mjs.map +0 -7
  596. package/dist/lib/neutral/remove-objects-WEO66EDS.mjs +0 -55
  597. package/dist/lib/neutral/remove-objects-WEO66EDS.mjs.map +0 -7
  598. package/dist/lib/neutral/rename-Q6UNCBIM.mjs +0 -26
  599. package/dist/lib/neutral/rename-Q6UNCBIM.mjs.map +0 -7
  600. package/dist/lib/neutral/rename-object-2UCEGU7U.mjs +0 -26
  601. package/dist/lib/neutral/rename-object-2UCEGU7U.mjs.map +0 -7
  602. package/dist/lib/neutral/repair-HMH476U3.mjs +0 -32
  603. package/dist/lib/neutral/repair-HMH476U3.mjs.map +0 -7
  604. package/dist/lib/neutral/restore-field-6CQAFOXY.mjs +0 -40
  605. package/dist/lib/neutral/restore-field-6CQAFOXY.mjs.map +0 -7
  606. package/dist/lib/neutral/restore-objects-3VINLP7C.mjs +0 -39
  607. package/dist/lib/neutral/restore-objects-3VINLP7C.mjs.map +0 -7
  608. package/dist/lib/neutral/settings-5IBSYBVU.mjs +0 -28
  609. package/dist/lib/neutral/settings-5IBSYBVU.mjs.map +0 -7
  610. package/dist/lib/neutral/share-A4WPILNF.mjs +0 -31
  611. package/dist/lib/neutral/share-A4WPILNF.mjs.map +0 -7
  612. package/dist/lib/neutral/snapshot-HBYMAPA7.mjs +0 -30
  613. package/dist/lib/neutral/snapshot-HBYMAPA7.mjs.map +0 -7
  614. package/dist/lib/neutral/spaces-ready-GWMSU72V.mjs +0 -281
  615. package/dist/lib/neutral/spaces-ready-GWMSU72V.mjs.map +0 -7
  616. package/dist/lib/neutral/state-KMH2NUAL.mjs +0 -55
  617. package/dist/lib/neutral/state-KMH2NUAL.mjs.map +0 -7
  618. package/dist/lib/neutral/testing.mjs +0 -8
  619. package/dist/lib/neutral/testing.mjs.map +0 -7
  620. package/dist/lib/neutral/translations.mjs +0 -315
  621. package/dist/lib/neutral/translations.mjs.map +0 -7
  622. package/dist/lib/neutral/types/index.mjs +0 -40
  623. package/dist/lib/neutral/types/index.mjs.map +0 -7
  624. package/dist/lib/neutral/undo-mappings-P43EAUGI.mjs +0 -68
  625. package/dist/lib/neutral/undo-mappings-P43EAUGI.mjs.map +0 -7
  626. package/dist/lib/neutral/wait-for-object-U6P2NNWY.mjs +0 -23
  627. package/dist/lib/neutral/wait-for-object-U6P2NNWY.mjs.map +0 -7
  628. package/dist/types/src/capabilities/navigation-resolver.d.ts +0 -5
  629. package/dist/types/src/capabilities/navigation-resolver.d.ts.map +0 -1
  630. package/dist/types/src/containers/MenuFooter/MenuFooter.d.ts +0 -6
  631. package/dist/types/src/containers/MenuFooter/MenuFooter.d.ts.map +0 -1
  632. package/dist/types/src/containers/MenuFooter/index.d.ts +0 -2
  633. package/dist/types/src/containers/MenuFooter/index.d.ts.map +0 -1
  634. package/dist/types/src/containers/TypeCollectionArticle/TypeCollectionArticle.d.ts +0 -16
  635. package/dist/types/src/containers/TypeCollectionArticle/TypeCollectionArticle.d.ts.map +0 -1
  636. package/dist/types/src/containers/TypeCollectionArticle/TypeCollectionArticle.stories.d.ts +0 -21
  637. package/dist/types/src/containers/TypeCollectionArticle/TypeCollectionArticle.stories.d.ts.map +0 -1
  638. package/dist/types/src/containers/TypeCollectionArticle/index.d.ts +0 -2
  639. package/dist/types/src/containers/TypeCollectionArticle/index.d.ts.map +0 -1
  640. package/src/capabilities/navigation-resolver.ts +0 -94
  641. package/src/capabilities/react-surface.tsx +0 -395
  642. package/src/containers/MenuFooter/MenuFooter.tsx +0 -33
  643. package/src/containers/MenuFooter/index.ts +0 -5
  644. package/src/containers/TypeCollectionArticle/TypeCollectionArticle.stories.tsx +0 -116
  645. package/src/containers/TypeCollectionArticle/TypeCollectionArticle.tsx +0 -162
  646. package/src/containers/TypeCollectionArticle/index.ts +0 -5
@@ -0,0 +1,82 @@
1
+ import { meta } from "#meta";
2
+ import { SpaceHomeContent, SpaceHomePinBottom } from "#types";
3
+ import { useCallback } from "react";
4
+ import { Surface } from "@dxos/app-framework/ui";
5
+ import { useAppGraph } from "@dxos/app-toolkit/ui";
6
+ import { Column, Panel, ScrollArea } from "@dxos/react-ui";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ import { Menu, MenuBuilder, graphActions, isToolbarAction, useMenuBuilder } from "@dxos/react-ui-menu";
9
+ import { useActionRunner } from "@dxos/plugin-graph/hooks";
10
+ //#region src/containers/SpaceHomeArticle/SpaceHomeArticle.tsx
11
+ /**
12
+ * Per-space Home article shell. Owns only the chrome: a toolbar sourced from graph actions
13
+ * contributed with `disposition: 'toolbar'` (e.g. Start / Hide Welcome from plugin-support),
14
+ * and a Column layout that delegates its body to surface contributors:
15
+ *
16
+ * - `space-home-content`: scrollable region (Welcome panel, recent-objects masonry, starter prompts).
17
+ * - `space-home-pin-bottom`: pinned region (assistant prompt), capped at one contributor.
18
+ *
19
+ * The Space is read from `data.subject` (the Home node carries the Space as its data).
20
+ */
21
+ var SpaceHomeArticle = ({ role, attendableId, space }) => {
22
+ const { actions, onAction } = useMenuActions(attendableId);
23
+ return /* @__PURE__ */ jsxs(Panel.Root, {
24
+ role,
25
+ children: [/* @__PURE__ */ jsx(Menu.Root, {
26
+ ...actions,
27
+ attendableId,
28
+ onAction,
29
+ children: /* @__PURE__ */ jsx(Panel.Toolbar, {
30
+ asChild: true,
31
+ children: /* @__PURE__ */ jsx(Menu.Toolbar, {})
32
+ })
33
+ }), /* @__PURE__ */ jsx(Panel.Content, {
34
+ asChild: true,
35
+ children: /* @__PURE__ */ jsxs(Column.Root, {
36
+ style: { gridTemplateRows: "minmax(0,1fr) auto" },
37
+ children: [/* @__PURE__ */ jsx(ScrollArea.Root, {
38
+ orientation: "vertical",
39
+ centered: true,
40
+ padding: true,
41
+ children: /* @__PURE__ */ jsx(ScrollArea.Viewport, { children: /* @__PURE__ */ jsx("div", {
42
+ className: "dx-document flex flex-col gap-4 pb-12",
43
+ children: /* @__PURE__ */ jsx(Surface.Surface, {
44
+ type: SpaceHomeContent,
45
+ data: { space }
46
+ })
47
+ }) })
48
+ }), /* @__PURE__ */ jsx(Column.Center, {
49
+ classNames: "dx-document pb-4",
50
+ children: /* @__PURE__ */ jsx(Surface.Surface, {
51
+ type: SpaceHomePinBottom,
52
+ data: { space },
53
+ limit: 1
54
+ })
55
+ })]
56
+ })
57
+ })]
58
+ });
59
+ };
60
+ /**
61
+ * Builds the toolbar from contributed graph actions for the Home node. Actions opt into the
62
+ * toolbar via `disposition: 'toolbar'`; the Home shell contributes none itself, so the toolbar
63
+ * is empty unless another plugin (e.g. plugin-support's tour/welcome actions) contributes.
64
+ */
65
+ var useMenuActions = (attendableId) => {
66
+ const { graph } = useAppGraph();
67
+ const runAction = useActionRunner();
68
+ return {
69
+ actions: useMenuBuilder((get) => {
70
+ if (!attendableId) return MenuBuilder.make().build();
71
+ return MenuBuilder.make().subgraph(graphActions(graph, get, attendableId, { filter: isToolbarAction })).build();
72
+ }, [graph, attendableId]),
73
+ onAction: useCallback((action) => {
74
+ runAction(action, { caller: meta.profile.key });
75
+ }, [runAction])
76
+ };
77
+ };
78
+ SpaceHomeArticle.displayName = "SpaceHomeArticle";
79
+ //#endregion
80
+ export { SpaceHomeArticle as default };
81
+
82
+ //# sourceMappingURL=chunk-SpaceHomeArticle.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-SpaceHomeArticle.mjs","names":[],"sources":["../../src/containers/SpaceHomeArticle/SpaceHomeArticle.tsx"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { type AppSurface, useAppGraph } from '@dxos/app-toolkit/ui';\nimport { useActionRunner } from '@dxos/plugin-graph/hooks';\nimport { Column, Panel, ScrollArea } from '@dxos/react-ui';\nimport {\n type ActionExecutor,\n type ActionGraphProps,\n Menu,\n MenuBuilder,\n graphActions,\n isToolbarAction,\n useMenuBuilder,\n} from '@dxos/react-ui-menu';\n\nimport { meta } from '#meta';\nimport { SpaceHomeContent, SpaceHomePinBottom } from '#types';\n\nexport type SpaceHomeArticleProps = AppSurface.SpaceArticleProps;\n\n/**\n * Per-space Home article shell. Owns only the chrome: a toolbar sourced from graph actions\n * contributed with `disposition: 'toolbar'` (e.g. Start / Hide Welcome from plugin-support),\n * and a Column layout that delegates its body to surface contributors:\n *\n * - `space-home-content`: scrollable region (Welcome panel, recent-objects masonry, starter prompts).\n * - `space-home-pin-bottom`: pinned region (assistant prompt), capped at one contributor.\n *\n * The Space is read from `data.subject` (the Home node carries the Space as its data).\n */\nexport const SpaceHomeArticle = ({ role, attendableId, space }: SpaceHomeArticleProps) => {\n const { actions, onAction } = useMenuActions(attendableId);\n\n return (\n <Panel.Root role={role}>\n <Menu.Root {...actions} attendableId={attendableId} onAction={onAction}>\n <Panel.Toolbar asChild>\n <Menu.Toolbar />\n </Panel.Toolbar>\n </Menu.Root>\n <Panel.Content asChild>\n <Column.Root style={{ gridTemplateRows: 'minmax(0,1fr) auto' }}>\n <ScrollArea.Root orientation='vertical' centered padding>\n <ScrollArea.Viewport>\n <div className='dx-document flex flex-col gap-4 pb-12'>\n <Surface.Surface type={SpaceHomeContent} data={{ space }} />\n </div>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n <Column.Center classNames='dx-document pb-4'>\n <Surface.Surface type={SpaceHomePinBottom} data={{ space }} limit={1} />\n </Column.Center>\n </Column.Root>\n </Panel.Content>\n </Panel.Root>\n );\n};\n\n//\n// Hooks\n//\n\n/**\n * Builds the toolbar from contributed graph actions for the Home node. Actions opt into the\n * toolbar via `disposition: 'toolbar'`; the Home shell contributes none itself, so the toolbar\n * is empty unless another plugin (e.g. plugin-support's tour/welcome actions) contributes.\n */\nconst useMenuActions = (\n attendableId?: string,\n): { actions: ReturnType<typeof useMenuBuilder>; onAction: ActionExecutor } => {\n const { graph } = useAppGraph();\n const runAction = useActionRunner();\n\n const menuActions = useMenuBuilder(\n (get): ActionGraphProps => {\n if (!attendableId) {\n return MenuBuilder.make().build();\n }\n return MenuBuilder.make()\n .subgraph(graphActions(graph, get, attendableId, { filter: isToolbarAction }))\n .build();\n },\n [graph, attendableId],\n );\n\n const onAction: ActionExecutor = useCallback(\n (action) => {\n void runAction(action, { caller: meta.profile.key });\n },\n [runAction],\n );\n\n return { actions: menuActions, onAction };\n};\n\nSpaceHomeArticle.displayName = 'SpaceHomeArticle';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAmCA,IAAa,oBAAoB,EAAE,MAAM,cAAc,YAAmC;CACxF,MAAM,EAAE,SAAS,aAAa,eAAe,YAAY;CAEzD,OACE,qBAAC,MAAM,MAAP;EAAkB;YAAlB,CACE,oBAAC,KAAK,MAAN;GAAW,GAAI;GAAuB;GAAwB;aAC5D,oBAAC,MAAM,SAAP;IAAe,SAAA;cACb,oBAAC,KAAK,SAAN,CAAe,CAAA;GACF,CAAA;EACN,CAAA,GACX,oBAAC,MAAM,SAAP;GAAe,SAAA;aACb,qBAAC,OAAO,MAAR;IAAa,OAAO,EAAE,kBAAkB,qBAAqB;cAA7D,CACE,oBAAC,WAAW,MAAZ;KAAiB,aAAY;KAAW,UAAA;KAAS,SAAA;eAC/C,oBAAC,WAAW,UAAZ,EAAA,UACE,oBAAC,OAAD;MAAK,WAAU;gBACb,oBAAC,QAAQ,SAAT;OAAiB,MAAM;OAAkB,MAAM,EAAE,MAAM;MAAI,CAAA;KACxD,CAAA,EACc,CAAA;IACN,CAAA,GACjB,oBAAC,OAAO,QAAR;KAAe,YAAW;eACxB,oBAAC,QAAQ,SAAT;MAAiB,MAAM;MAAoB,MAAM,EAAE,MAAM;MAAG,OAAO;KAAI,CAAA;IAC1D,CAAA,CACJ;;EACA,CAAA,CACL;;AAEhB;;;;;;AAWA,IAAM,kBACJ,iBAC6E;CAC7E,MAAM,EAAE,UAAU,YAAY;CAC9B,MAAM,YAAY,gBAAgB;CAqBlC,OAAO;EAAE,SAnBW,gBACjB,QAA0B;GACzB,IAAI,CAAC,cACH,OAAO,YAAY,KAAK,CAAC,CAAC,MAAM;GAElC,OAAO,YAAY,KAAK,CAAA,CACrB,SAAS,aAAa,OAAO,KAAK,cAAc,EAAE,QAAQ,gBAAgB,CAAC,CAAC,CAAA,CAC5E,MAAM;EACX,GACA,CAAC,OAAO,YAAY,CAUJ;EAAa,UAPE,aAC9B,WAAW;GACV,UAAe,QAAQ,EAAE,QAAQ,KAAK,QAAQ,IAAI,CAAC;EACrD,GACA,CAAC,SAAS,CAGmB;CAAS;AAC1C;AAEA,iBAAiB,cAAc"}
@@ -0,0 +1,96 @@
1
+ import { meta } from "#meta";
2
+ import { Collection, Filter, Obj, Query } from "@dxos/echo";
3
+ import { useMemo } from "react";
4
+ import { HomeSection, usePluginManager } from "@dxos/app-framework/ui";
5
+ import { useQuery } from "@dxos/echo-react";
6
+ import { useMembers } from "@dxos/react-client/echo";
7
+ import { useTranslation } from "@dxos/react-ui";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ import { useAtomValue } from "@effect-atom/atom-react";
10
+ import { Dashboard } from "@dxos/react-ui-dashboard";
11
+ //#region src/containers/SpaceHomeDashboard/SpaceHomeDashboard.tsx
12
+ var STAT_IDS = [
13
+ "objects",
14
+ "types",
15
+ "collections",
16
+ "members",
17
+ "active-days",
18
+ "plugins"
19
+ ];
20
+ /**
21
+ * Space stats and activity matrix for the Home article. Stats are derived from the object graph
22
+ * (counts of objects, distinct types, collections, members); the matrix buckets objects by the
23
+ * day they were last touched (`updatedAt`, falling back to `createdAt`).
24
+ *
25
+ * NOTE: per-object `updatedAt` only reflects the latest change, so the matrix undercounts busy
26
+ * days in the past.
27
+ * TODO(burdon): Richer stats need sources beyond the object graph:
28
+ * - Edits per day: automerge change graph (echo-pipeline) aggregated into a daily histogram.
29
+ * - Storage size / sync state: client diagnostics (`client.diagnostics()`) or SpaceSyncState.
30
+ * - Relations count: needs a relations query (Query.select over relation types).
31
+ * - Member activity / presence history: EDGE presence feed (only live viewers are exposed today).
32
+ */
33
+ var SpaceHomeDashboard = ({ space, stats = STAT_IDS, onClose }) => {
34
+ const { t } = useTranslation(meta.profile.key);
35
+ const query = useMemo(() => Query.select(Filter.everything()), []);
36
+ const members = useMembers(space?.key);
37
+ const manager = usePluginManager();
38
+ const core = useAtomValue(manager.core);
39
+ const enabled = useAtomValue(manager.enabled);
40
+ const plugins = useMemo(() => enabled.filter((id) => !core.includes(id)).length, [core, enabled]);
41
+ const objects = useQuery(space ? space.db : void 0, query);
42
+ const { activity, values } = useMemo(() => {
43
+ const typenames = /* @__PURE__ */ new Set();
44
+ const days = /* @__PURE__ */ new Set();
45
+ let collections = 0;
46
+ const activity = [];
47
+ for (const object of objects) {
48
+ const typename = Obj.getTypename(object);
49
+ if (typename) typenames.add(typename);
50
+ if (Obj.instanceOf(Collection.Collection, object)) collections++;
51
+ const objectMeta = Obj.getMeta(object);
52
+ const timestamp = objectMeta.updatedAt ?? objectMeta.createdAt;
53
+ if (timestamp) {
54
+ const date = new Date(timestamp);
55
+ days.add(date.toDateString());
56
+ activity.push({
57
+ date,
58
+ value: 1
59
+ });
60
+ }
61
+ }
62
+ return {
63
+ activity,
64
+ values: {
65
+ "objects": objects.length,
66
+ "types": typenames.size,
67
+ "collections": collections,
68
+ "members": members.length,
69
+ "active-days": days.size,
70
+ "plugins": plugins
71
+ }
72
+ };
73
+ }, [
74
+ objects,
75
+ members,
76
+ plugins
77
+ ]);
78
+ if (!space) return null;
79
+ return /* @__PURE__ */ jsxs(HomeSection.Root, { children: [
80
+ /* @__PURE__ */ jsx(HomeSection.Header, {
81
+ title: t("space-home.dashboard.heading"),
82
+ onClose
83
+ }),
84
+ /* @__PURE__ */ jsx(Dashboard.Stats, { children: stats.map((id) => /* @__PURE__ */ jsxs(Dashboard.Stat, { children: [/* @__PURE__ */ jsx(Dashboard.StatLabel, { children: t(`space-home.dashboard.${id}.label`) }), /* @__PURE__ */ jsx(Dashboard.StatValue, { value: values[id] })] }, id)) }),
85
+ /* @__PURE__ */ jsx(Dashboard.Activity, {
86
+ classNames: "[--dx-dashboard-cell:0.75rem]",
87
+ data: activity,
88
+ endDate: /* @__PURE__ */ new Date()
89
+ })
90
+ ] });
91
+ };
92
+ SpaceHomeDashboard.displayName = "SpaceHomeDashboard";
93
+ //#endregion
94
+ export { SpaceHomeDashboard as default };
95
+
96
+ //# sourceMappingURL=chunk-SpaceHomeDashboard.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-SpaceHomeDashboard.mjs","names":[],"sources":["../../src/containers/SpaceHomeDashboard/SpaceHomeDashboard.tsx"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport React, { useMemo } from 'react';\n\nimport { HomeSection, usePluginManager } from '@dxos/app-framework/ui';\nimport { Collection, Filter, Obj, Query } from '@dxos/echo';\nimport { useQuery } from '@dxos/echo-react';\nimport { type Space, useMembers } from '@dxos/react-client/echo';\nimport { useTranslation } from '@dxos/react-ui';\nimport { type ActivityDatum, Dashboard } from '@dxos/react-ui-dashboard';\n\nimport { meta } from '#meta';\n\nconst STAT_IDS = ['objects', 'types', 'collections', 'members', 'active-days', 'plugins'] as const;\n\nexport type SpaceStatId = (typeof STAT_IDS)[number];\n\ntype SpaceHomeDashboardProps = {\n space?: Space;\n /** Stat cards to render, in order; defaults to all. */\n stats?: readonly SpaceStatId[];\n onClose?: () => void;\n};\n\n/**\n * Space stats and activity matrix for the Home article. Stats are derived from the object graph\n * (counts of objects, distinct types, collections, members); the matrix buckets objects by the\n * day they were last touched (`updatedAt`, falling back to `createdAt`).\n *\n * NOTE: per-object `updatedAt` only reflects the latest change, so the matrix undercounts busy\n * days in the past.\n * TODO(burdon): Richer stats need sources beyond the object graph:\n * - Edits per day: automerge change graph (echo-pipeline) aggregated into a daily histogram.\n * - Storage size / sync state: client diagnostics (`client.diagnostics()`) or SpaceSyncState.\n * - Relations count: needs a relations query (Query.select over relation types).\n * - Member activity / presence history: EDGE presence feed (only live viewers are exposed today).\n */\nexport const SpaceHomeDashboard = ({ space, stats = STAT_IDS, onClose }: SpaceHomeDashboardProps) => {\n const { t } = useTranslation(meta.profile.key);\n\n const query = useMemo(() => Query.select(Filter.everything()), []);\n const members = useMembers(space?.key);\n\n const manager = usePluginManager();\n const core = useAtomValue(manager.core);\n const enabled = useAtomValue(manager.enabled);\n const plugins = useMemo(() => enabled.filter((id) => !core.includes(id)).length, [core, enabled]);\n\n // TODO(burdon): Can we caches this?\n const objects = useQuery(space ? space.db : undefined, query);\n const { activity, values } = useMemo(() => {\n const typenames = new Set<string>();\n const days = new Set<string>();\n let collections = 0;\n const activity: ActivityDatum[] = [];\n for (const object of objects) {\n const typename = Obj.getTypename(object);\n if (typename) {\n typenames.add(typename);\n }\n if (Obj.instanceOf(Collection.Collection, object)) {\n collections++;\n }\n const objectMeta = Obj.getMeta(object);\n const timestamp = objectMeta.updatedAt ?? objectMeta.createdAt;\n if (timestamp) {\n const date = new Date(timestamp);\n days.add(date.toDateString());\n activity.push({ date, value: 1 });\n }\n }\n\n const values: Record<SpaceStatId, number> = {\n 'objects': objects.length,\n 'types': typenames.size,\n 'collections': collections,\n 'members': members.length,\n 'active-days': days.size,\n 'plugins': plugins,\n };\n\n return { activity, values };\n }, [objects, members, plugins]);\n\n if (!space) {\n return null;\n }\n\n return (\n <HomeSection.Root>\n <HomeSection.Header title={t('space-home.dashboard.heading')} onClose={onClose} />\n <Dashboard.Stats>\n {stats.map((id) => (\n <Dashboard.Stat key={id}>\n <Dashboard.StatLabel>{t(`space-home.dashboard.${id}.label`)}</Dashboard.StatLabel>\n <Dashboard.StatValue value={values[id]} />\n </Dashboard.Stat>\n ))}\n </Dashboard.Stats>\n {/* Smaller cells so a full year fits the 40rem home column without horizontal scroll. */}\n <Dashboard.Activity classNames='[--dx-dashboard-cell:0.75rem]' data={activity} endDate={new Date()} />\n </HomeSection.Root>\n );\n};\n\nSpaceHomeDashboard.displayName = 'SpaceHomeDashboard';\n"],"mappings":";;;;;;;;;;;AAgBA,IAAM,WAAW;CAAC;CAAW;CAAS;CAAe;CAAW;CAAe;AAAS;;;;;;;;;;;;;;AAwBxF,IAAa,sBAAsB,EAAE,OAAO,QAAQ,UAAU,cAAuC;CACnG,MAAM,EAAE,MAAM,eAAe,KAAK,QAAQ,GAAG;CAE7C,MAAM,QAAQ,cAAc,MAAM,OAAO,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;CACjE,MAAM,UAAU,WAAW,OAAO,GAAG;CAErC,MAAM,UAAU,iBAAiB;CACjC,MAAM,OAAO,aAAa,QAAQ,IAAI;CACtC,MAAM,UAAU,aAAa,QAAQ,OAAO;CAC5C,MAAM,UAAU,cAAc,QAAQ,QAAQ,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,OAAO,CAAC;CAGhG,MAAM,UAAU,SAAS,QAAQ,MAAM,KAAK,KAAA,GAAW,KAAK;CAC5D,MAAM,EAAE,UAAU,WAAW,cAAc;EACzC,MAAM,4BAAY,IAAI,IAAY;EAClC,MAAM,uBAAO,IAAI,IAAY;EAC7B,IAAI,cAAc;EAClB,MAAM,WAA4B,CAAC;EACnC,KAAK,MAAM,UAAU,SAAS;GAC5B,MAAM,WAAW,IAAI,YAAY,MAAM;GACvC,IAAI,UACF,UAAU,IAAI,QAAQ;GAExB,IAAI,IAAI,WAAW,WAAW,YAAY,MAAM,GAC9C;GAEF,MAAM,aAAa,IAAI,QAAQ,MAAM;GACrC,MAAM,YAAY,WAAW,aAAa,WAAW;GACrD,IAAI,WAAW;IACb,MAAM,OAAO,IAAI,KAAK,SAAS;IAC/B,KAAK,IAAI,KAAK,aAAa,CAAC;IAC5B,SAAS,KAAK;KAAE;KAAM,OAAO;IAAE,CAAC;GAClC;EACF;EAWA,OAAO;GAAE;GAAU,QAAA;IARjB,WAAW,QAAQ;IACnB,SAAS,UAAU;IACnB,eAAe;IACf,WAAW,QAAQ;IACnB,eAAe,KAAK;IACpB,WAAW;GAGM;EAAO;CAC5B,GAAG;EAAC;EAAS;EAAS;CAAO,CAAC;CAE9B,IAAI,CAAC,OACH,OAAO;CAGT,OACE,qBAAC,YAAY,MAAb,EAAA,UAAA;EACE,oBAAC,YAAY,QAAb;GAAoB,OAAO,EAAE,8BAA8B;GAAY;EAAU,CAAA;EACjF,oBAAC,UAAU,OAAX,EAAA,UACG,MAAM,KAAK,OACV,qBAAC,UAAU,MAAX,EAAA,UAAA,CACE,oBAAC,UAAU,WAAX,EAAA,UAAsB,EAAE,wBAAwB,GAAG,OAAO,EAAuB,CAAA,GACjF,oBAAC,UAAU,WAAX,EAAqB,OAAO,OAAO,IAAM,CAAA,CAC3B,EAAA,GAHK,EAGL,CACjB,EACc,CAAA;EAEjB,oBAAC,UAAU,UAAX;GAAoB,YAAW;GAAgC,MAAM;GAAU,yBAAS,IAAI,KAAK;EAAI,CAAA;CACrF,EAAA,CAAA;AAEtB;AAEA,mBAAmB,cAAc"}
@@ -0,0 +1,79 @@
1
+ import { meta } from "#meta";
2
+ import { AppCapabilities, GraphPath, LayoutOperation } from "@dxos/app-toolkit";
3
+ import { Collection, Filter, Obj, Order, Query, Type } from "@dxos/echo";
4
+ import * as Option from "effect/Option";
5
+ import { HiddenAnnotation, getTypeAnnotation } from "@dxos/echo/Annotation";
6
+ import { Kind } from "@dxos/echo/Entity";
7
+ import { useCallback, useMemo } from "react";
8
+ import { HomeSection, useCapabilities, useOperationInvoker } from "@dxos/app-framework/ui";
9
+ import { useQuery } from "@dxos/echo-react";
10
+ import { Card, Icon, toLocalizedString, useTranslation } from "@dxos/react-ui";
11
+ import { getStyles } from "@dxos/ui-theme";
12
+ import { jsx, jsxs } from "react/jsx-runtime";
13
+ import { Masonry } from "@dxos/react-ui-masonry";
14
+ //#region src/containers/SpaceHomeRecent/SpaceHomeRecent.tsx
15
+ /** Number of recently-modified objects to surface as cards. */
16
+ var RECENT_LIMIT = 10;
17
+ /**
18
+ * Recent-objects region for the Home article. Queries the most-recently-modified objects of
19
+ * registered, non-hidden, non-relation, non-collection types and renders them as a Masonry of
20
+ * tiles. Renders nothing (no heading) when the space has no recent objects — the starter-prompt
21
+ * contributor (plugin-assistant) fills the empty state instead.
22
+ */
23
+ var SpaceHomeRecent = ({ space, onClose }) => {
24
+ const { t } = useTranslation(meta.profile.key);
25
+ const schemas = useCapabilities(AppCapabilities.Schema);
26
+ const filter = useMemo(() => {
27
+ const collectionTypename = Type.getTypename(Collection.Collection);
28
+ const types = schemas.flat().filter(Type.isType).filter((type) => getTypeAnnotation(Type.getSchema(type))?.kind !== Kind.Relation).filter((type) => !HiddenAnnotation.get(Type.getSchema(type)).pipe(Option.getOrElse(() => false))).filter((type) => Type.getTypename(type) !== collectionTypename);
29
+ return types.length > 0 ? Filter.or(...types.map((type) => Filter.type(type))) : void 0;
30
+ }, [schemas]);
31
+ const query = useMemo(() => Query.select(filter ?? Filter.everything()).orderBy(Order.updated("desc")).limit(RECENT_LIMIT), [filter]);
32
+ const recent = useQuery(filter && space ? space.db : void 0, query);
33
+ if (recent.length === 0) return null;
34
+ return /* @__PURE__ */ jsxs(HomeSection.Root, { children: [/* @__PURE__ */ jsx(HomeSection.Header, {
35
+ title: t("space-home.recent.heading"),
36
+ onClose
37
+ }), /* @__PURE__ */ jsx(Masonry.Root, {
38
+ Tile: RecentObjectTile,
39
+ children: /* @__PURE__ */ jsx(Masonry.Content, {
40
+ padding: false,
41
+ scrollbars: false,
42
+ children: /* @__PURE__ */ jsx(Masonry.Viewport, {
43
+ items: recent,
44
+ getId: (object) => object.id
45
+ })
46
+ })
47
+ })] });
48
+ };
49
+ var RecentObjectTile = ({ data }) => {
50
+ const { invokePromise } = useOperationInvoker();
51
+ const { t } = useTranslation(meta.profile.key);
52
+ const typename = Obj.getTypename(data);
53
+ const label = toLocalizedString(Obj.getLabel(data) ?? (typename ? ["object-name.placeholder", {
54
+ ns: typename,
55
+ defaultValue: "New item"
56
+ }] : ""), t);
57
+ const iconAnnotation = Obj.getIcon(data);
58
+ const icon = iconAnnotation?.icon ?? "ph--circle-dashed--regular";
59
+ const iconStyles = iconAnnotation?.hue ? getStyles(iconAnnotation.hue) : void 0;
60
+ const handleClick = useCallback(() => {
61
+ invokePromise(LayoutOperation.Open, { subject: [GraphPath.getObjectPathFromObject(data)] });
62
+ }, [invokePromise, data]);
63
+ return /* @__PURE__ */ jsx(Card.Root, {
64
+ role: "button",
65
+ fullWidth: true,
66
+ classNames: "cursor-pointer",
67
+ onClick: handleClick,
68
+ children: /* @__PURE__ */ jsxs(Card.Header, { children: [/* @__PURE__ */ jsx(Card.Block, { children: /* @__PURE__ */ jsx(Icon, {
69
+ icon,
70
+ classNames: iconStyles?.text
71
+ }) }), /* @__PURE__ */ jsx(Card.Title, { children: label })] })
72
+ });
73
+ };
74
+ RecentObjectTile.displayName = "RecentObjectTile";
75
+ SpaceHomeRecent.displayName = "SpaceHomeRecent";
76
+ //#endregion
77
+ export { SpaceHomeRecent as default };
78
+
79
+ //# sourceMappingURL=chunk-SpaceHomeRecent.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-SpaceHomeRecent.mjs","names":[],"sources":["../../src/containers/SpaceHomeRecent/SpaceHomeRecent.tsx"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Option from 'effect/Option';\nimport React, { useCallback, useMemo } from 'react';\n\nimport { HomeSection, useCapabilities, useOperationInvoker } from '@dxos/app-framework/ui';\nimport { AppCapabilities, GraphPath, LayoutOperation } from '@dxos/app-toolkit';\nimport { Collection, Filter, Obj, Order, Query, Type } from '@dxos/echo';\nimport { useQuery } from '@dxos/echo-react';\nimport { HiddenAnnotation, getTypeAnnotation } from '@dxos/echo/Annotation';\nimport { Kind as EntityKind } from '@dxos/echo/Entity';\nimport { type Space } from '@dxos/react-client/echo';\nimport { Card, Icon, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { Masonry } from '@dxos/react-ui-masonry';\nimport { getStyles } from '@dxos/ui-theme';\n\nimport { meta } from '#meta';\n\n/** Number of recently-modified objects to surface as cards. */\nconst RECENT_LIMIT = 10;\n\ntype SpaceScopedProps = {\n space?: Space;\n onClose?: () => void;\n};\n\n/**\n * Recent-objects region for the Home article. Queries the most-recently-modified objects of\n * registered, non-hidden, non-relation, non-collection types and renders them as a Masonry of\n * tiles. Renders nothing (no heading) when the space has no recent objects — the starter-prompt\n * contributor (plugin-assistant) fills the empty state instead.\n */\nexport const SpaceHomeRecent = ({ space, onClose }: SpaceScopedProps) => {\n const { t } = useTranslation(meta.profile.key);\n\n const schemas = useCapabilities(AppCapabilities.Schema);\n const filter = useMemo(() => {\n const collectionTypename = Type.getTypename(Collection.Collection);\n const types = schemas\n .flat()\n .filter(Type.isType)\n .filter((type) => getTypeAnnotation(Type.getSchema(type))?.kind !== EntityKind.Relation)\n .filter((type) => !HiddenAnnotation.get(Type.getSchema(type)).pipe(Option.getOrElse(() => false)))\n .filter((type) => Type.getTypename(type) !== collectionTypename);\n return types.length > 0 ? Filter.or(...types.map((type) => Filter.type(type))) : undefined;\n }, [schemas]);\n\n const query = useMemo(\n () =>\n Query.select(filter ?? Filter.everything())\n .orderBy(Order.updated('desc'))\n .limit(RECENT_LIMIT),\n [filter],\n );\n\n const recent = useQuery(filter && space ? space.db : undefined, query);\n if (recent.length === 0) {\n return null;\n }\n\n return (\n <HomeSection.Root>\n <HomeSection.Header title={t('space-home.recent.heading')} onClose={onClose} />\n <Masonry.Root Tile={RecentObjectTile}>\n <Masonry.Content padding={false} scrollbars={false}>\n <Masonry.Viewport items={recent} getId={(object) => object.id} />\n </Masonry.Content>\n </Masonry.Root>\n </HomeSection.Root>\n );\n};\n\nconst RecentObjectTile = ({ data }: { data: Obj.Unknown; index: number }) => {\n const { invokePromise } = useOperationInvoker();\n const { t } = useTranslation(meta.profile.key);\n const typename = Obj.getTypename(data);\n const label = toLocalizedString(\n Obj.getLabel(data) ?? (typename ? ['object-name.placeholder', { ns: typename, defaultValue: 'New item' }] : ''),\n t,\n );\n const iconAnnotation = Obj.getIcon(data);\n const icon = iconAnnotation?.icon ?? 'ph--circle-dashed--regular';\n const iconStyles = iconAnnotation?.hue ? getStyles(iconAnnotation.hue) : undefined;\n\n const handleClick = useCallback(() => {\n void invokePromise(LayoutOperation.Open, { subject: [GraphPath.getObjectPathFromObject(data)] });\n }, [invokePromise, data]);\n\n return (\n <Card.Root role='button' fullWidth classNames='cursor-pointer' onClick={handleClick}>\n <Card.Header>\n <Card.Block>\n <Icon icon={icon} classNames={iconStyles?.text} />\n </Card.Block>\n <Card.Title>{label}</Card.Title>\n </Card.Header>\n </Card.Root>\n );\n};\n\nRecentObjectTile.displayName = 'RecentObjectTile';\n\nSpaceHomeRecent.displayName = 'SpaceHomeRecent';\n"],"mappings":";;;;;;;;;;;;;;;AAqBA,IAAM,eAAe;;;;;;;AAarB,IAAa,mBAAmB,EAAE,OAAO,cAAgC;CACvE,MAAM,EAAE,MAAM,eAAe,KAAK,QAAQ,GAAG;CAE7C,MAAM,UAAU,gBAAgB,gBAAgB,MAAM;CACtD,MAAM,SAAS,cAAc;EAC3B,MAAM,qBAAqB,KAAK,YAAY,WAAW,UAAU;EACjE,MAAM,QAAQ,QACX,KAAK,CAAA,CACL,OAAO,KAAK,MAAM,CAAA,CAClB,QAAQ,SAAS,kBAAkB,KAAK,UAAU,IAAI,CAAC,CAAC,EAAE,SAAS,KAAW,QAAQ,CAAA,CACtF,QAAQ,SAAS,CAAC,iBAAiB,IAAI,KAAK,UAAU,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,gBAAgB,KAAK,CAAC,CAAC,CAAA,CAChG,QAAQ,SAAS,KAAK,YAAY,IAAI,MAAM,kBAAkB;EACjE,OAAO,MAAM,SAAS,IAAI,OAAO,GAAG,GAAG,MAAM,KAAK,SAAS,OAAO,KAAK,IAAI,CAAC,CAAC,IAAI,KAAA;CACnF,GAAG,CAAC,OAAO,CAAC;CAEZ,MAAM,QAAQ,cAEV,MAAM,OAAO,UAAU,OAAO,WAAW,CAAC,CAAA,CACvC,QAAQ,MAAM,QAAQ,MAAM,CAAC,CAAA,CAC7B,MAAM,YAAY,GACvB,CAAC,MAAM,CACT;CAEA,MAAM,SAAS,SAAS,UAAU,QAAQ,MAAM,KAAK,KAAA,GAAW,KAAK;CACrE,IAAI,OAAO,WAAW,GACpB,OAAO;CAGT,OACE,qBAAC,YAAY,MAAb,EAAA,UAAA,CACE,oBAAC,YAAY,QAAb;EAAoB,OAAO,EAAE,2BAA2B;EAAY;CAAU,CAAA,GAC9E,oBAAC,QAAQ,MAAT;EAAc,MAAM;YAClB,oBAAC,QAAQ,SAAT;GAAiB,SAAS;GAAO,YAAY;aAC3C,oBAAC,QAAQ,UAAT;IAAkB,OAAO;IAAQ,QAAQ,WAAW,OAAO;GAAK,CAAA;EACjD,CAAA;CACL,CAAA,CACE,EAAA,CAAA;AAEtB;AAEA,IAAM,oBAAoB,EAAE,WAAiD;CAC3E,MAAM,EAAE,kBAAkB,oBAAoB;CAC9C,MAAM,EAAE,MAAM,eAAe,KAAK,QAAQ,GAAG;CAC7C,MAAM,WAAW,IAAI,YAAY,IAAI;CACrC,MAAM,QAAQ,kBACZ,IAAI,SAAS,IAAI,MAAM,WAAW,CAAC,2BAA2B;EAAE,IAAI;EAAU,cAAc;CAAW,CAAC,IAAI,KAC5G,CACF;CACA,MAAM,iBAAiB,IAAI,QAAQ,IAAI;CACvC,MAAM,OAAO,gBAAgB,QAAQ;CACrC,MAAM,aAAa,gBAAgB,MAAM,UAAU,eAAe,GAAG,IAAI,KAAA;CAEzE,MAAM,cAAc,kBAAkB;EACpC,cAAmB,gBAAgB,MAAM,EAAE,SAAS,CAAC,UAAU,wBAAwB,IAAI,CAAC,EAAE,CAAC;CACjG,GAAG,CAAC,eAAe,IAAI,CAAC;CAExB,OACE,oBAAC,KAAK,MAAN;EAAW,MAAK;EAAS,WAAA;EAAU,YAAW;EAAiB,SAAS;YACtE,qBAAC,KAAK,QAAN,EAAA,UAAA,CACE,oBAAC,KAAK,OAAN,EAAA,UACE,oBAAC,MAAD;GAAY;GAAM,YAAY,YAAY;EAAO,CAAA,EACvC,CAAA,GACZ,oBAAC,KAAK,OAAN,EAAA,UAAa,MAAkB,CAAA,CACpB,EAAA,CAAA;CACJ,CAAA;AAEf;AAEA,iBAAiB,cAAc;AAE/B,gBAAgB,cAAc"}
@@ -0,0 +1,97 @@
1
+ import { ActivationEvent, ActivationEvents, Capability, Plugin } from "@dxos/app-framework";
2
+ import { meta } from "#meta";
3
+ import { AppActivationEvents, AppPlugin } from "@dxos/app-toolkit";
4
+ import { Tag } from "@dxos/echo";
5
+ import { AttentionEvents } from "@dxos/plugin-attention";
6
+ import { ClientEvents } from "@dxos/plugin-client";
7
+ import { translations } from "@dxos/react-ui-components/translations";
8
+ import { translations as translations$1 } from "@dxos/react-ui-form/translations";
9
+ import { DataTypes } from "@dxos/schema";
10
+ import { translations as translations$2 } from "@dxos/shell/react";
11
+ import { AnchoredTo, Employer, Event, HasConnection, HasRelationship, HasSubject, Organization, Person, Pipeline, Task, TaskSet } from "@dxos/types";
12
+ import { AppGraphBuilder, CreateObject, IdentityCreated, NavigationHandler, NavigationTargetResolver, OperationHandler, ReactRoot, ReactSurface, Repair, SpaceSettings, SpaceState, SpacesReady, UndoMappings } from "#capabilities";
13
+ import { translations as translations$3 } from "#translations";
14
+ import { SpaceEvents } from "#types";
15
+ //#region PLUGIN.mdl?raw
16
+ var PLUGIN_default = "---\nid: org.dxos.plugin.space\nname: SpacePlugin\nversion: 0.1.0\n---\n\nCore workspace container plugin for `DXOS` Composer — creates, manages, and shares collaborative spaces with full membership control, object lifecycle management, schema registration, and navigation.\n\n## Extensions\n\nThe following extension dialects are used in this document.\nEach extension is defined in the Appendix or resolved via its URI.\n\n| Term | URI |\n|-------------|--------------------------------|\n| `type` | `org.dxos.mdl.type@1.0` |\n| `feat` | `org.dxos.mdl.feat@1.0` |\n| `test` | `org.dxos.mdl.test@1.0` |\n| `component` | `org.dxos.mdl.component@1.0` |\n| `op` | `org.dxos.mdl.op@1.0` |\n\n## Types\n\n```mdl\ntype SpaceForm\n fields:\n name?: string # display name for the space\n icon?: string # phosphor icon identifier\n hue?: string # colour token\n edgeReplication?: boolean # enable EDGE-based replication\n```\n\n```mdl\ntype SpacePluginOptions\n fields:\n shareableLinkOrigin?: string # base URL used for invitation and object copy-links\n invitationPath?: string # path appended to origin; default '/'\n invitationProp?: string # query param name for the invitation code\n observability?: boolean # emit observability events\n```\n\n```mdl\ntype ObjectViewerProps\n fields:\n lastSeen: number # unix timestamp of last observation\n currentlyAttended: boolean # true if the peer is currently viewing this object\n```\n\n```mdl\ntype PluginState\n fields:\n viewersByObject: Record<ObjectId, Map<PublicKey, ObjectViewerProps>>\n viewersByIdentity: Map<PublicKey, Set<ObjectId>>\n awaiting: string | undefined # DXN of an object being waited on\n spaceNames: Record<string, string> # cached names for closed/loading spaces\n sdkMigrationRunning: Record<string, boolean>\n navigableCollections: boolean\n enabledEdgeReplication: boolean\n```\n\n## Components\n\n```mdl\ncomponent CollectionArticle\n desc: Main article view for a Collection — renders its child objects as an ordered list, supports drag-reorder and per-item actions.\n props:\n subject: Collection\n state:\n selected?: Obj.Unknown\n actions:\n addObject(object: Obj.Unknown)\n removeObject(object: Obj.Unknown)\n reorder(from: number, to: number)\n layout: |\n ┌─────────────────────────┐\n │ [toolbar] │\n ├─────────────────────────┤\n │ object row │\n │ object row │\n │ object row … │\n └─────────────────────────┘\n```\n\n```mdl\ncomponent CollectionSection\n desc: Compact list of objects belonging to a collection, used inside sidebars and companion panels.\n props:\n collection: Collection\n state:\n expanded: boolean\n actions:\n toggleExpand()\n```\n\n```mdl\ncomponent RecordArticle\n desc: Schema-driven form/detail view for a single ECHO object rendered in an article slot.\n props:\n subject: Obj.Unknown\n actions:\n save()\n discard()\n```\n\n```mdl\ncomponent RelatedArticle\n desc: Companion panel listing objects semantically related to the current subject via ECHO relations.\n props:\n subject: Obj.Unknown\n state:\n relations: Obj.Unknown[]\n```\n\n```mdl\ncomponent CreateObjectDialog\n desc: Modal dialog that lets the user pick a schema type and fill initial fields to create a new ECHO object.\n props:\n target: Database | Collection\n views?: boolean\n typename?: string\n initialFormValues?: Record<string, any>\n navigable?: boolean\n actions:\n confirm(data: Record<string, any>)\n cancel()\n```\n\n```mdl\ncomponent CreateSpaceDialog\n desc: Modal dialog for creating a new space with name, icon, colour, and replication options.\n actions:\n confirm(form: SpaceForm)\n cancel()\n```\n\n```mdl\ncomponent ImportSpaceDialog\n desc: Dialog that accepts a space archive file and imports it as a new space.\n actions:\n confirm(archive: { filename: string; contents: Uint8Array })\n cancel()\n```\n\n```mdl\ncomponent JoinDialog\n desc: Dialog that accepts an invitation code and joins the corresponding space.\n props:\n invitationCode?: string\n actions:\n join(code: string)\n cancel()\n```\n\n```mdl\ncomponent MembersContainer\n desc: Panel showing all members of a space with their presence status and role; allows managing invitations.\n props:\n space: Space\n```\n\n```mdl\ncomponent SpaceSettingsContainer\n desc: Settings panel for a single space — name, icon, colour, replication toggle, and member management.\n props:\n space: Space\n```\n\n```mdl\ncomponent SchemaContainer\n desc: Browsable table of all registered ECHO schemas in the current space; allows adding new schemas.\n props:\n db: Database\n```\n\n```mdl\ncomponent ViewEditor\n desc: Interactive editor for a View — reorder, add, and remove fields; configure field display settings.\n props:\n view: View\n```\n\n```mdl\ncomponent SpacePresence\n desc: Avatar cluster indicating which peers are currently attending the active object/space.\n props:\n space: Space\n```\n\n```mdl\ncomponent SyncStatus\n desc: Icon/indicator reflecting the CRDT sync health of the active space.\n props:\n space: Space\n```\n\n## Operations\n\n```mdl\nop SpaceOperation.Create\n desc: Creates a new space with the given display properties.\n input:\n name?: string\n icon?: string\n hue?: string\n edgeReplication?: boolean\n output: { id: string; subject: string[]; space: Space }\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.Join\n desc: Joins an existing space by resolving and accepting an invitation code.\n input:\n invitationCode?: string\n output: void\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.Open\n desc: Navigates the layout to the given space.\n input:\n space: Space\n output: void\n effects: [layout:navigate]\n```\n\n```mdl\nop SpaceOperation.Close\n desc: Removes the space from the active navigation context.\n input:\n space: Space\n output: void\n effects: [layout:navigate]\n```\n\n```mdl\nop SpaceOperation.Share\n desc: Creates an invitation observable for sharing a space; supports single-use and multi-use codes.\n input:\n space: Space\n type: Invitation.Type\n authMethod: Invitation.AuthMethod\n multiUse: boolean\n target?: string\n output: CancellableInvitationObservable\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.Rename\n desc: Opens a rename popover for the given space.\n input:\n space: Space\n caller?: string\n output: void\n effects: [layout:dialog]\n```\n\n```mdl\nop SpaceOperation.AddObject\n desc: Adds an existing ECHO object to a database or collection and optionally navigates to it.\n input:\n object: Obj.Unknown\n target: Database | Collection\n hidden?: boolean\n targetNodeId?: string\n output: { id: string; subject: string[]; object: Obj.Unknown }\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.RemoveObjects\n desc: Removes one or more objects from a collection; returns undo data.\n input:\n objects: Obj.Unknown[]\n target?: Collection\n output: { objects: Obj.Unknown[]; parentCollection: Collection; indices: number[]; wasActive: string[] }\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.RestoreObjects\n desc: Restores previously removed objects to their collection (inverse of RemoveObjects).\n input:\n objects: Obj.Unknown[]\n parentCollection: Collection\n indices: number[]\n wasActive: string[]\n output: void\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.AddSchema\n desc: Registers a new schema type in the space database; optionally makes it visible in the type picker.\n input:\n db: Database\n name?: string\n typename?: string\n version?: string\n schema: Schema.AnyNoContext\n show?: boolean\n output: { id: string; object: Type.PersistentType; schema: Type.RuntimeType }\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.AddRelation\n desc: Creates a typed relation between two ECHO objects.\n input:\n db: Database\n schema: Schema.AnyNoContext\n source: Obj.Unknown\n target: Obj.Unknown\n fields?: Record<string, any>\n output: { relation: any }\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.DeleteField\n desc: Removes a field from a View; returns undo data.\n input:\n view: View\n fieldId: string\n output: { field: View.FieldSchema; props: any; index: number }\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.RestoreField\n desc: Restores a deleted field to a View at its original index (inverse of DeleteField).\n input:\n view: View\n field: View.FieldSchema\n props: any\n index: number\n output: void\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.ImportSpace\n desc: Imports a binary space archive as a brand-new space.\n input:\n archive: { filename: string; contents: Uint8Array }\n tags?: string[]\n output: { space: Space }\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.ExportSpace\n desc: Serialises a space to an archive and triggers a browser download.\n input:\n space: Space\n format: SpaceArchive.Format\n output: void\n effects: [fs:write]\n```\n\n```mdl\nop SpaceOperation.Snapshot\n desc: Captures a point-in-time snapshot of a database or filtered query as a Blob.\n input:\n db: Database\n query?: QueryAST.Query\n output: { snapshot: Blob }\n effects: [echo:read]\n```\n\n```mdl\nop SpaceOperation.Migrate\n desc: Runs registered migrations against a space to bring it to the current schema version.\n input:\n space: Space\n version?: string\n output: boolean # true if any migration ran\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.Reset\n desc: |\n Permanently deletes all objects and truncates feeds in a space via a new epoch.\n This operation is unrecoverable.\n input:\n space: Space\n output: void\n effects: [echo:write]\n```\n\n```mdl\nop SpaceOperation.GetShareLink\n desc: Constructs a shareable URL for a space or specific object; optionally copies it to the clipboard.\n input:\n space: Space\n target?: string\n copyToClipboard?: boolean\n output: string # fully-qualified URL\n effects: [clipboard]\n```\n\n```mdl\nop CollectionOperation.Create\n desc: Creates a new Collection object in the active space.\n input:\n name?: string\n output: { object: Collection }\n effects: [echo:write]\n```\n\n## Features\n\n```mdl\nfeat F-1: Space Lifecycle\n\n req F-1.1: User can create a new space via op:SpaceOperation.Create; the space appears in the navigation graph.\n req F-1.2: User can join a space via op:SpaceOperation.Join with an invitation code.\n req F-1.3: User can close/open spaces; closed spaces remain listed with their cached name.\n req F-1.4:\n when: user triggers op:SpaceOperation.Reset\n then: all objects are deleted and a new epoch is created; the operation is unrecoverable\n```\n\n```mdl\nfeat F-2: Membership and Sharing\n\n req F-2.1:\n when: user triggers op:SpaceOperation.Share\n then: an invitation observable is created; the invitation URL uses the configured shareableLinkOrigin\n\n req F-2.2: MembersContainer shows all current members with their presence status.\n req F-2.3: User can generate single-use or multi-use invitation links.\n req F-2.4: User can get a direct shareable link to a space or object via op:SpaceOperation.GetShareLink.\n```\n\n```mdl\nfeat F-3: Object Lifecycle\n\n req F-3.1:\n when: user opens the create-object dialog\n then: all registered schema types are shown for selection\n\n req F-3.2: op:SpaceOperation.AddObject adds an object to a collection and fires navigation if navigable.\n req F-3.3: op:SpaceOperation.RemoveObjects records undo data; op:SpaceOperation.RestoreObjects reverts the removal.\n req F-3.4: op:SpaceOperation.DuplicateObject creates a shallow copy of an object in the same target.\n```\n\n```mdl\nfeat F-4: Schema Registry\n\n req F-4.1:\n when: a plugin registers a schema via AppPlugin.addSchemaModule\n then: the type is available globally across all spaces\n\n req F-4.2:\n when: user triggers op:SpaceOperation.AddSchema\n then: a StoredSchema entry is persisted in the space database\n\n req F-4.3: SchemaContainer lists all schemas in the active space; user can add a new user-defined schema.\n```\n\n```mdl\nfeat F-5: Collections\n\n req F-5.1: A Collection is an ordered list of references to ECHO objects.\n req F-5.2: CollectionArticle renders collection contents with drag-to-reorder support.\n req F-5.3: op:CollectionOperation.Create creates an empty Collection in the active space.\n req F-5.4: An object's collection ancestry is its canonical location: `resolveCollectionObjectPath`\n walks the space's collection tree to the root collection and yields\n `content/collections/<ancestors…>/<objectId>`. Both URL resolution (the `object` url key)\n and the plugin's NavigationTargetResolver answer with it, so a link to an object lands\n where the nav tree shows it.\n req F-5.5: The plugin's NavigationTargetResolver offers the collection path first, then the type-section\n path for types whose graph extension declares a static section (derived from the builder's\n url bindings — see `type-section-path.ts` — so no per-plugin wiring), and the database path\n (`system/database/<type>/<objectId>`) last, declared via `position: Position.last` — every\n object has the latter, but it names a hidden node, so it is only used for objects the tree\n shows nowhere else.\n```\n\n```mdl\nfeat F-6: Persistence and Migrations\n\n req F-6.1:\n when: client emits SetupMigration\n then: all registered migrations run against every space\n\n req F-6.2:\n when: user triggers op:SpaceOperation.Migrate\n then: the space is migrated to the specified (or latest) version; returns true if work was done\n\n req F-6.3: op:SpaceOperation.ExportSpace serialises a space as a binary archive for backup.\n req F-6.4: op:SpaceOperation.ImportSpace restores an archive as a new space with optional tags.\n```\n\n```mdl\nfeat F-7: View and Field Editing\n\n req F-7.1: op:SpaceOperation.DeleteField removes a field from a View and returns full undo state.\n req F-7.2: op:SpaceOperation.RestoreField reinstates a deleted field at its original position.\n req F-7.3: ViewEditor provides an interactive UI for reordering and configuring View fields.\n```\n\n```mdl\nfeat F-8: Presence and Sync Status\n\n req F-8.1: SpacePresence tracks which peers are viewing which objects via the attention system.\n req F-8.2: SyncStatus reflects CRDT sync health; unsynchronised changes are indicated visually.\n req F-8.3:\n when: a peer starts or stops attending an object\n then: viewersByObject and viewersByIdentity maps are updated in ephemeral plugin state\n```\n\n## Acceptance\n\n```mdl\ntest T-1: Create and open a space\n given: no spaces exist\n when: op:SpaceOperation.Create runs with name \"Acme\"\n then:\n - new Space object is returned with the given name\n - space appears in the navigation graph\n```\n\n```mdl\ntest T-2: Join space via invitation\n given: an invitation URL has been generated for an existing space\n when: op:SpaceOperation.Join runs with the invitation code\n then:\n - space appears in the local client's space list\n - space state transitions to SPACE_READY\n```\n\n```mdl\ntest T-3: Add and remove object with undo\n given: a Collection in an active space\n when: op:SpaceOperation.AddObject adds object X, then op:SpaceOperation.RemoveObjects removes it\n then:\n - RemoveObjects output records the original index and collection\n - op:SpaceOperation.RestoreObjects puts X back at the same index\n```\n\n```mdl\ntest T-4: Export and import space\n given: a space containing 5 objects\n when: op:SpaceOperation.ExportSpace runs, then op:SpaceOperation.ImportSpace loads the archive\n then:\n - the new space contains the same 5 objects\n - the original space is unchanged\n```\n\n```mdl\ntest T-5: Schema registration\n given: an active space with no custom schemas\n when: op:SpaceOperation.AddSchema runs with a new schema definition\n then:\n - a StoredSchema entry exists in the space database\n - the schema is available in the create-object dialog type picker\n```\n\n```mdl\ntest T-6: View field delete and restore\n given: a View with fields [\"name\", \"email\", \"phone\"]\n when: op:SpaceOperation.DeleteField removes \"email\", then op:SpaceOperation.RestoreField restores it\n then:\n - after delete, View has fields [\"name\", \"phone\"]\n - after restore, View has fields [\"name\", \"email\", \"phone\"] in original order\n```\n\n---\n\n## Appendix: Extension Definitions\n\n```mdl\next type\n uri: org.dxos.mdl.type@1.0\n desc: A named data structure with typed fields and optional literals.\n fields:\n desc?: Prose\n fields?: FieldMap\n literals?: UnionList\n extends?: TypeRef[]\n```\n\n```mdl\next feat\n uri: org.dxos.mdl.feat@1.0\n desc: A named feature grouping one or more requirements.\n fields:\n desc?: Prose\n req: RequirementList\n nesting: self\n```\n\n```mdl\next test\n uri: org.dxos.mdl.test@1.0\n desc: An acceptance scenario expressed as given / when / then steps.\n fields:\n given?: Step | Step[]\n when?: Step | Step[]\n then: Step | Step[]\n tags?: TagList\n```\n\n```mdl\next component\n uri: org.dxos.mdl.component@1.0\n desc: A UI component with props, internal state, slots, actions, and events.\n fields:\n desc?: Prose\n props?: FieldMap\n state?: FieldMap\n slots?: FieldMap\n actions?: ActionMap\n emits?: EventMap\n layout?: CodeBlock\n```\n\n```mdl\next op\n uri: org.dxos.mdl.op@1.0\n desc: |\n A named operation with typed inputs, outputs, and declared errors.\n Pure ops have no effects or requires. Effectful ops declare both.\n fields:\n desc?: Prose\n input?: FieldMap\n output?: TypeExpr\n errors?: ErrorMap\n effects?: EffectList\n requires?: ServiceList\n note?: Prose\n```\n";
17
+ //#endregion
18
+ //#region src/SpacePlugin.ts
19
+ var SpacePlugin = Plugin.define(meta).pipe(AppPlugin.addCreateObjectModule({ activate: CreateObject }), AppPlugin.addNavigationHandlerModule(({ invitationProp, invitationUrlHandler }) => ({ activate: () => NavigationHandler({
20
+ invitationProp,
21
+ invitationUrlHandler
22
+ }) })), AppPlugin.addOperationHandlerModule({ activate: OperationHandler }), AppPlugin.addReactRootModule({ activate: ReactRoot }), AppPlugin.addSchemaModule({ schema: [
23
+ ...DataTypes,
24
+ AnchoredTo.AnchoredTo,
25
+ Employer.Employer,
26
+ Event.Event,
27
+ HasConnection.HasConnection,
28
+ HasRelationship.HasRelationship,
29
+ HasSubject.HasSubject,
30
+ Organization.Organization,
31
+ Person.Person,
32
+ Pipeline.Pipeline,
33
+ Tag.Tag,
34
+ Task.Task,
35
+ TaskSet.TaskSet
36
+ ] }), AppPlugin.addSettingsModule({ activate: SpaceSettings }), AppPlugin.addTranslationsModule({ translations: [
37
+ ...translations$3,
38
+ ...translations,
39
+ ...translations$1,
40
+ ...translations$2
41
+ ] }), Plugin.addModule({
42
+ activatesOn: ClientEvents.ClientReady,
43
+ activate: NavigationTargetResolver
44
+ }), Plugin.addModule({
45
+ activatesOn: ActivationEvent.oneOf(AppActivationEvents.SetupSettings, AppActivationEvents.SetupAppGraph),
46
+ firesAfterActivation: [SpaceEvents.StateReady],
47
+ activate: SpaceState
48
+ }), Plugin.addModule(({ shareableLinkOrigin = typeof window !== "undefined" ? window.location.origin : "http://localhost", invitationPath = "/", invitationProp = "spaceInvitationCode" }) => {
49
+ const createInvitationUrl = (invitationCode) => {
50
+ const baseUrl = new URL(invitationPath || "/", shareableLinkOrigin);
51
+ baseUrl.searchParams.set(invitationProp, invitationCode);
52
+ return baseUrl.toString();
53
+ };
54
+ return {
55
+ id: Capability.getModuleTag(ReactSurface),
56
+ activatesOn: ActivationEvents.SetupReactSurface,
57
+ firesBeforeActivation: [SpaceEvents.SetupSettingsPanel],
58
+ activate: () => ReactSurface({ createInvitationUrl })
59
+ };
60
+ }), Plugin.addModule(({ shareableLinkOrigin = typeof window !== "undefined" ? window.location.origin : "http://localhost" }) => ({
61
+ id: Capability.getModuleTag(AppGraphBuilder),
62
+ activatesOn: ActivationEvent.allOf(AppActivationEvents.SetupSettings, AppActivationEvents.SetupAppGraph),
63
+ activate: () => AppGraphBuilder({ shareableLinkOrigin })
64
+ })), Plugin.addModule(({ shareableLinkOrigin = typeof window !== "undefined" ? window.location.origin : "http://localhost", invitationPath = "/", invitationProp = "spaceInvitationCode", observability = false }) => {
65
+ const createInvitationUrl = (invitationCode) => {
66
+ const baseUrl = new URL(invitationPath || "/", shareableLinkOrigin);
67
+ baseUrl.searchParams.set(invitationProp, invitationCode);
68
+ return baseUrl.toString();
69
+ };
70
+ return {
71
+ id: Capability.getModuleTag(UndoMappings),
72
+ activatesOn: ActivationEvents.SetupProcessManager,
73
+ activate: () => UndoMappings({
74
+ createInvitationUrl,
75
+ observability
76
+ })
77
+ };
78
+ }), Plugin.addModule({
79
+ activatesOn: ClientEvents.IdentityCreated,
80
+ firesAfterActivation: [SpaceEvents.PersonalSpaceReady],
81
+ activate: IdentityCreated
82
+ }), Plugin.addModule({
83
+ activatesOn: ActivationEvent.allOf(ActivationEvents.ProcessManagerReady, AppActivationEvents.LayoutReady, AppActivationEvents.AppGraphReady, AttentionEvents.AttentionReady, SpaceEvents.StateReady, ClientEvents.SpacesReady),
84
+ activate: SpacesReady
85
+ }), Plugin.addModule({
86
+ activatesOn: ClientEvents.SpacesReady,
87
+ activate: Repair
88
+ }), AppPlugin.addPluginAssetModule({ asset: {
89
+ pluginId: meta.profile.key,
90
+ path: "PLUGIN.mdl",
91
+ content: PLUGIN_default,
92
+ mimeType: "application/x-mdl"
93
+ } }), Plugin.make);
94
+ //#endregion
95
+ export { SpacePlugin as t };
96
+
97
+ //# sourceMappingURL=chunk-SpacePlugin.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-SpacePlugin.mjs","names":[],"sources":["../../src/SpacePlugin.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport { ActivationEvent, ActivationEvents, Capability, Plugin } from '@dxos/app-framework';\nimport { AppActivationEvents, AppPlugin } from '@dxos/app-toolkit';\nimport { Tag } from '@dxos/echo';\nimport { AttentionEvents } from '@dxos/plugin-attention';\nimport { ClientEvents } from '@dxos/plugin-client';\nimport { translations as componentsTranslations } from '@dxos/react-ui-components/translations';\nimport { translations as formTranslations } from '@dxos/react-ui-form/translations';\nimport { DataTypes } from '@dxos/schema';\nimport { translations as shellTranslations } from '@dxos/shell/react';\nimport {\n AnchoredTo,\n Employer,\n Event,\n HasConnection,\n HasRelationship,\n HasSubject,\n Organization,\n Person,\n Pipeline,\n Task,\n TaskSet,\n} from '@dxos/types';\n\nimport {\n AppGraphBuilder,\n CreateObject,\n IdentityCreated,\n NavigationHandler,\n NavigationTargetResolver,\n OperationHandler,\n ReactRoot,\n ReactSurface,\n Repair,\n SpaceSettings,\n SpacesReady,\n SpaceState,\n UndoMappings,\n} from '#capabilities';\nimport { meta } from '#meta';\nimport { translations } from '#translations';\nimport { SpaceEvents } from '#types';\nimport { type SpacePluginOptions } from '#types';\n\n// eslint-disable-next-line import/no-relative-packages\nimport pluginSpec from '../PLUGIN.mdl?raw';\n\nexport const SpacePlugin = Plugin.define<SpacePluginOptions>(meta).pipe(\n AppPlugin.addCreateObjectModule({ activate: CreateObject }),\n AppPlugin.addNavigationHandlerModule(({ invitationProp, invitationUrlHandler }) => ({\n activate: () => NavigationHandler({ invitationProp, invitationUrlHandler }),\n })),\n AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),\n AppPlugin.addReactRootModule({ activate: ReactRoot }),\n AppPlugin.addSchemaModule({\n schema: [\n ...DataTypes,\n AnchoredTo.AnchoredTo,\n Employer.Employer,\n Event.Event,\n HasConnection.HasConnection,\n HasRelationship.HasRelationship,\n HasSubject.HasSubject,\n Organization.Organization,\n Person.Person,\n Pipeline.Pipeline,\n Tag.Tag,\n Task.Task,\n TaskSet.TaskSet,\n ],\n }),\n AppPlugin.addSettingsModule({ activate: SpaceSettings }),\n AppPlugin.addTranslationsModule({\n translations: [...translations, ...componentsTranslations, ...formTranslations, ...shellTranslations],\n }),\n Plugin.addModule({ activatesOn: ClientEvents.ClientReady, activate: NavigationTargetResolver }),\n Plugin.addModule({\n // TODO(wittjosiah): Does not integrate with settings store.\n // Should this be a different event?\n // Should settings store be renamed to be more generic?\n activatesOn: ActivationEvent.oneOf(AppActivationEvents.SetupSettings, AppActivationEvents.SetupAppGraph),\n firesAfterActivation: [SpaceEvents.StateReady],\n activate: SpaceState,\n }),\n Plugin.addModule(\n ({\n shareableLinkOrigin = typeof window !== 'undefined' ? window.location.origin : 'http://localhost',\n invitationPath = '/',\n invitationProp = 'spaceInvitationCode',\n }) => {\n const createInvitationUrl = (invitationCode: string) => {\n const baseUrl = new URL(invitationPath || '/', shareableLinkOrigin);\n baseUrl.searchParams.set(invitationProp, invitationCode);\n return baseUrl.toString();\n };\n\n return {\n id: Capability.getModuleTag(ReactSurface),\n activatesOn: ActivationEvents.SetupReactSurface,\n // TODO(wittjosiah): Should occur before the settings dialog is loaded when surfaces activation is more granular.\n firesBeforeActivation: [SpaceEvents.SetupSettingsPanel],\n activate: () => ReactSurface({ createInvitationUrl }),\n };\n },\n ),\n Plugin.addModule(\n ({ shareableLinkOrigin = typeof window !== 'undefined' ? window.location.origin : 'http://localhost' }) => ({\n id: Capability.getModuleTag(AppGraphBuilder),\n activatesOn: ActivationEvent.allOf(AppActivationEvents.SetupSettings, AppActivationEvents.SetupAppGraph),\n activate: () => AppGraphBuilder({ shareableLinkOrigin }),\n }),\n ),\n Plugin.addModule(\n ({\n shareableLinkOrigin = typeof window !== 'undefined' ? window.location.origin : 'http://localhost',\n invitationPath = '/',\n invitationProp = 'spaceInvitationCode',\n observability = false,\n }) => {\n const createInvitationUrl = (invitationCode: string) => {\n const baseUrl = new URL(invitationPath || '/', shareableLinkOrigin);\n baseUrl.searchParams.set(invitationProp, invitationCode);\n return baseUrl.toString();\n };\n\n return {\n id: Capability.getModuleTag(UndoMappings),\n activatesOn: ActivationEvents.SetupProcessManager,\n activate: () => UndoMappings({ createInvitationUrl, observability }),\n };\n },\n ),\n Plugin.addModule({\n activatesOn: ClientEvents.IdentityCreated,\n firesAfterActivation: [SpaceEvents.PersonalSpaceReady],\n activate: IdentityCreated,\n }),\n Plugin.addModule({\n activatesOn: ActivationEvent.allOf(\n ActivationEvents.ProcessManagerReady,\n AppActivationEvents.LayoutReady,\n AppActivationEvents.AppGraphReady,\n AttentionEvents.AttentionReady,\n SpaceEvents.StateReady,\n ClientEvents.SpacesReady,\n ),\n activate: SpacesReady,\n }),\n Plugin.addModule({\n activatesOn: ClientEvents.SpacesReady,\n activate: Repair,\n }),\n AppPlugin.addPluginAssetModule({\n asset: { pluginId: meta.profile.key, path: 'PLUGIN.mdl', content: pluginSpec, mimeType: 'application/x-mdl' },\n }),\n Plugin.make,\n);\n\nexport default SpacePlugin;\n"],"mappings":";;;;;;;;;;;;;;;;;;AAkDA,IAAa,cAAc,OAAO,OAA2B,IAAI,CAAC,CAAC,KACjE,UAAU,sBAAsB,EAAE,UAAU,aAAa,CAAC,GAC1D,UAAU,4BAA4B,EAAE,gBAAgB,4BAA4B,EAClF,gBAAgB,kBAAkB;CAAE;CAAgB;AAAqB,CAAC,EAC5E,EAAE,GACF,UAAU,0BAA0B,EAAE,UAAU,iBAAiB,CAAC,GAClE,UAAU,mBAAmB,EAAE,UAAU,UAAU,CAAC,GACpD,UAAU,gBAAgB,EACxB,QAAQ;CACN,GAAG;CACH,WAAW;CACX,SAAS;CACT,MAAM;CACN,cAAc;CACd,gBAAgB;CAChB,WAAW;CACX,aAAa;CACb,OAAO;CACP,SAAS;CACT,IAAI;CACJ,KAAK;CACL,QAAQ;AACV,EACF,CAAC,GACD,UAAU,kBAAkB,EAAE,UAAU,cAAc,CAAC,GACvD,UAAU,sBAAsB,EAC9B,cAAc;CAAC,GAAG;CAAc,GAAG;CAAwB,GAAG;CAAkB,GAAG;AAAiB,EACtG,CAAC,GACD,OAAO,UAAU;CAAE,aAAa,aAAa;CAAa,UAAU;AAAyB,CAAC,GAC9F,OAAO,UAAU;CAIf,aAAa,gBAAgB,MAAM,oBAAoB,eAAe,oBAAoB,aAAa;CACvG,sBAAsB,CAAC,YAAY,UAAU;CAC7C,UAAU;AACZ,CAAC,GACD,OAAO,WACJ,EACC,sBAAsB,OAAO,WAAW,cAAc,OAAO,SAAS,SAAS,oBAC/E,iBAAiB,KACjB,iBAAiB,4BACb;CACJ,MAAM,uBAAuB,mBAA2B;EACtD,MAAM,UAAU,IAAI,IAAI,kBAAkB,KAAK,mBAAmB;EAClE,QAAQ,aAAa,IAAI,gBAAgB,cAAc;EACvD,OAAO,QAAQ,SAAS;CAC1B;CAEA,OAAO;EACL,IAAI,WAAW,aAAa,YAAY;EACxC,aAAa,iBAAiB;EAE9B,uBAAuB,CAAC,YAAY,kBAAkB;EACtD,gBAAgB,aAAa,EAAE,oBAAoB,CAAC;CACtD;AACF,CACF,GACA,OAAO,WACJ,EAAE,sBAAsB,OAAO,WAAW,cAAc,OAAO,SAAS,SAAS,0BAA0B;CAC1G,IAAI,WAAW,aAAa,eAAe;CAC3C,aAAa,gBAAgB,MAAM,oBAAoB,eAAe,oBAAoB,aAAa;CACvG,gBAAgB,gBAAgB,EAAE,oBAAoB,CAAC;AACzD,EACF,GACA,OAAO,WACJ,EACC,sBAAsB,OAAO,WAAW,cAAc,OAAO,SAAS,SAAS,oBAC/E,iBAAiB,KACjB,iBAAiB,uBACjB,gBAAgB,YACZ;CACJ,MAAM,uBAAuB,mBAA2B;EACtD,MAAM,UAAU,IAAI,IAAI,kBAAkB,KAAK,mBAAmB;EAClE,QAAQ,aAAa,IAAI,gBAAgB,cAAc;EACvD,OAAO,QAAQ,SAAS;CAC1B;CAEA,OAAO;EACL,IAAI,WAAW,aAAa,YAAY;EACxC,aAAa,iBAAiB;EAC9B,gBAAgB,aAAa;GAAE;GAAqB;EAAc,CAAC;CACrE;AACF,CACF,GACA,OAAO,UAAU;CACf,aAAa,aAAa;CAC1B,sBAAsB,CAAC,YAAY,kBAAkB;CACrD,UAAU;AACZ,CAAC,GACD,OAAO,UAAU;CACf,aAAa,gBAAgB,MAC3B,iBAAiB,qBACjB,oBAAoB,aACpB,oBAAoB,eACpB,gBAAgB,gBAChB,YAAY,YACZ,aAAa,WACf;CACA,UAAU;AACZ,CAAC,GACD,OAAO,UAAU;CACf,aAAa,aAAa;CAC1B,UAAU;AACZ,CAAC,GACD,UAAU,qBAAqB,EAC7B,OAAO;CAAE,UAAU,KAAK,QAAQ;CAAK,MAAM;CAAc,SAAS;CAAY,UAAU;AAAoB,EAC9G,CAAC,GACD,OAAO,IACT"}
@@ -0,0 +1,155 @@
1
+ import { ComplexMap, hexToFallback } from "@dxos/util";
2
+ import { meta } from "#meta";
3
+ import { Obj } from "@dxos/echo";
4
+ import { SpaceCapabilities } from "#types";
5
+ import { PublicKey } from "@dxos/keys";
6
+ import { forwardRef, useCallback, useEffect, useState } from "react";
7
+ import { useAtomCapability } from "@dxos/app-framework/ui";
8
+ import { useSpace } from "@dxos/react-client/echo";
9
+ import { Avatar, Popover, Tooltip, useDefaultValue, useTranslation } from "@dxos/react-ui";
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ import { Listbox } from "@dxos/react-ui-list";
12
+ import { AttentionGlyph, useAttention } from "@dxos/react-ui-attention";
13
+ import { generateName } from "@dxos/display-name";
14
+ import { useIdentity, useMembers as useMembers$1 } from "@dxos/halo-react";
15
+ //#region src/containers/SpacePresence/SpacePresence.tsx
16
+ var REFRESH_INTERVAL = 5e3;
17
+ var ACTIVITY_DURATION = 3e4;
18
+ var noViewers = new ComplexMap(PublicKey.hash);
19
+ var getName = (member) => member.displayName ?? generateName(member.identityKey ?? "0");
20
+ var SpacePresence = ({ object, spaceId }) => {
21
+ const ephemeral = useAtomCapability(SpaceCapabilities.EphemeralState);
22
+ const identity = useIdentity();
23
+ const db = Obj.getDatabase(object);
24
+ const space = useSpace(spaceId ?? db?.spaceId);
25
+ const spaceMembers = useMembers$1(spaceId ?? db?.spaceId);
26
+ const [_moment, setMoment] = useState(Date.now());
27
+ useEffect(() => {
28
+ const interval = setInterval(() => setMoment(Date.now()), REFRESH_INTERVAL);
29
+ return () => clearInterval(interval);
30
+ }, []);
31
+ const memberOnline = useCallback((member) => member.online, []);
32
+ const memberIsNotSelf = useCallback((member) => identity?.identityKey !== member.identityKey, [identity?.identityKey]);
33
+ if (!identity || !ephemeral || !space) return null;
34
+ const currentObjectViewers = ephemeral.viewersByObject[Obj.getURI(object)] ?? noViewers;
35
+ return /* @__PURE__ */ jsx(FullPresence, { members: spaceMembers.filter((member) => memberOnline(member) && memberIsNotSelf(member)).flatMap((member) => {
36
+ const memberKey = member.identityKey ? PublicKey.fromHex(member.identityKey) : void 0;
37
+ const objectView = memberKey ? currentObjectViewers.get(memberKey) : void 0;
38
+ if (!objectView) return [];
39
+ return [{
40
+ ...member,
41
+ currentlyAttended: objectView.currentlyAttended ?? false,
42
+ lastSeen: objectView.lastSeen ?? -Infinity
43
+ }];
44
+ }).toSorted((a, b) => a.lastSeen - b.lastSeen) });
45
+ };
46
+ var FullPresence = (props) => {
47
+ const { size = 9, onMemberClick } = props;
48
+ const members = useDefaultValue(props.members, () => []);
49
+ if (members.length === 0) return null;
50
+ return /* @__PURE__ */ jsxs("div", {
51
+ className: "dx-avatar-group",
52
+ "data-testid": "spacePlugin.presence",
53
+ children: [members.slice(0, 3).map((member, i) => /* @__PURE__ */ jsx(Tooltip.Trigger, {
54
+ side: "bottom",
55
+ content: getName(member),
56
+ className: "grid focus:outline-hidden",
57
+ children: /* @__PURE__ */ jsx(PresenceAvatar, {
58
+ member,
59
+ match: member.currentlyAttended,
60
+ index: members.length - i,
61
+ onClick: () => onMemberClick?.(member),
62
+ size
63
+ })
64
+ }, member.identityKey)), members.length > 3 && /* @__PURE__ */ jsxs(Popover.Root, { children: [/* @__PURE__ */ jsx(Popover.Trigger, {
65
+ className: "grid focus:outline-hidden",
66
+ children: /* @__PURE__ */ jsx(Avatar.Root, { children: /* @__PURE__ */ jsx(Avatar.Content, {
67
+ status: "inactive",
68
+ style: { zIndex: members.length - 4 },
69
+ fallback: `+${members.length - 3}`,
70
+ size
71
+ }) })
72
+ }), /* @__PURE__ */ jsx(Popover.Portal, { children: /* @__PURE__ */ jsxs(Popover.Content, {
73
+ side: "bottom",
74
+ children: [/* @__PURE__ */ jsx(Popover.Arrow, {}), /* @__PURE__ */ jsx(Popover.Viewport, {
75
+ classNames: "max-h-56",
76
+ children: /* @__PURE__ */ jsx(Listbox.Root, { children: /* @__PURE__ */ jsx(Listbox.Content, {
77
+ "aria-label": "members",
78
+ children: members.map((member) => /* @__PURE__ */ jsx(Listbox.Item, {
79
+ id: member.identityKey ?? "",
80
+ classNames: "flex gap-2 items-center cursor-pointer mb-2",
81
+ onClick: () => onMemberClick?.(member),
82
+ "data-testid": "identity-list-item",
83
+ children: /* @__PURE__ */ jsx(PresenceAvatar, {
84
+ member,
85
+ size,
86
+ showName: true,
87
+ match: member.currentlyAttended
88
+ })
89
+ }, member.identityKey))
90
+ }) })
91
+ })]
92
+ }) })] })]
93
+ });
94
+ };
95
+ var PresenceAvatar = forwardRef(({ member, showName, match, index, onClick, size }, forwardedRef) => {
96
+ const status = match ? "current" : "active";
97
+ const fallbackValue = hexToFallback(member.identityKey ?? "0");
98
+ return /* @__PURE__ */ jsxs(Avatar.Root, { children: [/* @__PURE__ */ jsx(Avatar.Content, {
99
+ status,
100
+ hue: member.data?.hue || fallbackValue.hue,
101
+ "data-testid": "spacePlugin.presence.member",
102
+ "data-status": status,
103
+ size,
104
+ ...index ? { style: { zIndex: index } } : {},
105
+ onClick,
106
+ fallback: member.data?.emoji || fallbackValue.emoji,
107
+ ref: forwardedRef
108
+ }), /* @__PURE__ */ jsx(Avatar.Label, {
109
+ classNames: showName ? "text-sm truncate px-2" : "sr-only",
110
+ children: getName(member)
111
+ })] });
112
+ });
113
+ var SmallPresenceLive = ({ id, open, viewers }) => {
114
+ const { hasAttention, isAncestor, isRelated } = useAttention(id);
115
+ const attended = hasAttention || isRelated;
116
+ const containsAttended = isAncestor && !open;
117
+ const getActiveViewers = (viewers) => {
118
+ const moment = Date.now();
119
+ return Array.from(viewers.values()).filter((viewer) => moment - viewer.lastSeen < ACTIVITY_DURATION);
120
+ };
121
+ const [activeViewers, setActiveViewers] = useState(viewers ? getActiveViewers(viewers) : []);
122
+ useEffect(() => {
123
+ if (viewers) {
124
+ setActiveViewers(getActiveViewers(viewers));
125
+ const interval = setInterval(() => {
126
+ setActiveViewers(getActiveViewers(viewers));
127
+ }, REFRESH_INTERVAL);
128
+ return () => clearInterval(interval);
129
+ }
130
+ }, [viewers]);
131
+ return /* @__PURE__ */ jsx(SmallPresence, {
132
+ count: activeViewers.length,
133
+ attended,
134
+ containsAttended
135
+ });
136
+ };
137
+ var SmallPresence = ({ count = 0, attended, containsAttended }) => {
138
+ const { t } = useTranslation(meta.profile.key);
139
+ return /* @__PURE__ */ jsx(Tooltip.Trigger, {
140
+ asChild: true,
141
+ content: t("presence.label", { count }),
142
+ side: "bottom",
143
+ children: /* @__PURE__ */ jsx(AttentionGlyph, {
144
+ attended,
145
+ containsAttended,
146
+ presence: count > 1 ? "many" : count === 1 ? "one" : "none",
147
+ classNames: "self-center mx-1"
148
+ })
149
+ });
150
+ };
151
+ SpacePresence.displayName = "SpacePresence";
152
+ //#endregion
153
+ export { SmallPresenceLive, SpacePresence, SpacePresence as default };
154
+
155
+ //# sourceMappingURL=chunk-SpacePresence.mjs.map