gitextract_4_fwl4lt/ ├── .circleci/ │ └── config.yml ├── .eslintignore ├── .eslintrc ├── .gitignore ├── .prettierrc ├── CNAME ├── README.md ├── __mocks__/ │ ├── fileMock.js │ └── styleMock.js ├── babel.config.js ├── index.html ├── manifest.json ├── package.json ├── public/ │ ├── assets/ │ │ └── icons/ │ │ └── browserconfig.xml │ └── sw.js ├── src/ │ ├── __mocks__/ │ │ └── samples.config.js │ ├── assets/ │ │ └── js/ │ │ ├── webaudio-controls.js │ │ └── webcomponents-lite.js │ ├── common/ │ │ ├── channels/ │ │ │ ├── channels.actions.js │ │ │ ├── channels.constants.js │ │ │ ├── channels.reducer.js │ │ │ ├── channels.reducer.test.js │ │ │ ├── channels.selectors.js │ │ │ └── index.js │ │ ├── index.js │ │ ├── master/ │ │ │ ├── index.js │ │ │ ├── master.actions.js │ │ │ ├── master.constants.js │ │ │ ├── master.reducer.js │ │ │ ├── master.reducer.test.js │ │ │ └── master.selectors.js │ │ ├── notes/ │ │ │ ├── index.js │ │ │ ├── notes.actions.js │ │ │ ├── notes.constants.js │ │ │ ├── notes.reducer.js │ │ │ ├── notes.reducer.test.js │ │ │ └── notes.selectors.js │ │ ├── playbackSession/ │ │ │ ├── index.js │ │ │ ├── playbackSession.actions.js │ │ │ ├── playbackSession.constants.js │ │ │ ├── playbackSession.reducer.js │ │ │ ├── playbackSession.reducer.test.js │ │ │ └── playbackSession.selectors.js │ │ ├── presets/ │ │ │ ├── index.js │ │ │ ├── presets.actions.js │ │ │ ├── presets.constants.js │ │ │ ├── presets.reducer.js │ │ │ ├── presets.reducer.test.js │ │ │ └── presets.selectors.js │ │ ├── tempo/ │ │ │ ├── index.js │ │ │ ├── tempo.actions.js │ │ │ ├── tempo.constants.js │ │ │ ├── tempo.reducer.js │ │ │ ├── tempo.reducer.test.js │ │ │ └── tempo.selectors.js │ │ ├── userSamples/ │ │ │ ├── index.js │ │ │ ├── userSamples.actions.js │ │ │ ├── userSamples.constants.js │ │ │ ├── userSamples.reducer.js │ │ │ └── userSamples.selectors.js │ │ └── window/ │ │ ├── index.js │ │ ├── window.actions.js │ │ ├── window.constants.js │ │ ├── window.reducer.js │ │ ├── window.reducer.test.js │ │ └── window.selectors.js │ ├── components/ │ │ ├── AddChannelButton/ │ │ │ ├── AddChannelButton.component.jsx │ │ │ ├── AddChannelButton.container.js │ │ │ └── index.js │ │ ├── App.jsx │ │ ├── BPMInput/ │ │ │ ├── BPMInput.component.jsx │ │ │ ├── BPMInput.container.js │ │ │ ├── BPMInput.selectors.js │ │ │ └── index.js │ │ ├── Branding.jsx │ │ ├── Channel/ │ │ │ ├── Channel.component.jsx │ │ │ ├── Channel.container.js │ │ │ ├── Channel.selectors.js │ │ │ ├── HitButton.component.jsx │ │ │ ├── RemoveButton.component.jsx │ │ │ └── index.js │ │ ├── ChannelControls/ │ │ │ ├── ChannelControls.component.jsx │ │ │ ├── ChannelControls.container.js │ │ │ ├── ChannelControls.selectors.js │ │ │ └── index.js │ │ ├── ChannelHeader/ │ │ │ ├── ChannelHeader.component.jsx │ │ │ ├── ChannelHeaderLabel.component.jsx │ │ │ └── index.js │ │ ├── ChannelList/ │ │ │ ├── ChannelList.component.jsx │ │ │ ├── ChannelList.container.js │ │ │ ├── ChannelList.selectors.js │ │ │ └── index.js │ │ ├── FancyButton.component.jsx │ │ ├── FlashMessage/ │ │ │ ├── FlashMessage.component.jsx │ │ │ ├── FlashMessage.container.js │ │ │ ├── FlashMessage.selectors.js │ │ │ └── index.js │ │ ├── GithubLink.component.jsx │ │ ├── InfoKnob.component.jsx │ │ ├── InstallButton.jsx │ │ ├── Knob.component.jsx │ │ ├── LabelBox.jsx │ │ ├── Logo.component.jsx │ │ ├── Marker/ │ │ │ ├── Marker.component.jsx │ │ │ ├── Marker.container.js │ │ │ ├── Marker.selectors.js │ │ │ └── index.js │ │ ├── MasterControls/ │ │ │ ├── MasterControls.component.jsx │ │ │ └── index.js │ │ ├── Modal.component.jsx │ │ ├── MuteSolo/ │ │ │ ├── MuteSolo.component.jsx │ │ │ ├── MuteSolo.container.js │ │ │ └── index.js │ │ ├── PatternSelector/ │ │ │ ├── PatternSelector.component.jsx │ │ │ ├── PatternSelector.container.js │ │ │ ├── PatternSelector.selectors.js │ │ │ └── index.js │ │ ├── PlayButton/ │ │ │ ├── PlayButton.component.jsx │ │ │ ├── PlayButton.container.js │ │ │ ├── PlayButton.selectors.js │ │ │ └── index.js │ │ ├── PresetDeleted.component.jsx │ │ ├── PresetSaved.component.jsx │ │ ├── PresetSelector/ │ │ │ ├── PresetSelector.component.jsx │ │ │ ├── PresetSelector.container.js │ │ │ ├── PresetSelector.selectors.js │ │ │ └── index.js │ │ ├── SampleLoadError.component.jsx │ │ ├── SampleSelect/ │ │ │ ├── SampleSelect.component.jsx │ │ │ ├── SampleSelect.container.js │ │ │ ├── SampleSelect.selectors.js │ │ │ └── index.js │ │ ├── SavePresetModal/ │ │ │ ├── SavePresetModal.component.jsx │ │ │ ├── SavePresetModal.container.js │ │ │ ├── SavePresetModal.selectors.js │ │ │ └── index.js │ │ ├── SwingControl/ │ │ │ ├── SwingControl.component.jsx │ │ │ ├── SwingControl.container.js │ │ │ ├── SwingControl.selectors.js │ │ │ └── index.js │ │ ├── Toggles/ │ │ │ ├── Toggle.component.jsx │ │ │ ├── ToggleGroup.component.jsx │ │ │ ├── Toggles.component.jsx │ │ │ ├── Toggles.container.js │ │ │ ├── Toggles.selectors.js │ │ │ └── index.js │ │ ├── VolumeMeter.component.jsx │ │ ├── design-system/ │ │ │ ├── Box.js │ │ │ ├── Button.js │ │ │ ├── ControlLabel.js │ │ │ ├── Form.js │ │ │ ├── Heading.js │ │ │ ├── HoverButton.js │ │ │ ├── HoverLink.js │ │ │ ├── Image.js │ │ │ ├── Label.js │ │ │ ├── Line.js │ │ │ ├── Text.js │ │ │ ├── TextInput.js │ │ │ └── index.js │ │ ├── index.js │ │ └── timedCallback.hoc.jsx │ ├── index.html │ ├── index.jsx │ ├── presets/ │ │ ├── 707.js │ │ ├── 808.js │ │ ├── __mocks__/ │ │ │ └── index.js │ │ ├── ace.js │ │ ├── empty.js │ │ ├── hip-hop.js │ │ ├── index.js │ │ └── ldrum.js │ ├── reducer.js │ ├── samples.config.js │ ├── services/ │ │ ├── __mocks__/ │ │ │ ├── audioContext.js │ │ │ ├── audioRouter.js │ │ │ └── featureChecks.js │ │ ├── animations.js │ │ ├── audioAnalyzer.js │ │ ├── audioContext.js │ │ ├── audioContext.test.js │ │ ├── audioEngine.config.js │ │ ├── audioLoop.js │ │ ├── audioRouter.js │ │ ├── audioScheduler.js │ │ ├── audioScheduler.test.js │ │ ├── database.js │ │ ├── featureChecks.js │ │ ├── fileUtils.js │ │ ├── pwaInstall.js │ │ ├── reverb.js │ │ ├── sampleStore.js │ │ ├── swing.js │ │ ├── unmute.js │ │ └── uuid.js │ ├── store.js │ └── styles/ │ ├── globalStyles.js │ └── theme.js └── vite.config.js