@moises.ai/design-system 4.16.10 → 4.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. package/dist/{ChordDiagramGridIcon-CxpGQmg4.js → DynamicMicrophone2Icon-BBVZw0ZO.js} +794 -782
  2. package/dist/icons.js +484 -483
  3. package/dist/index.js +5454 -5762
  4. package/package.json +1 -1
  5. package/src/components/DropdownButton/DropdownButton.jsx +7 -0
  6. package/src/components/DropdownButton/DropdownButton.stories.jsx +4 -1
  7. package/src/components/InstrumentSelector/InstrumentSelector.stories.jsx +9 -1
  8. package/src/components/MessageWithAction/MessageWithAction.jsx +7 -0
  9. package/src/components/MessageWithAction/MessageWithAction.stories.jsx +4 -1
  10. package/src/components/Tooltip/Tooltip.jsx +35 -9
  11. package/src/components/Tooltip/Tooltip.module.css +48 -0
  12. package/src/components/Tooltip/Tooltip.stories.jsx +42 -0
  13. package/src/components/TrackControlsToggle/TrackControlsToggle.stories.jsx +7 -3
  14. package/src/icons/DynamicMicrophone2Icon.jsx +13 -0
  15. package/src/icons.jsx +1 -0
  16. package/src/index.jsx +2 -2
  17. package/src/lib/menu/renderItem.jsx +1 -3
  18. package/src/components/PlayerBar/PlayerBar.jsx +0 -250
  19. package/src/components/PlayerBar/PlayerBar.module.css +0 -135
  20. package/src/components/PlayerBar/PlayerBar.stories.jsx +0 -519
  21. package/src/components/PlayerMasterVolume/PlayerMasterVolume.jsx +0 -54
  22. package/src/components/PlayerMasterVolume/PlayerMasterVolume.module.css +0 -31
  23. package/src/components/PlayerMasterVolume/PlayerMasterVolume.stories.jsx +0 -182
  24. package/src/components/PlayerSlider/PlayerSlider.jsx +0 -80
  25. package/src/components/PlayerSlider/PlayerSlider.module.css +0 -180
  26. package/src/components/PlayerSlider/PlayerSlider.stories.jsx +0 -97
  27. package/src/components/PlayerSlider/PlayerSliderWaveform.jsx +0 -70
  28. package/src/components/PlayerSmartMetronome/PlayerSmartMetronome.jsx +0 -79
  29. package/src/components/PlayerSmartMetronome/PlayerSmartMetronome.module.css +0 -23
  30. package/src/components/PlayerSmartMetronome/PlayerSmartMetronome.stories.jsx +0 -225
  31. package/src/components/PlayerSmartMetronome/SegmentedField.jsx +0 -19
  32. package/src/components/PlayerTempoPitch/PlayerTempoPitch.jsx +0 -123
  33. package/src/components/PlayerTempoPitch/PlayerTempoPitch.module.css +0 -25
  34. package/src/components/PlayerTempoPitch/PlayerTempoPitch.stories.jsx +0 -215
  35. package/src/components/PlayerTempoPitch/StepperField.jsx +0 -57
  36. package/src/components/PlayerTempoPitch/constants.js +0 -40
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moises.ai/design-system",
3
- "version": "4.16.10",
3
+ "version": "4.17.0",
4
4
  "description": "Design System package based on @radix-ui/themes with custom defaults",
5
5
  "private": false,
6
6
  "type": "module",
@@ -6,6 +6,13 @@ import { ChevronDownIcon } from '../../icons/ChevronDownIcon'
6
6
  import { Button } from '../Button/Button'
7
7
  import styles from './DropdownButton.module.css'
8
8
 
9
+ /**
10
+ * @deprecated Use `ToolsDropdown` instead. `DropdownButton` will be removed in a
11
+ * future release. The new component is built on Radix DropdownMenu and supports the
12
+ * same trigger/chevron split, controlled open state, and custom panel content.
13
+ *
14
+ * @see ToolsDropdown
15
+ */
9
16
  export const DropdownButton = ({
10
17
  children,
11
18
  trigger,
@@ -7,13 +7,16 @@ import { Stop2Icon } from '../../icons/Stop2Icon'
7
7
  import { RecordIcon } from '../../icons/RecordIcon'
8
8
 
9
9
  export default {
10
- title: 'Components/DropdownButton',
10
+ title: 'Deprecated/DropdownButton',
11
11
  component: DropdownButton,
12
12
  parameters: {
13
13
  layout: 'centered',
14
14
  docs: {
15
15
  description: {
16
16
  component: `
17
+ > **Deprecated:** Use [\`ToolsDropdown\`](/docs/components-toolsdropdown--docs) instead.
18
+ > \`DropdownButton\` will be removed in a future release.
19
+
17
20
  ## Usage
18
21
 
19
22
  The DropdownButton is a component that combines a trigger button with a dropdown chevron.
@@ -9,10 +9,18 @@ import {
9
9
  } from '../../icons'
10
10
 
11
11
  export default {
12
- title: 'Components/InstrumentSelector',
12
+ title: 'Deprecated/InstrumentSelector',
13
13
  component: InstrumentSelector,
14
14
  parameters: {
15
15
  layout: 'centered',
16
+ docs: {
17
+ description: {
18
+ component: `
19
+ > **Deprecated:** Use [\`InstrumentSelect\`](/docs/components-instrumentselect--docs) instead.
20
+ > \`InstrumentSelector\` will be removed in a future release.
21
+ `,
22
+ },
23
+ },
16
24
  },
17
25
  tags: ['autodocs'],
18
26
  }
@@ -5,6 +5,13 @@ import React from 'react'
5
5
  import styles from './MessageWithAction.module.css'
6
6
  import classNames from 'classnames'
7
7
 
8
+ /**
9
+ * @deprecated Use `Callout` instead. `MessageWithAction` will be removed in a
10
+ * future release. Map `message` to `text`, `type` to `color` (`error` → `error`,
11
+ * `warn` → `warning`), and `ctaLabel`/`onClick` to `buttonProps`.
12
+ *
13
+ * @see Callout
14
+ */
8
15
  export const MessageWithAction = ({
9
16
  type,
10
17
  message,
@@ -4,13 +4,16 @@ import { Flex, Text, Tooltip } from '@radix-ui/themes'
4
4
  import { InfoIcon } from '../../icons'
5
5
 
6
6
  export default {
7
- title: 'Components/MessageWithAction',
7
+ title: 'Deprecated/MessageWithAction',
8
8
  component: MessageWithAction,
9
9
  parameters: {
10
10
  layout: 'centered',
11
11
  docs: {
12
12
  description: {
13
13
  component: `
14
+ > **Deprecated:** Use [\`Callout\`](/docs/components-callout--docs) instead.
15
+ > \`MessageWithAction\` will be removed in a future release.
16
+
14
17
  ## Basic Usage
15
18
 
16
19
  ### MessageWithAction
@@ -9,6 +9,9 @@ export const Tooltip = ({
9
9
  content,
10
10
  shortcut,
11
11
  color = 'gray',
12
+ variant = 'default',
13
+ title,
14
+ headerActions,
12
15
  delayDuration = 200,
13
16
  skipDelayDuration,
14
17
  disableHoverableContent,
@@ -22,6 +25,8 @@ export const Tooltip = ({
22
25
  ...restContentProps
23
26
  } = props
24
27
 
28
+ const isDiagram = variant === 'diagram'
29
+
25
30
  const providerProps = {
26
31
  delayDuration,
27
32
  skipDelayDuration,
@@ -45,19 +50,40 @@ export const Tooltip = ({
45
50
  <TooltipPrimitive.Content
46
51
  className={classNames(
47
52
  styles.TooltipContent,
48
- styles[`TooltipContent--${color}`]
53
+ !isDiagram && styles[`TooltipContent--${color}`],
54
+ isDiagram && styles.TooltipDiagram
49
55
  )}
50
56
  sideOffset={5}
51
57
  {...restContentProps}
52
58
  >
53
- <Text size='1' className={styles.TooltipText}>{content}</Text>
54
- {shortcut && (
55
- <Text size='0' className={classNames(
56
- styles.TooltipShortcut,
57
- styles[`TooltipShortcut--${color}`]
58
- )}>
59
- {shortcut}
60
- </Text>
59
+ {isDiagram ? (
60
+ <>
61
+ <div className={styles.TooltipDiagramHeader}>
62
+ {title && (
63
+ <Text size='2' className={styles.TooltipDiagramTitle}>
64
+ {title}
65
+ </Text>
66
+ )}
67
+ {headerActions && (
68
+ <div className={styles.TooltipDiagramActions}>
69
+ {headerActions}
70
+ </div>
71
+ )}
72
+ </div>
73
+ <div className={styles.TooltipDiagramBody}>{content}</div>
74
+ </>
75
+ ) : (
76
+ <>
77
+ <Text size='1' className={styles.TooltipText}>{content}</Text>
78
+ {shortcut && (
79
+ <Text size='0' className={classNames(
80
+ styles.TooltipShortcut,
81
+ styles[`TooltipShortcut--${color}`]
82
+ )}>
83
+ {shortcut}
84
+ </Text>
85
+ )}
86
+ </>
61
87
  )}
62
88
  <TooltipPrimitive.Arrow className={styles.TooltipArrow} />
63
89
  </TooltipPrimitive.Content>
@@ -85,6 +85,54 @@
85
85
  color: rgba(252, 253, 255, 0.94);
86
86
  }
87
87
 
88
+ /* Diagram variant (matches the "tooltip diagram" surface from Figma) */
89
+ .TooltipDiagram {
90
+ flex-direction: column;
91
+ align-items: stretch;
92
+ gap: var(--spacing-1, 4px);
93
+ max-width: none;
94
+ padding: var(--spacing-1, 4px) var(--spacing-2, 8px) var(--spacing-2, 8px);
95
+ border-radius: var(--radius-4, 8px);
96
+ background: var(--panel-solid, #18191b);
97
+ color: var(--neutral-alpha-12, rgba(252, 253, 255, 0.94));
98
+ box-shadow:
99
+ 0 12px 32px -16px rgba(0, 0, 0, 0.3),
100
+ 0 12px 60px 0 rgba(0, 0, 0, 0.15);
101
+ }
102
+
103
+ .TooltipDiagram .TooltipArrow {
104
+ fill: var(--panel-solid, #18191b);
105
+ }
106
+
107
+ .TooltipDiagramHeader {
108
+ display: flex;
109
+ align-items: center;
110
+ justify-content: space-between;
111
+ gap: var(--spacing-2, 8px);
112
+ width: 100%;
113
+ }
114
+
115
+ .TooltipDiagramTitle {
116
+ color: var(--neutral-alpha-9, rgba(223, 235, 253, 0.43));
117
+ font-weight: 400;
118
+ font-size: 14px;
119
+ line-height: 20px;
120
+ white-space: nowrap;
121
+ }
122
+
123
+ .TooltipDiagramActions {
124
+ display: inline-flex;
125
+ align-items: center;
126
+ }
127
+
128
+ .TooltipDiagramBody {
129
+ display: flex;
130
+ flex-direction: column;
131
+ align-items: center;
132
+ gap: var(--spacing-1, 4px);
133
+ width: 100%;
134
+ }
135
+
88
136
  .TooltipText {
89
137
  white-space: normal;
90
138
  overflow-wrap: anywhere;
@@ -13,6 +13,10 @@ export default {
13
13
  control: 'select',
14
14
  options: ['white', 'gray'],
15
15
  },
16
+ variant: {
17
+ control: 'select',
18
+ options: ['default', 'diagram'],
19
+ },
16
20
  },
17
21
  }
18
22
 
@@ -58,4 +62,42 @@ export const WithShortcutWhite = {
58
62
  color: 'white',
59
63
  children: <Button>Hover me</Button>,
60
64
  },
65
+ }
66
+
67
+ export const Diagram = {
68
+ args: {
69
+ variant: 'diagram',
70
+ title: 'Diagram',
71
+ side: 'top',
72
+ open: true,
73
+ headerActions: (
74
+ <button
75
+ type="button"
76
+ aria-label="More"
77
+ style={{
78
+ width: 12,
79
+ height: 24,
80
+ padding: 0,
81
+ border: 'none',
82
+ background: 'transparent',
83
+ color: 'rgba(223, 235, 253, 0.43)',
84
+ cursor: 'pointer',
85
+ lineHeight: 0,
86
+ }}
87
+ >
88
+
89
+ </button>
90
+ ),
91
+ content: (
92
+ <div
93
+ style={{
94
+ width: 100,
95
+ height: 155,
96
+ borderRadius: 8,
97
+ background: '#edeef0',
98
+ }}
99
+ />
100
+ ),
101
+ children: <Button>Hover me</Button>,
102
+ },
61
103
  }
@@ -2,14 +2,18 @@ import { useState } from 'react'
2
2
  import { TrackControlsToggle } from './TrackControlsToggle'
3
3
 
4
4
  export default {
5
- title: 'Components/TrackControlsToggle',
5
+ title: 'Deprecated/TrackControlsToggle',
6
6
  component: TrackControlsToggle,
7
7
  parameters: {
8
8
  layout: 'centered',
9
9
  docs: {
10
10
  description: {
11
- component:
12
- 'Toggle button for track controls (Record, Mute, Auto Mute, and Solo). For `type="autoMute"`, o Figma define um único visual (amarelo em fundo alpha-2); `selected` só afeta `aria-pressed`, não as cores.',
11
+ component: `
12
+ > **Deprecated:** Use [\`TrackControlButton\`](/docs/components-trackcontrolbutton--docs) with \`variant={type}\` and \`isActive={selected}\` instead.
13
+ > \`TrackControlsToggle\` will be removed in a future release.
14
+
15
+ Toggle button for track controls (Record, Mute, Auto Mute, and Solo). For \`type="autoMute"\`, o Figma define um único visual (amarelo em fundo alpha-2); \`selected\` só afeta \`aria-pressed\`, não as cores.
16
+ `,
13
17
  },
14
18
  },
15
19
  },
@@ -0,0 +1,13 @@
1
+ export const DynamicMicrophone2Icon = ({ width = 16, height = 16, className, ...props }) => (
2
+ <svg xmlns="http://www.w3.org/2000/svg" width={width} height={height} viewBox="0 0 16 16" fill="none" className={className} {...props}>
3
+ <path
4
+ d="M10.5846 8.14349L3.4361 14.6667L1.33331 12.5639L7.8565 5.41543M7.30522 8.69477L6.37888 9.62111M13.6616 7.19124C12.3215 8.53131 10.1488 8.53131 8.80876 7.19124C7.46868 5.85116 7.46868 3.67847 8.80876 2.3384C10.1488 0.998325 12.3215 0.998325 13.6616 2.3384C15.0017 3.67847 15.0017 5.85116 13.6616 7.19124Z"
5
+ stroke="currentColor"
6
+ strokeWidth="0.666667"
7
+ strokeLinecap="round"
8
+ strokeLinejoin="round"
9
+ />
10
+ </svg>
11
+ )
12
+
13
+ DynamicMicrophone2Icon.displayName = 'DynamicMicrophone2Icon'
package/src/icons.jsx CHANGED
@@ -437,3 +437,4 @@ export { RewindBarFillIcon } from './icons/RewindBarFillIcon'
437
437
  export { ForwardBarFillIcon } from './icons/ForwardBarFillIcon'
438
438
  export { ChordGrid3Icon } from './icons/ChordGrid3Icon'
439
439
  export { ChordDiagramGridIcon } from './icons/ChordDiagramGridIcon'
440
+ export { DynamicMicrophone2Icon } from './icons/DynamicMicrophone2Icon'
package/src/index.jsx CHANGED
@@ -51,6 +51,7 @@ export { CigarBar } from './components/CigarBar/CigarBar'
51
51
  export { ContextMenu } from './components/ContextMenu/ContextMenu'
52
52
  export { Countdown } from './components/Countdown/Countdown'
53
53
  export { DataTable } from './components/DataTable/DataTable'
54
+ /** @deprecated Use `ToolsDropdown` instead. */
54
55
  export { DropdownButton } from './components/DropdownButton/DropdownButton'
55
56
  export { DropdownMenu } from './components/DropdownMenu/DropdownMenu'
56
57
  export { ToolsDropdown } from './components/ToolsDropdown/ToolsDropdown'
@@ -75,6 +76,7 @@ export { InstrumentSelectCard } from './components/InstrumentSelect/InstrumentSe
75
76
  export { InstrumentSelector } from './components/InstrumentSelector/InstrumentSelector'
76
77
  export { Knob } from './components/Knob/Knob'
77
78
  export { ListCards } from './components/ListCards/ListCards'
79
+ /** @deprecated Use `Callout` instead. */
78
80
  export { MessageWithAction } from './components/MessageWithAction/MessageWithAction'
79
81
  export { MetronomeForm } from './components/MetronomeForm/MetronomeForm'
80
82
  export { MoreButton } from './components/MoreButton/MoreButton'
@@ -82,8 +84,6 @@ export { MultiSelect } from './components/MultiSelect/MultiSelect'
82
84
  export { MultiSelectCards } from './components/MultiSelectCards/MultiSelectCards'
83
85
  export { PanControl } from './components/PanControl/PanControl'
84
86
  export { PeakLevel } from './components/PeakLevel/PeakLevel'
85
- export { PlayerBar } from './components/PlayerBar/PlayerBar'
86
- export { PlayerSlider } from './components/PlayerSlider/PlayerSlider'
87
87
  export { PreviewCard } from './components/PreviewCard/PreviewCard'
88
88
  export { ProductsBrandPattern } from './components/ProductsBrandPattern/ProductsBrandPattern'
89
89
  export { ProductsList } from './components/ProductsList/ProductsList'
@@ -80,9 +80,7 @@ export const createRenderItem = (MenuPrimitives) => {
80
80
  </div>
81
81
  </MenuPrimitives.SubTrigger>
82
82
 
83
- <MenuPrimitives.SubContent
84
- className={classNames(styles.menuSubContent, opt.subContentClassName)}
85
- >
83
+ <MenuPrimitives.SubContent className={styles.menuSubContent}>
86
84
  {opt?.children?.map((child) =>
87
85
  renderItem(
88
86
  child,
@@ -1,250 +0,0 @@
1
- import classNames from 'classnames'
2
- import {
3
- MusicNoteIcon,
4
- PlayIcon,
5
- More2Icon,
6
- Volume2Icon,
7
- RewindBarFillIcon,
8
- ForwardBarFillIcon,
9
- PauseFilledIcon,
10
- PlayOnRepeatIcon,
11
- KaraokeMicIcon,
12
- ChordsDetectionIcon,
13
- MetronomeIcon,
14
- ChevronDownIcon,
15
- Share2Icon,
16
- Video2Icon,
17
- ChevronUpIcon,
18
- } from '../../icons'
19
- import { Text, Flex, IconButton, DropdownMenu, DropdownButton, Separator, Popover } from '../../index'
20
- import styles from './PlayerBar.module.css'
21
- import { PlayerSlider } from '../PlayerSlider/PlayerSlider'
22
-
23
- const formatTime = (time) => {
24
- const totalSeconds = Math.floor(time)
25
- const minutes = Math.floor(totalSeconds / 60)
26
- const seconds = totalSeconds % 60
27
- return `${minutes}:${seconds.toString().padStart(2, '0')}`
28
- }
29
-
30
- export const PlayerBar = ({
31
- title = 'Untitled track',
32
- subtitle,
33
- cover,
34
- menuOptions,
35
- showSlider = true,
36
- color = 'gray', // can be 'gray' or 'dark'
37
- className,
38
- // playback time
39
- currentTime = 0,
40
- duration = 0,
41
- // transport
42
- onSeekBackward,
43
- onSeekForward,
44
- onPlayPause,
45
- isPlaying = false,
46
- // timeline
47
- audio,
48
- onSeek,
49
- // version dropdown
50
- versionTrigger,
51
- versionContent,
52
- // tempo and pitch dropdown
53
- tempoPitchContent,
54
- tempo,
55
- pitch,
56
- // metronome dropdown
57
- metronomeContent,
58
- metronomeEnabled,
59
- onMetronomeToggle,
60
- // volume popover
61
- volumeContent,
62
- onVolumeClick,
63
- // lyrics
64
- lyricsEnabled,
65
- onLyricsToggle,
66
- // chords detection
67
- chordsEnabled = false,
68
- onChordsToggle,
69
- // loop
70
- loopEnabled,
71
- onLoopToggle,
72
- // video and share
73
- onVideoClick,
74
- onShareClick,
75
- // expand
76
- expanded,
77
- onExpandToggle,
78
- }) => {
79
- return (
80
- <section
81
- aria-label="Player controls"
82
- className={classNames(styles.playerBarContainer, className)}
83
- >
84
- {showSlider && (
85
- <PlayerSlider
86
- currentTime={currentTime}
87
- duration={duration}
88
- audio={audio}
89
- onSeek={onSeek}
90
- />
91
- )}
92
- <Flex
93
- gap="6"
94
- className={classNames(styles.playerBar, {
95
- [styles.gray]: color === 'gray',
96
- [styles.dark]: color === 'dark',
97
- })}
98
- align="start"
99
- >
100
- <Flex align="center" gap="3" className={styles.flex2}>
101
- <Flex align="center" gap="4">
102
- {cover ? (
103
- <img src={cover} alt="Cover" className={styles.cover} />
104
- ) : (
105
- <div className={styles.cover}>
106
- <MusicNoteIcon width={16} height={16} />
107
- </div>
108
- )}
109
- </Flex>
110
- <Flex gap="3" pt="5px" align="start">
111
- <Flex direction="column" gap="0" className={styles.trackMeta}>
112
- <Text size="2" weight="medium" className={classNames(styles.trackLabel, styles.neutral12)}>
113
- {title}
114
- </Text>
115
- {subtitle ? (
116
- <Text size="1" weight="regular" className={classNames(styles.trackLabel, styles.neutralAlpha10)}>
117
- {subtitle}
118
- </Text>
119
- ) : null}
120
- </Flex>
121
- <Flex align="center" gap="2">{menuOptions && (
122
- <DropdownMenu
123
- trigger={
124
- <IconButton variant="ghost" size="2" className={styles.menuOptionsTrigger}>
125
- <More2Icon width={16} height={16} />
126
- </IconButton>}
127
- options={menuOptions}
128
- />
129
- )}
130
- {versionContent && versionTrigger && (
131
- <DropdownButton trigger={versionTrigger} showSeparator={false} className={styles.customDropdownButton}>
132
- {versionContent}
133
- </DropdownButton>
134
- )}
135
- </Flex>
136
- </Flex>
137
-
138
- </Flex>
139
-
140
- <Flex className={styles.flex1} direction="column" gap="0" align="center">
141
- <Flex align="center" gap="3">
142
- {volumeContent && (
143
- <Popover.Root>
144
- <Popover.Trigger>
145
- <IconButton variant="ghost" size="2" onClick={onVolumeClick}>
146
- <Volume2Icon width={16} height={16} />
147
- </IconButton>
148
- </Popover.Trigger>
149
- <Popover.Content>
150
- {volumeContent}
151
- </Popover.Content>
152
- </Popover.Root>
153
- )}
154
- <Flex gap='0' >
155
- <IconButton variant="ghost" size="4" onClick={onSeekBackward} className={styles.controlsIconButton}>
156
- <RewindBarFillIcon width={30} height={30} />
157
- </IconButton>
158
- <IconButton variant="ghost" size="4" onClick={onPlayPause} className={styles.controlsIconButton}>
159
- {isPlaying ? <PauseFilledIcon width={30} height={30} /> : <PlayIcon width={30} height={30} />}
160
- </IconButton>
161
- <IconButton variant="ghost" size="4" onClick={onSeekForward} className={styles.controlsIconButton}>
162
- <ForwardBarFillIcon width={30} height={30} />
163
- </IconButton>
164
- </Flex>
165
- <IconButton variant="ghost" size="2" onClick={onLoopToggle}>
166
- <PlayOnRepeatIcon width={16} height={16}
167
- className={classNames({
168
- [styles.actionIconActive]: !loopEnabled,
169
- [styles.actionIconDefault]: loopEnabled
170
- })}
171
- />
172
- </IconButton>
173
- </Flex>
174
- <Text size="1" weight="regular" className={styles.neutralAlpha10}>
175
- {formatTime(currentTime)} / {formatTime(duration)}
176
- </Text>
177
- </Flex>
178
-
179
- <Flex align="center" gap="3" className={classNames(styles.flex2, styles.actionsContainer)}>
180
- {tempoPitchContent && (
181
- <DropdownButton trigger={
182
- <Text className={styles.neutralAlpha11}>
183
- {tempo} bpm
184
- <Text className={styles.neutralAlpha6}> / </Text>
185
- {pitch}
186
- </Text>
187
- } showSeparator={false} className={styles.customDropdownButton}>
188
- {tempoPitchContent}
189
- </DropdownButton>
190
- )}
191
- {metronomeContent && (
192
- <DropdownButton
193
- trigger={
194
- <MetronomeIcon width={16} height={16}
195
- className={classNames({
196
- [styles.actionIconActive]: !metronomeEnabled,
197
- [styles.actionIconDefault]: metronomeEnabled
198
- })}
199
- />
200
- }
201
- onTriggerClick={onMetronomeToggle}
202
- >
203
- {metronomeContent}
204
- </DropdownButton>
205
- )}
206
- {onLyricsToggle && (
207
- <IconButton variant="ghost" size="2" onClick={onLyricsToggle}>
208
- <KaraokeMicIcon width={16} height={16}
209
- className={classNames({
210
- [styles.actionIconActive]: !lyricsEnabled,
211
- [styles.actionIconDefault]: lyricsEnabled
212
- })}
213
- />
214
- </IconButton>
215
- )}
216
- {onChordsToggle && (
217
- <IconButton variant="ghost" size="2" onClick={onChordsToggle}>
218
- <ChordsDetectionIcon width={16} height={16}
219
- className={classNames({
220
- [styles.actionIconActive]: !chordsEnabled,
221
- [styles.actionIconDefault]: chordsEnabled
222
- })} />
223
- </IconButton>
224
- )}
225
- {onVideoClick && (
226
- <IconButton variant="ghost" size="2" onClick={onVideoClick}>
227
- <Video2Icon width={16} height={16} />
228
- </IconButton>
229
- )}
230
-
231
- <Separator orientation="vertical" />
232
-
233
- {onShareClick && (
234
- <IconButton variant="ghost" size="2" onClick={onShareClick}>
235
- <Share2Icon width={16} height={16} />
236
- </IconButton>
237
- )}
238
-
239
- {onExpandToggle && (
240
- <IconButton variant="soft" color={expanded ? 'accent' : 'neutral'} size="2" onClick={onExpandToggle}>
241
- {expanded ? <ChevronDownIcon width={16} height={16} /> : <ChevronUpIcon width={16} height={16} />}
242
- </IconButton>
243
- )}
244
- </Flex>
245
- </Flex>
246
- </section >
247
- )
248
- }
249
-
250
- PlayerBar.displayName = 'PlayerBar'