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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/dist/lib/browser/ThreadContainer-T4WIBHY6.mjs +19 -0
  2. package/dist/lib/browser/ThreadContainer-T4WIBHY6.mjs.map +7 -0
  3. package/dist/lib/browser/app-graph-builder-IANFWFYN.mjs +121 -0
  4. package/dist/lib/browser/app-graph-builder-IANFWFYN.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-52HWDLBR.mjs → chunk-5EQVG4L3.mjs} +33 -121
  6. package/dist/lib/browser/chunk-5EQVG4L3.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-ENERBDYI.mjs → chunk-636QDHE3.mjs} +3 -3
  8. package/dist/lib/browser/chunk-636QDHE3.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-BNEWNQBO.mjs +71 -0
  10. package/dist/lib/browser/chunk-BNEWNQBO.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-L4QHQNDC.mjs +18 -0
  12. package/dist/lib/browser/chunk-L4QHQNDC.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-NAO3LZMZ.mjs +16 -0
  14. package/dist/lib/browser/chunk-NAO3LZMZ.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-NO5AZLUZ.mjs +81 -0
  16. package/dist/lib/browser/chunk-NO5AZLUZ.mjs.map +7 -0
  17. package/dist/lib/browser/index.mjs +147 -1094
  18. package/dist/lib/browser/index.mjs.map +4 -4
  19. package/dist/lib/browser/intent-resolver-QFP6L3AF.mjs +287 -0
  20. package/dist/lib/browser/intent-resolver-QFP6L3AF.mjs.map +7 -0
  21. package/dist/lib/browser/markdown-2NBXKXCY.mjs +112 -0
  22. package/dist/lib/browser/markdown-2NBXKXCY.mjs.map +7 -0
  23. package/dist/lib/browser/meta.json +1 -1
  24. package/dist/lib/browser/react-surface-LDPZN456.mjs +424 -0
  25. package/dist/lib/browser/react-surface-LDPZN456.mjs.map +7 -0
  26. package/dist/lib/browser/settings-TKOPRXSU.mjs +22 -0
  27. package/dist/lib/browser/settings-TKOPRXSU.mjs.map +7 -0
  28. package/dist/lib/browser/state-GNFUURIC.mjs +33 -0
  29. package/dist/lib/browser/state-GNFUURIC.mjs.map +7 -0
  30. package/dist/lib/browser/types.mjs +6 -4
  31. package/dist/lib/node/{ThreadArticle-I7ADXDW3.cjs → ThreadContainer-4XACAVGV.cjs} +14 -13
  32. package/dist/lib/node/ThreadContainer-4XACAVGV.cjs.map +7 -0
  33. package/dist/lib/node/app-graph-builder-LFEDPJLK.cjs +135 -0
  34. package/dist/lib/node/app-graph-builder-LFEDPJLK.cjs.map +7 -0
  35. package/dist/lib/node/{ThreadMain-MRNJC3TI.cjs → chunk-346YIZVL.cjs} +26 -23
  36. package/dist/lib/node/chunk-346YIZVL.cjs.map +7 -0
  37. package/dist/lib/node/chunk-AUVKOX5Q.cjs +101 -0
  38. package/dist/lib/node/chunk-AUVKOX5Q.cjs.map +7 -0
  39. package/dist/lib/node/chunk-AWSTZ2KN.cjs +93 -0
  40. package/dist/lib/node/chunk-AWSTZ2KN.cjs.map +7 -0
  41. package/dist/lib/node/{chunk-IC2NICNC.cjs → chunk-F735VMTN.cjs} +7 -7
  42. package/dist/lib/node/chunk-F735VMTN.cjs.map +7 -0
  43. package/dist/lib/node/{meta.cjs → chunk-FPWNZ6TB.cjs} +13 -10
  44. package/dist/lib/node/chunk-FPWNZ6TB.cjs.map +7 -0
  45. package/dist/lib/node/{chunk-YCDM2SZM.cjs → chunk-VAZ3BCTU.cjs} +77 -168
  46. package/dist/lib/node/chunk-VAZ3BCTU.cjs.map +7 -0
  47. package/dist/lib/node/index.cjs +142 -1083
  48. package/dist/lib/node/index.cjs.map +4 -4
  49. package/dist/lib/node/intent-resolver-ZSOQILPJ.cjs +299 -0
  50. package/dist/lib/node/intent-resolver-ZSOQILPJ.cjs.map +7 -0
  51. package/dist/lib/node/markdown-FWRKMSKV.cjs +122 -0
  52. package/dist/lib/node/markdown-FWRKMSKV.cjs.map +7 -0
  53. package/dist/lib/node/meta.json +1 -1
  54. package/dist/lib/node/react-surface-MCQUT7BC.cjs +426 -0
  55. package/dist/lib/node/react-surface-MCQUT7BC.cjs.map +7 -0
  56. package/dist/lib/node/settings-TH4YSUVU.cjs +36 -0
  57. package/dist/lib/node/settings-TH4YSUVU.cjs.map +7 -0
  58. package/dist/lib/node/state-TQWEZ6B3.cjs +49 -0
  59. package/dist/lib/node/state-TQWEZ6B3.cjs.map +7 -0
  60. package/dist/lib/node/types.cjs +6 -4
  61. package/dist/lib/node/types.cjs.map +2 -2
  62. package/dist/lib/node-esm/ThreadContainer-FGFB25TQ.mjs +20 -0
  63. package/dist/lib/node-esm/ThreadContainer-FGFB25TQ.mjs.map +7 -0
  64. package/dist/lib/node-esm/app-graph-builder-IXHFRMCY.mjs +122 -0
  65. package/dist/lib/node-esm/app-graph-builder-IXHFRMCY.mjs.map +7 -0
  66. package/dist/lib/node-esm/chunk-3INUK3A6.mjs +20 -0
  67. package/dist/lib/node-esm/chunk-3INUK3A6.mjs.map +7 -0
  68. package/dist/lib/node-esm/chunk-B3CF35MY.mjs +82 -0
  69. package/dist/lib/node-esm/chunk-B3CF35MY.mjs.map +7 -0
  70. package/dist/lib/node-esm/{chunk-JG7MXH6O.mjs → chunk-DKCH2H5C.mjs} +33 -121
  71. package/dist/lib/node-esm/chunk-DKCH2H5C.mjs.map +7 -0
  72. package/dist/lib/node-esm/{chunk-7QRGG25F.mjs → chunk-FXUATCLW.mjs} +3 -3
  73. package/dist/lib/node-esm/chunk-FXUATCLW.mjs.map +7 -0
  74. package/dist/lib/node-esm/chunk-HLWJTUWZ.mjs +73 -0
  75. package/dist/lib/node-esm/chunk-HLWJTUWZ.mjs.map +7 -0
  76. package/dist/lib/node-esm/chunk-ZJITX3TO.mjs +17 -0
  77. package/dist/lib/node-esm/chunk-ZJITX3TO.mjs.map +7 -0
  78. package/dist/lib/node-esm/index.mjs +147 -1094
  79. package/dist/lib/node-esm/index.mjs.map +4 -4
  80. package/dist/lib/node-esm/intent-resolver-MHP4C2NZ.mjs +288 -0
  81. package/dist/lib/node-esm/intent-resolver-MHP4C2NZ.mjs.map +7 -0
  82. package/dist/lib/node-esm/markdown-6AQFDAW3.mjs +113 -0
  83. package/dist/lib/node-esm/markdown-6AQFDAW3.mjs.map +7 -0
  84. package/dist/lib/node-esm/meta.json +1 -1
  85. package/dist/lib/node-esm/react-surface-6JMVZUDM.mjs +425 -0
  86. package/dist/lib/node-esm/react-surface-6JMVZUDM.mjs.map +7 -0
  87. package/dist/lib/node-esm/settings-KEDRR7RM.mjs +23 -0
  88. package/dist/lib/node-esm/settings-KEDRR7RM.mjs.map +7 -0
  89. package/dist/lib/node-esm/state-7MLR27YG.mjs +34 -0
  90. package/dist/lib/node-esm/state-7MLR27YG.mjs.map +7 -0
  91. package/dist/lib/node-esm/types.mjs +6 -4
  92. package/dist/types/src/ThreadPlugin.d.ts +1 -3
  93. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  94. package/dist/types/src/capabilities/app-graph-builder.d.ts +180 -0
  95. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  96. package/dist/types/src/capabilities/capabilities.d.ts +15 -0
  97. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
  98. package/dist/types/src/capabilities/index.d.ts +187 -0
  99. package/dist/types/src/capabilities/index.d.ts.map +1 -0
  100. package/dist/types/src/capabilities/intent-resolver.d.ts +4 -0
  101. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -0
  102. package/dist/types/src/capabilities/markdown.d.ts +4 -0
  103. package/dist/types/src/capabilities/markdown.d.ts.map +1 -0
  104. package/dist/types/src/capabilities/react-surface.d.ts +4 -0
  105. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  106. package/dist/types/src/capabilities/settings.d.ts +4 -0
  107. package/dist/types/src/capabilities/settings.d.ts.map +1 -0
  108. package/dist/types/src/capabilities/state.d.ts +7 -0
  109. package/dist/types/src/capabilities/state.d.ts.map +1 -0
  110. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  111. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  112. package/dist/types/src/components/CommentContainer.d.ts +1 -1
  113. package/dist/types/src/components/CommentContainer.d.ts.map +1 -1
  114. package/dist/types/src/components/CommentsContainer.d.ts +2 -7
  115. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  116. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  117. package/dist/types/src/components/ThreadComplementary.d.ts +1 -6
  118. package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
  119. package/dist/types/src/components/ThreadContainer.d.ts +7 -0
  120. package/dist/types/src/components/ThreadContainer.d.ts.map +1 -0
  121. package/dist/types/src/components/command-extension.d.ts.map +1 -1
  122. package/dist/types/src/components/index.d.ts +3 -15
  123. package/dist/types/src/components/index.d.ts.map +1 -1
  124. package/dist/types/src/components/testing.d.ts +50 -66
  125. package/dist/types/src/components/testing.d.ts.map +1 -1
  126. package/dist/types/src/components/types.d.ts +5 -5
  127. package/dist/types/src/components/types.d.ts.map +1 -1
  128. package/dist/types/src/extensions/threads.d.ts +2 -2
  129. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  130. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  131. package/dist/types/src/index.d.ts +1 -3
  132. package/dist/types/src/index.d.ts.map +1 -1
  133. package/dist/types/src/meta.d.ts +1 -2
  134. package/dist/types/src/meta.d.ts.map +1 -1
  135. package/dist/types/src/translations.d.ts +3 -0
  136. package/dist/types/src/translations.d.ts.map +1 -1
  137. package/dist/types/src/types.d.ts +86 -22
  138. package/dist/types/src/types.d.ts.map +1 -1
  139. package/dist/types/tsconfig.tsbuildinfo +1 -0
  140. package/package.json +30 -38
  141. package/src/ThreadPlugin.tsx +108 -620
  142. package/src/capabilities/app-graph-builder.ts +119 -0
  143. package/src/capabilities/capabilities.ts +19 -0
  144. package/src/capabilities/index.ts +14 -0
  145. package/src/capabilities/intent-resolver.ts +239 -0
  146. package/src/capabilities/markdown.ts +18 -0
  147. package/src/capabilities/react-surface.tsx +62 -0
  148. package/src/capabilities/settings.ts +14 -0
  149. package/src/capabilities/state.ts +25 -0
  150. package/src/components/Chat.stories.tsx +26 -22
  151. package/src/components/ChatContainer.tsx +12 -10
  152. package/src/components/CommentContainer.tsx +21 -32
  153. package/src/components/CommentsContainer.tsx +1 -17
  154. package/src/components/MessageContainer.tsx +7 -5
  155. package/src/components/ThreadComplementary.tsx +91 -68
  156. package/src/components/ThreadContainer.tsx +22 -0
  157. package/src/components/ThreadSettings.tsx +3 -3
  158. package/src/components/command-extension.ts +2 -5
  159. package/src/components/index.ts +1 -2
  160. package/src/components/testing.ts +26 -22
  161. package/src/components/types.ts +5 -5
  162. package/src/extensions/threads.ts +16 -25
  163. package/src/hooks/analytics.ts +6 -10
  164. package/src/index.ts +1 -5
  165. package/src/meta.ts +1 -1
  166. package/src/translations.ts +1 -0
  167. package/src/types.ts +70 -38
  168. package/dist/lib/browser/ThreadArticle-6IXTL7CH.mjs +0 -18
  169. package/dist/lib/browser/ThreadArticle-6IXTL7CH.mjs.map +0 -7
  170. package/dist/lib/browser/ThreadMain-4IAS67KE.mjs +0 -26
  171. package/dist/lib/browser/ThreadMain-4IAS67KE.mjs.map +0 -7
  172. package/dist/lib/browser/chunk-52HWDLBR.mjs.map +0 -7
  173. package/dist/lib/browser/chunk-ENERBDYI.mjs.map +0 -7
  174. package/dist/lib/browser/chunk-XUHNZID5.mjs +0 -20
  175. package/dist/lib/browser/chunk-XUHNZID5.mjs.map +0 -7
  176. package/dist/lib/browser/meta.mjs +0 -11
  177. package/dist/lib/browser/meta.mjs.map +0 -7
  178. package/dist/lib/node/ThreadArticle-I7ADXDW3.cjs.map +0 -7
  179. package/dist/lib/node/ThreadMain-MRNJC3TI.cjs.map +0 -7
  180. package/dist/lib/node/chunk-IC2NICNC.cjs.map +0 -7
  181. package/dist/lib/node/chunk-XFO6D2LG.cjs +0 -39
  182. package/dist/lib/node/chunk-XFO6D2LG.cjs.map +0 -7
  183. package/dist/lib/node/chunk-YCDM2SZM.cjs.map +0 -7
  184. package/dist/lib/node/meta.cjs.map +0 -7
  185. package/dist/lib/node-esm/ThreadArticle-CJHYMF2W.mjs +0 -19
  186. package/dist/lib/node-esm/ThreadArticle-CJHYMF2W.mjs.map +0 -7
  187. package/dist/lib/node-esm/ThreadMain-VISGW4IF.mjs +0 -27
  188. package/dist/lib/node-esm/ThreadMain-VISGW4IF.mjs.map +0 -7
  189. package/dist/lib/node-esm/chunk-7QRGG25F.mjs.map +0 -7
  190. package/dist/lib/node-esm/chunk-I5MU54RT.mjs +0 -21
  191. package/dist/lib/node-esm/chunk-I5MU54RT.mjs.map +0 -7
  192. package/dist/lib/node-esm/chunk-JG7MXH6O.mjs.map +0 -7
  193. package/dist/lib/node-esm/meta.mjs +0 -12
  194. package/dist/lib/node-esm/meta.mjs.map +0 -7
  195. package/dist/types/src/components/ThreadArticle.d.ts +0 -5
  196. package/dist/types/src/components/ThreadArticle.d.ts.map +0 -1
  197. package/dist/types/src/components/ThreadMain.d.ts +0 -7
  198. package/dist/types/src/components/ThreadMain.d.ts.map +0 -1
  199. package/src/components/ThreadArticle.tsx +0 -18
  200. package/src/components/ThreadMain.tsx +0 -27
@@ -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_VAZ3BCTU_exports = {};
30
+ __export(chunk_VAZ3BCTU_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_VAZ3BCTU_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
@@ -150,9 +83,7 @@ var parser = import_language.StreamLanguage.define({
150
83
  var styles = import_language.HighlightStyle.define([
151
84
  {
152
85
  tag: import_react_ui_editor3.tags.tagName,
153
- class: (0, import_react_ui_theme3.mx)((0, import_react_ui_theme3.tagRoot)({
154
- palette: "cyan"
155
- }), "text-baseText font-medium")
86
+ class: (0, import_react_ui_theme3.mx)("dx-tag dx-tag--indigo text-baseText font-medium")
156
87
  }
157
88
  ]);
158
89
  var command = [
@@ -160,7 +91,7 @@ var command = [
160
91
  (0, import_language.syntaxHighlighting)(styles)
161
92
  ];
162
93
  var getMessageMetadata = (id, identity) => {
163
- const fallback = (0, import_util3.hexToFallback)(identity?.identityKey.toHex() ?? "0");
94
+ const fallback = (0, import_util.hexToFallback)(identity?.identityKey.toHex() ?? "0");
164
95
  return {
165
96
  id,
166
97
  authorId: identity?.identityKey.toHex(),
@@ -179,84 +110,80 @@ var MessageContainer = ({ message, members, onDelete }) => {
179
110
  const senderIdentity = members.find((member) => message.sender.identityKey && import_react_client.PublicKey.equals(member.identity.identityKey, message.sender.identityKey))?.identity;
180
111
  const messageMetadata = getMessageMetadata(message.id, senderIdentity);
181
112
  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), [
113
+ const [editing, setEditing] = (0, import_react3.useState)(false);
114
+ const handleDelete = (0, import_react3.useCallback)(() => onDelete?.(message.id), [
184
115
  message,
185
116
  onDelete
186
117
  ]);
187
- const { t } = (0, import_react_ui3.useTranslation)(import_chunk_IC2NICNC.THREAD_PLUGIN);
118
+ const { t } = (0, import_react_ui2.useTranslation)(import_chunk_F735VMTN.THREAD_PLUGIN);
188
119
  const editLabel = t(editing ? "save message label" : "edit message label");
189
120
  const deleteLabel = t("delete message label");
190
- return /* @__PURE__ */ import_react5.default.createElement(import_react_ui_thread2.MessageRoot, {
121
+ return /* @__PURE__ */ import_react3.default.createElement(import_react_ui_thread2.MessageRoot, {
191
122
  ...messageMetadata,
192
123
  classNames: [
193
124
  import_react_ui_theme2.hoverableControls,
194
125
  import_react_ui_theme2.hoverableFocusedWithinControls
195
126
  ]
196
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui_thread2.MessageHeading, {
127
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui_thread2.MessageHeading, {
197
128
  authorName: messageMetadata.authorName,
198
129
  timestamp: messageMetadata.timestamp
199
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.ButtonGroup, {
130
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ButtonGroup, {
200
131
  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, {
132
+ }, userIsAuthor && /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Root, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Trigger, {
202
133
  asChild: true
203
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Button, {
134
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Button, {
204
135
  variant: "ghost",
205
136
  "data-testid": editing ? "thread.message.save" : "thread.message.edit",
206
137
  classNames: messageControlClassNames,
207
138
  onClick: () => setEditing((editing2) => !editing2)
208
- }, /* @__PURE__ */ import_react5.default.createElement("span", {
139
+ }, /* @__PURE__ */ import_react3.default.createElement("span", {
209
140
  className: "sr-only"
210
- }, editLabel), editing ? /* @__PURE__ */ import_react5.default.createElement(import_react4.Check, {
141
+ }, editLabel), editing ? /* @__PURE__ */ import_react3.default.createElement(import_react2.Check, {
211
142
  className: (0, import_react_ui_theme2.getSize)(4)
212
- }) : /* @__PURE__ */ import_react5.default.createElement(import_react4.PencilSimple, {
143
+ }) : /* @__PURE__ */ import_react3.default.createElement(import_react2.PencilSimple, {
213
144
  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, {
145
+ }))), /* @__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
146
  asChild: true
218
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Button, {
147
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Button, {
219
148
  variant: "ghost",
220
149
  "data-testid": "thread.message.delete",
221
150
  classNames: messageControlClassNames,
222
151
  onClick: () => handleDelete()
223
- }, /* @__PURE__ */ import_react5.default.createElement("span", {
152
+ }, /* @__PURE__ */ import_react3.default.createElement("span", {
224
153
  className: "sr-only"
225
- }, deleteLabel), /* @__PURE__ */ import_react5.default.createElement(import_react4.X, {
154
+ }, deleteLabel), /* @__PURE__ */ import_react3.default.createElement(import_react2.X, {
226
155
  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, {
156
+ }))), /* @__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
157
  message,
231
158
  isAuthor: userIsAuthor,
232
159
  editing
233
- }), message.parts?.filter(import_util2.nonNullable).map((part, index) => /* @__PURE__ */ import_react5.default.createElement(MessagePart, {
160
+ }), import_live_object2.RefArray.allResolvedTargets(message.parts ?? []).map((part, index) => /* @__PURE__ */ import_react3.default.createElement(MessagePart, {
234
161
  key: index,
235
162
  part
236
163
  })));
237
164
  };
238
165
  var MessagePart = ({ part }) => {
239
- return /* @__PURE__ */ import_react5.default.createElement(import_react_ui_mosaic.Mosaic.Container, {
166
+ return /* @__PURE__ */ import_react3.default.createElement(import_react_ui_mosaic.Mosaic.Container, {
240
167
  id: part.id
241
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui_mosaic.Mosaic.DraggableTile, {
242
- type: import_chunk_IC2NICNC.THREAD_ITEM,
168
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui_mosaic.Mosaic.DraggableTile, {
169
+ type: import_chunk_F735VMTN.THREAD_ITEM,
243
170
  path: part.id,
244
171
  item: part,
245
172
  Component: MessageBlockObjectTile
246
173
  }));
247
174
  };
248
175
  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) => {
176
+ const { themeMode } = (0, import_react_ui2.useThemeContext)();
177
+ const inMemoryContentRef = (0, import_react3.useRef)(message.text);
178
+ const handleDocumentChange = (0, import_react3.useCallback)((newState) => {
252
179
  inMemoryContentRef.current = newState;
253
180
  }, []);
254
- const saveDocumentChange = (0, import_react5.useCallback)(() => {
181
+ const saveDocumentChange = (0, import_react3.useCallback)(() => {
255
182
  message.text = inMemoryContentRef.current;
256
183
  }, [
257
184
  message
258
185
  ]);
259
- (0, import_react_ui3.useOnTransition)(editing, true, false, saveDocumentChange);
186
+ (0, import_react_ui2.useOnTransition)(editing, true, false, saveDocumentChange);
260
187
  const { parentRef, focusAttributes, view } = (0, import_react_ui_editor2.useTextEditor)(() => ({
261
188
  initialValue: message.text,
262
189
  extensions: [
@@ -280,69 +207,55 @@ var TextboxBlock = ({ message, isAuthor, editing }) => {
280
207
  themeMode,
281
208
  handleDocumentChange
282
209
  ]);
283
- (0, import_react5.useEffect)(() => {
210
+ (0, import_react3.useEffect)(() => {
284
211
  editing && view?.focus();
285
212
  }, [
286
213
  editing,
287
214
  view
288
215
  ]);
289
- useOnEditAnalytics(message, !!editing);
290
- return /* @__PURE__ */ import_react5.default.createElement("div", {
216
+ (0, import_chunk_AWSTZ2KN.useOnEditAnalytics)(message, !!editing);
217
+ return /* @__PURE__ */ import_react3.default.createElement("div", {
291
218
  role: "none",
292
219
  ref: parentRef,
293
220
  className: "mie-4",
294
221
  ...focusAttributes
295
222
  });
296
223
  };
297
- var MessageBlockObjectTile = /* @__PURE__ */ (0, import_react5.forwardRef)(({ draggableStyle, draggableProps, item, active, ref: _ref, ...props }, forwardedRef) => {
224
+ var MessageBlockObjectTile = /* @__PURE__ */ (0, import_react3.forwardRef)(({ draggableStyle, draggableProps, item, active, ref: _ref, ...props }, forwardedRef) => {
298
225
  let title = item.name ?? item.title ?? item.type ?? "Object";
299
226
  if (typeof title !== "string") {
300
227
  title = title?.content ?? "";
301
228
  }
302
- return /* @__PURE__ */ import_react5.default.createElement("div", {
229
+ return /* @__PURE__ */ import_react3.default.createElement("div", {
303
230
  role: "group",
304
231
  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
232
  style: draggableStyle,
306
233
  ref: forwardedRef
307
- }, /* @__PURE__ */ import_react5.default.createElement(import_app_framework2.Surface, {
234
+ }, /* @__PURE__ */ import_react3.default.createElement(import_app_framework.Surface, {
308
235
  role: "card",
309
236
  limit: 1,
310
237
  data: {
311
- content: item
238
+ subject: item
312
239
  },
313
240
  draggableProps,
314
241
  fallback: title,
315
242
  ...props
316
243
  }));
317
244
  });
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
245
  var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
333
246
  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);
247
+ const space = (0, import_echo.getSpace)(thread);
248
+ const members = (0, import_echo.useMembers)(space?.key);
249
+ const activity = (0, import_chunk_AWSTZ2KN.useStatus)(space, (0, import_echo.fullyQualifiedId)(thread));
250
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_F735VMTN.THREAD_PLUGIN);
251
+ const [_count, _setCount] = (0, import_react.useState)(0);
339
252
  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)(() => [
253
+ const [autoFocus, setAutoFocus] = (0, import_react.useState)(autoFocusTextbox);
254
+ const threadScrollRef = (0, import_react.useRef)(null);
255
+ const { themeMode } = (0, import_react_ui.useThemeContext)();
256
+ const textboxMetadata = getMessageMetadata((0, import_echo.fullyQualifiedId)(thread), identity);
257
+ const messageRef = (0, import_react.useRef)("");
258
+ const extensions = (0, import_react.useMemo)(() => [
346
259
  (0, import_react_ui_editor.createBasicExtensions)({
347
260
  placeholder: t("message placeholder")
348
261
  }),
@@ -361,21 +274,21 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
361
274
  behavior,
362
275
  block: "end"
363
276
  }), 10);
364
- (0, import_react3.useLayoutEffect)(() => {
277
+ (0, import_react.useLayoutEffect)(() => {
365
278
  scrollToEnd("instant");
366
279
  }, []);
367
280
  const handleCreate = () => {
368
281
  if (!messageRef.current?.length) {
369
282
  return false;
370
283
  }
371
- thread.messages.push((0, import_live_object.create)(import_types.MessageType, {
284
+ thread.messages.push((0, import_live_object.makeRef)((0, import_live_object.create)(import_types.MessageType, {
372
285
  sender: {
373
286
  identityKey: identity.identityKey.toHex()
374
287
  },
375
288
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
376
289
  text: messageRef.current,
377
- context
378
- }));
290
+ context: context ? (0, import_live_object.makeRef)(context) : void 0
291
+ })));
379
292
  messageRef.current = "";
380
293
  setAutoFocus(true);
381
294
  scrollToEnd("smooth");
@@ -383,49 +296,45 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
383
296
  return true;
384
297
  };
385
298
  const handleDelete = (id) => {
386
- const messageIndex = thread.messages.filter(import_util.nonNullable).findIndex((message) => message.id === id);
299
+ const messageIndex = thread.messages.findIndex(import_echo_schema.Ref.hasObjectId(id));
387
300
  if (messageIndex !== -1) {
388
301
  thread.messages.splice(messageIndex, 1);
389
302
  }
390
303
  };
391
- return /* @__PURE__ */ import_react3.default.createElement(import_react_ui_thread.Thread, {
304
+ return /* @__PURE__ */ import_react.default.createElement(import_react_ui_thread.Thread, {
392
305
  current,
393
- id: (0, import_echo2.fullyQualifiedId)(thread),
306
+ id: (0, import_echo.fullyQualifiedId)(thread),
394
307
  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, {
308
+ }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.ScrollArea.Root, {
396
309
  classNames: "col-span-2"
397
- }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ScrollArea.Viewport, {
310
+ }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.ScrollArea.Viewport, {
398
311
  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", {
312
+ }, /* @__PURE__ */ import_react.default.createElement("div", {
400
313
  role: "none",
401
314
  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, {
315
+ }, import_live_object.RefArray.allResolvedTargets(thread.messages ?? []).map((message) => /* @__PURE__ */ import_react.default.createElement(MessageContainer, {
403
316
  key: message.id,
404
317
  message,
405
318
  members,
406
319
  onDelete: handleDelete
407
- }))), /* @__PURE__ */ import_react3.default.createElement("div", {
320
+ }))), /* @__PURE__ */ import_react.default.createElement("div", {
408
321
  role: "none",
409
322
  className: "bs-px -mbs-px",
410
323
  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, {
324
+ }), /* @__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
325
  extensions,
413
326
  autoFocus,
414
327
  onSend: handleCreate,
415
328
  ...textboxMetadata
416
- }), /* @__PURE__ */ import_react3.default.createElement(import_react_ui_thread.ThreadFooter, {
329
+ }), /* @__PURE__ */ import_react.default.createElement(import_react_ui_thread.ThreadFooter, {
417
330
  activity
418
331
  }, t("activity message")));
419
332
  };
420
333
  // Annotate the CommonJS export names for ESM import in node:
421
334
  0 && (module.exports = {
422
335
  ChatContainer,
423
- ChatHeading,
424
336
  MessageContainer,
425
337
  command,
426
- getMessageMetadata,
427
- useAnalyticsCallback,
428
- useOnEditAnalytics,
429
- useStatus
338
+ getMessageMetadata
430
339
  });
431
- //# sourceMappingURL=chunk-YCDM2SZM.cjs.map
340
+ //# sourceMappingURL=chunk-VAZ3BCTU.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ChatContainer.tsx", "../../../src/components/MessageContainer.tsx", "../../../src/components/command-extension.ts", "../../../src/util.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useLayoutEffect, useMemo, useRef, useState } from 'react';\n\nimport { Ref } from '@dxos/echo-schema';\nimport { create, makeRef, RefArray } from '@dxos/live-object';\nimport { MessageType } from '@dxos/plugin-space/types';\nimport { fullyQualifiedId, getSpace, useMembers } from '@dxos/react-client/echo';\nimport { useIdentity } from '@dxos/react-client/halo';\nimport { Icon, ScrollArea, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { createBasicExtensions, createThemeExtensions, listener } from '@dxos/react-ui-editor';\nimport { StackItem } from '@dxos/react-ui-stack';\nimport { mx } from '@dxos/react-ui-theme';\nimport { MessageTextbox, type MessageTextboxProps, Thread, ThreadFooter, threadLayout } from '@dxos/react-ui-thread';\n\nimport { MessageContainer } from './MessageContainer';\nimport { command } from './command-extension';\nimport { type ThreadContainerProps } from './types';\nimport { useStatus } from '../hooks';\nimport { THREAD_PLUGIN } from '../meta';\nimport { getMessageMetadata } from '../util';\n\nexport const ChatHeading = ({ attendableId }: { attendableId?: string }) => {\n const { t } = useTranslation(THREAD_PLUGIN);\n return (\n <div role='none' className='flex items-center'>\n <StackItem.SigilButton attendableId={attendableId}>\n <Icon icon='ph--chat--regular' size={5} />\n </StackItem.SigilButton>\n <StackItem.HeadingLabel attendableId={attendableId}>{t('chat heading')}</StackItem.HeadingLabel>\n </div>\n );\n};\n\nexport const ChatContainer = ({ thread, context, current, autoFocusTextbox }: ThreadContainerProps) => {\n const identity = useIdentity()!;\n const space = getSpace(thread);\n const members = useMembers(space?.key);\n const activity = useStatus(space, fullyQualifiedId(thread));\n const { t } = useTranslation(THREAD_PLUGIN);\n // TODO(wittjosiah): This is a hack to reset the editor after a message is sent.\n const [_count, _setCount] = useState(0);\n const rerenderEditor = () => _setCount((count) => count + 1);\n const [autoFocus, setAutoFocus] = useState(autoFocusTextbox);\n const threadScrollRef = useRef<HTMLDivElement | null>(null);\n const { themeMode } = useThemeContext();\n\n const textboxMetadata = getMessageMetadata(fullyQualifiedId(thread), identity);\n const messageRef = useRef('');\n const extensions = useMemo(\n () => [\n createBasicExtensions({ placeholder: t('message placeholder') }),\n createThemeExtensions({ themeMode }),\n listener({ onChange: (text) => (messageRef.current = text) }),\n command,\n ],\n [themeMode, _count],\n );\n\n // TODO(thure): Factor out.\n // TODO(thure): `flex-col-reverse` does not work to start the container scrolled to the end while also using\n // `ScrollArea`. This is the least-bad way I found to scroll to the end on mount. Note that 0ms was insufficient\n // for the desired effect; this is likely hardware-dependent and should be reevaluated.\n const scrollToEnd = (behavior: ScrollBehavior) =>\n setTimeout(() => threadScrollRef.current?.scrollIntoView({ behavior, block: 'end' }), 10);\n\n useLayoutEffect(() => {\n scrollToEnd('instant');\n }, []);\n\n // TODO(burdon): Change to model.\n const handleCreate: MessageTextboxProps['onSend'] = () => {\n if (!messageRef.current?.length) {\n return false;\n }\n\n thread.messages.push(\n makeRef(\n create(MessageType, {\n sender: { identityKey: identity.identityKey.toHex() },\n timestamp: new Date().toISOString(),\n text: messageRef.current,\n context: context ? makeRef(context) : undefined,\n }),\n ),\n );\n\n messageRef.current = '';\n setAutoFocus(true);\n scrollToEnd('smooth');\n rerenderEditor();\n return true;\n };\n\n const handleDelete = (id: string) => {\n const messageIndex = thread.messages.findIndex(Ref.hasObjectId(id));\n if (messageIndex !== -1) {\n thread.messages.splice(messageIndex, 1);\n }\n };\n\n return (\n <Thread\n current={current}\n id={fullyQualifiedId(thread)}\n 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'\n >\n <ScrollArea.Root classNames='col-span-2'>\n <ScrollArea.Viewport 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]'>\n <div role='none' className={mx(threadLayout, 'place-self-end')}>\n {RefArray.allResolvedTargets(thread.messages ?? []).map((message) => (\n <MessageContainer key={message.id} message={message} members={members} onDelete={handleDelete} />\n ))}\n </div>\n {/* NOTE(thure): This can’t also be the `overflow-anchor` because `ScrollArea` injects an interceding node that contains this necessary ref’d element. */}\n <div role='none' className='bs-px -mbs-px' ref={threadScrollRef} />\n <ScrollArea.Scrollbar>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n <MessageTextbox extensions={extensions} autoFocus={autoFocus} onSend={handleCreate} {...textboxMetadata} />\n <ThreadFooter activity={activity}>{t('activity message')}</ThreadFooter>\n </Thread>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { EditorView } from '@codemirror/view';\nimport { Check, PencilSimple, X } from '@phosphor-icons/react';\nimport React, { forwardRef, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { RefArray } from '@dxos/live-object';\nimport { type MessageType } from '@dxos/plugin-space/types';\nimport { PublicKey } from '@dxos/react-client';\nimport { type ReactiveEchoObject, type Expando, type SpaceMember } from '@dxos/react-client/echo';\nimport { useIdentity, type Identity } from '@dxos/react-client/halo';\nimport { Button, ButtonGroup, Tooltip, useOnTransition, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { createBasicExtensions, createThemeExtensions, useTextEditor } from '@dxos/react-ui-editor';\nimport { Mosaic, type MosaicTileComponent } from '@dxos/react-ui-mosaic';\nimport {\n getSize,\n hoverableControlItem,\n hoverableControls,\n hoverableFocusedWithinControls,\n mx,\n} from '@dxos/react-ui-theme';\nimport { MessageHeading, MessageRoot } from '@dxos/react-ui-thread';\n\nimport { command } from './command-extension';\nimport { useOnEditAnalytics } from '../hooks';\nimport { THREAD_ITEM, THREAD_PLUGIN } from '../meta';\nimport { getMessageMetadata } from '../util';\n\n// TODO(thure): #8149\nconst messageControlClassNames = ['!p-1 !min-bs-0 transition-opacity', hoverableControlItem];\n\nexport const MessageContainer = ({\n message,\n members,\n onDelete,\n}: {\n message: MessageType;\n members: SpaceMember[];\n onDelete?: (id: string) => void;\n}) => {\n const senderIdentity = members.find(\n (member) => message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey),\n )?.identity;\n const messageMetadata = getMessageMetadata(message.id, senderIdentity);\n const userIsAuthor = useIdentity()?.identityKey.toHex() === messageMetadata.authorId;\n const [editing, setEditing] = useState(false);\n const handleDelete = useCallback(() => onDelete?.(message.id), [message, onDelete]);\n const { t } = useTranslation(THREAD_PLUGIN);\n const editLabel = t(editing ? 'save message label' : 'edit message label');\n const deleteLabel = t('delete message label');\n\n return (\n <MessageRoot {...messageMetadata} classNames={[hoverableControls, hoverableFocusedWithinControls]}>\n <MessageHeading authorName={messageMetadata.authorName} timestamp={messageMetadata.timestamp}>\n <ButtonGroup classNames='mie-1'>\n {userIsAuthor && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button\n variant='ghost'\n data-testid={editing ? 'thread.message.save' : 'thread.message.edit'}\n classNames={messageControlClassNames}\n onClick={() => setEditing((editing) => !editing)}\n >\n <span className='sr-only'>{editLabel}</span>\n {editing ? <Check className={getSize(4)} /> : <PencilSimple className={getSize(4)} />}\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n {editLabel}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n {onDelete && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button\n variant='ghost'\n data-testid='thread.message.delete'\n classNames={messageControlClassNames}\n onClick={() => handleDelete()}\n >\n <span className='sr-only'>{deleteLabel}</span>\n <X className={getSize(4)} />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n {deleteLabel}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n </ButtonGroup>\n </MessageHeading>\n <TextboxBlock message={message} isAuthor={userIsAuthor} editing={editing} />\n {RefArray.allResolvedTargets(message.parts ?? []).map((part, index) => (\n <MessagePart key={index} part={part} />\n ))}\n </MessageRoot>\n );\n};\n\nconst MessagePart = ({ part }: { part: Expando }) => {\n return (\n <Mosaic.Container id={part.id}>\n <Mosaic.DraggableTile type={THREAD_ITEM} path={part.id} item={part} Component={MessageBlockObjectTile} />\n </Mosaic.Container>\n );\n};\n\nconst TextboxBlock = ({\n message,\n isAuthor,\n editing,\n}: {\n message: MessageType;\n editing?: boolean;\n isAuthor?: boolean;\n identity?: Identity;\n}) => {\n const { themeMode } = useThemeContext();\n const inMemoryContentRef = useRef(message.text);\n\n const handleDocumentChange = useCallback((newState: string) => {\n inMemoryContentRef.current = newState;\n }, []);\n\n const saveDocumentChange = useCallback(() => {\n message.text = inMemoryContentRef.current;\n }, [message]);\n\n useOnTransition(editing, true, false, saveDocumentChange);\n\n const { parentRef, focusAttributes, view } = useTextEditor(\n () => ({\n initialValue: message.text,\n extensions: [\n createBasicExtensions({ readonly: !isAuthor || !editing }),\n createThemeExtensions({ themeMode }),\n command,\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n handleDocumentChange(update.state.doc.toString());\n }\n }),\n ],\n }),\n [message.text, editing, isAuthor, themeMode, handleDocumentChange],\n );\n\n useEffect(() => {\n editing && view?.focus();\n }, [editing, view]);\n\n useOnEditAnalytics(message, !!editing);\n\n return <div role='none' ref={parentRef} className='mie-4' {...focusAttributes} />;\n};\n\nconst MessageBlockObjectTile: MosaicTileComponent<ReactiveEchoObject<any>> = forwardRef(\n ({ draggableStyle, draggableProps, item, active, ref: _ref, ...props }, forwardedRef) => {\n let title = item.name ?? item.title ?? item.type ?? 'Object';\n if (typeof title !== 'string') {\n title = title?.content ?? '';\n }\n\n return (\n <div\n role='group'\n className={mx('grid col-span-3 py-1 pr-4', hoverableControls, hoverableFocusedWithinControls)}\n style={draggableStyle}\n ref={forwardedRef}\n >\n <Surface\n role='card'\n limit={1}\n data={{ subject: item }}\n draggableProps={draggableProps}\n fallback={title}\n {...props}\n />\n </div>\n );\n },\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { StreamLanguage, HighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { type Extension } from '@codemirror/state';\n\nimport { tags } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\n/**\n * https://github.com/codemirror/stream-parser/blob/main/test/test-stream-parser.ts\n */\nconst parser = StreamLanguage.define<{ count: number }>({\n startState: () => ({ count: 0 }),\n token: (stream, state) => {\n state.count++;\n if (stream.eatSpace()) {\n return null;\n }\n if (state.count === 1 && stream.match(/^(\\/\\w+)/)) {\n return 'tagName';\n }\n stream.next();\n return null;\n },\n});\n\nconst styles = HighlightStyle.define([\n { tag: tags.tagName, class: mx('dx-tag dx-tag--indigo text-baseText font-medium') },\n]);\n\nexport const command: Extension = [parser, syntaxHighlighting(styles)];\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { generateName } from '@dxos/display-name';\nimport { type PublicKey } from '@dxos/react-client';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { type MessageMetadata } from '@dxos/react-ui-thread';\nimport { hexToFallback } from '@dxos/util';\n\nexport type MessagePropertiesProvider = (identityKey: PublicKey | undefined) => MessageMetadata;\n\nexport const getMessageMetadata = (id: string, identity?: Identity): MessageMetadata => {\n const fallback = hexToFallback(identity?.identityKey.toHex() ?? '0');\n return {\n id,\n authorId: identity?.identityKey.toHex(),\n authorName:\n identity?.profile?.displayName ??\n (identity?.identityKey ? generateName(identity.identityKey.toHex()) : undefined),\n authorAvatarProps: {\n hue: identity?.profile?.data?.hue ?? fallback.hue,\n emoji: identity?.profile?.data?.emoji ?? fallback.emoji,\n },\n };\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["import_react", "import_live_object", "import_halo", "import_react_ui", "import_react_ui_editor", "import_react_ui_theme", "import_react_ui_thread", "parser", "StreamLanguage", "define", "startState", "count", "token", "stream", "state", "eatSpace", "match", "next", "styles", "HighlightStyle", "tag", "tags", "tagName", "class", "mx", "command", "syntaxHighlighting", "getMessageMetadata", "id", "identity", "fallback", "hexToFallback", "identityKey", "toHex", "authorId", "authorName", "profile", "displayName", "generateName", "undefined", "authorAvatarProps", "hue", "data", "emoji", "messageControlClassNames", "hoverableControlItem", "MessageContainer", "message", "members", "onDelete", "senderIdentity", "find", "member", "sender", "PublicKey", "equals", "messageMetadata", "userIsAuthor", "useIdentity", "editing", "setEditing", "useState", "handleDelete", "useCallback", "t", "useTranslation", "THREAD_PLUGIN", "editLabel", "deleteLabel", "React", "MessageRoot", "classNames", "hoverableControls", "hoverableFocusedWithinControls", "MessageHeading", "timestamp", "ButtonGroup", "Tooltip", "Root", "Trigger", "asChild", "Button", "variant", "data-testid", "onClick", "span", "className", "Check", "getSize", "PencilSimple", "Portal", "Content", "Arrow", "X", "TextboxBlock", "isAuthor", "RefArray", "allResolvedTargets", "parts", "map", "part", "index", "MessagePart", "key", "Mosaic", "Container", "DraggableTile", "type", "THREAD_ITEM", "path", "item", "Component", "MessageBlockObjectTile", "themeMode", "useThemeContext", "inMemoryContentRef", "useRef", "text", "handleDocumentChange", "newState", "current", "saveDocumentChange", "useOnTransition", "parentRef", "focusAttributes", "view", "useTextEditor", "initialValue", "extensions", "createBasicExtensions", "readonly", "createThemeExtensions", "EditorView", "updateListener", "of", "update", "docChanged", "doc", "toString", "useEffect", "focus", "useOnEditAnalytics", "div", "role", "ref", "forwardRef", "draggableStyle", "draggableProps", "active", "_ref", "props", "forwardedRef", "title", "name", "content", "style", "Surface", "limit", "subject", "ChatContainer", "thread", "context", "autoFocusTextbox", "space", "getSpace", "useMembers", "activity", "useStatus", "fullyQualifiedId", "_count", "_setCount", "rerenderEditor", "autoFocus", "setAutoFocus", "threadScrollRef", "textboxMetadata", "messageRef", "useMemo", "placeholder", "listener", "onChange", "scrollToEnd", "behavior", "setTimeout", "scrollIntoView", "block", "useLayoutEffect", "handleCreate", "length", "messages", "push", "makeRef", "create", "MessageType", "Date", "toISOString", "messageIndex", "findIndex", "Ref", "hasObjectId", "splice", "Thread", "ScrollArea", "Viewport", "threadLayout", "Scrollbar", "Thumb", "MessageTextbox", "onSend", "ThreadFooter"]
7
+ }