solid_cache_dashboard 0.1.0 → 0.2.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.
- checksums.yaml +4 -4
- data/README.md +18 -1
- data/app/assets/javascripts/solid_cache_dashboard/application.js +2 -0
- data/app/assets/stylesheets/solid_cache_dashboard/application.css +595 -4
- data/app/controllers/solid_cache_dashboard/cache_entries_controller.rb +15 -1
- data/app/views/solid_cache_dashboard/application/_navbar.html.erb +1 -1
- data/app/views/solid_cache_dashboard/cache_entries/index.html.erb +40 -6
- data/app/views/solid_cache_dashboard/cache_entries/show.html.erb +5 -5
- data/lib/solid_cache_dashboard/decorators/cache_entry_decorator.rb +1 -1
- data/lib/solid_cache_dashboard/instrumentation.rb +18 -9
- data/lib/solid_cache_dashboard/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 61499ab71b0da718198b3a3c9151a2170ef3488c764a4653ca0ab102ceea1664
|
4
|
+
data.tar.gz: 5098ed766fe8ebc3cf37acd942f90385cc647d36dab171bc29a22a619a849041
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e3568ee5a7463557b73b5f596c7276a5793f80b1b4688105f928f1bfb241741d4fb1831b7af60a192957b47cf37fee15e2422268ea53fb6b896b4d844756359d
|
7
|
+
data.tar.gz: fac32592fc8847e60bc88b396549cb620ba0f5f924d4a45d86f2c707f7b975c2d96cc432a59ce5e4b97b8a0c5d60020d826c0c3f6a2e22de203a0610a44c4c7a
|
data/README.md
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
A beautiful dashboard for [solid_cache](https://github.com/rails/solid_cache). Monitor your Rails application cache performance with detailed stats and visualizations.
|
4
4
|
|
5
|
+
Inspired by [Solid Queue Dashboard](https://github.com/akodkod/solid-queue-dashboard)
|
6
|
+
|
5
7
|
## Features
|
6
8
|
|
7
9
|
- Real-time monitoring of cache hits, misses, writes, and deletes
|
@@ -13,7 +15,22 @@ A beautiful dashboard for [solid_cache](https://github.com/rails/solid_cache). M
|
|
13
15
|
|
14
16
|
## Screenshots
|
15
17
|
|
16
|
-
|
18
|
+
<p align="center">
|
19
|
+
<picture>
|
20
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/afomera/solid_cache_dashboard/refs/heads/main/docs/screenshots/dashboard_dark_v2.png">
|
21
|
+
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/afomera/solid_cache_dashboard/refs/heads/main/docs/screenshots/dashboard_light_v2.png">
|
22
|
+
<img alt="Solid Cache Dashboard for Rails" src="https://raw.githubusercontent.com/afomera/solid_cache_dashboard/refs/heads/main/docs/screenshots/dashboard_light_v2.png">
|
23
|
+
</picture>
|
24
|
+
</p>
|
25
|
+
---
|
26
|
+
|
27
|
+
<p align="center">
|
28
|
+
<picture>
|
29
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/afomera/solid_cache_dashboard/refs/heads/main/docs/screenshots/stats_dark_v2.png">
|
30
|
+
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/afomera/solid_cache_dashboard/refs/heads/main/docs/screenshots/stats_light_v2.png">
|
31
|
+
<img alt="Solid Cache Dashboard for Rails" src="https://raw.githubusercontent.com/afomera/solid_cache_dashboard/refs/heads/main/docs/screenshots/stats_light_v2.png">
|
32
|
+
</picture>
|
33
|
+
</p>
|
17
34
|
|
18
35
|
## Installation
|
19
36
|
|
@@ -6,6 +6,7 @@
|
|
6
6
|
"Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
7
7
|
--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
|
8
8
|
"Courier New", monospace;
|
9
|
+
--color-red-50: oklch(0.971 0.013 17.38);
|
9
10
|
--color-red-100: oklch(0.936 0.032 17.717);
|
10
11
|
--color-red-200: oklch(0.885 0.062 18.334);
|
11
12
|
--color-red-300: oklch(0.808 0.114 19.571);
|
@@ -13,23 +14,37 @@
|
|
13
14
|
--color-red-500: oklch(0.637 0.237 25.331);
|
14
15
|
--color-red-600: oklch(0.577 0.245 27.325);
|
15
16
|
--color-red-700: oklch(0.505 0.213 27.518);
|
17
|
+
--color-red-800: oklch(0.444 0.177 26.899);
|
16
18
|
--color-red-900: oklch(0.396 0.141 25.723);
|
19
|
+
--color-amber-50: oklch(0.987 0.022 95.277);
|
17
20
|
--color-amber-100: oklch(0.962 0.059 95.617);
|
21
|
+
--color-amber-200: oklch(0.924 0.12 95.746);
|
22
|
+
--color-amber-300: oklch(0.879 0.169 91.605);
|
18
23
|
--color-amber-400: oklch(0.828 0.189 84.429);
|
19
24
|
--color-amber-500: oklch(0.769 0.188 70.08);
|
20
25
|
--color-amber-600: oklch(0.666 0.179 58.318);
|
21
26
|
--color-amber-700: oklch(0.555 0.163 48.998);
|
22
27
|
--color-amber-800: oklch(0.473 0.137 46.201);
|
28
|
+
--color-amber-900: oklch(0.414 0.112 45.904);
|
29
|
+
--color-green-50: oklch(0.982 0.018 155.826);
|
23
30
|
--color-green-100: oklch(0.962 0.044 156.743);
|
24
31
|
--color-green-200: oklch(0.925 0.084 155.995);
|
32
|
+
--color-green-300: oklch(0.871 0.15 154.449);
|
25
33
|
--color-green-400: oklch(0.792 0.209 151.711);
|
26
34
|
--color-green-500: oklch(0.723 0.219 149.579);
|
27
35
|
--color-green-600: oklch(0.627 0.194 149.214);
|
28
36
|
--color-green-700: oklch(0.527 0.154 150.069);
|
29
37
|
--color-green-800: oklch(0.448 0.119 151.328);
|
38
|
+
--color-green-900: oklch(0.393 0.095 152.535);
|
39
|
+
--color-sky-50: oklch(0.977 0.013 236.62);
|
30
40
|
--color-sky-100: oklch(0.951 0.026 236.824);
|
41
|
+
--color-sky-200: oklch(0.901 0.058 230.902);
|
42
|
+
--color-sky-300: oklch(0.828 0.111 230.318);
|
43
|
+
--color-sky-400: oklch(0.746 0.16 232.661);
|
31
44
|
--color-sky-600: oklch(0.588 0.158 241.966);
|
32
45
|
--color-sky-700: oklch(0.5 0.134 242.749);
|
46
|
+
--color-sky-800: oklch(0.443 0.11 240.79);
|
47
|
+
--color-sky-900: oklch(0.391 0.09 240.876);
|
33
48
|
--color-blue-50: oklch(0.97 0.014 254.604);
|
34
49
|
--color-blue-100: oklch(0.932 0.032 255.585);
|
35
50
|
--color-blue-200: oklch(0.882 0.059 254.128);
|
@@ -41,11 +56,27 @@
|
|
41
56
|
--color-blue-800: oklch(0.424 0.199 265.638);
|
42
57
|
--color-blue-900: oklch(0.379 0.146 265.522);
|
43
58
|
--color-indigo-100: oklch(0.93 0.034 272.788);
|
59
|
+
--color-indigo-200: oklch(0.87 0.065 274.039);
|
60
|
+
--color-indigo-300: oklch(0.785 0.115 274.713);
|
61
|
+
--color-indigo-400: oklch(0.673 0.182 276.935);
|
62
|
+
--color-indigo-500: oklch(0.585 0.233 277.117);
|
44
63
|
--color-indigo-600: oklch(0.511 0.262 276.966);
|
45
64
|
--color-indigo-700: oklch(0.457 0.24 277.023);
|
65
|
+
--color-indigo-800: oklch(0.398 0.195 277.366);
|
66
|
+
--color-indigo-900: oklch(0.359 0.144 278.697);
|
46
67
|
--color-purple-100: oklch(0.946 0.033 307.174);
|
47
68
|
--color-purple-600: oklch(0.558 0.288 302.321);
|
48
69
|
--color-purple-700: oklch(0.496 0.265 301.924);
|
70
|
+
--color-gray-50: oklch(0.985 0.002 247.839);
|
71
|
+
--color-gray-100: oklch(0.967 0.003 264.542);
|
72
|
+
--color-gray-200: oklch(0.928 0.006 264.531);
|
73
|
+
--color-gray-300: oklch(0.872 0.01 258.338);
|
74
|
+
--color-gray-400: oklch(0.707 0.022 261.325);
|
75
|
+
--color-gray-500: oklch(0.551 0.027 264.364);
|
76
|
+
--color-gray-600: oklch(0.446 0.03 256.802);
|
77
|
+
--color-gray-700: oklch(0.373 0.034 259.733);
|
78
|
+
--color-gray-800: oklch(0.278 0.033 256.848);
|
79
|
+
--color-gray-900: oklch(0.21 0.034 264.665);
|
49
80
|
--color-zinc-50: oklch(0.985 0 0);
|
50
81
|
--color-zinc-100: oklch(0.967 0.001 286.375);
|
51
82
|
--color-zinc-200: oklch(0.92 0.004 286.32);
|
@@ -59,6 +90,7 @@
|
|
59
90
|
--color-black: #000;
|
60
91
|
--color-white: #fff;
|
61
92
|
--spacing: 0.25rem;
|
93
|
+
--container-xs: 20rem;
|
62
94
|
--text-xs: 0.75rem;
|
63
95
|
--text-xs--line-height: calc(1 / 0.75);
|
64
96
|
--text-sm: 0.875rem;
|
@@ -69,6 +101,8 @@
|
|
69
101
|
--text-xl--line-height: calc(1.75 / 1.25);
|
70
102
|
--text-2xl: 1.5rem;
|
71
103
|
--text-2xl--line-height: calc(2 / 1.5);
|
104
|
+
--text-3xl: 1.875rem;
|
105
|
+
--text-3xl--line-height: calc(2.25 / 1.875);
|
72
106
|
--font-weight-medium: 500;
|
73
107
|
--font-weight-semibold: 600;
|
74
108
|
--font-weight-bold: 700;
|
@@ -284,12 +318,27 @@
|
|
284
318
|
white-space: nowrap;
|
285
319
|
border-width: 0;
|
286
320
|
}
|
321
|
+
.absolute {
|
322
|
+
position: absolute;
|
323
|
+
}
|
287
324
|
.relative {
|
288
325
|
position: relative;
|
289
326
|
}
|
327
|
+
.inset-y-0 {
|
328
|
+
inset-block: calc(var(--spacing) * 0);
|
329
|
+
}
|
330
|
+
.right-0 {
|
331
|
+
right: calc(var(--spacing) * 0);
|
332
|
+
}
|
290
333
|
.z-0 {
|
291
334
|
z-index: 0;
|
292
335
|
}
|
336
|
+
.col-span-1 {
|
337
|
+
grid-column: span 1 / span 1;
|
338
|
+
}
|
339
|
+
.col-span-2 {
|
340
|
+
grid-column: span 2 / span 2;
|
341
|
+
}
|
293
342
|
.container {
|
294
343
|
width: 100%;
|
295
344
|
@media (width >= 40rem) {
|
@@ -327,6 +376,9 @@
|
|
327
376
|
.mt-2 {
|
328
377
|
margin-top: calc(var(--spacing) * 2);
|
329
378
|
}
|
379
|
+
.mt-4 {
|
380
|
+
margin-top: calc(var(--spacing) * 4);
|
381
|
+
}
|
330
382
|
.mt-6 {
|
331
383
|
margin-top: calc(var(--spacing) * 6);
|
332
384
|
}
|
@@ -354,6 +406,9 @@
|
|
354
406
|
.-ml-1 {
|
355
407
|
margin-left: calc(var(--spacing) * -1);
|
356
408
|
}
|
409
|
+
.ml-2 {
|
410
|
+
margin-left: calc(var(--spacing) * 2);
|
411
|
+
}
|
357
412
|
.ml-3 {
|
358
413
|
margin-left: calc(var(--spacing) * 3);
|
359
414
|
}
|
@@ -389,6 +444,9 @@
|
|
389
444
|
.block {
|
390
445
|
display: block;
|
391
446
|
}
|
447
|
+
.contents {
|
448
|
+
display: contents;
|
449
|
+
}
|
392
450
|
.flex {
|
393
451
|
display: flex;
|
394
452
|
}
|
@@ -407,6 +465,9 @@
|
|
407
465
|
.inline-flex {
|
408
466
|
display: inline-flex;
|
409
467
|
}
|
468
|
+
.list-item {
|
469
|
+
display: list-item;
|
470
|
+
}
|
410
471
|
.table {
|
411
472
|
display: table;
|
412
473
|
}
|
@@ -511,10 +572,6 @@
|
|
511
572
|
width: calc(var(--spacing) * 4);
|
512
573
|
height: calc(var(--spacing) * 4);
|
513
574
|
}
|
514
|
-
.size-6 {
|
515
|
-
width: calc(var(--spacing) * 6);
|
516
|
-
height: calc(var(--spacing) * 6);
|
517
|
-
}
|
518
575
|
.h-2 {
|
519
576
|
height: calc(var(--spacing) * 2);
|
520
577
|
}
|
@@ -530,9 +587,18 @@
|
|
530
587
|
.h-6 {
|
531
588
|
height: calc(var(--spacing) * 6);
|
532
589
|
}
|
590
|
+
.h-10 {
|
591
|
+
height: calc(var(--spacing) * 10);
|
592
|
+
}
|
533
593
|
.h-16 {
|
534
594
|
height: calc(var(--spacing) * 16);
|
535
595
|
}
|
596
|
+
.h-screen {
|
597
|
+
height: 100vh;
|
598
|
+
}
|
599
|
+
.max-h-96 {
|
600
|
+
max-height: calc(var(--spacing) * 96);
|
601
|
+
}
|
536
602
|
.min-h-screen {
|
537
603
|
min-height: 100vh;
|
538
604
|
}
|
@@ -560,27 +626,51 @@
|
|
560
626
|
.w-40 {
|
561
627
|
width: calc(var(--spacing) * 40);
|
562
628
|
}
|
629
|
+
.w-full {
|
630
|
+
width: 100%;
|
631
|
+
}
|
563
632
|
.max-w-\[200px\] {
|
564
633
|
max-width: 200px;
|
565
634
|
}
|
566
635
|
.max-w-\[400px\] {
|
567
636
|
max-width: 400px;
|
568
637
|
}
|
638
|
+
.max-w-xs {
|
639
|
+
max-width: var(--container-xs);
|
640
|
+
}
|
569
641
|
.min-w-full {
|
570
642
|
min-width: 100%;
|
571
643
|
}
|
572
644
|
.flex-1 {
|
573
645
|
flex: 1;
|
574
646
|
}
|
647
|
+
.flex-shrink {
|
648
|
+
flex-shrink: 1;
|
649
|
+
}
|
650
|
+
.flex-shrink-0 {
|
651
|
+
flex-shrink: 0;
|
652
|
+
}
|
575
653
|
.shrink-0 {
|
576
654
|
flex-shrink: 0;
|
577
655
|
}
|
656
|
+
.flex-grow {
|
657
|
+
flex-grow: 1;
|
658
|
+
}
|
578
659
|
.grow {
|
579
660
|
flex-grow: 1;
|
580
661
|
}
|
662
|
+
.border-collapse {
|
663
|
+
border-collapse: collapse;
|
664
|
+
}
|
581
665
|
.transform {
|
582
666
|
transform: var(--tw-rotate-x) var(--tw-rotate-y) var(--tw-rotate-z) var(--tw-skew-x) var(--tw-skew-y);
|
583
667
|
}
|
668
|
+
.cursor-pointer {
|
669
|
+
cursor: pointer;
|
670
|
+
}
|
671
|
+
.resize {
|
672
|
+
resize: both;
|
673
|
+
}
|
584
674
|
.grid-cols-1 {
|
585
675
|
grid-template-columns: repeat(1, minmax(0, 1fr));
|
586
676
|
}
|
@@ -599,12 +689,21 @@
|
|
599
689
|
.justify-center {
|
600
690
|
justify-content: center;
|
601
691
|
}
|
692
|
+
.justify-end {
|
693
|
+
justify-content: flex-end;
|
694
|
+
}
|
695
|
+
.gap-1 {
|
696
|
+
gap: calc(var(--spacing) * 1);
|
697
|
+
}
|
602
698
|
.gap-1\.5 {
|
603
699
|
gap: calc(var(--spacing) * 1.5);
|
604
700
|
}
|
605
701
|
.gap-2 {
|
606
702
|
gap: calc(var(--spacing) * 2);
|
607
703
|
}
|
704
|
+
.gap-4 {
|
705
|
+
gap: calc(var(--spacing) * 4);
|
706
|
+
}
|
608
707
|
.gap-6 {
|
609
708
|
gap: calc(var(--spacing) * 6);
|
610
709
|
}
|
@@ -622,6 +721,16 @@
|
|
622
721
|
margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));
|
623
722
|
}
|
624
723
|
}
|
724
|
+
.space-y-6 {
|
725
|
+
:where(& > :not(:last-child)) {
|
726
|
+
--tw-space-y-reverse: 0;
|
727
|
+
margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));
|
728
|
+
margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)));
|
729
|
+
}
|
730
|
+
}
|
731
|
+
.gap-x-4 {
|
732
|
+
column-gap: calc(var(--spacing) * 4);
|
733
|
+
}
|
625
734
|
.-space-x-px {
|
626
735
|
:where(& > :not(:last-child)) {
|
627
736
|
--tw-space-x-reverse: 0;
|
@@ -636,6 +745,23 @@
|
|
636
745
|
margin-inline-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse)));
|
637
746
|
}
|
638
747
|
}
|
748
|
+
.space-x-3 {
|
749
|
+
:where(& > :not(:last-child)) {
|
750
|
+
--tw-space-x-reverse: 0;
|
751
|
+
margin-inline-start: calc(calc(var(--spacing) * 3) * var(--tw-space-x-reverse));
|
752
|
+
margin-inline-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-x-reverse)));
|
753
|
+
}
|
754
|
+
}
|
755
|
+
.space-x-4 {
|
756
|
+
:where(& > :not(:last-child)) {
|
757
|
+
--tw-space-x-reverse: 0;
|
758
|
+
margin-inline-start: calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse));
|
759
|
+
margin-inline-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse)));
|
760
|
+
}
|
761
|
+
}
|
762
|
+
.gap-y-6 {
|
763
|
+
row-gap: calc(var(--spacing) * 6);
|
764
|
+
}
|
639
765
|
.divide-y {
|
640
766
|
:where(& > :not(:last-child)) {
|
641
767
|
--tw-divide-y-reverse: 0;
|
@@ -645,6 +771,11 @@
|
|
645
771
|
border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse)));
|
646
772
|
}
|
647
773
|
}
|
774
|
+
.divide-gray-200 {
|
775
|
+
:where(& > :not(:last-child)) {
|
776
|
+
border-color: var(--color-gray-200);
|
777
|
+
}
|
778
|
+
}
|
648
779
|
.divide-zinc-200 {
|
649
780
|
:where(& > :not(:last-child)) {
|
650
781
|
border-color: var(--color-zinc-200);
|
@@ -661,6 +792,9 @@
|
|
661
792
|
.overflow-x-auto {
|
662
793
|
overflow-x: auto;
|
663
794
|
}
|
795
|
+
.overflow-y-auto {
|
796
|
+
overflow-y: auto;
|
797
|
+
}
|
664
798
|
.rounded {
|
665
799
|
border-radius: 0.25rem;
|
666
800
|
}
|
@@ -704,6 +838,12 @@
|
|
704
838
|
.border-blue-500 {
|
705
839
|
border-color: var(--color-blue-500);
|
706
840
|
}
|
841
|
+
.border-gray-200 {
|
842
|
+
border-color: var(--color-gray-200);
|
843
|
+
}
|
844
|
+
.border-gray-300 {
|
845
|
+
border-color: var(--color-gray-300);
|
846
|
+
}
|
707
847
|
.border-transparent {
|
708
848
|
border-color: transparent;
|
709
849
|
}
|
@@ -713,6 +853,9 @@
|
|
713
853
|
.border-zinc-300 {
|
714
854
|
border-color: var(--color-zinc-300);
|
715
855
|
}
|
856
|
+
.bg-amber-50 {
|
857
|
+
background-color: var(--color-amber-50);
|
858
|
+
}
|
716
859
|
.bg-amber-100 {
|
717
860
|
background-color: var(--color-amber-100);
|
718
861
|
}
|
@@ -731,6 +874,18 @@
|
|
731
874
|
.bg-blue-500 {
|
732
875
|
background-color: var(--color-blue-500);
|
733
876
|
}
|
877
|
+
.bg-blue-600 {
|
878
|
+
background-color: var(--color-blue-600);
|
879
|
+
}
|
880
|
+
.bg-gray-50 {
|
881
|
+
background-color: var(--color-gray-50);
|
882
|
+
}
|
883
|
+
.bg-gray-100 {
|
884
|
+
background-color: var(--color-gray-100);
|
885
|
+
}
|
886
|
+
.bg-green-50 {
|
887
|
+
background-color: var(--color-green-50);
|
888
|
+
}
|
734
889
|
.bg-green-100 {
|
735
890
|
background-color: var(--color-green-100);
|
736
891
|
}
|
@@ -743,9 +898,15 @@
|
|
743
898
|
.bg-indigo-100 {
|
744
899
|
background-color: var(--color-indigo-100);
|
745
900
|
}
|
901
|
+
.bg-indigo-600 {
|
902
|
+
background-color: var(--color-indigo-600);
|
903
|
+
}
|
746
904
|
.bg-purple-100 {
|
747
905
|
background-color: var(--color-purple-100);
|
748
906
|
}
|
907
|
+
.bg-red-50 {
|
908
|
+
background-color: var(--color-red-50);
|
909
|
+
}
|
749
910
|
.bg-red-100 {
|
750
911
|
background-color: var(--color-red-100);
|
751
912
|
}
|
@@ -758,6 +919,9 @@
|
|
758
919
|
.bg-red-600 {
|
759
920
|
background-color: var(--color-red-600);
|
760
921
|
}
|
922
|
+
.bg-sky-50 {
|
923
|
+
background-color: var(--color-sky-50);
|
924
|
+
}
|
761
925
|
.bg-sky-100 {
|
762
926
|
background-color: var(--color-sky-100);
|
763
927
|
}
|
@@ -776,12 +940,18 @@
|
|
776
940
|
.p-1 {
|
777
941
|
padding: calc(var(--spacing) * 1);
|
778
942
|
}
|
943
|
+
.p-2 {
|
944
|
+
padding: calc(var(--spacing) * 2);
|
945
|
+
}
|
779
946
|
.p-3 {
|
780
947
|
padding: calc(var(--spacing) * 3);
|
781
948
|
}
|
782
949
|
.p-4 {
|
783
950
|
padding: calc(var(--spacing) * 4);
|
784
951
|
}
|
952
|
+
.p-6 {
|
953
|
+
padding: calc(var(--spacing) * 6);
|
954
|
+
}
|
785
955
|
.px-2 {
|
786
956
|
padding-inline: calc(var(--spacing) * 2);
|
787
957
|
}
|
@@ -797,6 +967,9 @@
|
|
797
967
|
.px-6 {
|
798
968
|
padding-inline: calc(var(--spacing) * 6);
|
799
969
|
}
|
970
|
+
.py-0 {
|
971
|
+
padding-block: calc(var(--spacing) * 0);
|
972
|
+
}
|
800
973
|
.py-0\.5 {
|
801
974
|
padding-block: calc(var(--spacing) * 0.5);
|
802
975
|
}
|
@@ -815,6 +988,9 @@
|
|
815
988
|
.py-5 {
|
816
989
|
padding-block: calc(var(--spacing) * 5);
|
817
990
|
}
|
991
|
+
.py-6 {
|
992
|
+
padding-block: calc(var(--spacing) * 6);
|
993
|
+
}
|
818
994
|
.py-8 {
|
819
995
|
padding-block: calc(var(--spacing) * 8);
|
820
996
|
}
|
@@ -824,6 +1000,9 @@
|
|
824
1000
|
.pt-4 {
|
825
1001
|
padding-top: calc(var(--spacing) * 4);
|
826
1002
|
}
|
1003
|
+
.pr-3 {
|
1004
|
+
padding-right: calc(var(--spacing) * 3);
|
1005
|
+
}
|
827
1006
|
.text-center {
|
828
1007
|
text-align: center;
|
829
1008
|
}
|
@@ -837,6 +1016,10 @@
|
|
837
1016
|
font-size: var(--text-2xl);
|
838
1017
|
line-height: var(--tw-leading, var(--text-2xl--line-height));
|
839
1018
|
}
|
1019
|
+
.text-3xl {
|
1020
|
+
font-size: var(--text-3xl);
|
1021
|
+
line-height: var(--tw-leading, var(--text-3xl--line-height));
|
1022
|
+
}
|
840
1023
|
.text-lg {
|
841
1024
|
font-size: var(--text-lg);
|
842
1025
|
line-height: var(--tw-leading, var(--text-lg--line-height));
|
@@ -853,6 +1036,10 @@
|
|
853
1036
|
font-size: var(--text-xs);
|
854
1037
|
line-height: var(--tw-leading, var(--text-xs--line-height));
|
855
1038
|
}
|
1039
|
+
.leading-5 {
|
1040
|
+
--tw-leading: calc(var(--spacing) * 5);
|
1041
|
+
line-height: calc(var(--spacing) * 5);
|
1042
|
+
}
|
856
1043
|
.leading-6 {
|
857
1044
|
--tw-leading: calc(var(--spacing) * 6);
|
858
1045
|
line-height: calc(var(--spacing) * 6);
|
@@ -885,6 +1072,9 @@
|
|
885
1072
|
.text-amber-600 {
|
886
1073
|
color: var(--color-amber-600);
|
887
1074
|
}
|
1075
|
+
.text-amber-700 {
|
1076
|
+
color: var(--color-amber-700);
|
1077
|
+
}
|
888
1078
|
.text-amber-800 {
|
889
1079
|
color: var(--color-amber-800);
|
890
1080
|
}
|
@@ -894,6 +1084,24 @@
|
|
894
1084
|
.text-blue-800 {
|
895
1085
|
color: var(--color-blue-800);
|
896
1086
|
}
|
1087
|
+
.text-gray-400 {
|
1088
|
+
color: var(--color-gray-400);
|
1089
|
+
}
|
1090
|
+
.text-gray-500 {
|
1091
|
+
color: var(--color-gray-500);
|
1092
|
+
}
|
1093
|
+
.text-gray-600 {
|
1094
|
+
color: var(--color-gray-600);
|
1095
|
+
}
|
1096
|
+
.text-gray-700 {
|
1097
|
+
color: var(--color-gray-700);
|
1098
|
+
}
|
1099
|
+
.text-gray-800 {
|
1100
|
+
color: var(--color-gray-800);
|
1101
|
+
}
|
1102
|
+
.text-gray-900 {
|
1103
|
+
color: var(--color-gray-900);
|
1104
|
+
}
|
897
1105
|
.text-green-600 {
|
898
1106
|
color: var(--color-green-600);
|
899
1107
|
}
|
@@ -906,6 +1114,9 @@
|
|
906
1114
|
.text-indigo-600 {
|
907
1115
|
color: var(--color-indigo-600);
|
908
1116
|
}
|
1117
|
+
.text-indigo-700 {
|
1118
|
+
color: var(--color-indigo-700);
|
1119
|
+
}
|
909
1120
|
.text-muted-foreground {
|
910
1121
|
color: var(--color-muted-foreground);
|
911
1122
|
}
|
@@ -918,9 +1129,18 @@
|
|
918
1129
|
.text-red-700 {
|
919
1130
|
color: var(--color-red-700);
|
920
1131
|
}
|
1132
|
+
.text-red-800 {
|
1133
|
+
color: var(--color-red-800);
|
1134
|
+
}
|
921
1135
|
.text-sky-600 {
|
922
1136
|
color: var(--color-sky-600);
|
923
1137
|
}
|
1138
|
+
.text-sky-700 {
|
1139
|
+
color: var(--color-sky-700);
|
1140
|
+
}
|
1141
|
+
.text-sky-800 {
|
1142
|
+
color: var(--color-sky-800);
|
1143
|
+
}
|
924
1144
|
.text-white {
|
925
1145
|
color: var(--color-white);
|
926
1146
|
}
|
@@ -945,10 +1165,17 @@
|
|
945
1165
|
.uppercase {
|
946
1166
|
text-transform: uppercase;
|
947
1167
|
}
|
1168
|
+
.underline {
|
1169
|
+
text-decoration-line: underline;
|
1170
|
+
}
|
948
1171
|
.antialiased {
|
949
1172
|
-webkit-font-smoothing: antialiased;
|
950
1173
|
-moz-osx-font-smoothing: grayscale;
|
951
1174
|
}
|
1175
|
+
.shadow {
|
1176
|
+
--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
|
1177
|
+
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
1178
|
+
}
|
952
1179
|
.shadow-none {
|
953
1180
|
--tw-shadow: 0 0 #0000;
|
954
1181
|
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
@@ -961,14 +1188,61 @@
|
|
961
1188
|
--tw-shadow: 0 1px 2px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.05));
|
962
1189
|
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
963
1190
|
}
|
1191
|
+
.outline {
|
1192
|
+
outline-style: var(--tw-outline-style);
|
1193
|
+
outline-width: 1px;
|
1194
|
+
}
|
1195
|
+
.grayscale {
|
1196
|
+
--tw-grayscale: grayscale(100%);
|
1197
|
+
filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
|
1198
|
+
}
|
964
1199
|
.filter {
|
965
1200
|
filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
|
966
1201
|
}
|
1202
|
+
.backdrop-filter {
|
1203
|
+
-webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
|
1204
|
+
backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
|
1205
|
+
}
|
967
1206
|
.transition {
|
968
1207
|
transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter;
|
969
1208
|
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
|
970
1209
|
transition-duration: var(--tw-duration, var(--default-transition-duration));
|
971
1210
|
}
|
1211
|
+
.hover\:bg-blue-700 {
|
1212
|
+
&:hover {
|
1213
|
+
@media (hover: hover) {
|
1214
|
+
background-color: var(--color-blue-700);
|
1215
|
+
}
|
1216
|
+
}
|
1217
|
+
}
|
1218
|
+
.hover\:bg-gray-50 {
|
1219
|
+
&:hover {
|
1220
|
+
@media (hover: hover) {
|
1221
|
+
background-color: var(--color-gray-50);
|
1222
|
+
}
|
1223
|
+
}
|
1224
|
+
}
|
1225
|
+
.hover\:bg-gray-100 {
|
1226
|
+
&:hover {
|
1227
|
+
@media (hover: hover) {
|
1228
|
+
background-color: var(--color-gray-100);
|
1229
|
+
}
|
1230
|
+
}
|
1231
|
+
}
|
1232
|
+
.hover\:bg-indigo-200 {
|
1233
|
+
&:hover {
|
1234
|
+
@media (hover: hover) {
|
1235
|
+
background-color: var(--color-indigo-200);
|
1236
|
+
}
|
1237
|
+
}
|
1238
|
+
}
|
1239
|
+
.hover\:bg-red-200 {
|
1240
|
+
&:hover {
|
1241
|
+
@media (hover: hover) {
|
1242
|
+
background-color: var(--color-red-200);
|
1243
|
+
}
|
1244
|
+
}
|
1245
|
+
}
|
972
1246
|
.hover\:bg-red-700 {
|
973
1247
|
&:hover {
|
974
1248
|
@media (hover: hover) {
|
@@ -990,6 +1264,20 @@
|
|
990
1264
|
}
|
991
1265
|
}
|
992
1266
|
}
|
1267
|
+
.hover\:text-gray-700 {
|
1268
|
+
&:hover {
|
1269
|
+
@media (hover: hover) {
|
1270
|
+
color: var(--color-gray-700);
|
1271
|
+
}
|
1272
|
+
}
|
1273
|
+
}
|
1274
|
+
.hover\:text-indigo-900 {
|
1275
|
+
&:hover {
|
1276
|
+
@media (hover: hover) {
|
1277
|
+
color: var(--color-indigo-900);
|
1278
|
+
}
|
1279
|
+
}
|
1280
|
+
}
|
993
1281
|
.hover\:text-red-900 {
|
994
1282
|
&:hover {
|
995
1283
|
@media (hover: hover) {
|
@@ -1011,12 +1299,27 @@
|
|
1011
1299
|
}
|
1012
1300
|
}
|
1013
1301
|
}
|
1302
|
+
.focus\:border-blue-500 {
|
1303
|
+
&:focus {
|
1304
|
+
border-color: var(--color-blue-500);
|
1305
|
+
}
|
1306
|
+
}
|
1014
1307
|
.focus\:ring-2 {
|
1015
1308
|
&:focus {
|
1016
1309
|
--tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentColor);
|
1017
1310
|
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
|
1018
1311
|
}
|
1019
1312
|
}
|
1313
|
+
.focus\:ring-blue-500 {
|
1314
|
+
&:focus {
|
1315
|
+
--tw-ring-color: var(--color-blue-500);
|
1316
|
+
}
|
1317
|
+
}
|
1318
|
+
.focus\:ring-indigo-500 {
|
1319
|
+
&:focus {
|
1320
|
+
--tw-ring-color: var(--color-indigo-500);
|
1321
|
+
}
|
1322
|
+
}
|
1020
1323
|
.focus\:ring-red-500 {
|
1021
1324
|
&:focus {
|
1022
1325
|
--tw-ring-color: var(--color-red-500);
|
@@ -1107,6 +1410,11 @@
|
|
1107
1410
|
}
|
1108
1411
|
}
|
1109
1412
|
}
|
1413
|
+
.sm\:rounded-lg {
|
1414
|
+
@media (width >= 40rem) {
|
1415
|
+
border-radius: var(--radius-lg);
|
1416
|
+
}
|
1417
|
+
}
|
1110
1418
|
.sm\:p-6 {
|
1111
1419
|
@media (width >= 40rem) {
|
1112
1420
|
padding: calc(var(--spacing) * 6);
|
@@ -1122,6 +1430,17 @@
|
|
1122
1430
|
padding-block: calc(var(--spacing) * 5);
|
1123
1431
|
}
|
1124
1432
|
}
|
1433
|
+
.sm\:text-sm {
|
1434
|
+
@media (width >= 40rem) {
|
1435
|
+
font-size: var(--text-sm);
|
1436
|
+
line-height: var(--tw-leading, var(--text-sm--line-height));
|
1437
|
+
}
|
1438
|
+
}
|
1439
|
+
.md\:w-1\/2 {
|
1440
|
+
@media (width >= 48rem) {
|
1441
|
+
width: calc(1/2 * 100%);
|
1442
|
+
}
|
1443
|
+
}
|
1125
1444
|
.md\:grid-cols-2 {
|
1126
1445
|
@media (width >= 48rem) {
|
1127
1446
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
@@ -1137,6 +1456,38 @@
|
|
1137
1456
|
grid-template-columns: repeat(4, minmax(0, 1fr));
|
1138
1457
|
}
|
1139
1458
|
}
|
1459
|
+
.md\:flex-row {
|
1460
|
+
@media (width >= 48rem) {
|
1461
|
+
flex-direction: row;
|
1462
|
+
}
|
1463
|
+
}
|
1464
|
+
.md\:items-center {
|
1465
|
+
@media (width >= 48rem) {
|
1466
|
+
align-items: center;
|
1467
|
+
}
|
1468
|
+
}
|
1469
|
+
.md\:justify-between {
|
1470
|
+
@media (width >= 48rem) {
|
1471
|
+
justify-content: space-between;
|
1472
|
+
}
|
1473
|
+
}
|
1474
|
+
.lg\:w-1\/3 {
|
1475
|
+
@media (width >= 64rem) {
|
1476
|
+
width: calc(1/3 * 100%);
|
1477
|
+
}
|
1478
|
+
}
|
1479
|
+
.lg\:grid-cols-4 {
|
1480
|
+
@media (width >= 64rem) {
|
1481
|
+
grid-template-columns: repeat(4, minmax(0, 1fr));
|
1482
|
+
}
|
1483
|
+
}
|
1484
|
+
.dark\:divide-gray-700 {
|
1485
|
+
&:is(.dark *) {
|
1486
|
+
:where(& > :not(:last-child)) {
|
1487
|
+
border-color: var(--color-gray-700);
|
1488
|
+
}
|
1489
|
+
}
|
1490
|
+
}
|
1140
1491
|
.dark\:divide-zinc-700 {
|
1141
1492
|
&:is(.dark *) {
|
1142
1493
|
:where(& > :not(:last-child)) {
|
@@ -1149,6 +1500,16 @@
|
|
1149
1500
|
border-color: var(--color-blue-600);
|
1150
1501
|
}
|
1151
1502
|
}
|
1503
|
+
.dark\:border-gray-600 {
|
1504
|
+
&:is(.dark *) {
|
1505
|
+
border-color: var(--color-gray-600);
|
1506
|
+
}
|
1507
|
+
}
|
1508
|
+
.dark\:border-gray-700 {
|
1509
|
+
&:is(.dark *) {
|
1510
|
+
border-color: var(--color-gray-700);
|
1511
|
+
}
|
1512
|
+
}
|
1152
1513
|
.dark\:border-zinc-600 {
|
1153
1514
|
&:is(.dark *) {
|
1154
1515
|
border-color: var(--color-zinc-600);
|
@@ -1174,11 +1535,21 @@
|
|
1174
1535
|
background-color: var(--color-amber-800);
|
1175
1536
|
}
|
1176
1537
|
}
|
1538
|
+
.dark\:bg-amber-900 {
|
1539
|
+
&:is(.dark *) {
|
1540
|
+
background-color: var(--color-amber-900);
|
1541
|
+
}
|
1542
|
+
}
|
1177
1543
|
.dark\:bg-background {
|
1178
1544
|
&:is(.dark *) {
|
1179
1545
|
background-color: var(--color-background);
|
1180
1546
|
}
|
1181
1547
|
}
|
1548
|
+
.dark\:bg-background\/20 {
|
1549
|
+
&:is(.dark *) {
|
1550
|
+
background-color: color-mix(in oklab, var(--color-background) 20%, transparent);
|
1551
|
+
}
|
1552
|
+
}
|
1182
1553
|
.dark\:bg-blue-600 {
|
1183
1554
|
&:is(.dark *) {
|
1184
1555
|
background-color: var(--color-blue-600);
|
@@ -1204,6 +1575,21 @@
|
|
1204
1575
|
background-color: var(--color-card);
|
1205
1576
|
}
|
1206
1577
|
}
|
1578
|
+
.dark\:bg-gray-700 {
|
1579
|
+
&:is(.dark *) {
|
1580
|
+
background-color: var(--color-gray-700);
|
1581
|
+
}
|
1582
|
+
}
|
1583
|
+
.dark\:bg-gray-800 {
|
1584
|
+
&:is(.dark *) {
|
1585
|
+
background-color: var(--color-gray-800);
|
1586
|
+
}
|
1587
|
+
}
|
1588
|
+
.dark\:bg-gray-900 {
|
1589
|
+
&:is(.dark *) {
|
1590
|
+
background-color: var(--color-gray-900);
|
1591
|
+
}
|
1592
|
+
}
|
1207
1593
|
.dark\:bg-green-600 {
|
1208
1594
|
&:is(.dark *) {
|
1209
1595
|
background-color: var(--color-green-600);
|
@@ -1219,11 +1605,26 @@
|
|
1219
1605
|
background-color: var(--color-green-800);
|
1220
1606
|
}
|
1221
1607
|
}
|
1608
|
+
.dark\:bg-green-900 {
|
1609
|
+
&:is(.dark *) {
|
1610
|
+
background-color: var(--color-green-900);
|
1611
|
+
}
|
1612
|
+
}
|
1222
1613
|
.dark\:bg-indigo-700 {
|
1223
1614
|
&:is(.dark *) {
|
1224
1615
|
background-color: var(--color-indigo-700);
|
1225
1616
|
}
|
1226
1617
|
}
|
1618
|
+
.dark\:bg-indigo-800 {
|
1619
|
+
&:is(.dark *) {
|
1620
|
+
background-color: var(--color-indigo-800);
|
1621
|
+
}
|
1622
|
+
}
|
1623
|
+
.dark\:bg-indigo-900 {
|
1624
|
+
&:is(.dark *) {
|
1625
|
+
background-color: var(--color-indigo-900);
|
1626
|
+
}
|
1627
|
+
}
|
1227
1628
|
.dark\:bg-purple-700 {
|
1228
1629
|
&:is(.dark *) {
|
1229
1630
|
background-color: var(--color-purple-700);
|
@@ -1239,6 +1640,16 @@
|
|
1239
1640
|
background-color: var(--color-red-700);
|
1240
1641
|
}
|
1241
1642
|
}
|
1643
|
+
.dark\:bg-red-800 {
|
1644
|
+
&:is(.dark *) {
|
1645
|
+
background-color: var(--color-red-800);
|
1646
|
+
}
|
1647
|
+
}
|
1648
|
+
.dark\:bg-red-900 {
|
1649
|
+
&:is(.dark *) {
|
1650
|
+
background-color: var(--color-red-900);
|
1651
|
+
}
|
1652
|
+
}
|
1242
1653
|
.dark\:bg-secondary {
|
1243
1654
|
&:is(.dark *) {
|
1244
1655
|
background-color: var(--color-secondary);
|
@@ -1249,16 +1660,36 @@
|
|
1249
1660
|
background-color: var(--color-sky-700);
|
1250
1661
|
}
|
1251
1662
|
}
|
1663
|
+
.dark\:bg-sky-900 {
|
1664
|
+
&:is(.dark *) {
|
1665
|
+
background-color: var(--color-sky-900);
|
1666
|
+
}
|
1667
|
+
}
|
1252
1668
|
.dark\:bg-zinc-800 {
|
1253
1669
|
&:is(.dark *) {
|
1254
1670
|
background-color: var(--color-zinc-800);
|
1255
1671
|
}
|
1256
1672
|
}
|
1673
|
+
.dark\:bg-zinc-900 {
|
1674
|
+
&:is(.dark *) {
|
1675
|
+
background-color: var(--color-zinc-900);
|
1676
|
+
}
|
1677
|
+
}
|
1257
1678
|
.dark\:text-amber-100 {
|
1258
1679
|
&:is(.dark *) {
|
1259
1680
|
color: var(--color-amber-100);
|
1260
1681
|
}
|
1261
1682
|
}
|
1683
|
+
.dark\:text-amber-200 {
|
1684
|
+
&:is(.dark *) {
|
1685
|
+
color: var(--color-amber-200);
|
1686
|
+
}
|
1687
|
+
}
|
1688
|
+
.dark\:text-amber-300 {
|
1689
|
+
&:is(.dark *) {
|
1690
|
+
color: var(--color-amber-300);
|
1691
|
+
}
|
1692
|
+
}
|
1262
1693
|
.dark\:text-amber-400 {
|
1263
1694
|
&:is(.dark *) {
|
1264
1695
|
color: var(--color-amber-400);
|
@@ -1279,11 +1710,46 @@
|
|
1279
1710
|
color: var(--color-blue-400);
|
1280
1711
|
}
|
1281
1712
|
}
|
1713
|
+
.dark\:text-gray-100 {
|
1714
|
+
&:is(.dark *) {
|
1715
|
+
color: var(--color-gray-100);
|
1716
|
+
}
|
1717
|
+
}
|
1718
|
+
.dark\:text-gray-200 {
|
1719
|
+
&:is(.dark *) {
|
1720
|
+
color: var(--color-gray-200);
|
1721
|
+
}
|
1722
|
+
}
|
1723
|
+
.dark\:text-gray-300 {
|
1724
|
+
&:is(.dark *) {
|
1725
|
+
color: var(--color-gray-300);
|
1726
|
+
}
|
1727
|
+
}
|
1728
|
+
.dark\:text-gray-400 {
|
1729
|
+
&:is(.dark *) {
|
1730
|
+
color: var(--color-gray-400);
|
1731
|
+
}
|
1732
|
+
}
|
1733
|
+
.dark\:text-gray-500 {
|
1734
|
+
&:is(.dark *) {
|
1735
|
+
color: var(--color-gray-500);
|
1736
|
+
}
|
1737
|
+
}
|
1282
1738
|
.dark\:text-green-100 {
|
1283
1739
|
&:is(.dark *) {
|
1284
1740
|
color: var(--color-green-100);
|
1285
1741
|
}
|
1286
1742
|
}
|
1743
|
+
.dark\:text-green-200 {
|
1744
|
+
&:is(.dark *) {
|
1745
|
+
color: var(--color-green-200);
|
1746
|
+
}
|
1747
|
+
}
|
1748
|
+
.dark\:text-green-300 {
|
1749
|
+
&:is(.dark *) {
|
1750
|
+
color: var(--color-green-300);
|
1751
|
+
}
|
1752
|
+
}
|
1287
1753
|
.dark\:text-green-400 {
|
1288
1754
|
&:is(.dark *) {
|
1289
1755
|
color: var(--color-green-400);
|
@@ -1294,6 +1760,16 @@
|
|
1294
1760
|
color: var(--color-indigo-100);
|
1295
1761
|
}
|
1296
1762
|
}
|
1763
|
+
.dark\:text-indigo-300 {
|
1764
|
+
&:is(.dark *) {
|
1765
|
+
color: var(--color-indigo-300);
|
1766
|
+
}
|
1767
|
+
}
|
1768
|
+
.dark\:text-indigo-400 {
|
1769
|
+
&:is(.dark *) {
|
1770
|
+
color: var(--color-indigo-400);
|
1771
|
+
}
|
1772
|
+
}
|
1297
1773
|
.dark\:text-purple-100 {
|
1298
1774
|
&:is(.dark *) {
|
1299
1775
|
color: var(--color-purple-100);
|
@@ -1304,6 +1780,16 @@
|
|
1304
1780
|
color: var(--color-red-100);
|
1305
1781
|
}
|
1306
1782
|
}
|
1783
|
+
.dark\:text-red-200 {
|
1784
|
+
&:is(.dark *) {
|
1785
|
+
color: var(--color-red-200);
|
1786
|
+
}
|
1787
|
+
}
|
1788
|
+
.dark\:text-red-300 {
|
1789
|
+
&:is(.dark *) {
|
1790
|
+
color: var(--color-red-300);
|
1791
|
+
}
|
1792
|
+
}
|
1307
1793
|
.dark\:text-red-400 {
|
1308
1794
|
&:is(.dark *) {
|
1309
1795
|
color: var(--color-red-400);
|
@@ -1314,6 +1800,21 @@
|
|
1314
1800
|
color: var(--color-sky-100);
|
1315
1801
|
}
|
1316
1802
|
}
|
1803
|
+
.dark\:text-sky-200 {
|
1804
|
+
&:is(.dark *) {
|
1805
|
+
color: var(--color-sky-200);
|
1806
|
+
}
|
1807
|
+
}
|
1808
|
+
.dark\:text-sky-300 {
|
1809
|
+
&:is(.dark *) {
|
1810
|
+
color: var(--color-sky-300);
|
1811
|
+
}
|
1812
|
+
}
|
1813
|
+
.dark\:text-sky-400 {
|
1814
|
+
&:is(.dark *) {
|
1815
|
+
color: var(--color-sky-400);
|
1816
|
+
}
|
1817
|
+
}
|
1317
1818
|
.dark\:text-white {
|
1318
1819
|
&:is(.dark *) {
|
1319
1820
|
color: var(--color-white);
|
@@ -1339,6 +1840,42 @@
|
|
1339
1840
|
color: var(--color-zinc-500);
|
1340
1841
|
}
|
1341
1842
|
}
|
1843
|
+
.dark\:hover\:bg-gray-600 {
|
1844
|
+
&:is(.dark *) {
|
1845
|
+
&:hover {
|
1846
|
+
@media (hover: hover) {
|
1847
|
+
background-color: var(--color-gray-600);
|
1848
|
+
}
|
1849
|
+
}
|
1850
|
+
}
|
1851
|
+
}
|
1852
|
+
.dark\:hover\:bg-gray-700 {
|
1853
|
+
&:is(.dark *) {
|
1854
|
+
&:hover {
|
1855
|
+
@media (hover: hover) {
|
1856
|
+
background-color: var(--color-gray-700);
|
1857
|
+
}
|
1858
|
+
}
|
1859
|
+
}
|
1860
|
+
}
|
1861
|
+
.dark\:hover\:bg-indigo-800 {
|
1862
|
+
&:is(.dark *) {
|
1863
|
+
&:hover {
|
1864
|
+
@media (hover: hover) {
|
1865
|
+
background-color: var(--color-indigo-800);
|
1866
|
+
}
|
1867
|
+
}
|
1868
|
+
}
|
1869
|
+
}
|
1870
|
+
.dark\:hover\:bg-red-800 {
|
1871
|
+
&:is(.dark *) {
|
1872
|
+
&:hover {
|
1873
|
+
@media (hover: hover) {
|
1874
|
+
background-color: var(--color-red-800);
|
1875
|
+
}
|
1876
|
+
}
|
1877
|
+
}
|
1878
|
+
}
|
1342
1879
|
.dark\:hover\:bg-secondary {
|
1343
1880
|
&:is(.dark *) {
|
1344
1881
|
&:hover {
|
@@ -1357,6 +1894,24 @@
|
|
1357
1894
|
}
|
1358
1895
|
}
|
1359
1896
|
}
|
1897
|
+
.dark\:hover\:text-gray-300 {
|
1898
|
+
&:is(.dark *) {
|
1899
|
+
&:hover {
|
1900
|
+
@media (hover: hover) {
|
1901
|
+
color: var(--color-gray-300);
|
1902
|
+
}
|
1903
|
+
}
|
1904
|
+
}
|
1905
|
+
}
|
1906
|
+
.dark\:hover\:text-indigo-300 {
|
1907
|
+
&:is(.dark *) {
|
1908
|
+
&:hover {
|
1909
|
+
@media (hover: hover) {
|
1910
|
+
color: var(--color-indigo-300);
|
1911
|
+
}
|
1912
|
+
}
|
1913
|
+
}
|
1914
|
+
}
|
1360
1915
|
.dark\:hover\:text-red-300 {
|
1361
1916
|
&:is(.dark *) {
|
1362
1917
|
&:hover {
|
@@ -1641,3 +2196,39 @@
|
|
1641
2196
|
syntax: "*";
|
1642
2197
|
inherits: false;
|
1643
2198
|
}
|
2199
|
+
@property --tw-backdrop-blur {
|
2200
|
+
syntax: "*";
|
2201
|
+
inherits: false;
|
2202
|
+
}
|
2203
|
+
@property --tw-backdrop-brightness {
|
2204
|
+
syntax: "*";
|
2205
|
+
inherits: false;
|
2206
|
+
}
|
2207
|
+
@property --tw-backdrop-contrast {
|
2208
|
+
syntax: "*";
|
2209
|
+
inherits: false;
|
2210
|
+
}
|
2211
|
+
@property --tw-backdrop-grayscale {
|
2212
|
+
syntax: "*";
|
2213
|
+
inherits: false;
|
2214
|
+
}
|
2215
|
+
@property --tw-backdrop-hue-rotate {
|
2216
|
+
syntax: "*";
|
2217
|
+
inherits: false;
|
2218
|
+
}
|
2219
|
+
@property --tw-backdrop-invert {
|
2220
|
+
syntax: "*";
|
2221
|
+
inherits: false;
|
2222
|
+
}
|
2223
|
+
@property --tw-backdrop-opacity {
|
2224
|
+
syntax: "*";
|
2225
|
+
inherits: false;
|
2226
|
+
}
|
2227
|
+
@property --tw-backdrop-saturate {
|
2228
|
+
syntax: "*";
|
2229
|
+
inherits: false;
|
2230
|
+
}
|
2231
|
+
@property --tw-backdrop-sepia {
|
2232
|
+
syntax: "*";
|
2233
|
+
inherits: false;
|
2234
|
+
}
|
@@ -1,7 +1,21 @@
|
|
1
1
|
module SolidCacheDashboard
|
2
2
|
class CacheEntriesController < ApplicationController
|
3
3
|
def index
|
4
|
-
|
4
|
+
query = SolidCache::Entry.order(created_at: :desc)
|
5
|
+
|
6
|
+
# Apply search filter if provided
|
7
|
+
if params[:search].present?
|
8
|
+
search_term = params[:search].strip
|
9
|
+
|
10
|
+
# Convert search term to key hash for exact key_hash lookups
|
11
|
+
require 'digest'
|
12
|
+
key_hash = Digest::SHA256.digest(search_term).unpack("q>").first rescue nil
|
13
|
+
|
14
|
+
# Search by key or key_hash
|
15
|
+
query = query.where("key LIKE ? OR key_hash = ?", "%#{search_term}%", key_hash)
|
16
|
+
end
|
17
|
+
|
18
|
+
@pagy, entries = pagy(query, items: 25)
|
5
19
|
@cache_entries = SolidCacheDashboard.decorate(entries)
|
6
20
|
end
|
7
21
|
|
@@ -36,7 +36,7 @@
|
|
36
36
|
|
37
37
|
|
38
38
|
|
39
|
-
<%= button_to toggle_appearance_path, method: :post, class: "bg-white dark:bg-background p-1 rounded-full text-zinc-400 hover:text-zinc-500 dark:hover:text-zinc-300 focus:outline-hidden" do %>
|
39
|
+
<%= button_to toggle_appearance_path, method: :post, class: "cursor-pointer bg-white dark:bg-background p-1 rounded-full text-zinc-400 hover:text-zinc-500 dark:hover:text-zinc-300 focus:outline-hidden" do %>
|
40
40
|
<% if dark_mode? %>
|
41
41
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-6 w-6" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
42
42
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z" />
|
@@ -1,10 +1,30 @@
|
|
1
1
|
<% content_for :page_title, "Cache Entries" %>
|
2
2
|
|
3
3
|
<div class="bg-white dark:bg-background shadow-sm overflow-hidden rounded-lg mb-6">
|
4
|
-
<div class="px-4 py-5 sm:px-6 flex justify-between items-center">
|
5
|
-
<
|
4
|
+
<div class="px-4 py-5 sm:px-6 flex flex-col md:flex-row md:justify-between md:items-center gap-4">
|
5
|
+
<div class="flex items-center">
|
6
|
+
<h3 class="text-lg leading-6 font-medium text-zinc-900 dark:text-white">Cache Entries</h3>
|
7
|
+
</div>
|
8
|
+
|
9
|
+
<!-- Search Form -->
|
10
|
+
<div class="w-full md:w-1/2 lg:w-1/3">
|
11
|
+
<%= form_with url: cache_entries_path, method: :get, class: "flex" do |f| %>
|
12
|
+
<div class="relative flex-grow">
|
13
|
+
<%= f.text_field :search, value: params[:search], placeholder: "Search by key...", class: "block h-10 px-3 w-full rounded-md border-zinc-300 dark:border-zinc-700 dark:bg-zinc-800 dark:text-white shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm" %>
|
14
|
+
<% if params[:search].present? %>
|
15
|
+
<%= link_to cache_entries_path, class: "absolute inset-y-0 right-0 flex items-center pr-3 text-zinc-400 hover:text-zinc-500" do %>
|
16
|
+
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
17
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
|
18
|
+
</svg>
|
19
|
+
<% end %>
|
20
|
+
<% end %>
|
21
|
+
</div>
|
22
|
+
<%= f.submit "Search", class: "cursor-pointer ml-2 inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500" %>
|
23
|
+
<% end %>
|
24
|
+
</div>
|
25
|
+
|
6
26
|
<div class="flex space-x-2">
|
7
|
-
<%= button_to clear_all_cache_entries_path, method: :delete, class: "inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-red-600 hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500", data: { confirm: "Are you sure you want to clear all cache entries? This cannot be undone." } do %>
|
27
|
+
<%= button_to clear_all_cache_entries_path, method: :delete, class: "cursor-pointer inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-red-600 hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500", data: { confirm: "Are you sure you want to clear all cache entries? This cannot be undone." } do %>
|
8
28
|
<svg class="-ml-1 mr-2 h-5 w-5" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
9
29
|
<path stroke-linecap="round" stroke-linejoin="round" d="M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0" />
|
10
30
|
</svg>
|
@@ -13,6 +33,20 @@
|
|
13
33
|
</div>
|
14
34
|
</div>
|
15
35
|
<div class="border-t border-zinc-200 dark:border-zinc-700">
|
36
|
+
<% if params[:search].present? %>
|
37
|
+
<div class="px-4 py-2 bg-blue-50 dark:bg-background/20 border-b border-zinc-200 dark:border-zinc-700">
|
38
|
+
<p class="text-sm text-zinc-700 dark:text-zinc-300">
|
39
|
+
<span class="font-medium">Search results for:</span> "<%= params[:search] %>"
|
40
|
+
<% if @pagy.count == 0 %>
|
41
|
+
<span class="text-red-600 dark:text-red-400 font-medium">No matches found</span>
|
42
|
+
<% elsif @pagy.count == 1 %>
|
43
|
+
<span class="text-green-600 dark:text-green-400 font-medium">1 match found</span>
|
44
|
+
<% else %>
|
45
|
+
<span class="text-green-600 dark:text-green-400 font-medium"><%= @pagy.count %> matches found</span>
|
46
|
+
<% end %>
|
47
|
+
</p>
|
48
|
+
</div>
|
49
|
+
<% end %>
|
16
50
|
<div class="overflow-x-auto">
|
17
51
|
<table class="min-w-full divide-y divide-zinc-200 dark:divide-zinc-700">
|
18
52
|
<thead class="bg-zinc-50 dark:bg-card">
|
@@ -45,7 +79,7 @@
|
|
45
79
|
<%= entry.expires_in || "Never" %>
|
46
80
|
</td>
|
47
81
|
<td class="px-6 py-4 whitespace-nowrap text-sm text-zinc-500 dark:text-zinc-400">
|
48
|
-
<%= button_to delete_cache_entry_path(entry.key_hash), method: :delete, class: "text-red-600 hover:text-red-900 dark:text-red-400 dark:hover:text-red-300" do %>
|
82
|
+
<%= button_to delete_cache_entry_path(entry.key_hash), method: :delete, class: "cursor-pointer text-red-600 hover:text-red-900 dark:text-red-400 dark:hover:text-red-300" do %>
|
49
83
|
<svg xmlns="http://www.w3.org/2000/svg" class="h-5 w-5" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
|
50
84
|
<path stroke-linecap="round" stroke-linejoin="round" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" />
|
51
85
|
</svg>
|
@@ -63,11 +97,11 @@
|
|
63
97
|
</tbody>
|
64
98
|
</table>
|
65
99
|
</div>
|
66
|
-
|
100
|
+
|
67
101
|
<%= render partial: 'solid_cache_dashboard/application/pagination', locals: {
|
68
102
|
pagy: @pagy,
|
69
103
|
item_name: "entry",
|
70
|
-
path_for_page: -> (page) { cache_entries_path(page: page) }
|
104
|
+
path_for_page: -> (page) { cache_entries_path(page: page, search: params[:search]) }
|
71
105
|
} %>
|
72
106
|
</div>
|
73
107
|
</div>
|
@@ -18,7 +18,7 @@
|
|
18
18
|
</div>
|
19
19
|
</div>
|
20
20
|
<div>
|
21
|
-
<%= button_to delete_cache_entry_path(@cache_entry.key_hash), method: :delete, class: "inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-red-600 hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500", data: { confirm: "Are you sure you want to delete this cache entry? This cannot be undone." } do %>
|
21
|
+
<%= button_to delete_cache_entry_path(@cache_entry.key_hash), method: :delete, class: "cursor-pointer inline-flex items-center px-4 py-2 border border-transparent text-sm font-medium rounded-md shadow-sm text-white bg-red-600 hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500", data: { confirm: "Are you sure you want to delete this cache entry? This cannot be undone." } do %>
|
22
22
|
<svg class="-ml-1 mr-2 h-5 w-5" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
|
23
23
|
<path stroke-linecap="round" stroke-linejoin="round" d="M14.74 9l-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 01-2.244 2.077H8.084a2.25 2.25 0 01-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 00-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 013.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 00-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 00-7.5 0" />
|
24
24
|
</svg>
|
@@ -47,7 +47,7 @@
|
|
47
47
|
<%= @cache_entry.created_at.to_fs(:long) %> (<%= @cache_entry.created_at_ago %>)
|
48
48
|
</dd>
|
49
49
|
</div>
|
50
|
-
|
50
|
+
|
51
51
|
<!-- Expiration Information -->
|
52
52
|
<div class="bg-white dark:bg-background px-4 py-5 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6">
|
53
53
|
<dt class="text-sm font-medium text-zinc-500 dark:text-zinc-400">Expiration Status</dt>
|
@@ -103,7 +103,7 @@
|
|
103
103
|
<% end %>
|
104
104
|
</dd>
|
105
105
|
</div>
|
106
|
-
|
106
|
+
|
107
107
|
<!-- Value Information -->
|
108
108
|
<div class="bg-zinc-50 dark:bg-card px-4 py-5 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6">
|
109
109
|
<dt class="text-sm font-medium text-zinc-500 dark:text-zinc-400">Value Type</dt>
|
@@ -111,7 +111,7 @@
|
|
111
111
|
<%= @cache_entry.value.class.name rescue "Unknown" %>
|
112
112
|
</dd>
|
113
113
|
</div>
|
114
|
-
|
114
|
+
|
115
115
|
<!-- Size Information -->
|
116
116
|
<div class="bg-white dark:bg-background px-4 py-5 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6">
|
117
117
|
<dt class="text-sm font-medium text-zinc-500 dark:text-zinc-400">Total Size</dt>
|
@@ -135,7 +135,7 @@
|
|
135
135
|
</div>
|
136
136
|
</dd>
|
137
137
|
</div>
|
138
|
-
|
138
|
+
|
139
139
|
<!-- Security Information -->
|
140
140
|
<div class="bg-white dark:bg-background px-4 py-5 sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6">
|
141
141
|
<dt class="text-sm font-medium text-zinc-500 dark:text-zinc-400">Encryption</dt>
|
@@ -7,14 +7,14 @@ module SolidCacheDashboard
|
|
7
7
|
def self.install
|
8
8
|
ActiveSupport::Notifications.subscribe("cache_read.active_support") do |*args|
|
9
9
|
event = ActiveSupport::Notifications::Event.new(*args)
|
10
|
-
|
11
|
-
|
10
|
+
key = event.payload[:key].to_s
|
11
|
+
key_hash = calculate_key_hash(key)
|
12
12
|
hit = event.payload[:hit]
|
13
13
|
|
14
14
|
SolidCacheDashboard::CacheEvent.create!(
|
15
15
|
event_type: hit ? SolidCacheDashboard::CacheEvent::HIT : SolidCacheDashboard::CacheEvent::MISS,
|
16
16
|
key_hash: key_hash,
|
17
|
-
key_string:
|
17
|
+
key_string: key.truncate(100),
|
18
18
|
duration: event.duration / 1000.0, # Convert from ms to seconds
|
19
19
|
created_at: Time.current
|
20
20
|
)
|
@@ -22,8 +22,8 @@ module SolidCacheDashboard
|
|
22
22
|
|
23
23
|
ActiveSupport::Notifications.subscribe("cache_write.active_support") do |*args|
|
24
24
|
event = ActiveSupport::Notifications::Event.new(*args)
|
25
|
-
|
26
|
-
|
25
|
+
key = event.payload[:key].to_s
|
26
|
+
key_hash = calculate_key_hash(key)
|
27
27
|
|
28
28
|
entry_size = nil
|
29
29
|
if event.payload[:entry]
|
@@ -33,7 +33,7 @@ module SolidCacheDashboard
|
|
33
33
|
SolidCacheDashboard::CacheEvent.create!(
|
34
34
|
event_type: SolidCacheDashboard::CacheEvent::WRITE,
|
35
35
|
key_hash: key_hash,
|
36
|
-
key_string:
|
36
|
+
key_string: key.truncate(100),
|
37
37
|
byte_size: entry_size,
|
38
38
|
duration: event.duration / 1000.0, # Convert from ms to seconds
|
39
39
|
created_at: Time.current
|
@@ -42,17 +42,26 @@ module SolidCacheDashboard
|
|
42
42
|
|
43
43
|
ActiveSupport::Notifications.subscribe("cache_delete.active_support") do |*args|
|
44
44
|
event = ActiveSupport::Notifications::Event.new(*args)
|
45
|
-
|
46
|
-
|
45
|
+
key = event.payload[:key].to_s
|
46
|
+
key_hash = calculate_key_hash(key)
|
47
47
|
|
48
48
|
SolidCacheDashboard::CacheEvent.create!(
|
49
49
|
event_type: SolidCacheDashboard::CacheEvent::DELETE,
|
50
50
|
key_hash: key_hash,
|
51
|
-
key_string:
|
51
|
+
key_string: key.truncate(100),
|
52
52
|
duration: event.duration / 1000.0, # Convert from ms to seconds
|
53
53
|
created_at: Time.current
|
54
54
|
)
|
55
55
|
end
|
56
56
|
end
|
57
|
+
|
58
|
+
# Calculate the key hash in the same way SolidCache::Entry does
|
59
|
+
def self.calculate_key_hash(key)
|
60
|
+
require 'digest'
|
61
|
+
|
62
|
+
# Need to unpack this as a signed integer - Same method used in SolidCache::Entry
|
63
|
+
# See: Digest::SHA256.digest(key.to_s).unpack("q>").first
|
64
|
+
Digest::SHA256.digest(key.to_s).unpack("q>").first
|
65
|
+
end
|
57
66
|
end
|
58
67
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: solid_cache_dashboard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrea Fomera
|
8
8
|
bindir: exe
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-02-
|
10
|
+
date: 2025-02-27 00:00:00.000000000 Z
|
11
11
|
dependencies:
|
12
12
|
- !ruby/object:Gem::Dependency
|
13
13
|
name: solid_cache
|