@dxos/plugin-thread 0.8.1-staging.391c573 → 0.8.1-staging.9eaf14f

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 (179) hide show
  1. package/dist/lib/browser/ChatContainer-IOOAQW6S.mjs +138 -0
  2. package/dist/lib/browser/ChatContainer-IOOAQW6S.mjs.map +7 -0
  3. package/dist/lib/browser/app-graph-builder-6W4UKJDI.mjs +41 -0
  4. package/dist/lib/browser/app-graph-builder-6W4UKJDI.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-NAO3LZMZ.mjs → chunk-EP6MRLY7.mjs} +2 -2
  6. package/dist/lib/browser/{chunk-BNEWNQBO.mjs → chunk-QDJ3Y6WF.mjs} +14 -19
  7. package/dist/lib/browser/{chunk-BNEWNQBO.mjs.map → chunk-QDJ3Y6WF.mjs.map} +3 -3
  8. package/dist/lib/browser/chunk-S5ZR4FYW.mjs +17 -0
  9. package/dist/lib/browser/chunk-S5ZR4FYW.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-UPKU23DA.mjs → chunk-TFVPUPOO.mjs} +35 -140
  11. package/dist/lib/browser/chunk-TFVPUPOO.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-636QDHE3.mjs → chunk-WBJLUUOK.mjs} +1 -1
  13. package/dist/lib/browser/{chunk-636QDHE3.mjs.map → chunk-WBJLUUOK.mjs.map} +2 -2
  14. package/dist/lib/browser/{chunk-YK3ICB7G.mjs → chunk-WOG72DWE.mjs} +25 -11
  15. package/dist/lib/browser/chunk-WOG72DWE.mjs.map +7 -0
  16. package/dist/lib/browser/index.mjs +47 -49
  17. package/dist/lib/browser/index.mjs.map +4 -4
  18. package/dist/lib/browser/{intent-resolver-FAFQ54NP.mjs → intent-resolver-QAY4FLLM.mjs} +134 -94
  19. package/dist/lib/browser/intent-resolver-QAY4FLLM.mjs.map +7 -0
  20. package/dist/lib/browser/{markdown-RPYOUBVR.mjs → markdown-7KXBXCUS.mjs} +9 -10
  21. package/dist/lib/browser/markdown-7KXBXCUS.mjs.map +7 -0
  22. package/dist/lib/browser/meta.json +1 -1
  23. package/dist/lib/browser/{react-surface-Y4MUSICN.mjs → react-surface-MT3OWULR.mjs} +55 -51
  24. package/dist/lib/browser/react-surface-MT3OWULR.mjs.map +7 -0
  25. package/dist/lib/browser/{settings-WQTE5AEZ.mjs → settings-4FEC7EAX.mjs} +3 -3
  26. package/dist/lib/browser/{state-GNFUURIC.mjs → state-PNMSLKAH.mjs} +4 -3
  27. package/dist/lib/browser/state-PNMSLKAH.mjs.map +7 -0
  28. package/dist/lib/browser/types.mjs +2 -2
  29. package/dist/lib/node/ChatContainer-4FNDRF3G.cjs +163 -0
  30. package/dist/lib/node/ChatContainer-4FNDRF3G.cjs.map +7 -0
  31. package/dist/lib/node/app-graph-builder-HZNWT4QU.cjs +57 -0
  32. package/dist/lib/node/app-graph-builder-HZNWT4QU.cjs.map +7 -0
  33. package/dist/lib/node/{chunk-CMEMMYDL.cjs → chunk-46BSFPBV.cjs} +29 -15
  34. package/dist/lib/node/chunk-46BSFPBV.cjs.map +7 -0
  35. package/dist/lib/node/{chunk-AWSTZ2KN.cjs → chunk-AKINTFBH.cjs} +17 -23
  36. package/dist/lib/node/chunk-AKINTFBH.cjs.map +7 -0
  37. package/dist/lib/node/chunk-E7Z3BKRQ.cjs +232 -0
  38. package/dist/lib/node/chunk-E7Z3BKRQ.cjs.map +7 -0
  39. package/dist/lib/node/{chunk-FPWNZ6TB.cjs → chunk-NQ5DTPOY.cjs} +7 -7
  40. package/dist/lib/node/{chunk-F735VMTN.cjs → chunk-ONLWOUYZ.cjs} +4 -4
  41. package/dist/lib/node/{chunk-F735VMTN.cjs.map → chunk-ONLWOUYZ.cjs.map} +2 -2
  42. package/dist/lib/node/{chunk-BHFHFTHO.cjs → chunk-S2A6BXEA.cjs} +12 -9
  43. package/dist/lib/node/chunk-S2A6BXEA.cjs.map +7 -0
  44. package/dist/lib/node/index.cjs +78 -83
  45. package/dist/lib/node/index.cjs.map +4 -4
  46. package/dist/lib/node/{intent-resolver-DVBEXJ33.cjs → intent-resolver-S6FE5OR7.cjs} +153 -113
  47. package/dist/lib/node/intent-resolver-S6FE5OR7.cjs.map +7 -0
  48. package/dist/lib/node/{markdown-ELRGISXE.cjs → markdown-L2WMCQKM.cjs} +13 -14
  49. package/dist/lib/node/markdown-L2WMCQKM.cjs.map +7 -0
  50. package/dist/lib/node/meta.json +1 -1
  51. package/dist/lib/node/{react-surface-7HLTN5XS.cjs → react-surface-Z45BYECE.cjs} +68 -64
  52. package/dist/lib/node/react-surface-Z45BYECE.cjs.map +7 -0
  53. package/dist/lib/node/{settings-7VQYARM5.cjs → settings-IXCPE55J.cjs} +8 -8
  54. package/dist/lib/node/{state-TQWEZ6B3.cjs → state-AT73KPGZ.cjs} +8 -7
  55. package/dist/lib/node/state-AT73KPGZ.cjs.map +7 -0
  56. package/dist/lib/node/types.cjs +4 -4
  57. package/dist/lib/node/types.cjs.map +1 -1
  58. package/dist/lib/node-esm/ChatContainer-NYLCL6QA.mjs +139 -0
  59. package/dist/lib/node-esm/ChatContainer-NYLCL6QA.mjs.map +7 -0
  60. package/dist/lib/node-esm/app-graph-builder-M3KK5QJH.mjs +42 -0
  61. package/dist/lib/node-esm/app-graph-builder-M3KK5QJH.mjs.map +7 -0
  62. package/dist/lib/node-esm/{chunk-FXUATCLW.mjs → chunk-42F2DTMM.mjs} +1 -1
  63. package/dist/lib/node-esm/{chunk-FXUATCLW.mjs.map → chunk-42F2DTMM.mjs.map} +2 -2
  64. package/dist/lib/node-esm/{chunk-CISLDOH7.mjs → chunk-ADTVMESP.mjs} +35 -140
  65. package/dist/lib/node-esm/chunk-ADTVMESP.mjs.map +7 -0
  66. package/dist/lib/node-esm/{chunk-33NDMQQQ.mjs → chunk-E446MGLP.mjs} +25 -11
  67. package/dist/lib/node-esm/chunk-E446MGLP.mjs.map +7 -0
  68. package/dist/lib/node-esm/{chunk-HLWJTUWZ.mjs → chunk-J56FORYF.mjs} +14 -19
  69. package/dist/lib/node-esm/{chunk-HLWJTUWZ.mjs.map → chunk-J56FORYF.mjs.map} +3 -3
  70. package/dist/lib/node-esm/{chunk-ZJITX3TO.mjs → chunk-WLY2HMDB.mjs} +2 -2
  71. package/dist/lib/node-esm/chunk-WSE23GSG.mjs +19 -0
  72. package/dist/lib/node-esm/chunk-WSE23GSG.mjs.map +7 -0
  73. package/dist/lib/node-esm/index.mjs +47 -49
  74. package/dist/lib/node-esm/index.mjs.map +4 -4
  75. package/dist/lib/node-esm/{intent-resolver-DHVLBNCC.mjs → intent-resolver-OURFRSSF.mjs} +134 -94
  76. package/dist/lib/node-esm/intent-resolver-OURFRSSF.mjs.map +7 -0
  77. package/dist/lib/node-esm/{markdown-23OB7EZG.mjs → markdown-ZKU23UVD.mjs} +9 -10
  78. package/dist/lib/node-esm/markdown-ZKU23UVD.mjs.map +7 -0
  79. package/dist/lib/node-esm/meta.json +1 -1
  80. package/dist/lib/node-esm/{react-surface-AZHTTR6J.mjs → react-surface-KIJ767JK.mjs} +55 -51
  81. package/dist/lib/node-esm/react-surface-KIJ767JK.mjs.map +7 -0
  82. package/dist/lib/node-esm/{settings-SGMM7UDT.mjs → settings-ZUJQ4LWI.mjs} +3 -3
  83. package/dist/lib/node-esm/{state-7MLR27YG.mjs → state-SSDX5O67.mjs} +4 -3
  84. package/dist/lib/node-esm/state-SSDX5O67.mjs.map +7 -0
  85. package/dist/lib/node-esm/types.mjs +2 -2
  86. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  87. package/dist/types/src/capabilities/app-graph-builder.d.ts +181 -0
  88. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  89. package/dist/types/src/capabilities/index.d.ts +177 -0
  90. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  91. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  92. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  93. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  94. package/dist/types/src/components/ChatContainer.d.ts +8 -1
  95. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  96. package/dist/types/src/components/CommentContainer.d.ts.map +1 -1
  97. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  98. package/dist/types/src/components/MessageContainer.d.ts +3 -2
  99. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  100. package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
  101. package/dist/types/src/components/index.d.ts +1 -4
  102. package/dist/types/src/components/index.d.ts.map +1 -1
  103. package/dist/types/src/components/testing.d.ts +45 -40
  104. package/dist/types/src/components/testing.d.ts.map +1 -1
  105. package/dist/types/src/events.d.ts +4 -0
  106. package/dist/types/src/events.d.ts.map +1 -0
  107. package/dist/types/src/hooks/analytics.d.ts +2 -2
  108. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  109. package/dist/types/src/index.d.ts +2 -0
  110. package/dist/types/src/index.d.ts.map +1 -1
  111. package/dist/types/src/meta.d.ts +2 -7
  112. package/dist/types/src/meta.d.ts.map +1 -1
  113. package/dist/types/src/translations.d.ts +5 -12
  114. package/dist/types/src/translations.d.ts.map +1 -1
  115. package/dist/types/src/types.d.ts +40 -9
  116. package/dist/types/src/types.d.ts.map +1 -1
  117. package/package.json +33 -30
  118. package/src/ThreadPlugin.tsx +17 -28
  119. package/src/capabilities/app-graph-builder.ts +34 -0
  120. package/src/capabilities/index.ts +1 -0
  121. package/src/capabilities/intent-resolver.ts +97 -61
  122. package/src/capabilities/react-surface.tsx +29 -27
  123. package/src/capabilities/state.ts +1 -1
  124. package/src/components/Chat.stories.tsx +19 -9
  125. package/src/components/ChatContainer.tsx +29 -29
  126. package/src/components/CommentContainer.tsx +8 -2
  127. package/src/components/Comments.stories.tsx +2 -1
  128. package/src/components/MessageContainer.tsx +23 -17
  129. package/src/components/ThreadComplementary.tsx +26 -32
  130. package/src/components/index.ts +1 -2
  131. package/src/components/testing.ts +6 -29
  132. package/src/events.ts +11 -0
  133. package/src/extensions/threads.ts +3 -3
  134. package/src/hooks/analytics.ts +23 -18
  135. package/src/index.ts +2 -0
  136. package/src/meta.ts +2 -2
  137. package/src/translations.ts +2 -4
  138. package/src/types.ts +22 -8
  139. package/src/util.ts +1 -1
  140. package/dist/lib/browser/ThreadContainer-6OP5AG2W.mjs +0 -19
  141. package/dist/lib/browser/ThreadContainer-6OP5AG2W.mjs.map +0 -7
  142. package/dist/lib/browser/chunk-UPKU23DA.mjs.map +0 -7
  143. package/dist/lib/browser/chunk-VOMIDDNO.mjs +0 -15
  144. package/dist/lib/browser/chunk-VOMIDDNO.mjs.map +0 -7
  145. package/dist/lib/browser/chunk-YK3ICB7G.mjs.map +0 -7
  146. package/dist/lib/browser/intent-resolver-FAFQ54NP.mjs.map +0 -7
  147. package/dist/lib/browser/markdown-RPYOUBVR.mjs.map +0 -7
  148. package/dist/lib/browser/react-surface-Y4MUSICN.mjs.map +0 -7
  149. package/dist/lib/browser/state-GNFUURIC.mjs.map +0 -7
  150. package/dist/lib/node/ThreadContainer-LTKKLPXX.cjs +0 -45
  151. package/dist/lib/node/ThreadContainer-LTKKLPXX.cjs.map +0 -7
  152. package/dist/lib/node/chunk-AWSTZ2KN.cjs.map +0 -7
  153. package/dist/lib/node/chunk-BHFHFTHO.cjs.map +0 -7
  154. package/dist/lib/node/chunk-CMEMMYDL.cjs.map +0 -7
  155. package/dist/lib/node/chunk-RQR5Z23G.cjs +0 -331
  156. package/dist/lib/node/chunk-RQR5Z23G.cjs.map +0 -7
  157. package/dist/lib/node/intent-resolver-DVBEXJ33.cjs.map +0 -7
  158. package/dist/lib/node/markdown-ELRGISXE.cjs.map +0 -7
  159. package/dist/lib/node/react-surface-7HLTN5XS.cjs.map +0 -7
  160. package/dist/lib/node/state-TQWEZ6B3.cjs.map +0 -7
  161. package/dist/lib/node-esm/ThreadContainer-SV74JFRH.mjs +0 -20
  162. package/dist/lib/node-esm/ThreadContainer-SV74JFRH.mjs.map +0 -7
  163. package/dist/lib/node-esm/chunk-33NDMQQQ.mjs.map +0 -7
  164. package/dist/lib/node-esm/chunk-CISLDOH7.mjs.map +0 -7
  165. package/dist/lib/node-esm/chunk-PJPVEO7E.mjs +0 -17
  166. package/dist/lib/node-esm/chunk-PJPVEO7E.mjs.map +0 -7
  167. package/dist/lib/node-esm/intent-resolver-DHVLBNCC.mjs.map +0 -7
  168. package/dist/lib/node-esm/markdown-23OB7EZG.mjs.map +0 -7
  169. package/dist/lib/node-esm/react-surface-AZHTTR6J.mjs.map +0 -7
  170. package/dist/lib/node-esm/state-7MLR27YG.mjs.map +0 -7
  171. package/dist/types/src/components/ThreadContainer.d.ts +0 -7
  172. package/dist/types/src/components/ThreadContainer.d.ts.map +0 -1
  173. package/src/components/ThreadContainer.tsx +0 -22
  174. /package/dist/lib/browser/{chunk-NAO3LZMZ.mjs.map → chunk-EP6MRLY7.mjs.map} +0 -0
  175. /package/dist/lib/browser/{settings-WQTE5AEZ.mjs.map → settings-4FEC7EAX.mjs.map} +0 -0
  176. /package/dist/lib/node/{chunk-FPWNZ6TB.cjs.map → chunk-NQ5DTPOY.cjs.map} +0 -0
  177. /package/dist/lib/node/{settings-7VQYARM5.cjs.map → settings-IXCPE55J.cjs.map} +0 -0
  178. /package/dist/lib/node-esm/{chunk-ZJITX3TO.mjs.map → chunk-WLY2HMDB.mjs.map} +0 -0
  179. /package/dist/lib/node-esm/{settings-SGMM7UDT.mjs.map → settings-ZUJQ4LWI.mjs.map} +0 -0
@@ -1,37 +1,10 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
- useOnEditAnalytics,
4
- useStatus
5
- } from "./chunk-HLWJTUWZ.mjs";
3
+ useOnEditAnalytics
4
+ } from "./chunk-J56FORYF.mjs";
6
5
  import {
7
6
  THREAD_PLUGIN
8
- } from "./chunk-FXUATCLW.mjs";
9
-
10
- // packages/plugins/plugin-thread/src/components/ChatContainer.tsx
11
- import React2, { useLayoutEffect, useMemo, useRef as useRef2, useState as useState2 } from "react";
12
- import { Ref } from "@dxos/echo-schema";
13
- import { create, makeRef, RefArray as RefArray2 } from "@dxos/live-object";
14
- import { MessageType } from "@dxos/plugin-space/types";
15
- import { fullyQualifiedId, getSpace, useMembers } from "@dxos/react-client/echo";
16
- import { useIdentity as useIdentity2 } from "@dxos/react-client/halo";
17
- import { Icon, ScrollArea, useThemeContext as useThemeContext2, useTranslation as useTranslation2 } from "@dxos/react-ui";
18
- import { createBasicExtensions as createBasicExtensions2, createThemeExtensions as createThemeExtensions2, listener } from "@dxos/react-ui-editor";
19
- import { StackItem } from "@dxos/react-ui-stack";
20
- import { mx as mx3 } from "@dxos/react-ui-theme";
21
- import { MessageTextbox, Thread, ThreadFooter, threadLayout } from "@dxos/react-ui-thread";
22
-
23
- // packages/plugins/plugin-thread/src/components/MessageContainer.tsx
24
- import { EditorView } from "@codemirror/view";
25
- import { Check, PencilSimple, X } from "@phosphor-icons/react";
26
- import React, { forwardRef, useCallback, useEffect, useRef, useState } from "react";
27
- import { Surface } from "@dxos/app-framework";
28
- import { RefArray } from "@dxos/live-object";
29
- import { PublicKey } from "@dxos/react-client";
30
- import { useIdentity } from "@dxos/react-client/halo";
31
- import { Button, ButtonGroup, Tooltip, useOnTransition, useThemeContext, useTranslation } from "@dxos/react-ui";
32
- import { createBasicExtensions, createThemeExtensions, useTextEditor } from "@dxos/react-ui-editor";
33
- import { getSize, hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx as mx2 } from "@dxos/react-ui-theme";
34
- import { MessageHeading, MessageRoot } from "@dxos/react-ui-thread";
7
+ } from "./chunk-42F2DTMM.mjs";
35
8
 
36
9
  // packages/plugins/plugin-thread/src/components/command-extension.ts
37
10
  import { StreamLanguage, HighlightStyle, syntaxHighlighting } from "@codemirror/language";
@@ -71,7 +44,7 @@ var getMessageMetadata = (id, identity) => {
71
44
  const fallback = hexToFallback(identity?.identityKey.toHex() ?? "0");
72
45
  return {
73
46
  id,
74
- authorId: identity?.identityKey.toHex(),
47
+ authorId: identity?.did,
75
48
  authorName: identity?.profile?.displayName ?? (identity?.identityKey ? generateName(identity.identityKey.toHex()) : void 0),
76
49
  authorAvatarProps: {
77
50
  hue: identity?.profile?.data?.hue ?? fallback.hue,
@@ -81,14 +54,25 @@ var getMessageMetadata = (id, identity) => {
81
54
  };
82
55
 
83
56
  // packages/plugins/plugin-thread/src/components/MessageContainer.tsx
57
+ import { EditorView } from "@codemirror/view";
58
+ import { Check, PencilSimple, X } from "@phosphor-icons/react";
59
+ import React, { forwardRef, useCallback, useEffect, useRef, useState } from "react";
60
+ import { Surface } from "@dxos/app-framework";
61
+ import { RefArray } from "@dxos/live-object";
62
+ import { PublicKey } from "@dxos/react-client";
63
+ import { useIdentity } from "@dxos/react-client/halo";
64
+ import { Button, ButtonGroup, Tooltip, useOnTransition, useThemeContext, useTranslation } from "@dxos/react-ui";
65
+ import { createBasicExtensions, createThemeExtensions, useTextEditor } from "@dxos/react-ui-editor";
66
+ import { getSize, hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx as mx2 } from "@dxos/react-ui-theme";
67
+ import { MessageHeading, MessageRoot } from "@dxos/react-ui-thread";
84
68
  var messageControlClassNames = [
85
69
  "!p-1 !min-bs-0 transition-opacity",
86
70
  hoverableControlItem
87
71
  ];
88
- var MessageContainer = ({ message, members, onDelete }) => {
89
- const senderIdentity = members.find((member) => message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey))?.identity;
72
+ var MessageContainer = ({ message, members, editable = false, onDelete }) => {
73
+ const senderIdentity = members.find((member) => message.sender.identityDid && member.identity.did === message.sender.identityDid || message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey))?.identity;
90
74
  const messageMetadata = getMessageMetadata(message.id, senderIdentity);
91
- const userIsAuthor = useIdentity()?.identityKey.toHex() === messageMetadata.authorId;
75
+ const userIsAuthor = useIdentity()?.did === messageMetadata.authorId;
92
76
  const [editing, setEditing] = useState(false);
93
77
  const handleDelete = useCallback(() => onDelete?.(message.id), [
94
78
  message,
@@ -97,6 +81,9 @@ var MessageContainer = ({ message, members, onDelete }) => {
97
81
  const { t } = useTranslation(THREAD_PLUGIN);
98
82
  const editLabel = t(editing ? "save message label" : "edit message label");
99
83
  const deleteLabel = t("delete message label");
84
+ const textBlock = message.blocks.find((block) => block.type === "text");
85
+ const references = message.blocks.filter((block) => block.type === "reference").map((block) => block.reference);
86
+ useOnEditAnalytics(message, textBlock, !!editing);
100
87
  return /* @__PURE__ */ React.createElement(MessageRoot, {
101
88
  ...messageMetadata,
102
89
  classNames: [
@@ -108,7 +95,7 @@ var MessageContainer = ({ message, members, onDelete }) => {
108
95
  timestamp: messageMetadata.timestamp
109
96
  }, /* @__PURE__ */ React.createElement(ButtonGroup, {
110
97
  classNames: "mie-1"
111
- }, userIsAuthor && /* @__PURE__ */ React.createElement(Tooltip.Root, null, /* @__PURE__ */ React.createElement(Tooltip.Trigger, {
98
+ }, userIsAuthor && editable && /* @__PURE__ */ React.createElement(Tooltip.Root, null, /* @__PURE__ */ React.createElement(Tooltip.Trigger, {
112
99
  asChild: true
113
100
  }, /* @__PURE__ */ React.createElement(Button, {
114
101
  variant: "ghost",
@@ -132,13 +119,13 @@ var MessageContainer = ({ message, members, onDelete }) => {
132
119
  className: "sr-only"
133
120
  }, deleteLabel), /* @__PURE__ */ React.createElement(X, {
134
121
  className: getSize(4)
135
- }))), /* @__PURE__ */ React.createElement(Tooltip.Portal, null, /* @__PURE__ */ React.createElement(Tooltip.Content, null, deleteLabel, /* @__PURE__ */ React.createElement(Tooltip.Arrow, null)))))), /* @__PURE__ */ React.createElement(TextboxBlock, {
136
- message,
122
+ }))), /* @__PURE__ */ React.createElement(Tooltip.Portal, null, /* @__PURE__ */ React.createElement(Tooltip.Content, null, deleteLabel, /* @__PURE__ */ React.createElement(Tooltip.Arrow, null)))))), textBlock && /* @__PURE__ */ React.createElement(TextboxBlock, {
123
+ block: textBlock,
137
124
  isAuthor: userIsAuthor,
138
125
  editing
139
- }), RefArray.allResolvedTargets(message.parts ?? []).map((part, index) => /* @__PURE__ */ React.createElement(MessagePart, {
126
+ }), RefArray.targets(references).map((reference, index) => /* @__PURE__ */ React.createElement(MessagePart, {
140
127
  key: index,
141
- part
128
+ part: reference
142
129
  })));
143
130
  };
144
131
  var MessagePart = ({ part }) => {
@@ -146,23 +133,23 @@ var MessagePart = ({ part }) => {
146
133
  subject: part
147
134
  });
148
135
  };
149
- var TextboxBlock = ({ message, isAuthor, editing }) => {
136
+ var TextboxBlock = ({ block, isAuthor, editing }) => {
150
137
  const { themeMode } = useThemeContext();
151
- const inMemoryContentRef = useRef(message.text);
138
+ const inMemoryContentRef = useRef(block.text);
152
139
  const handleDocumentChange = useCallback((newState) => {
153
140
  inMemoryContentRef.current = newState;
154
141
  }, []);
155
142
  const saveDocumentChange = useCallback(() => {
156
- message.text = inMemoryContentRef.current;
143
+ block.text = inMemoryContentRef.current;
157
144
  }, [
158
- message
145
+ block
159
146
  ]);
160
147
  useOnTransition(editing, true, false, saveDocumentChange);
161
148
  const { parentRef, focusAttributes, view } = useTextEditor(() => ({
162
- initialValue: message.text,
149
+ initialValue: block.text,
163
150
  extensions: [
164
151
  createBasicExtensions({
165
- readonly: !isAuthor || !editing
152
+ readOnly: !isAuthor || !editing
166
153
  }),
167
154
  createThemeExtensions({
168
155
  themeMode
@@ -175,7 +162,7 @@ var TextboxBlock = ({ message, isAuthor, editing }) => {
175
162
  })
176
163
  ]
177
164
  }), [
178
- message.text,
165
+ block.text,
179
166
  editing,
180
167
  isAuthor,
181
168
  themeMode,
@@ -187,7 +174,6 @@ var TextboxBlock = ({ message, isAuthor, editing }) => {
187
174
  editing,
188
175
  view
189
176
  ]);
190
- useOnEditAnalytics(message, !!editing);
191
177
  return /* @__PURE__ */ React.createElement("div", {
192
178
  role: "none",
193
179
  ref: parentRef,
@@ -214,100 +200,9 @@ var MessageBlockObjectTile = /* @__PURE__ */ forwardRef(({ subject }, forwardedR
214
200
  }));
215
201
  });
216
202
 
217
- // packages/plugins/plugin-thread/src/components/ChatContainer.tsx
218
- var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
219
- const identity = useIdentity2();
220
- const space = getSpace(thread);
221
- const members = useMembers(space?.key);
222
- const activity = useStatus(space, fullyQualifiedId(thread));
223
- const { t } = useTranslation2(THREAD_PLUGIN);
224
- const [_count, _setCount] = useState2(0);
225
- const rerenderEditor = () => _setCount((count) => count + 1);
226
- const [autoFocus, setAutoFocus] = useState2(autoFocusTextbox);
227
- const threadScrollRef = useRef2(null);
228
- const { themeMode } = useThemeContext2();
229
- const textboxMetadata = getMessageMetadata(fullyQualifiedId(thread), identity);
230
- const messageRef = useRef2("");
231
- const extensions = useMemo(() => [
232
- createBasicExtensions2({
233
- placeholder: t("message placeholder")
234
- }),
235
- createThemeExtensions2({
236
- themeMode
237
- }),
238
- listener({
239
- onChange: (text) => messageRef.current = text
240
- }),
241
- command
242
- ], [
243
- themeMode,
244
- _count
245
- ]);
246
- const scrollToEnd = (behavior) => setTimeout(() => threadScrollRef.current?.scrollIntoView({
247
- behavior,
248
- block: "end"
249
- }), 10);
250
- useLayoutEffect(() => {
251
- scrollToEnd("instant");
252
- }, []);
253
- const handleCreate = () => {
254
- if (!messageRef.current?.length) {
255
- return false;
256
- }
257
- thread.messages.push(makeRef(create(MessageType, {
258
- sender: {
259
- identityKey: identity.identityKey.toHex()
260
- },
261
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
262
- text: messageRef.current,
263
- context: context ? makeRef(context) : void 0
264
- })));
265
- messageRef.current = "";
266
- setAutoFocus(true);
267
- scrollToEnd("smooth");
268
- rerenderEditor();
269
- return true;
270
- };
271
- const handleDelete = (id) => {
272
- const messageIndex = thread.messages.findIndex(Ref.hasObjectId(id));
273
- if (messageIndex !== -1) {
274
- thread.messages.splice(messageIndex, 1);
275
- }
276
- };
277
- return /* @__PURE__ */ React2.createElement(Thread, {
278
- current,
279
- id: fullyQualifiedId(thread),
280
- 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"
281
- }, /* @__PURE__ */ React2.createElement(ScrollArea.Root, {
282
- classNames: "col-span-2"
283
- }, /* @__PURE__ */ React2.createElement(ScrollArea.Viewport, {
284
- 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]"
285
- }, /* @__PURE__ */ React2.createElement("div", {
286
- role: "none",
287
- className: mx3(threadLayout, "place-self-end")
288
- }, RefArray2.allResolvedTargets(thread.messages ?? []).map((message) => /* @__PURE__ */ React2.createElement(MessageContainer, {
289
- key: message.id,
290
- message,
291
- members,
292
- onDelete: handleDelete
293
- }))), /* @__PURE__ */ React2.createElement("div", {
294
- role: "none",
295
- className: "bs-px -mbs-px",
296
- ref: threadScrollRef
297
- }), /* @__PURE__ */ React2.createElement(ScrollArea.Scrollbar, null, /* @__PURE__ */ React2.createElement(ScrollArea.Thumb, null)))), /* @__PURE__ */ React2.createElement(MessageTextbox, {
298
- extensions,
299
- autoFocus,
300
- onSend: handleCreate,
301
- ...textboxMetadata
302
- }), /* @__PURE__ */ React2.createElement(ThreadFooter, {
303
- activity
304
- }, t("activity message")));
305
- };
306
-
307
203
  export {
308
204
  command,
309
205
  getMessageMetadata,
310
- MessageContainer,
311
- ChatContainer
206
+ MessageContainer
312
207
  };
313
- //# sourceMappingURL=chunk-CISLDOH7.mjs.map
208
+ //# sourceMappingURL=chunk-ADTVMESP.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/command-extension.ts", "../../../src/util.ts", "../../../src/components/MessageContainer.tsx"],
4
+ "sourcesContent": ["//\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?.did,\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", "//\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 { 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';\nimport { type TextContentBlock, type MessageType } from '@dxos/schema';\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 editable = false,\n onDelete,\n}: {\n message: MessageType;\n members: SpaceMember[];\n editable?: boolean;\n onDelete?: (id: string) => void;\n}) => {\n const senderIdentity = members.find(\n (member) =>\n (message.sender.identityDid && member.identity.did === message.sender.identityDid) ||\n (message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey)),\n )?.identity;\n const messageMetadata = getMessageMetadata(message.id, senderIdentity);\n const userIsAuthor = useIdentity()?.did === 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 const textBlock = message.blocks.find((block) => block.type === 'text');\n const references = message.blocks.filter((block) => block.type === 'reference').map((block) => block.reference);\n\n useOnEditAnalytics(message, textBlock, !!editing);\n\n return (\n <MessageRoot {...messageMetadata} classNames={[hoverableControls, hoverableFocusedWithinControls]}>\n <MessageHeading authorName={messageMetadata.authorName} timestamp={messageMetadata.timestamp}>\n <ButtonGroup classNames='mie-1'>\n {userIsAuthor && editable && (\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 {textBlock && <TextboxBlock block={textBlock} isAuthor={userIsAuthor} editing={editing} />}\n {RefArray.targets(references).map((reference, index) => (\n <MessagePart key={index} part={reference} />\n ))}\n </MessageRoot>\n );\n};\n\nconst MessagePart = ({ part }: { part: Expando }) => {\n return <MessageBlockObjectTile subject={part} />;\n};\n\nconst TextboxBlock = ({\n block,\n isAuthor,\n editing,\n}: {\n block: TextContentBlock;\n editing?: boolean;\n isAuthor?: boolean;\n identity?: Identity;\n}) => {\n const { themeMode } = useThemeContext();\n const inMemoryContentRef = useRef(block.text);\n\n const handleDocumentChange = useCallback((newState: string) => {\n inMemoryContentRef.current = newState;\n }, []);\n\n const saveDocumentChange = useCallback(() => {\n block.text = inMemoryContentRef.current;\n }, [block]);\n\n useOnTransition(editing, true, false, saveDocumentChange);\n\n const { parentRef, focusAttributes, view } = useTextEditor(\n () => ({\n initialValue: block.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 [block.text, editing, isAuthor, themeMode, handleDocumentChange],\n );\n\n useEffect(() => {\n editing && view?.focus();\n }, [editing, view]);\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"],
5
+ "mappings": "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",
6
+ "names": ["StreamLanguage", "HighlightStyle", "syntaxHighlighting", "tags", "mx", "parser", "StreamLanguage", "define", "startState", "count", "token", "stream", "state", "eatSpace", "match", "next", "styles", "HighlightStyle", "tag", "tags", "tagName", "class", "mx", "command", "syntaxHighlighting", "generateName", "hexToFallback", "getMessageMetadata", "id", "identity", "fallback", "hexToFallback", "identityKey", "toHex", "authorId", "did", "authorName", "profile", "displayName", "generateName", "undefined", "authorAvatarProps", "hue", "data", "emoji", "EditorView", "Check", "PencilSimple", "X", "React", "forwardRef", "useCallback", "useEffect", "useRef", "useState", "Surface", "RefArray", "PublicKey", "useIdentity", "Button", "ButtonGroup", "Tooltip", "useOnTransition", "useThemeContext", "useTranslation", "createBasicExtensions", "createThemeExtensions", "useTextEditor", "getSize", "hoverableControlItem", "hoverableControls", "hoverableFocusedWithinControls", "mx", "MessageHeading", "MessageRoot", "messageControlClassNames", "hoverableControlItem", "MessageContainer", "message", "members", "editable", "onDelete", "senderIdentity", "find", "member", "sender", "identityDid", "identity", "did", "identityKey", "PublicKey", "equals", "messageMetadata", "getMessageMetadata", "id", "userIsAuthor", "useIdentity", "authorId", "editing", "setEditing", "useState", "handleDelete", "useCallback", "t", "useTranslation", "THREAD_PLUGIN", "editLabel", "deleteLabel", "textBlock", "blocks", "block", "type", "references", "filter", "map", "reference", "useOnEditAnalytics", "MessageRoot", "classNames", "hoverableControls", "hoverableFocusedWithinControls", "MessageHeading", "authorName", "timestamp", "ButtonGroup", "Tooltip", "Root", "Trigger", "asChild", "Button", "variant", "data-testid", "onClick", "span", "className", "Check", "getSize", "PencilSimple", "Portal", "Content", "Arrow", "X", "TextboxBlock", "isAuthor", "RefArray", "targets", "index", "MessagePart", "key", "part", "MessageBlockObjectTile", "subject", "themeMode", "useThemeContext", "inMemoryContentRef", "useRef", "text", "handleDocumentChange", "newState", "current", "saveDocumentChange", "useOnTransition", "parentRef", "focusAttributes", "view", "useTextEditor", "initialValue", "extensions", "createBasicExtensions", "readOnly", "createThemeExtensions", "command", "EditorView", "updateListener", "of", "update", "docChanged", "state", "doc", "toString", "useEffect", "focus", "div", "role", "ref", "forwardRef", "forwardedRef", "title", "name", "content", "mx", "Surface", "limit", "data", "fallback"]
7
+ }
@@ -1,31 +1,43 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  THREAD_PLUGIN
4
- } from "./chunk-FXUATCLW.mjs";
4
+ } from "./chunk-42F2DTMM.mjs";
5
5
 
6
6
  // packages/plugins/plugin-thread/src/types.ts
7
7
  import { S } from "@dxos/echo-schema";
8
- import { ChannelType, MessageType, ThreadType } from "@dxos/plugin-space/types";
8
+ import { ChannelType, ThreadType } from "@dxos/plugin-space/types";
9
9
  import { EchoObjectSchema } from "@dxos/react-client/echo";
10
+ import { ActorSchema, MessageType } from "@dxos/schema";
10
11
  var ThreadAction;
11
12
  (function(ThreadAction2) {
12
13
  const THREAD_ACTION = `${THREAD_PLUGIN}/action`;
14
+ class CreateChannel extends S.TaggedClass()(`${THREAD_ACTION}/create-channel`, {
15
+ input: S.Struct({
16
+ // TODO(wittjosiah): Should be SpaceId.
17
+ spaceId: S.String,
18
+ name: S.optional(S.String)
19
+ }),
20
+ output: S.Struct({
21
+ object: ChannelType
22
+ })
23
+ }) {
24
+ }
25
+ ThreadAction2.CreateChannel = CreateChannel;
13
26
  class Create extends S.TaggedClass()(`${THREAD_ACTION}/create`, {
14
27
  input: S.Struct({
15
28
  name: S.optional(S.String),
16
- cursor: S.optional(S.String),
17
- subject: S.optional(EchoObjectSchema)
29
+ cursor: S.String,
30
+ subject: EchoObjectSchema
18
31
  }),
19
32
  output: S.Struct({
20
- object: S.Union(ChannelType, ThreadType)
33
+ object: ThreadType
21
34
  })
22
35
  }) {
23
36
  }
24
37
  ThreadAction2.Create = Create;
25
38
  class Select extends S.TaggedClass()(`${THREAD_ACTION}/select`, {
26
39
  input: S.Struct({
27
- current: S.String,
28
- skipOpen: S.optional(S.Boolean)
40
+ current: S.String
29
41
  }),
30
42
  output: S.Void
31
43
  }) {
@@ -49,15 +61,17 @@ var ThreadAction;
49
61
  }) {
50
62
  }
51
63
  ThreadAction2.Delete = Delete;
52
- class OnMessageAdd extends S.TaggedClass()(`${THREAD_ACTION}/on-message-add`, {
64
+ class AddMessage extends S.TaggedClass()(`${THREAD_ACTION}/add-message`, {
53
65
  input: S.Struct({
66
+ subject: EchoObjectSchema,
54
67
  thread: ThreadType,
55
- subject: EchoObjectSchema
68
+ sender: ActorSchema,
69
+ text: S.String
56
70
  }),
57
71
  output: S.Void
58
72
  }) {
59
73
  }
60
- ThreadAction2.OnMessageAdd = OnMessageAdd;
74
+ ThreadAction2.AddMessage = AddMessage;
61
75
  class DeleteMessage extends S.TaggedClass()(`${THREAD_ACTION}/delete-message`, {
62
76
  input: S.Struct({
63
77
  thread: ThreadType,
@@ -77,4 +91,4 @@ export {
77
91
  ThreadAction,
78
92
  ThreadSettingsSchema
79
93
  };
80
- //# sourceMappingURL=chunk-33NDMQQQ.mjs.map
94
+ //# sourceMappingURL=chunk-E446MGLP.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { S } from '@dxos/echo-schema';\nimport { ChannelType, ThreadType } from '@dxos/plugin-space/types';\nimport { EchoObjectSchema } from '@dxos/react-client/echo';\nimport { ActorSchema, MessageType } from '@dxos/schema';\n\nimport { THREAD_PLUGIN } from './meta';\n\nexport namespace ThreadAction {\n const THREAD_ACTION = `${THREAD_PLUGIN}/action`;\n\n export class CreateChannel extends S.TaggedClass<CreateChannel>()(`${THREAD_ACTION}/create-channel`, {\n input: S.Struct({\n // TODO(wittjosiah): Should be SpaceId.\n spaceId: S.String,\n name: S.optional(S.String),\n }),\n output: S.Struct({\n object: ChannelType,\n }),\n }) {}\n\n export class Create extends S.TaggedClass<Create>()(`${THREAD_ACTION}/create`, {\n input: S.Struct({\n name: S.optional(S.String),\n cursor: S.String,\n subject: EchoObjectSchema,\n }),\n output: S.Struct({\n object: ThreadType,\n }),\n }) {}\n\n export class Select extends S.TaggedClass<Select>()(`${THREAD_ACTION}/select`, {\n input: S.Struct({\n current: S.String,\n }),\n output: S.Void,\n }) {}\n\n export class ToggleResolved extends S.TaggedClass<ToggleResolved>()(`${THREAD_ACTION}/toggle-resolved`, {\n input: S.Struct({\n thread: ThreadType,\n }),\n output: S.Void,\n }) {}\n\n export class Delete extends S.TaggedClass<Delete>()(`${THREAD_ACTION}/delete`, {\n input: S.Struct({\n thread: ThreadType,\n subject: EchoObjectSchema,\n cursor: S.optional(S.String),\n }),\n output: S.Void,\n }) {}\n\n export class AddMessage extends S.TaggedClass<AddMessage>()(`${THREAD_ACTION}/add-message`, {\n input: S.Struct({\n subject: EchoObjectSchema,\n thread: ThreadType,\n sender: ActorSchema,\n text: S.String,\n }),\n output: S.Void,\n }) {}\n\n export class DeleteMessage extends S.TaggedClass<DeleteMessage>()(`${THREAD_ACTION}/delete-message`, {\n input: S.Struct({\n thread: ThreadType,\n subject: EchoObjectSchema,\n messageId: S.String,\n message: S.optional(MessageType),\n messageIndex: S.optional(S.Number),\n }),\n output: S.Void,\n }) {}\n}\n\nexport const ThreadSettingsSchema = S.mutable(S.Struct({}));\n\nexport type ThreadSettingsProps = S.Schema.Type<typeof ThreadSettingsSchema>;\n\nexport interface ThreadModel {\n root: ThreadType;\n}\n\ntype SubjectId = string;\nexport type ViewState = { showResolvedThreads: boolean };\nexport type ViewStore = Record<SubjectId, ViewState>;\n\nexport type ThreadState = {\n /** Current channel activity. */\n activities: Record<string, string | undefined>;\n /** In-memory draft threads. */\n drafts: Record<string, ThreadType[]>;\n current?: string | undefined;\n};\n"],
5
+ "mappings": ";;;;;;AAIA,SAASA,SAAS;AAClB,SAASC,aAAaC,kBAAkB;AACxC,SAASC,wBAAwB;AACjC,SAASC,aAAaC,mBAAmB;;UAIxBC,eAAAA;AACf,QAAMC,gBAAgB,GAAGC,aAAAA;EAElB,MAAMC,sBAAsBC,EAAEC,YAAW,EAAkB,GAAGJ,aAAAA,mBAAgC;IACnGK,OAAOF,EAAEG,OAAO;;MAEdC,SAASJ,EAAEK;MACXC,MAAMN,EAAEO,SAASP,EAAEK,MAAM;IAC3B,CAAA;IACAG,QAAQR,EAAEG,OAAO;MACfM,QAAQC;IACV,CAAA;EACF,CAAA,EAAA;EAAI;gBATSX,gBAAAA;EAWN,MAAMY,eAAeX,EAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,EAAEG,OAAO;MACdG,MAAMN,EAAEO,SAASP,EAAEK,MAAM;MACzBO,QAAQZ,EAAEK;MACVQ,SAASC;IACX,CAAA;IACAN,QAAQR,EAAEG,OAAO;MACfM,QAAQM;IACV,CAAA;EACF,CAAA,EAAA;EAAI;gBATSJ,SAAAA;EAWN,MAAMK,eAAehB,EAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,EAAEG,OAAO;MACdc,SAASjB,EAAEK;IACb,CAAA;IACAG,QAAQR,EAAEkB;EACZ,CAAA,EAAA;EAAI;gBALSF,SAAAA;EAON,MAAMG,uBAAuBnB,EAAEC,YAAW,EAAmB,GAAGJ,aAAAA,oBAAiC;IACtGK,OAAOF,EAAEG,OAAO;MACdiB,QAAQL;IACV,CAAA;IACAP,QAAQR,EAAEkB;EACZ,CAAA,EAAA;EAAI;gBALSC,iBAAAA;EAON,MAAME,eAAerB,EAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,EAAEG,OAAO;MACdiB,QAAQL;MACRF,SAASC;MACTF,QAAQZ,EAAEO,SAASP,EAAEK,MAAM;IAC7B,CAAA;IACAG,QAAQR,EAAEkB;EACZ,CAAA,EAAA;EAAI;gBAPSG,SAAAA;EASN,MAAMC,mBAAmBtB,EAAEC,YAAW,EAAe,GAAGJ,aAAAA,gBAA6B;IAC1FK,OAAOF,EAAEG,OAAO;MACdU,SAASC;MACTM,QAAQL;MACRQ,QAAQC;MACRC,MAAMzB,EAAEK;IACV,CAAA;IACAG,QAAQR,EAAEkB;EACZ,CAAA,EAAA;EAAI;gBARSI,aAAAA;EAUN,MAAMI,sBAAsB1B,EAAEC,YAAW,EAAkB,GAAGJ,aAAAA,mBAAgC;IACnGK,OAAOF,EAAEG,OAAO;MACdiB,QAAQL;MACRF,SAASC;MACTa,WAAW3B,EAAEK;MACbuB,SAAS5B,EAAEO,SAASsB,WAAAA;MACpBC,cAAc9B,EAAEO,SAASP,EAAE+B,MAAM;IACnC,CAAA;IACAvB,QAAQR,EAAEkB;EACZ,CAAA,EAAA;EAAI;gBATSQ,gBAAAA;AAUf,GApEiB9B,iBAAAA,eAAAA,CAAAA,EAAAA;AAsEV,IAAMoC,uBAAuBhC,EAAEiC,QAAQjC,EAAEG,OAAO,CAAC,CAAA,CAAA;",
6
+ "names": ["S", "ChannelType", "ThreadType", "EchoObjectSchema", "ActorSchema", "MessageType", "ThreadAction", "THREAD_ACTION", "THREAD_PLUGIN", "CreateChannel", "S", "TaggedClass", "input", "Struct", "spaceId", "String", "name", "optional", "output", "object", "ChannelType", "Create", "cursor", "subject", "EchoObjectSchema", "ThreadType", "Select", "current", "Void", "ToggleResolved", "thread", "Delete", "AddMessage", "sender", "ActorSchema", "text", "DeleteMessage", "messageId", "message", "MessageType", "messageIndex", "Number", "ThreadSettingsSchema", "mutable"]
7
+ }
@@ -38,36 +38,31 @@ import { createIntent, useIntentDispatcher } from "@dxos/app-framework";
38
38
  import { ObservabilityAction } from "@dxos/plugin-observability/types";
39
39
  import { getSpace } from "@dxos/react-client/echo";
40
40
  import { useOnTransition } from "@dxos/react-ui";
41
- var useAnalyticsCallback = (spaceId, name, meta) => {
41
+ var useOnEditAnalytics = (message, textBlock, editing) => {
42
42
  const { dispatchPromise: dispatch } = useIntentDispatcher();
43
- return useCallback((dynamicMeta) => {
43
+ const onEdit = useCallback(() => {
44
+ const space = getSpace(message);
45
+ if (!space || !textBlock) {
46
+ return;
47
+ }
44
48
  void dispatch(createIntent(ObservabilityAction.SendEvent, {
45
- name,
49
+ name: "threads.message.update",
46
50
  properties: {
47
- ...meta,
48
- ...dynamicMeta,
49
- spaceId
51
+ spaceId: space.id,
52
+ messageId: message.id,
53
+ messageLength: textBlock?.text.length
50
54
  }
51
55
  }));
52
56
  }, [
53
57
  dispatch,
54
- name,
55
- meta,
56
- spaceId
58
+ message,
59
+ textBlock
57
60
  ]);
58
- };
59
- var useOnEditAnalytics = (message, editing) => {
60
- const space = getSpace(message);
61
- const onEditAnalytics = useAnalyticsCallback(space?.id, "threads.comment-edited", {
62
- messageId: message.id,
63
- messageLength: message.text.length
64
- });
65
- useOnTransition(editing, true, false, onEditAnalytics);
61
+ useOnTransition(editing, true, false, onEdit);
66
62
  };
67
63
 
68
64
  export {
69
65
  useStatus,
70
- useAnalyticsCallback,
71
66
  useOnEditAnalytics
72
67
  };
73
- //# sourceMappingURL=chunk-HLWJTUWZ.mjs.map
68
+ //# sourceMappingURL=chunk-J56FORYF.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/hooks/useStatus.ts", "../../../src/hooks/analytics.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\n\n// TODO(burdon): Generalize and factor out.\nexport const useStatus = (space?: Space, channel?: string) => {\n const [processing, setProcessing] = useState(false);\n useEffect(() => {\n if (!space || !channel) {\n return;\n }\n\n const unsubscribe = space.listen(`status/${channel}`, (status) => {\n const { event } = status.payload ?? {};\n setProcessing(event === 'processing');\n });\n\n const t = setInterval(() => {\n setProcessing((prev: any) => {\n if (typeof prev?.ts === 'number' && Date.now() - prev.ts > 30_000) {\n return undefined;\n } else {\n return prev;\n }\n });\n }, 1_000);\n\n return () => {\n unsubscribe();\n clearInterval(t);\n };\n }, [space, channel]);\n\n return processing;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { type ReactiveObject } from '@dxos/live-object';\nimport { ObservabilityAction } from '@dxos/plugin-observability/types';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { useOnTransition } from '@dxos/react-ui';\n\nexport const useAnalyticsCallback = (spaceId: string | undefined, name: string, meta?: any) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n return useCallback(\n (dynamicMeta?: any) => {\n void dispatch(\n createIntent(ObservabilityAction.SendEvent, { name, properties: { ...meta, ...dynamicMeta, spaceId } }),\n );\n },\n [dispatch, name, meta, spaceId],\n );\n};\n\nexport const useOnEditAnalytics = (message: ReactiveObject<any>, editing: boolean) => {\n const space = getSpace(message);\n\n const onEditAnalytics = useAnalyticsCallback(space?.id, 'threads.comment-edited', {\n messageId: message.id,\n messageLength: message.text.length,\n });\n\n useOnTransition(editing, true, false, onEditAnalytics);\n};\n"],
5
- "mappings": ";;;AAIA,SAASA,WAAWC,gBAAgB;AAK7B,IAAMC,YAAY,CAACC,OAAeC,YAAAA;AACvC,QAAM,CAACC,YAAYC,aAAAA,IAAiBC,SAAS,KAAA;AAC7CC,YAAU,MAAA;AACR,QAAI,CAACL,SAAS,CAACC,SAAS;AACtB;IACF;AAEA,UAAMK,cAAcN,MAAMO,OAAO,UAAUN,OAAAA,IAAW,CAACO,WAAAA;AACrD,YAAM,EAAEC,MAAK,IAAKD,OAAOE,WAAW,CAAC;AACrCP,oBAAcM,UAAU,YAAA;IAC1B,CAAA;AAEA,UAAME,IAAIC,YAAY,MAAA;AACpBT,oBAAc,CAACU,SAAAA;AACb,YAAI,OAAOA,MAAMC,OAAO,YAAYC,KAAKC,IAAG,IAAKH,KAAKC,KAAK,KAAQ;AACjE,iBAAOG;QACT,OAAO;AACL,iBAAOJ;QACT;MACF,CAAA;IACF,GAAG,GAAA;AAEH,WAAO,MAAA;AACLP,kBAAAA;AACAY,oBAAcP,CAAAA;IAChB;EACF,GAAG;IAACX;IAAOC;GAAQ;AAEnB,SAAOC;AACT;;;AClCA,SAASiB,mBAAmB;AAE5B,SAASC,cAAcC,2BAA2B;AAElD,SAASC,2BAA2B;AACpC,SAASC,gBAAgB;AACzB,SAASC,uBAAuB;AAEzB,IAAMC,uBAAuB,CAACC,SAA6BC,MAAcC,SAAAA;AAC9E,QAAM,EAAEC,iBAAiBC,SAAQ,IAAKC,oBAAAA;AAEtC,SAAOC,YACL,CAACC,gBAAAA;AACC,SAAKH,SACHI,aAAaC,oBAAoBC,WAAW;MAAET;MAAMU,YAAY;QAAE,GAAGT;QAAM,GAAGK;QAAaP;MAAQ;IAAE,CAAA,CAAA;EAEzG,GACA;IAACI;IAAUH;IAAMC;IAAMF;GAAQ;AAEnC;AAEO,IAAMY,qBAAqB,CAACC,SAA8BC,YAAAA;AAC/D,QAAMC,QAAQC,SAASH,OAAAA;AAEvB,QAAMI,kBAAkBlB,qBAAqBgB,OAAOG,IAAI,0BAA0B;IAChFC,WAAWN,QAAQK;IACnBE,eAAeP,QAAQQ,KAAKC;EAC9B,CAAA;AAEAC,kBAAgBT,SAAS,MAAM,OAAOG,eAAAA;AACxC;",
6
- "names": ["useEffect", "useState", "useStatus", "space", "channel", "processing", "setProcessing", "useState", "useEffect", "unsubscribe", "listen", "status", "event", "payload", "t", "setInterval", "prev", "ts", "Date", "now", "undefined", "clearInterval", "useCallback", "createIntent", "useIntentDispatcher", "ObservabilityAction", "getSpace", "useOnTransition", "useAnalyticsCallback", "spaceId", "name", "meta", "dispatchPromise", "dispatch", "useIntentDispatcher", "useCallback", "dynamicMeta", "createIntent", "ObservabilityAction", "SendEvent", "properties", "useOnEditAnalytics", "message", "editing", "space", "getSpace", "onEditAnalytics", "id", "messageId", "messageLength", "text", "length", "useOnTransition"]
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\n\n// TODO(burdon): Generalize and factor out.\nexport const useStatus = (space?: Space, channel?: string) => {\n const [processing, setProcessing] = useState(false);\n useEffect(() => {\n if (!space || !channel) {\n return;\n }\n\n const unsubscribe = space.listen(`status/${channel}`, (status) => {\n const { event } = status.payload ?? {};\n setProcessing(event === 'processing');\n });\n\n const t = setInterval(() => {\n setProcessing((prev: any) => {\n if (typeof prev?.ts === 'number' && Date.now() - prev.ts > 30_000) {\n return undefined;\n } else {\n return prev;\n }\n });\n }, 1_000);\n\n return () => {\n unsubscribe();\n clearInterval(t);\n };\n }, [space, channel]);\n\n return processing;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { type ReactiveObject } from '@dxos/live-object';\nimport { ObservabilityAction } from '@dxos/plugin-observability/types';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { useOnTransition } from '@dxos/react-ui';\nimport { type TextContentBlock } from '@dxos/schema';\n\nexport const useOnEditAnalytics = (\n message: ReactiveObject<any>,\n textBlock: TextContentBlock | undefined,\n editing: boolean,\n) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n const onEdit = useCallback(() => {\n const space = getSpace(message);\n if (!space || !textBlock) {\n return;\n }\n\n void dispatch(\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.message.update',\n properties: {\n spaceId: space.id,\n messageId: message.id,\n messageLength: textBlock?.text.length,\n },\n }),\n );\n }, [dispatch, message, textBlock]);\n\n useOnTransition(editing, true, false, onEdit);\n};\n"],
5
+ "mappings": ";;;AAIA,SAASA,WAAWC,gBAAgB;AAK7B,IAAMC,YAAY,CAACC,OAAeC,YAAAA;AACvC,QAAM,CAACC,YAAYC,aAAAA,IAAiBC,SAAS,KAAA;AAC7CC,YAAU,MAAA;AACR,QAAI,CAACL,SAAS,CAACC,SAAS;AACtB;IACF;AAEA,UAAMK,cAAcN,MAAMO,OAAO,UAAUN,OAAAA,IAAW,CAACO,WAAAA;AACrD,YAAM,EAAEC,MAAK,IAAKD,OAAOE,WAAW,CAAC;AACrCP,oBAAcM,UAAU,YAAA;IAC1B,CAAA;AAEA,UAAME,IAAIC,YAAY,MAAA;AACpBT,oBAAc,CAACU,SAAAA;AACb,YAAI,OAAOA,MAAMC,OAAO,YAAYC,KAAKC,IAAG,IAAKH,KAAKC,KAAK,KAAQ;AACjE,iBAAOG;QACT,OAAO;AACL,iBAAOJ;QACT;MACF,CAAA;IACF,GAAG,GAAA;AAEH,WAAO,MAAA;AACLP,kBAAAA;AACAY,oBAAcP,CAAAA;IAChB;EACF,GAAG;IAACX;IAAOC;GAAQ;AAEnB,SAAOC;AACT;;;AClCA,SAASiB,mBAAmB;AAE5B,SAASC,cAAcC,2BAA2B;AAElD,SAASC,2BAA2B;AACpC,SAASC,gBAAgB;AACzB,SAASC,uBAAuB;AAGzB,IAAMC,qBAAqB,CAChCC,SACAC,WACAC,YAAAA;AAEA,QAAM,EAAEC,iBAAiBC,SAAQ,IAAKC,oBAAAA;AAEtC,QAAMC,SAASC,YAAY,MAAA;AACzB,UAAMC,QAAQC,SAAST,OAAAA;AACvB,QAAI,CAACQ,SAAS,CAACP,WAAW;AACxB;IACF;AAEA,SAAKG,SACHM,aAAaC,oBAAoBC,WAAW;MAC1CC,MAAM;MACNC,YAAY;QACVC,SAASP,MAAMQ;QACfC,WAAWjB,QAAQgB;QACnBE,eAAejB,WAAWkB,KAAKC;MACjC;IACF,CAAA,CAAA;EAEJ,GAAG;IAAChB;IAAUJ;IAASC;GAAU;AAEjCoB,kBAAgBnB,SAAS,MAAM,OAAOI,MAAAA;AACxC;",
6
+ "names": ["useEffect", "useState", "useStatus", "space", "channel", "processing", "setProcessing", "useState", "useEffect", "unsubscribe", "listen", "status", "event", "payload", "t", "setInterval", "prev", "ts", "Date", "now", "undefined", "clearInterval", "useCallback", "createIntent", "useIntentDispatcher", "ObservabilityAction", "getSpace", "useOnTransition", "useOnEditAnalytics", "message", "textBlock", "editing", "dispatchPromise", "dispatch", "useIntentDispatcher", "onEdit", "useCallback", "space", "getSpace", "createIntent", "ObservabilityAction", "SendEvent", "name", "properties", "spaceId", "id", "messageId", "messageLength", "text", "length", "useOnTransition"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  THREAD_PLUGIN
4
- } from "./chunk-FXUATCLW.mjs";
4
+ } from "./chunk-42F2DTMM.mjs";
5
5
 
6
6
  // packages/plugins/plugin-thread/src/capabilities/capabilities.ts
7
7
  import { defineCapability } from "@dxos/app-framework";
@@ -14,4 +14,4 @@ var ThreadCapabilities;
14
14
  export {
15
15
  ThreadCapabilities
16
16
  };
17
- //# sourceMappingURL=chunk-ZJITX3TO.mjs.map
17
+ //# sourceMappingURL=chunk-WLY2HMDB.mjs.map
@@ -0,0 +1,19 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+
3
+ // packages/plugins/plugin-thread/src/capabilities/index.ts
4
+ import { lazy } from "@dxos/app-framework";
5
+ var AppGraphBuilder = lazy(() => import("./app-graph-builder-M3KK5QJH.mjs"));
6
+ var IntentResolver = lazy(() => import("./intent-resolver-OURFRSSF.mjs"));
7
+ var Markdown = lazy(() => import("./markdown-ZKU23UVD.mjs"));
8
+ var ReactSurface = lazy(() => import("./react-surface-KIJ767JK.mjs"));
9
+ var ThreadSettings = lazy(() => import("./settings-ZUJQ4LWI.mjs"));
10
+ var ThreadState = lazy(() => import("./state-SSDX5O67.mjs"));
11
+
12
+ export {
13
+ AppGraphBuilder,
14
+ IntentResolver,
15
+ Markdown,
16
+ ReactSurface,
17
+ ThreadState
18
+ };
19
+ //# sourceMappingURL=chunk-WSE23GSG.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const Markdown = lazy(() => import('./markdown'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const ThreadSettings = lazy(() => import('./settings'));\nexport const ThreadState = lazy(() => import('./state'));\n\nexport * from './capabilities';\n"],
5
+ "mappings": ";;;AAIA,SAASA,YAAY;AAEd,IAAMC,kBAAkBC,KAAK,MAAM,OAAO,kCAAA,CAAA;AAC1C,IAAMC,iBAAiBD,KAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAME,WAAWF,KAAK,MAAM,OAAO,yBAAA,CAAA;AACnC,IAAMG,eAAeH,KAAK,MAAM,OAAO,8BAAA,CAAA;AACvC,IAAMI,iBAAiBJ,KAAK,MAAM,OAAO,yBAAA,CAAA;AACzC,IAAMK,cAAcL,KAAK,MAAM,OAAO,sBAAA,CAAA;",
6
+ "names": ["lazy", "AppGraphBuilder", "lazy", "IntentResolver", "Markdown", "ReactSurface", "ThreadSettings", "ThreadState"]
7
+ }