@dxos/plugin-thread 0.8.1-staging.5be625a → 0.8.1-staging.9eaf14f

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
@@ -0,0 +1,138 @@
1
+ import {
2
+ MessageContainer,
3
+ command,
4
+ getMessageMetadata
5
+ } from "./chunk-TFVPUPOO.mjs";
6
+ import {
7
+ useStatus
8
+ } from "./chunk-QDJ3Y6WF.mjs";
9
+ import {
10
+ THREAD_PLUGIN
11
+ } from "./chunk-WBJLUUOK.mjs";
12
+
13
+ // packages/plugins/plugin-thread/src/components/ChatContainer.tsx
14
+ import React, { useLayoutEffect, useMemo, useRef, useState } from "react";
15
+ import { createStatic } from "@dxos/echo-schema";
16
+ import { makeRef } from "@dxos/live-object";
17
+ import { useMembers, useQueue } from "@dxos/react-client/echo";
18
+ import { useIdentity } from "@dxos/react-client/halo";
19
+ import { Icon, ScrollArea, useThemeContext, useTranslation } from "@dxos/react-ui";
20
+ import { createBasicExtensions, createThemeExtensions, listener } from "@dxos/react-ui-editor";
21
+ import { StackItem } from "@dxos/react-ui-stack";
22
+ import { mx } from "@dxos/react-ui-theme";
23
+ import { MessageTextbox, Thread, ThreadFooter, threadLayout } from "@dxos/react-ui-thread";
24
+ import { MessageType } from "@dxos/schema";
25
+ var ChatHeading = ({ attendableId }) => {
26
+ const { t } = useTranslation(THREAD_PLUGIN);
27
+ return /* @__PURE__ */ React.createElement("div", {
28
+ role: "none",
29
+ className: "flex items-center"
30
+ }, /* @__PURE__ */ React.createElement(StackItem.SigilButton, {
31
+ attendableId
32
+ }, /* @__PURE__ */ React.createElement(Icon, {
33
+ icon: "ph--chat--regular",
34
+ size: 5
35
+ })), /* @__PURE__ */ React.createElement(StackItem.HeadingLabel, {
36
+ attendableId
37
+ }, t("chat heading")));
38
+ };
39
+ var ChatContainer = ({ space, dxn, context, current, autoFocusTextbox }) => {
40
+ const id = dxn.toString();
41
+ const identity = useIdentity();
42
+ const members = useMembers(space?.key);
43
+ const queue = useQueue(dxn, {
44
+ pollInterval: 1e3
45
+ });
46
+ const activity = useStatus(space, id);
47
+ const { t } = useTranslation(THREAD_PLUGIN);
48
+ const [_count, _setCount] = useState(0);
49
+ const rerenderEditor = () => _setCount((count) => count + 1);
50
+ const [autoFocus, setAutoFocus] = useState(autoFocusTextbox);
51
+ const threadScrollRef = useRef(null);
52
+ const { themeMode } = useThemeContext();
53
+ const textboxMetadata = getMessageMetadata(id, identity);
54
+ const messageRef = useRef("");
55
+ const extensions = useMemo(() => [
56
+ createBasicExtensions({
57
+ placeholder: t("message placeholder")
58
+ }),
59
+ createThemeExtensions({
60
+ themeMode
61
+ }),
62
+ listener({
63
+ onChange: (text) => messageRef.current = text
64
+ }),
65
+ command
66
+ ], [
67
+ themeMode,
68
+ _count
69
+ ]);
70
+ const scrollToEnd = (behavior) => setTimeout(() => threadScrollRef.current?.scrollIntoView({
71
+ behavior,
72
+ block: "end"
73
+ }), 10);
74
+ useLayoutEffect(() => {
75
+ scrollToEnd("instant");
76
+ }, []);
77
+ const handleCreate = () => {
78
+ if (!messageRef.current?.length || !queue) {
79
+ return false;
80
+ }
81
+ queue.append([
82
+ createStatic(MessageType, {
83
+ sender: {
84
+ identityDid: identity.did
85
+ },
86
+ created: (/* @__PURE__ */ new Date()).toISOString(),
87
+ blocks: [
88
+ {
89
+ type: "text",
90
+ text: messageRef.current
91
+ }
92
+ ],
93
+ properties: context ? {
94
+ context: makeRef(context)
95
+ } : void 0
96
+ })
97
+ ]);
98
+ messageRef.current = "";
99
+ setAutoFocus(true);
100
+ scrollToEnd("smooth");
101
+ rerenderEditor();
102
+ return true;
103
+ };
104
+ return /* @__PURE__ */ React.createElement(Thread, {
105
+ current,
106
+ id,
107
+ 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"
108
+ }, /* @__PURE__ */ React.createElement(ScrollArea.Root, {
109
+ classNames: "col-span-2"
110
+ }, /* @__PURE__ */ React.createElement(ScrollArea.Viewport, {
111
+ 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]"
112
+ }, /* @__PURE__ */ React.createElement("div", {
113
+ role: "none",
114
+ className: mx(threadLayout, "place-self-end")
115
+ }, (queue?.items ?? []).map((message) => /* @__PURE__ */ React.createElement(MessageContainer, {
116
+ key: message.id,
117
+ message,
118
+ members
119
+ }))), /* @__PURE__ */ React.createElement("div", {
120
+ role: "none",
121
+ className: "bs-px -mbs-px",
122
+ ref: threadScrollRef
123
+ }), /* @__PURE__ */ React.createElement(ScrollArea.Scrollbar, null, /* @__PURE__ */ React.createElement(ScrollArea.Thumb, null)))), /* @__PURE__ */ React.createElement(MessageTextbox, {
124
+ extensions,
125
+ autoFocus,
126
+ onSend: handleCreate,
127
+ ...textboxMetadata
128
+ }), /* @__PURE__ */ React.createElement(ThreadFooter, {
129
+ activity
130
+ }, t("activity message")));
131
+ };
132
+ var ChatContainer_default = ChatContainer;
133
+ export {
134
+ ChatContainer,
135
+ ChatHeading,
136
+ ChatContainer_default as default
137
+ };
138
+ //# sourceMappingURL=ChatContainer-IOOAQW6S.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,41 @@
1
+ import {
2
+ meta
3
+ } from "./chunk-WBJLUUOK.mjs";
4
+
5
+ // packages/plugins/plugin-thread/src/capabilities/app-graph-builder.ts
6
+ import { Capabilities, contributes } from "@dxos/app-framework";
7
+ import { PLANK_COMPANION_TYPE, ATTENDABLE_PATH_SEPARATOR } from "@dxos/plugin-deck/types";
8
+ import { createExtension } from "@dxos/plugin-graph";
9
+ var app_graph_builder_default = (context) => contributes(Capabilities.AppGraphBuilder, [
10
+ createExtension({
11
+ id: `${meta.id}/comments`,
12
+ // TODO(wittjosiah): Support comments on any object.
13
+ // filter: (node): node is Node<ReactiveEchoObject<any>> => isEchoObject(node.data),
14
+ filter: (node) => !!node.data && typeof node.data === "object" && "threads" in node.data && Array.isArray(node.data.threads),
15
+ connector: ({ node }) => [
16
+ {
17
+ id: [
18
+ node.id,
19
+ "comments"
20
+ ].join(ATTENDABLE_PATH_SEPARATOR),
21
+ type: PLANK_COMPANION_TYPE,
22
+ data: "comments",
23
+ properties: {
24
+ label: [
25
+ "comments label",
26
+ {
27
+ ns: meta.id
28
+ }
29
+ ],
30
+ icon: "ph--chat-text--regular",
31
+ disposition: "hidden",
32
+ position: "hoist"
33
+ }
34
+ }
35
+ ]
36
+ })
37
+ ]);
38
+ export {
39
+ app_graph_builder_default as default
40
+ };
41
+ //# sourceMappingURL=app-graph-builder-6W4UKJDI.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
+ }
@@ -8,10 +8,9 @@ var ThreadCapabilities;
8
8
  (function(ThreadCapabilities2) {
9
9
  ThreadCapabilities2.State = defineCapability(`${THREAD_PLUGIN}/capability/state`);
10
10
  ThreadCapabilities2.MutableState = defineCapability(`${THREAD_PLUGIN}/capability/state`);
11
- ThreadCapabilities2.Activity = defineCapability(`${THREAD_PLUGIN}/capability/activity`);
12
11
  })(ThreadCapabilities || (ThreadCapabilities = {}));
13
12
 
14
13
  export {
15
14
  ThreadCapabilities
16
15
  };
17
- //# sourceMappingURL=chunk-NOOMCX5E.mjs.map
16
+ //# sourceMappingURL=chunk-EP6MRLY7.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/capabilities.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { defineCapability } from '@dxos/app-framework';\nimport { type DeepReadonly } from '@dxos/util';\n\nimport { THREAD_PLUGIN } from '../meta';\nimport { type ViewState, type ThreadState } from '../types';\n\nexport namespace ThreadCapabilities {\n type GetViewState = (subjectId: string) => ViewState;\n export const State = defineCapability<{ state: DeepReadonly<ThreadState>; getViewState: GetViewState }>(\n `${THREAD_PLUGIN}/capability/state`,\n );\n export const MutableState = defineCapability<{ state: ThreadState; getViewState: GetViewState }>(\n `${THREAD_PLUGIN}/capability/state`,\n );\n}\n"],
5
+ "mappings": ";;;;;AAIA,SAASA,wBAAwB;;UAMhBC,qBAAAA;sBAEFC,QAAQC,iBACnB,GAAGC,aAAAA,mBAAgC;sBAExBC,eAAeF,iBAC1B,GAAGC,aAAAA,mBAAgC;AAEvC,GARiBH,uBAAAA,qBAAAA,CAAAA,EAAAA;",
6
+ "names": ["defineCapability", "ThreadCapabilities", "State", "defineCapability", "THREAD_PLUGIN", "MutableState"]
7
+ }
@@ -36,48 +36,31 @@ import { createIntent, useIntentDispatcher } from "@dxos/app-framework";
36
36
  import { ObservabilityAction } from "@dxos/plugin-observability/types";
37
37
  import { getSpace } from "@dxos/react-client/echo";
38
38
  import { useOnTransition } from "@dxos/react-ui";
39
- var useAnalyticsCallback = (spaceId, name, meta) => {
39
+ var useOnEditAnalytics = (message, textBlock, editing) => {
40
40
  const { dispatchPromise: dispatch } = useIntentDispatcher();
41
- return useCallback((dynamicMeta) => {
41
+ const onEdit = useCallback(() => {
42
+ const space = getSpace(message);
43
+ if (!space || !textBlock) {
44
+ return;
45
+ }
42
46
  void dispatch(createIntent(ObservabilityAction.SendEvent, {
43
- name,
47
+ name: "threads.message.update",
44
48
  properties: {
45
- ...meta,
46
- ...dynamicMeta,
47
- spaceId
49
+ spaceId: space.id,
50
+ messageId: message.id,
51
+ messageLength: textBlock?.text.length
48
52
  }
49
53
  }));
50
54
  }, [
51
55
  dispatch,
52
- name,
53
- meta,
54
- spaceId
56
+ message,
57
+ textBlock
55
58
  ]);
59
+ useOnTransition(editing, true, false, onEdit);
56
60
  };
57
- var useOnEditAnalytics = (message, textBlock, editing) => {
58
- const space = getSpace(message);
59
- const onEditAnalytics = useAnalyticsCallback(space?.id, "threads.comment-edited", {
60
- messageId: message.id,
61
- messageLength: textBlock?.text.length
62
- });
63
- useOnTransition(editing, true, false, onEditAnalytics);
64
- };
65
-
66
- // packages/plugins/plugin-thread/src/capabilities/index.ts
67
- import { lazy } from "@dxos/app-framework";
68
- var IntentResolver = lazy(() => import("./intent-resolver-FSG3ZOIM.mjs"));
69
- var Markdown = lazy(() => import("./markdown-MYZQDQFY.mjs"));
70
- var ReactSurface = lazy(() => import("./react-surface-KOYRIK3E.mjs"));
71
- var ThreadSettings = lazy(() => import("./settings-5CREE7BH.mjs"));
72
- var ThreadState = lazy(() => import("./state-HPUFZBB7.mjs"));
73
61
 
74
62
  export {
75
63
  useStatus,
76
- useAnalyticsCallback,
77
- useOnEditAnalytics,
78
- IntentResolver,
79
- Markdown,
80
- ReactSurface,
81
- ThreadState
64
+ useOnEditAnalytics
82
65
  };
83
- //# sourceMappingURL=chunk-SMQYULO6.mjs.map
66
+ //# sourceMappingURL=chunk-QDJ3Y6WF.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/hooks/useStatus.ts", "../../../src/hooks/analytics.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\n\n// TODO(burdon): Generalize and factor out.\nexport const useStatus = (space?: Space, channel?: string) => {\n const [processing, setProcessing] = useState(false);\n useEffect(() => {\n if (!space || !channel) {\n return;\n }\n\n const unsubscribe = space.listen(`status/${channel}`, (status) => {\n const { event } = status.payload ?? {};\n setProcessing(event === 'processing');\n });\n\n const t = setInterval(() => {\n setProcessing((prev: any) => {\n if (typeof prev?.ts === 'number' && Date.now() - prev.ts > 30_000) {\n return undefined;\n } else {\n return prev;\n }\n });\n }, 1_000);\n\n return () => {\n unsubscribe();\n clearInterval(t);\n };\n }, [space, channel]);\n\n return processing;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { type ReactiveObject } from '@dxos/live-object';\nimport { ObservabilityAction } from '@dxos/plugin-observability/types';\nimport { getSpace } from '@dxos/react-client/echo';\nimport { useOnTransition } from '@dxos/react-ui';\nimport { type TextContentBlock } from '@dxos/schema';\n\nexport const useOnEditAnalytics = (\n message: ReactiveObject<any>,\n textBlock: TextContentBlock | undefined,\n editing: boolean,\n) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n\n const onEdit = useCallback(() => {\n const space = getSpace(message);\n if (!space || !textBlock) {\n return;\n }\n\n void dispatch(\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.message.update',\n properties: {\n spaceId: space.id,\n messageId: message.id,\n messageLength: textBlock?.text.length,\n },\n }),\n );\n }, [dispatch, message, textBlock]);\n\n useOnTransition(editing, true, false, onEdit);\n};\n"],
5
+ "mappings": ";AAIA,SAASA,WAAWC,gBAAgB;AAK7B,IAAMC,YAAY,CAACC,OAAeC,YAAAA;AACvC,QAAM,CAACC,YAAYC,aAAAA,IAAiBC,SAAS,KAAA;AAC7CC,YAAU,MAAA;AACR,QAAI,CAACL,SAAS,CAACC,SAAS;AACtB;IACF;AAEA,UAAMK,cAAcN,MAAMO,OAAO,UAAUN,OAAAA,IAAW,CAACO,WAAAA;AACrD,YAAM,EAAEC,MAAK,IAAKD,OAAOE,WAAW,CAAC;AACrCP,oBAAcM,UAAU,YAAA;IAC1B,CAAA;AAEA,UAAME,IAAIC,YAAY,MAAA;AACpBT,oBAAc,CAACU,SAAAA;AACb,YAAI,OAAOA,MAAMC,OAAO,YAAYC,KAAKC,IAAG,IAAKH,KAAKC,KAAK,KAAQ;AACjE,iBAAOG;QACT,OAAO;AACL,iBAAOJ;QACT;MACF,CAAA;IACF,GAAG,GAAA;AAEH,WAAO,MAAA;AACLP,kBAAAA;AACAY,oBAAcP,CAAAA;IAChB;EACF,GAAG;IAACX;IAAOC;GAAQ;AAEnB,SAAOC;AACT;;;AClCA,SAASiB,mBAAmB;AAE5B,SAASC,cAAcC,2BAA2B;AAElD,SAASC,2BAA2B;AACpC,SAASC,gBAAgB;AACzB,SAASC,uBAAuB;AAGzB,IAAMC,qBAAqB,CAChCC,SACAC,WACAC,YAAAA;AAEA,QAAM,EAAEC,iBAAiBC,SAAQ,IAAKC,oBAAAA;AAEtC,QAAMC,SAASC,YAAY,MAAA;AACzB,UAAMC,QAAQC,SAAST,OAAAA;AACvB,QAAI,CAACQ,SAAS,CAACP,WAAW;AACxB;IACF;AAEA,SAAKG,SACHM,aAAaC,oBAAoBC,WAAW;MAC1CC,MAAM;MACNC,YAAY;QACVC,SAASP,MAAMQ;QACfC,WAAWjB,QAAQgB;QACnBE,eAAejB,WAAWkB,KAAKC;MACjC;IACF,CAAA,CAAA;EAEJ,GAAG;IAAChB;IAAUJ;IAASC;GAAU;AAEjCoB,kBAAgBnB,SAAS,MAAM,OAAOI,MAAAA;AACxC;",
6
+ "names": ["useEffect", "useState", "useStatus", "space", "channel", "processing", "setProcessing", "useState", "useEffect", "unsubscribe", "listen", "status", "event", "payload", "t", "setInterval", "prev", "ts", "Date", "now", "undefined", "clearInterval", "useCallback", "createIntent", "useIntentDispatcher", "ObservabilityAction", "getSpace", "useOnTransition", "useOnEditAnalytics", "message", "textBlock", "editing", "dispatchPromise", "dispatch", "useIntentDispatcher", "onEdit", "useCallback", "space", "getSpace", "createIntent", "ObservabilityAction", "SendEvent", "name", "properties", "spaceId", "id", "messageId", "messageLength", "text", "length", "useOnTransition"]
7
+ }
@@ -0,0 +1,17 @@
1
+ // packages/plugins/plugin-thread/src/capabilities/index.ts
2
+ import { lazy } from "@dxos/app-framework";
3
+ var AppGraphBuilder = lazy(() => import("./app-graph-builder-6W4UKJDI.mjs"));
4
+ var IntentResolver = lazy(() => import("./intent-resolver-QAY4FLLM.mjs"));
5
+ var Markdown = lazy(() => import("./markdown-7KXBXCUS.mjs"));
6
+ var ReactSurface = lazy(() => import("./react-surface-MT3OWULR.mjs"));
7
+ var ThreadSettings = lazy(() => import("./settings-4FEC7EAX.mjs"));
8
+ var ThreadState = lazy(() => import("./state-PNMSLKAH.mjs"));
9
+
10
+ export {
11
+ AppGraphBuilder,
12
+ IntentResolver,
13
+ Markdown,
14
+ ReactSurface,
15
+ ThreadState
16
+ };
17
+ //# sourceMappingURL=chunk-S5ZR4FYW.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const Markdown = lazy(() => import('./markdown'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const ThreadSettings = lazy(() => import('./settings'));\nexport const ThreadState = lazy(() => import('./state'));\n\nexport * from './capabilities';\n"],
5
+ "mappings": ";AAIA,SAASA,YAAY;AAEd,IAAMC,kBAAkBC,KAAK,MAAM,OAAO,kCAAA,CAAA;AAC1C,IAAMC,iBAAiBD,KAAK,MAAM,OAAO,gCAAA,CAAA;AACzC,IAAME,WAAWF,KAAK,MAAM,OAAO,yBAAA,CAAA;AACnC,IAAMG,eAAeH,KAAK,MAAM,OAAO,8BAAA,CAAA;AACvC,IAAMI,iBAAiBJ,KAAK,MAAM,OAAO,yBAAA,CAAA;AACzC,IAAMK,cAAcL,KAAK,MAAM,OAAO,sBAAA,CAAA;",
6
+ "names": ["lazy", "AppGraphBuilder", "lazy", "IntentResolver", "Markdown", "ReactSurface", "ThreadSettings", "ThreadState"]
7
+ }
@@ -1,37 +1,10 @@
1
1
  import {
2
- useOnEditAnalytics,
3
- useStatus
4
- } from "./chunk-SMQYULO6.mjs";
2
+ useOnEditAnalytics
3
+ } from "./chunk-QDJ3Y6WF.mjs";
5
4
  import {
6
5
  THREAD_PLUGIN
7
6
  } from "./chunk-WBJLUUOK.mjs";
8
7
 
9
- // packages/plugins/plugin-thread/src/components/ChatContainer.tsx
10
- import React2, { useLayoutEffect, useMemo, useRef as useRef2, useState as useState2 } from "react";
11
- import { createStatic } from "@dxos/echo-schema";
12
- import { makeRef } from "@dxos/live-object";
13
- import { useMembers, useQueue } from "@dxos/react-client/echo";
14
- import { useIdentity as useIdentity2 } from "@dxos/react-client/halo";
15
- import { Icon, ScrollArea, useThemeContext as useThemeContext2, useTranslation as useTranslation2 } from "@dxos/react-ui";
16
- import { createBasicExtensions as createBasicExtensions2, createThemeExtensions as createThemeExtensions2, listener } from "@dxos/react-ui-editor";
17
- import { StackItem } from "@dxos/react-ui-stack";
18
- import { mx as mx3 } from "@dxos/react-ui-theme";
19
- import { MessageTextbox, Thread, ThreadFooter, threadLayout } from "@dxos/react-ui-thread";
20
- import { MessageType } from "@dxos/schema";
21
-
22
- // packages/plugins/plugin-thread/src/components/MessageContainer.tsx
23
- import { EditorView } from "@codemirror/view";
24
- import { Check, PencilSimple, X } from "@phosphor-icons/react";
25
- import React, { forwardRef, useCallback, useEffect, useRef, useState } from "react";
26
- import { Surface } from "@dxos/app-framework";
27
- import { RefArray } from "@dxos/live-object";
28
- import { PublicKey } from "@dxos/react-client";
29
- import { useIdentity } from "@dxos/react-client/halo";
30
- import { Button, ButtonGroup, Tooltip, useOnTransition, useThemeContext, useTranslation } from "@dxos/react-ui";
31
- import { createBasicExtensions, createThemeExtensions, useTextEditor } from "@dxos/react-ui-editor";
32
- import { getSize, hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx as mx2 } from "@dxos/react-ui-theme";
33
- import { MessageHeading, MessageRoot } from "@dxos/react-ui-thread";
34
-
35
8
  // packages/plugins/plugin-thread/src/components/command-extension.ts
36
9
  import { StreamLanguage, HighlightStyle, syntaxHighlighting } from "@codemirror/language";
37
10
  import { tags } from "@dxos/react-ui-editor";
@@ -70,7 +43,7 @@ var getMessageMetadata = (id, identity) => {
70
43
  const fallback = hexToFallback(identity?.identityKey.toHex() ?? "0");
71
44
  return {
72
45
  id,
73
- authorId: identity?.identityKey.toHex(),
46
+ authorId: identity?.did,
74
47
  authorName: identity?.profile?.displayName ?? (identity?.identityKey ? generateName(identity.identityKey.toHex()) : void 0),
75
48
  authorAvatarProps: {
76
49
  hue: identity?.profile?.data?.hue ?? fallback.hue,
@@ -80,14 +53,25 @@ var getMessageMetadata = (id, identity) => {
80
53
  };
81
54
 
82
55
  // packages/plugins/plugin-thread/src/components/MessageContainer.tsx
56
+ import { EditorView } from "@codemirror/view";
57
+ import { Check, PencilSimple, X } from "@phosphor-icons/react";
58
+ import React, { forwardRef, useCallback, useEffect, useRef, useState } from "react";
59
+ import { Surface } from "@dxos/app-framework";
60
+ import { RefArray } from "@dxos/live-object";
61
+ import { PublicKey } from "@dxos/react-client";
62
+ import { useIdentity } from "@dxos/react-client/halo";
63
+ import { Button, ButtonGroup, Tooltip, useOnTransition, useThemeContext, useTranslation } from "@dxos/react-ui";
64
+ import { createBasicExtensions, createThemeExtensions, useTextEditor } from "@dxos/react-ui-editor";
65
+ import { getSize, hoverableControlItem, hoverableControls, hoverableFocusedWithinControls, mx as mx2 } from "@dxos/react-ui-theme";
66
+ import { MessageHeading, MessageRoot } from "@dxos/react-ui-thread";
83
67
  var messageControlClassNames = [
84
68
  "!p-1 !min-bs-0 transition-opacity",
85
69
  hoverableControlItem
86
70
  ];
87
71
  var MessageContainer = ({ message, members, editable = false, onDelete }) => {
88
- const senderIdentity = members.find((member) => message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey))?.identity;
72
+ 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;
89
73
  const messageMetadata = getMessageMetadata(message.id, senderIdentity);
90
- const userIsAuthor = useIdentity()?.identityKey.toHex() === messageMetadata.authorId;
74
+ const userIsAuthor = useIdentity()?.did === messageMetadata.authorId;
91
75
  const [editing, setEditing] = useState(false);
92
76
  const handleDelete = useCallback(() => onDelete?.(message.id), [
93
77
  message,
@@ -164,7 +148,7 @@ var TextboxBlock = ({ block, isAuthor, editing }) => {
164
148
  initialValue: block.text,
165
149
  extensions: [
166
150
  createBasicExtensions({
167
- readonly: !isAuthor || !editing
151
+ readOnly: !isAuthor || !editing
168
152
  }),
169
153
  createThemeExtensions({
170
154
  themeMode
@@ -215,105 +199,9 @@ var MessageBlockObjectTile = /* @__PURE__ */ forwardRef(({ subject }, forwardedR
215
199
  }));
216
200
  });
217
201
 
218
- // packages/plugins/plugin-thread/src/components/ChatContainer.tsx
219
- var ChatContainer = ({ space, dxn, context, current, autoFocusTextbox }) => {
220
- const id = dxn.toString();
221
- const identity = useIdentity2();
222
- const members = useMembers(space?.key);
223
- const queue = useQueue(dxn, {
224
- pollInterval: 1e3
225
- });
226
- const activity = useStatus(space, id);
227
- const { t } = useTranslation2(THREAD_PLUGIN);
228
- const [_count, _setCount] = useState2(0);
229
- const rerenderEditor = () => _setCount((count) => count + 1);
230
- const [autoFocus, setAutoFocus] = useState2(autoFocusTextbox);
231
- const threadScrollRef = useRef2(null);
232
- const { themeMode } = useThemeContext2();
233
- const textboxMetadata = getMessageMetadata(id, identity);
234
- const messageRef = useRef2("");
235
- const extensions = useMemo(() => [
236
- createBasicExtensions2({
237
- placeholder: t("message placeholder")
238
- }),
239
- createThemeExtensions2({
240
- themeMode
241
- }),
242
- listener({
243
- onChange: (text) => messageRef.current = text
244
- }),
245
- command
246
- ], [
247
- themeMode,
248
- _count
249
- ]);
250
- const scrollToEnd = (behavior) => setTimeout(() => threadScrollRef.current?.scrollIntoView({
251
- behavior,
252
- block: "end"
253
- }), 10);
254
- useLayoutEffect(() => {
255
- scrollToEnd("instant");
256
- }, []);
257
- const handleCreate = () => {
258
- if (!messageRef.current?.length || !queue) {
259
- return false;
260
- }
261
- queue.append([
262
- createStatic(MessageType, {
263
- sender: {
264
- identityKey: identity.identityKey.toHex()
265
- },
266
- created: (/* @__PURE__ */ new Date()).toISOString(),
267
- blocks: [
268
- {
269
- type: "text",
270
- text: messageRef.current
271
- }
272
- ],
273
- properties: context ? {
274
- context: makeRef(context)
275
- } : void 0
276
- })
277
- ]);
278
- messageRef.current = "";
279
- setAutoFocus(true);
280
- scrollToEnd("smooth");
281
- rerenderEditor();
282
- return true;
283
- };
284
- return /* @__PURE__ */ React2.createElement(Thread, {
285
- current,
286
- id,
287
- 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"
288
- }, /* @__PURE__ */ React2.createElement(ScrollArea.Root, {
289
- classNames: "col-span-2"
290
- }, /* @__PURE__ */ React2.createElement(ScrollArea.Viewport, {
291
- 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]"
292
- }, /* @__PURE__ */ React2.createElement("div", {
293
- role: "none",
294
- className: mx3(threadLayout, "place-self-end")
295
- }, (queue?.items ?? []).map((message) => /* @__PURE__ */ React2.createElement(MessageContainer, {
296
- key: message.id,
297
- message,
298
- members
299
- }))), /* @__PURE__ */ React2.createElement("div", {
300
- role: "none",
301
- className: "bs-px -mbs-px",
302
- ref: threadScrollRef
303
- }), /* @__PURE__ */ React2.createElement(ScrollArea.Scrollbar, null, /* @__PURE__ */ React2.createElement(ScrollArea.Thumb, null)))), /* @__PURE__ */ React2.createElement(MessageTextbox, {
304
- extensions,
305
- autoFocus,
306
- onSend: handleCreate,
307
- ...textboxMetadata
308
- }), /* @__PURE__ */ React2.createElement(ThreadFooter, {
309
- activity
310
- }, t("activity message")));
311
- };
312
-
313
202
  export {
314
203
  command,
315
204
  getMessageMetadata,
316
- MessageContainer,
317
- ChatContainer
205
+ MessageContainer
318
206
  };
319
- //# sourceMappingURL=chunk-NRMJGYMA.mjs.map
207
+ //# sourceMappingURL=chunk-TFVPUPOO.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/command-extension.ts", "../../../src/util.ts", "../../../src/components/MessageContainer.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { StreamLanguage, HighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { type Extension } from '@codemirror/state';\n\nimport { tags } from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\n/**\n * https://github.com/codemirror/stream-parser/blob/main/test/test-stream-parser.ts\n */\nconst parser = StreamLanguage.define<{ count: number }>({\n startState: () => ({ count: 0 }),\n token: (stream, state) => {\n state.count++;\n if (stream.eatSpace()) {\n return null;\n }\n if (state.count === 1 && stream.match(/^(\\/\\w+)/)) {\n return 'tagName';\n }\n stream.next();\n return null;\n },\n});\n\nconst styles = HighlightStyle.define([\n { tag: tags.tagName, class: mx('dx-tag dx-tag--indigo text-baseText font-medium') },\n]);\n\nexport const command: Extension = [parser, syntaxHighlighting(styles)];\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { generateName } from '@dxos/display-name';\nimport { type PublicKey } from '@dxos/react-client';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { type MessageMetadata } from '@dxos/react-ui-thread';\nimport { hexToFallback } from '@dxos/util';\n\nexport type MessagePropertiesProvider = (identityKey: PublicKey | undefined) => MessageMetadata;\n\nexport const getMessageMetadata = (id: string, identity?: Identity): MessageMetadata => {\n const fallback = hexToFallback(identity?.identityKey.toHex() ?? '0');\n return {\n id,\n authorId: identity?.did,\n authorName:\n identity?.profile?.displayName ??\n (identity?.identityKey ? generateName(identity.identityKey.toHex()) : undefined),\n authorAvatarProps: {\n hue: identity?.profile?.data?.hue ?? fallback.hue,\n emoji: identity?.profile?.data?.emoji ?? fallback.emoji,\n },\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { EditorView } from '@codemirror/view';\nimport { Check, PencilSimple, X } from '@phosphor-icons/react';\nimport React, { forwardRef, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { RefArray } from '@dxos/live-object';\nimport { PublicKey } from '@dxos/react-client';\nimport { type ReactiveEchoObject, type Expando, type SpaceMember } from '@dxos/react-client/echo';\nimport { useIdentity, type Identity } from '@dxos/react-client/halo';\nimport { Button, ButtonGroup, Tooltip, useOnTransition, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { createBasicExtensions, createThemeExtensions, useTextEditor } from '@dxos/react-ui-editor';\nimport {\n getSize,\n hoverableControlItem,\n hoverableControls,\n hoverableFocusedWithinControls,\n mx,\n} from '@dxos/react-ui-theme';\nimport { MessageHeading, MessageRoot } from '@dxos/react-ui-thread';\nimport { type TextContentBlock, type MessageType } from '@dxos/schema';\n\nimport { command } from './command-extension';\nimport { useOnEditAnalytics } from '../hooks';\nimport { THREAD_PLUGIN } from '../meta';\nimport { getMessageMetadata } from '../util';\n\n// TODO(thure): #8149\nconst messageControlClassNames = ['!p-1 !min-bs-0 transition-opacity', hoverableControlItem];\n\nexport const MessageContainer = ({\n message,\n members,\n editable = false,\n onDelete,\n}: {\n message: MessageType;\n members: SpaceMember[];\n editable?: boolean;\n onDelete?: (id: string) => void;\n}) => {\n const senderIdentity = members.find(\n (member) =>\n (message.sender.identityDid && member.identity.did === message.sender.identityDid) ||\n (message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey)),\n )?.identity;\n const messageMetadata = getMessageMetadata(message.id, senderIdentity);\n const userIsAuthor = useIdentity()?.did === messageMetadata.authorId;\n const [editing, setEditing] = useState(false);\n const handleDelete = useCallback(() => onDelete?.(message.id), [message, onDelete]);\n const { t } = useTranslation(THREAD_PLUGIN);\n const editLabel = t(editing ? 'save message label' : 'edit message label');\n const deleteLabel = t('delete message label');\n const textBlock = message.blocks.find((block) => block.type === 'text');\n const references = message.blocks.filter((block) => block.type === 'reference').map((block) => block.reference);\n\n useOnEditAnalytics(message, textBlock, !!editing);\n\n return (\n <MessageRoot {...messageMetadata} classNames={[hoverableControls, hoverableFocusedWithinControls]}>\n <MessageHeading authorName={messageMetadata.authorName} timestamp={messageMetadata.timestamp}>\n <ButtonGroup classNames='mie-1'>\n {userIsAuthor && editable && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button\n variant='ghost'\n data-testid={editing ? 'thread.message.save' : 'thread.message.edit'}\n classNames={messageControlClassNames}\n onClick={() => setEditing((editing) => !editing)}\n >\n <span className='sr-only'>{editLabel}</span>\n {editing ? <Check className={getSize(4)} /> : <PencilSimple className={getSize(4)} />}\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n {editLabel}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n {onDelete && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button\n variant='ghost'\n data-testid='thread.message.delete'\n classNames={messageControlClassNames}\n onClick={() => handleDelete()}\n >\n <span className='sr-only'>{deleteLabel}</span>\n <X className={getSize(4)} />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n {deleteLabel}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n </ButtonGroup>\n </MessageHeading>\n {textBlock && <TextboxBlock block={textBlock} isAuthor={userIsAuthor} editing={editing} />}\n {RefArray.targets(references).map((reference, index) => (\n <MessagePart key={index} part={reference} />\n ))}\n </MessageRoot>\n );\n};\n\nconst MessagePart = ({ part }: { part: Expando }) => {\n return <MessageBlockObjectTile subject={part} />;\n};\n\nconst TextboxBlock = ({\n block,\n isAuthor,\n editing,\n}: {\n block: TextContentBlock;\n editing?: boolean;\n isAuthor?: boolean;\n identity?: Identity;\n}) => {\n const { themeMode } = useThemeContext();\n const inMemoryContentRef = useRef(block.text);\n\n const handleDocumentChange = useCallback((newState: string) => {\n inMemoryContentRef.current = newState;\n }, []);\n\n const saveDocumentChange = useCallback(() => {\n block.text = inMemoryContentRef.current;\n }, [block]);\n\n useOnTransition(editing, true, false, saveDocumentChange);\n\n const { parentRef, focusAttributes, view } = useTextEditor(\n () => ({\n initialValue: block.text,\n extensions: [\n createBasicExtensions({ readOnly: !isAuthor || !editing }),\n createThemeExtensions({ themeMode }),\n command,\n EditorView.updateListener.of((update) => {\n if (update.docChanged) {\n handleDocumentChange(update.state.doc.toString());\n }\n }),\n ],\n }),\n [block.text, editing, isAuthor, themeMode, handleDocumentChange],\n );\n\n useEffect(() => {\n editing && view?.focus();\n }, [editing, view]);\n\n return <div role='none' ref={parentRef} className='mie-4' {...focusAttributes} />;\n};\n\nconst MessageBlockObjectTile = forwardRef<HTMLDivElement, { subject: ReactiveEchoObject<any> }>(\n ({ subject }, forwardedRef) => {\n let title = subject.name ?? subject.title ?? subject.type ?? 'Object';\n if (typeof title !== 'string') {\n title = title?.content ?? '';\n }\n\n return (\n <div\n role='group'\n className={mx('grid col-span-3 py-1 pr-4', hoverableControls, hoverableFocusedWithinControls)}\n ref={forwardedRef}\n >\n <Surface role='card' limit={1} data={{ subject }} fallback={title} />\n </div>\n );\n },\n);\n"],
5
+ "mappings": "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",
6
+ "names": ["StreamLanguage", "HighlightStyle", "syntaxHighlighting", "tags", "mx", "parser", "StreamLanguage", "define", "startState", "count", "token", "stream", "state", "eatSpace", "match", "next", "styles", "HighlightStyle", "tag", "tags", "tagName", "class", "mx", "command", "syntaxHighlighting", "generateName", "hexToFallback", "getMessageMetadata", "id", "identity", "fallback", "hexToFallback", "identityKey", "toHex", "authorId", "did", "authorName", "profile", "displayName", "generateName", "undefined", "authorAvatarProps", "hue", "data", "emoji", "EditorView", "Check", "PencilSimple", "X", "React", "forwardRef", "useCallback", "useEffect", "useRef", "useState", "Surface", "RefArray", "PublicKey", "useIdentity", "Button", "ButtonGroup", "Tooltip", "useOnTransition", "useThemeContext", "useTranslation", "createBasicExtensions", "createThemeExtensions", "useTextEditor", "getSize", "hoverableControlItem", "hoverableControls", "hoverableFocusedWithinControls", "mx", "MessageHeading", "MessageRoot", "messageControlClassNames", "hoverableControlItem", "MessageContainer", "message", "members", "editable", "onDelete", "senderIdentity", "find", "member", "sender", "identityDid", "identity", "did", "identityKey", "PublicKey", "equals", "messageMetadata", "getMessageMetadata", "id", "userIsAuthor", "useIdentity", "authorId", "editing", "setEditing", "useState", "handleDelete", "useCallback", "t", "useTranslation", "THREAD_PLUGIN", "editLabel", "deleteLabel", "textBlock", "blocks", "block", "type", "references", "filter", "map", "reference", "useOnEditAnalytics", "MessageRoot", "classNames", "hoverableControls", "hoverableFocusedWithinControls", "MessageHeading", "authorName", "timestamp", "ButtonGroup", "Tooltip", "Root", "Trigger", "asChild", "Button", "variant", "data-testid", "onClick", "span", "className", "Check", "getSize", "PencilSimple", "Portal", "Content", "Arrow", "X", "TextboxBlock", "isAuthor", "RefArray", "targets", "index", "MessagePart", "key", "part", "MessageBlockObjectTile", "subject", "themeMode", "useThemeContext", "inMemoryContentRef", "useRef", "text", "handleDocumentChange", "newState", "current", "saveDocumentChange", "useOnTransition", "parentRef", "focusAttributes", "view", "useTextEditor", "initialValue", "extensions", "createBasicExtensions", "readOnly", "createThemeExtensions", "command", "EditorView", "updateListener", "of", "update", "docChanged", "state", "doc", "toString", "useEffect", "focus", "div", "role", "ref", "forwardRef", "forwardedRef", "title", "name", "content", "mx", "Surface", "limit", "data", "fallback"]
7
+ }
@@ -6,7 +6,7 @@ import {
6
6
  import { S } from "@dxos/echo-schema";
7
7
  import { ChannelType, ThreadType } from "@dxos/plugin-space/types";
8
8
  import { EchoObjectSchema } from "@dxos/react-client/echo";
9
- import { MessageType } from "@dxos/schema";
9
+ import { ActorSchema, MessageType } from "@dxos/schema";
10
10
  var ThreadAction;
11
11
  (function(ThreadAction2) {
12
12
  const THREAD_ACTION = `${THREAD_PLUGIN}/action`;
@@ -36,8 +36,7 @@ var ThreadAction;
36
36
  ThreadAction2.Create = Create;
37
37
  class Select extends S.TaggedClass()(`${THREAD_ACTION}/select`, {
38
38
  input: S.Struct({
39
- current: S.String,
40
- skipOpen: S.optional(S.Boolean)
39
+ current: S.String
41
40
  }),
42
41
  output: S.Void
43
42
  }) {
@@ -61,15 +60,17 @@ var ThreadAction;
61
60
  }) {
62
61
  }
63
62
  ThreadAction2.Delete = Delete;
64
- class OnMessageAdd extends S.TaggedClass()(`${THREAD_ACTION}/on-message-add`, {
63
+ class AddMessage extends S.TaggedClass()(`${THREAD_ACTION}/add-message`, {
65
64
  input: S.Struct({
65
+ subject: EchoObjectSchema,
66
66
  thread: ThreadType,
67
- subject: EchoObjectSchema
67
+ sender: ActorSchema,
68
+ text: S.String
68
69
  }),
69
70
  output: S.Void
70
71
  }) {
71
72
  }
72
- ThreadAction2.OnMessageAdd = OnMessageAdd;
73
+ ThreadAction2.AddMessage = AddMessage;
73
74
  class DeleteMessage extends S.TaggedClass()(`${THREAD_ACTION}/delete-message`, {
74
75
  input: S.Struct({
75
76
  thread: ThreadType,
@@ -89,4 +90,4 @@ export {
89
90
  ThreadAction,
90
91
  ThreadSettingsSchema
91
92
  };
92
- //# sourceMappingURL=chunk-SJPT347G.mjs.map
93
+ //# sourceMappingURL=chunk-WOG72DWE.mjs.map