@@ -3,14 +3,18 @@ import {
3
3
AlignVerticalJustifyStart ,
4
4
ArrowLeft ,
5
5
Bookmark ,
6
+ Calendar ,
7
+ Calendar1 ,
6
8
Clock ,
7
9
CloudLightningIcon ,
8
10
Grid ,
11
+ Hourglass ,
9
12
Image ,
10
13
MessageCircle ,
11
14
Moon ,
12
15
PaintBucket ,
13
16
Palette ,
17
+ RefreshCcw ,
14
18
Settings ,
15
19
Square ,
16
20
Sunrise ,
@@ -68,7 +72,7 @@ function SettingsTrigger({
68
72
return canvas . toDataURL ( ) ;
69
73
}
70
74
71
- const [ open , setOpen ] = createSignal ( true ) ;
75
+ const [ open , setOpen ] = createSignal ( false ) ;
72
76
const [ font , setFont ] = createStoredSignal ( "font" , "sans" ) ;
73
77
const [ theme , setTheme ] = createStoredSignal ( "kb-color-mode" , "system" ) ;
74
78
const [ background , setBackground ] = createStoredSignal ( "background" , "image" ) ;
@@ -86,6 +90,8 @@ function SettingsTrigger({
86
90
"wallpaperBlur" ,
87
91
0
88
92
) ;
93
+ const [ wallpaperChangeTime , setWallpaperChangeTime ] =
94
+ createStoredSignal < number > ( "wallpaperChangeTime" , 1000 * 60 * 60 * 24 ) ;
89
95
const [ pageIconURL , setPageIconURL ] = createStoredSignal (
90
96
"iconUrl" ,
91
97
"assets/logo.png"
@@ -103,13 +109,22 @@ function SettingsTrigger({
103
109
} ) ;
104
110
function SettingsPage ( ) {
105
111
return (
106
- < div class = "text-foreground bg-background fixed inset-0 z-10 grid max-h-screen grid-cols-[300px_calc(100vw-300px)]" >
112
+ < div
113
+ class = { cn (
114
+ "text-foreground bg-background fixed inset-0 z-10 grid max-h-screen grid-cols-[300px_calc(100vw-300px)]" ,
115
+ {
116
+ "**:!font-sans" : font ( ) == "sans" ,
117
+ "**:!font-serif" : font ( ) == "serif" ,
118
+ "**:!font-mono" : font ( ) == "mono" ,
119
+ }
120
+ ) }
121
+ >
107
122
< div
108
123
id = "sidebar"
109
124
class = "border-r-[rgb(39, 39, 42)] flex h-full w-[300px] max-w-lg flex-col gap-2 border-r-2 bg-[hsl(var(--sidebar))] px-4 py-20"
110
125
>
111
126
< button
112
- class = "flex items-center gap-2 rounded-lg border-2 px-4 py-2 text-left text-sm active:opacity-80 data-[selected]:border-blue-800 data-[selected]:bg-blue-800"
127
+ class = "flex items-center gap-2 rounded-lg border-2 px-4 py-2 text-left text-sm active:opacity-80 data-[selected]:border-blue-800 data-[selected]:bg-blue-800 data-[selected]:text-white "
113
128
{ ...( settingsMenu ( ) == "general"
114
129
? { "data-selected" : "true" }
115
130
: "" ) }
@@ -119,7 +134,7 @@ function SettingsTrigger({
119
134
>
120
135
< Settings
121
136
height = { 20 }
122
- class = "size-6 justify-start rounded-lg bg-purple-700 p-0.5"
137
+ class = "size-6 justify-start rounded-lg bg-purple-700 p-0.5 text-white "
123
138
/>
124
139
{ chrome . i18n . getMessage ( "general" ) }
125
140
</ button >
@@ -130,9 +145,12 @@ function SettingsTrigger({
130
145
onClick = { ( ) => {
131
146
setSettingsMenu ( "appearance" ) ;
132
147
} }
133
- class = "flex items-center justify-start gap-2 rounded-lg border-2 px-4 py-2 text-left text-sm active:opacity-80 data-[selected]:border-blue-800 data-[selected]:bg-blue-800"
148
+ class = "flex items-center justify-start gap-2 rounded-lg border-2 px-4 py-2 text-left text-sm active:opacity-80 data-[selected]:border-blue-800 data-[selected]:bg-blue-800 data-[selected]:text-white "
134
149
>
135
- < Palette height = { 20 } class = "size-6 rounded-lg bg-pink-700 p-0.5" />
150
+ < Palette
151
+ height = { 20 }
152
+ class = "size-6 rounded-lg bg-pink-700 p-0.5 text-white"
153
+ />
136
154
{ chrome . i18n . getMessage ( "appearance" ) }
137
155
</ button >
138
156
< button
@@ -142,9 +160,12 @@ function SettingsTrigger({
142
160
onClick = { ( ) => {
143
161
setSettingsMenu ( "background" ) ;
144
162
} }
145
- class = "flex items-center justify-start gap-2 rounded-lg border-2 px-4 py-2 text-left text-sm active:opacity-80 data-[selected]:border-blue-800 data-[selected]:bg-blue-800"
163
+ class = "flex items-center justify-start gap-2 rounded-lg border-2 px-4 py-2 text-left text-sm active:opacity-80 data-[selected]:border-blue-800 data-[selected]:bg-blue-800 data-[selected]:text-white "
146
164
>
147
- < Image height = { 20 } class = "size-6 rounded-lg bg-teal-700 p-0.5" />
165
+ < Image
166
+ height = { 20 }
167
+ class = "size-6 rounded-lg bg-teal-700 p-0.5 text-white"
168
+ />
148
169
{ chrome . i18n . getMessage ( "background" ) }
149
170
</ button >
150
171
</ div >
@@ -290,14 +311,14 @@ function SettingsTrigger({
290
311
href = "https://github.com/thingbomb/flowtide/discussions"
291
312
class = "text-blue-400 hover:underline"
292
313
>
293
- Forum
314
+ { chrome . i18n . getMessage ( "forum" ) }
294
315
</ a >
295
316
•
296
317
< a
297
318
href = "https://feedback.flowtide.app/feature-requests"
298
319
class = "text-blue-400 hover:underline"
299
320
>
300
- Feature request
321
+ { chrome . i18n . getMessage ( "feature_request" ) }
301
322
</ a >
302
323
</ div >
303
324
</ >
@@ -456,6 +477,57 @@ function SettingsTrigger({
456
477
</ div >
457
478
< br />
458
479
< br />
480
+ < h2 class = "mb-3 text-2xl font-[500]" >
481
+ { chrome . i18n . getMessage ( "new_wallpaper" ) }
482
+ </ h2 >
483
+ < div class = "card-group grid-cols-2 grid-rows-1" >
484
+ < BigButton
485
+ { ...( Number ( wallpaperChangeTime ( ) ) === 1
486
+ ? { "data-selected" : true }
487
+ : { } ) }
488
+ onClick = { ( ) => {
489
+ localStorage . removeItem ( "selectedImage" ) ;
490
+ setWallpaperChangeTime ( 1 ) ;
491
+ } }
492
+ title = { chrome . i18n . getMessage ( "every_reload" ) }
493
+ icon = { < RefreshCcw class = "size-[64px]" fill = "none" /> }
494
+ />
495
+ < BigButton
496
+ { ...( Number ( wallpaperChangeTime ( ) ) === 1000 * 60 * 60
497
+ ? { "data-selected" : true }
498
+ : { } ) }
499
+ onClick = { ( ) => {
500
+ localStorage . removeItem ( "selectedImage" ) ;
501
+ setWallpaperChangeTime ( 1000 * 60 * 60 ) ;
502
+ } }
503
+ title = { chrome . i18n . getMessage ( "every_hour" ) }
504
+ icon = { < Hourglass class = "size-[64px]" fill = "none" /> }
505
+ />
506
+ < BigButton
507
+ { ...( Number ( wallpaperChangeTime ( ) ) === 1000 * 60 * 60 * 24
508
+ ? { "data-selected" : true }
509
+ : { } ) }
510
+ onClick = { ( ) => {
511
+ localStorage . removeItem ( "selectedImage" ) ;
512
+ setWallpaperChangeTime ( 1000 * 60 * 60 * 24 ) ;
513
+ } }
514
+ title = { chrome . i18n . getMessage ( "every_day" ) }
515
+ icon = { < Calendar1 class = "size-[64px]" fill = "none" /> }
516
+ />
517
+ < BigButton
518
+ { ...( Number ( wallpaperChangeTime ( ) ) === 1000 * 60 * 60 * 24 * 7
519
+ ? { "data-selected" : true }
520
+ : { } ) }
521
+ onClick = { ( ) => {
522
+ localStorage . removeItem ( "selectedImage" ) ;
523
+ setWallpaperChangeTime ( 1000 * 60 * 60 * 24 * 7 ) ;
524
+ } }
525
+ title = { chrome . i18n . getMessage ( "every_week" ) }
526
+ icon = { < Calendar class = "size-[64px]" fill = "none" /> }
527
+ />
528
+ </ div >
529
+ < br />
530
+ < br />
459
531
< h2 class = "mb-3 text-2xl font-[500]" >
460
532
{ chrome . i18n . getMessage ( "opacity" ) }
461
533
</ h2 >
0 commit comments