@dxos/plugin-thread 0.8.0 → 0.8.1-main.013e445

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 (171) hide show
  1. package/dist/lib/browser/ChannelContainer-YWGW5LTF.mjs +74 -0
  2. package/dist/lib/browser/ChannelContainer-YWGW5LTF.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-YK3ICB7G.mjs → chunk-FZ34L7RM.mjs} +4 -3
  4. package/dist/lib/browser/chunk-FZ34L7RM.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-BNEWNQBO.mjs → chunk-MC42ZV23.mjs} +16 -4
  6. package/dist/lib/browser/{chunk-BNEWNQBO.mjs.map → chunk-MC42ZV23.mjs.map} +4 -4
  7. package/dist/lib/browser/{chunk-NAO3LZMZ.mjs → chunk-NOOMCX5E.mjs} +3 -2
  8. package/dist/lib/browser/chunk-NOOMCX5E.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-UPKU23DA.mjs → chunk-VDQ3TPIW.mjs} +28 -19
  10. package/dist/lib/browser/chunk-VDQ3TPIW.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-636QDHE3.mjs → chunk-WBJLUUOK.mjs} +1 -1
  12. package/dist/lib/browser/{chunk-636QDHE3.mjs.map → chunk-WBJLUUOK.mjs.map} +2 -2
  13. package/dist/lib/browser/index.mjs +38 -27
  14. package/dist/lib/browser/index.mjs.map +4 -4
  15. package/dist/lib/browser/{intent-resolver-FAFQ54NP.mjs → intent-resolver-FCC6BZSE.mjs} +5 -5
  16. package/dist/lib/browser/{intent-resolver-FAFQ54NP.mjs.map → intent-resolver-FCC6BZSE.mjs.map} +2 -2
  17. package/dist/lib/browser/{markdown-RPYOUBVR.mjs → markdown-I7DN4THW.mjs} +6 -6
  18. package/dist/lib/browser/markdown-I7DN4THW.mjs.map +7 -0
  19. package/dist/lib/browser/meta.json +1 -1
  20. package/dist/lib/browser/{react-surface-Y4MUSICN.mjs → react-surface-34FQO5BB.mjs} +23 -31
  21. package/dist/lib/browser/react-surface-34FQO5BB.mjs.map +7 -0
  22. package/dist/lib/browser/{settings-WQTE5AEZ.mjs → settings-G5ZTDTIU.mjs} +3 -3
  23. package/dist/lib/browser/{state-GNFUURIC.mjs → state-HPUFZBB7.mjs} +4 -3
  24. package/dist/lib/browser/state-HPUFZBB7.mjs.map +7 -0
  25. package/dist/lib/browser/types.mjs +2 -2
  26. package/dist/lib/node/ChannelContainer-XQIU3OFX.cjs +98 -0
  27. package/dist/lib/node/ChannelContainer-XQIU3OFX.cjs.map +7 -0
  28. package/dist/lib/node/{chunk-AWSTZ2KN.cjs → chunk-FMKMIGXZ.cjs} +30 -6
  29. package/dist/lib/node/chunk-FMKMIGXZ.cjs.map +7 -0
  30. package/dist/lib/node/{chunk-RQR5Z23G.cjs → chunk-G63K6IDM.cjs} +35 -26
  31. package/dist/lib/node/chunk-G63K6IDM.cjs.map +7 -0
  32. package/dist/lib/node/{chunk-F735VMTN.cjs → chunk-ONLWOUYZ.cjs} +4 -4
  33. package/dist/lib/node/{chunk-F735VMTN.cjs.map → chunk-ONLWOUYZ.cjs.map} +2 -2
  34. package/dist/lib/node/{chunk-FPWNZ6TB.cjs → chunk-VEVJBOWK.cjs} +8 -7
  35. package/dist/lib/node/chunk-VEVJBOWK.cjs.map +7 -0
  36. package/dist/lib/node/{chunk-CMEMMYDL.cjs → chunk-X5TUGJ5K.cjs} +8 -7
  37. package/dist/lib/node/chunk-X5TUGJ5K.cjs.map +7 -0
  38. package/dist/lib/node/index.cjs +74 -64
  39. package/dist/lib/node/index.cjs.map +4 -4
  40. package/dist/lib/node/{intent-resolver-DVBEXJ33.cjs → intent-resolver-KTZSUHCU.cjs} +22 -22
  41. package/dist/lib/node/{intent-resolver-DVBEXJ33.cjs.map → intent-resolver-KTZSUHCU.cjs.map} +2 -2
  42. package/dist/lib/node/{markdown-ELRGISXE.cjs → markdown-EUC6FFCM.cjs} +12 -12
  43. package/dist/lib/node/markdown-EUC6FFCM.cjs.map +7 -0
  44. package/dist/lib/node/meta.json +1 -1
  45. package/dist/lib/node/{react-surface-7HLTN5XS.cjs → react-surface-SF7YHWER.cjs} +44 -52
  46. package/dist/lib/node/react-surface-SF7YHWER.cjs.map +7 -0
  47. package/dist/lib/node/{settings-7VQYARM5.cjs → settings-WQXGBGOV.cjs} +8 -8
  48. package/dist/lib/node/{state-TQWEZ6B3.cjs → state-JMI5ZXZI.cjs} +8 -7
  49. package/dist/lib/node/state-JMI5ZXZI.cjs.map +7 -0
  50. package/dist/lib/node/types.cjs +4 -4
  51. package/dist/lib/node/types.cjs.map +1 -1
  52. package/dist/lib/node-esm/ChannelContainer-G63QTQHU.mjs +75 -0
  53. package/dist/lib/node-esm/ChannelContainer-G63QTQHU.mjs.map +7 -0
  54. package/dist/lib/node-esm/{chunk-FXUATCLW.mjs → chunk-42F2DTMM.mjs} +1 -1
  55. package/dist/lib/node-esm/{chunk-FXUATCLW.mjs.map → chunk-42F2DTMM.mjs.map} +2 -2
  56. package/dist/lib/node-esm/{chunk-HLWJTUWZ.mjs → chunk-C46EUYQO.mjs} +16 -4
  57. package/dist/lib/node-esm/{chunk-HLWJTUWZ.mjs.map → chunk-C46EUYQO.mjs.map} +4 -4
  58. package/dist/lib/node-esm/{chunk-CISLDOH7.mjs → chunk-FIPZFSRG.mjs} +28 -19
  59. package/dist/lib/node-esm/chunk-FIPZFSRG.mjs.map +7 -0
  60. package/dist/lib/node-esm/{chunk-ZJITX3TO.mjs → chunk-TXW5SIBN.mjs} +3 -2
  61. package/dist/lib/node-esm/chunk-TXW5SIBN.mjs.map +7 -0
  62. package/dist/lib/node-esm/{chunk-33NDMQQQ.mjs → chunk-XUAPEJSP.mjs} +4 -3
  63. package/dist/lib/node-esm/chunk-XUAPEJSP.mjs.map +7 -0
  64. package/dist/lib/node-esm/index.mjs +38 -27
  65. package/dist/lib/node-esm/index.mjs.map +4 -4
  66. package/dist/lib/node-esm/{intent-resolver-DHVLBNCC.mjs → intent-resolver-F4GQ2DBX.mjs} +5 -5
  67. package/dist/lib/node-esm/{intent-resolver-DHVLBNCC.mjs.map → intent-resolver-F4GQ2DBX.mjs.map} +2 -2
  68. package/dist/lib/node-esm/{markdown-23OB7EZG.mjs → markdown-LNEGE76H.mjs} +6 -6
  69. package/dist/lib/node-esm/markdown-LNEGE76H.mjs.map +7 -0
  70. package/dist/lib/node-esm/meta.json +1 -1
  71. package/dist/lib/node-esm/{react-surface-AZHTTR6J.mjs → react-surface-W6TBSW7R.mjs} +23 -31
  72. package/dist/lib/node-esm/react-surface-W6TBSW7R.mjs.map +7 -0
  73. package/dist/lib/node-esm/{settings-SGMM7UDT.mjs → settings-3NFSK2ZO.mjs} +3 -3
  74. package/dist/lib/node-esm/{state-7MLR27YG.mjs → state-PSZO57LP.mjs} +4 -3
  75. package/dist/lib/node-esm/state-PSZO57LP.mjs.map +7 -0
  76. package/dist/lib/node-esm/types.mjs +2 -2
  77. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  78. package/dist/types/src/capabilities/capabilities.d.ts +5 -0
  79. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  80. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  81. package/dist/types/src/components/ChannelContainer.d.ts +9 -0
  82. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -0
  83. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  84. package/dist/types/src/components/ChatContainer.d.ts +3 -2
  85. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  86. package/dist/types/src/components/CommentContainer.d.ts +2 -1
  87. package/dist/types/src/components/CommentContainer.d.ts.map +1 -1
  88. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  89. package/dist/types/src/components/CommentsContainer.d.ts +2 -1
  90. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  91. package/dist/types/src/components/MessageContainer.d.ts +3 -2
  92. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  93. package/dist/types/src/components/ThreadComplementary.d.ts +2 -1
  94. package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
  95. package/dist/types/src/components/ThreadSettings.d.ts +2 -1
  96. package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
  97. package/dist/types/src/components/index.d.ts +3 -2
  98. package/dist/types/src/components/index.d.ts.map +1 -1
  99. package/dist/types/src/components/testing.d.ts +104 -44
  100. package/dist/types/src/components/testing.d.ts.map +1 -1
  101. package/dist/types/src/events.d.ts +4 -0
  102. package/dist/types/src/events.d.ts.map +1 -0
  103. package/dist/types/src/hooks/analytics.d.ts +2 -1
  104. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  105. package/dist/types/src/index.d.ts +2 -0
  106. package/dist/types/src/index.d.ts.map +1 -1
  107. package/dist/types/src/meta.d.ts +2 -7
  108. package/dist/types/src/meta.d.ts.map +1 -1
  109. package/dist/types/src/translations.d.ts +2 -9
  110. package/dist/types/src/translations.d.ts.map +1 -1
  111. package/dist/types/src/types.d.ts +4 -1
  112. package/dist/types/src/types.d.ts.map +1 -1
  113. package/package.json +32 -30
  114. package/src/ThreadPlugin.tsx +10 -4
  115. package/src/capabilities/capabilities.ts +6 -0
  116. package/src/capabilities/intent-resolver.ts +1 -1
  117. package/src/capabilities/react-surface.tsx +5 -16
  118. package/src/capabilities/state.ts +1 -1
  119. package/src/components/ChannelContainer.tsx +80 -0
  120. package/src/components/Chat.stories.tsx +4 -2
  121. package/src/components/ChatContainer.tsx +5 -5
  122. package/src/components/CommentContainer.tsx +1 -1
  123. package/src/components/Comments.stories.tsx +2 -1
  124. package/src/components/MessageContainer.tsx +15 -13
  125. package/src/components/ThreadComplementary.tsx +5 -4
  126. package/src/components/index.ts +1 -1
  127. package/src/components/testing.ts +15 -12
  128. package/src/events.ts +11 -0
  129. package/src/extensions/threads.ts +2 -2
  130. package/src/hooks/analytics.ts +7 -2
  131. package/src/index.ts +2 -0
  132. package/src/meta.ts +2 -2
  133. package/src/translations.ts +1 -3
  134. package/src/types.ts +4 -1
  135. package/dist/lib/browser/ThreadContainer-6OP5AG2W.mjs +0 -19
  136. package/dist/lib/browser/ThreadContainer-6OP5AG2W.mjs.map +0 -7
  137. package/dist/lib/browser/chunk-NAO3LZMZ.mjs.map +0 -7
  138. package/dist/lib/browser/chunk-UPKU23DA.mjs.map +0 -7
  139. package/dist/lib/browser/chunk-VOMIDDNO.mjs +0 -15
  140. package/dist/lib/browser/chunk-VOMIDDNO.mjs.map +0 -7
  141. package/dist/lib/browser/chunk-YK3ICB7G.mjs.map +0 -7
  142. package/dist/lib/browser/markdown-RPYOUBVR.mjs.map +0 -7
  143. package/dist/lib/browser/react-surface-Y4MUSICN.mjs.map +0 -7
  144. package/dist/lib/browser/state-GNFUURIC.mjs.map +0 -7
  145. package/dist/lib/node/ThreadContainer-LTKKLPXX.cjs +0 -45
  146. package/dist/lib/node/ThreadContainer-LTKKLPXX.cjs.map +0 -7
  147. package/dist/lib/node/chunk-AWSTZ2KN.cjs.map +0 -7
  148. package/dist/lib/node/chunk-BHFHFTHO.cjs +0 -50
  149. package/dist/lib/node/chunk-BHFHFTHO.cjs.map +0 -7
  150. package/dist/lib/node/chunk-CMEMMYDL.cjs.map +0 -7
  151. package/dist/lib/node/chunk-FPWNZ6TB.cjs.map +0 -7
  152. package/dist/lib/node/chunk-RQR5Z23G.cjs.map +0 -7
  153. package/dist/lib/node/markdown-ELRGISXE.cjs.map +0 -7
  154. package/dist/lib/node/react-surface-7HLTN5XS.cjs.map +0 -7
  155. package/dist/lib/node/state-TQWEZ6B3.cjs.map +0 -7
  156. package/dist/lib/node-esm/ThreadContainer-SV74JFRH.mjs +0 -20
  157. package/dist/lib/node-esm/ThreadContainer-SV74JFRH.mjs.map +0 -7
  158. package/dist/lib/node-esm/chunk-33NDMQQQ.mjs.map +0 -7
  159. package/dist/lib/node-esm/chunk-CISLDOH7.mjs.map +0 -7
  160. package/dist/lib/node-esm/chunk-PJPVEO7E.mjs +0 -17
  161. package/dist/lib/node-esm/chunk-PJPVEO7E.mjs.map +0 -7
  162. package/dist/lib/node-esm/chunk-ZJITX3TO.mjs.map +0 -7
  163. package/dist/lib/node-esm/markdown-23OB7EZG.mjs.map +0 -7
  164. package/dist/lib/node-esm/react-surface-AZHTTR6J.mjs.map +0 -7
  165. package/dist/lib/node-esm/state-7MLR27YG.mjs.map +0 -7
  166. package/dist/types/src/components/ThreadContainer.d.ts +0 -7
  167. package/dist/types/src/components/ThreadContainer.d.ts.map +0 -1
  168. package/src/components/ThreadContainer.tsx +0 -22
  169. /package/dist/lib/browser/{settings-WQTE5AEZ.mjs.map → settings-G5ZTDTIU.mjs.map} +0 -0
  170. /package/dist/lib/node/{settings-7VQYARM5.cjs.map → settings-WQXGBGOV.cjs.map} +0 -0
  171. /package/dist/lib/node-esm/{settings-SGMM7UDT.mjs.map → settings-3NFSK2ZO.mjs.map} +0 -0
@@ -0,0 +1,74 @@
1
+ import {
2
+ ChatContainer
3
+ } from "./chunk-VDQ3TPIW.mjs";
4
+ import "./chunk-MC42ZV23.mjs";
5
+ import {
6
+ ThreadCapabilities
7
+ } from "./chunk-NOOMCX5E.mjs";
8
+ import "./chunk-WBJLUUOK.mjs";
9
+
10
+ // packages/plugins/plugin-thread/src/components/ChannelContainer.tsx
11
+ import React, { useCallback } from "react";
12
+ import { Surface, useCapabilities, useCapability } from "@dxos/app-framework";
13
+ import { fullyQualifiedId } from "@dxos/react-client/echo";
14
+ import { createEditorActionGroup } from "@dxos/react-ui-editor";
15
+ import { createMenuAction, MenuProvider, ToolbarMenu, useMenuActions } from "@dxos/react-ui-menu";
16
+ import { StackItem } from "@dxos/react-ui-stack";
17
+ var useActivitiesMenu = (activities, activity) => {
18
+ return useMenuActions(() => ({
19
+ nodes: [
20
+ createEditorActionGroup("activities", {
21
+ variant: "toggleGroup",
22
+ selectCardinality: "single",
23
+ value: activity
24
+ }),
25
+ ...activities.map(({ id, ...properties }) => createMenuAction(id, {
26
+ ...properties,
27
+ checked: true
28
+ }))
29
+ ],
30
+ edges: [
31
+ {
32
+ source: "root",
33
+ target: "activities"
34
+ },
35
+ ...activities.map((activity2) => ({
36
+ source: "activities",
37
+ target: activity2.id
38
+ }))
39
+ ]
40
+ }));
41
+ };
42
+ var ChannelContainer = ({ role, channel, context }) => {
43
+ const { state } = useCapability(ThreadCapabilities.MutableState);
44
+ const currentActivity = state.activities[channel.id];
45
+ const activities = useCapabilities(ThreadCapabilities.Activity);
46
+ const menu = useActivitiesMenu(activities, currentActivity);
47
+ const handleAction = useCallback((action) => state.activities[channel.id] = currentActivity === action.id ? void 0 : action.id, [
48
+ currentActivity
49
+ ]);
50
+ const thread = channel.threads[0].target;
51
+ if (!thread) {
52
+ return null;
53
+ }
54
+ return /* @__PURE__ */ React.createElement(StackItem.Content, {
55
+ toolbar: true
56
+ }, /* @__PURE__ */ React.createElement(MenuProvider, {
57
+ ...menu,
58
+ onAction: handleAction,
59
+ attendableId: fullyQualifiedId(channel)
60
+ }, /* @__PURE__ */ React.createElement(ToolbarMenu, null)), currentActivity ? /* @__PURE__ */ React.createElement(Surface, {
61
+ role: `channel-activity--${currentActivity}`,
62
+ data: {
63
+ subject: channel
64
+ }
65
+ }) : /* @__PURE__ */ React.createElement(ChatContainer, {
66
+ thread,
67
+ context
68
+ }));
69
+ };
70
+ var ChannelContainer_default = ChannelContainer;
71
+ export {
72
+ ChannelContainer_default as default
73
+ };
74
+ //# sourceMappingURL=ChannelContainer-YWGW5LTF.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ChannelContainer.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, type ComponentProps } from 'react';\n\nimport { Surface, useCapabilities, useCapability } from '@dxos/app-framework';\nimport { type NodeArg } from '@dxos/plugin-graph';\nimport { type ChannelType } from '@dxos/plugin-space/types';\nimport { fullyQualifiedId } from '@dxos/react-client/echo';\nimport { createEditorActionGroup } from '@dxos/react-ui-editor';\nimport {\n createMenuAction,\n MenuProvider,\n ToolbarMenu,\n type ToolbarMenuActionGroupProperties,\n useMenuActions,\n type MenuAction,\n} from '@dxos/react-ui-menu';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { ChatContainer } from './ChatContainer';\nimport { ThreadCapabilities } from '../capabilities';\n\nconst useActivitiesMenu = (activities: ThreadCapabilities.Activity[], activity: string | undefined) => {\n return useMenuActions(() => ({\n nodes: [\n createEditorActionGroup('activities', {\n variant: 'toggleGroup',\n selectCardinality: 'single',\n value: activity,\n } as ToolbarMenuActionGroupProperties) as NodeArg<any>,\n ...activities.map(({ id, ...properties }) =>\n createMenuAction(id, {\n ...properties,\n checked: true,\n }),\n ),\n ],\n edges: [\n { source: 'root', target: 'activities' },\n ...activities.map((activity) => ({ source: 'activities', target: activity.id })),\n ],\n }));\n};\n\nconst ChannelContainer = ({\n role,\n channel,\n context,\n}: Pick<ComponentProps<typeof ChatContainer>, 'context'> & { channel: ChannelType; role: string }) => {\n const { state } = useCapability(ThreadCapabilities.MutableState);\n const currentActivity = state.activities[channel.id];\n const activities = useCapabilities(ThreadCapabilities.Activity);\n const menu = useActivitiesMenu(activities, currentActivity);\n const handleAction = useCallback(\n (action: MenuAction) => (state.activities[channel.id] = currentActivity === action.id ? undefined : action.id),\n [currentActivity],\n );\n\n const thread = channel.threads[0].target;\n if (!thread) {\n return null;\n }\n\n return (\n <StackItem.Content toolbar>\n <MenuProvider {...menu} onAction={handleAction} attendableId={fullyQualifiedId(channel)}>\n <ToolbarMenu />\n </MenuProvider>\n {currentActivity ? (\n <Surface role={`channel-activity--${currentActivity}`} data={{ subject: channel }} />\n ) : (\n <ChatContainer thread={thread} context={context} />\n )}\n </StackItem.Content>\n );\n};\n\nexport default ChannelContainer;\n"],
5
+ "mappings": ";;;;;;;;;;AAIA,OAAOA,SAASC,mBAAwC;AAExD,SAASC,SAASC,iBAAiBC,qBAAqB;AAGxD,SAASC,wBAAwB;AACjC,SAASC,+BAA+B;AACxC,SACEC,kBACAC,cACAC,aAEAC,sBAEK;AACP,SAASC,iBAAiB;AAK1B,IAAMC,oBAAoB,CAACC,YAA2CC,aAAAA;AACpE,SAAOC,eAAe,OAAO;IAC3BC,OAAO;MACLC,wBAAwB,cAAc;QACpCC,SAAS;QACTC,mBAAmB;QACnBC,OAAON;MACT,CAAA;SACGD,WAAWQ,IAAI,CAAC,EAAEC,IAAI,GAAGC,WAAAA,MAC1BC,iBAAiBF,IAAI;QACnB,GAAGC;QACHE,SAAS;MACX,CAAA,CAAA;;IAGJC,OAAO;MACL;QAAEC,QAAQ;QAAQC,QAAQ;MAAa;SACpCf,WAAWQ,IAAI,CAACP,eAAc;QAAEa,QAAQ;QAAcC,QAAQd,UAASQ;MAAG,EAAA;;EAEjF,EAAA;AACF;AAEA,IAAMO,mBAAmB,CAAC,EACxBC,MACAC,SACAC,QAAO,MACwF;AAC/F,QAAM,EAAEC,MAAK,IAAKC,cAAcC,mBAAmBC,YAAY;AAC/D,QAAMC,kBAAkBJ,MAAMpB,WAAWkB,QAAQT,EAAE;AACnD,QAAMT,aAAayB,gBAAgBH,mBAAmBI,QAAQ;AAC9D,QAAMC,OAAO5B,kBAAkBC,YAAYwB,eAAAA;AAC3C,QAAMI,eAAeC,YACnB,CAACC,WAAwBV,MAAMpB,WAAWkB,QAAQT,EAAE,IAAIe,oBAAoBM,OAAOrB,KAAKsB,SAAYD,OAAOrB,IAC3G;IAACe;GAAgB;AAGnB,QAAMQ,SAASd,QAAQe,QAAQ,CAAA,EAAGlB;AAClC,MAAI,CAACiB,QAAQ;AACX,WAAO;EACT;AAEA,SACE,sBAAA,cAACE,UAAUC,SAAO;IAACC,SAAAA;KACjB,sBAAA,cAACC,cAAAA;IAAc,GAAGV;IAAMW,UAAUV;IAAcW,cAAcC,iBAAiBtB,OAAAA;KAC7E,sBAAA,cAACuB,aAAAA,IAAAA,CAAAA,GAEFjB,kBACC,sBAAA,cAACkB,SAAAA;IAAQzB,MAAM,qBAAqBO,eAAAA;IAAmBmB,MAAM;MAAEC,SAAS1B;IAAQ;OAEhF,sBAAA,cAAC2B,eAAAA;IAAcb;IAAgBb;;AAIvC;AAEA,IAAA,2BAAeH;",
6
+ "names": ["React", "useCallback", "Surface", "useCapabilities", "useCapability", "fullyQualifiedId", "createEditorActionGroup", "createMenuAction", "MenuProvider", "ToolbarMenu", "useMenuActions", "StackItem", "useActivitiesMenu", "activities", "activity", "useMenuActions", "nodes", "createEditorActionGroup", "variant", "selectCardinality", "value", "map", "id", "properties", "createMenuAction", "checked", "edges", "source", "target", "ChannelContainer", "role", "channel", "context", "state", "useCapability", "ThreadCapabilities", "MutableState", "currentActivity", "useCapabilities", "Activity", "menu", "handleAction", "useCallback", "action", "undefined", "thread", "threads", "StackItem", "Content", "toolbar", "MenuProvider", "onAction", "attendableId", "fullyQualifiedId", "ToolbarMenu", "Surface", "data", "subject", "ChatContainer"]
7
+ }
@@ -1,11 +1,12 @@
1
1
  import {
2
2
  THREAD_PLUGIN
3
- } from "./chunk-636QDHE3.mjs";
3
+ } from "./chunk-WBJLUUOK.mjs";
4
4
 
5
5
  // packages/plugins/plugin-thread/src/types.ts
6
6
  import { S } from "@dxos/echo-schema";
7
- import { ChannelType, MessageType, ThreadType } from "@dxos/plugin-space/types";
7
+ import { ChannelType, ThreadType } from "@dxos/plugin-space/types";
8
8
  import { EchoObjectSchema } from "@dxos/react-client/echo";
9
+ import { MessageType } from "@dxos/schema";
9
10
  var ThreadAction;
10
11
  (function(ThreadAction2) {
11
12
  const THREAD_ACTION = `${THREAD_PLUGIN}/action`;
@@ -76,4 +77,4 @@ export {
76
77
  ThreadAction,
77
78
  ThreadSettingsSchema
78
79
  };
79
- //# sourceMappingURL=chunk-YK3ICB7G.mjs.map
80
+ //# sourceMappingURL=chunk-FZ34L7RM.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 { 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 Create extends S.TaggedClass<Create>()(`${THREAD_ACTION}/create`, {\n input: S.Struct({\n name: S.optional(S.String),\n cursor: S.optional(S.String),\n subject: S.optional(EchoObjectSchema),\n }),\n output: S.Struct({\n object: S.Union(ChannelType, ThreadType),\n }),\n }) {}\n\n export class Select extends S.TaggedClass<Select>()(`${THREAD_ACTION}/select`, {\n input: S.Struct({\n current: S.String,\n skipOpen: S.optional(S.Boolean),\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 // TODO(wittjosiah): Rename?\n export class OnMessageAdd extends S.TaggedClass<OnMessageAdd>()(`${THREAD_ACTION}/on-message-add`, {\n input: S.Struct({\n thread: ThreadType,\n subject: EchoObjectSchema,\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,mBAAmB;;UAIXC,eAAAA;AACf,QAAMC,gBAAgB,GAAGC,aAAAA;EAElB,MAAMC,eAAeC,EAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,EAAEG,OAAO;MACdC,MAAMJ,EAAEK,SAASL,EAAEM,MAAM;MACzBC,QAAQP,EAAEK,SAASL,EAAEM,MAAM;MAC3BE,SAASR,EAAEK,SAASI,gBAAAA;IACtB,CAAA;IACAC,QAAQV,EAAEG,OAAO;MACfQ,QAAQX,EAAEY,MAAMC,aAAaC,UAAAA;IAC/B,CAAA;EACF,CAAA,EAAA;EAAI;gBATSf,SAAAA;EAWN,MAAMgB,eAAef,EAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,EAAEG,OAAO;MACda,SAAShB,EAAEM;MACXW,UAAUjB,EAAEK,SAASL,EAAEkB,OAAO;IAChC,CAAA;IACAR,QAAQV,EAAEmB;EACZ,CAAA,EAAA;EAAI;gBANSJ,SAAAA;EAQN,MAAMK,uBAAuBpB,EAAEC,YAAW,EAAmB,GAAGJ,aAAAA,oBAAiC;IACtGK,OAAOF,EAAEG,OAAO;MACdkB,QAAQP;IACV,CAAA;IACAJ,QAAQV,EAAEmB;EACZ,CAAA,EAAA;EAAI;gBALSC,iBAAAA;EAON,MAAME,eAAetB,EAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,EAAEG,OAAO;MACdkB,QAAQP;MACRN,SAASC;MACTF,QAAQP,EAAEK,SAASL,EAAEM,MAAM;IAC7B,CAAA;IACAI,QAAQV,EAAEmB;EACZ,CAAA,EAAA;EAAI;gBAPSG,SAAAA;EAUN,MAAMC,qBAAqBvB,EAAEC,YAAW,EAAiB,GAAGJ,aAAAA,mBAAgC;IACjGK,OAAOF,EAAEG,OAAO;MACdkB,QAAQP;MACRN,SAASC;IACX,CAAA;IACAC,QAAQV,EAAEmB;EACZ,CAAA,EAAA;EAAI;gBANSI,eAAAA;EAQN,MAAMC,sBAAsBxB,EAAEC,YAAW,EAAkB,GAAGJ,aAAAA,mBAAgC;IACnGK,OAAOF,EAAEG,OAAO;MACdkB,QAAQP;MACRN,SAASC;MACTgB,WAAWzB,EAAEM;MACboB,SAAS1B,EAAEK,SAASsB,WAAAA;MACpBC,cAAc5B,EAAEK,SAASL,EAAE6B,MAAM;IACnC,CAAA;IACAnB,QAAQV,EAAEmB;EACZ,CAAA,EAAA;EAAI;gBATSK,gBAAAA;AAUf,GAzDiB5B,iBAAAA,eAAAA,CAAAA,EAAAA;AA2DV,IAAMkC,uBAAuB9B,EAAE+B,QAAQ/B,EAAEG,OAAO,CAAC,CAAA,CAAA;",
6
+ "names": ["S", "ChannelType", "ThreadType", "EchoObjectSchema", "MessageType", "ThreadAction", "THREAD_ACTION", "THREAD_PLUGIN", "Create", "S", "TaggedClass", "input", "Struct", "name", "optional", "String", "cursor", "subject", "EchoObjectSchema", "output", "object", "Union", "ChannelType", "ThreadType", "Select", "current", "skipOpen", "Boolean", "Void", "ToggleResolved", "thread", "Delete", "OnMessageAdd", "DeleteMessage", "messageId", "message", "MessageType", "messageIndex", "Number", "ThreadSettingsSchema", "mutable"]
7
+ }
@@ -54,18 +54,30 @@ var useAnalyticsCallback = (spaceId, name, meta) => {
54
54
  spaceId
55
55
  ]);
56
56
  };
57
- var useOnEditAnalytics = (message, editing) => {
57
+ var useOnEditAnalytics = (message, textBlock, editing) => {
58
58
  const space = getSpace(message);
59
59
  const onEditAnalytics = useAnalyticsCallback(space?.id, "threads.comment-edited", {
60
60
  messageId: message.id,
61
- messageLength: message.text.length
61
+ messageLength: textBlock?.text.length
62
62
  });
63
63
  useOnTransition(editing, true, false, onEditAnalytics);
64
64
  };
65
65
 
66
+ // packages/plugins/plugin-thread/src/capabilities/index.ts
67
+ import { lazy } from "@dxos/app-framework";
68
+ var IntentResolver = lazy(() => import("./intent-resolver-FCC6BZSE.mjs"));
69
+ var Markdown = lazy(() => import("./markdown-I7DN4THW.mjs"));
70
+ var ReactSurface = lazy(() => import("./react-surface-34FQO5BB.mjs"));
71
+ var ThreadSettings = lazy(() => import("./settings-G5ZTDTIU.mjs"));
72
+ var ThreadState = lazy(() => import("./state-HPUFZBB7.mjs"));
73
+
66
74
  export {
67
75
  useStatus,
68
76
  useAnalyticsCallback,
69
- useOnEditAnalytics
77
+ useOnEditAnalytics,
78
+ IntentResolver,
79
+ Markdown,
80
+ ReactSurface,
81
+ ThreadState
70
82
  };
71
- //# sourceMappingURL=chunk-BNEWNQBO.mjs.map
83
+ //# sourceMappingURL=chunk-MC42ZV23.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/hooks/useStatus.ts", "../../../src/hooks/analytics.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\n\n// TODO(burdon): Generalize and factor out.\nexport const useStatus = (space?: Space, channel?: string) => {\n const [processing, setProcessing] = useState(false);\n useEffect(() => {\n if (!space || !channel) {\n return;\n }\n\n const unsubscribe = space.listen(`status/${channel}`, (status) => {\n const { event } = status.payload ?? {};\n setProcessing(event === 'processing');\n });\n\n const t = setInterval(() => {\n setProcessing((prev: any) => {\n if (typeof prev?.ts === 'number' && Date.now() - prev.ts > 30_000) {\n return undefined;\n } else {\n return prev;\n }\n });\n }, 1_000);\n\n return () => {\n unsubscribe();\n clearInterval(t);\n };\n }, [space, channel]);\n\n return processing;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { type ReactiveObject } from '@dxos/live-object';\nimport { ObservabilityAction } from '@dxos/plugin-observability/types';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { useOnTransition } from '@dxos/react-ui';\n\nexport const useAnalyticsCallback = (spaceId: string | undefined, name: string, meta?: any) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n return useCallback(\n (dynamicMeta?: any) => {\n void dispatch(\n createIntent(ObservabilityAction.SendEvent, { name, properties: { ...meta, ...dynamicMeta, spaceId } }),\n );\n },\n [dispatch, name, meta, spaceId],\n );\n};\n\nexport const useOnEditAnalytics = (message: ReactiveObject<any>, editing: boolean) => {\n const space = getSpace(message);\n\n const onEditAnalytics = useAnalyticsCallback(space?.id, 'threads.comment-edited', {\n messageId: message.id,\n messageLength: message.text.length,\n });\n\n useOnTransition(editing, true, false, onEditAnalytics);\n};\n"],
5
- "mappings": ";AAIA,SAASA,WAAWC,gBAAgB;AAK7B,IAAMC,YAAY,CAACC,OAAeC,YAAAA;AACvC,QAAM,CAACC,YAAYC,aAAAA,IAAiBC,SAAS,KAAA;AAC7CC,YAAU,MAAA;AACR,QAAI,CAACL,SAAS,CAACC,SAAS;AACtB;IACF;AAEA,UAAMK,cAAcN,MAAMO,OAAO,UAAUN,OAAAA,IAAW,CAACO,WAAAA;AACrD,YAAM,EAAEC,MAAK,IAAKD,OAAOE,WAAW,CAAC;AACrCP,oBAAcM,UAAU,YAAA;IAC1B,CAAA;AAEA,UAAME,IAAIC,YAAY,MAAA;AACpBT,oBAAc,CAACU,SAAAA;AACb,YAAI,OAAOA,MAAMC,OAAO,YAAYC,KAAKC,IAAG,IAAKH,KAAKC,KAAK,KAAQ;AACjE,iBAAOG;QACT,OAAO;AACL,iBAAOJ;QACT;MACF,CAAA;IACF,GAAG,GAAA;AAEH,WAAO,MAAA;AACLP,kBAAAA;AACAY,oBAAcP,CAAAA;IAChB;EACF,GAAG;IAACX;IAAOC;GAAQ;AAEnB,SAAOC;AACT;;;AClCA,SAASiB,mBAAmB;AAE5B,SAASC,cAAcC,2BAA2B;AAElD,SAASC,2BAA2B;AACpC,SAASC,gBAAgB;AACzB,SAASC,uBAAuB;AAEzB,IAAMC,uBAAuB,CAACC,SAA6BC,MAAcC,SAAAA;AAC9E,QAAM,EAAEC,iBAAiBC,SAAQ,IAAKC,oBAAAA;AAEtC,SAAOC,YACL,CAACC,gBAAAA;AACC,SAAKH,SACHI,aAAaC,oBAAoBC,WAAW;MAAET;MAAMU,YAAY;QAAE,GAAGT;QAAM,GAAGK;QAAaP;MAAQ;IAAE,CAAA,CAAA;EAEzG,GACA;IAACI;IAAUH;IAAMC;IAAMF;GAAQ;AAEnC;AAEO,IAAMY,qBAAqB,CAACC,SAA8BC,YAAAA;AAC/D,QAAMC,QAAQC,SAASH,OAAAA;AAEvB,QAAMI,kBAAkBlB,qBAAqBgB,OAAOG,IAAI,0BAA0B;IAChFC,WAAWN,QAAQK;IACnBE,eAAeP,QAAQQ,KAAKC;EAC9B,CAAA;AAEAC,kBAAgBT,SAAS,MAAM,OAAOG,eAAAA;AACxC;",
6
- "names": ["useEffect", "useState", "useStatus", "space", "channel", "processing", "setProcessing", "useState", "useEffect", "unsubscribe", "listen", "status", "event", "payload", "t", "setInterval", "prev", "ts", "Date", "now", "undefined", "clearInterval", "useCallback", "createIntent", "useIntentDispatcher", "ObservabilityAction", "getSpace", "useOnTransition", "useAnalyticsCallback", "spaceId", "name", "meta", "dispatchPromise", "dispatch", "useIntentDispatcher", "useCallback", "dynamicMeta", "createIntent", "ObservabilityAction", "SendEvent", "properties", "useOnEditAnalytics", "message", "editing", "space", "getSpace", "onEditAnalytics", "id", "messageId", "messageLength", "text", "length", "useOnTransition"]
3
+ "sources": ["../../../src/hooks/useStatus.ts", "../../../src/hooks/analytics.ts", "../../../src/capabilities/index.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';\nimport { type TextContentBlock } from '@dxos/schema';\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 = (\n message: ReactiveObject<any>,\n textBlock: TextContentBlock | undefined,\n editing: boolean,\n) => {\n const space = getSpace(message);\n\n const onEditAnalytics = useAnalyticsCallback(space?.id, 'threads.comment-edited', {\n messageId: message.id,\n messageLength: textBlock?.text.length,\n });\n\n useOnTransition(editing, true, false, onEditAnalytics);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\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,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,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,CAChCC,SACAC,WACAC,YAAAA;AAEA,QAAMC,QAAQC,SAASJ,OAAAA;AAEvB,QAAMK,kBAAkBnB,qBAAqBiB,OAAOG,IAAI,0BAA0B;IAChFC,WAAWP,QAAQM;IACnBE,eAAeP,WAAWQ,KAAKC;EACjC,CAAA;AAEAC,kBAAgBT,SAAS,MAAM,OAAOG,eAAAA;AACxC;;;ACnCA,SAASO,YAAY;AAEd,IAAMC,iBAAiBC,KAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAMC,WAAWD,KAAK,MAAM,OAAO,yBAAA,CAAA;AACnC,IAAME,eAAeF,KAAK,MAAM,OAAO,8BAAA,CAAA;AACvC,IAAMG,iBAAiBH,KAAK,MAAM,OAAO,yBAAA,CAAA;AACzC,IAAMI,cAAcJ,KAAK,MAAM,OAAO,sBAAA,CAAA;",
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", "textBlock", "editing", "space", "getSpace", "onEditAnalytics", "id", "messageId", "messageLength", "text", "length", "useOnTransition", "lazy", "IntentResolver", "lazy", "Markdown", "ReactSurface", "ThreadSettings", "ThreadState"]
7
7
  }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  THREAD_PLUGIN
3
- } from "./chunk-636QDHE3.mjs";
3
+ } from "./chunk-WBJLUUOK.mjs";
4
4
 
5
5
  // packages/plugins/plugin-thread/src/capabilities/capabilities.ts
6
6
  import { defineCapability } from "@dxos/app-framework";
@@ -8,9 +8,10 @@ var ThreadCapabilities;
8
8
  (function(ThreadCapabilities2) {
9
9
  ThreadCapabilities2.State = defineCapability(`${THREAD_PLUGIN}/capability/state`);
10
10
  ThreadCapabilities2.MutableState = defineCapability(`${THREAD_PLUGIN}/capability/state`);
11
+ ThreadCapabilities2.Activity = defineCapability(`${THREAD_PLUGIN}/capability/activity`);
11
12
  })(ThreadCapabilities || (ThreadCapabilities = {}));
12
13
 
13
14
  export {
14
15
  ThreadCapabilities
15
16
  };
16
- //# sourceMappingURL=chunk-NAO3LZMZ.mjs.map
17
+ //# sourceMappingURL=chunk-NOOMCX5E.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/capabilities.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { defineCapability } from '@dxos/app-framework';\nimport { type MenuActionProperties } from '@dxos/react-ui-menu';\nimport { type DeepReadonly } from '@dxos/util';\n\nimport { THREAD_PLUGIN } from '../meta';\nimport { type ViewState, type ThreadState } from '../types';\n\nexport namespace ThreadCapabilities {\n type GetViewState = (subjectId: string) => ViewState;\n export const State = defineCapability<{ state: DeepReadonly<ThreadState>; getViewState: GetViewState }>(\n `${THREAD_PLUGIN}/capability/state`,\n );\n export const MutableState = defineCapability<{ state: ThreadState; getViewState: GetViewState }>(\n `${THREAD_PLUGIN}/capability/state`,\n );\n\n export type Activity = Omit<MenuActionProperties, 'variant' | 'checked'> & {\n id: string;\n };\n export const Activity = defineCapability<Activity>(`${THREAD_PLUGIN}/capability/activity`);\n}\n"],
5
+ "mappings": ";;;;;AAIA,SAASA,wBAAwB;;UAOhBC,qBAAAA;sBAEFC,QAAQC,iBACnB,GAAGC,aAAAA,mBAAgC;sBAExBC,eAAeF,iBAC1B,GAAGC,aAAAA,mBAAgC;sBAMxBE,WAAWH,iBAA2B,GAAGC,aAAAA,sBAAmC;AAC3F,GAbiBH,uBAAAA,qBAAAA,CAAAA,EAAAA;",
6
+ "names": ["defineCapability", "ThreadCapabilities", "State", "defineCapability", "THREAD_PLUGIN", "MutableState", "Activity"]
7
+ }
@@ -1,16 +1,15 @@
1
1
  import {
2
2
  useOnEditAnalytics,
3
3
  useStatus
4
- } from "./chunk-BNEWNQBO.mjs";
4
+ } from "./chunk-MC42ZV23.mjs";
5
5
  import {
6
6
  THREAD_PLUGIN
7
- } from "./chunk-636QDHE3.mjs";
7
+ } from "./chunk-WBJLUUOK.mjs";
8
8
 
9
9
  // packages/plugins/plugin-thread/src/components/ChatContainer.tsx
10
10
  import React2, { useLayoutEffect, useMemo, useRef as useRef2, useState as useState2 } from "react";
11
11
  import { Ref } from "@dxos/echo-schema";
12
12
  import { create, makeRef, RefArray as RefArray2 } from "@dxos/live-object";
13
- import { MessageType } from "@dxos/plugin-space/types";
14
13
  import { fullyQualifiedId, getSpace, useMembers } from "@dxos/react-client/echo";
15
14
  import { useIdentity as useIdentity2 } from "@dxos/react-client/halo";
16
15
  import { Icon, ScrollArea, useThemeContext as useThemeContext2, useTranslation as useTranslation2 } from "@dxos/react-ui";
@@ -18,6 +17,7 @@ import { createBasicExtensions as createBasicExtensions2, createThemeExtensions
18
17
  import { StackItem } from "@dxos/react-ui-stack";
19
18
  import { mx as mx3 } from "@dxos/react-ui-theme";
20
19
  import { MessageTextbox, Thread, ThreadFooter, threadLayout } from "@dxos/react-ui-thread";
20
+ import { MessageType } from "@dxos/schema";
21
21
 
22
22
  // packages/plugins/plugin-thread/src/components/MessageContainer.tsx
23
23
  import { EditorView } from "@codemirror/view";
@@ -96,6 +96,9 @@ var MessageContainer = ({ message, members, onDelete }) => {
96
96
  const { t } = useTranslation(THREAD_PLUGIN);
97
97
  const editLabel = t(editing ? "save message label" : "edit message label");
98
98
  const deleteLabel = t("delete message label");
99
+ const textBlock = message.blocks.find((block) => block.type === "text");
100
+ const references = message.blocks.filter((block) => block.type === "reference").map((block) => block.reference);
101
+ useOnEditAnalytics(message, textBlock, !!editing);
99
102
  return /* @__PURE__ */ React.createElement(MessageRoot, {
100
103
  ...messageMetadata,
101
104
  classNames: [
@@ -131,13 +134,13 @@ var MessageContainer = ({ message, members, onDelete }) => {
131
134
  className: "sr-only"
132
135
  }, deleteLabel), /* @__PURE__ */ React.createElement(X, {
133
136
  className: getSize(4)
134
- }))), /* @__PURE__ */ React.createElement(Tooltip.Portal, null, /* @__PURE__ */ React.createElement(Tooltip.Content, null, deleteLabel, /* @__PURE__ */ React.createElement(Tooltip.Arrow, null)))))), /* @__PURE__ */ React.createElement(TextboxBlock, {
135
- message,
137
+ }))), /* @__PURE__ */ React.createElement(Tooltip.Portal, null, /* @__PURE__ */ React.createElement(Tooltip.Content, null, deleteLabel, /* @__PURE__ */ React.createElement(Tooltip.Arrow, null)))))), textBlock && /* @__PURE__ */ React.createElement(TextboxBlock, {
138
+ block: textBlock,
136
139
  isAuthor: userIsAuthor,
137
140
  editing
138
- }), RefArray.allResolvedTargets(message.parts ?? []).map((part, index) => /* @__PURE__ */ React.createElement(MessagePart, {
141
+ }), RefArray.targets(references).map((reference, index) => /* @__PURE__ */ React.createElement(MessagePart, {
139
142
  key: index,
140
- part
143
+ part: reference
141
144
  })));
142
145
  };
143
146
  var MessagePart = ({ part }) => {
@@ -145,20 +148,20 @@ var MessagePart = ({ part }) => {
145
148
  subject: part
146
149
  });
147
150
  };
148
- var TextboxBlock = ({ message, isAuthor, editing }) => {
151
+ var TextboxBlock = ({ block, isAuthor, editing }) => {
149
152
  const { themeMode } = useThemeContext();
150
- const inMemoryContentRef = useRef(message.text);
153
+ const inMemoryContentRef = useRef(block.text);
151
154
  const handleDocumentChange = useCallback((newState) => {
152
155
  inMemoryContentRef.current = newState;
153
156
  }, []);
154
157
  const saveDocumentChange = useCallback(() => {
155
- message.text = inMemoryContentRef.current;
158
+ block.text = inMemoryContentRef.current;
156
159
  }, [
157
- message
160
+ block
158
161
  ]);
159
162
  useOnTransition(editing, true, false, saveDocumentChange);
160
163
  const { parentRef, focusAttributes, view } = useTextEditor(() => ({
161
- initialValue: message.text,
164
+ initialValue: block.text,
162
165
  extensions: [
163
166
  createBasicExtensions({
164
167
  readonly: !isAuthor || !editing
@@ -174,7 +177,7 @@ var TextboxBlock = ({ message, isAuthor, editing }) => {
174
177
  })
175
178
  ]
176
179
  }), [
177
- message.text,
180
+ block.text,
178
181
  editing,
179
182
  isAuthor,
180
183
  themeMode,
@@ -186,7 +189,6 @@ var TextboxBlock = ({ message, isAuthor, editing }) => {
186
189
  editing,
187
190
  view
188
191
  ]);
189
- useOnEditAnalytics(message, !!editing);
190
192
  return /* @__PURE__ */ React.createElement("div", {
191
193
  role: "none",
192
194
  ref: parentRef,
@@ -257,9 +259,16 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
257
259
  sender: {
258
260
  identityKey: identity.identityKey.toHex()
259
261
  },
260
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
261
- text: messageRef.current,
262
- context: context ? makeRef(context) : void 0
262
+ created: (/* @__PURE__ */ new Date()).toISOString(),
263
+ blocks: [
264
+ {
265
+ type: "text",
266
+ text: messageRef.current
267
+ }
268
+ ],
269
+ properties: context ? {
270
+ context: makeRef(context)
271
+ } : void 0
263
272
  })));
264
273
  messageRef.current = "";
265
274
  setAutoFocus(true);
@@ -284,7 +293,7 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
284
293
  }, /* @__PURE__ */ React2.createElement("div", {
285
294
  role: "none",
286
295
  className: mx3(threadLayout, "place-self-end")
287
- }, RefArray2.allResolvedTargets(thread.messages ?? []).map((message) => /* @__PURE__ */ React2.createElement(MessageContainer, {
296
+ }, RefArray2.targets(thread.messages ?? []).map((message) => /* @__PURE__ */ React2.createElement(MessageContainer, {
288
297
  key: message.id,
289
298
  message,
290
299
  members,
@@ -309,4 +318,4 @@ export {
309
318
  MessageContainer,
310
319
  ChatContainer
311
320
  };
312
- //# sourceMappingURL=chunk-UPKU23DA.mjs.map
321
+ //# sourceMappingURL=chunk-VDQ3TPIW.mjs.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 { 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';\nimport { MessageType } from '@dxos/schema';\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 created: new Date().toISOString(),\n blocks: [{ type: 'text', text: messageRef.current }],\n properties: 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.targets(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 { 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 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 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 && (\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", "//\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": ["React", "useLayoutEffect", "useMemo", "useRef", "useState", "Ref", "create", "makeRef", "RefArray", "fullyQualifiedId", "getSpace", "useMembers", "useIdentity", "Icon", "ScrollArea", "useThemeContext", "useTranslation", "createBasicExtensions", "createThemeExtensions", "listener", "StackItem", "mx", "MessageTextbox", "Thread", "ThreadFooter", "threadLayout", "MessageType", "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", "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", "authorName", "profile", "displayName", "generateName", "undefined", "authorAvatarProps", "hue", "data", "emoji", "messageControlClassNames", "hoverableControlItem", "MessageContainer", "message", "members", "onDelete", "senderIdentity", "find", "member", "sender", "identityKey", "PublicKey", "equals", "identity", "messageMetadata", "getMessageMetadata", "id", "userIsAuthor", "useIdentity", "toHex", "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", "ChatContainer", "thread", "context", "current", "autoFocusTextbox", "identity", "useIdentity", "space", "getSpace", "members", "useMembers", "key", "activity", "useStatus", "fullyQualifiedId", "t", "useTranslation", "THREAD_PLUGIN", "_count", "_setCount", "useState", "rerenderEditor", "count", "autoFocus", "setAutoFocus", "threadScrollRef", "useRef", "themeMode", "useThemeContext", "textboxMetadata", "getMessageMetadata", "messageRef", "extensions", "useMemo", "createBasicExtensions", "placeholder", "createThemeExtensions", "listener", "onChange", "text", "command", "scrollToEnd", "behavior", "setTimeout", "scrollIntoView", "block", "useLayoutEffect", "handleCreate", "length", "messages", "push", "makeRef", "create", "MessageType", "sender", "identityKey", "toHex", "created", "Date", "toISOString", "blocks", "type", "properties", "undefined", "handleDelete", "id", "messageIndex", "findIndex", "Ref", "hasObjectId", "splice", "React", "Thread", "classNames", "ScrollArea", "Root", "Viewport", "div", "role", "className", "mx", "threadLayout", "RefArray", "targets", "map", "message", "MessageContainer", "onDelete", "ref", "Scrollbar", "Thumb", "MessageTextbox", "onSend", "ThreadFooter"]
7
+ }
@@ -14,4 +14,4 @@ export {
14
14
  THREAD_ITEM,
15
15
  meta
16
16
  };
17
- //# sourceMappingURL=chunk-636QDHE3.mjs.map
17
+ //# sourceMappingURL=chunk-WBJLUUOK.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/meta.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const THREAD_PLUGIN = 'dxos.org/plugin/thread';\nexport const THREAD_ITEM = `${THREAD_PLUGIN}/item`;\n\nexport const meta = {\n id: THREAD_PLUGIN,\n name: 'Threads',\n description: 'Add comment threads to objects.',\n icon: 'ph--chat--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-thread',\n} satisfies PluginMeta;\n"],
5
- "mappings": ";AAMO,IAAMA,gBAAgB;AACtB,IAAMC,cAAc,GAAGD,aAAAA;AAEvB,IAAME,OAAO;EAClBC,IAAIH;EACJI,MAAM;EACNC,aAAa;EACbC,MAAM;EACNC,QAAQ;AACV;",
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const THREAD_PLUGIN = 'dxos.org/plugin/thread';\nexport const THREAD_ITEM = `${THREAD_PLUGIN}/item`;\n\nexport const meta: PluginMeta = {\n id: THREAD_PLUGIN,\n name: 'Threads',\n description: 'Add comment threads to objects.',\n icon: 'ph--chat--regular',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-thread',\n};\n"],
5
+ "mappings": ";AAMO,IAAMA,gBAAgB;AACtB,IAAMC,cAAc,GAAGD,aAAAA;AAEvB,IAAME,OAAmB;EAC9BC,IAAIH;EACJI,MAAM;EACNC,aAAa;EACbC,MAAM;EACNC,QAAQ;AACV;",
6
6
  "names": ["THREAD_PLUGIN", "THREAD_ITEM", "meta", "id", "name", "description", "icon", "source"]
7
7
  }
@@ -2,32 +2,40 @@ import {
2
2
  IntentResolver,
3
3
  Markdown,
4
4
  ReactSurface,
5
- ThreadState
6
- } from "./chunk-VOMIDDNO.mjs";
7
- import {
5
+ ThreadState,
8
6
  useAnalyticsCallback,
9
7
  useOnEditAnalytics,
10
8
  useStatus
11
- } from "./chunk-BNEWNQBO.mjs";
9
+ } from "./chunk-MC42ZV23.mjs";
12
10
  import {
13
11
  ThreadAction
14
- } from "./chunk-YK3ICB7G.mjs";
15
- import "./chunk-NAO3LZMZ.mjs";
12
+ } from "./chunk-FZ34L7RM.mjs";
13
+ import {
14
+ ThreadCapabilities
15
+ } from "./chunk-NOOMCX5E.mjs";
16
16
  import {
17
17
  THREAD_ITEM,
18
18
  THREAD_PLUGIN,
19
19
  meta
20
- } from "./chunk-636QDHE3.mjs";
20
+ } from "./chunk-WBJLUUOK.mjs";
21
+
22
+ // packages/plugins/plugin-thread/src/events.ts
23
+ import { Events } from "@dxos/app-framework";
24
+ var ThreadEvents;
25
+ (function(ThreadEvents3) {
26
+ ThreadEvents3.SetupActivity = Events.createStateEvent(`${THREAD_PLUGIN}/setup-activity`);
27
+ })(ThreadEvents || (ThreadEvents = {}));
21
28
 
22
29
  // packages/plugins/plugin-thread/src/ThreadPlugin.tsx
23
- import { Capabilities, contributes, createIntent, defineModule, definePlugin, Events } from "@dxos/app-framework";
30
+ import { Capabilities, contributes, createIntent, defineModule, definePlugin, Events as Events2 } from "@dxos/app-framework";
24
31
  import { ClientCapabilities, ClientEvents } from "@dxos/plugin-client";
25
32
  import { DeckCapabilities, DeckEvents } from "@dxos/plugin-deck";
26
33
  import { MarkdownEvents } from "@dxos/plugin-markdown";
27
- import { SpaceCapabilities, ThreadEvents } from "@dxos/plugin-space";
28
- import { ChannelType as ChannelType2, defineObjectForm, MessageType, ThreadType } from "@dxos/plugin-space/types";
34
+ import { SpaceCapabilities, ThreadEvents as ThreadEvents2 } from "@dxos/plugin-space";
35
+ import { ChannelType as ChannelType2, defineObjectForm, ThreadType } from "@dxos/plugin-space/types";
29
36
  import { RefArray } from "@dxos/react-client/echo";
30
37
  import { translations as threadTranslations } from "@dxos/react-ui-thread";
38
+ import { MessageType, MessageTypeV1, MessageTypeV1ToV2 } from "@dxos/schema";
31
39
 
32
40
  // packages/plugins/plugin-thread/src/translations.ts
33
41
  import { ChannelType } from "@dxos/plugin-space/types";
@@ -35,14 +43,12 @@ var translations_default = [
35
43
  {
36
44
  "en-US": {
37
45
  [ChannelType.typename]: {
38
- "typename label": "Channel"
46
+ "typename label": "Channel",
47
+ "object name placeholder": "New channel"
39
48
  },
40
49
  [THREAD_PLUGIN]: {
41
50
  "plugin name": "Threads",
42
- "channel name placeholder": "New channel",
43
51
  "channel title label": "Title",
44
- "delete channel label": "Delete channel",
45
- "create channel label": "Create channel",
46
52
  "message placeholder": "Reply\u2026",
47
53
  "activity message": "Processing\u2026",
48
54
  "anonymous label": "Anonymous",
@@ -85,12 +91,12 @@ var ThreadPlugin = () => definePlugin(meta, [
85
91
  // TODO(wittjosiah): Does not integrate with settings store.
86
92
  // Should this be a different event?
87
93
  // Should settings store be renamed to be more generic?
88
- activatesOn: Events.SetupSettings,
94
+ activatesOn: Events2.SetupSettings,
89
95
  activate: ThreadState
90
96
  }),
91
97
  defineModule({
92
98
  id: `${meta.id}/module/translations`,
93
- activatesOn: Events.SetupTranslations,
99
+ activatesOn: Events2.SetupTranslations,
94
100
  activate: () => contributes(Capabilities.Translations, [
95
101
  ...translations_default,
96
102
  ...threadTranslations
@@ -98,17 +104,11 @@ var ThreadPlugin = () => definePlugin(meta, [
98
104
  }),
99
105
  defineModule({
100
106
  id: `${meta.id}/module/metadata`,
101
- activatesOn: Events.SetupMetadata,
107
+ activatesOn: Events2.SetupMetadata,
102
108
  activate: () => [
103
109
  contributes(Capabilities.Metadata, {
104
110
  id: ChannelType2.typename,
105
111
  metadata: {
106
- placeholder: [
107
- "channel name placeholder",
108
- {
109
- ns: THREAD_PLUGIN
110
- }
111
- ],
112
112
  icon: "ph--chat--regular",
113
113
  // TODO(wittjosiah): Move out of metadata.
114
114
  loadReferences: async (channel) => await RefArray.loadAll(channel.threads ?? [])
@@ -165,7 +165,15 @@ var ThreadPlugin = () => definePlugin(meta, [
165
165
  activatesOn: ClientEvents.SetupSchema,
166
166
  activate: () => contributes(ClientCapabilities.Schema, [
167
167
  ThreadType,
168
- MessageType
168
+ MessageType,
169
+ MessageTypeV1
170
+ ])
171
+ }),
172
+ defineModule({
173
+ id: `${meta.id}/module/migration`,
174
+ activatesOn: ClientEvents.SetupMigration,
175
+ activate: () => contributes(ClientCapabilities.Migration, [
176
+ MessageTypeV1ToV2
169
177
  ])
170
178
  }),
171
179
  defineModule({
@@ -193,22 +201,25 @@ var ThreadPlugin = () => definePlugin(meta, [
193
201
  }),
194
202
  defineModule({
195
203
  id: `${meta.id}/module/react-surface`,
196
- activatesOn: Events.SetupReactSurface,
204
+ activatesOn: Events2.SetupReactSurface,
197
205
  // TODO(wittjosiah): Should occur before the comments thread is loaded when surfaces activation is more granular.
198
206
  activatesBefore: [
199
- ThreadEvents.SetupThread
207
+ ThreadEvents2.SetupThread,
208
+ ThreadEvents.SetupActivity
200
209
  ],
201
210
  activate: ReactSurface
202
211
  }),
203
212
  defineModule({
204
213
  id: `${meta.id}/module/intent-resolver`,
205
- activatesOn: Events.SetupIntentResolver,
214
+ activatesOn: Events2.SetupIntentResolver,
206
215
  activate: IntentResolver
207
216
  })
208
217
  ]);
209
218
  export {
210
219
  THREAD_ITEM,
211
220
  THREAD_PLUGIN,
221
+ ThreadCapabilities,
222
+ ThreadEvents,
212
223
  ThreadPlugin,
213
224
  meta,
214
225
  useAnalyticsCallback,