wrkmon 1.0.1__py3-none-any.whl → 1.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
wrkmon/ui/theme.py CHANGED
@@ -1,15 +1,15 @@
1
1
  """Theme and CSS for wrkmon TUI."""
2
2
 
3
- # Main application CSS
3
+ # Main application CSS with enhanced UX
4
4
  APP_CSS = """
5
5
  /* ============================================
6
6
  WRKMON - Terminal Music Player Theme
7
- Designed to look like a system monitor
7
+ Enhanced UX with better colors and visuals
8
8
  ============================================ */
9
9
 
10
10
  /* Base screen styling */
11
11
  Screen {
12
- background: #0a0a0a;
12
+ background: #0d1117;
13
13
  }
14
14
 
15
15
  /* ----------------------------------------
@@ -18,8 +18,8 @@ Screen {
18
18
  HeaderBar {
19
19
  dock: top;
20
20
  height: 1;
21
- background: #1a1a1a;
22
- color: #00ff00;
21
+ background: #161b22;
22
+ color: #58a6ff;
23
23
  }
24
24
 
25
25
  #header-inner {
@@ -28,31 +28,43 @@ HeaderBar {
28
28
 
29
29
  #app-title {
30
30
  width: auto;
31
- color: #00ff00;
31
+ color: #58a6ff;
32
32
  text-style: bold;
33
33
  padding: 0 1;
34
34
  }
35
35
 
36
36
  #current-view {
37
37
  width: 1fr;
38
- color: #008800;
38
+ color: #8b949e;
39
39
  padding: 0 1;
40
40
  }
41
41
 
42
42
  #sys-stats {
43
43
  width: auto;
44
- color: #888888;
44
+ color: #6e7681;
45
45
  padding: 0 1;
46
46
  }
47
47
 
48
+ #update-indicator {
49
+ width: auto;
50
+ color: #f0883e;
51
+ text-style: bold;
52
+ padding: 0 1;
53
+ }
54
+
55
+ #update-indicator.update-available {
56
+ color: #f85149;
57
+ text-style: bold blink;
58
+ }
59
+
48
60
  /* ----------------------------------------
49
- PLAYER BAR (Bottom)
61
+ PLAYER BAR (Bottom) - Enhanced
50
62
  ---------------------------------------- */
51
63
  PlayerBar {
52
64
  dock: bottom;
53
65
  height: 5;
54
- background: #1a1a1a;
55
- border-top: solid #333333;
66
+ background: #161b22;
67
+ border-top: solid #30363d;
56
68
  padding: 0 1;
57
69
  }
58
70
 
@@ -66,17 +78,26 @@ PlayerBar {
66
78
 
67
79
  #now-label {
68
80
  width: 4;
69
- color: #888888;
81
+ color: #8b949e;
70
82
  }
71
83
 
72
84
  #play-status {
73
- width: 2;
74
- color: #00ff00;
85
+ width: 3;
86
+ color: #3fb950;
87
+ text-style: bold;
88
+ }
89
+
90
+ #play-status.paused {
91
+ color: #f0883e;
92
+ }
93
+
94
+ #play-status.stopped {
95
+ color: #6e7681;
75
96
  }
76
97
 
77
98
  #track-title {
78
99
  width: 1fr;
79
- color: #ffffff;
100
+ color: #f0f6fc;
80
101
  }
81
102
 
82
103
  #progress-row {
@@ -84,18 +105,28 @@ PlayerBar {
84
105
  padding: 0 1;
85
106
  }
86
107
 
87
- #time-current, #time-total {
108
+ #time-current {
88
109
  width: 8;
89
- color: #888888;
110
+ color: #3fb950;
111
+ }
112
+
113
+ #time-total {
114
+ width: 8;
115
+ color: #8b949e;
90
116
  }
91
117
 
92
118
  #progress {
93
119
  width: 1fr;
94
- background: #333333;
120
+ background: #21262d;
95
121
  }
96
122
 
97
123
  #progress > .bar--bar {
98
- color: #00ff00;
124
+ color: #238636;
125
+ background: #238636;
126
+ }
127
+
128
+ #progress > .bar--complete {
129
+ color: #3fb950;
99
130
  }
100
131
 
101
132
  #volume-row {
@@ -104,21 +135,29 @@ PlayerBar {
104
135
 
105
136
  #vol-label {
106
137
  width: 4;
107
- color: #888888;
138
+ color: #8b949e;
108
139
  }
109
140
 
110
141
  #volume {
111
142
  width: 20;
112
- background: #333333;
143
+ background: #21262d;
113
144
  }
114
145
 
115
146
  #volume > .bar--bar {
116
- color: #00ffff;
147
+ color: #1f6feb;
148
+ background: #1f6feb;
117
149
  }
118
150
 
119
151
  #vol-value {
120
152
  width: 5;
121
- color: #888888;
153
+ color: #58a6ff;
154
+ }
155
+
156
+ #repeat-indicator {
157
+ width: auto;
158
+ color: #a371f7;
159
+ text-style: bold;
160
+ padding: 0 1;
122
161
  }
123
162
 
124
163
  /* ----------------------------------------
@@ -142,9 +181,9 @@ SearchView, QueueView, HistoryView, PlaylistsView {
142
181
 
143
182
  #view-title {
144
183
  height: 1;
145
- color: #00ff00;
184
+ color: #58a6ff;
146
185
  text-style: bold;
147
- background: #111111;
186
+ background: #161b22;
148
187
  padding: 0 1;
149
188
  }
150
189
 
@@ -156,76 +195,146 @@ SearchView, QueueView, HistoryView, PlaylistsView {
156
195
 
157
196
  #search-input {
158
197
  width: 100%;
159
- background: #1a1a1a;
160
- border: tall #333333;
161
- color: #ffffff;
198
+ background: #0d1117;
199
+ border: tall #30363d;
200
+ color: #f0f6fc;
162
201
  }
163
202
 
164
203
  #search-input:focus {
165
- border: tall #00ff00;
204
+ border: tall #58a6ff;
205
+ }
206
+
207
+ #search-input.-invalid {
208
+ border: tall #f85149;
166
209
  }
167
210
 
168
211
  /* List headers (column titles) */
169
212
  #list-header {
170
213
  height: 1;
171
- color: #888888;
172
- background: #111111;
214
+ color: #8b949e;
215
+ background: #161b22;
173
216
  text-style: bold;
174
217
  }
175
218
 
176
219
  /* Result/Queue/History lists */
177
220
  #results-list, #queue-list, #history-list, #playlist-list {
178
221
  height: 1fr;
179
- background: #0a0a0a;
180
- scrollbar-background: #1a1a1a;
181
- scrollbar-color: #333333;
222
+ background: #0d1117;
223
+ scrollbar-background: #161b22;
224
+ scrollbar-color: #30363d;
225
+ scrollbar-color-hover: #484f58;
226
+ scrollbar-color-active: #6e7681;
182
227
  }
183
228
 
184
229
  ListView > ListItem {
185
230
  height: 1;
186
231
  padding: 0 1;
187
- color: #cccccc;
232
+ color: #c9d1d9;
188
233
  }
189
234
 
190
235
  ListView > ListItem:hover {
191
- background: #1a1a1a;
236
+ background: #161b22;
237
+ }
238
+
239
+ ListView > ListItem.-highlight, ListView > ListItem:focus {
240
+ background: #1f6feb20;
241
+ color: #58a6ff;
242
+ }
243
+
244
+ /* Track status colors */
245
+ .track-playing {
246
+ color: #3fb950;
247
+ text-style: bold;
248
+ }
249
+
250
+ .track-queued {
251
+ color: #f0883e;
192
252
  }
193
253
 
194
- ListView > ListItem.-highlight {
195
- background: #222222;
196
- color: #00ff00;
254
+ .track-paused {
255
+ color: #f0883e;
197
256
  }
198
257
 
199
258
  .result-text, .queue-text, .history-text {
200
259
  width: 100%;
201
260
  }
202
261
 
203
- /* Status bar */
262
+ /* Status bar - Enhanced */
204
263
  #status-bar {
205
264
  dock: bottom;
206
265
  height: 1;
207
- color: #888888;
208
- background: #111111;
266
+ color: #8b949e;
267
+ background: #161b22;
268
+ padding: 0 1;
269
+ }
270
+
271
+ /* ----------------------------------------
272
+ SEARCH CONTENT & THUMBNAIL
273
+ ---------------------------------------- */
274
+ #search-content {
275
+ height: 1fr;
276
+ }
277
+
278
+ #thumbnail-panel {
279
+ width: 50;
280
+ min-width: 50;
281
+ max-width: 50;
282
+ height: 100%;
283
+ background: #0d1117;
284
+ border-left: solid #30363d;
209
285
  padding: 0 1;
210
286
  }
211
287
 
288
+ #thumbnail-panel.hidden {
289
+ display: none;
290
+ }
291
+
292
+ #thumb-title {
293
+ height: 1;
294
+ color: #58a6ff;
295
+ text-style: bold;
296
+ background: #161b22;
297
+ padding: 0 1;
298
+ }
299
+
300
+ #thumb-preview {
301
+ height: 1fr;
302
+ background: #0d1117;
303
+ color: #3fb950;
304
+ }
305
+
306
+ #thumb-preview.loading {
307
+ color: #6e7681;
308
+ }
309
+
310
+ #ascii-content {
311
+ height: auto;
312
+ width: 100%;
313
+ }
314
+
315
+ .load-more {
316
+ color: #a371f7;
317
+ text-style: bold;
318
+ }
319
+
212
320
  /* ----------------------------------------
213
321
  QUEUE VIEW SPECIFICS
214
322
  ---------------------------------------- */
215
323
  #now-playing-section {
216
324
  height: auto;
217
- background: #111111;
325
+ background: #161b22;
326
+ border: solid #30363d;
218
327
  padding: 1;
219
328
  margin-bottom: 1;
220
329
  }
221
330
 
222
331
  #section-header {
223
- color: #888888;
332
+ color: #8b949e;
224
333
  text-style: bold;
225
334
  }
226
335
 
227
336
  #current-track {
228
- color: #00ff00;
337
+ color: #3fb950;
229
338
  padding: 0 1;
230
339
  }
231
340
 
@@ -236,16 +345,17 @@ ListView > ListItem.-highlight {
236
345
 
237
346
  #track-progress {
238
347
  width: 1fr;
239
- background: #333333;
348
+ background: #21262d;
240
349
  }
241
350
 
242
351
  #track-progress > .bar--bar {
243
- color: #00ff00;
352
+ color: #238636;
353
+ background: #238636;
244
354
  }
245
355
 
246
356
  #pos-time, #dur-time {
247
357
  width: 8;
248
- color: #888888;
358
+ color: #8b949e;
249
359
  }
250
360
 
251
361
  #mode-indicators {
@@ -255,7 +365,7 @@ ListView > ListItem.-highlight {
255
365
 
256
366
  #shuffle-indicator, #repeat-indicator {
257
367
  width: auto;
258
- color: #00ffff;
368
+ color: #a371f7;
259
369
  padding: 0 1;
260
370
  }
261
371
 
@@ -264,63 +374,210 @@ ListView > ListItem.-highlight {
264
374
  ---------------------------------------- */
265
375
  #new-playlist-input {
266
376
  width: 100%;
267
- background: #1a1a1a;
268
- border: tall #333333;
269
- color: #ffffff;
377
+ background: #0d1117;
378
+ border: tall #30363d;
379
+ color: #f0f6fc;
270
380
  margin: 1 0;
271
381
  }
272
382
 
273
383
  #new-playlist-input:focus {
274
- border: tall #00ff00;
384
+ border: tall #58a6ff;
385
+ }
386
+
387
+ /* ----------------------------------------
388
+ HELP OVERLAY
389
+ ---------------------------------------- */
390
+ HelpScreen {
391
+ align: center middle;
392
+ }
393
+
394
+ #help-container {
395
+ width: 70;
396
+ height: auto;
397
+ max-height: 80%;
398
+ background: #161b22;
399
+ border: thick #30363d;
400
+ padding: 1 2;
401
+ }
402
+
403
+ #help-title {
404
+ text-align: center;
405
+ color: #58a6ff;
406
+ text-style: bold;
407
+ padding-bottom: 1;
408
+ }
409
+
410
+ #help-content {
411
+ color: #c9d1d9;
412
+ }
413
+
414
+ .help-section {
415
+ color: #f0883e;
416
+ text-style: bold;
417
+ padding-top: 1;
418
+ }
419
+
420
+ .help-key {
421
+ color: #a371f7;
422
+ text-style: bold;
423
+ }
424
+
425
+ .help-desc {
426
+ color: #8b949e;
427
+ }
428
+
429
+ /* ----------------------------------------
430
+ METADATA PANEL
431
+ ---------------------------------------- */
432
+ #metadata-panel {
433
+ height: auto;
434
+ background: #161b22;
435
+ border: solid #30363d;
436
+ padding: 1;
437
+ margin-top: 1;
438
+ }
439
+
440
+ #metadata-title {
441
+ color: #f0f6fc;
442
+ text-style: bold;
443
+ }
444
+
445
+ #metadata-channel {
446
+ color: #8b949e;
447
+ }
448
+
449
+ #metadata-stats {
450
+ color: #6e7681;
275
451
  }
276
452
 
277
453
  /* ----------------------------------------
278
- FOOTER
454
+ NOTIFICATIONS
455
+ ---------------------------------------- */
456
+ Toast {
457
+ background: #161b22;
458
+ border: solid #30363d;
459
+ color: #c9d1d9;
460
+ }
461
+
462
+ Toast.-information {
463
+ border: solid #58a6ff;
464
+ }
465
+
466
+ Toast.-warning {
467
+ border: solid #f0883e;
468
+ }
469
+
470
+ Toast.-error {
471
+ border: solid #f85149;
472
+ }
473
+
474
+ /* ----------------------------------------
475
+ FOOTER - Enhanced
279
476
  ---------------------------------------- */
280
477
  Footer {
281
- background: #111111;
282
- color: #888888;
478
+ background: #161b22;
479
+ color: #8b949e;
283
480
  }
284
481
 
285
482
  Footer > .footer--key {
286
- color: #00ff00;
287
- background: #1a1a1a;
483
+ color: #58a6ff;
484
+ background: #21262d;
485
+ text-style: bold;
288
486
  }
289
487
 
290
488
  Footer > .footer--description {
291
- color: #888888;
489
+ color: #8b949e;
292
490
  }
293
491
 
294
492
  /* ----------------------------------------
295
- LABELS (General)
493
+ FOCUS INDICATORS
296
494
  ---------------------------------------- */
297
- .label {
298
- color: #888888;
495
+ Input:focus {
496
+ border: tall #58a6ff;
497
+ }
498
+
499
+ Button:focus {
500
+ background: #1f6feb;
299
501
  }
300
502
 
301
503
  """
302
504
 
303
- # Alternative themes (can be switched via config)
505
+ # Color palette for programmatic access
506
+ COLORS = {
507
+ # Base colors (GitHub Dark theme inspired)
508
+ "bg_primary": "#0d1117",
509
+ "bg_secondary": "#161b22",
510
+ "bg_tertiary": "#21262d",
511
+ "border": "#30363d",
512
+ "border_active": "#58a6ff",
513
+
514
+ # Text colors
515
+ "text_primary": "#f0f6fc",
516
+ "text_secondary": "#c9d1d9",
517
+ "text_muted": "#8b949e",
518
+ "text_faint": "#6e7681",
519
+
520
+ # Accent colors
521
+ "blue": "#58a6ff",
522
+ "green": "#3fb950",
523
+ "green_dark": "#238636",
524
+ "orange": "#f0883e",
525
+ "red": "#f85149",
526
+ "purple": "#a371f7",
527
+ "cyan": "#39c5cf",
528
+ "yellow": "#d29922",
529
+
530
+ # Status colors
531
+ "playing": "#3fb950",
532
+ "paused": "#f0883e",
533
+ "stopped": "#6e7681",
534
+ "queued": "#f0883e",
535
+ "error": "#f85149",
536
+ "success": "#3fb950",
537
+ "warning": "#f0883e",
538
+ "info": "#58a6ff",
539
+ }
540
+
541
+ # Alternative themes
304
542
  THEMES = {
543
+ "github_dark": {
544
+ "primary": "#58a6ff",
545
+ "secondary": "#8b949e",
546
+ "accent": "#a371f7",
547
+ "success": "#3fb950",
548
+ "warning": "#f0883e",
549
+ "error": "#f85149",
550
+ "background": "#0d1117",
551
+ "surface": "#161b22",
552
+ },
305
553
  "matrix": {
306
554
  "primary": "#00ff00",
307
555
  "secondary": "#008800",
308
556
  "accent": "#00ffff",
557
+ "success": "#00ff00",
558
+ "warning": "#ffff00",
559
+ "error": "#ff0000",
309
560
  "background": "#0a0a0a",
310
561
  "surface": "#1a1a1a",
311
562
  },
312
- "hacker": {
313
- "primary": "#00ffff",
314
- "secondary": "#008888",
315
- "accent": "#ff00ff",
316
- "background": "#0a0a0a",
317
- "surface": "#1a1a1a",
563
+ "dracula": {
564
+ "primary": "#bd93f9",
565
+ "secondary": "#6272a4",
566
+ "accent": "#ff79c6",
567
+ "success": "#50fa7b",
568
+ "warning": "#ffb86c",
569
+ "error": "#ff5555",
570
+ "background": "#282a36",
571
+ "surface": "#44475a",
318
572
  },
319
- "minimal": {
320
- "primary": "#ffffff",
321
- "secondary": "#888888",
322
- "accent": "#4444ff",
323
- "background": "#000000",
324
- "surface": "#111111",
573
+ "nord": {
574
+ "primary": "#88c0d0",
575
+ "secondary": "#81a1c1",
576
+ "accent": "#b48ead",
577
+ "success": "#a3be8c",
578
+ "warning": "#ebcb8b",
579
+ "error": "#bf616a",
580
+ "background": "#2e3440",
581
+ "surface": "#3b4252",
325
582
  },
326
583
  }