@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,135 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var app_graph_builder_ZXW5KUDK_exports = {};
20
+ __export(app_graph_builder_ZXW5KUDK_exports, {
21
+ default: () => app_graph_builder_default
22
+ });
23
+ module.exports = __toCommonJS(app_graph_builder_ZXW5KUDK_exports);
24
+ var import_chunk_FPWNZ6TB = require("./chunk-FPWNZ6TB.cjs");
25
+ var import_chunk_F735VMTN = require("./chunk-F735VMTN.cjs");
26
+ var import_app_framework = require("@dxos/app-framework");
27
+ var import_plugin_client = require("@dxos/plugin-client");
28
+ var import_plugin_graph = require("@dxos/plugin-graph");
29
+ var import_types = require("@dxos/plugin-observability/types");
30
+ var import_plugin_space = require("@dxos/plugin-space");
31
+ var import_echo = require("@dxos/react-client/echo");
32
+ var type = "orphan-comments-for-subject";
33
+ var icon = "ph--chat-text--regular";
34
+ var app_graph_builder_default = (context) => {
35
+ const resolver = (typename) => context.requestCapabilities(import_app_framework.Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
36
+ return (0, import_app_framework.contributes)(import_app_framework.Capabilities.AppGraphBuilder, (0, import_plugin_graph.createExtension)({
37
+ id: `${import_chunk_F735VMTN.THREAD_PLUGIN}/comments-for-subject`,
38
+ resolver: ({ id }) => {
39
+ if (!id.endsWith("~comments")) {
40
+ return;
41
+ }
42
+ const client = context.requestCapability(import_plugin_client.ClientCapabilities.Client);
43
+ const [subjectId] = id.split("~");
44
+ const { spaceId, objectId } = (0, import_echo.parseId)(subjectId);
45
+ const spaces = (0, import_plugin_graph.toSignal)((onChange) => client.spaces.subscribe(() => onChange()).unsubscribe, () => client.spaces.get());
46
+ const space = spaces?.find((space2) => space2.id === spaceId && space2.state.get() === import_echo.SpaceState.SPACE_READY);
47
+ if (!objectId) {
48
+ return {
49
+ id,
50
+ type,
51
+ data: null,
52
+ properties: {
53
+ icon,
54
+ label: [
55
+ "unnamed object threads label",
56
+ {
57
+ ns: import_chunk_F735VMTN.THREAD_PLUGIN
58
+ }
59
+ ],
60
+ showResolvedThreads: false,
61
+ object: null,
62
+ space
63
+ }
64
+ };
65
+ }
66
+ const [object] = (0, import_plugin_space.memoizeQuery)(space, {
67
+ id: objectId
68
+ });
69
+ if (!object || !subjectId) {
70
+ return;
71
+ }
72
+ const meta = resolver((0, import_echo.getTypename)(object) ?? "");
73
+ const label = meta.label?.(object) || object.name || meta.placeholder || [
74
+ "unnamed object threads label",
75
+ {
76
+ ns: import_chunk_F735VMTN.THREAD_PLUGIN
77
+ }
78
+ ];
79
+ const { getViewState } = context.requestCapability(import_chunk_FPWNZ6TB.ThreadCapabilities.State);
80
+ const viewState = getViewState(subjectId);
81
+ return {
82
+ id,
83
+ type,
84
+ data: null,
85
+ properties: {
86
+ icon,
87
+ label,
88
+ showResolvedThreads: viewState.showResolvedThreads,
89
+ object
90
+ }
91
+ };
92
+ },
93
+ actions: ({ node }) => {
94
+ const dataId = node.id.split("~").at(0);
95
+ if (!node.id.endsWith("~comments") || !dataId) {
96
+ return;
97
+ }
98
+ const [spaceId, objectId] = dataId.split(":");
99
+ const { getViewState } = context.requestCapability(import_chunk_FPWNZ6TB.ThreadCapabilities.State);
100
+ const viewState = getViewState(dataId);
101
+ const toggle = async () => {
102
+ const newToggleState = !viewState.showResolvedThreads;
103
+ viewState.showResolvedThreads = newToggleState;
104
+ const { dispatchPromise: dispatch } = context.requestCapability(import_app_framework.Capabilities.IntentDispatcher);
105
+ await dispatch((0, import_app_framework.createIntent)(import_types.ObservabilityAction.SendEvent, {
106
+ name: "threads.toggle-show-resolved",
107
+ properties: {
108
+ spaceId,
109
+ threadId: objectId,
110
+ showResolved: newToggleState
111
+ }
112
+ }));
113
+ };
114
+ return [
115
+ {
116
+ id: `${import_chunk_F735VMTN.THREAD_PLUGIN}/toggle-show-resolved/${node.id}`,
117
+ data: toggle,
118
+ properties: {
119
+ label: [
120
+ "toggle show resolved",
121
+ {
122
+ ns: import_chunk_F735VMTN.THREAD_PLUGIN
123
+ }
124
+ ],
125
+ menuItemType: "toggle",
126
+ isChecked: viewState.showResolvedThreads,
127
+ testId: "threadPlugin.toggleShowResolved",
128
+ icon: viewState.showResolvedThreads ? "ph--eye-slash--regular" : "ph--eye--regular"
129
+ }
130
+ }
131
+ ];
132
+ }
133
+ }));
134
+ };
135
+ //# sourceMappingURL=app-graph-builder-ZXW5KUDK.cjs.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": ";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,2BAA6E;AAC7E,2BAAmC;AACnC,0BAA0C;AAC1C,mBAAoC;AACpC,0BAA6B;AAC7B,kBAAiD;AAKjD,IAAMA,OAAO;AACb,IAAMC,OAAO;AAEb,IAAA,4BAAe,CAACC,YAAAA;AACd,QAAMC,WAAW,CAACC,aAChBF,QAAQG,oBAAoBC,kCAAaC,QAAQ,EAAEC,KAAK,CAAC,EAAEC,GAAE,MAAOA,OAAOL,QAAAA,GAAWM,YAAY,CAAC;AAErG,aAAOC,kCACLL,kCAAaM,qBACbC,qCAAgB;IACdJ,IAAI,GAAGK,mCAAAA;IACPX,UAAU,CAAC,EAAEM,GAAE,MAAE;AAEf,UAAI,CAACA,GAAGM,SAAS,WAAA,GAAc;AAC7B;MACF;AAEA,YAAMC,SAASd,QAAQe,kBAAkBC,wCAAmBC,MAAM;AAClE,YAAM,CAACC,SAAAA,IAAaX,GAAGY,MAAM,GAAA;AAC7B,YAAM,EAAEC,SAASC,SAAQ,QAAKC,qBAAQJ,SAAAA;AACtC,YAAMK,aAASC,8BACb,CAACC,aAAaX,OAAOS,OAAOG,UAAU,MAAMD,SAAAA,CAAAA,EAAYE,aACxD,MAAMb,OAAOS,OAAOK,IAAG,CAAA;AAEzB,YAAMC,QAAQN,QAAQjB,KAAK,CAACuB,WAAUA,OAAMtB,OAAOa,WAAWS,OAAMC,MAAMF,IAAG,MAAOG,uBAAWC,WAAW;AAC1G,UAAI,CAACX,UAAU;AAGb,eAAO;UACLd;UACAT;UACAmC,MAAM;UACNC,YAAY;YACVnC;YACAoC,OAAO;cAAC;cAAgC;gBAAEC,IAAIxB;cAAc;;YAC5DyB,qBAAqB;YACrBC,QAAQ;YACRT;UACF;QACF;MACF;AAEA,YAAM,CAACS,MAAAA,QAAUC,kCAAaV,OAAO;QAAEtB,IAAIc;MAAS,CAAA;AACpD,UAAI,CAACiB,UAAU,CAACpB,WAAW;AACzB;MACF;AAEA,YAAMsB,OAAOvC,aAASwC,yBAAYH,MAAAA,KAAW,EAAA;AAC7C,YAAMH,QAAQK,KAAKL,QAAQG,MAAAA,KACzBA,OAAOI,QACPF,KAAKG,eAAe;QAAC;QAAgC;UAAEP,IAAIxB;QAAc;;AAE3E,YAAM,EAAEgC,aAAY,IAAK5C,QAAQe,kBAAkB8B,yCAAmBC,KAAK;AAC3E,YAAMC,YAAYH,aAAa1B,SAAAA;AAE/B,aAAO;QACLX;QACAT;QACAmC,MAAM;QACNC,YAAY;UACVnC;UACAoC;UACAE,qBAAqBU,UAAUV;UAC/BC;QACF;MACF;IACF;IACAU,SAAS,CAAC,EAAEC,KAAI,MAAE;AAChB,YAAMC,SAASD,KAAK1C,GAAGY,MAAM,GAAA,EAAKgC,GAAG,CAAA;AACrC,UAAI,CAACF,KAAK1C,GAAGM,SAAS,WAAA,KAAgB,CAACqC,QAAQ;AAC7C;MACF;AAEA,YAAM,CAAC9B,SAASC,QAAAA,IAAY6B,OAAO/B,MAAM,GAAA;AAEzC,YAAM,EAAEyB,aAAY,IAAK5C,QAAQe,kBAAkB8B,yCAAmBC,KAAK;AAC3E,YAAMC,YAAYH,aAAaM,MAAAA;AAC/B,YAAME,SAAS,YAAA;AACb,cAAMC,iBAAiB,CAACN,UAAUV;AAClCU,kBAAUV,sBAAsBgB;AAChC,cAAM,EAAEC,iBAAiBC,SAAQ,IAAKvD,QAAQe,kBAAkBX,kCAAaoD,gBAAgB;AAC7F,cAAMD,aACJE,mCAAaC,iCAAoBC,WAAW;UAC1CjB,MAAM;UACNR,YAAY;YAAEd;YAASwC,UAAUvC;YAAUwC,cAAcR;UAAe;QAC1E,CAAA,CAAA;MAEJ;AAEA,aAAO;QACL;UACE9C,IAAI,GAAGK,mCAAAA,yBAAsCqC,KAAK1C,EAAE;UACpD0B,MAAMmB;UACNlB,YAAY;YACVC,OAAO;cAAC;cAAwB;gBAAEC,IAAIxB;cAAc;;YACpDkD,cAAc;YACdC,WAAWhB,UAAUV;YACrB2B,QAAQ;YACRjE,MAAMgD,UAAUV,sBAAsB,2BAA2B;UACnE;QACF;;IAEJ;EACF,CAAA,CAAA;AAEJ;",
6
+ "names": ["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
+ }
@@ -26,111 +26,44 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var chunk_YCDM2SZM_exports = {};
30
- __export(chunk_YCDM2SZM_exports, {
29
+ var chunk_6PUGKCPR_exports = {};
30
+ __export(chunk_6PUGKCPR_exports, {
31
31
  ChatContainer: () => ChatContainer,
32
- ChatHeading: () => ChatHeading,
33
32
  MessageContainer: () => MessageContainer,
34
33
  command: () => command,
35
- getMessageMetadata: () => getMessageMetadata,
36
- useAnalyticsCallback: () => useAnalyticsCallback,
37
- useOnEditAnalytics: () => useOnEditAnalytics,
38
- useStatus: () => useStatus
34
+ getMessageMetadata: () => getMessageMetadata
39
35
  });
40
- module.exports = __toCommonJS(chunk_YCDM2SZM_exports);
41
- var import_chunk_IC2NICNC = require("./chunk-IC2NICNC.cjs");
42
- var import_react = require("react");
43
- var import_react2 = require("react");
44
- var import_app_framework = require("@dxos/app-framework");
45
- var import_meta = require("@dxos/plugin-observability/meta");
46
- var import_echo = require("@dxos/react-client/echo");
47
- var import_react_ui = require("@dxos/react-ui");
48
- var import_react3 = __toESM(require("react"));
36
+ module.exports = __toCommonJS(chunk_6PUGKCPR_exports);
37
+ var import_chunk_AWSTZ2KN = require("./chunk-AWSTZ2KN.cjs");
38
+ var import_chunk_F735VMTN = require("./chunk-F735VMTN.cjs");
39
+ var import_react = __toESM(require("react"));
40
+ var import_echo_schema = require("@dxos/echo-schema");
49
41
  var import_live_object = require("@dxos/live-object");
50
42
  var import_types = require("@dxos/plugin-space/types");
51
- var import_echo2 = require("@dxos/react-client/echo");
43
+ var import_echo = require("@dxos/react-client/echo");
52
44
  var import_halo = require("@dxos/react-client/halo");
53
- var import_react_ui2 = require("@dxos/react-ui");
45
+ var import_react_ui = require("@dxos/react-ui");
54
46
  var import_react_ui_editor = require("@dxos/react-ui-editor");
55
47
  var import_react_ui_stack = require("@dxos/react-ui-stack");
56
48
  var import_react_ui_theme = require("@dxos/react-ui-theme");
57
49
  var import_react_ui_thread = require("@dxos/react-ui-thread");
58
- var import_util = require("@dxos/util");
59
50
  var import_view = require("@codemirror/view");
60
- var import_react4 = require("@phosphor-icons/react");
61
- var import_react5 = __toESM(require("react"));
62
- var import_app_framework2 = require("@dxos/app-framework");
51
+ var import_react2 = require("@phosphor-icons/react");
52
+ var import_react3 = __toESM(require("react"));
53
+ var import_app_framework = require("@dxos/app-framework");
54
+ var import_live_object2 = require("@dxos/live-object");
63
55
  var import_react_client = require("@dxos/react-client");
64
56
  var import_halo2 = require("@dxos/react-client/halo");
65
- var import_react_ui3 = require("@dxos/react-ui");
57
+ var import_react_ui2 = require("@dxos/react-ui");
66
58
  var import_react_ui_editor2 = require("@dxos/react-ui-editor");
67
59
  var import_react_ui_mosaic = require("@dxos/react-ui-mosaic");
68
60
  var import_react_ui_theme2 = require("@dxos/react-ui-theme");
69
61
  var import_react_ui_thread2 = require("@dxos/react-ui-thread");
70
- var import_util2 = require("@dxos/util");
71
62
  var import_language = require("@codemirror/language");
72
63
  var import_react_ui_editor3 = require("@dxos/react-ui-editor");
73
64
  var import_react_ui_theme3 = require("@dxos/react-ui-theme");
74
65
  var import_display_name = require("@dxos/display-name");
75
- var import_util3 = require("@dxos/util");
76
- var useStatus = (space, channel) => {
77
- const [processing, setProcessing] = (0, import_react.useState)(false);
78
- (0, import_react.useEffect)(() => {
79
- if (!space || !channel) {
80
- return;
81
- }
82
- const unsubscribe = space.listen(`status/${channel}`, (status) => {
83
- const { event } = status.payload ?? {};
84
- setProcessing(event === "processing");
85
- });
86
- const t = setInterval(() => {
87
- setProcessing((prev) => {
88
- if (typeof prev?.ts === "number" && Date.now() - prev.ts > 3e4) {
89
- return void 0;
90
- } else {
91
- return prev;
92
- }
93
- });
94
- }, 1e3);
95
- return () => {
96
- unsubscribe();
97
- clearInterval(t);
98
- };
99
- }, [
100
- space,
101
- channel
102
- ]);
103
- return processing;
104
- };
105
- var useAnalyticsCallback = (spaceId, name, meta) => {
106
- const dispatch = (0, import_app_framework.useIntentDispatcher)();
107
- return (0, import_react2.useCallback)((dynamicMeta) => {
108
- void dispatch({
109
- action: import_meta.ObservabilityAction.SEND_EVENT,
110
- data: {
111
- name,
112
- properties: {
113
- ...meta,
114
- ...dynamicMeta,
115
- spaceId
116
- }
117
- }
118
- });
119
- }, [
120
- dispatch,
121
- name,
122
- meta,
123
- spaceId
124
- ]);
125
- };
126
- var useOnEditAnalytics = (message, editing) => {
127
- const space = (0, import_echo.getSpace)(message);
128
- const onEditAnalytics = useAnalyticsCallback(space?.id, "threads.comment-edited", {
129
- messageId: message.id,
130
- messageLength: message.text.length
131
- });
132
- (0, import_react_ui.useOnTransition)(editing, true, false, onEditAnalytics);
133
- };
66
+ var import_util = require("@dxos/util");
134
67
  var parser = import_language.StreamLanguage.define({
135
68
  startState: () => ({
136
69
  count: 0
@@ -160,7 +93,7 @@ var command = [
160
93
  (0, import_language.syntaxHighlighting)(styles)
161
94
  ];
162
95
  var getMessageMetadata = (id, identity) => {
163
- const fallback = (0, import_util3.hexToFallback)(identity?.identityKey.toHex() ?? "0");
96
+ const fallback = (0, import_util.hexToFallback)(identity?.identityKey.toHex() ?? "0");
164
97
  return {
165
98
  id,
166
99
  authorId: identity?.identityKey.toHex(),
@@ -179,84 +112,80 @@ var MessageContainer = ({ message, members, onDelete }) => {
179
112
  const senderIdentity = members.find((member) => message.sender.identityKey && import_react_client.PublicKey.equals(member.identity.identityKey, message.sender.identityKey))?.identity;
180
113
  const messageMetadata = getMessageMetadata(message.id, senderIdentity);
181
114
  const userIsAuthor = (0, import_halo2.useIdentity)()?.identityKey.toHex() === messageMetadata.authorId;
182
- const [editing, setEditing] = (0, import_react5.useState)(false);
183
- const handleDelete = (0, import_react5.useCallback)(() => onDelete?.(message.id), [
115
+ const [editing, setEditing] = (0, import_react3.useState)(false);
116
+ const handleDelete = (0, import_react3.useCallback)(() => onDelete?.(message.id), [
184
117
  message,
185
118
  onDelete
186
119
  ]);
187
- const { t } = (0, import_react_ui3.useTranslation)(import_chunk_IC2NICNC.THREAD_PLUGIN);
120
+ const { t } = (0, import_react_ui2.useTranslation)(import_chunk_F735VMTN.THREAD_PLUGIN);
188
121
  const editLabel = t(editing ? "save message label" : "edit message label");
189
122
  const deleteLabel = t("delete message label");
190
- return /* @__PURE__ */ import_react5.default.createElement(import_react_ui_thread2.MessageRoot, {
123
+ return /* @__PURE__ */ import_react3.default.createElement(import_react_ui_thread2.MessageRoot, {
191
124
  ...messageMetadata,
192
125
  classNames: [
193
126
  import_react_ui_theme2.hoverableControls,
194
127
  import_react_ui_theme2.hoverableFocusedWithinControls
195
128
  ]
196
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui_thread2.MessageHeading, {
129
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui_thread2.MessageHeading, {
197
130
  authorName: messageMetadata.authorName,
198
131
  timestamp: messageMetadata.timestamp
199
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.ButtonGroup, {
132
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ButtonGroup, {
200
133
  classNames: "mie-1"
201
- }, userIsAuthor && /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Root, null, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Trigger, {
134
+ }, userIsAuthor && /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Root, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Trigger, {
202
135
  asChild: true
203
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Button, {
136
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Button, {
204
137
  variant: "ghost",
205
138
  "data-testid": editing ? "thread.message.save" : "thread.message.edit",
206
139
  classNames: messageControlClassNames,
207
140
  onClick: () => setEditing((editing2) => !editing2)
208
- }, /* @__PURE__ */ import_react5.default.createElement("span", {
141
+ }, /* @__PURE__ */ import_react3.default.createElement("span", {
209
142
  className: "sr-only"
210
- }, editLabel), editing ? /* @__PURE__ */ import_react5.default.createElement(import_react4.Check, {
143
+ }, editLabel), editing ? /* @__PURE__ */ import_react3.default.createElement(import_react2.Check, {
211
144
  className: (0, import_react_ui_theme2.getSize)(4)
212
- }) : /* @__PURE__ */ import_react5.default.createElement(import_react4.PencilSimple, {
145
+ }) : /* @__PURE__ */ import_react3.default.createElement(import_react2.PencilSimple, {
213
146
  className: (0, import_react_ui_theme2.getSize)(4)
214
- }))), /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Portal, null, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Content, {
215
- classNames: "z-[21]"
216
- }, editLabel, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Arrow, null)))), onDelete && /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Root, null, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Trigger, {
147
+ }))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Portal, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Content, null, editLabel, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Arrow, null)))), onDelete && /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Root, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Trigger, {
217
148
  asChild: true
218
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Button, {
149
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Button, {
219
150
  variant: "ghost",
220
151
  "data-testid": "thread.message.delete",
221
152
  classNames: messageControlClassNames,
222
153
  onClick: () => handleDelete()
223
- }, /* @__PURE__ */ import_react5.default.createElement("span", {
154
+ }, /* @__PURE__ */ import_react3.default.createElement("span", {
224
155
  className: "sr-only"
225
- }, deleteLabel), /* @__PURE__ */ import_react5.default.createElement(import_react4.X, {
156
+ }, deleteLabel), /* @__PURE__ */ import_react3.default.createElement(import_react2.X, {
226
157
  className: (0, import_react_ui_theme2.getSize)(4)
227
- }))), /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Portal, null, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Content, {
228
- classNames: "z-[21]"
229
- }, deleteLabel, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Arrow, null)))))), /* @__PURE__ */ import_react5.default.createElement(TextboxBlock, {
158
+ }))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Portal, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Content, null, deleteLabel, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Arrow, null)))))), /* @__PURE__ */ import_react3.default.createElement(TextboxBlock, {
230
159
  message,
231
160
  isAuthor: userIsAuthor,
232
161
  editing
233
- }), message.parts?.filter(import_util2.nonNullable).map((part, index) => /* @__PURE__ */ import_react5.default.createElement(MessagePart, {
162
+ }), import_live_object2.RefArray.allResolvedTargets(message.parts ?? []).map((part, index) => /* @__PURE__ */ import_react3.default.createElement(MessagePart, {
234
163
  key: index,
235
164
  part
236
165
  })));
237
166
  };
238
167
  var MessagePart = ({ part }) => {
239
- return /* @__PURE__ */ import_react5.default.createElement(import_react_ui_mosaic.Mosaic.Container, {
168
+ return /* @__PURE__ */ import_react3.default.createElement(import_react_ui_mosaic.Mosaic.Container, {
240
169
  id: part.id
241
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui_mosaic.Mosaic.DraggableTile, {
242
- type: import_chunk_IC2NICNC.THREAD_ITEM,
170
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui_mosaic.Mosaic.DraggableTile, {
171
+ type: import_chunk_F735VMTN.THREAD_ITEM,
243
172
  path: part.id,
244
173
  item: part,
245
174
  Component: MessageBlockObjectTile
246
175
  }));
247
176
  };
248
177
  var TextboxBlock = ({ message, isAuthor, editing }) => {
249
- const { themeMode } = (0, import_react_ui3.useThemeContext)();
250
- const inMemoryContentRef = (0, import_react5.useRef)(message.text);
251
- const handleDocumentChange = (0, import_react5.useCallback)((newState) => {
178
+ const { themeMode } = (0, import_react_ui2.useThemeContext)();
179
+ const inMemoryContentRef = (0, import_react3.useRef)(message.text);
180
+ const handleDocumentChange = (0, import_react3.useCallback)((newState) => {
252
181
  inMemoryContentRef.current = newState;
253
182
  }, []);
254
- const saveDocumentChange = (0, import_react5.useCallback)(() => {
183
+ const saveDocumentChange = (0, import_react3.useCallback)(() => {
255
184
  message.text = inMemoryContentRef.current;
256
185
  }, [
257
186
  message
258
187
  ]);
259
- (0, import_react_ui3.useOnTransition)(editing, true, false, saveDocumentChange);
188
+ (0, import_react_ui2.useOnTransition)(editing, true, false, saveDocumentChange);
260
189
  const { parentRef, focusAttributes, view } = (0, import_react_ui_editor2.useTextEditor)(() => ({
261
190
  initialValue: message.text,
262
191
  extensions: [
@@ -280,69 +209,55 @@ var TextboxBlock = ({ message, isAuthor, editing }) => {
280
209
  themeMode,
281
210
  handleDocumentChange
282
211
  ]);
283
- (0, import_react5.useEffect)(() => {
212
+ (0, import_react3.useEffect)(() => {
284
213
  editing && view?.focus();
285
214
  }, [
286
215
  editing,
287
216
  view
288
217
  ]);
289
- useOnEditAnalytics(message, !!editing);
290
- return /* @__PURE__ */ import_react5.default.createElement("div", {
218
+ (0, import_chunk_AWSTZ2KN.useOnEditAnalytics)(message, !!editing);
219
+ return /* @__PURE__ */ import_react3.default.createElement("div", {
291
220
  role: "none",
292
221
  ref: parentRef,
293
222
  className: "mie-4",
294
223
  ...focusAttributes
295
224
  });
296
225
  };
297
- var MessageBlockObjectTile = /* @__PURE__ */ (0, import_react5.forwardRef)(({ draggableStyle, draggableProps, item, active, ref: _ref, ...props }, forwardedRef) => {
226
+ var MessageBlockObjectTile = /* @__PURE__ */ (0, import_react3.forwardRef)(({ draggableStyle, draggableProps, item, active, ref: _ref, ...props }, forwardedRef) => {
298
227
  let title = item.name ?? item.title ?? item.type ?? "Object";
299
228
  if (typeof title !== "string") {
300
229
  title = title?.content ?? "";
301
230
  }
302
- return /* @__PURE__ */ import_react5.default.createElement("div", {
231
+ return /* @__PURE__ */ import_react3.default.createElement("div", {
303
232
  role: "group",
304
233
  className: (0, import_react_ui_theme2.mx)("grid col-span-3 py-1 pr-4", import_react_ui_theme2.hoverableControls, import_react_ui_theme2.hoverableFocusedWithinControls),
305
234
  style: draggableStyle,
306
235
  ref: forwardedRef
307
- }, /* @__PURE__ */ import_react5.default.createElement(import_app_framework2.Surface, {
236
+ }, /* @__PURE__ */ import_react3.default.createElement(import_app_framework.Surface, {
308
237
  role: "card",
309
238
  limit: 1,
310
239
  data: {
311
- content: item
240
+ subject: item
312
241
  },
313
242
  draggableProps,
314
243
  fallback: title,
315
244
  ...props
316
245
  }));
317
246
  });
318
- var ChatHeading = ({ attendableId }) => {
319
- const { t } = (0, import_react_ui2.useTranslation)(import_chunk_IC2NICNC.THREAD_PLUGIN);
320
- return /* @__PURE__ */ import_react3.default.createElement("div", {
321
- role: "none",
322
- className: "flex items-center"
323
- }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui_stack.StackItem.SigilButton, {
324
- attendableId
325
- }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Icon, {
326
- icon: "ph--chat--regular",
327
- size: 5
328
- })), /* @__PURE__ */ import_react3.default.createElement(import_react_ui_stack.StackItem.HeadingLabel, {
329
- attendableId
330
- }, t("chat heading")));
331
- };
332
247
  var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
333
248
  const identity = (0, import_halo.useIdentity)();
334
- const space = (0, import_echo2.getSpace)(thread);
335
- const members = (0, import_echo2.useMembers)(space?.key);
336
- const activity = useStatus(space, (0, import_echo2.fullyQualifiedId)(thread));
337
- const { t } = (0, import_react_ui2.useTranslation)(import_chunk_IC2NICNC.THREAD_PLUGIN);
338
- const [_count, _setCount] = (0, import_react3.useState)(0);
249
+ const space = (0, import_echo.getSpace)(thread);
250
+ const members = (0, import_echo.useMembers)(space?.key);
251
+ const activity = (0, import_chunk_AWSTZ2KN.useStatus)(space, (0, import_echo.fullyQualifiedId)(thread));
252
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_F735VMTN.THREAD_PLUGIN);
253
+ const [_count, _setCount] = (0, import_react.useState)(0);
339
254
  const rerenderEditor = () => _setCount((count) => count + 1);
340
- const [autoFocus, setAutoFocus] = (0, import_react3.useState)(autoFocusTextbox);
341
- const threadScrollRef = (0, import_react3.useRef)(null);
342
- const { themeMode } = (0, import_react_ui2.useThemeContext)();
343
- const textboxMetadata = getMessageMetadata((0, import_echo2.fullyQualifiedId)(thread), identity);
344
- const messageRef = (0, import_react3.useRef)("");
345
- const extensions = (0, import_react3.useMemo)(() => [
255
+ const [autoFocus, setAutoFocus] = (0, import_react.useState)(autoFocusTextbox);
256
+ const threadScrollRef = (0, import_react.useRef)(null);
257
+ const { themeMode } = (0, import_react_ui.useThemeContext)();
258
+ const textboxMetadata = getMessageMetadata((0, import_echo.fullyQualifiedId)(thread), identity);
259
+ const messageRef = (0, import_react.useRef)("");
260
+ const extensions = (0, import_react.useMemo)(() => [
346
261
  (0, import_react_ui_editor.createBasicExtensions)({
347
262
  placeholder: t("message placeholder")
348
263
  }),
@@ -361,21 +276,21 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
361
276
  behavior,
362
277
  block: "end"
363
278
  }), 10);
364
- (0, import_react3.useLayoutEffect)(() => {
279
+ (0, import_react.useLayoutEffect)(() => {
365
280
  scrollToEnd("instant");
366
281
  }, []);
367
282
  const handleCreate = () => {
368
283
  if (!messageRef.current?.length) {
369
284
  return false;
370
285
  }
371
- thread.messages.push((0, import_live_object.create)(import_types.MessageType, {
286
+ thread.messages.push((0, import_live_object.makeRef)((0, import_live_object.create)(import_types.MessageType, {
372
287
  sender: {
373
288
  identityKey: identity.identityKey.toHex()
374
289
  },
375
290
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
376
291
  text: messageRef.current,
377
- context
378
- }));
292
+ context: (0, import_live_object.makeRef)(context)
293
+ })));
379
294
  messageRef.current = "";
380
295
  setAutoFocus(true);
381
296
  scrollToEnd("smooth");
@@ -383,49 +298,45 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
383
298
  return true;
384
299
  };
385
300
  const handleDelete = (id) => {
386
- const messageIndex = thread.messages.filter(import_util.nonNullable).findIndex((message) => message.id === id);
301
+ const messageIndex = thread.messages.findIndex(import_echo_schema.Ref.hasObjectId(id));
387
302
  if (messageIndex !== -1) {
388
303
  thread.messages.splice(messageIndex, 1);
389
304
  }
390
305
  };
391
- return /* @__PURE__ */ import_react3.default.createElement(import_react_ui_thread.Thread, {
306
+ return /* @__PURE__ */ import_react.default.createElement(import_react_ui_thread.Thread, {
392
307
  current,
393
- id: (0, import_echo2.fullyQualifiedId)(thread),
308
+ id: (0, import_echo.fullyQualifiedId)(thread),
394
309
  classNames: "bs-full grid-rows-[1fr_min-content_min-content] overflow-hidden transition-[padding-block-end] [[data-sidebar-inline-start-state=open]_&]:lg:pbe-0"
395
- }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ScrollArea.Root, {
310
+ }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.ScrollArea.Root, {
396
311
  classNames: "col-span-2"
397
- }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ScrollArea.Viewport, {
312
+ }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.ScrollArea.Viewport, {
398
313
  classNames: "overflow-anchored after:overflow-anchor after:block after:bs-px after:-mbs-px [&>div]:min-bs-full [&>div]:!grid [&>div]:grid-rows-[1fr_0]"
399
- }, /* @__PURE__ */ import_react3.default.createElement("div", {
314
+ }, /* @__PURE__ */ import_react.default.createElement("div", {
400
315
  role: "none",
401
316
  className: (0, import_react_ui_theme.mx)(import_react_ui_thread.threadLayout, "place-self-end")
402
- }, thread.messages.filter(import_util.nonNullable).map((message) => /* @__PURE__ */ import_react3.default.createElement(MessageContainer, {
317
+ }, import_live_object.RefArray.allResolvedTargets(thread.messages ?? []).map((message) => /* @__PURE__ */ import_react.default.createElement(MessageContainer, {
403
318
  key: message.id,
404
319
  message,
405
320
  members,
406
321
  onDelete: handleDelete
407
- }))), /* @__PURE__ */ import_react3.default.createElement("div", {
322
+ }))), /* @__PURE__ */ import_react.default.createElement("div", {
408
323
  role: "none",
409
324
  className: "bs-px -mbs-px",
410
325
  ref: threadScrollRef
411
- }), /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ScrollArea.Scrollbar, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ScrollArea.Thumb, null)))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui_thread.MessageTextbox, {
326
+ }), /* @__PURE__ */ import_react.default.createElement(import_react_ui.ScrollArea.Scrollbar, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui.ScrollArea.Thumb, null)))), /* @__PURE__ */ import_react.default.createElement(import_react_ui_thread.MessageTextbox, {
412
327
  extensions,
413
328
  autoFocus,
414
329
  onSend: handleCreate,
415
330
  ...textboxMetadata
416
- }), /* @__PURE__ */ import_react3.default.createElement(import_react_ui_thread.ThreadFooter, {
331
+ }), /* @__PURE__ */ import_react.default.createElement(import_react_ui_thread.ThreadFooter, {
417
332
  activity
418
333
  }, t("activity message")));
419
334
  };
420
335
  // Annotate the CommonJS export names for ESM import in node:
421
336
  0 && (module.exports = {
422
337
  ChatContainer,
423
- ChatHeading,
424
338
  MessageContainer,
425
339
  command,
426
- getMessageMetadata,
427
- useAnalyticsCallback,
428
- useOnEditAnalytics,
429
- useStatus
340
+ getMessageMetadata
430
341
  });
431
- //# sourceMappingURL=chunk-YCDM2SZM.cjs.map
342
+ //# sourceMappingURL=chunk-6PUGKCPR.cjs.map