@oh-my-pi/omp-stats 18.1.2 → 18.1.4

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.
@@ -505,6 +505,7 @@
505
505
  --accent-cyan: var(--link);
506
506
  --bg-hover: var(--surface-2);
507
507
  --bg-elevated: var(--surface-2);
508
+ --select-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23999' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
508
509
  --radius-sm: 3px;
509
510
  --radius-md: 6px;
510
511
  --radius-lg: 8px;
@@ -526,6 +527,7 @@
526
527
  --link: oklch(0.58 0.13 230);
527
528
  --success: oklch(0.55 0.13 150);
528
529
  --danger: oklch(0.55 0.19 25);
530
+ --select-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23555' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
529
531
  --warning: oklch(0.6 0.13 85);
530
532
  }
531
533
  }
@@ -545,6 +547,7 @@
545
547
  --link: oklch(0.58 0.13 230);
546
548
  --success: oklch(0.55 0.13 150);
547
549
  --danger: oklch(0.55 0.19 25);
550
+ --select-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23555' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
548
551
  --warning: oklch(0.6 0.13 85);
549
552
  }
550
553
  @layer base {
@@ -862,6 +865,50 @@
862
865
  background: var(--surface);
863
866
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.18);
864
867
  }
868
+ .stats-select {
869
+ appearance: none;
870
+ padding: 6px 28px 6px 12px;
871
+ font-size: 13px;
872
+ font-weight: 500;
873
+ font-family: inherit;
874
+ color: var(--text);
875
+ background-color: var(--surface-2);
876
+ background-image: var(--select-chevron);
877
+ background-repeat: no-repeat;
878
+ background-position: right 10px center;
879
+ border: 1px solid var(--border);
880
+ border-radius: var(--radius-md);
881
+ cursor: pointer;
882
+ transition: border-color 0.15s ease, background-color 0.15s ease;
883
+ max-width: 100%;
884
+ text-overflow: ellipsis;
885
+ }
886
+ .stats-select:hover:not(:disabled) {
887
+ border-color: var(--border-strong);
888
+ background-color: var(--bg-hover);
889
+ }
890
+ .stats-select:focus-visible {
891
+ outline: 2px solid var(--link);
892
+ outline-offset: 1px;
893
+ }
894
+ .stats-select:disabled {
895
+ opacity: 0.5;
896
+ cursor: not-allowed;
897
+ }
898
+ @media (pointer: coarse) {
899
+ .stats-select {
900
+ font-size: 16px;
901
+ }
902
+ }
903
+ .stats-select option {
904
+ background-color: var(--surface);
905
+ color: var(--text);
906
+ }
907
+ @media (forced-colors: active) {
908
+ .stats-select {
909
+ appearance: auto;
910
+ }
911
+ }
865
912
  .stats-sync-container {
866
913
  display: flex;
867
914
  align-items: center;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@oh-my-pi/omp-stats",
4
- "version": "18.1.2",
4
+ "version": "18.1.4",
5
5
  "description": "Local observability dashboard for pi AI usage statistics",
6
6
  "homepage": "https://omp.sh",
7
7
  "author": "Stencil Labs, Inc.",
@@ -39,9 +39,9 @@
39
39
  "fmt": "oxfmt --no-error-on-unmatched-pattern 'src/**/*.{ts,tsx}' '{test,bench,examples,scripts}/**/*.ts' '*.ts'"
40
40
  },
41
41
  "dependencies": {
42
- "@oh-my-pi/pi-ai": "18.1.2",
43
- "@oh-my-pi/pi-catalog": "18.1.2",
44
- "@oh-my-pi/pi-utils": "18.1.2",
42
+ "@oh-my-pi/pi-ai": "18.1.4",
43
+ "@oh-my-pi/pi-catalog": "18.1.4",
44
+ "@oh-my-pi/pi-utils": "18.1.4",
45
45
  "@tailwindcss/node": "^4.3.2",
46
46
  "chart.js": "^4.5.1",
47
47
  "lucide-react": "^1.24.0",
@@ -35,6 +35,7 @@
35
35
  --accent-cyan: var(--link);
36
36
  --bg-hover: var(--surface-2);
37
37
  --bg-elevated: var(--surface-2);
38
+ --select-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23999' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
38
39
 
39
40
  --radius-sm: 3px;
40
41
  --radius-md: 6px;
@@ -60,6 +61,7 @@
60
61
  --link: oklch(0.58 0.13 230);
61
62
  --success: oklch(0.55 0.13 150);
62
63
  --danger: oklch(0.55 0.19 25);
64
+ --select-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23555' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
63
65
  --warning: oklch(0.6 0.13 85);
64
66
  }
65
67
  }
@@ -81,6 +83,7 @@
81
83
  --link: oklch(0.58 0.13 230);
82
84
  --success: oklch(0.55 0.13 150);
83
85
  --danger: oklch(0.55 0.19 25);
86
+ --select-chevron: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23555' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
84
87
  --warning: oklch(0.6 0.13 85);
85
88
  }
86
89
 
@@ -464,6 +467,62 @@
464
467
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.18);
465
468
  }
466
469
 
470
+ /* Select (native <select>, themed to match RangeControl/Buttons) */
471
+ .stats-select {
472
+ appearance: none;
473
+ padding: 6px 28px 6px 12px;
474
+ font-size: 13px;
475
+ font-weight: 500;
476
+ font-family: inherit;
477
+ color: var(--text);
478
+ background-color: var(--surface-2);
479
+ /* Chevron follows theme: light stroke on dark, dark stroke on light. */
480
+ background-image: var(--select-chevron);
481
+ background-repeat: no-repeat;
482
+ background-position: right 10px center;
483
+ border: 1px solid var(--border);
484
+ border-radius: var(--radius-md);
485
+ cursor: pointer;
486
+ transition: border-color 0.15s ease, background-color 0.15s ease;
487
+ max-width: 100%;
488
+ text-overflow: ellipsis;
489
+ }
490
+
491
+ .stats-select:hover:not(:disabled) {
492
+ border-color: var(--border-strong);
493
+ background-color: var(--bg-hover);
494
+ }
495
+
496
+ .stats-select:focus-visible {
497
+ outline: 2px solid var(--link);
498
+ outline-offset: 1px;
499
+ }
500
+
501
+ .stats-select:disabled {
502
+ opacity: 0.5;
503
+ cursor: not-allowed;
504
+ }
505
+
506
+ /* Prevent iOS from zooming the viewport when a select receives focus. */
507
+ @media (pointer: coarse) {
508
+ .stats-select {
509
+ font-size: 16px;
510
+ }
511
+ }
512
+
513
+ /* Dropdown list itself follows the page theme via color-scheme. */
514
+ .stats-select option {
515
+ background-color: var(--surface);
516
+ color: var(--text);
517
+ }
518
+ /* Forced-colors (Windows High Contrast) suppresses background images, so the
519
+ custom chevron vanishes; restore the native indicator instead. */
520
+ @media (forced-colors: active) {
521
+ .stats-select {
522
+ appearance: auto;
523
+ }
524
+ }
525
+
467
526
  /* Sync Button & Container */
468
527
  .stats-sync-container {
469
528
  display: flex;