diff --git a/package-lock.json b/package-lock.json index 54f3008..6e4e5c4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4317,6 +4317,11 @@ "shallow-clone": "^3.0.0" } }, + "clsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz", + "integrity": "sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==" + }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -12869,6 +12874,15 @@ "react-transition-group": "^4.3.0" } }, + "react-tabs": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/react-tabs/-/react-tabs-3.1.1.tgz", + "integrity": "sha512-HpySC29NN1BkzBAnOC+ajfzPbTaVZcSWzMSjk56uAhPC/rBGtli8lTysR4CfPAyEE/hfweIzagOIoJ7nu80yng==", + "requires": { + "clsx": "^1.1.0", + "prop-types": "^15.5.0" + } + }, "react-transition-group": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.1.tgz", diff --git a/package.json b/package.json index 2a58598..407a7dd 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "react-redux": "^7.2.2", "react-scripts": "4.0.0", "react-select": "^3.1.0", + "react-tabs": "^3.1.1", "styled-components": "^5.2.1" }, "scripts": { diff --git a/src/features/timbre/Timbre.module.css b/src/features/timbre/Timbre.module.css index 6d1d68a..a69bd3f 100644 --- a/src/features/timbre/Timbre.module.css +++ b/src/features/timbre/Timbre.module.css @@ -15,17 +15,6 @@ left: 25%; } -.buttonContainer > button { - background: white; - color: slategrey; - font-size: 1em; - margin: 0.75em 1em; - padding: 0.25em 1em; - border: 2px solid slategrey; - border-radius: 3px; - outline: none; -} - .buttonContainer > button:hover { background: white; color: slateblue; @@ -36,3 +25,54 @@ color: white; border: 2px solid slateblue; } + +.tabList { + position: fixed; + display: inline-flex; + flex-direction: row; + list-style-type: none; + top: 0; + left: 30%; +} + +.tab { + background: white; + color: slategrey; + font-size: 1em; + margin: 0.75em 1em; + padding: 0.25em 1em; + border: 2px solid slategrey; + border-radius: 3px; + outline: none; + -webkit-touch-callout: none; /* iOS Safari */ + -webkit-user-select: none; /* Safari */ + -khtml-user-select: none; /* Konqueror HTML */ + -moz-user-select: none; /* Old versions of Firefox */ + -ms-user-select: none; /* Internet Explorer/Edge */ + user-select: none; +} + +.tab:hover { + background: white; + color: slateblue; + border: 2px solid slateblue; +} +.selected, +.selected:hover { + background: slateblue; + color: white; + border: 2px solid slateblue; + transition: 0.2s ease-in-out; +} +@keyframes slideeffect { + 0% { + opacity: 0.5; + } + 100% { + opacity: 1; + } +} +.tabPanel { + animation: slideeffect 0.6s ease-in-out; + opacity: 1; +} diff --git a/src/features/timbre/timbreSwitcher.js b/src/features/timbre/timbreSwitcher.js index 669ab6f..ba4f911 100644 --- a/src/features/timbre/timbreSwitcher.js +++ b/src/features/timbre/timbreSwitcher.js @@ -1,41 +1,32 @@ import React from 'react'; import Timbre from './Timbre'; import Vocoder from './Vocoder'; -import { useDispatch, useSelector } from 'react-redux'; -import { timbreCurrentUpdate } from './timbreSlice'; +import { Tab, Tabs, TabList, TabPanel } from 'react-tabs'; import styles from './Timbre.module.css'; export default function TimbreSwitcher(props) { - const currentTimbre = useSelector((state) => state.timbres.currentTimbre); - const dispatch = useDispatch(); - - function handleClick(e, value) { - e.preventDefault(); - dispatch(timbreCurrentUpdate(value)); - } - return (