@dxos/plugin-space 0.8.4-main.84f28bd → 0.8.4-main.c1de068

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 (145) hide show
  1. package/dist/lib/browser/CollectionMain-D2B75XBS.mjs +31 -0
  2. package/dist/lib/browser/CollectionMain-D2B75XBS.mjs.map +7 -0
  3. package/dist/lib/browser/ObjectDetailsPanel-YPTDQKMG.mjs +88 -0
  4. package/dist/lib/browser/ObjectDetailsPanel-YPTDQKMG.mjs.map +7 -0
  5. package/dist/lib/browser/{app-graph-builder-PMDF6PJV.mjs → app-graph-builder-7CZZJS3S.mjs} +138 -22
  6. package/dist/lib/browser/app-graph-builder-7CZZJS3S.mjs.map +7 -0
  7. package/dist/lib/browser/{app-graph-serializer-UKYMBX4O.mjs → app-graph-serializer-H6AW7KGS.mjs} +4 -4
  8. package/dist/lib/browser/{chunk-XXIPJLJF.mjs → chunk-CEFHNVU7.mjs} +2 -1
  9. package/dist/lib/browser/chunk-CEFHNVU7.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-C7KGJTAL.mjs → chunk-JS3MMC42.mjs} +2 -1
  11. package/dist/lib/browser/{chunk-C7KGJTAL.mjs.map → chunk-JS3MMC42.mjs.map} +3 -3
  12. package/dist/lib/browser/{chunk-6VLSHG4A.mjs → chunk-QACNNDOT.mjs} +64 -3
  13. package/dist/lib/browser/chunk-QACNNDOT.mjs.map +7 -0
  14. package/dist/lib/browser/{chunk-S6NY637J.mjs → chunk-SGTQ52SU.mjs} +57 -3
  15. package/dist/lib/browser/chunk-SGTQ52SU.mjs.map +7 -0
  16. package/dist/lib/browser/{chunk-GVTXQCIW.mjs → chunk-V7MJSSBQ.mjs} +355 -286
  17. package/dist/lib/browser/chunk-V7MJSSBQ.mjs.map +7 -0
  18. package/dist/lib/browser/{chunk-WBSEOLEM.mjs → chunk-XUYKJUU7.mjs} +124 -21
  19. package/dist/lib/browser/chunk-XUYKJUU7.mjs.map +7 -0
  20. package/dist/lib/browser/index.mjs +98 -9
  21. package/dist/lib/browser/index.mjs.map +3 -3
  22. package/dist/lib/browser/{intent-resolver-WK5WYFH3.mjs → intent-resolver-TIXVDYN7.mjs} +164 -14
  23. package/dist/lib/browser/intent-resolver-TIXVDYN7.mjs.map +7 -0
  24. package/dist/lib/browser/meta.json +1 -1
  25. package/dist/lib/browser/{react-root-7S6FIC5G.mjs → react-root-N2J7TDRX.mjs} +5 -5
  26. package/dist/lib/browser/{react-surface-6C3YJNDK.mjs → react-surface-TPNLWJJH.mjs} +35 -14
  27. package/dist/lib/browser/react-surface-TPNLWJJH.mjs.map +7 -0
  28. package/dist/lib/browser/{schema-defs-K3B3OAH4.mjs → schema-defs-Z6FC4AHC.mjs} +2 -2
  29. package/dist/lib/browser/{settings-XNWYRWNM.mjs → settings-4IMP5RYT.mjs} +2 -2
  30. package/dist/lib/browser/{spaces-ready-K7NSNBHM.mjs → spaces-ready-TOPG6IV4.mjs} +4 -4
  31. package/dist/lib/browser/{state-522XTUR4.mjs → state-QYZAB45H.mjs} +2 -2
  32. package/dist/lib/browser/types/index.mjs +1 -1
  33. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs +32 -0
  34. package/dist/lib/node-esm/CollectionMain-ZJIFCWKZ.mjs.map +7 -0
  35. package/dist/lib/node-esm/ObjectDetailsPanel-QKZEDSZK.mjs +89 -0
  36. package/dist/lib/node-esm/ObjectDetailsPanel-QKZEDSZK.mjs.map +7 -0
  37. package/dist/lib/node-esm/{app-graph-builder-TO72W6MI.mjs → app-graph-builder-KGIGWC72.mjs} +138 -22
  38. package/dist/lib/node-esm/app-graph-builder-KGIGWC72.mjs.map +7 -0
  39. package/dist/lib/node-esm/{app-graph-serializer-LA3IZDXJ.mjs → app-graph-serializer-2ICUGQQT.mjs} +4 -4
  40. package/dist/lib/node-esm/{chunk-HJJHLWKY.mjs → chunk-4AOMYKDE.mjs} +124 -21
  41. package/dist/lib/node-esm/chunk-4AOMYKDE.mjs.map +7 -0
  42. package/dist/lib/node-esm/{chunk-72QMMRKC.mjs → chunk-5HHYE264.mjs} +2 -1
  43. package/dist/lib/node-esm/{chunk-72QMMRKC.mjs.map → chunk-5HHYE264.mjs.map} +3 -3
  44. package/dist/lib/node-esm/{chunk-AT7LGFER.mjs → chunk-5T3ZH23B.mjs} +2 -1
  45. package/dist/lib/node-esm/chunk-5T3ZH23B.mjs.map +7 -0
  46. package/dist/lib/node-esm/{chunk-OUBADVJE.mjs → chunk-6X5DLJM5.mjs} +355 -286
  47. package/dist/lib/node-esm/chunk-6X5DLJM5.mjs.map +7 -0
  48. package/dist/lib/node-esm/{chunk-2THX6G4C.mjs → chunk-JH6F4C3I.mjs} +57 -3
  49. package/dist/lib/node-esm/chunk-JH6F4C3I.mjs.map +7 -0
  50. package/dist/lib/node-esm/{chunk-SXD6T2N4.mjs → chunk-P442DOQ3.mjs} +64 -3
  51. package/dist/lib/node-esm/chunk-P442DOQ3.mjs.map +7 -0
  52. package/dist/lib/node-esm/index.mjs +98 -9
  53. package/dist/lib/node-esm/index.mjs.map +3 -3
  54. package/dist/lib/node-esm/{intent-resolver-HSR27ME4.mjs → intent-resolver-MHGHRGDT.mjs} +164 -14
  55. package/dist/lib/node-esm/intent-resolver-MHGHRGDT.mjs.map +7 -0
  56. package/dist/lib/node-esm/meta.json +1 -1
  57. package/dist/lib/node-esm/{react-root-HUK3ANLV.mjs → react-root-KW3TGJGY.mjs} +5 -5
  58. package/dist/lib/node-esm/{react-surface-AGAWX7DD.mjs → react-surface-UUIUUD6P.mjs} +35 -14
  59. package/dist/lib/node-esm/react-surface-UUIUUD6P.mjs.map +7 -0
  60. package/dist/lib/node-esm/{schema-defs-4MCDG4DV.mjs → schema-defs-WHJM7UZE.mjs} +2 -2
  61. package/dist/lib/node-esm/{settings-YGKHGFPH.mjs → settings-SAOBPND3.mjs} +2 -2
  62. package/dist/lib/node-esm/{spaces-ready-UM2P3DCR.mjs → spaces-ready-HIUKNDZK.mjs} +4 -4
  63. package/dist/lib/node-esm/{state-C4IOXPZP.mjs → state-ZVEHQ4BJ.mjs} +2 -2
  64. package/dist/lib/node-esm/types/index.mjs +1 -1
  65. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  66. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  67. package/dist/types/src/capabilities/capabilities.d.ts +9 -3
  68. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  69. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  70. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  71. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  72. package/dist/types/src/components/CollectionMain.d.ts +1 -0
  73. package/dist/types/src/components/CollectionMain.d.ts.map +1 -1
  74. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +3 -2
  75. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  76. package/dist/types/src/components/MembersContainer.d.ts.map +1 -1
  77. package/dist/types/src/components/MenuFooter.d.ts.map +1 -1
  78. package/dist/types/src/components/ObjectDetailsPanel.d.ts +9 -0
  79. package/dist/types/src/components/ObjectDetailsPanel.d.ts.map +1 -0
  80. package/dist/types/src/components/PersistenceStatus.d.ts.map +1 -1
  81. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts +1 -1
  82. package/dist/types/src/components/SyncStatus/status.d.ts +5 -5
  83. package/dist/types/src/components/ViewEditor.d.ts +8 -0
  84. package/dist/types/src/components/ViewEditor.d.ts.map +1 -0
  85. package/dist/types/src/components/index.d.ts +8 -1
  86. package/dist/types/src/components/index.d.ts.map +1 -1
  87. package/dist/types/src/events.d.ts +1 -0
  88. package/dist/types/src/events.d.ts.map +1 -1
  89. package/dist/types/src/translations.d.ts +61 -0
  90. package/dist/types/src/translations.d.ts.map +1 -1
  91. package/dist/types/src/types/types.d.ts +82 -2
  92. package/dist/types/src/types/types.d.ts.map +1 -1
  93. package/dist/types/src/util.d.ts +27 -2
  94. package/dist/types/src/util.d.ts.map +1 -1
  95. package/dist/types/tsconfig.tsbuildinfo +1 -1
  96. package/package.json +47 -49
  97. package/src/SpacePlugin.ts +87 -4
  98. package/src/capabilities/app-graph-builder.ts +165 -5
  99. package/src/capabilities/capabilities.ts +8 -3
  100. package/src/capabilities/intent-resolver.ts +114 -5
  101. package/src/capabilities/react-surface.tsx +47 -10
  102. package/src/components/AwaitingObject.tsx +4 -6
  103. package/src/components/CollectionMain.tsx +2 -0
  104. package/src/components/CreateDialog/CreateObjectDialog.tsx +29 -25
  105. package/src/components/MembersContainer.tsx +5 -3
  106. package/src/components/MenuFooter.tsx +2 -3
  107. package/src/components/ObjectDetailsPanel.tsx +77 -0
  108. package/src/components/PersistenceStatus.tsx +5 -6
  109. package/src/components/PopoverRenameObject.tsx +2 -2
  110. package/src/components/SyncStatus/SyncStatus.tsx +1 -1
  111. package/src/components/SyncStatus/status.ts +4 -4
  112. package/src/components/ViewEditor.tsx +64 -0
  113. package/src/components/index.ts +6 -1
  114. package/src/events.ts +1 -0
  115. package/src/translations.ts +62 -0
  116. package/src/types/types.ts +56 -3
  117. package/src/util.tsx +115 -20
  118. package/dist/lib/browser/app-graph-builder-PMDF6PJV.mjs.map +0 -7
  119. package/dist/lib/browser/chunk-6VLSHG4A.mjs.map +0 -7
  120. package/dist/lib/browser/chunk-GVTXQCIW.mjs.map +0 -7
  121. package/dist/lib/browser/chunk-S6NY637J.mjs.map +0 -7
  122. package/dist/lib/browser/chunk-WBSEOLEM.mjs.map +0 -7
  123. package/dist/lib/browser/chunk-XXIPJLJF.mjs.map +0 -7
  124. package/dist/lib/browser/intent-resolver-WK5WYFH3.mjs.map +0 -7
  125. package/dist/lib/browser/react-surface-6C3YJNDK.mjs.map +0 -7
  126. package/dist/lib/node-esm/app-graph-builder-TO72W6MI.mjs.map +0 -7
  127. package/dist/lib/node-esm/chunk-2THX6G4C.mjs.map +0 -7
  128. package/dist/lib/node-esm/chunk-AT7LGFER.mjs.map +0 -7
  129. package/dist/lib/node-esm/chunk-HJJHLWKY.mjs.map +0 -7
  130. package/dist/lib/node-esm/chunk-OUBADVJE.mjs.map +0 -7
  131. package/dist/lib/node-esm/chunk-SXD6T2N4.mjs.map +0 -7
  132. package/dist/lib/node-esm/intent-resolver-HSR27ME4.mjs.map +0 -7
  133. package/dist/lib/node-esm/react-surface-AGAWX7DD.mjs.map +0 -7
  134. /package/dist/lib/browser/{app-graph-serializer-UKYMBX4O.mjs.map → app-graph-serializer-H6AW7KGS.mjs.map} +0 -0
  135. /package/dist/lib/browser/{react-root-7S6FIC5G.mjs.map → react-root-N2J7TDRX.mjs.map} +0 -0
  136. /package/dist/lib/browser/{schema-defs-K3B3OAH4.mjs.map → schema-defs-Z6FC4AHC.mjs.map} +0 -0
  137. /package/dist/lib/browser/{settings-XNWYRWNM.mjs.map → settings-4IMP5RYT.mjs.map} +0 -0
  138. /package/dist/lib/browser/{spaces-ready-K7NSNBHM.mjs.map → spaces-ready-TOPG6IV4.mjs.map} +0 -0
  139. /package/dist/lib/browser/{state-522XTUR4.mjs.map → state-QYZAB45H.mjs.map} +0 -0
  140. /package/dist/lib/node-esm/{app-graph-serializer-LA3IZDXJ.mjs.map → app-graph-serializer-2ICUGQQT.mjs.map} +0 -0
  141. /package/dist/lib/node-esm/{react-root-HUK3ANLV.mjs.map → react-root-KW3TGJGY.mjs.map} +0 -0
  142. /package/dist/lib/node-esm/{schema-defs-4MCDG4DV.mjs.map → schema-defs-WHJM7UZE.mjs.map} +0 -0
  143. /package/dist/lib/node-esm/{settings-YGKHGFPH.mjs.map → settings-SAOBPND3.mjs.map} +0 -0
  144. /package/dist/lib/node-esm/{spaces-ready-UM2P3DCR.mjs.map → spaces-ready-HIUKNDZK.mjs.map} +0 -0
  145. /package/dist/lib/node-esm/{state-C4IOXPZP.mjs.map → state-ZVEHQ4BJ.mjs.map} +0 -0
@@ -10,6 +10,7 @@ import {
10
10
  JoinDialog,
11
11
  MembersContainer,
12
12
  MenuFooter,
13
+ ObjectDetailsPanel,
13
14
  ObjectSettingsContainer,
14
15
  POPOVER_RENAME_OBJECT,
15
16
  POPOVER_RENAME_SPACE,
@@ -20,17 +21,18 @@ import {
20
21
  SpacePluginSettings,
21
22
  SpacePresence,
22
23
  SpaceSettingsContainer,
23
- SyncStatus
24
- } from "./chunk-GVTXQCIW.mjs";
24
+ SyncStatus,
25
+ ViewEditor
26
+ } from "./chunk-V7MJSSBQ.mjs";
25
27
  import "./chunk-VLBRSGJ2.mjs";
26
28
  import {
27
29
  SpaceCapabilities
28
- } from "./chunk-XXIPJLJF.mjs";
29
- import "./chunk-WBSEOLEM.mjs";
30
+ } from "./chunk-CEFHNVU7.mjs";
31
+ import "./chunk-XUYKJUU7.mjs";
30
32
  import {
31
33
  HueAnnotationId,
32
34
  IconAnnotationId
33
- } from "./chunk-S6NY637J.mjs";
35
+ } from "./chunk-SGTQ52SU.mjs";
34
36
  import {
35
37
  SPACE_PLUGIN
36
38
  } from "./chunk-FBCGT5YY.mjs";
@@ -43,7 +45,7 @@ import { findAnnotation } from "@dxos/effect";
43
45
  import { SettingsStore } from "@dxos/local-storage";
44
46
  import { ClientCapabilities } from "@dxos/plugin-client";
45
47
  import { useClient } from "@dxos/react-client";
46
- import { getSpace, isLiveObject, isSpace, parseId, SpaceState, useSpace } from "@dxos/react-client/echo";
48
+ import { fullyQualifiedId, getSpace, isLiveObject, isSpace, parseId, SpaceState, useSpace } from "@dxos/react-client/echo";
47
49
  import { Input, useTranslation } from "@dxos/react-ui";
48
50
  import { SelectInput } from "@dxos/react-ui-form";
49
51
  import { HuePicker, IconPicker } from "@dxos/react-ui-pickers";
@@ -145,6 +147,16 @@ var react_surface_default = ({ createInvitationUrl }) => contributes(Capabilitie
145
147
  });
146
148
  }
147
149
  }),
150
+ createSurface({
151
+ id: `${SPACE_PLUGIN}/selected-objects`,
152
+ role: "article",
153
+ filter: (data) => Obj.instanceOf(DataType.View, data.companionTo) && data.subject === "selected-objects",
154
+ component: ({ data }) => /* @__PURE__ */ React.createElement(ObjectDetailsPanel, {
155
+ key: fullyQualifiedId(data.companionTo),
156
+ objectId: fullyQualifiedId(data.companionTo),
157
+ view: data.companionTo
158
+ })
159
+ }),
148
160
  createSurface({
149
161
  id: JOIN_DIALOG,
150
162
  role: "dialog",
@@ -229,21 +241,22 @@ var react_surface_default = ({ createInvitationUrl }) => contributes(Capabilitie
229
241
  }
230
242
  const annotation = findAnnotation(schema.ast, TypenameAnnotationId);
231
243
  const schemaWhitelists = useCapabilities(ClientCapabilities.SchemaWhiteList);
232
- const whitelistedTypenames = useMemo(() => new Set(schemaWhitelists.flatMap((typeArray) => typeArray.map((type) => type.typename))), [
244
+ const whitelistedTypenames = useMemo(() => new Set(schemaWhitelists.flatMap((typeArray) => typeArray.map((type) => Type.getTypename(type)))), [
233
245
  schemaWhitelists
234
246
  ]);
235
247
  const objectForms = useCapabilities(SpaceCapabilities.ObjectForm);
236
- const objectFormTypenames = useMemo(() => new Set(objectForms.map((form) => Type.getTypename(form.objectSchema)).filter((typename) => !OMIT.includes(typename))), [
248
+ const objectFormTypenames = useMemo(() => new Set(objectForms.map((form) => Type.getTypename(form.objectSchema)).filter((typename) => !OMIT.includes(typename) && !typename.endsWith("View"))), [
237
249
  objectForms
238
250
  ]);
239
251
  const fixed = client.graph.schemaRegistry.schemas.filter((schema2) => {
240
252
  const limitedStatic = annotation.includes("limited-static") && whitelistedTypenames.has(Type.getTypename(schema2));
253
+ const unusedStatic = annotation.includes("unused-static") && whitelistedTypenames.has(Type.getTypename(schema2)) && !space.properties.staticRecords?.includes(Type.getTypename(schema2));
241
254
  const objectForm = annotation.includes("object-form") && objectFormTypenames.has(Type.getTypename(schema2));
242
- return annotation.includes("static") || limitedStatic || objectForm;
255
+ return annotation.includes("static") || limitedStatic || unusedStatic || objectForm;
243
256
  });
244
257
  const dynamic = space?.db.schemaRegistry.query().runSync();
245
258
  const typenames = Array.from(/* @__PURE__ */ new Set([
246
- ...annotation.includes("limited-static") || annotation.includes("static") || annotation.includes("object-form") ? fixed.map((schema2) => Type.getTypename(schema2)) : [],
259
+ ...annotation.includes("limited-static") || annotation.includes("unused-static") || annotation.includes("static") || annotation.includes("object-form") ? fixed.map((schema2) => Type.getTypename(schema2)) : [],
247
260
  ...annotation.includes("dynamic") ? dynamic.map((schema2) => schema2.typename) : []
248
261
  ])).sort();
249
262
  const options = useMemo(() => typenames.map((typename) => ({
@@ -252,7 +265,7 @@ var react_surface_default = ({ createInvitationUrl }) => contributes(Capabilitie
252
265
  ns: typename,
253
266
  defaultValue: typename
254
267
  })
255
- })), [
268
+ })).toSorted((a, b) => a.label.localeCompare(b.label)), [
256
269
  t,
257
270
  typenames
258
271
  ]);
@@ -262,9 +275,17 @@ var react_surface_default = ({ createInvitationUrl }) => contributes(Capabilitie
262
275
  });
263
276
  }
264
277
  }),
278
+ createSurface({
279
+ id: `${SPACE_PLUGIN}/object-settings`,
280
+ role: "object-settings",
281
+ filter: (data) => Obj.instanceOf(DataType.View, data.subject),
282
+ component: ({ data }) => /* @__PURE__ */ React.createElement(ViewEditor, {
283
+ view: data.subject
284
+ })
285
+ }),
265
286
  createSurface({
266
287
  id: POPOVER_RENAME_SPACE,
267
- role: "popover",
288
+ role: "card--popover",
268
289
  filter: (data) => data.component === POPOVER_RENAME_SPACE && isSpace(data.props),
269
290
  component: ({ data }) => /* @__PURE__ */ React.createElement(PopoverRenameSpace, {
270
291
  space: data.props
@@ -272,7 +293,7 @@ var react_surface_default = ({ createInvitationUrl }) => contributes(Capabilitie
272
293
  }),
273
294
  createSurface({
274
295
  id: POPOVER_RENAME_OBJECT,
275
- role: "popover",
296
+ role: "card--popover",
276
297
  filter: (data) => data.component === POPOVER_RENAME_OBJECT && isLiveObject(data.props),
277
298
  component: ({ data }) => /* @__PURE__ */ React.createElement(PopoverRenameObject, {
278
299
  object: data.props
@@ -350,4 +371,4 @@ var react_surface_default = ({ createInvitationUrl }) => contributes(Capabilitie
350
371
  export {
351
372
  react_surface_default as default
352
373
  };
353
- //# sourceMappingURL=react-surface-6C3YJNDK.mjs.map
374
+ //# sourceMappingURL=react-surface-TPNLWJJH.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/react-surface.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Schema } from 'effect';\nimport React, { useCallback, useMemo } from 'react';\n\nimport {\n Capabilities,\n contributes,\n createSurface,\n Surface,\n useCapabilities,\n useCapability,\n useLayout,\n} from '@dxos/app-framework';\nimport { Obj, Type } from '@dxos/echo';\nimport { findAnnotation } from '@dxos/effect';\nimport { SettingsStore } from '@dxos/local-storage';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { useClient } from '@dxos/react-client';\nimport {\n fullyQualifiedId,\n getSpace,\n isLiveObject,\n isSpace,\n parseId,\n SpaceState,\n useSpace,\n type Space,\n} from '@dxos/react-client/echo';\nimport { Input, useTranslation } from '@dxos/react-ui';\nimport { type InputProps, SelectInput } from '@dxos/react-ui-form';\nimport { HuePicker, IconPicker } from '@dxos/react-ui-pickers';\nimport { DataType, type TypenameAnnotation, TypenameAnnotationId } from '@dxos/schema';\nimport { type JoinPanelProps } from '@dxos/shell/react';\n\nimport { SpaceCapabilities } from './capabilities';\nimport {\n CollectionMain,\n CollectionSection,\n CREATE_OBJECT_DIALOG,\n CREATE_SPACE_DIALOG,\n CreateObjectDialog,\n CreateSpaceDialog,\n InlineSyncStatus,\n JOIN_DIALOG,\n JoinDialog,\n MembersContainer,\n MenuFooter,\n ObjectDetailsPanel,\n ObjectSettingsContainer,\n POPOVER_RENAME_OBJECT,\n POPOVER_RENAME_SPACE,\n PopoverRenameObject,\n PopoverRenameSpace,\n SchemaContainer,\n SmallPresenceLive,\n SpacePluginSettings,\n SpacePresence,\n SpaceSettingsContainer,\n SyncStatus,\n ViewEditor,\n type CreateObjectDialogProps,\n} from '../components';\nimport { SPACE_PLUGIN } from '../meta';\nimport { HueAnnotationId, IconAnnotationId, type SpaceSettingsProps } from '../types';\n\ntype ReactSurfaceOptions = {\n createInvitationUrl: (invitationCode: string) => string;\n};\n\nconst OMIT = [DataType.Collection.typename, DataType.QueryCollection.typename];\n\nexport default ({ createInvitationUrl }: ReactSurfaceOptions) =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${SPACE_PLUGIN}/article`,\n role: 'article',\n filter: (data): data is { subject: Space } =>\n // TODO(wittjosiah): Need to avoid shotgun parsing space state everywhere.\n isSpace(data.subject) && data.subject.state.get() === SpaceState.SPACE_READY,\n component: ({ data, role, ...rest }) => (\n <Surface\n data={{\n id: data.subject.id,\n subject: data.subject.properties[DataType.Collection.typename]?.target,\n }}\n role={role}\n {...rest}\n />\n ),\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/collection-fallback`,\n role: 'article',\n position: 'fallback',\n filter: (data): data is { subject: DataType.Collection } => Obj.instanceOf(DataType.Collection, data.subject),\n component: ({ data }) => <CollectionMain collection={data.subject} />,\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/plugin-settings`,\n role: 'article',\n filter: (data): data is { subject: SettingsStore<SpaceSettingsProps> } =>\n data.subject instanceof SettingsStore && data.subject.prefix === SPACE_PLUGIN,\n component: ({ data: { subject } }) => <SpacePluginSettings settings={subject.value} />,\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/companion/object-settings`,\n role: 'article',\n filter: (data): data is { companionTo: Obj.Any } => Obj.isObject(data.companionTo) && data.subject === 'settings',\n component: ({ data, role }) => <ObjectSettingsContainer object={data.companionTo} role={role} />,\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/space-settings-properties`,\n role: 'article',\n filter: (data): data is { subject: string } => data.subject === `${SPACE_PLUGIN}/properties`,\n component: () => {\n const layout = useLayout();\n const { spaceId } = parseId(layout.workspace);\n const space = useSpace(spaceId);\n if (!space || !spaceId) {\n return null;\n }\n\n return <SpaceSettingsContainer space={space} />;\n },\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/space-settings-members`,\n role: 'article',\n position: 'hoist',\n filter: (data): data is { subject: string } => data.subject === `${SPACE_PLUGIN}/members`,\n component: () => {\n const layout = useLayout();\n const { spaceId } = parseId(layout.workspace);\n const space = useSpace(spaceId);\n if (!space || !spaceId) {\n return null;\n }\n\n return <MembersContainer space={space} createInvitationUrl={createInvitationUrl} />;\n },\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/space-settings-schema`,\n role: 'article',\n filter: (data): data is { subject: string } => data.subject === `${SPACE_PLUGIN}/schema`,\n component: () => {\n const layout = useLayout();\n const { spaceId } = parseId(layout.workspace);\n const space = useSpace(spaceId);\n if (!space || !spaceId) {\n return null;\n }\n\n return <SchemaContainer space={space} />;\n },\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/selected-objects`,\n role: 'article',\n filter: (data): data is { companionTo: DataType.View; subject: 'selected-objects' } =>\n Obj.instanceOf(DataType.View, data.companionTo) && data.subject === 'selected-objects',\n component: ({ data }) => (\n <ObjectDetailsPanel\n key={fullyQualifiedId(data.companionTo)}\n objectId={fullyQualifiedId(data.companionTo)}\n view={data.companionTo}\n />\n ),\n }),\n createSurface({\n id: JOIN_DIALOG,\n role: 'dialog',\n filter: (data): data is { props: JoinPanelProps } => data.component === JOIN_DIALOG,\n component: ({ data }) => <JoinDialog {...data.props} />,\n }),\n createSurface({\n id: CREATE_SPACE_DIALOG,\n role: 'dialog',\n filter: (data): data is any => data.component === CREATE_SPACE_DIALOG,\n component: () => <CreateSpaceDialog />,\n }),\n createSurface({\n id: CREATE_OBJECT_DIALOG,\n role: 'dialog',\n filter: (data): data is { props: CreateObjectDialogProps } => data.component === CREATE_OBJECT_DIALOG,\n component: ({ data }) => <CreateObjectDialog {...data.props} />,\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/create-initial-space-form-[hue]`,\n role: 'form-input',\n filter: (data): data is { prop: string; schema: Schema.Schema<any> } => {\n const annotation = findAnnotation<boolean>((data.schema as Schema.Schema.All).ast, HueAnnotationId);\n return !!annotation;\n },\n component: ({ data: _, ...inputProps }) => {\n const { label, disabled, type, getValue, onValueChange } = inputProps as any as InputProps;\n const handleChange = useCallback((nextHue: string) => onValueChange(type, nextHue), [onValueChange]);\n const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange]);\n return (\n <Input.Root>\n <Input.Label>{label}</Input.Label>\n <HuePicker disabled={disabled} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />\n </Input.Root>\n );\n },\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/create-initial-space-form-[icon]`,\n role: 'form-input',\n filter: (data): data is { prop: string; schema: Schema.Schema<any> } => {\n const annotation = findAnnotation<boolean>((data.schema as Schema.Schema.All).ast, IconAnnotationId);\n return !!annotation;\n },\n component: ({ data: _, ...inputProps }) => {\n const { label, disabled, type, getValue, onValueChange } = inputProps as any as InputProps;\n const handleChange = useCallback((nextIcon: string) => onValueChange(type, nextIcon), [onValueChange]);\n const handleReset = useCallback(() => onValueChange(type, undefined), [onValueChange]);\n return (\n <Input.Root>\n <Input.Label>{label}</Input.Label>\n <IconPicker disabled={disabled} value={getValue() ?? ''} onChange={handleChange} onReset={handleReset} />\n </Input.Root>\n );\n },\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/typename-form-input`,\n role: 'form-input',\n filter: (\n data,\n ): data is { prop: string; schema: Schema.Schema<any>; target: Space | DataType.Collection | undefined } => {\n if (data.prop !== 'typename') {\n return false;\n }\n\n const annotation = findAnnotation((data.schema as Schema.Schema.All).ast, TypenameAnnotationId);\n return !!annotation;\n },\n component: ({ data: { schema, target }, ...inputProps }) => {\n const { t } = useTranslation();\n const client = useClient();\n const props = inputProps as any as InputProps;\n const space = isSpace(target) ? target : getSpace(target);\n if (!space) {\n return null;\n }\n\n const annotation = findAnnotation<TypenameAnnotation[]>(schema.ast, TypenameAnnotationId)!;\n\n const schemaWhitelists = useCapabilities(ClientCapabilities.SchemaWhiteList);\n const whitelistedTypenames = useMemo(\n () => new Set(schemaWhitelists.flatMap((typeArray) => typeArray.map((type) => Type.getTypename(type)))),\n [schemaWhitelists],\n );\n\n const objectForms = useCapabilities(SpaceCapabilities.ObjectForm);\n const objectFormTypenames = useMemo(\n () =>\n new Set(\n objectForms\n .map((form) => Type.getTypename(form.objectSchema))\n // TODO(wittjosiah): Remove.\n .filter((typename) => !OMIT.includes(typename) && !typename.endsWith('View')),\n ),\n [objectForms],\n );\n\n const fixed = client.graph.schemaRegistry.schemas.filter((schema) => {\n const limitedStatic =\n annotation.includes('limited-static') && whitelistedTypenames.has(Type.getTypename(schema));\n const unusedStatic =\n annotation.includes('unused-static') &&\n whitelistedTypenames.has(Type.getTypename(schema)) &&\n !space.properties.staticRecords?.includes(Type.getTypename(schema));\n const objectForm = annotation.includes('object-form') && objectFormTypenames.has(Type.getTypename(schema));\n return annotation.includes('static') || limitedStatic || unusedStatic || objectForm;\n });\n const dynamic = space?.db.schemaRegistry.query().runSync();\n const typenames = Array.from(\n new Set<string>([\n ...(annotation.includes('limited-static') ||\n annotation.includes('unused-static') ||\n annotation.includes('static') ||\n annotation.includes('object-form')\n ? fixed.map((schema) => Type.getTypename(schema))\n : []),\n ...(annotation.includes('dynamic') ? dynamic.map((schema) => schema.typename) : []),\n ]),\n ).sort();\n\n const options = useMemo(\n () =>\n typenames\n .map((typename) => ({\n value: typename,\n label: t('typename label', { ns: typename, defaultValue: typename }),\n }))\n .toSorted((a, b) => a.label.localeCompare(b.label)),\n [t, typenames],\n );\n\n return <SelectInput {...props} options={options} />;\n },\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/object-settings`,\n role: 'object-settings',\n filter: (data): data is { subject: DataType.View } => Obj.instanceOf(DataType.View, data.subject),\n component: ({ data }) => <ViewEditor view={data.subject} />,\n }),\n createSurface({\n id: POPOVER_RENAME_SPACE,\n role: 'card--popover',\n filter: (data): data is { props: Space } => data.component === POPOVER_RENAME_SPACE && isSpace(data.props),\n component: ({ data }) => <PopoverRenameSpace space={data.props} />,\n }),\n createSurface({\n id: POPOVER_RENAME_OBJECT,\n role: 'card--popover',\n filter: (data): data is { props: Obj.Any } =>\n data.component === POPOVER_RENAME_OBJECT && isLiveObject(data.props),\n component: ({ data }) => <PopoverRenameObject object={data.props} />,\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/menu-footer`,\n role: 'menu-footer',\n filter: (data): data is { subject: Obj.Any } => Obj.isObject(data.subject),\n component: ({ data }) => <MenuFooter object={data.subject} />,\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/navtree-presence`,\n role: 'navtree-item-end',\n filter: (data): data is { id: string; subject: Obj.Any; open?: boolean } =>\n typeof data.id === 'string' && Obj.isObject(data.subject),\n component: ({ data }) => {\n // TODO(wittjosiah): Doesn't need to be mutable but readonly type messes with ComplexMap.\n const state = useCapability(SpaceCapabilities.MutableState);\n return <SmallPresenceLive id={data.id} open={data.open} viewers={state.viewersByObject[data.id]} />;\n },\n }),\n // TODO(wittjosiah): Attention glyph for non-echo items should be handled elsewhere.\n createSurface({\n id: `${SPACE_PLUGIN}/navtree-presence-fallback`,\n role: 'navtree-item-end',\n position: 'fallback',\n filter: (data): data is { id: string; open?: boolean } => typeof data.id === 'string',\n component: ({ data }) => <SmallPresenceLive id={data.id} open={data.open} />,\n }),\n // TODO(wittjosiah): Broken?\n createSurface({\n id: `${SPACE_PLUGIN}/navtree-sync-status`,\n role: 'navtree-item-end',\n filter: (data): data is { subject: Space; open?: boolean } => isSpace(data.subject),\n component: ({ data }) => <InlineSyncStatus space={data.subject} open={data.open} />,\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/navbar-presence`,\n role: 'navbar-end',\n position: 'hoist',\n filter: (data): data is { subject: Space | Obj.Any } => isSpace(data.subject) || Obj.isObject(data.subject),\n component: ({ data }) => {\n const space = isSpace(data.subject) ? data.subject : getSpace(data.subject);\n const object = isSpace(data.subject)\n ? data.subject.state.get() === SpaceState.SPACE_READY\n ? (space?.properties[DataType.Collection.typename]?.target as DataType.Collection)\n : undefined\n : data.subject;\n\n return object ? <SpacePresence object={object} /> : null;\n },\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/collection-section`,\n role: 'section',\n filter: (data): data is { subject: DataType.Collection } => Obj.instanceOf(DataType.Collection, data.subject),\n component: ({ data }) => <CollectionSection collection={data.subject} />,\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/status`,\n role: 'status',\n component: () => <SyncStatus />,\n }),\n ]);\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "useCallback", "useMemo", "Capabilities", "contributes", "createSurface", "Surface", "useCapabilities", "useCapability", "useLayout", "Obj", "Type", "findAnnotation", "SettingsStore", "ClientCapabilities", "useClient", "fullyQualifiedId", "getSpace", "isLiveObject", "isSpace", "parseId", "SpaceState", "useSpace", "Input", "useTranslation", "SelectInput", "HuePicker", "IconPicker", "DataType", "TypenameAnnotationId", "OMIT", "DataType", "Collection", "typename", "QueryCollection", "createInvitationUrl", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "SPACE_PLUGIN", "role", "filter", "data", "isSpace", "subject", "state", "get", "SpaceState", "SPACE_READY", "component", "rest", "Surface", "properties", "target", "position", "Obj", "instanceOf", "CollectionMain", "collection", "SettingsStore", "prefix", "SpacePluginSettings", "settings", "value", "isObject", "companionTo", "ObjectSettingsContainer", "object", "layout", "useLayout", "spaceId", "parseId", "workspace", "space", "useSpace", "SpaceSettingsContainer", "MembersContainer", "SchemaContainer", "View", "ObjectDetailsPanel", "key", "fullyQualifiedId", "objectId", "view", "JOIN_DIALOG", "JoinDialog", "props", "CREATE_SPACE_DIALOG", "CreateSpaceDialog", "CREATE_OBJECT_DIALOG", "CreateObjectDialog", "annotation", "findAnnotation", "schema", "ast", "HueAnnotationId", "_", "inputProps", "label", "disabled", "type", "getValue", "onValueChange", "handleChange", "useCallback", "nextHue", "handleReset", "undefined", "Input", "Root", "Label", "HuePicker", "onChange", "onReset", "IconAnnotationId", "nextIcon", "IconPicker", "prop", "TypenameAnnotationId", "t", "useTranslation", "client", "useClient", "getSpace", "schemaWhitelists", "useCapabilities", "ClientCapabilities", "SchemaWhiteList", "whitelistedTypenames", "useMemo", "Set", "flatMap", "typeArray", "map", "Type", "getTypename", "objectForms", "SpaceCapabilities", "ObjectForm", "objectFormTypenames", "form", "objectSchema", "includes", "endsWith", "fixed", "graph", "schemaRegistry", "schemas", "limitedStatic", "has", "unusedStatic", "staticRecords", "objectForm", "dynamic", "db", "query", "runSync", "typenames", "Array", "from", "sort", "options", "ns", "defaultValue", "toSorted", "a", "b", "localeCompare", "SelectInput", "ViewEditor", "POPOVER_RENAME_SPACE", "PopoverRenameSpace", "POPOVER_RENAME_OBJECT", "isLiveObject", "PopoverRenameObject", "MenuFooter", "useCapability", "MutableState", "SmallPresenceLive", "open", "viewers", "viewersByObject", "InlineSyncStatus", "SpacePresence", "CollectionSection", "SyncStatus"]
7
+ }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  SpaceCapabilities
3
- } from "./chunk-XXIPJLJF.mjs";
3
+ } from "./chunk-CEFHNVU7.mjs";
4
4
  import "./chunk-FBCGT5YY.mjs";
5
5
 
6
6
  // src/capabilities/schema-defs.ts
@@ -23,4 +23,4 @@ var schema_defs_default = (context) => {
23
23
  export {
24
24
  schema_defs_default as default
25
25
  };
26
- //# sourceMappingURL=schema-defs-K3B3OAH4.mjs.map
26
+ //# sourceMappingURL=schema-defs-Z6FC4AHC.mjs.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  SpaceSettingsSchema
3
- } from "./chunk-S6NY637J.mjs";
3
+ } from "./chunk-SGTQ52SU.mjs";
4
4
  import {
5
5
  meta
6
6
  } from "./chunk-FBCGT5YY.mjs";
@@ -21,4 +21,4 @@ var settings_default = () => {
21
21
  export {
22
22
  settings_default as default
23
23
  };
24
- //# sourceMappingURL=settings-XNWYRWNM.mjs.map
24
+ //# sourceMappingURL=settings-4IMP5RYT.mjs.map
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  SpaceCapabilities
3
- } from "./chunk-XXIPJLJF.mjs";
3
+ } from "./chunk-CEFHNVU7.mjs";
4
4
  import {
5
5
  COMPOSER_SPACE_LOCK,
6
6
  SHARED
7
- } from "./chunk-WBSEOLEM.mjs";
7
+ } from "./chunk-XUYKJUU7.mjs";
8
8
  import {
9
9
  SpaceAction
10
- } from "./chunk-S6NY637J.mjs";
10
+ } from "./chunk-SGTQ52SU.mjs";
11
11
  import "./chunk-FBCGT5YY.mjs";
12
12
 
13
13
  // src/capabilities/spaces-ready.ts
@@ -196,4 +196,4 @@ var spaces_ready_default = async (context) => {
196
196
  export {
197
197
  spaces_ready_default as default
198
198
  };
199
- //# sourceMappingURL=spaces-ready-K7NSNBHM.mjs.map
199
+ //# sourceMappingURL=spaces-ready-TOPG6IV4.mjs.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  SpaceCapabilities
3
- } from "./chunk-XXIPJLJF.mjs";
3
+ } from "./chunk-CEFHNVU7.mjs";
4
4
  import {
5
5
  SPACE_PLUGIN
6
6
  } from "./chunk-FBCGT5YY.mjs";
@@ -44,4 +44,4 @@ var state_default = (context) => {
44
44
  export {
45
45
  state_default as default
46
46
  };
47
- //# sourceMappingURL=state-522XTUR4.mjs.map
47
+ //# sourceMappingURL=state-QYZAB45H.mjs.map
@@ -9,7 +9,7 @@ import {
9
9
  SpaceForm,
10
10
  SpaceSettingsSchema,
11
11
  defineObjectForm
12
- } from "../chunk-S6NY637J.mjs";
12
+ } from "../chunk-SGTQ52SU.mjs";
13
13
  import "../chunk-FBCGT5YY.mjs";
14
14
  export {
15
15
  CollectionAction,
@@ -0,0 +1,32 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ SPACE_PLUGIN
4
+ } from "./chunk-HWNG4MEU.mjs";
5
+
6
+ // src/components/CollectionMain.tsx
7
+ import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
8
+ import React from "react";
9
+ import { useTranslation } from "@dxos/react-ui";
10
+ import { baseSurface, descriptionMessage, mx } from "@dxos/react-ui-theme";
11
+ var CollectionMain = ({ collection }) => {
12
+ var _effect = _useSignals();
13
+ try {
14
+ const { t } = useTranslation(SPACE_PLUGIN);
15
+ return /* @__PURE__ */ React.createElement("div", {
16
+ role: "none",
17
+ className: mx(baseSurface, "min-bs-screen is-full flex items-center justify-center p-8"),
18
+ "data-testid": "composer.firstRunMessage"
19
+ }, /* @__PURE__ */ React.createElement("p", {
20
+ role: "alert",
21
+ className: mx(descriptionMessage, "rounded-md p-8 font-normal text-lg max-is-[24rem] break-words")
22
+ }, collection.name ?? t("unnamed collection label")));
23
+ } finally {
24
+ _effect.f();
25
+ }
26
+ };
27
+ var CollectionMain_default = CollectionMain;
28
+ export {
29
+ CollectionMain,
30
+ CollectionMain_default as default
31
+ };
32
+ //# sourceMappingURL=CollectionMain-ZJIFCWKZ.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/CollectionMain.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useTranslation } from '@dxos/react-ui';\nimport { baseSurface, descriptionMessage, mx } from '@dxos/react-ui-theme';\nimport { type DataType } from '@dxos/schema';\n\nimport { SPACE_PLUGIN } from '../meta';\n\nexport const CollectionMain = ({ collection }: { collection: DataType.Collection }) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n\n return (\n <div\n role='none'\n className={mx(baseSurface, 'min-bs-screen is-full flex items-center justify-center p-8')}\n data-testid='composer.firstRunMessage'\n >\n <p\n role='alert'\n className={mx(descriptionMessage, 'rounded-md p-8 font-normal text-lg max-is-[24rem] break-words')}\n >\n {collection.name ?? t('unnamed collection label')}\n </p>\n </div>\n );\n};\n\nexport default CollectionMain;\n"],
5
+ "mappings": ";;;;;;;AAIA,OAAOA,WAAW;AAElB,SAASC,sBAAsB;AAC/B,SAASC,aAAaC,oBAAoBC,UAAU;AAK7C,IAAMC,iBAAiB,CAAC,EAAEC,WAAU,MAAuC;;;AAChF,UAAM,EAAEC,EAAC,IAAKC,eAAeC,YAAAA;AAE7B,WACE,sBAAA,cAACC,OAAAA;MACCC,MAAK;MACLC,WAAWC,GAAGC,aAAa,4DAAA;MAC3BC,eAAY;OAEZ,sBAAA,cAACC,KAAAA;MACCL,MAAK;MACLC,WAAWC,GAAGI,oBAAoB,+DAAA;OAEjCX,WAAWY,QAAQX,EAAE,0BAAA,CAAA,CAAA;;;;AAI9B;AAEA,IAAA,yBAAeF;",
6
+ "names": ["React", "useTranslation", "baseSurface", "descriptionMessage", "mx", "CollectionMain", "collection", "t", "useTranslation", "SPACE_PLUGIN", "div", "role", "className", "mx", "baseSurface", "data-testid", "p", "descriptionMessage", "name"]
7
+ }
@@ -0,0 +1,89 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ SPACE_PLUGIN
4
+ } from "./chunk-HWNG4MEU.mjs";
5
+
6
+ // src/components/ObjectDetailsPanel.tsx
7
+ import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
8
+ import React, { useCallback } from "react";
9
+ import { setValue } from "@dxos/echo-schema";
10
+ import { invariant } from "@dxos/invariant";
11
+ import { useClient } from "@dxos/react-client";
12
+ import { getSpace, Filter, useQuery, useSchema } from "@dxos/react-client/echo";
13
+ import { Callout, useTranslation } from "@dxos/react-ui";
14
+ import { useSelected } from "@dxos/react-ui-attention";
15
+ import { Form, useRefQueryLookupHandler } from "@dxos/react-ui-form";
16
+ import { isNonNullable } from "@dxos/util";
17
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-space/src/components/ObjectDetailsPanel.tsx";
18
+ var ObjectDetailsPanel = ({ objectId, view }) => {
19
+ var _effect = _useSignals();
20
+ try {
21
+ const { t } = useTranslation(SPACE_PLUGIN);
22
+ const client = useClient();
23
+ const space = getSpace(view);
24
+ const schema = useSchema(client, space, view.query?.typename);
25
+ const queriedObjects = useQuery(space, schema ? Filter.type(schema) : Filter.nothing());
26
+ const selectedRows = useSelected(objectId, "multi");
27
+ const selectedObjects = selectedRows.map((id) => queriedObjects.find((obj) => obj.id === id)).filter(isNonNullable);
28
+ const handleRefQueryLookup = useRefQueryLookupHandler({
29
+ space
30
+ });
31
+ const handleSave = useCallback((values, { changed }) => {
32
+ const id = values.id;
33
+ invariant(typeof id === "string", void 0, {
34
+ F: __dxlog_file,
35
+ L: 36,
36
+ S: void 0,
37
+ A: [
38
+ "typeof id === 'string'",
39
+ ""
40
+ ]
41
+ });
42
+ const object = queriedObjects.find((obj) => obj.id === id);
43
+ invariant(object, void 0, {
44
+ F: __dxlog_file,
45
+ L: 38,
46
+ S: void 0,
47
+ A: [
48
+ "object",
49
+ ""
50
+ ]
51
+ });
52
+ const changedPaths = Object.keys(changed).filter((path) => changed[path]);
53
+ for (const path of changedPaths) {
54
+ const value = values[path];
55
+ setValue(object, path, value);
56
+ }
57
+ }, [
58
+ queriedObjects
59
+ ]);
60
+ if (selectedObjects.length === 0) {
61
+ return /* @__PURE__ */ React.createElement("div", {
62
+ role: "none",
63
+ className: "plb-cardSpacingBlock pli-cardSpacingInline"
64
+ }, /* @__PURE__ */ React.createElement(Callout.Root, {
65
+ classNames: "is-full"
66
+ }, /* @__PURE__ */ React.createElement(Callout.Title, null, t("row details no selection label"))));
67
+ }
68
+ return /* @__PURE__ */ React.createElement("div", {
69
+ role: "none",
70
+ className: "bs-full is-full flex flex-col p-2 gap-1 overflow-y-auto"
71
+ }, schema && selectedObjects.map((object) => /* @__PURE__ */ React.createElement("div", {
72
+ key: object.id,
73
+ className: "border border-separator rounded"
74
+ }, /* @__PURE__ */ React.createElement(Form, {
75
+ autoSave: true,
76
+ schema,
77
+ values: object,
78
+ onSave: handleSave,
79
+ onQueryRefOptions: handleRefQueryLookup
80
+ }))));
81
+ } finally {
82
+ _effect.f();
83
+ }
84
+ };
85
+ var ObjectDetailsPanel_default = ObjectDetailsPanel;
86
+ export {
87
+ ObjectDetailsPanel_default as default
88
+ };
89
+ //# sourceMappingURL=ObjectDetailsPanel-QKZEDSZK.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ObjectDetailsPanel.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { type JsonPath, setValue } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { useClient } from '@dxos/react-client';\nimport { getSpace, Filter, useQuery, useSchema } from '@dxos/react-client/echo';\nimport { Callout, useTranslation } from '@dxos/react-ui';\nimport { useSelected } from '@dxos/react-ui-attention';\nimport { Form, useRefQueryLookupHandler } from '@dxos/react-ui-form';\nimport { type DataType } from '@dxos/schema';\nimport { isNonNullable } from '@dxos/util';\n\nimport { SPACE_PLUGIN } from '../meta';\n\ntype RowDetailsPanelProps = { objectId: string; view: DataType.View };\n\nconst ObjectDetailsPanel = ({ objectId, view }: RowDetailsPanelProps) => {\n const { t } = useTranslation(SPACE_PLUGIN);\n const client = useClient();\n const space = getSpace(view);\n const schema = useSchema(client, space, view.query?.typename);\n\n const queriedObjects = useQuery(space, 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 const handleRefQueryLookup = useRefQueryLookupHandler({ space });\n\n const handleSave = useCallback(\n (values: any, { changed }: { changed: Record<JsonPath, boolean> }) => {\n const id = values.id;\n invariant(typeof id === 'string');\n const object = queriedObjects.find((obj) => obj.id === id);\n invariant(object);\n\n const changedPaths = Object.keys(changed).filter((path) => changed[path as JsonPath]) as JsonPath[];\n for (const path of changedPaths) {\n const value = values[path];\n setValue(object, path, value);\n }\n },\n [queriedObjects],\n );\n\n if (selectedObjects.length === 0) {\n return (\n <div role='none' className='plb-cardSpacingBlock pli-cardSpacingInline'>\n <Callout.Root classNames='is-full'>\n <Callout.Title>{t('row details no selection label')}</Callout.Title>\n </Callout.Root>\n </div>\n );\n }\n\n return (\n <div role='none' className='bs-full is-full flex flex-col p-2 gap-1 overflow-y-auto'>\n {schema &&\n selectedObjects.map((object) => (\n <div key={object.id} className='border border-separator rounded'>\n <Form\n autoSave\n schema={schema}\n values={object}\n onSave={handleSave}\n onQueryRefOptions={handleRefQueryLookup}\n />\n </div>\n ))}\n </div>\n );\n};\n\nexport default ObjectDetailsPanel;\n"],
5
+ "mappings": ";;;;;;;AAIA,OAAOA,SAASC,mBAAmB;AAEnC,SAAwBC,gBAAgB;AACxC,SAASC,iBAAiB;AAC1B,SAASC,iBAAiB;AAC1B,SAASC,UAAUC,QAAQC,UAAUC,iBAAiB;AACtD,SAASC,SAASC,sBAAsB;AACxC,SAASC,mBAAmB;AAC5B,SAASC,MAAMC,gCAAgC;AAE/C,SAASC,qBAAqB;;AAM9B,IAAMC,qBAAqB,CAAC,EAAEC,UAAUC,KAAI,MAAwB;;;AAClE,UAAM,EAAEC,EAAC,IAAKC,eAAeC,YAAAA;AAC7B,UAAMC,SAASC,UAAAA;AACf,UAAMC,QAAQC,SAASP,IAAAA;AACvB,UAAMQ,SAASC,UAAUL,QAAQE,OAAON,KAAKU,OAAOC,QAAAA;AAEpD,UAAMC,iBAAiBC,SAASP,OAAOE,SAASM,OAAOC,KAAKP,MAAAA,IAAUM,OAAOE,QAAO,CAAA;AACpF,UAAMC,eAAeC,YAAYnB,UAAU,OAAA;AAC3C,UAAMoB,kBAAkBF,aAAaG,IAAI,CAACC,OAAOT,eAAeU,KAAK,CAACC,QAAQA,IAAIF,OAAOA,EAAAA,CAAAA,EAAKG,OAAOC,aAAAA;AAErG,UAAMC,uBAAuBC,yBAAyB;MAAErB;IAAM,CAAA;AAE9D,UAAMsB,aAAaC,YACjB,CAACC,QAAa,EAAEC,QAAO,MAA0C;AAC/D,YAAMV,KAAKS,OAAOT;AAClBW,gBAAU,OAAOX,OAAO,UAAA,QAAA;;;;;;;;;AACxB,YAAMY,SAASrB,eAAeU,KAAK,CAACC,QAAQA,IAAIF,OAAOA,EAAAA;AACvDW,gBAAUC,QAAAA,QAAAA;;;;;;;;;AAEV,YAAMC,eAAeC,OAAOC,KAAKL,OAAAA,EAASP,OAAO,CAACa,SAASN,QAAQM,IAAAA,CAAiB;AACpF,iBAAWA,QAAQH,cAAc;AAC/B,cAAMI,QAAQR,OAAOO,IAAAA;AACrBE,iBAASN,QAAQI,MAAMC,KAAAA;MACzB;IACF,GACA;MAAC1B;KAAe;AAGlB,QAAIO,gBAAgBqB,WAAW,GAAG;AAChC,aACE,sBAAA,cAACC,OAAAA;QAAIC,MAAK;QAAOC,WAAU;SACzB,sBAAA,cAACC,QAAQC,MAAI;QAACC,YAAW;SACvB,sBAAA,cAACF,QAAQG,OAAK,MAAE9C,EAAE,gCAAA,CAAA,CAAA,CAAA;IAI1B;AAEA,WACE,sBAAA,cAACwC,OAAAA;MAAIC,MAAK;MAAOC,WAAU;OACxBnC,UACCW,gBAAgBC,IAAI,CAACa,WACnB,sBAAA,cAACQ,OAAAA;MAAIO,KAAKf,OAAOZ;MAAIsB,WAAU;OAC7B,sBAAA,cAACM,MAAAA;MACCC,UAAAA;MACA1C;MACAsB,QAAQG;MACRkB,QAAQvB;MACRwB,mBAAmB1B;;;;;AAMjC;AAEA,IAAA,6BAAe5B;",
6
+ "names": ["React", "useCallback", "setValue", "invariant", "useClient", "getSpace", "Filter", "useQuery", "useSchema", "Callout", "useTranslation", "useSelected", "Form", "useRefQueryLookupHandler", "isNonNullable", "ObjectDetailsPanel", "objectId", "view", "t", "useTranslation", "SPACE_PLUGIN", "client", "useClient", "space", "getSpace", "schema", "useSchema", "query", "typename", "queriedObjects", "useQuery", "Filter", "type", "nothing", "selectedRows", "useSelected", "selectedObjects", "map", "id", "find", "obj", "filter", "isNonNullable", "handleRefQueryLookup", "useRefQueryLookupHandler", "handleSave", "useCallback", "values", "changed", "invariant", "object", "changedPaths", "Object", "keys", "path", "value", "setValue", "length", "div", "role", "className", "Callout", "Root", "classNames", "Title", "key", "Form", "autoSave", "onSave", "onQueryRefOptions"]
7
+ }
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-SSLBYZEY.mjs";
5
5
  import {
6
6
  SpaceCapabilities
7
- } from "./chunk-AT7LGFER.mjs";
7
+ } from "./chunk-5T3ZH23B.mjs";
8
8
  import {
9
9
  SHARED,
10
10
  SPACES,
@@ -12,19 +12,21 @@ import {
12
12
  constructSpaceActions,
13
13
  constructSpaceNode,
14
14
  createObjectNode,
15
+ createStaticSchemaActions,
16
+ createStaticSchemaNode,
15
17
  rxFromQuery
16
- } from "./chunk-HJJHLWKY.mjs";
18
+ } from "./chunk-4AOMYKDE.mjs";
17
19
  import {
18
20
  SPACE_TYPE,
19
21
  SpaceAction
20
- } from "./chunk-2THX6G4C.mjs";
22
+ } from "./chunk-JH6F4C3I.mjs";
21
23
  import {
22
24
  SPACE_PLUGIN
23
25
  } from "./chunk-HWNG4MEU.mjs";
24
26
 
25
27
  // src/capabilities/app-graph-builder.ts
26
28
  import { Rx } from "@effect-rx/rx-react";
27
- import { Array, Option, pipe } from "effect";
29
+ import { Array, Option, pipe, Schema } from "effect";
28
30
  import { Capabilities, contributes, createIntent } from "@dxos/app-framework";
29
31
  import { getSpace, SpaceState, isSpace } from "@dxos/client/echo";
30
32
  import { Filter, Obj, Query, Type } from "@dxos/echo";
@@ -69,7 +71,7 @@ var app_graph_builder_default = (context) => {
69
71
  } else {
70
72
  log.warn("spaces order object not found", void 0, {
71
73
  F: __dxlog_file,
72
- L: 68,
74
+ L: 70,
73
75
  S: void 0,
74
76
  C: (f, a) => f(...a)
75
77
  });
@@ -310,26 +312,140 @@ var app_graph_builder_default = (context) => {
310
312
  }), Option.getOrElse(() => [])));
311
313
  }
312
314
  }),
315
+ // Static schema records.
316
+ createExtension({
317
+ id: `${SPACE_PLUGIN}/static-schemas`,
318
+ connector: (node) => {
319
+ const client = context.getCapability(ClientCapabilities.Client);
320
+ return Rx.make((get) => pipe(get(node), Option.flatMap((node2) => Obj.instanceOf(DataType.QueryCollection, node2.data) && node2.data.query.typename === DataType.StoredSchema.typename ? Option.some(node2.data) : Option.none()), Option.flatMap((collection) => {
321
+ const space = getSpace(collection);
322
+ return space?.properties.staticRecords ? Option.some(space) : Option.none();
323
+ }), Option.map((space) => {
324
+ return get(rxFromSignal(() => space.properties.staticRecords ?? [])).map((typename) => client.graph.schemaRegistry.schemas.find((schema) => Type.getTypename(schema) === typename)).filter(isNonNullable).map((schema) => createStaticSchemaNode({
325
+ schema,
326
+ space
327
+ }));
328
+ }), Option.getOrElse(() => [])));
329
+ }
330
+ }),
331
+ // Create static schema actions.
332
+ createExtension({
333
+ id: `${SPACE_PLUGIN}/static-schema-actions`,
334
+ actions: (node) => {
335
+ let query;
336
+ return Rx.make((get) => pipe(get(node), Option.flatMap((node2) => {
337
+ const space = isSpace(node2.properties.space) ? node2.properties.space : void 0;
338
+ return space && Schema.isSchema(node2.data) ? Option.some({
339
+ space,
340
+ schema: node2.data
341
+ }) : Option.none();
342
+ }), Option.map(({ space, schema }) => {
343
+ if (!query) {
344
+ query = space.db.query(Filter.type(DataType.View));
345
+ }
346
+ const views = get(rxFromQuery(query));
347
+ const filteredViews = get(rxFromSignal(() => (
348
+ // TODO(wittjosiah): Remove cast.
349
+ views.filter((view) => view.query.typename === Type.getTypename(schema))
350
+ )));
351
+ const deletable = filteredViews.length === 0;
352
+ return createStaticSchemaActions({
353
+ schema,
354
+ space,
355
+ deletable
356
+ });
357
+ }), Option.getOrElse(() => [])));
358
+ }
359
+ }),
360
+ // Create nodes for schema views.
361
+ createExtension({
362
+ id: `${SPACE_PLUGIN}/schema-views`,
363
+ connector: (node) => {
364
+ let query;
365
+ return Rx.make((get) => pipe(get(node), Option.flatMap((node2) => {
366
+ const space = getSpace(node2.data) ?? (isSpace(node2.properties.space) ? node2.properties.space : void 0);
367
+ return space && (Obj.instanceOf(DataType.StoredSchema, node2.data) || Schema.isSchema(node2.data)) ? Option.some({
368
+ space,
369
+ schema: node2.data
370
+ }) : Option.none();
371
+ }), Option.map(({ space, schema }) => {
372
+ if (!query) {
373
+ query = space.db.query(Filter.type(DataType.View));
374
+ }
375
+ const typename = Schema.isSchema(schema) ? Type.getTypename(schema) : schema.typename;
376
+ return get(rxFromQuery(query)).filter((view) => view.query.typename === typename).map((view) => get(rxFromSignal(() => createObjectNode({
377
+ object: view,
378
+ space,
379
+ resolve,
380
+ droppable: false
381
+ })))).filter(isNonNullable);
382
+ }), Option.getOrElse(() => [])));
383
+ }
384
+ }),
313
385
  // Create collection actions and action groups.
314
386
  createExtension({
315
387
  id: `${SPACE_PLUGIN}/object-actions`,
316
- actions: (node) => Rx.make((get) => pipe(get(node), Option.flatMap((node2) => Obj.isObject(node2.data) ? Option.some(node2.data) : Option.none()), Option.flatMap((object) => {
317
- const [dispatcher] = get(context.capabilities(Capabilities.IntentDispatcher));
318
- const [appGraph] = get(context.capabilities(Capabilities.AppGraph));
319
- const [state] = get(context.capabilities(SpaceCapabilities.State));
320
- const objectForms = get(context.capabilities(SpaceCapabilities.ObjectForm));
321
- if (!dispatcher || !appGraph || !state) {
322
- return Option.none();
323
- } else {
324
- return Option.some({
325
- object,
326
- graph: appGraph.graph,
327
- dispatch: dispatcher.dispatchPromise,
328
- objectForms,
329
- navigable: get(rxFromSignal(() => state.navigableCollections))
330
- });
388
+ actions: (node) => {
389
+ let query;
390
+ return Rx.make((get) => pipe(get(node), Option.flatMap((node2) => {
391
+ const space = getSpace(node2.data);
392
+ return space && Obj.isObject(node2.data) ? Option.some({
393
+ space,
394
+ object: node2.data
395
+ }) : Option.none();
396
+ }), Option.flatMap(({ space, object }) => {
397
+ const isSchema = Obj.instanceOf(DataType.StoredSchema, object);
398
+ if (!query && isSchema) {
399
+ query = space.db.query(Filter.type(DataType.View));
400
+ }
401
+ let deletable = !isSchema;
402
+ if (isSchema && query) {
403
+ const views = get(rxFromQuery(query));
404
+ const filteredViews = get(rxFromSignal(() => views.filter((view) => view.query.typename === object.typename)));
405
+ deletable = filteredViews.length === 0;
406
+ }
407
+ const [dispatcher] = get(context.capabilities(Capabilities.IntentDispatcher));
408
+ const [appGraph] = get(context.capabilities(Capabilities.AppGraph));
409
+ const [state] = get(context.capabilities(SpaceCapabilities.State));
410
+ const objectForms = get(context.capabilities(SpaceCapabilities.ObjectForm));
411
+ if (!dispatcher || !appGraph || !state) {
412
+ return Option.none();
413
+ } else {
414
+ return Option.some({
415
+ object,
416
+ graph: appGraph.graph,
417
+ dispatch: dispatcher.dispatchPromise,
418
+ objectForms,
419
+ deletable,
420
+ navigable: get(rxFromSignal(() => state.navigableCollections))
421
+ });
422
+ }
423
+ }), Option.map((params) => constructObjectActions(params)), Option.getOrElse(() => [])));
424
+ }
425
+ }),
426
+ // View selected objects.
427
+ createExtension({
428
+ id: `${SPACE_PLUGIN}/selected-objects`,
429
+ connector: (node) => Rx.make((get) => pipe(get(node), Option.flatMap((node2) => Obj.instanceOf(DataType.View, node2.data) ? Option.some(node2) : Option.none()), Option.map((node2) => [
430
+ {
431
+ id: [
432
+ node2.id,
433
+ "selected-objects"
434
+ ].join(ATTENDABLE_PATH_SEPARATOR),
435
+ type: PLANK_COMPANION_TYPE,
436
+ data: "selected-objects",
437
+ properties: {
438
+ label: [
439
+ "companion selected objects label",
440
+ {
441
+ ns: SPACE_PLUGIN
442
+ }
443
+ ],
444
+ icon: "ph--tree-view--regular",
445
+ disposition: "hidden"
446
+ }
331
447
  }
332
- }), Option.map((params) => constructObjectActions(params)), Option.getOrElse(() => [])))
448
+ ]), Option.getOrElse(() => [])))
333
449
  }),
334
450
  // Object settings plank companion.
335
451
  createExtension({
@@ -361,4 +477,4 @@ var app_graph_builder_default = (context) => {
361
477
  export {
362
478
  app_graph_builder_default as default
363
479
  };
364
- //# sourceMappingURL=app-graph-builder-TO72W6MI.mjs.map
480
+ //# sourceMappingURL=app-graph-builder-KGIGWC72.mjs.map