@dxos/plugin-thread 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 (168) hide show
  1. package/dist/lib/browser/{app-graph-builder-SPAZN5XL.mjs → app-graph-builder-XFGLMIGK.mjs} +6 -5
  2. package/dist/lib/browser/app-graph-builder-XFGLMIGK.mjs.map +7 -0
  3. package/dist/lib/browser/blueprint-definition-RWH6FTW7.mjs +17 -0
  4. package/dist/lib/browser/blueprint-definition-RWH6FTW7.mjs.map +7 -0
  5. package/dist/lib/browser/blueprints/index.mjs +3 -3
  6. package/dist/lib/browser/{call-manager-YBRTG6T3.mjs → call-manager-GDGIKJKN.mjs} +4 -4
  7. package/dist/lib/browser/call-manager-GDGIKJKN.mjs.map +7 -0
  8. package/dist/lib/browser/{chunk-TAWDJPMD.mjs → chunk-2FIHSX35.mjs} +2 -2
  9. package/dist/lib/browser/chunk-2FIHSX35.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-VZICDGBW.mjs → chunk-4EUEMHNI.mjs} +48 -44
  11. package/dist/lib/browser/chunk-4EUEMHNI.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-ZFLSTQSE.mjs → chunk-CBX65FMW.mjs} +25 -26
  13. package/dist/lib/browser/chunk-CBX65FMW.mjs.map +7 -0
  14. package/dist/lib/browser/{chunk-DLO2G3DM.mjs → chunk-JBB73URQ.mjs} +2 -2
  15. package/dist/lib/browser/chunk-JBB73URQ.mjs.map +7 -0
  16. package/dist/lib/browser/index.mjs +54 -53
  17. package/dist/lib/browser/index.mjs.map +3 -3
  18. package/dist/lib/browser/{markdown-TSXOA3GV.mjs → markdown-YJCSOWXX.mjs} +7 -7
  19. package/dist/lib/browser/markdown-YJCSOWXX.mjs.map +7 -0
  20. package/dist/lib/browser/meta.json +1 -1
  21. package/dist/lib/browser/{operation-resolver-MDMEBYH2.mjs → operation-resolver-PROCP5L4.mjs} +9 -9
  22. package/dist/lib/browser/operation-resolver-PROCP5L4.mjs.map +7 -0
  23. package/dist/lib/browser/{react-root-Q7U5D3DA.mjs → react-root-FHK2SVPU.mjs} +6 -6
  24. package/dist/lib/browser/react-root-FHK2SVPU.mjs.map +7 -0
  25. package/dist/lib/browser/{react-surface-WDZQSDWH.mjs → react-surface-7MQA6VSH.mjs} +16 -15
  26. package/dist/lib/browser/react-surface-7MQA6VSH.mjs.map +7 -0
  27. package/dist/lib/browser/{repair-TDKAFAGH.mjs → repair-6OZ75AUU.mjs} +2 -2
  28. package/dist/lib/browser/{settings-OOKKVXV7.mjs → settings-TWKOTGSU.mjs} +5 -4
  29. package/dist/lib/browser/settings-TWKOTGSU.mjs.map +7 -0
  30. package/dist/lib/browser/{state-3LKZHDRI.mjs → state-SJR2GL5G.mjs} +2 -2
  31. package/dist/lib/browser/types/index.mjs +1 -1
  32. package/dist/lib/node-esm/{app-graph-builder-3LJAPDUW.mjs → app-graph-builder-IN6VLJBO.mjs} +6 -5
  33. package/dist/lib/node-esm/app-graph-builder-IN6VLJBO.mjs.map +7 -0
  34. package/dist/lib/node-esm/{blueprint-definition-MZZXXL37.mjs → blueprint-definition-QZ3GXYAN.mjs} +6 -6
  35. package/dist/lib/node-esm/blueprint-definition-QZ3GXYAN.mjs.map +7 -0
  36. package/dist/lib/node-esm/blueprints/index.mjs +3 -3
  37. package/dist/lib/node-esm/{call-manager-MMCTNFOH.mjs → call-manager-36UAAQCJ.mjs} +4 -4
  38. package/dist/lib/node-esm/call-manager-36UAAQCJ.mjs.map +7 -0
  39. package/dist/lib/node-esm/{chunk-AQHPP6ZX.mjs → chunk-2UQ73JQJ.mjs} +25 -25
  40. package/dist/lib/node-esm/chunk-2UQ73JQJ.mjs.map +7 -0
  41. package/dist/lib/node-esm/{chunk-KRBZBJRI.mjs → chunk-G7PZNN3Z.mjs} +2 -2
  42. package/dist/lib/node-esm/chunk-G7PZNN3Z.mjs.map +7 -0
  43. package/dist/lib/node-esm/{chunk-3RD3IVVD.mjs → chunk-RBRWHRHE.mjs} +48 -44
  44. package/dist/lib/node-esm/chunk-RBRWHRHE.mjs.map +7 -0
  45. package/dist/lib/node-esm/{chunk-ARTUUKTM.mjs → chunk-WMWUXWAS.mjs} +2 -2
  46. package/dist/lib/node-esm/chunk-WMWUXWAS.mjs.map +7 -0
  47. package/dist/lib/node-esm/index.mjs +54 -53
  48. package/dist/lib/node-esm/index.mjs.map +3 -3
  49. package/dist/lib/node-esm/{markdown-N2UJ3D6L.mjs → markdown-6LRP3PAP.mjs} +7 -7
  50. package/dist/lib/node-esm/markdown-6LRP3PAP.mjs.map +7 -0
  51. package/dist/lib/node-esm/meta.json +1 -1
  52. package/dist/lib/node-esm/{operation-resolver-7PHDJZA2.mjs → operation-resolver-LPEPV5BF.mjs} +9 -9
  53. package/dist/lib/node-esm/operation-resolver-LPEPV5BF.mjs.map +7 -0
  54. package/dist/lib/node-esm/{react-root-SZIGQRDZ.mjs → react-root-P5P4VGQJ.mjs} +6 -6
  55. package/dist/lib/node-esm/react-root-P5P4VGQJ.mjs.map +7 -0
  56. package/dist/lib/node-esm/{react-surface-24PNWUDX.mjs → react-surface-M7VI5XG2.mjs} +16 -15
  57. package/dist/lib/node-esm/react-surface-M7VI5XG2.mjs.map +7 -0
  58. package/dist/lib/node-esm/{repair-LHLLGXKF.mjs → repair-6777EPOM.mjs} +2 -2
  59. package/dist/lib/node-esm/{settings-LXZQXSPL.mjs → settings-5O254B3Z.mjs} +5 -4
  60. package/dist/lib/node-esm/settings-5O254B3Z.mjs.map +7 -0
  61. package/dist/lib/node-esm/{state-YYAK5ENM.mjs → state-5R3TZJQE.mjs} +2 -2
  62. package/dist/lib/node-esm/types/index.mjs +1 -1
  63. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  64. package/dist/types/src/blueprints/index.d.ts +1 -1
  65. package/dist/types/src/blueprints/index.d.ts.map +1 -1
  66. package/dist/types/src/blueprints/thread-blueprint.d.ts +3 -20
  67. package/dist/types/src/blueprints/thread-blueprint.d.ts.map +1 -1
  68. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -1
  69. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +3 -6
  70. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -1
  71. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +1 -1
  72. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -1
  73. package/dist/types/src/capabilities/call-manager/call-manager.d.ts.map +1 -1
  74. package/dist/types/src/capabilities/markdown/markdown.d.ts.map +1 -1
  75. package/dist/types/src/capabilities/operation-resolver/index.d.ts +1 -1
  76. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -1
  77. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +2 -2
  78. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -1
  79. package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -1
  80. package/dist/types/src/capabilities/react-surface/index.d.ts +1 -1
  81. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -1
  82. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +2 -2
  83. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -1
  84. package/dist/types/src/capabilities/settings/index.d.ts +1 -1
  85. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -1
  86. package/dist/types/src/capabilities/settings/settings.d.ts +3 -2
  87. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -1
  88. package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
  89. package/dist/types/src/components/ChannelContainer.d.ts +1 -1
  90. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
  91. package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
  92. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  93. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  94. package/dist/types/src/components/ThreadCompanion.d.ts.map +1 -1
  95. package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
  96. package/dist/types/src/functions/create-proposals.d.ts +8 -1
  97. package/dist/types/src/functions/create-proposals.d.ts.map +1 -1
  98. package/dist/types/src/functions/index.d.ts +13 -1
  99. package/dist/types/src/functions/index.d.ts.map +1 -1
  100. package/dist/types/src/testing/stories.d.ts.map +1 -1
  101. package/dist/types/src/types/Channel.d.ts +422 -422
  102. package/dist/types/src/types/Channel.d.ts.map +1 -1
  103. package/dist/types/src/types/types.d.ts +1674 -1674
  104. package/dist/types/src/types/types.d.ts.map +1 -1
  105. package/dist/types/tsconfig.tsbuildinfo +1 -1
  106. package/package.json +63 -61
  107. package/src/ThreadPlugin.tsx +29 -28
  108. package/src/blueprints/index.ts +1 -1
  109. package/src/blueprints/thread-blueprint.ts +14 -6
  110. package/src/calls-service.stories.tsx +1 -1
  111. package/src/capabilities/app-graph-builder/app-graph-builder.ts +4 -3
  112. package/src/capabilities/blueprint-definition/blueprint-definition.ts +6 -12
  113. package/src/capabilities/call-manager/call-manager.ts +2 -2
  114. package/src/capabilities/markdown/markdown.ts +5 -5
  115. package/src/capabilities/operation-resolver/operation-resolver.ts +7 -7
  116. package/src/capabilities/react-root/react-root.tsx +2 -2
  117. package/src/capabilities/react-surface/react-surface.tsx +13 -12
  118. package/src/capabilities/settings/settings.ts +3 -2
  119. package/src/components/Call/Call.tsx +1 -1
  120. package/src/components/Call/Toolbar.tsx +2 -1
  121. package/src/components/CallSidebar.tsx +1 -1
  122. package/src/components/ChannelContainer.stories.tsx +4 -5
  123. package/src/components/ChannelContainer.tsx +9 -8
  124. package/src/components/Chat.stories.tsx +5 -4
  125. package/src/components/ChatContainer.tsx +15 -16
  126. package/src/components/Comments.stories.tsx +1 -1
  127. package/src/components/Lobby/Lobby.tsx +1 -1
  128. package/src/components/Media/VideoObject.stories.tsx +1 -1
  129. package/src/components/MessageContainer.tsx +2 -2
  130. package/src/components/Participant/Participant.tsx +1 -1
  131. package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +1 -1
  132. package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +1 -1
  133. package/src/components/ThreadCompanion.tsx +8 -7
  134. package/src/components/ThreadSettings.tsx +3 -2
  135. package/src/functions/create-proposals.ts +9 -9
  136. package/src/functions/index.ts +5 -1
  137. package/src/hooks/analytics.ts +1 -1
  138. package/src/testing/stories.ts +2 -1
  139. package/src/types/Channel.ts +1 -1
  140. package/dist/lib/browser/app-graph-builder-SPAZN5XL.mjs.map +0 -7
  141. package/dist/lib/browser/blueprint-definition-UQ63QKQG.mjs +0 -17
  142. package/dist/lib/browser/blueprint-definition-UQ63QKQG.mjs.map +0 -7
  143. package/dist/lib/browser/call-manager-YBRTG6T3.mjs.map +0 -7
  144. package/dist/lib/browser/chunk-DLO2G3DM.mjs.map +0 -7
  145. package/dist/lib/browser/chunk-TAWDJPMD.mjs.map +0 -7
  146. package/dist/lib/browser/chunk-VZICDGBW.mjs.map +0 -7
  147. package/dist/lib/browser/chunk-ZFLSTQSE.mjs.map +0 -7
  148. package/dist/lib/browser/markdown-TSXOA3GV.mjs.map +0 -7
  149. package/dist/lib/browser/operation-resolver-MDMEBYH2.mjs.map +0 -7
  150. package/dist/lib/browser/react-root-Q7U5D3DA.mjs.map +0 -7
  151. package/dist/lib/browser/react-surface-WDZQSDWH.mjs.map +0 -7
  152. package/dist/lib/browser/settings-OOKKVXV7.mjs.map +0 -7
  153. package/dist/lib/node-esm/app-graph-builder-3LJAPDUW.mjs.map +0 -7
  154. package/dist/lib/node-esm/blueprint-definition-MZZXXL37.mjs.map +0 -7
  155. package/dist/lib/node-esm/call-manager-MMCTNFOH.mjs.map +0 -7
  156. package/dist/lib/node-esm/chunk-3RD3IVVD.mjs.map +0 -7
  157. package/dist/lib/node-esm/chunk-AQHPP6ZX.mjs.map +0 -7
  158. package/dist/lib/node-esm/chunk-ARTUUKTM.mjs.map +0 -7
  159. package/dist/lib/node-esm/chunk-KRBZBJRI.mjs.map +0 -7
  160. package/dist/lib/node-esm/markdown-N2UJ3D6L.mjs.map +0 -7
  161. package/dist/lib/node-esm/operation-resolver-7PHDJZA2.mjs.map +0 -7
  162. package/dist/lib/node-esm/react-root-SZIGQRDZ.mjs.map +0 -7
  163. package/dist/lib/node-esm/react-surface-24PNWUDX.mjs.map +0 -7
  164. package/dist/lib/node-esm/settings-LXZQXSPL.mjs.map +0 -7
  165. /package/dist/lib/browser/{repair-TDKAFAGH.mjs.map → repair-6OZ75AUU.mjs.map} +0 -0
  166. /package/dist/lib/browser/{state-3LKZHDRI.mjs.map → state-SJR2GL5G.mjs.map} +0 -0
  167. /package/dist/lib/node-esm/{repair-LHLLGXKF.mjs.map → repair-6777EPOM.mjs.map} +0 -0
  168. /package/dist/lib/node-esm/{state-YYAK5ENM.mjs.map → state-5R3TZJQE.mjs.map} +0 -0
@@ -6,14 +6,15 @@ import {
6
6
  ThreadCapabilities,
7
7
  ThreadOperation,
8
8
  meta
9
- } from "./chunk-TAWDJPMD.mjs";
9
+ } from "./chunk-2FIHSX35.mjs";
10
10
  import "./chunk-J5LGTIGS.mjs";
11
11
 
12
12
  // src/capabilities/app-graph-builder/app-graph-builder.ts
13
13
  import { Atom } from "@effect-atom/atom-react";
14
14
  import * as Effect from "effect/Effect";
15
15
  import * as Option from "effect/Option";
16
- import { Capability, Common } from "@dxos/app-framework";
16
+ import { Capability } from "@dxos/app-framework";
17
+ import { AppCapabilities } from "@dxos/app-toolkit";
17
18
  import { Obj } from "@dxos/echo";
18
19
  import { Operation } from "@dxos/operation";
19
20
  import { AttentionCapabilities } from "@dxos/plugin-attention";
@@ -34,7 +35,7 @@ var commentDisabledFamily = Atom.family(({ stateAtom, selectionManager, objectId
34
35
  var whenCommentableObject = NodeMatcher.whenAll(NodeMatcher.whenEchoObjectMatches, NodeMatcher.whenNot(NodeMatcher.whenEchoTypeMatches(Channel_exports.Channel)));
35
36
  var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function* () {
36
37
  const capabilities = yield* Capability.Service;
37
- const resolve = (typename) => capabilities.getAll(Common.Capability.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
38
+ const resolve = (typename) => capabilities.getAll(AppCapabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
38
39
  const extensions = yield* Effect.all([
39
40
  GraphBuilder.createExtension({
40
41
  id: `${meta.id}/active-call`,
@@ -180,9 +181,9 @@ var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function
180
181
  }
181
182
  })
182
183
  ]);
183
- return Capability.contributes(Common.Capability.AppGraphBuilder, extensions);
184
+ return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);
184
185
  }));
185
186
  export {
186
187
  app_graph_builder_default as default
187
188
  };
188
- //# sourceMappingURL=app-graph-builder-SPAZN5XL.mjs.map
189
+ //# sourceMappingURL=app-graph-builder-XFGLMIGK.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 { Atom } from '@effect-atom/atom-react';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\nimport { Obj } from '@dxos/echo';\nimport { Operation } from '@dxos/operation';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport { ATTENDABLE_PATH_SEPARATOR, DECK_COMPANION_TYPE, PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';\nimport { GraphBuilder, NodeMatcher } from '@dxos/plugin-graph';\nimport { type SelectionManager, type SelectionMode, defaultSelection } from '@dxos/react-ui-attention';\n\nimport { meta } from '../../meta';\nimport { Channel, ThreadCapabilities, ThreadOperation, type ThreadState } from '../../types';\nimport { getAnchor } from '../../util';\n\ntype CommentDisabledParams = {\n stateAtom: Atom.Atom<Atom.Writable<ThreadState>[]>;\n selectionManager: SelectionManager;\n objectId: string;\n commentsType: string;\n selectionMode: SelectionMode | undefined;\n};\n\n/**\n * Atom family to derive whether the comment button should be disabled.\n * Uses a composite key to ensure proper caching.\n */\nconst commentDisabledFamily = Atom.family(\n ({ stateAtom, selectionManager, objectId, commentsType, selectionMode }: CommentDisabledParams) =>\n Atom.make((get) => {\n const stateAtoms = get(stateAtom);\n const state = stateAtoms[0] ? get(stateAtoms[0]) : undefined;\n const toolbar = state?.toolbar ?? {};\n const selectionState = get(selectionManager.state);\n const selection =\n selectionState.selections[objectId] ?? (selectionMode ? defaultSelection(selectionMode) : undefined);\n const anchor = getAnchor(selection);\n const invalidSelection = !anchor;\n const overlappingComment = toolbar[objectId];\n return (commentsType === 'anchored' && invalidSelection) || overlappingComment;\n }),\n);\n\n/** Match ECHO objects that are NOT Channels (i.e. objects that can have comments). */\nconst whenCommentableObject = NodeMatcher.whenAll(\n NodeMatcher.whenEchoObjectMatches,\n NodeMatcher.whenNot(NodeMatcher.whenEchoTypeMatches(Channel.Channel)),\n);\n\n// TODO(wittjosiah): Highlight active calls in L1.\n// Track active meetings by subscribing to meetings query and polling the swarms of recent meetings in the space.\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const capabilities = yield* Capability.Service;\n\n const resolve = (typename: string) =>\n capabilities.getAll(AppCapabilities.Metadata).find(({ id }: { id: string }) => id === typename)?.metadata ?? {};\n\n const extensions = yield* Effect.all([\n GraphBuilder.createExtension({\n id: `${meta.id}/active-call`,\n match: NodeMatcher.whenRoot,\n connector: (node, get) => {\n const callManagerAtom = capabilities.atom(ThreadCapabilities.CallManager);\n const [call] = get(callManagerAtom);\n if (!call) {\n return Effect.succeed([]);\n }\n // Use derived joinedAtom for efficient subscription.\n const joined = get(call.joinedAtom);\n return Effect.succeed(\n joined\n ? [\n {\n id: `${node.id}${ATTENDABLE_PATH_SEPARATOR}active-call`,\n type: DECK_COMPANION_TYPE,\n data: null,\n properties: {\n label: ['call panel label', { ns: meta.id }],\n icon: 'ph--video-conference--regular',\n position: 'hoist',\n disposition: 'hidden',\n },\n },\n ]\n : [],\n );\n },\n }),\n GraphBuilder.createTypeExtension({\n id: `${meta.id}/channel-chat-companion`,\n type: Channel.Channel,\n connector: (channel, get) => {\n const callManager = capabilities.get(ThreadCapabilities.CallManager);\n // Use derived atoms for efficient subscription.\n const joined = get(callManager.joinedAtom);\n const roomId = get(callManager.roomIdAtom);\n const isActive = joined && roomId === Obj.getDXN(channel).toString();\n if (!isActive) {\n return Effect.succeed([]);\n }\n\n return Effect.succeed([\n {\n id: `${Obj.getDXN(channel).toString()}${ATTENDABLE_PATH_SEPARATOR}chat`,\n type: PLANK_COMPANION_TYPE,\n data: 'chat',\n properties: {\n label: ['channel companion label', { ns: meta.id }],\n icon: 'ph--hash--regular',\n position: 'hoist',\n disposition: 'hidden',\n },\n },\n ]);\n },\n }),\n GraphBuilder.createExtension({\n id: `${meta.id}/comments-companion`,\n match: (node) => {\n if (!Obj.isObject(node.data) || Option.isNone(whenCommentableObject(node))) {\n return Option.none();\n }\n const metadata = resolve(Obj.getTypename(node.data)!);\n return typeof metadata.comments === 'string' ? Option.some(node) : Option.none();\n },\n connector: (node) =>\n Effect.succeed([\n {\n id: [node.id, 'comments'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: 'comments',\n properties: {\n label: ['comments label', { ns: meta.id }],\n icon: 'ph--chat-text--regular',\n disposition: 'hidden',\n position: 'hoist',\n },\n },\n ]),\n }),\n GraphBuilder.createExtension({\n id: `${meta.id}/comment-toolbar`,\n match: (node) => {\n if (!Obj.isObject(node.data) || Option.isNone(whenCommentableObject(node))) {\n return Option.none();\n }\n const metadata = resolve(Obj.getTypename(node.data)!);\n return typeof metadata.comments === 'string' ? Option.some(node.data) : Option.none();\n },\n actions: (object, get) => {\n const stateAtom = capabilities.atom(ThreadCapabilities.State);\n const selectionManager = capabilities.get(AttentionCapabilities.Selection);\n const objectId = Obj.getDXN(object).toString();\n const metadata = resolve(Obj.getTypename(object)!);\n\n const disabled = get(\n commentDisabledFamily({\n stateAtom,\n selectionManager,\n objectId,\n commentsType: metadata.comments as string,\n selectionMode: metadata.selectionMode,\n }),\n );\n\n return Effect.succeed([\n {\n id: `${Obj.getDXN(object).toString()}/comment`,\n data: Effect.fnUntraced(function* () {\n const metadata = resolve(Obj.getTypename(object)!);\n const selection = selectionManager.getSelection(Obj.getDXN(object).toString());\n const anchor = metadata.comments === 'anchored' ? getAnchor(selection) : Date.now().toString();\n const name = metadata.getAnchorLabel?.(object, anchor);\n yield* Operation.invoke(ThreadOperation.Create, {\n anchor,\n name,\n subject: object,\n });\n }),\n properties: {\n label: ['add comment label', { ns: meta.id }],\n icon: 'ph--chat-text--regular',\n disposition: 'toolbar',\n disabled,\n testId: 'thread.comment.add',\n },\n },\n ]);\n },\n }),\n ]);\n\n return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions);\n }),\n);\n"],
5
+ "mappings": "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",
6
+ "names": ["Atom", "Effect", "Option", "Capability", "AppCapabilities", "Obj", "Operation", "AttentionCapabilities", "ATTENDABLE_PATH_SEPARATOR", "DECK_COMPANION_TYPE", "PLANK_COMPANION_TYPE", "GraphBuilder", "NodeMatcher", "defaultSelection", "commentDisabledFamily", "Atom", "family", "stateAtom", "selectionManager", "objectId", "commentsType", "selectionMode", "make", "get", "stateAtoms", "state", "undefined", "toolbar", "selectionState", "selection", "selections", "defaultSelection", "anchor", "getAnchor", "invalidSelection", "overlappingComment", "whenCommentableObject", "NodeMatcher", "whenAll", "whenEchoObjectMatches", "whenNot", "whenEchoTypeMatches", "Channel", "Capability", "makeModule", "fnUntraced", "capabilities", "Service", "resolve", "typename", "getAll", "AppCapabilities", "Metadata", "find", "id", "metadata", "extensions", "all", "GraphBuilder", "createExtension", "meta", "match", "whenRoot", "connector", "node", "callManagerAtom", "atom", "ThreadCapabilities", "CallManager", "call", "succeed", "joined", "joinedAtom", "ATTENDABLE_PATH_SEPARATOR", "type", "DECK_COMPANION_TYPE", "data", "properties", "label", "ns", "icon", "position", "disposition", "createTypeExtension", "channel", "callManager", "roomId", "roomIdAtom", "isActive", "Obj", "getDXN", "toString", "PLANK_COMPANION_TYPE", "isObject", "isNone", "none", "getTypename", "comments", "some", "join", "actions", "object", "State", "AttentionCapabilities", "Selection", "disabled", "getSelection", "Date", "now", "name", "getAnchorLabel", "Operation", "invoke", "ThreadOperation", "Create", "subject", "testId", "contributes", "AppGraphBuilder"]
7
+ }
@@ -0,0 +1,17 @@
1
+ import {
2
+ thread_blueprint_default
3
+ } from "./chunk-CBX65FMW.mjs";
4
+ import "./chunk-J5LGTIGS.mjs";
5
+
6
+ // src/capabilities/blueprint-definition/blueprint-definition.ts
7
+ import * as Effect from "effect/Effect";
8
+ import { Capability } from "@dxos/app-framework";
9
+ import { AppCapabilities } from "@dxos/app-toolkit";
10
+ var blueprintDefinition = Capability.makeModule(() => Effect.succeed([
11
+ Capability.contributes(AppCapabilities.BlueprintDefinition, thread_blueprint_default)
12
+ ]));
13
+ var blueprint_definition_default = blueprintDefinition;
14
+ export {
15
+ blueprint_definition_default as default
16
+ };
17
+ //# sourceMappingURL=blueprint-definition-RWH6FTW7.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/blueprint-definition/blueprint-definition.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\n\nimport { ThreadBlueprint } from '../../blueprints';\n\nconst blueprintDefinition = Capability.makeModule<\n [],\n Capability.Capability<typeof AppCapabilities.BlueprintDefinition>[]\n>(() => Effect.succeed([Capability.contributes(AppCapabilities.BlueprintDefinition, ThreadBlueprint)]));\n\nexport default blueprintDefinition;\n"],
5
+ "mappings": ";;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,kBAAkB;AAC3B,SAASC,uBAAuB;AAIhC,IAAMC,sBAAsBC,WAAWC,WAGrC,MAAaC,eAAQ;EAACF,WAAWG,YAAYC,gBAAgBC,qBAAqBC,wBAAAA;CAAiB,CAAA;AAErG,IAAA,+BAAeP;",
6
+ "names": ["Effect", "Capability", "AppCapabilities", "blueprintDefinition", "Capability", "makeModule", "succeed", "contributes", "AppCapabilities", "BlueprintDefinition", "ThreadBlueprint"]
7
+ }
@@ -1,8 +1,8 @@
1
1
  import {
2
- thread_blueprint_exports
3
- } from "../chunk-ZFLSTQSE.mjs";
2
+ thread_blueprint_default
3
+ } from "../chunk-CBX65FMW.mjs";
4
4
  import "../chunk-J5LGTIGS.mjs";
5
5
  export {
6
- thread_blueprint_exports as ThreadBlueprint
6
+ thread_blueprint_default as ThreadBlueprint
7
7
  };
8
8
  //# sourceMappingURL=index.mjs.map
@@ -4,16 +4,16 @@ import {
4
4
  import "./chunk-ISCHODBV.mjs";
5
5
  import {
6
6
  ThreadCapabilities
7
- } from "./chunk-TAWDJPMD.mjs";
7
+ } from "./chunk-2FIHSX35.mjs";
8
8
  import "./chunk-J5LGTIGS.mjs";
9
9
 
10
10
  // src/capabilities/call-manager/call-manager.ts
11
11
  import * as Effect from "effect/Effect";
12
- import { Capability, Common } from "@dxos/app-framework";
12
+ import { Capabilities, Capability } from "@dxos/app-framework";
13
13
  import { ClientCapabilities } from "@dxos/plugin-client";
14
14
  var call_manager_default = Capability.makeModule(Effect.fnUntraced(function* () {
15
15
  const client = yield* Capability.get(ClientCapabilities.Client);
16
- const registry = yield* Capability.get(Common.Capability.AtomRegistry);
16
+ const registry = yield* Capability.get(Capabilities.AtomRegistry);
17
17
  const callManager = new CallManager(client, registry);
18
18
  yield* Effect.tryPromise(() => callManager.open());
19
19
  return Capability.contributes(ThreadCapabilities.CallManager, callManager, () => Effect.sync(() => {
@@ -23,4 +23,4 @@ var call_manager_default = Capability.makeModule(Effect.fnUntraced(function* ()
23
23
  export {
24
24
  call_manager_default as default
25
25
  };
26
- //# sourceMappingURL=call-manager-YBRTG6T3.mjs.map
26
+ //# sourceMappingURL=call-manager-GDGIKJKN.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/call-manager/call-manager.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { ClientCapabilities } from '@dxos/plugin-client';\n\nimport { CallManager } from '../../calls';\nimport { ThreadCapabilities } from '../../types';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const client = yield* Capability.get(ClientCapabilities.Client);\n const registry = yield* Capability.get(Capabilities.AtomRegistry);\n const callManager = new CallManager(client, registry);\n yield* Effect.tryPromise(() => callManager.open());\n\n return Capability.contributes(ThreadCapabilities.CallManager, callManager, () =>\n Effect.sync(() => {\n void callManager.close();\n }),\n );\n }),\n);\n"],
5
+ "mappings": ";;;;;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,cAAcC,kBAAkB;AACzC,SAASC,0BAA0B;AAKnC,IAAA,uBAAeC,WAAWC,WACjBC,kBAAW,aAAA;AAChB,QAAMC,SAAS,OAAOH,WAAWI,IAAIC,mBAAmBC,MAAM;AAC9D,QAAMC,WAAW,OAAOP,WAAWI,IAAII,aAAaC,YAAY;AAChE,QAAMC,cAAc,IAAIC,YAAYR,QAAQI,QAAAA;AAC5C,SAAcK,kBAAW,MAAMF,YAAYG,KAAI,CAAA;AAE/C,SAAOb,WAAWc,YAAYC,mBAAmBJ,aAAaD,aAAa,MAClEM,YAAK,MAAA;AACV,SAAKN,YAAYO,MAAK;EACxB,CAAA,CAAA;AAEJ,CAAA,CAAA;",
6
+ "names": ["Effect", "Capabilities", "Capability", "ClientCapabilities", "Capability", "makeModule", "fnUntraced", "client", "get", "ClientCapabilities", "Client", "registry", "Capabilities", "AtomRegistry", "callManager", "CallManager", "tryPromise", "open", "contributes", "ThreadCapabilities", "sync", "close"]
7
+ }
@@ -44,7 +44,7 @@ var Channel = Schema.Struct({
44
44
  name: Schema.optional(Schema.String),
45
45
  defaultThread: Type.Ref(Thread.Thread).pipe(FormInputAnnotation.set(false)),
46
46
  // TODO(wittjosiah): Should be an "ordered collection".
47
- threads: Type.Ref(Thread.Thread).pipe(Schema.Array, Schema.mutable, FormInputAnnotation.set(false))
47
+ threads: Type.Ref(Thread.Thread).pipe(Schema.Array, FormInputAnnotation.set(false))
48
48
  }).pipe(Type.object({
49
49
  typename: "dxos.org/type/Channel",
50
50
  version: "0.1.0"
@@ -290,4 +290,4 @@ export {
290
290
  ThreadSettingsSchema,
291
291
  ThreadOperation
292
292
  };
293
- //# sourceMappingURL=chunk-TAWDJPMD.mjs.map
293
+ //# sourceMappingURL=chunk-2FIHSX35.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/capabilities.ts", "../../../src/meta.ts", "../../../src/types/Channel.ts", "../../../src/types/types.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Atom } from '@effect-atom/atom-react';\n\nimport { Capability } from '@dxos/app-framework';\n\nimport { type CallManager, type CallState, type MediaState } from '../calls';\nimport { meta } from '../meta';\nimport { type Channel, type ThreadSettingsProps, type ThreadState, type ViewStore } from '../types';\n\nexport namespace ThreadCapabilities {\n export const Settings = Capability.make<Atom.Writable<ThreadSettingsProps>>(`${meta.id}/capability/settings`);\n export const CallManager = Capability.make<CallManager>(`${meta.id}/capability/call-manager`);\n\n // TODO(burdon): Better way to define specific extensions for meeting companions.\n // TODO(burdon): This brings in deps from ../calls; how should we manage/minimize explicit type exposure to other plugins?\n // TODO(wittjosiah): These callbacks could be intents once we support broadcast.\n export type CallProperties = {\n onJoin: (state: { channel?: Channel.Channel; roomId?: string }) => Promise<void>;\n onLeave: (roomId?: string) => Promise<void>;\n onCallStateUpdated: (callState: CallState) => Promise<void>;\n onMediaStateUpdated: ([mediaState, isSpeaking]: [MediaState, boolean]) => Promise<void>;\n };\n\n export const CallExtension = Capability.make<CallProperties>(`${meta.id}/capability/call-extension`);\n\n /** Thread state (drafts, toolbar state, current selection). */\n export const State = Capability.make<Atom.Writable<ThreadState>>(`${meta.id}/capability/state`);\n\n /** Per-subject view state (e.g., showResolvedThreads). */\n export const ViewState = Capability.make<Atom.Writable<ViewStore>>(`${meta.id}/capability/view-state`);\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\n// TODO(wittjosiah): Needs screenshots.\nexport const meta: Plugin.Meta = {\n id: 'dxos.org/plugin/thread',\n name: 'Chat',\n description: trim`\n Multi-modal communication platform supporting text chat, voice, and video conferencing.\n Create threaded conversations and add contextual comments directly on any workspace object.\n `,\n icon: 'ph--video-conference--regular',\n iconHue: 'rose',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-thread',\n};\n\nexport const THREAD_ITEM = `${meta.id}/item`;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Obj, Ref, Type } from '@dxos/echo';\nimport { FormInputAnnotation } from '@dxos/echo/internal';\nimport { Thread } from '@dxos/types';\n\nexport const Channel = Schema.Struct({\n name: Schema.optional(Schema.String),\n defaultThread: Type.Ref(Thread.Thread).pipe(FormInputAnnotation.set(false)),\n // TODO(wittjosiah): Should be an \"ordered collection\".\n threads: Type.Ref(Thread.Thread).pipe(Schema.Array, FormInputAnnotation.set(false)),\n}).pipe(\n Type.object({\n typename: 'dxos.org/type/Channel',\n version: '0.1.0',\n }),\n);\n\nexport interface Channel extends Schema.Schema.Type<typeof Channel> {}\n\nexport const make = (props: Pick<Obj.MakeProps<typeof Channel>, 'name'> = {}) =>\n Obj.make(Channel, {\n ...props,\n defaultThread: Ref.make(Obj.make(Thread.Thread, { messages: [], status: 'active' })),\n threads: [],\n });\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Capability } from '@dxos/app-framework';\nimport { Key, Type } from '@dxos/echo';\nimport { Operation } from '@dxos/operation';\nimport { SpaceSchema } from '@dxos/react-client/echo';\nimport { Collection } from '@dxos/schema';\nimport { Actor, AnchoredTo, Message, Thread } from '@dxos/types';\n\nimport { meta } from '../meta';\n\nimport * as Channel from './Channel';\n\nconst THREAD_OPERATION = `${meta.id}/operation`;\n\n/**\n * Operations for the Thread plugin.\n * Note: Complex ECHO types are typed as Schema.Any to avoid serialization issues.\n */\nexport namespace ThreadOperation {\n export const OnCreateSpace = Operation.make({\n meta: { key: `${THREAD_OPERATION}/on-create-space`, name: 'On Create Space' },\n services: [Capability.Service],\n schema: {\n input: Schema.Struct({\n space: SpaceSchema,\n rootCollection: Collection.Collection,\n isDefault: Schema.Boolean.pipe(Schema.optional),\n }),\n output: Schema.Void,\n },\n });\n\n export const CreateChannel = Operation.make({\n meta: { key: `${THREAD_OPERATION}/create-channel`, name: 'Create Channel' },\n services: [Capability.Service],\n schema: {\n input: Schema.Struct({\n spaceId: Key.SpaceId,\n name: Schema.optional(Schema.String),\n }),\n output: Schema.Struct({\n object: Channel.Channel,\n }),\n },\n });\n\n export const CreateChannelThread = Operation.make({\n meta: { key: `${THREAD_OPERATION}/create-channel-thread`, name: 'Create Channel Thread' },\n services: [Capability.Service],\n schema: {\n input: Schema.Struct({\n channel: Channel.Channel,\n }),\n output: Schema.Struct({\n object: Thread.Thread,\n }),\n },\n });\n\n export const Create = Operation.make({\n meta: { key: `${THREAD_OPERATION}/create`, name: 'Create Thread' },\n services: [Capability.Service],\n schema: {\n input: Schema.Struct({\n name: Schema.optional(Schema.String),\n anchor: Schema.optional(Schema.String),\n subject: Type.Obj,\n }),\n output: Schema.Void,\n },\n });\n\n export const DeleteOutput = Schema.Struct({\n thread: Thread.Thread.annotations({ description: 'The deleted thread.' }),\n anchor: AnchoredTo.AnchoredTo.annotations({ description: 'The deleted anchor.' }),\n }).pipe(Schema.partial);\n\n export type DeleteOutput = Schema.Schema.Type<typeof DeleteOutput>;\n\n export const Delete = Operation.make({\n meta: { key: `${THREAD_OPERATION}/delete`, name: 'Delete Thread' },\n services: [Capability.Service],\n schema: {\n input: Schema.Struct({\n anchor: AnchoredTo.AnchoredTo,\n subject: Type.Obj,\n thread: Schema.optional(Thread.Thread),\n }),\n output: DeleteOutput,\n },\n });\n\n export const Select = Operation.make({\n meta: { key: `${THREAD_OPERATION}/select`, name: 'Select Thread' },\n services: [Capability.Service],\n schema: {\n input: Schema.Struct({\n current: Schema.String,\n }),\n output: Schema.Void,\n },\n });\n\n export const ToggleResolved = Operation.make({\n meta: { key: `${THREAD_OPERATION}/toggle-resolved`, name: 'Toggle Resolved' },\n services: [Capability.Service],\n schema: {\n input: Schema.Struct({\n thread: Thread.Thread,\n }),\n output: Schema.Void,\n },\n });\n\n export const AddMessage = Operation.make({\n meta: { key: `${THREAD_OPERATION}/add-message`, name: 'Add Message' },\n services: [Capability.Service],\n schema: {\n input: Schema.Struct({\n subject: Type.Obj,\n anchor: AnchoredTo.AnchoredTo,\n sender: Actor.Actor,\n text: Schema.String,\n }),\n output: Schema.Void,\n },\n });\n\n export const DeleteMessageOutput = Schema.partial(\n Schema.Struct({\n message: Message.Message.annotations({ description: 'The deleted message.' }),\n messageIndex: Schema.Number.annotations({ description: 'The index the message was at.' }),\n }),\n );\n\n export type DeleteMessageOutput = Schema.Schema.Type<typeof DeleteMessageOutput>;\n\n export const DeleteMessage = Operation.make({\n meta: { key: `${THREAD_OPERATION}/delete-message`, name: 'Delete Message' },\n services: [Capability.Service],\n schema: {\n input: Schema.Struct({\n anchor: AnchoredTo.AnchoredTo,\n subject: Type.Obj,\n messageId: Schema.String,\n }),\n output: DeleteMessageOutput,\n },\n });\n\n /**\n * Restore a deleted thread (inverse of Delete).\n */\n export const Restore = Operation.make({\n meta: { key: `${THREAD_OPERATION}/restore`, name: 'Restore Thread' },\n services: [Capability.Service],\n schema: {\n input: Schema.Struct({\n thread: Thread.Thread.annotations({ description: 'The thread to restore.' }),\n anchor: AnchoredTo.AnchoredTo.annotations({ description: 'The anchor relation to restore.' }),\n }),\n output: Schema.Void,\n },\n });\n\n /**\n * Restore a deleted message (inverse of DeleteMessage).\n */\n export const RestoreMessage = Operation.make({\n meta: { key: `${THREAD_OPERATION}/restore-message`, name: 'Restore Message' },\n services: [Capability.Service],\n schema: {\n input: Schema.Struct({\n anchor: AnchoredTo.AnchoredTo.annotations({ description: 'The anchor of the thread.' }),\n message: Message.Message.annotations({ description: 'The message to restore.' }),\n messageIndex: Schema.Number.annotations({ description: 'The index to restore the message at.' }),\n }),\n output: Schema.Void,\n },\n });\n}\n\nexport const ThreadSettingsSchema = Schema.mutable(Schema.Struct({}));\nexport type ThreadSettingsProps = Schema.Schema.Type<typeof ThreadSettingsSchema>;\n\nexport interface ThreadModel {\n root: Thread.Thread;\n}\n\ntype SubjectId = string;\nexport type ViewState = { showResolvedThreads: boolean };\nexport type ViewStore = Record<SubjectId, ViewState>;\n\nexport type ThreadState = {\n /** Object toolbar state. */\n toolbar: Record<string, boolean>;\n /** In-memory draft threads. */\n // TODO(burdon): Drafts are getting lost.\n drafts: Record<string, AnchoredTo.AnchoredTo[]>;\n current?: string | undefined;\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["Capability", "trim", "meta", "id", "name", "description", "trim", "icon", "iconHue", "source", "THREAD_ITEM", "ThreadCapabilities", "Settings", "Capability", "make", "meta", "id", "CallManager", "CallExtension", "State", "ViewState", "Schema", "Obj", "Ref", "Type", "FormInputAnnotation", "Thread", "Channel", "Struct", "name", "optional", "String", "defaultThread", "Type", "Ref", "Thread", "pipe", "FormInputAnnotation", "set", "threads", "Array", "object", "typename", "version", "make", "props", "Obj", "messages", "status", "Schema", "Capability", "Key", "Type", "Operation", "SpaceSchema", "Collection", "Actor", "AnchoredTo", "Message", "Thread", "THREAD_OPERATION", "meta", "id", "ThreadOperation", "OnCreateSpace", "Operation", "make", "key", "name", "services", "Capability", "Service", "schema", "input", "Struct", "space", "SpaceSchema", "rootCollection", "Collection", "isDefault", "Boolean", "pipe", "optional", "output", "Void", "CreateChannel", "spaceId", "Key", "SpaceId", "String", "object", "Channel", "CreateChannelThread", "channel", "Thread", "Create", "anchor", "subject", "Type", "Obj", "DeleteOutput", "thread", "annotations", "description", "AnchoredTo", "partial", "Delete", "Select", "current", "ToggleResolved", "AddMessage", "sender", "Actor", "text", "DeleteMessageOutput", "message", "Message", "messageIndex", "Number", "DeleteMessage", "messageId", "Restore", "RestoreMessage", "ThreadSettingsSchema", "mutable"]
7
+ }
@@ -2,7 +2,7 @@ import {
2
2
  useDebugMode,
3
3
  useOnEditAnalytics,
4
4
  useStatus
5
- } from "./chunk-DLO2G3DM.mjs";
5
+ } from "./chunk-JBB73URQ.mjs";
6
6
  import {
7
7
  getMessageMetadata
8
8
  } from "./chunk-CP7E2HRE.mjs";
@@ -10,12 +10,12 @@ import {
10
10
  ThreadCapabilities,
11
11
  ThreadOperation,
12
12
  meta
13
- } from "./chunk-TAWDJPMD.mjs";
13
+ } from "./chunk-2FIHSX35.mjs";
14
14
 
15
15
  // src/components/Call/Call.tsx
16
16
  import { useAtomValue as useAtomValue3 } from "@effect-atom/atom-react";
17
17
  import React9 from "react";
18
- import { useCapability as useCapability3 } from "@dxos/app-framework/react";
18
+ import { useCapability as useCapability3 } from "@dxos/app-framework/ui";
19
19
 
20
20
  // src/components/Media/AudioStream.tsx
21
21
  import React, { useEffect, useRef } from "react";
@@ -104,7 +104,7 @@ VideoObject.displayName = "VideoObject";
104
104
  // src/components/Participant/Participant.tsx
105
105
  import { useAtomValue } from "@effect-atom/atom-react";
106
106
  import React6, { memo as memo2, useMemo as useMemo2 } from "react";
107
- import { useCapability } from "@dxos/app-framework/react";
107
+ import { useCapability } from "@dxos/app-framework/ui";
108
108
 
109
109
  // src/components/ResponsiveGrid/ResponsiveContainer.tsx
110
110
  import React3 from "react";
@@ -534,7 +534,8 @@ var ParticipantGrid = ({ classNames, self, users, fullscreen, debug }) => {
534
534
  // src/components/Call/Toolbar.tsx
535
535
  import { useAtomValue as useAtomValue2 } from "@effect-atom/atom-react";
536
536
  import React8 from "react";
537
- import { useAppGraph, useCapability as useCapability2 } from "@dxos/app-framework/react";
537
+ import { useCapability as useCapability2 } from "@dxos/app-framework/ui";
538
+ import { useAppGraph } from "@dxos/app-toolkit/ui";
538
539
  import { Obj } from "@dxos/echo";
539
540
  import { Node, useActionRunner } from "@dxos/plugin-graph";
540
541
  import { useActions, useNode } from "@dxos/plugin-graph";
@@ -930,7 +931,7 @@ var command = [
930
931
  // src/components/MessageContainer.tsx
931
932
  import { EditorView } from "@codemirror/view";
932
933
  import React11, { forwardRef as forwardRef2, useCallback as useCallback2, useEffect as useEffect7, useRef as useRef3, useState as useState5 } from "react";
933
- import { Surface } from "@dxos/app-framework/react";
934
+ import { Surface } from "@dxos/app-framework/ui";
934
935
  import { Ref } from "@dxos/echo";
935
936
  import { useObject } from "@dxos/echo-react";
936
937
  import { PublicKey } from "@dxos/react-client";
@@ -1103,7 +1104,7 @@ var MessageBlockObjectTile = /* @__PURE__ */ forwardRef2(({ subject }, forwarded
1103
1104
  return /* @__PURE__ */ React11.createElement(Card.Root, {
1104
1105
  className: mx7("grid col-span-3 plb-1 pr-4", hoverableControls, hoverableFocusedWithinControls),
1105
1106
  ref: forwardedRef
1106
- }, /* @__PURE__ */ React11.createElement(Surface, {
1107
+ }, /* @__PURE__ */ React11.createElement(Surface.Surface, {
1107
1108
  role: "card-content",
1108
1109
  limit: 1,
1109
1110
  data: {
@@ -1153,21 +1154,23 @@ var ChatContainer = ({ classNames, space, thread, context, current, autoFocusTex
1153
1154
  if (!messageRef.current?.length) {
1154
1155
  return false;
1155
1156
  }
1156
- thread.messages.push(Ref2.make(Obj2.make(Message.Message, {
1157
- created: (/* @__PURE__ */ new Date()).toISOString(),
1158
- sender: {
1159
- identityDid: identity.did
1160
- },
1161
- blocks: [
1162
- {
1163
- _tag: "text",
1164
- text: messageRef.current
1165
- }
1166
- ],
1167
- properties: context ? {
1168
- context: Ref2.make(context)
1169
- } : void 0
1170
- })));
1157
+ Obj2.change(thread, (t2) => {
1158
+ t2.messages.push(Ref2.make(Obj2.make(Message.Message, {
1159
+ created: (/* @__PURE__ */ new Date()).toISOString(),
1160
+ sender: {
1161
+ identityDid: identity.did
1162
+ },
1163
+ blocks: [
1164
+ {
1165
+ _tag: "text",
1166
+ text: messageRef.current
1167
+ }
1168
+ ],
1169
+ properties: context ? {
1170
+ context: Ref2.make(context)
1171
+ } : void 0
1172
+ })));
1173
+ });
1171
1174
  messageRef.current = "";
1172
1175
  setAutoFocus(true);
1173
1176
  scrollToEnd("smooth");
@@ -1183,9 +1186,9 @@ var ChatContainer = ({ classNames, space, thread, context, current, autoFocusTex
1183
1186
  classNames
1184
1187
  ]
1185
1188
  }, /* @__PURE__ */ React12.createElement(ScrollArea.Root, {
1186
- classNames: "col-span-2"
1189
+ orientation: "vertical"
1187
1190
  }, /* @__PURE__ */ React12.createElement(ScrollArea.Viewport, {
1188
- classNames: "overflow-anchored after:overflow-anchor after:block after:bs-px after:-mbs-px [&>div]:min-bs-full [&>div]:!grid [&>div]:grid-rows-[1fr_0]"
1191
+ classNames: "col-span-2"
1189
1192
  }, /* @__PURE__ */ React12.createElement("div", {
1190
1193
  role: "none",
1191
1194
  className: mx8(threadLayout, "place-self-end")
@@ -1197,7 +1200,7 @@ var ChatContainer = ({ classNames, space, thread, context, current, autoFocusTex
1197
1200
  role: "none",
1198
1201
  className: "bs-px -mbs-px",
1199
1202
  ref: threadScrollRef
1200
- })), /* @__PURE__ */ React12.createElement(ScrollArea.Scrollbar, null, /* @__PURE__ */ React12.createElement(ScrollArea.Thumb, null))), /* @__PURE__ */ React12.createElement(MessageTextbox, {
1203
+ }))), /* @__PURE__ */ React12.createElement(MessageTextbox, {
1201
1204
  extensions,
1202
1205
  autoFocus,
1203
1206
  onSend: handleCreate,
@@ -1211,7 +1214,7 @@ var ChatContainer_default = ChatContainer;
1211
1214
  // src/components/ChannelContainer.tsx
1212
1215
  import { Atom, useAtomValue as useAtomValue4 } from "@effect-atom/atom-react";
1213
1216
  import React13, { useCallback as useCallback3, useEffect as useEffect8, useMemo as useMemo6, useState as useState7 } from "react";
1214
- import { useCapabilities, useCapability as useCapability4 } from "@dxos/app-framework/react";
1217
+ import { useCapabilities, useCapability as useCapability4 } from "@dxos/app-framework/ui";
1215
1218
  import { Context } from "@dxos/context";
1216
1219
  import { failUndefined } from "@dxos/debug";
1217
1220
  import { Obj as Obj3 } from "@dxos/echo";
@@ -1220,7 +1223,7 @@ import { useClient } from "@dxos/react-client";
1220
1223
  import { getSpace } from "@dxos/react-client/echo";
1221
1224
  import { useIdentity as useIdentity3 } from "@dxos/react-client/halo";
1222
1225
  import { ElevationProvider, Input as Input2, useTranslation as useTranslation6 } from "@dxos/react-ui";
1223
- import { ControlGroup, ControlGroupButton, ControlItemInput } from "@dxos/react-ui-form";
1226
+ import { Settings } from "@dxos/react-ui-form";
1224
1227
  import { MenuProvider, ToolbarMenu, createMenuAction, createMenuItemGroup, useMenuActions } from "@dxos/react-ui-menu";
1225
1228
  import { useSoundEffect } from "@dxos/react-ui-sfx";
1226
1229
  import { StackItem as StackItem2 } from "@dxos/react-ui-stack";
@@ -1240,7 +1243,7 @@ var ChannelContainer = ({ role, subject: channel, roomId: roomIdProp, fullscreen
1240
1243
  useEffect8(() => {
1241
1244
  const ctx = new Context(void 0, {
1242
1245
  F: __dxlog_file3,
1243
- L: 55
1246
+ L: 56
1244
1247
  });
1245
1248
  callManager.left.on(ctx, (roomId2) => {
1246
1249
  extensions.forEach((extension) => {
@@ -1282,7 +1285,7 @@ var ChannelContainer = ({ role, subject: channel, roomId: roomIdProp, fullscreen
1282
1285
  } catch (err) {
1283
1286
  log2.catch(err, void 0, {
1284
1287
  F: __dxlog_file3,
1285
- L: 99,
1288
+ L: 100,
1286
1289
  S: void 0,
1287
1290
  C: (f, a) => f(...a)
1288
1291
  });
@@ -1299,7 +1302,7 @@ var ChannelContainer = ({ role, subject: channel, roomId: roomIdProp, fullscreen
1299
1302
  } catch (err) {
1300
1303
  log2.catch(err, void 0, {
1301
1304
  F: __dxlog_file3,
1302
- L: 111,
1305
+ L: 112,
1303
1306
  S: void 0,
1304
1307
  C: (f, a) => f(...a)
1305
1308
  });
@@ -1343,9 +1346,9 @@ var DisplayNameMissing = () => {
1343
1346
  client,
1344
1347
  displayName
1345
1348
  ]);
1346
- return /* @__PURE__ */ React13.createElement(ControlGroup, {
1349
+ return /* @__PURE__ */ React13.createElement(Settings.Group, {
1347
1350
  classNames: "p-4 place-content-center"
1348
- }, /* @__PURE__ */ React13.createElement(ControlItemInput, {
1351
+ }, /* @__PURE__ */ React13.createElement(Settings.ItemInput, {
1349
1352
  title: t("display name label"),
1350
1353
  description: t("display name description")
1351
1354
  }, /* @__PURE__ */ React13.createElement(Input2.TextInput, {
@@ -1353,7 +1356,7 @@ var DisplayNameMissing = () => {
1353
1356
  onChange: handleChange,
1354
1357
  placeholder: t("display name input placeholder"),
1355
1358
  classNames: "md:min-is-64"
1356
- })), /* @__PURE__ */ React13.createElement(ControlGroupButton, {
1359
+ })), /* @__PURE__ */ React13.createElement(Settings.GroupButton, {
1357
1360
  disabled: !displayName,
1358
1361
  onClick: handleSave
1359
1362
  }, t("set display name label")));
@@ -1406,7 +1409,7 @@ var ChannelToolbar = ({ attendableId, role, onJoinCall }) => {
1406
1409
  // src/components/CallSidebar.tsx
1407
1410
  import { useAtomValue as useAtomValue5 } from "@effect-atom/atom-react";
1408
1411
  import React14 from "react";
1409
- import { useCapability as useCapability5 } from "@dxos/app-framework/react";
1412
+ import { useCapability as useCapability5 } from "@dxos/app-framework/ui";
1410
1413
  var CallSidebar = () => {
1411
1414
  const call = useCapability5(ThreadCapabilities.CallManager);
1412
1415
  const roomId = useAtomValue5(call.roomIdAtom);
@@ -1419,14 +1422,15 @@ var CallSidebar = () => {
1419
1422
  // src/components/ThreadCompanion.tsx
1420
1423
  import { useAtomValue as useAtomValue6 } from "@effect-atom/atom-react";
1421
1424
  import React18, { useCallback as useCallback5, useMemo as useMemo8 } from "react";
1422
- import { Common } from "@dxos/app-framework";
1423
- import { useCapabilities as useCapabilities2, useCapability as useCapability6, useOperationInvoker } from "@dxos/app-framework/react";
1425
+ import { Capabilities } from "@dxos/app-framework";
1426
+ import { useCapabilities as useCapabilities2, useCapability as useCapability6, useOperationInvoker } from "@dxos/app-framework/ui";
1427
+ import { AppCapabilities, CollaborationOperation, LayoutOperation } from "@dxos/app-toolkit";
1424
1428
  import { Filter, Obj as Obj6, Query, Relation as Relation3 } from "@dxos/echo";
1425
1429
  import { Ref as Ref3, useQuery } from "@dxos/react-client/echo";
1426
1430
  import { useIdentity as useIdentity5 } from "@dxos/react-client/halo";
1427
1431
  import { useTranslation as useTranslation10 } from "@dxos/react-ui";
1432
+ import { Layout } from "@dxos/react-ui";
1428
1433
  import { useAttended } from "@dxos/react-ui-attention";
1429
- import { Layout } from "@dxos/react-ui-mosaic";
1430
1434
  import { Tabs } from "@dxos/react-ui-tabs";
1431
1435
  import { AnchoredTo, Thread } from "@dxos/types";
1432
1436
  import { mx as mx10 } from "@dxos/ui-theme";
@@ -1621,10 +1625,10 @@ var CommentsContainer = ({ anchors, currentId, showResolvedThreads, ...props })
1621
1625
  // src/components/ThreadSettings.tsx
1622
1626
  import React17 from "react";
1623
1627
  import { useTranslation as useTranslation9 } from "@dxos/react-ui";
1624
- import { ControlPage } from "@dxos/react-ui-form";
1628
+ import { Settings as Settings2 } from "@dxos/react-ui-form";
1625
1629
  var ThreadSettings = ({ settings: _settings }) => {
1626
1630
  const { t: _t } = useTranslation9(meta.id);
1627
- return /* @__PURE__ */ React17.createElement(ControlPage, null);
1631
+ return /* @__PURE__ */ React17.createElement(Settings2.Root, null);
1628
1632
  };
1629
1633
 
1630
1634
  // src/components/ThreadCompanion.tsx
@@ -1636,7 +1640,7 @@ var ThreadCompanion = ({ subject }) => {
1636
1640
  const { invokePromise } = useOperationInvoker();
1637
1641
  const identity = useIdentity5();
1638
1642
  const subjectId = Obj6.getDXN(subject).toString();
1639
- const registry = useCapability6(Common.Capability.AtomRegistry);
1643
+ const registry = useCapability6(Capabilities.AtomRegistry);
1640
1644
  const stateAtom = useCapability6(ThreadCapabilities.State);
1641
1645
  const viewStoreAtom = useCapability6(ThreadCapabilities.ViewState);
1642
1646
  const state = useAtomValue6(stateAtom);
@@ -1673,7 +1677,7 @@ var ThreadCompanion = ({ subject }) => {
1673
1677
  viewStoreAtom,
1674
1678
  subjectId
1675
1679
  ]);
1676
- const anchorSorts = useCapabilities2(Common.Capability.AnchorSort);
1680
+ const anchorSorts = useCapabilities2(AppCapabilities.AnchorSort);
1677
1681
  const sort = useMemo8(() => anchorSorts.find(({ key }) => key === Obj6.getTypename(subject))?.sort, [
1678
1682
  anchorSorts,
1679
1683
  subject
@@ -1690,7 +1694,7 @@ var ThreadCompanion = ({ subject }) => {
1690
1694
  ...registry.get(stateAtom),
1691
1695
  current: threadId
1692
1696
  });
1693
- void invokePromise(Common.LayoutOperation.ScrollIntoView, {
1697
+ void invokePromise(LayoutOperation.ScrollIntoView, {
1694
1698
  subject: Obj6.getDXN(subject).toString(),
1695
1699
  cursor: anchor.anchor,
1696
1700
  ref: threadId
@@ -1752,7 +1756,7 @@ var ThreadCompanion = ({ subject }) => {
1752
1756
  if (!proposal || !anchor.anchor) {
1753
1757
  return;
1754
1758
  }
1755
- await invokePromise(Common.CollaborationOperation.AcceptProposal, {
1759
+ await invokePromise(CollaborationOperation.AcceptProposal, {
1756
1760
  subject,
1757
1761
  anchor: anchor.anchor,
1758
1762
  proposal
@@ -1810,4 +1814,4 @@ export {
1810
1814
  ThreadCompanion,
1811
1815
  ThreadSettings
1812
1816
  };
1813
- //# sourceMappingURL=chunk-VZICDGBW.mjs.map
1817
+ //# sourceMappingURL=chunk-4EUEMHNI.mjs.map