@dxos/plugin-thread 0.12.0-next-73daef452f1464b62efdbca75fb0067c1066f264 → 0.13.0

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 (167) hide show
  1. package/PLUGIN.mdl +122 -1
  2. package/dist/lib/ChannelBackend.mjs +46 -3
  3. package/dist/lib/ChannelBackend.mjs.map +1 -1
  4. package/dist/lib/ThreadCapabilities.mjs.map +1 -1
  5. package/dist/lib/ThreadOperation.mjs +101 -4
  6. package/dist/lib/ThreadOperation.mjs.map +1 -1
  7. package/dist/lib/ThreadOperationHandlerSet.mjs +19 -0
  8. package/dist/lib/ThreadOperationHandlerSet.mjs.map +1 -0
  9. package/dist/lib/capabilities.browser.mjs +36 -0
  10. package/dist/lib/capabilities.browser.mjs.map +1 -0
  11. package/dist/lib/capabilities.mjs +8 -5
  12. package/dist/lib/capabilities.mjs.map +1 -1
  13. package/dist/lib/capabilities.node.mjs +6 -1
  14. package/dist/lib/capabilities.node.mjs.map +1 -1
  15. package/dist/lib/capabilities.tauri.mjs +36 -0
  16. package/dist/lib/capabilities.tauri.mjs.map +1 -0
  17. package/dist/lib/capabilities.workerd.mjs +6 -1
  18. package/dist/lib/capabilities.workerd.mjs.map +1 -1
  19. package/dist/lib/chunk-ChannelArticle.mjs +16 -19
  20. package/dist/lib/chunk-ChannelArticle.mjs.map +1 -1
  21. package/dist/lib/chunk-ChannelCreatePanel.mjs +5 -4
  22. package/dist/lib/chunk-ChannelCreatePanel.mjs.map +1 -1
  23. package/dist/lib/chunk-PLUGIN.mjs +6 -0
  24. package/dist/lib/chunk-PLUGIN.mjs.map +1 -0
  25. package/dist/lib/chunk-ThreadArticle.mjs +13 -8
  26. package/dist/lib/chunk-ThreadArticle.mjs.map +1 -1
  27. package/dist/lib/chunk-app-graph-builder.mjs +7 -4
  28. package/dist/lib/chunk-app-graph-builder.mjs.map +1 -1
  29. package/dist/lib/chunk-append-channel-message.mjs +3 -14
  30. package/dist/lib/chunk-append-channel-message.mjs.map +1 -1
  31. package/dist/lib/chunk-channel-backend-feed.mjs +8 -18
  32. package/dist/lib/chunk-channel-backend-feed.mjs.map +1 -1
  33. package/dist/lib/chunk-connect-channel.mjs +14 -0
  34. package/dist/lib/chunk-connect-channel.mjs.map +1 -0
  35. package/dist/lib/chunk-create-channel.mjs +1 -1
  36. package/dist/lib/chunk-create-object.mjs +1 -1
  37. package/dist/lib/chunk-disconnect-channel.mjs +14 -0
  38. package/dist/lib/chunk-disconnect-channel.mjs.map +1 -0
  39. package/dist/lib/chunk-get-channel-status.mjs +14 -0
  40. package/dist/lib/chunk-get-channel-status.mjs.map +1 -0
  41. package/dist/lib/chunk-open-direct.mjs +15 -0
  42. package/dist/lib/chunk-open-direct.mjs.map +1 -0
  43. package/dist/lib/chunk-operation-handler.mjs +2 -2
  44. package/dist/lib/chunk-operation-handler.mjs.map +1 -1
  45. package/dist/lib/chunk-react-surface.mjs +2 -2
  46. package/dist/lib/chunk-react-surface.mjs.map +1 -1
  47. package/dist/lib/chunk-send-to-channel.mjs +28 -0
  48. package/dist/lib/chunk-send-to-channel.mjs.map +1 -0
  49. package/dist/lib/components.mjs +9 -7
  50. package/dist/lib/components.mjs.map +1 -1
  51. package/dist/lib/containers.mjs.map +1 -1
  52. package/dist/lib/hooks.mjs +4 -3
  53. package/dist/lib/hooks.mjs.map +1 -1
  54. package/dist/lib/index.mjs +2 -4
  55. package/dist/lib/meta.mjs +1 -0
  56. package/dist/lib/meta.mjs.map +1 -1
  57. package/dist/lib/operations.mjs +2 -9
  58. package/dist/lib/translations.mjs +1 -1
  59. package/dist/lib/translations.mjs.map +1 -1
  60. package/dist/types/src/capabilities/channel-backend-feed.d.ts.map +1 -1
  61. package/dist/types/src/capabilities/gen/browser.d.ts +10 -0
  62. package/dist/types/src/capabilities/gen/browser.d.ts.map +1 -0
  63. package/dist/types/src/capabilities/gen/node.d.ts.map +1 -1
  64. package/dist/types/src/capabilities/gen/tauri.d.ts +10 -0
  65. package/dist/types/src/capabilities/gen/tauri.d.ts.map +1 -0
  66. package/dist/types/src/capabilities/gen/workerd.d.ts.map +1 -1
  67. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  68. package/dist/types/src/components/MessageThread/MessageThread.d.ts +2 -2
  69. package/dist/types/src/components/MessageThread/MessageThread.d.ts.map +1 -1
  70. package/dist/types/src/components/MessageThread/index.d.ts +1 -1
  71. package/dist/types/src/components/MessageThread/index.d.ts.map +1 -1
  72. package/dist/types/src/components/index.d.ts +1 -1
  73. package/dist/types/src/components/index.d.ts.map +1 -1
  74. package/dist/types/src/containers/ChannelArticle/ChannelArticle.d.ts +1 -1
  75. package/dist/types/src/containers/ChannelArticle/ChannelArticle.d.ts.map +1 -1
  76. package/dist/types/src/containers/ChannelArticle/ChannelArticle.stories.d.ts +1 -1
  77. package/dist/types/src/containers/ChannelArticle/ChannelArticle.stories.d.ts.map +1 -1
  78. package/dist/types/src/containers/ChannelArticle/index.d.ts +1 -1
  79. package/dist/types/src/containers/ChannelArticle/index.d.ts.map +1 -1
  80. package/dist/types/src/containers/ChannelCreatePanel/ChannelCreatePanel.d.ts +1 -1
  81. package/dist/types/src/containers/ChannelCreatePanel/ChannelCreatePanel.d.ts.map +1 -1
  82. package/dist/types/src/containers/ChannelCreatePanel/index.d.ts +1 -1
  83. package/dist/types/src/containers/ChannelCreatePanel/index.d.ts.map +1 -1
  84. package/dist/types/src/containers/ThreadArticle/ThreadArticle.d.ts +2 -2
  85. package/dist/types/src/containers/ThreadArticle/ThreadArticle.d.ts.map +1 -1
  86. package/dist/types/src/containers/ThreadArticle/index.d.ts +1 -1
  87. package/dist/types/src/containers/ThreadArticle/index.d.ts.map +1 -1
  88. package/dist/types/src/containers/index.d.ts.map +1 -1
  89. package/dist/types/src/hooks/index.d.ts +2 -2
  90. package/dist/types/src/hooks/index.d.ts.map +1 -1
  91. package/dist/types/src/hooks/useStatus.d.ts.map +1 -1
  92. package/dist/types/src/index.d.ts +2 -4
  93. package/dist/types/src/index.d.ts.map +1 -1
  94. package/dist/types/src/operations/ThreadOperationHandlerSet.d.ts +3 -0
  95. package/dist/types/src/operations/ThreadOperationHandlerSet.d.ts.map +1 -0
  96. package/dist/types/src/operations/append-channel-message.d.ts.map +1 -1
  97. package/dist/types/src/operations/channel-operations.test.d.ts +2 -0
  98. package/dist/types/src/operations/channel-operations.test.d.ts.map +1 -0
  99. package/dist/types/src/operations/connect-channel.d.ts +5 -0
  100. package/dist/types/src/operations/connect-channel.d.ts.map +1 -0
  101. package/dist/types/src/operations/disconnect-channel.d.ts +5 -0
  102. package/dist/types/src/operations/disconnect-channel.d.ts.map +1 -0
  103. package/dist/types/src/operations/get-channel-status.d.ts +5 -0
  104. package/dist/types/src/operations/get-channel-status.d.ts.map +1 -0
  105. package/dist/types/src/operations/index.d.ts +1 -2
  106. package/dist/types/src/operations/index.d.ts.map +1 -1
  107. package/dist/types/src/operations/open-direct.d.ts +5 -0
  108. package/dist/types/src/operations/open-direct.d.ts.map +1 -0
  109. package/dist/types/src/operations/send-to-channel.d.ts +5 -0
  110. package/dist/types/src/operations/send-to-channel.d.ts.map +1 -0
  111. package/dist/types/src/translations.d.ts.map +1 -1
  112. package/dist/types/src/types/ChannelBackend.d.ts +79 -1
  113. package/dist/types/src/types/ChannelBackend.d.ts.map +1 -1
  114. package/dist/types/src/types/ThreadCapabilities.d.ts +30 -4
  115. package/dist/types/src/types/ThreadCapabilities.d.ts.map +1 -1
  116. package/dist/types/src/types/ThreadOperation.d.ts +78 -2
  117. package/dist/types/src/types/ThreadOperation.d.ts.map +1 -1
  118. package/dist/types/src/types/index.d.ts +4 -4
  119. package/dist/types/src/types/index.d.ts.map +1 -1
  120. package/dist/types/tsconfig.tsbuildinfo +1 -1
  121. package/dx.config.ts +3 -0
  122. package/package.json +53 -40
  123. package/src/capabilities/app-graph-builder.ts +3 -2
  124. package/src/capabilities/channel-backend-feed.ts +5 -10
  125. package/src/capabilities/gen/browser.ts +57 -0
  126. package/src/capabilities/gen/node.ts +5 -5
  127. package/src/capabilities/gen/tauri.ts +57 -0
  128. package/src/capabilities/gen/workerd.ts +5 -5
  129. package/src/capabilities/index.ts +8 -8
  130. package/src/capabilities/operation-handler.ts +1 -1
  131. package/src/capabilities/react-surface.ts +2 -2
  132. package/src/components/MessageThread/MessageThread.tsx +11 -14
  133. package/src/components/MessageThread/index.ts +1 -1
  134. package/src/components/index.ts +1 -1
  135. package/src/containers/ChannelArticle/ChannelArticle.stories.tsx +4 -4
  136. package/src/containers/ChannelArticle/ChannelArticle.tsx +17 -20
  137. package/src/containers/ChannelArticle/index.ts +1 -1
  138. package/src/containers/ChannelCreatePanel/ChannelCreatePanel.tsx +10 -5
  139. package/src/containers/ChannelCreatePanel/index.ts +1 -1
  140. package/src/containers/ThreadArticle/ThreadArticle.stories.tsx +7 -7
  141. package/src/containers/ThreadArticle/ThreadArticle.tsx +21 -12
  142. package/src/containers/ThreadArticle/index.ts +1 -1
  143. package/src/containers/index.ts +3 -3
  144. package/src/hooks/index.ts +2 -2
  145. package/src/hooks/useMessages.ts +2 -2
  146. package/src/hooks/useStatus.ts +4 -1
  147. package/src/index.ts +2 -4
  148. package/src/meta.ts +1 -1
  149. package/src/operations/ThreadOperationHandlerSet.ts +20 -0
  150. package/src/operations/append-channel-message.ts +2 -6
  151. package/src/operations/channel-operations.test.ts +185 -0
  152. package/src/operations/connect-channel.ts +23 -0
  153. package/src/operations/disconnect-channel.ts +23 -0
  154. package/src/operations/get-channel-status.ts +23 -0
  155. package/src/operations/index.ts +1 -9
  156. package/src/operations/open-direct.ts +32 -0
  157. package/src/operations/send-to-channel.ts +33 -0
  158. package/src/plugin.test.ts +3 -3
  159. package/src/translations.ts +2 -2
  160. package/src/types/ChannelBackend.test.ts +2 -2
  161. package/src/types/ChannelBackend.ts +66 -2
  162. package/src/types/ThreadCapabilities.ts +41 -4
  163. package/src/types/ThreadOperation.ts +114 -5
  164. package/src/types/index.ts +4 -4
  165. package/dist/lib/chunk-paths.mjs +0 -8
  166. package/dist/lib/chunk-paths.mjs.map +0 -1
  167. package/dist/lib/operations.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"chunk-react-surface.mjs","names":[],"sources":["../../src/capabilities/react-surface.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport * as Capabilities from '@dxos/app-framework/Capabilities';\nimport * as Capability from '@dxos/app-framework/Capability';\nimport { Surface } from '@dxos/app-framework/ui';\nimport { AppSurface } from '@dxos/app-toolkit/ui';\nimport { Channel, Thread } from '@dxos/types';\n\nimport { ChannelArticle, ThreadArticle } from '#containers';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contribute(Capabilities.ReactSurface, [\n Surface.create({\n id: 'channel',\n filter: AppSurface.object(AppSurface.Article, Channel.Channel),\n component: ChannelArticle,\n props: ({ role, data: { subject, attendableId } }) => ({ role, subject, attendableId }),\n }),\n Surface.create({\n id: 'chatCompanion',\n filter: AppSurface.allOf(\n AppSurface.literal(AppSurface.Article, 'chat'),\n AppSurface.companion(AppSurface.Article, Channel.Channel),\n ),\n component: ChannelArticle,\n props: ({ data: { companionTo } }) => ({ subject: companionTo, chatOnly: true }),\n }),\n // TODO(burdon): Disambiguate with Channel.\n Surface.create({\n id: 'thread',\n filter: AppSurface.object(AppSurface.Article, Thread.Thread),\n component: ThreadArticle,\n props: ({ data: { subject } }) => ({ thread: subject }),\n }),\n ]),\n ),\n);\n"],"mappings":";;;;;;;;AAcA,IAAA,wBAAe,WAAW,iBACxB,OAAO,QACL,WAAW,WAAW,aAAa,cAAc;CAC/C,QAAQ,OAAO;EACb,IAAI;EACJ,QAAQ,WAAW,OAAO,WAAW,SAAS,QAAQ,OAAO;EAC7D,WAAW;EACX,QAAQ,EAAE,MAAM,MAAM,EAAE,SAAS,sBAAsB;GAAE;GAAM;GAAS;EAAa;CACvF,CAAC;CACD,QAAQ,OAAO;EACb,IAAI;EACJ,QAAQ,WAAW,MACjB,WAAW,QAAQ,WAAW,SAAS,MAAM,GAC7C,WAAW,UAAU,WAAW,SAAS,QAAQ,OAAO,CAC1D;EACA,WAAW;EACX,QAAQ,EAAE,MAAM,EAAE,qBAAqB;GAAE,SAAS;GAAa,UAAU;EAAK;CAChF,CAAC;CAED,QAAQ,OAAO;EACb,IAAI;EACJ,QAAQ,WAAW,OAAO,WAAW,SAAS,OAAO,MAAM;EAC3D,WAAW;EACX,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,QAAQ;CACvD,CAAC;AACH,CAAC,CACH,CACF"}
1
+ {"version":3,"file":"chunk-react-surface.mjs","names":[],"sources":["../../src/capabilities/react-surface.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport * as Capabilities from '@dxos/app-framework/Capabilities';\nimport * as Capability from '@dxos/app-framework/Capability';\nimport * as Surface from '@dxos/app-framework/Surface';\nimport * as AppSurface from '@dxos/app-toolkit/AppSurface';\nimport { Channel, Thread } from '@dxos/types';\n\nimport { ChannelArticle, ThreadArticle } from '#containers';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contribute(Capabilities.ReactSurface, [\n Surface.create({\n id: 'channel',\n filter: AppSurface.object(AppSurface.Article, Channel.Channel),\n component: ChannelArticle,\n props: ({ role, data: { subject, attendableId } }) => ({ role, subject, attendableId }),\n }),\n Surface.create({\n id: 'chatCompanion',\n filter: AppSurface.allOf(\n AppSurface.literal(AppSurface.Article, 'chat'),\n AppSurface.companion(AppSurface.Article, Channel.Channel),\n ),\n component: ChannelArticle,\n props: ({ data: { companionTo } }) => ({ subject: companionTo, chatOnly: true }),\n }),\n // TODO(burdon): Disambiguate with Channel.\n Surface.create({\n id: 'thread',\n filter: AppSurface.object(AppSurface.Article, Thread.Thread),\n component: ThreadArticle,\n props: ({ data: { subject } }) => ({ thread: subject }),\n }),\n ]),\n ),\n);\n"],"mappings":";;;;;;;;AAcA,IAAA,wBAAe,WAAW,iBACxB,OAAO,QACL,WAAW,WAAW,aAAa,cAAc;CAC/C,QAAQ,OAAO;EACb,IAAI;EACJ,QAAQ,WAAW,OAAO,WAAW,SAAS,QAAQ,OAAO;EAC7D,WAAW;EACX,QAAQ,EAAE,MAAM,MAAM,EAAE,SAAS,sBAAsB;GAAE;GAAM;GAAS;EAAa;CACvF,CAAC;CACD,QAAQ,OAAO;EACb,IAAI;EACJ,QAAQ,WAAW,MACjB,WAAW,QAAQ,WAAW,SAAS,MAAM,GAC7C,WAAW,UAAU,WAAW,SAAS,QAAQ,OAAO,CAC1D;EACA,WAAW;EACX,QAAQ,EAAE,MAAM,EAAE,qBAAqB;GAAE,SAAS;GAAa,UAAU;EAAK;CAChF,CAAC;CAED,QAAQ,OAAO;EACb,IAAI;EACJ,QAAQ,WAAW,OAAO,WAAW,SAAS,OAAO,MAAM;EAC3D,WAAW;EACX,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,QAAQ;CACvD,CAAC;AACH,CAAC,CACH,CACF"}
@@ -0,0 +1,28 @@
1
+ import { ChannelBackend, ThreadOperation } from "#types";
2
+ import * as Operation from "@dxos/compute/Operation";
3
+ import { Database } from "@dxos/echo";
4
+ import { Message } from "@dxos/types";
5
+ import * as Effect from "effect/Effect";
6
+ //#region src/operations/send-to-channel.ts
7
+ var handler = ThreadOperation.SendToChannel.pipe(Operation.withHandler(Effect.fnUntraced(function* ({ channel: channelRef, thread, text }) {
8
+ const channel = yield* Database.load(channelRef);
9
+ const provider = yield* ChannelBackend.getProvider(channel);
10
+ const message = Message.make({
11
+ sender: { role: "assistant" },
12
+ blocks: [{
13
+ _tag: "text",
14
+ text
15
+ }]
16
+ });
17
+ return yield* (thread === void 0 ? provider.send(channel, message) : (yield* ChannelBackend.requireMember(provider, "threads")).send(channel, thread, message)).pipe(Effect.map((result) => ({
18
+ delivered: true,
19
+ ...ChannelBackend.toReceipt(result)
20
+ })), Effect.catch((error) => Effect.succeed({
21
+ delivered: false,
22
+ reason: error.message
23
+ })));
24
+ })));
25
+ //#endregion
26
+ export { handler as default };
27
+
28
+ //# sourceMappingURL=chunk-send-to-channel.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chunk-send-to-channel.mjs","names":[],"sources":["../../src/operations/send-to-channel.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport * as Operation from '@dxos/compute/Operation';\nimport { Database } from '@dxos/echo';\nimport { Message } from '@dxos/types';\n\nimport { ChannelBackend, ThreadOperation } from '#types';\n\nconst handler: Operation.WithHandler<typeof ThreadOperation.SendToChannel> = ThreadOperation.SendToChannel.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* ({ channel: channelRef, thread, text }) {\n const channel = yield* Database.load(channelRef);\n const provider = yield* ChannelBackend.getProvider(channel);\n const message = Message.make({ sender: { role: 'assistant' }, blocks: [{ _tag: 'text', text }] });\n const send =\n thread === undefined\n ? provider.send(channel, message)\n : (yield* ChannelBackend.requireMember(provider, 'threads')).send(channel, thread, message);\n\n // A backend refusal (closed DMs, missing permission) is an outcome the caller relays, not a failure.\n return yield* send.pipe(\n Effect.map((result) => ({ delivered: true, ...ChannelBackend.toReceipt(result) })),\n Effect.catch((error) => Effect.succeed({ delivered: false, reason: error.message })),\n );\n }),\n ),\n);\n\nexport default handler;\n"],"mappings":";;;;;;AAYA,IAAM,UAAuE,gBAAgB,cAAc,KACzG,UAAU,YACR,OAAO,WAAW,WAAW,EAAE,SAAS,YAAY,QAAQ,QAAQ;CAClE,MAAM,UAAU,OAAO,SAAS,KAAK,UAAU;CAC/C,MAAM,WAAW,OAAO,eAAe,YAAY,OAAO;CAC1D,MAAM,UAAU,QAAQ,KAAK;EAAE,QAAQ,EAAE,MAAM,YAAY;EAAG,QAAQ,CAAC;GAAE,MAAM;GAAQ;EAAK,CAAC;CAAE,CAAC;CAOhG,OAAO,QALL,WAAW,KAAA,IACP,SAAS,KAAK,SAAS,OAAO,KAC7B,OAAO,eAAe,cAAc,UAAU,SAAS,EAAA,CAAG,KAAK,SAAS,QAAQ,OAAO,EAAA,CAG3E,KACjB,OAAO,KAAK,YAAY;EAAE,WAAW;EAAM,GAAG,eAAe,UAAU,MAAM;CAAE,EAAE,GACjF,OAAO,OAAO,UAAU,OAAO,QAAQ;EAAE,WAAW;EAAO,QAAQ,MAAM;CAAQ,CAAC,CAAC,CACrF;AACF,CAAC,CACH,CACF"}
@@ -1,9 +1,11 @@
1
1
  import { meta } from "#meta";
2
2
  import { useCallback, useMemo } from "react";
3
- import { Surface } from "@dxos/app-framework/ui";
4
- import { AppSurface } from "@dxos/app-toolkit/ui";
5
- import { Card, composable, useTranslation } from "@dxos/react-ui";
3
+ import * as Surface from "@dxos/app-framework/Surface";
4
+ import * as AppSurface from "@dxos/app-toolkit/AppSurface";
6
5
  import { Thread } from "@dxos/react-ui-thread";
6
+ import * as Card from "@dxos/react-ui/Card";
7
+ import * as Hooks from "@dxos/react-ui/Hooks";
8
+ import * as Util from "@dxos/react-ui/Util";
7
9
  import { hoverableControls, hoverableFocusedWithinControls, mx } from "@dxos/ui-theme";
8
10
  import { generateName } from "@dxos/display-name";
9
11
  import { hexToFallback, toFallback } from "@dxos/util";
@@ -46,8 +48,8 @@ var getMessageMetadata = (id, identity, fallbackSender, created) => {
46
48
  * data or invoke operations — the caller passes messages and an `onSend`
47
49
  * callback. Used by `ChannelArticle` and `ThreadArticle`.
48
50
  */
49
- var MessageThread = composable(({ id, identity, members, messages, activity, onSend, autoFocus, current, readOnly, classNames }, forwardedRef) => {
50
- const { t } = useTranslation(meta.profile.key);
51
+ var MessageThread = Util.composable(({ id, identity, members, messages, activity, onSend, autoFocus, current, readOnly, classNames }, forwardedRef) => {
52
+ const { t } = Hooks.useTranslation(meta.profile.key);
51
53
  const components = useMemo(() => ({ Object: ObjectTile }), []);
52
54
  const textboxMetadata = useMemo(() => getMessageMetadata(id, identity), [id, identity]);
53
55
  const getMetadata = useCallback((message) => {
@@ -62,7 +64,7 @@ var MessageThread = composable(({ id, identity, members, messages, activity, onS
62
64
  children: /* @__PURE__ */ jsxs(Thread.Content, {
63
65
  id,
64
66
  current,
65
- classNames: ["dx-container h-full border", classNames],
67
+ classNames: ["dx-expand border", classNames],
66
68
  ref: forwardedRef,
67
69
  children: [/* @__PURE__ */ jsx(Thread.Messages, {
68
70
  id,
@@ -86,7 +88,7 @@ var MessageThread = composable(({ id, identity, members, messages, activity, onS
86
88
  */
87
89
  var ObjectTile = ({ subject }) => {
88
90
  const Fallback = useCallback(() => /* @__PURE__ */ jsx("span", {
89
- className: "p-1 text-sm text-description",
91
+ className: "p-1 text-sm text-fg-muted",
90
92
  children: subject.id
91
93
  }), [subject]);
92
94
  return /* @__PURE__ */ jsx(Card.Root, {
@@ -1 +1 @@
1
- {"version":3,"file":"components.mjs","names":[],"sources":["../../src/util.ts","../../src/components/MessageThread/MessageThread.tsx"],"sourcesContent":["//\n// Copyright 2024 DXOS.org\n//\n\nimport { generateName } from '@dxos/display-name';\nimport { type MessageMetadata } from '@dxos/react-ui-thread';\nimport { hexToFallback, toFallback } from '@dxos/util';\n\n/**\n * Minimal author shape for message metadata. Satisfied by both the `@dxos/halo`\n * `Identity.Info` and `Space.Member` (hex `identityKey`, flat `displayName`/`data`).\n */\nexport type MessageAuthor = {\n did?: string;\n identityKey?: string;\n displayName?: string;\n // Arbitrary profile metadata (matches the `@dxos/halo` `Schema.Any`-valued `data`).\n data?: { readonly [key: string]: any };\n};\n\n/**\n * Stable hash for an arbitrary string — used as the avatar-fallback seed for\n * external senders who have no DXOS identity (e.g. Slack/Discord-synced\n * messages). djb2-ish, only stability matters.\n *\n * Coerced to unsigned 32-bit via `>>> 0` because `toFallback` does a plain\n * modulo against `idEmoji.length * idHue.length` and JavaScript's `%`\n * preserves the sign of the dividend — a negative hash would index\n * `idEmoji[-x]` and `idHue[-x]` to `undefined`, causing the avatar to fall\n * through to `Avatar.Content`'s default red/ghost.\n */\nconst hashString = (s: string): number => {\n let h = 0;\n for (let i = 0; i < s.length; i++) {\n h = (h * 31 + s.charCodeAt(i)) | 0;\n }\n return h >>> 0;\n};\n\nexport const getMessageMetadata = (\n id: string,\n identity?: MessageAuthor,\n /**\n * Externally-sourced sender info (Slack/Discord/etc). Used only when no\n * matching DXOS `identity` is available — provides `name`/`email` for the\n * author label and a stable seed for the avatar fallback.\n */\n fallbackSender?: { name?: string; email?: string },\n /** ISO date string when the message was sent; omitted for the composer's own metadata. */\n created?: string,\n): MessageMetadata => {\n const fallback = identity?.identityKey\n ? hexToFallback(identity.identityKey)\n : toFallback(hashString(fallbackSender?.name ?? fallbackSender?.email ?? '0'));\n return {\n id,\n timestamp: created,\n authorId: identity?.did,\n authorName:\n identity?.displayName ??\n (identity?.identityKey ? generateName(identity.identityKey) : undefined) ??\n fallbackSender?.name ??\n fallbackSender?.email,\n authorAvatarProps: {\n hue: identity?.data?.hue ?? fallback.hue,\n emoji: identity?.data?.emoji ?? fallback.emoji,\n },\n };\n};\n","//\n// Copyright 2026 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { AppSurface } from '@dxos/app-toolkit/ui';\nimport { type Identity, type Space } from '@dxos/halo';\nimport { Card, type ThemedClassName, composable, useTranslation } from '@dxos/react-ui';\nimport { type ObjectTileComponent, Thread } from '@dxos/react-ui-thread';\nimport { type Message } from '@dxos/types';\nimport { hoverableControls, hoverableFocusedWithinControls, mx } from '@dxos/ui-theme';\n\nimport { meta } from '#meta';\n\nimport { getMessageMetadata } from '../../util';\n\nexport type MessageThreadProps = ThemedClassName<{\n /** Stable id used for the underlying thread root and message metadata. */\n id: string;\n /** Identity used to attribute outgoing messages in the textbox metadata. */\n identity?: Identity.Info;\n /** Space members for rendering sender names/avatars on incoming messages. */\n members: readonly Space.Member[];\n /** Messages to render in order. */\n messages: readonly Message.Message[];\n /** Activity indicator (e.g. processing) shown beneath the textbox. */\n activity?: boolean;\n /** Autofocus textbox */\n autoFocus?: boolean;\n /** Marks the thread as the current/attended one. */\n current?: boolean | string;\n /**\n * When true, hide the composer textbox and activity indicator. Used for\n * channels whose source-of-truth lives elsewhere (e.g. externally-synced\n * Slack/Discord channels keyed by a foreign id) — sending isn't meaningful\n * because there is no local-write path back to the source.\n */\n readOnly?: boolean;\n /**\n * Called with the user's textbox content when they press send.\n * Returning `true` signals the message was accepted; the textbox is then cleared.\n */\n onSend: (text: string) => boolean;\n}>;\n\n/**\n * Pure message-thread UI: message list + composer textbox + activity\n * indicator, built on the `@dxos/react-ui-thread` primitives. Does not load\n * data or invoke operations — the caller passes messages and an `onSend`\n * callback. Used by `ChannelArticle` and `ThreadArticle`.\n */\nexport const MessageThread = composable<HTMLDivElement, MessageThreadProps>(\n ({ id, identity, members, messages, activity, onSend, autoFocus, current, readOnly, classNames }, forwardedRef) => {\n const { t } = useTranslation(meta.profile.key);\n\n const components = useMemo(() => ({ Object: ObjectTile }), []);\n\n const textboxMetadata = useMemo(() => getMessageMetadata(id, identity), [id, identity]);\n\n const getMetadata = useCallback(\n (message: Message.Message) => {\n // TODO(burdon): Factor out.\n const sender = members.find(\n (member) =>\n (message.sender.identityDid && member.did === message.sender.identityDid) ||\n (message.sender.identityKey && member.identityKey === message.sender.identityKey),\n );\n\n // Pass `message.sender` as the fallback so externally-synced messages\n // (Slack, etc.) display the source-side sender name instead of \"Anonymous\"\n // when no DXOS identity matches.\n return getMessageMetadata(message.id, sender, message.sender, message.created);\n },\n [members],\n );\n\n return (\n <Thread.Root getMetadata={getMetadata} components={components} identityDid={identity?.did} editable={false}>\n <Thread.Content\n id={id}\n current={current}\n classNames={['dx-container h-full border', classNames]}\n ref={forwardedRef}\n >\n <Thread.Messages id={id} messages={messages} />\n {!readOnly && (\n <>\n <Thread.Textbox\n {...textboxMetadata}\n autoFocus={autoFocus}\n placeholder={t('message.placeholder')}\n onSend={onSend}\n />\n <Thread.Status activity={activity}>{t('activity.message')}</Thread.Status>\n </>\n )}\n </Thread.Content>\n </Thread.Root>\n );\n },\n);\n\n/**\n * Object/reference message-block tile, injected into `Thread.Root` so that\n * `@dxos/react-ui-thread` stays free of `@dxos/app-framework`. Renders the\n * referenced subject via an app-framework `Surface` (the card role).\n */\nconst ObjectTile: ObjectTileComponent = ({ subject }) => {\n const Fallback = useCallback(() => <span className='p-1 text-sm text-description'>{subject.id}</span>, [subject]);\n return (\n <Card.Root classNames={mx('grid col-span-3 py-1 pr-4', hoverableControls, hoverableFocusedWithinControls)}>\n <Surface.Surface\n type={AppSurface.CardContent}\n limit={1}\n data={{ subject } satisfies AppSurface.ObjectCardData}\n fallback={Fallback}\n />\n </Card.Root>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AA+BA,IAAM,cAAc,MAAsB;CACxC,IAAI,IAAI;CACR,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,KAC5B,IAAK,IAAI,KAAK,EAAE,WAAW,CAAC,IAAK;CAEnC,OAAO,MAAM;AACf;AAEA,IAAa,sBACX,IACA,UAMA,gBAEA,YACoB;CACpB,MAAM,WAAW,UAAU,cACvB,cAAc,SAAS,WAAW,IAClC,WAAW,WAAW,gBAAgB,QAAQ,gBAAgB,SAAS,GAAG,CAAC;CAC/E,OAAO;EACL;EACA,WAAW;EACX,UAAU,UAAU;EACpB,YACE,UAAU,gBACT,UAAU,cAAc,aAAa,SAAS,WAAW,IAAI,KAAA,MAC9D,gBAAgB,QAChB,gBAAgB;EAClB,mBAAmB;GACjB,KAAK,UAAU,MAAM,OAAO,SAAS;GACrC,OAAO,UAAU,MAAM,SAAS,SAAS;EAC3C;CACF;AACF;;;;;;;;;ACfA,IAAa,gBAAgB,YAC1B,EAAE,IAAI,UAAU,SAAS,UAAU,UAAU,QAAQ,WAAW,SAAS,UAAU,cAAc,iBAAiB;CACjH,MAAM,EAAE,MAAM,eAAe,KAAK,QAAQ,GAAG;CAE7C,MAAM,aAAa,eAAe,EAAE,QAAQ,WAAW,IAAI,CAAC,CAAC;CAE7D,MAAM,kBAAkB,cAAc,mBAAmB,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,CAAC;CAEtF,MAAM,cAAc,aACjB,YAA6B;EAE5B,MAAM,SAAS,QAAQ,MACpB,WACE,QAAQ,OAAO,eAAe,OAAO,QAAQ,QAAQ,OAAO,eAC5D,QAAQ,OAAO,eAAe,OAAO,gBAAgB,QAAQ,OAAO,WACzE;EAKA,OAAO,mBAAmB,QAAQ,IAAI,QAAQ,QAAQ,QAAQ,QAAQ,OAAO;CAC/E,GACA,CAAC,OAAO,CACV;CAEA,OACE,oBAAC,OAAO,MAAR;EAA0B;EAAyB;EAAY,aAAa,UAAU;EAAK,UAAU;EACnG,UAAA,qBAAC,OAAO,SAAR;GACM;GACK;GACT,YAAY,CAAC,8BAA8B,UAAU;GACrD,KAAK;GAJP,UAAA,CAME,oBAAC,OAAO,UAAR;IAAqB;IAAc;GAAW,CAAA,GAC7C,CAAC,YACA,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,OAAO,SAAR;IACE,GAAI;IACO;IACX,aAAa,EAAE,qBAAqB;IAC5B;GACT,CAAA,GACD,oBAAC,OAAO,QAAR;IAAyB;IAAW,UAAA,EAAE,kBAAkB;GAAiB,CAAA,CACzE,EAAA,CAAA,CAEU;;CACL,CAAA;AAEjB,CACF;;;;;;AAOA,IAAM,cAAmC,EAAE,cAAc;CACvD,MAAM,WAAW,kBAAkB,oBAAC,QAAD;EAAM,WAAU;EAAgC,UAAA,QAAQ;CAAS,CAAA,GAAG,CAAC,OAAO,CAAC;CAChH,OACE,oBAAC,KAAK,MAAN;EAAW,YAAY,GAAG,6BAA6B,mBAAmB,8BAA8B;EACtG,UAAA,oBAAC,QAAQ,SAAT;GACE,MAAM,WAAW;GACjB,OAAO;GACP,MAAM,EAAE,QAAQ;GAChB,UAAU;EACX,CAAA;CACQ,CAAA;AAEf"}
1
+ {"version":3,"file":"components.mjs","names":[],"sources":["../../src/util.ts","../../src/components/MessageThread/MessageThread.tsx"],"sourcesContent":["//\n// Copyright 2024 DXOS.org\n//\n\nimport { generateName } from '@dxos/display-name';\nimport { type MessageMetadata } from '@dxos/react-ui-thread';\nimport { hexToFallback, toFallback } from '@dxos/util';\n\n/**\n * Minimal author shape for message metadata. Satisfied by both the `@dxos/halo`\n * `Identity.Info` and `Space.Member` (hex `identityKey`, flat `displayName`/`data`).\n */\nexport type MessageAuthor = {\n did?: string;\n identityKey?: string;\n displayName?: string;\n // Arbitrary profile metadata (matches the `@dxos/halo` `Schema.Any`-valued `data`).\n data?: { readonly [key: string]: any };\n};\n\n/**\n * Stable hash for an arbitrary string — used as the avatar-fallback seed for\n * external senders who have no DXOS identity (e.g. Slack/Discord-synced\n * messages). djb2-ish, only stability matters.\n *\n * Coerced to unsigned 32-bit via `>>> 0` because `toFallback` does a plain\n * modulo against `idEmoji.length * idHue.length` and JavaScript's `%`\n * preserves the sign of the dividend — a negative hash would index\n * `idEmoji[-x]` and `idHue[-x]` to `undefined`, causing the avatar to fall\n * through to `Avatar.Content`'s default red/ghost.\n */\nconst hashString = (s: string): number => {\n let h = 0;\n for (let i = 0; i < s.length; i++) {\n h = (h * 31 + s.charCodeAt(i)) | 0;\n }\n return h >>> 0;\n};\n\nexport const getMessageMetadata = (\n id: string,\n identity?: MessageAuthor,\n /**\n * Externally-sourced sender info (Slack/Discord/etc). Used only when no\n * matching DXOS `identity` is available — provides `name`/`email` for the\n * author label and a stable seed for the avatar fallback.\n */\n fallbackSender?: { name?: string; email?: string },\n /** ISO date string when the message was sent; omitted for the composer's own metadata. */\n created?: string,\n): MessageMetadata => {\n const fallback = identity?.identityKey\n ? hexToFallback(identity.identityKey)\n : toFallback(hashString(fallbackSender?.name ?? fallbackSender?.email ?? '0'));\n return {\n id,\n timestamp: created,\n authorId: identity?.did,\n authorName:\n identity?.displayName ??\n (identity?.identityKey ? generateName(identity.identityKey) : undefined) ??\n fallbackSender?.name ??\n fallbackSender?.email,\n authorAvatarProps: {\n hue: identity?.data?.hue ?? fallback.hue,\n emoji: identity?.data?.emoji ?? fallback.emoji,\n },\n };\n};\n","//\n// Copyright 2026 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport * as Surface from '@dxos/app-framework/Surface';\nimport * as AppSurface from '@dxos/app-toolkit/AppSurface';\nimport { type Identity, type Space } from '@dxos/halo';\nimport { type ObjectTileComponent, Thread } from '@dxos/react-ui-thread';\nimport * as Card from '@dxos/react-ui/Card';\nimport * as Hooks from '@dxos/react-ui/Hooks';\nimport * as Util from '@dxos/react-ui/Util';\nimport { type Message } from '@dxos/types';\nimport { hoverableControls, hoverableFocusedWithinControls, mx } from '@dxos/ui-theme';\n\nimport { meta } from '#meta';\n\nimport { getMessageMetadata } from '../../util.ts';\n\nexport type MessageThreadProps = Util.ThemedClassName<{\n /** Stable id used for the underlying thread root and message metadata. */\n id: string;\n /** Identity used to attribute outgoing messages in the textbox metadata. */\n identity?: Identity.Info;\n /** Space members for rendering sender names/avatars on incoming messages. */\n members: readonly Space.Member[];\n /** Messages to render in order. */\n messages: readonly Message.Message[];\n /** Activity indicator (e.g. processing) shown beneath the textbox. */\n activity?: boolean;\n /** Autofocus textbox */\n autoFocus?: boolean;\n /** Marks the thread as the current/attended one. */\n current?: boolean | string;\n /**\n * When true, hide the composer textbox and activity indicator. Used for\n * channels whose source-of-truth lives elsewhere (e.g. externally-synced\n * Slack/Discord channels keyed by a foreign id) — sending isn't meaningful\n * because there is no local-write path back to the source.\n */\n readOnly?: boolean;\n /**\n * Called with the user's textbox content when they press send.\n * Returning `true` signals the message was accepted; the textbox is then cleared.\n */\n onSend: (text: string) => boolean;\n}>;\n\n/**\n * Pure message-thread UI: message list + composer textbox + activity\n * indicator, built on the `@dxos/react-ui-thread` primitives. Does not load\n * data or invoke operations — the caller passes messages and an `onSend`\n * callback. Used by `ChannelArticle` and `ThreadArticle`.\n */\nexport const MessageThread = Util.composable<HTMLDivElement, MessageThreadProps>(\n ({ id, identity, members, messages, activity, onSend, autoFocus, current, readOnly, classNames }, forwardedRef) => {\n const { t } = Hooks.useTranslation(meta.profile.key);\n\n const components = useMemo(() => ({ Object: ObjectTile }), []);\n\n const textboxMetadata = useMemo(() => getMessageMetadata(id, identity), [id, identity]);\n\n const getMetadata = useCallback(\n (message: Message.Message) => {\n // TODO(burdon): Factor out.\n const sender = members.find(\n (member) =>\n (message.sender.identityDid && member.did === message.sender.identityDid) ||\n (message.sender.identityKey && member.identityKey === message.sender.identityKey),\n );\n\n // Pass `message.sender` as the fallback so externally-synced messages\n // (Slack, etc.) display the source-side sender name instead of \"Anonymous\"\n // when no DXOS identity matches.\n return getMessageMetadata(message.id, sender, message.sender, message.created);\n },\n [members],\n );\n\n return (\n <Thread.Root getMetadata={getMetadata} components={components} identityDid={identity?.did} editable={false}>\n <Thread.Content id={id} current={current} classNames={['dx-expand border', classNames]} ref={forwardedRef}>\n <Thread.Messages id={id} messages={messages} />\n {!readOnly && (\n <>\n <Thread.Textbox\n {...textboxMetadata}\n autoFocus={autoFocus}\n placeholder={t('message.placeholder')}\n onSend={onSend}\n />\n <Thread.Status activity={activity}>{t('activity.message')}</Thread.Status>\n </>\n )}\n </Thread.Content>\n </Thread.Root>\n );\n },\n);\n\n/**\n * Object/reference message-block tile, injected into `Thread.Root` so that\n * `@dxos/react-ui-thread` stays free of `@dxos/app-framework`. Renders the\n * referenced subject via an app-framework `Surface` (the card role).\n */\nconst ObjectTile: ObjectTileComponent = ({ subject }) => {\n const Fallback = useCallback(() => <span className='p-1 text-sm text-fg-muted'>{subject.id}</span>, [subject]);\n return (\n <Card.Root classNames={mx('grid col-span-3 py-1 pr-4', hoverableControls, hoverableFocusedWithinControls)}>\n <Surface.Surface\n type={AppSurface.CardContent}\n limit={1}\n data={{ subject } satisfies AppSurface.ObjectCardData}\n fallback={Fallback}\n />\n </Card.Root>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA+BA,IAAM,cAAc,MAAsB;CACxC,IAAI,IAAI;CACR,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,KAC5B,IAAK,IAAI,KAAK,EAAE,WAAW,CAAC,IAAK;CAEnC,OAAO,MAAM;AACf;AAEA,IAAa,sBACX,IACA,UAMA,gBAEA,YACoB;CACpB,MAAM,WAAW,UAAU,cACvB,cAAc,SAAS,WAAW,IAClC,WAAW,WAAW,gBAAgB,QAAQ,gBAAgB,SAAS,GAAG,CAAC;CAC/E,OAAO;EACL;EACA,WAAW;EACX,UAAU,UAAU;EACpB,YACE,UAAU,gBACT,UAAU,cAAc,aAAa,SAAS,WAAW,IAAI,KAAA,MAC9D,gBAAgB,QAChB,gBAAgB;EAClB,mBAAmB;GACjB,KAAK,UAAU,MAAM,OAAO,SAAS;GACrC,OAAO,UAAU,MAAM,SAAS,SAAS;EAC3C;CACF;AACF;;;;;;;;;ACbA,IAAa,gBAAgB,KAAK,YAC/B,EAAE,IAAI,UAAU,SAAS,UAAU,UAAU,QAAQ,WAAW,SAAS,UAAU,cAAc,iBAAiB;CACjH,MAAM,EAAE,MAAM,MAAM,eAAe,KAAK,QAAQ,GAAG;CAEnD,MAAM,aAAa,eAAe,EAAE,QAAQ,WAAW,IAAI,CAAC,CAAC;CAE7D,MAAM,kBAAkB,cAAc,mBAAmB,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,CAAC;CAEtF,MAAM,cAAc,aACjB,YAA6B;EAE5B,MAAM,SAAS,QAAQ,MACpB,WACE,QAAQ,OAAO,eAAe,OAAO,QAAQ,QAAQ,OAAO,eAC5D,QAAQ,OAAO,eAAe,OAAO,gBAAgB,QAAQ,OAAO,WACzE;EAKA,OAAO,mBAAmB,QAAQ,IAAI,QAAQ,QAAQ,QAAQ,QAAQ,OAAO;CAC/E,GACA,CAAC,OAAO,CACV;CAEA,OACE,oBAAC,OAAO,MAAR;EAA0B;EAAyB;EAAY,aAAa,UAAU;EAAK,UAAU;EACnG,UAAA,qBAAC,OAAO,SAAR;GAAoB;GAAa;GAAS,YAAY,CAAC,oBAAoB,UAAU;GAAG,KAAK;GAA7F,UAAA,CACE,oBAAC,OAAO,UAAR;IAAqB;IAAc;GAAW,CAAA,GAC7C,CAAC,YACA,qBAAA,UAAA,EAAA,UAAA,CACE,oBAAC,OAAO,SAAR;IACE,GAAI;IACO;IACX,aAAa,EAAE,qBAAqB;IAC5B;GACT,CAAA,GACD,oBAAC,OAAO,QAAR;IAAyB;IAAW,UAAA,EAAE,kBAAkB;GAAiB,CAAA,CACzE,EAAA,CAAA,CAEU;;CACL,CAAA;AAEjB,CACF;;;;;;AAOA,IAAM,cAAmC,EAAE,cAAc;CACvD,MAAM,WAAW,kBAAkB,oBAAC,QAAD;EAAM,WAAU;EAA6B,UAAA,QAAQ;CAAS,CAAA,GAAG,CAAC,OAAO,CAAC;CAC7G,OACE,oBAAC,KAAK,MAAN;EAAW,YAAY,GAAG,6BAA6B,mBAAmB,8BAA8B;EACtG,UAAA,oBAAC,QAAQ,SAAT;GACE,MAAM,WAAW;GACjB,OAAO;GACP,MAAM,EAAE,QAAQ;GAChB,UAAU;EACX,CAAA;CACQ,CAAA;AAEf"}
@@ -1 +1 @@
1
- {"version":3,"file":"containers.mjs","names":[],"sources":["../../src/containers/index.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ComponentType, lazy } from 'react';\n\nexport const ChannelCreatePanel: ComponentType<any> = lazy(() => import('./ChannelCreatePanel'));\nexport const ChannelArticle: ComponentType<any> = lazy(() => import('./ChannelArticle'));\nexport const ThreadArticle: ComponentType<any> = lazy(() => import('./ThreadArticle'));\n"],"mappings":";;AAMA,IAAa,qBAAyC,WAAW,OAAO,iCAAuB;AAC/F,IAAa,iBAAqC,WAAW,OAAO,6BAAmB;AACvF,IAAa,gBAAoC,WAAW,OAAO,4BAAkB"}
1
+ {"version":3,"file":"containers.mjs","names":[],"sources":["../../src/containers/index.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ComponentType, lazy } from 'react';\n\nexport const ChannelCreatePanel: ComponentType<any> = lazy(() => import('./ChannelCreatePanel/index.ts'));\nexport const ChannelArticle: ComponentType<any> = lazy(() => import('./ChannelArticle/index.ts'));\nexport const ThreadArticle: ComponentType<any> = lazy(() => import('./ThreadArticle/index.ts'));\n"],"mappings":";;AAMA,IAAa,qBAAyC,WAAW,OAAO,iCAAgC;AACxG,IAAa,iBAAqC,WAAW,OAAO,6BAA4B;AAChG,IAAa,gBAAoC,WAAW,OAAO,4BAA2B"}
@@ -1,11 +1,12 @@
1
1
  import { ChannelBackend, ThreadCapabilities } from "#types";
2
2
  import { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
3
- import { useCapabilities } from "@dxos/app-framework/ui";
3
+ import * as Hooks from "@dxos/app-framework/Hooks";
4
+ import { unpackJson } from "@dxos/protocols/buf";
4
5
  //#region src/hooks/useMessages.ts
5
6
  var EMPTY = [];
6
7
  /** Reactive message list for a channel, resolved through its backend provider. */
7
8
  var useMessages = (channel) => {
8
- const providers = useCapabilities(ThreadCapabilities.ChannelBackend);
9
+ const providers = Hooks.useCapabilities(ThreadCapabilities.ChannelBackend);
9
10
  const provider = useMemo(() => channel ? ChannelBackend.resolveProvider(providers, channel.backend.kind) : void 0, [providers, channel]);
10
11
  const ref = useRef(EMPTY);
11
12
  const subscribe = useCallback((onChange) => {
@@ -24,7 +25,7 @@ var useStatus = (space, channel) => {
24
25
  useEffect(() => {
25
26
  if (!space || !channel) return;
26
27
  const unsubscribe = space.listen(`status/${channel}`, (status) => {
27
- const { event } = status.payload ?? {};
28
+ const { event } = unpackJson(status.payload) ?? {};
28
29
  setProcessing(event === "processing");
29
30
  });
30
31
  const t = setInterval(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.mjs","names":[],"sources":["../../src/hooks/useMessages.ts","../../src/hooks/useStatus.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport { useCallback, useMemo, useRef, useSyncExternalStore } from 'react';\n\nimport { useCapabilities } from '@dxos/app-framework/ui';\nimport { type Channel, type Message } from '@dxos/types';\n\nimport { ChannelBackend, ThreadCapabilities } from '#types';\n\nconst EMPTY: readonly Message.Message[] = [];\n\n/** Reactive message list for a channel, resolved through its backend provider. */\nexport const useMessages = (channel: Channel.Channel | undefined): readonly Message.Message[] => {\n const providers = useCapabilities(ThreadCapabilities.ChannelBackend);\n const provider = useMemo(\n () => (channel ? ChannelBackend.resolveProvider(providers, channel.backend.kind) : undefined),\n [providers, channel],\n );\n\n const ref = useRef<readonly Message.Message[]>(EMPTY);\n const subscribe = useCallback(\n (onChange: () => void) => {\n if (!provider || !channel) {\n return () => {};\n }\n return provider.subscribe(channel, (messages) => {\n ref.current = messages;\n onChange();\n });\n },\n [provider, channel],\n );\n\n return useSyncExternalStore(subscribe, () => ref.current);\n};\n","//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\n\n// TODO(burdon): Generalize and factor out.\nexport const useStatus = (space?: Space, channel?: string) => {\n const [processing, setProcessing] = useState(false);\n useEffect(() => {\n if (!space || !channel) {\n return;\n }\n\n const unsubscribe = space.listen(`status/${channel}`, (status) => {\n const { event } = status.payload ?? {};\n setProcessing(event === 'processing');\n });\n\n const t = setInterval(() => {\n setProcessing((prev: any) => {\n if (typeof prev?.ts === 'number' && Date.now() - prev.ts > 30_000) {\n return undefined;\n } else {\n return prev;\n }\n });\n }, 1_000);\n\n return () => {\n unsubscribe();\n clearInterval(t);\n };\n }, [space, channel]);\n\n return processing;\n};\n"],"mappings":";;;;AAWA,IAAM,QAAoC,CAAC;;AAG3C,IAAa,eAAe,YAAqE;CAC/F,MAAM,YAAY,gBAAgB,mBAAmB,cAAc;CACnE,MAAM,WAAW,cACR,UAAU,eAAe,gBAAgB,WAAW,QAAQ,QAAQ,IAAI,IAAI,KAAA,GACnF,CAAC,WAAW,OAAO,CACrB;CAEA,MAAM,MAAM,OAAmC,KAAK;CACpD,MAAM,YAAY,aACf,aAAyB;EACxB,IAAI,CAAC,YAAY,CAAC,SAChB,aAAa,CAAC;EAEhB,OAAO,SAAS,UAAU,UAAU,aAAa;GAC/C,IAAI,UAAU;GACd,SAAS;EACX,CAAC;CACH,GACA,CAAC,UAAU,OAAO,CACpB;CAEA,OAAO,qBAAqB,iBAAiB,IAAI,OAAO;AAC1D;;;AC3BA,IAAa,aAAa,OAAe,YAAqB;CAC5D,MAAM,CAAC,YAAY,iBAAiB,SAAS,KAAK;CAClD,gBAAgB;EACd,IAAI,CAAC,SAAS,CAAC,SACb;EAGF,MAAM,cAAc,MAAM,OAAO,UAAU,YAAY,WAAW;GAChE,MAAM,EAAE,UAAU,OAAO,WAAW,CAAC;GACrC,cAAc,UAAU,YAAY;EACtC,CAAC;EAED,MAAM,IAAI,kBAAkB;GAC1B,eAAe,SAAc;IAC3B,IAAI,OAAO,MAAM,OAAO,YAAY,KAAK,IAAI,IAAI,KAAK,KAAK,KACzD;SAEA,OAAO;GAEX,CAAC;EACH,GAAG,GAAK;EAER,aAAa;GACX,YAAY;GACZ,cAAc,CAAC;EACjB;CACF,GAAG,CAAC,OAAO,OAAO,CAAC;CAEnB,OAAO;AACT"}
1
+ {"version":3,"file":"hooks.mjs","names":[],"sources":["../../src/hooks/useMessages.ts","../../src/hooks/useStatus.ts"],"sourcesContent":["//\n// Copyright 2026 DXOS.org\n//\n\nimport { useCallback, useMemo, useRef, useSyncExternalStore } from 'react';\n\nimport * as Hooks from '@dxos/app-framework/Hooks';\nimport { type Channel, type Message } from '@dxos/types';\n\nimport { ChannelBackend, ThreadCapabilities } from '#types';\n\nconst EMPTY: readonly Message.Message[] = [];\n\n/** Reactive message list for a channel, resolved through its backend provider. */\nexport const useMessages = (channel: Channel.Channel | undefined): readonly Message.Message[] => {\n const providers = Hooks.useCapabilities(ThreadCapabilities.ChannelBackend);\n const provider = useMemo(\n () => (channel ? ChannelBackend.resolveProvider(providers, channel.backend.kind) : undefined),\n [providers, channel],\n );\n\n const ref = useRef<readonly Message.Message[]>(EMPTY);\n const subscribe = useCallback(\n (onChange: () => void) => {\n if (!provider || !channel) {\n return () => {};\n }\n return provider.subscribe(channel, (messages) => {\n ref.current = messages;\n onChange();\n });\n },\n [provider, channel],\n );\n\n return useSyncExternalStore(subscribe, () => ref.current);\n};\n","//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { unpackJson } from '@dxos/protocols/buf';\nimport { type Space } from '@dxos/react-client/echo';\n\n// TODO(burdon): Generalize and factor out.\nexport const useStatus = (space?: Space, channel?: string) => {\n const [processing, setProcessing] = useState(false);\n useEffect(() => {\n if (!space || !channel) {\n return;\n }\n\n const unsubscribe = space.listen(`status/${channel}`, (status) => {\n // The status payload travels as a `google.protobuf.Struct` packed in an `Any`, so it arrives\n // as opaque JSON that has to be narrowed rather than destructured as typed.\n const { event } = unpackJson(status.payload) ?? {};\n setProcessing(event === 'processing');\n });\n\n const t = setInterval(() => {\n setProcessing((prev: any) => {\n if (typeof prev?.ts === 'number' && Date.now() - prev.ts > 30_000) {\n return undefined;\n } else {\n return prev;\n }\n });\n }, 1_000);\n\n return () => {\n unsubscribe();\n clearInterval(t);\n };\n }, [space, channel]);\n\n return processing;\n};\n"],"mappings":";;;;;AAWA,IAAM,QAAoC,CAAC;;AAG3C,IAAa,eAAe,YAAqE;CAC/F,MAAM,YAAY,MAAM,gBAAgB,mBAAmB,cAAc;CACzE,MAAM,WAAW,cACR,UAAU,eAAe,gBAAgB,WAAW,QAAQ,QAAQ,IAAI,IAAI,KAAA,GACnF,CAAC,WAAW,OAAO,CACrB;CAEA,MAAM,MAAM,OAAmC,KAAK;CACpD,MAAM,YAAY,aACf,aAAyB;EACxB,IAAI,CAAC,YAAY,CAAC,SAChB,aAAa,CAAC;EAEhB,OAAO,SAAS,UAAU,UAAU,aAAa;GAC/C,IAAI,UAAU;GACd,SAAS;EACX,CAAC;CACH,GACA,CAAC,UAAU,OAAO,CACpB;CAEA,OAAO,qBAAqB,iBAAiB,IAAI,OAAO;AAC1D;;;AC1BA,IAAa,aAAa,OAAe,YAAqB;CAC5D,MAAM,CAAC,YAAY,iBAAiB,SAAS,KAAK;CAClD,gBAAgB;EACd,IAAI,CAAC,SAAS,CAAC,SACb;EAGF,MAAM,cAAc,MAAM,OAAO,UAAU,YAAY,WAAW;GAGhE,MAAM,EAAE,UAAU,WAAW,OAAO,OAAO,KAAK,CAAC;GACjD,cAAc,UAAU,YAAY;EACtC,CAAC;EAED,MAAM,IAAI,kBAAkB;GAC1B,eAAe,SAAc;IAC3B,IAAI,OAAO,MAAM,OAAO,YAAY,KAAK,IAAI,IAAI,KAAK,KAAK,KACzD;SAEA,OAAO;GAEX,CAAC;EACH,GAAG,GAAK;EAER,aAAa;GACX,YAAY;GACZ,cAAc,CAAC;EACjB;CACF,GAAG,CAAC,OAAO,OAAO,CAAC;CAEnB,OAAO;AACT"}
@@ -1,6 +1,4 @@
1
1
  import { t as ThreadPlugin_exports } from "./ThreadPlugin.mjs";
2
- import { n as getChannelsPath, t as getChannelPath } from "./chunk-paths.mjs";
3
2
  export * from "#types";
4
- export * from "#meta";
5
- export * from "#hooks";
6
- export { ThreadPlugin_exports as ThreadPlugin, getChannelPath, getChannelsPath };
3
+ export * from "#operations";
4
+ export { ThreadPlugin_exports as ThreadPlugin };
package/dist/lib/meta.mjs CHANGED
@@ -28,6 +28,7 @@ var dx_config_default = Config2.make({ plugin: {
28
28
  hue: "rose"
29
29
  },
30
30
  spec: "PLUGIN.mdl",
31
+ screenshots: [{ dark: "https://pub-39066a86073446d7b77b1c157b660bb5.r2.dev/demos/2026-08-27-qa-flows/plugin-thread-QA-1.webm" }],
31
32
  tags: ["alpha"]
32
33
  } });
33
34
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"meta.mjs","names":[],"sources":["../../dx.config.ts","../../src/meta.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Config2 } from '@dxos/app-framework/config';\nimport { trim } from '@dxos/util';\n\nexport default Config2.make({\n plugin: {\n key: 'org.dxos.plugin.thread',\n name: 'Threads',\n author: 'DXOS',\n description: trim`\n ThreadPlugin provides chat: channels backed by an ECHO feed and free-standing\n message threads. It renders the channel article and companion surfaces plus a\n thread surface, and contributes the operations that create a default channel on\n space creation, create new channels, and append messages.\n\n Channel messages are stored in the channel's feed queue and rendered newest-last\n with a pinned composer; externally-synced channels (carrying foreign-key\n metadata, e.g. Slack/Discord-sourced rooms) render read-only because there is no\n local-write path back to the source. Free-standing threads render their messages\n and append by pushing onto the thread's message list.\n\n The shared message and thread UI comes from @dxos/react-ui-thread; the Channel,\n Message, and Thread schema come from @dxos/types. Document comments and the\n comment-thread AI agent live in the @dxos/plugin-review plugin.\n `,\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-thread',\n icon: { key: 'ph--video-conference--regular', hue: 'rose' },\n spec: 'PLUGIN.mdl',\n tags: ['alpha'],\n },\n});\n","//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Plugin from '@dxos/app-framework/Plugin';\n\nimport config from '../dx.config';\n\nexport const meta = Plugin.getMetaFromConfig(config);\n\nexport const THREAD_ITEM = `${meta.profile.key}.item`;\n"],"mappings":";;;;AAOA,IAAA,oBAAe,QAAQ,KAAK,EAC1B,QAAQ;CACN,KAAK;CACL,MAAM;CACN,QAAQ;CACR,aAAa,IAAI;;;;;;;;;;;;;;;;CAgBjB,QAAQ;CACR,MAAM;EAAE,KAAK;EAAiC,KAAK;CAAO;CAC1D,MAAM;CACN,MAAM,CAAC,OAAO;AAChB,EACF,CAAC;;;ACzBD,IAAa,OAAO,OAAO,kBAAkB,iBAAM;AAEnD,IAAa,cAAc,GAAG,KAAK,QAAQ,IAAI"}
1
+ {"version":3,"file":"meta.mjs","names":[],"sources":["../../dx.config.ts","../../src/meta.ts"],"sourcesContent":["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Config2 } from '@dxos/app-framework/config';\nimport { trim } from '@dxos/util';\n\nexport default Config2.make({\n plugin: {\n key: 'org.dxos.plugin.thread',\n name: 'Threads',\n author: 'DXOS',\n description: trim`\n ThreadPlugin provides chat: channels backed by an ECHO feed and free-standing\n message threads. It renders the channel article and companion surfaces plus a\n thread surface, and contributes the operations that create a default channel on\n space creation, create new channels, and append messages.\n\n Channel messages are stored in the channel's feed queue and rendered newest-last\n with a pinned composer; externally-synced channels (carrying foreign-key\n metadata, e.g. Slack/Discord-sourced rooms) render read-only because there is no\n local-write path back to the source. Free-standing threads render their messages\n and append by pushing onto the thread's message list.\n\n The shared message and thread UI comes from @dxos/react-ui-thread; the Channel,\n Message, and Thread schema come from @dxos/types. Document comments and the\n comment-thread AI agent live in the @dxos/plugin-review plugin.\n `,\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-thread',\n icon: { key: 'ph--video-conference--regular', hue: 'rose' },\n spec: 'PLUGIN.mdl',\n screenshots: [\n { dark: 'https://pub-39066a86073446d7b77b1c157b660bb5.r2.dev/demos/2026-08-27-qa-flows/plugin-thread-QA-1.webm' },\n ],\n tags: ['alpha'],\n },\n});\n","//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Plugin from '@dxos/app-framework/Plugin';\n\nimport config from '../dx.config.ts';\n\nexport const meta = Plugin.getMetaFromConfig(config);\n\nexport const THREAD_ITEM = `${meta.profile.key}.item`;\n"],"mappings":";;;;AAOA,IAAA,oBAAe,QAAQ,KAAK,EAC1B,QAAQ;CACN,KAAK;CACL,MAAM;CACN,QAAQ;CACR,aAAa,IAAI;;;;;;;;;;;;;;;;CAgBjB,QAAQ;CACR,MAAM;EAAE,KAAK;EAAiC,KAAK;CAAO;CAC1D,MAAM;CACN,aAAa,CACX,EAAE,MAAM,wGAAwG,CAClH;CACA,MAAM,CAAC,OAAO;AAChB,EACF,CAAC;;;AC5BD,IAAa,OAAO,OAAO,kBAAkB,iBAAM;AAEnD,IAAa,cAAc,GAAG,KAAK,QAAQ,IAAI"}
@@ -1,9 +1,2 @@
1
- import { ThreadOperation } from "#types";
2
- import * as Operation from "@dxos/compute/Operation";
3
- import * as OperationHandlerSet from "@dxos/compute/OperationHandlerSet";
4
- //#region src/operations/index.ts
5
- var ThreadOperationHandlerSet = OperationHandlerSet.lazy([ThreadOperation.AppendChannelMessage.pipe(Operation.lazyHandler(() => import("./chunk-append-channel-message.mjs"))), ThreadOperation.CreateChannel.pipe(Operation.lazyHandler(() => import("./chunk-create-channel.mjs")))]);
6
- //#endregion
7
- export { ThreadOperationHandlerSet };
8
-
9
- //# sourceMappingURL=operations.mjs.map
1
+ import { t as ThreadOperationHandlerSet_exports } from "./ThreadOperationHandlerSet.mjs";
2
+ export { ThreadOperationHandlerSet_exports as ThreadOperationHandlerSet };
@@ -1,6 +1,6 @@
1
1
  import { meta } from "#meta";
2
- import { Channel } from "@dxos/types";
3
2
  import { Type } from "@dxos/echo";
3
+ import { Channel } from "@dxos/types";
4
4
  //#region src/translations.ts
5
5
  var translations = [{ "en-US": {
6
6
  [Type.getTypename(Channel.Channel)]: {
@@ -1 +1 @@
1
- {"version":3,"file":"translations.mjs","names":[],"sources":["../../src/translations.ts"],"sourcesContent":["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Type } from '@dxos/echo';\nimport { type Resource } from '@dxos/react-ui';\nimport { Channel } from '@dxos/types';\n\nimport { meta } from '#meta';\n\nexport const translations = [\n {\n 'en-US': {\n // TODO(burdon): Thread.\n [Type.getTypename(Channel.Channel)]: {\n 'typename.label': 'Channel',\n 'typename.label_zero': 'Channels',\n 'typename.label_one': 'Channel',\n 'typename.label_other': 'Channels',\n 'object-name.placeholder': 'New channel',\n 'add-object.label': 'Add channel',\n 'rename-object.label': 'Rename channel',\n 'delete-object.label': 'Delete channel',\n 'object-deleted.label': 'Channel deleted',\n },\n [meta.profile.key]: {\n 'plugin.name': 'Chat',\n 'channel-title.label': 'Title',\n 'message.placeholder': 'Reply…',\n 'activity.message': 'Processing…',\n 'anonymous.label': 'Anonymous',\n 'delete-message-block.label': 'Delete message block',\n 'detached-thread.label': 'Referenced content was removed',\n 'delete-thread.label': 'Delete thread',\n 'resolve-thread.label': 'Resolve thread',\n 'thread-deleted.label': 'Thread deleted',\n 'message-deleted.label': 'Message deleted',\n 'comments.heading': 'Comments',\n 'chat.heading': 'Chat',\n 'draft.button': 'DRAFT',\n 'no-comments.title': 'Comments',\n 'no-comments.message':\n 'Click on the <commentIcon></commentIcon> button in the document toolbar to create a comment thread on the selected text.',\n 'toggle-show-resolved.label': 'Show resolved',\n 'unnamed-object-threads.label': 'Threads',\n 'mark-as-resolved.label': 'Mark as resolved',\n 'mark-as-unresolved.label': 'Mark as unresolved',\n 'save-message.label': 'Save',\n 'edit-message.label': 'Edit',\n 'delete-message.label': 'Delete message',\n 'accept-proposal.label': 'Accept proposal',\n 'open-comments-panel.label': 'Show Comments',\n 'comments.label': 'Comments',\n 'show-all.label': 'All comments',\n 'show-unresolved.label': 'Unresolved comments',\n 'add-comment.label': 'Add comment',\n\n 'channel-companion.label': 'Channel',\n 'call-panel.label': 'Active Call',\n\n 'display-name.label': 'Display name',\n 'display-name.description': 'Set your display name before joining a meeting.',\n 'display-name-input.placeholder': 'Enter your name',\n 'set-display-name.label': 'Continue',\n\n 'call-tab.label': 'Call',\n 'meeting-status.title': 'Calls',\n 'share-meeting-link.label': 'Share meeting',\n 'show-webrtc-stats.title': 'WebRTC Stats',\n 'show-calls-history.title': 'Service History',\n\n 'meeting-summary.label': 'Summary',\n 'summarize.label': 'Summarize',\n 'summarizing.label': 'Creating summary...',\n 'create-summary.message': 'A summary doesn’t exist for this meeting yet. Create one now?',\n\n 'icon-pin.label': 'Pin video',\n 'icon-unpin.label': 'Unpin video',\n 'icon-wave.label': 'Waving',\n 'icon-muted.label': 'Muted',\n 'join-call.button': 'Join',\n 'leave-call.button': 'Leave',\n 'mic-on.button': 'Unmute',\n 'mic-off.button': 'Mute',\n 'camera-on.button': 'Turn camera on',\n 'camera-off.button': 'Turn camera off',\n 'camera-off.label': 'Camera off',\n 'raise-hand.button': 'Raise hand',\n 'lower-hand.button': 'Lower hand',\n 'screenshare-on.button': 'Share screen',\n 'screenshare-off.button': 'Stop streaming',\n\n 'channel-toolbar.title': 'Channel actions',\n 'start-video-call.menu': 'Start video call',\n },\n },\n },\n] as const satisfies Resource[];\n"],"mappings":";;;;AAUA,IAAa,eAAe,CAC1B,EACE,SAAS;EAEN,KAAK,YAAY,QAAQ,OAAO,IAAI;EACnC,kBAAkB;EAClB,uBAAuB;EACvB,sBAAsB;EACtB,wBAAwB;EACxB,2BAA2B;EAC3B,oBAAoB;EACpB,uBAAuB;EACvB,uBAAuB;EACvB,wBAAwB;CAC1B;EACC,KAAK,QAAQ,MAAM;EAClB,eAAe;EACf,uBAAuB;EACvB,uBAAuB;EACvB,oBAAoB;EACpB,mBAAmB;EACnB,8BAA8B;EAC9B,yBAAyB;EACzB,uBAAuB;EACvB,wBAAwB;EACxB,wBAAwB;EACxB,yBAAyB;EACzB,oBAAoB;EACpB,gBAAgB;EAChB,gBAAgB;EAChB,qBAAqB;EACrB,uBACE;EACF,8BAA8B;EAC9B,gCAAgC;EAChC,0BAA0B;EAC1B,4BAA4B;EAC5B,sBAAsB;EACtB,sBAAsB;EACtB,wBAAwB;EACxB,yBAAyB;EACzB,6BAA6B;EAC7B,kBAAkB;EAClB,kBAAkB;EAClB,yBAAyB;EACzB,qBAAqB;EAErB,2BAA2B;EAC3B,oBAAoB;EAEpB,sBAAsB;EACtB,4BAA4B;EAC5B,kCAAkC;EAClC,0BAA0B;EAE1B,kBAAkB;EAClB,wBAAwB;EACxB,4BAA4B;EAC5B,2BAA2B;EAC3B,4BAA4B;EAE5B,yBAAyB;EACzB,mBAAmB;EACnB,qBAAqB;EACrB,0BAA0B;EAE1B,kBAAkB;EAClB,oBAAoB;EACpB,mBAAmB;EACnB,oBAAoB;EACpB,oBAAoB;EACpB,qBAAqB;EACrB,iBAAiB;EACjB,kBAAkB;EAClB,oBAAoB;EACpB,qBAAqB;EACrB,oBAAoB;EACpB,qBAAqB;EACrB,qBAAqB;EACrB,yBAAyB;EACzB,0BAA0B;EAE1B,yBAAyB;EACzB,yBAAyB;CAC3B;AACF,EACF,CACF"}
1
+ {"version":3,"file":"translations.mjs","names":[],"sources":["../../src/translations.ts"],"sourcesContent":["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Type } from '@dxos/echo';\nimport type * as Theme from '@dxos/react-ui/Theme';\nimport { Channel } from '@dxos/types';\n\nimport { meta } from '#meta';\n\nexport const translations = [\n {\n 'en-US': {\n // TODO(burdon): Thread.\n [Type.getTypename(Channel.Channel)]: {\n 'typename.label': 'Channel',\n 'typename.label_zero': 'Channels',\n 'typename.label_one': 'Channel',\n 'typename.label_other': 'Channels',\n 'object-name.placeholder': 'New channel',\n 'add-object.label': 'Add channel',\n 'rename-object.label': 'Rename channel',\n 'delete-object.label': 'Delete channel',\n 'object-deleted.label': 'Channel deleted',\n },\n [meta.profile.key]: {\n 'plugin.name': 'Chat',\n 'channel-title.label': 'Title',\n 'message.placeholder': 'Reply…',\n 'activity.message': 'Processing…',\n 'anonymous.label': 'Anonymous',\n 'delete-message-block.label': 'Delete message block',\n 'detached-thread.label': 'Referenced content was removed',\n 'delete-thread.label': 'Delete thread',\n 'resolve-thread.label': 'Resolve thread',\n 'thread-deleted.label': 'Thread deleted',\n 'message-deleted.label': 'Message deleted',\n 'comments.heading': 'Comments',\n 'chat.heading': 'Chat',\n 'draft.button': 'DRAFT',\n 'no-comments.title': 'Comments',\n 'no-comments.message':\n 'Click on the <commentIcon></commentIcon> button in the document toolbar to create a comment thread on the selected text.',\n 'toggle-show-resolved.label': 'Show resolved',\n 'unnamed-object-threads.label': 'Threads',\n 'mark-as-resolved.label': 'Mark as resolved',\n 'mark-as-unresolved.label': 'Mark as unresolved',\n 'save-message.label': 'Save',\n 'edit-message.label': 'Edit',\n 'delete-message.label': 'Delete message',\n 'accept-proposal.label': 'Accept proposal',\n 'open-comments-panel.label': 'Show Comments',\n 'comments.label': 'Comments',\n 'show-all.label': 'All comments',\n 'show-unresolved.label': 'Unresolved comments',\n 'add-comment.label': 'Add comment',\n\n 'channel-companion.label': 'Channel',\n 'call-panel.label': 'Active Call',\n\n 'display-name.label': 'Display name',\n 'display-name.description': 'Set your display name before joining a meeting.',\n 'display-name-input.placeholder': 'Enter your name',\n 'set-display-name.label': 'Continue',\n\n 'call-tab.label': 'Call',\n 'meeting-status.title': 'Calls',\n 'share-meeting-link.label': 'Share meeting',\n 'show-webrtc-stats.title': 'WebRTC Stats',\n 'show-calls-history.title': 'Service History',\n\n 'meeting-summary.label': 'Summary',\n 'summarize.label': 'Summarize',\n 'summarizing.label': 'Creating summary...',\n 'create-summary.message': 'A summary doesn’t exist for this meeting yet. Create one now?',\n\n 'icon-pin.label': 'Pin video',\n 'icon-unpin.label': 'Unpin video',\n 'icon-wave.label': 'Waving',\n 'icon-muted.label': 'Muted',\n 'join-call.button': 'Join',\n 'leave-call.button': 'Leave',\n 'mic-on.button': 'Unmute',\n 'mic-off.button': 'Mute',\n 'camera-on.button': 'Turn camera on',\n 'camera-off.button': 'Turn camera off',\n 'camera-off.label': 'Camera off',\n 'raise-hand.button': 'Raise hand',\n 'lower-hand.button': 'Lower hand',\n 'screenshare-on.button': 'Share screen',\n 'screenshare-off.button': 'Stop streaming',\n\n 'channel-toolbar.title': 'Channel actions',\n 'start-video-call.menu': 'Start video call',\n },\n },\n },\n] as const satisfies Theme.Resource[];\n"],"mappings":";;;;AAUA,IAAa,eAAe,CAC1B,EACE,SAAS;EAEN,KAAK,YAAY,QAAQ,OAAO,IAAI;EACnC,kBAAkB;EAClB,uBAAuB;EACvB,sBAAsB;EACtB,wBAAwB;EACxB,2BAA2B;EAC3B,oBAAoB;EACpB,uBAAuB;EACvB,uBAAuB;EACvB,wBAAwB;CAC1B;EACC,KAAK,QAAQ,MAAM;EAClB,eAAe;EACf,uBAAuB;EACvB,uBAAuB;EACvB,oBAAoB;EACpB,mBAAmB;EACnB,8BAA8B;EAC9B,yBAAyB;EACzB,uBAAuB;EACvB,wBAAwB;EACxB,wBAAwB;EACxB,yBAAyB;EACzB,oBAAoB;EACpB,gBAAgB;EAChB,gBAAgB;EAChB,qBAAqB;EACrB,uBACE;EACF,8BAA8B;EAC9B,gCAAgC;EAChC,0BAA0B;EAC1B,4BAA4B;EAC5B,sBAAsB;EACtB,sBAAsB;EACtB,wBAAwB;EACxB,yBAAyB;EACzB,6BAA6B;EAC7B,kBAAkB;EAClB,kBAAkB;EAClB,yBAAyB;EACzB,qBAAqB;EAErB,2BAA2B;EAC3B,oBAAoB;EAEpB,sBAAsB;EACtB,4BAA4B;EAC5B,kCAAkC;EAClC,0BAA0B;EAE1B,kBAAkB;EAClB,wBAAwB;EACxB,4BAA4B;EAC5B,2BAA2B;EAC3B,4BAA4B;EAE5B,yBAAyB;EACzB,mBAAmB;EACnB,qBAAqB;EACrB,0BAA0B;EAE1B,kBAAkB;EAClB,oBAAoB;EACpB,mBAAmB;EACnB,oBAAoB;EACpB,oBAAoB;EACpB,qBAAqB;EACrB,iBAAiB;EACjB,kBAAkB;EAClB,oBAAoB;EACpB,qBAAqB;EACrB,oBAAoB;EACpB,qBAAqB;EACrB,qBAAqB;EACrB,yBAAyB;EACzB,0BAA0B;EAE1B,yBAAyB;EACzB,yBAAyB;CAC3B;AACF,EACF,CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"channel-backend-feed.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/channel-backend-feed.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,KAAK,UAAU,MAAM,gCAAgC,CAAC;AAM7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAE5C;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,kBAAkB,CAAC,sBA6BnD,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,kBAAkB,+KAI9B,CAAC;eAEa,kBAAkB"}
1
+ {"version":3,"file":"channel-backend-feed.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/channel-backend-feed.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAGxC,OAAO,KAAK,UAAU,MAAM,gCAAgC,CAAC;AAK7D,OAAO,EAAkB,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AAE5D;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,kBAAkB,CAAC,sBAyBnD,CAAC;AAEF,4DAA4D;AAC5D,eAAO,MAAM,kBAAkB,+KAI9B,CAAC;eAEa,kBAAkB"}
@@ -0,0 +1,10 @@
1
+ import * as Capability from '@dxos/app-framework/Capability';
2
+ export declare const AppGraphBuilder: Capability.Module<void>;
3
+ export declare const ChannelBackendFeed: Capability.Module<void>;
4
+ export declare const CreateObject: Capability.Module<void>;
5
+ export declare const OperationHandler: Capability.Module<void>;
6
+ export declare const ReactSurface: Capability.Module<void>;
7
+ export declare const Schema: Capability.Module<void>;
8
+ export declare const Translations: Capability.Module<void>;
9
+ export declare const PluginAsset: Capability.Module<void>;
10
+ //# sourceMappingURL=browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/gen/browser.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,UAAU,MAAM,gCAAgC,CAAC;AAc7D,eAAO,MAAM,eAAe,yBAAyE,CAAC;AAEtG,eAAO,MAAM,kBAAkB,yBAQ9B,CAAC;AAIF,eAAO,MAAM,YAAY,yBAEvB,CAAC;AAEH,eAAO,MAAM,gBAAgB,yBAE3B,CAAC;AAEH,eAAO,MAAM,YAAY,yBAEvB,CAAC;AAEH,eAAO,MAAM,MAAM,yBAAqD,CAAC;AAEzE,eAAO,MAAM,YAAY,yBAAuE,CAAC;AAEjG,eAAO,MAAM,WAAW,yBAKtB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/gen/node.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,UAAU,MAAM,gCAAgC,CAAC;AAU7D,eAAO,MAAM,eAAe,yBAAsE,CAAC;AAEnG,eAAO,MAAM,kBAAkB,yBAQ9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,yBAE3B,CAAC;AAEH,eAAO,MAAM,MAAM,yBAAkD,CAAC;AAEtE,eAAO,MAAM,YAAY,yBAAuE,CAAC;AAEjG,eAAO,MAAM,YAAY,WAAY,CAAC;AACtC,eAAO,MAAM,WAAW,WAAY,CAAC;AACrC,eAAO,MAAM,YAAY,WAAY,CAAC"}
1
+ {"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/gen/node.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,UAAU,MAAM,gCAAgC,CAAC;AAU7D,eAAO,MAAM,eAAe,yBAAyE,CAAC;AAEtG,eAAO,MAAM,kBAAkB,yBAQ9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,yBAE3B,CAAC;AAEH,eAAO,MAAM,MAAM,yBAAqD,CAAC;AAEzE,eAAO,MAAM,YAAY,yBAAuE,CAAC;AAEjG,eAAO,MAAM,YAAY,WAAY,CAAC;AACtC,eAAO,MAAM,WAAW,WAAY,CAAC;AACrC,eAAO,MAAM,YAAY,WAAY,CAAC"}
@@ -0,0 +1,10 @@
1
+ import * as Capability from '@dxos/app-framework/Capability';
2
+ export declare const AppGraphBuilder: Capability.Module<void>;
3
+ export declare const ChannelBackendFeed: Capability.Module<void>;
4
+ export declare const CreateObject: Capability.Module<void>;
5
+ export declare const OperationHandler: Capability.Module<void>;
6
+ export declare const ReactSurface: Capability.Module<void>;
7
+ export declare const Schema: Capability.Module<void>;
8
+ export declare const Translations: Capability.Module<void>;
9
+ export declare const PluginAsset: Capability.Module<void>;
10
+ //# sourceMappingURL=tauri.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tauri.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/gen/tauri.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,UAAU,MAAM,gCAAgC,CAAC;AAc7D,eAAO,MAAM,eAAe,yBAAyE,CAAC;AAEtG,eAAO,MAAM,kBAAkB,yBAQ9B,CAAC;AAIF,eAAO,MAAM,YAAY,yBAEvB,CAAC;AAEH,eAAO,MAAM,gBAAgB,yBAE3B,CAAC;AAEH,eAAO,MAAM,YAAY,yBAEvB,CAAC;AAEH,eAAO,MAAM,MAAM,yBAAqD,CAAC;AAEzE,eAAO,MAAM,YAAY,yBAAuE,CAAC;AAEjG,eAAO,MAAM,WAAW,yBAKtB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"workerd.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/gen/workerd.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,UAAU,MAAM,gCAAgC,CAAC;AAU7D,eAAO,MAAM,eAAe,yBAAsE,CAAC;AAEnG,eAAO,MAAM,kBAAkB,yBAQ9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,yBAE3B,CAAC;AAEH,eAAO,MAAM,MAAM,yBAAkD,CAAC;AAEtE,eAAO,MAAM,YAAY,yBAAuE,CAAC;AAEjG,eAAO,MAAM,YAAY,WAAY,CAAC;AACtC,eAAO,MAAM,WAAW,WAAY,CAAC;AACrC,eAAO,MAAM,YAAY,WAAY,CAAC"}
1
+ {"version":3,"file":"workerd.d.ts","sourceRoot":"","sources":["../../../../../src/capabilities/gen/workerd.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,UAAU,MAAM,gCAAgC,CAAC;AAU7D,eAAO,MAAM,eAAe,yBAAyE,CAAC;AAEtG,eAAO,MAAM,kBAAkB,yBAQ9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,yBAE3B,CAAC;AAEH,eAAO,MAAM,MAAM,yBAAqD,CAAC;AAEzE,eAAO,MAAM,YAAY,yBAAuE,CAAC;AAEjG,eAAO,MAAM,YAAY,WAAY,CAAC;AACtC,eAAO,MAAM,WAAW,WAAY,CAAC;AACrC,eAAO,MAAM,YAAY,WAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,UAAU,MAAM,gCAAgC,CAAC;AAe7D,eAAO,MAAM,eAAe,yBAAqE,CAAC;AAClG,eAAO,MAAM,kBAAkB,yBAQ9B,CAAC;AAGF,eAAO,MAAM,YAAY,yBAEvB,CAAC;AACH,eAAO,MAAM,gBAAgB,yBAE3B,CAAC;AACH,eAAO,MAAM,YAAY,yBAEvB,CAAC;AACH,eAAO,MAAM,MAAM,yBAAiD,CAAC;AACrE,eAAO,MAAM,YAAY,yBAAuE,CAAC;AACjG,eAAO,MAAM,WAAW,yBAKtB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,UAAU,MAAM,gCAAgC,CAAC;AAe7D,eAAO,MAAM,eAAe,yBAAwE,CAAC;AACrG,eAAO,MAAM,kBAAkB,yBAQ9B,CAAC;AAGF,eAAO,MAAM,YAAY,yBAEvB,CAAC;AACH,eAAO,MAAM,gBAAgB,yBAE3B,CAAC;AACH,eAAO,MAAM,YAAY,yBAEvB,CAAC;AACH,eAAO,MAAM,MAAM,yBAAoD,CAAC;AACxE,eAAO,MAAM,YAAY,yBAAuE,CAAC;AACjG,eAAO,MAAM,WAAW,yBAKtB,CAAC"}
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
2
  import { type Identity, type Space } from '@dxos/halo';
3
- import { type ThemedClassName } from '@dxos/react-ui';
3
+ import * as Util from '@dxos/react-ui/Util';
4
4
  import { type Message } from '@dxos/types';
5
- export type MessageThreadProps = ThemedClassName<{
5
+ export type MessageThreadProps = Util.ThemedClassName<{
6
6
  /** Stable id used for the underlying thread root and message metadata. */
7
7
  id: string;
8
8
  /** Identity used to attribute outgoing messages in the textbox metadata. */
@@ -1 +1 @@
1
- {"version":3,"file":"MessageThread.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageThread/MessageThread.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAIpD,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAQ,KAAK,eAAe,EAA8B,MAAM,gBAAgB,CAAC;AAExF,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAO3C,MAAM,MAAM,kBAAkB,GAAG,eAAe,CAAC;IAC/C,0EAA0E;IAC1E,EAAE,EAAE,MAAM,CAAC;IACX,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC;IACzB,6EAA6E;IAC7E,OAAO,EAAE,SAAS,KAAK,CAAC,MAAM,EAAE,CAAC;IACjC,mCAAmC;IACnC,QAAQ,EAAE,SAAS,OAAO,CAAC,OAAO,EAAE,CAAC;IACrC,sEAAsE;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wBAAwB;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oDAAoD;IACpD,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACnC,CAAC,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,aAAa;;6GAiDzB,CAAC"}
1
+ {"version":3,"file":"MessageThread.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageThread/MessageThread.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAIpD,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAIvD,OAAO,KAAK,IAAI,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAO3C,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC;IACpD,0EAA0E;IAC1E,EAAE,EAAE,MAAM,CAAC;IACX,4EAA4E;IAC5E,QAAQ,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC;IACzB,6EAA6E;IAC7E,OAAO,EAAE,SAAS,KAAK,CAAC,MAAM,EAAE,CAAC;IACjC,mCAAmC;IACnC,QAAQ,EAAE,SAAS,OAAO,CAAC,OAAO,EAAE,CAAC;IACrC,sEAAsE;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wBAAwB;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oDAAoD;IACpD,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACnC,CAAC,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,aAAa;;6GA4CzB,CAAC"}
@@ -1,2 +1,2 @@
1
- export * from './MessageThread';
1
+ export * from './MessageThread.tsx';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageThread/index.ts"],"names":[],"mappings":"AAIA,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/MessageThread/index.ts"],"names":[],"mappings":"AAIA,cAAc,qBAAqB,CAAC"}
@@ -1,2 +1,2 @@
1
- export * from './MessageThread';
1
+ export * from './MessageThread/index.ts';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/index.ts"],"names":[],"mappings":"AAIA,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/index.ts"],"names":[],"mappings":"AAIA,cAAc,0BAA0B,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { AppSurface } from '@dxos/app-toolkit/ui';
2
+ import * as AppSurface from '@dxos/app-toolkit/AppSurface';
3
3
  import { type Channel } from '@dxos/types';
4
4
  export type ChannelArticleProps = AppSurface.ObjectArticleProps<Channel.Channel | undefined, {
5
5
  roomId?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ChannelArticle.d.ts","sourceRoot":"","sources":["../../../../../src/containers/ChannelArticle/ChannelArticle.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAG3C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAQlD,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAW3C,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,kBAAkB,CAC7D,OAAO,CAAC,OAAO,GAAG,SAAS,EAC3B;IACE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,sGAAsG;IACtG,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CACF,CAAC;uCAU6B,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,mBAAmB"}
1
+ {"version":3,"file":"ChannelArticle.d.ts","sourceRoot":"","sources":["../../../../../src/containers/ChannelArticle/ChannelArticle.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAI3C,OAAO,KAAK,UAAU,MAAM,8BAA8B,CAAC;AAQ3D,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AAW3C,MAAM,MAAM,mBAAmB,GAAG,UAAU,CAAC,kBAAkB,CAC7D,OAAO,CAAC,OAAO,GAAG,SAAS,EAC3B;IACE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,sGAAsG;IACtG,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CACF,CAAC;uCAU6B,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,EAAE,mBAAmB"}
@@ -1,6 +1,6 @@
1
1
  import { type StoryObj } from '@storybook/react-vite';
2
2
  import React from 'react';
3
- import { ChannelArticle, type ChannelArticleProps } from './ChannelArticle';
3
+ import { ChannelArticle, type ChannelArticleProps } from './ChannelArticle.tsx';
4
4
  declare const DefaultStory: ({ roomId }: ChannelArticleProps) => React.JSX.Element;
5
5
  declare const meta: {
6
6
  title: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ChannelArticle.stories.d.ts","sourceRoot":"","sources":["../../../../../src/containers/ChannelArticle/ChannelArticle.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,KAAK,MAAM,OAAO,CAAC;AAuB1B,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAG5E,QAAA,MAAM,YAAY,eAAgB,mBAAmB,sBAQpD,CAAC;AAEF,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwD6B,CAAC;eAEzB,IAAI;AAEnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAQrB,CAAC"}
1
+ {"version":3,"file":"ChannelArticle.stories.d.ts","sourceRoot":"","sources":["../../../../../src/containers/ChannelArticle/ChannelArticle.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjE,OAAO,KAAK,MAAM,OAAO,CAAC;AAuB1B,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAGhF,QAAA,MAAM,YAAY,eAAgB,mBAAmB,sBAQpD,CAAC;AAEF,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwD6B,CAAC;eAEzB,IAAI;AAEnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAQrB,CAAC"}
@@ -1,2 +1,2 @@
1
- export { ChannelArticle as default } from './ChannelArticle';
1
+ export { ChannelArticle as default } from './ChannelArticle.tsx';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/containers/ChannelArticle/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,IAAI,OAAO,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/containers/ChannelArticle/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import type * as SpaceCapabilities from '@dxos/plugin-space/SpaceCapabilities';
3
- export declare function ChannelCreatePanel({ target, onCreateObject }: SpaceCapabilities.CreateObjectCustomPanelProps): React.JSX.Element;
3
+ export declare function ChannelCreatePanel({ target, onCreateObject, onCancel, }: SpaceCapabilities.CreateObjectCustomPanelProps): React.JSX.Element;
4
4
  export declare namespace ChannelCreatePanel {
5
5
  var displayName: string;
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ChannelCreatePanel.d.ts","sourceRoot":"","sources":["../../../../../src/containers/ChannelCreatePanel/ChannelCreatePanel.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAIpD,OAAO,KAAK,KAAK,iBAAiB,MAAM,sCAAsC,CAAC;2CAY5C,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,iBAAiB,CAAC,4BAA4B"}
1
+ {"version":3,"file":"ChannelCreatePanel.d.ts","sourceRoot":"","sources":["../../../../../src/containers/ChannelCreatePanel/ChannelCreatePanel.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAIpD,OAAO,KAAK,KAAK,iBAAiB,MAAM,sCAAsC,CAAC;2CAY5C,EACjC,MAAM,EACN,cAAc,EACd,QAAQ,GACT,EAAE,iBAAiB,CAAC,4BAA4B"}
@@ -1,2 +1,2 @@
1
- export { ChannelCreatePanel as default } from './ChannelCreatePanel';
1
+ export { ChannelCreatePanel as default } from './ChannelCreatePanel.tsx';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/containers/ChannelCreatePanel/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/containers/ChannelCreatePanel/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,IAAI,OAAO,EAAE,MAAM,0BAA0B,CAAC"}
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
2
  import { Obj } from '@dxos/echo';
3
- import { type ThemedClassName } from '@dxos/react-ui';
4
3
  import { type ThreadContentProps } from '@dxos/react-ui-thread';
4
+ import * as Util from '@dxos/react-ui/Util';
5
5
  import { type Thread } from '@dxos/types';
6
- export type ThreadArticleProps = ThemedClassName<{
6
+ export type ThreadArticleProps = Util.ThemedClassName<{
7
7
  thread: Thread.Thread;
8
8
  context?: Obj.Unknown;
9
9
  autoFocus?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"ThreadArticle.d.ts","sourceRoot":"","sources":["../../../../../src/containers/ThreadArticle/ThreadArticle.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAE,GAAG,EAAO,MAAM,YAAY,CAAC;AAGtC,OAAO,EAAS,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE7D,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAMnD,MAAM,MAAM,kBAAkB,GAAG,eAAe,CAC9C;IACE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,GAAG,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,CACxC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa;;6GAsDzB,CAAC"}
1
+ {"version":3,"file":"ThreadArticle.d.ts","sourceRoot":"","sources":["../../../../../src/containers/ThreadArticle/ThreadArticle.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAkB,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAE,GAAG,EAAO,MAAM,YAAY,CAAC;AAGtC,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,OAAO,KAAK,IAAI,MAAM,qBAAqB,CAAC;AAC5C,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAKnD,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,CACnD;IACE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,GAAG,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAC,CACxC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa;;6GA8DzB,CAAC"}
@@ -1,2 +1,2 @@
1
- export { ThreadArticle as default } from './ThreadArticle';
1
+ export { ThreadArticle as default } from './ThreadArticle.tsx';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/containers/ThreadArticle/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,IAAI,OAAO,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/containers/ThreadArticle/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,IAAI,OAAO,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/containers/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,aAAa,EAAQ,MAAM,OAAO,CAAC;AAEjD,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC,GAAG,CAA8C,CAAC;AACjG,eAAO,MAAM,cAAc,EAAE,aAAa,CAAC,GAAG,CAA0C,CAAC;AACzF,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,GAAG,CAAyC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/containers/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,aAAa,EAAQ,MAAM,OAAO,CAAC;AAEjD,eAAO,MAAM,kBAAkB,EAAE,aAAa,CAAC,GAAG,CAAuD,CAAC;AAC1G,eAAO,MAAM,cAAc,EAAE,aAAa,CAAC,GAAG,CAAmD,CAAC;AAClG,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,GAAG,CAAkD,CAAC"}
@@ -1,3 +1,3 @@
1
- export * from './useMessages';
2
- export * from './useStatus';
1
+ export * from './useMessages.ts';
2
+ export * from './useStatus.ts';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/hooks/index.ts"],"names":[],"mappings":"AAIA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/hooks/index.ts"],"names":[],"mappings":"AAIA,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useStatus.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useStatus.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAGrD,eAAO,MAAM,SAAS,WAAY,KAAK,YAAY,MAAM,YA6BxD,CAAC"}
1
+ {"version":3,"file":"useStatus.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useStatus.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAGrD,eAAO,MAAM,SAAS,WAAY,KAAK,YAAY,MAAM,YA+BxD,CAAC"}
@@ -1,6 +1,4 @@
1
- export * as ThreadPlugin from './ThreadPlugin';
2
- export * from '#hooks';
3
- export * from '#meta';
4
- export * from './paths';
1
+ export * as ThreadPlugin from './ThreadPlugin.ts';
2
+ export * from '#operations';
5
3
  export * from '#types';
6
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAC/C,cAAc,QAAQ,CAAC;AACvB,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAC;AAClD,cAAc,aAAa,CAAC;AAC5B,cAAc,QAAQ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import * as OperationHandlerSet from '@dxos/compute/OperationHandlerSet';
2
+ export declare const handlers: OperationHandlerSet.OperationHandlerSet;
3
+ //# sourceMappingURL=ThreadOperationHandlerSet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThreadOperationHandlerSet.d.ts","sourceRoot":"","sources":["../../../../src/operations/ThreadOperationHandlerSet.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,mBAAmB,MAAM,mCAAmC,CAAC;AAIzE,eAAO,MAAM,QAAQ,yCAQnB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"append-channel-message.d.ts","sourceRoot":"","sources":["../../../../src/operations/append-channel-message.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,SAAS,MAAM,yBAAyB,CAAC;AAIrD,OAAO,EAAsC,eAAe,EAAE,MAAM,QAAQ,CAAC;AAE7E,QAAA,MAAM,OAAO,EAAE,SAAS,CAAC,WAAW,CAAC,OAAO,eAAe,CAAC,oBAAoB,CAe7E,CAAC;eAEW,OAAO"}
1
+ {"version":3,"file":"append-channel-message.d.ts","sourceRoot":"","sources":["../../../../src/operations/append-channel-message.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,SAAS,MAAM,yBAAyB,CAAC;AAGrD,OAAO,EAAkB,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEzD,QAAA,MAAM,OAAO,EAAE,SAAS,CAAC,WAAW,CAAC,OAAO,eAAe,CAAC,oBAAoB,CAa7E,CAAC;eAEW,OAAO"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=channel-operations.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel-operations.test.d.ts","sourceRoot":"","sources":["../../../../src/operations/channel-operations.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import * as Operation from '@dxos/compute/Operation';
2
+ import { ThreadOperation } from '#types';
3
+ declare const handler: Operation.WithHandler<typeof ThreadOperation.ConnectChannel>;
4
+ export default handler;
5
+ //# sourceMappingURL=connect-channel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connect-channel.d.ts","sourceRoot":"","sources":["../../../../src/operations/connect-channel.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,SAAS,MAAM,yBAAyB,CAAC;AAGrD,OAAO,EAAkB,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEzD,QAAA,MAAM,OAAO,EAAE,SAAS,CAAC,WAAW,CAAC,OAAO,eAAe,CAAC,cAAc,CASzE,CAAC;eAEa,OAAO"}
@@ -0,0 +1,5 @@
1
+ import * as Operation from '@dxos/compute/Operation';
2
+ import { ThreadOperation } from '#types';
3
+ declare const handler: Operation.WithHandler<typeof ThreadOperation.DisconnectChannel>;
4
+ export default handler;
5
+ //# sourceMappingURL=disconnect-channel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"disconnect-channel.d.ts","sourceRoot":"","sources":["../../../../src/operations/disconnect-channel.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,SAAS,MAAM,yBAAyB,CAAC;AAGrD,OAAO,EAAkB,eAAe,EAAE,MAAM,QAAQ,CAAC;AAEzD,QAAA,MAAM,OAAO,EAAE,SAAS,CAAC,WAAW,CAAC,OAAO,eAAe,CAAC,iBAAiB,CAS5E,CAAC;eAEa,OAAO"}
@@ -0,0 +1,5 @@
1
+ import * as Operation from '@dxos/compute/Operation';
2
+ import { ThreadOperation } from '#types';
3
+ declare const handler: Operation.WithHandler<typeof ThreadOperation.GetChannelStatus>;
4
+ export default handler;
5
+ //# sourceMappingURL=get-channel-status.d.ts.map