@dxos/plugin-thread 0.8.4-main.21d9917 → 0.8.4-main.2244d791bb
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.
- package/dist/lib/browser/{app-graph-builder-SPAZN5XL.mjs → app-graph-builder-XFGLMIGK.mjs} +6 -5
- package/dist/lib/browser/app-graph-builder-XFGLMIGK.mjs.map +7 -0
- package/dist/lib/browser/blueprint-definition-RWH6FTW7.mjs +17 -0
- package/dist/lib/browser/blueprint-definition-RWH6FTW7.mjs.map +7 -0
- package/dist/lib/browser/blueprints/index.mjs +3 -3
- package/dist/lib/browser/{call-manager-YBRTG6T3.mjs → call-manager-GDGIKJKN.mjs} +4 -4
- package/dist/lib/browser/call-manager-GDGIKJKN.mjs.map +7 -0
- package/dist/lib/browser/{chunk-TAWDJPMD.mjs → chunk-2FIHSX35.mjs} +2 -2
- package/dist/lib/browser/chunk-2FIHSX35.mjs.map +7 -0
- package/dist/lib/browser/{chunk-VZICDGBW.mjs → chunk-4EUEMHNI.mjs} +48 -44
- package/dist/lib/browser/chunk-4EUEMHNI.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ZFLSTQSE.mjs → chunk-CBX65FMW.mjs} +25 -26
- package/dist/lib/browser/chunk-CBX65FMW.mjs.map +7 -0
- package/dist/lib/browser/{chunk-DLO2G3DM.mjs → chunk-JBB73URQ.mjs} +2 -2
- package/dist/lib/browser/chunk-JBB73URQ.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +54 -53
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{markdown-TSXOA3GV.mjs → markdown-YJCSOWXX.mjs} +7 -7
- package/dist/lib/browser/markdown-YJCSOWXX.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{operation-resolver-MDMEBYH2.mjs → operation-resolver-PROCP5L4.mjs} +9 -9
- package/dist/lib/browser/operation-resolver-PROCP5L4.mjs.map +7 -0
- package/dist/lib/browser/{react-root-Q7U5D3DA.mjs → react-root-FHK2SVPU.mjs} +6 -6
- package/dist/lib/browser/react-root-FHK2SVPU.mjs.map +7 -0
- package/dist/lib/browser/{react-surface-WDZQSDWH.mjs → react-surface-7MQA6VSH.mjs} +16 -15
- package/dist/lib/browser/react-surface-7MQA6VSH.mjs.map +7 -0
- package/dist/lib/browser/{repair-TDKAFAGH.mjs → repair-6OZ75AUU.mjs} +2 -2
- package/dist/lib/browser/{settings-OOKKVXV7.mjs → settings-TWKOTGSU.mjs} +5 -4
- package/dist/lib/browser/settings-TWKOTGSU.mjs.map +7 -0
- package/dist/lib/browser/{state-3LKZHDRI.mjs → state-SJR2GL5G.mjs} +2 -2
- package/dist/lib/browser/types/index.mjs +1 -1
- package/dist/lib/node-esm/{app-graph-builder-3LJAPDUW.mjs → app-graph-builder-IN6VLJBO.mjs} +6 -5
- package/dist/lib/node-esm/app-graph-builder-IN6VLJBO.mjs.map +7 -0
- package/dist/lib/node-esm/{blueprint-definition-MZZXXL37.mjs → blueprint-definition-QZ3GXYAN.mjs} +6 -6
- package/dist/lib/node-esm/blueprint-definition-QZ3GXYAN.mjs.map +7 -0
- package/dist/lib/node-esm/blueprints/index.mjs +3 -3
- package/dist/lib/node-esm/{call-manager-MMCTNFOH.mjs → call-manager-36UAAQCJ.mjs} +4 -4
- package/dist/lib/node-esm/call-manager-36UAAQCJ.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-AQHPP6ZX.mjs → chunk-2UQ73JQJ.mjs} +25 -25
- package/dist/lib/node-esm/chunk-2UQ73JQJ.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-KRBZBJRI.mjs → chunk-G7PZNN3Z.mjs} +2 -2
- package/dist/lib/node-esm/chunk-G7PZNN3Z.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-3RD3IVVD.mjs → chunk-RBRWHRHE.mjs} +48 -44
- package/dist/lib/node-esm/chunk-RBRWHRHE.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-ARTUUKTM.mjs → chunk-WMWUXWAS.mjs} +2 -2
- package/dist/lib/node-esm/chunk-WMWUXWAS.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +54 -53
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{markdown-N2UJ3D6L.mjs → markdown-6LRP3PAP.mjs} +7 -7
- package/dist/lib/node-esm/markdown-6LRP3PAP.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{operation-resolver-7PHDJZA2.mjs → operation-resolver-LPEPV5BF.mjs} +9 -9
- package/dist/lib/node-esm/operation-resolver-LPEPV5BF.mjs.map +7 -0
- package/dist/lib/node-esm/{react-root-SZIGQRDZ.mjs → react-root-P5P4VGQJ.mjs} +6 -6
- package/dist/lib/node-esm/react-root-P5P4VGQJ.mjs.map +7 -0
- package/dist/lib/node-esm/{react-surface-24PNWUDX.mjs → react-surface-M7VI5XG2.mjs} +16 -15
- package/dist/lib/node-esm/react-surface-M7VI5XG2.mjs.map +7 -0
- package/dist/lib/node-esm/{repair-LHLLGXKF.mjs → repair-6777EPOM.mjs} +2 -2
- package/dist/lib/node-esm/{settings-LXZQXSPL.mjs → settings-5O254B3Z.mjs} +5 -4
- package/dist/lib/node-esm/settings-5O254B3Z.mjs.map +7 -0
- package/dist/lib/node-esm/{state-YYAK5ENM.mjs → state-5R3TZJQE.mjs} +2 -2
- package/dist/lib/node-esm/types/index.mjs +1 -1
- package/dist/types/src/ThreadPlugin.d.ts.map +1 -1
- package/dist/types/src/blueprints/index.d.ts +1 -1
- package/dist/types/src/blueprints/index.d.ts.map +1 -1
- package/dist/types/src/blueprints/thread-blueprint.d.ts +3 -20
- package/dist/types/src/blueprints/thread-blueprint.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +3 -6
- package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -1
- package/dist/types/src/capabilities/blueprint-definition/index.d.ts +1 -1
- package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/call-manager/call-manager.d.ts.map +1 -1
- package/dist/types/src/capabilities/markdown/markdown.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-resolver/index.d.ts +1 -1
- package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +2 -2
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface/index.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts +2 -2
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings/index.d.ts +1 -1
- package/dist/types/src/capabilities/settings/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings/settings.d.ts +3 -2
- package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -1
- package/dist/types/src/components/Call/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/ChannelContainer.d.ts +1 -1
- package/dist/types/src/components/ChannelContainer.d.ts.map +1 -1
- package/dist/types/src/components/ChannelContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/Chat.stories.d.ts.map +1 -1
- package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
- package/dist/types/src/components/ThreadCompanion.d.ts.map +1 -1
- package/dist/types/src/components/ThreadSettings.d.ts.map +1 -1
- package/dist/types/src/functions/create-proposals.d.ts +8 -1
- package/dist/types/src/functions/create-proposals.d.ts.map +1 -1
- package/dist/types/src/functions/index.d.ts +13 -1
- package/dist/types/src/functions/index.d.ts.map +1 -1
- package/dist/types/src/testing/stories.d.ts.map +1 -1
- package/dist/types/src/types/Channel.d.ts +422 -422
- package/dist/types/src/types/Channel.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +1674 -1674
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +63 -61
- package/src/ThreadPlugin.tsx +29 -28
- package/src/blueprints/index.ts +1 -1
- package/src/blueprints/thread-blueprint.ts +14 -6
- package/src/calls-service.stories.tsx +1 -1
- package/src/capabilities/app-graph-builder/app-graph-builder.ts +4 -3
- package/src/capabilities/blueprint-definition/blueprint-definition.ts +6 -12
- package/src/capabilities/call-manager/call-manager.ts +2 -2
- package/src/capabilities/markdown/markdown.ts +5 -5
- package/src/capabilities/operation-resolver/operation-resolver.ts +7 -7
- package/src/capabilities/react-root/react-root.tsx +2 -2
- package/src/capabilities/react-surface/react-surface.tsx +13 -12
- package/src/capabilities/settings/settings.ts +3 -2
- package/src/components/Call/Call.tsx +1 -1
- package/src/components/Call/Toolbar.tsx +2 -1
- package/src/components/CallSidebar.tsx +1 -1
- package/src/components/ChannelContainer.stories.tsx +4 -5
- package/src/components/ChannelContainer.tsx +9 -8
- package/src/components/Chat.stories.tsx +5 -4
- package/src/components/ChatContainer.tsx +15 -16
- package/src/components/Comments.stories.tsx +1 -1
- package/src/components/Lobby/Lobby.tsx +1 -1
- package/src/components/Media/VideoObject.stories.tsx +1 -1
- package/src/components/MessageContainer.tsx +2 -2
- package/src/components/Participant/Participant.tsx +1 -1
- package/src/components/ResponsiveGrid/ResponsiveContainer.stories.tsx +1 -1
- package/src/components/ResponsiveGrid/ResponsiveGrid.stories.tsx +1 -1
- package/src/components/ThreadCompanion.tsx +8 -7
- package/src/components/ThreadSettings.tsx +3 -2
- package/src/functions/create-proposals.ts +9 -9
- package/src/functions/index.ts +5 -1
- package/src/hooks/analytics.ts +1 -1
- package/src/testing/stories.ts +2 -1
- package/src/types/Channel.ts +1 -1
- package/dist/lib/browser/app-graph-builder-SPAZN5XL.mjs.map +0 -7
- package/dist/lib/browser/blueprint-definition-UQ63QKQG.mjs +0 -17
- package/dist/lib/browser/blueprint-definition-UQ63QKQG.mjs.map +0 -7
- package/dist/lib/browser/call-manager-YBRTG6T3.mjs.map +0 -7
- package/dist/lib/browser/chunk-DLO2G3DM.mjs.map +0 -7
- package/dist/lib/browser/chunk-TAWDJPMD.mjs.map +0 -7
- package/dist/lib/browser/chunk-VZICDGBW.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZFLSTQSE.mjs.map +0 -7
- package/dist/lib/browser/markdown-TSXOA3GV.mjs.map +0 -7
- package/dist/lib/browser/operation-resolver-MDMEBYH2.mjs.map +0 -7
- package/dist/lib/browser/react-root-Q7U5D3DA.mjs.map +0 -7
- package/dist/lib/browser/react-surface-WDZQSDWH.mjs.map +0 -7
- package/dist/lib/browser/settings-OOKKVXV7.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-3LJAPDUW.mjs.map +0 -7
- package/dist/lib/node-esm/blueprint-definition-MZZXXL37.mjs.map +0 -7
- package/dist/lib/node-esm/call-manager-MMCTNFOH.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-3RD3IVVD.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-AQHPP6ZX.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ARTUUKTM.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-KRBZBJRI.mjs.map +0 -7
- package/dist/lib/node-esm/markdown-N2UJ3D6L.mjs.map +0 -7
- package/dist/lib/node-esm/operation-resolver-7PHDJZA2.mjs.map +0 -7
- package/dist/lib/node-esm/react-root-SZIGQRDZ.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-24PNWUDX.mjs.map +0 -7
- package/dist/lib/node-esm/settings-LXZQXSPL.mjs.map +0 -7
- /package/dist/lib/browser/{repair-TDKAFAGH.mjs.map → repair-6OZ75AUU.mjs.map} +0 -0
- /package/dist/lib/browser/{state-3LKZHDRI.mjs.map → state-SJR2GL5G.mjs.map} +0 -0
- /package/dist/lib/node-esm/{repair-LHLLGXKF.mjs.map → repair-6777EPOM.mjs.map} +0 -0
- /package/dist/lib/node-esm/{state-YYAK5ENM.mjs.map → state-5R3TZJQE.mjs.map} +0 -0
|
@@ -5,7 +5,8 @@
|
|
|
5
5
|
import { Atom, useAtomValue } from '@effect-atom/atom-react';
|
|
6
6
|
import React, { type ChangeEvent, useCallback, useEffect, useMemo, useState } from 'react';
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { useCapabilities, useCapability } from '@dxos/app-framework/ui';
|
|
9
|
+
import { type SurfaceComponentProps } from '@dxos/app-toolkit/ui';
|
|
9
10
|
import { Context } from '@dxos/context';
|
|
10
11
|
import { failUndefined } from '@dxos/debug';
|
|
11
12
|
import { Obj } from '@dxos/echo';
|
|
@@ -14,7 +15,7 @@ import { useClient } from '@dxos/react-client';
|
|
|
14
15
|
import { getSpace } from '@dxos/react-client/echo';
|
|
15
16
|
import { useIdentity } from '@dxos/react-client/halo';
|
|
16
17
|
import { ElevationProvider, Input, useTranslation } from '@dxos/react-ui';
|
|
17
|
-
import {
|
|
18
|
+
import { Settings } from '@dxos/react-ui-form';
|
|
18
19
|
import { MenuProvider, ToolbarMenu, createMenuAction, createMenuItemGroup, useMenuActions } from '@dxos/react-ui-menu';
|
|
19
20
|
import { useSoundEffect } from '@dxos/react-ui-sfx';
|
|
20
21
|
import { StackItem } from '@dxos/react-ui-stack';
|
|
@@ -148,19 +149,19 @@ const DisplayNameMissing = () => {
|
|
|
148
149
|
const handleSave = useCallback(() => client.halo.updateProfile({ displayName }), [client, displayName]);
|
|
149
150
|
|
|
150
151
|
return (
|
|
151
|
-
<
|
|
152
|
-
<
|
|
152
|
+
<Settings.Group classNames='p-4 place-content-center'>
|
|
153
|
+
<Settings.ItemInput title={t('display name label')} description={t('display name description')}>
|
|
153
154
|
<Input.TextInput
|
|
154
155
|
value={displayName}
|
|
155
156
|
onChange={handleChange}
|
|
156
157
|
placeholder={t('display name input placeholder')}
|
|
157
158
|
classNames='md:min-is-64'
|
|
158
159
|
/>
|
|
159
|
-
</
|
|
160
|
-
<
|
|
160
|
+
</Settings.ItemInput>
|
|
161
|
+
<Settings.GroupButton disabled={!displayName} onClick={handleSave}>
|
|
161
162
|
{t('set display name label')}
|
|
162
|
-
</
|
|
163
|
-
</
|
|
163
|
+
</Settings.GroupButton>
|
|
164
|
+
</Settings.Group>
|
|
164
165
|
);
|
|
165
166
|
};
|
|
166
167
|
|
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
6
|
import React, { useState } from 'react';
|
|
7
7
|
|
|
8
|
-
import {
|
|
8
|
+
import { Capabilities, Capability, OperationPlugin } from '@dxos/app-framework';
|
|
9
9
|
import { withPluginManager } from '@dxos/app-framework/testing';
|
|
10
|
+
import { Surface } from '@dxos/app-framework/ui';
|
|
10
11
|
import { faker } from '@dxos/random';
|
|
11
12
|
import { useClient } from '@dxos/react-client';
|
|
12
13
|
import { type Space } from '@dxos/react-client/echo';
|
|
@@ -56,13 +57,13 @@ const meta = {
|
|
|
56
57
|
component: ThreadComponent.Root as any,
|
|
57
58
|
render: render(DefaultStory),
|
|
58
59
|
decorators: [
|
|
59
|
-
withTheme,
|
|
60
|
+
withTheme(),
|
|
60
61
|
withPluginManager({
|
|
61
62
|
plugins: [OperationPlugin()],
|
|
62
63
|
capabilities: [
|
|
63
64
|
Capability.contributes(
|
|
64
|
-
|
|
65
|
-
|
|
65
|
+
Capabilities.ReactSurface,
|
|
66
|
+
Surface.create({
|
|
66
67
|
id: 'test',
|
|
67
68
|
role: 'card',
|
|
68
69
|
component: ({ role }) => <span>{JSON.stringify({ role })}</span>,
|
|
@@ -98,16 +98,18 @@ export const ChatContainer = ({
|
|
|
98
98
|
return false;
|
|
99
99
|
}
|
|
100
100
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
101
|
+
Obj.change(thread, (t) => {
|
|
102
|
+
t.messages.push(
|
|
103
|
+
Ref.make(
|
|
104
|
+
Obj.make(Message.Message, {
|
|
105
|
+
created: new Date().toISOString(),
|
|
106
|
+
sender: { identityDid: identity.did },
|
|
107
|
+
blocks: [{ _tag: 'text', text: messageRef.current }],
|
|
108
|
+
properties: context ? { context: Ref.make(context) } : undefined,
|
|
109
|
+
}),
|
|
110
|
+
),
|
|
111
|
+
);
|
|
112
|
+
});
|
|
111
113
|
|
|
112
114
|
messageRef.current = '';
|
|
113
115
|
setAutoFocus(true);
|
|
@@ -126,8 +128,8 @@ export const ChatContainer = ({
|
|
|
126
128
|
classNames,
|
|
127
129
|
]}
|
|
128
130
|
>
|
|
129
|
-
<ScrollArea.Root
|
|
130
|
-
<ScrollArea.Viewport classNames='
|
|
131
|
+
<ScrollArea.Root orientation='vertical'>
|
|
132
|
+
<ScrollArea.Viewport classNames='col-span-2'>
|
|
131
133
|
<div role='none' className={mx(threadLayout, 'place-self-end')}>
|
|
132
134
|
{thread.messages
|
|
133
135
|
.map((message) => message.target)
|
|
@@ -136,12 +138,9 @@ export const ChatContainer = ({
|
|
|
136
138
|
<MessageContainer key={message.id} message={message} members={members} />
|
|
137
139
|
))}
|
|
138
140
|
</div>
|
|
139
|
-
{/* NOTE(thure): This can
|
|
141
|
+
{/* NOTE(thure): This can't also be the `overflow-anchor` because `ScrollArea` injects an interceding node that contains this necessary ref'd element. */}
|
|
140
142
|
<div role='none' className='bs-px -mbs-px' ref={threadScrollRef} />
|
|
141
143
|
</ScrollArea.Viewport>
|
|
142
|
-
<ScrollArea.Scrollbar>
|
|
143
|
-
<ScrollArea.Thumb />
|
|
144
|
-
</ScrollArea.Scrollbar>
|
|
145
144
|
</ScrollArea.Root>
|
|
146
145
|
|
|
147
146
|
<MessageTextbox extensions={extensions} autoFocus={autoFocus} onSend={handleCreate} {...textboxMetadata} />
|
|
@@ -64,7 +64,7 @@ const meta = {
|
|
|
64
64
|
title: 'plugins/plugin-thread/Comments',
|
|
65
65
|
render: render(DefaultStory),
|
|
66
66
|
decorators: [
|
|
67
|
-
withTheme,
|
|
67
|
+
withTheme(),
|
|
68
68
|
withLayout({ layout: 'column', scroll: true }),
|
|
69
69
|
// TODO(wittjosiah): This shouldn't depend on app framework (use withClientProvider instead).
|
|
70
70
|
// Currently this is required due to useOnEditAnalytics.
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { useAtomValue } from '@effect-atom/atom-react';
|
|
6
6
|
import React, { type FC, type PropsWithChildren, useEffect, useState } from 'react';
|
|
7
7
|
|
|
8
|
-
import { useCapability } from '@dxos/app-framework/
|
|
8
|
+
import { useCapability } from '@dxos/app-framework/ui';
|
|
9
9
|
import { type ThemedClassName, useTranslation } from '@dxos/react-ui';
|
|
10
10
|
import { mx } from '@dxos/ui-theme';
|
|
11
11
|
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { EditorView } from '@codemirror/view';
|
|
6
6
|
import React, { forwardRef, useCallback, useEffect, useRef, useState } from 'react';
|
|
7
7
|
|
|
8
|
-
import { Surface } from '@dxos/app-framework/
|
|
8
|
+
import { Surface } from '@dxos/app-framework/ui';
|
|
9
9
|
import { type Obj, Ref } from '@dxos/echo';
|
|
10
10
|
import { useObject } from '@dxos/echo-react';
|
|
11
11
|
import { PublicKey } from '@dxos/react-client';
|
|
@@ -210,7 +210,7 @@ const MessageBlockObjectTile = forwardRef<HTMLDivElement, { subject: Obj.Unknown
|
|
|
210
210
|
className={mx('grid col-span-3 plb-1 pr-4', hoverableControls, hoverableFocusedWithinControls)}
|
|
211
211
|
ref={forwardedRef}
|
|
212
212
|
>
|
|
213
|
-
<Surface role='card-content' limit={1} data={{ subject }} fallback={title} />
|
|
213
|
+
<Surface.Surface role='card-content' limit={1} data={{ subject }} fallback={title} />
|
|
214
214
|
</Card.Root>
|
|
215
215
|
);
|
|
216
216
|
});
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { useAtomValue } from '@effect-atom/atom-react';
|
|
6
6
|
import React, { memo, useMemo } from 'react';
|
|
7
7
|
|
|
8
|
-
import { useCapability } from '@dxos/app-framework/
|
|
8
|
+
import { useCapability } from '@dxos/app-framework/ui';
|
|
9
9
|
|
|
10
10
|
import { type EncodedTrackName, type UserState } from '../../calls';
|
|
11
11
|
import { ThreadCapabilities } from '../../types';
|
|
@@ -15,7 +15,7 @@ import { ResponsiveContainer } from './ResponsiveContainer';
|
|
|
15
15
|
const meta = {
|
|
16
16
|
title: 'plugins/plugin-thread/ResponsiveContainer',
|
|
17
17
|
component: ResponsiveContainer,
|
|
18
|
-
decorators: [withTheme],
|
|
18
|
+
decorators: [withTheme()],
|
|
19
19
|
parameters: {
|
|
20
20
|
layout: 'fullscreen',
|
|
21
21
|
translations,
|
|
@@ -5,14 +5,15 @@
|
|
|
5
5
|
import { useAtomValue } from '@effect-atom/atom-react';
|
|
6
6
|
import React, { useCallback, useMemo } from 'react';
|
|
7
7
|
|
|
8
|
-
import {
|
|
9
|
-
import { useCapabilities, useCapability, useOperationInvoker } from '@dxos/app-framework/
|
|
8
|
+
import { Capabilities } from '@dxos/app-framework';
|
|
9
|
+
import { useCapabilities, useCapability, useOperationInvoker } from '@dxos/app-framework/ui';
|
|
10
|
+
import { AppCapabilities, CollaborationOperation, LayoutOperation } from '@dxos/app-toolkit';
|
|
10
11
|
import { Filter, Obj, Query, Relation } from '@dxos/echo';
|
|
11
12
|
import { Ref, useQuery } from '@dxos/react-client/echo';
|
|
12
13
|
import { useIdentity } from '@dxos/react-client/halo';
|
|
13
14
|
import { useTranslation } from '@dxos/react-ui';
|
|
15
|
+
import { Layout } from '@dxos/react-ui';
|
|
14
16
|
import { useAttended } from '@dxos/react-ui-attention';
|
|
15
|
-
import { Layout } from '@dxos/react-ui-mosaic';
|
|
16
17
|
import { Tabs } from '@dxos/react-ui-tabs';
|
|
17
18
|
import { AnchoredTo, Thread } from '@dxos/types';
|
|
18
19
|
import { mx } from '@dxos/ui-theme';
|
|
@@ -28,7 +29,7 @@ export const ThreadCompanion = ({ subject }: { subject: any }) => {
|
|
|
28
29
|
const { invokePromise } = useOperationInvoker();
|
|
29
30
|
const identity = useIdentity();
|
|
30
31
|
const subjectId = Obj.getDXN(subject).toString();
|
|
31
|
-
const registry = useCapability(
|
|
32
|
+
const registry = useCapability(Capabilities.AtomRegistry);
|
|
32
33
|
|
|
33
34
|
const stateAtom = useCapability(ThreadCapabilities.State);
|
|
34
35
|
const viewStoreAtom = useCapability(ThreadCapabilities.ViewState);
|
|
@@ -56,7 +57,7 @@ export const ThreadCompanion = ({ subject }: { subject: any }) => {
|
|
|
56
57
|
[registry, viewStoreAtom, subjectId],
|
|
57
58
|
);
|
|
58
59
|
|
|
59
|
-
const anchorSorts = useCapabilities(
|
|
60
|
+
const anchorSorts = useCapabilities(AppCapabilities.AnchorSort);
|
|
60
61
|
const sort = useMemo(
|
|
61
62
|
() => anchorSorts.find(({ key }) => key === Obj.getTypename(subject))?.sort,
|
|
62
63
|
[anchorSorts, subject],
|
|
@@ -82,7 +83,7 @@ export const ThreadCompanion = ({ subject }: { subject: any }) => {
|
|
|
82
83
|
// TODO(wittjosiah): Should this be a thread-specific intent?
|
|
83
84
|
// The layout doesn't know about threads and this working depends on other plugins conditionally handling it.
|
|
84
85
|
// This may be overloading this intent or highjacking its intended purpose.
|
|
85
|
-
void invokePromise(
|
|
86
|
+
void invokePromise(LayoutOperation.ScrollIntoView, {
|
|
86
87
|
subject: Obj.getDXN(subject).toString(),
|
|
87
88
|
cursor: anchor.anchor,
|
|
88
89
|
ref: threadId,
|
|
@@ -140,7 +141,7 @@ export const ThreadCompanion = ({ subject }: { subject: any }) => {
|
|
|
140
141
|
return;
|
|
141
142
|
}
|
|
142
143
|
|
|
143
|
-
await invokePromise(
|
|
144
|
+
await invokePromise(CollaborationOperation.AcceptProposal, {
|
|
144
145
|
subject,
|
|
145
146
|
anchor: anchor.anchor,
|
|
146
147
|
proposal,
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import React from 'react';
|
|
6
6
|
|
|
7
7
|
import { useTranslation } from '@dxos/react-ui';
|
|
8
|
-
import {
|
|
8
|
+
import { Settings } from '@dxos/react-ui-form';
|
|
9
9
|
|
|
10
10
|
import { meta } from '../meta';
|
|
11
11
|
import type { ThreadSettingsProps } from '../types';
|
|
@@ -15,7 +15,8 @@ export type ThreadSettingsComponentProps = {
|
|
|
15
15
|
onSettingsChange: (fn: (current: ThreadSettingsProps) => ThreadSettingsProps) => void;
|
|
16
16
|
};
|
|
17
17
|
|
|
18
|
+
// TODO(burdon): Settings.
|
|
18
19
|
export const ThreadSettings = ({ settings: _settings }: ThreadSettingsComponentProps) => {
|
|
19
20
|
const { t: _t } = useTranslation(meta.id);
|
|
20
|
-
return <
|
|
21
|
+
return <Settings.Root></Settings.Root>;
|
|
21
22
|
};
|
|
@@ -7,12 +7,10 @@ import * as Effect from 'effect/Effect';
|
|
|
7
7
|
import * as Function from 'effect/Function';
|
|
8
8
|
import * as Schema from 'effect/Schema';
|
|
9
9
|
|
|
10
|
-
import {
|
|
11
|
-
import { Obj, Ref, Relation } from '@dxos/echo';
|
|
12
|
-
import { Database } from '@dxos/echo';
|
|
10
|
+
import { computeDiffsWithCursors } from '@dxos/assistant';
|
|
11
|
+
import { Database, Obj, Ref, Relation, Type } from '@dxos/echo';
|
|
13
12
|
import { createDocAccessor } from '@dxos/echo-db';
|
|
14
13
|
import { defineFunction } from '@dxos/functions';
|
|
15
|
-
import { DXN } from '@dxos/keys';
|
|
16
14
|
import { Markdown } from '@dxos/plugin-markdown/types';
|
|
17
15
|
import { AnchoredTo, Message, Thread } from '@dxos/types';
|
|
18
16
|
|
|
@@ -21,14 +19,16 @@ export default defineFunction({
|
|
|
21
19
|
name: 'Create Proposals',
|
|
22
20
|
description: 'Proposes a set of changes to a document.',
|
|
23
21
|
inputSchema: Schema.Struct({
|
|
24
|
-
|
|
22
|
+
doc: Type.Ref(Markdown.Document).annotations({
|
|
23
|
+
description: 'The ID of the document.',
|
|
24
|
+
}),
|
|
25
25
|
diffs: Schema.Array(Schema.String).annotations({
|
|
26
26
|
description: 'The diffs to propose for the document.',
|
|
27
27
|
}),
|
|
28
28
|
}),
|
|
29
29
|
outputSchema: Schema.Void,
|
|
30
|
-
handler: Effect.fn(function* ({ data: {
|
|
31
|
-
const object = yield* Database.
|
|
30
|
+
handler: Effect.fn(function* ({ data: { doc, diffs: _diffs } }) {
|
|
31
|
+
const object = yield* Database.load(doc);
|
|
32
32
|
const content = yield* Effect.promise(() => object.content.load());
|
|
33
33
|
const accessor = createDocAccessor(content, ['content']);
|
|
34
34
|
|
|
@@ -47,8 +47,8 @@ export default defineFunction({
|
|
|
47
47
|
[Relation.Target]: object,
|
|
48
48
|
anchor: cursor,
|
|
49
49
|
});
|
|
50
|
-
yield* Database.
|
|
51
|
-
yield* Database.
|
|
50
|
+
yield* Database.add(thread);
|
|
51
|
+
yield* Database.add(relation);
|
|
52
52
|
}),
|
|
53
53
|
),
|
|
54
54
|
Effect.allWith({ concurrency: 'unbounded' }),
|
package/src/functions/index.ts
CHANGED
package/src/hooks/analytics.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import { useCallback } from 'react';
|
|
6
6
|
|
|
7
|
-
import { useOperationInvoker } from '@dxos/app-framework/
|
|
7
|
+
import { useOperationInvoker } from '@dxos/app-framework/ui';
|
|
8
8
|
import { Obj } from '@dxos/echo';
|
|
9
9
|
import { ObservabilityOperation } from '@dxos/plugin-observability/types';
|
|
10
10
|
import { useOnTransition } from '@dxos/react-ui';
|
package/src/testing/stories.ts
CHANGED
|
@@ -4,9 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
import * as Effect from 'effect/Effect';
|
|
6
6
|
|
|
7
|
-
import { OperationPlugin, type Plugin
|
|
7
|
+
import { OperationPlugin, type Plugin } from '@dxos/app-framework';
|
|
8
8
|
import { ClientPlugin } from '@dxos/plugin-client';
|
|
9
9
|
import { GraphPlugin } from '@dxos/plugin-graph';
|
|
10
|
+
import { SettingsPlugin } from '@dxos/plugin-settings';
|
|
10
11
|
import { SpacePlugin } from '@dxos/plugin-space';
|
|
11
12
|
import { ThemePlugin } from '@dxos/plugin-theme';
|
|
12
13
|
import { Config } from '@dxos/react-client';
|
package/src/types/Channel.ts
CHANGED
|
@@ -12,7 +12,7 @@ export const Channel = Schema.Struct({
|
|
|
12
12
|
name: Schema.optional(Schema.String),
|
|
13
13
|
defaultThread: Type.Ref(Thread.Thread).pipe(FormInputAnnotation.set(false)),
|
|
14
14
|
// TODO(wittjosiah): Should be an "ordered collection".
|
|
15
|
-
threads: Type.Ref(Thread.Thread).pipe(Schema.Array,
|
|
15
|
+
threads: Type.Ref(Thread.Thread).pipe(Schema.Array, FormInputAnnotation.set(false)),
|
|
16
16
|
}).pipe(
|
|
17
17
|
Type.object({
|
|
18
18
|
typename: 'dxos.org/type/Channel',
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/app-graph-builder/app-graph-builder.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom } from '@effect-atom/atom-react';\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { Capability, Common } from '@dxos/app-framework';\nimport { Obj } from '@dxos/echo';\nimport { Operation } from '@dxos/operation';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport { ATTENDABLE_PATH_SEPARATOR, DECK_COMPANION_TYPE, PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';\nimport { GraphBuilder, NodeMatcher } from '@dxos/plugin-graph';\nimport { type SelectionManager, type SelectionMode, defaultSelection } from '@dxos/react-ui-attention';\n\nimport { meta } from '../../meta';\nimport { Channel, ThreadCapabilities, ThreadOperation, type ThreadState } from '../../types';\nimport { getAnchor } from '../../util';\n\ntype CommentDisabledParams = {\n stateAtom: Atom.Atom<Atom.Writable<ThreadState>[]>;\n selectionManager: SelectionManager;\n objectId: string;\n commentsType: string;\n selectionMode: SelectionMode | undefined;\n};\n\n/**\n * Atom family to derive whether the comment button should be disabled.\n * Uses a composite key to ensure proper caching.\n */\nconst commentDisabledFamily = Atom.family(\n ({ stateAtom, selectionManager, objectId, commentsType, selectionMode }: CommentDisabledParams) =>\n Atom.make((get) => {\n const stateAtoms = get(stateAtom);\n const state = stateAtoms[0] ? get(stateAtoms[0]) : undefined;\n const toolbar = state?.toolbar ?? {};\n const selectionState = get(selectionManager.state);\n const selection =\n selectionState.selections[objectId] ?? (selectionMode ? defaultSelection(selectionMode) : undefined);\n const anchor = getAnchor(selection);\n const invalidSelection = !anchor;\n const overlappingComment = toolbar[objectId];\n return (commentsType === 'anchored' && invalidSelection) || overlappingComment;\n }),\n);\n\n/** Match ECHO objects that are NOT Channels (i.e. objects that can have comments). */\nconst whenCommentableObject = NodeMatcher.whenAll(\n NodeMatcher.whenEchoObjectMatches,\n NodeMatcher.whenNot(NodeMatcher.whenEchoTypeMatches(Channel.Channel)),\n);\n\n// TODO(wittjosiah): Highlight active calls in L1.\n// Track active meetings by subscribing to meetings query and polling the swarms of recent meetings in the space.\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const capabilities = yield* Capability.Service;\n\n const resolve = (typename: string) =>\n capabilities.getAll(Common.Capability.Metadata).find(({ id }: { id: string }) => id === typename)?.metadata ?? {};\n\n const extensions = yield* Effect.all([\n GraphBuilder.createExtension({\n id: `${meta.id}/active-call`,\n match: NodeMatcher.whenRoot,\n connector: (node, get) => {\n const callManagerAtom = capabilities.atom(ThreadCapabilities.CallManager);\n const [call] = get(callManagerAtom);\n if (!call) {\n return Effect.succeed([]);\n }\n // Use derived joinedAtom for efficient subscription.\n const joined = get(call.joinedAtom);\n return Effect.succeed(\n joined\n ? [\n {\n id: `${node.id}${ATTENDABLE_PATH_SEPARATOR}active-call`,\n type: DECK_COMPANION_TYPE,\n data: null,\n properties: {\n label: ['call panel label', { ns: meta.id }],\n icon: 'ph--video-conference--regular',\n position: 'hoist',\n disposition: 'hidden',\n },\n },\n ]\n : [],\n );\n },\n }),\n GraphBuilder.createTypeExtension({\n id: `${meta.id}/channel-chat-companion`,\n type: Channel.Channel,\n connector: (channel, get) => {\n const callManager = capabilities.get(ThreadCapabilities.CallManager);\n // Use derived atoms for efficient subscription.\n const joined = get(callManager.joinedAtom);\n const roomId = get(callManager.roomIdAtom);\n const isActive = joined && roomId === Obj.getDXN(channel).toString();\n if (!isActive) {\n return Effect.succeed([]);\n }\n\n return Effect.succeed([\n {\n id: `${Obj.getDXN(channel).toString()}${ATTENDABLE_PATH_SEPARATOR}chat`,\n type: PLANK_COMPANION_TYPE,\n data: 'chat',\n properties: {\n label: ['channel companion label', { ns: meta.id }],\n icon: 'ph--hash--regular',\n position: 'hoist',\n disposition: 'hidden',\n },\n },\n ]);\n },\n }),\n GraphBuilder.createExtension({\n id: `${meta.id}/comments-companion`,\n match: (node) => {\n if (!Obj.isObject(node.data) || Option.isNone(whenCommentableObject(node))) {\n return Option.none();\n }\n const metadata = resolve(Obj.getTypename(node.data)!);\n return typeof metadata.comments === 'string' ? Option.some(node) : Option.none();\n },\n connector: (node) =>\n Effect.succeed([\n {\n id: [node.id, 'comments'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: 'comments',\n properties: {\n label: ['comments label', { ns: meta.id }],\n icon: 'ph--chat-text--regular',\n disposition: 'hidden',\n position: 'hoist',\n },\n },\n ]),\n }),\n GraphBuilder.createExtension({\n id: `${meta.id}/comment-toolbar`,\n match: (node) => {\n if (!Obj.isObject(node.data) || Option.isNone(whenCommentableObject(node))) {\n return Option.none();\n }\n const metadata = resolve(Obj.getTypename(node.data)!);\n return typeof metadata.comments === 'string' ? Option.some(node.data) : Option.none();\n },\n actions: (object, get) => {\n const stateAtom = capabilities.atom(ThreadCapabilities.State);\n const selectionManager = capabilities.get(AttentionCapabilities.Selection);\n const objectId = Obj.getDXN(object).toString();\n const metadata = resolve(Obj.getTypename(object)!);\n\n const disabled = get(\n commentDisabledFamily({\n stateAtom,\n selectionManager,\n objectId,\n commentsType: metadata.comments as string,\n selectionMode: metadata.selectionMode,\n }),\n );\n\n return Effect.succeed([\n {\n id: `${Obj.getDXN(object).toString()}/comment`,\n data: Effect.fnUntraced(function* () {\n const metadata = resolve(Obj.getTypename(object)!);\n const selection = selectionManager.getSelection(Obj.getDXN(object).toString());\n const anchor = metadata.comments === 'anchored' ? getAnchor(selection) : Date.now().toString();\n const name = metadata.getAnchorLabel?.(object, anchor);\n yield* Operation.invoke(ThreadOperation.Create, {\n anchor,\n name,\n subject: object,\n });\n }),\n properties: {\n label: ['add comment label', { ns: meta.id }],\n icon: 'ph--chat-text--regular',\n disposition: 'toolbar',\n disabled,\n testId: 'thread.comment.add',\n },\n },\n ]);\n },\n }),\n ]);\n\n return Capability.contributes(Common.Capability.AppGraphBuilder, extensions);\n }),\n);\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Atom", "Effect", "Option", "Capability", "Common", "Obj", "Operation", "AttentionCapabilities", "ATTENDABLE_PATH_SEPARATOR", "DECK_COMPANION_TYPE", "PLANK_COMPANION_TYPE", "GraphBuilder", "NodeMatcher", "defaultSelection", "commentDisabledFamily", "Atom", "family", "stateAtom", "selectionManager", "objectId", "commentsType", "selectionMode", "make", "get", "stateAtoms", "state", "undefined", "toolbar", "selectionState", "selection", "selections", "defaultSelection", "anchor", "getAnchor", "invalidSelection", "overlappingComment", "whenCommentableObject", "NodeMatcher", "whenAll", "whenEchoObjectMatches", "whenNot", "whenEchoTypeMatches", "Channel", "Capability", "makeModule", "fnUntraced", "capabilities", "Service", "resolve", "typename", "getAll", "Common", "Metadata", "find", "id", "metadata", "extensions", "all", "GraphBuilder", "createExtension", "meta", "match", "whenRoot", "connector", "node", "callManagerAtom", "atom", "ThreadCapabilities", "CallManager", "call", "succeed", "joined", "joinedAtom", "ATTENDABLE_PATH_SEPARATOR", "type", "DECK_COMPANION_TYPE", "data", "properties", "label", "ns", "icon", "position", "disposition", "createTypeExtension", "channel", "callManager", "roomId", "roomIdAtom", "isActive", "Obj", "getDXN", "toString", "PLANK_COMPANION_TYPE", "isObject", "isNone", "none", "getTypename", "comments", "some", "join", "actions", "object", "State", "AttentionCapabilities", "Selection", "disabled", "getSelection", "Date", "now", "name", "getAnchorLabel", "Operation", "invoke", "ThreadOperation", "Create", "subject", "testId", "contributes", "AppGraphBuilder"]
|
|
7
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
thread_blueprint_exports
|
|
3
|
-
} from "./chunk-ZFLSTQSE.mjs";
|
|
4
|
-
import "./chunk-J5LGTIGS.mjs";
|
|
5
|
-
|
|
6
|
-
// src/capabilities/blueprint-definition/blueprint-definition.ts
|
|
7
|
-
import * as Effect from "effect/Effect";
|
|
8
|
-
import { Capability, Common } from "@dxos/app-framework";
|
|
9
|
-
var blueprintDefinition = Capability.makeModule(() => Effect.succeed([
|
|
10
|
-
Capability.contributes(Common.Capability.Functions, thread_blueprint_exports.functions),
|
|
11
|
-
Capability.contributes(Common.Capability.BlueprintDefinition, thread_blueprint_exports.make())
|
|
12
|
-
]));
|
|
13
|
-
var blueprint_definition_default = blueprintDefinition;
|
|
14
|
-
export {
|
|
15
|
-
blueprint_definition_default as default
|
|
16
|
-
};
|
|
17
|
-
//# sourceMappingURL=blueprint-definition-UQ63QKQG.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/blueprint-definition/blueprint-definition.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability, Common } from '@dxos/app-framework';\n\nimport { ThreadBlueprint } from '../../blueprints';\n\nexport type BlueprintCapabilities = [\n Capability.Capability<typeof Common.Capability.Functions>,\n Capability.Capability<typeof Common.Capability.BlueprintDefinition>,\n];\n\nconst blueprintDefinition = Capability.makeModule<[], BlueprintCapabilities>(() =>\n Effect.succeed([\n Capability.contributes(Common.Capability.Functions, ThreadBlueprint.functions),\n Capability.contributes(Common.Capability.BlueprintDefinition, ThreadBlueprint.make()),\n ]),\n);\n\nexport default blueprintDefinition;\n"],
|
|
5
|
-
"mappings": ";;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,YAAYC,cAAc;AASnC,IAAMC,sBAAsBC,WAAWC,WAAsC,MACpEC,eAAQ;EACbF,WAAWG,YAAYC,OAAOJ,WAAWK,WAAWC,yBAAgBC,SAAS;EAC7EP,WAAWG,YAAYC,OAAOJ,WAAWQ,qBAAqBF,yBAAgBG,KAAI,CAAA;CACnF,CAAA;AAGH,IAAA,+BAAeV;",
|
|
6
|
-
"names": ["Effect", "Capability", "Common", "blueprintDefinition", "Capability", "makeModule", "succeed", "contributes", "Common", "Functions", "ThreadBlueprint", "functions", "BlueprintDefinition", "make"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/call-manager/call-manager.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability, Common } from '@dxos/app-framework';\nimport { ClientCapabilities } from '@dxos/plugin-client';\n\nimport { CallManager } from '../../calls';\nimport { ThreadCapabilities } from '../../types';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const client = yield* Capability.get(ClientCapabilities.Client);\n const registry = yield* Capability.get(Common.Capability.AtomRegistry);\n const callManager = new CallManager(client, registry);\n yield* Effect.tryPromise(() => callManager.open());\n\n return Capability.contributes(ThreadCapabilities.CallManager, callManager, () =>\n Effect.sync(() => {\n void callManager.close();\n }),\n );\n }),\n);\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,YAAYC,cAAc;AACnC,SAASC,0BAA0B;AAKnC,IAAA,uBAAeC,WAAWC,WACjBC,kBAAW,aAAA;AAChB,QAAMC,SAAS,OAAOH,WAAWI,IAAIC,mBAAmBC,MAAM;AAC9D,QAAMC,WAAW,OAAOP,WAAWI,IAAII,OAAOR,WAAWS,YAAY;AACrE,QAAMC,cAAc,IAAIC,YAAYR,QAAQI,QAAAA;AAC5C,SAAcK,kBAAW,MAAMF,YAAYG,KAAI,CAAA;AAE/C,SAAOb,WAAWc,YAAYC,mBAAmBJ,aAAaD,aAAa,MAClEM,YAAK,MAAA;AACV,SAAKN,YAAYO,MAAK;EACxB,CAAA,CAAA;AAEJ,CAAA,CAAA;",
|
|
6
|
-
"names": ["Effect", "Capability", "Common", "ClientCapabilities", "Capability", "makeModule", "fnUntraced", "client", "get", "ClientCapabilities", "Client", "registry", "Common", "AtomRegistry", "callManager", "CallManager", "tryPromise", "open", "contributes", "ThreadCapabilities", "sync", "close"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/hooks/analytics.ts", "../../../src/hooks/useBlackCanvasStreamTrack.tsx", "../../../src/hooks/useDebugMode.ts", "../../../src/hooks/useInaudibleAudioStreamTrack.tsx", "../../../src/hooks/useStatus.ts", "../../../src/hooks/useVideoStreamTrack.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/react';\nimport { Obj } from '@dxos/echo';\nimport { ObservabilityOperation } from '@dxos/plugin-observability/types';\nimport { useOnTransition } from '@dxos/react-ui';\nimport { type ContentBlock } from '@dxos/types';\n\nexport const useOnEditAnalytics = (\n message: any | undefined,\n textBlock: ContentBlock.Text | undefined,\n editing: boolean,\n) => {\n const { invokePromise } = useOperationInvoker();\n\n const onEdit = useCallback(() => {\n if (!message || !textBlock) {\n return;\n }\n const db = Obj.getDatabase(message);\n if (!db) {\n return;\n }\n\n void invokePromise(ObservabilityOperation.SendEvent, {\n name: 'threads.message.update',\n properties: {\n spaceId: db.spaceId,\n messageId: message.id,\n messageLength: textBlock?.text.length,\n },\n });\n }, [invokePromise, message, textBlock]);\n\n useOnTransition(editing, true, false, onEdit);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { scheduleTask } from '@dxos/async';\nimport { Context } from '@dxos/context';\n\nimport { createBlackCanvasStreamTrack } from '../calls/util/stub-media-streams';\n\nexport const useBlackCanvasStreamTrack = () => {\n const [blackCanvasStreamTrack, setBlackCanvasStreamTrack] = useState<MediaStreamTrack | undefined>(undefined);\n useEffect(() => {\n const ctx = new Context();\n scheduleTask(ctx, async () => {\n const blackCanvasStreamTrack = await createBlackCanvasStreamTrack({ ctx, width: 720, height: 480 });\n setBlackCanvasStreamTrack(blackCanvasStreamTrack);\n });\n\n return () => {\n void ctx.dispose();\n };\n }, []);\n\n return blackCanvasStreamTrack;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\n// TODO(burdon): Standardize across plugins/composer.\nexport const useDebugMode = () => {\n const [enabled, setEnabled] = useState(false);\n useEffect(() => {\n const handler = (ev: KeyboardEvent) => {\n if (ev.key.toLowerCase() === 'd' && ev.ctrlKey) {\n ev.preventDefault();\n setEnabled(!enabled);\n }\n };\n\n document.addEventListener('keypress', handler);\n return () => {\n document.removeEventListener('keypress', handler);\n };\n }, [enabled]);\n\n return enabled;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { scheduleTask } from '@dxos/async';\nimport { Context } from '@dxos/context';\n\nimport { createInaudibleAudioStreamTrack } from '../calls/util/stub-media-streams';\n\nexport const useInaudibleAudioStreamTrack = () => {\n const [audioStreamTrack, setAudioStreamTrack] = useState<MediaStreamTrack | undefined>(undefined);\n useEffect(() => {\n const ctx = new Context();\n scheduleTask(ctx, async () => {\n const audioStreamTrack = await createInaudibleAudioStreamTrack({ ctx });\n setAudioStreamTrack(audioStreamTrack);\n });\n\n return () => {\n void ctx.dispose();\n };\n }, []);\n\n return audioStreamTrack;\n};\n", "//\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 2025 DXOS.org\n//\n\nimport { type RefObject, useEffect, useRef, useState } from 'react';\n\nexport const useVideoStreamTrack = (videoElement: RefObject<HTMLVideoElement | null>, videoSrc: string) => {\n // Get video stream track.\n const [videoStreamTrack, setVideoStreamTrack] = useState<MediaStreamTrack | undefined>(undefined);\n const hadRun = useRef(false);\n useEffect(() => {\n // This is done to capture only one video stream.\n if (!videoElement.current || hadRun.current || !videoSrc) {\n return;\n }\n hadRun.current = true;\n videoElement.current.addEventListener('playing', () => {\n if (videoStreamTrack) {\n return;\n }\n const stream = (videoElement.current as any).captureStream();\n const track = stream.getTracks()[0];\n if (track && !videoStreamTrack) {\n setVideoStreamTrack(track);\n }\n stream.onaddtrack = (event: MediaStreamTrackEvent) => {\n if (event.track.kind === 'video' && !videoStreamTrack) {\n setVideoStreamTrack(event.track);\n }\n };\n });\n videoElement.current.src = videoSrc;\n }, [videoElement.current, videoSrc]);\n\n return videoStreamTrack;\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["useCallback", "useOperationInvoker", "Obj", "ObservabilityOperation", "useOnTransition", "useOnEditAnalytics", "message", "textBlock", "editing", "invokePromise", "useOperationInvoker", "onEdit", "useCallback", "db", "Obj", "getDatabase", "ObservabilityOperation", "SendEvent", "name", "properties", "spaceId", "messageId", "id", "messageLength", "text", "length", "useOnTransition", "useEffect", "useState", "scheduleTask", "Context", "useBlackCanvasStreamTrack", "blackCanvasStreamTrack", "setBlackCanvasStreamTrack", "useState", "undefined", "useEffect", "ctx", "Context", "scheduleTask", "createBlackCanvasStreamTrack", "width", "height", "dispose", "useEffect", "useState", "useDebugMode", "enabled", "setEnabled", "useState", "useEffect", "handler", "ev", "key", "toLowerCase", "ctrlKey", "preventDefault", "document", "addEventListener", "removeEventListener", "useEffect", "useState", "scheduleTask", "Context", "useInaudibleAudioStreamTrack", "audioStreamTrack", "setAudioStreamTrack", "useState", "undefined", "useEffect", "ctx", "Context", "scheduleTask", "createInaudibleAudioStreamTrack", "dispose", "useEffect", "useState", "useStatus", "space", "channel", "processing", "setProcessing", "useState", "useEffect", "unsubscribe", "listen", "status", "event", "payload", "t", "setInterval", "prev", "ts", "Date", "now", "undefined", "clearInterval", "useEffect", "useRef", "useState", "useVideoStreamTrack", "videoElement", "videoSrc", "videoStreamTrack", "setVideoStreamTrack", "useState", "undefined", "hadRun", "useRef", "useEffect", "current", "addEventListener", "stream", "captureStream", "track", "getTracks", "onaddtrack", "event", "kind", "src"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/types/capabilities.ts", "../../../src/meta.ts", "../../../src/types/Channel.ts", "../../../src/types/types.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Atom } from '@effect-atom/atom-react';\n\nimport { Capability } from '@dxos/app-framework';\n\nimport { type CallManager, type CallState, type MediaState } from '../calls';\nimport { meta } from '../meta';\nimport { type Channel, type ThreadSettingsProps, type ThreadState, type ViewStore } from '../types';\n\nexport namespace ThreadCapabilities {\n export const Settings = Capability.make<Atom.Writable<ThreadSettingsProps>>(`${meta.id}/capability/settings`);\n export const CallManager = Capability.make<CallManager>(`${meta.id}/capability/call-manager`);\n\n // TODO(burdon): Better way to define specific extensions for meeting companions.\n // TODO(burdon): This brings in deps from ../calls; how should we manage/minimize explicit type exposure to other plugins?\n // TODO(wittjosiah): These callbacks could be intents once we support broadcast.\n export type CallProperties = {\n onJoin: (state: { channel?: Channel.Channel; roomId?: string }) => Promise<void>;\n onLeave: (roomId?: string) => Promise<void>;\n onCallStateUpdated: (callState: CallState) => Promise<void>;\n onMediaStateUpdated: ([mediaState, isSpeaking]: [MediaState, boolean]) => Promise<void>;\n };\n\n export const CallExtension = Capability.make<CallProperties>(`${meta.id}/capability/call-extension`);\n\n /** Thread state (drafts, toolbar state, current selection). */\n export const State = Capability.make<Atom.Writable<ThreadState>>(`${meta.id}/capability/state`);\n\n /** Per-subject view state (e.g., showResolvedThreads). */\n export const ViewState = Capability.make<Atom.Writable<ViewStore>>(`${meta.id}/capability/view-state`);\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\n// TODO(wittjosiah): Needs screenshots.\nexport const meta: Plugin.Meta = {\n id: 'dxos.org/plugin/thread',\n name: 'Chat',\n description: trim`\n Multi-modal communication platform supporting text chat, voice, and video conferencing.\n Create threaded conversations and add contextual comments directly on any workspace object.\n `,\n icon: 'ph--video-conference--regular',\n iconHue: 'rose',\n source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-thread',\n};\n\nexport const THREAD_ITEM = `${meta.id}/item`;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Obj, Ref, Type } from '@dxos/echo';\nimport { FormInputAnnotation } from '@dxos/echo/internal';\nimport { Thread } from '@dxos/types';\n\nexport const Channel = Schema.Struct({\n name: Schema.optional(Schema.String),\n defaultThread: Type.Ref(Thread.Thread).pipe(FormInputAnnotation.set(false)),\n // TODO(wittjosiah): Should be an \"ordered collection\".\n threads: Type.Ref(Thread.Thread).pipe(Schema.Array, Schema.mutable, FormInputAnnotation.set(false)),\n}).pipe(\n Type.object({\n typename: 'dxos.org/type/Channel',\n version: '0.1.0',\n }),\n);\n\nexport interface Channel extends Schema.Schema.Type<typeof Channel> {}\n\nexport const make = (props: Pick<Obj.MakeProps<typeof Channel>, 'name'> = {}) =>\n Obj.make(Channel, {\n ...props,\n defaultThread: Ref.make(Obj.make(Thread.Thread, { messages: [], status: 'active' })),\n threads: [],\n });\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Capability } from '@dxos/app-framework';\nimport { Key, Type } from '@dxos/echo';\nimport { Operation } from '@dxos/operation';\nimport { SpaceSchema } from '@dxos/react-client/echo';\nimport { Collection } from '@dxos/schema';\nimport { Actor, AnchoredTo, Message, Thread } from '@dxos/types';\n\nimport { meta } from '../meta';\n\nimport * as Channel from './Channel';\n\nconst THREAD_OPERATION = `${meta.id}/operation`;\n\n/**\n * Operations for the Thread plugin.\n * Note: Complex ECHO types are typed as Schema.Any to avoid serialization issues.\n */\nexport namespace ThreadOperation {\n export const OnCreateSpace = Operation.make({\n meta: { key: `${THREAD_OPERATION}/on-create-space`, name: 'On Create Space' },\n services: [Capability.Service],\n schema: {\n input: Schema.Struct({\n space: SpaceSchema,\n rootCollection: Collection.Collection,\n isDefault: Schema.Boolean.pipe(Schema.optional),\n }),\n output: Schema.Void,\n },\n });\n\n export const CreateChannel = Operation.make({\n meta: { key: `${THREAD_OPERATION}/create-channel`, name: 'Create Channel' },\n services: [Capability.Service],\n schema: {\n input: Schema.Struct({\n spaceId: Key.SpaceId,\n name: Schema.optional(Schema.String),\n }),\n output: Schema.Struct({\n object: Channel.Channel,\n }),\n },\n });\n\n export const CreateChannelThread = Operation.make({\n meta: { key: `${THREAD_OPERATION}/create-channel-thread`, name: 'Create Channel Thread' },\n services: [Capability.Service],\n schema: {\n input: Schema.Struct({\n channel: Channel.Channel,\n }),\n output: Schema.Struct({\n object: Thread.Thread,\n }),\n },\n });\n\n export const Create = Operation.make({\n meta: { key: `${THREAD_OPERATION}/create`, name: 'Create Thread' },\n services: [Capability.Service],\n schema: {\n input: Schema.Struct({\n name: Schema.optional(Schema.String),\n anchor: Schema.optional(Schema.String),\n subject: Type.Obj,\n }),\n output: Schema.Void,\n },\n });\n\n export const DeleteOutput = Schema.Struct({\n thread: Thread.Thread.annotations({ description: 'The deleted thread.' }),\n anchor: AnchoredTo.AnchoredTo.annotations({ description: 'The deleted anchor.' }),\n }).pipe(Schema.partial);\n\n export type DeleteOutput = Schema.Schema.Type<typeof DeleteOutput>;\n\n export const Delete = Operation.make({\n meta: { key: `${THREAD_OPERATION}/delete`, name: 'Delete Thread' },\n services: [Capability.Service],\n schema: {\n input: Schema.Struct({\n anchor: AnchoredTo.AnchoredTo,\n subject: Type.Obj,\n thread: Schema.optional(Thread.Thread),\n }),\n output: DeleteOutput,\n },\n });\n\n export const Select = Operation.make({\n meta: { key: `${THREAD_OPERATION}/select`, name: 'Select Thread' },\n services: [Capability.Service],\n schema: {\n input: Schema.Struct({\n current: Schema.String,\n }),\n output: Schema.Void,\n },\n });\n\n export const ToggleResolved = Operation.make({\n meta: { key: `${THREAD_OPERATION}/toggle-resolved`, name: 'Toggle Resolved' },\n services: [Capability.Service],\n schema: {\n input: Schema.Struct({\n thread: Thread.Thread,\n }),\n output: Schema.Void,\n },\n });\n\n export const AddMessage = Operation.make({\n meta: { key: `${THREAD_OPERATION}/add-message`, name: 'Add Message' },\n services: [Capability.Service],\n schema: {\n input: Schema.Struct({\n subject: Type.Obj,\n anchor: AnchoredTo.AnchoredTo,\n sender: Actor.Actor,\n text: Schema.String,\n }),\n output: Schema.Void,\n },\n });\n\n export const DeleteMessageOutput = Schema.partial(\n Schema.Struct({\n message: Message.Message.annotations({ description: 'The deleted message.' }),\n messageIndex: Schema.Number.annotations({ description: 'The index the message was at.' }),\n }),\n );\n\n export type DeleteMessageOutput = Schema.Schema.Type<typeof DeleteMessageOutput>;\n\n export const DeleteMessage = Operation.make({\n meta: { key: `${THREAD_OPERATION}/delete-message`, name: 'Delete Message' },\n services: [Capability.Service],\n schema: {\n input: Schema.Struct({\n anchor: AnchoredTo.AnchoredTo,\n subject: Type.Obj,\n messageId: Schema.String,\n }),\n output: DeleteMessageOutput,\n },\n });\n\n /**\n * Restore a deleted thread (inverse of Delete).\n */\n export const Restore = Operation.make({\n meta: { key: `${THREAD_OPERATION}/restore`, name: 'Restore Thread' },\n services: [Capability.Service],\n schema: {\n input: Schema.Struct({\n thread: Thread.Thread.annotations({ description: 'The thread to restore.' }),\n anchor: AnchoredTo.AnchoredTo.annotations({ description: 'The anchor relation to restore.' }),\n }),\n output: Schema.Void,\n },\n });\n\n /**\n * Restore a deleted message (inverse of DeleteMessage).\n */\n export const RestoreMessage = Operation.make({\n meta: { key: `${THREAD_OPERATION}/restore-message`, name: 'Restore Message' },\n services: [Capability.Service],\n schema: {\n input: Schema.Struct({\n anchor: AnchoredTo.AnchoredTo.annotations({ description: 'The anchor of the thread.' }),\n message: Message.Message.annotations({ description: 'The message to restore.' }),\n messageIndex: Schema.Number.annotations({ description: 'The index to restore the message at.' }),\n }),\n output: Schema.Void,\n },\n });\n}\n\nexport const ThreadSettingsSchema = Schema.mutable(Schema.Struct({}));\nexport type ThreadSettingsProps = Schema.Schema.Type<typeof ThreadSettingsSchema>;\n\nexport interface ThreadModel {\n root: Thread.Thread;\n}\n\ntype SubjectId = string;\nexport type ViewState = { showResolvedThreads: boolean };\nexport type ViewStore = Record<SubjectId, ViewState>;\n\nexport type ThreadState = {\n /** Object toolbar state. */\n toolbar: Record<string, boolean>;\n /** In-memory draft threads. */\n // TODO(burdon): Drafts are getting lost.\n drafts: Record<string, AnchoredTo.AnchoredTo[]>;\n current?: string | undefined;\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Capability", "trim", "meta", "id", "name", "description", "trim", "icon", "iconHue", "source", "THREAD_ITEM", "ThreadCapabilities", "Settings", "Capability", "make", "meta", "id", "CallManager", "CallExtension", "State", "ViewState", "Schema", "Obj", "Ref", "Type", "FormInputAnnotation", "Thread", "Channel", "Struct", "name", "optional", "String", "defaultThread", "Type", "Ref", "Thread", "pipe", "FormInputAnnotation", "set", "threads", "Array", "mutable", "object", "typename", "version", "make", "props", "Obj", "messages", "status", "Schema", "Capability", "Key", "Type", "Operation", "SpaceSchema", "Collection", "Actor", "AnchoredTo", "Message", "Thread", "THREAD_OPERATION", "meta", "id", "ThreadOperation", "OnCreateSpace", "Operation", "make", "key", "name", "services", "Capability", "Service", "schema", "input", "Struct", "space", "SpaceSchema", "rootCollection", "Collection", "isDefault", "Boolean", "pipe", "optional", "output", "Void", "CreateChannel", "spaceId", "Key", "SpaceId", "String", "object", "Channel", "CreateChannelThread", "channel", "Thread", "Create", "anchor", "subject", "Type", "Obj", "DeleteOutput", "thread", "annotations", "description", "AnchoredTo", "partial", "Delete", "Select", "current", "ToggleResolved", "AddMessage", "sender", "Actor", "text", "DeleteMessageOutput", "message", "Message", "messageIndex", "Number", "DeleteMessage", "messageId", "Restore", "RestoreMessage", "ThreadSettingsSchema", "mutable"]
|
|
7
|
-
}
|