@dxos/plugin-thread 0.7.4-staging.f7e8224 → 0.7.5-labs.071a3e2

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 (200) hide show
  1. package/dist/lib/browser/ThreadContainer-T4WIBHY6.mjs +19 -0
  2. package/dist/lib/browser/ThreadContainer-T4WIBHY6.mjs.map +7 -0
  3. package/dist/lib/browser/app-graph-builder-IANFWFYN.mjs +121 -0
  4. package/dist/lib/browser/app-graph-builder-IANFWFYN.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-52HWDLBR.mjs → chunk-5EQVG4L3.mjs} +33 -121
  6. package/dist/lib/browser/chunk-5EQVG4L3.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-ENERBDYI.mjs → chunk-636QDHE3.mjs} +3 -3
  8. package/dist/lib/browser/chunk-636QDHE3.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-BNEWNQBO.mjs +71 -0
  10. package/dist/lib/browser/chunk-BNEWNQBO.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-L4QHQNDC.mjs +18 -0
  12. package/dist/lib/browser/chunk-L4QHQNDC.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-NAO3LZMZ.mjs +16 -0
  14. package/dist/lib/browser/chunk-NAO3LZMZ.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-NO5AZLUZ.mjs +81 -0
  16. package/dist/lib/browser/chunk-NO5AZLUZ.mjs.map +7 -0
  17. package/dist/lib/browser/index.mjs +147 -1094
  18. package/dist/lib/browser/index.mjs.map +4 -4
  19. package/dist/lib/browser/intent-resolver-QFP6L3AF.mjs +287 -0
  20. package/dist/lib/browser/intent-resolver-QFP6L3AF.mjs.map +7 -0
  21. package/dist/lib/browser/markdown-2NBXKXCY.mjs +112 -0
  22. package/dist/lib/browser/markdown-2NBXKXCY.mjs.map +7 -0
  23. package/dist/lib/browser/meta.json +1 -1
  24. package/dist/lib/browser/react-surface-LDPZN456.mjs +424 -0
  25. package/dist/lib/browser/react-surface-LDPZN456.mjs.map +7 -0
  26. package/dist/lib/browser/settings-TKOPRXSU.mjs +22 -0
  27. package/dist/lib/browser/settings-TKOPRXSU.mjs.map +7 -0
  28. package/dist/lib/browser/state-GNFUURIC.mjs +33 -0
  29. package/dist/lib/browser/state-GNFUURIC.mjs.map +7 -0
  30. package/dist/lib/browser/types.mjs +6 -4
  31. package/dist/lib/node/{ThreadArticle-I7ADXDW3.cjs → ThreadContainer-4XACAVGV.cjs} +14 -13
  32. package/dist/lib/node/ThreadContainer-4XACAVGV.cjs.map +7 -0
  33. package/dist/lib/node/app-graph-builder-LFEDPJLK.cjs +135 -0
  34. package/dist/lib/node/app-graph-builder-LFEDPJLK.cjs.map +7 -0
  35. package/dist/lib/node/{ThreadMain-MRNJC3TI.cjs → chunk-346YIZVL.cjs} +26 -23
  36. package/dist/lib/node/chunk-346YIZVL.cjs.map +7 -0
  37. package/dist/lib/node/chunk-AUVKOX5Q.cjs +101 -0
  38. package/dist/lib/node/chunk-AUVKOX5Q.cjs.map +7 -0
  39. package/dist/lib/node/chunk-AWSTZ2KN.cjs +93 -0
  40. package/dist/lib/node/chunk-AWSTZ2KN.cjs.map +7 -0
  41. package/dist/lib/node/{chunk-IC2NICNC.cjs → chunk-F735VMTN.cjs} +7 -7
  42. package/dist/lib/node/chunk-F735VMTN.cjs.map +7 -0
  43. package/dist/lib/node/{meta.cjs → chunk-FPWNZ6TB.cjs} +13 -10
  44. package/dist/lib/node/chunk-FPWNZ6TB.cjs.map +7 -0
  45. package/dist/lib/node/{chunk-YCDM2SZM.cjs → chunk-VAZ3BCTU.cjs} +77 -168
  46. package/dist/lib/node/chunk-VAZ3BCTU.cjs.map +7 -0
  47. package/dist/lib/node/index.cjs +142 -1083
  48. package/dist/lib/node/index.cjs.map +4 -4
  49. package/dist/lib/node/intent-resolver-ZSOQILPJ.cjs +299 -0
  50. package/dist/lib/node/intent-resolver-ZSOQILPJ.cjs.map +7 -0
  51. package/dist/lib/node/markdown-FWRKMSKV.cjs +122 -0
  52. package/dist/lib/node/markdown-FWRKMSKV.cjs.map +7 -0
  53. package/dist/lib/node/meta.json +1 -1
  54. package/dist/lib/node/react-surface-MCQUT7BC.cjs +426 -0
  55. package/dist/lib/node/react-surface-MCQUT7BC.cjs.map +7 -0
  56. package/dist/lib/node/settings-TH4YSUVU.cjs +36 -0
  57. package/dist/lib/node/settings-TH4YSUVU.cjs.map +7 -0
  58. package/dist/lib/node/state-TQWEZ6B3.cjs +49 -0
  59. package/dist/lib/node/state-TQWEZ6B3.cjs.map +7 -0
  60. package/dist/lib/node/types.cjs +6 -4
  61. package/dist/lib/node/types.cjs.map +2 -2
  62. package/dist/lib/node-esm/ThreadContainer-FGFB25TQ.mjs +20 -0
  63. package/dist/lib/node-esm/ThreadContainer-FGFB25TQ.mjs.map +7 -0
  64. package/dist/lib/node-esm/app-graph-builder-IXHFRMCY.mjs +122 -0
  65. package/dist/lib/node-esm/app-graph-builder-IXHFRMCY.mjs.map +7 -0
  66. package/dist/lib/node-esm/chunk-3INUK3A6.mjs +20 -0
  67. package/dist/lib/node-esm/chunk-3INUK3A6.mjs.map +7 -0
  68. package/dist/lib/node-esm/chunk-B3CF35MY.mjs +82 -0
  69. package/dist/lib/node-esm/chunk-B3CF35MY.mjs.map +7 -0
  70. package/dist/lib/node-esm/{chunk-JG7MXH6O.mjs → chunk-DKCH2H5C.mjs} +33 -121
  71. package/dist/lib/node-esm/chunk-DKCH2H5C.mjs.map +7 -0
  72. package/dist/lib/node-esm/{chunk-7QRGG25F.mjs → chunk-FXUATCLW.mjs} +3 -3
  73. package/dist/lib/node-esm/chunk-FXUATCLW.mjs.map +7 -0
  74. package/dist/lib/node-esm/chunk-HLWJTUWZ.mjs +73 -0
  75. package/dist/lib/node-esm/chunk-HLWJTUWZ.mjs.map +7 -0
  76. package/dist/lib/node-esm/chunk-ZJITX3TO.mjs +17 -0
  77. package/dist/lib/node-esm/chunk-ZJITX3TO.mjs.map +7 -0
  78. package/dist/lib/node-esm/index.mjs +147 -1094
  79. package/dist/lib/node-esm/index.mjs.map +4 -4
  80. package/dist/lib/node-esm/intent-resolver-MHP4C2NZ.mjs +288 -0
  81. package/dist/lib/node-esm/intent-resolver-MHP4C2NZ.mjs.map +7 -0
  82. package/dist/lib/node-esm/markdown-6AQFDAW3.mjs +113 -0
  83. package/dist/lib/node-esm/markdown-6AQFDAW3.mjs.map +7 -0
  84. package/dist/lib/node-esm/meta.json +1 -1
  85. package/dist/lib/node-esm/react-surface-6JMVZUDM.mjs +425 -0
  86. package/dist/lib/node-esm/react-surface-6JMVZUDM.mjs.map +7 -0
  87. package/dist/lib/node-esm/settings-KEDRR7RM.mjs +23 -0
  88. package/dist/lib/node-esm/settings-KEDRR7RM.mjs.map +7 -0
  89. package/dist/lib/node-esm/state-7MLR27YG.mjs +34 -0
  90. package/dist/lib/node-esm/state-7MLR27YG.mjs.map +7 -0
  91. package/dist/lib/node-esm/types.mjs +6 -4
  92. package/dist/types/src/ThreadPlugin.d.ts +1 -3
  93. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  94. package/dist/types/src/capabilities/app-graph-builder.d.ts +180 -0
  95. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  96. package/dist/types/src/capabilities/capabilities.d.ts +15 -0
  97. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
  98. package/dist/types/src/capabilities/index.d.ts +187 -0
  99. package/dist/types/src/capabilities/index.d.ts.map +1 -0
  100. package/dist/types/src/capabilities/intent-resolver.d.ts +4 -0
  101. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -0
  102. package/dist/types/src/capabilities/markdown.d.ts +4 -0
  103. package/dist/types/src/capabilities/markdown.d.ts.map +1 -0
  104. package/dist/types/src/capabilities/react-surface.d.ts +4 -0
  105. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  106. package/dist/types/src/capabilities/settings.d.ts +4 -0
  107. package/dist/types/src/capabilities/settings.d.ts.map +1 -0
  108. package/dist/types/src/capabilities/state.d.ts +7 -0
  109. package/dist/types/src/capabilities/state.d.ts.map +1 -0
  110. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  111. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  112. package/dist/types/src/components/CommentContainer.d.ts +1 -1
  113. package/dist/types/src/components/CommentContainer.d.ts.map +1 -1
  114. package/dist/types/src/components/CommentsContainer.d.ts +2 -7
  115. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  116. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  117. package/dist/types/src/components/ThreadComplementary.d.ts +1 -6
  118. package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
  119. package/dist/types/src/components/ThreadContainer.d.ts +7 -0
  120. package/dist/types/src/components/ThreadContainer.d.ts.map +1 -0
  121. package/dist/types/src/components/command-extension.d.ts.map +1 -1
  122. package/dist/types/src/components/index.d.ts +3 -15
  123. package/dist/types/src/components/index.d.ts.map +1 -1
  124. package/dist/types/src/components/testing.d.ts +50 -66
  125. package/dist/types/src/components/testing.d.ts.map +1 -1
  126. package/dist/types/src/components/types.d.ts +5 -5
  127. package/dist/types/src/components/types.d.ts.map +1 -1
  128. package/dist/types/src/extensions/threads.d.ts +2 -2
  129. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  130. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  131. package/dist/types/src/index.d.ts +1 -3
  132. package/dist/types/src/index.d.ts.map +1 -1
  133. package/dist/types/src/meta.d.ts +1 -2
  134. package/dist/types/src/meta.d.ts.map +1 -1
  135. package/dist/types/src/translations.d.ts +3 -0
  136. package/dist/types/src/translations.d.ts.map +1 -1
  137. package/dist/types/src/types.d.ts +86 -22
  138. package/dist/types/src/types.d.ts.map +1 -1
  139. package/dist/types/tsconfig.tsbuildinfo +1 -0
  140. package/package.json +30 -38
  141. package/src/ThreadPlugin.tsx +108 -620
  142. package/src/capabilities/app-graph-builder.ts +119 -0
  143. package/src/capabilities/capabilities.ts +19 -0
  144. package/src/capabilities/index.ts +14 -0
  145. package/src/capabilities/intent-resolver.ts +239 -0
  146. package/src/capabilities/markdown.ts +18 -0
  147. package/src/capabilities/react-surface.tsx +62 -0
  148. package/src/capabilities/settings.ts +14 -0
  149. package/src/capabilities/state.ts +25 -0
  150. package/src/components/Chat.stories.tsx +26 -22
  151. package/src/components/ChatContainer.tsx +12 -10
  152. package/src/components/CommentContainer.tsx +21 -32
  153. package/src/components/CommentsContainer.tsx +1 -17
  154. package/src/components/MessageContainer.tsx +7 -5
  155. package/src/components/ThreadComplementary.tsx +91 -68
  156. package/src/components/ThreadContainer.tsx +22 -0
  157. package/src/components/ThreadSettings.tsx +3 -3
  158. package/src/components/command-extension.ts +2 -5
  159. package/src/components/index.ts +1 -2
  160. package/src/components/testing.ts +26 -22
  161. package/src/components/types.ts +5 -5
  162. package/src/extensions/threads.ts +16 -25
  163. package/src/hooks/analytics.ts +6 -10
  164. package/src/index.ts +1 -5
  165. package/src/meta.ts +1 -1
  166. package/src/translations.ts +1 -0
  167. package/src/types.ts +70 -38
  168. package/dist/lib/browser/ThreadArticle-6IXTL7CH.mjs +0 -18
  169. package/dist/lib/browser/ThreadArticle-6IXTL7CH.mjs.map +0 -7
  170. package/dist/lib/browser/ThreadMain-4IAS67KE.mjs +0 -26
  171. package/dist/lib/browser/ThreadMain-4IAS67KE.mjs.map +0 -7
  172. package/dist/lib/browser/chunk-52HWDLBR.mjs.map +0 -7
  173. package/dist/lib/browser/chunk-ENERBDYI.mjs.map +0 -7
  174. package/dist/lib/browser/chunk-XUHNZID5.mjs +0 -20
  175. package/dist/lib/browser/chunk-XUHNZID5.mjs.map +0 -7
  176. package/dist/lib/browser/meta.mjs +0 -11
  177. package/dist/lib/browser/meta.mjs.map +0 -7
  178. package/dist/lib/node/ThreadArticle-I7ADXDW3.cjs.map +0 -7
  179. package/dist/lib/node/ThreadMain-MRNJC3TI.cjs.map +0 -7
  180. package/dist/lib/node/chunk-IC2NICNC.cjs.map +0 -7
  181. package/dist/lib/node/chunk-XFO6D2LG.cjs +0 -39
  182. package/dist/lib/node/chunk-XFO6D2LG.cjs.map +0 -7
  183. package/dist/lib/node/chunk-YCDM2SZM.cjs.map +0 -7
  184. package/dist/lib/node/meta.cjs.map +0 -7
  185. package/dist/lib/node-esm/ThreadArticle-CJHYMF2W.mjs +0 -19
  186. package/dist/lib/node-esm/ThreadArticle-CJHYMF2W.mjs.map +0 -7
  187. package/dist/lib/node-esm/ThreadMain-VISGW4IF.mjs +0 -27
  188. package/dist/lib/node-esm/ThreadMain-VISGW4IF.mjs.map +0 -7
  189. package/dist/lib/node-esm/chunk-7QRGG25F.mjs.map +0 -7
  190. package/dist/lib/node-esm/chunk-I5MU54RT.mjs +0 -21
  191. package/dist/lib/node-esm/chunk-I5MU54RT.mjs.map +0 -7
  192. package/dist/lib/node-esm/chunk-JG7MXH6O.mjs.map +0 -7
  193. package/dist/lib/node-esm/meta.mjs +0 -12
  194. package/dist/lib/node-esm/meta.mjs.map +0 -7
  195. package/dist/types/src/components/ThreadArticle.d.ts +0 -5
  196. package/dist/types/src/components/ThreadArticle.d.ts.map +0 -1
  197. package/dist/types/src/components/ThreadMain.d.ts +0 -7
  198. package/dist/types/src/components/ThreadMain.d.ts.map +0 -1
  199. package/src/components/ThreadArticle.tsx +0 -18
  200. package/src/components/ThreadMain.tsx +0 -27
@@ -0,0 +1,20 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ ChatContainer
4
+ } from "./chunk-DKCH2H5C.mjs";
5
+ import "./chunk-HLWJTUWZ.mjs";
6
+ import "./chunk-FXUATCLW.mjs";
7
+
8
+ // packages/plugins/plugin-thread/src/components/ThreadContainer.tsx
9
+ import React from "react";
10
+ import { StackItem } from "@dxos/react-ui-stack";
11
+ var ThreadContainer = ({ role, ...props }) => {
12
+ return /* @__PURE__ */ React.createElement(StackItem.Content, {
13
+ toolbar: false
14
+ }, /* @__PURE__ */ React.createElement(ChatContainer, props));
15
+ };
16
+ var ThreadContainer_default = ThreadContainer;
17
+ export {
18
+ ThreadContainer_default as default
19
+ };
20
+ //# sourceMappingURL=ThreadContainer-FGFB25TQ.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ThreadContainer.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type ComponentProps } from 'react';\n\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { ChatContainer } from './ChatContainer';\n\nconst ThreadContainer = ({\n role,\n ...props\n}: Pick<ComponentProps<typeof ChatContainer>, 'thread' | 'context'> & { role: string }) => {\n return (\n <StackItem.Content toolbar={false}>\n <ChatContainer {...props} />\n </StackItem.Content>\n );\n};\n\nexport default ThreadContainer;\n"],
5
+ "mappings": ";;;;;;;;AAIA,OAAOA,WAAoC;AAE3C,SAASC,iBAAiB;AAI1B,IAAMC,kBAAkB,CAAC,EACvBC,MACA,GAAGC,MAAAA,MACiF;AACpF,SACE,sBAAA,cAACC,UAAUC,SAAO;IAACC,SAAS;KAC1B,sBAAA,cAACC,eAAkBJ,KAAAA,CAAAA;AAGzB;AAEA,IAAA,0BAAeF;",
6
+ "names": ["React", "StackItem", "ThreadContainer", "role", "props", "StackItem", "Content", "toolbar", "ChatContainer"]
7
+ }
@@ -0,0 +1,122 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ ThreadCapabilities
4
+ } from "./chunk-ZJITX3TO.mjs";
5
+ import {
6
+ THREAD_PLUGIN
7
+ } from "./chunk-FXUATCLW.mjs";
8
+
9
+ // packages/plugins/plugin-thread/src/capabilities/app-graph-builder.ts
10
+ import { Capabilities, contributes, createIntent } from "@dxos/app-framework";
11
+ import { ClientCapabilities } from "@dxos/plugin-client";
12
+ import { createExtension, toSignal } from "@dxos/plugin-graph";
13
+ import { ObservabilityAction } from "@dxos/plugin-observability/types";
14
+ import { memoizeQuery } from "@dxos/plugin-space";
15
+ import { getTypename, parseId, SpaceState } from "@dxos/react-client/echo";
16
+ var type = "orphan-comments-for-subject";
17
+ var icon = "ph--chat-text--regular";
18
+ var app_graph_builder_default = (context) => {
19
+ const resolver = (typename) => context.requestCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
20
+ return contributes(Capabilities.AppGraphBuilder, createExtension({
21
+ id: `${THREAD_PLUGIN}/comments-for-subject`,
22
+ resolver: ({ id }) => {
23
+ if (!id.endsWith("~comments")) {
24
+ return;
25
+ }
26
+ const client = context.requestCapability(ClientCapabilities.Client);
27
+ const [subjectId] = id.split("~");
28
+ const { spaceId, objectId } = parseId(subjectId);
29
+ const spaces = toSignal((onChange) => client.spaces.subscribe(() => onChange()).unsubscribe, () => client.spaces.get());
30
+ const space = spaces?.find((space2) => space2.id === spaceId && space2.state.get() === SpaceState.SPACE_READY);
31
+ if (!objectId) {
32
+ return {
33
+ id,
34
+ type,
35
+ data: null,
36
+ properties: {
37
+ icon,
38
+ label: [
39
+ "unnamed object threads label",
40
+ {
41
+ ns: THREAD_PLUGIN
42
+ }
43
+ ],
44
+ showResolvedThreads: false,
45
+ object: null,
46
+ space
47
+ }
48
+ };
49
+ }
50
+ const [object] = memoizeQuery(space, {
51
+ id: objectId
52
+ });
53
+ if (!object || !subjectId) {
54
+ return;
55
+ }
56
+ const meta = resolver(getTypename(object) ?? "");
57
+ const label = meta.label?.(object) || object.name || meta.placeholder || [
58
+ "unnamed object threads label",
59
+ {
60
+ ns: THREAD_PLUGIN
61
+ }
62
+ ];
63
+ const { getViewState } = context.requestCapability(ThreadCapabilities.State);
64
+ const viewState = getViewState(subjectId);
65
+ return {
66
+ id,
67
+ type,
68
+ data: null,
69
+ properties: {
70
+ icon,
71
+ label,
72
+ showResolvedThreads: viewState.showResolvedThreads,
73
+ object
74
+ }
75
+ };
76
+ },
77
+ actions: ({ node }) => {
78
+ const dataId = node.id.split("~").at(0);
79
+ if (!node.id.endsWith("~comments") || !dataId) {
80
+ return;
81
+ }
82
+ const [spaceId, objectId] = dataId.split(":");
83
+ const { getViewState } = context.requestCapability(ThreadCapabilities.State);
84
+ const viewState = getViewState(dataId);
85
+ const toggle = async () => {
86
+ const newToggleState = !viewState.showResolvedThreads;
87
+ viewState.showResolvedThreads = newToggleState;
88
+ const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);
89
+ await dispatch(createIntent(ObservabilityAction.SendEvent, {
90
+ name: "threads.toggle-show-resolved",
91
+ properties: {
92
+ spaceId,
93
+ threadId: objectId,
94
+ showResolved: newToggleState
95
+ }
96
+ }));
97
+ };
98
+ return [
99
+ {
100
+ id: `${THREAD_PLUGIN}/toggle-show-resolved/${node.id}`,
101
+ data: toggle,
102
+ properties: {
103
+ label: [
104
+ "toggle show resolved",
105
+ {
106
+ ns: THREAD_PLUGIN
107
+ }
108
+ ],
109
+ menuItemType: "toggle",
110
+ isChecked: viewState.showResolvedThreads,
111
+ testId: "threadPlugin.toggleShowResolved",
112
+ icon: viewState.showResolvedThreads ? "ph--eye-slash--regular" : "ph--eye--regular"
113
+ }
114
+ }
115
+ ];
116
+ }
117
+ }));
118
+ };
119
+ export {
120
+ app_graph_builder_default as default
121
+ };
122
+ //# sourceMappingURL=app-graph-builder-IXHFRMCY.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/app-graph-builder.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes, createIntent, type PluginsContext } from '@dxos/app-framework';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { createExtension, toSignal } from '@dxos/plugin-graph';\nimport { ObservabilityAction } from '@dxos/plugin-observability/types';\nimport { memoizeQuery } from '@dxos/plugin-space';\nimport { getTypename, parseId, SpaceState } from '@dxos/react-client/echo';\n\nimport { ThreadCapabilities } from './capabilities';\nimport { THREAD_PLUGIN } from '../meta';\n\nconst type = 'orphan-comments-for-subject';\nconst icon = 'ph--chat-text--regular';\n\nexport default (context: PluginsContext) => {\n const resolver = (typename: string) =>\n context.requestCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};\n\n return contributes(\n Capabilities.AppGraphBuilder,\n createExtension({\n id: `${THREAD_PLUGIN}/comments-for-subject`,\n resolver: ({ id }) => {\n if (!id.endsWith('~comments')) {\n return;\n }\n\n const client = context.requestCapability(ClientCapabilities.Client);\n const [subjectId] = id.split('~');\n const { spaceId, objectId } = parseId(subjectId);\n const spaces = toSignal(\n (onChange) => client.spaces.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.get(),\n );\n const space = spaces?.find((space) => space.id === spaceId && space.state.get() === SpaceState.SPACE_READY);\n if (!objectId) {\n // TODO(wittjosiah): Support comments for arbitrary subjects.\n // This is to ensure that the comments panel is not stuck on an old object.\n return {\n id,\n type,\n data: null,\n properties: {\n icon,\n label: ['unnamed object threads label', { ns: THREAD_PLUGIN }],\n showResolvedThreads: false,\n object: null,\n space,\n },\n };\n }\n\n const [object] = memoizeQuery(space, { id: objectId });\n if (!object || !subjectId) {\n return;\n }\n\n const meta = resolver(getTypename(object) ?? '');\n const label = meta.label?.(object) ||\n object.name ||\n meta.placeholder || ['unnamed object threads label', { ns: THREAD_PLUGIN }];\n\n const { getViewState } = context.requestCapability(ThreadCapabilities.State);\n const viewState = getViewState(subjectId);\n\n return {\n id,\n type,\n data: null,\n properties: {\n icon,\n label,\n showResolvedThreads: viewState.showResolvedThreads,\n object,\n },\n };\n },\n actions: ({ node }) => {\n const dataId = node.id.split('~').at(0);\n if (!node.id.endsWith('~comments') || !dataId) {\n return;\n }\n\n const [spaceId, objectId] = dataId.split(':');\n\n const { getViewState } = context.requestCapability(ThreadCapabilities.State);\n const viewState = getViewState(dataId);\n const toggle = async () => {\n const newToggleState = !viewState.showResolvedThreads;\n viewState.showResolvedThreads = newToggleState;\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n await dispatch(\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.toggle-show-resolved',\n properties: { spaceId, threadId: objectId, showResolved: newToggleState },\n }),\n );\n };\n\n return [\n {\n id: `${THREAD_PLUGIN}/toggle-show-resolved/${node.id}`,\n data: toggle,\n properties: {\n label: ['toggle show resolved', { ns: THREAD_PLUGIN }],\n menuItemType: 'toggle',\n isChecked: viewState.showResolvedThreads,\n testId: 'threadPlugin.toggleShowResolved',\n icon: viewState.showResolvedThreads ? 'ph--eye-slash--regular' : 'ph--eye--regular',\n },\n },\n ];\n },\n }),\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["Capabilities", "contributes", "createIntent", "ClientCapabilities", "createExtension", "toSignal", "ObservabilityAction", "memoizeQuery", "getTypename", "parseId", "SpaceState", "type", "icon", "context", "resolver", "typename", "requestCapabilities", "Capabilities", "Metadata", "find", "id", "metadata", "contributes", "AppGraphBuilder", "createExtension", "THREAD_PLUGIN", "endsWith", "client", "requestCapability", "ClientCapabilities", "Client", "subjectId", "split", "spaceId", "objectId", "parseId", "spaces", "toSignal", "onChange", "subscribe", "unsubscribe", "get", "space", "state", "SpaceState", "SPACE_READY", "data", "properties", "label", "ns", "showResolvedThreads", "object", "memoizeQuery", "meta", "getTypename", "name", "placeholder", "getViewState", "ThreadCapabilities", "State", "viewState", "actions", "node", "dataId", "at", "toggle", "newToggleState", "dispatchPromise", "dispatch", "IntentDispatcher", "createIntent", "ObservabilityAction", "SendEvent", "threadId", "showResolved", "menuItemType", "isChecked", "testId"]
7
+ }
@@ -0,0 +1,20 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+
3
+ // packages/plugins/plugin-thread/src/capabilities/index.ts
4
+ import { lazy } from "@dxos/app-framework";
5
+ var AppGraphBuilder = lazy(() => import("./app-graph-builder-IXHFRMCY.mjs"));
6
+ var IntentResolver = lazy(() => import("./intent-resolver-MHP4C2NZ.mjs"));
7
+ var Markdown = lazy(() => import("./markdown-6AQFDAW3.mjs"));
8
+ var ReactSurface = lazy(() => import("./react-surface-6JMVZUDM.mjs"));
9
+ var ThreadSettings = lazy(() => import("./settings-KEDRR7RM.mjs"));
10
+ var ThreadState = lazy(() => import("./state-7MLR27YG.mjs"));
11
+
12
+ export {
13
+ AppGraphBuilder,
14
+ IntentResolver,
15
+ Markdown,
16
+ ReactSurface,
17
+ ThreadSettings,
18
+ ThreadState
19
+ };
20
+ //# sourceMappingURL=chunk-3INUK3A6.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const Markdown = lazy(() => import('./markdown'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const ThreadSettings = lazy(() => import('./settings'));\nexport const ThreadState = lazy(() => import('./state'));\n\nexport * from './capabilities';\n"],
5
+ "mappings": ";;;AAIA,SAASA,YAAY;AAEd,IAAMC,kBAAkBC,KAAK,MAAM,OAAO,kCAAA,CAAA;AAC1C,IAAMC,iBAAiBD,KAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAME,WAAWF,KAAK,MAAM,OAAO,yBAAA,CAAA;AACnC,IAAMG,eAAeH,KAAK,MAAM,OAAO,8BAAA,CAAA;AACvC,IAAMI,iBAAiBJ,KAAK,MAAM,OAAO,yBAAA,CAAA;AACzC,IAAMK,cAAcL,KAAK,MAAM,OAAO,sBAAA,CAAA;",
6
+ "names": ["lazy", "AppGraphBuilder", "lazy", "IntentResolver", "Markdown", "ReactSurface", "ThreadSettings", "ThreadState"]
7
+ }
@@ -0,0 +1,82 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ THREAD_PLUGIN
4
+ } from "./chunk-FXUATCLW.mjs";
5
+
6
+ // packages/plugins/plugin-thread/src/types.ts
7
+ import { S } from "@dxos/echo-schema";
8
+ import { ChannelType, MessageType, ThreadType } from "@dxos/plugin-space/types";
9
+ import { EchoObjectSchema } from "@dxos/react-client/echo";
10
+ var ThreadAction;
11
+ (function(ThreadAction2) {
12
+ const THREAD_ACTION = `${THREAD_PLUGIN}/action`;
13
+ class Create extends S.TaggedClass()(`${THREAD_ACTION}/create`, {
14
+ input: S.Struct({
15
+ name: S.optional(S.String),
16
+ cursor: S.optional(S.String),
17
+ subject: S.optional(EchoObjectSchema)
18
+ }),
19
+ output: S.Struct({
20
+ object: S.Union(ChannelType, ThreadType)
21
+ })
22
+ }) {
23
+ }
24
+ ThreadAction2.Create = Create;
25
+ class Select extends S.TaggedClass()(`${THREAD_ACTION}/select`, {
26
+ input: S.Struct({
27
+ current: S.String,
28
+ skipOpen: S.optional(S.Boolean)
29
+ }),
30
+ output: S.Void
31
+ }) {
32
+ }
33
+ ThreadAction2.Select = Select;
34
+ class ToggleResolved extends S.TaggedClass()(`${THREAD_ACTION}/toggle-resolved`, {
35
+ input: S.Struct({
36
+ thread: ThreadType
37
+ }),
38
+ output: S.Void
39
+ }) {
40
+ }
41
+ ThreadAction2.ToggleResolved = ToggleResolved;
42
+ class Delete extends S.TaggedClass()(`${THREAD_ACTION}/delete`, {
43
+ input: S.Struct({
44
+ thread: ThreadType,
45
+ subject: EchoObjectSchema,
46
+ cursor: S.optional(S.String)
47
+ }),
48
+ output: S.Void
49
+ }) {
50
+ }
51
+ ThreadAction2.Delete = Delete;
52
+ class OnMessageAdd extends S.TaggedClass()(`${THREAD_ACTION}/on-message-add`, {
53
+ input: S.Struct({
54
+ thread: ThreadType,
55
+ subject: EchoObjectSchema
56
+ }),
57
+ output: S.Void
58
+ }) {
59
+ }
60
+ ThreadAction2.OnMessageAdd = OnMessageAdd;
61
+ class DeleteMessage extends S.TaggedClass()(`${THREAD_ACTION}/delete-message`, {
62
+ input: S.Struct({
63
+ thread: ThreadType,
64
+ subject: EchoObjectSchema,
65
+ messageId: S.String,
66
+ message: S.optional(MessageType),
67
+ messageIndex: S.optional(S.Number)
68
+ }),
69
+ output: S.Void
70
+ }) {
71
+ }
72
+ ThreadAction2.DeleteMessage = DeleteMessage;
73
+ })(ThreadAction || (ThreadAction = {}));
74
+ var ThreadSettingsSchema = S.mutable(S.Struct({
75
+ standalone: S.optional(S.Boolean)
76
+ }));
77
+
78
+ export {
79
+ ThreadAction,
80
+ ThreadSettingsSchema
81
+ };
82
+ //# sourceMappingURL=chunk-B3CF35MY.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { S } from '@dxos/echo-schema';\nimport { ChannelType, MessageType, ThreadType } from '@dxos/plugin-space/types';\nimport { EchoObjectSchema } from '@dxos/react-client/echo';\n\nimport { THREAD_PLUGIN } from './meta';\n\nexport namespace ThreadAction {\n const THREAD_ACTION = `${THREAD_PLUGIN}/action`;\n\n export class Create extends S.TaggedClass<Create>()(`${THREAD_ACTION}/create`, {\n input: S.Struct({\n name: S.optional(S.String),\n cursor: S.optional(S.String),\n subject: S.optional(EchoObjectSchema),\n }),\n output: S.Struct({\n object: S.Union(ChannelType, ThreadType),\n }),\n }) {}\n\n export class Select extends S.TaggedClass<Select>()(`${THREAD_ACTION}/select`, {\n input: S.Struct({\n current: S.String,\n skipOpen: S.optional(S.Boolean),\n }),\n output: S.Void,\n }) {}\n\n export class ToggleResolved extends S.TaggedClass<ToggleResolved>()(`${THREAD_ACTION}/toggle-resolved`, {\n input: S.Struct({\n thread: ThreadType,\n }),\n output: S.Void,\n }) {}\n\n export class Delete extends S.TaggedClass<Delete>()(`${THREAD_ACTION}/delete`, {\n input: S.Struct({\n thread: ThreadType,\n subject: EchoObjectSchema,\n cursor: S.optional(S.String),\n }),\n output: S.Void,\n }) {}\n\n // TODO(wittjosiah): Rename?\n export class OnMessageAdd extends S.TaggedClass<OnMessageAdd>()(`${THREAD_ACTION}/on-message-add`, {\n input: S.Struct({\n thread: ThreadType,\n subject: EchoObjectSchema,\n }),\n output: S.Void,\n }) {}\n\n export class DeleteMessage extends S.TaggedClass<DeleteMessage>()(`${THREAD_ACTION}/delete-message`, {\n input: S.Struct({\n thread: ThreadType,\n subject: EchoObjectSchema,\n messageId: S.String,\n message: S.optional(MessageType),\n messageIndex: S.optional(S.Number),\n }),\n output: S.Void,\n }) {}\n}\n\nexport const ThreadSettingsSchema = S.mutable(\n S.Struct({\n standalone: S.optional(S.Boolean),\n }),\n);\n\nexport type ThreadSettingsProps = S.Schema.Type<typeof ThreadSettingsSchema>;\n\nexport interface ThreadModel {\n root: ThreadType;\n}\n\ntype SubjectId = string;\nexport type ViewState = { showResolvedThreads: boolean };\nexport type ViewStore = Record<SubjectId, ViewState>;\n\nexport type ThreadState = {\n /** In-memory draft threads. */\n drafts: Record<string, ThreadType[]>;\n current?: string | undefined;\n};\n"],
5
+ "mappings": ";;;;;;AAIA,SAASA,SAAS;AAClB,SAASC,aAAaC,aAAaC,kBAAkB;AACrD,SAASC,wBAAwB;;UAIhBC,eAAAA;AACf,QAAMC,gBAAgB,GAAGC,aAAAA;EAElB,MAAMC,eAAeC,EAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,EAAEG,OAAO;MACdC,MAAMJ,EAAEK,SAASL,EAAEM,MAAM;MACzBC,QAAQP,EAAEK,SAASL,EAAEM,MAAM;MAC3BE,SAASR,EAAEK,SAASI,gBAAAA;IACtB,CAAA;IACAC,QAAQV,EAAEG,OAAO;MACfQ,QAAQX,EAAEY,MAAMC,aAAaC,UAAAA;IAC/B,CAAA;EACF,CAAA,EAAA;EAAI;gBATSf,SAAAA;EAWN,MAAMgB,eAAef,EAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,EAAEG,OAAO;MACda,SAAShB,EAAEM;MACXW,UAAUjB,EAAEK,SAASL,EAAEkB,OAAO;IAChC,CAAA;IACAR,QAAQV,EAAEmB;EACZ,CAAA,EAAA;EAAI;gBANSJ,SAAAA;EAQN,MAAMK,uBAAuBpB,EAAEC,YAAW,EAAmB,GAAGJ,aAAAA,oBAAiC;IACtGK,OAAOF,EAAEG,OAAO;MACdkB,QAAQP;IACV,CAAA;IACAJ,QAAQV,EAAEmB;EACZ,CAAA,EAAA;EAAI;gBALSC,iBAAAA;EAON,MAAME,eAAetB,EAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,EAAEG,OAAO;MACdkB,QAAQP;MACRN,SAASC;MACTF,QAAQP,EAAEK,SAASL,EAAEM,MAAM;IAC7B,CAAA;IACAI,QAAQV,EAAEmB;EACZ,CAAA,EAAA;EAAI;gBAPSG,SAAAA;EAUN,MAAMC,qBAAqBvB,EAAEC,YAAW,EAAiB,GAAGJ,aAAAA,mBAAgC;IACjGK,OAAOF,EAAEG,OAAO;MACdkB,QAAQP;MACRN,SAASC;IACX,CAAA;IACAC,QAAQV,EAAEmB;EACZ,CAAA,EAAA;EAAI;gBANSI,eAAAA;EAQN,MAAMC,sBAAsBxB,EAAEC,YAAW,EAAkB,GAAGJ,aAAAA,mBAAgC;IACnGK,OAAOF,EAAEG,OAAO;MACdkB,QAAQP;MACRN,SAASC;MACTgB,WAAWzB,EAAEM;MACboB,SAAS1B,EAAEK,SAASsB,WAAAA;MACpBC,cAAc5B,EAAEK,SAASL,EAAE6B,MAAM;IACnC,CAAA;IACAnB,QAAQV,EAAEmB;EACZ,CAAA,EAAA;EAAI;gBATSK,gBAAAA;AAUf,GAzDiB5B,iBAAAA,eAAAA,CAAAA,EAAAA;AA2DV,IAAMkC,uBAAuB9B,EAAE+B,QACpC/B,EAAEG,OAAO;EACP6B,YAAYhC,EAAEK,SAASL,EAAEkB,OAAO;AAClC,CAAA,CAAA;",
6
+ "names": ["S", "ChannelType", "MessageType", "ThreadType", "EchoObjectSchema", "ThreadAction", "THREAD_ACTION", "THREAD_PLUGIN", "Create", "S", "TaggedClass", "input", "Struct", "name", "optional", "String", "cursor", "subject", "EchoObjectSchema", "output", "object", "Union", "ChannelType", "ThreadType", "Select", "current", "skipOpen", "Boolean", "Void", "ToggleResolved", "thread", "Delete", "OnMessageAdd", "DeleteMessage", "messageId", "message", "MessageType", "messageIndex", "Number", "ThreadSettingsSchema", "mutable", "standalone"]
7
+ }
@@ -1,108 +1,44 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ useOnEditAnalytics,
4
+ useStatus
5
+ } from "./chunk-HLWJTUWZ.mjs";
2
6
  import {
3
7
  THREAD_ITEM,
4
8
  THREAD_PLUGIN
5
- } from "./chunk-7QRGG25F.mjs";
6
-
7
- // packages/plugins/plugin-thread/src/hooks/useStatus.ts
8
- import { useEffect, useState } from "react";
9
- var useStatus = (space, channel) => {
10
- const [processing, setProcessing] = useState(false);
11
- useEffect(() => {
12
- if (!space || !channel) {
13
- return;
14
- }
15
- const unsubscribe = space.listen(`status/${channel}`, (status) => {
16
- const { event } = status.payload ?? {};
17
- setProcessing(event === "processing");
18
- });
19
- const t = setInterval(() => {
20
- setProcessing((prev) => {
21
- if (typeof prev?.ts === "number" && Date.now() - prev.ts > 3e4) {
22
- return void 0;
23
- } else {
24
- return prev;
25
- }
26
- });
27
- }, 1e3);
28
- return () => {
29
- unsubscribe();
30
- clearInterval(t);
31
- };
32
- }, [
33
- space,
34
- channel
35
- ]);
36
- return processing;
37
- };
38
-
39
- // packages/plugins/plugin-thread/src/hooks/analytics.ts
40
- import { useCallback } from "react";
41
- import { useIntentDispatcher } from "@dxos/app-framework";
42
- import { ObservabilityAction } from "@dxos/plugin-observability/meta";
43
- import { getSpace } from "@dxos/react-client/echo";
44
- import { useOnTransition } from "@dxos/react-ui";
45
- var useAnalyticsCallback = (spaceId, name, meta) => {
46
- const dispatch = useIntentDispatcher();
47
- return useCallback((dynamicMeta) => {
48
- void dispatch({
49
- action: ObservabilityAction.SEND_EVENT,
50
- data: {
51
- name,
52
- properties: {
53
- ...meta,
54
- ...dynamicMeta,
55
- spaceId
56
- }
57
- }
58
- });
59
- }, [
60
- dispatch,
61
- name,
62
- meta,
63
- spaceId
64
- ]);
65
- };
66
- var useOnEditAnalytics = (message, editing) => {
67
- const space = getSpace(message);
68
- const onEditAnalytics = useAnalyticsCallback(space?.id, "threads.comment-edited", {
69
- messageId: message.id,
70
- messageLength: message.text.length
71
- });
72
- useOnTransition(editing, true, false, onEditAnalytics);
73
- };
9
+ } from "./chunk-FXUATCLW.mjs";
74
10
 
75
11
  // packages/plugins/plugin-thread/src/components/ChatContainer.tsx
76
- import React2, { useLayoutEffect, useMemo, useRef as useRef2, useState as useState3 } from "react";
77
- import { create } from "@dxos/live-object";
12
+ import React2, { useLayoutEffect, useMemo, useRef as useRef2, useState as useState2 } from "react";
13
+ import { Ref } from "@dxos/echo-schema";
14
+ import { create, makeRef, RefArray as RefArray2 } from "@dxos/live-object";
78
15
  import { MessageType } from "@dxos/plugin-space/types";
79
- import { fullyQualifiedId, getSpace as getSpace2, useMembers } from "@dxos/react-client/echo";
16
+ import { fullyQualifiedId, getSpace, useMembers } from "@dxos/react-client/echo";
80
17
  import { useIdentity as useIdentity2 } from "@dxos/react-client/halo";
81
18
  import { Icon, ScrollArea, useThemeContext as useThemeContext2, useTranslation as useTranslation2 } from "@dxos/react-ui";
82
19
  import { createBasicExtensions as createBasicExtensions2, createThemeExtensions as createThemeExtensions2, listener } from "@dxos/react-ui-editor";
83
20
  import { StackItem } from "@dxos/react-ui-stack";
84
21
  import { mx as mx3 } from "@dxos/react-ui-theme";
85
22
  import { MessageTextbox, Thread, ThreadFooter, threadLayout } from "@dxos/react-ui-thread";
86
- import { nonNullable as nonNullable2 } from "@dxos/util";
87
23
 
88
24
  // packages/plugins/plugin-thread/src/components/MessageContainer.tsx
89
25
  import { EditorView } from "@codemirror/view";
90
26
  import { Check, PencilSimple, X } from "@phosphor-icons/react";
91
- import React, { forwardRef, useCallback as useCallback2, useEffect as useEffect2, useRef, useState as useState2 } from "react";
27
+ import React, { forwardRef, useCallback, useEffect, useRef, useState } from "react";
92
28
  import { Surface } from "@dxos/app-framework";
29
+ import { RefArray } from "@dxos/live-object";
93
30
  import { PublicKey } from "@dxos/react-client";
94
31
  import { useIdentity } from "@dxos/react-client/halo";
95
- import { Button, ButtonGroup, Tooltip, useOnTransition as useOnTransition2, useThemeContext, useTranslation } from "@dxos/react-ui";
32
+ import { Button, ButtonGroup, Tooltip, useOnTransition, useThemeContext, useTranslation } from "@dxos/react-ui";
96
33
  import { createBasicExtensions, createThemeExtensions, useTextEditor } from "@dxos/react-ui-editor";
97
34
  import { Mosaic } from "@dxos/react-ui-mosaic";
98
35
  import { getSize, hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx as mx2 } from "@dxos/react-ui-theme";
99
36
  import { MessageHeading, MessageRoot } from "@dxos/react-ui-thread";
100
- import { nonNullable } from "@dxos/util";
101
37
 
102
38
  // packages/plugins/plugin-thread/src/components/command-extension.ts
103
39
  import { StreamLanguage, HighlightStyle, syntaxHighlighting } from "@codemirror/language";
104
40
  import { tags } from "@dxos/react-ui-editor";
105
- import { mx, tagRoot } from "@dxos/react-ui-theme";
41
+ import { mx } from "@dxos/react-ui-theme";
106
42
  var parser = StreamLanguage.define({
107
43
  startState: () => ({
108
44
  count: 0
@@ -122,9 +58,7 @@ var parser = StreamLanguage.define({
122
58
  var styles = HighlightStyle.define([
123
59
  {
124
60
  tag: tags.tagName,
125
- class: mx(tagRoot({
126
- palette: "cyan"
127
- }), "text-baseText font-medium")
61
+ class: mx("dx-tag dx-tag--indigo text-baseText font-medium")
128
62
  }
129
63
  ]);
130
64
  var command = [
@@ -157,8 +91,8 @@ var MessageContainer = ({ message, members, onDelete }) => {
157
91
  const senderIdentity = members.find((member) => message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey))?.identity;
158
92
  const messageMetadata = getMessageMetadata(message.id, senderIdentity);
159
93
  const userIsAuthor = useIdentity()?.identityKey.toHex() === messageMetadata.authorId;
160
- const [editing, setEditing] = useState2(false);
161
- const handleDelete = useCallback2(() => onDelete?.(message.id), [
94
+ const [editing, setEditing] = useState(false);
95
+ const handleDelete = useCallback(() => onDelete?.(message.id), [
162
96
  message,
163
97
  onDelete
164
98
  ]);
@@ -189,9 +123,7 @@ var MessageContainer = ({ message, members, onDelete }) => {
189
123
  className: getSize(4)
190
124
  }) : /* @__PURE__ */ React.createElement(PencilSimple, {
191
125
  className: getSize(4)
192
- }))), /* @__PURE__ */ React.createElement(Tooltip.Portal, null, /* @__PURE__ */ React.createElement(Tooltip.Content, {
193
- classNames: "z-[21]"
194
- }, editLabel, /* @__PURE__ */ React.createElement(Tooltip.Arrow, null)))), onDelete && /* @__PURE__ */ React.createElement(Tooltip.Root, null, /* @__PURE__ */ React.createElement(Tooltip.Trigger, {
126
+ }))), /* @__PURE__ */ React.createElement(Tooltip.Portal, null, /* @__PURE__ */ React.createElement(Tooltip.Content, null, editLabel, /* @__PURE__ */ React.createElement(Tooltip.Arrow, null)))), onDelete && /* @__PURE__ */ React.createElement(Tooltip.Root, null, /* @__PURE__ */ React.createElement(Tooltip.Trigger, {
195
127
  asChild: true
196
128
  }, /* @__PURE__ */ React.createElement(Button, {
197
129
  variant: "ghost",
@@ -202,13 +134,11 @@ var MessageContainer = ({ message, members, onDelete }) => {
202
134
  className: "sr-only"
203
135
  }, deleteLabel), /* @__PURE__ */ React.createElement(X, {
204
136
  className: getSize(4)
205
- }))), /* @__PURE__ */ React.createElement(Tooltip.Portal, null, /* @__PURE__ */ React.createElement(Tooltip.Content, {
206
- classNames: "z-[21]"
207
- }, deleteLabel, /* @__PURE__ */ React.createElement(Tooltip.Arrow, null)))))), /* @__PURE__ */ React.createElement(TextboxBlock, {
137
+ }))), /* @__PURE__ */ React.createElement(Tooltip.Portal, null, /* @__PURE__ */ React.createElement(Tooltip.Content, null, deleteLabel, /* @__PURE__ */ React.createElement(Tooltip.Arrow, null)))))), /* @__PURE__ */ React.createElement(TextboxBlock, {
208
138
  message,
209
139
  isAuthor: userIsAuthor,
210
140
  editing
211
- }), message.parts?.filter(nonNullable).map((part, index) => /* @__PURE__ */ React.createElement(MessagePart, {
141
+ }), RefArray.allResolvedTargets(message.parts ?? []).map((part, index) => /* @__PURE__ */ React.createElement(MessagePart, {
212
142
  key: index,
213
143
  part
214
144
  })));
@@ -226,15 +156,15 @@ var MessagePart = ({ part }) => {
226
156
  var TextboxBlock = ({ message, isAuthor, editing }) => {
227
157
  const { themeMode } = useThemeContext();
228
158
  const inMemoryContentRef = useRef(message.text);
229
- const handleDocumentChange = useCallback2((newState) => {
159
+ const handleDocumentChange = useCallback((newState) => {
230
160
  inMemoryContentRef.current = newState;
231
161
  }, []);
232
- const saveDocumentChange = useCallback2(() => {
162
+ const saveDocumentChange = useCallback(() => {
233
163
  message.text = inMemoryContentRef.current;
234
164
  }, [
235
165
  message
236
166
  ]);
237
- useOnTransition2(editing, true, false, saveDocumentChange);
167
+ useOnTransition(editing, true, false, saveDocumentChange);
238
168
  const { parentRef, focusAttributes, view } = useTextEditor(() => ({
239
169
  initialValue: message.text,
240
170
  extensions: [
@@ -258,7 +188,7 @@ var TextboxBlock = ({ message, isAuthor, editing }) => {
258
188
  themeMode,
259
189
  handleDocumentChange
260
190
  ]);
261
- useEffect2(() => {
191
+ useEffect(() => {
262
192
  editing && view?.focus();
263
193
  }, [
264
194
  editing,
@@ -286,7 +216,7 @@ var MessageBlockObjectTile = /* @__PURE__ */ forwardRef(({ draggableStyle, dragg
286
216
  role: "card",
287
217
  limit: 1,
288
218
  data: {
289
- content: item
219
+ subject: item
290
220
  },
291
221
  draggableProps,
292
222
  fallback: title,
@@ -295,29 +225,15 @@ var MessageBlockObjectTile = /* @__PURE__ */ forwardRef(({ draggableStyle, dragg
295
225
  });
296
226
 
297
227
  // packages/plugins/plugin-thread/src/components/ChatContainer.tsx
298
- var ChatHeading = ({ attendableId }) => {
299
- const { t } = useTranslation2(THREAD_PLUGIN);
300
- return /* @__PURE__ */ React2.createElement("div", {
301
- role: "none",
302
- className: "flex items-center"
303
- }, /* @__PURE__ */ React2.createElement(StackItem.SigilButton, {
304
- attendableId
305
- }, /* @__PURE__ */ React2.createElement(Icon, {
306
- icon: "ph--chat--regular",
307
- size: 5
308
- })), /* @__PURE__ */ React2.createElement(StackItem.HeadingLabel, {
309
- attendableId
310
- }, t("chat heading")));
311
- };
312
228
  var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
313
229
  const identity = useIdentity2();
314
- const space = getSpace2(thread);
230
+ const space = getSpace(thread);
315
231
  const members = useMembers(space?.key);
316
232
  const activity = useStatus(space, fullyQualifiedId(thread));
317
233
  const { t } = useTranslation2(THREAD_PLUGIN);
318
- const [_count, _setCount] = useState3(0);
234
+ const [_count, _setCount] = useState2(0);
319
235
  const rerenderEditor = () => _setCount((count) => count + 1);
320
- const [autoFocus, setAutoFocus] = useState3(autoFocusTextbox);
236
+ const [autoFocus, setAutoFocus] = useState2(autoFocusTextbox);
321
237
  const threadScrollRef = useRef2(null);
322
238
  const { themeMode } = useThemeContext2();
323
239
  const textboxMetadata = getMessageMetadata(fullyQualifiedId(thread), identity);
@@ -348,14 +264,14 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
348
264
  if (!messageRef.current?.length) {
349
265
  return false;
350
266
  }
351
- thread.messages.push(create(MessageType, {
267
+ thread.messages.push(makeRef(create(MessageType, {
352
268
  sender: {
353
269
  identityKey: identity.identityKey.toHex()
354
270
  },
355
271
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
356
272
  text: messageRef.current,
357
- context
358
- }));
273
+ context: context ? makeRef(context) : void 0
274
+ })));
359
275
  messageRef.current = "";
360
276
  setAutoFocus(true);
361
277
  scrollToEnd("smooth");
@@ -363,7 +279,7 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
363
279
  return true;
364
280
  };
365
281
  const handleDelete = (id) => {
366
- const messageIndex = thread.messages.filter(nonNullable2).findIndex((message) => message.id === id);
282
+ const messageIndex = thread.messages.findIndex(Ref.hasObjectId(id));
367
283
  if (messageIndex !== -1) {
368
284
  thread.messages.splice(messageIndex, 1);
369
285
  }
@@ -379,7 +295,7 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
379
295
  }, /* @__PURE__ */ React2.createElement("div", {
380
296
  role: "none",
381
297
  className: mx3(threadLayout, "place-self-end")
382
- }, thread.messages.filter(nonNullable2).map((message) => /* @__PURE__ */ React2.createElement(MessageContainer, {
298
+ }, RefArray2.allResolvedTargets(thread.messages ?? []).map((message) => /* @__PURE__ */ React2.createElement(MessageContainer, {
383
299
  key: message.id,
384
300
  message,
385
301
  members,
@@ -400,12 +316,8 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
400
316
 
401
317
  export {
402
318
  command,
403
- useStatus,
404
- useAnalyticsCallback,
405
- useOnEditAnalytics,
406
319
  getMessageMetadata,
407
320
  MessageContainer,
408
- ChatHeading,
409
321
  ChatContainer
410
322
  };
411
- //# sourceMappingURL=chunk-JG7MXH6O.mjs.map
323
+ //# sourceMappingURL=chunk-DKCH2H5C.mjs.map