@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
@@ -3,10 +3,10 @@ import {
3
3
  MessageContainer,
4
4
  command,
5
5
  getMessageMetadata
6
- } from "./chunk-7DOPZH6Y.mjs";
6
+ } from "./chunk-V7HLWNAO.mjs";
7
7
  import {
8
8
  useStatus
9
- } from "./chunk-T6E5EY7Z.mjs";
9
+ } from "./chunk-IZWN4KAY.mjs";
10
10
  import {
11
11
  THREAD_PLUGIN
12
12
  } from "./chunk-42F2DTMM.mjs";
@@ -22,7 +22,7 @@ import { createBasicExtensions, createThemeExtensions, listener } from "@dxos/re
22
22
  import { StackItem } from "@dxos/react-ui-stack";
23
23
  import { mx } from "@dxos/react-ui-theme";
24
24
  import { MessageTextbox, Thread, ThreadFooter, threadLayout } from "@dxos/react-ui-thread";
25
- import { MessageType } from "@dxos/schema";
25
+ import { DataType } from "@dxos/schema";
26
26
  var ChatHeading = ({ attendableId }) => {
27
27
  const { t } = useTranslation(THREAD_PLUGIN);
28
28
  return /* @__PURE__ */ React.createElement("div", {
@@ -80,7 +80,7 @@ var ChatContainer = ({ space, dxn, context, current, autoFocusTextbox }) => {
80
80
  return false;
81
81
  }
82
82
  queue.append([
83
- create(MessageType, {
83
+ create(DataType.Message, {
84
84
  sender: {
85
85
  identityDid: identity.did
86
86
  },
@@ -136,4 +136,4 @@ export {
136
136
  ChatHeading,
137
137
  ChatContainer_default as default
138
138
  };
139
- //# sourceMappingURL=ChatContainer-WMOPMK5H.mjs.map
139
+ //# sourceMappingURL=ChatContainer-G7VTTRDN.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
+ }
@@ -4,19 +4,22 @@ import {
4
4
  } from "./chunk-42F2DTMM.mjs";
5
5
 
6
6
  // packages/plugins/plugin-thread/src/capabilities/app-graph-builder.ts
7
+ import { Rx } from "@effect-rx/rx-react";
8
+ import { Option, pipe } from "effect";
7
9
  import { Capabilities, contributes } from "@dxos/app-framework";
8
10
  import { PLANK_COMPANION_TYPE, ATTENDABLE_PATH_SEPARATOR } from "@dxos/plugin-deck/types";
9
11
  import { createExtension } from "@dxos/plugin-graph";
12
+ import { isLiveObject } from "@dxos/react-client/echo";
10
13
  var app_graph_builder_default = (context) => contributes(Capabilities.AppGraphBuilder, [
11
14
  createExtension({
12
15
  id: `${meta.id}/comments`,
13
- // TODO(wittjosiah): Support comments on any object.
14
- // filter: (node): node is Node<ReactiveEchoObject<any>> => isEchoObject(node.data),
15
- filter: (node) => !!node.data && typeof node.data === "object" && "threads" in node.data && Array.isArray(node.data.threads),
16
- connector: ({ node }) => [
16
+ connector: (node) => Rx.make((get) => pipe(get(node), Option.flatMap((node2) => (
17
+ // TODO(wittjosiah): Support comments on any object.
18
+ isLiveObject(node2.data) && Array.isArray(node2.data.threads) ? Option.some(node2) : Option.none()
19
+ )), Option.map((node2) => [
17
20
  {
18
21
  id: [
19
- node.id,
22
+ node2.id,
20
23
  "comments"
21
24
  ].join(ATTENDABLE_PATH_SEPARATOR),
22
25
  type: PLANK_COMPANION_TYPE,
@@ -33,10 +36,10 @@ var app_graph_builder_default = (context) => contributes(Capabilities.AppGraphBu
33
36
  position: "hoist"
34
37
  }
35
38
  }
36
- ]
39
+ ]), Option.getOrElse(() => [])))
37
40
  })
38
41
  ]);
39
42
  export {
40
43
  app_graph_builder_default as default
41
44
  };
42
- //# sourceMappingURL=app-graph-builder-M3KK5QJH.mjs.map
45
+ //# sourceMappingURL=app-graph-builder-QEFJ2KA4.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
+ }
@@ -0,0 +1,19 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+
3
+ // packages/plugins/plugin-thread/src/capabilities/index.ts
4
+ import { lazy } from "@dxos/app-framework";
5
+ var AppGraphBuilder = lazy(() => import("./app-graph-builder-QEFJ2KA4.mjs"));
6
+ var IntentResolver = lazy(() => import("./intent-resolver-X2FNKFSK.mjs"));
7
+ var Markdown = lazy(() => import("./markdown-2ERASVEO.mjs"));
8
+ var ReactSurface = lazy(() => import("./react-surface-DLD2UJRM.mjs"));
9
+ var ThreadSettings = lazy(() => import("./settings-5UA6FBMW.mjs"));
10
+ var ThreadState = lazy(() => import("./state-IRLEO2SB.mjs"));
11
+
12
+ export {
13
+ AppGraphBuilder,
14
+ IntentResolver,
15
+ Markdown,
16
+ ReactSurface,
17
+ ThreadState
18
+ };
19
+ //# sourceMappingURL=chunk-5XUQJWUG.mjs.map
@@ -0,0 +1,94 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ THREAD_PLUGIN
4
+ } from "./chunk-42F2DTMM.mjs";
5
+
6
+ // packages/plugins/plugin-thread/src/types.ts
7
+ import { Schema } from "effect";
8
+ import { Type } from "@dxos/echo";
9
+ import { ChannelType, ThreadType } from "@dxos/plugin-space/types";
10
+ import { EchoObjectSchema } from "@dxos/react-client/echo";
11
+ import { DataType } from "@dxos/schema";
12
+ var ThreadAction;
13
+ (function(ThreadAction2) {
14
+ const THREAD_ACTION = `${THREAD_PLUGIN}/action`;
15
+ class CreateChannel extends Schema.TaggedClass()(`${THREAD_ACTION}/create-channel`, {
16
+ input: Schema.Struct({
17
+ spaceId: Type.SpaceId,
18
+ name: Schema.optional(Schema.String)
19
+ }),
20
+ output: Schema.Struct({
21
+ object: ChannelType
22
+ })
23
+ }) {
24
+ }
25
+ ThreadAction2.CreateChannel = CreateChannel;
26
+ class Create extends Schema.TaggedClass()(`${THREAD_ACTION}/create`, {
27
+ input: Schema.Struct({
28
+ name: Schema.optional(Schema.String),
29
+ cursor: Schema.String,
30
+ subject: EchoObjectSchema
31
+ }),
32
+ output: Schema.Struct({
33
+ object: ThreadType
34
+ })
35
+ }) {
36
+ }
37
+ ThreadAction2.Create = Create;
38
+ class Delete extends Schema.TaggedClass()(`${THREAD_ACTION}/delete`, {
39
+ input: Schema.Struct({
40
+ thread: ThreadType,
41
+ subject: EchoObjectSchema,
42
+ cursor: Schema.optional(Schema.String)
43
+ }),
44
+ output: Schema.Void
45
+ }) {
46
+ }
47
+ ThreadAction2.Delete = Delete;
48
+ class Select extends Schema.TaggedClass()(`${THREAD_ACTION}/select`, {
49
+ input: Schema.Struct({
50
+ current: Schema.String
51
+ }),
52
+ output: Schema.Void
53
+ }) {
54
+ }
55
+ ThreadAction2.Select = Select;
56
+ class ToggleResolved extends Schema.TaggedClass()(`${THREAD_ACTION}/toggle-resolved`, {
57
+ input: Schema.Struct({
58
+ thread: ThreadType
59
+ }),
60
+ output: Schema.Void
61
+ }) {
62
+ }
63
+ ThreadAction2.ToggleResolved = ToggleResolved;
64
+ class AddMessage extends Schema.TaggedClass()(`${THREAD_ACTION}/add-message`, {
65
+ input: Schema.Struct({
66
+ subject: EchoObjectSchema,
67
+ thread: ThreadType,
68
+ sender: DataType.Actor,
69
+ text: Schema.String
70
+ }),
71
+ output: Schema.Void
72
+ }) {
73
+ }
74
+ ThreadAction2.AddMessage = AddMessage;
75
+ class DeleteMessage extends Schema.TaggedClass()(`${THREAD_ACTION}/delete-message`, {
76
+ input: Schema.Struct({
77
+ thread: ThreadType,
78
+ subject: EchoObjectSchema,
79
+ messageId: Schema.String,
80
+ message: Schema.optional(DataType.Message),
81
+ messageIndex: Schema.optional(Schema.Number)
82
+ }),
83
+ output: Schema.Void
84
+ }) {
85
+ }
86
+ ThreadAction2.DeleteMessage = DeleteMessage;
87
+ })(ThreadAction || (ThreadAction = {}));
88
+ var ThreadSettingsSchema = Schema.mutable(Schema.Struct({}));
89
+
90
+ export {
91
+ ThreadAction,
92
+ ThreadSettingsSchema
93
+ };
94
+ //# sourceMappingURL=chunk-A7RLBTTZ.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
+ }
@@ -65,4 +65,4 @@ export {
65
65
  useStatus,
66
66
  useOnEditAnalytics
67
67
  };
68
- //# sourceMappingURL=chunk-T6E5EY7Z.mjs.map
68
+ //# sourceMappingURL=chunk-IZWN4KAY.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,7 +1,7 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  useOnEditAnalytics
4
- } from "./chunk-T6E5EY7Z.mjs";
4
+ } from "./chunk-IZWN4KAY.mjs";
5
5
  import {
6
6
  THREAD_PLUGIN
7
7
  } from "./chunk-42F2DTMM.mjs";
@@ -95,8 +95,9 @@ var MessageContainer = ({ message, members, editable = false, onDelete }) => {
95
95
  timestamp: messageMetadata.timestamp
96
96
  }, /* @__PURE__ */ React.createElement(ButtonGroup, {
97
97
  classNames: "mie-1"
98
- }, userIsAuthor && editable && /* @__PURE__ */ React.createElement(Tooltip.Root, null, /* @__PURE__ */ React.createElement(Tooltip.Trigger, {
99
- asChild: true
98
+ }, userIsAuthor && editable && /* @__PURE__ */ React.createElement(Tooltip.Trigger, {
99
+ asChild: true,
100
+ content: editLabel
100
101
  }, /* @__PURE__ */ React.createElement(Button, {
101
102
  variant: "ghost",
102
103
  "data-testid": editing ? "thread.message.save" : "thread.message.edit",
@@ -108,8 +109,9 @@ var MessageContainer = ({ message, members, editable = false, onDelete }) => {
108
109
  className: getSize(4)
109
110
  }) : /* @__PURE__ */ React.createElement(PencilSimple, {
110
111
  className: getSize(4)
111
- }))), /* @__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, {
112
- asChild: true
112
+ }))), onDelete && /* @__PURE__ */ React.createElement(Tooltip.Trigger, {
113
+ asChild: true,
114
+ content: deleteLabel
113
115
  }, /* @__PURE__ */ React.createElement(Button, {
114
116
  variant: "ghost",
115
117
  "data-testid": "thread.message.delete",
@@ -119,7 +121,7 @@ var MessageContainer = ({ message, members, editable = false, onDelete }) => {
119
121
  className: "sr-only"
120
122
  }, deleteLabel), /* @__PURE__ */ React.createElement(X, {
121
123
  className: getSize(4)
122
- }))), /* @__PURE__ */ React.createElement(Tooltip.Portal, null, /* @__PURE__ */ React.createElement(Tooltip.Content, null, deleteLabel, /* @__PURE__ */ React.createElement(Tooltip.Arrow, null)))))), textBlock && /* @__PURE__ */ React.createElement(TextboxBlock, {
124
+ }))))), textBlock && /* @__PURE__ */ React.createElement(TextboxBlock, {
123
125
  block: textBlock,
124
126
  isAuthor: userIsAuthor,
125
127
  editing
@@ -205,4 +207,4 @@ export {
205
207
  getMessageMetadata,
206
208
  MessageContainer
207
209
  };
208
- //# sourceMappingURL=chunk-7DOPZH6Y.mjs.map
210
+ //# sourceMappingURL=chunk-V7HLWNAO.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
+ }
@@ -5,17 +5,17 @@ import {
5
5
  Markdown,
6
6
  ReactSurface,
7
7
  ThreadState
8
- } from "./chunk-QUTIMZJ4.mjs";
8
+ } from "./chunk-5XUQJWUG.mjs";
9
9
  import {
10
10
  ThreadCapabilities
11
11
  } from "./chunk-WLY2HMDB.mjs";
12
12
  import {
13
13
  useOnEditAnalytics,
14
14
  useStatus
15
- } from "./chunk-T6E5EY7Z.mjs";
15
+ } from "./chunk-IZWN4KAY.mjs";
16
16
  import {
17
17
  ThreadAction
18
- } from "./chunk-E446MGLP.mjs";
18
+ } from "./chunk-A7RLBTTZ.mjs";
19
19
  import {
20
20
  THREAD_ITEM,
21
21
  THREAD_PLUGIN,
@@ -37,7 +37,7 @@ import { SpaceCapabilities, ThreadEvents as ThreadEvents2 } from "@dxos/plugin-s
37
37
  import { ChannelType as ChannelType2, defineObjectForm, ThreadType } from "@dxos/plugin-space/types";
38
38
  import { RefArray } from "@dxos/react-client/echo";
39
39
  import { translations as threadTranslations } from "@dxos/react-ui-thread";
40
- import { MessageType, MessageTypeV1, MessageTypeV1ToV2 } from "@dxos/schema";
40
+ import { DataType } from "@dxos/schema";
41
41
 
42
42
  // packages/plugins/plugin-thread/src/translations.ts
43
43
  import { ChannelType } from "@dxos/plugin-space/types";
@@ -62,8 +62,8 @@ var translations_default = [
62
62
  "comments heading": "Comments",
63
63
  "chat heading": "Chat",
64
64
  "draft button": "DRAFT",
65
- "no comments title": "No comments (yet)",
66
- "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.",
65
+ "no comments title": "Comments",
66
+ "no comments message": "Click on the <commentIcon></commentIcon> button in the document toolbar to create a comment thread on the selected text.",
67
67
  "toggle show resolved": "Show resolved",
68
68
  "unnamed object threads label": "Threads",
69
69
  "mark as resolved label": "Mark as resolved",
@@ -122,7 +122,7 @@ var ThreadPlugin = () => definePlugin(meta, [
122
122
  }
123
123
  }),
124
124
  contributes(Capabilities.Metadata, {
125
- id: MessageType.typename,
125
+ id: DataType.Message.typename,
126
126
  metadata: {
127
127
  // TODO(wittjosiah): Move out of metadata.
128
128
  loadReferences: (message) => []
@@ -167,15 +167,15 @@ var ThreadPlugin = () => definePlugin(meta, [
167
167
  activatesOn: ClientEvents.SetupSchema,
168
168
  activate: () => contributes(ClientCapabilities.Schema, [
169
169
  ThreadType,
170
- MessageType,
171
- MessageTypeV1
170
+ DataType.Message,
171
+ DataType.MessageV1
172
172
  ])
173
173
  }),
174
174
  defineModule({
175
175
  id: `${meta.id}/module/migration`,
176
176
  activatesOn: ClientEvents.SetupMigration,
177
177
  activate: () => contributes(ClientCapabilities.Migration, [
178
- MessageTypeV1ToV2
178
+ DataType.MessageV1ToV2
179
179
  ])
180
180
  }),
181
181
  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
  }