@dxos/plugin-transcription 0.8.4-main.ae835ea → 0.8.4-main.bc674ce
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/TranscriptContainer-6EHKWVS4.mjs +12 -0
- package/dist/lib/browser/blueprint-definition-FTRNMLJZ.mjs +18 -0
- package/dist/lib/browser/blueprint-definition-FTRNMLJZ.mjs.map +7 -0
- package/dist/lib/browser/blueprints/index.mjs +9 -0
- package/dist/lib/browser/chunk-HOOPZ7EM.mjs +35 -0
- package/dist/lib/browser/chunk-HOOPZ7EM.mjs.map +7 -0
- package/dist/lib/browser/{chunk-7DR6HZEF.mjs → chunk-ICM7JRCO.mjs} +64 -98
- package/dist/lib/browser/chunk-ICM7JRCO.mjs.map +7 -0
- package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/browser/chunk-J5LGTIGS.mjs.map +7 -0
- package/dist/lib/browser/chunk-Q5OC3WVG.mjs +72 -0
- package/dist/lib/browser/chunk-Q5OC3WVG.mjs.map +7 -0
- package/dist/lib/browser/{chunk-535OJKFO.mjs → chunk-SYGEFDWO.mjs} +2 -2
- package/dist/lib/browser/{chunk-WH36ENNE.mjs → chunk-TKFU53OZ.mjs} +19 -25
- package/dist/lib/browser/chunk-TKFU53OZ.mjs.map +7 -0
- package/dist/lib/browser/{blueprint-definition-UAAJYVLZ.mjs → chunk-ZZF7ICVM.mjs} +31 -31
- package/dist/lib/browser/chunk-ZZF7ICVM.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +59 -72
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/operation-resolver-ZUWTU7C5.mjs +22 -0
- package/dist/lib/browser/operation-resolver-ZUWTU7C5.mjs.map +7 -0
- package/dist/lib/browser/react-surface-ZXH5267I.mjs +34 -0
- package/dist/lib/browser/react-surface-ZXH5267I.mjs.map +7 -0
- package/dist/lib/browser/{transcriber-LWOLYQHC.mjs → transcriber-EZZTUCPE.mjs} +17 -13
- package/dist/lib/browser/transcriber-EZZTUCPE.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +7 -5
- package/dist/lib/node-esm/{TranscriptContainer-GRLDCESB.mjs → TranscriptContainer-5YT5W73I.mjs} +5 -4
- package/dist/lib/node-esm/TranscriptContainer-5YT5W73I.mjs.map +7 -0
- package/dist/lib/node-esm/blueprint-definition-IOX35YUX.mjs +19 -0
- package/dist/lib/node-esm/blueprint-definition-IOX35YUX.mjs.map +7 -0
- package/dist/lib/node-esm/blueprints/index.mjs +10 -0
- package/dist/lib/node-esm/blueprints/index.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-4BFY6P2D.mjs +73 -0
- package/dist/lib/node-esm/chunk-4BFY6P2D.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-K4AZOB5Y.mjs → chunk-BX2AB7S7.mjs} +64 -98
- package/dist/lib/node-esm/chunk-BX2AB7S7.mjs.map +7 -0
- package/dist/lib/node-esm/{blueprint-definition-Z3LTZ3ID.mjs → chunk-CWP22IHV.mjs} +31 -31
- package/dist/lib/node-esm/chunk-CWP22IHV.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-YFN4FJFK.mjs → chunk-EPC27WWV.mjs} +19 -25
- package/dist/lib/node-esm/chunk-EPC27WWV.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-Q6WD7L2J.mjs → chunk-GVAVEVZ6.mjs} +2 -2
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-NVM2QUMX.mjs +37 -0
- package/dist/lib/node-esm/chunk-NVM2QUMX.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +59 -72
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/operation-resolver-Z72B4H2Q.mjs +23 -0
- package/dist/lib/node-esm/operation-resolver-Z72B4H2Q.mjs.map +7 -0
- package/dist/lib/node-esm/react-surface-6GUBZX2V.mjs +35 -0
- package/dist/lib/node-esm/react-surface-6GUBZX2V.mjs.map +7 -0
- package/dist/lib/node-esm/{transcriber-UGB7ECX6.mjs → transcriber-RGW3YYT4.mjs} +17 -13
- package/dist/lib/node-esm/transcriber-RGW3YYT4.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +7 -5
- package/dist/types/src/TranscriptionPlugin.d.ts +2 -1
- package/dist/types/src/TranscriptionPlugin.d.ts.map +1 -1
- package/dist/types/src/blueprints/index.d.ts +2 -0
- package/dist/types/src/blueprints/index.d.ts.map +1 -0
- package/dist/types/src/blueprints/transcription-blueprint.d.ts +21 -0
- package/dist/types/src/blueprints/transcription-blueprint.d.ts.map +1 -0
- package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +9 -0
- package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -0
- package/dist/types/src/capabilities/blueprint-definition/index.d.ts +3 -0
- package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +4 -5
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-handler/index.d.ts +3 -0
- package/dist/types/src/capabilities/operation-handler/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/operation-handler/operation-handler.d.ts +5 -0
- package/dist/types/src/capabilities/operation-handler/operation-handler.d.ts.map +1 -0
- package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
- package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
- package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
- package/dist/types/src/capabilities/transcriber/index.d.ts +3 -0
- package/dist/types/src/capabilities/transcriber/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/transcriber/transcriber.d.ts +9 -0
- package/dist/types/src/capabilities/transcriber/transcriber.d.ts.map +1 -0
- package/dist/types/src/components/Transcript/Transcript.d.ts +5 -8
- package/dist/types/src/components/Transcript/Transcript.d.ts.map +1 -1
- package/dist/types/src/components/Transcript/Transcript.stories.d.ts +4 -3
- package/dist/types/src/components/Transcript/Transcript.stories.d.ts.map +1 -1
- package/dist/types/src/components/Transcript/deprecated/OldTranscript.d.ts +9 -9
- package/dist/types/src/components/Transcript/deprecated/OldTranscript.d.ts.map +1 -1
- package/dist/types/src/components/Transcript/transcript-extension.d.ts +2 -2
- package/dist/types/src/components/Transcript/transcript-extension.d.ts.map +1 -1
- package/dist/types/src/components/TranscriptContainer.d.ts +4 -6
- package/dist/types/src/components/TranscriptContainer.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -1
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/components/stories/FileTranscription.stories.d.ts +3 -3
- package/dist/types/src/components/stories/FileTranscription.stories.d.ts.map +1 -1
- package/dist/types/src/components/stories/MicrophoneTranscription.stories.d.ts +3 -3
- package/dist/types/src/components/stories/MicrophoneTranscription.stories.d.ts.map +1 -1
- package/dist/types/src/components/stories/TranscriptionStory.d.ts +2 -2
- package/dist/types/src/components/stories/TranscriptionStory.d.ts.map +1 -1
- package/dist/types/src/functions/open.d.ts +1 -1
- package/dist/types/src/functions/summarize.d.ts +1 -1
- package/dist/types/src/hooks/useQueueModelAdapter.d.ts +1 -1
- package/dist/types/src/hooks/useQueueModelAdapter.d.ts.map +1 -1
- package/dist/types/src/hooks/useTranscriber.d.ts +1 -1
- package/dist/types/src/hooks/useTranscriber.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +2 -2
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/segments-normalization/message-normalizer.d.ts +5 -5
- package/dist/types/src/segments-normalization/message-normalizer.d.ts.map +1 -1
- package/dist/types/src/segments-normalization/normalization.d.ts +502 -457
- package/dist/types/src/segments-normalization/normalization.d.ts.map +1 -1
- package/dist/types/src/segments-normalization/utils.d.ts +2 -2
- package/dist/types/src/segments-normalization/utils.d.ts.map +1 -1
- package/dist/types/src/testing/testing.d.ts +9 -9
- package/dist/types/src/testing/testing.d.ts.map +1 -1
- package/dist/types/src/transcriber/media-stream-recorder.d.ts +2 -2
- package/dist/types/src/transcriber/media-stream-recorder.d.ts.map +1 -1
- package/dist/types/src/transcriber/transcriber.d.ts +4 -4
- package/dist/types/src/transcriber/transcriber.d.ts.map +1 -1
- package/dist/types/src/transcriber/transcription-manager.d.ts +9 -6
- package/dist/types/src/transcriber/transcription-manager.d.ts.map +1 -1
- package/dist/types/src/types/TranscriptAction.d.ts +22 -20
- package/dist/types/src/types/TranscriptAction.d.ts.map +1 -1
- package/dist/types/src/types/capabilities.d.ts +18 -0
- package/dist/types/src/types/capabilities.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +2 -1
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/util/index.d.ts +1 -0
- package/dist/types/src/util/index.d.ts.map +1 -1
- package/dist/types/src/util/render-byline.d.ts +4 -0
- package/dist/types/src/util/render-byline.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +83 -69
- package/src/TranscriptionPlugin.tsx +34 -58
- package/src/blueprints/index.ts +5 -0
- package/src/blueprints/transcription-blueprint.ts +25 -0
- package/src/capabilities/blueprint-definition/blueprint-definition.ts +23 -0
- package/src/capabilities/blueprint-definition/index.ts +7 -0
- package/src/capabilities/index.ts +4 -8
- package/src/capabilities/operation-handler/index.ts +7 -0
- package/src/capabilities/operation-handler/operation-handler.ts +25 -0
- package/src/capabilities/operation-resolver/index.ts +7 -0
- package/src/capabilities/operation-resolver/operation-resolver.ts +25 -0
- package/src/capabilities/react-surface/index.ts +7 -0
- package/src/capabilities/react-surface/react-surface.tsx +27 -0
- package/src/capabilities/transcriber/index.ts +7 -0
- package/src/capabilities/transcriber/transcriber.ts +85 -0
- package/src/components/Transcript/Transcript.stories.tsx +38 -37
- package/src/components/Transcript/Transcript.tsx +11 -38
- package/src/components/Transcript/deprecated/OldTranscript.tsx +2 -2
- package/src/components/Transcript/transcript-extension.ts +10 -6
- package/src/components/TranscriptContainer.tsx +15 -17
- package/src/components/stories/FileTranscription.stories.tsx +27 -31
- package/src/components/stories/KeyWordRecognition.stories.tsx +4 -4
- package/src/components/stories/MicrophoneTranscription.stories.tsx +47 -50
- package/src/components/stories/TranscriptionStory.tsx +7 -11
- package/src/functions/open.ts +6 -6
- package/src/hooks/useQueueModelAdapter.ts +1 -1
- package/src/hooks/useTranscriber.ts +8 -3
- package/src/hooks/useVoiceInput.ts +2 -2
- package/src/index.ts +1 -1
- package/src/meta.ts +2 -2
- package/src/model/model.test.ts +20 -14
- package/src/segments-normalization/message-normalizer.ts +18 -13
- package/src/segments-normalization/normalization.test.ts +5 -10
- package/src/segments-normalization/normalization.ts +6 -6
- package/src/segments-normalization/utils.ts +2 -2
- package/src/testing/testing.ts +28 -18
- package/src/transcriber/media-stream-recorder.ts +3 -3
- package/src/transcriber/transcriber.browser.test.ts +4 -4
- package/src/transcriber/transcriber.ts +6 -6
- package/src/transcriber/transcription-manager.ts +21 -15
- package/src/types/TranscriptAction.ts +21 -13
- package/src/{capabilities → types}/capabilities.ts +8 -8
- package/src/types/index.ts +2 -1
- package/src/util/index.ts +1 -0
- package/src/util/render-byline.ts +33 -0
- package/dist/lib/browser/TranscriptContainer-2GSL2XB5.mjs +0 -11
- package/dist/lib/browser/blueprint-definition-UAAJYVLZ.mjs.map +0 -7
- package/dist/lib/browser/chunk-3MKZ2MNQ.mjs +0 -16
- package/dist/lib/browser/chunk-3MKZ2MNQ.mjs.map +0 -7
- package/dist/lib/browser/chunk-7DR6HZEF.mjs.map +0 -7
- package/dist/lib/browser/chunk-VBUIO677.mjs +0 -29
- package/dist/lib/browser/chunk-VBUIO677.mjs.map +0 -7
- package/dist/lib/browser/chunk-W7WKZTM4.mjs +0 -63
- package/dist/lib/browser/chunk-W7WKZTM4.mjs.map +0 -7
- package/dist/lib/browser/chunk-WH36ENNE.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-ZTKTEAQX.mjs +0 -25
- package/dist/lib/browser/intent-resolver-ZTKTEAQX.mjs.map +0 -7
- package/dist/lib/browser/react-surface-KA32A72I.mjs +0 -34
- package/dist/lib/browser/react-surface-KA32A72I.mjs.map +0 -7
- package/dist/lib/browser/transcriber-LWOLYQHC.mjs.map +0 -7
- package/dist/lib/node-esm/blueprint-definition-Z3LTZ3ID.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-K4AZOB5Y.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-OLMSTF3M.mjs +0 -64
- package/dist/lib/node-esm/chunk-OLMSTF3M.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-SWUVPFKR.mjs +0 -17
- package/dist/lib/node-esm/chunk-SWUVPFKR.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-YFN4FJFK.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-YVNQN2J6.mjs +0 -30
- package/dist/lib/node-esm/chunk-YVNQN2J6.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-55WH2GY6.mjs +0 -26
- package/dist/lib/node-esm/intent-resolver-55WH2GY6.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-GU7LW2JO.mjs +0 -35
- package/dist/lib/node-esm/react-surface-GU7LW2JO.mjs.map +0 -7
- package/dist/lib/node-esm/transcriber-UGB7ECX6.mjs.map +0 -7
- package/dist/types/src/capabilities/blueprint-definition.d.ts +0 -5
- package/dist/types/src/capabilities/blueprint-definition.d.ts.map +0 -1
- package/dist/types/src/capabilities/capabilities.d.ts +0 -17
- package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-surface.d.ts +0 -4
- package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
- package/dist/types/src/capabilities/transcriber.d.ts +0 -8
- package/dist/types/src/capabilities/transcriber.d.ts.map +0 -1
- package/dist/types/src/types/Transcript.d.ts +0 -30
- package/dist/types/src/types/Transcript.d.ts.map +0 -1
- package/src/capabilities/blueprint-definition.ts +0 -31
- package/src/capabilities/intent-resolver.ts +0 -18
- package/src/capabilities/react-surface.tsx +0 -22
- package/src/capabilities/transcriber.ts +0 -77
- package/src/types/Transcript.ts +0 -44
- /package/dist/lib/browser/{TranscriptContainer-2GSL2XB5.mjs.map → TranscriptContainer-6EHKWVS4.mjs.map} +0 -0
- /package/dist/lib/{node-esm/TranscriptContainer-GRLDCESB.mjs.map → browser/blueprints/index.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-535OJKFO.mjs.map → chunk-SYGEFDWO.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-Q6WD7L2J.mjs.map → chunk-GVAVEVZ6.mjs.map} +0 -0
|
@@ -3,24 +3,22 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
|
+
import * as Effect from 'effect/Effect';
|
|
7
|
+
import type * as Types from 'effect/Types';
|
|
6
8
|
import React, { type FC, useEffect, useMemo, useState } from 'react';
|
|
7
9
|
|
|
8
|
-
import { IntentPlugin, SettingsPlugin } from '@dxos/app-framework';
|
|
9
10
|
import { withPluginManager } from '@dxos/app-framework/testing';
|
|
10
11
|
import { Key } from '@dxos/echo';
|
|
11
12
|
import { ClientPlugin } from '@dxos/plugin-client';
|
|
12
13
|
import { PreviewPlugin } from '@dxos/plugin-preview';
|
|
13
|
-
import {
|
|
14
|
-
import { StorybookLayoutPlugin } from '@dxos/plugin-storybook-layout';
|
|
15
|
-
import { ThemePlugin } from '@dxos/plugin-theme';
|
|
14
|
+
import { StorybookPlugin, corePlugins } from '@dxos/plugin-testing';
|
|
16
15
|
import { faker } from '@dxos/random';
|
|
17
16
|
import { useMembers, useSpace } from '@dxos/react-client/echo';
|
|
18
17
|
import { IconButton, Toolbar } from '@dxos/react-ui';
|
|
19
18
|
import { withTheme } from '@dxos/react-ui/testing';
|
|
20
19
|
import { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import { Testing } from '@dxos/schema/testing';
|
|
20
|
+
import { TestSchema } from '@dxos/schema/testing';
|
|
21
|
+
import { type ContentBlock, type Message, Organization, Person } from '@dxos/types';
|
|
24
22
|
|
|
25
23
|
import { useQueueModelAdapter } from '../../hooks';
|
|
26
24
|
import { SerializationModel } from '../../model';
|
|
@@ -31,8 +29,9 @@ import {
|
|
|
31
29
|
useTestTranscriptionQueueWithEntityExtraction,
|
|
32
30
|
} from '../../testing';
|
|
33
31
|
import { translations } from '../../translations';
|
|
32
|
+
import { renderByline } from '../../util';
|
|
34
33
|
|
|
35
|
-
import { TranscriptView, type TranscriptViewProps
|
|
34
|
+
import { TranscriptView, type TranscriptViewProps } from './Transcript';
|
|
36
35
|
|
|
37
36
|
faker.seed(1);
|
|
38
37
|
|
|
@@ -45,10 +44,10 @@ const TranscriptContainer: FC<
|
|
|
45
44
|
onRunningChange: (running: boolean) => void;
|
|
46
45
|
onReset?: () => void;
|
|
47
46
|
}
|
|
48
|
-
> = ({
|
|
47
|
+
> = ({ model, running, onRunningChange, onReset }) => {
|
|
49
48
|
return (
|
|
50
49
|
<div className='grid grid-rows-[1fr_40px] grow divide-y divide-separator'>
|
|
51
|
-
<TranscriptView
|
|
50
|
+
<TranscriptView model={model} />
|
|
52
51
|
<div className='grid grid-cols-[1fr_16rem] overflow-hidden'>
|
|
53
52
|
<div className='flex items-center'>
|
|
54
53
|
<SyntaxHighlighter language='json' className='text-sm'>
|
|
@@ -68,7 +67,7 @@ const TranscriptContainer: FC<
|
|
|
68
67
|
);
|
|
69
68
|
};
|
|
70
69
|
|
|
71
|
-
type StoryProps = { messages?:
|
|
70
|
+
type StoryProps = { messages?: Message.Message[] } & Pick<TranscriptViewProps, 'ignoreAttention' | 'attendableId'>;
|
|
72
71
|
|
|
73
72
|
/**
|
|
74
73
|
* Basic story mutates array of messages.
|
|
@@ -77,11 +76,12 @@ const BasicStory = ({ messages: initialMessages = [], ...props }: StoryProps) =>
|
|
|
77
76
|
const [reset, setReset] = useState({});
|
|
78
77
|
const builder = useMemo(() => new MessageBuilder(), []);
|
|
79
78
|
const model = useMemo(
|
|
80
|
-
() => new SerializationModel<
|
|
79
|
+
() => new SerializationModel<Message.Message>(renderByline([]), initialMessages),
|
|
81
80
|
[initialMessages, reset],
|
|
82
81
|
);
|
|
83
82
|
const [running, setRunning] = useState(true);
|
|
84
|
-
|
|
83
|
+
// Use mutable type for local message building (not ECHO-managed).
|
|
84
|
+
const [currentMessage, setCurrentMessage] = useState<Types.Mutable<Message.Message> | null>(null);
|
|
85
85
|
useEffect(() => {
|
|
86
86
|
if (!running) {
|
|
87
87
|
return;
|
|
@@ -102,7 +102,7 @@ const BasicStory = ({ messages: initialMessages = [], ...props }: StoryProps) =>
|
|
|
102
102
|
return;
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
currentMessage.blocks.push(builder.createBlock());
|
|
105
|
+
(currentMessage.blocks as ContentBlock.Any[]).push(builder.createBlock());
|
|
106
106
|
model.updateChunk(currentMessage);
|
|
107
107
|
}, 3_000);
|
|
108
108
|
|
|
@@ -137,19 +137,12 @@ const QueueStory = ({
|
|
|
137
137
|
}: StoryProps & { queueId: Key.ObjectId; onReset: () => void }) => {
|
|
138
138
|
const [running, setRunning] = useState(true);
|
|
139
139
|
const space = useSpace();
|
|
140
|
-
const members = useMembers(space?.
|
|
140
|
+
const members = useMembers(space?.id).map((member) => member.identity);
|
|
141
141
|
const queue = useTestTranscriptionQueue(space, queueId, running, 2_000);
|
|
142
142
|
const model = useQueueModelAdapter(renderByline(members), queue, initialMessages);
|
|
143
143
|
|
|
144
144
|
return (
|
|
145
|
-
<TranscriptContainer
|
|
146
|
-
space={space}
|
|
147
|
-
model={model}
|
|
148
|
-
running={running}
|
|
149
|
-
onRunningChange={setRunning}
|
|
150
|
-
onReset={onReset}
|
|
151
|
-
{...props}
|
|
152
|
-
/>
|
|
145
|
+
<TranscriptContainer model={model} running={running} onRunningChange={setRunning} onReset={onReset} {...props} />
|
|
153
146
|
);
|
|
154
147
|
};
|
|
155
148
|
|
|
@@ -161,7 +154,7 @@ const EntityExtractionQueueStory = () => {
|
|
|
161
154
|
const queue = useTestTranscriptionQueueWithEntityExtraction(space, undefined, running, 2_000);
|
|
162
155
|
const model = useQueueModelAdapter(renderByline(members), queue, []);
|
|
163
156
|
|
|
164
|
-
return <TranscriptContainer
|
|
157
|
+
return <TranscriptContainer model={model} running={running} onRunningChange={setRunning} />;
|
|
165
158
|
};
|
|
166
159
|
|
|
167
160
|
/**
|
|
@@ -183,20 +176,17 @@ const meta = {
|
|
|
183
176
|
withTheme,
|
|
184
177
|
withPluginManager({
|
|
185
178
|
plugins: [
|
|
179
|
+
...corePlugins(),
|
|
180
|
+
StorybookPlugin({}),
|
|
186
181
|
ClientPlugin({
|
|
187
|
-
types: [TestItem,
|
|
188
|
-
onClientInitialized:
|
|
189
|
-
|
|
190
|
-
|
|
182
|
+
types: [TestItem, TestSchema.DocumentType, Person.Person, Organization.Organization],
|
|
183
|
+
onClientInitialized: ({ client }) =>
|
|
184
|
+
Effect.gen(function* () {
|
|
185
|
+
yield* Effect.promise(() => client.halo.createIdentity());
|
|
186
|
+
}),
|
|
191
187
|
}),
|
|
192
|
-
SpacePlugin({}),
|
|
193
|
-
IntentPlugin(),
|
|
194
|
-
SettingsPlugin(),
|
|
195
188
|
|
|
196
|
-
// UI
|
|
197
189
|
PreviewPlugin(),
|
|
198
|
-
ThemePlugin({ tx: defaultTx }),
|
|
199
|
-
StorybookLayoutPlugin({}),
|
|
200
190
|
],
|
|
201
191
|
}),
|
|
202
192
|
],
|
|
@@ -208,12 +198,23 @@ const meta = {
|
|
|
208
198
|
|
|
209
199
|
export default meta;
|
|
210
200
|
|
|
211
|
-
|
|
212
|
-
|
|
201
|
+
// TODO(wittjosiah): ECHO objects don't work when passed via Storybook args.
|
|
202
|
+
const DefaultStory = (props: StoryProps) => {
|
|
203
|
+
const [messages, setMessages] = useState<Message.Message[]>([]);
|
|
204
|
+
useEffect(() => {
|
|
205
|
+
void Promise.all(Array.from({ length: 10 }, () => MessageBuilder.singleton.createMessage())).then(setMessages);
|
|
206
|
+
}, []);
|
|
207
|
+
if (messages.length === 0) {
|
|
208
|
+
return <div>Loading messages...</div>;
|
|
209
|
+
}
|
|
210
|
+
return <BasicStory {...props} messages={messages} />;
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
export const Default: StoryObj<typeof DefaultStory> = {
|
|
214
|
+
render: DefaultStory,
|
|
213
215
|
args: {
|
|
214
216
|
ignoreAttention: true,
|
|
215
217
|
attendableId: 'story',
|
|
216
|
-
messages: await Promise.all(Array.from({ length: 10 }, () => MessageBuilder.singleton.createMessage())),
|
|
217
218
|
},
|
|
218
219
|
};
|
|
219
220
|
|
|
@@ -4,58 +4,31 @@
|
|
|
4
4
|
|
|
5
5
|
import React from 'react';
|
|
6
6
|
|
|
7
|
-
import { type Space } from '@dxos/react-client/echo';
|
|
8
|
-
import { type Identity } from '@dxos/react-client/halo';
|
|
9
7
|
import { type ThemedClassName, useThemeContext } from '@dxos/react-ui';
|
|
8
|
+
import { useTextEditor } from '@dxos/react-ui-editor';
|
|
9
|
+
import { type Message, type Transcript } from '@dxos/types';
|
|
10
10
|
import {
|
|
11
11
|
autoScroll,
|
|
12
12
|
createBasicExtensions,
|
|
13
13
|
createMarkdownExtensions,
|
|
14
14
|
createThemeExtensions,
|
|
15
15
|
decorateMarkdown,
|
|
16
|
+
editorSlots,
|
|
16
17
|
preview,
|
|
17
|
-
|
|
18
|
-
} from '@dxos/
|
|
19
|
-
import { mx } from '@dxos/react-ui-theme';
|
|
20
|
-
import { type DataType } from '@dxos/schema';
|
|
18
|
+
} from '@dxos/ui-editor';
|
|
19
|
+
import { mx } from '@dxos/ui-theme';
|
|
21
20
|
import { isTruthy } from '@dxos/util';
|
|
22
21
|
|
|
23
22
|
import { type SerializationModel } from '../../model';
|
|
24
|
-
import {
|
|
23
|
+
import { renderByline } from '../../util';
|
|
25
24
|
|
|
26
25
|
import { transcript } from './transcript-extension';
|
|
27
26
|
|
|
28
|
-
|
|
29
|
-
export const renderByline =
|
|
30
|
-
(identities: Identity[]) =>
|
|
31
|
-
(message: DataType.Message, index: number, debug = false): string[] => {
|
|
32
|
-
if (message.sender.role === 'assistant') {
|
|
33
|
-
// Start/stop block.
|
|
34
|
-
return [message.blocks.find((block) => block._tag === 'transcript')?.text ?? '', ''];
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// TODO(burdon): Use link/reference markup for users (with popover).
|
|
38
|
-
// TODO(burdon): Color and avatar.
|
|
39
|
-
const identity = identities.find((identity) => identity.did === message.sender.identityDid);
|
|
40
|
-
const name =
|
|
41
|
-
identity?.profile?.displayName ??
|
|
42
|
-
message.sender.contact?.target?.fullName ??
|
|
43
|
-
message.sender.name ??
|
|
44
|
-
message.sender.email ??
|
|
45
|
-
message.sender.identityDid;
|
|
46
|
-
const blocks = message.blocks.filter((block) => block._tag === 'transcript');
|
|
47
|
-
return [
|
|
48
|
-
// TODO(thure): Use an XML tag with the bits needed here.
|
|
49
|
-
`###### ${name}` + (debug ? ` [${index}]:${message.id}` : ''),
|
|
50
|
-
blocks.map((block) => block.text.trim()).join(' '),
|
|
51
|
-
'',
|
|
52
|
-
];
|
|
53
|
-
};
|
|
27
|
+
export { renderByline };
|
|
54
28
|
|
|
55
29
|
export type TranscriptViewProps = ThemedClassName<{
|
|
56
|
-
space?: Space;
|
|
57
30
|
transcript?: Transcript.Transcript;
|
|
58
|
-
model: SerializationModel<
|
|
31
|
+
model: SerializationModel<Message.Message>;
|
|
59
32
|
// TODO(burdon): Are these still in use?
|
|
60
33
|
attendableId?: string;
|
|
61
34
|
ignoreAttention?: boolean;
|
|
@@ -64,14 +37,14 @@ export type TranscriptViewProps = ThemedClassName<{
|
|
|
64
37
|
/**
|
|
65
38
|
* Transcript component implemented using the editor.
|
|
66
39
|
*/
|
|
67
|
-
export const TranscriptView = ({ classNames,
|
|
40
|
+
export const TranscriptView = ({ classNames, transcript: object, model }: TranscriptViewProps) => {
|
|
68
41
|
const { themeMode } = useThemeContext();
|
|
69
42
|
const { parentRef } = useTextEditor(() => {
|
|
70
43
|
return {
|
|
71
44
|
extensions: [
|
|
72
45
|
createBasicExtensions({ readOnly: true, lineWrapping: true, search: true }),
|
|
73
46
|
createMarkdownExtensions(),
|
|
74
|
-
createThemeExtensions({ themeMode }),
|
|
47
|
+
createThemeExtensions({ themeMode, slots: editorSlots }),
|
|
75
48
|
decorateMarkdown(),
|
|
76
49
|
preview(),
|
|
77
50
|
transcript({
|
|
@@ -81,7 +54,7 @@ export const TranscriptView = ({ classNames, space, transcript: object, model }:
|
|
|
81
54
|
autoScroll(),
|
|
82
55
|
].filter(isTruthy),
|
|
83
56
|
};
|
|
84
|
-
}, [
|
|
57
|
+
}, [model]);
|
|
85
58
|
|
|
86
59
|
return (
|
|
87
60
|
<div
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
Grid,
|
|
20
20
|
toPlaneCellIndex,
|
|
21
21
|
} from '@dxos/react-ui-grid';
|
|
22
|
-
import { mx } from '@dxos/
|
|
22
|
+
import { mx } from '@dxos/ui-theme';
|
|
23
23
|
|
|
24
24
|
import { meta } from '../../../meta';
|
|
25
25
|
|
|
@@ -43,7 +43,7 @@ const TranscriptBlock = Schema.Struct({
|
|
|
43
43
|
authorHue: Schema.optional(Schema.String), // TOOD(burdon): Remove.
|
|
44
44
|
segments: Schema.Array(TranscriptSegment),
|
|
45
45
|
}).pipe(
|
|
46
|
-
Type.
|
|
46
|
+
Type.object({
|
|
47
47
|
typename: 'dxos.org/type/TranscriptBlock',
|
|
48
48
|
version: '0.1.0',
|
|
49
49
|
}),
|
|
@@ -8,7 +8,7 @@ import { format } from 'date-fns/format';
|
|
|
8
8
|
import { intervalToDuration } from 'date-fns/intervalToDuration';
|
|
9
9
|
|
|
10
10
|
import { type CleanupFn, addEventListener, combine } from '@dxos/async';
|
|
11
|
-
import { type
|
|
11
|
+
import { type Message } from '@dxos/types';
|
|
12
12
|
|
|
13
13
|
import { DocumentAdapter, type SerializationModel } from '../../model';
|
|
14
14
|
|
|
@@ -16,7 +16,7 @@ import { DocumentAdapter, type SerializationModel } from '../../model';
|
|
|
16
16
|
* Data structure that maps Chunks queue to lines with transcript state.
|
|
17
17
|
*/
|
|
18
18
|
export type TranscriptOptions = {
|
|
19
|
-
model: SerializationModel<
|
|
19
|
+
model: SerializationModel<Message.Message>;
|
|
20
20
|
started?: Date;
|
|
21
21
|
};
|
|
22
22
|
|
|
@@ -131,8 +131,12 @@ export const transcript = ({ model, started }: TranscriptOptions): Extension =>
|
|
|
131
131
|
),
|
|
132
132
|
|
|
133
133
|
EditorView.theme({
|
|
134
|
+
'.cm-gutters': {
|
|
135
|
+
backgroundColor: 'var(--dx-baseSurface)',
|
|
136
|
+
},
|
|
134
137
|
'.cm-timestamp-gutter': {
|
|
135
138
|
width: '6rem',
|
|
139
|
+
paddingLeft: '0.5rem',
|
|
136
140
|
paddingRight: '1rem',
|
|
137
141
|
},
|
|
138
142
|
'.cm-timestamp-gutter > .cm-gutterElement > div': {
|
|
@@ -156,11 +160,11 @@ class TimestampMarker extends GutterMarker {
|
|
|
156
160
|
super();
|
|
157
161
|
}
|
|
158
162
|
|
|
159
|
-
override eq(other: this)
|
|
160
|
-
return
|
|
163
|
+
override eq(other: this) {
|
|
164
|
+
return this._timestamp === other._timestamp;
|
|
161
165
|
}
|
|
162
166
|
|
|
163
|
-
override toDOM(view: EditorView)
|
|
167
|
+
override toDOM(view: EditorView) {
|
|
164
168
|
const el = document.createElement('div');
|
|
165
169
|
el.className = 'text-sm text-subdued hover:bg-hoverSurface cursor-pointer';
|
|
166
170
|
el.textContent = formatTimestamp(this._timestamp, this._started);
|
|
@@ -176,7 +180,7 @@ class TimestampMarker extends GutterMarker {
|
|
|
176
180
|
}
|
|
177
181
|
}
|
|
178
182
|
|
|
179
|
-
const getStartTime = (started?: Date, message?:
|
|
183
|
+
const getStartTime = (started?: Date, message?: Message.Message): Date | undefined => {
|
|
180
184
|
if (started) {
|
|
181
185
|
return started;
|
|
182
186
|
}
|
|
@@ -4,32 +4,30 @@
|
|
|
4
4
|
|
|
5
5
|
import React from 'react';
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import { type SurfaceComponentProps } from '@dxos/app-framework/react';
|
|
8
|
+
import { Obj } from '@dxos/echo';
|
|
8
9
|
import { useMembers, useQueue } from '@dxos/react-client/echo';
|
|
9
|
-
import {
|
|
10
|
-
import { type
|
|
10
|
+
import { Layout } from '@dxos/react-ui-mosaic';
|
|
11
|
+
import { type Message, type Transcript } from '@dxos/types';
|
|
11
12
|
|
|
12
13
|
import { useQueueModelAdapter } from '../hooks';
|
|
13
|
-
import {
|
|
14
|
+
import { renderByline } from '../util';
|
|
14
15
|
|
|
15
|
-
import { TranscriptView
|
|
16
|
+
import { TranscriptView } from './Transcript';
|
|
16
17
|
|
|
17
|
-
export type TranscriptionContainerProps =
|
|
18
|
-
role: string;
|
|
19
|
-
transcript: Transcript.Transcript;
|
|
20
|
-
};
|
|
18
|
+
export type TranscriptionContainerProps = SurfaceComponentProps<Transcript.Transcript>;
|
|
21
19
|
|
|
22
|
-
export const TranscriptionContainer = ({ transcript }: TranscriptionContainerProps) => {
|
|
23
|
-
const attendableId =
|
|
24
|
-
const
|
|
25
|
-
const members = useMembers(
|
|
26
|
-
const queue = useQueue<
|
|
20
|
+
export const TranscriptionContainer = ({ role, subject: transcript }: TranscriptionContainerProps) => {
|
|
21
|
+
const attendableId = Obj.getDXN(transcript).toString();
|
|
22
|
+
const db = Obj.getDatabase(transcript);
|
|
23
|
+
const members = useMembers(db?.spaceId).map((member) => member.identity);
|
|
24
|
+
const queue = useQueue<Message.Message>(transcript.queue.dxn, { pollInterval: 1_000 });
|
|
27
25
|
const model = useQueueModelAdapter(renderByline(members), queue);
|
|
28
26
|
|
|
29
27
|
return (
|
|
30
|
-
<
|
|
31
|
-
<TranscriptView attendableId={attendableId}
|
|
32
|
-
</
|
|
28
|
+
<Layout.Main role={role}>
|
|
29
|
+
<TranscriptView attendableId={attendableId} model={model} transcript={transcript} />
|
|
30
|
+
</Layout.Main>
|
|
33
31
|
);
|
|
34
32
|
};
|
|
35
33
|
|
|
@@ -3,33 +3,32 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
|
+
import * as Effect from 'effect/Effect';
|
|
6
7
|
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
7
8
|
|
|
8
|
-
import {
|
|
9
|
+
import { Common } from '@dxos/app-framework';
|
|
9
10
|
import { withPluginManager } from '@dxos/app-framework/testing';
|
|
10
11
|
import { scheduleTask } from '@dxos/async';
|
|
11
12
|
import { Context } from '@dxos/context';
|
|
12
13
|
import { Obj } from '@dxos/echo';
|
|
13
14
|
import { createQueueDXN } from '@dxos/echo/internal';
|
|
14
15
|
import { MemoryQueue } from '@dxos/echo-db';
|
|
15
|
-
import { FunctionExecutor, ServiceContainer } from '@dxos/functions';
|
|
16
|
+
import { FunctionExecutor, ServiceContainer } from '@dxos/functions-runtime';
|
|
16
17
|
import { log } from '@dxos/log';
|
|
17
18
|
import { ClientPlugin } from '@dxos/plugin-client';
|
|
18
19
|
import { PreviewPlugin } from '@dxos/plugin-preview';
|
|
19
|
-
import {
|
|
20
|
-
import { StorybookLayoutPlugin } from '@dxos/plugin-storybook-layout';
|
|
21
|
-
import { ThemePlugin } from '@dxos/plugin-theme';
|
|
20
|
+
import { StorybookPlugin, corePlugins } from '@dxos/plugin-testing';
|
|
22
21
|
import { withLayout, withTheme } from '@dxos/react-ui/testing';
|
|
23
|
-
import {
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
22
|
+
import { TestSchema } from '@dxos/schema/testing';
|
|
23
|
+
import { type Actor, Message, Organization, Person } from '@dxos/types';
|
|
24
|
+
import { seedTestData } from '@dxos/types/testing';
|
|
26
25
|
|
|
27
26
|
import { useAudioFile, useQueueModelAdapter, useTranscriber } from '../../hooks';
|
|
28
27
|
import { MessageNormalizer, getActorId } from '../../segments-normalization';
|
|
29
28
|
import { TestItem } from '../../testing';
|
|
30
|
-
import { type
|
|
29
|
+
import { type MediaStreamRecorderProps, type TranscriberProps } from '../../transcriber';
|
|
31
30
|
import { TranscriptionPlugin } from '../../TranscriptionPlugin';
|
|
32
|
-
import { renderByline } from '
|
|
31
|
+
import { renderByline } from '../../util';
|
|
33
32
|
|
|
34
33
|
import { TranscriptionStory } from './TranscriptionStory';
|
|
35
34
|
import { useIsSpeaking } from './useIsSpeaking';
|
|
@@ -45,12 +44,12 @@ const AudioFile = ({
|
|
|
45
44
|
detectSpeaking?: boolean;
|
|
46
45
|
normalizeSentences?: boolean;
|
|
47
46
|
audioUrl: string;
|
|
48
|
-
transcriberConfig?:
|
|
49
|
-
recorderConfig?:
|
|
47
|
+
transcriberConfig?: TranscriberProps['config'];
|
|
48
|
+
recorderConfig?: MediaStreamRecorderProps['config'];
|
|
50
49
|
audioConstraints?: MediaTrackConstraints;
|
|
51
50
|
}) => {
|
|
52
51
|
const [running, setRunning] = useState(false);
|
|
53
|
-
const actor:
|
|
52
|
+
const actor: Actor.Actor = useMemo(() => ({ name: 'You' }), []);
|
|
54
53
|
|
|
55
54
|
// Audio.
|
|
56
55
|
const { audio, track, stream } = useAudioFile(audioUrl, audioConstraints);
|
|
@@ -79,13 +78,13 @@ const AudioFile = ({
|
|
|
79
78
|
// Transcriber.
|
|
80
79
|
// TODO(dmaretskyi): Use space.queues.create() instead.
|
|
81
80
|
const queueDxn = useMemo(() => createQueueDXN(), []);
|
|
82
|
-
const queue = useMemo(() => new MemoryQueue<
|
|
81
|
+
const queue = useMemo(() => new MemoryQueue<Message.Message>(queueDxn), [queueDxn]);
|
|
83
82
|
|
|
84
83
|
const model = useQueueModelAdapter(renderByline([]), queue);
|
|
85
|
-
const handleSegments = useCallback<
|
|
84
|
+
const handleSegments = useCallback<TranscriberProps['onSegments']>(
|
|
86
85
|
async (blocks) => {
|
|
87
86
|
void queue?.append([
|
|
88
|
-
Obj.make(
|
|
87
|
+
Obj.make(Message.Message, {
|
|
89
88
|
created: new Date().toISOString(),
|
|
90
89
|
sender: actor,
|
|
91
90
|
blocks,
|
|
@@ -188,29 +187,26 @@ const meta = {
|
|
|
188
187
|
title: 'plugins/plugin-transcription/FileTranscription',
|
|
189
188
|
decorators: [
|
|
190
189
|
withTheme,
|
|
191
|
-
withLayout({
|
|
190
|
+
withLayout({ layout: 'column' }),
|
|
192
191
|
withPluginManager({
|
|
193
192
|
plugins: [
|
|
193
|
+
...corePlugins(),
|
|
194
|
+
StorybookPlugin({}),
|
|
194
195
|
ClientPlugin({
|
|
195
|
-
types: [TestItem,
|
|
196
|
-
onClientInitialized:
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
196
|
+
types: [TestItem, Person.Person, Organization.Organization, TestSchema.DocumentType],
|
|
197
|
+
onClientInitialized: ({ client }) =>
|
|
198
|
+
Effect.gen(function* () {
|
|
199
|
+
yield* Effect.promise(() => client.halo.createIdentity());
|
|
200
|
+
yield* Effect.promise(() => client.spaces.waitUntilReady());
|
|
201
|
+
yield* Effect.promise(() => client.spaces.default.waitUntilReady());
|
|
202
|
+
yield* Effect.promise(() => seedTestData(client.spaces.default));
|
|
203
|
+
}),
|
|
202
204
|
}),
|
|
203
|
-
SpacePlugin({}),
|
|
204
|
-
IntentPlugin(),
|
|
205
205
|
|
|
206
|
-
// UI
|
|
207
|
-
ThemePlugin({ tx: defaultTx }),
|
|
208
|
-
SettingsPlugin(),
|
|
209
206
|
PreviewPlugin(),
|
|
210
207
|
TranscriptionPlugin(),
|
|
211
|
-
StorybookLayoutPlugin({}),
|
|
212
208
|
],
|
|
213
|
-
fireEvents: [
|
|
209
|
+
fireEvents: [Common.ActivationEvent.SetupAppGraph],
|
|
214
210
|
}),
|
|
215
211
|
],
|
|
216
212
|
} satisfies Meta;
|
|
@@ -8,7 +8,7 @@ import React, { useEffect, useMemo, useState } from 'react';
|
|
|
8
8
|
import { log } from '@dxos/log';
|
|
9
9
|
import { Toolbar } from '@dxos/react-ui';
|
|
10
10
|
import { withLayout, withTheme } from '@dxos/react-ui/testing';
|
|
11
|
-
import { mx } from '@dxos/
|
|
11
|
+
import { mx } from '@dxos/ui-theme';
|
|
12
12
|
|
|
13
13
|
type Word = {
|
|
14
14
|
text: string;
|
|
@@ -86,7 +86,7 @@ const DefaultStory = ({ keywords }: StoryProps) => {
|
|
|
86
86
|
}, [running, recognition]);
|
|
87
87
|
|
|
88
88
|
return (
|
|
89
|
-
<div className={mx('flex flex-col gap-2
|
|
89
|
+
<div className={mx('flex flex-col gap-2 is-[30rem]')}>
|
|
90
90
|
<Toolbar.Root>
|
|
91
91
|
<Toolbar.IconButton
|
|
92
92
|
iconOnly
|
|
@@ -101,7 +101,7 @@ const DefaultStory = ({ keywords }: StoryProps) => {
|
|
|
101
101
|
<span
|
|
102
102
|
key={index}
|
|
103
103
|
className={mx(
|
|
104
|
-
'
|
|
104
|
+
'pli-3 plb-1 m-2 rounded border',
|
|
105
105
|
word.matched ? 'bg-red-200 text-red-800 border-red-300' : 'bg-gray-200 text-gray-600 border-gray-300',
|
|
106
106
|
)}
|
|
107
107
|
>
|
|
@@ -118,7 +118,7 @@ const DefaultStory = ({ keywords }: StoryProps) => {
|
|
|
118
118
|
const meta = {
|
|
119
119
|
title: 'plugins/plugin-transcription/KeyWordDetection',
|
|
120
120
|
render: DefaultStory,
|
|
121
|
-
decorators: [withTheme, withLayout({
|
|
121
|
+
decorators: [withTheme, withLayout({ layout: 'column' })],
|
|
122
122
|
} satisfies Meta<typeof DefaultStory>;
|
|
123
123
|
|
|
124
124
|
export default meta;
|