@moises.ai/design-system 3.11.1 → 3.11.2
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/package.json
CHANGED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Flex, Text } from '@radix-ui/themes'
|
|
2
|
+
import { Popover } from 'radix-ui'
|
|
3
|
+
import { useCallback, useState } from 'react'
|
|
4
|
+
import { Select } from '../Select/Select'
|
|
5
|
+
import { Slider } from '../Slider/Slider'
|
|
6
|
+
import styles from './RecordSettingsPopover.module.css'
|
|
7
|
+
|
|
8
|
+
export function RecordSettingsPopover({
|
|
9
|
+
isRecord,
|
|
10
|
+
device,
|
|
11
|
+
deviceOptions,
|
|
12
|
+
onDeviceChange,
|
|
13
|
+
channel,
|
|
14
|
+
channelOptions,
|
|
15
|
+
onChannelChange,
|
|
16
|
+
inputLevel,
|
|
17
|
+
children,
|
|
18
|
+
}) {
|
|
19
|
+
const [opened, setOpened] = useState(false)
|
|
20
|
+
|
|
21
|
+
const handleOpenChange = useCallback((open) => {
|
|
22
|
+
if (!open || !isRecord) {
|
|
23
|
+
setOpened(open)
|
|
24
|
+
}
|
|
25
|
+
}, [])
|
|
26
|
+
|
|
27
|
+
const handleContextMenu = useCallback(() => {
|
|
28
|
+
e.preventDefault()
|
|
29
|
+
setOpened(true)
|
|
30
|
+
}, [])
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
<Popover.Root open={opened} onOpenChange={handleOpenChange}>
|
|
34
|
+
<Popover.Trigger asChild onContextMenu={handleContextMenu}>
|
|
35
|
+
{children}
|
|
36
|
+
</Popover.Trigger>
|
|
37
|
+
|
|
38
|
+
<Popover.Content width="360px">
|
|
39
|
+
<Flex className={styles.root} direction="column" gap="4">
|
|
40
|
+
<Flex direction="column" gap="1">
|
|
41
|
+
<Text size="1" weight="medium">
|
|
42
|
+
Source
|
|
43
|
+
</Text>
|
|
44
|
+
|
|
45
|
+
{deviceOptions?.length ? (
|
|
46
|
+
<Select
|
|
47
|
+
items={deviceOptions}
|
|
48
|
+
defaultValue={device}
|
|
49
|
+
onChange={onDeviceChange}
|
|
50
|
+
size="1"
|
|
51
|
+
/>
|
|
52
|
+
) : (
|
|
53
|
+
<Text size="1">No device options.</Text>
|
|
54
|
+
)}
|
|
55
|
+
|
|
56
|
+
{channelOptions?.length && (
|
|
57
|
+
<Select
|
|
58
|
+
items={channelOptions}
|
|
59
|
+
defaultValue={channel}
|
|
60
|
+
onChange={onChannelChange}
|
|
61
|
+
size="1"
|
|
62
|
+
/>
|
|
63
|
+
)}
|
|
64
|
+
</Flex>
|
|
65
|
+
|
|
66
|
+
<Flex direction="column" gap="1">
|
|
67
|
+
<Text size="1" weight="medium">
|
|
68
|
+
Input Level
|
|
69
|
+
</Text>
|
|
70
|
+
|
|
71
|
+
{opened && (
|
|
72
|
+
<Slider
|
|
73
|
+
value={inputLevel}
|
|
74
|
+
max={30}
|
|
75
|
+
style={{ paddingTop: '8px', paddingBottom: '8px' }}
|
|
76
|
+
/>
|
|
77
|
+
)}
|
|
78
|
+
</Flex>
|
|
79
|
+
</Flex>
|
|
80
|
+
</Popover.Content>
|
|
81
|
+
</Popover.Root>
|
|
82
|
+
)
|
|
83
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
.root {
|
|
2
|
+
width: 200px;
|
|
3
|
+
padding: var(--space-3);
|
|
4
|
+
border-radius: var(--radius-4, 8px);
|
|
5
|
+
border: 1px solid
|
|
6
|
+
var(--colors-neutral-neutral-alpha-3, rgba(221, 234, 248, 0.08));
|
|
7
|
+
background: var(--panel-solid, #18191b);
|
|
8
|
+
|
|
9
|
+
/* Shadows/shadow-5 */
|
|
10
|
+
box-shadow:
|
|
11
|
+
0 12px 32px -16px var(--overlays-black-alpha-5, rgba(0, 0, 0, 0.3)),
|
|
12
|
+
0 12px 60px 0 var(--overlays-black-alpha-3, rgba(0, 0, 0, 0.15));
|
|
13
|
+
}
|
|
@@ -16,22 +16,30 @@ import {
|
|
|
16
16
|
Tooltip,
|
|
17
17
|
TrackControlsToggle,
|
|
18
18
|
} from '../../index'
|
|
19
|
+
import { RecordSettingsPopover } from './RecordSettingsPopover'
|
|
19
20
|
import styles from './TrackHeader.module.css'
|
|
20
21
|
|
|
22
|
+
const DND_PROTECTION = {
|
|
23
|
+
onPointerDown: (e) => e.stopPropagation(),
|
|
24
|
+
onMouseDown: (e) => e.stopPropagation(),
|
|
25
|
+
onTouchStart: (e) => e.stopPropagation(),
|
|
26
|
+
}
|
|
27
|
+
|
|
21
28
|
export const TrackHeader = memo(
|
|
22
29
|
({
|
|
23
30
|
// Config
|
|
24
31
|
title,
|
|
25
32
|
menuOptions,
|
|
26
|
-
instrumentOptions,
|
|
27
|
-
onInstrumentChange,
|
|
28
|
-
instrumentSelected,
|
|
29
33
|
showPan = true,
|
|
30
34
|
showVolumeControls = true,
|
|
31
35
|
isGrouped = false,
|
|
32
36
|
height = 81,
|
|
33
37
|
compact = false,
|
|
34
38
|
isActive = false,
|
|
39
|
+
instrumentOptions,
|
|
40
|
+
deviceOptions,
|
|
41
|
+
channelOptions,
|
|
42
|
+
inputLevel,
|
|
35
43
|
|
|
36
44
|
// State
|
|
37
45
|
volume,
|
|
@@ -41,6 +49,9 @@ export const TrackHeader = memo(
|
|
|
41
49
|
isAutoMuted,
|
|
42
50
|
isSolo,
|
|
43
51
|
isOpen,
|
|
52
|
+
instrumentSelected,
|
|
53
|
+
device,
|
|
54
|
+
channel,
|
|
44
55
|
|
|
45
56
|
// State change listeners
|
|
46
57
|
onVolumeChange,
|
|
@@ -49,6 +60,9 @@ export const TrackHeader = memo(
|
|
|
49
60
|
onRecordChange,
|
|
50
61
|
onSoloChange,
|
|
51
62
|
onOpenChange,
|
|
63
|
+
onInstrumentChange,
|
|
64
|
+
onDeviceChange,
|
|
65
|
+
onChannelChange,
|
|
52
66
|
|
|
53
67
|
// Children (having content means group/takelanes)
|
|
54
68
|
children,
|
|
@@ -94,9 +108,7 @@ export const TrackHeader = memo(
|
|
|
94
108
|
style={{ minWidth: 0, overflow: 'hidden' }}
|
|
95
109
|
>
|
|
96
110
|
<IconButton
|
|
97
|
-
|
|
98
|
-
onMouseDown={(e) => e.stopPropagation()}
|
|
99
|
-
onTouchStart={(e) => e.stopPropagation()}
|
|
111
|
+
{...DND_PROTECTION}
|
|
100
112
|
variant="ghost"
|
|
101
113
|
size="1"
|
|
102
114
|
onClick={handleToggleOpen}
|
|
@@ -142,39 +154,41 @@ export const TrackHeader = memo(
|
|
|
142
154
|
</Flex>
|
|
143
155
|
|
|
144
156
|
<Flex
|
|
157
|
+
{...DND_PROTECTION}
|
|
145
158
|
direction="row"
|
|
146
|
-
gap="
|
|
159
|
+
gap="2px"
|
|
147
160
|
align="center"
|
|
148
|
-
onPointerDown={(e) => e.stopPropagation()}
|
|
149
|
-
onMouseDown={(e) => e.stopPropagation()}
|
|
150
|
-
onTouchStart={(e) => e.stopPropagation()}
|
|
151
161
|
>
|
|
152
|
-
<
|
|
162
|
+
<RecordSettingsPopover
|
|
163
|
+
isRecord={isRecord}
|
|
164
|
+
deviceOptions={deviceOptions}
|
|
165
|
+
device={device}
|
|
166
|
+
onDeviceChange={onDeviceChange}
|
|
167
|
+
channelOptions={channelOptions}
|
|
168
|
+
channel={channel}
|
|
169
|
+
onChannelChange={onChannelChange}
|
|
170
|
+
inputLevel={inputLevel}
|
|
171
|
+
>
|
|
153
172
|
<TrackControlsToggle
|
|
154
173
|
type="record"
|
|
155
174
|
selected={isRecord}
|
|
156
|
-
onClick={onRecordChange}
|
|
175
|
+
onClick={() => onRecordChange?.()}
|
|
157
176
|
/>
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
/>
|
|
170
|
-
</Flex>
|
|
177
|
+
</RecordSettingsPopover>
|
|
178
|
+
<TrackControlsToggle
|
|
179
|
+
type={isMuted ? 'mute' : isAutoMuted ? 'autoMute' : 'mute'}
|
|
180
|
+
selected={isMuted || (!isSolo && isAutoMuted)}
|
|
181
|
+
onClick={onMutedChange}
|
|
182
|
+
/>
|
|
183
|
+
<TrackControlsToggle
|
|
184
|
+
type="solo"
|
|
185
|
+
selected={isSolo}
|
|
186
|
+
onClick={onSoloChange}
|
|
187
|
+
/>
|
|
171
188
|
</Flex>
|
|
172
189
|
|
|
173
190
|
{menuOptions && (
|
|
174
|
-
<Box
|
|
175
|
-
onPointerDown={(e) => e.stopPropagation()}
|
|
176
|
-
onMouseDown={(e) => e.stopPropagation()}
|
|
177
|
-
onTouchStart={(e) => e.stopPropagation()}>
|
|
191
|
+
<Box {...DND_PROTECTION}>
|
|
178
192
|
<DropdownMenu
|
|
179
193
|
trigger={
|
|
180
194
|
<IconButton
|
|
@@ -193,16 +207,10 @@ export const TrackHeader = memo(
|
|
|
193
207
|
/>
|
|
194
208
|
</Box>
|
|
195
209
|
)}
|
|
196
|
-
|
|
197
210
|
</Flex>
|
|
198
211
|
</div>
|
|
199
212
|
|
|
200
|
-
<div
|
|
201
|
-
className={styles.trackControls}
|
|
202
|
-
onPointerDown={(e) => e.stopPropagation()}
|
|
203
|
-
onMouseDown={(e) => e.stopPropagation()}
|
|
204
|
-
onTouchStart={(e) => e.stopPropagation()}
|
|
205
|
-
>
|
|
213
|
+
<div {...DND_PROTECTION} className={styles.trackControls}>
|
|
206
214
|
{!compact && showVolumeControls && (
|
|
207
215
|
<>
|
|
208
216
|
<HorizontalVolume
|