@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
@@ -1,6 +1,11 @@
1
1
  // Copyright 2025 DXOS.org
2
2
 
3
+ import * as Effect from 'effect/Effect';
4
+
3
5
  import { Capability } from '@dxos/app-framework';
6
+ import { Type } from '@dxos/echo';
7
+
8
+ import { SpaceCapabilities } from '../types';
4
9
 
5
10
  export type SpaceOperationConfig = {
6
11
  createInvitationUrl: (invitationCode: string) => string;
@@ -8,3 +13,9 @@ export type SpaceOperationConfig = {
8
13
  };
9
14
 
10
15
  export const SpaceOperationConfig = Capability.make<SpaceOperationConfig>('org.dxos.plugin.space.operationConfig');
16
+
17
+ /** The contributed identity rule for a typename, or `undefined` when no plugin owns one. */
18
+ export const resolveIdentitySpec = Effect.fnUntraced(function* (typename: string) {
19
+ const specs = yield* Capability.getAll(SpaceCapabilities.IdentitySpec);
20
+ return specs.find((spec) => Type.getTypename(spec.type) === typename);
21
+ });
@@ -14,9 +14,11 @@ export const SpaceOperationHandlerSet = OperationHandlerSet.lazy(
14
14
  () => import('./delete-field'),
15
15
  () => import('./duplicate-object'),
16
16
  () => import('./export-space'),
17
+ () => import('./find-duplicates'),
17
18
  () => import('./get-share-link'),
18
19
  () => import('./import-space'),
19
20
  () => import('./join'),
21
+ () => import('./merge-duplicates'),
20
22
  () => import('./migrate'),
21
23
  () => import('./open'),
22
24
  () => import('./open-create-object'),
@@ -1,24 +1,25 @@
1
1
  // Copyright 2025 DXOS.org
2
2
 
3
3
  import * as Effect from 'effect/Effect';
4
+ import * as Option from 'effect/Option';
4
5
 
5
- import { Capability } from '@dxos/app-framework';
6
6
  import { LayoutOperation } from '@dxos/app-toolkit';
7
7
  import { Operation } from '@dxos/compute';
8
- import { ClientCapabilities } from '@dxos/plugin-client';
8
+ import { Identity } from '@dxos/halo';
9
+ import { HaloServicesLayer } from '@dxos/plugin-client';
9
10
 
10
11
  import { meta } from '#meta';
11
12
 
12
13
  import { JOIN_DIALOG } from '../constants';
13
- import { type JoinDialogProps } from '../containers/JoinDialog';
14
+ import type { JoinDialogProps } from '../containers/JoinDialog';
14
15
  import { NoIdentityError } from '../errors';
15
16
  import { SpaceOperation } from './definitions';
16
17
 
17
18
  const handler: Operation.WithHandler<typeof SpaceOperation.Join> = SpaceOperation.Join.pipe(
18
19
  Operation.withHandler(
19
20
  Effect.fnUntraced(function* (input) {
20
- const client = yield* Capability.get(ClientCapabilities.Client);
21
- if (!client.halo.identity.get()) {
21
+ const identity = yield* Identity.getSnapshot.pipe(Effect.provide(HaloServicesLayer));
22
+ if (Option.isNone(identity)) {
22
23
  // Space invitations authenticate against a local identity; there is nothing to redeem without one.
23
24
  yield* Effect.ignore(
24
25
  Operation.invoke(LayoutOperation.AddToast, {
@@ -0,0 +1,51 @@
1
+ // Copyright 2026 DXOS.org
2
+
3
+ import * as Effect from 'effect/Effect';
4
+
5
+ import { Operation } from '@dxos/compute';
6
+ import { Database, Filter, Obj, Query } from '@dxos/echo';
7
+ import { applyMerge, findDuplicates, planMerge } from '@dxos/extractor';
8
+ import { invariant } from '@dxos/invariant';
9
+
10
+ import { SpaceOperation } from './definitions';
11
+ import { resolveIdentitySpec } from './helpers';
12
+
13
+ const handler: Operation.WithHandler<typeof SpaceOperation.MergeDuplicates> = SpaceOperation.MergeDuplicates.pipe(
14
+ Operation.withHandler(
15
+ Effect.fnUntraced(function* ({ typename, objectIds, overrides }) {
16
+ const spec = yield* resolveIdentitySpec(typename);
17
+ invariant(spec, `No identity spec registered for ${typename}.`);
18
+
19
+ const { db } = yield* Database.Service;
20
+ // Re-resolve live proxies by id: the caller's objects crossed the operation boundary as
21
+ // snapshots, and a merge must mutate the reactive object the space actually holds.
22
+ const objects = yield* Database.query(Query.select(Filter.id(...objectIds))).run;
23
+ // The input arrives from a client that may be acting on a stale scan. Refuse a partial or
24
+ // mistyped set rather than merging whatever happened to resolve.
25
+ const requested = new Set(objectIds);
26
+ invariant(requested.size > 1, 'A merge needs at least two distinct members.');
27
+ invariant(objects.length === requested.size, 'Every member of a merge must still exist.');
28
+ invariant(
29
+ objects.every((object) => Obj.instanceOf(spec.type, object)),
30
+ `Every member of a merge must be a ${typename}.`,
31
+ );
32
+
33
+ // The merge deletes the losers, so being asked to merge is not enough — the members must
34
+ // actually share identity. Re-deriving the group over just these objects (not the whole space)
35
+ // rejects a set that is unrelated or only partly connected, and yields the real shared keys.
36
+ const [group, ...rest] = findDuplicates(spec, objects);
37
+ invariant(
38
+ group && rest.length === 0 && group.objects.length === objects.length,
39
+ 'A merge must be applied to a single duplicate group.',
40
+ );
41
+
42
+ const plan = planMerge(spec, group);
43
+ const survivor = yield* applyMerge(db, spec, plan, overrides);
44
+ yield* Database.flush({ indexes: true });
45
+
46
+ return { survivorId: survivor.id, removedIds: plan.losers.map((loser) => loser.id) };
47
+ }),
48
+ ),
49
+ );
50
+
51
+ export default handler;
@@ -2,7 +2,7 @@
2
2
 
3
3
  import * as Effect from 'effect/Effect';
4
4
 
5
- import { LayoutOperation, Paths } from '@dxos/app-toolkit';
5
+ import { GraphPath, LayoutOperation } from '@dxos/app-toolkit';
6
6
  import { Operation } from '@dxos/compute';
7
7
 
8
8
  import { SpaceOperation } from './definitions';
@@ -11,8 +11,8 @@ const handler: Operation.WithHandler<typeof SpaceOperation.OpenMembers> = SpaceO
11
11
  Operation.withHandler(
12
12
  Effect.fnUntraced(function* (input) {
13
13
  yield* Operation.invoke(LayoutOperation.Open, {
14
- subject: [Paths.getSpacePath(input.space.id, 'settings')],
15
- workspace: Paths.getSpacePath(input.space.id),
14
+ subject: [GraphPath.getSpacePath(input.space.id, 'settings')],
15
+ workspace: GraphPath.getSpacePath(input.space.id),
16
16
  });
17
17
  }),
18
18
  ),
@@ -2,7 +2,7 @@
2
2
 
3
3
  import * as Effect from 'effect/Effect';
4
4
 
5
- import { LayoutOperation, Paths } from '@dxos/app-toolkit';
5
+ import { GraphPath, LayoutOperation } from '@dxos/app-toolkit';
6
6
  import { Operation } from '@dxos/compute';
7
7
 
8
8
  import { SpaceOperation } from './definitions';
@@ -11,8 +11,10 @@ const handler: Operation.WithHandler<typeof SpaceOperation.OpenSettings> = Space
11
11
  Operation.withHandler(
12
12
  Effect.fnUntraced(function* (input) {
13
13
  yield* Operation.invoke(LayoutOperation.Open, {
14
- subject: [Paths.getSpacePath(input.space.id, 'settings', 'general')],
15
- workspace: Paths.getSpacePath(input.space.id),
14
+ // The general settings panel node segment is `settings` (id-less `settings` url key), nested
15
+ // under the space settings section (also `settings`).
16
+ subject: [GraphPath.getSpacePath(input.space.id, 'settings', 'settings')],
17
+ workspace: GraphPath.getSpacePath(input.space.id),
16
18
  });
17
19
  }),
18
20
  ),
@@ -7,7 +7,7 @@ import { Capabilities } from '@dxos/app-framework';
7
7
  import { AppAnnotation, AppCapabilities, LayoutOperation } from '@dxos/app-toolkit';
8
8
  import { getSpace } from '@dxos/client/echo';
9
9
  import { Operation } from '@dxos/compute';
10
- import { Annotation, Collection, Entity, Obj } from '@dxos/echo';
10
+ import { Annotation, Collection, Entity, Filter, Obj, Query } from '@dxos/echo';
11
11
  import { invariant } from '@dxos/invariant';
12
12
  import { isNonNullable } from '@dxos/util';
13
13
 
@@ -37,8 +37,12 @@ const handler: Operation.WithHandler<typeof SpaceOperation.RemoveObjects> = Spac
37
37
  : -1,
38
38
  );
39
39
 
40
- const wasActive = entities
41
- .map((entity) => layout.active.find((graphId) => graphId.endsWith(entity.id)))
40
+ // `db.remove` cascades to objects owned via the ECHO parent edge, so those can have planks open
41
+ // too — a project's chats are the live case. Collected before the removal, while the parent
42
+ // edges still resolve; a plank left pointing at a removed object cannot be closed by the user.
43
+ const descendantIds = yield* collectOwnedDescendantIds(entities);
44
+ const wasActive = [...entities.map((entity) => entity.id), ...descendantIds]
45
+ .map((id) => layout.active.find((graphId) => graphId.endsWith(id)))
42
46
  .filter(isNonNullable);
43
47
 
44
48
  for (const entity of entities) {
@@ -69,3 +73,38 @@ const handler: Operation.WithHandler<typeof SpaceOperation.RemoveObjects> = Spac
69
73
  ),
70
74
  );
71
75
  export default handler;
76
+
77
+ /**
78
+ * Ids of every object owned (transitively, by the ECHO parent edge) by one of `entities` — i.e. what
79
+ * `db.remove` will cascade to. Must run before the removal, while the parent edges still resolve.
80
+ * Ownership nests arbitrarily deep, so the walk runs to exhaustion rather than to a depth cap; the
81
+ * visited set (seeded with the roots, so a parent edge looping back cannot re-enqueue one) is what
82
+ * bounds it on cyclic data.
83
+ */
84
+ const collectOwnedDescendantIds = Effect.fnUntraced(function* (entities: readonly unknown[]) {
85
+ const roots: Obj.Unknown[] = entities.filter(Obj.isObject);
86
+ const visited = new Set(roots.map((object) => object.id));
87
+ const descendants = new Set<string>();
88
+ let frontier = roots;
89
+ while (frontier.length > 0) {
90
+ const next: Obj.Unknown[] = [];
91
+ for (const object of frontier) {
92
+ const db = Obj.getDatabase(object);
93
+ if (!db) {
94
+ continue;
95
+ }
96
+
97
+ const children = yield* Effect.promise(() => db.query(Query.select(Filter.id(object.id)).children()).run());
98
+ for (const child of children) {
99
+ if (Obj.isObject(child) && !visited.has(child.id)) {
100
+ visited.add(child.id);
101
+ descendants.add(child.id);
102
+ next.push(child);
103
+ }
104
+ }
105
+ }
106
+ frontier = next;
107
+ }
108
+
109
+ return [...descendants];
110
+ });
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { Collection, Type } from '@dxos/echo';
6
6
  import { type Resource } from '@dxos/react-ui';
7
- import { Event, Message, Organization, Person, Pipeline, Project, Task } from '@dxos/types';
7
+ import { Event, Message, Organization, Person, Pipeline, Task, TaskSet } from '@dxos/types';
8
8
 
9
9
  import { meta } from '#meta';
10
10
 
@@ -89,16 +89,16 @@ export const translations = [
89
89
  'delete-object.label': 'Delete pipeline',
90
90
  'object-deleted.label': 'Pipeline deleted',
91
91
  },
92
- [Type.getTypename(Project.Project)]: {
93
- 'typename.label': 'Project',
94
- 'typename.label_zero': 'Projects',
95
- 'typename.label_one': 'Project',
96
- 'typename.label_other': 'Projects',
97
- 'object-name.placeholder': 'New project',
98
- 'add-object.label': 'Add project',
99
- 'rename-object.label': 'Rename project',
100
- 'delete-object.label': 'Delete project',
101
- 'object-deleted.label': 'Project deleted',
92
+ [Type.getTypename(TaskSet.TaskSet)]: {
93
+ 'typename.label': 'Task set',
94
+ 'typename.label_zero': 'Task sets',
95
+ 'typename.label_one': 'Task set',
96
+ 'typename.label_other': 'Task sets',
97
+ 'object-name.placeholder': 'New task set',
98
+ 'add-object.label': 'Add task set',
99
+ 'rename-object.label': 'Rename task set',
100
+ 'delete-object.label': 'Delete task set',
101
+ 'object-deleted.label': 'Task set deleted',
102
102
  },
103
103
  [Type.getTypename(Task.Task)]: {
104
104
  'typename.label': 'Task',
@@ -113,6 +113,8 @@ export const translations = [
113
113
  },
114
114
  [meta.profile.key]: {
115
115
  'plugin.name': 'Spaces',
116
+ 'navigation-failed-toast.title': 'Link could not be processed',
117
+ 'navigation-failed-toast.description': 'Something went wrong while handling this link. Please try again.',
116
118
  'add-object.label': 'Add object',
117
119
  'first-run.message': 'Nothing selected.',
118
120
  'create-space.label': 'Create space',
@@ -212,12 +214,15 @@ export const translations = [
212
214
  'saving-locally.label': 'Writing to disk',
213
215
  'downloading.label': 'Replicating from peers',
214
216
  'uploading.label': 'Replicating to peers',
217
+ 'stalled.label': 'Replication stalled',
218
+ 'disconnected.label': 'Not connected (changes not replicated)',
215
219
  'offline-persisted.label': 'Saved to disk (offline)',
216
220
  'remote-synced.label': 'Synced with peers',
217
221
  'syncing.label': 'Space syncing',
218
222
  'show-all.label': 'Show all',
219
223
  'no-sync-status.label': 'No space with missing objects.',
220
224
  'create-space-dialog.title': 'Create Space',
225
+ 'create-space-dialog.error.message': 'Failed to create space. Please try again.',
221
226
  'create-object-dialog.title': 'Create {{object}}',
222
227
  'space-input.placeholder': 'Select space',
223
228
  'schema-input.placeholder': 'Select type',
@@ -285,6 +290,9 @@ export const translations = [
285
290
  'repair-space.title': 'Repair Space',
286
291
  'repair-space.description': 'Run repair operations on the space.',
287
292
  'repair-space.label': 'Run repairs',
293
+ 'reset-home.title': 'Reset home layout',
294
+ 'reset-home.description': 'Restore all hidden sections on the space home page.',
295
+ 'reset-home.label': 'Reset',
288
296
 
289
297
  'danger-zone.title': 'Danger Zone',
290
298
  'danger-zone.description': 'Destructive actions that cannot be undone.',
@@ -311,6 +319,29 @@ export const translations = [
311
319
  'database-section.label': 'Database',
312
320
  'collections-section.label': 'Collections',
313
321
  'type-collection-empty.message': 'No objects of this type yet.',
322
+ 'layout.label': 'Layout',
323
+ 'layout-masonry.label': 'Cards',
324
+ 'layout-table.label': 'Table',
325
+ 'layout-duplicates.label': 'Duplicates',
326
+ 'open-object.label': 'Open object',
327
+ 'search-placeholder.label': 'Filter...',
328
+ 'search-no-results.message': 'No matches.',
329
+ 'item-count.label_zero': 'No items',
330
+ 'item-count.label_one': '1 item',
331
+ 'item-count.label_other': '{{count}} items',
332
+ 'delete-selected.label_one': 'Delete {{count}} object',
333
+ 'delete-selected.label_other': 'Delete {{count}} objects',
334
+ 'merge-duplicates.label': 'Merge',
335
+ 'skip-duplicates.label': 'Skip',
336
+ 'previous-duplicate.label': 'Previous group',
337
+ 'next-duplicate.label': 'Next group',
338
+ 'rescan-duplicates.label': 'Rescan',
339
+ 'duplicates-position.label': 'Group',
340
+ 'confirm-merge.label': 'Confirm merge',
341
+ 'cancel-merge.label': 'Cancel',
342
+ 'duplicates-none.label': 'None',
343
+ 'duplicates-none.message': 'No duplicates found.',
344
+ 'duplicates-scanning.message': 'Scanning for duplicates…',
314
345
 
315
346
  'search.placeholder': 'Search…',
316
347
  'auth-code.message': 'Authorization code',
@@ -329,6 +360,16 @@ export const translations = [
329
360
  'unnamed-collection.label': 'Unnamed',
330
361
  'space-home-node.label': 'Home',
331
362
  'space-home.recent.heading': 'Recent',
363
+ 'space-home.dashboard.heading': 'Activity',
364
+ 'space-home.dashboard.objects.label': 'Objects',
365
+ 'space-home.dashboard.types.label': 'Types',
366
+ 'space-home.dashboard.collections.label': 'Collections',
367
+ 'space-home.dashboard.members.label': 'Members',
368
+ 'space-home.dashboard.active-days.label': 'Active days',
369
+ 'space-home.dashboard.plugins.label': 'Plugins',
370
+ 'space-home.dashboard.range-all.label': 'All',
371
+ 'space-home.dashboard.range-month.label': '30d',
372
+ 'space-home.dashboard.range-week.label': '7d',
332
373
  },
333
374
  },
334
375
  },
@@ -0,0 +1,48 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+ import { describe, test } from 'vitest';
7
+
8
+ import { Key } from '@dxos/echo';
9
+ import { type GraphBuilder } from '@dxos/plugin-graph';
10
+
11
+ import { findTypeSectionPath } from './type-section-path';
12
+
13
+ const spaceId = Key.SpaceId.random();
14
+ const objectId = Key.EntityId.random();
15
+
16
+ describe('findTypeSectionPath', () => {
17
+ test('matches a grouped section by its trailing typename segment', ({ expect }) => {
18
+ const extensions = [staticBinding(['system', 'database']), staticBinding(['ai', 'dxos.org.type.Chat'])];
19
+ expect(findTypeSectionPath(extensions, { spaceId, typename: 'dxos.org.type.Chat', objectId })).toBe(
20
+ `root/${spaceId}/ai/dxos.org.type.Chat/${objectId}`,
21
+ );
22
+ });
23
+
24
+ test('matches a space-direct section', ({ expect }) => {
25
+ const extensions = [staticBinding(['dxos.org.type.Project'])];
26
+ expect(findTypeSectionPath(extensions, { spaceId, typename: 'dxos.org.type.Project', objectId })).toBe(
27
+ `root/${spaceId}/dxos.org.type.Project/${objectId}`,
28
+ );
29
+ });
30
+
31
+ test('ignores dynamic resolvers, singletons, and unrelated static paths', ({ expect }) => {
32
+ const extensions: Array<Pick<GraphBuilder.BuilderExtension, 'url'>> = [
33
+ // Dynamic path (nested collections) — locates by runtime data, not a fixed section.
34
+ { url: { key: 'object', kind: 'item', path: () => Effect.succeed(null) } },
35
+ // Singleton (settings page) — the trailing segment is the node itself, not a typename.
36
+ staticBinding(['dxos.org.type.Chat'], 'singleton'),
37
+ // Static but not this type's section.
38
+ staticBinding(['system', 'database']),
39
+ { url: undefined },
40
+ ];
41
+ expect(findTypeSectionPath(extensions, { spaceId, typename: 'dxos.org.type.Chat', objectId })).toBeUndefined();
42
+ });
43
+ });
44
+
45
+ /** A static url binding as `createTypeSectionExtension` declares one. */
46
+ const staticBinding = (path: string[], kind: 'item' | 'singleton' = 'item') => ({
47
+ url: { key: path.at(-1) ?? 'key', kind, path },
48
+ });
@@ -0,0 +1,39 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { type CapabilityManager } from '@dxos/app-framework';
6
+ import { AppCapabilities, GraphPath } from '@dxos/app-toolkit';
7
+ import { type GraphBuilder } from '@dxos/plugin-graph';
8
+
9
+ /**
10
+ * The path under which the nav tree shows an object surfaced by a type section
11
+ * (`TypeSection.createTypeSectionExtension`): `root/<space>/[<group>/]<typename>/<id>`. Derived from
12
+ * the graph builder's registered url bindings rather than per-plugin wiring — a type section declares
13
+ * a static `path` ending in its typename, so the declaration every section already makes for URL
14
+ * resolution also answers "where does this type live in the tree". Returns undefined when no active
15
+ * extension declares a section for the typename.
16
+ */
17
+ export const findTypeSectionPath = (
18
+ extensions: Iterable<Pick<GraphBuilder.BuilderExtension, 'url'>>,
19
+ { spaceId, typename, objectId }: { spaceId: string; typename: string; objectId: string },
20
+ ): string | undefined => {
21
+ for (const extension of extensions) {
22
+ const url = extension.url;
23
+ // Only item bindings with a static path locate objects at a fixed depth; dynamic resolvers
24
+ // (nested collections) and singletons (settings pages) address other shapes.
25
+ if (url?.kind === 'item' && Array.isArray(url.path) && url.path.at(-1) === typename) {
26
+ return GraphPath.getSpacePath(spaceId, ...url.path, objectId);
27
+ }
28
+ }
29
+ return undefined;
30
+ };
31
+
32
+ /** {@link findTypeSectionPath} against the app graph's live extension registry, absent-graph safe. */
33
+ export const resolveTypeSectionPath = (
34
+ capabilities: CapabilityManager.CapabilityManager,
35
+ params: { spaceId: string; typename: string; objectId: string },
36
+ ): string | undefined => {
37
+ const builder = capabilities.getAll(AppCapabilities.AppGraph).at(0);
38
+ return builder ? findTypeSectionPath(Object.values(builder.getExtensions()), params) : undefined;
39
+ };
@@ -2,7 +2,7 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { type Atom } from '@effect-atom/atom-react';
5
+ import { type Atom } from '@effect-atom/atom';
6
6
  import type * as Effect from 'effect/Effect';
7
7
  import * as Schema from 'effect/Schema';
8
8
  import type { ComponentType } from 'react';
@@ -10,7 +10,7 @@ import type { ComponentType } from 'react';
10
10
  import { Capability } from '@dxos/app-framework';
11
11
  import { type Space } from '@dxos/client/echo';
12
12
  import { type Operation } from '@dxos/compute';
13
- import { type Collection, type Database, type Type } from '@dxos/echo';
13
+ import { type Collection, type Database, type Obj, type Type } from '@dxos/echo';
14
14
  import { type PublicKey } from '@dxos/keys';
15
15
  import { type Label } from '@dxos/ui-types/translations';
16
16
  import { type ComplexMap, type Position } from '@dxos/util';
@@ -36,6 +36,18 @@ export namespace SpaceCapabilities {
36
36
  /** Persisted state (stored in KVS/localStorage). */
37
37
  export const State = Capability.make<Atom.Writable<SpaceState>>(`${meta.profile.key}.capability.state`);
38
38
 
39
+ /**
40
+ * A proposed merge awaiting confirmation. `preview` is detached (never added to the database),
41
+ * so abandoning the review writes nothing. Keyed by the type article's URI so the companion
42
+ * only shows a preview raised by the plank it is companion to.
43
+ */
44
+ export type MergePreview = {
45
+ typeUri: string;
46
+ typename: string;
47
+ objectIds: string[];
48
+ preview: Obj.Unknown;
49
+ };
50
+
39
51
  /** Ephemeral space plugin state (not persisted). */
40
52
  export type SpaceEphemeralState = {
41
53
  awaiting: string | undefined;
@@ -43,6 +55,9 @@ export namespace SpaceCapabilities {
43
55
  navigableCollections: boolean;
44
56
  viewersByObject: Record<string, ComplexMap<PublicKey, ObjectViewerProps>>;
45
57
  viewersByIdentity: ComplexMap<PublicKey, Set<string>>;
58
+ mergePreview: MergePreview | undefined;
59
+ /** Bumped when a merge commits, so an open duplicates review knows to rescan. */
60
+ lastMergeAt: number | undefined;
46
61
  };
47
62
 
48
63
  /** Transient/ephemeral state (not persisted). */
@@ -90,6 +105,15 @@ export namespace SpaceCapabilities {
90
105
  }>;
91
106
  export const CreateObjectEntry = Capability.make<CreateObjectEntry>(`${meta.profile.key}.capability.create-object`);
92
107
 
108
+ /**
109
+ * The identity rule for a type — how to key an object for duplicate detection and how to merge
110
+ * two of them. Plugins that own a type contribute one (e.g. plugin-crm for Person); the type
111
+ * article only offers its Duplicates tab for types that have one.
112
+ */
113
+ export const IdentitySpec = Capability.make<import('@dxos/extractor').IdentitySpec<any>>(
114
+ `${meta.profile.key}.capability.identity-spec`,
115
+ );
116
+
93
117
  /** Props passed to a `CreateObjectEntry.customPanel`. */
94
118
  export type CreateObjectCustomPanelProps = {
95
119
  target: Database.Database | Collection.Collection;
@@ -2,7 +2,7 @@
2
2
  // Copyright 2026 DXOS.org
3
3
  //
4
4
 
5
- import { Surface } from '@dxos/app-framework/ui';
5
+ import { Role } from '@dxos/app-framework';
6
6
  import { type Obj } from '@dxos/echo';
7
7
  import { type Space } from '@dxos/react-client/echo';
8
8
 
@@ -10,22 +10,18 @@ import { type Space } from '@dxos/react-client/echo';
10
10
  * Surface role token for the Home article's scrollable content region. Contributors render
11
11
  * top-to-bottom (e.g. Welcome, Recent objects, starter-prompt cards).
12
12
  */
13
- export const SpaceHomeContent: Surface.RoleToken<{ space: Space }> = Surface.makeType(
14
- 'org.dxos.plugin.space.role.homeContent',
15
- );
13
+ export const SpaceHomeContent: Role.Role<{ space: Space }> = Role.make('org.dxos.plugin.space.role.homeContent');
16
14
 
17
15
  /**
18
16
  * Surface role token for the Home article's pinned-bottom region (the assistant prompt).
19
17
  * Rendered with `limit={1}` so only a single prompt contributor mounts.
20
18
  */
21
- export const SpaceHomePinBottom: Surface.RoleToken<{ space: Space }> = Surface.makeType(
22
- 'org.dxos.plugin.space.role.homePinBottom',
23
- );
19
+ export const SpaceHomePinBottom: Role.Role<{ space: Space }> = Role.make('org.dxos.plugin.space.role.homePinBottom');
24
20
 
25
21
  /**
26
22
  * Surface role token for assistant prompts (consumed by plugin-assistant).
27
23
  * Owned by plugin-space to avoid a circular dependency.
28
24
  */
29
- export const Prompts: Surface.RoleToken<{ subject: Obj.Any; attendableId: string }> = Surface.makeType(
25
+ export const Prompts: Role.Role<{ subject: Obj.Any; attendableId: string }> = Role.make(
30
26
  'org.dxos.plugin.assistant.role.prompts',
31
27
  );
@@ -55,6 +55,13 @@ export type SpacePluginOptions = {
55
55
  */
56
56
  invitationProp?: string;
57
57
 
58
+ /**
59
+ * Whether the navigation handler consumes invitation codes from URL query params.
60
+ * Disable when another plugin (e.g. plugin-onboarding) owns the invitation URL flow.
61
+ * @default true
62
+ */
63
+ invitationUrlHandler?: boolean;
64
+
58
65
  /**
59
66
  * Whether to send observability events.
60
67
  */
@@ -1,93 +0,0 @@
1
- import "./chunk-J5LGTIGS.mjs";
2
-
3
- // src/containers/CollectionArticle/CollectionArticle.tsx
4
- import React, { useCallback, useMemo } from "react";
5
- import { useOperationInvoker } from "@dxos/app-framework/ui";
6
- import { LayoutOperation, Paths } from "@dxos/app-toolkit";
7
- import { Obj } from "@dxos/echo";
8
- import { ScrollArea, toLocalizedString, useTranslation } from "@dxos/react-ui";
9
- import { Card, Icon } from "@dxos/react-ui";
10
- import { Mosaic } from "@dxos/react-ui-mosaic";
11
- import { SearchPanel, useSearchListResults } from "@dxos/react-ui-search";
12
- import { getStyles } from "@dxos/ui-theme";
13
- import { meta } from "#meta";
14
- var CollectionArticle = ({ subject, attendableId }) => {
15
- const { t } = useTranslation(meta.profile.key);
16
- const { items, handleSearch } = useCollectionItems(subject, attendableId);
17
- return /* @__PURE__ */ React.createElement(SearchPanel, {
18
- onSearch: handleSearch
19
- }, /* @__PURE__ */ React.createElement(Mosaic.Container, {
20
- asChild: true
21
- }, /* @__PURE__ */ React.createElement(ScrollArea.Root, {
22
- centered: true,
23
- padding: true,
24
- thin: true
25
- }, /* @__PURE__ */ React.createElement(ScrollArea.Viewport, null, /* @__PURE__ */ React.createElement(Mosaic.Stack, {
26
- classNames: "gap-1",
27
- draggable: false,
28
- items,
29
- getId: (item) => item.id,
30
- Tile: ObjectTile
31
- })))));
32
- };
33
- var ObjectTile = ({ data: item }) => {
34
- const { t } = useTranslation(meta.profile.key);
35
- const { invokePromise } = useOperationInvoker();
36
- const typename = Obj.getTypename(item.object) ?? "";
37
- const label = Obj.getLabel(item.object) ?? toLocalizedString([
38
- "object-name.placeholder",
39
- {
40
- ns: typename,
41
- defaultValue: item.id
42
- }
43
- ], t);
44
- const styles = item.iconHue ? getStyles(item.iconHue) : void 0;
45
- const handleClick = useCallback(() => void invokePromise(LayoutOperation.Open, {
46
- subject: [
47
- item.targetPath
48
- ]
49
- }), [
50
- invokePromise,
51
- item.targetPath
52
- ]);
53
- return /* @__PURE__ */ React.createElement(Card.Root, {
54
- fullWidth: true,
55
- role: "button",
56
- classNames: "cursor-pointer",
57
- onClick: handleClick
58
- }, /* @__PURE__ */ React.createElement(Card.Header, null, /* @__PURE__ */ React.createElement(Card.Block, null, /* @__PURE__ */ React.createElement(Icon, {
59
- icon: item.icon,
60
- classNames: styles?.fg
61
- })), /* @__PURE__ */ React.createElement(Card.Title, null, label), /* @__PURE__ */ React.createElement(Card.Menu, null)));
62
- };
63
- var useCollectionItems = (collection, attendableId) => {
64
- const objects = useMemo(() => (collection.objects ?? []).map((ref) => ref.target).filter((obj) => Obj.isObject(obj)), [
65
- collection.objects
66
- ]);
67
- const items = useMemo(() => objects.map((obj) => {
68
- const iconAnnotation = Obj.getIcon(obj);
69
- const targetPath = attendableId ? Paths.getCollectionObjectPath(attendableId, obj.id) : Paths.getObjectPathFromObject(obj);
70
- return {
71
- id: Obj.getURI(obj),
72
- object: obj,
73
- targetPath,
74
- icon: iconAnnotation?.icon ?? "ph--circle-dashed--regular",
75
- iconHue: iconAnnotation?.hue
76
- };
77
- }), [
78
- objects,
79
- attendableId
80
- ]);
81
- const { results, handleSearch } = useSearchListResults({
82
- items,
83
- extract: (item) => Obj.getLabel(item.object) ?? item.id
84
- });
85
- return {
86
- items: results,
87
- handleSearch
88
- };
89
- };
90
- export {
91
- CollectionArticle as default
92
- };
93
- //# sourceMappingURL=CollectionArticle-BMH7SZ7Q.mjs.map