@dxos/plugin-thread 0.8.2-main.f11618f → 0.8.2-main.fbd8ed0

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 (145) hide show
  1. package/dist/lib/browser/{ChatContainer-WC6KQDDU.mjs → ChatContainer-H4XTHM3A.mjs} +5 -5
  2. package/dist/lib/browser/ChatContainer-H4XTHM3A.mjs.map +7 -0
  3. package/dist/lib/browser/{app-graph-builder-6W4UKJDI.mjs → app-graph-builder-V7UUHGUI.mjs} +10 -7
  4. package/dist/lib/browser/app-graph-builder-V7UUHGUI.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-AYNXYEKP.mjs → chunk-32EIWOAL.mjs} +1 -1
  6. package/dist/lib/browser/{chunk-AYNXYEKP.mjs.map → chunk-32EIWOAL.mjs.map} +2 -2
  7. package/dist/lib/browser/{chunk-FY5OCUP6.mjs → chunk-I3JK6CBS.mjs} +9 -7
  8. package/dist/lib/browser/chunk-I3JK6CBS.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-OO7PQPV5.mjs +93 -0
  10. package/dist/lib/browser/chunk-OO7PQPV5.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-YRGWE35W.mjs +17 -0
  12. package/dist/lib/browser/index.mjs +10 -10
  13. package/dist/lib/browser/index.mjs.map +3 -3
  14. package/dist/lib/browser/{intent-resolver-3UW6ROYT.mjs → intent-resolver-PDOLX5B7.mjs} +14 -19
  15. package/dist/lib/browser/intent-resolver-PDOLX5B7.mjs.map +7 -0
  16. package/dist/lib/browser/{markdown-7KXBXCUS.mjs → markdown-XJJVUBDO.mjs} +4 -4
  17. package/dist/lib/browser/markdown-XJJVUBDO.mjs.map +7 -0
  18. package/dist/lib/browser/meta.json +1 -1
  19. package/dist/lib/browser/{react-surface-F2AIYIUH.mjs → react-surface-7DJZKIOK.mjs} +19 -20
  20. package/dist/lib/browser/react-surface-7DJZKIOK.mjs.map +7 -0
  21. package/dist/lib/browser/{settings-2VZ7S4SK.mjs → settings-K56QXNJ4.mjs} +2 -2
  22. package/dist/lib/browser/types.mjs +1 -1
  23. package/dist/lib/node/{ChatContainer-LVYQ67PJ.cjs → ChatContainer-TUISUIY7.cjs} +11 -11
  24. package/dist/lib/node/ChatContainer-TUISUIY7.cjs.map +7 -0
  25. package/dist/lib/node/{app-graph-builder-HZNWT4QU.cjs → app-graph-builder-MMM26FEH.cjs} +13 -10
  26. package/dist/lib/node/app-graph-builder-MMM26FEH.cjs.map +7 -0
  27. package/dist/lib/node/{chunk-IX63EKGL.cjs → chunk-AZ275P4V.cjs} +9 -9
  28. package/dist/lib/node/{chunk-RIYLEDQ7.cjs → chunk-ETDNE4Z6.cjs} +13 -11
  29. package/dist/lib/node/chunk-ETDNE4Z6.cjs.map +7 -0
  30. package/dist/lib/node/{chunk-46BSFPBV.cjs → chunk-GRMB5VRN.cjs} +49 -49
  31. package/dist/lib/node/chunk-GRMB5VRN.cjs.map +7 -0
  32. package/dist/lib/node/{chunk-W25MBII2.cjs → chunk-NO6WQR36.cjs} +4 -4
  33. package/dist/lib/node/{chunk-W25MBII2.cjs.map → chunk-NO6WQR36.cjs.map} +2 -2
  34. package/dist/lib/node/index.cjs +17 -17
  35. package/dist/lib/node/index.cjs.map +3 -3
  36. package/dist/lib/node/{intent-resolver-DC6HDNTX.cjs → intent-resolver-MNTL32W2.cjs} +24 -29
  37. package/dist/lib/node/intent-resolver-MNTL32W2.cjs.map +7 -0
  38. package/dist/lib/node/{markdown-L2WMCQKM.cjs → markdown-25NI6Q4Y.cjs} +9 -9
  39. package/dist/lib/node/markdown-25NI6Q4Y.cjs.map +7 -0
  40. package/dist/lib/node/meta.json +1 -1
  41. package/dist/lib/node/{react-surface-GP5IH5LN.cjs → react-surface-KGUZJVRL.cjs} +30 -31
  42. package/dist/lib/node/react-surface-KGUZJVRL.cjs.map +7 -0
  43. package/dist/lib/node/{settings-7MGTJ46L.cjs → settings-4WLSO726.cjs} +6 -6
  44. package/dist/lib/node/types.cjs +3 -3
  45. package/dist/lib/node/types.cjs.map +1 -1
  46. package/dist/lib/node-esm/{ChatContainer-WMOPMK5H.mjs → ChatContainer-G7VTTRDN.mjs} +5 -5
  47. package/dist/lib/node-esm/ChatContainer-G7VTTRDN.mjs.map +7 -0
  48. package/dist/lib/node-esm/{app-graph-builder-M3KK5QJH.mjs → app-graph-builder-QEFJ2KA4.mjs} +10 -7
  49. package/dist/lib/node-esm/app-graph-builder-QEFJ2KA4.mjs.map +7 -0
  50. package/dist/lib/node-esm/chunk-5XUQJWUG.mjs +19 -0
  51. package/dist/lib/node-esm/chunk-A7RLBTTZ.mjs +94 -0
  52. package/dist/lib/node-esm/chunk-A7RLBTTZ.mjs.map +7 -0
  53. package/dist/lib/node-esm/{chunk-T6E5EY7Z.mjs → chunk-IZWN4KAY.mjs} +1 -1
  54. package/dist/lib/node-esm/{chunk-T6E5EY7Z.mjs.map → chunk-IZWN4KAY.mjs.map} +2 -2
  55. package/dist/lib/node-esm/{chunk-7DOPZH6Y.mjs → chunk-V7HLWNAO.mjs} +9 -7
  56. package/dist/lib/node-esm/chunk-V7HLWNAO.mjs.map +7 -0
  57. package/dist/lib/node-esm/index.mjs +10 -10
  58. package/dist/lib/node-esm/index.mjs.map +3 -3
  59. package/dist/lib/node-esm/{intent-resolver-OAMDKGAA.mjs → intent-resolver-X2FNKFSK.mjs} +14 -19
  60. package/dist/lib/node-esm/intent-resolver-X2FNKFSK.mjs.map +7 -0
  61. package/dist/lib/node-esm/{markdown-ZKU23UVD.mjs → markdown-2ERASVEO.mjs} +4 -4
  62. package/dist/lib/node-esm/markdown-2ERASVEO.mjs.map +7 -0
  63. package/dist/lib/node-esm/meta.json +1 -1
  64. package/dist/lib/node-esm/{react-surface-45GRKLWG.mjs → react-surface-DLD2UJRM.mjs} +19 -20
  65. package/dist/lib/node-esm/react-surface-DLD2UJRM.mjs.map +7 -0
  66. package/dist/lib/node-esm/{settings-AJAZ3O47.mjs → settings-5UA6FBMW.mjs} +2 -2
  67. package/dist/lib/node-esm/types.mjs +1 -1
  68. package/dist/types/src/capabilities/app-graph-builder.d.ts +2 -179
  69. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  70. package/dist/types/src/capabilities/index.d.ts +3 -179
  71. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  72. package/dist/types/src/capabilities/intent-resolver.d.ts +2 -2
  73. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  74. package/dist/types/src/capabilities/markdown.d.ts +2 -2
  75. package/dist/types/src/capabilities/markdown.d.ts.map +1 -1
  76. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  77. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  78. package/dist/types/src/components/CommentContainer.d.ts.map +1 -1
  79. package/dist/types/src/components/Comments.stories.d.ts +1 -1
  80. package/dist/types/src/components/Comments.stories.d.ts.map +1 -1
  81. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  82. package/dist/types/src/components/MessageContainer.d.ts +5 -4
  83. package/dist/types/src/components/MessageContainer.d.ts.map +1 -1
  84. package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
  85. package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
  86. package/dist/types/src/components/testing.d.ts +49 -114
  87. package/dist/types/src/components/testing.d.ts.map +1 -1
  88. package/dist/types/src/components/types.d.ts +2 -2
  89. package/dist/types/src/components/types.d.ts.map +1 -1
  90. package/dist/types/src/extensions/threads.d.ts.map +1 -1
  91. package/dist/types/src/hooks/analytics.d.ts +2 -2
  92. package/dist/types/src/hooks/analytics.d.ts.map +1 -1
  93. package/dist/types/src/hooks/useStatus.d.ts.map +1 -1
  94. package/dist/types/src/translations.d.ts +2 -56
  95. package/dist/types/src/translations.d.ts.map +1 -1
  96. package/dist/types/src/types.d.ts +166 -121
  97. package/dist/types/src/types.d.ts.map +1 -1
  98. package/dist/types/src/util.d.ts.map +1 -1
  99. package/dist/types/tsconfig.tsbuildinfo +1 -1
  100. package/package.json +40 -33
  101. package/src/ThreadPlugin.tsx +7 -7
  102. package/src/capabilities/app-graph-builder.ts +31 -21
  103. package/src/capabilities/intent-resolver.ts +10 -11
  104. package/src/capabilities/markdown.ts +4 -4
  105. package/src/components/Chat.stories.tsx +5 -6
  106. package/src/components/ChatContainer.tsx +3 -3
  107. package/src/components/CommentContainer.tsx +25 -49
  108. package/src/components/Comments.stories.tsx +9 -7
  109. package/src/components/MessageContainer.tsx +31 -50
  110. package/src/components/testing.ts +2 -2
  111. package/src/components/types.ts +2 -2
  112. package/src/hooks/analytics.ts +6 -2
  113. package/src/translations.ts +2 -2
  114. package/src/types.ts +40 -40
  115. package/dist/lib/browser/ChatContainer-WC6KQDDU.mjs.map +0 -7
  116. package/dist/lib/browser/app-graph-builder-6W4UKJDI.mjs.map +0 -7
  117. package/dist/lib/browser/chunk-FY5OCUP6.mjs.map +0 -7
  118. package/dist/lib/browser/chunk-Q66FBBJD.mjs +0 -17
  119. package/dist/lib/browser/chunk-WOG72DWE.mjs +0 -93
  120. package/dist/lib/browser/chunk-WOG72DWE.mjs.map +0 -7
  121. package/dist/lib/browser/intent-resolver-3UW6ROYT.mjs.map +0 -7
  122. package/dist/lib/browser/markdown-7KXBXCUS.mjs.map +0 -7
  123. package/dist/lib/browser/react-surface-F2AIYIUH.mjs.map +0 -7
  124. package/dist/lib/node/ChatContainer-LVYQ67PJ.cjs.map +0 -7
  125. package/dist/lib/node/app-graph-builder-HZNWT4QU.cjs.map +0 -7
  126. package/dist/lib/node/chunk-46BSFPBV.cjs.map +0 -7
  127. package/dist/lib/node/chunk-RIYLEDQ7.cjs.map +0 -7
  128. package/dist/lib/node/intent-resolver-DC6HDNTX.cjs.map +0 -7
  129. package/dist/lib/node/markdown-L2WMCQKM.cjs.map +0 -7
  130. package/dist/lib/node/react-surface-GP5IH5LN.cjs.map +0 -7
  131. package/dist/lib/node-esm/ChatContainer-WMOPMK5H.mjs.map +0 -7
  132. package/dist/lib/node-esm/app-graph-builder-M3KK5QJH.mjs.map +0 -7
  133. package/dist/lib/node-esm/chunk-7DOPZH6Y.mjs.map +0 -7
  134. package/dist/lib/node-esm/chunk-E446MGLP.mjs +0 -94
  135. package/dist/lib/node-esm/chunk-E446MGLP.mjs.map +0 -7
  136. package/dist/lib/node-esm/chunk-QUTIMZJ4.mjs +0 -19
  137. package/dist/lib/node-esm/intent-resolver-OAMDKGAA.mjs.map +0 -7
  138. package/dist/lib/node-esm/markdown-ZKU23UVD.mjs.map +0 -7
  139. package/dist/lib/node-esm/react-surface-45GRKLWG.mjs.map +0 -7
  140. /package/dist/lib/browser/{chunk-Q66FBBJD.mjs.map → chunk-YRGWE35W.mjs.map} +0 -0
  141. /package/dist/lib/browser/{settings-2VZ7S4SK.mjs.map → settings-K56QXNJ4.mjs.map} +0 -0
  142. /package/dist/lib/node/{chunk-IX63EKGL.cjs.map → chunk-AZ275P4V.cjs.map} +0 -0
  143. /package/dist/lib/node/{settings-7MGTJ46L.cjs.map → settings-4WLSO726.cjs.map} +0 -0
  144. /package/dist/lib/node-esm/{chunk-QUTIMZJ4.mjs.map → chunk-5XUQJWUG.mjs.map} +0 -0
  145. /package/dist/lib/node-esm/{settings-AJAZ3O47.mjs.map → settings-5UA6FBMW.mjs.map} +0 -0
@@ -2,10 +2,10 @@ import {
2
2
  MessageContainer,
3
3
  command,
4
4
  getMessageMetadata
5
- } from "./chunk-FY5OCUP6.mjs";
5
+ } from "./chunk-I3JK6CBS.mjs";
6
6
  import {
7
7
  useStatus
8
- } from "./chunk-AYNXYEKP.mjs";
8
+ } from "./chunk-32EIWOAL.mjs";
9
9
  import {
10
10
  THREAD_PLUGIN
11
11
  } from "./chunk-WBJLUUOK.mjs";
@@ -21,7 +21,7 @@ import { createBasicExtensions, createThemeExtensions, listener } from "@dxos/re
21
21
  import { StackItem } from "@dxos/react-ui-stack";
22
22
  import { mx } from "@dxos/react-ui-theme";
23
23
  import { MessageTextbox, Thread, ThreadFooter, threadLayout } from "@dxos/react-ui-thread";
24
- import { MessageType } from "@dxos/schema";
24
+ import { DataType } from "@dxos/schema";
25
25
  var ChatHeading = ({ attendableId }) => {
26
26
  const { t } = useTranslation(THREAD_PLUGIN);
27
27
  return /* @__PURE__ */ React.createElement("div", {
@@ -79,7 +79,7 @@ var ChatContainer = ({ space, dxn, context, current, autoFocusTextbox }) => {
79
79
  return false;
80
80
  }
81
81
  queue.append([
82
- create(MessageType, {
82
+ create(DataType.Message, {
83
83
  sender: {
84
84
  identityDid: identity.did
85
85
  },
@@ -135,4 +135,4 @@ export {
135
135
  ChatHeading,
136
136
  ChatContainer_default as default
137
137
  };
138
- //# sourceMappingURL=ChatContainer-WC6KQDDU.mjs.map
138
+ //# sourceMappingURL=ChatContainer-H4XTHM3A.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 { create } 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 { DataType } 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<DataType.Message>(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 create(DataType.Message, {\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", "create", "makeRef", "useMembers", "useQueue", "useIdentity", "Icon", "ScrollArea", "useThemeContext", "useTranslation", "createBasicExtensions", "createThemeExtensions", "listener", "StackItem", "mx", "MessageTextbox", "Thread", "ThreadFooter", "threadLayout", "DataType", "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", "create", "DataType", "Message", "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
+ }
@@ -3,19 +3,22 @@ import {
3
3
  } from "./chunk-WBJLUUOK.mjs";
4
4
 
5
5
  // packages/plugins/plugin-thread/src/capabilities/app-graph-builder.ts
6
+ import { Rx } from "@effect-rx/rx-react";
7
+ import { Option, pipe } from "effect";
6
8
  import { Capabilities, contributes } from "@dxos/app-framework";
7
9
  import { PLANK_COMPANION_TYPE, ATTENDABLE_PATH_SEPARATOR } from "@dxos/plugin-deck/types";
8
10
  import { createExtension } from "@dxos/plugin-graph";
11
+ import { isLiveObject } from "@dxos/react-client/echo";
9
12
  var app_graph_builder_default = (context) => contributes(Capabilities.AppGraphBuilder, [
10
13
  createExtension({
11
14
  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 }) => [
15
+ connector: (node) => Rx.make((get) => pipe(get(node), Option.flatMap((node2) => (
16
+ // TODO(wittjosiah): Support comments on any object.
17
+ isLiveObject(node2.data) && Array.isArray(node2.data.threads) ? Option.some(node2) : Option.none()
18
+ )), Option.map((node2) => [
16
19
  {
17
20
  id: [
18
- node.id,
21
+ node2.id,
19
22
  "comments"
20
23
  ].join(ATTENDABLE_PATH_SEPARATOR),
21
24
  type: PLANK_COMPANION_TYPE,
@@ -32,10 +35,10 @@ var app_graph_builder_default = (context) => contributes(Capabilities.AppGraphBu
32
35
  position: "hoist"
33
36
  }
34
37
  }
35
- ]
38
+ ]), Option.getOrElse(() => [])))
36
39
  })
37
40
  ]);
38
41
  export {
39
42
  app_graph_builder_default as default
40
43
  };
41
- //# sourceMappingURL=app-graph-builder-6W4UKJDI.mjs.map
44
+ //# sourceMappingURL=app-graph-builder-V7UUHGUI.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 { Rx } from '@effect-rx/rx-react';\nimport { Option, pipe } from 'effect';\n\nimport { Capabilities, contributes, type PluginContext } from '@dxos/app-framework';\nimport { PLANK_COMPANION_TYPE, ATTENDABLE_PATH_SEPARATOR } from '@dxos/plugin-deck/types';\nimport { createExtension } from '@dxos/plugin-graph';\nimport { isLiveObject } from '@dxos/react-client/echo';\n\nimport { meta } from '../meta';\n\nexport default (context: PluginContext) =>\n contributes(Capabilities.AppGraphBuilder, [\n createExtension({\n id: `${meta.id}/comments`,\n connector: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) =>\n // TODO(wittjosiah): Support comments on any object.\n isLiveObject(node.data) && Array.isArray(node.data.threads) ? Option.some(node) : Option.none(),\n ),\n Option.map((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 Option.getOrElse(() => []),\n ),\n ),\n }),\n ]);\n"],
5
+ "mappings": ";;;;;AAIA,SAASA,UAAU;AACnB,SAASC,QAAQC,YAAY;AAE7B,SAASC,cAAcC,mBAAuC;AAC9D,SAASC,sBAAsBC,iCAAiC;AAChE,SAASC,uBAAuB;AAChC,SAASC,oBAAoB;AAI7B,IAAA,4BAAe,CAACC,YACdC,YAAYC,aAAaC,iBAAiB;EACxCC,gBAAgB;IACdC,IAAI,GAAGC,KAAKD,EAAE;IACdE,WAAW,CAACC,SACVC,GAAGC,KAAK,CAACC,QACPC,KACED,IAAIH,IAAAA,GACJK,OAAOC,QAAQ,CAACN;;MAEdO,aAAaP,MAAKQ,IAAI,KAAKC,MAAMC,QAAQV,MAAKQ,KAAKG,OAAO,IAAIN,OAAOO,KAAKZ,KAAAA,IAAQK,OAAOQ,KAAI;KAAA,GAE/FR,OAAOS,IAAI,CAACd,UAAS;MACnB;QACEH,IAAI;UAACG,MAAKH;UAAI;UAAYkB,KAAKC,yBAAAA;QAC/BC,MAAMC;QACNV,MAAM;QACNW,YAAY;UACVC,OAAO;YAAC;YAAkB;cAAEC,IAAIvB,KAAKD;YAAG;;UACxCyB,MAAM;UACNC,aAAa;UACbC,UAAU;QACZ;MACF;KACD,GACDnB,OAAOoB,UAAU,MAAM,CAAA,CAAE,CAAA,CAAA;EAGjC,CAAA;CACD;",
6
+ "names": ["Rx", "Option", "pipe", "Capabilities", "contributes", "PLANK_COMPANION_TYPE", "ATTENDABLE_PATH_SEPARATOR", "createExtension", "isLiveObject", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "meta", "connector", "node", "Rx", "make", "get", "pipe", "Option", "flatMap", "isLiveObject", "data", "Array", "isArray", "threads", "some", "none", "map", "join", "ATTENDABLE_PATH_SEPARATOR", "type", "PLANK_COMPANION_TYPE", "properties", "label", "ns", "icon", "disposition", "position", "getOrElse"]
7
+ }
@@ -63,4 +63,4 @@ export {
63
63
  useStatus,
64
64
  useOnEditAnalytics
65
65
  };
66
- //# sourceMappingURL=chunk-AYNXYEKP.mjs.map
66
+ //# sourceMappingURL=chunk-32EIWOAL.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/hooks/useStatus.ts", "../../../src/hooks/analytics.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type Space } from '@dxos/react-client/echo';\n\n// TODO(burdon): Generalize and factor out.\nexport const useStatus = (space?: Space, channel?: string) => {\n const [processing, setProcessing] = useState(false);\n useEffect(() => {\n if (!space || !channel) {\n return;\n }\n\n const unsubscribe = space.listen(`status/${channel}`, (status) => {\n const { event } = status.payload ?? {};\n setProcessing(event === 'processing');\n });\n\n const t = setInterval(() => {\n setProcessing((prev: any) => {\n if (typeof prev?.ts === 'number' && Date.now() - prev.ts > 30_000) {\n return undefined;\n } else {\n return prev;\n }\n });\n }, 1_000);\n\n return () => {\n unsubscribe();\n clearInterval(t);\n };\n }, [space, channel]);\n\n return processing;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { type Live } 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 = (message: Live<any>, textBlock: TextContentBlock | undefined, editing: boolean) => {\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,CAACC,SAAoBC,WAAyCC,YAAAA;AAC9F,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;",
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 Live } 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 DataType } from '@dxos/schema';\n\nexport const useOnEditAnalytics = (\n message: Live<any>,\n textBlock: DataType.MessageBlock.Text | 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
6
  "names": ["useEffect", "useState", "useStatus", "space", "channel", "processing", "setProcessing", "useState", "useEffect", "unsubscribe", "listen", "status", "event", "payload", "t", "setInterval", "prev", "ts", "Date", "now", "undefined", "clearInterval", "useCallback", "createIntent", "useIntentDispatcher", "ObservabilityAction", "getSpace", "useOnTransition", "useOnEditAnalytics", "message", "textBlock", "editing", "dispatchPromise", "dispatch", "useIntentDispatcher", "onEdit", "useCallback", "space", "getSpace", "createIntent", "ObservabilityAction", "SendEvent", "name", "properties", "spaceId", "id", "messageId", "messageLength", "text", "length", "useOnTransition"]
7
7
  }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  useOnEditAnalytics
3
- } from "./chunk-AYNXYEKP.mjs";
3
+ } from "./chunk-32EIWOAL.mjs";
4
4
  import {
5
5
  THREAD_PLUGIN
6
6
  } from "./chunk-WBJLUUOK.mjs";
@@ -94,8 +94,9 @@ var MessageContainer = ({ message, members, editable = false, onDelete }) => {
94
94
  timestamp: messageMetadata.timestamp
95
95
  }, /* @__PURE__ */ React.createElement(ButtonGroup, {
96
96
  classNames: "mie-1"
97
- }, userIsAuthor && editable && /* @__PURE__ */ React.createElement(Tooltip.Root, null, /* @__PURE__ */ React.createElement(Tooltip.Trigger, {
98
- asChild: true
97
+ }, userIsAuthor && editable && /* @__PURE__ */ React.createElement(Tooltip.Trigger, {
98
+ asChild: true,
99
+ content: editLabel
99
100
  }, /* @__PURE__ */ React.createElement(Button, {
100
101
  variant: "ghost",
101
102
  "data-testid": editing ? "thread.message.save" : "thread.message.edit",
@@ -107,8 +108,9 @@ var MessageContainer = ({ message, members, editable = false, onDelete }) => {
107
108
  className: getSize(4)
108
109
  }) : /* @__PURE__ */ React.createElement(PencilSimple, {
109
110
  className: getSize(4)
110
- }))), /* @__PURE__ */ React.createElement(Tooltip.Portal, null, /* @__PURE__ */ React.createElement(Tooltip.Content, null, editLabel, /* @__PURE__ */ React.createElement(Tooltip.Arrow, null)))), onDelete && /* @__PURE__ */ React.createElement(Tooltip.Root, null, /* @__PURE__ */ React.createElement(Tooltip.Trigger, {
111
- asChild: true
111
+ }))), onDelete && /* @__PURE__ */ React.createElement(Tooltip.Trigger, {
112
+ asChild: true,
113
+ content: deleteLabel
112
114
  }, /* @__PURE__ */ React.createElement(Button, {
113
115
  variant: "ghost",
114
116
  "data-testid": "thread.message.delete",
@@ -118,7 +120,7 @@ var MessageContainer = ({ message, members, editable = false, onDelete }) => {
118
120
  className: "sr-only"
119
121
  }, deleteLabel), /* @__PURE__ */ React.createElement(X, {
120
122
  className: getSize(4)
121
- }))), /* @__PURE__ */ React.createElement(Tooltip.Portal, null, /* @__PURE__ */ React.createElement(Tooltip.Content, null, deleteLabel, /* @__PURE__ */ React.createElement(Tooltip.Arrow, null)))))), textBlock && /* @__PURE__ */ React.createElement(TextboxBlock, {
123
+ }))))), textBlock && /* @__PURE__ */ React.createElement(TextboxBlock, {
122
124
  block: textBlock,
123
125
  isAuthor: userIsAuthor,
124
126
  editing
@@ -204,4 +206,4 @@ export {
204
206
  getMessageMetadata,
205
207
  MessageContainer
206
208
  };
207
- //# sourceMappingURL=chunk-FY5OCUP6.mjs.map
209
+ //# sourceMappingURL=chunk-I3JK6CBS.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 AnyLiveObject, 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 DataType } 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 type MessageContainerProps = {\n message: DataType.Message;\n members: SpaceMember[];\n editable?: boolean;\n onDelete?: (id: string) => void;\n};\n\nexport const MessageContainer = ({ message, members, editable = false, onDelete }: MessageContainerProps) => {\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.Trigger asChild content={editLabel}>\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 )}\n {onDelete && (\n <Tooltip.Trigger asChild content={deleteLabel}>\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 )}\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: DataType.MessageBlock.Text;\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: AnyLiveObject<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", "Trigger", "asChild", "content", "Button", "variant", "data-testid", "onClick", "span", "className", "Check", "getSize", "PencilSimple", "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", "mx", "Surface", "limit", "data", "fallback"]
7
+ }
@@ -0,0 +1,93 @@
1
+ import {
2
+ THREAD_PLUGIN
3
+ } from "./chunk-WBJLUUOK.mjs";
4
+
5
+ // packages/plugins/plugin-thread/src/types.ts
6
+ import { Schema } from "effect";
7
+ import { Type } from "@dxos/echo";
8
+ import { ChannelType, ThreadType } from "@dxos/plugin-space/types";
9
+ import { EchoObjectSchema } from "@dxos/react-client/echo";
10
+ import { DataType } from "@dxos/schema";
11
+ var ThreadAction;
12
+ (function(ThreadAction2) {
13
+ const THREAD_ACTION = `${THREAD_PLUGIN}/action`;
14
+ class CreateChannel extends Schema.TaggedClass()(`${THREAD_ACTION}/create-channel`, {
15
+ input: Schema.Struct({
16
+ spaceId: Type.SpaceId,
17
+ name: Schema.optional(Schema.String)
18
+ }),
19
+ output: Schema.Struct({
20
+ object: ChannelType
21
+ })
22
+ }) {
23
+ }
24
+ ThreadAction2.CreateChannel = CreateChannel;
25
+ class Create extends Schema.TaggedClass()(`${THREAD_ACTION}/create`, {
26
+ input: Schema.Struct({
27
+ name: Schema.optional(Schema.String),
28
+ cursor: Schema.String,
29
+ subject: EchoObjectSchema
30
+ }),
31
+ output: Schema.Struct({
32
+ object: ThreadType
33
+ })
34
+ }) {
35
+ }
36
+ ThreadAction2.Create = Create;
37
+ class Delete extends Schema.TaggedClass()(`${THREAD_ACTION}/delete`, {
38
+ input: Schema.Struct({
39
+ thread: ThreadType,
40
+ subject: EchoObjectSchema,
41
+ cursor: Schema.optional(Schema.String)
42
+ }),
43
+ output: Schema.Void
44
+ }) {
45
+ }
46
+ ThreadAction2.Delete = Delete;
47
+ class Select extends Schema.TaggedClass()(`${THREAD_ACTION}/select`, {
48
+ input: Schema.Struct({
49
+ current: Schema.String
50
+ }),
51
+ output: Schema.Void
52
+ }) {
53
+ }
54
+ ThreadAction2.Select = Select;
55
+ class ToggleResolved extends Schema.TaggedClass()(`${THREAD_ACTION}/toggle-resolved`, {
56
+ input: Schema.Struct({
57
+ thread: ThreadType
58
+ }),
59
+ output: Schema.Void
60
+ }) {
61
+ }
62
+ ThreadAction2.ToggleResolved = ToggleResolved;
63
+ class AddMessage extends Schema.TaggedClass()(`${THREAD_ACTION}/add-message`, {
64
+ input: Schema.Struct({
65
+ subject: EchoObjectSchema,
66
+ thread: ThreadType,
67
+ sender: DataType.Actor,
68
+ text: Schema.String
69
+ }),
70
+ output: Schema.Void
71
+ }) {
72
+ }
73
+ ThreadAction2.AddMessage = AddMessage;
74
+ class DeleteMessage extends Schema.TaggedClass()(`${THREAD_ACTION}/delete-message`, {
75
+ input: Schema.Struct({
76
+ thread: ThreadType,
77
+ subject: EchoObjectSchema,
78
+ messageId: Schema.String,
79
+ message: Schema.optional(DataType.Message),
80
+ messageIndex: Schema.optional(Schema.Number)
81
+ }),
82
+ output: Schema.Void
83
+ }) {
84
+ }
85
+ ThreadAction2.DeleteMessage = DeleteMessage;
86
+ })(ThreadAction || (ThreadAction = {}));
87
+ var ThreadSettingsSchema = Schema.mutable(Schema.Struct({}));
88
+
89
+ export {
90
+ ThreadAction,
91
+ ThreadSettingsSchema
92
+ };
93
+ //# sourceMappingURL=chunk-OO7PQPV5.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 { Schema } from 'effect';\n\nimport { Type } from '@dxos/echo';\nimport { ChannelType, ThreadType } from '@dxos/plugin-space/types';\nimport { EchoObjectSchema } from '@dxos/react-client/echo';\nimport { DataType } 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 Schema.TaggedClass<CreateChannel>()(`${THREAD_ACTION}/create-channel`, {\n input: Schema.Struct({\n spaceId: Type.SpaceId,\n name: Schema.optional(Schema.String),\n }),\n output: Schema.Struct({\n object: ChannelType,\n }),\n }) {}\n\n export class Create extends Schema.TaggedClass<Create>()(`${THREAD_ACTION}/create`, {\n input: Schema.Struct({\n name: Schema.optional(Schema.String),\n cursor: Schema.String,\n subject: EchoObjectSchema,\n }),\n output: Schema.Struct({\n object: ThreadType,\n }),\n }) {}\n\n export class Delete extends Schema.TaggedClass<Delete>()(`${THREAD_ACTION}/delete`, {\n input: Schema.Struct({\n thread: ThreadType,\n subject: EchoObjectSchema,\n cursor: Schema.optional(Schema.String),\n }),\n output: Schema.Void,\n }) {}\n\n export class Select extends Schema.TaggedClass<Select>()(`${THREAD_ACTION}/select`, {\n input: Schema.Struct({\n current: Schema.String,\n }),\n output: Schema.Void,\n }) {}\n\n export class ToggleResolved extends Schema.TaggedClass<ToggleResolved>()(`${THREAD_ACTION}/toggle-resolved`, {\n input: Schema.Struct({\n thread: ThreadType,\n }),\n output: Schema.Void,\n }) {}\n\n export class AddMessage extends Schema.TaggedClass<AddMessage>()(`${THREAD_ACTION}/add-message`, {\n input: Schema.Struct({\n subject: EchoObjectSchema,\n thread: ThreadType,\n sender: DataType.Actor,\n text: Schema.String,\n }),\n output: Schema.Void,\n }) {}\n\n export class DeleteMessage extends Schema.TaggedClass<DeleteMessage>()(`${THREAD_ACTION}/delete-message`, {\n input: Schema.Struct({\n thread: ThreadType,\n subject: EchoObjectSchema,\n messageId: Schema.String,\n message: Schema.optional(DataType.Message),\n messageIndex: Schema.optional(Schema.Number),\n }),\n output: Schema.Void,\n }) {}\n}\n\nexport const ThreadSettingsSchema = Schema.mutable(Schema.Struct({}));\nexport type ThreadSettingsProps = Schema.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,cAAc;AAEvB,SAASC,YAAY;AACrB,SAASC,aAAaC,kBAAkB;AACxC,SAASC,wBAAwB;AACjC,SAASC,gBAAgB;;UAIRC,eAAAA;AACf,QAAMC,gBAAgB,GAAGC,aAAAA;EAElB,MAAMC,sBAAsBC,OAAOC,YAAW,EAAkB,GAAGJ,aAAAA,mBAAgC;IACxGK,OAAOF,OAAOG,OAAO;MACnBC,SAASC,KAAKC;MACdC,MAAMP,OAAOQ,SAASR,OAAOS,MAAM;IACrC,CAAA;IACAC,QAAQV,OAAOG,OAAO;MACpBQ,QAAQC;IACV,CAAA;EACF,CAAA,EAAA;EAAI;gBARSb,gBAAAA;EAUN,MAAMc,eAAeb,OAAOC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAClFK,OAAOF,OAAOG,OAAO;MACnBI,MAAMP,OAAOQ,SAASR,OAAOS,MAAM;MACnCK,QAAQd,OAAOS;MACfM,SAASC;IACX,CAAA;IACAN,QAAQV,OAAOG,OAAO;MACpBQ,QAAQM;IACV,CAAA;EACF,CAAA,EAAA;EAAI;gBATSJ,SAAAA;EAWN,MAAMK,eAAelB,OAAOC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAClFK,OAAOF,OAAOG,OAAO;MACnBgB,QAAQF;MACRF,SAASC;MACTF,QAAQd,OAAOQ,SAASR,OAAOS,MAAM;IACvC,CAAA;IACAC,QAAQV,OAAOoB;EACjB,CAAA,EAAA;EAAI;gBAPSF,SAAAA;EASN,MAAMG,eAAerB,OAAOC,YAAW,EAAW,GAAGJ,aAAAA,WAAwB;IAClFK,OAAOF,OAAOG,OAAO;MACnBmB,SAAStB,OAAOS;IAClB,CAAA;IACAC,QAAQV,OAAOoB;EACjB,CAAA,EAAA;EAAI;gBALSC,SAAAA;EAON,MAAME,uBAAuBvB,OAAOC,YAAW,EAAmB,GAAGJ,aAAAA,oBAAiC;IAC3GK,OAAOF,OAAOG,OAAO;MACnBgB,QAAQF;IACV,CAAA;IACAP,QAAQV,OAAOoB;EACjB,CAAA,EAAA;EAAI;gBALSG,iBAAAA;EAON,MAAMC,mBAAmBxB,OAAOC,YAAW,EAAe,GAAGJ,aAAAA,gBAA6B;IAC/FK,OAAOF,OAAOG,OAAO;MACnBY,SAASC;MACTG,QAAQF;MACRQ,QAAQC,SAASC;MACjBC,MAAM5B,OAAOS;IACf,CAAA;IACAC,QAAQV,OAAOoB;EACjB,CAAA,EAAA;EAAI;gBARSI,aAAAA;EAUN,MAAMK,sBAAsB7B,OAAOC,YAAW,EAAkB,GAAGJ,aAAAA,mBAAgC;IACxGK,OAAOF,OAAOG,OAAO;MACnBgB,QAAQF;MACRF,SAASC;MACTc,WAAW9B,OAAOS;MAClBsB,SAAS/B,OAAOQ,SAASkB,SAASM,OAAO;MACzCC,cAAcjC,OAAOQ,SAASR,OAAOkC,MAAM;IAC7C,CAAA;IACAxB,QAAQV,OAAOoB;EACjB,CAAA,EAAA;EAAI;gBATSS,gBAAAA;AAUf,GAnEiBjC,iBAAAA,eAAAA,CAAAA,EAAAA;AAqEV,IAAMuC,uBAAuBnC,OAAOoC,QAAQpC,OAAOG,OAAO,CAAC,CAAA,CAAA;",
6
+ "names": ["Schema", "Type", "ChannelType", "ThreadType", "EchoObjectSchema", "DataType", "ThreadAction", "THREAD_ACTION", "THREAD_PLUGIN", "CreateChannel", "Schema", "TaggedClass", "input", "Struct", "spaceId", "Type", "SpaceId", "name", "optional", "String", "output", "object", "ChannelType", "Create", "cursor", "subject", "EchoObjectSchema", "ThreadType", "Delete", "thread", "Void", "Select", "current", "ToggleResolved", "AddMessage", "sender", "DataType", "Actor", "text", "DeleteMessage", "messageId", "message", "Message", "messageIndex", "Number", "ThreadSettingsSchema", "mutable"]
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-V7UUHGUI.mjs"));
4
+ var IntentResolver = lazy(() => import("./intent-resolver-PDOLX5B7.mjs"));
5
+ var Markdown = lazy(() => import("./markdown-XJJVUBDO.mjs"));
6
+ var ReactSurface = lazy(() => import("./react-surface-7DJZKIOK.mjs"));
7
+ var ThreadSettings = lazy(() => import("./settings-K56QXNJ4.mjs"));
8
+ var ThreadState = lazy(() => import("./state-KBGI3QTR.mjs"));
9
+
10
+ export {
11
+ AppGraphBuilder,
12
+ IntentResolver,
13
+ Markdown,
14
+ ReactSurface,
15
+ ThreadState
16
+ };
17
+ //# sourceMappingURL=chunk-YRGWE35W.mjs.map
@@ -4,17 +4,17 @@ import {
4
4
  Markdown,
5
5
  ReactSurface,
6
6
  ThreadState
7
- } from "./chunk-Q66FBBJD.mjs";
7
+ } from "./chunk-YRGWE35W.mjs";
8
8
  import {
9
9
  ThreadCapabilities
10
10
  } from "./chunk-EP6MRLY7.mjs";
11
11
  import {
12
12
  useOnEditAnalytics,
13
13
  useStatus
14
- } from "./chunk-AYNXYEKP.mjs";
14
+ } from "./chunk-32EIWOAL.mjs";
15
15
  import {
16
16
  ThreadAction
17
- } from "./chunk-WOG72DWE.mjs";
17
+ } from "./chunk-OO7PQPV5.mjs";
18
18
  import {
19
19
  THREAD_ITEM,
20
20
  THREAD_PLUGIN,
@@ -36,7 +36,7 @@ import { SpaceCapabilities, ThreadEvents as ThreadEvents2 } from "@dxos/plugin-s
36
36
  import { ChannelType as ChannelType2, defineObjectForm, ThreadType } from "@dxos/plugin-space/types";
37
37
  import { RefArray } from "@dxos/react-client/echo";
38
38
  import { translations as threadTranslations } from "@dxos/react-ui-thread";
39
- import { MessageType, MessageTypeV1, MessageTypeV1ToV2 } from "@dxos/schema";
39
+ import { DataType } from "@dxos/schema";
40
40
 
41
41
  // packages/plugins/plugin-thread/src/translations.ts
42
42
  import { ChannelType } from "@dxos/plugin-space/types";
@@ -61,8 +61,8 @@ var translations_default = [
61
61
  "comments heading": "Comments",
62
62
  "chat heading": "Chat",
63
63
  "draft button": "DRAFT",
64
- "no comments title": "No comments (yet)",
65
- "no comments message": "To start a comment thread, select a range of text in a document and click the <commentIcon></commentIcon> Create comment button in the toolbar.",
64
+ "no comments title": "Comments",
65
+ "no comments message": "Click on the <commentIcon></commentIcon> button in the document toolbar to create a comment thread on the selected text.",
66
66
  "toggle show resolved": "Show resolved",
67
67
  "unnamed object threads label": "Threads",
68
68
  "mark as resolved label": "Mark as resolved",
@@ -121,7 +121,7 @@ var ThreadPlugin = () => definePlugin(meta, [
121
121
  }
122
122
  }),
123
123
  contributes(Capabilities.Metadata, {
124
- id: MessageType.typename,
124
+ id: DataType.Message.typename,
125
125
  metadata: {
126
126
  // TODO(wittjosiah): Move out of metadata.
127
127
  loadReferences: (message) => []
@@ -166,15 +166,15 @@ var ThreadPlugin = () => definePlugin(meta, [
166
166
  activatesOn: ClientEvents.SetupSchema,
167
167
  activate: () => contributes(ClientCapabilities.Schema, [
168
168
  ThreadType,
169
- MessageType,
170
- MessageTypeV1
169
+ DataType.Message,
170
+ DataType.MessageV1
171
171
  ])
172
172
  }),
173
173
  defineModule({
174
174
  id: `${meta.id}/module/migration`,
175
175
  activatesOn: ClientEvents.SetupMigration,
176
176
  activate: () => contributes(ClientCapabilities.Migration, [
177
- MessageTypeV1ToV2
177
+ DataType.MessageV1ToV2
178
178
  ])
179
179
  }),
180
180
  defineModule({
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/events.ts", "../../../src/ThreadPlugin.tsx", "../../../src/translations.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Events } from '@dxos/app-framework';\n\nimport { THREAD_PLUGIN } from './meta';\n\nexport namespace ThreadEvents {\n export const SetupActivity = Events.createStateEvent(`${THREAD_PLUGIN}/setup-activity`);\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Capabilities, contributes, createIntent, defineModule, definePlugin, Events } from '@dxos/app-framework';\nimport { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';\nimport { MarkdownEvents } from '@dxos/plugin-markdown';\nimport { SpaceCapabilities, ThreadEvents } from '@dxos/plugin-space';\nimport { ChannelType, defineObjectForm, ThreadType } from '@dxos/plugin-space/types';\nimport { type ReactiveEchoObject, RefArray } from '@dxos/react-client/echo';\nimport { translations as threadTranslations } from '@dxos/react-ui-thread';\nimport { MessageType, MessageTypeV1, MessageTypeV1ToV2 } from '@dxos/schema';\n\nimport { AppGraphBuilder, IntentResolver, Markdown, ReactSurface, ThreadState } from './capabilities';\nimport { ThreadEvents as LocalThreadEvents } from './events';\nimport { meta, THREAD_ITEM } from './meta';\nimport translations from './translations';\nimport { ThreadAction } from './types';\n\n// TODO(Zan): Every instance of `cursor` should be replaced with `anchor`.\n// NOTE(burdon): Review/discuss CursorConverter semantics.\nexport const ThreadPlugin = () =>\n definePlugin(meta, [\n // TODO(wittjosiah): Currently not used but leaving because there will likely be settings for threads again.\n // defineModule({\n // id: `${meta.id}/module/settings`,\n // activatesOn: Events.SetupSettings,\n // activate: ThreadSettings,\n // }),\n defineModule({\n id: `${meta.id}/module/state`,\n // TODO(wittjosiah): Does not integrate with settings store.\n // Should this be a different event?\n // Should settings store be renamed to be more generic?\n activatesOn: Events.SetupSettings,\n activate: ThreadState,\n }),\n defineModule({\n id: `${meta.id}/module/translations`,\n activatesOn: Events.SetupTranslations,\n activate: () => contributes(Capabilities.Translations, [...translations, ...threadTranslations]),\n }),\n defineModule({\n id: `${meta.id}/module/metadata`,\n activatesOn: Events.SetupMetadata,\n activate: () => [\n contributes(Capabilities.Metadata, {\n id: ChannelType.typename,\n metadata: {\n icon: 'ph--hash--regular',\n },\n }),\n contributes(Capabilities.Metadata, {\n id: ThreadType.typename,\n metadata: {\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: async (thread: ThreadType) => await RefArray.loadAll(thread.messages ?? []),\n },\n }),\n contributes(Capabilities.Metadata, {\n id: MessageType.typename,\n metadata: {\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: (message: MessageType) => [], // loadObjectReferences(message, (message) => [...message.parts, message.context]),\n },\n }),\n contributes(Capabilities.Metadata, {\n id: THREAD_ITEM,\n metadata: {\n parse: (item: ReactiveEchoObject<any>, type: string) => {\n switch (type) {\n case 'node':\n return { id: item.id, label: item.title, data: item };\n case 'object':\n return item;\n case 'view-object':\n return { id: `${item.id}-view`, object: item };\n }\n },\n },\n }),\n ],\n }),\n defineModule({\n id: `${meta.id}/module/object-form`,\n activatesOn: ClientEvents.SetupSchema,\n activate: () =>\n contributes(\n SpaceCapabilities.ObjectForm,\n defineObjectForm({\n objectSchema: ChannelType,\n getIntent: (_, options) => createIntent(ThreadAction.CreateChannel, { spaceId: options.space.id }),\n }),\n ),\n }),\n defineModule({\n id: `${meta.id}/module/schema`,\n activatesOn: ClientEvents.SetupSchema,\n activate: () => contributes(ClientCapabilities.Schema, [ThreadType, MessageType, MessageTypeV1]),\n }),\n defineModule({\n id: `${meta.id}/module/migration`,\n activatesOn: ClientEvents.SetupMigration,\n activate: () => contributes(ClientCapabilities.Migration, [MessageTypeV1ToV2]),\n }),\n defineModule({\n id: `${meta.id}/module/markdown`,\n activatesOn: MarkdownEvents.SetupExtensions,\n activate: Markdown,\n }),\n defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.SetupReactSurface,\n // TODO(wittjosiah): Should occur before the comments thread is loaded when surfaces activation is more granular.\n activatesBefore: [ThreadEvents.SetupThread, LocalThreadEvents.SetupActivity],\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/intent-resolver`,\n activatesOn: Events.SetupIntentResolver,\n activate: IntentResolver,\n }),\n defineModule({\n id: `${meta.id}/module/app-graph-builder`,\n activatesOn: Events.SetupAppGraph,\n activate: AppGraphBuilder,\n }),\n ]);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { ChannelType } from '@dxos/plugin-space/types';\n\nimport { THREAD_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [ChannelType.typename]: {\n 'typename label': 'Channel',\n 'object name placeholder': 'New channel',\n },\n [THREAD_PLUGIN]: {\n 'plugin name': 'Threads',\n 'channel title label': 'Title',\n 'message placeholder': 'Reply…',\n 'activity message': 'Processing…',\n 'anonymous label': 'Anonymous',\n 'delete message block label': 'Delete message block',\n 'detached thread label': 'Referenced content was removed',\n 'delete thread label': 'Delete thread',\n 'thread deleted label': 'You deleted a thread.',\n 'message deleted label': 'You deleted a message.',\n 'comments heading': 'Comments',\n 'chat heading': 'Chat',\n 'draft button': 'DRAFT',\n 'no comments title': 'No comments (yet)',\n 'no comments message':\n 'To start a comment thread, select a range of text in a document and click the <commentIcon></commentIcon> Create comment button in the toolbar.',\n 'toggle show resolved': 'Show resolved',\n 'unnamed object threads label': 'Threads',\n 'mark as resolved label': 'Mark as resolved',\n 'mark as unresolved label': 'Mark as unresolved',\n 'save message label': 'Save',\n 'edit message label': 'Edit',\n 'delete message label': 'Delete message',\n 'open comments panel label': 'Show Comments',\n 'comments label': 'Comments',\n 'show all label': 'All comments',\n 'show unresolved label': 'Unresolved only',\n },\n },\n },\n];\n"],
5
- "mappings": "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",
6
- "names": ["Events", "ThreadEvents", "SetupActivity", "Events", "createStateEvent", "THREAD_PLUGIN", "Capabilities", "contributes", "createIntent", "defineModule", "definePlugin", "Events", "ClientCapabilities", "ClientEvents", "MarkdownEvents", "SpaceCapabilities", "ThreadEvents", "ChannelType", "defineObjectForm", "ThreadType", "RefArray", "translations", "threadTranslations", "MessageType", "MessageTypeV1", "MessageTypeV1ToV2", "ChannelType", "ChannelType", "typename", "THREAD_PLUGIN", "ThreadPlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "Events", "SetupSettings", "activate", "ThreadState", "SetupTranslations", "contributes", "Capabilities", "Translations", "translations", "threadTranslations", "SetupMetadata", "Metadata", "ChannelType", "typename", "metadata", "icon", "ThreadType", "loadReferences", "thread", "RefArray", "loadAll", "messages", "MessageType", "message", "THREAD_ITEM", "parse", "item", "type", "label", "title", "data", "object", "ClientEvents", "SetupSchema", "SpaceCapabilities", "ObjectForm", "defineObjectForm", "objectSchema", "getIntent", "_", "options", "createIntent", "ThreadAction", "CreateChannel", "spaceId", "space", "ClientCapabilities", "Schema", "MessageTypeV1", "SetupMigration", "Migration", "MessageTypeV1ToV2", "MarkdownEvents", "SetupExtensions", "Markdown", "SetupReactSurface", "activatesBefore", "ThreadEvents", "SetupThread", "LocalThreadEvents", "SetupActivity", "ReactSurface", "SetupIntentResolver", "IntentResolver", "SetupAppGraph", "AppGraphBuilder"]
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Events } from '@dxos/app-framework';\n\nimport { THREAD_PLUGIN } from './meta';\n\nexport namespace ThreadEvents {\n export const SetupActivity = Events.createStateEvent(`${THREAD_PLUGIN}/setup-activity`);\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { Capabilities, contributes, createIntent, defineModule, definePlugin, Events } from '@dxos/app-framework';\nimport { ClientCapabilities, ClientEvents } from '@dxos/plugin-client';\nimport { MarkdownEvents } from '@dxos/plugin-markdown';\nimport { SpaceCapabilities, ThreadEvents } from '@dxos/plugin-space';\nimport { ChannelType, defineObjectForm, ThreadType } from '@dxos/plugin-space/types';\nimport { type AnyLiveObject, RefArray } from '@dxos/react-client/echo';\nimport { translations as threadTranslations } from '@dxos/react-ui-thread';\nimport { DataType } from '@dxos/schema';\n\nimport { AppGraphBuilder, IntentResolver, Markdown, ReactSurface, ThreadState } from './capabilities';\nimport { ThreadEvents as LocalThreadEvents } from './events';\nimport { meta, THREAD_ITEM } from './meta';\nimport translations from './translations';\nimport { ThreadAction } from './types';\n\n// TODO(Zan): Every instance of `cursor` should be replaced with `anchor`.\n// NOTE(burdon): Review/discuss CursorConverter semantics.\nexport const ThreadPlugin = () =>\n definePlugin(meta, [\n // TODO(wittjosiah): Currently not used but leaving because there will likely be settings for threads again.\n // defineModule({\n // id: `${meta.id}/module/settings`,\n // activatesOn: Events.SetupSettings,\n // activate: ThreadSettings,\n // }),\n defineModule({\n id: `${meta.id}/module/state`,\n // TODO(wittjosiah): Does not integrate with settings store.\n // Should this be a different event?\n // Should settings store be renamed to be more generic?\n activatesOn: Events.SetupSettings,\n activate: ThreadState,\n }),\n defineModule({\n id: `${meta.id}/module/translations`,\n activatesOn: Events.SetupTranslations,\n activate: () => contributes(Capabilities.Translations, [...translations, ...threadTranslations]),\n }),\n defineModule({\n id: `${meta.id}/module/metadata`,\n activatesOn: Events.SetupMetadata,\n activate: () => [\n contributes(Capabilities.Metadata, {\n id: ChannelType.typename,\n metadata: {\n icon: 'ph--hash--regular',\n },\n }),\n contributes(Capabilities.Metadata, {\n id: ThreadType.typename,\n metadata: {\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: async (thread: ThreadType) => await RefArray.loadAll(thread.messages ?? []),\n },\n }),\n contributes(Capabilities.Metadata, {\n id: DataType.Message.typename,\n metadata: {\n // TODO(wittjosiah): Move out of metadata.\n loadReferences: (message: DataType.Message) => [], // loadObjectReferences(message, (message) => [...message.parts, message.context]),\n },\n }),\n contributes(Capabilities.Metadata, {\n id: THREAD_ITEM,\n metadata: {\n parse: (item: AnyLiveObject<any>, type: string) => {\n switch (type) {\n case 'node':\n return { id: item.id, label: item.title, data: item };\n case 'object':\n return item;\n case 'view-object':\n return { id: `${item.id}-view`, object: item };\n }\n },\n },\n }),\n ],\n }),\n defineModule({\n id: `${meta.id}/module/object-form`,\n activatesOn: ClientEvents.SetupSchema,\n activate: () =>\n contributes(\n SpaceCapabilities.ObjectForm,\n defineObjectForm({\n objectSchema: ChannelType,\n getIntent: (_, options) => createIntent(ThreadAction.CreateChannel, { spaceId: options.space.id }),\n }),\n ),\n }),\n defineModule({\n id: `${meta.id}/module/schema`,\n activatesOn: ClientEvents.SetupSchema,\n activate: () => contributes(ClientCapabilities.Schema, [ThreadType, DataType.Message, DataType.MessageV1]),\n }),\n defineModule({\n id: `${meta.id}/module/migration`,\n activatesOn: ClientEvents.SetupMigration,\n activate: () => contributes(ClientCapabilities.Migration, [DataType.MessageV1ToV2]),\n }),\n defineModule({\n id: `${meta.id}/module/markdown`,\n activatesOn: MarkdownEvents.SetupExtensions,\n activate: Markdown,\n }),\n defineModule({\n id: `${meta.id}/module/react-surface`,\n activatesOn: Events.SetupReactSurface,\n // TODO(wittjosiah): Should occur before the comments thread is loaded when surfaces activation is more granular.\n activatesBefore: [ThreadEvents.SetupThread, LocalThreadEvents.SetupActivity],\n activate: ReactSurface,\n }),\n defineModule({\n id: `${meta.id}/module/intent-resolver`,\n activatesOn: Events.SetupIntentResolver,\n activate: IntentResolver,\n }),\n defineModule({\n id: `${meta.id}/module/app-graph-builder`,\n activatesOn: Events.SetupAppGraph,\n activate: AppGraphBuilder,\n }),\n ]);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { ChannelType } from '@dxos/plugin-space/types';\n\nimport { THREAD_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [ChannelType.typename]: {\n 'typename label': 'Channel',\n 'object name placeholder': 'New channel',\n },\n [THREAD_PLUGIN]: {\n 'plugin name': 'Threads',\n 'channel title label': 'Title',\n 'message placeholder': 'Reply…',\n 'activity message': 'Processing…',\n 'anonymous label': 'Anonymous',\n 'delete message block label': 'Delete message block',\n 'detached thread label': 'Referenced content was removed',\n 'delete thread label': 'Delete thread',\n 'thread deleted label': 'You deleted a thread.',\n 'message deleted label': 'You deleted a message.',\n 'comments heading': 'Comments',\n 'chat heading': 'Chat',\n 'draft button': 'DRAFT',\n 'no comments title': 'Comments',\n 'no comments message':\n 'Click on the <commentIcon></commentIcon> button in the document toolbar to create a comment thread on the selected text.',\n 'toggle show resolved': 'Show resolved',\n 'unnamed object threads label': 'Threads',\n 'mark as resolved label': 'Mark as resolved',\n 'mark as unresolved label': 'Mark as unresolved',\n 'save message label': 'Save',\n 'edit message label': 'Edit',\n 'delete message label': 'Delete message',\n 'open comments panel label': 'Show Comments',\n 'comments label': 'Comments',\n 'show all label': 'All comments',\n 'show unresolved label': 'Unresolved only',\n },\n },\n },\n];\n"],
5
+ "mappings": "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",
6
+ "names": ["Events", "ThreadEvents", "SetupActivity", "Events", "createStateEvent", "THREAD_PLUGIN", "Capabilities", "contributes", "createIntent", "defineModule", "definePlugin", "Events", "ClientCapabilities", "ClientEvents", "MarkdownEvents", "SpaceCapabilities", "ThreadEvents", "ChannelType", "defineObjectForm", "ThreadType", "RefArray", "translations", "threadTranslations", "DataType", "ChannelType", "ChannelType", "typename", "THREAD_PLUGIN", "ThreadPlugin", "definePlugin", "meta", "defineModule", "id", "activatesOn", "Events", "SetupSettings", "activate", "ThreadState", "SetupTranslations", "contributes", "Capabilities", "Translations", "translations", "threadTranslations", "SetupMetadata", "Metadata", "ChannelType", "typename", "metadata", "icon", "ThreadType", "loadReferences", "thread", "RefArray", "loadAll", "messages", "DataType", "Message", "message", "THREAD_ITEM", "parse", "item", "type", "label", "title", "data", "object", "ClientEvents", "SetupSchema", "SpaceCapabilities", "ObjectForm", "defineObjectForm", "objectSchema", "getIntent", "_", "options", "createIntent", "ThreadAction", "CreateChannel", "spaceId", "space", "ClientCapabilities", "Schema", "MessageV1", "SetupMigration", "Migration", "MessageV1ToV2", "MarkdownEvents", "SetupExtensions", "Markdown", "SetupReactSurface", "activatesBefore", "ThreadEvents", "SetupThread", "LocalThreadEvents", "SetupActivity", "ReactSurface", "SetupIntentResolver", "IntentResolver", "SetupAppGraph", "AppGraphBuilder"]
7
7
  }