@dxos/plugin-thread 0.7.4 → 0.7.5-labs.a279d8c

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 (197) hide show
  1. package/dist/lib/browser/ThreadContainer-4VLBSBI7.mjs +19 -0
  2. package/dist/lib/browser/ThreadContainer-4VLBSBI7.mjs.map +7 -0
  3. package/dist/lib/browser/app-graph-builder-Q7A2ZRUA.mjs +121 -0
  4. package/dist/lib/browser/app-graph-builder-Q7A2ZRUA.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-2B3EXYZ7.mjs +18 -0
  6. package/dist/lib/browser/chunk-2B3EXYZ7.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-52HWDLBR.mjs → chunk-GQONSZ3J.mjs} +31 -117
  12. package/dist/lib/browser/chunk-GQONSZ3J.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-PIEZ3LKQ.mjs +275 -0
  20. package/dist/lib/browser/intent-resolver-PIEZ3LKQ.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-CHCZO4TI.mjs +412 -0
  25. package/dist/lib/browser/react-surface-CHCZO4TI.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-VOYLV4UL.cjs} +14 -13
  32. package/dist/lib/node/ThreadContainer-VOYLV4UL.cjs.map +7 -0
  33. package/dist/lib/node/app-graph-builder-ZXW5KUDK.cjs +135 -0
  34. package/dist/lib/node/app-graph-builder-ZXW5KUDK.cjs.map +7 -0
  35. package/dist/lib/node/{chunk-YCDM2SZM.cjs → chunk-6PUGKCPR.cjs} +76 -165
  36. package/dist/lib/node/chunk-6PUGKCPR.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/{ThreadMain-MRNJC3TI.cjs → chunk-ZRN7B26W.cjs} +26 -23
  46. package/dist/lib/node/chunk-ZRN7B26W.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-X5O3SVLF.cjs +287 -0
  50. package/dist/lib/node/intent-resolver-X5O3SVLF.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-LO7S2HPR.cjs +414 -0
  55. package/dist/lib/node/react-surface-LO7S2HPR.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-7DZY2MWA.mjs +20 -0
  63. package/dist/lib/node-esm/ThreadContainer-7DZY2MWA.mjs.map +7 -0
  64. package/dist/lib/node-esm/app-graph-builder-ATS6HGE6.mjs +122 -0
  65. package/dist/lib/node-esm/app-graph-builder-ATS6HGE6.mjs.map +7 -0
  66. package/dist/lib/node-esm/chunk-B3CF35MY.mjs +82 -0
  67. package/dist/lib/node-esm/chunk-B3CF35MY.mjs.map +7 -0
  68. package/dist/lib/node-esm/{chunk-JG7MXH6O.mjs → chunk-DYFIKKDT.mjs} +31 -117
  69. package/dist/lib/node-esm/chunk-DYFIKKDT.mjs.map +7 -0
  70. package/dist/lib/node-esm/{chunk-7QRGG25F.mjs → chunk-FXUATCLW.mjs} +3 -3
  71. package/dist/lib/node-esm/chunk-FXUATCLW.mjs.map +7 -0
  72. package/dist/lib/node-esm/chunk-GS2OILYF.mjs +20 -0
  73. package/dist/lib/node-esm/chunk-GS2OILYF.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-XJWT5X6T.mjs +276 -0
  81. package/dist/lib/node-esm/intent-resolver-XJWT5X6T.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-LAF3QIPB.mjs +413 -0
  86. package/dist/lib/node-esm/react-surface-LAF3QIPB.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/index.d.ts +3 -15
  122. package/dist/types/src/components/index.d.ts.map +1 -1
  123. package/dist/types/src/components/testing.d.ts +50 -66
  124. package/dist/types/src/components/testing.d.ts.map +1 -1
  125. package/dist/types/src/components/types.d.ts +5 -5
  126. package/dist/types/src/components/types.d.ts.map +1 -1
  127. package/dist/types/src/extensions/threads.d.ts +2 -2
  128. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  129. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  130. package/dist/types/src/index.d.ts +1 -3
  131. package/dist/types/src/index.d.ts.map +1 -1
  132. package/dist/types/src/meta.d.ts +1 -2
  133. package/dist/types/src/meta.d.ts.map +1 -1
  134. package/dist/types/src/translations.d.ts +3 -0
  135. package/dist/types/src/translations.d.ts.map +1 -1
  136. package/dist/types/src/types.d.ts +86 -22
  137. package/dist/types/src/types.d.ts.map +1 -1
  138. package/dist/types/tsconfig.tsbuildinfo +1 -0
  139. package/package.json +30 -38
  140. package/src/ThreadPlugin.tsx +109 -620
  141. package/src/capabilities/app-graph-builder.ts +120 -0
  142. package/src/capabilities/capabilities.ts +19 -0
  143. package/src/capabilities/index.ts +14 -0
  144. package/src/capabilities/intent-resolver.ts +223 -0
  145. package/src/capabilities/markdown.ts +18 -0
  146. package/src/capabilities/react-surface.tsx +61 -0
  147. package/src/capabilities/settings.ts +14 -0
  148. package/src/capabilities/state.ts +25 -0
  149. package/src/components/Chat.stories.tsx +26 -22
  150. package/src/components/ChatContainer.tsx +13 -11
  151. package/src/components/CommentContainer.tsx +21 -32
  152. package/src/components/CommentsContainer.tsx +1 -17
  153. package/src/components/MessageContainer.tsx +7 -5
  154. package/src/components/ThreadComplementary.tsx +88 -68
  155. package/src/components/ThreadContainer.tsx +22 -0
  156. package/src/components/index.ts +1 -2
  157. package/src/components/testing.ts +26 -22
  158. package/src/components/types.ts +5 -5
  159. package/src/extensions/threads.ts +16 -25
  160. package/src/hooks/analytics.ts +6 -10
  161. package/src/index.ts +1 -5
  162. package/src/meta.ts +1 -1
  163. package/src/translations.ts +1 -0
  164. package/src/types.ts +70 -38
  165. package/dist/lib/browser/ThreadArticle-6IXTL7CH.mjs +0 -18
  166. package/dist/lib/browser/ThreadArticle-6IXTL7CH.mjs.map +0 -7
  167. package/dist/lib/browser/ThreadMain-4IAS67KE.mjs +0 -26
  168. package/dist/lib/browser/ThreadMain-4IAS67KE.mjs.map +0 -7
  169. package/dist/lib/browser/chunk-52HWDLBR.mjs.map +0 -7
  170. package/dist/lib/browser/chunk-ENERBDYI.mjs.map +0 -7
  171. package/dist/lib/browser/chunk-XUHNZID5.mjs +0 -20
  172. package/dist/lib/browser/chunk-XUHNZID5.mjs.map +0 -7
  173. package/dist/lib/browser/meta.mjs +0 -11
  174. package/dist/lib/browser/meta.mjs.map +0 -7
  175. package/dist/lib/node/ThreadArticle-I7ADXDW3.cjs.map +0 -7
  176. package/dist/lib/node/ThreadMain-MRNJC3TI.cjs.map +0 -7
  177. package/dist/lib/node/chunk-IC2NICNC.cjs.map +0 -7
  178. package/dist/lib/node/chunk-XFO6D2LG.cjs +0 -39
  179. package/dist/lib/node/chunk-XFO6D2LG.cjs.map +0 -7
  180. package/dist/lib/node/chunk-YCDM2SZM.cjs.map +0 -7
  181. package/dist/lib/node/meta.cjs.map +0 -7
  182. package/dist/lib/node-esm/ThreadArticle-CJHYMF2W.mjs +0 -19
  183. package/dist/lib/node-esm/ThreadArticle-CJHYMF2W.mjs.map +0 -7
  184. package/dist/lib/node-esm/ThreadMain-VISGW4IF.mjs +0 -27
  185. package/dist/lib/node-esm/ThreadMain-VISGW4IF.mjs.map +0 -7
  186. package/dist/lib/node-esm/chunk-7QRGG25F.mjs.map +0 -7
  187. package/dist/lib/node-esm/chunk-I5MU54RT.mjs +0 -21
  188. package/dist/lib/node-esm/chunk-I5MU54RT.mjs.map +0 -7
  189. package/dist/lib/node-esm/chunk-JG7MXH6O.mjs.map +0 -7
  190. package/dist/lib/node-esm/meta.mjs +0 -12
  191. package/dist/lib/node-esm/meta.mjs.map +0 -7
  192. package/dist/types/src/components/ThreadArticle.d.ts +0 -5
  193. package/dist/types/src/components/ThreadArticle.d.ts.map +0 -1
  194. package/dist/types/src/components/ThreadMain.d.ts +0 -7
  195. package/dist/types/src/components/ThreadMain.d.ts.map +0 -1
  196. package/src/components/ThreadArticle.tsx +0 -18
  197. package/src/components/ThreadMain.tsx +0 -27
@@ -0,0 +1,19 @@
1
+ import {
2
+ ChatContainer
3
+ } from "./chunk-GQONSZ3J.mjs";
4
+ import "./chunk-BNEWNQBO.mjs";
5
+ import "./chunk-636QDHE3.mjs";
6
+
7
+ // packages/plugins/plugin-thread/src/components/ThreadContainer.tsx
8
+ import React from "react";
9
+ import { StackItem } from "@dxos/react-ui-stack";
10
+ var ThreadContainer = ({ role, ...props }) => {
11
+ return /* @__PURE__ */ React.createElement(StackItem.Content, {
12
+ toolbar: false
13
+ }, /* @__PURE__ */ React.createElement(ChatContainer, props));
14
+ };
15
+ var ThreadContainer_default = ThreadContainer;
16
+ export {
17
+ ThreadContainer_default as default
18
+ };
19
+ //# sourceMappingURL=ThreadContainer-4VLBSBI7.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,121 @@
1
+ import {
2
+ ThreadCapabilities
3
+ } from "./chunk-NAO3LZMZ.mjs";
4
+ import {
5
+ THREAD_PLUGIN
6
+ } from "./chunk-636QDHE3.mjs";
7
+
8
+ // packages/plugins/plugin-thread/src/capabilities/app-graph-builder.ts
9
+ import { Capabilities, contributes, createIntent } from "@dxos/app-framework";
10
+ import { ClientCapabilities } from "@dxos/plugin-client";
11
+ import { createExtension, toSignal } from "@dxos/plugin-graph";
12
+ import { ObservabilityAction } from "@dxos/plugin-observability/types";
13
+ import { memoizeQuery } from "@dxos/plugin-space";
14
+ import { getTypename, parseId, SpaceState } from "@dxos/react-client/echo";
15
+ var type = "orphan-comments-for-subject";
16
+ var icon = "ph--chat-text--regular";
17
+ var app_graph_builder_default = (context) => {
18
+ const resolver = (typename) => context.requestCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
19
+ return contributes(Capabilities.AppGraphBuilder, createExtension({
20
+ id: `${THREAD_PLUGIN}/comments-for-subject`,
21
+ resolver: ({ id }) => {
22
+ if (!id.endsWith("~comments")) {
23
+ return;
24
+ }
25
+ const client = context.requestCapability(ClientCapabilities.Client);
26
+ const [subjectId] = id.split("~");
27
+ const { spaceId, objectId } = parseId(subjectId);
28
+ const spaces = toSignal((onChange) => client.spaces.subscribe(() => onChange()).unsubscribe, () => client.spaces.get());
29
+ const space = spaces?.find((space2) => space2.id === spaceId && space2.state.get() === SpaceState.SPACE_READY);
30
+ if (!objectId) {
31
+ return {
32
+ id,
33
+ type,
34
+ data: null,
35
+ properties: {
36
+ icon,
37
+ label: [
38
+ "unnamed object threads label",
39
+ {
40
+ ns: THREAD_PLUGIN
41
+ }
42
+ ],
43
+ showResolvedThreads: false,
44
+ object: null,
45
+ space
46
+ }
47
+ };
48
+ }
49
+ const [object] = memoizeQuery(space, {
50
+ id: objectId
51
+ });
52
+ if (!object || !subjectId) {
53
+ return;
54
+ }
55
+ const meta = resolver(getTypename(object) ?? "");
56
+ const label = meta.label?.(object) || object.name || meta.placeholder || [
57
+ "unnamed object threads label",
58
+ {
59
+ ns: THREAD_PLUGIN
60
+ }
61
+ ];
62
+ const { getViewState } = context.requestCapability(ThreadCapabilities.State);
63
+ const viewState = getViewState(subjectId);
64
+ return {
65
+ id,
66
+ type,
67
+ data: null,
68
+ properties: {
69
+ icon,
70
+ label,
71
+ showResolvedThreads: viewState.showResolvedThreads,
72
+ object
73
+ }
74
+ };
75
+ },
76
+ actions: ({ node }) => {
77
+ const dataId = node.id.split("~").at(0);
78
+ if (!node.id.endsWith("~comments") || !dataId) {
79
+ return;
80
+ }
81
+ const [spaceId, objectId] = dataId.split(":");
82
+ const { getViewState } = context.requestCapability(ThreadCapabilities.State);
83
+ const viewState = getViewState(dataId);
84
+ const toggle = async () => {
85
+ const newToggleState = !viewState.showResolvedThreads;
86
+ viewState.showResolvedThreads = newToggleState;
87
+ const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);
88
+ await dispatch(createIntent(ObservabilityAction.SendEvent, {
89
+ name: "threads.toggle-show-resolved",
90
+ properties: {
91
+ spaceId,
92
+ threadId: objectId,
93
+ showResolved: newToggleState
94
+ }
95
+ }));
96
+ };
97
+ return [
98
+ {
99
+ id: `${THREAD_PLUGIN}/toggle-show-resolved/${node.id}`,
100
+ data: toggle,
101
+ properties: {
102
+ label: [
103
+ "toggle show resolved",
104
+ {
105
+ ns: THREAD_PLUGIN
106
+ }
107
+ ],
108
+ menuItemType: "toggle",
109
+ isChecked: viewState.showResolvedThreads,
110
+ testId: "threadPlugin.toggleShowResolved",
111
+ icon: viewState.showResolvedThreads ? "ph--eye-slash--regular" : "ph--eye--regular"
112
+ }
113
+ }
114
+ ];
115
+ }
116
+ }));
117
+ };
118
+ export {
119
+ app_graph_builder_default as default
120
+ };
121
+ //# sourceMappingURL=app-graph-builder-Q7A2ZRUA.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 // TODO(Zan): Find util (or make one).\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,18 @@
1
+ // packages/plugins/plugin-thread/src/capabilities/index.ts
2
+ import { lazy } from "@dxos/app-framework";
3
+ var AppGraphBuilder = lazy(() => import("./app-graph-builder-Q7A2ZRUA.mjs"));
4
+ var IntentResolver = lazy(() => import("./intent-resolver-PIEZ3LKQ.mjs"));
5
+ var Markdown = lazy(() => import("./markdown-2NBXKXCY.mjs"));
6
+ var ReactSurface = lazy(() => import("./react-surface-CHCZO4TI.mjs"));
7
+ var ThreadSettings = lazy(() => import("./settings-TKOPRXSU.mjs"));
8
+ var ThreadState = lazy(() => import("./state-GNFUURIC.mjs"));
9
+
10
+ export {
11
+ AppGraphBuilder,
12
+ IntentResolver,
13
+ Markdown,
14
+ ReactSurface,
15
+ ThreadSettings,
16
+ ThreadState
17
+ };
18
+ //# sourceMappingURL=chunk-2B3EXYZ7.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
+ }
@@ -1,7 +1,7 @@
1
1
  // packages/plugins/plugin-thread/src/meta.ts
2
2
  var THREAD_PLUGIN = "dxos.org/plugin/thread";
3
3
  var THREAD_ITEM = `${THREAD_PLUGIN}/item`;
4
- var meta_default = {
4
+ var meta = {
5
5
  id: THREAD_PLUGIN,
6
6
  name: "Threads",
7
7
  description: "Add comment threads to objects.",
@@ -12,6 +12,6 @@ var meta_default = {
12
12
  export {
13
13
  THREAD_PLUGIN,
14
14
  THREAD_ITEM,
15
- meta_default
15
+ meta
16
16
  };
17
- //# sourceMappingURL=chunk-ENERBDYI.mjs.map
17
+ //# sourceMappingURL=chunk-636QDHE3.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/meta.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const THREAD_PLUGIN = 'dxos.org/plugin/thread';\nexport const THREAD_ITEM = `${THREAD_PLUGIN}/item`;\n\nexport const meta = {\n id: THREAD_PLUGIN,\n name: 'Threads',\n description: 'Add comment threads to objects.',\n icon: 'ph--chat--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-thread',\n} satisfies PluginMeta;\n"],
5
+ "mappings": ";AAMO,IAAMA,gBAAgB;AACtB,IAAMC,cAAc,GAAGD,aAAAA;AAEvB,IAAME,OAAO;EAClBC,IAAIH;EACJI,MAAM;EACNC,aAAa;EACbC,MAAM;EACNC,QAAQ;AACV;",
6
+ "names": ["THREAD_PLUGIN", "THREAD_ITEM", "meta", "id", "name", "description", "icon", "source"]
7
+ }
@@ -0,0 +1,71 @@
1
+ // packages/plugins/plugin-thread/src/hooks/useStatus.ts
2
+ import { useEffect, useState } from "react";
3
+ var useStatus = (space, channel) => {
4
+ const [processing, setProcessing] = useState(false);
5
+ useEffect(() => {
6
+ if (!space || !channel) {
7
+ return;
8
+ }
9
+ const unsubscribe = space.listen(`status/${channel}`, (status) => {
10
+ const { event } = status.payload ?? {};
11
+ setProcessing(event === "processing");
12
+ });
13
+ const t = setInterval(() => {
14
+ setProcessing((prev) => {
15
+ if (typeof prev?.ts === "number" && Date.now() - prev.ts > 3e4) {
16
+ return void 0;
17
+ } else {
18
+ return prev;
19
+ }
20
+ });
21
+ }, 1e3);
22
+ return () => {
23
+ unsubscribe();
24
+ clearInterval(t);
25
+ };
26
+ }, [
27
+ space,
28
+ channel
29
+ ]);
30
+ return processing;
31
+ };
32
+
33
+ // packages/plugins/plugin-thread/src/hooks/analytics.ts
34
+ import { useCallback } from "react";
35
+ import { createIntent, useIntentDispatcher } from "@dxos/app-framework";
36
+ import { ObservabilityAction } from "@dxos/plugin-observability/types";
37
+ import { getSpace } from "@dxos/react-client/echo";
38
+ import { useOnTransition } from "@dxos/react-ui";
39
+ var useAnalyticsCallback = (spaceId, name, meta) => {
40
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
41
+ return useCallback((dynamicMeta) => {
42
+ void dispatch(createIntent(ObservabilityAction.SendEvent, {
43
+ name,
44
+ properties: {
45
+ ...meta,
46
+ ...dynamicMeta,
47
+ spaceId
48
+ }
49
+ }));
50
+ }, [
51
+ dispatch,
52
+ name,
53
+ meta,
54
+ spaceId
55
+ ]);
56
+ };
57
+ var useOnEditAnalytics = (message, editing) => {
58
+ const space = getSpace(message);
59
+ const onEditAnalytics = useAnalyticsCallback(space?.id, "threads.comment-edited", {
60
+ messageId: message.id,
61
+ messageLength: message.text.length
62
+ });
63
+ useOnTransition(editing, true, false, onEditAnalytics);
64
+ };
65
+
66
+ export {
67
+ useStatus,
68
+ useAnalyticsCallback,
69
+ useOnEditAnalytics
70
+ };
71
+ //# sourceMappingURL=chunk-BNEWNQBO.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/hooks/useStatus.ts", "../../../src/hooks/analytics.ts"],
4
+ "sourcesContent": ["//\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", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { type ReactiveObject } from '@dxos/live-object';\nimport { ObservabilityAction } from '@dxos/plugin-observability/types';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { useOnTransition } from '@dxos/react-ui';\n\nexport const useAnalyticsCallback = (spaceId: string | undefined, name: string, meta?: any) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n return useCallback(\n (dynamicMeta?: any) => {\n void dispatch(\n createIntent(ObservabilityAction.SendEvent, { name, properties: { ...meta, ...dynamicMeta, spaceId } }),\n );\n },\n [dispatch, name, meta, spaceId],\n );\n};\n\nexport const useOnEditAnalytics = (message: ReactiveObject<any>, editing: boolean) => {\n const space = getSpace(message);\n\n const onEditAnalytics = useAnalyticsCallback(space?.id, 'threads.comment-edited', {\n messageId: message.id,\n messageLength: message.text.length,\n });\n\n useOnTransition(editing, true, false, onEditAnalytics);\n};\n"],
5
+ "mappings": ";AAIA,SAASA,WAAWC,gBAAgB;AAK7B,IAAMC,YAAY,CAACC,OAAeC,YAAAA;AACvC,QAAM,CAACC,YAAYC,aAAAA,IAAiBC,SAAS,KAAA;AAC7CC,YAAU,MAAA;AACR,QAAI,CAACL,SAAS,CAACC,SAAS;AACtB;IACF;AAEA,UAAMK,cAAcN,MAAMO,OAAO,UAAUN,OAAAA,IAAW,CAACO,WAAAA;AACrD,YAAM,EAAEC,MAAK,IAAKD,OAAOE,WAAW,CAAC;AACrCP,oBAAcM,UAAU,YAAA;IAC1B,CAAA;AAEA,UAAME,IAAIC,YAAY,MAAA;AACpBT,oBAAc,CAACU,SAAAA;AACb,YAAI,OAAOA,MAAMC,OAAO,YAAYC,KAAKC,IAAG,IAAKH,KAAKC,KAAK,KAAQ;AACjE,iBAAOG;QACT,OAAO;AACL,iBAAOJ;QACT;MACF,CAAA;IACF,GAAG,GAAA;AAEH,WAAO,MAAA;AACLP,kBAAAA;AACAY,oBAAcP,CAAAA;IAChB;EACF,GAAG;IAACX;IAAOC;GAAQ;AAEnB,SAAOC;AACT;;;AClCA,SAASiB,mBAAmB;AAE5B,SAASC,cAAcC,2BAA2B;AAElD,SAASC,2BAA2B;AACpC,SAASC,gBAAgB;AACzB,SAASC,uBAAuB;AAEzB,IAAMC,uBAAuB,CAACC,SAA6BC,MAAcC,SAAAA;AAC9E,QAAM,EAAEC,iBAAiBC,SAAQ,IAAKC,oBAAAA;AAEtC,SAAOC,YACL,CAACC,gBAAAA;AACC,SAAKH,SACHI,aAAaC,oBAAoBC,WAAW;MAAET;MAAMU,YAAY;QAAE,GAAGT;QAAM,GAAGK;QAAaP;MAAQ;IAAE,CAAA,CAAA;EAEzG,GACA;IAACI;IAAUH;IAAMC;IAAMF;GAAQ;AAEnC;AAEO,IAAMY,qBAAqB,CAACC,SAA8BC,YAAAA;AAC/D,QAAMC,QAAQC,SAASH,OAAAA;AAEvB,QAAMI,kBAAkBlB,qBAAqBgB,OAAOG,IAAI,0BAA0B;IAChFC,WAAWN,QAAQK;IACnBE,eAAeP,QAAQQ,KAAKC;EAC9B,CAAA;AAEAC,kBAAgBT,SAAS,MAAM,OAAOG,eAAAA;AACxC;",
6
+ "names": ["useEffect", "useState", "useStatus", "space", "channel", "processing", "setProcessing", "useState", "useEffect", "unsubscribe", "listen", "status", "event", "payload", "t", "setInterval", "prev", "ts", "Date", "now", "undefined", "clearInterval", "useCallback", "createIntent", "useIntentDispatcher", "ObservabilityAction", "getSpace", "useOnTransition", "useAnalyticsCallback", "spaceId", "name", "meta", "dispatchPromise", "dispatch", "useIntentDispatcher", "useCallback", "dynamicMeta", "createIntent", "ObservabilityAction", "SendEvent", "properties", "useOnEditAnalytics", "message", "editing", "space", "getSpace", "onEditAnalytics", "id", "messageId", "messageLength", "text", "length", "useOnTransition"]
7
+ }
@@ -1,102 +1,38 @@
1
+ import {
2
+ useOnEditAnalytics,
3
+ useStatus
4
+ } from "./chunk-BNEWNQBO.mjs";
1
5
  import {
2
6
  THREAD_ITEM,
3
7
  THREAD_PLUGIN
4
- } from "./chunk-ENERBDYI.mjs";
5
-
6
- // packages/plugins/plugin-thread/src/hooks/useStatus.ts
7
- import { useEffect, useState } from "react";
8
- var useStatus = (space, channel) => {
9
- const [processing, setProcessing] = useState(false);
10
- useEffect(() => {
11
- if (!space || !channel) {
12
- return;
13
- }
14
- const unsubscribe = space.listen(`status/${channel}`, (status) => {
15
- const { event } = status.payload ?? {};
16
- setProcessing(event === "processing");
17
- });
18
- const t = setInterval(() => {
19
- setProcessing((prev) => {
20
- if (typeof prev?.ts === "number" && Date.now() - prev.ts > 3e4) {
21
- return void 0;
22
- } else {
23
- return prev;
24
- }
25
- });
26
- }, 1e3);
27
- return () => {
28
- unsubscribe();
29
- clearInterval(t);
30
- };
31
- }, [
32
- space,
33
- channel
34
- ]);
35
- return processing;
36
- };
37
-
38
- // packages/plugins/plugin-thread/src/hooks/analytics.ts
39
- import { useCallback } from "react";
40
- import { useIntentDispatcher } from "@dxos/app-framework";
41
- import { ObservabilityAction } from "@dxos/plugin-observability/meta";
42
- import { getSpace } from "@dxos/react-client/echo";
43
- import { useOnTransition } from "@dxos/react-ui";
44
- var useAnalyticsCallback = (spaceId, name, meta) => {
45
- const dispatch = useIntentDispatcher();
46
- return useCallback((dynamicMeta) => {
47
- void dispatch({
48
- action: ObservabilityAction.SEND_EVENT,
49
- data: {
50
- name,
51
- properties: {
52
- ...meta,
53
- ...dynamicMeta,
54
- spaceId
55
- }
56
- }
57
- });
58
- }, [
59
- dispatch,
60
- name,
61
- meta,
62
- spaceId
63
- ]);
64
- };
65
- var useOnEditAnalytics = (message, editing) => {
66
- const space = getSpace(message);
67
- const onEditAnalytics = useAnalyticsCallback(space?.id, "threads.comment-edited", {
68
- messageId: message.id,
69
- messageLength: message.text.length
70
- });
71
- useOnTransition(editing, true, false, onEditAnalytics);
72
- };
8
+ } from "./chunk-636QDHE3.mjs";
73
9
 
74
10
  // packages/plugins/plugin-thread/src/components/ChatContainer.tsx
75
- import React2, { useLayoutEffect, useMemo, useRef as useRef2, useState as useState3 } from "react";
76
- import { create } from "@dxos/live-object";
11
+ import React2, { useLayoutEffect, useMemo, useRef as useRef2, useState as useState2 } from "react";
12
+ import { Ref } from "@dxos/echo-schema";
13
+ import { create, makeRef, RefArray as RefArray2 } from "@dxos/live-object";
77
14
  import { MessageType } from "@dxos/plugin-space/types";
78
- import { fullyQualifiedId, getSpace as getSpace2, useMembers } from "@dxos/react-client/echo";
15
+ import { fullyQualifiedId, getSpace, useMembers } from "@dxos/react-client/echo";
79
16
  import { useIdentity as useIdentity2 } from "@dxos/react-client/halo";
80
17
  import { Icon, ScrollArea, useThemeContext as useThemeContext2, useTranslation as useTranslation2 } from "@dxos/react-ui";
81
18
  import { createBasicExtensions as createBasicExtensions2, createThemeExtensions as createThemeExtensions2, listener } from "@dxos/react-ui-editor";
82
19
  import { StackItem } from "@dxos/react-ui-stack";
83
20
  import { mx as mx3 } from "@dxos/react-ui-theme";
84
21
  import { MessageTextbox, Thread, ThreadFooter, threadLayout } from "@dxos/react-ui-thread";
85
- import { nonNullable as nonNullable2 } from "@dxos/util";
86
22
 
87
23
  // packages/plugins/plugin-thread/src/components/MessageContainer.tsx
88
24
  import { EditorView } from "@codemirror/view";
89
25
  import { Check, PencilSimple, X } from "@phosphor-icons/react";
90
- import React, { forwardRef, useCallback as useCallback2, useEffect as useEffect2, useRef, useState as useState2 } from "react";
26
+ import React, { forwardRef, useCallback, useEffect, useRef, useState } from "react";
91
27
  import { Surface } from "@dxos/app-framework";
28
+ import { RefArray } from "@dxos/live-object";
92
29
  import { PublicKey } from "@dxos/react-client";
93
30
  import { useIdentity } from "@dxos/react-client/halo";
94
- import { Button, ButtonGroup, Tooltip, useOnTransition as useOnTransition2, useThemeContext, useTranslation } from "@dxos/react-ui";
31
+ import { Button, ButtonGroup, Tooltip, useOnTransition, useThemeContext, useTranslation } from "@dxos/react-ui";
95
32
  import { createBasicExtensions, createThemeExtensions, useTextEditor } from "@dxos/react-ui-editor";
96
33
  import { Mosaic } from "@dxos/react-ui-mosaic";
97
34
  import { getSize, hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx as mx2 } from "@dxos/react-ui-theme";
98
35
  import { MessageHeading, MessageRoot } from "@dxos/react-ui-thread";
99
- import { nonNullable } from "@dxos/util";
100
36
 
101
37
  // packages/plugins/plugin-thread/src/components/command-extension.ts
102
38
  import { StreamLanguage, HighlightStyle, syntaxHighlighting } from "@codemirror/language";
@@ -156,8 +92,8 @@ var MessageContainer = ({ message, members, onDelete }) => {
156
92
  const senderIdentity = members.find((member) => message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey))?.identity;
157
93
  const messageMetadata = getMessageMetadata(message.id, senderIdentity);
158
94
  const userIsAuthor = useIdentity()?.identityKey.toHex() === messageMetadata.authorId;
159
- const [editing, setEditing] = useState2(false);
160
- const handleDelete = useCallback2(() => onDelete?.(message.id), [
95
+ const [editing, setEditing] = useState(false);
96
+ const handleDelete = useCallback(() => onDelete?.(message.id), [
161
97
  message,
162
98
  onDelete
163
99
  ]);
@@ -188,9 +124,7 @@ var MessageContainer = ({ message, members, onDelete }) => {
188
124
  className: getSize(4)
189
125
  }) : /* @__PURE__ */ React.createElement(PencilSimple, {
190
126
  className: getSize(4)
191
- }))), /* @__PURE__ */ React.createElement(Tooltip.Portal, null, /* @__PURE__ */ React.createElement(Tooltip.Content, {
192
- classNames: "z-[21]"
193
- }, editLabel, /* @__PURE__ */ React.createElement(Tooltip.Arrow, null)))), onDelete && /* @__PURE__ */ React.createElement(Tooltip.Root, null, /* @__PURE__ */ React.createElement(Tooltip.Trigger, {
127
+ }))), /* @__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, {
194
128
  asChild: true
195
129
  }, /* @__PURE__ */ React.createElement(Button, {
196
130
  variant: "ghost",
@@ -201,13 +135,11 @@ var MessageContainer = ({ message, members, onDelete }) => {
201
135
  className: "sr-only"
202
136
  }, deleteLabel), /* @__PURE__ */ React.createElement(X, {
203
137
  className: getSize(4)
204
- }))), /* @__PURE__ */ React.createElement(Tooltip.Portal, null, /* @__PURE__ */ React.createElement(Tooltip.Content, {
205
- classNames: "z-[21]"
206
- }, deleteLabel, /* @__PURE__ */ React.createElement(Tooltip.Arrow, null)))))), /* @__PURE__ */ React.createElement(TextboxBlock, {
138
+ }))), /* @__PURE__ */ React.createElement(Tooltip.Portal, null, /* @__PURE__ */ React.createElement(Tooltip.Content, null, deleteLabel, /* @__PURE__ */ React.createElement(Tooltip.Arrow, null)))))), /* @__PURE__ */ React.createElement(TextboxBlock, {
207
139
  message,
208
140
  isAuthor: userIsAuthor,
209
141
  editing
210
- }), message.parts?.filter(nonNullable).map((part, index) => /* @__PURE__ */ React.createElement(MessagePart, {
142
+ }), RefArray.allResolvedTargets(message.parts ?? []).map((part, index) => /* @__PURE__ */ React.createElement(MessagePart, {
211
143
  key: index,
212
144
  part
213
145
  })));
@@ -225,15 +157,15 @@ var MessagePart = ({ part }) => {
225
157
  var TextboxBlock = ({ message, isAuthor, editing }) => {
226
158
  const { themeMode } = useThemeContext();
227
159
  const inMemoryContentRef = useRef(message.text);
228
- const handleDocumentChange = useCallback2((newState) => {
160
+ const handleDocumentChange = useCallback((newState) => {
229
161
  inMemoryContentRef.current = newState;
230
162
  }, []);
231
- const saveDocumentChange = useCallback2(() => {
163
+ const saveDocumentChange = useCallback(() => {
232
164
  message.text = inMemoryContentRef.current;
233
165
  }, [
234
166
  message
235
167
  ]);
236
- useOnTransition2(editing, true, false, saveDocumentChange);
168
+ useOnTransition(editing, true, false, saveDocumentChange);
237
169
  const { parentRef, focusAttributes, view } = useTextEditor(() => ({
238
170
  initialValue: message.text,
239
171
  extensions: [
@@ -257,7 +189,7 @@ var TextboxBlock = ({ message, isAuthor, editing }) => {
257
189
  themeMode,
258
190
  handleDocumentChange
259
191
  ]);
260
- useEffect2(() => {
192
+ useEffect(() => {
261
193
  editing && view?.focus();
262
194
  }, [
263
195
  editing,
@@ -285,7 +217,7 @@ var MessageBlockObjectTile = /* @__PURE__ */ forwardRef(({ draggableStyle, dragg
285
217
  role: "card",
286
218
  limit: 1,
287
219
  data: {
288
- content: item
220
+ subject: item
289
221
  },
290
222
  draggableProps,
291
223
  fallback: title,
@@ -294,29 +226,15 @@ var MessageBlockObjectTile = /* @__PURE__ */ forwardRef(({ draggableStyle, dragg
294
226
  });
295
227
 
296
228
  // packages/plugins/plugin-thread/src/components/ChatContainer.tsx
297
- var ChatHeading = ({ attendableId }) => {
298
- const { t } = useTranslation2(THREAD_PLUGIN);
299
- return /* @__PURE__ */ React2.createElement("div", {
300
- role: "none",
301
- className: "flex items-center"
302
- }, /* @__PURE__ */ React2.createElement(StackItem.SigilButton, {
303
- attendableId
304
- }, /* @__PURE__ */ React2.createElement(Icon, {
305
- icon: "ph--chat--regular",
306
- size: 5
307
- })), /* @__PURE__ */ React2.createElement(StackItem.HeadingLabel, {
308
- attendableId
309
- }, t("chat heading")));
310
- };
311
229
  var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
312
230
  const identity = useIdentity2();
313
- const space = getSpace2(thread);
231
+ const space = getSpace(thread);
314
232
  const members = useMembers(space?.key);
315
233
  const activity = useStatus(space, fullyQualifiedId(thread));
316
234
  const { t } = useTranslation2(THREAD_PLUGIN);
317
- const [_count, _setCount] = useState3(0);
235
+ const [_count, _setCount] = useState2(0);
318
236
  const rerenderEditor = () => _setCount((count) => count + 1);
319
- const [autoFocus, setAutoFocus] = useState3(autoFocusTextbox);
237
+ const [autoFocus, setAutoFocus] = useState2(autoFocusTextbox);
320
238
  const threadScrollRef = useRef2(null);
321
239
  const { themeMode } = useThemeContext2();
322
240
  const textboxMetadata = getMessageMetadata(fullyQualifiedId(thread), identity);
@@ -347,14 +265,14 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
347
265
  if (!messageRef.current?.length) {
348
266
  return false;
349
267
  }
350
- thread.messages.push(create(MessageType, {
268
+ thread.messages.push(makeRef(create(MessageType, {
351
269
  sender: {
352
270
  identityKey: identity.identityKey.toHex()
353
271
  },
354
272
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
355
273
  text: messageRef.current,
356
- context
357
- }));
274
+ context: makeRef(context)
275
+ })));
358
276
  messageRef.current = "";
359
277
  setAutoFocus(true);
360
278
  scrollToEnd("smooth");
@@ -362,7 +280,7 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
362
280
  return true;
363
281
  };
364
282
  const handleDelete = (id) => {
365
- const messageIndex = thread.messages.filter(nonNullable2).findIndex((message) => message.id === id);
283
+ const messageIndex = thread.messages.findIndex(Ref.hasObjectId(id));
366
284
  if (messageIndex !== -1) {
367
285
  thread.messages.splice(messageIndex, 1);
368
286
  }
@@ -378,7 +296,7 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
378
296
  }, /* @__PURE__ */ React2.createElement("div", {
379
297
  role: "none",
380
298
  className: mx3(threadLayout, "place-self-end")
381
- }, thread.messages.filter(nonNullable2).map((message) => /* @__PURE__ */ React2.createElement(MessageContainer, {
299
+ }, RefArray2.allResolvedTargets(thread.messages ?? []).map((message) => /* @__PURE__ */ React2.createElement(MessageContainer, {
382
300
  key: message.id,
383
301
  message,
384
302
  members,
@@ -399,12 +317,8 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
399
317
 
400
318
  export {
401
319
  command,
402
- useStatus,
403
- useAnalyticsCallback,
404
- useOnEditAnalytics,
405
320
  getMessageMetadata,
406
321
  MessageContainer,
407
- ChatHeading,
408
322
  ChatContainer
409
323
  };
410
- //# sourceMappingURL=chunk-52HWDLBR.mjs.map
324
+ //# sourceMappingURL=chunk-GQONSZ3J.mjs.map