gpt-engineer-app[bot] commited on
Commit
6db79a0
·
1 Parent(s): 9953425

Move SettingsPanel to sidebar

Browse files

Move the SettingsPanel component to the left sidebar, positioned below the "+ New Script" button.

src/components/ProjectSidebar.tsx CHANGED
@@ -5,7 +5,13 @@ import { Input } from "@/components/ui/input";
5
  import { Textarea } from "@/components/ui/textarea";
6
  import { ScrollArea } from "@/components/ui/scroll-area";
7
  import { Card, CardContent } from "@/components/ui/card";
8
- import { Folder, FolderOpen, FileText, Plus, Search, Edit, Save } from "lucide-react";
 
 
 
 
 
 
9
 
10
  interface Project {
11
  id: string;
@@ -14,7 +20,12 @@ interface Project {
14
  notes?: string;
15
  }
16
 
17
- const ProjectSidebar: React.FC = () => {
 
 
 
 
 
18
  const [projects, setProjects] = useState<Project[]>([
19
  {
20
  id: '1',
@@ -39,6 +50,7 @@ const ProjectSidebar: React.FC = () => {
39
  const [selectedProject, setSelectedProject] = useState('1');
40
  const [editingNotes, setEditingNotes] = useState(false);
41
  const [currentNotes, setCurrentNotes] = useState('');
 
42
 
43
  const filteredProjects = projects.filter(project =>
44
  project.name.toLowerCase().includes(searchTerm.toLowerCase())
@@ -72,6 +84,10 @@ const ProjectSidebar: React.FC = () => {
72
 
73
  const selectedProjectData = projects.find(p => p.id === selectedProject);
74
 
 
 
 
 
75
  return (
76
  <div className="w-64 bg-black border-r border-scriptRed/20 h-full flex flex-col">
77
  <div className="p-4 border-b border-scriptRed/20">
@@ -154,17 +170,147 @@ const ProjectSidebar: React.FC = () => {
154
  )}
155
  </div>
156
 
157
- <div className="p-4">
 
158
  <Button
159
  onClick={addNewProject}
160
  className="w-full bg-scriptRed hover:bg-scriptRed/80 text-white"
161
  >
162
  <Plus className="h-4 w-4 mr-1" /> New Script
163
  </Button>
 
 
 
 
 
 
 
 
164
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
165
  </div>
166
  );
167
  };
168
 
169
  export default ProjectSidebar;
170
-
 
5
  import { Textarea } from "@/components/ui/textarea";
6
  import { ScrollArea } from "@/components/ui/scroll-area";
7
  import { Card, CardContent } from "@/components/ui/card";
8
+ import { Folder, FolderOpen, FileText, Plus, Search, Edit, Save, Settings } from "lucide-react";
9
+ import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
10
+ import { Label } from "@/components/ui/label";
11
+ import { Switch } from "@/components/ui/switch";
12
+ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select";
13
+ import { Slider } from "@/components/ui/slider";
14
+ import { Book, Volume2 } from "lucide-react";
15
 
16
  interface Project {
17
  id: string;
 
20
  notes?: string;
21
  }
22
 
23
+ interface ProjectSidebarProps {
24
+ dyslexicMode: boolean;
25
+ setDyslexicMode: (value: boolean) => void;
26
+ }
27
+
28
+ const ProjectSidebar: React.FC<ProjectSidebarProps> = ({ dyslexicMode, setDyslexicMode }) => {
29
  const [projects, setProjects] = useState<Project[]>([
30
  {
31
  id: '1',
 
50
  const [selectedProject, setSelectedProject] = useState('1');
51
  const [editingNotes, setEditingNotes] = useState(false);
52
  const [currentNotes, setCurrentNotes] = useState('');
53
+ const [settingsOpen, setSettingsOpen] = useState(false);
54
 
55
  const filteredProjects = projects.filter(project =>
56
  project.name.toLowerCase().includes(searchTerm.toLowerCase())
 
84
 
85
  const selectedProjectData = projects.find(p => p.id === selectedProject);
86
 
87
+ const toggleSettings = () => {
88
+ setSettingsOpen(!settingsOpen);
89
+ };
90
+
91
  return (
92
  <div className="w-64 bg-black border-r border-scriptRed/20 h-full flex flex-col">
93
  <div className="p-4 border-b border-scriptRed/20">
 
170
  )}
171
  </div>
172
 
173
+ {/* Buttons section */}
174
+ <div className="p-4 space-y-3">
175
  <Button
176
  onClick={addNewProject}
177
  className="w-full bg-scriptRed hover:bg-scriptRed/80 text-white"
178
  >
179
  <Plus className="h-4 w-4 mr-1" /> New Script
180
  </Button>
181
+
182
+ <Button
183
+ onClick={toggleSettings}
184
+ variant={settingsOpen ? "default" : "outline"}
185
+ className={`w-full ${settingsOpen ? "bg-scriptRed hover:bg-scriptRed/80" : "border-scriptRed/50"} text-white`}
186
+ >
187
+ <Settings className="h-4 w-4 mr-1" /> Settings
188
+ </Button>
189
  </div>
190
+
191
+ {/* Settings Panel - Now inside the sidebar */}
192
+ {settingsOpen && (
193
+ <div className="p-4 bg-gray-900 border-t border-scriptRed/20">
194
+ <Tabs defaultValue="voice" className="w-full">
195
+ <TabsList className="bg-black w-full grid grid-cols-3">
196
+ <TabsTrigger value="voice" className="data-[state=active]:bg-scriptRed">Voice</TabsTrigger>
197
+ <TabsTrigger value="accessibility" className="data-[state=active]:bg-scriptRed">Access</TabsTrigger>
198
+ <TabsTrigger value="export" className="data-[state=active]:bg-scriptRed">Export</TabsTrigger>
199
+ </TabsList>
200
+
201
+ <TabsContent value="voice" className="space-y-3 mt-3">
202
+ <div className="space-y-2">
203
+ <Label htmlFor="voice" className="text-white">Voice</Label>
204
+ <Select defaultValue="male1">
205
+ <SelectTrigger className="bg-black border-scriptRed/20">
206
+ <SelectValue placeholder="Select voice" />
207
+ </SelectTrigger>
208
+ <SelectContent className="bg-black border-scriptRed/20">
209
+ <SelectItem value="male1">Male Voice 1</SelectItem>
210
+ <SelectItem value="male2">Male Voice 2</SelectItem>
211
+ <SelectItem value="female1">Female Voice 1</SelectItem>
212
+ <SelectItem value="female2">Female Voice 2</SelectItem>
213
+ </SelectContent>
214
+ </Select>
215
+ </div>
216
+
217
+ <div className="space-y-2">
218
+ <Label htmlFor="language" className="text-white">Language</Label>
219
+ <Select defaultValue="en-US">
220
+ <SelectTrigger className="bg-black border-scriptRed/20">
221
+ <SelectValue placeholder="Select language" />
222
+ </SelectTrigger>
223
+ <SelectContent className="bg-black border-scriptRed/20">
224
+ <SelectItem value="en-US">English (US)</SelectItem>
225
+ <SelectItem value="en-UK">English (UK)</SelectItem>
226
+ <SelectItem value="es">Spanish</SelectItem>
227
+ <SelectItem value="fr">French</SelectItem>
228
+ </SelectContent>
229
+ </Select>
230
+ </div>
231
+
232
+ <div className="space-y-1">
233
+ <div className="flex items-center justify-between">
234
+ <Label className="text-white text-xs">Volume</Label>
235
+ <span className="text-xs text-white">80%</span>
236
+ </div>
237
+ <Slider defaultValue={[80]} max={100} step={1} className="w-full" />
238
+ </div>
239
+
240
+ <div className="space-y-1">
241
+ <Label className="text-white text-xs">Pitch</Label>
242
+ <Slider defaultValue={[50]} max={100} step={1} className="w-full" />
243
+ </div>
244
+ </TabsContent>
245
+
246
+ <TabsContent value="accessibility" className="space-y-3 mt-3">
247
+ <div className="flex items-center justify-between">
248
+ <Label htmlFor="dyslexic-mode" className="text-white text-xs">
249
+ Dyslexia Font
250
+ </Label>
251
+ <Switch
252
+ id="dyslexic-mode"
253
+ checked={dyslexicMode}
254
+ onCheckedChange={setDyslexicMode}
255
+ className="data-[state=checked]:bg-scriptRed"
256
+ />
257
+ </div>
258
+
259
+ <div className="flex items-center justify-between">
260
+ <Label htmlFor="large-text" className="text-white text-xs">
261
+ Large Text
262
+ </Label>
263
+ <Switch
264
+ id="large-text"
265
+ className="data-[state=checked]:bg-scriptRed"
266
+ />
267
+ </div>
268
+
269
+ <div className="flex items-center justify-between">
270
+ <Label htmlFor="high-contrast" className="text-white text-xs">
271
+ High Contrast
272
+ </Label>
273
+ <Switch
274
+ id="high-contrast"
275
+ className="data-[state=checked]:bg-scriptRed"
276
+ />
277
+ </div>
278
+ </TabsContent>
279
+
280
+ <TabsContent value="export" className="space-y-3 mt-3">
281
+ <div className="space-y-2">
282
+ <Label htmlFor="export-format" className="text-white">Format</Label>
283
+ <Select defaultValue="mp3">
284
+ <SelectTrigger className="bg-black border-scriptRed/20">
285
+ <SelectValue placeholder="Select format" />
286
+ </SelectTrigger>
287
+ <SelectContent className="bg-black border-scriptRed/20">
288
+ <SelectItem value="mp3">MP3</SelectItem>
289
+ <SelectItem value="wav">WAV</SelectItem>
290
+ <SelectItem value="ogg">OGG</SelectItem>
291
+ </SelectContent>
292
+ </Select>
293
+ </div>
294
+
295
+ <div className="space-y-2">
296
+ <Label htmlFor="quality" className="text-white">Quality</Label>
297
+ <Select defaultValue="high">
298
+ <SelectTrigger className="bg-black border-scriptRed/20">
299
+ <SelectValue placeholder="Select quality" />
300
+ </SelectTrigger>
301
+ <SelectContent className="bg-black border-scriptRed/20">
302
+ <SelectItem value="low">Low (faster)</SelectItem>
303
+ <SelectItem value="medium">Medium</SelectItem>
304
+ <SelectItem value="high">High (slower)</SelectItem>
305
+ </SelectContent>
306
+ </Select>
307
+ </div>
308
+ </TabsContent>
309
+ </Tabs>
310
+ </div>
311
+ )}
312
  </div>
313
  );
314
  };
315
 
316
  export default ProjectSidebar;
 
src/pages/Index.tsx CHANGED
@@ -2,7 +2,6 @@
2
  import React, { useState } from 'react';
3
  import ProjectSidebar from '@/components/ProjectSidebar';
4
  import EditorPanel from '@/components/EditorPanel';
5
- import SettingsPanel from '@/components/SettingsPanel';
6
 
7
  const Index = () => {
8
  const [dyslexicMode, setDyslexicMode] = useState<boolean>(false);
@@ -22,15 +21,14 @@ const Index = () => {
22
  </header>
23
 
24
  <main className="flex-1 flex">
25
- <ProjectSidebar />
 
 
 
26
  <div className="flex-1 flex flex-col">
27
  <div className="flex-1 p-4">
28
  <EditorPanel dyslexicMode={dyslexicMode} />
29
  </div>
30
- <SettingsPanel
31
- dyslexicMode={dyslexicMode}
32
- setDyslexicMode={setDyslexicMode}
33
- />
34
  </div>
35
  </main>
36
  </div>
 
2
  import React, { useState } from 'react';
3
  import ProjectSidebar from '@/components/ProjectSidebar';
4
  import EditorPanel from '@/components/EditorPanel';
 
5
 
6
  const Index = () => {
7
  const [dyslexicMode, setDyslexicMode] = useState<boolean>(false);
 
21
  </header>
22
 
23
  <main className="flex-1 flex">
24
+ <ProjectSidebar
25
+ dyslexicMode={dyslexicMode}
26
+ setDyslexicMode={setDyslexicMode}
27
+ />
28
  <div className="flex-1 flex flex-col">
29
  <div className="flex-1 p-4">
30
  <EditorPanel dyslexicMode={dyslexicMode} />
31
  </div>
 
 
 
 
32
  </div>
33
  </main>
34
  </div>