@dxos/plugin-thread 0.7.4 → 0.7.5-labs.401163d

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-6OP5AG2W.mjs +19 -0
  2. package/dist/lib/browser/ThreadContainer-6OP5AG2W.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-ENERBDYI.mjs → chunk-636QDHE3.mjs} +3 -3
  6. package/dist/lib/browser/chunk-636QDHE3.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-BNEWNQBO.mjs +71 -0
  8. package/dist/lib/browser/chunk-BNEWNQBO.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-CQ3NH4RJ.mjs +18 -0
  10. package/dist/lib/browser/chunk-CQ3NH4RJ.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-NAO3LZMZ.mjs +16 -0
  12. package/dist/lib/browser/chunk-NAO3LZMZ.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-NO5AZLUZ.mjs +81 -0
  14. package/dist/lib/browser/chunk-NO5AZLUZ.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-52HWDLBR.mjs → chunk-UPKU23DA.mjs} +39 -137
  16. package/dist/lib/browser/chunk-UPKU23DA.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-YDKOPRQP.mjs +424 -0
  25. package/dist/lib/browser/react-surface-YDKOPRQP.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-LTKKLPXX.cjs} +14 -13
  32. package/dist/lib/node/ThreadContainer-LTKKLPXX.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/chunk-AUVKOX5Q.cjs +101 -0
  36. package/dist/lib/node/chunk-AUVKOX5Q.cjs.map +7 -0
  37. package/dist/lib/node/chunk-AWSTZ2KN.cjs +93 -0
  38. package/dist/lib/node/chunk-AWSTZ2KN.cjs.map +7 -0
  39. package/dist/lib/node/{chunk-IC2NICNC.cjs → chunk-F735VMTN.cjs} +7 -7
  40. package/dist/lib/node/chunk-F735VMTN.cjs.map +7 -0
  41. package/dist/lib/node/{meta.cjs → chunk-FPWNZ6TB.cjs} +13 -10
  42. package/dist/lib/node/chunk-FPWNZ6TB.cjs.map +7 -0
  43. package/dist/lib/node/{chunk-YCDM2SZM.cjs → chunk-RQR5Z23G.cjs} +79 -179
  44. package/dist/lib/node/chunk-RQR5Z23G.cjs.map +7 -0
  45. package/dist/lib/node/{ThreadMain-MRNJC3TI.cjs → chunk-ZJTWNCFQ.cjs} +26 -23
  46. package/dist/lib/node/chunk-ZJTWNCFQ.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-AX644GMQ.cjs +426 -0
  55. package/dist/lib/node/react-surface-AX644GMQ.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-SV74JFRH.mjs +20 -0
  63. package/dist/lib/node-esm/ThreadContainer-SV74JFRH.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-4PZTMSVF.mjs +20 -0
  67. package/dist/lib/node-esm/chunk-4PZTMSVF.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-CISLDOH7.mjs} +39 -137
  71. package/dist/lib/node-esm/chunk-CISLDOH7.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-74X2TKEZ.mjs +425 -0
  86. package/dist/lib/node-esm/react-surface-74X2TKEZ.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 +29 -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 +23 -23
  151. package/src/components/ChatContainer.tsx +12 -10
  152. package/src/components/CommentContainer.tsx +22 -33
  153. package/src/components/CommentsContainer.tsx +1 -17
  154. package/src/components/MessageContainer.tsx +12 -23
  155. package/src/components/ThreadComplementary.tsx +92 -69
  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,43 @@ 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_RQR5Z23G_exports = {};
30
+ __export(chunk_RQR5Z23G_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_RQR5Z23G_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
- var import_react_ui_mosaic = require("@dxos/react-ui-mosaic");
68
59
  var import_react_ui_theme2 = require("@dxos/react-ui-theme");
69
60
  var import_react_ui_thread2 = require("@dxos/react-ui-thread");
70
- var import_util2 = require("@dxos/util");
71
61
  var import_language = require("@codemirror/language");
72
62
  var import_react_ui_editor3 = require("@dxos/react-ui-editor");
73
63
  var import_react_ui_theme3 = require("@dxos/react-ui-theme");
74
64
  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
- };
65
+ var import_util = require("@dxos/util");
134
66
  var parser = import_language.StreamLanguage.define({
135
67
  startState: () => ({
136
68
  count: 0
@@ -150,9 +82,7 @@ var parser = import_language.StreamLanguage.define({
150
82
  var styles = import_language.HighlightStyle.define([
151
83
  {
152
84
  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")
85
+ class: (0, import_react_ui_theme3.mx)("dx-tag dx-tag--indigo text-baseText font-medium")
156
86
  }
157
87
  ]);
158
88
  var command = [
@@ -160,7 +90,7 @@ var command = [
160
90
  (0, import_language.syntaxHighlighting)(styles)
161
91
  ];
162
92
  var getMessageMetadata = (id, identity) => {
163
- const fallback = (0, import_util3.hexToFallback)(identity?.identityKey.toHex() ?? "0");
93
+ const fallback = (0, import_util.hexToFallback)(identity?.identityKey.toHex() ?? "0");
164
94
  return {
165
95
  id,
166
96
  authorId: identity?.identityKey.toHex(),
@@ -179,84 +109,75 @@ var MessageContainer = ({ message, members, onDelete }) => {
179
109
  const senderIdentity = members.find((member) => message.sender.identityKey && import_react_client.PublicKey.equals(member.identity.identityKey, message.sender.identityKey))?.identity;
180
110
  const messageMetadata = getMessageMetadata(message.id, senderIdentity);
181
111
  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), [
112
+ const [editing, setEditing] = (0, import_react3.useState)(false);
113
+ const handleDelete = (0, import_react3.useCallback)(() => onDelete?.(message.id), [
184
114
  message,
185
115
  onDelete
186
116
  ]);
187
- const { t } = (0, import_react_ui3.useTranslation)(import_chunk_IC2NICNC.THREAD_PLUGIN);
117
+ const { t } = (0, import_react_ui2.useTranslation)(import_chunk_F735VMTN.THREAD_PLUGIN);
188
118
  const editLabel = t(editing ? "save message label" : "edit message label");
189
119
  const deleteLabel = t("delete message label");
190
- return /* @__PURE__ */ import_react5.default.createElement(import_react_ui_thread2.MessageRoot, {
120
+ return /* @__PURE__ */ import_react3.default.createElement(import_react_ui_thread2.MessageRoot, {
191
121
  ...messageMetadata,
192
122
  classNames: [
193
123
  import_react_ui_theme2.hoverableControls,
194
124
  import_react_ui_theme2.hoverableFocusedWithinControls
195
125
  ]
196
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui_thread2.MessageHeading, {
126
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui_thread2.MessageHeading, {
197
127
  authorName: messageMetadata.authorName,
198
128
  timestamp: messageMetadata.timestamp
199
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.ButtonGroup, {
129
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ButtonGroup, {
200
130
  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, {
131
+ }, userIsAuthor && /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Root, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Trigger, {
202
132
  asChild: true
203
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Button, {
133
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Button, {
204
134
  variant: "ghost",
205
135
  "data-testid": editing ? "thread.message.save" : "thread.message.edit",
206
136
  classNames: messageControlClassNames,
207
137
  onClick: () => setEditing((editing2) => !editing2)
208
- }, /* @__PURE__ */ import_react5.default.createElement("span", {
138
+ }, /* @__PURE__ */ import_react3.default.createElement("span", {
209
139
  className: "sr-only"
210
- }, editLabel), editing ? /* @__PURE__ */ import_react5.default.createElement(import_react4.Check, {
140
+ }, editLabel), editing ? /* @__PURE__ */ import_react3.default.createElement(import_react2.Check, {
211
141
  className: (0, import_react_ui_theme2.getSize)(4)
212
- }) : /* @__PURE__ */ import_react5.default.createElement(import_react4.PencilSimple, {
142
+ }) : /* @__PURE__ */ import_react3.default.createElement(import_react2.PencilSimple, {
213
143
  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, {
144
+ }))), /* @__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
145
  asChild: true
218
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Button, {
146
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Button, {
219
147
  variant: "ghost",
220
148
  "data-testid": "thread.message.delete",
221
149
  classNames: messageControlClassNames,
222
150
  onClick: () => handleDelete()
223
- }, /* @__PURE__ */ import_react5.default.createElement("span", {
151
+ }, /* @__PURE__ */ import_react3.default.createElement("span", {
224
152
  className: "sr-only"
225
- }, deleteLabel), /* @__PURE__ */ import_react5.default.createElement(import_react4.X, {
153
+ }, deleteLabel), /* @__PURE__ */ import_react3.default.createElement(import_react2.X, {
226
154
  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, {
155
+ }))), /* @__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
156
  message,
231
157
  isAuthor: userIsAuthor,
232
158
  editing
233
- }), message.parts?.filter(import_util2.nonNullable).map((part, index) => /* @__PURE__ */ import_react5.default.createElement(MessagePart, {
159
+ }), import_live_object2.RefArray.allResolvedTargets(message.parts ?? []).map((part, index) => /* @__PURE__ */ import_react3.default.createElement(MessagePart, {
234
160
  key: index,
235
161
  part
236
162
  })));
237
163
  };
238
164
  var MessagePart = ({ part }) => {
239
- return /* @__PURE__ */ import_react5.default.createElement(import_react_ui_mosaic.Mosaic.Container, {
240
- id: part.id
241
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui_mosaic.Mosaic.DraggableTile, {
242
- type: import_chunk_IC2NICNC.THREAD_ITEM,
243
- path: part.id,
244
- item: part,
245
- Component: MessageBlockObjectTile
246
- }));
165
+ return /* @__PURE__ */ import_react3.default.createElement(MessageBlockObjectTile, {
166
+ subject: part
167
+ });
247
168
  };
248
169
  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) => {
170
+ const { themeMode } = (0, import_react_ui2.useThemeContext)();
171
+ const inMemoryContentRef = (0, import_react3.useRef)(message.text);
172
+ const handleDocumentChange = (0, import_react3.useCallback)((newState) => {
252
173
  inMemoryContentRef.current = newState;
253
174
  }, []);
254
- const saveDocumentChange = (0, import_react5.useCallback)(() => {
175
+ const saveDocumentChange = (0, import_react3.useCallback)(() => {
255
176
  message.text = inMemoryContentRef.current;
256
177
  }, [
257
178
  message
258
179
  ]);
259
- (0, import_react_ui3.useOnTransition)(editing, true, false, saveDocumentChange);
180
+ (0, import_react_ui2.useOnTransition)(editing, true, false, saveDocumentChange);
260
181
  const { parentRef, focusAttributes, view } = (0, import_react_ui_editor2.useTextEditor)(() => ({
261
182
  initialValue: message.text,
262
183
  extensions: [
@@ -280,69 +201,52 @@ var TextboxBlock = ({ message, isAuthor, editing }) => {
280
201
  themeMode,
281
202
  handleDocumentChange
282
203
  ]);
283
- (0, import_react5.useEffect)(() => {
204
+ (0, import_react3.useEffect)(() => {
284
205
  editing && view?.focus();
285
206
  }, [
286
207
  editing,
287
208
  view
288
209
  ]);
289
- useOnEditAnalytics(message, !!editing);
290
- return /* @__PURE__ */ import_react5.default.createElement("div", {
210
+ (0, import_chunk_AWSTZ2KN.useOnEditAnalytics)(message, !!editing);
211
+ return /* @__PURE__ */ import_react3.default.createElement("div", {
291
212
  role: "none",
292
213
  ref: parentRef,
293
214
  className: "mie-4",
294
215
  ...focusAttributes
295
216
  });
296
217
  };
297
- var MessageBlockObjectTile = /* @__PURE__ */ (0, import_react5.forwardRef)(({ draggableStyle, draggableProps, item, active, ref: _ref, ...props }, forwardedRef) => {
298
- let title = item.name ?? item.title ?? item.type ?? "Object";
218
+ var MessageBlockObjectTile = /* @__PURE__ */ (0, import_react3.forwardRef)(({ subject }, forwardedRef) => {
219
+ let title = subject.name ?? subject.title ?? subject.type ?? "Object";
299
220
  if (typeof title !== "string") {
300
221
  title = title?.content ?? "";
301
222
  }
302
- return /* @__PURE__ */ import_react5.default.createElement("div", {
223
+ return /* @__PURE__ */ import_react3.default.createElement("div", {
303
224
  role: "group",
304
225
  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
- style: draggableStyle,
306
226
  ref: forwardedRef
307
- }, /* @__PURE__ */ import_react5.default.createElement(import_app_framework2.Surface, {
227
+ }, /* @__PURE__ */ import_react3.default.createElement(import_app_framework.Surface, {
308
228
  role: "card",
309
229
  limit: 1,
310
230
  data: {
311
- content: item
231
+ subject
312
232
  },
313
- draggableProps,
314
- fallback: title,
315
- ...props
233
+ fallback: title
316
234
  }));
317
235
  });
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
236
  var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
333
237
  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);
238
+ const space = (0, import_echo.getSpace)(thread);
239
+ const members = (0, import_echo.useMembers)(space?.key);
240
+ const activity = (0, import_chunk_AWSTZ2KN.useStatus)(space, (0, import_echo.fullyQualifiedId)(thread));
241
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_F735VMTN.THREAD_PLUGIN);
242
+ const [_count, _setCount] = (0, import_react.useState)(0);
339
243
  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)(() => [
244
+ const [autoFocus, setAutoFocus] = (0, import_react.useState)(autoFocusTextbox);
245
+ const threadScrollRef = (0, import_react.useRef)(null);
246
+ const { themeMode } = (0, import_react_ui.useThemeContext)();
247
+ const textboxMetadata = getMessageMetadata((0, import_echo.fullyQualifiedId)(thread), identity);
248
+ const messageRef = (0, import_react.useRef)("");
249
+ const extensions = (0, import_react.useMemo)(() => [
346
250
  (0, import_react_ui_editor.createBasicExtensions)({
347
251
  placeholder: t("message placeholder")
348
252
  }),
@@ -361,21 +265,21 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
361
265
  behavior,
362
266
  block: "end"
363
267
  }), 10);
364
- (0, import_react3.useLayoutEffect)(() => {
268
+ (0, import_react.useLayoutEffect)(() => {
365
269
  scrollToEnd("instant");
366
270
  }, []);
367
271
  const handleCreate = () => {
368
272
  if (!messageRef.current?.length) {
369
273
  return false;
370
274
  }
371
- thread.messages.push((0, import_live_object.create)(import_types.MessageType, {
275
+ thread.messages.push((0, import_live_object.makeRef)((0, import_live_object.create)(import_types.MessageType, {
372
276
  sender: {
373
277
  identityKey: identity.identityKey.toHex()
374
278
  },
375
279
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
376
280
  text: messageRef.current,
377
- context
378
- }));
281
+ context: context ? (0, import_live_object.makeRef)(context) : void 0
282
+ })));
379
283
  messageRef.current = "";
380
284
  setAutoFocus(true);
381
285
  scrollToEnd("smooth");
@@ -383,49 +287,45 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
383
287
  return true;
384
288
  };
385
289
  const handleDelete = (id) => {
386
- const messageIndex = thread.messages.filter(import_util.nonNullable).findIndex((message) => message.id === id);
290
+ const messageIndex = thread.messages.findIndex(import_echo_schema.Ref.hasObjectId(id));
387
291
  if (messageIndex !== -1) {
388
292
  thread.messages.splice(messageIndex, 1);
389
293
  }
390
294
  };
391
- return /* @__PURE__ */ import_react3.default.createElement(import_react_ui_thread.Thread, {
295
+ return /* @__PURE__ */ import_react.default.createElement(import_react_ui_thread.Thread, {
392
296
  current,
393
- id: (0, import_echo2.fullyQualifiedId)(thread),
297
+ id: (0, import_echo.fullyQualifiedId)(thread),
394
298
  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, {
299
+ }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.ScrollArea.Root, {
396
300
  classNames: "col-span-2"
397
- }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ScrollArea.Viewport, {
301
+ }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.ScrollArea.Viewport, {
398
302
  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", {
303
+ }, /* @__PURE__ */ import_react.default.createElement("div", {
400
304
  role: "none",
401
305
  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, {
306
+ }, import_live_object.RefArray.allResolvedTargets(thread.messages ?? []).map((message) => /* @__PURE__ */ import_react.default.createElement(MessageContainer, {
403
307
  key: message.id,
404
308
  message,
405
309
  members,
406
310
  onDelete: handleDelete
407
- }))), /* @__PURE__ */ import_react3.default.createElement("div", {
311
+ }))), /* @__PURE__ */ import_react.default.createElement("div", {
408
312
  role: "none",
409
313
  className: "bs-px -mbs-px",
410
314
  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, {
315
+ }), /* @__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
316
  extensions,
413
317
  autoFocus,
414
318
  onSend: handleCreate,
415
319
  ...textboxMetadata
416
- }), /* @__PURE__ */ import_react3.default.createElement(import_react_ui_thread.ThreadFooter, {
320
+ }), /* @__PURE__ */ import_react.default.createElement(import_react_ui_thread.ThreadFooter, {
417
321
  activity
418
322
  }, t("activity message")));
419
323
  };
420
324
  // Annotate the CommonJS export names for ESM import in node:
421
325
  0 && (module.exports = {
422
326
  ChatContainer,
423
- ChatHeading,
424
327
  MessageContainer,
425
328
  command,
426
- getMessageMetadata,
427
- useAnalyticsCallback,
428
- useOnEditAnalytics,
429
- useStatus
329
+ getMessageMetadata
430
330
  });
431
- //# sourceMappingURL=chunk-YCDM2SZM.cjs.map
331
+ //# sourceMappingURL=chunk-RQR5Z23G.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 {\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_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 <MessageBlockObjectTile subject={part} />;\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 = forwardRef<HTMLDivElement, { subject: ReactiveEchoObject<any> }>(\n ({ subject }, forwardedRef) => {\n let title = subject.name ?? subject.title ?? subject.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 ref={forwardedRef}\n >\n <Surface role='card' limit={1} data={{ subject }} fallback={title} />\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", "MessageBlockObjectTile", "subject", "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", "forwardedRef", "title", "name", "type", "content", "Surface", "limit", "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
+ }
@@ -26,27 +26,30 @@ 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 ThreadMain_MRNJC3TI_exports = {};
30
- __export(ThreadMain_MRNJC3TI_exports, {
31
- default: () => ThreadMain_default
29
+ var chunk_ZJTWNCFQ_exports = {};
30
+ __export(chunk_ZJTWNCFQ_exports, {
31
+ AppGraphBuilder: () => AppGraphBuilder,
32
+ IntentResolver: () => IntentResolver,
33
+ Markdown: () => Markdown,
34
+ ReactSurface: () => ReactSurface,
35
+ ThreadSettings: () => ThreadSettings,
36
+ ThreadState: () => ThreadState
32
37
  });
33
- module.exports = __toCommonJS(ThreadMain_MRNJC3TI_exports);
34
- var import_chunk_YCDM2SZM = require("./chunk-YCDM2SZM.cjs");
35
- var import_chunk_IC2NICNC = require("./chunk-IC2NICNC.cjs");
36
- var import_react = __toESM(require("react"));
37
- var import_react_ui = require("@dxos/react-ui");
38
- var import_react_ui_theme = require("@dxos/react-ui-theme");
39
- var ThreadMain = ({ thread }) => {
40
- return /* @__PURE__ */ import_react.default.createElement(import_react_ui.Main.Content, {
41
- classNames: [
42
- import_react_ui_theme.baseSurface,
43
- import_react_ui_theme.fixedInsetFlexLayout,
44
- import_react_ui_theme.topbarBlockPaddingStart,
45
- import_react_ui_theme.bottombarBlockPaddingEnd
46
- ]
47
- }, /* @__PURE__ */ import_react.default.createElement(import_chunk_YCDM2SZM.ChatContainer, {
48
- thread
49
- }));
50
- };
51
- var ThreadMain_default = ThreadMain;
52
- //# sourceMappingURL=ThreadMain-MRNJC3TI.cjs.map
38
+ module.exports = __toCommonJS(chunk_ZJTWNCFQ_exports);
39
+ var import_app_framework = require("@dxos/app-framework");
40
+ var AppGraphBuilder = (0, import_app_framework.lazy)(() => import("./app-graph-builder-LFEDPJLK.cjs"));
41
+ var IntentResolver = (0, import_app_framework.lazy)(() => import("./intent-resolver-ZSOQILPJ.cjs"));
42
+ var Markdown = (0, import_app_framework.lazy)(() => import("./markdown-FWRKMSKV.cjs"));
43
+ var ReactSurface = (0, import_app_framework.lazy)(() => import("./react-surface-AX644GMQ.cjs"));
44
+ var ThreadSettings = (0, import_app_framework.lazy)(() => import("./settings-TH4YSUVU.cjs"));
45
+ var ThreadState = (0, import_app_framework.lazy)(() => import("./state-TQWEZ6B3.cjs"));
46
+ // Annotate the CommonJS export names for ESM import in node:
47
+ 0 && (module.exports = {
48
+ AppGraphBuilder,
49
+ IntentResolver,
50
+ Markdown,
51
+ ReactSurface,
52
+ ThreadSettings,
53
+ ThreadState
54
+ });
55
+ //# sourceMappingURL=chunk-ZJTWNCFQ.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const Markdown = lazy(() => import('./markdown'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const ThreadSettings = lazy(() => import('./settings'));\nexport const ThreadState = lazy(() => import('./state'));\n\nexport * from './capabilities';\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,2BAAqB;AAEd,IAAMA,sBAAkBC,2BAAK,MAAM,OAAO,kCAAA,CAAA;AAC1C,IAAMC,qBAAiBD,2BAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAME,eAAWF,2BAAK,MAAM,OAAO,yBAAA,CAAA;AACnC,IAAMG,mBAAeH,2BAAK,MAAM,OAAO,8BAAA,CAAA;AACvC,IAAMI,qBAAiBJ,2BAAK,MAAM,OAAO,yBAAA,CAAA;AACzC,IAAMK,kBAAcL,2BAAK,MAAM,OAAO,sBAAA,CAAA;",
6
+ "names": ["AppGraphBuilder", "lazy", "IntentResolver", "Markdown", "ReactSurface", "ThreadSettings", "ThreadState"]
7
+ }