solid_queue_web 0.6.0 → 0.8.0

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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +38 -6
  3. data/Rakefile +2 -2
  4. data/app/assets/stylesheets/solid_queue_web/_01_base.css +41 -0
  5. data/app/assets/stylesheets/solid_queue_web/_02_layout.css +133 -0
  6. data/app/assets/stylesheets/solid_queue_web/_03_stats.css +49 -0
  7. data/app/assets/stylesheets/solid_queue_web/_04_table.css +52 -0
  8. data/app/assets/stylesheets/solid_queue_web/_05_badges.css +27 -0
  9. data/app/assets/stylesheets/solid_queue_web/_06_buttons.css +38 -0
  10. data/app/assets/stylesheets/solid_queue_web/_07_forms.css +103 -0
  11. data/app/assets/stylesheets/solid_queue_web/_08_detail.css +84 -0
  12. data/app/assets/stylesheets/solid_queue_web/_09_pagination.css +27 -0
  13. data/app/assets/stylesheets/solid_queue_web/_10_responsive.css +73 -0
  14. data/app/assets/stylesheets/solid_queue_web/_11_throughput.css +68 -0
  15. data/app/assets/stylesheets/solid_queue_web/_12_dark_mode.css +34 -0
  16. data/app/assets/stylesheets/solid_queue_web/application.css +1 -617
  17. data/app/controllers/solid_queue_web/application_controller.rb +2 -0
  18. data/app/controllers/solid_queue_web/dashboard_controller.rb +28 -0
  19. data/app/controllers/solid_queue_web/failed_jobs_controller.rb +26 -22
  20. data/app/controllers/solid_queue_web/history_controller.rb +35 -0
  21. data/app/controllers/solid_queue_web/jobs_controller.rb +38 -23
  22. data/app/controllers/solid_queue_web/queues/jobs_controller.rb +1 -1
  23. data/app/controllers/solid_queue_web/queues_controller.rb +15 -0
  24. data/app/controllers/solid_queue_web/retry_failed_jobs_controller.rb +31 -0
  25. data/app/controllers/solid_queue_web/search_controller.rb +1 -3
  26. data/app/helpers/solid_queue_web/application_helper.rb +15 -1
  27. data/app/javascript/solid_queue_web/application.js +2 -0
  28. data/app/javascript/solid_queue_web/refresh_controller.js +3 -2
  29. data/app/javascript/solid_queue_web/theme_controller.js +26 -0
  30. data/app/views/layouts/solid_queue_web/application.html.erb +12 -7
  31. data/app/views/solid_queue_web/dashboard/index.html.erb +66 -6
  32. data/app/views/solid_queue_web/failed_jobs/index.html.erb +2 -1
  33. data/app/views/solid_queue_web/history/index.html.erb +73 -0
  34. data/app/views/solid_queue_web/jobs/index.html.erb +11 -8
  35. data/app/views/solid_queue_web/processes/index.html.erb +1 -1
  36. data/app/views/solid_queue_web/queues/index.html.erb +15 -1
  37. data/app/views/solid_queue_web/search/index.html.erb +2 -2
  38. data/config/importmap.rb +1 -0
  39. data/config/routes.rb +15 -12
  40. data/lib/solid_queue_web/engine.rb +4 -2
  41. data/lib/solid_queue_web/version.rb +1 -1
  42. data/lib/solid_queue_web.rb +22 -0
  43. metadata +31 -1
@@ -0,0 +1,73 @@
1
+ @media (max-width: 768px) {
2
+ .sqd-detail-grid { grid-template-columns: 1fr; }
3
+ .sqd-grid-2 { grid-template-columns: 1fr; }
4
+ }
5
+
6
+ @media (max-width: 640px) {
7
+ .sqd-main {
8
+ padding: 1.5rem 1rem;
9
+ }
10
+
11
+ .sqd-page-header {
12
+ flex-direction: column;
13
+ align-items: flex-start;
14
+ gap: 0.75rem;
15
+ }
16
+
17
+ .sqd-card {
18
+ overflow-x: auto;
19
+ }
20
+
21
+ .sqd-card__header {
22
+ flex-wrap: wrap;
23
+ }
24
+
25
+ .sqd-stats {
26
+ grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
27
+ }
28
+
29
+ .sqd-truncate {
30
+ max-width: 160px;
31
+ }
32
+ }
33
+
34
+ @media (max-width: 576px) {
35
+ .sqd-header {
36
+ position: relative;
37
+ }
38
+
39
+ .sqd-header__inner {
40
+ padding: 0 1rem;
41
+ }
42
+
43
+ .sqd-nav-toggle {
44
+ display: flex;
45
+ }
46
+
47
+ .sqd-nav-wrapper {
48
+ display: none;
49
+ position: absolute;
50
+ top: 100%;
51
+ left: 0;
52
+ right: 0;
53
+ background: var(--surface);
54
+ border-bottom: 1px solid var(--border);
55
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
56
+ z-index: 50;
57
+ padding: 0.5rem;
58
+ }
59
+
60
+ .sqd-nav-wrapper.sqd-nav--open {
61
+ display: block;
62
+ }
63
+
64
+ .sqd-nav {
65
+ flex-direction: column;
66
+ gap: 0.25rem;
67
+ }
68
+
69
+ .sqd-nav a {
70
+ padding: 0.5rem 0.75rem;
71
+ font-size: 14px;
72
+ }
73
+ }
@@ -0,0 +1,68 @@
1
+ .sqd-throughput__summary {
2
+ display: flex;
3
+ gap: 1.25rem;
4
+ font-size: 13px;
5
+ color: var(--muted);
6
+ }
7
+
8
+ .sqd-throughput__summary strong {
9
+ color: var(--text);
10
+ font-weight: 600;
11
+ }
12
+
13
+ .sqd-sparkline {
14
+ display: flex;
15
+ align-items: flex-end;
16
+ gap: 3px;
17
+ height: 80px;
18
+ padding: 0.75rem 1.25rem 0;
19
+ }
20
+
21
+ .sqd-sparkline__col {
22
+ flex: 1;
23
+ display: flex;
24
+ flex-direction: column;
25
+ align-items: center;
26
+ gap: 3px;
27
+ height: 100%;
28
+ }
29
+
30
+ .sqd-sparkline__bar-wrap {
31
+ flex: 1;
32
+ width: 100%;
33
+ display: flex;
34
+ align-items: flex-end;
35
+ }
36
+
37
+ .sqd-sparkline__bar {
38
+ width: 100%;
39
+ background: var(--primary);
40
+ border-radius: 2px 2px 0 0;
41
+ min-height: 2px;
42
+ opacity: 0.75;
43
+ transition: opacity 0.15s;
44
+ }
45
+
46
+ .sqd-sparkline__bar:hover {
47
+ opacity: 1;
48
+ }
49
+
50
+ .sqd-sparkline__tick {
51
+ font-size: 10px;
52
+ color: var(--muted);
53
+ white-space: nowrap;
54
+ min-height: 14px;
55
+ line-height: 14px;
56
+ }
57
+
58
+ .sqd-sparkline__empty {
59
+ flex: 1;
60
+ display: flex;
61
+ align-items: center;
62
+ justify-content: center;
63
+ color: var(--muted);
64
+ font-size: 13px;
65
+ padding: 1rem 1.25rem;
66
+ }
67
+
68
+ .sqd-stat--done .sqd-stat__value { color: var(--success); }
@@ -0,0 +1,34 @@
1
+ [data-theme="dark"] {
2
+ --bg: #0d1117;
3
+ --surface: #161b22;
4
+ --border: #30363d;
5
+ --text: #e6edf3;
6
+ --muted: #8b949e;
7
+ --primary: #58a6ff;
8
+ --danger: #f85149;
9
+ --warning: #d29922;
10
+ --success: #3fb950;
11
+ --info: #39c5cf;
12
+ --purple: #bc8cff;
13
+ }
14
+
15
+ [data-theme="dark"] .sqd-badge--ready { background: #1b3a2b; color: #3fb950; }
16
+ [data-theme="dark"] .sqd-badge--scheduled { background: #0e2a33; color: #39c5cf; }
17
+ [data-theme="dark"] .sqd-badge--claimed { background: #112040; color: #58a6ff; }
18
+ [data-theme="dark"] .sqd-badge--failed { background: #3d1118; color: #f85149; }
19
+ [data-theme="dark"] .sqd-badge--blocked { background: #2d2010; color: #d29922; }
20
+ [data-theme="dark"] .sqd-badge--static { background: #1b3a2b; color: #3fb950; }
21
+ [data-theme="dark"] .sqd-badge--dynamic { background: #2c1f45; color: #bc8cff; }
22
+ [data-theme="dark"] .sqd-badge--paused { background: #2d2d2d; color: #8b949e; }
23
+ [data-theme="dark"] .sqd-badge--running { background: #1b3a2b; color: #3fb950; }
24
+ [data-theme="dark"] .sqd-badge--supervisor { background: #2c1f45; color: #bc8cff; }
25
+ [data-theme="dark"] .sqd-badge--worker { background: #1b3a2b; color: #3fb950; }
26
+ [data-theme="dark"] .sqd-badge--dispatcher { background: #0e2a33; color: #39c5cf; }
27
+
28
+ [data-theme="dark"] .sqd-flash--notice { background: #1b3a2b; color: #3fb950; border-color: #2d6a4f; }
29
+ [data-theme="dark"] .sqd-flash--alert { background: #3d1118; color: #f85149; border-color: #6a2030; }
30
+
31
+ [data-theme="dark"] .sqd-theme-toggle {
32
+ border-color: var(--border);
33
+ color: var(--text);
34
+ }