@dxos/plugin-thread 0.7.5-main.9d26e3a → 0.7.5-main.9d2a38b

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 (182) hide show
  1. package/dist/lib/browser/ThreadContainer-4VLBSBI7.mjs +19 -0
  2. package/dist/lib/browser/ThreadContainer-4VLBSBI7.mjs.map +7 -0
  3. package/dist/lib/browser/app-graph-builder-Q7A2ZRUA.mjs +121 -0
  4. package/dist/lib/browser/app-graph-builder-Q7A2ZRUA.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-2B3EXYZ7.mjs +18 -0
  6. package/dist/lib/browser/chunk-2B3EXYZ7.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-ENERBDYI.mjs → chunk-636QDHE3.mjs} +3 -3
  8. package/dist/lib/browser/chunk-636QDHE3.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-BNEWNQBO.mjs +71 -0
  10. package/dist/lib/browser/chunk-BNEWNQBO.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-OD2IZKRP.mjs → chunk-GQONSZ3J.mjs} +19 -83
  12. package/dist/lib/browser/chunk-GQONSZ3J.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-NAO3LZMZ.mjs +16 -0
  14. package/dist/lib/browser/chunk-NAO3LZMZ.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-6KTMQPL4.mjs → chunk-NO5AZLUZ.mjs} +7 -3
  16. package/dist/lib/browser/chunk-NO5AZLUZ.mjs.map +7 -0
  17. package/dist/lib/browser/index.mjs +149 -939
  18. package/dist/lib/browser/index.mjs.map +4 -4
  19. package/dist/lib/browser/intent-resolver-PIEZ3LKQ.mjs +275 -0
  20. package/dist/lib/browser/intent-resolver-PIEZ3LKQ.mjs.map +7 -0
  21. package/dist/lib/browser/markdown-2NBXKXCY.mjs +112 -0
  22. package/dist/lib/browser/markdown-2NBXKXCY.mjs.map +7 -0
  23. package/dist/lib/browser/meta.json +1 -1
  24. package/dist/lib/browser/react-surface-CHCZO4TI.mjs +412 -0
  25. package/dist/lib/browser/react-surface-CHCZO4TI.mjs.map +7 -0
  26. package/dist/lib/browser/settings-TKOPRXSU.mjs +22 -0
  27. package/dist/lib/browser/settings-TKOPRXSU.mjs.map +7 -0
  28. package/dist/lib/browser/state-GNFUURIC.mjs +33 -0
  29. package/dist/lib/browser/state-GNFUURIC.mjs.map +7 -0
  30. package/dist/lib/browser/types.mjs +6 -4
  31. package/dist/lib/node/{ThreadArticle-ZCNMFBAO.cjs → ThreadContainer-VOYLV4UL.cjs} +14 -13
  32. package/dist/lib/node/ThreadContainer-VOYLV4UL.cjs.map +7 -0
  33. package/dist/lib/node/app-graph-builder-ZXW5KUDK.cjs +135 -0
  34. package/dist/lib/node/app-graph-builder-ZXW5KUDK.cjs.map +7 -0
  35. package/dist/lib/node/{chunk-2CB5AVBL.cjs → chunk-6PUGKCPR.cjs} +69 -135
  36. package/dist/lib/node/chunk-6PUGKCPR.cjs.map +7 -0
  37. package/dist/lib/node/{chunk-VW2P26MZ.cjs → chunk-AUVKOX5Q.cjs} +13 -8
  38. package/dist/lib/node/chunk-AUVKOX5Q.cjs.map +7 -0
  39. package/dist/lib/node/chunk-AWSTZ2KN.cjs +93 -0
  40. package/dist/lib/node/chunk-AWSTZ2KN.cjs.map +7 -0
  41. package/dist/lib/node/{chunk-IC2NICNC.cjs → chunk-F735VMTN.cjs} +7 -7
  42. package/dist/lib/node/chunk-F735VMTN.cjs.map +7 -0
  43. package/dist/lib/node/{meta.cjs → chunk-FPWNZ6TB.cjs} +13 -10
  44. package/dist/lib/node/chunk-FPWNZ6TB.cjs.map +7 -0
  45. package/dist/lib/node/{ThreadMain-5AYGCXXP.cjs → chunk-ZRN7B26W.cjs} +26 -23
  46. package/dist/lib/node/chunk-ZRN7B26W.cjs.map +7 -0
  47. package/dist/lib/node/index.cjs +147 -933
  48. package/dist/lib/node/index.cjs.map +4 -4
  49. package/dist/lib/node/intent-resolver-X5O3SVLF.cjs +287 -0
  50. package/dist/lib/node/intent-resolver-X5O3SVLF.cjs.map +7 -0
  51. package/dist/lib/node/markdown-FWRKMSKV.cjs +122 -0
  52. package/dist/lib/node/markdown-FWRKMSKV.cjs.map +7 -0
  53. package/dist/lib/node/meta.json +1 -1
  54. package/dist/lib/node/react-surface-LO7S2HPR.cjs +414 -0
  55. package/dist/lib/node/react-surface-LO7S2HPR.cjs.map +7 -0
  56. package/dist/lib/node/settings-TH4YSUVU.cjs +36 -0
  57. package/dist/lib/node/settings-TH4YSUVU.cjs.map +7 -0
  58. package/dist/lib/node/state-TQWEZ6B3.cjs +49 -0
  59. package/dist/lib/node/state-TQWEZ6B3.cjs.map +7 -0
  60. package/dist/lib/node/types.cjs +6 -4
  61. package/dist/lib/node/types.cjs.map +2 -2
  62. package/dist/lib/node-esm/ThreadContainer-7DZY2MWA.mjs +20 -0
  63. package/dist/lib/node-esm/ThreadContainer-7DZY2MWA.mjs.map +7 -0
  64. package/dist/lib/node-esm/app-graph-builder-ATS6HGE6.mjs +122 -0
  65. package/dist/lib/node-esm/app-graph-builder-ATS6HGE6.mjs.map +7 -0
  66. package/dist/lib/node-esm/{chunk-RMYATBXM.mjs → chunk-B3CF35MY.mjs} +7 -3
  67. package/dist/lib/node-esm/chunk-B3CF35MY.mjs.map +7 -0
  68. package/dist/lib/node-esm/{chunk-AQ74G3GY.mjs → chunk-DYFIKKDT.mjs} +19 -83
  69. package/dist/lib/node-esm/chunk-DYFIKKDT.mjs.map +7 -0
  70. package/dist/lib/node-esm/{chunk-7QRGG25F.mjs → chunk-FXUATCLW.mjs} +3 -3
  71. package/dist/lib/node-esm/chunk-FXUATCLW.mjs.map +7 -0
  72. package/dist/lib/node-esm/chunk-GS2OILYF.mjs +20 -0
  73. package/dist/lib/node-esm/chunk-GS2OILYF.mjs.map +7 -0
  74. package/dist/lib/node-esm/chunk-HLWJTUWZ.mjs +73 -0
  75. package/dist/lib/node-esm/chunk-HLWJTUWZ.mjs.map +7 -0
  76. package/dist/lib/node-esm/chunk-ZJITX3TO.mjs +17 -0
  77. package/dist/lib/node-esm/chunk-ZJITX3TO.mjs.map +7 -0
  78. package/dist/lib/node-esm/index.mjs +149 -939
  79. package/dist/lib/node-esm/index.mjs.map +4 -4
  80. package/dist/lib/node-esm/intent-resolver-XJWT5X6T.mjs +276 -0
  81. package/dist/lib/node-esm/intent-resolver-XJWT5X6T.mjs.map +7 -0
  82. package/dist/lib/node-esm/markdown-6AQFDAW3.mjs +113 -0
  83. package/dist/lib/node-esm/markdown-6AQFDAW3.mjs.map +7 -0
  84. package/dist/lib/node-esm/meta.json +1 -1
  85. package/dist/lib/node-esm/react-surface-LAF3QIPB.mjs +413 -0
  86. package/dist/lib/node-esm/react-surface-LAF3QIPB.mjs.map +7 -0
  87. package/dist/lib/node-esm/settings-KEDRR7RM.mjs +23 -0
  88. package/dist/lib/node-esm/settings-KEDRR7RM.mjs.map +7 -0
  89. package/dist/lib/node-esm/state-7MLR27YG.mjs +34 -0
  90. package/dist/lib/node-esm/state-7MLR27YG.mjs.map +7 -0
  91. package/dist/lib/node-esm/types.mjs +6 -4
  92. package/dist/types/src/ThreadPlugin.d.ts +1 -3
  93. package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
  94. package/dist/types/src/capabilities/app-graph-builder.d.ts +180 -0
  95. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  96. package/dist/types/src/capabilities/capabilities.d.ts +15 -0
  97. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
  98. package/dist/types/src/capabilities/index.d.ts +187 -0
  99. package/dist/types/src/capabilities/index.d.ts.map +1 -0
  100. package/dist/types/src/capabilities/intent-resolver.d.ts +4 -0
  101. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -0
  102. package/dist/types/src/capabilities/markdown.d.ts +4 -0
  103. package/dist/types/src/capabilities/markdown.d.ts.map +1 -0
  104. package/dist/types/src/capabilities/react-surface.d.ts +4 -0
  105. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  106. package/dist/types/src/capabilities/settings.d.ts +4 -0
  107. package/dist/types/src/capabilities/settings.d.ts.map +1 -0
  108. package/dist/types/src/capabilities/state.d.ts +7 -0
  109. package/dist/types/src/capabilities/state.d.ts.map +1 -0
  110. package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
  111. package/dist/types/src/components/CommentContainer.d.ts +1 -1
  112. package/dist/types/src/components/CommentContainer.d.ts.map +1 -1
  113. package/dist/types/src/components/CommentsContainer.d.ts +2 -7
  114. package/dist/types/src/components/CommentsContainer.d.ts.map +1 -1
  115. package/dist/types/src/components/ThreadComplementary.d.ts +1 -5
  116. package/dist/types/src/components/ThreadComplementary.d.ts.map +1 -1
  117. package/dist/types/src/components/ThreadContainer.d.ts +7 -0
  118. package/dist/types/src/components/ThreadContainer.d.ts.map +1 -0
  119. package/dist/types/src/components/index.d.ts +3 -15
  120. package/dist/types/src/components/index.d.ts.map +1 -1
  121. package/dist/types/src/components/types.d.ts +5 -5
  122. package/dist/types/src/components/types.d.ts.map +1 -1
  123. package/dist/types/src/index.d.ts +1 -3
  124. package/dist/types/src/index.d.ts.map +1 -1
  125. package/dist/types/src/meta.d.ts +1 -2
  126. package/dist/types/src/meta.d.ts.map +1 -1
  127. package/dist/types/src/translations.d.ts +3 -0
  128. package/dist/types/src/translations.d.ts.map +1 -1
  129. package/dist/types/src/types.d.ts +10 -14
  130. package/dist/types/src/types.d.ts.map +1 -1
  131. package/dist/types/tsconfig.tsbuildinfo +1 -1
  132. package/package.json +30 -38
  133. package/src/ThreadPlugin.tsx +105 -470
  134. package/src/capabilities/app-graph-builder.ts +120 -0
  135. package/src/capabilities/capabilities.ts +19 -0
  136. package/src/capabilities/index.ts +14 -0
  137. package/src/capabilities/intent-resolver.ts +223 -0
  138. package/src/capabilities/markdown.ts +18 -0
  139. package/src/capabilities/react-surface.tsx +61 -0
  140. package/src/capabilities/settings.ts +14 -0
  141. package/src/capabilities/state.ts +25 -0
  142. package/src/components/Chat.stories.tsx +25 -23
  143. package/src/components/CommentContainer.tsx +16 -30
  144. package/src/components/CommentsContainer.tsx +1 -17
  145. package/src/components/ThreadComplementary.tsx +82 -48
  146. package/src/components/ThreadContainer.tsx +22 -0
  147. package/src/components/index.ts +1 -2
  148. package/src/components/types.ts +5 -5
  149. package/src/index.ts +1 -5
  150. package/src/meta.ts +1 -1
  151. package/src/translations.ts +1 -0
  152. package/src/types.ts +10 -29
  153. package/dist/lib/browser/ThreadArticle-EWLTNU6Z.mjs +0 -18
  154. package/dist/lib/browser/ThreadArticle-EWLTNU6Z.mjs.map +0 -7
  155. package/dist/lib/browser/ThreadMain-ABEDFWHC.mjs +0 -26
  156. package/dist/lib/browser/ThreadMain-ABEDFWHC.mjs.map +0 -7
  157. package/dist/lib/browser/chunk-6KTMQPL4.mjs.map +0 -7
  158. package/dist/lib/browser/chunk-ENERBDYI.mjs.map +0 -7
  159. package/dist/lib/browser/chunk-OD2IZKRP.mjs.map +0 -7
  160. package/dist/lib/browser/meta.mjs +0 -11
  161. package/dist/lib/browser/meta.mjs.map +0 -7
  162. package/dist/lib/node/ThreadArticle-ZCNMFBAO.cjs.map +0 -7
  163. package/dist/lib/node/ThreadMain-5AYGCXXP.cjs.map +0 -7
  164. package/dist/lib/node/chunk-2CB5AVBL.cjs.map +0 -7
  165. package/dist/lib/node/chunk-IC2NICNC.cjs.map +0 -7
  166. package/dist/lib/node/chunk-VW2P26MZ.cjs.map +0 -7
  167. package/dist/lib/node/meta.cjs.map +0 -7
  168. package/dist/lib/node-esm/ThreadArticle-F37HYTOU.mjs +0 -19
  169. package/dist/lib/node-esm/ThreadArticle-F37HYTOU.mjs.map +0 -7
  170. package/dist/lib/node-esm/ThreadMain-OL6ZHNZY.mjs +0 -27
  171. package/dist/lib/node-esm/ThreadMain-OL6ZHNZY.mjs.map +0 -7
  172. package/dist/lib/node-esm/chunk-7QRGG25F.mjs.map +0 -7
  173. package/dist/lib/node-esm/chunk-AQ74G3GY.mjs.map +0 -7
  174. package/dist/lib/node-esm/chunk-RMYATBXM.mjs.map +0 -7
  175. package/dist/lib/node-esm/meta.mjs +0 -12
  176. package/dist/lib/node-esm/meta.mjs.map +0 -7
  177. package/dist/types/src/components/ThreadArticle.d.ts +0 -5
  178. package/dist/types/src/components/ThreadArticle.d.ts.map +0 -1
  179. package/dist/types/src/components/ThreadMain.d.ts +0 -7
  180. package/dist/types/src/components/ThreadMain.d.ts.map +0 -1
  181. package/src/components/ThreadArticle.tsx +0 -18
  182. package/src/components/ThreadMain.tsx +0 -27
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var app_graph_builder_ZXW5KUDK_exports = {};
20
+ __export(app_graph_builder_ZXW5KUDK_exports, {
21
+ default: () => app_graph_builder_default
22
+ });
23
+ module.exports = __toCommonJS(app_graph_builder_ZXW5KUDK_exports);
24
+ var import_chunk_FPWNZ6TB = require("./chunk-FPWNZ6TB.cjs");
25
+ var import_chunk_F735VMTN = require("./chunk-F735VMTN.cjs");
26
+ var import_app_framework = require("@dxos/app-framework");
27
+ var import_plugin_client = require("@dxos/plugin-client");
28
+ var import_plugin_graph = require("@dxos/plugin-graph");
29
+ var import_types = require("@dxos/plugin-observability/types");
30
+ var import_plugin_space = require("@dxos/plugin-space");
31
+ var import_echo = require("@dxos/react-client/echo");
32
+ var type = "orphan-comments-for-subject";
33
+ var icon = "ph--chat-text--regular";
34
+ var app_graph_builder_default = (context) => {
35
+ const resolver = (typename) => context.requestCapabilities(import_app_framework.Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
36
+ return (0, import_app_framework.contributes)(import_app_framework.Capabilities.AppGraphBuilder, (0, import_plugin_graph.createExtension)({
37
+ id: `${import_chunk_F735VMTN.THREAD_PLUGIN}/comments-for-subject`,
38
+ resolver: ({ id }) => {
39
+ if (!id.endsWith("~comments")) {
40
+ return;
41
+ }
42
+ const client = context.requestCapability(import_plugin_client.ClientCapabilities.Client);
43
+ const [subjectId] = id.split("~");
44
+ const { spaceId, objectId } = (0, import_echo.parseId)(subjectId);
45
+ const spaces = (0, import_plugin_graph.toSignal)((onChange) => client.spaces.subscribe(() => onChange()).unsubscribe, () => client.spaces.get());
46
+ const space = spaces?.find((space2) => space2.id === spaceId && space2.state.get() === import_echo.SpaceState.SPACE_READY);
47
+ if (!objectId) {
48
+ return {
49
+ id,
50
+ type,
51
+ data: null,
52
+ properties: {
53
+ icon,
54
+ label: [
55
+ "unnamed object threads label",
56
+ {
57
+ ns: import_chunk_F735VMTN.THREAD_PLUGIN
58
+ }
59
+ ],
60
+ showResolvedThreads: false,
61
+ object: null,
62
+ space
63
+ }
64
+ };
65
+ }
66
+ const [object] = (0, import_plugin_space.memoizeQuery)(space, {
67
+ id: objectId
68
+ });
69
+ if (!object || !subjectId) {
70
+ return;
71
+ }
72
+ const meta = resolver((0, import_echo.getTypename)(object) ?? "");
73
+ const label = meta.label?.(object) || object.name || meta.placeholder || [
74
+ "unnamed object threads label",
75
+ {
76
+ ns: import_chunk_F735VMTN.THREAD_PLUGIN
77
+ }
78
+ ];
79
+ const { getViewState } = context.requestCapability(import_chunk_FPWNZ6TB.ThreadCapabilities.State);
80
+ const viewState = getViewState(subjectId);
81
+ return {
82
+ id,
83
+ type,
84
+ data: null,
85
+ properties: {
86
+ icon,
87
+ label,
88
+ showResolvedThreads: viewState.showResolvedThreads,
89
+ object
90
+ }
91
+ };
92
+ },
93
+ actions: ({ node }) => {
94
+ const dataId = node.id.split("~").at(0);
95
+ if (!node.id.endsWith("~comments") || !dataId) {
96
+ return;
97
+ }
98
+ const [spaceId, objectId] = dataId.split(":");
99
+ const { getViewState } = context.requestCapability(import_chunk_FPWNZ6TB.ThreadCapabilities.State);
100
+ const viewState = getViewState(dataId);
101
+ const toggle = async () => {
102
+ const newToggleState = !viewState.showResolvedThreads;
103
+ viewState.showResolvedThreads = newToggleState;
104
+ const { dispatchPromise: dispatch } = context.requestCapability(import_app_framework.Capabilities.IntentDispatcher);
105
+ await dispatch((0, import_app_framework.createIntent)(import_types.ObservabilityAction.SendEvent, {
106
+ name: "threads.toggle-show-resolved",
107
+ properties: {
108
+ spaceId,
109
+ threadId: objectId,
110
+ showResolved: newToggleState
111
+ }
112
+ }));
113
+ };
114
+ return [
115
+ {
116
+ id: `${import_chunk_F735VMTN.THREAD_PLUGIN}/toggle-show-resolved/${node.id}`,
117
+ data: toggle,
118
+ properties: {
119
+ label: [
120
+ "toggle show resolved",
121
+ {
122
+ ns: import_chunk_F735VMTN.THREAD_PLUGIN
123
+ }
124
+ ],
125
+ menuItemType: "toggle",
126
+ isChecked: viewState.showResolvedThreads,
127
+ testId: "threadPlugin.toggleShowResolved",
128
+ icon: viewState.showResolvedThreads ? "ph--eye-slash--regular" : "ph--eye--regular"
129
+ }
130
+ }
131
+ ];
132
+ }
133
+ }));
134
+ };
135
+ //# sourceMappingURL=app-graph-builder-ZXW5KUDK.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/app-graph-builder.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes, createIntent, type PluginsContext } from '@dxos/app-framework';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { createExtension, toSignal } from '@dxos/plugin-graph';\nimport { ObservabilityAction } from '@dxos/plugin-observability/types';\nimport { memoizeQuery } from '@dxos/plugin-space';\nimport { getTypename, parseId, SpaceState } from '@dxos/react-client/echo';\n\nimport { ThreadCapabilities } from './capabilities';\nimport { THREAD_PLUGIN } from '../meta';\n\nconst type = 'orphan-comments-for-subject';\nconst icon = 'ph--chat-text--regular';\n\nexport default (context: PluginsContext) => {\n const resolver = (typename: string) =>\n context.requestCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};\n\n return contributes(\n Capabilities.AppGraphBuilder,\n createExtension({\n id: `${THREAD_PLUGIN}/comments-for-subject`,\n resolver: ({ id }) => {\n // TODO(Zan): Find util (or make one).\n if (!id.endsWith('~comments')) {\n return;\n }\n\n const client = context.requestCapability(ClientCapabilities.Client);\n const [subjectId] = id.split('~');\n const { spaceId, objectId } = parseId(subjectId);\n const spaces = toSignal(\n (onChange) => client.spaces.subscribe(() => onChange()).unsubscribe,\n () => client.spaces.get(),\n );\n const space = spaces?.find((space) => space.id === spaceId && space.state.get() === SpaceState.SPACE_READY);\n if (!objectId) {\n // TODO(wittjosiah): Support comments for arbitrary subjects.\n // This is to ensure that the comments panel is not stuck on an old object.\n return {\n id,\n type,\n data: null,\n properties: {\n icon,\n label: ['unnamed object threads label', { ns: THREAD_PLUGIN }],\n showResolvedThreads: false,\n object: null,\n space,\n },\n };\n }\n\n const [object] = memoizeQuery(space, { id: objectId });\n if (!object || !subjectId) {\n return;\n }\n\n const meta = resolver(getTypename(object) ?? '');\n const label = meta.label?.(object) ||\n object.name ||\n meta.placeholder || ['unnamed object threads label', { ns: THREAD_PLUGIN }];\n\n const { getViewState } = context.requestCapability(ThreadCapabilities.State);\n const viewState = getViewState(subjectId);\n\n return {\n id,\n type,\n data: null,\n properties: {\n icon,\n label,\n showResolvedThreads: viewState.showResolvedThreads,\n object,\n },\n };\n },\n actions: ({ node }) => {\n const dataId = node.id.split('~').at(0);\n if (!node.id.endsWith('~comments') || !dataId) {\n return;\n }\n\n const [spaceId, objectId] = dataId.split(':');\n\n const { getViewState } = context.requestCapability(ThreadCapabilities.State);\n const viewState = getViewState(dataId);\n const toggle = async () => {\n const newToggleState = !viewState.showResolvedThreads;\n viewState.showResolvedThreads = newToggleState;\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n await dispatch(\n createIntent(ObservabilityAction.SendEvent, {\n name: 'threads.toggle-show-resolved',\n properties: { spaceId, threadId: objectId, showResolved: newToggleState },\n }),\n );\n };\n\n return [\n {\n id: `${THREAD_PLUGIN}/toggle-show-resolved/${node.id}`,\n data: toggle,\n properties: {\n label: ['toggle show resolved', { ns: THREAD_PLUGIN }],\n menuItemType: 'toggle',\n isChecked: viewState.showResolvedThreads,\n testId: 'threadPlugin.toggleShowResolved',\n icon: viewState.showResolvedThreads ? 'ph--eye-slash--regular' : 'ph--eye--regular',\n },\n },\n ];\n },\n }),\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["type", "icon", "context", "resolver", "typename", "requestCapabilities", "Capabilities", "Metadata", "find", "id", "metadata", "contributes", "AppGraphBuilder", "createExtension", "THREAD_PLUGIN", "endsWith", "client", "requestCapability", "ClientCapabilities", "Client", "subjectId", "split", "spaceId", "objectId", "parseId", "spaces", "toSignal", "onChange", "subscribe", "unsubscribe", "get", "space", "state", "SpaceState", "SPACE_READY", "data", "properties", "label", "ns", "showResolvedThreads", "object", "memoizeQuery", "meta", "getTypename", "name", "placeholder", "getViewState", "ThreadCapabilities", "State", "viewState", "actions", "node", "dataId", "at", "toggle", "newToggleState", "dispatchPromise", "dispatch", "IntentDispatcher", "createIntent", "ObservabilityAction", "SendEvent", "threadId", "showResolved", "menuItemType", "isChecked", "testId"]
7
+ }
@@ -26,43 +26,35 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var chunk_2CB5AVBL_exports = {};
30
- __export(chunk_2CB5AVBL_exports, {
29
+ var chunk_6PUGKCPR_exports = {};
30
+ __export(chunk_6PUGKCPR_exports, {
31
31
  ChatContainer: () => ChatContainer,
32
32
  MessageContainer: () => MessageContainer,
33
33
  command: () => command,
34
- getMessageMetadata: () => getMessageMetadata,
35
- useAnalyticsCallback: () => useAnalyticsCallback,
36
- useOnEditAnalytics: () => useOnEditAnalytics,
37
- useStatus: () => useStatus
34
+ getMessageMetadata: () => getMessageMetadata
38
35
  });
39
- module.exports = __toCommonJS(chunk_2CB5AVBL_exports);
40
- var import_chunk_IC2NICNC = require("./chunk-IC2NICNC.cjs");
41
- var import_react = require("react");
42
- var import_react2 = require("react");
43
- var import_app_framework = require("@dxos/app-framework");
44
- var import_types = require("@dxos/plugin-observability/types");
45
- var import_echo = require("@dxos/react-client/echo");
46
- var import_react_ui = require("@dxos/react-ui");
47
- var import_react3 = __toESM(require("react"));
36
+ module.exports = __toCommonJS(chunk_6PUGKCPR_exports);
37
+ var import_chunk_AWSTZ2KN = require("./chunk-AWSTZ2KN.cjs");
38
+ var import_chunk_F735VMTN = require("./chunk-F735VMTN.cjs");
39
+ var import_react = __toESM(require("react"));
48
40
  var import_echo_schema = require("@dxos/echo-schema");
49
41
  var import_live_object = require("@dxos/live-object");
50
- var import_types2 = require("@dxos/plugin-space/types");
51
- var import_echo2 = require("@dxos/react-client/echo");
42
+ var import_types = require("@dxos/plugin-space/types");
43
+ var import_echo = require("@dxos/react-client/echo");
52
44
  var import_halo = require("@dxos/react-client/halo");
53
- var import_react_ui2 = require("@dxos/react-ui");
45
+ var import_react_ui = require("@dxos/react-ui");
54
46
  var import_react_ui_editor = require("@dxos/react-ui-editor");
55
47
  var import_react_ui_stack = require("@dxos/react-ui-stack");
56
48
  var import_react_ui_theme = require("@dxos/react-ui-theme");
57
49
  var import_react_ui_thread = require("@dxos/react-ui-thread");
58
50
  var import_view = require("@codemirror/view");
59
- var import_react4 = require("@phosphor-icons/react");
60
- var import_react5 = __toESM(require("react"));
61
- var import_app_framework2 = require("@dxos/app-framework");
51
+ var import_react2 = require("@phosphor-icons/react");
52
+ var import_react3 = __toESM(require("react"));
53
+ var import_app_framework = require("@dxos/app-framework");
62
54
  var import_live_object2 = require("@dxos/live-object");
63
55
  var import_react_client = require("@dxos/react-client");
64
56
  var import_halo2 = require("@dxos/react-client/halo");
65
- var import_react_ui3 = require("@dxos/react-ui");
57
+ var import_react_ui2 = require("@dxos/react-ui");
66
58
  var import_react_ui_editor2 = require("@dxos/react-ui-editor");
67
59
  var import_react_ui_mosaic = require("@dxos/react-ui-mosaic");
68
60
  var import_react_ui_theme2 = require("@dxos/react-ui-theme");
@@ -72,61 +64,6 @@ var import_react_ui_editor3 = require("@dxos/react-ui-editor");
72
64
  var import_react_ui_theme3 = require("@dxos/react-ui-theme");
73
65
  var import_display_name = require("@dxos/display-name");
74
66
  var import_util = require("@dxos/util");
75
- var useStatus = (space, channel) => {
76
- const [processing, setProcessing] = (0, import_react.useState)(false);
77
- (0, import_react.useEffect)(() => {
78
- if (!space || !channel) {
79
- return;
80
- }
81
- const unsubscribe = space.listen(`status/${channel}`, (status) => {
82
- const { event } = status.payload ?? {};
83
- setProcessing(event === "processing");
84
- });
85
- const t = setInterval(() => {
86
- setProcessing((prev) => {
87
- if (typeof prev?.ts === "number" && Date.now() - prev.ts > 3e4) {
88
- return void 0;
89
- } else {
90
- return prev;
91
- }
92
- });
93
- }, 1e3);
94
- return () => {
95
- unsubscribe();
96
- clearInterval(t);
97
- };
98
- }, [
99
- space,
100
- channel
101
- ]);
102
- return processing;
103
- };
104
- var useAnalyticsCallback = (spaceId, name, meta) => {
105
- const { dispatchPromise: dispatch } = (0, import_app_framework.useIntentDispatcher)();
106
- return (0, import_react2.useCallback)((dynamicMeta) => {
107
- void dispatch((0, import_app_framework.createIntent)(import_types.ObservabilityAction.SendEvent, {
108
- name,
109
- properties: {
110
- ...meta,
111
- ...dynamicMeta,
112
- spaceId
113
- }
114
- }));
115
- }, [
116
- dispatch,
117
- name,
118
- meta,
119
- spaceId
120
- ]);
121
- };
122
- var useOnEditAnalytics = (message, editing) => {
123
- const space = (0, import_echo.getSpace)(message);
124
- const onEditAnalytics = useAnalyticsCallback(space?.id, "threads.comment-edited", {
125
- messageId: message.id,
126
- messageLength: message.text.length
127
- });
128
- (0, import_react_ui.useOnTransition)(editing, true, false, onEditAnalytics);
129
- };
130
67
  var parser = import_language.StreamLanguage.define({
131
68
  startState: () => ({
132
69
  count: 0
@@ -175,80 +112,80 @@ var MessageContainer = ({ message, members, onDelete }) => {
175
112
  const senderIdentity = members.find((member) => message.sender.identityKey && import_react_client.PublicKey.equals(member.identity.identityKey, message.sender.identityKey))?.identity;
176
113
  const messageMetadata = getMessageMetadata(message.id, senderIdentity);
177
114
  const userIsAuthor = (0, import_halo2.useIdentity)()?.identityKey.toHex() === messageMetadata.authorId;
178
- const [editing, setEditing] = (0, import_react5.useState)(false);
179
- const handleDelete = (0, import_react5.useCallback)(() => onDelete?.(message.id), [
115
+ const [editing, setEditing] = (0, import_react3.useState)(false);
116
+ const handleDelete = (0, import_react3.useCallback)(() => onDelete?.(message.id), [
180
117
  message,
181
118
  onDelete
182
119
  ]);
183
- const { t } = (0, import_react_ui3.useTranslation)(import_chunk_IC2NICNC.THREAD_PLUGIN);
120
+ const { t } = (0, import_react_ui2.useTranslation)(import_chunk_F735VMTN.THREAD_PLUGIN);
184
121
  const editLabel = t(editing ? "save message label" : "edit message label");
185
122
  const deleteLabel = t("delete message label");
186
- return /* @__PURE__ */ import_react5.default.createElement(import_react_ui_thread2.MessageRoot, {
123
+ return /* @__PURE__ */ import_react3.default.createElement(import_react_ui_thread2.MessageRoot, {
187
124
  ...messageMetadata,
188
125
  classNames: [
189
126
  import_react_ui_theme2.hoverableControls,
190
127
  import_react_ui_theme2.hoverableFocusedWithinControls
191
128
  ]
192
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui_thread2.MessageHeading, {
129
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui_thread2.MessageHeading, {
193
130
  authorName: messageMetadata.authorName,
194
131
  timestamp: messageMetadata.timestamp
195
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.ButtonGroup, {
132
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ButtonGroup, {
196
133
  classNames: "mie-1"
197
- }, userIsAuthor && /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Root, null, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Trigger, {
134
+ }, userIsAuthor && /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Root, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Trigger, {
198
135
  asChild: true
199
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Button, {
136
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Button, {
200
137
  variant: "ghost",
201
138
  "data-testid": editing ? "thread.message.save" : "thread.message.edit",
202
139
  classNames: messageControlClassNames,
203
140
  onClick: () => setEditing((editing2) => !editing2)
204
- }, /* @__PURE__ */ import_react5.default.createElement("span", {
141
+ }, /* @__PURE__ */ import_react3.default.createElement("span", {
205
142
  className: "sr-only"
206
- }, editLabel), editing ? /* @__PURE__ */ import_react5.default.createElement(import_react4.Check, {
143
+ }, editLabel), editing ? /* @__PURE__ */ import_react3.default.createElement(import_react2.Check, {
207
144
  className: (0, import_react_ui_theme2.getSize)(4)
208
- }) : /* @__PURE__ */ import_react5.default.createElement(import_react4.PencilSimple, {
145
+ }) : /* @__PURE__ */ import_react3.default.createElement(import_react2.PencilSimple, {
209
146
  className: (0, import_react_ui_theme2.getSize)(4)
210
- }))), /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Portal, null, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Content, null, editLabel, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Arrow, null)))), onDelete && /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Root, null, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Trigger, {
147
+ }))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Portal, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Content, null, editLabel, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Arrow, null)))), onDelete && /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Root, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Trigger, {
211
148
  asChild: true
212
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Button, {
149
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Button, {
213
150
  variant: "ghost",
214
151
  "data-testid": "thread.message.delete",
215
152
  classNames: messageControlClassNames,
216
153
  onClick: () => handleDelete()
217
- }, /* @__PURE__ */ import_react5.default.createElement("span", {
154
+ }, /* @__PURE__ */ import_react3.default.createElement("span", {
218
155
  className: "sr-only"
219
- }, deleteLabel), /* @__PURE__ */ import_react5.default.createElement(import_react4.X, {
156
+ }, deleteLabel), /* @__PURE__ */ import_react3.default.createElement(import_react2.X, {
220
157
  className: (0, import_react_ui_theme2.getSize)(4)
221
- }))), /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Portal, null, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Content, null, deleteLabel, /* @__PURE__ */ import_react5.default.createElement(import_react_ui3.Tooltip.Arrow, null)))))), /* @__PURE__ */ import_react5.default.createElement(TextboxBlock, {
158
+ }))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Portal, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Content, null, deleteLabel, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.Tooltip.Arrow, null)))))), /* @__PURE__ */ import_react3.default.createElement(TextboxBlock, {
222
159
  message,
223
160
  isAuthor: userIsAuthor,
224
161
  editing
225
- }), import_live_object2.RefArray.allResolvedTargets(message.parts ?? []).map((part, index) => /* @__PURE__ */ import_react5.default.createElement(MessagePart, {
162
+ }), import_live_object2.RefArray.allResolvedTargets(message.parts ?? []).map((part, index) => /* @__PURE__ */ import_react3.default.createElement(MessagePart, {
226
163
  key: index,
227
164
  part
228
165
  })));
229
166
  };
230
167
  var MessagePart = ({ part }) => {
231
- return /* @__PURE__ */ import_react5.default.createElement(import_react_ui_mosaic.Mosaic.Container, {
168
+ return /* @__PURE__ */ import_react3.default.createElement(import_react_ui_mosaic.Mosaic.Container, {
232
169
  id: part.id
233
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui_mosaic.Mosaic.DraggableTile, {
234
- type: import_chunk_IC2NICNC.THREAD_ITEM,
170
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui_mosaic.Mosaic.DraggableTile, {
171
+ type: import_chunk_F735VMTN.THREAD_ITEM,
235
172
  path: part.id,
236
173
  item: part,
237
174
  Component: MessageBlockObjectTile
238
175
  }));
239
176
  };
240
177
  var TextboxBlock = ({ message, isAuthor, editing }) => {
241
- const { themeMode } = (0, import_react_ui3.useThemeContext)();
242
- const inMemoryContentRef = (0, import_react5.useRef)(message.text);
243
- const handleDocumentChange = (0, import_react5.useCallback)((newState) => {
178
+ const { themeMode } = (0, import_react_ui2.useThemeContext)();
179
+ const inMemoryContentRef = (0, import_react3.useRef)(message.text);
180
+ const handleDocumentChange = (0, import_react3.useCallback)((newState) => {
244
181
  inMemoryContentRef.current = newState;
245
182
  }, []);
246
- const saveDocumentChange = (0, import_react5.useCallback)(() => {
183
+ const saveDocumentChange = (0, import_react3.useCallback)(() => {
247
184
  message.text = inMemoryContentRef.current;
248
185
  }, [
249
186
  message
250
187
  ]);
251
- (0, import_react_ui3.useOnTransition)(editing, true, false, saveDocumentChange);
188
+ (0, import_react_ui2.useOnTransition)(editing, true, false, saveDocumentChange);
252
189
  const { parentRef, focusAttributes, view } = (0, import_react_ui_editor2.useTextEditor)(() => ({
253
190
  initialValue: message.text,
254
191
  extensions: [
@@ -272,31 +209,31 @@ var TextboxBlock = ({ message, isAuthor, editing }) => {
272
209
  themeMode,
273
210
  handleDocumentChange
274
211
  ]);
275
- (0, import_react5.useEffect)(() => {
212
+ (0, import_react3.useEffect)(() => {
276
213
  editing && view?.focus();
277
214
  }, [
278
215
  editing,
279
216
  view
280
217
  ]);
281
- useOnEditAnalytics(message, !!editing);
282
- return /* @__PURE__ */ import_react5.default.createElement("div", {
218
+ (0, import_chunk_AWSTZ2KN.useOnEditAnalytics)(message, !!editing);
219
+ return /* @__PURE__ */ import_react3.default.createElement("div", {
283
220
  role: "none",
284
221
  ref: parentRef,
285
222
  className: "mie-4",
286
223
  ...focusAttributes
287
224
  });
288
225
  };
289
- var MessageBlockObjectTile = /* @__PURE__ */ (0, import_react5.forwardRef)(({ draggableStyle, draggableProps, item, active, ref: _ref, ...props }, forwardedRef) => {
226
+ var MessageBlockObjectTile = /* @__PURE__ */ (0, import_react3.forwardRef)(({ draggableStyle, draggableProps, item, active, ref: _ref, ...props }, forwardedRef) => {
290
227
  let title = item.name ?? item.title ?? item.type ?? "Object";
291
228
  if (typeof title !== "string") {
292
229
  title = title?.content ?? "";
293
230
  }
294
- return /* @__PURE__ */ import_react5.default.createElement("div", {
231
+ return /* @__PURE__ */ import_react3.default.createElement("div", {
295
232
  role: "group",
296
233
  className: (0, import_react_ui_theme2.mx)("grid col-span-3 py-1 pr-4", import_react_ui_theme2.hoverableControls, import_react_ui_theme2.hoverableFocusedWithinControls),
297
234
  style: draggableStyle,
298
235
  ref: forwardedRef
299
- }, /* @__PURE__ */ import_react5.default.createElement(import_app_framework2.Surface, {
236
+ }, /* @__PURE__ */ import_react3.default.createElement(import_app_framework.Surface, {
300
237
  role: "card",
301
238
  limit: 1,
302
239
  data: {
@@ -309,18 +246,18 @@ var MessageBlockObjectTile = /* @__PURE__ */ (0, import_react5.forwardRef)(({ dr
309
246
  });
310
247
  var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
311
248
  const identity = (0, import_halo.useIdentity)();
312
- const space = (0, import_echo2.getSpace)(thread);
313
- const members = (0, import_echo2.useMembers)(space?.key);
314
- const activity = useStatus(space, (0, import_echo2.fullyQualifiedId)(thread));
315
- const { t } = (0, import_react_ui2.useTranslation)(import_chunk_IC2NICNC.THREAD_PLUGIN);
316
- const [_count, _setCount] = (0, import_react3.useState)(0);
249
+ const space = (0, import_echo.getSpace)(thread);
250
+ const members = (0, import_echo.useMembers)(space?.key);
251
+ const activity = (0, import_chunk_AWSTZ2KN.useStatus)(space, (0, import_echo.fullyQualifiedId)(thread));
252
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_F735VMTN.THREAD_PLUGIN);
253
+ const [_count, _setCount] = (0, import_react.useState)(0);
317
254
  const rerenderEditor = () => _setCount((count) => count + 1);
318
- const [autoFocus, setAutoFocus] = (0, import_react3.useState)(autoFocusTextbox);
319
- const threadScrollRef = (0, import_react3.useRef)(null);
320
- const { themeMode } = (0, import_react_ui2.useThemeContext)();
321
- const textboxMetadata = getMessageMetadata((0, import_echo2.fullyQualifiedId)(thread), identity);
322
- const messageRef = (0, import_react3.useRef)("");
323
- const extensions = (0, import_react3.useMemo)(() => [
255
+ const [autoFocus, setAutoFocus] = (0, import_react.useState)(autoFocusTextbox);
256
+ const threadScrollRef = (0, import_react.useRef)(null);
257
+ const { themeMode } = (0, import_react_ui.useThemeContext)();
258
+ const textboxMetadata = getMessageMetadata((0, import_echo.fullyQualifiedId)(thread), identity);
259
+ const messageRef = (0, import_react.useRef)("");
260
+ const extensions = (0, import_react.useMemo)(() => [
324
261
  (0, import_react_ui_editor.createBasicExtensions)({
325
262
  placeholder: t("message placeholder")
326
263
  }),
@@ -339,14 +276,14 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
339
276
  behavior,
340
277
  block: "end"
341
278
  }), 10);
342
- (0, import_react3.useLayoutEffect)(() => {
279
+ (0, import_react.useLayoutEffect)(() => {
343
280
  scrollToEnd("instant");
344
281
  }, []);
345
282
  const handleCreate = () => {
346
283
  if (!messageRef.current?.length) {
347
284
  return false;
348
285
  }
349
- thread.messages.push((0, import_live_object.makeRef)((0, import_live_object.create)(import_types2.MessageType, {
286
+ thread.messages.push((0, import_live_object.makeRef)((0, import_live_object.create)(import_types.MessageType, {
350
287
  sender: {
351
288
  identityKey: identity.identityKey.toHex()
352
289
  },
@@ -366,32 +303,32 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
366
303
  thread.messages.splice(messageIndex, 1);
367
304
  }
368
305
  };
369
- return /* @__PURE__ */ import_react3.default.createElement(import_react_ui_thread.Thread, {
306
+ return /* @__PURE__ */ import_react.default.createElement(import_react_ui_thread.Thread, {
370
307
  current,
371
- id: (0, import_echo2.fullyQualifiedId)(thread),
308
+ id: (0, import_echo.fullyQualifiedId)(thread),
372
309
  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"
373
- }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ScrollArea.Root, {
310
+ }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.ScrollArea.Root, {
374
311
  classNames: "col-span-2"
375
- }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ScrollArea.Viewport, {
312
+ }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.ScrollArea.Viewport, {
376
313
  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]"
377
- }, /* @__PURE__ */ import_react3.default.createElement("div", {
314
+ }, /* @__PURE__ */ import_react.default.createElement("div", {
378
315
  role: "none",
379
316
  className: (0, import_react_ui_theme.mx)(import_react_ui_thread.threadLayout, "place-self-end")
380
- }, import_live_object.RefArray.allResolvedTargets(thread.messages ?? []).map((message) => /* @__PURE__ */ import_react3.default.createElement(MessageContainer, {
317
+ }, import_live_object.RefArray.allResolvedTargets(thread.messages ?? []).map((message) => /* @__PURE__ */ import_react.default.createElement(MessageContainer, {
381
318
  key: message.id,
382
319
  message,
383
320
  members,
384
321
  onDelete: handleDelete
385
- }))), /* @__PURE__ */ import_react3.default.createElement("div", {
322
+ }))), /* @__PURE__ */ import_react.default.createElement("div", {
386
323
  role: "none",
387
324
  className: "bs-px -mbs-px",
388
325
  ref: threadScrollRef
389
- }), /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ScrollArea.Scrollbar, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.ScrollArea.Thumb, null)))), /* @__PURE__ */ import_react3.default.createElement(import_react_ui_thread.MessageTextbox, {
326
+ }), /* @__PURE__ */ import_react.default.createElement(import_react_ui.ScrollArea.Scrollbar, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui.ScrollArea.Thumb, null)))), /* @__PURE__ */ import_react.default.createElement(import_react_ui_thread.MessageTextbox, {
390
327
  extensions,
391
328
  autoFocus,
392
329
  onSend: handleCreate,
393
330
  ...textboxMetadata
394
- }), /* @__PURE__ */ import_react3.default.createElement(import_react_ui_thread.ThreadFooter, {
331
+ }), /* @__PURE__ */ import_react.default.createElement(import_react_ui_thread.ThreadFooter, {
395
332
  activity
396
333
  }, t("activity message")));
397
334
  };
@@ -400,9 +337,6 @@ var ChatContainer = ({ thread, context, current, autoFocusTextbox }) => {
400
337
  ChatContainer,
401
338
  MessageContainer,
402
339
  command,
403
- getMessageMetadata,
404
- useAnalyticsCallback,
405
- useOnEditAnalytics,
406
- useStatus
340
+ getMessageMetadata
407
341
  });
408
- //# sourceMappingURL=chunk-2CB5AVBL.cjs.map
342
+ //# sourceMappingURL=chunk-6PUGKCPR.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/ChatContainer.tsx", "../../../src/components/MessageContainer.tsx", "../../../src/components/command-extension.ts", "../../../src/util.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useLayoutEffect, useMemo, useRef, useState } from 'react';\n\nimport { Ref } from '@dxos/echo-schema';\nimport { create, makeRef, RefArray } from '@dxos/live-object';\nimport { MessageType } from '@dxos/plugin-space/types';\nimport { fullyQualifiedId, getSpace, useMembers, type Expando } 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';\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 const ChatContainer = ({ thread, context, current, autoFocusTextbox }: ThreadContainerProps) => {\n const identity = useIdentity()!;\n const space = getSpace(thread);\n const members = useMembers(space?.key);\n const activity = useStatus(space, fullyQualifiedId(thread));\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(fullyQualifiedId(thread), 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) {\n return false;\n }\n\n thread.messages.push(\n makeRef(\n create(MessageType, {\n sender: { identityKey: identity.identityKey.toHex() },\n timestamp: new Date().toISOString(),\n text: messageRef.current,\n context: makeRef(context as Expando),\n }),\n ),\n );\n\n messageRef.current = '';\n setAutoFocus(true);\n scrollToEnd('smooth');\n rerenderEditor();\n return true;\n };\n\n const handleDelete = (id: string) => {\n const messageIndex = thread.messages.findIndex(Ref.hasObjectId(id));\n if (messageIndex !== -1) {\n thread.messages.splice(messageIndex, 1);\n }\n };\n\n return (\n <Thread\n current={current}\n id={fullyQualifiedId(thread)}\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 {RefArray.allResolvedTargets(thread.messages ?? []).map((message) => (\n <MessageContainer key={message.id} message={message} members={members} onDelete={handleDelete} />\n ))}\n </div>\n {/* NOTE(thure): This can’t also be the `overflow-anchor` because `ScrollArea` injects an interceding node that contains this necessary ref’d element. */}\n <div role='none' className='bs-px -mbs-px' ref={threadScrollRef} />\n <ScrollArea.Scrollbar>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n <MessageTextbox extensions={extensions} autoFocus={autoFocus} onSend={handleCreate} {...textboxMetadata} />\n <ThreadFooter activity={activity}>{t('activity message')}</ThreadFooter>\n </Thread>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { EditorView } from '@codemirror/view';\nimport { Check, PencilSimple, X } from '@phosphor-icons/react';\nimport React, { forwardRef, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { RefArray } from '@dxos/live-object';\nimport { type MessageType } from '@dxos/plugin-space/types';\nimport { PublicKey } from '@dxos/react-client';\nimport { type ReactiveEchoObject, type Expando, type SpaceMember } from '@dxos/react-client/echo';\nimport { useIdentity, type Identity } from '@dxos/react-client/halo';\nimport { Button, ButtonGroup, Tooltip, useOnTransition, useThemeContext, useTranslation } from '@dxos/react-ui';\nimport { createBasicExtensions, createThemeExtensions, useTextEditor } from '@dxos/react-ui-editor';\nimport { Mosaic, type MosaicTileComponent } from '@dxos/react-ui-mosaic';\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';\n\nimport { command } from './command-extension';\nimport { useOnEditAnalytics } from '../hooks';\nimport { THREAD_ITEM, THREAD_PLUGIN } from '../meta';\nimport { getMessageMetadata } from '../util';\n\n// TODO(thure): #8149\nconst messageControlClassNames = ['!p-1 !min-bs-0 transition-opacity', hoverableControlItem];\n\nexport const MessageContainer = ({\n message,\n members,\n onDelete,\n}: {\n message: MessageType;\n members: SpaceMember[];\n onDelete?: (id: string) => void;\n}) => {\n const senderIdentity = members.find(\n (member) => message.sender.identityKey && PublicKey.equals(member.identity.identityKey, message.sender.identityKey),\n )?.identity;\n const messageMetadata = getMessageMetadata(message.id, senderIdentity);\n const userIsAuthor = useIdentity()?.identityKey.toHex() === messageMetadata.authorId;\n const [editing, setEditing] = useState(false);\n const handleDelete = useCallback(() => onDelete?.(message.id), [message, onDelete]);\n const { t } = useTranslation(THREAD_PLUGIN);\n const editLabel = t(editing ? 'save message label' : 'edit message label');\n const deleteLabel = t('delete message label');\n\n return (\n <MessageRoot {...messageMetadata} classNames={[hoverableControls, hoverableFocusedWithinControls]}>\n <MessageHeading authorName={messageMetadata.authorName} timestamp={messageMetadata.timestamp}>\n <ButtonGroup classNames='mie-1'>\n {userIsAuthor && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button\n variant='ghost'\n data-testid={editing ? 'thread.message.save' : 'thread.message.edit'}\n classNames={messageControlClassNames}\n onClick={() => setEditing((editing) => !editing)}\n >\n <span className='sr-only'>{editLabel}</span>\n {editing ? <Check className={getSize(4)} /> : <PencilSimple className={getSize(4)} />}\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n {editLabel}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n {onDelete && (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <Button\n variant='ghost'\n data-testid='thread.message.delete'\n classNames={messageControlClassNames}\n onClick={() => handleDelete()}\n >\n <span className='sr-only'>{deleteLabel}</span>\n <X className={getSize(4)} />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content>\n {deleteLabel}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n )}\n </ButtonGroup>\n </MessageHeading>\n <TextboxBlock message={message} isAuthor={userIsAuthor} editing={editing} />\n {RefArray.allResolvedTargets(message.parts ?? []).map((part, index) => (\n <MessagePart key={index} part={part} />\n ))}\n </MessageRoot>\n );\n};\n\nconst MessagePart = ({ part }: { part: Expando }) => {\n return (\n <Mosaic.Container id={part.id}>\n <Mosaic.DraggableTile type={THREAD_ITEM} path={part.id} item={part} Component={MessageBlockObjectTile} />\n </Mosaic.Container>\n );\n};\n\nconst TextboxBlock = ({\n message,\n isAuthor,\n editing,\n}: {\n message: MessageType;\n editing?: boolean;\n isAuthor?: boolean;\n identity?: Identity;\n}) => {\n const { themeMode } = useThemeContext();\n const inMemoryContentRef = useRef(message.text);\n\n const handleDocumentChange = useCallback((newState: string) => {\n inMemoryContentRef.current = newState;\n }, []);\n\n const saveDocumentChange = useCallback(() => {\n message.text = inMemoryContentRef.current;\n }, [message]);\n\n useOnTransition(editing, true, false, saveDocumentChange);\n\n const { parentRef, focusAttributes, view } = useTextEditor(\n () => ({\n initialValue: message.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 [message.text, editing, isAuthor, themeMode, handleDocumentChange],\n );\n\n useEffect(() => {\n editing && view?.focus();\n }, [editing, view]);\n\n useOnEditAnalytics(message, !!editing);\n\n return <div role='none' ref={parentRef} className='mie-4' {...focusAttributes} />;\n};\n\nconst MessageBlockObjectTile: MosaicTileComponent<ReactiveEchoObject<any>> = forwardRef(\n ({ draggableStyle, draggableProps, item, active, ref: _ref, ...props }, forwardedRef) => {\n let title = item.name ?? item.title ?? item.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 style={draggableStyle}\n ref={forwardedRef}\n >\n <Surface\n role='card'\n limit={1}\n data={{ subject: item }}\n draggableProps={draggableProps}\n fallback={title}\n {...props}\n />\n </div>\n );\n },\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { StreamLanguage, HighlightStyle, syntaxHighlighting } from '@codemirror/language';\nimport { type Extension } from '@codemirror/state';\n\nimport { tags } from '@dxos/react-ui-editor';\nimport { mx, tagRoot } 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 {\n tag: tags.tagName,\n class: mx(tagRoot({ palette: 'cyan' }), 'text-baseText font-medium'),\n },\n]);\n\nexport const command: Extension = [parser, syntaxHighlighting(styles)];\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { generateName } from '@dxos/display-name';\nimport { type PublicKey } from '@dxos/react-client';\nimport { type Identity } from '@dxos/react-client/halo';\nimport { type MessageMetadata } from '@dxos/react-ui-thread';\nimport { hexToFallback } from '@dxos/util';\n\nexport type MessagePropertiesProvider = (identityKey: PublicKey | undefined) => MessageMetadata;\n\nexport const getMessageMetadata = (id: string, identity?: Identity): MessageMetadata => {\n const fallback = hexToFallback(identity?.identityKey.toHex() ?? '0');\n return {\n id,\n authorId: identity?.identityKey.toHex(),\n authorName:\n identity?.profile?.displayName ??\n (identity?.identityKey ? generateName(identity.identityKey.toHex()) : undefined),\n authorAvatarProps: {\n hue: identity?.profile?.data?.hue ?? fallback.hue,\n emoji: identity?.profile?.data?.emoji ?? fallback.emoji,\n },\n };\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["import_react", "import_live_object", "import_halo", "import_react_ui", "import_react_ui_editor", "import_react_ui_theme", "import_react_ui_thread", "parser", "StreamLanguage", "define", "startState", "count", "token", "stream", "state", "eatSpace", "match", "next", "styles", "HighlightStyle", "tag", "tags", "tagName", "class", "mx", "tagRoot", "palette", "command", "syntaxHighlighting", "getMessageMetadata", "id", "identity", "fallback", "hexToFallback", "identityKey", "toHex", "authorId", "authorName", "profile", "displayName", "generateName", "undefined", "authorAvatarProps", "hue", "data", "emoji", "messageControlClassNames", "hoverableControlItem", "MessageContainer", "message", "members", "onDelete", "senderIdentity", "find", "member", "sender", "PublicKey", "equals", "messageMetadata", "userIsAuthor", "useIdentity", "editing", "setEditing", "useState", "handleDelete", "useCallback", "t", "useTranslation", "THREAD_PLUGIN", "editLabel", "deleteLabel", "React", "MessageRoot", "classNames", "hoverableControls", "hoverableFocusedWithinControls", "MessageHeading", "timestamp", "ButtonGroup", "Tooltip", "Root", "Trigger", "asChild", "Button", "variant", "data-testid", "onClick", "span", "className", "Check", "getSize", "PencilSimple", "Portal", "Content", "Arrow", "X", "TextboxBlock", "isAuthor", "RefArray", "allResolvedTargets", "parts", "map", "part", "index", "MessagePart", "key", "Mosaic", "Container", "DraggableTile", "type", "THREAD_ITEM", "path", "item", "Component", "MessageBlockObjectTile", "themeMode", "useThemeContext", "inMemoryContentRef", "useRef", "text", "handleDocumentChange", "newState", "current", "saveDocumentChange", "useOnTransition", "parentRef", "focusAttributes", "view", "useTextEditor", "initialValue", "extensions", "createBasicExtensions", "readonly", "createThemeExtensions", "EditorView", "updateListener", "of", "update", "docChanged", "doc", "toString", "useEffect", "focus", "useOnEditAnalytics", "div", "role", "ref", "forwardRef", "draggableStyle", "draggableProps", "active", "_ref", "props", "forwardedRef", "title", "name", "content", "style", "Surface", "limit", "subject", "ChatContainer", "thread", "context", "autoFocusTextbox", "space", "getSpace", "useMembers", "activity", "useStatus", "fullyQualifiedId", "_count", "_setCount", "rerenderEditor", "autoFocus", "setAutoFocus", "threadScrollRef", "textboxMetadata", "messageRef", "useMemo", "placeholder", "listener", "onChange", "scrollToEnd", "behavior", "setTimeout", "scrollIntoView", "block", "useLayoutEffect", "handleCreate", "length", "messages", "push", "makeRef", "create", "MessageType", "Date", "toISOString", "messageIndex", "findIndex", "Ref", "hasObjectId", "splice", "Thread", "ScrollArea", "Viewport", "threadLayout", "Scrollbar", "Thumb", "MessageTextbox", "onSend", "ThreadFooter"]
7
+ }
@@ -16,18 +16,19 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var chunk_VW2P26MZ_exports = {};
20
- __export(chunk_VW2P26MZ_exports, {
21
- ThreadAction: () => ThreadAction
19
+ var chunk_AUVKOX5Q_exports = {};
20
+ __export(chunk_AUVKOX5Q_exports, {
21
+ ThreadAction: () => ThreadAction,
22
+ ThreadSettingsSchema: () => ThreadSettingsSchema
22
23
  });
23
- module.exports = __toCommonJS(chunk_VW2P26MZ_exports);
24
- var import_chunk_IC2NICNC = require("./chunk-IC2NICNC.cjs");
24
+ module.exports = __toCommonJS(chunk_AUVKOX5Q_exports);
25
+ var import_chunk_F735VMTN = require("./chunk-F735VMTN.cjs");
25
26
  var import_echo_schema = require("@dxos/echo-schema");
26
27
  var import_types = require("@dxos/plugin-space/types");
27
28
  var import_echo = require("@dxos/react-client/echo");
28
29
  var ThreadAction;
29
30
  (function(ThreadAction2) {
30
- const THREAD_ACTION = `${import_chunk_IC2NICNC.THREAD_PLUGIN}/action`;
31
+ const THREAD_ACTION = `${import_chunk_F735VMTN.THREAD_PLUGIN}/action`;
31
32
  class Create extends import_echo_schema.S.TaggedClass()(`${THREAD_ACTION}/create`, {
32
33
  input: import_echo_schema.S.Struct({
33
34
  name: import_echo_schema.S.optional(import_echo_schema.S.String),
@@ -89,8 +90,12 @@ var ThreadAction;
89
90
  }
90
91
  ThreadAction2.DeleteMessage = DeleteMessage;
91
92
  })(ThreadAction || (ThreadAction = {}));
93
+ var ThreadSettingsSchema = import_echo_schema.S.mutable(import_echo_schema.S.Struct({
94
+ standalone: import_echo_schema.S.optional(import_echo_schema.S.Boolean)
95
+ }));
92
96
  // Annotate the CommonJS export names for ESM import in node:
93
97
  0 && (module.exports = {
94
- ThreadAction
98
+ ThreadAction,
99
+ ThreadSettingsSchema
95
100
  });
96
- //# sourceMappingURL=chunk-VW2P26MZ.cjs.map
101
+ //# sourceMappingURL=chunk-AUVKOX5Q.cjs.map