@dxos/plugin-thread 0.8.1-staging.5be625a → 0.8.1-staging.97aedb1

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 (152) hide show
  1. package/dist/lib/browser/ChatContainer-IOOAQW6S.mjs +138 -0
  2. package/dist/lib/browser/ChatContainer-IOOAQW6S.mjs.map +7 -0
  3. package/dist/lib/browser/app-graph-builder-6W4UKJDI.mjs +41 -0
  4. package/dist/lib/browser/app-graph-builder-6W4UKJDI.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-NOOMCX5E.mjs → chunk-EP6MRLY7.mjs} +1 -2
  6. package/dist/lib/browser/chunk-EP6MRLY7.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-SMQYULO6.mjs → chunk-QDJ3Y6WF.mjs} +15 -32
  8. package/dist/lib/browser/chunk-QDJ3Y6WF.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-S5ZR4FYW.mjs +17 -0
  10. package/dist/lib/browser/chunk-S5ZR4FYW.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-NRMJGYMA.mjs → chunk-TFVPUPOO.mjs} +19 -131
  12. package/dist/lib/browser/chunk-TFVPUPOO.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-SJPT347G.mjs → chunk-WOG72DWE.mjs} +8 -7
  14. package/dist/lib/browser/chunk-WOG72DWE.mjs.map +7 -0
  15. package/dist/lib/browser/index.mjs +16 -29
  16. package/dist/lib/browser/index.mjs.map +3 -3
  17. package/dist/lib/browser/{intent-resolver-FSG3ZOIM.mjs → intent-resolver-QAY4FLLM.mjs} +76 -39
  18. package/dist/lib/browser/intent-resolver-QAY4FLLM.mjs.map +7 -0
  19. package/dist/lib/browser/{markdown-MYZQDQFY.mjs → markdown-7KXBXCUS.mjs} +6 -7
  20. package/dist/lib/browser/{markdown-MYZQDQFY.mjs.map → markdown-7KXBXCUS.mjs.map} +3 -3
  21. package/dist/lib/browser/meta.json +1 -1
  22. package/dist/lib/browser/{react-surface-KOYRIK3E.mjs → react-surface-MT3OWULR.mjs} +47 -36
  23. package/dist/lib/browser/react-surface-MT3OWULR.mjs.map +7 -0
  24. package/dist/lib/browser/{settings-5CREE7BH.mjs → settings-4FEC7EAX.mjs} +2 -2
  25. package/dist/lib/browser/{state-HPUFZBB7.mjs → state-PNMSLKAH.mjs} +2 -2
  26. package/dist/lib/browser/types.mjs +1 -1
  27. package/dist/lib/node/ChatContainer-4FNDRF3G.cjs +163 -0
  28. package/dist/lib/node/ChatContainer-4FNDRF3G.cjs.map +7 -0
  29. package/dist/lib/node/app-graph-builder-HZNWT4QU.cjs +57 -0
  30. package/dist/lib/node/app-graph-builder-HZNWT4QU.cjs.map +7 -0
  31. package/dist/lib/node/{chunk-AXTPNGRI.cjs → chunk-46BSFPBV.cjs} +10 -9
  32. package/dist/lib/node/chunk-46BSFPBV.cjs.map +7 -0
  33. package/dist/lib/node/{chunk-JBOC6MIE.cjs → chunk-AKINTFBH.cjs} +17 -47
  34. package/dist/lib/node/chunk-AKINTFBH.cjs.map +7 -0
  35. package/dist/lib/node/chunk-E7Z3BKRQ.cjs +232 -0
  36. package/dist/lib/node/chunk-E7Z3BKRQ.cjs.map +7 -0
  37. package/dist/lib/node/{chunk-VEVJBOWK.cjs → chunk-NQ5DTPOY.cjs} +4 -5
  38. package/dist/lib/node/chunk-NQ5DTPOY.cjs.map +7 -0
  39. package/dist/lib/node/chunk-S2A6BXEA.cjs +53 -0
  40. package/dist/lib/node/chunk-S2A6BXEA.cjs.map +7 -0
  41. package/dist/lib/node/index.cjs +19 -34
  42. package/dist/lib/node/index.cjs.map +3 -3
  43. package/dist/lib/node/{intent-resolver-NBME5QSW.cjs → intent-resolver-S6FE5OR7.cjs} +99 -62
  44. package/dist/lib/node/intent-resolver-S6FE5OR7.cjs.map +7 -0
  45. package/dist/lib/node/{markdown-QBQTARMD.cjs → markdown-L2WMCQKM.cjs} +10 -11
  46. package/dist/lib/node/{markdown-QBQTARMD.cjs.map → markdown-L2WMCQKM.cjs.map} +3 -3
  47. package/dist/lib/node/meta.json +1 -1
  48. package/dist/lib/node/{react-surface-ICWYXRJU.cjs → react-surface-Z45BYECE.cjs} +54 -43
  49. package/dist/lib/node/react-surface-Z45BYECE.cjs.map +7 -0
  50. package/dist/lib/node/{settings-XOLYNUHH.cjs → settings-IXCPE55J.cjs} +6 -6
  51. package/dist/lib/node/{state-JMI5ZXZI.cjs → state-AT73KPGZ.cjs} +6 -6
  52. package/dist/lib/node/types.cjs +3 -3
  53. package/dist/lib/node/types.cjs.map +1 -1
  54. package/dist/lib/node-esm/ChatContainer-NYLCL6QA.mjs +139 -0
  55. package/dist/lib/node-esm/ChatContainer-NYLCL6QA.mjs.map +7 -0
  56. package/dist/lib/node-esm/app-graph-builder-M3KK5QJH.mjs +42 -0
  57. package/dist/lib/node-esm/app-graph-builder-M3KK5QJH.mjs.map +7 -0
  58. package/dist/lib/node-esm/{chunk-TW2NME6Z.mjs → chunk-ADTVMESP.mjs} +19 -131
  59. package/dist/lib/node-esm/chunk-ADTVMESP.mjs.map +7 -0
  60. package/dist/lib/node-esm/{chunk-FZXTP57V.mjs → chunk-E446MGLP.mjs} +8 -7
  61. package/dist/lib/node-esm/chunk-E446MGLP.mjs.map +7 -0
  62. package/dist/lib/node-esm/{chunk-XQO5DGHF.mjs → chunk-J56FORYF.mjs} +15 -32
  63. package/dist/lib/node-esm/chunk-J56FORYF.mjs.map +7 -0
  64. package/dist/lib/node-esm/{chunk-TXW5SIBN.mjs → chunk-WLY2HMDB.mjs} +1 -2
  65. package/dist/lib/node-esm/chunk-WLY2HMDB.mjs.map +7 -0
  66. package/dist/lib/node-esm/chunk-WSE23GSG.mjs +19 -0
  67. package/dist/lib/node-esm/chunk-WSE23GSG.mjs.map +7 -0
  68. package/dist/lib/node-esm/index.mjs +16 -29
  69. package/dist/lib/node-esm/index.mjs.map +3 -3
  70. package/dist/lib/node-esm/{intent-resolver-QQCCKVEW.mjs → intent-resolver-OURFRSSF.mjs} +76 -39
  71. package/dist/lib/node-esm/intent-resolver-OURFRSSF.mjs.map +7 -0
  72. package/dist/lib/node-esm/{markdown-QO5HK24O.mjs → markdown-ZKU23UVD.mjs} +6 -7
  73. package/dist/lib/node-esm/{markdown-QO5HK24O.mjs.map → markdown-ZKU23UVD.mjs.map} +3 -3
  74. package/dist/lib/node-esm/meta.json +1 -1
  75. package/dist/lib/node-esm/{react-surface-Z4CLCKTN.mjs → react-surface-KIJ767JK.mjs} +47 -36
  76. package/dist/lib/node-esm/react-surface-KIJ767JK.mjs.map +7 -0
  77. package/dist/lib/node-esm/{settings-32PBKVBB.mjs → settings-ZUJQ4LWI.mjs} +2 -2
  78. package/dist/lib/node-esm/{state-PSZO57LP.mjs → state-SSDX5O67.mjs} +2 -2
  79. package/dist/lib/node-esm/types.mjs +1 -1
  80. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  81. package/dist/types/src/capabilities/app-graph-builder.d.ts +181 -0
  82. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  83. package/dist/types/src/capabilities/capabilities.d.ts +0 -5
  84. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  85. package/dist/types/src/capabilities/index.d.ts +177 -0
  86. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  87. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  88. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  89. package/dist/types/src/components/ChatContainer.d.ts +1 -0
  90. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  91. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  92. package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
  93. package/dist/types/src/components/index.d.ts +1 -5
  94. package/dist/types/src/components/index.d.ts.map +1 -1
  95. package/dist/types/src/components/testing.d.ts +1 -0
  96. package/dist/types/src/components/testing.d.ts.map +1 -1
  97. package/dist/types/src/hooks/analytics.d.ts +0 -1
  98. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  99. package/dist/types/src/translations.d.ts +3 -3
  100. package/dist/types/src/types.d.ts +20 -5
  101. package/dist/types/src/types.d.ts.map +1 -1
  102. package/package.json +33 -33
  103. package/src/ThreadPlugin.tsx +8 -23
  104. package/src/capabilities/app-graph-builder.ts +34 -0
  105. package/src/capabilities/capabilities.ts +0 -6
  106. package/src/capabilities/index.ts +1 -0
  107. package/src/capabilities/intent-resolver.ts +59 -29
  108. package/src/capabilities/react-surface.tsx +27 -13
  109. package/src/components/ChatContainer.tsx +3 -1
  110. package/src/components/MessageContainer.tsx +5 -3
  111. package/src/components/ThreadComplementary.tsx +24 -31
  112. package/src/components/index.ts +1 -2
  113. package/src/components/testing.ts +2 -2
  114. package/src/extensions/threads.ts +1 -1
  115. package/src/hooks/analytics.ts +19 -19
  116. package/src/translations.ts +1 -1
  117. package/src/types.ts +5 -5
  118. package/src/util.ts +1 -1
  119. package/dist/lib/browser/ChannelContainer-ITIG7L7P.mjs +0 -75
  120. package/dist/lib/browser/ChannelContainer-ITIG7L7P.mjs.map +0 -7
  121. package/dist/lib/browser/chunk-NOOMCX5E.mjs.map +0 -7
  122. package/dist/lib/browser/chunk-NRMJGYMA.mjs.map +0 -7
  123. package/dist/lib/browser/chunk-SJPT347G.mjs.map +0 -7
  124. package/dist/lib/browser/chunk-SMQYULO6.mjs.map +0 -7
  125. package/dist/lib/browser/intent-resolver-FSG3ZOIM.mjs.map +0 -7
  126. package/dist/lib/browser/react-surface-KOYRIK3E.mjs.map +0 -7
  127. package/dist/lib/node/ChannelContainer-F7345XW2.cjs +0 -99
  128. package/dist/lib/node/ChannelContainer-F7345XW2.cjs.map +0 -7
  129. package/dist/lib/node/chunk-AXTPNGRI.cjs.map +0 -7
  130. package/dist/lib/node/chunk-DGV5ABT6.cjs +0 -338
  131. package/dist/lib/node/chunk-DGV5ABT6.cjs.map +0 -7
  132. package/dist/lib/node/chunk-JBOC6MIE.cjs.map +0 -7
  133. package/dist/lib/node/chunk-VEVJBOWK.cjs.map +0 -7
  134. package/dist/lib/node/intent-resolver-NBME5QSW.cjs.map +0 -7
  135. package/dist/lib/node/react-surface-ICWYXRJU.cjs.map +0 -7
  136. package/dist/lib/node-esm/ChannelContainer-GP6Y6JSN.mjs +0 -76
  137. package/dist/lib/node-esm/ChannelContainer-GP6Y6JSN.mjs.map +0 -7
  138. package/dist/lib/node-esm/chunk-FZXTP57V.mjs.map +0 -7
  139. package/dist/lib/node-esm/chunk-TW2NME6Z.mjs.map +0 -7
  140. package/dist/lib/node-esm/chunk-TXW5SIBN.mjs.map +0 -7
  141. package/dist/lib/node-esm/chunk-XQO5DGHF.mjs.map +0 -7
  142. package/dist/lib/node-esm/intent-resolver-QQCCKVEW.mjs.map +0 -7
  143. package/dist/lib/node-esm/react-surface-Z4CLCKTN.mjs.map +0 -7
  144. package/dist/types/src/components/ChannelContainer.d.ts +0 -9
  145. package/dist/types/src/components/ChannelContainer.d.ts.map +0 -1
  146. package/src/components/ChannelContainer.tsx +0 -80
  147. /package/dist/lib/browser/{settings-5CREE7BH.mjs.map → settings-4FEC7EAX.mjs.map} +0 -0
  148. /package/dist/lib/browser/{state-HPUFZBB7.mjs.map → state-PNMSLKAH.mjs.map} +0 -0
  149. /package/dist/lib/node/{settings-XOLYNUHH.cjs.map → settings-IXCPE55J.cjs.map} +0 -0
  150. /package/dist/lib/node/{state-JMI5ZXZI.cjs.map → state-AT73KPGZ.cjs.map} +0 -0
  151. /package/dist/lib/node-esm/{settings-32PBKVBB.mjs.map → settings-ZUJQ4LWI.mjs.map} +0 -0
  152. /package/dist/lib/node-esm/{state-PSZO57LP.mjs.map → state-SSDX5O67.mjs.map} +0 -0
@@ -16,21 +16,21 @@ 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 settings_XOLYNUHH_exports = {};
20
- __export(settings_XOLYNUHH_exports, {
19
+ var settings_IXCPE55J_exports = {};
20
+ __export(settings_IXCPE55J_exports, {
21
21
  default: () => settings_default
22
22
  });
23
- module.exports = __toCommonJS(settings_XOLYNUHH_exports);
24
- var import_chunk_AXTPNGRI = require("./chunk-AXTPNGRI.cjs");
23
+ module.exports = __toCommonJS(settings_IXCPE55J_exports);
24
+ var import_chunk_46BSFPBV = require("./chunk-46BSFPBV.cjs");
25
25
  var import_chunk_ONLWOUYZ = require("./chunk-ONLWOUYZ.cjs");
26
26
  var import_app_framework = require("@dxos/app-framework");
27
27
  var import_live_object = require("@dxos/live-object");
28
28
  var settings_default = () => {
29
29
  const settings = (0, import_live_object.create)({});
30
30
  return (0, import_app_framework.contributes)(import_app_framework.Capabilities.Settings, {
31
- schema: import_chunk_AXTPNGRI.ThreadSettingsSchema,
31
+ schema: import_chunk_46BSFPBV.ThreadSettingsSchema,
32
32
  prefix: import_chunk_ONLWOUYZ.THREAD_PLUGIN,
33
33
  value: settings
34
34
  });
35
35
  };
36
- //# sourceMappingURL=settings-XOLYNUHH.cjs.map
36
+ //# sourceMappingURL=settings-IXCPE55J.cjs.map
@@ -16,12 +16,12 @@ 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 state_JMI5ZXZI_exports = {};
20
- __export(state_JMI5ZXZI_exports, {
19
+ var state_AT73KPGZ_exports = {};
20
+ __export(state_AT73KPGZ_exports, {
21
21
  default: () => state_default
22
22
  });
23
- module.exports = __toCommonJS(state_JMI5ZXZI_exports);
24
- var import_chunk_VEVJBOWK = require("./chunk-VEVJBOWK.cjs");
23
+ module.exports = __toCommonJS(state_AT73KPGZ_exports);
24
+ var import_chunk_NQ5DTPOY = require("./chunk-NQ5DTPOY.cjs");
25
25
  var import_chunk_ONLWOUYZ = require("./chunk-ONLWOUYZ.cjs");
26
26
  var import_app_framework = require("@dxos/app-framework");
27
27
  var import_live_object = require("@dxos/live-object");
@@ -42,9 +42,9 @@ var state_default = () => {
42
42
  }
43
43
  return viewStore[subjectId];
44
44
  };
45
- return (0, import_app_framework.contributes)(import_chunk_VEVJBOWK.ThreadCapabilities.State, {
45
+ return (0, import_app_framework.contributes)(import_chunk_NQ5DTPOY.ThreadCapabilities.State, {
46
46
  state,
47
47
  getViewState
48
48
  });
49
49
  };
50
- //# sourceMappingURL=state-JMI5ZXZI.cjs.map
50
+ //# sourceMappingURL=state-AT73KPGZ.cjs.map
@@ -18,11 +18,11 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var types_exports = {};
20
20
  __export(types_exports, {
21
- ThreadAction: () => import_chunk_AXTPNGRI.ThreadAction,
22
- ThreadSettingsSchema: () => import_chunk_AXTPNGRI.ThreadSettingsSchema
21
+ ThreadAction: () => import_chunk_46BSFPBV.ThreadAction,
22
+ ThreadSettingsSchema: () => import_chunk_46BSFPBV.ThreadSettingsSchema
23
23
  });
24
24
  module.exports = __toCommonJS(types_exports);
25
- var import_chunk_AXTPNGRI = require("./chunk-AXTPNGRI.cjs");
25
+ var import_chunk_46BSFPBV = require("./chunk-46BSFPBV.cjs");
26
26
  var import_chunk_ONLWOUYZ = require("./chunk-ONLWOUYZ.cjs");
27
27
  // Annotate the CommonJS export names for ESM import in node:
28
28
  0 && (module.exports = {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["types.cjs"],
4
- "sourcesContent": ["import {\n ThreadAction,\n ThreadSettingsSchema\n} from \"./chunk-AXTPNGRI.cjs\";\nimport \"./chunk-ONLWOUYZ.cjs\";\nexport {\n ThreadAction,\n ThreadSettingsSchema\n};\n//# sourceMappingURL=types.cjs.map\n"],
4
+ "sourcesContent": ["import {\n ThreadAction,\n ThreadSettingsSchema\n} from \"./chunk-46BSFPBV.cjs\";\nimport \"./chunk-ONLWOUYZ.cjs\";\nexport {\n ThreadAction,\n ThreadSettingsSchema\n};\n//# sourceMappingURL=types.cjs.map\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAGO;AACP,4BAAO;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,139 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ MessageContainer,
4
+ command,
5
+ getMessageMetadata
6
+ } from "./chunk-ADTVMESP.mjs";
7
+ import {
8
+ useStatus
9
+ } from "./chunk-J56FORYF.mjs";
10
+ import {
11
+ THREAD_PLUGIN
12
+ } from "./chunk-42F2DTMM.mjs";
13
+
14
+ // packages/plugins/plugin-thread/src/components/ChatContainer.tsx
15
+ import React, { useLayoutEffect, useMemo, useRef, useState } from "react";
16
+ import { createStatic } from "@dxos/echo-schema";
17
+ import { makeRef } from "@dxos/live-object";
18
+ import { useMembers, useQueue } from "@dxos/react-client/echo";
19
+ import { useIdentity } from "@dxos/react-client/halo";
20
+ import { Icon, ScrollArea, useThemeContext, useTranslation } from "@dxos/react-ui";
21
+ import { createBasicExtensions, createThemeExtensions, listener } from "@dxos/react-ui-editor";
22
+ import { StackItem } from "@dxos/react-ui-stack";
23
+ import { mx } from "@dxos/react-ui-theme";
24
+ import { MessageTextbox, Thread, ThreadFooter, threadLayout } from "@dxos/react-ui-thread";
25
+ import { MessageType } from "@dxos/schema";
26
+ var ChatHeading = ({ attendableId }) => {
27
+ const { t } = useTranslation(THREAD_PLUGIN);
28
+ return /* @__PURE__ */ React.createElement("div", {
29
+ role: "none",
30
+ className: "flex items-center"
31
+ }, /* @__PURE__ */ React.createElement(StackItem.SigilButton, {
32
+ attendableId
33
+ }, /* @__PURE__ */ React.createElement(Icon, {
34
+ icon: "ph--chat--regular",
35
+ size: 5
36
+ })), /* @__PURE__ */ React.createElement(StackItem.HeadingLabel, {
37
+ attendableId
38
+ }, t("chat heading")));
39
+ };
40
+ var ChatContainer = ({ space, dxn, context, current, autoFocusTextbox }) => {
41
+ const id = dxn.toString();
42
+ const identity = useIdentity();
43
+ const members = useMembers(space?.key);
44
+ const queue = useQueue(dxn, {
45
+ pollInterval: 1e3
46
+ });
47
+ const activity = useStatus(space, id);
48
+ const { t } = useTranslation(THREAD_PLUGIN);
49
+ const [_count, _setCount] = useState(0);
50
+ const rerenderEditor = () => _setCount((count) => count + 1);
51
+ const [autoFocus, setAutoFocus] = useState(autoFocusTextbox);
52
+ const threadScrollRef = useRef(null);
53
+ const { themeMode } = useThemeContext();
54
+ const textboxMetadata = getMessageMetadata(id, identity);
55
+ const messageRef = useRef("");
56
+ const extensions = useMemo(() => [
57
+ createBasicExtensions({
58
+ placeholder: t("message placeholder")
59
+ }),
60
+ createThemeExtensions({
61
+ themeMode
62
+ }),
63
+ listener({
64
+ onChange: (text) => messageRef.current = text
65
+ }),
66
+ command
67
+ ], [
68
+ themeMode,
69
+ _count
70
+ ]);
71
+ const scrollToEnd = (behavior) => setTimeout(() => threadScrollRef.current?.scrollIntoView({
72
+ behavior,
73
+ block: "end"
74
+ }), 10);
75
+ useLayoutEffect(() => {
76
+ scrollToEnd("instant");
77
+ }, []);
78
+ const handleCreate = () => {
79
+ if (!messageRef.current?.length || !queue) {
80
+ return false;
81
+ }
82
+ queue.append([
83
+ createStatic(MessageType, {
84
+ sender: {
85
+ identityDid: identity.did
86
+ },
87
+ created: (/* @__PURE__ */ new Date()).toISOString(),
88
+ blocks: [
89
+ {
90
+ type: "text",
91
+ text: messageRef.current
92
+ }
93
+ ],
94
+ properties: context ? {
95
+ context: makeRef(context)
96
+ } : void 0
97
+ })
98
+ ]);
99
+ messageRef.current = "";
100
+ setAutoFocus(true);
101
+ scrollToEnd("smooth");
102
+ rerenderEditor();
103
+ return true;
104
+ };
105
+ return /* @__PURE__ */ React.createElement(Thread, {
106
+ current,
107
+ id,
108
+ 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"
109
+ }, /* @__PURE__ */ React.createElement(ScrollArea.Root, {
110
+ classNames: "col-span-2"
111
+ }, /* @__PURE__ */ React.createElement(ScrollArea.Viewport, {
112
+ 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]"
113
+ }, /* @__PURE__ */ React.createElement("div", {
114
+ role: "none",
115
+ className: mx(threadLayout, "place-self-end")
116
+ }, (queue?.items ?? []).map((message) => /* @__PURE__ */ React.createElement(MessageContainer, {
117
+ key: message.id,
118
+ message,
119
+ members
120
+ }))), /* @__PURE__ */ React.createElement("div", {
121
+ role: "none",
122
+ className: "bs-px -mbs-px",
123
+ ref: threadScrollRef
124
+ }), /* @__PURE__ */ React.createElement(ScrollArea.Scrollbar, null, /* @__PURE__ */ React.createElement(ScrollArea.Thumb, null)))), /* @__PURE__ */ React.createElement(MessageTextbox, {
125
+ extensions,
126
+ autoFocus,
127
+ onSend: handleCreate,
128
+ ...textboxMetadata
129
+ }), /* @__PURE__ */ React.createElement(ThreadFooter, {
130
+ activity
131
+ }, t("activity message")));
132
+ };
133
+ var ChatContainer_default = ChatContainer;
134
+ export {
135
+ ChatContainer,
136
+ ChatHeading,
137
+ ChatContainer_default as default
138
+ };
139
+ //# sourceMappingURL=ChatContainer-NYLCL6QA.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ChatContainer.tsx"],
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: { identityDid: identity.did },\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\nexport default ChatContainer;\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "useLayoutEffect", "useMemo", "useRef", "useState", "createStatic", "makeRef", "useMembers", "useQueue", "useIdentity", "Icon", "ScrollArea", "useThemeContext", "useTranslation", "createBasicExtensions", "createThemeExtensions", "listener", "StackItem", "mx", "MessageTextbox", "Thread", "ThreadFooter", "threadLayout", "MessageType", "ChatHeading", "attendableId", "t", "useTranslation", "THREAD_PLUGIN", "div", "role", "className", "StackItem", "SigilButton", "Icon", "icon", "size", "HeadingLabel", "ChatContainer", "space", "dxn", "context", "current", "autoFocusTextbox", "id", "toString", "identity", "useIdentity", "members", "useMembers", "key", "queue", "useQueue", "pollInterval", "activity", "useStatus", "_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", "append", "createStatic", "MessageType", "sender", "identityDid", "did", "created", "Date", "toISOString", "blocks", "type", "properties", "makeRef", "undefined", "Thread", "classNames", "ScrollArea", "Root", "Viewport", "mx", "threadLayout", "items", "map", "message", "MessageContainer", "ref", "Scrollbar", "Thumb", "MessageTextbox", "onSend", "ThreadFooter"]
7
+ }
@@ -0,0 +1,42 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ meta
4
+ } from "./chunk-42F2DTMM.mjs";
5
+
6
+ // packages/plugins/plugin-thread/src/capabilities/app-graph-builder.ts
7
+ import { Capabilities, contributes } from "@dxos/app-framework";
8
+ import { PLANK_COMPANION_TYPE, ATTENDABLE_PATH_SEPARATOR } from "@dxos/plugin-deck/types";
9
+ import { createExtension } from "@dxos/plugin-graph";
10
+ var app_graph_builder_default = (context) => contributes(Capabilities.AppGraphBuilder, [
11
+ createExtension({
12
+ id: `${meta.id}/comments`,
13
+ // TODO(wittjosiah): Support comments on any object.
14
+ // filter: (node): node is Node<ReactiveEchoObject<any>> => isEchoObject(node.data),
15
+ filter: (node) => !!node.data && typeof node.data === "object" && "threads" in node.data && Array.isArray(node.data.threads),
16
+ connector: ({ node }) => [
17
+ {
18
+ id: [
19
+ node.id,
20
+ "comments"
21
+ ].join(ATTENDABLE_PATH_SEPARATOR),
22
+ type: PLANK_COMPANION_TYPE,
23
+ data: "comments",
24
+ properties: {
25
+ label: [
26
+ "comments label",
27
+ {
28
+ ns: meta.id
29
+ }
30
+ ],
31
+ icon: "ph--chat-text--regular",
32
+ disposition: "hidden",
33
+ position: "hoist"
34
+ }
35
+ }
36
+ ]
37
+ })
38
+ ]);
39
+ export {
40
+ app_graph_builder_default as default
41
+ };
42
+ //# sourceMappingURL=app-graph-builder-M3KK5QJH.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/app-graph-builder.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes, type PluginsContext } from '@dxos/app-framework';\nimport { type ReactiveEchoObject } from '@dxos/client/echo';\nimport { PLANK_COMPANION_TYPE, ATTENDABLE_PATH_SEPARATOR } from '@dxos/plugin-deck/types';\nimport { createExtension, type Node } from '@dxos/plugin-graph';\n\nimport { meta } from '../meta';\n\nexport default (context: PluginsContext) =>\n contributes(Capabilities.AppGraphBuilder, [\n createExtension({\n id: `${meta.id}/comments`,\n // TODO(wittjosiah): Support comments on any object.\n // filter: (node): node is Node<ReactiveEchoObject<any>> => isEchoObject(node.data),\n filter: (node): node is Node<ReactiveEchoObject<any>> =>\n !!node.data && typeof node.data === 'object' && 'threads' in node.data && Array.isArray(node.data.threads),\n connector: ({ node }) => [\n {\n id: [node.id, 'comments'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: 'comments',\n properties: {\n label: ['comments label', { ns: meta.id }],\n icon: 'ph--chat-text--regular',\n disposition: 'hidden',\n position: 'hoist',\n },\n },\n ],\n }),\n ]);\n"],
5
+ "mappings": ";;;;;;AAIA,SAASA,cAAcC,mBAAwC;AAE/D,SAASC,sBAAsBC,iCAAiC;AAChE,SAASC,uBAAkC;AAI3C,IAAA,4BAAe,CAACC,YACdC,YAAYC,aAAaC,iBAAiB;EACxCC,gBAAgB;IACdC,IAAI,GAAGC,KAAKD,EAAE;;;IAGdE,QAAQ,CAACC,SACP,CAAC,CAACA,KAAKC,QAAQ,OAAOD,KAAKC,SAAS,YAAY,aAAaD,KAAKC,QAAQC,MAAMC,QAAQH,KAAKC,KAAKG,OAAO;IAC3GC,WAAW,CAAC,EAAEL,KAAI,MAAO;MACvB;QACEH,IAAI;UAACG,KAAKH;UAAI;UAAYS,KAAKC,yBAAAA;QAC/BC,MAAMC;QACNR,MAAM;QACNS,YAAY;UACVC,OAAO;YAAC;YAAkB;cAAEC,IAAId,KAAKD;YAAG;;UACxCgB,MAAM;UACNC,aAAa;UACbC,UAAU;QACZ;MACF;;EAEJ,CAAA;CACD;",
6
+ "names": ["Capabilities", "contributes", "PLANK_COMPANION_TYPE", "ATTENDABLE_PATH_SEPARATOR", "createExtension", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "meta", "filter", "node", "data", "Array", "isArray", "threads", "connector", "join", "ATTENDABLE_PATH_SEPARATOR", "type", "PLANK_COMPANION_TYPE", "properties", "label", "ns", "icon", "disposition", "position"]
7
+ }
@@ -1,38 +1,11 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
- useOnEditAnalytics,
4
- useStatus
5
- } from "./chunk-XQO5DGHF.mjs";
3
+ useOnEditAnalytics
4
+ } from "./chunk-J56FORYF.mjs";
6
5
  import {
7
6
  THREAD_PLUGIN
8
7
  } from "./chunk-42F2DTMM.mjs";
9
8
 
10
- // packages/plugins/plugin-thread/src/components/ChatContainer.tsx
11
- import React2, { useLayoutEffect, useMemo, useRef as useRef2, useState as useState2 } from "react";
12
- import { createStatic } from "@dxos/echo-schema";
13
- import { makeRef } from "@dxos/live-object";
14
- import { useMembers, useQueue } from "@dxos/react-client/echo";
15
- import { useIdentity as useIdentity2 } from "@dxos/react-client/halo";
16
- import { Icon, ScrollArea, useThemeContext as useThemeContext2, useTranslation as useTranslation2 } from "@dxos/react-ui";
17
- import { createBasicExtensions as createBasicExtensions2, createThemeExtensions as createThemeExtensions2, listener } from "@dxos/react-ui-editor";
18
- import { StackItem } from "@dxos/react-ui-stack";
19
- import { mx as mx3 } from "@dxos/react-ui-theme";
20
- import { MessageTextbox, Thread, ThreadFooter, threadLayout } from "@dxos/react-ui-thread";
21
- import { MessageType } from "@dxos/schema";
22
-
23
- // packages/plugins/plugin-thread/src/components/MessageContainer.tsx
24
- import { EditorView } from "@codemirror/view";
25
- import { Check, PencilSimple, X } from "@phosphor-icons/react";
26
- import React, { forwardRef, useCallback, useEffect, useRef, useState } from "react";
27
- import { Surface } from "@dxos/app-framework";
28
- import { RefArray } from "@dxos/live-object";
29
- import { PublicKey } from "@dxos/react-client";
30
- import { useIdentity } from "@dxos/react-client/halo";
31
- import { Button, ButtonGroup, Tooltip, useOnTransition, useThemeContext, useTranslation } from "@dxos/react-ui";
32
- import { createBasicExtensions, createThemeExtensions, useTextEditor } from "@dxos/react-ui-editor";
33
- import { getSize, hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx as mx2 } from "@dxos/react-ui-theme";
34
- import { MessageHeading, MessageRoot } from "@dxos/react-ui-thread";
35
-
36
9
  // packages/plugins/plugin-thread/src/components/command-extension.ts
37
10
  import { StreamLanguage, HighlightStyle, syntaxHighlighting } from "@codemirror/language";
38
11
  import { tags } from "@dxos/react-ui-editor";
@@ -71,7 +44,7 @@ var getMessageMetadata = (id, identity) => {
71
44
  const fallback = hexToFallback(identity?.identityKey.toHex() ?? "0");
72
45
  return {
73
46
  id,
74
- authorId: identity?.identityKey.toHex(),
47
+ authorId: identity?.did,
75
48
  authorName: identity?.profile?.displayName ?? (identity?.identityKey ? generateName(identity.identityKey.toHex()) : void 0),
76
49
  authorAvatarProps: {
77
50
  hue: identity?.profile?.data?.hue ?? fallback.hue,
@@ -81,14 +54,25 @@ var getMessageMetadata = (id, identity) => {
81
54
  };
82
55
 
83
56
  // packages/plugins/plugin-thread/src/components/MessageContainer.tsx
57
+ import { EditorView } from "@codemirror/view";
58
+ import { Check, PencilSimple, X } from "@phosphor-icons/react";
59
+ import React, { forwardRef, useCallback, useEffect, useRef, useState } from "react";
60
+ import { Surface } from "@dxos/app-framework";
61
+ import { RefArray } from "@dxos/live-object";
62
+ import { PublicKey } from "@dxos/react-client";
63
+ import { useIdentity } from "@dxos/react-client/halo";
64
+ import { Button, ButtonGroup, Tooltip, useOnTransition, useThemeContext, useTranslation } from "@dxos/react-ui";
65
+ import { createBasicExtensions, createThemeExtensions, useTextEditor } from "@dxos/react-ui-editor";
66
+ import { getSize, hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx as mx2 } from "@dxos/react-ui-theme";
67
+ import { MessageHeading, MessageRoot } from "@dxos/react-ui-thread";
84
68
  var messageControlClassNames = [
85
69
  "!p-1 !min-bs-0 transition-opacity",
86
70
  hoverableControlItem
87
71
  ];
88
72
  var MessageContainer = ({ message, members, editable = false, onDelete }) => {
89
- const senderIdentity = members.find((member) => message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey))?.identity;
73
+ const senderIdentity = members.find((member) => message.sender.identityDid && member.identity.did === message.sender.identityDid || message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey))?.identity;
90
74
  const messageMetadata = getMessageMetadata(message.id, senderIdentity);
91
- const userIsAuthor = useIdentity()?.identityKey.toHex() === messageMetadata.authorId;
75
+ const userIsAuthor = useIdentity()?.did === messageMetadata.authorId;
92
76
  const [editing, setEditing] = useState(false);
93
77
  const handleDelete = useCallback(() => onDelete?.(message.id), [
94
78
  message,
@@ -165,7 +149,7 @@ var TextboxBlock = ({ block, isAuthor, editing }) => {
165
149
  initialValue: block.text,
166
150
  extensions: [
167
151
  createBasicExtensions({
168
- readonly: !isAuthor || !editing
152
+ readOnly: !isAuthor || !editing
169
153
  }),
170
154
  createThemeExtensions({
171
155
  themeMode
@@ -216,105 +200,9 @@ var MessageBlockObjectTile = /* @__PURE__ */ forwardRef(({ subject }, forwardedR
216
200
  }));
217
201
  });
218
202
 
219
- // packages/plugins/plugin-thread/src/components/ChatContainer.tsx
220
- var ChatContainer = ({ space, dxn, context, current, autoFocusTextbox }) => {
221
- const id = dxn.toString();
222
- const identity = useIdentity2();
223
- const members = useMembers(space?.key);
224
- const queue = useQueue(dxn, {
225
- pollInterval: 1e3
226
- });
227
- const activity = useStatus(space, id);
228
- const { t } = useTranslation2(THREAD_PLUGIN);
229
- const [_count, _setCount] = useState2(0);
230
- const rerenderEditor = () => _setCount((count) => count + 1);
231
- const [autoFocus, setAutoFocus] = useState2(autoFocusTextbox);
232
- const threadScrollRef = useRef2(null);
233
- const { themeMode } = useThemeContext2();
234
- const textboxMetadata = getMessageMetadata(id, identity);
235
- const messageRef = useRef2("");
236
- const extensions = useMemo(() => [
237
- createBasicExtensions2({
238
- placeholder: t("message placeholder")
239
- }),
240
- createThemeExtensions2({
241
- themeMode
242
- }),
243
- listener({
244
- onChange: (text) => messageRef.current = text
245
- }),
246
- command
247
- ], [
248
- themeMode,
249
- _count
250
- ]);
251
- const scrollToEnd = (behavior) => setTimeout(() => threadScrollRef.current?.scrollIntoView({
252
- behavior,
253
- block: "end"
254
- }), 10);
255
- useLayoutEffect(() => {
256
- scrollToEnd("instant");
257
- }, []);
258
- const handleCreate = () => {
259
- if (!messageRef.current?.length || !queue) {
260
- return false;
261
- }
262
- queue.append([
263
- createStatic(MessageType, {
264
- sender: {
265
- identityKey: identity.identityKey.toHex()
266
- },
267
- created: (/* @__PURE__ */ new Date()).toISOString(),
268
- blocks: [
269
- {
270
- type: "text",
271
- text: messageRef.current
272
- }
273
- ],
274
- properties: context ? {
275
- context: makeRef(context)
276
- } : void 0
277
- })
278
- ]);
279
- messageRef.current = "";
280
- setAutoFocus(true);
281
- scrollToEnd("smooth");
282
- rerenderEditor();
283
- return true;
284
- };
285
- return /* @__PURE__ */ React2.createElement(Thread, {
286
- current,
287
- id,
288
- 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"
289
- }, /* @__PURE__ */ React2.createElement(ScrollArea.Root, {
290
- classNames: "col-span-2"
291
- }, /* @__PURE__ */ React2.createElement(ScrollArea.Viewport, {
292
- 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]"
293
- }, /* @__PURE__ */ React2.createElement("div", {
294
- role: "none",
295
- className: mx3(threadLayout, "place-self-end")
296
- }, (queue?.items ?? []).map((message) => /* @__PURE__ */ React2.createElement(MessageContainer, {
297
- key: message.id,
298
- message,
299
- members
300
- }))), /* @__PURE__ */ React2.createElement("div", {
301
- role: "none",
302
- className: "bs-px -mbs-px",
303
- ref: threadScrollRef
304
- }), /* @__PURE__ */ React2.createElement(ScrollArea.Scrollbar, null, /* @__PURE__ */ React2.createElement(ScrollArea.Thumb, null)))), /* @__PURE__ */ React2.createElement(MessageTextbox, {
305
- extensions,
306
- autoFocus,
307
- onSend: handleCreate,
308
- ...textboxMetadata
309
- }), /* @__PURE__ */ React2.createElement(ThreadFooter, {
310
- activity
311
- }, t("activity message")));
312
- };
313
-
314
203
  export {
315
204
  command,
316
205
  getMessageMetadata,
317
- MessageContainer,
318
- ChatContainer
206
+ MessageContainer
319
207
  };
320
- //# sourceMappingURL=chunk-TW2NME6Z.mjs.map
208
+ //# sourceMappingURL=chunk-ADTVMESP.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/command-extension.ts", "../../../src/util.ts", "../../../src/components/MessageContainer.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { StreamLanguage, HighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { type Extension } from '@codemirror/state';\n\nimport { tags } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\n/**\n * https://github.com/codemirror/stream-parser/blob/main/test/test-stream-parser.ts\n */\nconst parser = StreamLanguage.define<{ count: number }>({\n startState: () => ({ count: 0 }),\n token: (stream, state) => {\n state.count++;\n if (stream.eatSpace()) {\n return null;\n }\n if (state.count === 1 && stream.match(/^(\\/\\w+)/)) {\n return 'tagName';\n }\n stream.next();\n return null;\n },\n});\n\nconst styles = HighlightStyle.define([\n { tag: tags.tagName, class: mx('dx-tag dx-tag--indigo text-baseText font-medium') },\n]);\n\nexport const command: Extension = [parser, syntaxHighlighting(styles)];\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { generateName } from '@dxos/display-name';\nimport { type PublicKey } from '@dxos/react-client';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { type MessageMetadata } from '@dxos/react-ui-thread';\nimport { hexToFallback } from '@dxos/util';\n\nexport type MessagePropertiesProvider = (identityKey: PublicKey | undefined) => MessageMetadata;\n\nexport const getMessageMetadata = (id: string, identity?: Identity): MessageMetadata => {\n const fallback = hexToFallback(identity?.identityKey.toHex() ?? '0');\n return {\n id,\n authorId: identity?.did,\n authorName:\n identity?.profile?.displayName ??\n (identity?.identityKey ? generateName(identity.identityKey.toHex()) : undefined),\n authorAvatarProps: {\n hue: identity?.profile?.data?.hue ?? fallback.hue,\n emoji: identity?.profile?.data?.emoji ?? fallback.emoji,\n },\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { EditorView } from '@codemirror/view';\nimport { Check, PencilSimple, X } from '@phosphor-icons/react';\nimport React, { forwardRef, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { RefArray } from '@dxos/live-object';\nimport { PublicKey } from '@dxos/react-client';\nimport { type ReactiveEchoObject, type Expando, type SpaceMember } from '@dxos/react-client/echo';\nimport { useIdentity, type Identity } from '@dxos/react-client/halo';\nimport { Button, ButtonGroup, Tooltip, useOnTransition, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { createBasicExtensions, createThemeExtensions, useTextEditor } from '@dxos/react-ui-editor';\nimport {\n getSize,\n hoverableControlItem,\n hoverableControls,\n hoverableFocusedWithinControls,\n mx,\n} from '@dxos/react-ui-theme';\nimport { MessageHeading, MessageRoot } from '@dxos/react-ui-thread';\nimport { type TextContentBlock, type MessageType } from '@dxos/schema';\n\nimport { command } from './command-extension';\nimport { useOnEditAnalytics } from '../hooks';\nimport { THREAD_PLUGIN } from '../meta';\nimport { getMessageMetadata } from '../util';\n\n// TODO(thure): #8149\nconst messageControlClassNames = ['!p-1 !min-bs-0 transition-opacity', hoverableControlItem];\n\nexport const MessageContainer = ({\n message,\n members,\n editable = false,\n onDelete,\n}: {\n message: MessageType;\n members: SpaceMember[];\n editable?: boolean;\n onDelete?: (id: string) => void;\n}) => {\n const senderIdentity = members.find(\n (member) =>\n (message.sender.identityDid && member.identity.did === message.sender.identityDid) ||\n (message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey)),\n )?.identity;\n const messageMetadata = getMessageMetadata(message.id, senderIdentity);\n const userIsAuthor = useIdentity()?.did === messageMetadata.authorId;\n const [editing, setEditing] = useState(false);\n const handleDelete = useCallback(() => onDelete?.(message.id), [message, onDelete]);\n const { t } = useTranslation(THREAD_PLUGIN);\n const editLabel = t(editing ? 'save message label' : 'edit message label');\n const deleteLabel = t('delete message label');\n const textBlock = message.blocks.find((block) => block.type === 'text');\n const references = message.blocks.filter((block) => block.type === 'reference').map((block) => block.reference);\n\n useOnEditAnalytics(message, textBlock, !!editing);\n\n return (\n <MessageRoot {...messageMetadata} classNames={[hoverableControls, hoverableFocusedWithinControls]}>\n <MessageHeading authorName={messageMetadata.authorName} timestamp={messageMetadata.timestamp}>\n <ButtonGroup classNames='mie-1'>\n {userIsAuthor && editable && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button\n variant='ghost'\n data-testid={editing ? 'thread.message.save' : 'thread.message.edit'}\n classNames={messageControlClassNames}\n onClick={() => setEditing((editing) => !editing)}\n >\n <span className='sr-only'>{editLabel}</span>\n {editing ? <Check className={getSize(4)} /> : <PencilSimple className={getSize(4)} />}\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n {editLabel}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n {onDelete && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button\n variant='ghost'\n data-testid='thread.message.delete'\n classNames={messageControlClassNames}\n onClick={() => handleDelete()}\n >\n <span className='sr-only'>{deleteLabel}</span>\n <X className={getSize(4)} />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n {deleteLabel}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n </ButtonGroup>\n </MessageHeading>\n {textBlock && <TextboxBlock block={textBlock} isAuthor={userIsAuthor} editing={editing} />}\n {RefArray.targets(references).map((reference, index) => (\n <MessagePart key={index} part={reference} />\n ))}\n </MessageRoot>\n );\n};\n\nconst MessagePart = ({ part }: { part: Expando }) => {\n return <MessageBlockObjectTile subject={part} />;\n};\n\nconst TextboxBlock = ({\n block,\n isAuthor,\n editing,\n}: {\n block: TextContentBlock;\n editing?: boolean;\n isAuthor?: boolean;\n identity?: Identity;\n}) => {\n const { themeMode } = useThemeContext();\n const inMemoryContentRef = useRef(block.text);\n\n const handleDocumentChange = useCallback((newState: string) => {\n inMemoryContentRef.current = newState;\n }, []);\n\n const saveDocumentChange = useCallback(() => {\n block.text = inMemoryContentRef.current;\n }, [block]);\n\n useOnTransition(editing, true, false, saveDocumentChange);\n\n const { parentRef, focusAttributes, view } = useTextEditor(\n () => ({\n initialValue: block.text,\n extensions: [\n createBasicExtensions({ readOnly: !isAuthor || !editing }),\n createThemeExtensions({ themeMode }),\n command,\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n handleDocumentChange(update.state.doc.toString());\n }\n }),\n ],\n }),\n [block.text, editing, isAuthor, themeMode, handleDocumentChange],\n );\n\n useEffect(() => {\n editing && view?.focus();\n }, [editing, view]);\n\n return <div role='none' ref={parentRef} className='mie-4' {...focusAttributes} />;\n};\n\nconst MessageBlockObjectTile = forwardRef<HTMLDivElement, { subject: ReactiveEchoObject<any> }>(\n ({ subject }, forwardedRef) => {\n let title = subject.name ?? subject.title ?? subject.type ?? 'Object';\n if (typeof title !== 'string') {\n title = title?.content ?? '';\n }\n\n return (\n <div\n role='group'\n className={mx('grid col-span-3 py-1 pr-4', hoverableControls, hoverableFocusedWithinControls)}\n ref={forwardedRef}\n >\n <Surface role='card' limit={1} data={{ subject }} fallback={title} />\n </div>\n );\n },\n);\n"],
5
+ "mappings": ";;;;;;;;;AAIA,SAASA,gBAAgBC,gBAAgBC,0BAA0B;AAGnE,SAASC,YAAY;AACrB,SAASC,UAAU;AAKnB,IAAMC,SAASC,eAAeC,OAA0B;EACtDC,YAAY,OAAO;IAAEC,OAAO;EAAE;EAC9BC,OAAO,CAACC,QAAQC,UAAAA;AACdA,UAAMH;AACN,QAAIE,OAAOE,SAAQ,GAAI;AACrB,aAAO;IACT;AACA,QAAID,MAAMH,UAAU,KAAKE,OAAOG,MAAM,UAAA,GAAa;AACjD,aAAO;IACT;AACAH,WAAOI,KAAI;AACX,WAAO;EACT;AACF,CAAA;AAEA,IAAMC,SAASC,eAAeV,OAAO;EACnC;IAAEW,KAAKC,KAAKC;IAASC,OAAOC,GAAG,iDAAA;EAAmD;CACnF;AAEM,IAAMC,UAAqB;EAAClB;EAAQmB,mBAAmBR,MAAAA;;;;AC5B9D,SAASS,oBAAoB;AAI7B,SAASC,qBAAqB;AAIvB,IAAMC,qBAAqB,CAACC,IAAYC,aAAAA;AAC7C,QAAMC,WAAWC,cAAcF,UAAUG,YAAYC,MAAAA,KAAW,GAAA;AAChE,SAAO;IACLL;IACAM,UAAUL,UAAUM;IACpBC,YACEP,UAAUQ,SAASC,gBAClBT,UAAUG,cAAcO,aAAaV,SAASG,YAAYC,MAAK,CAAA,IAAMO;IACxEC,mBAAmB;MACjBC,KAAKb,UAAUQ,SAASM,MAAMD,OAAOZ,SAASY;MAC9CE,OAAOf,UAAUQ,SAASM,MAAMC,SAASd,SAASc;IACpD;EACF;AACF;;;ACrBA,SAASC,kBAAkB;AAC3B,SAASC,OAAOC,cAAcC,SAAS;AACvC,OAAOC,SAASC,YAAYC,aAAaC,WAAWC,QAAQC,gBAAgB;AAE5E,SAASC,eAAe;AACxB,SAASC,gBAAgB;AACzB,SAASC,iBAAiB;AAE1B,SAASC,mBAAkC;AAC3C,SAASC,QAAQC,aAAaC,SAASC,iBAAiBC,iBAAiBC,sBAAsB;AAC/F,SAASC,uBAAuBC,uBAAuBC,qBAAqB;AAC5E,SACEC,SACAC,sBACAC,mBACAC,gCACAC,MAAAA,WACK;AACP,SAASC,gBAAgBC,mBAAmB;AAS5C,IAAMC,2BAA2B;EAAC;EAAqCC;;AAEhE,IAAMC,mBAAmB,CAAC,EAC/BC,SACAC,SACAC,WAAW,OACXC,SAAQ,MAMT;AACC,QAAMC,iBAAiBH,QAAQI,KAC7B,CAACC,WACEN,QAAQO,OAAOC,eAAeF,OAAOG,SAASC,QAAQV,QAAQO,OAAOC,eACrER,QAAQO,OAAOI,eAAeC,UAAUC,OAAOP,OAAOG,SAASE,aAAaX,QAAQO,OAAOI,WAAW,CAAA,GACxGF;AACH,QAAMK,kBAAkBC,mBAAmBf,QAAQgB,IAAIZ,cAAAA;AACvD,QAAMa,eAAeC,YAAAA,GAAeR,QAAQI,gBAAgBK;AAC5D,QAAM,CAACC,SAASC,UAAAA,IAAcC,SAAS,KAAA;AACvC,QAAMC,eAAeC,YAAY,MAAMrB,WAAWH,QAAQgB,EAAE,GAAG;IAAChB;IAASG;GAAS;AAClF,QAAM,EAAEsB,EAAC,IAAKC,eAAeC,aAAAA;AAC7B,QAAMC,YAAYH,EAAEL,UAAU,uBAAuB,oBAAA;AACrD,QAAMS,cAAcJ,EAAE,sBAAA;AACtB,QAAMK,YAAY9B,QAAQ+B,OAAO1B,KAAK,CAAC2B,UAAUA,MAAMC,SAAS,MAAA;AAChE,QAAMC,aAAalC,QAAQ+B,OAAOI,OAAO,CAACH,UAAUA,MAAMC,SAAS,WAAA,EAAaG,IAAI,CAACJ,UAAUA,MAAMK,SAAS;AAE9GC,qBAAmBtC,SAAS8B,WAAW,CAAC,CAACV,OAAAA;AAEzC,SACE,sBAAA,cAACmB,aAAAA;IAAa,GAAGzB;IAAiB0B,YAAY;MAACC;MAAmBC;;KAChE,sBAAA,cAACC,gBAAAA;IAAeC,YAAY9B,gBAAgB8B;IAAYC,WAAW/B,gBAAgB+B;KACjF,sBAAA,cAACC,aAAAA;IAAYN,YAAW;KACrBvB,gBAAgBf,YACf,sBAAA,cAAC6C,QAAQC,MAAI,MACX,sBAAA,cAACD,QAAQE,SAAO;IAACC,SAAAA;KACf,sBAAA,cAACC,QAAAA;IACCC,SAAQ;IACRC,eAAajC,UAAU,wBAAwB;IAC/CoB,YAAY3C;IACZyD,SAAS,MAAMjC,WAAW,CAACD,aAAY,CAACA,QAAAA;KAExC,sBAAA,cAACmC,QAAAA;IAAKC,WAAU;KAAW5B,SAAAA,GAC1BR,UAAU,sBAAA,cAACqC,OAAAA;IAAMD,WAAWE,QAAQ,CAAA;OAAS,sBAAA,cAACC,cAAAA;IAAaH,WAAWE,QAAQ,CAAA;QAGnF,sBAAA,cAACX,QAAQa,QAAM,MACb,sBAAA,cAACb,QAAQc,SAAO,MACbjC,WACD,sBAAA,cAACmB,QAAQe,OAAK,IAAA,CAAA,CAAA,CAAA,GAKrB3D,YACC,sBAAA,cAAC4C,QAAQC,MAAI,MACX,sBAAA,cAACD,QAAQE,SAAO;IAACC,SAAAA;KACf,sBAAA,cAACC,QAAAA;IACCC,SAAQ;IACRC,eAAY;IACZb,YAAY3C;IACZyD,SAAS,MAAM/B,aAAAA;KAEf,sBAAA,cAACgC,QAAAA;IAAKC,WAAU;KAAW3B,WAAAA,GAC3B,sBAAA,cAACkC,GAAAA;IAAEP,WAAWE,QAAQ,CAAA;QAG1B,sBAAA,cAACX,QAAQa,QAAM,MACb,sBAAA,cAACb,QAAQc,SAAO,MACbhC,aACD,sBAAA,cAACkB,QAAQe,OAAK,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAOzBhC,aAAa,sBAAA,cAACkC,cAAAA;IAAahC,OAAOF;IAAWmC,UAAUhD;IAAcG;MACrE8C,SAASC,QAAQjC,UAAAA,EAAYE,IAAI,CAACC,WAAW+B,UAC5C,sBAAA,cAACC,aAAAA;IAAYC,KAAKF;IAAOG,MAAMlC;;AAIvC;AAEA,IAAMgC,cAAc,CAAC,EAAEE,KAAI,MAAqB;AAC9C,SAAO,sBAAA,cAACC,wBAAAA;IAAuBC,SAASF;;AAC1C;AAEA,IAAMP,eAAe,CAAC,EACpBhC,OACAiC,UACA7C,QAAO,MAMR;AACC,QAAM,EAAEsD,UAAS,IAAKC,gBAAAA;AACtB,QAAMC,qBAAqBC,OAAO7C,MAAM8C,IAAI;AAE5C,QAAMC,uBAAuBvD,YAAY,CAACwD,aAAAA;AACxCJ,uBAAmBK,UAAUD;EAC/B,GAAG,CAAA,CAAE;AAEL,QAAME,qBAAqB1D,YAAY,MAAA;AACrCQ,UAAM8C,OAAOF,mBAAmBK;EAClC,GAAG;IAACjD;GAAM;AAEVmD,kBAAgB/D,SAAS,MAAM,OAAO8D,kBAAAA;AAEtC,QAAM,EAAEE,WAAWC,iBAAiBC,KAAI,IAAKC,cAC3C,OAAO;IACLC,cAAcxD,MAAM8C;IACpBW,YAAY;MACVC,sBAAsB;QAAEC,UAAU,CAAC1B,YAAY,CAAC7C;MAAQ,CAAA;MACxDwE,sBAAsB;QAAElB;MAAU,CAAA;MAClCmB;MACAC,WAAWC,eAAeC,GAAG,CAACC,WAAAA;AAC5B,YAAIA,OAAOC,YAAY;AACrBnB,+BAAqBkB,OAAOE,MAAMC,IAAIC,SAAQ,CAAA;QAChD;MACF,CAAA;;EAEJ,IACA;IAACrE,MAAM8C;IAAM1D;IAAS6C;IAAUS;IAAWK;GAAqB;AAGlEuB,YAAU,MAAA;AACRlF,eAAWkE,MAAMiB,MAAAA;EACnB,GAAG;IAACnF;IAASkE;GAAK;AAElB,SAAO,sBAAA,cAACkB,OAAAA;IAAIC,MAAK;IAAOC,KAAKtB;IAAW5B,WAAU;IAAS,GAAG6B;;AAChE;AAEA,IAAMb,yBAAyBmC,2BAC7B,CAAC,EAAElC,QAAO,GAAImC,iBAAAA;AACZ,MAAIC,QAAQpC,QAAQqC,QAAQrC,QAAQoC,SAASpC,QAAQxC,QAAQ;AAC7D,MAAI,OAAO4E,UAAU,UAAU;AAC7BA,YAAQA,OAAOE,WAAW;EAC5B;AAEA,SACE,sBAAA,cAACP,OAAAA;IACCC,MAAK;IACLjD,WAAWwD,IAAG,6BAA6BvE,mBAAmBC,8BAAAA;IAC9DgE,KAAKE;KAEL,sBAAA,cAACK,SAAAA;IAAQR,MAAK;IAAOS,OAAO;IAAGC,MAAM;MAAE1C;IAAQ;IAAG2C,UAAUP;;AAGlE,CAAA;",
6
+ "names": ["StreamLanguage", "HighlightStyle", "syntaxHighlighting", "tags", "mx", "parser", "StreamLanguage", "define", "startState", "count", "token", "stream", "state", "eatSpace", "match", "next", "styles", "HighlightStyle", "tag", "tags", "tagName", "class", "mx", "command", "syntaxHighlighting", "generateName", "hexToFallback", "getMessageMetadata", "id", "identity", "fallback", "hexToFallback", "identityKey", "toHex", "authorId", "did", "authorName", "profile", "displayName", "generateName", "undefined", "authorAvatarProps", "hue", "data", "emoji", "EditorView", "Check", "PencilSimple", "X", "React", "forwardRef", "useCallback", "useEffect", "useRef", "useState", "Surface", "RefArray", "PublicKey", "useIdentity", "Button", "ButtonGroup", "Tooltip", "useOnTransition", "useThemeContext", "useTranslation", "createBasicExtensions", "createThemeExtensions", "useTextEditor", "getSize", "hoverableControlItem", "hoverableControls", "hoverableFocusedWithinControls", "mx", "MessageHeading", "MessageRoot", "messageControlClassNames", "hoverableControlItem", "MessageContainer", "message", "members", "editable", "onDelete", "senderIdentity", "find", "member", "sender", "identityDid", "identity", "did", "identityKey", "PublicKey", "equals", "messageMetadata", "getMessageMetadata", "id", "userIsAuthor", "useIdentity", "authorId", "editing", "setEditing", "useState", "handleDelete", "useCallback", "t", "useTranslation", "THREAD_PLUGIN", "editLabel", "deleteLabel", "textBlock", "blocks", "block", "type", "references", "filter", "map", "reference", "useOnEditAnalytics", "MessageRoot", "classNames", "hoverableControls", "hoverableFocusedWithinControls", "MessageHeading", "authorName", "timestamp", "ButtonGroup", "Tooltip", "Root", "Trigger", "asChild", "Button", "variant", "data-testid", "onClick", "span", "className", "Check", "getSize", "PencilSimple", "Portal", "Content", "Arrow", "X", "TextboxBlock", "isAuthor", "RefArray", "targets", "index", "MessagePart", "key", "part", "MessageBlockObjectTile", "subject", "themeMode", "useThemeContext", "inMemoryContentRef", "useRef", "text", "handleDocumentChange", "newState", "current", "saveDocumentChange", "useOnTransition", "parentRef", "focusAttributes", "view", "useTextEditor", "initialValue", "extensions", "createBasicExtensions", "readOnly", "createThemeExtensions", "command", "EditorView", "updateListener", "of", "update", "docChanged", "state", "doc", "toString", "useEffect", "focus", "div", "role", "ref", "forwardRef", "forwardedRef", "title", "name", "content", "mx", "Surface", "limit", "data", "fallback"]
7
+ }
@@ -7,7 +7,7 @@ import {
7
7
  import { S } from "@dxos/echo-schema";
8
8
  import { ChannelType, ThreadType } from "@dxos/plugin-space/types";
9
9
  import { EchoObjectSchema } from "@dxos/react-client/echo";
10
- import { MessageType } from "@dxos/schema";
10
+ import { ActorSchema, MessageType } from "@dxos/schema";
11
11
  var ThreadAction;
12
12
  (function(ThreadAction2) {
13
13
  const THREAD_ACTION = `${THREAD_PLUGIN}/action`;
@@ -37,8 +37,7 @@ var ThreadAction;
37
37
  ThreadAction2.Create = Create;
38
38
  class Select extends S.TaggedClass()(`${THREAD_ACTION}/select`, {
39
39
  input: S.Struct({
40
- current: S.String,
41
- skipOpen: S.optional(S.Boolean)
40
+ current: S.String
42
41
  }),
43
42
  output: S.Void
44
43
  }) {
@@ -62,15 +61,17 @@ var ThreadAction;
62
61
  }) {
63
62
  }
64
63
  ThreadAction2.Delete = Delete;
65
- class OnMessageAdd extends S.TaggedClass()(`${THREAD_ACTION}/on-message-add`, {
64
+ class AddMessage extends S.TaggedClass()(`${THREAD_ACTION}/add-message`, {
66
65
  input: S.Struct({
66
+ subject: EchoObjectSchema,
67
67
  thread: ThreadType,
68
- subject: EchoObjectSchema
68
+ sender: ActorSchema,
69
+ text: S.String
69
70
  }),
70
71
  output: S.Void
71
72
  }) {
72
73
  }
73
- ThreadAction2.OnMessageAdd = OnMessageAdd;
74
+ ThreadAction2.AddMessage = AddMessage;
74
75
  class DeleteMessage extends S.TaggedClass()(`${THREAD_ACTION}/delete-message`, {
75
76
  input: S.Struct({
76
77
  thread: ThreadType,
@@ -90,4 +91,4 @@ export {
90
91
  ThreadAction,
91
92
  ThreadSettingsSchema
92
93
  };
93
- //# sourceMappingURL=chunk-FZXTP57V.mjs.map
94
+ //# sourceMappingURL=chunk-E446MGLP.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { S } from '@dxos/echo-schema';\nimport { ChannelType, ThreadType } from '@dxos/plugin-space/types';\nimport { EchoObjectSchema } from '@dxos/react-client/echo';\nimport { ActorSchema, MessageType } from '@dxos/schema';\n\nimport { THREAD_PLUGIN } from './meta';\n\nexport namespace ThreadAction {\n const THREAD_ACTION = `${THREAD_PLUGIN}/action`;\n\n export class CreateChannel extends S.TaggedClass<CreateChannel>()(`${THREAD_ACTION}/create-channel`, {\n input: S.Struct({\n // TODO(wittjosiah): Should be SpaceId.\n spaceId: S.String,\n name: S.optional(S.String),\n }),\n output: S.Struct({\n object: ChannelType,\n }),\n }) {}\n\n export class Create extends S.TaggedClass<Create>()(`${THREAD_ACTION}/create`, {\n input: S.Struct({\n name: S.optional(S.String),\n cursor: S.String,\n subject: EchoObjectSchema,\n }),\n output: S.Struct({\n object: ThreadType,\n }),\n }) {}\n\n export class Select extends S.TaggedClass<Select>()(`${THREAD_ACTION}/select`, {\n input: S.Struct({\n current: S.String,\n }),\n output: S.Void,\n }) {}\n\n export class ToggleResolved extends S.TaggedClass<ToggleResolved>()(`${THREAD_ACTION}/toggle-resolved`, {\n input: S.Struct({\n thread: ThreadType,\n }),\n output: S.Void,\n }) {}\n\n export class Delete extends S.TaggedClass<Delete>()(`${THREAD_ACTION}/delete`, {\n input: S.Struct({\n thread: ThreadType,\n subject: EchoObjectSchema,\n cursor: S.optional(S.String),\n }),\n output: S.Void,\n }) {}\n\n export class AddMessage extends S.TaggedClass<AddMessage>()(`${THREAD_ACTION}/add-message`, {\n input: S.Struct({\n subject: EchoObjectSchema,\n thread: ThreadType,\n sender: ActorSchema,\n text: S.String,\n }),\n output: S.Void,\n }) {}\n\n export class DeleteMessage extends S.TaggedClass<DeleteMessage>()(`${THREAD_ACTION}/delete-message`, {\n input: S.Struct({\n thread: ThreadType,\n subject: EchoObjectSchema,\n messageId: S.String,\n message: S.optional(MessageType),\n messageIndex: S.optional(S.Number),\n }),\n output: S.Void,\n }) {}\n}\n\nexport const ThreadSettingsSchema = S.mutable(S.Struct({}));\n\nexport type ThreadSettingsProps = S.Schema.Type<typeof ThreadSettingsSchema>;\n\nexport interface ThreadModel {\n root: ThreadType;\n}\n\ntype SubjectId = string;\nexport type ViewState = { showResolvedThreads: boolean };\nexport type ViewStore = Record<SubjectId, ViewState>;\n\nexport type ThreadState = {\n /** Current channel activity. */\n activities: Record<string, string | undefined>;\n /** In-memory draft threads. */\n drafts: Record<string, ThreadType[]>;\n current?: string | undefined;\n};\n"],
5
+ "mappings": ";;;;;;AAIA,SAASA,SAAS;AAClB,SAASC,aAAaC,kBAAkB;AACxC,SAASC,wBAAwB;AACjC,SAASC,aAAaC,mBAAmB;;UAIxBC,eAAAA;AACf,QAAMC,gBAAgB,GAAGC,aAAAA;EAElB,MAAMC,sBAAsBC,EAAEC,YAAW,EAAkB,GAAGJ,aAAAA,mBAAgC;IACnGK,OAAOF,EAAEG,OAAO;;MAEdC,SAASJ,EAAEK;MACXC,MAAMN,EAAEO,SAASP,EAAEK,MAAM;IAC3B,CAAA;IACAG,QAAQR,EAAEG,OAAO;MACfM,QAAQC;IACV,CAAA;EACF,CAAA,EAAA;EAAI;gBATSX,gBAAAA;EAWN,MAAMY,eAAeX,EAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,EAAEG,OAAO;MACdG,MAAMN,EAAEO,SAASP,EAAEK,MAAM;MACzBO,QAAQZ,EAAEK;MACVQ,SAASC;IACX,CAAA;IACAN,QAAQR,EAAEG,OAAO;MACfM,QAAQM;IACV,CAAA;EACF,CAAA,EAAA;EAAI;gBATSJ,SAAAA;EAWN,MAAMK,eAAehB,EAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,EAAEG,OAAO;MACdc,SAASjB,EAAEK;IACb,CAAA;IACAG,QAAQR,EAAEkB;EACZ,CAAA,EAAA;EAAI;gBALSF,SAAAA;EAON,MAAMG,uBAAuBnB,EAAEC,YAAW,EAAmB,GAAGJ,aAAAA,oBAAiC;IACtGK,OAAOF,EAAEG,OAAO;MACdiB,QAAQL;IACV,CAAA;IACAP,QAAQR,EAAEkB;EACZ,CAAA,EAAA;EAAI;gBALSC,iBAAAA;EAON,MAAME,eAAerB,EAAEC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAC7EK,OAAOF,EAAEG,OAAO;MACdiB,QAAQL;MACRF,SAASC;MACTF,QAAQZ,EAAEO,SAASP,EAAEK,MAAM;IAC7B,CAAA;IACAG,QAAQR,EAAEkB;EACZ,CAAA,EAAA;EAAI;gBAPSG,SAAAA;EASN,MAAMC,mBAAmBtB,EAAEC,YAAW,EAAe,GAAGJ,aAAAA,gBAA6B;IAC1FK,OAAOF,EAAEG,OAAO;MACdU,SAASC;MACTM,QAAQL;MACRQ,QAAQC;MACRC,MAAMzB,EAAEK;IACV,CAAA;IACAG,QAAQR,EAAEkB;EACZ,CAAA,EAAA;EAAI;gBARSI,aAAAA;EAUN,MAAMI,sBAAsB1B,EAAEC,YAAW,EAAkB,GAAGJ,aAAAA,mBAAgC;IACnGK,OAAOF,EAAEG,OAAO;MACdiB,QAAQL;MACRF,SAASC;MACTa,WAAW3B,EAAEK;MACbuB,SAAS5B,EAAEO,SAASsB,WAAAA;MACpBC,cAAc9B,EAAEO,SAASP,EAAE+B,MAAM;IACnC,CAAA;IACAvB,QAAQR,EAAEkB;EACZ,CAAA,EAAA;EAAI;gBATSQ,gBAAAA;AAUf,GApEiB9B,iBAAAA,eAAAA,CAAAA,EAAAA;AAsEV,IAAMoC,uBAAuBhC,EAAEiC,QAAQjC,EAAEG,OAAO,CAAC,CAAA,CAAA;",
6
+ "names": ["S", "ChannelType", "ThreadType", "EchoObjectSchema", "ActorSchema", "MessageType", "ThreadAction", "THREAD_ACTION", "THREAD_PLUGIN", "CreateChannel", "S", "TaggedClass", "input", "Struct", "spaceId", "String", "name", "optional", "output", "object", "ChannelType", "Create", "cursor", "subject", "EchoObjectSchema", "ThreadType", "Select", "current", "Void", "ToggleResolved", "thread", "Delete", "AddMessage", "sender", "ActorSchema", "text", "DeleteMessage", "messageId", "message", "MessageType", "messageIndex", "Number", "ThreadSettingsSchema", "mutable"]
7
+ }