@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
@@ -6,11 +6,23 @@ import * as Effect from 'effect/Effect';
6
6
  import * as Option from 'effect/Option';
7
7
 
8
8
  import { Capability } from '@dxos/app-framework';
9
- import { AppAnnotation, AppCapabilities, AppNode, AppNodeMatcher, LayoutOperation, Paths } from '@dxos/app-toolkit';
9
+ import {
10
+ AppAnnotation,
11
+ AppCapabilities,
12
+ AppNode,
13
+ AppNodeMatcher,
14
+ DeckSpec,
15
+ GraphPath,
16
+ LayoutOperation,
17
+ UrlResolution,
18
+ } from '@dxos/app-toolkit';
10
19
  import { isSpace } from '@dxos/client/echo';
11
20
  import { Operation } from '@dxos/compute';
12
- import { Annotation, Collection, Obj, Type } from '@dxos/echo';
21
+ import { Annotation, Collection, Database, Obj, Type } from '@dxos/echo';
13
22
  import { invariant } from '@dxos/invariant';
23
+ import { SpaceId } from '@dxos/keys';
24
+ import { log } from '@dxos/log';
25
+ import { ClientCapabilities } from '@dxos/plugin-client';
14
26
  import { Graph, GraphBuilder, Node } from '@dxos/plugin-graph';
15
27
  import { isNonNullable } from '@dxos/util';
16
28
 
@@ -18,6 +30,7 @@ import { meta } from '#meta';
18
30
  import { SpaceOperation } from '#operations';
19
31
  import { SpaceCapabilities } from '#types';
20
32
 
33
+ import { resolveCollectionObjectPath } from '../../../collection-path';
21
34
  import {
22
35
  COLLECTIONS_SECTION_TYPE,
23
36
  COPY_LINK_LABEL,
@@ -30,6 +43,15 @@ import {
30
43
  //
31
44
 
32
45
  /** Creates collection-related extensions: collections section, collections, objects, and object actions. */
46
+
47
+ /**
48
+ * A collection is always a navigation target; what differs is what navigating to it shows. When a
49
+ * plugin renders collections as their own article (stack, simple-layout) that article wins, otherwise
50
+ * the deck opens the collection's contents. Returning `undefined` leaves the ordinary open in place.
51
+ */
52
+ const collectionDeck = (object: Obj.Unknown, hasCollectionArticle: boolean): DeckSpec.DeckSpec | undefined =>
53
+ !hasCollectionArticle && Obj.instanceOf(Collection.Collection, object) ? { initial: 'children' } : undefined;
54
+
33
55
  export const createCollectionExtensions = Effect.fnUntraced(function* ({
34
56
  shareableLinkOrigin,
35
57
  }: {
@@ -41,13 +63,13 @@ export const createCollectionExtensions = Effect.fnUntraced(function* ({
41
63
  // Content section group — created alongside collections so the group always
42
64
  // appears when the space plugin is active and hides when there are no children.
43
65
  GraphBuilder.createExtension({
44
- id: Paths.GroupSegments.content,
66
+ id: GraphPath.GroupSegments.content,
45
67
  match: AppNodeMatcher.whenSpace,
46
68
  connector: (space) =>
47
69
  Effect.succeed([
48
70
  AppNode.makeGroup({
49
- id: Paths.GroupSegments.content,
50
- type: Paths.GroupTypes.content,
71
+ id: GraphPath.GroupSegments.content,
72
+ type: GraphPath.GroupTypes.content,
51
73
  label: ['nav-tree-group-content.label', { ns: meta.profile.key }],
52
74
  space,
53
75
  position: 200,
@@ -58,7 +80,7 @@ export const createCollectionExtensions = Effect.fnUntraced(function* ({
58
80
  // Collections section virtual node under the content group.
59
81
  GraphBuilder.createExtension({
60
82
  id: 'collectionsSection',
61
- match: AppNodeMatcher.whenNavTreeGroup(Paths.GroupTypes.content),
83
+ match: AppNodeMatcher.whenNavTreeGroup(GraphPath.GroupTypes.content),
62
84
  connector: (space, get) => {
63
85
  get(Obj.atom(space.properties));
64
86
  const collectionRef = Annotation.get(space.properties, AppAnnotation.RootCollectionAnnotation).pipe(
@@ -74,7 +96,7 @@ export const createCollectionExtensions = Effect.fnUntraced(function* ({
74
96
 
75
97
  return Effect.succeed([
76
98
  Node.make({
77
- id: Paths.Segments.collections,
99
+ id: GraphPath.Segments.collections,
78
100
  type: COLLECTIONS_SECTION_TYPE,
79
101
  data: null,
80
102
  properties: {
@@ -93,9 +115,13 @@ export const createCollectionExtensions = Effect.fnUntraced(function* ({
93
115
  },
94
116
  }),
95
117
 
96
- // Root collection objects under the Collections virtual node.
118
+ // Root collection objects under the Collections virtual node. Shares the `object` urlKey with the
119
+ // nested-collection `objects` connector below so an object is addressed the same way wherever it
120
+ // sits in the collection tree (the key names the *collection subgraph*, not the container's type;
121
+ // the database subgraph addresses the same object under `db`).
97
122
  GraphBuilder.createExtension({
98
123
  id: 'collections',
124
+ url: { key: 'object', kind: 'item', path: [GraphPath.GroupSegments.content, GraphPath.Segments.collections] },
99
125
  match: (node) => {
100
126
  const space = isSpace(node.properties.space) ? node.properties.space : undefined;
101
127
  return node.type === COLLECTIONS_SECTION_TYPE && space ? Option.some(space) : Option.none();
@@ -129,7 +155,8 @@ export const createCollectionExtensions = Effect.fnUntraced(function* ({
129
155
  get,
130
156
  db: space.db,
131
157
  object,
132
- navigable: ephemeralState.navigableCollections,
158
+ navigable: true,
159
+ deck: collectionDeck(object, ephemeralState.navigableCollections),
133
160
  canDrop: AppNode.CAN_DROP_COLLECTION_ITEM,
134
161
  onRearrange: collectionRef?.target
135
162
  ? AppNode.makeCollectionRearrangeCallback(collectionRef.target)
@@ -144,6 +171,31 @@ export const createCollectionExtensions = Effect.fnUntraced(function* ({
144
171
  // Children of Collection.Collection nodes.
145
172
  GraphBuilder.createExtension({
146
173
  id: 'objects',
174
+ // Recursive over nested collections at any depth, so `object/<id>` addresses any object reachable
175
+ // through a space's collection tree, not just the root collection's direct children. The shape is
176
+ // data-dependent (the object's collection ancestry), so instead of a static `path` it resolves
177
+ // dynamically — see `resolveCollectionObjectPath`.
178
+ url: {
179
+ key: 'object',
180
+ kind: 'item',
181
+ path: ({ id, workspace }) =>
182
+ Effect.gen(function* () {
183
+ if (!SpaceId.isValid(workspace)) {
184
+ return null;
185
+ }
186
+ // Look the Client up lazily (at resolve time) rather than at graph-setup time — it is not yet
187
+ // available when the AppGraphBuilder activates, and forward resolution only runs much later.
188
+ const client = capabilities.get(ClientCapabilities.Client);
189
+ const space = client.spaces.get(workspace);
190
+ if (!space) {
191
+ return null;
192
+ }
193
+ const path = yield* resolveCollectionObjectPath({ objectId: id }).pipe(
194
+ Effect.provide(Database.layer(space.db)),
195
+ );
196
+ return path ?? null;
197
+ }),
198
+ },
147
199
  match: (node) => (Obj.instanceOf(Collection.Collection, node.data) ? Option.some(node.data) : Option.none()),
148
200
  connector: (collection, get) => {
149
201
  const ephemeralAtom = capabilities.get(SpaceCapabilities.EphemeralState);
@@ -169,7 +221,8 @@ export const createCollectionExtensions = Effect.fnUntraced(function* ({
169
221
  get,
170
222
  object,
171
223
  db,
172
- navigable: ephemeralState.navigableCollections,
224
+ navigable: true,
225
+ deck: collectionDeck(object, ephemeralState.navigableCollections),
173
226
  canDrop: AppNode.CAN_DROP_COLLECTION_ITEM,
174
227
  onRearrange: AppNode.makeCollectionRearrangeCallback(collection),
175
228
  }),
@@ -177,8 +230,6 @@ export const createCollectionExtensions = Effect.fnUntraced(function* ({
177
230
  .filter(isNonNullable),
178
231
  );
179
232
  },
180
- // TODO(graph-path-ids): Resolver temporarily disabled; redesign needed for path-based IDs.
181
- // resolver: (id, get) => { ... },
182
233
  }),
183
234
 
184
235
  // Object actions.
@@ -243,7 +294,7 @@ export const createCollectionExtensions = Effect.fnUntraced(function* ({
243
294
  // Qualified id of the collections section node (root/<spaceId>/collections), so the new
244
295
  // object's navigation path resolves under the section — the bare segment would not.
245
296
  target: rootCollection ?? space.db,
246
- targetNodeId: Paths.getCollectionsPath(space.id),
297
+ targetNodeId: GraphPath.getCollectionsPath(space.id),
247
298
  });
248
299
  }),
249
300
  properties: {
@@ -258,10 +309,6 @@ export const createCollectionExtensions = Effect.fnUntraced(function* ({
258
309
  ]);
259
310
  });
260
311
 
261
- //
262
- // Helpers
263
- //
264
-
265
312
  /** Builds the action list for an ECHO object node. */
266
313
  const constructObjectActions = ({
267
314
  object,
@@ -329,9 +376,15 @@ const constructObjectActions = ({
329
376
  Node.makeAction({
330
377
  id: 'copyLink',
331
378
  data: () =>
332
- Effect.promise(async () => {
333
- const url = new URL(Paths.toUrlPath(nodeId), shareableLinkOrigin);
334
- await navigator.clipboard.writeText(url.toString());
379
+ Effect.gen(function* () {
380
+ const builder = yield* Capability.get(AppCapabilities.AppGraph);
381
+ const path = UrlResolution.getShareableLinkPath(builder, nodeId);
382
+ if (Option.isNone(path)) {
383
+ log.warn('object has no URL representation; cannot copy link', { nodeId });
384
+ return;
385
+ }
386
+ const url = new URL(path.value, shareableLinkOrigin);
387
+ yield* Effect.promise(() => navigator.clipboard.writeText(url.toString()));
335
388
  }),
336
389
  properties: {
337
390
  label: COPY_LINK_LABEL,
@@ -344,7 +397,7 @@ const constructObjectActions = ({
344
397
  : []),
345
398
  Node.makeAction({
346
399
  id: LayoutOperation.Expose.meta.key,
347
- data: () => Operation.invoke(LayoutOperation.Expose, { subject: Paths.getObjectPathFromObject(object) }),
400
+ data: () => Operation.invoke(LayoutOperation.Expose, { subject: GraphPath.getObjectPathFromObject(object) }),
348
401
  properties: {
349
402
  label: EXPOSE_OBJECT_LABEL,
350
403
  icon: 'ph--eye--regular',
@@ -8,7 +8,6 @@ import * as Option from 'effect/Option';
8
8
  import { AppNode } from '@dxos/app-toolkit';
9
9
  import { Obj, Type } from '@dxos/echo';
10
10
  import { GraphBuilder, NodeMatcher } from '@dxos/plugin-graph';
11
- import { linkedSegment } from '@dxos/react-ui-attention';
12
11
  import type { EchoViewRefPath } from '@dxos/schema';
13
12
  import { ViewAnnotation } from '@dxos/schema';
14
13
  import { Position } from '@dxos/util';
@@ -19,7 +18,7 @@ import { meta } from '#meta';
19
18
  // Extension Factory
20
19
  //
21
20
 
22
- /** Creates companion panel extensions: object settings and selected-objects. */
21
+ /** Creates companion panel extensions: object settings, related, and selected-objects. */
23
22
  // NOTE: Explicit annotation required: d.ts emit cannot portably name the inferred @dxos/plugin-graph types (TS2883).
24
23
  export const createCompanionExtensions: () => Effect.Effect<GraphBuilder.BuilderExtension[][]> = Effect.fnUntraced(
25
24
  function* () {
@@ -31,7 +30,7 @@ export const createCompanionExtensions: () => Effect.Effect<GraphBuilder.Builder
31
30
  connector: (node) =>
32
31
  Effect.succeed([
33
32
  AppNode.makeCompanion({
34
- id: linkedSegment('settings'),
33
+ variant: 'settings',
35
34
  label: ['object-properties.label', { ns: meta.profile.key }],
36
35
  icon: 'ph--sliders--regular',
37
36
  data: 'settings', // TODO(burdon): Change to 'object-properties'.
@@ -47,7 +46,7 @@ export const createCompanionExtensions: () => Effect.Effect<GraphBuilder.Builder
47
46
  connector: (node) =>
48
47
  Effect.succeed([
49
48
  AppNode.makeCompanion({
50
- id: linkedSegment('related'),
49
+ variant: 'related',
51
50
  label: ['companion-related.label', { ns: meta.profile.key }],
52
51
  icon: 'ph--graph--regular',
53
52
  data: 'related',
@@ -60,6 +59,12 @@ export const createCompanionExtensions: () => Effect.Effect<GraphBuilder.Builder
60
59
  GraphBuilder.createExtension({
61
60
  id: 'selectedObjects',
62
61
  match: (node) => {
62
+ // Type/schema node (e.g. a TypeArticle plank): the table's own row selection feeds this
63
+ // companion directly, no view lookup needed.
64
+ if (Type.isType(node.data)) {
65
+ return Option.some(node);
66
+ }
67
+
63
68
  if (!Obj.isObject(node.data)) {
64
69
  return Option.none();
65
70
  }
@@ -79,7 +84,7 @@ export const createCompanionExtensions: () => Effect.Effect<GraphBuilder.Builder
79
84
  connector: (node) =>
80
85
  Effect.succeed([
81
86
  AppNode.makeCompanion({
82
- id: linkedSegment('selected-objects'),
87
+ variant: 'selected-objects',
83
88
  label: ['companion-selected-objects.label', { ns: meta.profile.key }],
84
89
  icon: 'ph--tree-view--regular',
85
90
  data: 'selected-objects',
@@ -2,16 +2,16 @@
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 * as Effect from 'effect/Effect';
7
7
  import * as Match from 'effect/Match';
8
8
  import * as Option from 'effect/Option';
9
9
 
10
10
  import { Capability, type CapabilityManager } from '@dxos/app-framework';
11
- import { AppCapabilities, AppNode, AppNodeMatcher, LayoutOperation, Paths } from '@dxos/app-toolkit';
11
+ import { AppCapabilities, AppNode, AppNodeMatcher, GraphPath, LayoutOperation } from '@dxos/app-toolkit';
12
12
  import { type Space, isSpace } from '@dxos/client/echo';
13
13
  import { Operation } from '@dxos/compute';
14
- import { Annotation, Collection, Entity, Filter, Key, Obj, Query, Scope, Type } from '@dxos/echo';
14
+ import { Annotation, Collection, Entity, Filter, Obj, Query, Scope, Type } from '@dxos/echo';
15
15
  import { HiddenAnnotation } from '@dxos/echo/Annotation';
16
16
  import { ClientCapabilities } from '@dxos/plugin-client';
17
17
  import { GraphBuilder, Node } from '@dxos/plugin-graph';
@@ -27,8 +27,8 @@ import { makeCreateObjectEntryForDatabaseType } from '../../../util';
27
27
  import {
28
28
  ADD_VIEW_TO_SCHEMA_LABEL,
29
29
  DATABASE_SECTION_TYPE,
30
+ SCHEMA_NODE_TYPE,
30
31
  SNAPSHOT_BY_SCHEMA_LABEL,
31
- STATIC_SCHEMA_TYPE,
32
32
  buildViewIndex,
33
33
  downloadBlob,
34
34
  } from './shared';
@@ -45,13 +45,13 @@ export const createDatabaseExtensions = Effect.fnUntraced(function* () {
45
45
  // System section group — created alongside database/settings so the group always
46
46
  // appears when the space plugin is active and hides when there are no children.
47
47
  GraphBuilder.createExtension({
48
- id: Paths.GroupSegments.system,
48
+ id: GraphPath.GroupSegments.system,
49
49
  match: AppNodeMatcher.whenSpace,
50
50
  connector: (space) =>
51
51
  Effect.succeed([
52
52
  AppNode.makeGroup({
53
- id: Paths.GroupSegments.system,
54
- type: Paths.GroupTypes.system,
53
+ id: GraphPath.GroupSegments.system,
54
+ type: GraphPath.GroupTypes.system,
55
55
  label: ['nav-tree-group-system.label', { ns: meta.profile.key }],
56
56
  space,
57
57
  position: 900,
@@ -62,11 +62,11 @@ export const createDatabaseExtensions = Effect.fnUntraced(function* () {
62
62
  // Types section virtual node under the system group.
63
63
  GraphBuilder.createExtension({
64
64
  id: 'databaseSection',
65
- match: AppNodeMatcher.whenNavTreeGroup(Paths.GroupTypes.system),
65
+ match: AppNodeMatcher.whenNavTreeGroup(GraphPath.GroupTypes.system),
66
66
  connector: (space) => {
67
67
  return Effect.succeed([
68
68
  AppNode.makeSection({
69
- id: Paths.Segments.database,
69
+ id: GraphPath.Segments.database,
70
70
  type: DATABASE_SECTION_TYPE,
71
71
  label: ['database-section.label', { ns: meta.profile.key }],
72
72
  icon: 'ph--database--regular',
@@ -80,6 +80,7 @@ export const createDatabaseExtensions = Effect.fnUntraced(function* () {
80
80
  // Schema nodes under the Types virtual node.
81
81
  GraphBuilder.createExtension({
82
82
  id: 'database',
83
+ url: { key: 'type', kind: 'item', path: [GraphPath.GroupSegments.system, GraphPath.Segments.database] },
83
84
  match: (node) => {
84
85
  const space = isSpace(node.properties.space) ? node.properties.space : undefined;
85
86
  return node.type === DATABASE_SECTION_TYPE && space ? Option.some(space) : Option.none();
@@ -150,18 +151,24 @@ export const createDatabaseExtensions = Effect.fnUntraced(function* () {
150
151
  // {All} virtual node + view objects under each schema node.
151
152
  GraphBuilder.createExtension({
152
153
  id: 'schemaChildren',
154
+ url: { key: 'view', kind: 'item', path: [GraphPath.GroupSegments.system, GraphPath.Segments.database] },
153
155
  match: (node) => {
154
156
  const space = isSpace(node.properties.space) ? node.properties.space : undefined;
155
- return space && Type.isType(node.data) ? Option.some({ space, schema: node.data }) : Option.none();
157
+ // Scoped to the Database section's own type nodes (both static and database schemas see
158
+ // SCHEMA_NODE_TYPE): other plugins' type nodes (e.g. plugin-crm's virtual type nodes) share the
159
+ // `Type.isType(node.data)` shape but should stay leaf nodes for now.
160
+ return node.type === SCHEMA_NODE_TYPE && space && Type.isType(node.data)
161
+ ? Option.some({ space, schema: node.data })
162
+ : Option.none();
156
163
  },
157
164
  connector: ({ space, schema }, get) => {
158
165
  const client = get(capabilities.atom(ClientCapabilities.Client)).at(0);
159
166
  const schemas = client ? get(client.graph.registry.query(Filter.type(Type.Type)).atom) : [];
160
167
  const typeUri = Type.getURI(schema);
161
168
 
162
- // View objects are the type node's only visible children; objects of the type are resolved
163
- // on demand as hidden children (see the `typeCollectionObject` resolver). The list of all
164
- // objects is rendered when the type node is selected (see TypeCollectionArticle).
169
+ // View objects are the type node's only visible children; every object of the type (viewed
170
+ // or not) is also reachable via the `databaseObjects` extension below, keyed generically as
171
+ // `obj`. The list of all objects is rendered when the type node is selected (see TypeArticle).
165
172
  const viewIndex = buildViewIndex(get, space, schemas);
166
173
  const viewNodes = viewIndex
167
174
  .getViewsForTypeUri(typeUri)
@@ -180,50 +187,50 @@ export const createDatabaseExtensions = Effect.fnUntraced(function* () {
180
187
  },
181
188
  }),
182
189
 
183
- // Objects of a type are not enumerated in the nav tree; navigating directly to the canonical
184
- // object path resolves the object on demand as a hidden child of its type node. Mirrors the
185
- // inbox feed-object resolver: a resolver keyed on path shape, not a connector.
190
+ // Every object of a type not just its views as a hidden child of its type node, so
191
+ // `…/database/<slug>/<objectId>` resolves via the generic `db` key even when the type has no
192
+ // dedicated section of its own. Disjoint from `schemaChildren`'s view nodes (`viewIndex.isView`
193
+ // excludes them) so the two connectors never emit a node with the same id under the same parent.
194
+ // The `db` key names the database subgraph — the generic key that guarantees every ECHO object a
195
+ // URL (see the design's "Unmapped nodes"); `object` addresses the same object via the collection
196
+ // subgraph.
186
197
  GraphBuilder.createExtension({
187
- id: 'typeCollectionObject',
188
- match: () => Option.none(),
189
- resolver: (qualifiedId, get) =>
190
- Effect.gen(function* () {
191
- const segments = qualifiedId.split('/');
192
- // Discriminator: the canonical object path `…/database/<slug>/<objectId>`.
193
- if (segments.at(-3) !== Paths.Segments.database) {
194
- return null;
195
- }
196
-
197
- const spaceId = Paths.getSpaceIdFromPath(qualifiedId);
198
- const objectId = segments.at(-1);
199
- if (!spaceId || !objectId || !Key.EntityId.isValid(objectId)) {
200
- return null;
201
- }
202
-
203
- const client = get(capabilities.atom(ClientCapabilities.Client)).at(0);
204
- const space = client?.spaces.get(spaceId);
205
- if (!space) {
206
- return null;
207
- }
198
+ id: 'databaseObjects',
199
+ url: { key: 'db', kind: 'item', path: [GraphPath.GroupSegments.system, GraphPath.Segments.database] },
200
+ match: (node) => {
201
+ const space = isSpace(node.properties.space) ? node.properties.space : undefined;
202
+ return node.type === SCHEMA_NODE_TYPE && space && Type.isType(node.data)
203
+ ? Option.some({ space, schema: node.data })
204
+ : Option.none();
205
+ },
206
+ connector: ({ space, schema }, get) => {
207
+ const client = get(capabilities.atom(ClientCapabilities.Client)).at(0);
208
+ const schemas = client ? get(client.graph.registry.query(Filter.type(Type.Type)).atom) : [];
209
+ const typeUri = Type.getURI(schema);
210
+ const viewIndex = buildViewIndex(get, space, schemas);
208
211
 
209
- const object = get(space.db.query(Filter.id(objectId)).atom).at(0);
210
- if (!object) {
211
- return null;
212
- }
212
+ // Feed-only objects (e.g. games appended via Feed.append) are not in the Automerge graph;
213
+ // includeFeeds resolves them too.
214
+ const objects = get(
215
+ space.db.query(Query.select(Filter.type(typeUri)).from(space.db, { includeFeeds: true })).atom,
216
+ );
213
217
 
214
- get(Obj.atom(object));
215
- const node = AppNode.makeObject({
216
- get,
217
- db: space.db,
218
- object,
219
- disposition: 'hidden',
220
- draggable: false,
221
- droppable: false,
222
- });
223
- // Resolver nodes are keyed by the requested path (not the local object id) so the parent
224
- // type node's child edge connects; `makeObject` uses the local id, so override it here.
225
- return node && { ...node, id: qualifiedId };
226
- }),
218
+ return Effect.succeed(
219
+ objects
220
+ .filter((object) => !viewIndex.isView(object))
221
+ .map((object) =>
222
+ AppNode.makeObject({
223
+ get,
224
+ db: space.db,
225
+ object,
226
+ disposition: 'hidden',
227
+ draggable: false,
228
+ droppable: false,
229
+ }),
230
+ )
231
+ .filter(isNonNullable),
232
+ );
233
+ },
227
234
  }),
228
235
 
229
236
  // Actions for schema nodes.
@@ -274,7 +281,7 @@ const createSchemaNode = ({
274
281
  const typename = Type.getTypename(schema);
275
282
  // The node id doubles as the `types/<slug>` path segment, so it must be slash- and colon-free:
276
283
  // a stored schema's entity id, or a static schema's typename.
277
- const slug = Paths.getTypeSlug(schema);
284
+ const slug = GraphPath.getTypeSlug(schema);
278
285
  const iconAnnotation =
279
286
  Type.getDatabase(schema) == null
280
287
  ? Option.getOrUndefined(Annotation.IconAnnotation.get(Type.getSchema(schema)))
@@ -304,13 +311,13 @@ const createSchemaNode = ({
304
311
  const iconHue = Type.getDatabase(schema) != null ? 'neutral' : iconAnnotation?.hue;
305
312
  return Node.make({
306
313
  id: nodeId,
307
- type: STATIC_SCHEMA_TYPE,
314
+ type: SCHEMA_NODE_TYPE,
308
315
  data: schema,
309
316
  properties: {
310
317
  label,
311
318
  icon,
312
319
  iconHue,
313
- // Selecting the type node opens a list of every object of this type (see TypeCollectionArticle);
320
+ // Selecting the type node opens a list of every object of this type (see TypeArticle);
314
321
  // objects resolve on demand as hidden children. View objects are its only visible children, so
315
322
  // without a view the node is a leaf (no `role: 'branch'`).
316
323
  testId: `spacePlugin.schemaNode.${typename}`,
@@ -42,14 +42,16 @@ export const createSettingsExtensions = Effect.fnUntraced(function* () {
42
42
  ]),
43
43
  });
44
44
 
45
- const childrenExtension = yield* GraphBuilder.createExtension({
46
- id: 'settingsSections',
45
+ // General and Members are separate extensions rather than one so each can be an id-less key (a single
46
+ // id-less key can address only one fixed node — its terminal segment IS the key).
47
+ const generalExtension = yield* GraphBuilder.createExtension({
48
+ id: 'settingsGeneral',
49
+ url: { key: 'settings', kind: 'singleton', path: [SETTINGS_SECTION_ID] },
47
50
  match: AppNodeMatcher.whenSpaceSettings,
48
- connector: (space) => {
49
- const personal = AppSpace.isPersonalSpace(space);
50
- return Effect.succeed([
51
+ connector: (space) =>
52
+ Effect.succeed([
51
53
  Node.make({
52
- id: 'general',
54
+ id: 'settings',
53
55
  type: `${meta.profile.key}.general`,
54
56
  data: `${meta.profile.key}.general`,
55
57
  properties: {
@@ -61,8 +63,18 @@ export const createSettingsExtensions = Effect.fnUntraced(function* () {
61
63
  testId: 'spacePlugin.general',
62
64
  },
63
65
  }),
64
- ...(!personal
65
- ? [
66
+ ]),
67
+ });
68
+
69
+ const membersExtension = yield* GraphBuilder.createExtension({
70
+ id: 'settingsMembers',
71
+ url: { key: 'members', kind: 'singleton', path: [SETTINGS_SECTION_ID] },
72
+ match: AppNodeMatcher.whenSpaceSettings,
73
+ connector: (space) =>
74
+ Effect.succeed(
75
+ AppSpace.isPersonalSpace(space)
76
+ ? []
77
+ : [
66
78
  Node.make({
67
79
  id: 'members',
68
80
  type: `${meta.profile.key}.members`,
@@ -76,11 +88,9 @@ export const createSettingsExtensions = Effect.fnUntraced(function* () {
76
88
  testId: 'spacePlugin.members',
77
89
  },
78
90
  }),
79
- ]
80
- : []),
81
- ]);
82
- },
91
+ ],
92
+ ),
83
93
  });
84
94
 
85
- return [sectionExtension, childrenExtension];
95
+ return [sectionExtension, generalExtension, membersExtension];
86
96
  });
@@ -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 * as Option from 'effect/Option';
7
7
 
8
8
  import { type Space, SpaceState, isSpace } from '@dxos/client/echo';
@@ -23,7 +23,8 @@ import { meta } from '#meta';
23
23
 
24
24
  export const DATABASE_SECTION_TYPE = `${meta.profile.key}.database`;
25
25
  export const COLLECTIONS_SECTION_TYPE = `${meta.profile.key}.collections`;
26
- export const STATIC_SCHEMA_TYPE = `${meta.profile.key}.static-schema`;
26
+ /** Tags every type node under the Database section — both static (compile-time) and database (dynamic) schemas. */
27
+ export const SCHEMA_NODE_TYPE = `${meta.profile.key}.static-schema`;
27
28
 
28
29
  //
29
30
  // Constants
@@ -5,7 +5,7 @@
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
7
  import { Capability } from '@dxos/app-framework';
8
- import { AppCapabilities, AppNode, AppNodeMatcher, AppSpace, Paths } from '@dxos/app-toolkit';
8
+ import { AppCapabilities, AppNode, AppNodeMatcher, AppSpace, GraphPath } from '@dxos/app-toolkit';
9
9
  import { type Space, SpaceState } from '@dxos/client/echo';
10
10
  import { Operation } from '@dxos/compute';
11
11
  import { Filter, Obj } from '@dxos/echo';
@@ -48,11 +48,12 @@ export const createSpaceExtensions = Effect.fnUntraced(function* () {
48
48
  GraphBuilder.createExtension({
49
49
  id: 'spaceHome',
50
50
  position: Position.first,
51
+ url: { key: 'home', kind: 'singleton', path: [] },
51
52
  match: AppNodeMatcher.whenSpace,
52
53
  connector: (space) =>
53
54
  Effect.succeed([
54
55
  {
55
- id: Paths.SPACE_HOME_SEGMENT,
56
+ id: GraphPath.SPACE_HOME_SEGMENT,
56
57
  type: SPACE_HOME_NODE_TYPE,
57
58
  data: SPACE_HOME_NODE_TYPE,
58
59
  properties: {
@@ -243,8 +244,6 @@ export const createSpaceExtensions = Effect.fnUntraced(function* () {
243
244
  return Effect.succeed([]);
244
245
  }
245
246
  },
246
- // TODO(graph-path-ids): Resolver temporarily disabled; redesign needed for path-based IDs.
247
- // resolver: (id, get) => { ... },
248
247
  }),
249
248
 
250
249
  // Communications section group — no single plugin owns this category; it lives here so the
@@ -252,13 +251,13 @@ export const createSpaceExtensions = Effect.fnUntraced(function* () {
252
251
  // future plugin-communications) should own this once one exists.
253
252
  // TODO(wittjosiah): Move to a dedicated communications plugin when one exists.
254
253
  GraphBuilder.createExtension({
255
- id: Paths.GroupSegments.communications,
254
+ id: GraphPath.GroupSegments.communications,
256
255
  match: AppNodeMatcher.whenSpace,
257
256
  connector: (space) =>
258
257
  Effect.succeed([
259
258
  AppNode.makeGroup({
260
- id: Paths.GroupSegments.communications,
261
- type: Paths.GroupTypes.communications,
259
+ id: GraphPath.GroupSegments.communications,
260
+ type: GraphPath.GroupTypes.communications,
262
261
  label: ['nav-tree-group-comm.label', { ns: meta.profile.key }],
263
262
  space,
264
263
  position: 100,
@@ -9,7 +9,7 @@ import { Capability } from '@dxos/app-framework';
9
9
  import { Operation } from '@dxos/compute';
10
10
  import { Collection, Type } from '@dxos/echo';
11
11
  import { createDefaultSchema } from '@dxos/schema';
12
- import { Organization, Person, Project, Task } from '@dxos/types';
12
+ import { Organization, Person, Task } from '@dxos/types';
13
13
 
14
14
  import { SpaceOperation } from '#operations';
15
15
  import { SpaceCapabilities } from '#types';
@@ -71,19 +71,6 @@ export default Capability.makeModule(
71
71
  });
72
72
  }),
73
73
  }),
74
- Capability.contributes(SpaceCapabilities.CreateObjectEntry, {
75
- id: Type.getTypename(Project.Project),
76
- inputSchema: Type.getSchema(Project.Project),
77
- createObject: (props, options) =>
78
- Effect.gen(function* () {
79
- const object = Project.make(props);
80
- return yield* Operation.invoke(SpaceOperation.AddObject, {
81
- object,
82
- target: options.target,
83
- targetNodeId: options.targetNodeId,
84
- });
85
- }),
86
- }),
87
74
  Capability.contributes(SpaceCapabilities.CreateObjectEntry, {
88
75
  id: Type.getTypename(Task.Task),
89
76
  inputSchema: Type.getSchema(Task.Task),
@@ -12,7 +12,10 @@ export const CreateObject = Capability.lazy('CreateObject', () => import('./crea
12
12
  export const IdentityCreated = Capability.lazy('IdentityCreated', () => import('./identity-created'));
13
13
  export { NavigationHandler } from './navigation-handler';
14
14
  export type { NavigationHandlerOptions } from './navigation-handler';
15
- export const NavigationResolver = Capability.lazy('NavigationResolver', () => import('./navigation-resolver'));
15
+ export const NavigationTargetResolver = Capability.lazy(
16
+ 'NavigationTargetResolver',
17
+ () => import('./navigation-target-resolver'),
18
+ );
16
19
  export const OperationHandler = Capability.lazy<OperationHandlerSet.OperationHandlerSet>(
17
20
  'OperationHandler',
18
21
  () => import('./operation-handler'),