New Title, Description. Removed dots from volume sliders.
This commit is contained in:
@@ -37,8 +37,8 @@ function App(): React.ReactNode {
|
|||||||
|
|
||||||
const handleShareSession = () => {
|
const handleShareSession = () => {
|
||||||
navigator.clipboard.writeText(window.location.href).then(() => {
|
navigator.clipboard.writeText(window.location.href).then(() => {
|
||||||
setShowCopyMessage(true);
|
setShowCopyMessage(true);
|
||||||
setTimeout(() => setShowCopyMessage(false), 3000);
|
setTimeout(() => setShowCopyMessage(false), 3000);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -47,13 +47,13 @@ function App(): React.ReactNode {
|
|||||||
<div className="w-full max-w-6xl mx-auto">
|
<div className="w-full max-w-6xl mx-auto">
|
||||||
<header className="mb-6 text-center relative z-10">
|
<header className="mb-6 text-center relative z-10">
|
||||||
<h1 className="text-4xl font-bold text-slate-800 tracking-tight">AG Beats</h1>
|
<h1 className="text-4xl font-bold text-slate-800 tracking-tight">AG Beats</h1>
|
||||||
<p className="text-slate-500 mt-2">Craft your beats and bass lines with this interactive step sequencer.</p>
|
<p className="text-slate-500 mt-2">Craft your beats. Online with your friends.</p>
|
||||||
<div className="absolute top-1/2 right-0 transform -translate-y-1/2 flex flex-col items-start gap-2">
|
<div className="absolute top-1/2 right-0 transform -translate-y-1/2 flex flex-col items-start gap-2">
|
||||||
<div className={`text-xs font-semibold ${isConnected ? 'text-green-500' : 'text-red-500'}`}>
|
<div className={`text-xs font-semibold ${isConnected ? 'text-green-500' : 'text-red-500'}`}>
|
||||||
{isConnected ? '● Connected' : '● Disconnected'}
|
{isConnected ? '● Connected' : '● Disconnected'}
|
||||||
</div>
|
</div>
|
||||||
<div className="relative">
|
<div className="relative">
|
||||||
<button
|
<button
|
||||||
onClick={handleShareSession}
|
onClick={handleShareSession}
|
||||||
className="flex items-center justify-center gap-2 px-2 lg:px-3 py-1 lg:py-2 text-xs lg:text-sm font-semibold text-slate-700 bg-white border border-slate-300 rounded-md shadow-sm hover:bg-slate-50 focus:outline-none focus:ring-2 focus:ring-orange-500"
|
className="flex items-center justify-center gap-2 px-2 lg:px-3 py-1 lg:py-2 text-xs lg:text-sm font-semibold text-slate-700 bg-white border border-slate-300 rounded-md shadow-sm hover:bg-slate-50 focus:outline-none focus:ring-2 focus:ring-orange-500"
|
||||||
>
|
>
|
||||||
@@ -61,9 +61,9 @@ function App(): React.ReactNode {
|
|||||||
<span className="hidden lg:inline">Share Session</span>
|
<span className="hidden lg:inline">Share Session</span>
|
||||||
</button>
|
</button>
|
||||||
{showCopyMessage && (
|
{showCopyMessage && (
|
||||||
<div className="absolute top-full right-0 mt-2 p-2 text-xs text-white bg-slate-800 rounded-md shadow-lg transition-opacity duration-300 ease-in-out z-50">
|
<div className="absolute top-full right-0 mt-2 p-2 text-xs text-white bg-slate-800 rounded-md shadow-lg transition-opacity duration-300 ease-in-out z-50">
|
||||||
Session link copied. Send it to your friends!
|
Session link copied. Send it to your friends!
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,15 +1,17 @@
|
|||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
<head>
|
||||||
<link rel="icon" type="image/svg+xml" href="/ag-beats/favicon.svg" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<link rel="icon" type="image/svg+xml" href="/ag-beats/favicon.svg" />
|
||||||
<title>Gemini Rhythm Machine</title>
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<script src="https://cdn.tailwindcss.com"></script>
|
<title>AG Beats</title>
|
||||||
</head>
|
<script src="https://cdn.tailwindcss.com"></script>
|
||||||
<body class="bg-slate-100">
|
</head>
|
||||||
<div id="root"></div>
|
|
||||||
<script type="module" src="/index.tsx"></script>
|
<body class="bg-slate-100">
|
||||||
</body>
|
<div id="root"></div>
|
||||||
</html>
|
<script type="module" src="/index.tsx"></script>
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
BIN
session_state.db
BIN
session_state.db
Binary file not shown.
@@ -37,7 +37,7 @@ const App: React.FC = () => {
|
|||||||
<div className="text-center md:text-left">
|
<div className="text-center md:text-left">
|
||||||
<h1 className="text-3xl md:text-4xl font-black text-slate-800 tracking-tightest uppercase mb-1">AG Beats</h1>
|
<h1 className="text-3xl md:text-4xl font-black text-slate-800 tracking-tightest uppercase mb-1">AG Beats</h1>
|
||||||
<p className="text-slate-400 text-xs md:text-sm font-medium max-w-lg mx-auto md:mx-0">
|
<p className="text-slate-400 text-xs md:text-sm font-medium max-w-lg mx-auto md:mx-0">
|
||||||
Craft your beats and bass lines with this interactive step sequencer.
|
Craft your beats. Online with your friends.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -220,17 +220,7 @@ export const Sequencer: React.FC<SequencerProps> = ({
|
|||||||
className="absolute inset-0 opacity-0 cursor-pointer z-30"
|
className="absolute inset-0 opacity-0 cursor-pointer z-30"
|
||||||
style={isMobile ? { width: '100%', height: '100%' } : { width: '100%', height: '100%', writingMode: 'vertical-lr', direction: 'rtl' }}
|
style={isMobile ? { width: '100%', height: '100%' } : { width: '100%', height: '100%', writingMode: 'vertical-lr', direction: 'rtl' }}
|
||||||
/>
|
/>
|
||||||
<div className="absolute inset-0 pointer-events-none p-1">
|
|
||||||
<div
|
|
||||||
className="w-2.5 h-2.5 bg-white border-2 border-orange-500 rounded-full shadow-md transition-all duration-300"
|
|
||||||
style={{
|
|
||||||
position: 'absolute',
|
|
||||||
left: isMobile ? `${(drumVolume / 1.5) * 100}%` : '50%',
|
|
||||||
bottom: !isMobile ? `${(drumVolume / 1.5) * 100}%` : '50%',
|
|
||||||
transform: 'translate(-50%, 50%)'
|
|
||||||
}}
|
|
||||||
></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -294,17 +284,7 @@ export const Sequencer: React.FC<SequencerProps> = ({
|
|||||||
className="absolute inset-0 opacity-0 cursor-pointer z-30"
|
className="absolute inset-0 opacity-0 cursor-pointer z-30"
|
||||||
style={isMobile ? { width: '100%', height: '100%' } : { width: '100%', height: '100%', writingMode: 'vertical-lr', direction: 'rtl' }}
|
style={isMobile ? { width: '100%', height: '100%' } : { width: '100%', height: '100%', writingMode: 'vertical-lr', direction: 'rtl' }}
|
||||||
/>
|
/>
|
||||||
<div className="absolute inset-0 pointer-events-none p-1">
|
|
||||||
<div
|
|
||||||
className="w-2.5 h-2.5 bg-white border-2 border-purple-500 rounded-full shadow-md transition-all duration-300"
|
|
||||||
style={{
|
|
||||||
position: 'absolute',
|
|
||||||
left: isMobile ? `${(bassVolume / 1) * 100}%` : '50%',
|
|
||||||
bottom: !isMobile ? `${(bassVolume / 1) * 100}%` : '50%',
|
|
||||||
transform: 'translate(-50%, 50%)'
|
|
||||||
}}
|
|
||||||
></div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
<title>Gemini Rhythm Machine</title>
|
<title>AG Beats</title>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body class="bg-slate-100">
|
<body class="bg-slate-100">
|
||||||
|
|||||||
Reference in New Issue
Block a user