@neo-ui-kit/react 0.0.0-stage → 1.0.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.
- package/LICENSE +21 -0
- package/README.md +203 -2
- package/dist/artwork/icons.json.d.ts +2 -0
- package/dist/artwork/illustrations.json.d.ts +2 -0
- package/dist/chunks/chunk-347P6ZE4.js +104 -0
- package/dist/chunks/chunk-BJSFN52W.js +417 -0
- package/dist/chunks/chunk-FCOU3ODR.js +63 -0
- package/dist/chunks/chunk-JZ4GDTH5.js +87 -0
- package/dist/chunks/chunk-UGDRXR7P.js +3362 -0
- package/dist/chunks/chunk-VK6GHRLV.js +335 -0
- package/dist/chunks/chunk-YKCUOZ7V.js +777 -0
- package/dist/components/artwork/DatabaseArt/DatabaseArt.d.ts +6 -0
- package/dist/components/artwork/DatabaseArt/styles.css +58 -0
- package/dist/components/artwork/Landscape/Landscape.d.ts +7 -0
- package/dist/components/artwork/Landscape/styles.css +79 -0
- package/dist/components/artwork/NeonWaves/NeonWaves.d.ts +15 -0
- package/dist/components/artwork/NeonWaves/styles.css +48 -0
- package/dist/components/artwork/Planet/Planet.d.ts +4 -0
- package/dist/components/artwork/Planet/styles.css +52 -0
- package/dist/components/artwork/QuantumField/QuantumField.d.ts +42 -0
- package/dist/components/artwork/QuantumField/QuantumFieldExperience.d.ts +22 -0
- package/dist/components/artwork/QuantumField/UPSTREAM-LICENSE.txt +21 -0
- package/dist/components/artwork/QuantumField/audio.d.ts +15 -0
- package/dist/components/artwork/QuantumField/renderer.d.ts +24 -0
- package/dist/components/artwork/QuantumField/styles.css +77 -0
- package/dist/components/artwork/ServerArt/ServerArt.d.ts +8 -0
- package/dist/components/artwork/ServerArt/styles.css +43 -0
- package/dist/components/artwork/Spectrum/Spectrum.d.ts +7 -0
- package/dist/components/artwork/Spectrum/styles.css +35 -0
- package/dist/components/artwork/layers.d.ts +15 -0
- package/dist/components/artwork/useArtwork.d.ts +8 -0
- package/dist/components/controls/Autocomplete/Autocomplete.d.ts +2 -0
- package/dist/components/controls/Autocomplete/styles.css +1 -0
- package/dist/components/controls/Button/Button.d.ts +2 -0
- package/dist/components/controls/Button/styles.css +1 -0
- package/dist/components/controls/Checkbox/Checkbox.d.ts +2 -0
- package/dist/components/controls/Checkbox/styles.css +70 -0
- package/dist/components/controls/Chip/Chip.d.ts +21 -0
- package/dist/components/controls/Chip/styles.css +74 -0
- package/dist/components/controls/ChipField.d.ts +25 -0
- package/dist/components/controls/ColorPicker/ColorPicker.d.ts +16 -0
- package/dist/components/controls/ColorPicker/color.d.ts +9 -0
- package/dist/components/controls/ColorPicker/styles.css +103 -0
- package/dist/components/controls/DatePicker/DatePicker.d.ts +19 -0
- package/dist/components/controls/DatePicker/styles.css +69 -0
- package/dist/components/controls/FilePicker/FilePicker.d.ts +2 -0
- package/dist/components/controls/FilePicker/styles.css +149 -0
- package/dist/components/controls/IconButton/IconButton.d.ts +2 -0
- package/dist/components/controls/IconButton/styles.css +4 -0
- package/dist/components/controls/InputBase/InputBase.d.ts +21 -0
- package/dist/components/controls/InputBase/styles.css +379 -0
- package/dist/components/controls/Link/Link.d.ts +11 -0
- package/dist/components/controls/Link/styles.css +50 -0
- package/dist/components/controls/NumberField/NumberField.d.ts +2 -0
- package/dist/components/controls/NumberField/styles.css +1 -0
- package/dist/components/controls/PeoplePicker/PeoplePicker.d.ts +37 -0
- package/dist/components/controls/PeoplePicker/styles.css +7 -0
- package/dist/components/controls/SegmentedControl/SegmentedControl.d.ts +2 -0
- package/dist/components/controls/SegmentedControl/styles.css +9 -0
- package/dist/components/controls/Select/Select.d.ts +8 -0
- package/dist/components/controls/Select/styles.css +142 -0
- package/dist/components/controls/Slider/Slider.d.ts +3 -0
- package/dist/components/controls/Slider/styles.css +138 -0
- package/dist/components/controls/SplitButton/SplitButton.d.ts +2 -0
- package/dist/components/controls/SplitButton/styles.css +169 -0
- package/dist/components/controls/Switch/Switch.d.ts +2 -0
- package/dist/components/controls/Switch/styles.css +54 -0
- package/dist/components/controls/Tab/Tab.d.ts +2 -0
- package/dist/components/controls/Tab/styles.css +111 -0
- package/dist/components/controls/Tabs/Tabs.d.ts +2 -0
- package/dist/components/controls/Tabs/styles.css +239 -0
- package/dist/components/controls/TagInput/TagInput.d.ts +24 -0
- package/dist/components/controls/TagInput/styles.css +24 -0
- package/dist/components/controls/TextArea/TextArea.d.ts +2 -0
- package/dist/components/controls/TextArea/styles.css +15 -0
- package/dist/components/controls/TextField/TextField.d.ts +2 -0
- package/dist/components/controls/ThemePicker/ThemePicker.d.ts +24 -0
- package/dist/components/controls/ThemePicker/styles.css +128 -0
- package/dist/components/controls/ToggleButton/ToggleButton.d.ts +2 -0
- package/dist/components/controls/ToggleButton/styles.css +49 -0
- package/dist/components/controls/internal.d.ts +62 -0
- package/dist/components/controls/shared.css +694 -0
- package/dist/components/controls/shared.d.ts +204 -0
- package/dist/components/editor/PianoRoll/PianoRoll.d.ts +65 -0
- package/dist/components/editor/PianoRoll/styles.css +186 -0
- package/dist/components/editor/shared.css +1 -0
- package/dist/components/effects/AnimatedBorder/AnimatedBorder.d.ts +9 -0
- package/dist/components/effects/AnimatedBorder/styles.css +7 -0
- package/dist/components/effects/Beacon/Beacon.d.ts +9 -0
- package/dist/components/effects/Beacon/styles.css +38 -0
- package/dist/components/effects/Equalizer/Equalizer.d.ts +14 -0
- package/dist/components/effects/Equalizer/styles.css +38 -0
- package/dist/components/effects/GlowText/GlowText.d.ts +9 -0
- package/dist/components/effects/GlowText/styles.css +56 -0
- package/dist/components/effects/ImageShine/ImageShine.d.ts +13 -0
- package/dist/components/effects/ImageShine/styles.css +66 -0
- package/dist/components/effects/Marquee/Marquee.d.ts +9 -0
- package/dist/components/effects/Marquee/styles.css +46 -0
- package/dist/components/effects/MelodixText/MelodixText.d.ts +15 -0
- package/dist/components/effects/MelodixText/styles.css +28 -0
- package/dist/components/effects/Reveal/Reveal.d.ts +13 -0
- package/dist/components/effects/Reveal/styles.css +25 -0
- package/dist/components/effects/Shimmer/Shimmer.d.ts +10 -0
- package/dist/components/effects/Shimmer/styles.css +48 -0
- package/dist/components/effects/Sparkles/Sparkles.d.ts +9 -0
- package/dist/components/effects/Sparkles/styles.css +28 -0
- package/dist/components/effects/Spotlight/Spotlight.d.ts +11 -0
- package/dist/components/effects/Spotlight/styles.css +45 -0
- package/dist/components/effects/Tilt/Tilt.d.ts +11 -0
- package/dist/components/effects/Tilt/styles.css +67 -0
- package/dist/components/feedback/Badge/Badge.d.ts +3 -0
- package/dist/components/feedback/Badge/styles.css +91 -0
- package/dist/components/feedback/CollapsibleSection/CollapsibleSection.d.ts +2 -0
- package/dist/components/feedback/CollapsibleSection/styles.css +76 -0
- package/dist/components/feedback/DataTable/DataTable.d.ts +16 -0
- package/dist/components/feedback/DataTable/styles.css +522 -0
- package/dist/components/feedback/Dialog/Dialog.d.ts +2 -0
- package/dist/components/feedback/Dialog/styles.css +82 -0
- package/dist/components/feedback/EmptyState/EmptyState.d.ts +2 -0
- package/dist/components/feedback/EmptyState/styles.css +80 -0
- package/dist/components/feedback/KeyValueList/KeyValueList.d.ts +2 -0
- package/dist/components/feedback/KeyValueList/styles.css +51 -0
- package/dist/components/feedback/Menu/Menu.d.ts +2 -0
- package/dist/components/feedback/Menu/styles.css +123 -0
- package/dist/components/feedback/MenuItem/MenuItem.d.ts +2 -0
- package/dist/components/feedback/MenuItem/styles.css +71 -0
- package/dist/components/feedback/MessageBar/MessageBar.d.ts +2 -0
- package/dist/components/feedback/MessageBar/styles.css +116 -0
- package/dist/components/feedback/Popover/Popover.d.ts +2 -0
- package/dist/components/feedback/Popover/styles.css +44 -0
- package/dist/components/feedback/ProgressBar/ProgressBar.d.ts +2 -0
- package/dist/components/feedback/ProgressBar/styles.css +76 -0
- package/dist/components/feedback/SignalBars/SignalBars.d.ts +11 -0
- package/dist/components/feedback/SignalBars/styles.css +31 -0
- package/dist/components/feedback/StatusIndicator/StatusIndicator.d.ts +2 -0
- package/dist/components/feedback/StatusIndicator/styles.css +88 -0
- package/dist/components/feedback/Steps/Steps.d.ts +2 -0
- package/dist/components/feedback/Steps/styles.css +152 -0
- package/dist/components/feedback/Toast/Toast.d.ts +2 -0
- package/dist/components/feedback/Toast/styles.css +89 -0
- package/dist/components/feedback/Tooltip/Tooltip.d.ts +15 -0
- package/dist/components/feedback/Tooltip/styles.css +38 -0
- package/dist/components/feedback/shared.css +22 -0
- package/dist/components/feedback/shared.d.ts +231 -0
- package/dist/components/forms/Form/Form.d.ts +35 -0
- package/dist/components/forms/Form/styles.css +1 -0
- package/dist/components/forms/FormFields/FormFields.d.ts +20 -0
- package/dist/components/forms/FormFields/styles.css +72 -0
- package/dist/components/foundation/Loader/Loader.d.ts +30 -0
- package/dist/components/foundation/LoaderGenerator/LoaderGenerator.d.ts +38 -0
- package/dist/components/foundation/LoaderGenerator/styles.css +104 -0
- package/dist/components/foundation/ThemeEditor/ThemeEditor.d.ts +15 -0
- package/dist/components/foundation/ThemeEditor/styles.css +97 -0
- package/dist/components/foundation/ThemeEditor/themeConfig.d.ts +47 -0
- package/dist/components/foundation/ThemeProvider/ThemeProvider.d.ts +32 -0
- package/dist/components/foundation/ThemeProvider/styles.css +59 -0
- package/dist/components/foundation/Typography/Typography.d.ts +17 -0
- package/dist/components/foundation/Typography/styles.css +115 -0
- package/dist/components/layout/Avatar/Avatar.d.ts +2 -0
- package/dist/components/layout/Avatar/HostSeal.d.ts +5 -0
- package/dist/components/layout/Avatar/styles.css +166 -0
- package/dist/components/layout/BrandMark/BrandMark.d.ts +2 -0
- package/dist/components/layout/BrandMark/styles.css +39 -0
- package/dist/components/layout/ButtonGroup/ButtonGroup.d.ts +12 -0
- package/dist/components/layout/ButtonGroup/styles.css +36 -0
- package/dist/components/layout/Card/Card.d.ts +14 -0
- package/dist/components/layout/Card/styles.css +37 -0
- package/dist/components/layout/DialogActions/DialogActions.d.ts +12 -0
- package/dist/components/layout/DialogActions/styles.css +31 -0
- package/dist/components/layout/DialogBody/DialogBody.d.ts +12 -0
- package/dist/components/layout/DialogBody/styles.css +28 -0
- package/dist/components/layout/Divider/Divider.d.ts +2 -0
- package/dist/components/layout/Divider/styles.css +58 -0
- package/dist/components/layout/FloatingPanel/FloatingPanel.d.ts +15 -0
- package/dist/components/layout/FloatingPanel/styles.css +47 -0
- package/dist/components/layout/FloatingPanel/useFloatingPanel.d.ts +54 -0
- package/dist/components/layout/Grid/Grid.d.ts +24 -0
- package/dist/components/layout/Grid/styles.css +90 -0
- package/dist/components/layout/Header/Header.d.ts +2 -0
- package/dist/components/layout/Header/styles.css +42 -0
- package/dist/components/layout/Icon/Icon.d.ts +4 -0
- package/dist/components/layout/Icon/styles.css +62 -0
- package/dist/components/layout/Illustration/Illustration.d.ts +2 -0
- package/dist/components/layout/Illustration/styles.css +104 -0
- package/dist/components/layout/ScrollArea/ScrollArea.d.ts +2 -0
- package/dist/components/layout/ScrollArea/styles.css +61 -0
- package/dist/components/layout/Stack/Stack.d.ts +21 -0
- package/dist/components/layout/Stack/styles.css +53 -0
- package/dist/components/layout/StatTile/StatTile.d.ts +20 -0
- package/dist/components/layout/StatTile/styles.css +90 -0
- package/dist/components/layout/TabPanel/TabPanel.d.ts +2 -0
- package/dist/components/layout/TabPanel/styles.css +16 -0
- package/dist/components/layout/Text/Text.d.ts +2 -0
- package/dist/components/layout/Text/styles.css +29 -0
- package/dist/components/layout/Toolbar/Toolbar.d.ts +12 -0
- package/dist/components/layout/Toolbar/styles.css +7 -0
- package/dist/components/layout/shared.css +79 -0
- package/dist/components/layout/shared.d.ts +64 -0
- package/dist/components/media/AudioPlayer/AudioPlayer.d.ts +2 -0
- package/dist/components/media/AudioPlayer/styles.css +86 -0
- package/dist/components/media/KaraokeLyrics/KaraokeLyrics.d.ts +25 -0
- package/dist/components/media/KaraokeLyrics/styles.css +56 -0
- package/dist/components/media/LevelMeter/LevelMeter.d.ts +7 -0
- package/dist/components/media/LevelMeter/styles.css +30 -0
- package/dist/components/media/MediaCard/MediaCard.d.ts +24 -0
- package/dist/components/media/MediaCard/styles.css +108 -0
- package/dist/components/media/MelodyRoll/MelodyRoll.d.ts +48 -0
- package/dist/components/media/MelodyRoll/styles.css +196 -0
- package/dist/components/media/PianoKeyboard/PianoKeyboard.d.ts +24 -0
- package/dist/components/media/PianoKeyboard/styles.css +83 -0
- package/dist/components/media/RotaryKnob/RotaryKnob.d.ts +3 -0
- package/dist/components/media/RotaryKnob/styles.css +319 -0
- package/dist/components/media/Sparkline/Sparkline.d.ts +2 -0
- package/dist/components/media/Sparkline/styles.css +70 -0
- package/dist/components/media/WaveDecoration/WaveDecoration.d.ts +2 -0
- package/dist/components/media/WaveDecoration/styles.css +2 -0
- package/dist/components/media/Waveform/Waveform.d.ts +9 -0
- package/dist/components/media/Waveform/styles.css +375 -0
- package/dist/components/media/Waveform/useWaveformPeaks.d.ts +11 -0
- package/dist/components/media/shared.css +7 -0
- package/dist/components/media/shared.d.ts +80 -0
- package/dist/components/navigation/Router/Router.d.ts +32 -0
- package/dist/components/navigation/Router/styles.css +1 -0
- package/dist/components.css +102 -0
- package/dist/core/artwork.d.ts +17 -0
- package/dist/core/base.d.ts +65 -0
- package/dist/core/environment.d.ts +5 -0
- package/dist/core/i18n.d.ts +34 -0
- package/dist/core/messages.d.ts +1 -0
- package/dist/core/motion/hooks.d.ts +17 -0
- package/dist/core/motion-engine.d.ts +13 -0
- package/dist/core/noise.d.ts +20 -0
- package/dist/core/providers/context.d.ts +4 -0
- package/dist/core/responsive.d.ts +13 -0
- package/dist/core.d.ts +8 -0
- package/dist/core.js +56 -0
- package/dist/editor.d.ts +2 -0
- package/dist/editor.js +8 -0
- package/dist/fonts/melodix/Melodix-100.woff2 +0 -0
- package/dist/fonts/melodix/Melodix-200.woff2 +0 -0
- package/dist/fonts/melodix/Melodix-300.woff2 +0 -0
- package/dist/fonts/melodix/Melodix-400.woff2 +0 -0
- package/dist/fonts/melodix/Melodix-500.woff2 +0 -0
- package/dist/fonts/melodix/Melodix-600.woff2 +0 -0
- package/dist/fonts/melodix/Melodix-700.woff2 +0 -0
- package/dist/fonts/melodix/Melodix-800.woff2 +0 -0
- package/dist/fonts/melodix/Melodix-900.woff2 +0 -0
- package/dist/fonts/melodix/MelodixText-100.woff2 +0 -0
- package/dist/fonts/melodix/MelodixText-200.woff2 +0 -0
- package/dist/fonts/melodix/MelodixText-300.woff2 +0 -0
- package/dist/fonts/melodix/MelodixText-400.woff2 +0 -0
- package/dist/fonts/melodix/MelodixText-500.woff2 +0 -0
- package/dist/fonts/melodix/MelodixText-600.woff2 +0 -0
- package/dist/fonts/melodix/MelodixText-700.woff2 +0 -0
- package/dist/fonts/melodix/MelodixText-800.woff2 +0 -0
- package/dist/fonts/melodix/MelodixText-900.woff2 +0 -0
- package/dist/fonts/melodix/OFL-PlayfairDisplay.txt +93 -0
- package/dist/fonts/melodix.css +123 -0
- package/dist/forms.d.ts +4 -0
- package/dist/forms.js +17 -0
- package/dist/index.d.ts +163 -0
- package/dist/index.js +9683 -0
- package/dist/router.d.ts +2 -0
- package/dist/router.js +11 -0
- package/dist/styles.css +2 -0
- package/dist/theme/base.css +221 -0
- package/dist/theme/tokens.css +196 -0
- package/dist/theme/typography.d.ts +24 -0
- package/dist/tokens.css +1 -0
- package/package.json +83 -4
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/* Shared only by sibling components. */
|
|
2
|
+
.ad {
|
|
3
|
+
font-family: inherit;
|
|
4
|
+
color: var(--ad-text);
|
|
5
|
+
}
|
|
6
|
+
/* Ruby and tile remain intentionally dark in a light theme, so their inherited copy stays light. */
|
|
7
|
+
:is([data-ad-material="ruby"], [data-ad-material="tile"]) {
|
|
8
|
+
--ad-text: var(--ad-on-accent);
|
|
9
|
+
--ad-muted: var(--ad-on-accent-muted);
|
|
10
|
+
}
|
|
11
|
+
[data-ad-material="shell"] {
|
|
12
|
+
--ad-material-bg: var(--ad-surface-shell);
|
|
13
|
+
--ad-material-shadow: var(--ad-shadow-shell);
|
|
14
|
+
}
|
|
15
|
+
[data-ad-material="card"] {
|
|
16
|
+
--ad-material-bg: var(--ad-surface-card);
|
|
17
|
+
--ad-material-shadow: var(--ad-shadow-card);
|
|
18
|
+
}
|
|
19
|
+
[data-ad-material="glass"] {
|
|
20
|
+
--ad-material-bg: var(--ad-surface-glass);
|
|
21
|
+
--ad-material-shadow: var(--ad-shadow-glass);
|
|
22
|
+
}
|
|
23
|
+
[data-ad-material="ruby"] {
|
|
24
|
+
--ad-material-bg: var(--ad-surface-ruby);
|
|
25
|
+
--ad-material-shadow: var(--ad-shadow-ruby);
|
|
26
|
+
}
|
|
27
|
+
[data-ad-material="tile"] {
|
|
28
|
+
--ad-material-bg: var(--ad-surface-tile);
|
|
29
|
+
--ad-material-shadow: var(--ad-shadow-tile);
|
|
30
|
+
}
|
|
31
|
+
[data-ad-material="input"] {
|
|
32
|
+
--ad-material-bg: var(--ad-surface-input);
|
|
33
|
+
--ad-material-shadow: var(--ad-shadow-input);
|
|
34
|
+
}
|
|
35
|
+
[data-ad-material="dialog"] {
|
|
36
|
+
--ad-material-bg: var(--ad-surface-dialog);
|
|
37
|
+
--ad-material-shadow: var(--ad-shadow-dialog);
|
|
38
|
+
}
|
|
39
|
+
.ad-surface,
|
|
40
|
+
.ad-card {
|
|
41
|
+
position: relative;
|
|
42
|
+
border-radius: 1.125rem;
|
|
43
|
+
isolation: isolate;
|
|
44
|
+
}
|
|
45
|
+
.ad-surface:not(.ad-card) {
|
|
46
|
+
padding: 1.25rem;
|
|
47
|
+
}
|
|
48
|
+
.ad-header-copy {
|
|
49
|
+
min-width: 0;
|
|
50
|
+
flex: 1;
|
|
51
|
+
}
|
|
52
|
+
.ad-header-copy p {
|
|
53
|
+
color: var(--ad-muted);
|
|
54
|
+
font-size: 0.8125rem;
|
|
55
|
+
line-height: 1.5;
|
|
56
|
+
margin: 0.3125rem 0 0;
|
|
57
|
+
}
|
|
58
|
+
.ad-header-actions {
|
|
59
|
+
margin-left: auto;
|
|
60
|
+
}
|
|
61
|
+
.ad-toolbar,
|
|
62
|
+
.ad-button-group {
|
|
63
|
+
display: flex;
|
|
64
|
+
align-items: center;
|
|
65
|
+
gap: 0.625rem;
|
|
66
|
+
flex-wrap: wrap;
|
|
67
|
+
}
|
|
68
|
+
.ad-collapsible-section summary > .ad-icon:last-child {
|
|
69
|
+
margin-left: auto;
|
|
70
|
+
transition: transform 0.2s;
|
|
71
|
+
}
|
|
72
|
+
.ad-collapsible-section[open] summary > .ad-icon:last-child {
|
|
73
|
+
transform: rotate(180deg);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/* Vector artwork is drawn in ruby; it turns to the theme hue. */
|
|
77
|
+
:is(.ad-illustration, .ad-brand-mark, .ad-host-seal) svg {
|
|
78
|
+
filter: hue-rotate(var(--ad-hue-shift, 0deg));
|
|
79
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { ElementType, ReactNode } from "react";
|
|
2
|
+
import { type CommonProps, type Material, type VectorNode } from "../../core/base";
|
|
3
|
+
import iconData from "../../artwork/icons.json";
|
|
4
|
+
import artworkData from "../../artwork/illustrations.json";
|
|
5
|
+
export type IconName = keyof typeof iconData;
|
|
6
|
+
export declare const icons: Record<string, VectorNode>;
|
|
7
|
+
export declare const illustrations: Record<string, VectorNode>;
|
|
8
|
+
export interface IconProps extends Omit<CommonProps, "size"> {
|
|
9
|
+
name?: IconName | string;
|
|
10
|
+
/** xs/sm/md/lg, a CSS length, or pixels converted to rem at the 16px design baseline. */
|
|
11
|
+
size?: number | string;
|
|
12
|
+
label?: string;
|
|
13
|
+
surface?: "none" | "tile";
|
|
14
|
+
}
|
|
15
|
+
export interface TextProps extends CommonProps {
|
|
16
|
+
as?: ElementType;
|
|
17
|
+
variant?: "muted" | "eyebrow" | "body" | "title";
|
|
18
|
+
text?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface HeaderProps extends CommonProps {
|
|
21
|
+
as?: "header" | "div";
|
|
22
|
+
level?: 1 | 2 | 3 | 4;
|
|
23
|
+
title?: ReactNode;
|
|
24
|
+
description?: ReactNode;
|
|
25
|
+
eyebrow?: ReactNode;
|
|
26
|
+
icon?: IconName | string;
|
|
27
|
+
actions?: ReactNode;
|
|
28
|
+
compact?: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface CardProps extends CommonProps, Omit<HeaderProps, "as"> {
|
|
31
|
+
as?: "section" | "div" | "article";
|
|
32
|
+
border?: boolean;
|
|
33
|
+
shell?: boolean;
|
|
34
|
+
padding?: "none" | "sm" | "md" | "lg";
|
|
35
|
+
material?: Material;
|
|
36
|
+
}
|
|
37
|
+
export interface AvatarProps extends CommonProps {
|
|
38
|
+
name?: string;
|
|
39
|
+
/** Initials in a turning ring, or the animated host seal with a crown. */
|
|
40
|
+
variant?: "initials" | "host";
|
|
41
|
+
/** Photo shown in place of the initials, or inside the host seal instead of its crown. */
|
|
42
|
+
src?: string;
|
|
43
|
+
/** Short tag on the lower edge of the ring, e.g. "ГОСТЬ". */
|
|
44
|
+
badge?: string;
|
|
45
|
+
/** A dot on the ring: online, busy (e.g. singing in a room) or offline. */
|
|
46
|
+
presence?: "online" | "busy" | "offline";
|
|
47
|
+
}
|
|
48
|
+
export interface TabPanelProps extends CommonProps {
|
|
49
|
+
labelledBy?: string;
|
|
50
|
+
hidden?: boolean;
|
|
51
|
+
}
|
|
52
|
+
export interface ScrollAreaProps extends CommonProps {
|
|
53
|
+
height?: number | string;
|
|
54
|
+
label?: string;
|
|
55
|
+
}
|
|
56
|
+
export interface DividerProps extends CommonProps {
|
|
57
|
+
vertical?: boolean;
|
|
58
|
+
}
|
|
59
|
+
export interface IllustrationProps extends CommonProps {
|
|
60
|
+
variant?: keyof typeof artworkData;
|
|
61
|
+
label?: string;
|
|
62
|
+
framed?: boolean;
|
|
63
|
+
fit?: "contain" | "cover";
|
|
64
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/* Styles owned by AudioPlayer: while playing, rings of light pulse out of the play button. */
|
|
2
|
+
.ad-audio-player {
|
|
3
|
+
display: flex;
|
|
4
|
+
flex-wrap: wrap;
|
|
5
|
+
align-items: center;
|
|
6
|
+
gap: clamp(0.75rem, 2vw, 1.25rem);
|
|
7
|
+
min-width: 0;
|
|
8
|
+
padding: 0.75rem clamp(0.75rem, 2vw, 1.1rem);
|
|
9
|
+
border-radius: calc(var(--ad-radius) * 1.2);
|
|
10
|
+
border: 0.0625rem solid rgb(from var(--ad-secondary) r g b / 0.2);
|
|
11
|
+
background:
|
|
12
|
+
radial-gradient(40% 120% at 0 50%, rgb(from var(--ad-primary) r g b / 0.12), transparent 70%),
|
|
13
|
+
linear-gradient(180deg, var(--ad-neutral-850), var(--ad-neutral-900));
|
|
14
|
+
box-shadow: inset 0 0.0625rem 0 #ffffff0f;
|
|
15
|
+
}
|
|
16
|
+
.ad-player-play {
|
|
17
|
+
position: relative;
|
|
18
|
+
display: grid;
|
|
19
|
+
flex: none;
|
|
20
|
+
}
|
|
21
|
+
.ad-player-play > .ad-icon-button {
|
|
22
|
+
--ad-size-h: 3rem;
|
|
23
|
+
width: 3rem;
|
|
24
|
+
height: 3rem;
|
|
25
|
+
}
|
|
26
|
+
.ad-player-play::before,
|
|
27
|
+
.ad-player-play::after {
|
|
28
|
+
content: "";
|
|
29
|
+
position: absolute;
|
|
30
|
+
inset: 0;
|
|
31
|
+
border-radius: 50%;
|
|
32
|
+
border: 0.0625rem solid var(--ad-secondary);
|
|
33
|
+
opacity: 0;
|
|
34
|
+
pointer-events: none;
|
|
35
|
+
}
|
|
36
|
+
.ad-audio-player[data-playing] .ad-player-play::before,
|
|
37
|
+
.ad-audio-player[data-playing] .ad-player-play::after {
|
|
38
|
+
animation: ad-player-wave 1.8s ease-out infinite;
|
|
39
|
+
}
|
|
40
|
+
.ad-audio-player[data-playing] .ad-player-play::after {
|
|
41
|
+
animation-delay: 0.9s;
|
|
42
|
+
}
|
|
43
|
+
.ad-player-track {
|
|
44
|
+
flex: 1 1 4rem;
|
|
45
|
+
min-width: 0;
|
|
46
|
+
display: grid;
|
|
47
|
+
gap: 0.15rem;
|
|
48
|
+
}
|
|
49
|
+
.ad-player-times {
|
|
50
|
+
display: flex;
|
|
51
|
+
justify-content: space-between;
|
|
52
|
+
}
|
|
53
|
+
.ad-time {
|
|
54
|
+
white-space: nowrap;
|
|
55
|
+
font-size: 0.6875rem;
|
|
56
|
+
color: var(--ad-muted);
|
|
57
|
+
font-variant-numeric: tabular-nums;
|
|
58
|
+
}
|
|
59
|
+
.ad-player-volume {
|
|
60
|
+
display: flex;
|
|
61
|
+
align-items: center;
|
|
62
|
+
gap: 0.25rem;
|
|
63
|
+
flex: 0 1 9rem;
|
|
64
|
+
min-width: 0;
|
|
65
|
+
}
|
|
66
|
+
.ad-player-volume > .ad-slider-field {
|
|
67
|
+
flex: 1;
|
|
68
|
+
min-width: 0;
|
|
69
|
+
}
|
|
70
|
+
.ad-player-volume .ad-slider {
|
|
71
|
+
width: 100%;
|
|
72
|
+
}
|
|
73
|
+
.ad-player-volume > [data-muted] {
|
|
74
|
+
color: var(--ad-muted);
|
|
75
|
+
opacity: 0.6;
|
|
76
|
+
}
|
|
77
|
+
@keyframes ad-player-wave {
|
|
78
|
+
from {
|
|
79
|
+
opacity: 0.8;
|
|
80
|
+
scale: 1;
|
|
81
|
+
}
|
|
82
|
+
to {
|
|
83
|
+
opacity: 0;
|
|
84
|
+
scale: 1.7;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import { type CommonProps } from "../../../core/base";
|
|
3
|
+
export interface LyricWord {
|
|
4
|
+
id: string;
|
|
5
|
+
text: string;
|
|
6
|
+
/** How much of the word is sung, 0–1; it fills left to right. */
|
|
7
|
+
progress?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface KaraokeLyricsProps extends CommonProps {
|
|
10
|
+
/** The line being sung now. */
|
|
11
|
+
current?: readonly LyricWord[];
|
|
12
|
+
/** The line after it, dimmed below. */
|
|
13
|
+
next?: readonly LyricWord[];
|
|
14
|
+
/** Shown in place of the current line, e.g. a countdown before it. */
|
|
15
|
+
message?: ReactNode;
|
|
16
|
+
/** Keys of the lines: a new key fades the line in, the same key keeps it in place. */
|
|
17
|
+
currentKey?: string | number;
|
|
18
|
+
nextKey?: string | number;
|
|
19
|
+
/** The music's percussion, 0–1: the line swells and glows with the kick and flashes with the snare. */
|
|
20
|
+
kick?: number;
|
|
21
|
+
snare?: number;
|
|
22
|
+
pulse?: number;
|
|
23
|
+
}
|
|
24
|
+
/** Karaoke lyrics: the current line fills as it is sung and breathes with the drums; the next one waits below. */
|
|
25
|
+
export declare const KaraokeLyrics: ({ current, next, message, currentKey, nextKey, kick, snare, pulse, ...p }: KaraokeLyricsProps) => import("react").JSX.Element;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/* Styles owned by KaraokeLyrics: big filling words in the theme's colours, swelling with the drums. */
|
|
2
|
+
.ad-karaoke-lyrics {
|
|
3
|
+
--ad-lyric-kick: 0;
|
|
4
|
+
--ad-lyric-snare: 0;
|
|
5
|
+
--ad-lyric-pulse: 0;
|
|
6
|
+
display: grid;
|
|
7
|
+
justify-items: center;
|
|
8
|
+
gap: 0.4em;
|
|
9
|
+
padding-inline: 7%;
|
|
10
|
+
text-align: center;
|
|
11
|
+
text-shadow: 0 0.2rem 1rem #000;
|
|
12
|
+
pointer-events: none;
|
|
13
|
+
}
|
|
14
|
+
.ad-karaoke-lyrics > p {
|
|
15
|
+
margin: 0;
|
|
16
|
+
animation: ad-lyric-in 0.22s ease both;
|
|
17
|
+
}
|
|
18
|
+
.ad-lyrics-current {
|
|
19
|
+
font: 750 clamp(1.75rem, 1rem + 3.2vw, 3.25rem) / 1.15 var(--ad-font-family-heading);
|
|
20
|
+
letter-spacing: -0.02em;
|
|
21
|
+
min-block-size: 1.15em;
|
|
22
|
+
filter:
|
|
23
|
+
brightness(calc(1.08 + var(--ad-lyric-pulse) * 0.28))
|
|
24
|
+
saturate(calc(1.04 + var(--ad-lyric-kick) * 0.22))
|
|
25
|
+
drop-shadow(0 0 calc(0.15rem + var(--ad-lyric-snare) * 0.25rem) rgb(255 238 244 / calc(0.28 + var(--ad-lyric-snare) * 0.4)))
|
|
26
|
+
drop-shadow(0 0 calc(0.2rem + var(--ad-lyric-kick) * 0.4rem) rgb(from var(--ad-primary) r g b / calc(0.3 + var(--ad-lyric-kick) * 0.36)));
|
|
27
|
+
transition: filter 55ms cubic-bezier(0.16, 1, 0.3, 1);
|
|
28
|
+
}
|
|
29
|
+
.ad-lyrics-current[data-message] {
|
|
30
|
+
color: #fff;
|
|
31
|
+
}
|
|
32
|
+
.ad-lyrics-next {
|
|
33
|
+
min-block-size: 1.2em;
|
|
34
|
+
color: rgb(255 255 255 / 0.45);
|
|
35
|
+
font: 500 clamp(1rem, 0.7rem + 1.4vw, 1.6rem) / 1.2 var(--ad-font-family-heading);
|
|
36
|
+
}
|
|
37
|
+
/* A word fills with the theme's glowing gradient as it is sung; the rest stays white. */
|
|
38
|
+
.ad-lyrics-current .ad-lyric-word {
|
|
39
|
+
color: transparent;
|
|
40
|
+
background-image:
|
|
41
|
+
linear-gradient(180deg, #fff 0%, var(--ad-secondary-100) 18%, var(--ad-primary) 62%, var(--ad-secondary) 100%),
|
|
42
|
+
linear-gradient(#fff, #fff);
|
|
43
|
+
background-size: var(--ad-lyric-fill, 0%) 100%, 100% 100%;
|
|
44
|
+
background-position: left, left;
|
|
45
|
+
background-repeat: no-repeat;
|
|
46
|
+
-webkit-background-clip: text;
|
|
47
|
+
background-clip: text;
|
|
48
|
+
-webkit-text-fill-color: transparent;
|
|
49
|
+
text-shadow: none;
|
|
50
|
+
}
|
|
51
|
+
@keyframes ad-lyric-in {
|
|
52
|
+
from {
|
|
53
|
+
opacity: 0;
|
|
54
|
+
transform: translateY(0.3em);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type LevelMeterProps } from "../shared";
|
|
2
|
+
/**
|
|
3
|
+
* Live input level as a scrolling mirrored wave. Feed it a changing `value` (0–100) or hand
|
|
4
|
+
* it a `stream` (e.g. from getUserMedia) and it listens by itself. The wave is redrawn
|
|
5
|
+
* outside React on every display refresh, so it never re-renders at the animation rate.
|
|
6
|
+
*/
|
|
7
|
+
export declare function LevelMeter({ value, stream, active, compact, label, ...p }: LevelMeterProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/* Styles owned by LevelMeter: a glowing mirrored wave scrolls along a faint axis; muted, it dims. */
|
|
2
|
+
.ad-level-meter {
|
|
3
|
+
position: relative;
|
|
4
|
+
width: 100%;
|
|
5
|
+
height: clamp(2rem, 1.6rem + 1vw, 3rem);
|
|
6
|
+
overflow: hidden;
|
|
7
|
+
}
|
|
8
|
+
.ad-level-meter > svg {
|
|
9
|
+
display: block;
|
|
10
|
+
width: 100%;
|
|
11
|
+
height: 100%;
|
|
12
|
+
filter: drop-shadow(
|
|
13
|
+
0 0 0.22rem color-mix(in srgb, var(--ad-red) 78%, transparent)
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
.ad-level-meter-axis {
|
|
17
|
+
stroke: color-mix(in srgb, var(--ad-red) 24%, transparent);
|
|
18
|
+
stroke-width: 0.7;
|
|
19
|
+
}
|
|
20
|
+
.ad-level-meter-wave {
|
|
21
|
+
transition: opacity 0.18s ease;
|
|
22
|
+
}
|
|
23
|
+
.ad-level-meter[data-active="false"] .ad-level-meter-wave {
|
|
24
|
+
opacity: 0.28;
|
|
25
|
+
}
|
|
26
|
+
.ad-level-meter[data-compact] {
|
|
27
|
+
width: 4.6rem;
|
|
28
|
+
height: 1.45rem;
|
|
29
|
+
border-radius: 999rem;
|
|
30
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import { type CommonProps } from "../../../core/base";
|
|
3
|
+
export interface MediaCardProps extends CommonProps {
|
|
4
|
+
title: ReactNode;
|
|
5
|
+
subtitle?: ReactNode;
|
|
6
|
+
/** Cover picture; without it an equalizer dances behind the card. */
|
|
7
|
+
image?: string;
|
|
8
|
+
/** Bar heights 0–1 from a live spectrum for the equalizer cover; without them it bounces on its own. */
|
|
9
|
+
levels?: readonly number[];
|
|
10
|
+
/** Shifts the equalizer's bounce so neighbouring cards do not move in step. */
|
|
11
|
+
phase?: number;
|
|
12
|
+
/** A status mark in the top corner. */
|
|
13
|
+
badge?: ReactNode;
|
|
14
|
+
/** Round buttons in the glass pill at the bottom. */
|
|
15
|
+
actions?: ReactNode;
|
|
16
|
+
/** Lean toward the pointer with a glossy glare; a number sets the largest lean in degrees. */
|
|
17
|
+
tilt?: boolean | number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* A song, album or take as a card: its cover (or a dancing equalizer) fills the card, the title and
|
|
21
|
+
* a status sit on top, the actions ride in a glass pill at the bottom; children go into the pill
|
|
22
|
+
* before the actions (e.g. a progress read-out).
|
|
23
|
+
*/
|
|
24
|
+
export declare function MediaCard({ title, subtitle, image, levels, phase, badge, actions, tilt, children, ...p }: MediaCardProps): import("react").JSX.Element;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/* Styles owned by MediaCard: the cover fills the card under a dark gradient, the equalizer stands in
|
|
2
|
+
for a missing cover, the actions float in a glass pill. The card fills the height it is given. */
|
|
3
|
+
.ad-media-card,
|
|
4
|
+
.ad-media-card > .ad-tilt,
|
|
5
|
+
.ad-media-card-card.ad-card {
|
|
6
|
+
height: 100%;
|
|
7
|
+
min-width: 0;
|
|
8
|
+
}
|
|
9
|
+
.ad-media-card-card.ad-card {
|
|
10
|
+
position: relative;
|
|
11
|
+
isolation: isolate;
|
|
12
|
+
overflow: hidden;
|
|
13
|
+
transition: transform 0.18s var(--ad-ease-standard);
|
|
14
|
+
}
|
|
15
|
+
.ad-media-card-card.ad-card:hover {
|
|
16
|
+
transform: translateY(-0.2rem);
|
|
17
|
+
}
|
|
18
|
+
.ad-media-card-image {
|
|
19
|
+
position: absolute;
|
|
20
|
+
inset: 0;
|
|
21
|
+
z-index: -2;
|
|
22
|
+
inline-size: 100%;
|
|
23
|
+
block-size: 100%;
|
|
24
|
+
object-fit: cover;
|
|
25
|
+
object-position: center 28%;
|
|
26
|
+
transition: transform 0.42s var(--ad-ease-standard), filter 0.24s;
|
|
27
|
+
}
|
|
28
|
+
.ad-media-card-card:hover .ad-media-card-image {
|
|
29
|
+
filter: saturate(1.12) contrast(1.04);
|
|
30
|
+
transform: scale(1.045);
|
|
31
|
+
}
|
|
32
|
+
.ad-media-card-card[data-image]::before {
|
|
33
|
+
content: "";
|
|
34
|
+
position: absolute;
|
|
35
|
+
inset: 0;
|
|
36
|
+
z-index: -1;
|
|
37
|
+
background:
|
|
38
|
+
linear-gradient(180deg, rgb(from var(--ad-neutral-950) r g b / 0.68), transparent 42%),
|
|
39
|
+
linear-gradient(0deg, rgb(from var(--ad-neutral-950) r g b / 0.76), rgb(from var(--ad-neutral-950) r g b / 0.28) 48%, transparent 74%);
|
|
40
|
+
}
|
|
41
|
+
.ad-media-card-art {
|
|
42
|
+
position: absolute;
|
|
43
|
+
inset: 15% 0 0;
|
|
44
|
+
z-index: -1;
|
|
45
|
+
display: flex;
|
|
46
|
+
opacity: 0.25;
|
|
47
|
+
mask-image:
|
|
48
|
+
linear-gradient(90deg, transparent, #000 7%, #000 93%, transparent),
|
|
49
|
+
linear-gradient(180deg, transparent, #000 14%, #000 88%, transparent);
|
|
50
|
+
mask-composite: intersect;
|
|
51
|
+
transition: opacity 0.18s;
|
|
52
|
+
pointer-events: none;
|
|
53
|
+
}
|
|
54
|
+
.ad-media-card-card[data-image] .ad-media-card-art {
|
|
55
|
+
opacity: 0.18;
|
|
56
|
+
}
|
|
57
|
+
.ad-media-card-card:hover .ad-media-card-art {
|
|
58
|
+
opacity: 0.32;
|
|
59
|
+
}
|
|
60
|
+
.ad-media-card-art > .ad-equalizer {
|
|
61
|
+
display: flex;
|
|
62
|
+
width: 100%;
|
|
63
|
+
height: 100%;
|
|
64
|
+
gap: 0.35rem;
|
|
65
|
+
padding-inline: 0.75rem;
|
|
66
|
+
}
|
|
67
|
+
.ad-media-card-art > .ad-equalizer > i {
|
|
68
|
+
flex: 1;
|
|
69
|
+
width: auto;
|
|
70
|
+
}
|
|
71
|
+
.ad-media-card-content {
|
|
72
|
+
display: flex;
|
|
73
|
+
flex-direction: column;
|
|
74
|
+
gap: var(--ad-space-3);
|
|
75
|
+
block-size: 100%;
|
|
76
|
+
box-sizing: border-box;
|
|
77
|
+
padding: clamp(0.85rem, 1.2vw, 1.25rem);
|
|
78
|
+
}
|
|
79
|
+
.ad-media-card-head {
|
|
80
|
+
display: flex;
|
|
81
|
+
gap: var(--ad-space-2);
|
|
82
|
+
align-items: flex-start;
|
|
83
|
+
justify-content: space-between;
|
|
84
|
+
min-inline-size: 0;
|
|
85
|
+
}
|
|
86
|
+
.ad-media-card-card[data-image] .ad-media-card-head {
|
|
87
|
+
text-shadow: 0 0.0625rem 0.125rem #000, 0 0 0.7rem #000c;
|
|
88
|
+
}
|
|
89
|
+
.ad-media-card-title {
|
|
90
|
+
display: grid;
|
|
91
|
+
flex: 1;
|
|
92
|
+
gap: 0.18rem;
|
|
93
|
+
min-inline-size: 0;
|
|
94
|
+
}
|
|
95
|
+
.ad-media-card-actions {
|
|
96
|
+
display: flex;
|
|
97
|
+
flex-wrap: wrap;
|
|
98
|
+
align-items: center;
|
|
99
|
+
gap: var(--ad-space-2);
|
|
100
|
+
inline-size: fit-content;
|
|
101
|
+
max-inline-size: 100%;
|
|
102
|
+
margin-block-start: auto;
|
|
103
|
+
padding: 0.22rem;
|
|
104
|
+
border: 0.0625rem solid rgb(from var(--ad-primary) r g b / 0.2);
|
|
105
|
+
border-radius: var(--ad-radius-pill);
|
|
106
|
+
background: rgb(from var(--ad-neutral-950) r g b / 0.6);
|
|
107
|
+
backdrop-filter: blur(0.9rem) saturate(1.25);
|
|
108
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { type CommonProps } from "../../../core/base";
|
|
2
|
+
export interface MelodyNote {
|
|
3
|
+
id: string;
|
|
4
|
+
/** Seconds. */
|
|
5
|
+
start: number;
|
|
6
|
+
end: number;
|
|
7
|
+
/** MIDI pitch: 60 is C4. */
|
|
8
|
+
pitch: number;
|
|
9
|
+
/** Syllable sung on the note. */
|
|
10
|
+
lyric?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface MelodyRollProps extends CommonProps {
|
|
13
|
+
notes?: readonly MelodyNote[];
|
|
14
|
+
/** Playback position, seconds. */
|
|
15
|
+
position?: number;
|
|
16
|
+
/** Seconds shown across the lane; the wheel zooms it when uncontrolled or with `onWindowChange`. */
|
|
17
|
+
window?: number;
|
|
18
|
+
defaultWindow?: number;
|
|
19
|
+
onWindowChange?: (seconds: number) => void;
|
|
20
|
+
/** Where the playhead sits across the lane, 0–1. */
|
|
21
|
+
lead?: number;
|
|
22
|
+
/** Pitch range shown; by default the notes' own range with a little air. */
|
|
23
|
+
minPitch?: number;
|
|
24
|
+
maxPitch?: number;
|
|
25
|
+
/** The singer's pitch now, as a fractional MIDI note; nothing when silent. */
|
|
26
|
+
livePitch?: number;
|
|
27
|
+
/** How close the singer is to the note under the playhead, 0–1: colours the voice marker. */
|
|
28
|
+
accuracy?: number;
|
|
29
|
+
/** The singer is on the right note now: marker and key turn green. */
|
|
30
|
+
hit?: boolean;
|
|
31
|
+
/** Notes already sung right: they turn green with a burst. */
|
|
32
|
+
hitIds?: ReadonlySet<string>;
|
|
33
|
+
/** Loudness of the voice, 0–1: the marker swells with it. */
|
|
34
|
+
level?: number;
|
|
35
|
+
/** Pulse of the music, 0–1 (e.g. the kick drum): the playhead and lane flash with it. */
|
|
36
|
+
beat?: number;
|
|
37
|
+
/** Syllables inside the notes. */
|
|
38
|
+
showLyrics?: boolean;
|
|
39
|
+
/** Pressing a key, e.g. to hear its pitch. */
|
|
40
|
+
onKeyPress?: (midi: number) => void;
|
|
41
|
+
label?: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* The karaoke melody lane: notes glide towards the playhead, the singer's voice is a marker that
|
|
45
|
+
* leaves a trail, notes sung right flash green, and the lane breathes with the music. The keyboard
|
|
46
|
+
* on the left shows which key the voice is on. Scroll the wheel to zoom in or out in time.
|
|
47
|
+
*/
|
|
48
|
+
export declare const MelodyRoll: ({ notes, position, window: windowProp, defaultWindow, onWindowChange, lead, minPitch, maxPitch, livePitch, accuracy, hit, hitIds, level, beat, showLyrics, onKeyPress, label, ...p }: MelodyRollProps) => import("react").JSX.Element;
|