@dxos/plugin-space 0.8.4-main.21d9917 → 0.8.4-main.2244d791bb

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 (231) hide show
  1. package/dist/lib/browser/CollectionArticle-LKTAABXP.mjs +128 -0
  2. package/dist/lib/browser/CollectionArticle-LKTAABXP.mjs.map +7 -0
  3. package/dist/lib/browser/{ObjectCardStack-TWHN6C2Y.mjs → ObjectCardStack-CXNBCSMR.mjs} +2 -2
  4. package/dist/lib/browser/ObjectCardStack-CXNBCSMR.mjs.map +7 -0
  5. package/dist/lib/browser/{ObjectDetails-GEDIISKK.mjs → ObjectDetails-HXV4IQEM.mjs} +6 -5
  6. package/dist/lib/browser/ObjectDetails-HXV4IQEM.mjs.map +7 -0
  7. package/dist/lib/browser/{RecordArticle-W57QE7QV.mjs → RecordArticle-36LDKFWF.mjs} +11 -10
  8. package/dist/lib/browser/RecordArticle-36LDKFWF.mjs.map +7 -0
  9. package/dist/lib/browser/{app-graph-builder-SJHTZXZF.mjs → app-graph-builder-GLV46QSI.mjs} +26 -19
  10. package/dist/lib/browser/app-graph-builder-GLV46QSI.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-serializer-7AT7QMSK.mjs → app-graph-serializer-VOLRDNVE.mjs} +9 -8
  12. package/dist/lib/browser/app-graph-serializer-VOLRDNVE.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-ZT2VPYRM.mjs → chunk-7D63MVRS.mjs} +3 -3
  14. package/dist/lib/browser/chunk-7D63MVRS.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-4WZUGLQQ.mjs → chunk-A7ZCVQGZ.mjs} +10 -9
  16. package/dist/lib/browser/chunk-A7ZCVQGZ.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-CCRSHECL.mjs → chunk-KGLWYGIF.mjs} +4 -3
  18. package/dist/lib/browser/chunk-KGLWYGIF.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-AWVAX26X.mjs → chunk-NF3ZFAB4.mjs} +2 -2
  20. package/dist/lib/browser/{chunk-SUI34XSA.mjs → chunk-WAOJLA2S.mjs} +12 -12
  21. package/dist/lib/browser/chunk-WAOJLA2S.mjs.map +7 -0
  22. package/dist/lib/browser/{chunk-3X2EA2OA.mjs → chunk-XRTOZE23.mjs} +128 -137
  23. package/dist/lib/browser/chunk-XRTOZE23.mjs.map +7 -0
  24. package/dist/lib/browser/cli/index.mjs +31 -29
  25. package/dist/lib/browser/cli/index.mjs.map +3 -3
  26. package/dist/lib/browser/index.mjs +58 -53
  27. package/dist/lib/browser/index.mjs.map +3 -3
  28. package/dist/lib/browser/meta.json +1 -1
  29. package/dist/lib/browser/{operation-resolver-SIRQT36Z.mjs → operation-resolver-PJJ3PCM7.mjs} +45 -42
  30. package/dist/lib/browser/operation-resolver-PJJ3PCM7.mjs.map +7 -0
  31. package/dist/lib/browser/{react-root-PI7VTZUZ.mjs → react-root-MRIDHLHH.mjs} +8 -8
  32. package/dist/lib/browser/react-root-MRIDHLHH.mjs.map +7 -0
  33. package/dist/lib/browser/{react-surface-BPE7VWI7.mjs → react-surface-ARZZ343H.mjs} +38 -37
  34. package/dist/lib/browser/react-surface-ARZZ343H.mjs.map +7 -0
  35. package/dist/lib/browser/{repair-CJG26D52.mjs → repair-DKU4TUD2.mjs} +2 -2
  36. package/dist/lib/browser/{settings-ZS2AQ73E.mjs → settings-M2DMD2ZA.mjs} +5 -4
  37. package/dist/lib/browser/settings-M2DMD2ZA.mjs.map +7 -0
  38. package/dist/lib/browser/{spaces-ready-OQDGWUOS.mjs → spaces-ready-XWJUJ43N.mjs} +13 -12
  39. package/dist/lib/browser/spaces-ready-XWJUJ43N.mjs.map +7 -0
  40. package/dist/lib/browser/{state-7YZQB2KY.mjs → state-V637BLIM.mjs} +5 -5
  41. package/dist/lib/browser/state-V637BLIM.mjs.map +7 -0
  42. package/dist/lib/browser/types/index.mjs +1 -1
  43. package/dist/lib/node-esm/CollectionArticle-ONQMZ7BQ.mjs +129 -0
  44. package/dist/lib/node-esm/CollectionArticle-ONQMZ7BQ.mjs.map +7 -0
  45. package/dist/lib/node-esm/{ObjectCardStack-C5ZXRKP7.mjs → ObjectCardStack-EHXPNRQW.mjs} +2 -2
  46. package/dist/lib/node-esm/ObjectCardStack-EHXPNRQW.mjs.map +7 -0
  47. package/dist/lib/node-esm/{ObjectDetails-6ZLDRKCO.mjs → ObjectDetails-N73UI4ZL.mjs} +6 -5
  48. package/dist/lib/node-esm/ObjectDetails-N73UI4ZL.mjs.map +7 -0
  49. package/dist/lib/node-esm/{RecordArticle-SSV74Z46.mjs → RecordArticle-CMEXNNOZ.mjs} +11 -10
  50. package/dist/lib/node-esm/RecordArticle-CMEXNNOZ.mjs.map +7 -0
  51. package/dist/lib/node-esm/{app-graph-builder-HZ3XXDFZ.mjs → app-graph-builder-KCEHEKVS.mjs} +26 -19
  52. package/dist/lib/node-esm/app-graph-builder-KCEHEKVS.mjs.map +7 -0
  53. package/dist/lib/node-esm/{app-graph-serializer-WJ2TIQG6.mjs → app-graph-serializer-7C4MV5NB.mjs} +9 -8
  54. package/dist/lib/node-esm/app-graph-serializer-7C4MV5NB.mjs.map +7 -0
  55. package/dist/lib/node-esm/{chunk-2SW6S2BB.mjs → chunk-5N3YIAXD.mjs} +3 -3
  56. package/dist/lib/node-esm/chunk-5N3YIAXD.mjs.map +7 -0
  57. package/dist/lib/node-esm/{chunk-JOBIWCBC.mjs → chunk-A5A7M37T.mjs} +10 -9
  58. package/dist/lib/node-esm/chunk-A5A7M37T.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-7KMYUWSR.mjs → chunk-FB5YNROS.mjs} +12 -12
  60. package/dist/lib/node-esm/chunk-FB5YNROS.mjs.map +7 -0
  61. package/dist/lib/node-esm/{chunk-MPL6NHQX.mjs → chunk-NYSDQPNM.mjs} +4 -3
  62. package/dist/lib/node-esm/chunk-NYSDQPNM.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-HREWB23G.mjs → chunk-PG7DNOEX.mjs} +2 -2
  64. package/dist/lib/node-esm/{chunk-EYS3L2NO.mjs → chunk-QDIOQTXY.mjs} +128 -137
  65. package/dist/lib/node-esm/chunk-QDIOQTXY.mjs.map +7 -0
  66. package/dist/lib/node-esm/cli/index.mjs +31 -29
  67. package/dist/lib/node-esm/cli/index.mjs.map +3 -3
  68. package/dist/lib/node-esm/index.mjs +58 -53
  69. package/dist/lib/node-esm/index.mjs.map +3 -3
  70. package/dist/lib/node-esm/meta.json +1 -1
  71. package/dist/lib/node-esm/{operation-resolver-ZE3XJL5J.mjs → operation-resolver-2K7N4KYC.mjs} +45 -42
  72. package/dist/lib/node-esm/operation-resolver-2K7N4KYC.mjs.map +7 -0
  73. package/dist/lib/node-esm/{react-root-KUXM33JI.mjs → react-root-LKSSWFGF.mjs} +8 -8
  74. package/dist/lib/node-esm/react-root-LKSSWFGF.mjs.map +7 -0
  75. package/dist/lib/node-esm/{react-surface-STCQKUZ4.mjs → react-surface-QG5RNBPD.mjs} +38 -37
  76. package/dist/lib/node-esm/react-surface-QG5RNBPD.mjs.map +7 -0
  77. package/dist/lib/node-esm/{repair-G3ZW3VG3.mjs → repair-C2H6JQCL.mjs} +2 -2
  78. package/dist/lib/node-esm/{settings-PVI2VG56.mjs → settings-VCPCNBOY.mjs} +5 -4
  79. package/dist/lib/node-esm/settings-VCPCNBOY.mjs.map +7 -0
  80. package/dist/lib/node-esm/{spaces-ready-R744OHQG.mjs → spaces-ready-5JOGEWON.mjs} +13 -12
  81. package/dist/lib/node-esm/spaces-ready-5JOGEWON.mjs.map +7 -0
  82. package/dist/lib/node-esm/{state-XE5YGPHM.mjs → state-5MCEPWN3.mjs} +5 -5
  83. package/dist/lib/node-esm/state-5MCEPWN3.mjs.map +7 -0
  84. package/dist/lib/node-esm/types/index.mjs +1 -1
  85. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  86. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +2 -1
  87. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -1
  88. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +1 -1
  89. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -1
  90. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts +2 -2
  91. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts.map +1 -1
  92. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts +1 -1
  93. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts.map +1 -1
  94. package/dist/types/src/capabilities/operation-resolver/index.d.ts +1 -1
  95. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -1
  96. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +2 -2
  97. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -1
  98. package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/react-surface/index.d.ts +1 -1
  100. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -1
  101. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +2 -2
  102. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/settings/index.d.ts +1 -1
  104. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/settings/settings.d.ts +3 -2
  106. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/spaces-ready/spaces-ready.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/state/state.d.ts.map +1 -1
  109. package/dist/types/src/cli/commands/database/add.d.ts.map +1 -1
  110. package/dist/types/src/cli/plugin.d.ts.map +1 -1
  111. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  112. package/dist/types/src/components/CollectionArticle.d.ts +2 -2
  113. package/dist/types/src/components/CollectionArticle.d.ts.map +1 -1
  114. package/dist/types/src/components/CollectionSection.d.ts +1 -1
  115. package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
  116. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  117. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts +1 -1
  118. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +4 -1
  119. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  120. package/dist/types/src/components/JoinDialog/JoinDialog.d.ts.map +1 -1
  121. package/dist/types/src/components/MembersContainer/MembersContainer.d.ts.map +1 -1
  122. package/dist/types/src/components/MembersContainer/MembersContainer.stories.d.ts +1 -1
  123. package/dist/types/src/components/ObjectDetails/ObjectDetails.d.ts +1 -1
  124. package/dist/types/src/components/ObjectDetails/ObjectDetails.d.ts.map +1 -1
  125. package/dist/types/src/components/RecordArticle.d.ts +1 -1
  126. package/dist/types/src/components/RecordArticle.d.ts.map +1 -1
  127. package/dist/types/src/components/RecordArticle.stories.d.ts +1 -1
  128. package/dist/types/src/components/RecordArticle.stories.d.ts.map +1 -1
  129. package/dist/types/src/components/SchemaContainer.d.ts.map +1 -1
  130. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  131. package/dist/types/src/components/SpacePresence/SpacePresence.d.ts.map +1 -1
  132. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts +4 -1
  133. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.d.ts.map +1 -1
  134. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts +4 -1
  135. package/dist/types/src/components/SpaceSettings/SpaceSettingsContainer.stories.d.ts.map +1 -1
  136. package/dist/types/src/components/index.d.ts +3 -3
  137. package/dist/types/src/components/index.d.ts.map +1 -1
  138. package/dist/types/src/hooks/useActiveSpace.d.ts.map +1 -1
  139. package/dist/types/src/types/events.d.ts.map +1 -1
  140. package/dist/types/src/types/types.d.ts +18 -12
  141. package/dist/types/src/types/types.d.ts.map +1 -1
  142. package/dist/types/src/util.d.ts +2 -1
  143. package/dist/types/src/util.d.ts.map +1 -1
  144. package/dist/types/tsconfig.tsbuildinfo +1 -1
  145. package/package.json +66 -65
  146. package/src/SpacePlugin.ts +59 -40
  147. package/src/capabilities/app-graph-builder/app-graph-builder.ts +17 -13
  148. package/src/capabilities/app-graph-serializer/app-graph-serializer.ts +5 -4
  149. package/src/capabilities/operation-resolver/operation-resolver.ts +31 -29
  150. package/src/capabilities/react-root/react-root.tsx +3 -3
  151. package/src/capabilities/react-surface/react-surface.tsx +34 -32
  152. package/src/capabilities/settings/settings.ts +3 -2
  153. package/src/capabilities/spaces-ready/spaces-ready.ts +8 -7
  154. package/src/capabilities/state/state.ts +3 -3
  155. package/src/cli/commands/database/add.ts +7 -8
  156. package/src/cli/commands/database/query/query.ts +1 -1
  157. package/src/cli/commands/database/remove.ts +2 -2
  158. package/src/cli/commands/database/stats.ts +1 -1
  159. package/src/cli/plugin.ts +33 -26
  160. package/src/components/AwaitingObject.tsx +4 -3
  161. package/src/components/CollectionArticle.tsx +71 -72
  162. package/src/components/CollectionSection.tsx +1 -1
  163. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +1 -1
  164. package/src/components/CreateDialog/CreateObjectDialog.tsx +20 -17
  165. package/src/components/CreateDialog/CreateObjectPanel.tsx +38 -39
  166. package/src/components/CreateDialog/CreateSpaceDialog.tsx +21 -21
  167. package/src/components/JoinDialog/JoinDialog.tsx +8 -7
  168. package/src/components/MembersContainer/MembersContainer.stories.tsx +1 -1
  169. package/src/components/MembersContainer/MembersContainer.tsx +45 -48
  170. package/src/components/ObjectCardStack/ObjectCardStack.tsx +1 -1
  171. package/src/components/ObjectDetails/BaseObjectSettings.stories.tsx +4 -4
  172. package/src/components/ObjectDetails/ObjectDetails.tsx +6 -5
  173. package/src/components/ObjectRenamePopover/ObjectRenamePopover.tsx +3 -3
  174. package/src/components/RecordArticle.stories.tsx +6 -5
  175. package/src/components/RecordArticle.tsx +23 -21
  176. package/src/components/SchemaContainer.tsx +20 -17
  177. package/src/components/SpacePluginSettings.tsx +34 -31
  178. package/src/components/SpacePresence/SpacePresence.stories.tsx +1 -1
  179. package/src/components/SpacePresence/SpacePresence.tsx +2 -1
  180. package/src/components/SpaceRenamePopover/SpaceRenamePopover.tsx +3 -3
  181. package/src/components/SpaceSettings/SpaceSettingsContainer.stories.tsx +1 -1
  182. package/src/components/SpaceSettings/SpaceSettingsContainer.tsx +161 -179
  183. package/src/components/SyncStatus/InlineSyncStatus.tsx +1 -1
  184. package/src/components/SyncStatus/SyncStatus.stories.tsx +1 -1
  185. package/src/components/ViewEditor.tsx +1 -1
  186. package/src/hooks/useActiveSpace.ts +5 -4
  187. package/src/hooks/useInputSurfaceLookup.tsx +3 -3
  188. package/src/translations.ts +2 -2
  189. package/src/types/events.ts +3 -2
  190. package/src/types/types.ts +10 -3
  191. package/src/util.tsx +9 -6
  192. package/dist/lib/browser/CollectionArticle-XPNA6EHZ.mjs +0 -129
  193. package/dist/lib/browser/CollectionArticle-XPNA6EHZ.mjs.map +0 -7
  194. package/dist/lib/browser/ObjectCardStack-TWHN6C2Y.mjs.map +0 -7
  195. package/dist/lib/browser/ObjectDetails-GEDIISKK.mjs.map +0 -7
  196. package/dist/lib/browser/RecordArticle-W57QE7QV.mjs.map +0 -7
  197. package/dist/lib/browser/app-graph-builder-SJHTZXZF.mjs.map +0 -7
  198. package/dist/lib/browser/app-graph-serializer-7AT7QMSK.mjs.map +0 -7
  199. package/dist/lib/browser/chunk-3X2EA2OA.mjs.map +0 -7
  200. package/dist/lib/browser/chunk-4WZUGLQQ.mjs.map +0 -7
  201. package/dist/lib/browser/chunk-CCRSHECL.mjs.map +0 -7
  202. package/dist/lib/browser/chunk-SUI34XSA.mjs.map +0 -7
  203. package/dist/lib/browser/chunk-ZT2VPYRM.mjs.map +0 -7
  204. package/dist/lib/browser/operation-resolver-SIRQT36Z.mjs.map +0 -7
  205. package/dist/lib/browser/react-root-PI7VTZUZ.mjs.map +0 -7
  206. package/dist/lib/browser/react-surface-BPE7VWI7.mjs.map +0 -7
  207. package/dist/lib/browser/settings-ZS2AQ73E.mjs.map +0 -7
  208. package/dist/lib/browser/spaces-ready-OQDGWUOS.mjs.map +0 -7
  209. package/dist/lib/browser/state-7YZQB2KY.mjs.map +0 -7
  210. package/dist/lib/node-esm/CollectionArticle-WGHNZNO2.mjs +0 -130
  211. package/dist/lib/node-esm/CollectionArticle-WGHNZNO2.mjs.map +0 -7
  212. package/dist/lib/node-esm/ObjectCardStack-C5ZXRKP7.mjs.map +0 -7
  213. package/dist/lib/node-esm/ObjectDetails-6ZLDRKCO.mjs.map +0 -7
  214. package/dist/lib/node-esm/RecordArticle-SSV74Z46.mjs.map +0 -7
  215. package/dist/lib/node-esm/app-graph-builder-HZ3XXDFZ.mjs.map +0 -7
  216. package/dist/lib/node-esm/app-graph-serializer-WJ2TIQG6.mjs.map +0 -7
  217. package/dist/lib/node-esm/chunk-2SW6S2BB.mjs.map +0 -7
  218. package/dist/lib/node-esm/chunk-7KMYUWSR.mjs.map +0 -7
  219. package/dist/lib/node-esm/chunk-EYS3L2NO.mjs.map +0 -7
  220. package/dist/lib/node-esm/chunk-JOBIWCBC.mjs.map +0 -7
  221. package/dist/lib/node-esm/chunk-MPL6NHQX.mjs.map +0 -7
  222. package/dist/lib/node-esm/operation-resolver-ZE3XJL5J.mjs.map +0 -7
  223. package/dist/lib/node-esm/react-root-KUXM33JI.mjs.map +0 -7
  224. package/dist/lib/node-esm/react-surface-STCQKUZ4.mjs.map +0 -7
  225. package/dist/lib/node-esm/settings-PVI2VG56.mjs.map +0 -7
  226. package/dist/lib/node-esm/spaces-ready-R744OHQG.mjs.map +0 -7
  227. package/dist/lib/node-esm/state-XE5YGPHM.mjs.map +0 -7
  228. /package/dist/lib/browser/{chunk-AWVAX26X.mjs.map → chunk-NF3ZFAB4.mjs.map} +0 -0
  229. /package/dist/lib/browser/{repair-CJG26D52.mjs.map → repair-DKU4TUD2.mjs.map} +0 -0
  230. /package/dist/lib/node-esm/{chunk-HREWB23G.mjs.map → chunk-PG7DNOEX.mjs.map} +0 -0
  231. /package/dist/lib/node-esm/{repair-G3ZW3VG3.mjs.map → repair-C2H6JQCL.mjs.map} +0 -0
@@ -0,0 +1,128 @@
1
+ import {
2
+ meta
3
+ } from "./chunk-HSMQFM57.mjs";
4
+
5
+ // src/components/CollectionArticle.tsx
6
+ import React, { useCallback, useMemo } from "react";
7
+ import { useCapabilities, useOperationInvoker } from "@dxos/app-framework/ui";
8
+ import { AppCapabilities, LayoutOperation } from "@dxos/app-toolkit";
9
+ import { Filter, Obj } from "@dxos/echo";
10
+ import { useClient } from "@dxos/react-client";
11
+ import { getSpace, useQuery } from "@dxos/react-client/echo";
12
+ import { Layout, ScrollArea, Toolbar, toLocalizedString, useTranslation } from "@dxos/react-ui";
13
+ import { Card, Mosaic } from "@dxos/react-ui-mosaic";
14
+ import { SearchList, useSearchListResults } from "@dxos/react-ui-searchlist";
15
+ import { Collection } from "@dxos/schema";
16
+ import { getStyles } from "@dxos/ui-theme";
17
+ var useMetadataResolver = () => {
18
+ const allMetadata = useCapabilities(AppCapabilities.Metadata);
19
+ return useCallback((typename) => allMetadata.find((m) => m.id === typename)?.metadata ?? {}, [
20
+ allMetadata
21
+ ]);
22
+ };
23
+ var CollectionArticle = ({ subject }) => {
24
+ const { t } = useTranslation(meta.id);
25
+ const resolveMetadata = useMetadataResolver();
26
+ const { items, handleSearch } = useCollectionItems(subject, resolveMetadata);
27
+ return /* @__PURE__ */ React.createElement(Layout.Main, {
28
+ toolbar: true
29
+ }, /* @__PURE__ */ React.createElement(SearchList.Root, {
30
+ onSearch: handleSearch
31
+ }, /* @__PURE__ */ React.createElement(Toolbar.Root, null, /* @__PURE__ */ React.createElement(SearchList.Input, {
32
+ placeholder: t("search placeholder")
33
+ })), /* @__PURE__ */ React.createElement(SearchList.Content, null, /* @__PURE__ */ React.createElement(Mosaic.Container, {
34
+ asChild: true
35
+ }, /* @__PURE__ */ React.createElement(ScrollArea.Root, {
36
+ orientation: "vertical"
37
+ }, /* @__PURE__ */ React.createElement(ScrollArea.Viewport, {
38
+ classNames: "p-2"
39
+ }, /* @__PURE__ */ React.createElement(Mosaic.Stack, {
40
+ items,
41
+ getId: (item) => item.id,
42
+ Tile: ObjectTile
43
+ })))))));
44
+ };
45
+ var ObjectTile = (props) => {
46
+ const item = props.data;
47
+ const { t } = useTranslation(meta.id);
48
+ const { invokeSync } = useOperationInvoker();
49
+ const typename = Obj.getTypename(item.object) ?? "";
50
+ const label = Obj.getLabel(item.object) ?? toLocalizedString([
51
+ "object name placeholder",
52
+ {
53
+ ns: typename,
54
+ defaultValue: item.id
55
+ }
56
+ ], t);
57
+ const styles = item.iconHue ? getStyles(item.iconHue) : void 0;
58
+ const handleClick = () => {
59
+ invokeSync(LayoutOperation.Open, {
60
+ subject: [
61
+ item.id
62
+ ]
63
+ });
64
+ };
65
+ return /* @__PURE__ */ React.createElement(Card.Root, {
66
+ fullWidth: true
67
+ }, /* @__PURE__ */ React.createElement(Card.Toolbar, null, /* @__PURE__ */ React.createElement(Card.ToolbarIconButton, {
68
+ variant: "ghost",
69
+ label,
70
+ icon: item.icon,
71
+ iconOnly: true,
72
+ iconClassNames: styles?.icon
73
+ }), /* @__PURE__ */ React.createElement(Card.Title, {
74
+ onClick: handleClick
75
+ }, label), /* @__PURE__ */ React.createElement(Card.Menu, null)));
76
+ };
77
+ var CollectionArticle_default = CollectionArticle;
78
+ var useRegularCollectionItems = (collection) => {
79
+ return useMemo(() => (collection.objects ?? []).map((ref) => ref.target).filter((obj) => Obj.isObject(obj)), [
80
+ collection.objects
81
+ ]);
82
+ };
83
+ var useManagedCollectionItems = (collection) => {
84
+ const client = useClient();
85
+ const space = getSpace(collection);
86
+ const schema = useMemo(() => client.graph.schemaRegistry.query({
87
+ typename: collection.key,
88
+ location: [
89
+ "runtime"
90
+ ]
91
+ }).runSync()[0], [
92
+ client,
93
+ collection
94
+ ]);
95
+ return useQuery(space?.db, schema ? Filter.type(schema) : Filter.nothing());
96
+ };
97
+ var useCollectionItems = (collection, resolveMetadata) => {
98
+ const isManaged = Obj.instanceOf(Collection.Managed, collection);
99
+ const regularObjects = useRegularCollectionItems(collection);
100
+ const managedObjects = useManagedCollectionItems(collection);
101
+ const objects = isManaged ? managedObjects : regularObjects;
102
+ const items = useMemo(() => objects.map((obj) => {
103
+ const typename = Obj.getTypename(obj);
104
+ const metadata = typename ? resolveMetadata(typename) : {};
105
+ return {
106
+ id: Obj.getDXN(obj).toString(),
107
+ object: obj,
108
+ icon: metadata.icon ?? "ph--placeholder--regular",
109
+ iconHue: metadata.iconHue
110
+ };
111
+ }), [
112
+ objects,
113
+ resolveMetadata
114
+ ]);
115
+ const { results, handleSearch } = useSearchListResults({
116
+ items,
117
+ extract: (item) => Obj.getLabel(item.object) ?? item.id
118
+ });
119
+ return {
120
+ items: results,
121
+ handleSearch
122
+ };
123
+ };
124
+ export {
125
+ CollectionArticle,
126
+ CollectionArticle_default as default
127
+ };
128
+ //# sourceMappingURL=CollectionArticle-LKTAABXP.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/CollectionArticle.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { useCapabilities, useOperationInvoker } from '@dxos/app-framework/ui';\nimport { AppCapabilities, LayoutOperation } from '@dxos/app-toolkit';\nimport { type SurfaceComponentProps } from '@dxos/app-toolkit/ui';\nimport { Filter, Obj } from '@dxos/echo';\nimport { useClient } from '@dxos/react-client';\nimport { getSpace, useQuery } from '@dxos/react-client/echo';\nimport { Layout, ScrollArea, Toolbar, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { Card, Mosaic, type MosaicStackTileComponent } from '@dxos/react-ui-mosaic';\nimport { SearchList, useSearchListResults } from '@dxos/react-ui-searchlist';\nimport { Collection } from '@dxos/schema';\nimport { getStyles } from '@dxos/ui-theme';\n\nimport { meta } from '../meta';\n\n/**\n * Hook to resolve metadata (icon, iconHue, etc.) for objects based on their typename.\n */\nconst useMetadataResolver = () => {\n const allMetadata = useCapabilities(AppCapabilities.Metadata);\n return useCallback((typename: string) => allMetadata.find((m) => m.id === typename)?.metadata ?? {}, [allMetadata]);\n};\n\n/**\n * Article view for collections.\n */\nexport const CollectionArticle = ({ subject }: SurfaceComponentProps<Collection.Collection | Collection.Managed>) => {\n const { t } = useTranslation(meta.id);\n const resolveMetadata = useMetadataResolver();\n const { items, handleSearch } = useCollectionItems(subject, resolveMetadata);\n\n return (\n <Layout.Main toolbar>\n <SearchList.Root onSearch={handleSearch}>\n <Toolbar.Root>\n <SearchList.Input placeholder={t('search placeholder')} />\n </Toolbar.Root>\n <SearchList.Content>\n <Mosaic.Container asChild>\n <ScrollArea.Root orientation='vertical'>\n <ScrollArea.Viewport classNames='p-2'>\n <Mosaic.Stack items={items} getId={(item) => item.id} Tile={ObjectTile} />\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n </Mosaic.Container>\n </SearchList.Content>\n </SearchList.Root>\n </Layout.Main>\n );\n};\n\ntype ObjectItem = {\n id: string;\n object: Obj.Unknown;\n icon: string;\n iconHue?: string;\n};\n\nconst ObjectTile: MosaicStackTileComponent<ObjectItem> = (props) => {\n const item = props.data;\n const { t } = useTranslation(meta.id);\n const { invokeSync } = useOperationInvoker();\n\n const typename = Obj.getTypename(item.object) ?? '';\n const label =\n Obj.getLabel(item.object) ??\n toLocalizedString(['object name placeholder', { ns: typename, defaultValue: item.id }], t);\n const styles = item.iconHue ? getStyles(item.iconHue) : undefined;\n\n const handleClick = () => {\n invokeSync(LayoutOperation.Open, { subject: [item.id] });\n };\n\n return (\n <Card.Root fullWidth>\n <Card.Toolbar>\n <Card.ToolbarIconButton variant='ghost' label={label} icon={item.icon} iconOnly iconClassNames={styles?.icon} />\n <Card.Title onClick={handleClick}>{label}</Card.Title>\n <Card.Menu />\n </Card.Toolbar>\n </Card.Root>\n );\n};\n\nexport default CollectionArticle;\n\n/**\n * Hook to get items from a regular collection.\n */\nconst useRegularCollectionItems = (collection: Collection.Collection): Obj.Unknown[] => {\n return useMemo(\n () => (collection.objects ?? []).map((ref) => ref.target).filter((obj): obj is Obj.Unknown => Obj.isObject(obj)),\n [collection.objects],\n );\n};\n\n/**\n * Hook to get items from a managed collection by querying the space.\n */\nconst useManagedCollectionItems = (collection: Collection.Managed): Obj.Unknown[] => {\n const client = useClient();\n const space = getSpace(collection);\n\n const schema = useMemo(\n () => client.graph.schemaRegistry.query({ typename: collection.key, location: ['runtime'] }).runSync()[0],\n [client, collection],\n );\n\n return useQuery(space?.db, schema ? Filter.type(schema) : Filter.nothing());\n};\n\ntype MetadataResolver = (typename: string) => { icon?: string; iconHue?: string };\n\n/**\n * Combined hook to get collection items with search/filter support.\n */\nconst useCollectionItems = (\n collection: Collection.Collection | Collection.Managed,\n resolveMetadata: MetadataResolver,\n) => {\n const isManaged = Obj.instanceOf(Collection.Managed, collection);\n\n // Call both hooks unconditionally to satisfy React's rules of hooks.\n const regularObjects = useRegularCollectionItems(collection as Collection.Collection);\n const managedObjects = useManagedCollectionItems(collection as Collection.Managed);\n\n const objects = isManaged ? managedObjects : regularObjects;\n\n // Convert objects to items with resolved metadata.\n const items = useMemo(\n () =>\n objects.map((obj) => {\n const typename = Obj.getTypename(obj);\n const metadata = typename ? resolveMetadata(typename) : {};\n return {\n id: Obj.getDXN(obj).toString(),\n object: obj,\n icon: metadata.icon ?? 'ph--placeholder--regular',\n iconHue: metadata.iconHue,\n } satisfies ObjectItem;\n }),\n [objects, resolveMetadata],\n );\n\n // Use searchlist results for filtering.\n const { results, handleSearch } = useSearchListResults({\n items,\n extract: (item) => Obj.getLabel(item.object) ?? item.id,\n });\n\n return { items: results, handleSearch };\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "useCallback", "useMemo", "useCapabilities", "useOperationInvoker", "AppCapabilities", "LayoutOperation", "Filter", "Obj", "useClient", "getSpace", "useQuery", "Layout", "ScrollArea", "Toolbar", "toLocalizedString", "useTranslation", "Card", "Mosaic", "SearchList", "useSearchListResults", "Collection", "getStyles", "useMetadataResolver", "allMetadata", "useCapabilities", "AppCapabilities", "Metadata", "useCallback", "typename", "find", "m", "id", "metadata", "CollectionArticle", "subject", "t", "useTranslation", "meta", "resolveMetadata", "items", "handleSearch", "useCollectionItems", "Layout", "Main", "toolbar", "SearchList", "Root", "onSearch", "Toolbar", "Input", "placeholder", "Content", "Mosaic", "Container", "asChild", "ScrollArea", "orientation", "Viewport", "classNames", "Stack", "getId", "item", "Tile", "ObjectTile", "props", "data", "invokeSync", "useOperationInvoker", "Obj", "getTypename", "object", "label", "getLabel", "toLocalizedString", "ns", "defaultValue", "styles", "iconHue", "getStyles", "undefined", "handleClick", "LayoutOperation", "Open", "Card", "fullWidth", "ToolbarIconButton", "variant", "icon", "iconOnly", "iconClassNames", "Title", "onClick", "Menu", "useRegularCollectionItems", "collection", "useMemo", "objects", "map", "ref", "target", "filter", "obj", "isObject", "useManagedCollectionItems", "client", "useClient", "space", "getSpace", "schema", "graph", "schemaRegistry", "query", "key", "location", "runSync", "useQuery", "db", "Filter", "type", "nothing", "isManaged", "instanceOf", "Collection", "Managed", "regularObjects", "managedObjects", "getDXN", "toString", "results", "useSearchListResults", "extract"]
7
+ }
@@ -7,9 +7,9 @@ import React2, { forwardRef } from "react";
7
7
  import { Obj as Obj2 } from "@dxos/echo";
8
8
  import { Filter, useQuery, useSchema } from "@dxos/react-client/echo";
9
9
  import { Callout, Toolbar, useTranslation } from "@dxos/react-ui";
10
+ import { Layout } from "@dxos/react-ui";
10
11
  import { useSelected } from "@dxos/react-ui-attention";
11
12
  import { Card } from "@dxos/react-ui-mosaic";
12
- import { Layout } from "@dxos/react-ui-mosaic";
13
13
  import { CardStack, StackItem } from "@dxos/react-ui-stack";
14
14
  import { getTypenameFromQuery } from "@dxos/schema";
15
15
  import { isNonNullable as isNonNullable2 } from "@dxos/util";
@@ -145,4 +145,4 @@ var ObjectCardStack_default = ObjectCardStack;
145
145
  export {
146
146
  ObjectCardStack_default as default
147
147
  };
148
- //# sourceMappingURL=ObjectCardStack-TWHN6C2Y.mjs.map
148
+ //# sourceMappingURL=ObjectCardStack-CXNBCSMR.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ObjectCardStack/ObjectCardStack.tsx", "../../../src/components/ObjectCardStack/ObjectForm.tsx", "../../../src/components/ObjectCardStack/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { forwardRef } from 'react';\n\nimport { Obj } from '@dxos/echo';\nimport { Filter, useQuery, useSchema } from '@dxos/react-client/echo';\nimport { Callout, Toolbar, useTranslation } from '@dxos/react-ui';\nimport { Layout } from '@dxos/react-ui';\nimport { useSelected } from '@dxos/react-ui-attention';\nimport { Card } from '@dxos/react-ui-mosaic';\nimport { CardStack, StackItem } from '@dxos/react-ui-stack';\nimport { type View, getTypenameFromQuery } from '@dxos/schema';\nimport { isNonNullable } from '@dxos/util';\n\nimport { meta } from '../../meta';\n\nimport { ObjectForm } from './ObjectForm';\n\nexport type ObjectCardStackProps = {\n view: View.View;\n objectId: string;\n};\n\nexport const ObjectCardStack = forwardRef<HTMLDivElement, ObjectCardStackProps>(({ objectId, view }, forwardedRef) => {\n const { t } = useTranslation(meta.id);\n const db = Obj.getDatabase(view);\n const typename = view.query ? getTypenameFromQuery(view.query.ast) : undefined;\n const schema = useSchema(db, typename);\n\n const queriedObjects = useQuery(db, schema ? Filter.type(schema) : Filter.nothing());\n const selectedRows = useSelected(objectId, 'multi');\n const selectedObjects = selectedRows.map((id) => queriedObjects.find((obj) => obj.id === id)).filter(isNonNullable);\n\n if (!schema) {\n return null;\n }\n\n return (\n <Layout.Main toolbar ref={forwardedRef}>\n <Toolbar.Root></Toolbar.Root>\n <CardStack.Root asChild>\n <CardStack.Content>\n <CardStack.Stack id={objectId} itemsCount={selectedObjects.length}>\n {selectedObjects.length === 0 && (\n <CardStack.Item>\n <Callout.Root>\n <Callout.Title>{t('row details no selection label')}</Callout.Title>\n </Callout.Root>\n </CardStack.Item>\n )}\n {selectedObjects.map((object) => (\n <CardStack.Item key={object.id} asChild>\n <StackItem.Root item={object}>\n <Card.Root>\n <ObjectForm object={object} schema={schema} />\n </Card.Root>\n </StackItem.Root>\n </CardStack.Item>\n ))}\n </CardStack.Stack>\n </CardStack.Content>\n </CardStack.Root>\n </Layout.Main>\n );\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport React, { useCallback, useMemo } from 'react';\n\nimport { DXN, Obj, type Ref, Tag, Type } from '@dxos/echo';\nimport { type JsonPath, splitJsonPath } from '@dxos/echo/internal';\nimport { invariant } from '@dxos/invariant';\nimport { Form, omitId } from '@dxos/react-ui-form';\nimport { isNonNullable } from '@dxos/util';\n\nimport { meta as pluginMeta } from '../../meta';\n\nexport type ObjectFormProps = {\n schema: Schema.Schema.AnyNoContext;\n object: Obj.Unknown;\n};\n\nexport const ObjectForm = ({ object, schema }: ObjectFormProps) => {\n const db = Obj.getDatabase(object);\n\n const formSchema = useMemo(\n () =>\n Schema.Struct({\n tags: Schema.Array(Type.Ref(Tag.Tag)).pipe(Schema.optional),\n }).pipe(Schema.extend(omitId(schema))),\n [schema],\n );\n\n const meta = Obj.getMeta(object);\n const tags = (meta.tags ?? []).map((tag) => db?.makeRef(DXN.parse(tag))).filter(isNonNullable);\n const values = useMemo(() => ({ tags, ...object }), [object, tags]);\n\n const handleCreate = useCallback((schema: Type.Entity.Any, values: any) => {\n invariant(db);\n invariant(Type.isObjectSchema(schema));\n const newObject = db.add(Obj.make(schema, values));\n if (Obj.instanceOf(Tag.Tag, newObject)) {\n Obj.change(object, (obj) => {\n Obj.getMeta(obj).tags = [...(Obj.getMeta(obj).tags ?? []), Obj.getDXN(newObject).toString()];\n });\n }\n }, []);\n\n // TODO(wittjosiah): Use FormRootProps type.\n const handleChange = useCallback(\n ({ tags, ...values }: any, { isValid, changed }: { isValid: boolean; changed: Record<JsonPath, boolean> }) => {\n if (!isValid) {\n return;\n }\n\n const changedPaths = Object.keys(changed).filter((path) => changed[path as JsonPath]) as JsonPath[];\n\n // Handle tags separately using Obj.change.\n const hasTagsChange = changedPaths.some((path) => splitJsonPath(path)[0] === 'tags');\n if (hasTagsChange) {\n Obj.change(object, (obj) => {\n Obj.getMeta(obj).tags = tags?.map((tag: Ref.Ref<Tag.Tag>) => tag.dxn.toString()) ?? [];\n });\n }\n\n // Handle other property changes.\n const nonTagPaths = changedPaths.filter((path) => splitJsonPath(path)[0] !== 'tags');\n if (nonTagPaths.length > 0) {\n Obj.change(object, () => {\n for (const path of nonTagPaths) {\n const parts = splitJsonPath(path);\n const value = Obj.getValue(values, parts);\n Obj.setValue(object, parts, value);\n }\n });\n }\n },\n [object],\n );\n\n return (\n <Form.Root\n schema={omitId(formSchema)}\n values={values}\n createOptionIcon='ph--plus--regular'\n createOptionLabel={['add tag label', { ns: pluginMeta.id }]}\n createInitialValuePath='label'\n db={db}\n onValuesChanged={handleChange}\n onCreate={handleCreate}\n >\n <Form.Viewport>\n <Form.Content>\n <Form.FieldSet />\n </Form.Content>\n </Form.Viewport>\n </Form.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { ObjectCardStack } from './ObjectCardStack';\n\nexport default ObjectCardStack;\n"],
5
+ "mappings": ";;;;;AAIA,OAAOA,UAASC,kBAAkB;AAElC,SAASC,OAAAA,YAAW;AACpB,SAASC,QAAQC,UAAUC,iBAAiB;AAC5C,SAASC,SAASC,SAASC,sBAAsB;AACjD,SAASC,cAAc;AACvB,SAASC,mBAAmB;AAC5B,SAASC,YAAY;AACrB,SAASC,WAAWC,iBAAiB;AACrC,SAAoBC,4BAA4B;AAChD,SAASC,iBAAAA,sBAAqB;;;ACV9B,YAAYC,YAAY;AACxB,OAAOC,SAASC,aAAaC,eAAe;AAE5C,SAASC,KAAKC,KAAeC,KAAKC,YAAY;AAC9C,SAAwBC,qBAAqB;AAC7C,SAASC,iBAAiB;AAC1B,SAASC,MAAMC,cAAc;AAC7B,SAASC,qBAAqB;;AASvB,IAAMC,aAAa,CAAC,EAAEC,QAAQC,OAAM,MAAmB;AAC5D,QAAMC,KAAKC,IAAIC,YAAYJ,MAAAA;AAE3B,QAAMK,aAAaC,QACjB,MACSC,cAAO;IACZC,MAAaC,aAAMC,KAAKC,IAAIC,IAAIA,GAAG,CAAA,EAAGC,KAAYC,eAAQ;EAC5D,CAAA,EAAGD,KAAYE,cAAOC,OAAOf,MAAAA,CAAAA,CAAAA,GAC/B;IAACA;GAAO;AAGV,QAAMgB,QAAOd,IAAIe,QAAQlB,MAAAA;AACzB,QAAMQ,QAAQS,MAAKT,QAAQ,CAAA,GAAIW,IAAI,CAACC,QAAQlB,IAAImB,QAAQC,IAAIC,MAAMH,GAAAA,CAAAA,CAAAA,EAAOI,OAAOC,aAAAA;AAChF,QAAMC,SAASpB,QAAQ,OAAO;IAAEE;IAAM,GAAGR;EAAO,IAAI;IAACA;IAAQQ;GAAK;AAElE,QAAMmB,eAAeC,YAAY,CAAC3B,SAAyByB,YAAAA;AACzDG,cAAU3B,IAAAA,QAAAA;;;;;;;;;AACV2B,cAAUnB,KAAKoB,eAAe7B,OAAAA,GAAAA,QAAAA;;;;;;;;;AAC9B,UAAM8B,YAAY7B,GAAG8B,IAAI7B,IAAI8B,KAAKhC,SAAQyB,OAAAA,CAAAA;AAC1C,QAAIvB,IAAI+B,WAAWtB,IAAIA,KAAKmB,SAAAA,GAAY;AACtC5B,UAAIgC,OAAOnC,QAAQ,CAACoC,QAAAA;AAClBjC,YAAIe,QAAQkB,GAAAA,EAAK5B,OAAO;aAAKL,IAAIe,QAAQkB,GAAAA,EAAK5B,QAAQ,CAAA;UAAKL,IAAIkC,OAAON,SAAAA,EAAWO,SAAQ;;MAC3F,CAAA;IACF;EACF,GAAG,CAAA,CAAE;AAGL,QAAMC,eAAeX,YACnB,CAAC,EAAEpB,MAAAA,OAAM,GAAGkB,QAAAA,GAAe,EAAEc,SAASC,QAAO,MAA4D;AACvG,QAAI,CAACD,SAAS;AACZ;IACF;AAEA,UAAME,eAAeC,OAAOC,KAAKH,OAAAA,EAASjB,OAAO,CAACqB,SAASJ,QAAQI,IAAAA,CAAiB;AAGpF,UAAMC,gBAAgBJ,aAAaK,KAAK,CAACF,SAASG,cAAcH,IAAAA,EAAM,CAAA,MAAO,MAAA;AAC7E,QAAIC,eAAe;AACjB3C,UAAIgC,OAAOnC,QAAQ,CAACoC,QAAAA;AAClBjC,YAAIe,QAAQkB,GAAAA,EAAK5B,OAAOA,OAAMW,IAAI,CAACC,QAA0BA,IAAI6B,IAAIX,SAAQ,CAAA,KAAO,CAAA;MACtF,CAAA;IACF;AAGA,UAAMY,cAAcR,aAAalB,OAAO,CAACqB,SAASG,cAAcH,IAAAA,EAAM,CAAA,MAAO,MAAA;AAC7E,QAAIK,YAAYC,SAAS,GAAG;AAC1BhD,UAAIgC,OAAOnC,QAAQ,MAAA;AACjB,mBAAW6C,QAAQK,aAAa;AAC9B,gBAAME,QAAQJ,cAAcH,IAAAA;AAC5B,gBAAMQ,QAAQlD,IAAImD,SAAS5B,SAAQ0B,KAAAA;AACnCjD,cAAIoD,SAASvD,QAAQoD,OAAOC,KAAAA;QAC9B;MACF,CAAA;IACF;EACF,GACA;IAACrD;GAAO;AAGV,SACE,sBAAA,cAACwD,KAAKC,MAAI;IACRxD,QAAQe,OAAOX,UAAAA;IACfqB;IACAgC,kBAAiB;IACjBC,mBAAmB;MAAC;MAAiB;QAAEC,IAAIC,KAAWC;MAAG;;IACzDC,wBAAuB;IACvB7D;IACA8D,iBAAiBzB;IACjB0B,UAAUtC;KAEV,sBAAA,cAAC6B,KAAKU,UAAQ,MACZ,sBAAA,cAACV,KAAKW,SAAO,MACX,sBAAA,cAACX,KAAKY,UAAQ,IAAA,CAAA,CAAA,CAAA;AAKxB;;;ADvEO,IAAMC,kBAAkBC,2BAAiD,CAAC,EAAEC,UAAUC,KAAI,GAAIC,iBAAAA;AACnG,QAAM,EAAEC,EAAC,IAAKC,eAAeC,KAAKC,EAAE;AACpC,QAAMC,KAAKC,KAAIC,YAAYR,IAAAA;AAC3B,QAAMS,WAAWT,KAAKU,QAAQC,qBAAqBX,KAAKU,MAAME,GAAG,IAAIC;AACrE,QAAMC,SAASC,UAAUT,IAAIG,QAAAA;AAE7B,QAAMO,iBAAiBC,SAASX,IAAIQ,SAASI,OAAOC,KAAKL,MAAAA,IAAUI,OAAOE,QAAO,CAAA;AACjF,QAAMC,eAAeC,YAAYvB,UAAU,OAAA;AAC3C,QAAMwB,kBAAkBF,aAAaG,IAAI,CAACnB,OAAOW,eAAeS,KAAK,CAACC,QAAQA,IAAIrB,OAAOA,EAAAA,CAAAA,EAAKsB,OAAOC,cAAAA;AAErG,MAAI,CAACd,QAAQ;AACX,WAAO;EACT;AAEA,SACE,gBAAAe,OAAA,cAACC,OAAOC,MAAI;IAACC,SAAAA;IAAQC,KAAKhC;KACxB,gBAAA4B,OAAA,cAACK,QAAQC,MAAI,IAAA,GACb,gBAAAN,OAAA,cAACO,UAAUD,MAAI;IAACE,SAAAA;KACd,gBAAAR,OAAA,cAACO,UAAUE,SAAO,MAChB,gBAAAT,OAAA,cAACO,UAAUG,OAAK;IAAClC,IAAIN;IAAUyC,YAAYjB,gBAAgBkB;KACxDlB,gBAAgBkB,WAAW,KAC1B,gBAAAZ,OAAA,cAACO,UAAUM,MAAI,MACb,gBAAAb,OAAA,cAACc,QAAQR,MAAI,MACX,gBAAAN,OAAA,cAACc,QAAQC,OAAK,MAAE1C,EAAE,gCAAA,CAAA,CAAA,CAAA,GAIvBqB,gBAAgBC,IAAI,CAACqB,WACpB,gBAAAhB,OAAA,cAACO,UAAUM,MAAI;IAACI,KAAKD,OAAOxC;IAAIgC,SAAAA;KAC9B,gBAAAR,OAAA,cAACkB,UAAUZ,MAAI;IAACa,MAAMH;KACpB,gBAAAhB,OAAA,cAACoB,KAAKd,MAAI,MACR,gBAAAN,OAAA,cAACqB,YAAAA;IAAWL;IAAgB/B;;AAUhD,CAAA;;;AE5DA,IAAA,0BAAeqC;",
6
+ "names": ["React", "forwardRef", "Obj", "Filter", "useQuery", "useSchema", "Callout", "Toolbar", "useTranslation", "Layout", "useSelected", "Card", "CardStack", "StackItem", "getTypenameFromQuery", "isNonNullable", "Schema", "React", "useCallback", "useMemo", "DXN", "Obj", "Tag", "Type", "splitJsonPath", "invariant", "Form", "omitId", "isNonNullable", "ObjectForm", "object", "schema", "db", "Obj", "getDatabase", "formSchema", "useMemo", "Struct", "tags", "Array", "Type", "Ref", "Tag", "pipe", "optional", "extend", "omitId", "meta", "getMeta", "map", "tag", "makeRef", "DXN", "parse", "filter", "isNonNullable", "values", "handleCreate", "useCallback", "invariant", "isObjectSchema", "newObject", "add", "make", "instanceOf", "change", "obj", "getDXN", "toString", "handleChange", "isValid", "changed", "changedPaths", "Object", "keys", "path", "hasTagsChange", "some", "splitJsonPath", "dxn", "nonTagPaths", "length", "parts", "value", "getValue", "setValue", "Form", "Root", "createOptionIcon", "createOptionLabel", "ns", "pluginMeta", "id", "createInitialValuePath", "onValuesChanged", "onCreate", "Viewport", "Content", "FieldSet", "ObjectCardStack", "forwardRef", "objectId", "view", "forwardedRef", "t", "useTranslation", "meta", "id", "db", "Obj", "getDatabase", "typename", "query", "getTypenameFromQuery", "ast", "undefined", "schema", "useSchema", "queriedObjects", "useQuery", "Filter", "type", "nothing", "selectedRows", "useSelected", "selectedObjects", "map", "find", "obj", "filter", "isNonNullable", "React", "Layout", "Main", "toolbar", "ref", "Toolbar", "Root", "CardStack", "asChild", "Content", "Stack", "itemsCount", "length", "Item", "Callout", "Title", "object", "key", "StackItem", "item", "Card", "ObjectForm", "ObjectCardStack"]
7
+ }
@@ -4,9 +4,9 @@ import {
4
4
 
5
5
  // src/components/ObjectDetails/ObjectDetails.tsx
6
6
  import React2, { forwardRef, useMemo as useMemo2 } from "react";
7
- import { Surface } from "@dxos/app-framework/react";
7
+ import { Surface } from "@dxos/app-framework/ui";
8
8
  import { Toolbar } from "@dxos/react-ui";
9
- import { Layout } from "@dxos/react-ui-mosaic";
9
+ import { Layout } from "@dxos/react-ui";
10
10
 
11
11
  // src/components/ObjectDetails/BaseObjectSettings.tsx
12
12
  import * as Function from "effect/Function";
@@ -121,14 +121,15 @@ var ObjectDetails = /* @__PURE__ */ forwardRef(({ role, subject: object }, forwa
121
121
  object
122
122
  ]);
123
123
  return /* @__PURE__ */ React2.createElement(Layout.Main, {
124
+ toolbar: true,
124
125
  role,
125
126
  ref: forwardedRef
126
127
  }, /* @__PURE__ */ React2.createElement(Toolbar.Root, null), /* @__PURE__ */ React2.createElement(BaseObjectSettings, {
127
128
  object
128
- }, /* @__PURE__ */ React2.createElement(Surface, {
129
+ }, /* @__PURE__ */ React2.createElement(Surface.Surface, {
129
130
  role: "base-object-settings",
130
131
  data
131
- }), /* @__PURE__ */ React2.createElement(Surface, {
132
+ }), /* @__PURE__ */ React2.createElement(Surface.Surface, {
132
133
  role: "object-settings",
133
134
  data
134
135
  })));
@@ -139,4 +140,4 @@ var ObjectDetails_default = ObjectDetails;
139
140
  export {
140
141
  ObjectDetails_default as default
141
142
  };
142
- //# sourceMappingURL=ObjectDetails-GEDIISKK.mjs.map
143
+ //# sourceMappingURL=ObjectDetails-HXV4IQEM.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ObjectDetails/ObjectDetails.tsx", "../../../src/components/ObjectDetails/BaseObjectSettings.tsx", "../../../src/components/ObjectDetails/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { forwardRef, useMemo } from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { type SurfaceComponentProps } from '@dxos/app-toolkit/ui';\nimport { type Obj } from '@dxos/echo';\nimport { Toolbar } from '@dxos/react-ui';\nimport { Layout } from '@dxos/react-ui';\n\nimport { BaseObjectSettings } from './BaseObjectSettings';\n\nexport type ObjectDetailsProps = SurfaceComponentProps<Obj.Unknown>;\n\nexport const ObjectDetails = forwardRef<HTMLDivElement, ObjectDetailsProps>(\n ({ role, subject: object }, forwardedRef) => {\n const data = useMemo(() => ({ subject: object }), [object]);\n\n return (\n <Layout.Main toolbar role={role} ref={forwardedRef}>\n <Toolbar.Root />\n <BaseObjectSettings object={object}>\n <Surface.Surface role='base-object-settings' data={data} />\n <Surface.Surface role='object-settings' data={data} />\n {/* TODO(wittjosiah): Remove (or add as surface)? */}\n {/* <AdvancedObjectSettings object={object} /> */}\n </BaseObjectSettings>\n </Layout.Main>\n );\n },\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Function from 'effect/Function';\nimport * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\nimport React, { type PropsWithChildren, useCallback, useMemo } from 'react';\n\nimport { DXN, Obj, type Ref, Tag, Type } from '@dxos/echo';\nimport { type JsonPath, splitJsonPath } from '@dxos/echo/internal';\nimport { invariant } from '@dxos/invariant';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { Form, omitId } from '@dxos/react-ui-form';\nimport { isNonNullable } from '@dxos/util';\n\nimport { meta as pluginMeta } from '../../meta';\n\n// TODO(wittjosiah): Would be nice to control order when extending so this isn't always first/last.\nconst BaseSchema = Schema.Struct({\n tags: Schema.Array(Type.Ref(Tag.Tag)).pipe(Schema.optional),\n});\n\nexport type BaseObjectSettingsProps = ThemedClassName<\n PropsWithChildren<{\n object: Obj.Unknown;\n }>\n>;\n\n// TODO(wittjosiah): Reconcile w/ ObjectDetailsPanel.\nexport const BaseObjectSettings = ({ classNames, children, object }: BaseObjectSettingsProps) => {\n const db = Obj.getDatabase(object);\n\n const formSchema = useMemo(() => {\n return Function.pipe(\n Obj.getSchema(object),\n Option.fromNullable,\n Option.map((schema) => BaseSchema.pipe(Schema.extend(schema))),\n Option.getOrUndefined,\n );\n }, [object]);\n\n const meta = Obj.getMeta(object);\n const tags = (meta.tags ?? []).map((tag) => db?.makeRef(DXN.parse(tag))).filter(isNonNullable);\n const values = useMemo(\n () => ({\n tags,\n ...object,\n }),\n [object, tags],\n );\n\n const handleCreate = useCallback((schema: Type.Entity.Any, values: any) => {\n invariant(db);\n invariant(Type.isObjectSchema(schema));\n const newObject = db.add(Obj.make(schema, values));\n if (Obj.instanceOf(Tag.Tag, newObject)) {\n Obj.change(object, (obj) => {\n Obj.getMeta(obj).tags = [...(Obj.getMeta(obj).tags ?? []), Obj.getDXN(newObject).toString()];\n });\n }\n }, []);\n\n // TODO(wittjosiah): Use FormRootProps type.\n const handleChange = useCallback(\n (\n { tags, ...values }: Schema.Schema.Type<typeof formSchema>,\n { isValid, changed }: { isValid: boolean; changed: Record<JsonPath, boolean> },\n ) => {\n if (!isValid) {\n return;\n }\n\n const changedPaths = Object.keys(changed).filter((path) => changed[path as JsonPath]) as JsonPath[];\n\n // Handle tags separately using Obj.change.\n const hasTagsChange = changedPaths.some((path) => splitJsonPath(path)[0] === 'tags');\n if (hasTagsChange) {\n Obj.change(object, (obj) => {\n Obj.getMeta(obj).tags = tags?.map((tag: Ref.Ref<Tag.Tag>) => tag.dxn.toString()) ?? [];\n });\n }\n\n // Handle other property changes.\n const nonTagPaths = changedPaths.filter((path) => splitJsonPath(path)[0] !== 'tags');\n if (nonTagPaths.length > 0) {\n Obj.change(object, () => {\n for (const path of nonTagPaths) {\n const parts = splitJsonPath(path);\n const value = Obj.getValue(values, parts);\n Obj.setValue(object, parts, value);\n }\n });\n }\n },\n [object],\n );\n\n if (!formSchema) {\n return null;\n }\n\n return (\n <Form.Root\n schema={omitId(formSchema)}\n values={values}\n createOptionIcon='ph--plus--regular'\n createOptionLabel={['add tag label', { ns: pluginMeta.id }]}\n createInitialValuePath='label'\n db={db}\n onValuesChanged={handleChange}\n onCreate={handleCreate}\n >\n <Form.Viewport>\n <Form.Content classNames={classNames}>\n <Form.FieldSet />\n {children}\n </Form.Content>\n </Form.Viewport>\n </Form.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { ObjectDetails } from './ObjectDetails';\n\nexport default ObjectDetails;\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "forwardRef", "useMemo", "Surface", "Toolbar", "Layout", "Function", "Option", "Schema", "React", "useCallback", "useMemo", "DXN", "Obj", "Tag", "Type", "splitJsonPath", "invariant", "Form", "omitId", "isNonNullable", "BaseSchema", "Struct", "tags", "Array", "Type", "Ref", "Tag", "pipe", "optional", "BaseObjectSettings", "classNames", "children", "object", "db", "Obj", "getDatabase", "formSchema", "useMemo", "getSchema", "fromNullable", "map", "schema", "extend", "getOrUndefined", "meta", "getMeta", "tag", "makeRef", "DXN", "parse", "filter", "isNonNullable", "values", "handleCreate", "useCallback", "invariant", "isObjectSchema", "newObject", "add", "make", "instanceOf", "change", "obj", "getDXN", "toString", "handleChange", "isValid", "changed", "changedPaths", "Object", "keys", "path", "hasTagsChange", "some", "splitJsonPath", "dxn", "nonTagPaths", "length", "parts", "value", "getValue", "setValue", "Form", "Root", "omitId", "createOptionIcon", "createOptionLabel", "ns", "pluginMeta", "id", "createInitialValuePath", "onValuesChanged", "onCreate", "Viewport", "Content", "FieldSet", "ObjectDetails", "forwardRef", "role", "subject", "object", "forwardedRef", "data", "useMemo", "React", "Layout", "Main", "toolbar", "ref", "Toolbar", "Root", "BaseObjectSettings", "Surface", "ObjectDetails"]
7
+ }
@@ -4,12 +4,12 @@ import {
4
4
 
5
5
  // src/components/RecordArticle.tsx
6
6
  import React, { useMemo } from "react";
7
- import { Surface } from "@dxos/app-framework/react";
7
+ import { Surface } from "@dxos/app-framework/ui";
8
8
  import { Entity, Filter, Obj, Ref, Relation } from "@dxos/echo";
9
9
  import { useQuery } from "@dxos/react-client/echo";
10
- import { useTranslation } from "@dxos/react-ui";
10
+ import { Layout, ScrollArea, useTranslation } from "@dxos/react-ui";
11
11
  import { Masonry } from "@dxos/react-ui-masonry";
12
- import { Layout, Card as MosaicCard } from "@dxos/react-ui-mosaic";
12
+ import { Card as MosaicCard } from "@dxos/react-ui-mosaic";
13
13
  import { mx } from "@dxos/ui-theme";
14
14
  import { isNonNullable } from "@dxos/util";
15
15
  var RecordArticle = ({ role, subject }) => {
@@ -27,13 +27,14 @@ var RecordArticle = ({ role, subject }) => {
27
27
  const singleColumn = related.length === 1;
28
28
  return /* @__PURE__ */ React.createElement(Layout.Main, {
29
29
  role
30
- }, /* @__PURE__ */ React.createElement("div", {
31
- role: "none",
32
- className: mx("flex flex-col gap-4 p-4 is-full overflow-y-auto")
30
+ }, /* @__PURE__ */ React.createElement(ScrollArea.Root, {
31
+ orientation: "vertical"
32
+ }, /* @__PURE__ */ React.createElement(ScrollArea.Viewport, {
33
+ classNames: mx("p-4 gap-4")
33
34
  }, /* @__PURE__ */ React.createElement("div", {
34
35
  role: "none",
35
36
  className: mx("flex is-full card-max-width")
36
- }, /* @__PURE__ */ React.createElement(Surface, {
37
+ }, /* @__PURE__ */ React.createElement(Surface.Surface, {
37
38
  role: "section",
38
39
  data,
39
40
  limit: 1
@@ -47,7 +48,7 @@ var RecordArticle = ({ role, subject }) => {
47
48
  render: Card,
48
49
  columnCount: singleColumn ? 1 : void 0,
49
50
  intrinsicHeight: true
50
- }))));
51
+ })))));
51
52
  };
52
53
  var Card = ({ data: subject }) => {
53
54
  const data = useMemo(() => ({
@@ -55,7 +56,7 @@ var Card = ({ data: subject }) => {
55
56
  }), [
56
57
  subject
57
58
  ]);
58
- return /* @__PURE__ */ React.createElement(MosaicCard.Root, null, /* @__PURE__ */ React.createElement(MosaicCard.Toolbar, null, /* @__PURE__ */ React.createElement("span", null), /* @__PURE__ */ React.createElement(MosaicCard.Title, null, Entity.getLabel(subject))), /* @__PURE__ */ React.createElement(Surface, {
59
+ return /* @__PURE__ */ React.createElement(MosaicCard.Root, null, /* @__PURE__ */ React.createElement(MosaicCard.Toolbar, null, /* @__PURE__ */ React.createElement("span", null), /* @__PURE__ */ React.createElement(MosaicCard.Title, null, Entity.getLabel(subject))), /* @__PURE__ */ React.createElement(Surface.Surface, {
59
60
  role: "card--content",
60
61
  data,
61
62
  limit: 1
@@ -104,4 +105,4 @@ export {
104
105
  RecordArticle,
105
106
  RecordArticle_default as default
106
107
  };
107
- //# sourceMappingURL=RecordArticle-W57QE7QV.mjs.map
108
+ //# sourceMappingURL=RecordArticle-36LDKFWF.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/RecordArticle.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { type SurfaceComponentProps } from '@dxos/app-toolkit/ui';\nimport { type Database, Entity, Filter, Obj, Ref, Relation } from '@dxos/echo';\nimport { useQuery } from '@dxos/react-client/echo';\nimport { Layout, ScrollArea, useTranslation } from '@dxos/react-ui';\nimport { Masonry } from '@dxos/react-ui-masonry';\nimport { Card as MosaicCard } from '@dxos/react-ui-mosaic';\nimport { mx } from '@dxos/ui-theme';\nimport { isNonNullable } from '@dxos/util';\n\nimport { meta } from '../meta';\n\nexport const RecordArticle = ({ role, subject }: SurfaceComponentProps) => {\n const { t } = useTranslation(meta.id);\n const db = Obj.getDatabase(subject);\n const data = useMemo(() => ({ subject }), [subject]);\n const related = useRelatedObjects(db, subject, {\n references: true,\n relations: true,\n });\n const singleColumn = related.length === 1;\n\n return (\n <Layout.Main role={role}>\n <ScrollArea.Root orientation='vertical'>\n <ScrollArea.Viewport classNames={mx('p-4 gap-4')}>\n <div role='none' className={mx('flex is-full card-max-width')}>\n <Surface.Surface role='section' data={data} limit={1} />\n </div>\n\n {related.length > 0 && (\n <div role='none' className={mx('flex flex-col gap-1', singleColumn ? 'card-max-width' : 'is-full')}>\n <label className='mbs-2 text-sm text-description'>{t('related objects label')}</label>\n <Masonry.Root<Entity.Unknown>\n items={related}\n render={Card}\n columnCount={singleColumn ? 1 : undefined}\n intrinsicHeight\n />\n </div>\n )}\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n </Layout.Main>\n );\n};\n\nconst Card = ({ data: subject }: { data: Entity.Unknown }) => {\n const data = useMemo(() => ({ subject }), [subject]);\n return (\n <MosaicCard.Root>\n <MosaicCard.Toolbar>\n <span />\n <MosaicCard.Title>{Entity.getLabel(subject)}</MosaicCard.Title>\n </MosaicCard.Toolbar>\n <Surface.Surface role='card--content' data={data} limit={1} />\n </MosaicCard.Root>\n );\n};\n\n// TODO(wittjosiah): This is a hack. ECHO needs to have a back reference index to easily query for related objects.\nconst useRelatedObjects = (\n db?: Database.Database,\n record?: Obj.Unknown,\n options: { references?: boolean; relations?: boolean } = {},\n) => {\n const objects = useQuery(db, Filter.everything());\n return useMemo(() => {\n if (!record) {\n return [];\n }\n\n const related: Entity.Unknown[] = [];\n\n // TODO(burdon): Change Person => Organization to relations.\n if (options.references) {\n const getReferences = (obj: Entity.Unknown): Ref.Unknown[] => {\n return Object.getOwnPropertyNames(obj)\n .map((name) => obj[name as keyof Obj.Unknown])\n .filter((value) => Ref.isRef(value)) as Ref.Unknown[];\n };\n\n const references = getReferences(record);\n const referenceTargets = references.map((ref) => ref.target).filter(isNonNullable);\n const referenceSources = objects.filter((obj) => {\n const refs = getReferences(obj);\n return refs.some((ref) => ref.target === record);\n });\n\n related.push(...referenceTargets, ...referenceSources);\n }\n\n if (options.relations) {\n // TODO(dmaretskyi): Workaround until https://github.com/dxos/dxos/pull/10100 lands.\n const isValidRelation = (obj: Relation.Unknown) => {\n try {\n return Relation.isRelation(obj) && Relation.getSource(obj) && Relation.getTarget(obj);\n } catch {\n return false;\n }\n };\n\n const relations = objects.filter(Relation.isRelation).filter((obj) => isValidRelation(obj));\n const targetObjects = relations\n .filter((relation) => Relation.getTarget(relation) === record)\n .map((relation) => Relation.getSource(relation));\n const sourceObjects = relations\n .filter((relation) => Relation.getSource(relation) === record)\n .map((relation) => Relation.getTarget(relation));\n\n related.push(...targetObjects, ...sourceObjects);\n }\n\n return related;\n }, [record, objects]);\n};\n\nexport default RecordArticle;\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "useMemo", "Surface", "Entity", "Filter", "Obj", "Ref", "Relation", "useQuery", "Layout", "ScrollArea", "useTranslation", "Masonry", "Card", "MosaicCard", "mx", "isNonNullable", "RecordArticle", "role", "subject", "t", "useTranslation", "meta", "id", "db", "Obj", "getDatabase", "data", "useMemo", "related", "useRelatedObjects", "references", "relations", "singleColumn", "length", "Layout", "Main", "ScrollArea", "Root", "orientation", "Viewport", "classNames", "mx", "div", "className", "Surface", "limit", "label", "Masonry", "items", "render", "Card", "columnCount", "undefined", "intrinsicHeight", "MosaicCard", "Toolbar", "span", "Title", "Entity", "getLabel", "record", "options", "objects", "useQuery", "Filter", "everything", "getReferences", "obj", "Object", "getOwnPropertyNames", "map", "name", "filter", "value", "Ref", "isRef", "referenceTargets", "ref", "target", "isNonNullable", "referenceSources", "refs", "some", "push", "isValidRelation", "Relation", "isRelation", "getSource", "getTarget", "targetObjects", "relation", "sourceObjects"]
7
+ }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getActiveSpace
3
- } from "./chunk-4WZUGLQQ.mjs";
3
+ } from "./chunk-A7ZCVQGZ.mjs";
4
4
  import {
5
5
  SHARED,
6
6
  constructObjectActions,
@@ -9,12 +9,12 @@ import {
9
9
  createObjectNode,
10
10
  createStaticSchemaActions,
11
11
  createStaticSchemaNode
12
- } from "./chunk-SUI34XSA.mjs";
12
+ } from "./chunk-WAOJLA2S.mjs";
13
13
  import {
14
14
  SPACE_TYPE,
15
15
  SpaceCapabilities,
16
16
  SpaceOperation
17
- } from "./chunk-CCRSHECL.mjs";
17
+ } from "./chunk-KGLWYGIF.mjs";
18
18
  import {
19
19
  meta
20
20
  } from "./chunk-HSMQFM57.mjs";
@@ -23,7 +23,8 @@ import {
23
23
  import * as Effect from "effect/Effect";
24
24
  import * as Option from "effect/Option";
25
25
  import * as Schema from "effect/Schema";
26
- import { Capability, Common } from "@dxos/app-framework";
26
+ import { Capability } from "@dxos/app-framework";
27
+ import { AppCapabilities } from "@dxos/app-toolkit";
27
28
  import { SpaceState, getSpace, isSpace, parseId } from "@dxos/client/echo";
28
29
  import { DXN, Filter, Obj, Type } from "@dxos/echo";
29
30
  import { AtomObj, AtomQuery } from "@dxos/echo-atom";
@@ -34,9 +35,10 @@ import { CreateAtom, GraphBuilder, NodeMatcher } from "@dxos/plugin-graph";
34
35
  import { Collection, Expando, ViewAnnotation, getTypenameFromQuery } from "@dxos/schema";
35
36
  import { isNonNullable } from "@dxos/util";
36
37
  var whenSpace = (node) => node.type === SPACE_TYPE && isSpace(node.data) ? Option.some(node.data) : Option.none();
37
- var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function* () {
38
+ var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function* (props) {
39
+ const { shareableLinkOrigin = window.location.origin } = props ?? {};
38
40
  const capabilities = yield* Capability.Service;
39
- const resolve = (get) => (typename) => capabilities.getAll(Common.Capability.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
41
+ const resolve = (get) => (typename) => capabilities.getAll(AppCapabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
40
42
  const extensions = yield* Effect.all([
41
43
  // Primary actions.
42
44
  GraphBuilder.createExtension({
@@ -146,7 +148,7 @@ var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function
146
148
  const [spacesOrder] = get(AtomQuery.make(client.spaces.default.db, Filter.type(Expando.Expando, {
147
149
  key: SHARED
148
150
  })));
149
- const { graph } = capabilities.get(Common.Capability.AppGraph);
151
+ const { graph } = capabilities.get(AppCapabilities.AppGraph);
150
152
  const spacesOrderSnapshot = spacesOrder ? get(AtomObj.make(spacesOrder)) : void 0;
151
153
  const order = spacesOrderSnapshot?.order ?? [];
152
154
  const orderMap = new Map(order.map((id, index) => [
@@ -188,7 +190,7 @@ var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function
188
190
  }
189
191
  const state = get(capabilities.get(SpaceCapabilities.State));
190
192
  const ephemeralState = get(capabilities.get(SpaceCapabilities.EphemeralState));
191
- const { graph } = capabilities.get(Common.Capability.AppGraph);
193
+ const { graph } = capabilities.get(AppCapabilities.AppGraph);
192
194
  const [spacesOrder] = get(AtomQuery.make(client.spaces.default.db, Filter.type(Expando.Expando, {
193
195
  key: SHARED
194
196
  })));
@@ -307,17 +309,21 @@ var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function
307
309
  typename: collection.key,
308
310
  location: [
309
311
  "runtime"
310
- ]
312
+ ],
313
+ includeSystem: true
311
314
  }).runSync()[0];
312
315
  if (!space || !schema) {
313
316
  return Effect.succeed([]);
314
317
  }
315
- return Effect.succeed(get(AtomQuery.make(space.db, Filter.type(schema))).map((object) => createObjectNode({
316
- object,
317
- db: space.db,
318
- managedCollectionChild: true,
319
- resolve: resolve(get)
320
- })).filter(isNonNullable));
318
+ return Effect.succeed(get(AtomQuery.make(space.db, Filter.type(schema))).map((object) => {
319
+ get(AtomObj.make(object));
320
+ return createObjectNode({
321
+ object,
322
+ db: space.db,
323
+ managedCollectionChild: true,
324
+ resolve: resolve(get)
325
+ });
326
+ }).filter(isNonNullable));
321
327
  }
322
328
  }),
323
329
  // Create branch nodes for static schema record types.
@@ -437,7 +443,7 @@ var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function
437
443
  });
438
444
  deletable = filteredViews.length === 0;
439
445
  }
440
- const [appGraph] = get(capabilities.atom(Common.Capability.AppGraph));
446
+ const [appGraph] = get(capabilities.atom(AppCapabilities.AppGraph));
441
447
  const ephemeralAtom = capabilities.get(SpaceCapabilities.EphemeralState);
442
448
  const ephemeralState = get(ephemeralAtom);
443
449
  if (!appGraph) {
@@ -449,7 +455,8 @@ var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function
449
455
  resolve: resolve(get),
450
456
  capabilities,
451
457
  deletable,
452
- navigable: ephemeralState.navigableCollections
458
+ navigable: ephemeralState.navigableCollections,
459
+ shareableLinkOrigin
453
460
  }));
454
461
  }
455
462
  }),
@@ -515,9 +522,9 @@ var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function
515
522
  ])
516
523
  })
517
524
  ]);
518
- return Capability.contributes(Common.Capability.AppGraphBuilder, extensions);
525
+ return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);
519
526
  }));
520
527
  export {
521
528
  app_graph_builder_default as default
522
529
  };
523
- //# sourceMappingURL=app-graph-builder-SJHTZXZF.mjs.map
530
+ //# sourceMappingURL=app-graph-builder-GLV46QSI.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/app-graph-builder/app-graph-builder.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Atom } from '@effect-atom/atom-react';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\nimport { type Space, SpaceState, getSpace, isSpace, parseId } from '@dxos/client/echo';\nimport { DXN, Filter, Obj, type Ref, Type } from '@dxos/echo';\nimport { AtomObj, AtomQuery } from '@dxos/echo-atom';\nimport { Operation } from '@dxos/operation';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { ATTENDABLE_PATH_SEPARATOR, PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';\nimport { CreateAtom, GraphBuilder, type Node, NodeMatcher } from '@dxos/plugin-graph';\nimport { Collection, Expando, ViewAnnotation, getTypenameFromQuery } from '@dxos/schema';\nimport { isNonNullable } from '@dxos/util';\n\nimport { getActiveSpace } from '../../hooks';\nimport { meta } from '../../meta';\nimport { SPACE_TYPE, SpaceCapabilities, SpaceOperation, type SpacePluginOptions } from '../../types';\nimport {\n SHARED,\n constructObjectActions,\n constructSpaceActions,\n constructSpaceNode,\n createObjectNode,\n createStaticSchemaActions,\n createStaticSchemaNode,\n} from '../../util';\n\n/** Match space nodes and return the Space object. */\nconst whenSpace = (node: Node.Node): Option.Option<Space> =>\n node.type === SPACE_TYPE && isSpace(node.data) ? Option.some(node.data) : Option.none();\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* (props?: SpacePluginOptions) {\n const { shareableLinkOrigin = window.location.origin } = props ?? {};\n const capabilities = yield* Capability.Service;\n\n // TODO(wittjosiah): Using `get` and being reactive seems to cause a bug with Atom where disposed atoms are accessed.\n const resolve = (get: Atom.Context) => (typename: string) =>\n capabilities.getAll(AppCapabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};\n\n const extensions = yield* Effect.all([\n // Primary actions.\n GraphBuilder.createExtension({\n id: `${meta.id}/primary-actions`,\n position: 'hoist',\n match: NodeMatcher.whenRoot,\n actions: () =>\n Effect.succeed([\n {\n id: SpaceOperation.OpenCreateSpace.meta.key,\n data: () => Operation.invoke(SpaceOperation.OpenCreateSpace),\n properties: {\n label: ['create space label', { ns: meta.id }],\n icon: 'ph--plus--regular',\n testId: 'spacePlugin.createSpace',\n disposition: 'menu',\n },\n },\n {\n id: SpaceOperation.Join.meta.key,\n data: () => Operation.invoke(SpaceOperation.Join, {}),\n properties: {\n label: ['join space label', { ns: meta.id }],\n icon: 'ph--sign-in--regular',\n testId: 'spacePlugin.joinSpace',\n disposition: 'menu',\n },\n },\n {\n id: SpaceOperation.OpenMembers.meta.key,\n data: Effect.fnUntraced(function* () {\n const client = yield* Capability.get(ClientCapabilities.Client);\n const space = getActiveSpace(capabilities) ?? client.spaces.default;\n yield* Operation.invoke(SpaceOperation.OpenMembers, { space });\n }),\n properties: {\n label: ['share space label', { ns: meta.id }],\n icon: 'ph--users--regular',\n testId: 'spacePlugin.shareSpace',\n keyBinding: {\n macos: 'meta+.',\n windows: 'alt+.',\n },\n },\n },\n {\n id: SpaceOperation.OpenSettings.meta.key,\n data: Effect.fnUntraced(function* () {\n const client = yield* Capability.get(ClientCapabilities.Client);\n const space = getActiveSpace(capabilities) ?? client.spaces.default;\n yield* Operation.invoke(SpaceOperation.OpenSettings, { space });\n }),\n properties: {\n label: ['open current space settings label', { ns: meta.id }],\n icon: 'ph--faders--regular',\n keyBinding: {\n macos: 'meta+shift+,',\n windows: 'ctrl+shift+,',\n },\n },\n },\n ]),\n }),\n\n // Create space nodes.\n GraphBuilder.createExtension({\n id: `${meta.id}/spaces`,\n match: NodeMatcher.whenRoot,\n connector: (node, get) => {\n const client = capabilities.get(ClientCapabilities.Client);\n const stateAtom = capabilities.get(SpaceCapabilities.State);\n const ephemeralAtom = capabilities.get(SpaceCapabilities.EphemeralState);\n const spacesAtom = CreateAtom.fromObservable(client.spaces);\n const isReadyAtom = CreateAtom.fromObservable(client.spaces.isReady);\n\n const spaces = get(spacesAtom);\n const isReady = get(isReadyAtom);\n\n if (!spaces || !isReady) {\n return Effect.succeed([]);\n }\n\n const settingsAtom = capabilities.get(SpaceCapabilities.Settings);\n const settings = get(settingsAtom);\n const state = get(stateAtom);\n const ephemeralState = get(ephemeralAtom);\n\n try {\n const [spacesOrder] = get(\n AtomQuery.make(client.spaces.default.db, Filter.type(Expando.Expando, { key: SHARED })),\n );\n const { graph } = capabilities.get(AppCapabilities.AppGraph);\n\n // Get order from spacesOrder snapshot using AtomObj (cached via Atom.family).\n const spacesOrderSnapshot = spacesOrder ? get(AtomObj.make(spacesOrder)) : undefined;\n const order: string[] = (spacesOrderSnapshot as any)?.order ?? [];\n const orderMap = new Map(order.map((id, index) => [id, index]));\n\n // Subscribe to space states for filtering.\n const spaceStates = spaces.map((space) => get(CreateAtom.fromObservable(space.state)));\n\n // Subscribe to space properties to react when root collection is assigned.\n spaces.forEach((space) => {\n if (space.state.get() === SpaceState.SPACE_READY) {\n get(AtomObj.make(space.properties));\n }\n });\n\n return Effect.succeed(\n [\n ...spaces\n .filter((space) => orderMap.has(space.id))\n .sort((a, b) => orderMap.get(a.id)! - orderMap.get(b.id)!),\n ...spaces.filter((space) => !orderMap.has(space.id)),\n ]\n .filter((space, i) => (settings?.showHidden ? true : spaceStates[i] !== SpaceState.SPACE_INACTIVE))\n .map((space) =>\n constructSpaceNode({\n space,\n navigable: ephemeralState.navigableCollections,\n personal: space === client.spaces.default,\n namesCache: state.spaceNames,\n resolve: resolve(get),\n graph,\n spacesOrder,\n }),\n ),\n );\n } catch {\n return Effect.succeed([]);\n }\n },\n resolver: (id, get) => {\n // Resolve space ID to space node.\n const { spaceId } = parseId(id);\n if (!spaceId) {\n return Effect.succeed(null);\n }\n\n const client = capabilities.get(ClientCapabilities.Client);\n\n // Subscribe to spaces observable to react when space becomes available.\n const spaces = get(CreateAtom.fromObservable(client.spaces));\n const space = spaces?.find((s) => s.id === spaceId);\n if (!space) {\n return Effect.succeed(null);\n }\n\n // Only subscribe to these atoms if the space exists.\n const state = get(capabilities.get(SpaceCapabilities.State));\n const ephemeralState = get(capabilities.get(SpaceCapabilities.EphemeralState));\n\n const { graph } = capabilities.get(AppCapabilities.AppGraph);\n const [spacesOrder] = get(\n AtomQuery.make(client.spaces.default.db, Filter.type(Expando.Expando, { key: SHARED })),\n );\n\n return Effect.succeed(\n constructSpaceNode({\n space,\n navigable: ephemeralState.navigableCollections,\n personal: space === client.spaces.default,\n namesCache: state.spaceNames,\n resolve: resolve(get),\n graph,\n spacesOrder,\n }),\n );\n },\n }),\n\n // Create space actions.\n GraphBuilder.createExtension({\n id: `${meta.id}/actions`,\n match: whenSpace,\n actions: (space, get) => {\n const [client] = get(capabilities.atom(ClientCapabilities.Client));\n const ephemeralAtom = capabilities.get(SpaceCapabilities.EphemeralState);\n const ephemeralState = get(ephemeralAtom);\n\n if (!client) {\n return Effect.succeed([]);\n }\n\n return Effect.succeed(\n constructSpaceActions({\n space,\n personal: space === client.spaces.default,\n migrating: ephemeralState.sdkMigrationRunning[space.id],\n }),\n );\n },\n }),\n\n // Create nodes for objects in the root collection of a space.\n GraphBuilder.createExtension({\n id: `${meta.id}/root-collection`,\n match: whenSpace,\n connector: (space, get) => {\n const ephemeralAtom = capabilities.get(SpaceCapabilities.EphemeralState);\n const ephemeralState = get(ephemeralAtom);\n const spaceState = get(CreateAtom.fromObservable(space.state));\n if (spaceState !== SpaceState.SPACE_READY) {\n return Effect.succeed([]);\n }\n\n // Get the collection ref from space.properties snapshot (AtomObj cached via Atom.family).\n const propertiesSnapshot = get(AtomObj.make(space.properties));\n const collectionRef = propertiesSnapshot[Collection.Collection.typename] as\n | Ref.Ref<Collection.Collection>\n | undefined;\n // Resolve the collection using AtomObj (subscribes to collection changes).\n const collection = collectionRef ? get(AtomObj.make(collectionRef)) : undefined;\n if (!collection) {\n return Effect.succeed([]);\n }\n\n const rawRefs = collection.objects ?? [];\n\n // TODO(wittjosiah): Workaround for Obj.getTypename not working on snapshots.\n // AtomObj.make(ref) returns snapshots (plain objects without ECHO metadata),\n // but createObjectNode needs live objects to access typename and other metadata.\n // Once Obj.getTypename works on snapshots, we can use snapshots directly.\n const objects = rawRefs\n .map((ref) => {\n // Subscribe to the ref for reactivity (triggers re-render when target changes).\n get(AtomObj.make(ref));\n // Return the live object for createObjectNode (has typename metadata).\n return ref.target;\n })\n .filter(isNonNullable);\n\n return Effect.succeed(\n objects\n .map((object) =>\n createObjectNode({\n db: space.db,\n object,\n resolve: resolve(get),\n navigable: ephemeralState.navigableCollections,\n parentCollection: collectionRef?.target,\n }),\n )\n .filter(isNonNullable),\n );\n },\n }),\n\n // Create nodes for objects in a collection or by its DXN.\n GraphBuilder.createExtension({\n id: `${meta.id}/objects`,\n match: (node) => (Obj.instanceOf(Collection.Collection, node.data) ? Option.some(node.data) : Option.none()),\n connector: (collection, get) => {\n const ephemeralAtom = capabilities.get(SpaceCapabilities.EphemeralState);\n const ephemeralState = get(ephemeralAtom);\n const space = getSpace(collection);\n\n // Get collection snapshot using AtomObj (cached via Atom.family).\n const collectionSnapshot = get(AtomObj.make(collection));\n const refs = collectionSnapshot.objects ?? [];\n\n // TODO(wittjosiah): Workaround for Obj.getTypename not working on snapshots.\n // See root-collection connector for details.\n const objects = refs\n .map((ref) => {\n get(AtomObj.make(ref));\n return ref.target;\n })\n .filter(isNonNullable);\n\n return Effect.succeed(\n objects\n .map(\n (object) =>\n space &&\n createObjectNode({\n object,\n db: space.db,\n resolve: resolve(get),\n navigable: ephemeralState.navigableCollections,\n parentCollection: collection,\n }),\n )\n .filter(isNonNullable),\n );\n },\n resolver: (id, get) => {\n const client = capabilities.get(ClientCapabilities.Client);\n const dxn = DXN.tryParse(id)?.asEchoDXN();\n if (!dxn || !dxn.spaceId) {\n return Effect.succeed(null);\n }\n\n const space = client.spaces.get(dxn.spaceId);\n if (!space) {\n return Effect.succeed(null);\n }\n\n const object = get(AtomQuery.make(space.db, Filter.id(dxn.echoId))).at(0);\n if (!Obj.isObject(object)) {\n return Effect.succeed(null);\n }\n\n return Effect.succeed(\n createObjectNode({\n object,\n db: space.db,\n resolve: resolve(get),\n disposition: 'hidden',\n }),\n );\n },\n }),\n\n // Create object nodes for schema-based system collections.\n GraphBuilder.createExtension({\n id: `${meta.id}/system-collections`,\n match: (node) => (Obj.instanceOf(Collection.Managed, node.data) ? Option.some(node.data) : Option.none()),\n connector: (collection, get) => {\n const client = get(capabilities.atom(ClientCapabilities.Client)).at(0);\n const space = getSpace(collection);\n const schema = client?.graph.schemaRegistry\n .query({ typename: collection.key, location: ['runtime'], includeSystem: true })\n .runSync()[0];\n if (!space || !schema) {\n return Effect.succeed([]);\n }\n\n return Effect.succeed(\n get(AtomQuery.make(space.db, Filter.type(schema)))\n .map((object) => {\n get(AtomObj.make(object));\n return createObjectNode({\n object,\n db: space.db,\n managedCollectionChild: true,\n resolve: resolve(get),\n });\n })\n .filter(isNonNullable),\n );\n },\n }),\n\n // Create branch nodes for static schema record types.\n GraphBuilder.createExtension({\n id: `${meta.id}/static-schemas`,\n match: (node: Node.Node) =>\n Obj.instanceOf(Collection.Managed, node.data) && node.data.key === Type.getTypename(Type.PersistentType)\n ? Option.some(node.data)\n : Option.none(),\n connector: (collection, get) => {\n const client = get(capabilities.atom(ClientCapabilities.Client)).at(0);\n const space = getSpace(collection);\n if (!space) {\n return Effect.succeed([]);\n }\n\n // Get staticRecords from properties snapshot (AtomObj cached via Atom.family).\n const propertiesSnapshot = get(AtomObj.make(space.properties));\n const staticRecords = (propertiesSnapshot.staticRecords ?? []) as string[];\n\n return Effect.succeed(\n staticRecords\n .map((typename) => client?.graph.schemaRegistry.query({ typename, location: ['runtime'] }).runSync()[0])\n .filter(isNonNullable)\n .map((schema) => createStaticSchemaNode({ schema, space })),\n );\n },\n }),\n\n // Create actions for static schema record types.\n GraphBuilder.createExtension({\n id: `${meta.id}/static-schema-actions`,\n match: (node) => {\n const space = isSpace(node.properties.space) ? node.properties.space : undefined;\n return space && Schema.isSchema(node.data) ? Option.some({ space, schema: node.data }) : Option.none();\n },\n actions: ({ space, schema }, get) => {\n const schemas =\n get(capabilities.atom(ClientCapabilities.Client))\n .at(0)\n ?.graph.schemaRegistry.query({ location: ['runtime'] })\n .runSync() ?? [];\n const filter = Filter.or(\n ...schemas\n .filter((schema) => ViewAnnotation.get(schema).pipe(Option.getOrElse(() => false)))\n .map((schema) => Filter.type(schema)),\n );\n\n const objects = get(AtomQuery.make(space.db, filter));\n\n // Filter views that match the schema typename using AtomObj and AtomRef (cached via Atom.family).\n const targetTypename = Type.getTypename(schema as Type.Obj.Any);\n const filteredViews = objects.filter((viewObject) => {\n const viewSnapshot = get(AtomObj.make(viewObject));\n const viewRef = (viewSnapshot as any).view;\n const viewTarget = viewRef ? get(AtomObj.make(viewRef)) : undefined;\n return getTypenameFromQuery((viewTarget as any)?.query?.ast) === targetTypename;\n });\n const deletable = filteredViews.length === 0;\n\n return Effect.succeed(\n createStaticSchemaActions({\n schema: schema as Type.Obj.Any,\n space,\n deletable,\n }),\n );\n },\n }),\n\n // Create nodes for views of record types.\n GraphBuilder.createExtension({\n id: `${meta.id}/schema-views`,\n match: (node) => {\n const space = getSpace(node.data) ?? (isSpace(node.properties.space) ? node.properties.space : undefined);\n return space && (Obj.instanceOf(Type.PersistentType, node.data) || Schema.isSchema(node.data))\n ? Option.some({ space, schema: node.data })\n : Option.none();\n },\n connector: ({ space, schema }, get) => {\n const schemas =\n get(capabilities.atom(ClientCapabilities.Client))\n .at(0)\n ?.graph.schemaRegistry.query({ location: ['runtime'] })\n .runSync() ?? [];\n const filter = Filter.or(\n ...schemas\n .filter((schema) => ViewAnnotation.get(schema).pipe(Option.getOrElse(() => false)))\n .map((schema) => Filter.type(schema)),\n );\n\n const typename = Schema.isSchema(schema) ? Type.getTypename(schema as Type.Obj.Any) : schema.typename;\n const objects = get(AtomQuery.make(space.db, filter));\n\n // Filter and map using AtomObj and AtomRef (cached via Atom.family).\n return Effect.succeed(\n objects\n .filter((object) => {\n const objectSnapshot = get(AtomObj.make(object));\n const viewRef = (objectSnapshot as any).view;\n const viewTarget = viewRef ? get(AtomObj.make(viewRef)) : undefined;\n return getTypenameFromQuery((viewTarget as any)?.query?.ast) === typename;\n })\n .map((object) =>\n createObjectNode({\n object,\n db: space.db,\n resolve: resolve(get),\n droppable: false,\n }),\n )\n .filter(isNonNullable),\n );\n },\n }),\n\n // Create collection actions and action groups.\n GraphBuilder.createExtension({\n id: `${meta.id}/object-actions`,\n match: (node) => {\n const space = getSpace(node.data);\n return space && Obj.isObject(node.data) && Obj.getTypename(node.data) === node.type\n ? Option.some({ space, object: node.data })\n : Option.none();\n },\n actions: ({ space, object }, get) => {\n const schemas =\n get(capabilities.atom(ClientCapabilities.Client))\n .at(0)\n ?.graph.schemaRegistry.query({ location: ['runtime'] })\n .runSync() ?? [];\n const filter = Filter.or(\n ...schemas\n .filter((schema) => ViewAnnotation.get(schema).pipe(Option.getOrElse(() => false)))\n .map((schema) => Filter.type(schema)),\n );\n\n const isSchema = Obj.instanceOf(Type.PersistentType, object);\n\n let deletable = !isSchema && !Obj.instanceOf(Collection.Managed, object);\n if (isSchema) {\n const objects = get(AtomQuery.make(space.db, filter));\n // Filter views using AtomObj and AtomRef (cached via Atom.family).\n const filteredViews = objects.filter((viewObject) => {\n const viewSnapshot = get(AtomObj.make(viewObject));\n const viewRef = (viewSnapshot as any).view;\n const viewTarget = viewRef ? get(AtomObj.make(viewRef)) : undefined;\n return getTypenameFromQuery((viewTarget as any)?.query?.ast) === object.typename;\n });\n deletable = filteredViews.length === 0;\n }\n\n const [appGraph] = get(capabilities.atom(AppCapabilities.AppGraph));\n const ephemeralAtom = capabilities.get(SpaceCapabilities.EphemeralState);\n const ephemeralState = get(ephemeralAtom);\n\n if (!appGraph) {\n return Effect.succeed([]);\n }\n\n return Effect.succeed(\n constructObjectActions({\n object,\n graph: appGraph.graph,\n resolve: resolve(get),\n capabilities,\n deletable,\n navigable: ephemeralState.navigableCollections,\n shareableLinkOrigin,\n }),\n );\n },\n }),\n\n // View selected objects.\n GraphBuilder.createExtension({\n id: `${meta.id}/selected-objects`,\n match: (node) => {\n if (!Obj.isObject(node.data)) {\n return Option.none();\n }\n\n const schema = Obj.getSchema(node.data);\n const isView = Option.fromNullable(schema).pipe(\n Option.flatMap((schema) => ViewAnnotation.get(schema)),\n Option.getOrElse(() => false),\n );\n if (!isView) {\n return Option.none();\n }\n\n return Option.some(node);\n },\n connector: (node) =>\n Effect.succeed([\n {\n id: [node.id, 'selected-objects'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: 'selected-objects',\n properties: {\n label: ['companion selected objects label', { ns: meta.id }],\n icon: 'ph--tree-view--regular',\n disposition: 'hidden',\n },\n },\n ]),\n }),\n\n // Object settings plank companion.\n GraphBuilder.createExtension({\n id: `${meta.id}/settings`,\n match: NodeMatcher.whenEchoObjectMatches,\n connector: (node) =>\n Effect.succeed([\n {\n id: [node.id, 'settings'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: 'settings',\n properties: {\n label: ['object settings label', { ns: meta.id }],\n icon: 'ph--sliders--regular',\n disposition: 'hidden',\n position: 'fallback',\n },\n },\n ]),\n }),\n ]);\n\n return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);\n }),\n);\n"],
5
+ "mappings": "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",
6
+ "names": ["Effect", "Option", "Schema", "Capability", "AppCapabilities", "SpaceState", "getSpace", "isSpace", "parseId", "DXN", "Filter", "Obj", "Type", "AtomObj", "AtomQuery", "Operation", "ClientCapabilities", "ATTENDABLE_PATH_SEPARATOR", "PLANK_COMPANION_TYPE", "CreateAtom", "GraphBuilder", "NodeMatcher", "Collection", "Expando", "ViewAnnotation", "getTypenameFromQuery", "isNonNullable", "whenSpace", "node", "type", "SPACE_TYPE", "isSpace", "data", "some", "none", "Capability", "makeModule", "fnUntraced", "props", "shareableLinkOrigin", "window", "location", "origin", "capabilities", "Service", "resolve", "get", "typename", "getAll", "AppCapabilities", "Metadata", "find", "id", "metadata", "extensions", "all", "GraphBuilder", "createExtension", "meta", "position", "match", "NodeMatcher", "whenRoot", "actions", "succeed", "SpaceOperation", "OpenCreateSpace", "key", "Operation", "invoke", "properties", "label", "ns", "icon", "testId", "disposition", "Join", "OpenMembers", "client", "ClientCapabilities", "Client", "space", "getActiveSpace", "spaces", "default", "keyBinding", "macos", "windows", "OpenSettings", "connector", "stateAtom", "SpaceCapabilities", "State", "ephemeralAtom", "EphemeralState", "spacesAtom", "CreateAtom", "fromObservable", "isReadyAtom", "isReady", "settingsAtom", "Settings", "settings", "state", "ephemeralState", "spacesOrder", "AtomQuery", "make", "db", "Filter", "Expando", "SHARED", "graph", "AppGraph", "spacesOrderSnapshot", "AtomObj", "undefined", "order", "orderMap", "Map", "map", "index", "spaceStates", "forEach", "SpaceState", "SPACE_READY", "filter", "has", "sort", "a", "b", "i", "showHidden", "SPACE_INACTIVE", "constructSpaceNode", "navigable", "navigableCollections", "personal", "namesCache", "spaceNames", "resolver", "spaceId", "parseId", "s", "atom", "constructSpaceActions", "migrating", "sdkMigrationRunning", "spaceState", "propertiesSnapshot", "collectionRef", "Collection", "collection", "rawRefs", "objects", "ref", "target", "isNonNullable", "object", "createObjectNode", "parentCollection", "Obj", "instanceOf", "getSpace", "collectionSnapshot", "refs", "dxn", "DXN", "tryParse", "asEchoDXN", "echoId", "at", "isObject", "Managed", "schema", "schemaRegistry", "query", "includeSystem", "runSync", "managedCollectionChild", "Type", "getTypename", "PersistentType", "staticRecords", "createStaticSchemaNode", "isSchema", "schemas", "or", "ViewAnnotation", "pipe", "getOrElse", "targetTypename", "filteredViews", "viewObject", "viewSnapshot", "viewRef", "view", "viewTarget", "getTypenameFromQuery", "ast", "deletable", "length", "createStaticSchemaActions", "objectSnapshot", "droppable", "appGraph", "constructObjectActions", "getSchema", "isView", "fromNullable", "flatMap", "join", "ATTENDABLE_PATH_SEPARATOR", "PLANK_COMPANION_TYPE", "whenEchoObjectMatches", "contributes", "AppGraphBuilder"]
7
+ }