Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | import React from "react"; import l10n from "shared/lib/lang/l10n"; import styled from "styled-components"; import { CheckboxField } from "ui/form/CheckboxField"; import { Knob } from "ui/form/Knob"; import { Label } from "ui/form/Label"; interface InstrumentEnvelopeEditorProps { volume: number; sweep: number; length: number | null; onChangeVolume: (value: number) => void; onChangeSweep: (value: number) => void; onChangeLength: (value: number | null) => void; } const StyledEnvelopeForm = styled.div` display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 5px; align-items: end; padding: 0 10px; padding-bottom: 10px; `; const StyledEnvelopeField = styled.div` display: grid; grid-template-rows: 1fr auto; gap: 6px; > *:first-child { align-self: end; align-items: center; text-align: center; justify-content: center; height: auto; } &:first-child > *:first-child { position: relative; top: -1px; } > *:last-child { width: 100%; } `; export const InstrumentEnvelopeEditor = ({ volume, sweep, length, onChangeVolume, onChangeLength, onChangeSweep, }: InstrumentEnvelopeEditorProps) => { return ( <StyledEnvelopeForm> <StyledEnvelopeField> <CheckboxField label={l10n("FIELD_LENGTH")} name="length" checked={length !== null} onChange={(e) => { const value = e.target.checked; if (!value) { onChangeLength(null); } else { onChangeLength(32); } }} /> <Knob name="length" value={length ?? 0} min={1} max={64} onChange={onChangeLength} /> </StyledEnvelopeField> <StyledEnvelopeField> <Label htmlFor="initialVolume">{l10n("FIELD_INITIAL_VOLUME")}</Label> <Knob name="initialVolume" value={volume} min={0} max={15} onChange={onChangeVolume} /> </StyledEnvelopeField> <StyledEnvelopeField> <Label htmlFor="sweepChange">{l10n("FIELD_VOLUME_SWEEP_CHANGE")}</Label> <Knob name="sweepChange" value={sweep} min={-7} max={7} onChange={onChangeSweep} /> </StyledEnvelopeField> </StyledEnvelopeForm> ); }; |