Skip to content

Commit 6ee1daf

Browse files
chore(shadcn): cleanup microphoneTrack (#1269)
1 parent de7ce9b commit 6ee1daf

14 files changed

Lines changed: 200 additions & 244 deletions
Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
1-
import React, { useEffect, useMemo } from 'react';
2-
import { Decorator } from '@storybook/react-vite';
3-
import {
4-
useLocalParticipant,
5-
SessionProvider,
6-
useSession,
7-
type TrackReference,
8-
} from '@livekit/components-react';
9-
import { TokenSource, Track } from 'livekit-client';
1+
import React, { useEffect } from 'react';
2+
import { Decorator, StoryFn } from '@storybook/react-vite';
3+
import { SessionProvider, useSession } from '@livekit/components-react';
4+
import { TokenSource } from 'livekit-client';
105

116
const TOKEN_SOURCE = TokenSource.sandboxTokenServer(
127
import.meta.env.VITE_PUBLIC_LK_SANDBOX_TOKEN_SERVER_ID,
@@ -26,21 +21,3 @@ export const AgentSessionProvider: Decorator = (Story: StoryFn) => {
2621
</SessionProvider>
2722
);
2823
};
29-
30-
export function useMicrophone() {
31-
const { microphoneTrack, localParticipant } = useLocalParticipant();
32-
33-
useEffect(() => {
34-
localParticipant.setMicrophoneEnabled(true, undefined);
35-
}, []);
36-
37-
return useMemo(
38-
() =>
39-
({
40-
participant: localParticipant,
41-
source: Track.Source.Microphone,
42-
publication: microphoneTrack,
43-
}) as TrackReference,
44-
[microphoneTrack],
45-
);
46-
}

docs/storybook/stories/agents-ui/AgentAudioVisualizerAura.stories.tsx

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,23 @@
11
import * as React from 'react';
22
import { StoryObj } from '@storybook/react-vite';
3-
import {
4-
AgentSessionProvider,
5-
useMicrophone,
6-
} from '../../.storybook/lk-decorators/AgentSessionProvider';
3+
import { AgentSessionProvider } from '../../.storybook/lk-decorators/AgentSessionProvider';
74
import { AgentAudioVisualizerAura, AgentAudioVisualizerAuraProps } from '@agents-ui';
85
import { useTheme } from 'next-themes';
6+
import { useSessionContext } from '@livekit/components-react';
97

108
export default {
119
component: AgentAudioVisualizerAura,
1210
decorators: [AgentSessionProvider],
1311
render: (args: AgentAudioVisualizerAuraProps) => {
14-
const audioTrack = useMicrophone();
12+
const {
13+
local: { microphoneTrack },
14+
} = useSessionContext();
1515
const { theme } = useTheme();
1616
const themeMode = theme === 'dark' ? 'dark' : 'light';
1717

18-
return <AgentAudioVisualizerAura {...args} themeMode={themeMode} audioTrack={audioTrack} />;
18+
return (
19+
<AgentAudioVisualizerAura {...args} themeMode={themeMode} audioTrack={microphoneTrack} />
20+
);
1921
},
2022
args: {
2123
size: 'xl',

docs/storybook/stories/agents-ui/AgentAudioVisualizerBar.stories.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
import React from 'react';
22
import { StoryObj } from '@storybook/react-vite';
3-
import {
4-
AgentSessionProvider,
5-
useMicrophone,
6-
} from '../../.storybook/lk-decorators/AgentSessionProvider';
3+
import { useSessionContext } from '@livekit/components-react';
4+
import { AgentSessionProvider } from '../../.storybook/lk-decorators/AgentSessionProvider';
75
import { AgentAudioVisualizerBar, AgentAudioVisualizerBarProps } from '@agents-ui';
86

97
export default {
108
component: AgentAudioVisualizerBar,
119
decorators: [AgentSessionProvider],
1210
render: (args: AgentAudioVisualizerBarProps) => {
13-
const audioTrack = useMicrophone();
11+
const {
12+
local: { microphoneTrack },
13+
} = useSessionContext();
1414

15-
return <AgentAudioVisualizerBar {...args} audioTrack={audioTrack} />;
15+
return <AgentAudioVisualizerBar {...args} audioTrack={microphoneTrack} />;
1616
},
1717
args: {
1818
size: 'xl',

docs/storybook/stories/agents-ui/AgentAudioVisualizerGrid.stories.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
import * as React from 'react';
22
import { StoryObj } from '@storybook/react-vite';
3-
import {
4-
AgentSessionProvider,
5-
useMicrophone,
6-
} from '../../.storybook/lk-decorators/AgentSessionProvider';
3+
import { AgentSessionProvider } from '../../.storybook/lk-decorators/AgentSessionProvider';
74
import { AgentAudioVisualizerGrid, AgentAudioVisualizerGridProps } from '@agents-ui';
5+
import { useSessionContext } from '@livekit/components-react';
86

97
export default {
108
component: AgentAudioVisualizerGrid,
119
decorators: [AgentSessionProvider],
1210
render: (args: AgentAudioVisualizerGridProps) => {
13-
const audioTrack = useMicrophone();
11+
const {
12+
local: { microphoneTrack },
13+
} = useSessionContext();
1414

15-
return <AgentAudioVisualizerGrid {...args} audioTrack={audioTrack} />;
15+
return <AgentAudioVisualizerGrid {...args} audioTrack={microphoneTrack} />;
1616
},
1717
args: {
1818
size: 'lg',

docs/storybook/stories/agents-ui/AgentAudioVisualizerRadial.stories.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
import React from 'react';
22
import { StoryObj } from '@storybook/react-vite';
3-
import {
4-
AgentSessionProvider,
5-
useMicrophone,
6-
} from '../../.storybook/lk-decorators/AgentSessionProvider';
3+
import { AgentSessionProvider } from '../../.storybook/lk-decorators/AgentSessionProvider';
74
import { AgentAudioVisualizerRadial, AgentAudioVisualizerRadialProps } from '@agents-ui';
5+
import { useSessionContext } from '@livekit/components-react';
86

97
export default {
108
component: AgentAudioVisualizerRadial,
119
decorators: [AgentSessionProvider],
1210
render: (args: AgentAudioVisualizerRadialProps) => {
13-
const audioTrack = useMicrophone();
11+
const {
12+
local: { microphoneTrack },
13+
} = useSessionContext();
1414

15-
return <AgentAudioVisualizerRadial {...args} audioTrack={audioTrack} />;
15+
return <AgentAudioVisualizerRadial {...args} audioTrack={microphoneTrack} />;
1616
},
1717
args: {
1818
size: 'lg',

docs/storybook/stories/agents-ui/AgentAudioVisualizerWave.stories.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
import * as React from 'react';
22
import { StoryObj } from '@storybook/react-vite';
3-
import {
4-
AgentSessionProvider,
5-
useMicrophone,
6-
} from '../../.storybook/lk-decorators/AgentSessionProvider';
3+
import { AgentSessionProvider } from '../../.storybook/lk-decorators/AgentSessionProvider';
74
import { AgentAudioVisualizerWave, AgentAudioVisualizerWaveProps } from '@agents-ui';
5+
import { useSessionContext } from '@livekit/components-react';
86

97
export default {
108
component: AgentAudioVisualizerWave,
119
decorators: [AgentSessionProvider],
1210
render: (args: AgentAudioVisualizerWaveProps) => {
13-
const audioTrack = useMicrophone();
11+
const {
12+
local: { microphoneTrack },
13+
} = useSessionContext();
1414

15-
return <AgentAudioVisualizerWave {...args} audioTrack={audioTrack} />;
15+
return <AgentAudioVisualizerWave {...args} audioTrack={microphoneTrack} />;
1616
},
1717
args: {
1818
size: 'xl',

docs/storybook/stories/agents-ui/AgentControlBar.stories.tsx

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
import * as React from 'react';
22
import { StoryObj } from '@storybook/react-vite';
3-
import {
4-
AgentSessionProvider,
5-
useMicrophone,
6-
} from '../../.storybook/lk-decorators/AgentSessionProvider';
3+
import { AgentSessionProvider } from '../../.storybook/lk-decorators/AgentSessionProvider';
74
import { AgentControlBar, AgentControlBarProps } from '@agents-ui';
85

96
interface Args {
@@ -34,7 +31,6 @@ export default {
3431
},
3532
};
3633

37-
useMicrophone();
3834
return <AgentControlBar {...props} className="min-w-lg mx-auto" />;
3935
},
4036
args: {

docs/storybook/stories/agents-ui/AgentTrackControl.stories.tsx

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,26 @@
11
import * as React from 'react';
22
import { StoryObj } from '@storybook/react-vite';
3-
import {
4-
AgentSessionProvider,
5-
useMicrophone,
6-
} from '../../.storybook/lk-decorators/AgentSessionProvider';
3+
import { AgentSessionProvider } from '../../.storybook/lk-decorators/AgentSessionProvider';
74
import { AgentTrackControl, type AgentTrackControlProps } from '@agents-ui';
5+
import { useSessionContext, useTrackToggle } from '@livekit/components-react';
86
import { Track } from 'livekit-client';
97

108
export default {
119
component: AgentTrackControl,
1210
decorators: [AgentSessionProvider],
1311
render: (args: AgentTrackControlProps) => {
14-
const [isPressed, setIsPressed] = React.useState(
15-
args.source === Track.Source.Microphone ? true : false,
16-
);
17-
18-
const microphoneTrack = useMicrophone();
12+
const {
13+
local: { microphoneTrack },
14+
} = useSessionContext();
15+
const microphoneToggle = useTrackToggle({
16+
source: Track.Source.Microphone,
17+
});
1918

2019
return (
2120
<AgentTrackControl
2221
{...args}
23-
pressed={isPressed}
24-
onPressedChange={(pressed: boolean) => setIsPressed(pressed)}
22+
pressed={microphoneToggle.enabled}
23+
onPressedChange={microphoneToggle.toggle}
2524
audioTrack={args.source === Track.Source.Microphone ? microphoneTrack : undefined}
2625
/>
2726
);
@@ -52,8 +51,9 @@ export const Default: StoryObj<AgentTrackControlProps> = {
5251
const [isCameraPressed, setIsCameraPressed] = React.useState(true);
5352
const [isMicrophonePressed, setIsMicrophonePressed] = React.useState(false);
5453
const [isScreenSharePressed, setIsScreenSharePressed] = React.useState(true);
55-
56-
const microphoneTrack = useMicrophone();
54+
const {
55+
local: { microphoneTrack },
56+
} = useSessionContext();
5757

5858
return (
5959
<div className="flex gap-2">
@@ -92,8 +92,9 @@ export const Outlined: StoryObj<AgentTrackControlProps> = {
9292
const [isCameraPressed, setIsCameraPressed] = React.useState(true);
9393
const [isMicrophonePressed, setIsMicrophonePressed] = React.useState(false);
9494
const [isScreenSharePressed, setIsScreenSharePressed] = React.useState(true);
95-
96-
const microphoneTrack = useMicrophone();
95+
const {
96+
local: { microphoneTrack },
97+
} = useSessionContext();
9798

9899
return (
99100
<div className="flex gap-2">

packages/shadcn/components/agents-ui/agent-audio-visualizer-grid.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export const AgentAudioVisualizerGridVariants = cva(
5151
[
5252
'grid',
5353
'*:size-1 *:rounded-full',
54-
'*:bg-foreground/10 [&_>_[data-lk-highlighted=true]]:bg-foreground [&_>_[data-lk-highlighted=true]]:scale-125 [&_>_[data-lk-highlighted=true]]:shadow-[0px_0px_10px_2px_rgba(255,255,255,0.4)]',
54+
'*:bg-foreground/10 *:data-[lk-highlighted=true]:bg-foreground *:data-[lk-highlighted=true]:scale-125 *:data-[lk-highlighted=true]:shadow-[0px_0px_10px_2px_rgba(255,255,255,0.4)]',
5555
],
5656
{
5757
variants: {

packages/shadcn/components/agents-ui/agent-audio-visualizer-radial.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ import { useAgentAudioVisualizerRadialAnimator } from '@/hooks/agents-ui/use-age
1414
export const AgentAudioVisualizerRadialVariants = cva(
1515
[
1616
'relative flex items-center justify-center',
17-
'[&_[data-lk-index]]:bg-current/10',
18-
'[&_[data-lk-index]]:absolute [&_[data-lk-index]]:top-1/2 [&_[data-lk-index]]:left-1/2 [&_[data-lk-index]]:origin-bottom [&_[data-lk-index]]:-translate-x-1/2',
19-
'[&_[data-lk-index]]:rounded-full [&_[data-lk-index]]:transition-colors [&_[data-lk-index]]:duration-150 [&_[data-lk-index]]:ease-linear [&_[data-lk-index]]:data-[lk-highlighted=true]:bg-current',
20-
'has-data-[lk-state=connecting]:[&_[data-lk-index]]:duration-300',
21-
'has-data-[lk-state=initializing]:[&_[data-lk-index]]:duration-300',
22-
'has-data-[lk-state=listening]:[&_[data-lk-index]]:duration-300 has-data-[lk-state=listening]:[&_[data-lk-index]]:duration-300',
23-
'has-data-[lk-state=thinking]:animate-spin has-data-[lk-state=thinking]:[animation-duration:5s] has-data-[lk-state=thinking]:[&_[data-lk-index]]:bg-current',
17+
'**:data-lk-index:bg-current/10',
18+
'**:data-lk-index:absolute **:data-lk-index:top-1/2 **:data-lk-index:left-1/2 **:data-lk-index:origin-bottom **:data-lk-index:-translate-x-1/2',
19+
'**:data-lk-index:rounded-full **:data-lk-index:transition-colors **:data-lk-index:duration-150 **:data-lk-index:ease-linear **:data-lk-index:data-[lk-highlighted=true]:bg-current',
20+
'has-data-[lk-state=connecting]:**:data-lk-index:duration-300',
21+
'has-data-[lk-state=initializing]:**:data-lk-index:duration-300',
22+
'has-data-[lk-state=listening]:**:data-lk-index:duration-300 has-data-[lk-state=listening]:**:data-lk-index:duration-300',
23+
'has-data-[lk-state=thinking]:animate-spin has-data-[lk-state=thinking]:[animation-duration:5s] has-data-[lk-state=thinking]:**:data-lk-index:bg-current',
2424
],
2525
{
2626
variants: {

0 commit comments

Comments
 (0)