@dxos/plugin-thread 0.8.1-staging.391c573 → 0.8.1-staging.5be625a

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 (169) hide show
  1. package/dist/lib/browser/ChannelContainer-ITIG7L7P.mjs +75 -0
  2. package/dist/lib/browser/ChannelContainer-ITIG7L7P.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-NAO3LZMZ.mjs → chunk-NOOMCX5E.mjs} +3 -2
  4. package/dist/lib/browser/chunk-NOOMCX5E.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-UPKU23DA.mjs → chunk-NRMJGYMA.mjs} +50 -43
  6. package/dist/lib/browser/chunk-NRMJGYMA.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-YK3ICB7G.mjs → chunk-SJPT347G.mjs} +19 -6
  8. package/dist/lib/browser/chunk-SJPT347G.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-BNEWNQBO.mjs → chunk-SMQYULO6.mjs} +16 -4
  10. package/dist/lib/browser/{chunk-BNEWNQBO.mjs.map → chunk-SMQYULO6.mjs.map} +4 -4
  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 +42 -31
  14. package/dist/lib/browser/index.mjs.map +4 -4
  15. package/dist/lib/browser/{intent-resolver-FAFQ54NP.mjs → intent-resolver-FSG3ZOIM.mjs} +65 -62
  16. package/dist/lib/browser/intent-resolver-FSG3ZOIM.mjs.map +7 -0
  17. package/dist/lib/browser/{markdown-RPYOUBVR.mjs → markdown-MYZQDQFY.mjs} +6 -6
  18. package/dist/lib/browser/markdown-MYZQDQFY.mjs.map +7 -0
  19. package/dist/lib/browser/meta.json +1 -1
  20. package/dist/lib/browser/{react-surface-Y4MUSICN.mjs → react-surface-KOYRIK3E.mjs} +25 -32
  21. package/dist/lib/browser/react-surface-KOYRIK3E.mjs.map +7 -0
  22. package/dist/lib/browser/{settings-WQTE5AEZ.mjs → settings-5CREE7BH.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-F7345XW2.cjs +99 -0
  27. package/dist/lib/node/ChannelContainer-F7345XW2.cjs.map +7 -0
  28. package/dist/lib/node/{chunk-CMEMMYDL.cjs → chunk-AXTPNGRI.cjs} +23 -10
  29. package/dist/lib/node/chunk-AXTPNGRI.cjs.map +7 -0
  30. package/dist/lib/node/{chunk-RQR5Z23G.cjs → chunk-DGV5ABT6.cjs} +52 -45
  31. package/dist/lib/node/chunk-DGV5ABT6.cjs.map +7 -0
  32. package/dist/lib/node/{chunk-AWSTZ2KN.cjs → chunk-JBOC6MIE.cjs} +30 -6
  33. package/dist/lib/node/chunk-JBOC6MIE.cjs.map +7 -0
  34. package/dist/lib/node/{chunk-F735VMTN.cjs → chunk-ONLWOUYZ.cjs} +4 -4
  35. package/dist/lib/node/{chunk-F735VMTN.cjs.map → chunk-ONLWOUYZ.cjs.map} +2 -2
  36. package/dist/lib/node/{chunk-FPWNZ6TB.cjs → chunk-VEVJBOWK.cjs} +8 -7
  37. package/dist/lib/node/chunk-VEVJBOWK.cjs.map +7 -0
  38. package/dist/lib/node/index.cjs +77 -67
  39. package/dist/lib/node/index.cjs.map +4 -4
  40. package/dist/lib/node/{intent-resolver-DVBEXJ33.cjs → intent-resolver-NBME5QSW.cjs} +79 -76
  41. package/dist/lib/node/intent-resolver-NBME5QSW.cjs.map +7 -0
  42. package/dist/lib/node/{markdown-ELRGISXE.cjs → markdown-QBQTARMD.cjs} +12 -12
  43. package/dist/lib/node/markdown-QBQTARMD.cjs.map +7 -0
  44. package/dist/lib/node/meta.json +1 -1
  45. package/dist/lib/node/{react-surface-7HLTN5XS.cjs → react-surface-ICWYXRJU.cjs} +46 -53
  46. package/dist/lib/node/react-surface-ICWYXRJU.cjs.map +7 -0
  47. package/dist/lib/node/{settings-7VQYARM5.cjs → settings-XOLYNUHH.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-GP6Y6JSN.mjs +76 -0
  53. package/dist/lib/node-esm/ChannelContainer-GP6Y6JSN.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-33NDMQQQ.mjs → chunk-FZXTP57V.mjs} +19 -6
  57. package/dist/lib/node-esm/chunk-FZXTP57V.mjs.map +7 -0
  58. package/dist/lib/node-esm/{chunk-CISLDOH7.mjs → chunk-TW2NME6Z.mjs} +50 -43
  59. package/dist/lib/node-esm/chunk-TW2NME6Z.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-HLWJTUWZ.mjs → chunk-XQO5DGHF.mjs} +16 -4
  63. package/dist/lib/node-esm/{chunk-HLWJTUWZ.mjs.map → chunk-XQO5DGHF.mjs.map} +4 -4
  64. package/dist/lib/node-esm/index.mjs +42 -31
  65. package/dist/lib/node-esm/index.mjs.map +4 -4
  66. package/dist/lib/node-esm/{intent-resolver-DHVLBNCC.mjs → intent-resolver-QQCCKVEW.mjs} +65 -62
  67. package/dist/lib/node-esm/intent-resolver-QQCCKVEW.mjs.map +7 -0
  68. package/dist/lib/node-esm/{markdown-23OB7EZG.mjs → markdown-QO5HK24O.mjs} +6 -6
  69. package/dist/lib/node-esm/markdown-QO5HK24O.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-Z4CLCKTN.mjs} +25 -32
  72. package/dist/lib/node-esm/react-surface-Z4CLCKTN.mjs.map +7 -0
  73. package/dist/lib/node-esm/{settings-SGMM7UDT.mjs → settings-32PBKVBB.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/intent-resolver.d.ts.map +1 -1
  81. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  82. package/dist/types/src/components/ChannelContainer.d.ts +9 -0
  83. package/dist/types/src/components/ChannelContainer.d.ts.map +1 -0
  84. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  85. package/dist/types/src/components/ChatContainer.d.ts +7 -1
  86. package/dist/types/src/components/ChatContainer.d.ts.map +1 -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/MessageContainer.d.ts +3 -2
  90. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  91. package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
  92. package/dist/types/src/components/index.d.ts +3 -2
  93. package/dist/types/src/components/index.d.ts.map +1 -1
  94. package/dist/types/src/components/testing.d.ts +44 -40
  95. package/dist/types/src/components/testing.d.ts.map +1 -1
  96. package/dist/types/src/events.d.ts +4 -0
  97. package/dist/types/src/events.d.ts.map +1 -0
  98. package/dist/types/src/hooks/analytics.d.ts +2 -1
  99. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  100. package/dist/types/src/index.d.ts +2 -0
  101. package/dist/types/src/index.d.ts.map +1 -1
  102. package/dist/types/src/meta.d.ts +2 -7
  103. package/dist/types/src/meta.d.ts.map +1 -1
  104. package/dist/types/src/translations.d.ts +2 -9
  105. package/dist/types/src/translations.d.ts.map +1 -1
  106. package/dist/types/src/types.d.ts +20 -4
  107. package/dist/types/src/types.d.ts.map +1 -1
  108. package/package.json +33 -30
  109. package/src/ThreadPlugin.tsx +11 -7
  110. package/src/capabilities/capabilities.ts +6 -0
  111. package/src/capabilities/intent-resolver.ts +39 -33
  112. package/src/capabilities/react-surface.tsx +6 -18
  113. package/src/capabilities/state.ts +1 -1
  114. package/src/components/ChannelContainer.tsx +80 -0
  115. package/src/components/Chat.stories.tsx +19 -9
  116. package/src/components/ChatContainer.tsx +27 -29
  117. package/src/components/CommentContainer.tsx +8 -2
  118. package/src/components/Comments.stories.tsx +2 -1
  119. package/src/components/MessageContainer.tsx +18 -14
  120. package/src/components/ThreadComplementary.tsx +5 -4
  121. package/src/components/index.ts +1 -1
  122. package/src/components/testing.ts +4 -27
  123. package/src/events.ts +11 -0
  124. package/src/extensions/threads.ts +2 -2
  125. package/src/hooks/analytics.ts +7 -2
  126. package/src/index.ts +2 -0
  127. package/src/meta.ts +2 -2
  128. package/src/translations.ts +1 -3
  129. package/src/types.ts +18 -4
  130. package/dist/lib/browser/ThreadContainer-6OP5AG2W.mjs +0 -19
  131. package/dist/lib/browser/ThreadContainer-6OP5AG2W.mjs.map +0 -7
  132. package/dist/lib/browser/chunk-NAO3LZMZ.mjs.map +0 -7
  133. package/dist/lib/browser/chunk-UPKU23DA.mjs.map +0 -7
  134. package/dist/lib/browser/chunk-VOMIDDNO.mjs +0 -15
  135. package/dist/lib/browser/chunk-VOMIDDNO.mjs.map +0 -7
  136. package/dist/lib/browser/chunk-YK3ICB7G.mjs.map +0 -7
  137. package/dist/lib/browser/intent-resolver-FAFQ54NP.mjs.map +0 -7
  138. package/dist/lib/browser/markdown-RPYOUBVR.mjs.map +0 -7
  139. package/dist/lib/browser/react-surface-Y4MUSICN.mjs.map +0 -7
  140. package/dist/lib/browser/state-GNFUURIC.mjs.map +0 -7
  141. package/dist/lib/node/ThreadContainer-LTKKLPXX.cjs +0 -45
  142. package/dist/lib/node/ThreadContainer-LTKKLPXX.cjs.map +0 -7
  143. package/dist/lib/node/chunk-AWSTZ2KN.cjs.map +0 -7
  144. package/dist/lib/node/chunk-BHFHFTHO.cjs +0 -50
  145. package/dist/lib/node/chunk-BHFHFTHO.cjs.map +0 -7
  146. package/dist/lib/node/chunk-CMEMMYDL.cjs.map +0 -7
  147. package/dist/lib/node/chunk-FPWNZ6TB.cjs.map +0 -7
  148. package/dist/lib/node/chunk-RQR5Z23G.cjs.map +0 -7
  149. package/dist/lib/node/intent-resolver-DVBEXJ33.cjs.map +0 -7
  150. package/dist/lib/node/markdown-ELRGISXE.cjs.map +0 -7
  151. package/dist/lib/node/react-surface-7HLTN5XS.cjs.map +0 -7
  152. package/dist/lib/node/state-TQWEZ6B3.cjs.map +0 -7
  153. package/dist/lib/node-esm/ThreadContainer-SV74JFRH.mjs +0 -20
  154. package/dist/lib/node-esm/ThreadContainer-SV74JFRH.mjs.map +0 -7
  155. package/dist/lib/node-esm/chunk-33NDMQQQ.mjs.map +0 -7
  156. package/dist/lib/node-esm/chunk-CISLDOH7.mjs.map +0 -7
  157. package/dist/lib/node-esm/chunk-PJPVEO7E.mjs +0 -17
  158. package/dist/lib/node-esm/chunk-PJPVEO7E.mjs.map +0 -7
  159. package/dist/lib/node-esm/chunk-ZJITX3TO.mjs.map +0 -7
  160. package/dist/lib/node-esm/intent-resolver-DHVLBNCC.mjs.map +0 -7
  161. package/dist/lib/node-esm/markdown-23OB7EZG.mjs.map +0 -7
  162. package/dist/lib/node-esm/react-surface-AZHTTR6J.mjs.map +0 -7
  163. package/dist/lib/node-esm/state-7MLR27YG.mjs.map +0 -7
  164. package/dist/types/src/components/ThreadContainer.d.ts +0 -7
  165. package/dist/types/src/components/ThreadContainer.d.ts.map +0 -1
  166. package/src/components/ThreadContainer.tsx +0 -22
  167. /package/dist/lib/browser/{settings-WQTE5AEZ.mjs.map → settings-5CREE7BH.mjs.map} +0 -0
  168. /package/dist/lib/node/{settings-7VQYARM5.cjs.map → settings-XOLYNUHH.cjs.map} +0 -0
  169. /package/dist/lib/node-esm/{settings-SGMM7UDT.mjs.map → settings-32PBKVBB.mjs.map} +0 -0
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var ChannelContainer_F7345XW2_exports = {};
30
+ __export(ChannelContainer_F7345XW2_exports, {
31
+ default: () => ChannelContainer_default
32
+ });
33
+ module.exports = __toCommonJS(ChannelContainer_F7345XW2_exports);
34
+ var import_chunk_DGV5ABT6 = require("./chunk-DGV5ABT6.cjs");
35
+ var import_chunk_JBOC6MIE = require("./chunk-JBOC6MIE.cjs");
36
+ var import_chunk_VEVJBOWK = require("./chunk-VEVJBOWK.cjs");
37
+ var import_chunk_ONLWOUYZ = require("./chunk-ONLWOUYZ.cjs");
38
+ var import_react = __toESM(require("react"));
39
+ var import_app_framework = require("@dxos/app-framework");
40
+ var import_echo = require("@dxos/react-client/echo");
41
+ var import_react_ui_editor = require("@dxos/react-ui-editor");
42
+ var import_react_ui_menu = require("@dxos/react-ui-menu");
43
+ var import_react_ui_stack = require("@dxos/react-ui-stack");
44
+ var useActivitiesMenu = (activities, activity) => {
45
+ return (0, import_react_ui_menu.useMenuActions)(() => ({
46
+ nodes: [
47
+ (0, import_react_ui_editor.createEditorActionGroup)("activities", {
48
+ variant: "toggleGroup",
49
+ selectCardinality: "single",
50
+ value: activity
51
+ }),
52
+ ...activities.map(({ id, ...properties }) => (0, import_react_ui_menu.createMenuAction)(id, {
53
+ ...properties,
54
+ checked: true
55
+ }))
56
+ ],
57
+ edges: [
58
+ {
59
+ source: "root",
60
+ target: "activities"
61
+ },
62
+ ...activities.map((activity2) => ({
63
+ source: "activities",
64
+ target: activity2.id
65
+ }))
66
+ ]
67
+ }));
68
+ };
69
+ var ChannelContainer = ({ role, channel, context }) => {
70
+ const { state } = (0, import_app_framework.useCapability)(import_chunk_VEVJBOWK.ThreadCapabilities.MutableState);
71
+ const currentActivity = state.activities[channel.id];
72
+ const activities = (0, import_app_framework.useCapabilities)(import_chunk_VEVJBOWK.ThreadCapabilities.Activity);
73
+ const menu = useActivitiesMenu(activities, currentActivity);
74
+ const handleAction = (0, import_react.useCallback)((action) => state.activities[channel.id] = currentActivity === action.id ? void 0 : action.id, [
75
+ currentActivity
76
+ ]);
77
+ const space = (0, import_echo.getSpace)(channel);
78
+ if (!space) {
79
+ return null;
80
+ }
81
+ return /* @__PURE__ */ import_react.default.createElement(import_react_ui_stack.StackItem.Content, {
82
+ toolbar: true
83
+ }, /* @__PURE__ */ import_react.default.createElement(import_react_ui_menu.MenuProvider, {
84
+ ...menu,
85
+ onAction: handleAction,
86
+ attendableId: (0, import_echo.fullyQualifiedId)(channel)
87
+ }, /* @__PURE__ */ import_react.default.createElement(import_react_ui_menu.ToolbarMenu, null)), currentActivity ? /* @__PURE__ */ import_react.default.createElement(import_app_framework.Surface, {
88
+ role: `channel-activity--${currentActivity}`,
89
+ data: {
90
+ subject: channel
91
+ }
92
+ }) : /* @__PURE__ */ import_react.default.createElement(import_chunk_DGV5ABT6.ChatContainer, {
93
+ space,
94
+ dxn: channel.queue.dxn,
95
+ context
96
+ }));
97
+ };
98
+ var ChannelContainer_default = ChannelContainer;
99
+ //# sourceMappingURL=ChannelContainer-F7345XW2.cjs.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, getSpace } 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 space = getSpace(channel);\n if (!space) {\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 space={space} dxn={channel.queue.dxn} context={context} />\n )}\n </StackItem.Content>\n );\n};\n\nexport default ChannelContainer;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,mBAAwD;AAExD,2BAAwD;AAGxD,kBAA2C;AAC3C,6BAAwC;AACxC,2BAOO;AACP,4BAA0B;AAK1B,IAAMA,oBAAoB,CAACC,YAA2CC,aAAAA;AACpE,aAAOC,qCAAe,OAAO;IAC3BC,OAAO;UACLC,gDAAwB,cAAc;QACpCC,SAAS;QACTC,mBAAmB;QACnBC,OAAON;MACT,CAAA;SACGD,WAAWQ,IAAI,CAAC,EAAEC,IAAI,GAAGC,WAAAA,UAC1BC,uCAAiBF,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,QAAKC,oCAAcC,yCAAmBC,YAAY;AAC/D,QAAMC,kBAAkBJ,MAAMpB,WAAWkB,QAAQT,EAAE;AACnD,QAAMT,iBAAayB,sCAAgBH,yCAAmBI,QAAQ;AAC9D,QAAMC,OAAO5B,kBAAkBC,YAAYwB,eAAAA;AAC3C,QAAMI,mBAAeC,0BACnB,CAACC,WAAwBV,MAAMpB,WAAWkB,QAAQT,EAAE,IAAIe,oBAAoBM,OAAOrB,KAAKsB,SAAYD,OAAOrB,IAC3G;IAACe;GAAgB;AAGnB,QAAMQ,YAAQC,sBAASf,OAAAA;AACvB,MAAI,CAACc,OAAO;AACV,WAAO;EACT;AAEA,SACE,6BAAAE,QAAA,cAACC,gCAAUC,SAAO;IAACC,SAAAA;KACjB,6BAAAH,QAAA,cAACI,mCAAAA;IAAc,GAAGX;IAAMY,UAAUX;IAAcY,kBAAcC,8BAAiBvB,OAAAA;KAC7E,6BAAAgB,QAAA,cAACQ,kCAAAA,IAAAA,CAAAA,GAEFlB,kBACC,6BAAAU,QAAA,cAACS,8BAAAA;IAAQ1B,MAAM,qBAAqBO,eAAAA;IAAmBoB,MAAM;MAAEC,SAAS3B;IAAQ;OAEhF,6BAAAgB,QAAA,cAACY,qCAAAA;IAAcd;IAAce,KAAK7B,QAAQ8B,MAAMD;IAAK5B;;AAI7D;AAEA,IAAA,2BAAeH;",
6
+ "names": ["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", "space", "getSpace", "React", "StackItem", "Content", "toolbar", "MenuProvider", "onAction", "attendableId", "fullyQualifiedId", "ToolbarMenu", "Surface", "data", "subject", "ChatContainer", "dxn", "queue"]
7
+ }
@@ -16,27 +16,40 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var chunk_CMEMMYDL_exports = {};
20
- __export(chunk_CMEMMYDL_exports, {
19
+ var chunk_AXTPNGRI_exports = {};
20
+ __export(chunk_AXTPNGRI_exports, {
21
21
  ThreadAction: () => ThreadAction,
22
22
  ThreadSettingsSchema: () => ThreadSettingsSchema
23
23
  });
24
- module.exports = __toCommonJS(chunk_CMEMMYDL_exports);
25
- var import_chunk_F735VMTN = require("./chunk-F735VMTN.cjs");
24
+ module.exports = __toCommonJS(chunk_AXTPNGRI_exports);
25
+ var import_chunk_ONLWOUYZ = require("./chunk-ONLWOUYZ.cjs");
26
26
  var import_echo_schema = require("@dxos/echo-schema");
27
27
  var import_types = require("@dxos/plugin-space/types");
28
28
  var import_echo = require("@dxos/react-client/echo");
29
+ var import_schema = require("@dxos/schema");
29
30
  var ThreadAction;
30
31
  (function(ThreadAction2) {
31
- const THREAD_ACTION = `${import_chunk_F735VMTN.THREAD_PLUGIN}/action`;
32
+ const THREAD_ACTION = `${import_chunk_ONLWOUYZ.THREAD_PLUGIN}/action`;
33
+ class CreateChannel extends import_echo_schema.S.TaggedClass()(`${THREAD_ACTION}/create-channel`, {
34
+ input: import_echo_schema.S.Struct({
35
+ // TODO(wittjosiah): Should be SpaceId.
36
+ spaceId: import_echo_schema.S.String,
37
+ name: import_echo_schema.S.optional(import_echo_schema.S.String)
38
+ }),
39
+ output: import_echo_schema.S.Struct({
40
+ object: import_types.ChannelType
41
+ })
42
+ }) {
43
+ }
44
+ ThreadAction2.CreateChannel = CreateChannel;
32
45
  class Create extends import_echo_schema.S.TaggedClass()(`${THREAD_ACTION}/create`, {
33
46
  input: import_echo_schema.S.Struct({
34
47
  name: import_echo_schema.S.optional(import_echo_schema.S.String),
35
- cursor: import_echo_schema.S.optional(import_echo_schema.S.String),
36
- subject: import_echo_schema.S.optional(import_echo.EchoObjectSchema)
48
+ cursor: import_echo_schema.S.String,
49
+ subject: import_echo.EchoObjectSchema
37
50
  }),
38
51
  output: import_echo_schema.S.Struct({
39
- object: import_echo_schema.S.Union(import_types.ChannelType, import_types.ThreadType)
52
+ object: import_types.ThreadType
40
53
  })
41
54
  }) {
42
55
  }
@@ -82,7 +95,7 @@ var ThreadAction;
82
95
  thread: import_types.ThreadType,
83
96
  subject: import_echo.EchoObjectSchema,
84
97
  messageId: import_echo_schema.S.String,
85
- message: import_echo_schema.S.optional(import_types.MessageType),
98
+ message: import_echo_schema.S.optional(import_schema.MessageType),
86
99
  messageIndex: import_echo_schema.S.optional(import_echo_schema.S.Number)
87
100
  }),
88
101
  output: import_echo_schema.S.Void
@@ -96,4 +109,4 @@ var ThreadSettingsSchema = import_echo_schema.S.mutable(import_echo_schema.S.Str
96
109
  ThreadAction,
97
110
  ThreadSettingsSchema
98
111
  });
99
- //# sourceMappingURL=chunk-CMEMMYDL.cjs.map
112
+ //# sourceMappingURL=chunk-AXTPNGRI.cjs.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 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 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,yBAAkB;AAClB,mBAAwC;AACxC,kBAAiC;AACjC,oBAA4B;;UAIXA,eAAAA;AACf,QAAMC,gBAAgB,GAAGC,mCAAAA;EAElB,MAAMC,sBAAsBC,qBAAEC,YAAW,EAAkB,GAAGJ,aAAAA,mBAAgC;IACnGK,OAAOF,qBAAEG,OAAO;;MAEdC,SAASJ,qBAAEK;MACXC,MAAMN,qBAAEO,SAASP,qBAAEK,MAAM;IAC3B,CAAA;IACAG,QAAQR,qBAAEG,OAAO;MACfM,QAAQC;IACV,CAAA;EACF,CAAA,EAAA;EAAI;gBATSX,gBAAAA;EAWN,MAAMY,eAAeX,qBAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,qBAAEG,OAAO;MACdG,MAAMN,qBAAEO,SAASP,qBAAEK,MAAM;MACzBO,QAAQZ,qBAAEK;MACVQ,SAASC;IACX,CAAA;IACAN,QAAQR,qBAAEG,OAAO;MACfM,QAAQM;IACV,CAAA;EACF,CAAA,EAAA;EAAI;gBATSJ,SAAAA;EAWN,MAAMK,eAAehB,qBAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,qBAAEG,OAAO;MACdc,SAASjB,qBAAEK;MACXa,UAAUlB,qBAAEO,SAASP,qBAAEmB,OAAO;IAChC,CAAA;IACAX,QAAQR,qBAAEoB;EACZ,CAAA,EAAA;EAAI;gBANSJ,SAAAA;EAQN,MAAMK,uBAAuBrB,qBAAEC,YAAW,EAAmB,GAAGJ,aAAAA,oBAAiC;IACtGK,OAAOF,qBAAEG,OAAO;MACdmB,QAAQP;IACV,CAAA;IACAP,QAAQR,qBAAEoB;EACZ,CAAA,EAAA;EAAI;gBALSC,iBAAAA;EAON,MAAME,eAAevB,qBAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,qBAAEG,OAAO;MACdmB,QAAQP;MACRF,SAASC;MACTF,QAAQZ,qBAAEO,SAASP,qBAAEK,MAAM;IAC7B,CAAA;IACAG,QAAQR,qBAAEoB;EACZ,CAAA,EAAA;EAAI;gBAPSG,SAAAA;EAUN,MAAMC,qBAAqBxB,qBAAEC,YAAW,EAAiB,GAAGJ,aAAAA,mBAAgC;IACjGK,OAAOF,qBAAEG,OAAO;MACdmB,QAAQP;MACRF,SAASC;IACX,CAAA;IACAN,QAAQR,qBAAEoB;EACZ,CAAA,EAAA;EAAI;gBANSI,eAAAA;EAQN,MAAMC,sBAAsBzB,qBAAEC,YAAW,EAAkB,GAAGJ,aAAAA,mBAAgC;IACnGK,OAAOF,qBAAEG,OAAO;MACdmB,QAAQP;MACRF,SAASC;MACTY,WAAW1B,qBAAEK;MACbsB,SAAS3B,qBAAEO,SAASqB,yBAAAA;MACpBC,cAAc7B,qBAAEO,SAASP,qBAAE8B,MAAM;IACnC,CAAA;IACAtB,QAAQR,qBAAEoB;EACZ,CAAA,EAAA;EAAI;gBATSK,gBAAAA;AAUf,GApEiB7B,iBAAAA,eAAAA,CAAAA,EAAAA;AAsEV,IAAMmC,uBAAuB/B,qBAAEgC,QAAQhC,qBAAEG,OAAO,CAAC,CAAA,CAAA;",
6
+ "names": ["ThreadAction", "THREAD_ACTION", "THREAD_PLUGIN", "CreateChannel", "S", "TaggedClass", "input", "Struct", "spaceId", "String", "name", "optional", "output", "object", "ChannelType", "Create", "cursor", "subject", "EchoObjectSchema", "ThreadType", "Select", "current", "skipOpen", "Boolean", "Void", "ToggleResolved", "thread", "Delete", "OnMessageAdd", "DeleteMessage", "messageId", "message", "MessageType", "messageIndex", "Number", "ThreadSettingsSchema", "mutable"]
7
+ }
@@ -26,20 +26,19 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var chunk_RQR5Z23G_exports = {};
30
- __export(chunk_RQR5Z23G_exports, {
29
+ var chunk_DGV5ABT6_exports = {};
30
+ __export(chunk_DGV5ABT6_exports, {
31
31
  ChatContainer: () => ChatContainer,
32
32
  MessageContainer: () => MessageContainer,
33
33
  command: () => command,
34
34
  getMessageMetadata: () => getMessageMetadata
35
35
  });
36
- module.exports = __toCommonJS(chunk_RQR5Z23G_exports);
37
- var import_chunk_AWSTZ2KN = require("./chunk-AWSTZ2KN.cjs");
38
- var import_chunk_F735VMTN = require("./chunk-F735VMTN.cjs");
36
+ module.exports = __toCommonJS(chunk_DGV5ABT6_exports);
37
+ var import_chunk_JBOC6MIE = require("./chunk-JBOC6MIE.cjs");
38
+ var import_chunk_ONLWOUYZ = require("./chunk-ONLWOUYZ.cjs");
39
39
  var import_react = __toESM(require("react"));
40
40
  var import_echo_schema = require("@dxos/echo-schema");
41
41
  var import_live_object = require("@dxos/live-object");
42
- var import_types = require("@dxos/plugin-space/types");
43
42
  var import_echo = require("@dxos/react-client/echo");
44
43
  var import_halo = require("@dxos/react-client/halo");
45
44
  var import_react_ui = require("@dxos/react-ui");
@@ -47,6 +46,7 @@ var import_react_ui_editor = require("@dxos/react-ui-editor");
47
46
  var import_react_ui_stack = require("@dxos/react-ui-stack");
48
47
  var import_react_ui_theme = require("@dxos/react-ui-theme");
49
48
  var import_react_ui_thread = require("@dxos/react-ui-thread");
49
+ var import_schema = require("@dxos/schema");
50
50
  var import_view = require("@codemirror/view");
51
51
  var import_react2 = require("@phosphor-icons/react");
52
52
  var import_react3 = __toESM(require("react"));
@@ -105,7 +105,7 @@ var messageControlClassNames = [
105
105
  "!p-1 !min-bs-0 transition-opacity",
106
106
  import_react_ui_theme2.hoverableControlItem
107
107
  ];
108
- var MessageContainer = ({ message, members, onDelete }) => {
108
+ var MessageContainer = ({ message, members, editable = false, onDelete }) => {
109
109
  const senderIdentity = members.find((member) => message.sender.identityKey && import_react_client.PublicKey.equals(member.identity.identityKey, message.sender.identityKey))?.identity;
110
110
  const messageMetadata = getMessageMetadata(message.id, senderIdentity);
111
111
  const userIsAuthor = (0, import_halo2.useIdentity)()?.identityKey.toHex() === messageMetadata.authorId;
@@ -114,9 +114,12 @@ var MessageContainer = ({ message, members, onDelete }) => {
114
114
  message,
115
115
  onDelete
116
116
  ]);
117
- const { t } = (0, import_react_ui2.useTranslation)(import_chunk_F735VMTN.THREAD_PLUGIN);
117
+ const { t } = (0, import_react_ui2.useTranslation)(import_chunk_ONLWOUYZ.THREAD_PLUGIN);
118
118
  const editLabel = t(editing ? "save message label" : "edit message label");
119
119
  const deleteLabel = t("delete message label");
120
+ const textBlock = message.blocks.find((block) => block.type === "text");
121
+ const references = message.blocks.filter((block) => block.type === "reference").map((block) => block.reference);
122
+ (0, import_chunk_JBOC6MIE.useOnEditAnalytics)(message, textBlock, !!editing);
120
123
  return /* @__PURE__ */ import_react3.default.createElement(import_react_ui_thread2.MessageRoot, {
121
124
  ...messageMetadata,
122
125
  classNames: [
@@ -128,7 +131,7 @@ var MessageContainer = ({ message, members, onDelete }) => {
128
131
  timestamp: messageMetadata.timestamp
129
132
  }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ButtonGroup, {
130
133
  classNames: "mie-1"
131
- }, userIsAuthor && /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Root, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Trigger, {
134
+ }, userIsAuthor && editable && /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Root, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Trigger, {
132
135
  asChild: true
133
136
  }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Button, {
134
137
  variant: "ghost",
@@ -152,13 +155,13 @@ var MessageContainer = ({ message, members, onDelete }) => {
152
155
  className: "sr-only"
153
156
  }, deleteLabel), /* @__PURE__ */ import_react3.default.createElement(import_react2.X, {
154
157
  className: (0, import_react_ui_theme2.getSize)(4)
155
- }))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Portal, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Content, null, deleteLabel, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Arrow, null)))))), /* @__PURE__ */ import_react3.default.createElement(TextboxBlock, {
156
- message,
158
+ }))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Portal, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Content, null, deleteLabel, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Arrow, null)))))), textBlock && /* @__PURE__ */ import_react3.default.createElement(TextboxBlock, {
159
+ block: textBlock,
157
160
  isAuthor: userIsAuthor,
158
161
  editing
159
- }), import_live_object2.RefArray.allResolvedTargets(message.parts ?? []).map((part, index) => /* @__PURE__ */ import_react3.default.createElement(MessagePart, {
162
+ }), import_live_object2.RefArray.targets(references).map((reference, index) => /* @__PURE__ */ import_react3.default.createElement(MessagePart, {
160
163
  key: index,
161
- part
164
+ part: reference
162
165
  })));
163
166
  };
164
167
  var MessagePart = ({ part }) => {
@@ -166,20 +169,20 @@ var MessagePart = ({ part }) => {
166
169
  subject: part
167
170
  });
168
171
  };
169
- var TextboxBlock = ({ message, isAuthor, editing }) => {
172
+ var TextboxBlock = ({ block, isAuthor, editing }) => {
170
173
  const { themeMode } = (0, import_react_ui2.useThemeContext)();
171
- const inMemoryContentRef = (0, import_react3.useRef)(message.text);
174
+ const inMemoryContentRef = (0, import_react3.useRef)(block.text);
172
175
  const handleDocumentChange = (0, import_react3.useCallback)((newState) => {
173
176
  inMemoryContentRef.current = newState;
174
177
  }, []);
175
178
  const saveDocumentChange = (0, import_react3.useCallback)(() => {
176
- message.text = inMemoryContentRef.current;
179
+ block.text = inMemoryContentRef.current;
177
180
  }, [
178
- message
181
+ block
179
182
  ]);
180
183
  (0, import_react_ui2.useOnTransition)(editing, true, false, saveDocumentChange);
181
184
  const { parentRef, focusAttributes, view } = (0, import_react_ui_editor2.useTextEditor)(() => ({
182
- initialValue: message.text,
185
+ initialValue: block.text,
183
186
  extensions: [
184
187
  (0, import_react_ui_editor2.createBasicExtensions)({
185
188
  readonly: !isAuthor || !editing
@@ -195,7 +198,7 @@ var TextboxBlock = ({ message, isAuthor, editing }) => {
195
198
  })
196
199
  ]
197
200
  }), [
198
- message.text,
201
+ block.text,
199
202
  editing,
200
203
  isAuthor,
201
204
  themeMode,
@@ -207,7 +210,6 @@ var TextboxBlock = ({ message, isAuthor, editing }) => {
207
210
  editing,
208
211
  view
209
212
  ]);
210
- (0, import_chunk_AWSTZ2KN.useOnEditAnalytics)(message, !!editing);
211
213
  return /* @__PURE__ */ import_react3.default.createElement("div", {
212
214
  role: "none",
213
215
  ref: parentRef,
@@ -233,18 +235,21 @@ var MessageBlockObjectTile = /* @__PURE__ */ (0, import_react3.forwardRef)(({ su
233
235
  fallback: title
234
236
  }));
235
237
  });
236
- var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
238
+ var ChatContainer = ({ space, dxn, context, current, autoFocusTextbox }) => {
239
+ const id = dxn.toString();
237
240
  const identity = (0, import_halo.useIdentity)();
238
- const space = (0, import_echo.getSpace)(thread);
239
241
  const members = (0, import_echo.useMembers)(space?.key);
240
- const activity = (0, import_chunk_AWSTZ2KN.useStatus)(space, (0, import_echo.fullyQualifiedId)(thread));
241
- const { t } = (0, import_react_ui.useTranslation)(import_chunk_F735VMTN.THREAD_PLUGIN);
242
+ const queue = (0, import_echo.useQueue)(dxn, {
243
+ pollInterval: 1e3
244
+ });
245
+ const activity = (0, import_chunk_JBOC6MIE.useStatus)(space, id);
246
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_ONLWOUYZ.THREAD_PLUGIN);
242
247
  const [_count, _setCount] = (0, import_react.useState)(0);
243
248
  const rerenderEditor = () => _setCount((count) => count + 1);
244
249
  const [autoFocus, setAutoFocus] = (0, import_react.useState)(autoFocusTextbox);
245
250
  const threadScrollRef = (0, import_react.useRef)(null);
246
251
  const { themeMode } = (0, import_react_ui.useThemeContext)();
247
- const textboxMetadata = getMessageMetadata((0, import_echo.fullyQualifiedId)(thread), identity);
252
+ const textboxMetadata = getMessageMetadata(id, identity);
248
253
  const messageRef = (0, import_react.useRef)("");
249
254
  const extensions = (0, import_react.useMemo)(() => [
250
255
  (0, import_react_ui_editor.createBasicExtensions)({
@@ -269,32 +274,35 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
269
274
  scrollToEnd("instant");
270
275
  }, []);
271
276
  const handleCreate = () => {
272
- if (!messageRef.current?.length) {
277
+ if (!messageRef.current?.length || !queue) {
273
278
  return false;
274
279
  }
275
- thread.messages.push((0, import_live_object.makeRef)((0, import_live_object.create)(import_types.MessageType, {
276
- sender: {
277
- identityKey: identity.identityKey.toHex()
278
- },
279
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
280
- text: messageRef.current,
281
- context: context ? (0, import_live_object.makeRef)(context) : void 0
282
- })));
280
+ queue.append([
281
+ (0, import_echo_schema.createStatic)(import_schema.MessageType, {
282
+ sender: {
283
+ identityKey: identity.identityKey.toHex()
284
+ },
285
+ created: (/* @__PURE__ */ new Date()).toISOString(),
286
+ blocks: [
287
+ {
288
+ type: "text",
289
+ text: messageRef.current
290
+ }
291
+ ],
292
+ properties: context ? {
293
+ context: (0, import_live_object.makeRef)(context)
294
+ } : void 0
295
+ })
296
+ ]);
283
297
  messageRef.current = "";
284
298
  setAutoFocus(true);
285
299
  scrollToEnd("smooth");
286
300
  rerenderEditor();
287
301
  return true;
288
302
  };
289
- const handleDelete = (id) => {
290
- const messageIndex = thread.messages.findIndex(import_echo_schema.Ref.hasObjectId(id));
291
- if (messageIndex !== -1) {
292
- thread.messages.splice(messageIndex, 1);
293
- }
294
- };
295
303
  return /* @__PURE__ */ import_react.default.createElement(import_react_ui_thread.Thread, {
296
304
  current,
297
- id: (0, import_echo.fullyQualifiedId)(thread),
305
+ id,
298
306
  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"
299
307
  }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.ScrollArea.Root, {
300
308
  classNames: "col-span-2"
@@ -303,11 +311,10 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
303
311
  }, /* @__PURE__ */ import_react.default.createElement("div", {
304
312
  role: "none",
305
313
  className: (0, import_react_ui_theme.mx)(import_react_ui_thread.threadLayout, "place-self-end")
306
- }, import_live_object.RefArray.allResolvedTargets(thread.messages ?? []).map((message) => /* @__PURE__ */ import_react.default.createElement(MessageContainer, {
314
+ }, (queue?.items ?? []).map((message) => /* @__PURE__ */ import_react.default.createElement(MessageContainer, {
307
315
  key: message.id,
308
316
  message,
309
- members,
310
- onDelete: handleDelete
317
+ members
311
318
  }))), /* @__PURE__ */ import_react.default.createElement("div", {
312
319
  role: "none",
313
320
  className: "bs-px -mbs-px",
@@ -328,4 +335,4 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
328
335
  command,
329
336
  getMessageMetadata
330
337
  });
331
- //# sourceMappingURL=chunk-RQR5Z23G.cjs.map
338
+ //# sourceMappingURL=chunk-DGV5ABT6.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ChatContainer.tsx", "../../../src/components/MessageContainer.tsx", "../../../src/components/command-extension.ts", "../../../src/util.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useLayoutEffect, useMemo, useRef, useState } from 'react';\n\nimport { createStatic } from '@dxos/echo-schema';\nimport { type DXN } from '@dxos/keys';\nimport { makeRef } from '@dxos/live-object';\nimport { type Space, useMembers, useQueue } 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 type ChatContainerProps = Omit<ThreadContainerProps, 'thread'> & {\n space: Space;\n dxn: DXN;\n};\n\nexport const ChatContainer = ({ space, dxn, context, current, autoFocusTextbox }: ChatContainerProps) => {\n const id = dxn.toString();\n const identity = useIdentity()!;\n const members = useMembers(space?.key);\n const queue = useQueue<MessageType>(dxn, { pollInterval: 1_000 });\n const activity = useStatus(space, id);\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(id, 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 || !queue) {\n return false;\n }\n\n queue.append([\n createStatic(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 messageRef.current = '';\n setAutoFocus(true);\n scrollToEnd('smooth');\n rerenderEditor();\n return true;\n };\n\n return (\n <Thread\n current={current}\n id={id}\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 {(queue?.items ?? []).map((message) => (\n <MessageContainer key={message.id} message={message} members={members} />\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 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) => 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 && 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", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { StreamLanguage, HighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { type Extension } from '@codemirror/state';\n\nimport { tags } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\n/**\n * https://github.com/codemirror/stream-parser/blob/main/test/test-stream-parser.ts\n */\nconst parser = StreamLanguage.define<{ count: number }>({\n startState: () => ({ count: 0 }),\n token: (stream, state) => {\n state.count++;\n if (stream.eatSpace()) {\n return null;\n }\n if (state.count === 1 && stream.match(/^(\\/\\w+)/)) {\n return 'tagName';\n }\n stream.next();\n return null;\n },\n});\n\nconst styles = HighlightStyle.define([\n { tag: tags.tagName, class: mx('dx-tag dx-tag--indigo text-baseText font-medium') },\n]);\n\nexport const command: Extension = [parser, syntaxHighlighting(styles)];\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { generateName } from '@dxos/display-name';\nimport { type PublicKey } from '@dxos/react-client';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { type MessageMetadata } from '@dxos/react-ui-thread';\nimport { hexToFallback } from '@dxos/util';\n\nexport type MessagePropertiesProvider = (identityKey: PublicKey | undefined) => MessageMetadata;\n\nexport const getMessageMetadata = (id: string, identity?: Identity): MessageMetadata => {\n const fallback = hexToFallback(identity?.identityKey.toHex() ?? '0');\n return {\n id,\n authorId: identity?.identityKey.toHex(),\n authorName:\n identity?.profile?.displayName ??\n (identity?.identityKey ? generateName(identity.identityKey.toHex()) : undefined),\n authorAvatarProps: {\n hue: identity?.profile?.data?.hue ?? fallback.hue,\n emoji: identity?.profile?.data?.emoji ?? fallback.emoji,\n },\n };\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["import_react", "import_live_object", "import_halo", "import_react_ui", "import_react_ui_editor", "import_react_ui_theme", "import_react_ui_thread", "parser", "StreamLanguage", "define", "startState", "count", "token", "stream", "state", "eatSpace", "match", "next", "styles", "HighlightStyle", "tag", "tags", "tagName", "class", "mx", "command", "syntaxHighlighting", "getMessageMetadata", "id", "identity", "fallback", "hexToFallback", "identityKey", "toHex", "authorId", "authorName", "profile", "displayName", "generateName", "undefined", "authorAvatarProps", "hue", "data", "emoji", "messageControlClassNames", "hoverableControlItem", "MessageContainer", "message", "members", "editable", "onDelete", "senderIdentity", "find", "member", "sender", "PublicKey", "equals", "messageMetadata", "userIsAuthor", "useIdentity", "editing", "setEditing", "useState", "handleDelete", "useCallback", "t", "useTranslation", "THREAD_PLUGIN", "editLabel", "deleteLabel", "textBlock", "blocks", "block", "type", "references", "filter", "map", "reference", "useOnEditAnalytics", "React", "MessageRoot", "classNames", "hoverableControls", "hoverableFocusedWithinControls", "MessageHeading", "timestamp", "ButtonGroup", "Tooltip", "Root", "Trigger", "asChild", "Button", "variant", "data-testid", "onClick", "span", "className", "Check", "getSize", "PencilSimple", "Portal", "Content", "Arrow", "X", "TextboxBlock", "isAuthor", "RefArray", "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", "EditorView", "updateListener", "of", "update", "docChanged", "doc", "toString", "useEffect", "focus", "div", "role", "ref", "forwardRef", "forwardedRef", "title", "name", "content", "Surface", "limit", "ChatContainer", "space", "dxn", "context", "autoFocusTextbox", "useMembers", "queue", "useQueue", "pollInterval", "activity", "useStatus", "_count", "_setCount", "rerenderEditor", "autoFocus", "setAutoFocus", "threadScrollRef", "textboxMetadata", "messageRef", "useMemo", "placeholder", "listener", "onChange", "scrollToEnd", "behavior", "setTimeout", "scrollIntoView", "useLayoutEffect", "handleCreate", "length", "append", "createStatic", "MessageType", "created", "Date", "toISOString", "properties", "makeRef", "Thread", "ScrollArea", "Viewport", "threadLayout", "items", "Scrollbar", "Thumb", "MessageTextbox", "onSend", "ThreadFooter"]
7
+ }
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,20 +17,33 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
19
  };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var chunk_AWSTZ2KN_exports = {};
20
- __export(chunk_AWSTZ2KN_exports, {
29
+ var chunk_JBOC6MIE_exports = {};
30
+ __export(chunk_JBOC6MIE_exports, {
31
+ IntentResolver: () => IntentResolver,
32
+ Markdown: () => Markdown,
33
+ ReactSurface: () => ReactSurface,
34
+ ThreadState: () => ThreadState,
21
35
  useAnalyticsCallback: () => useAnalyticsCallback,
22
36
  useOnEditAnalytics: () => useOnEditAnalytics,
23
37
  useStatus: () => useStatus
24
38
  });
25
- module.exports = __toCommonJS(chunk_AWSTZ2KN_exports);
39
+ module.exports = __toCommonJS(chunk_JBOC6MIE_exports);
26
40
  var import_react = require("react");
27
41
  var import_react2 = require("react");
28
42
  var import_app_framework = require("@dxos/app-framework");
29
43
  var import_types = require("@dxos/plugin-observability/types");
30
44
  var import_echo = require("@dxos/react-client/echo");
31
45
  var import_react_ui = require("@dxos/react-ui");
46
+ var import_app_framework2 = require("@dxos/app-framework");
32
47
  var useStatus = (space, channel) => {
33
48
  const [processing, setProcessing] = (0, import_react.useState)(false);
34
49
  (0, import_react.useEffect)(() => {
@@ -76,18 +91,27 @@ var useAnalyticsCallback = (spaceId, name, meta) => {
76
91
  spaceId
77
92
  ]);
78
93
  };
79
- var useOnEditAnalytics = (message, editing) => {
94
+ var useOnEditAnalytics = (message, textBlock, editing) => {
80
95
  const space = (0, import_echo.getSpace)(message);
81
96
  const onEditAnalytics = useAnalyticsCallback(space?.id, "threads.comment-edited", {
82
97
  messageId: message.id,
83
- messageLength: message.text.length
98
+ messageLength: textBlock?.text.length
84
99
  });
85
100
  (0, import_react_ui.useOnTransition)(editing, true, false, onEditAnalytics);
86
101
  };
102
+ var IntentResolver = (0, import_app_framework2.lazy)(() => import("./intent-resolver-NBME5QSW.cjs"));
103
+ var Markdown = (0, import_app_framework2.lazy)(() => import("./markdown-QBQTARMD.cjs"));
104
+ var ReactSurface = (0, import_app_framework2.lazy)(() => import("./react-surface-ICWYXRJU.cjs"));
105
+ var ThreadSettings = (0, import_app_framework2.lazy)(() => import("./settings-XOLYNUHH.cjs"));
106
+ var ThreadState = (0, import_app_framework2.lazy)(() => import("./state-JMI5ZXZI.cjs"));
87
107
  // Annotate the CommonJS export names for ESM import in node:
88
108
  0 && (module.exports = {
109
+ IntentResolver,
110
+ Markdown,
111
+ ReactSurface,
112
+ ThreadState,
89
113
  useAnalyticsCallback,
90
114
  useOnEditAnalytics,
91
115
  useStatus
92
116
  });
93
- //# sourceMappingURL=chunk-AWSTZ2KN.cjs.map
117
+ //# sourceMappingURL=chunk-JBOC6MIE.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
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,mBAAoC;ACApC,IAAAA,gBAA4B;AAE5B,2BAAkD;AAElD,mBAAoC;AACpC,kBAAyB;AACzB,sBAAgC;ACNhC,IAAAC,wBAAqB;AFKd,IAAMC,YAAY,CAACC,OAAeC,YAAAA;AACvC,QAAM,CAACC,YAAYC,aAAAA,QAAiBC,uBAAS,KAAA;AAC7CC,8BAAU,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;ACzBO,IAAMiB,uBAAuB,CAACC,SAA6BC,MAAcC,SAAAA;AAC9E,QAAM,EAAEC,iBAAiBC,SAAQ,QAAKC,0CAAAA;AAEtC,aAAOC,2BACL,CAACC,gBAAAA;AACC,SAAKH,aACHI,mCAAaC,iCAAoBC,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,QAAMnC,YAAQoC,sBAASH,OAAAA;AAEvB,QAAMI,kBAAkBlB,qBAAqBnB,OAAOsC,IAAI,0BAA0B;IAChFC,WAAWN,QAAQK;IACnBE,eAAeN,WAAWO,KAAKC;EACjC,CAAA;AAEAC,uCAAgBR,SAAS,MAAM,OAAOE,eAAAA;AACxC;ACjCO,IAAMO,qBAAiBC,4BAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAMC,eAAWD,4BAAK,MAAM,OAAO,yBAAA,CAAA;AACnC,IAAME,mBAAeF,4BAAK,MAAM,OAAO,8BAAA,CAAA;AACvC,IAAMG,qBAAiBH,4BAAK,MAAM,OAAO,yBAAA,CAAA;AACzC,IAAMI,kBAAcJ,4BAAK,MAAM,OAAO,sBAAA,CAAA;",
6
+ "names": ["import_react", "import_app_framework", "useStatus", "space", "channel", "processing", "setProcessing", "useState", "useEffect", "unsubscribe", "listen", "status", "event", "payload", "t", "setInterval", "prev", "ts", "Date", "now", "undefined", "clearInterval", "useAnalyticsCallback", "spaceId", "name", "meta", "dispatchPromise", "dispatch", "useIntentDispatcher", "useCallback", "dynamicMeta", "createIntent", "ObservabilityAction", "SendEvent", "properties", "useOnEditAnalytics", "message", "textBlock", "editing", "getSpace", "onEditAnalytics", "id", "messageId", "messageLength", "text", "length", "useOnTransition", "IntentResolver", "lazy", "Markdown", "ReactSurface", "ThreadSettings", "ThreadState"]
7
+ }
@@ -16,13 +16,13 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var chunk_F735VMTN_exports = {};
20
- __export(chunk_F735VMTN_exports, {
19
+ var chunk_ONLWOUYZ_exports = {};
20
+ __export(chunk_ONLWOUYZ_exports, {
21
21
  THREAD_ITEM: () => THREAD_ITEM,
22
22
  THREAD_PLUGIN: () => THREAD_PLUGIN,
23
23
  meta: () => meta
24
24
  });
25
- module.exports = __toCommonJS(chunk_F735VMTN_exports);
25
+ module.exports = __toCommonJS(chunk_ONLWOUYZ_exports);
26
26
  var THREAD_PLUGIN = "dxos.org/plugin/thread";
27
27
  var THREAD_ITEM = `${THREAD_PLUGIN}/item`;
28
28
  var meta = {
@@ -38,4 +38,4 @@ var meta = {
38
38
  THREAD_PLUGIN,
39
39
  meta
40
40
  });
41
- //# sourceMappingURL=chunk-F735VMTN.cjs.map
41
+ //# sourceMappingURL=chunk-ONLWOUYZ.cjs.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
  }