@validation-os/dashboard 0.16.1 → 0.16.3

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.
package/dist/styles.css CHANGED
@@ -3375,11 +3375,12 @@ button.vos-verdict-title {
3375
3375
  .vos-stage-grid-stagename { font-size: 15px !important; }
3376
3376
  .vos-stage-grid-stagegloss { font-size: 11px !important; line-height: 1.4 !important; }
3377
3377
  .vos-stage-grid-corner { font-weight: 600; }
3378
+ /* Heat scale = Risk intensity (red = high risk) */
3378
3379
  .vos-heat-0 { background: var(--vos-surface); opacity: 0.45; color: var(--vos-muted); border-style: dashed; }
3379
- .vos-heat-1 { background: color-mix(in srgb, var(--vos-accent) 16%, var(--vos-surface)); }
3380
- .vos-heat-2 { background: color-mix(in srgb, var(--vos-accent) 30%, var(--vos-surface)); }
3381
- .vos-heat-3 { background: color-mix(in srgb, var(--vos-accent) 44%, var(--vos-surface)); }
3382
- .vos-heat-4 { background: color-mix(in srgb, var(--vos-accent) 58%, var(--vos-surface)); }
3380
+ .vos-heat-1 { background: color-mix(in srgb, var(--vos-crit) 16%, var(--vos-surface)); }
3381
+ .vos-heat-2 { background: color-mix(in srgb, var(--vos-crit) 30%, var(--vos-surface)); }
3382
+ .vos-heat-3 { background: color-mix(in srgb, var(--vos-crit) 44%, var(--vos-surface)); }
3383
+ .vos-heat-4 { background: color-mix(in srgb, var(--vos-crit) 58%, var(--vos-surface)); }
3383
3384
 
3384
3385
  /* Glossary popover: parent cards no longer clip overflow, so the absolute
3385
3386
  * popover can show. High z-index in case it overlaps other stacked cards. */
@@ -3388,6 +3389,66 @@ button.vos-verdict-title {
3388
3389
  /* Topbar: hide the backend + agent indicators (clean header) */
3389
3390
  .vos-backend, .vos-hint:has(.vos-live-dot) { display: none !important; }
3390
3391
 
3392
+ /* ── DEV-5890: Question Type filter tabs + heat legend ─────────────────── */
3393
+ .vos-qt-filter-bar {
3394
+ display: flex;
3395
+ gap: 4px;
3396
+ padding: 8px 12px;
3397
+ border-bottom: 1px solid var(--vos-border);
3398
+ flex-wrap: wrap;
3399
+ }
3400
+
3401
+ .vos-qt-tab {
3402
+ font-size: 10px;
3403
+ font-weight: 500;
3404
+ padding: 3px 10px;
3405
+ border: 1px solid var(--vos-border);
3406
+ border-radius: 12px;
3407
+ background: transparent;
3408
+ color: var(--vos-muted);
3409
+ cursor: pointer;
3410
+ transition: all 0.15s ease-out;
3411
+ }
3412
+
3413
+ .vos-qt-tab:hover {
3414
+ border-color: var(--vos-border-strong);
3415
+ color: var(--vos-text);
3416
+ }
3417
+
3418
+ .vos-qt-tab-active {
3419
+ background: var(--vos-accent);
3420
+ border-color: var(--vos-accent);
3421
+ color: #fff;
3422
+ }
3423
+
3424
+ .vos-heat-legend {
3425
+ display: flex;
3426
+ align-items: center;
3427
+ gap: 4px;
3428
+ padding: 6px 12px;
3429
+ font-size: 9px;
3430
+ color: var(--vos-muted);
3431
+ }
3432
+
3433
+ .vos-heat-legend-label {
3434
+ margin-right: 4px;
3435
+ font-weight: 600;
3436
+ }
3437
+
3438
+ .vos-heat-swatch {
3439
+ display: inline-block;
3440
+ width: 14px;
3441
+ height: 10px;
3442
+ border-radius: 2px;
3443
+ border: 1px solid var(--vos-border);
3444
+ }
3445
+
3446
+ .vos-heat-swatch.vos-heat-0 { background: var(--vos-surface-2); }
3447
+ .vos-heat-swatch.vos-heat-1 { background: rgba(214, 69, 80, 0.15); }
3448
+ .vos-heat-swatch.vos-heat-2 { background: rgba(214, 69, 80, 0.35); }
3449
+ .vos-heat-swatch.vos-heat-3 { background: rgba(214, 69, 80, 0.6); }
3450
+ .vos-heat-swatch.vos-heat-4 { background: rgba(214, 69, 80, 0.85); }
3451
+
3391
3452
  /* ── DEV-5890: Question Type + stage threshold tags ────────────────────── */
3392
3453
  .vos-pipe-tag {
3393
3454
  font-size: 9px;
@@ -3404,13 +3465,15 @@ button.vos-verdict-title {
3404
3465
  .vos-pipe-tag-needs { color: var(--vos-warn); border-color: var(--vos-warn); }
3405
3466
  .vos-detail-tag-qt { border-color: var(--vos-accent); color: var(--vos-accent); }
3406
3467
 
3407
- /* Stage-keyed threshold bar (assumption detail, DEV-5890) — two bars:
3408
- Risk (fills toward threshold) + Confidence (fills toward floor). */
3468
+ /* Stage-keyed evidence bar (assumption detail, DEV-5890) — a single
3469
+ Confidence bar that fills UP toward the stage's floor marker. The target
3470
+ zone above the marker is tinted to show "this is where you need to be."
3471
+ Maturity's marker is at 60% (hard to reach); Discovery's is at 10% (easy). */
3409
3472
  .vos-threshold-bar-card {
3410
3473
  padding: 14px 16px;
3411
3474
  display: flex;
3412
3475
  flex-direction: column;
3413
- gap: 12px;
3476
+ gap: 10px;
3414
3477
  }
3415
3478
 
3416
3479
  .vos-threshold-bar-header {
@@ -3445,22 +3508,11 @@ button.vos-verdict-title {
3445
3508
  border-radius: 4px;
3446
3509
  }
3447
3510
 
3448
- .vos-threshold-bar-good {
3449
- color: var(--vos-good);
3450
- background: var(--vos-good-weak);
3451
- }
3452
-
3453
- .vos-threshold-bar-warn {
3454
- color: var(--vos-warn);
3455
- background: var(--vos-warn-weak);
3456
- }
3457
-
3458
- .vos-threshold-bar-crit {
3459
- color: var(--vos-crit);
3460
- background: var(--vos-crit-weak);
3461
- }
3511
+ .vos-threshold-bar-good { color: var(--vos-good); background: var(--vos-good-weak); }
3512
+ .vos-threshold-bar-warn { color: var(--vos-warn); background: var(--vos-warn-weak); }
3513
+ .vos-threshold-bar-crit { color: var(--vos-crit); background: var(--vos-crit-weak); }
3462
3514
 
3463
- /* Each bar section (Risk + Confidence) */
3515
+ /* Bar section */
3464
3516
  .vos-threshold-bar-section {
3465
3517
  display: flex;
3466
3518
  flex-direction: column;
@@ -3487,39 +3539,54 @@ button.vos-verdict-title {
3487
3539
  margin-left: auto;
3488
3540
  }
3489
3541
 
3490
- /* The bar track */
3542
+ /* The bar track — taller for prominence */
3491
3543
  .vos-threshold-bar-track {
3492
3544
  position: relative;
3493
- height: 18px;
3494
- border-radius: 5px;
3545
+ height: 24px;
3546
+ border-radius: 6px;
3495
3547
  background: var(--vos-surface-2);
3496
3548
  overflow: visible;
3497
3549
  border: 1px solid var(--vos-border);
3498
3550
  }
3499
3551
 
3552
+ .vos-threshold-bar-track-tall {
3553
+ height: 28px;
3554
+ }
3555
+
3556
+ /* The target zone — tinted area above the floor marker (where you need to be) */
3557
+ .vos-threshold-bar-target-zone {
3558
+ position: absolute;
3559
+ top: 0;
3560
+ right: 0;
3561
+ bottom: 0;
3562
+ background: repeating-linear-gradient(
3563
+ 45deg,
3564
+ transparent,
3565
+ transparent 4px,
3566
+ rgba(0, 0, 0, 0.03) 4px,
3567
+ rgba(0, 0, 0, 0.03) 8px
3568
+ );
3569
+ border-radius: 0 5px 5px 0;
3570
+ pointer-events: none;
3571
+ }
3572
+
3573
+ /* The fill */
3500
3574
  .vos-threshold-bar-fill {
3501
3575
  position: absolute;
3502
3576
  top: 0;
3503
3577
  left: 0;
3504
3578
  height: 100%;
3505
- border-radius: 4px 0 0 4px;
3506
- transition: width 0.4s cubic-bezier(0.16, 1, 0.3, 1);
3507
- opacity: 0.75;
3508
- }
3509
-
3510
- .vos-threshold-bar-fill.vos-fill-good {
3511
- background: var(--vos-good);
3512
- }
3513
-
3514
- .vos-threshold-bar-fill.vos-fill-warn {
3515
- background: var(--vos-warn);
3579
+ border-radius: 5px 0 0 5px;
3580
+ transition: width 0.5s cubic-bezier(0.16, 1, 0.3, 1);
3581
+ opacity: 0.8;
3582
+ z-index: 1;
3516
3583
  }
3517
3584
 
3518
- .vos-threshold-bar-fill.vos-fill-crit {
3519
- background: var(--vos-crit);
3520
- }
3585
+ .vos-threshold-bar-fill.vos-fill-good { background: var(--vos-good); }
3586
+ .vos-threshold-bar-fill.vos-fill-warn { background: var(--vos-warn); }
3587
+ .vos-threshold-bar-fill.vos-fill-crit { background: var(--vos-crit); }
3521
3588
 
3522
- /* The threshold/floor marker — a vertical dashed line */
3589
+ /* The floor marker — a vertical dashed line with a label above */
3523
3590
  .vos-threshold-bar-marker {
3524
3591
  position: absolute;
3525
3592
  top: -2px;
@@ -3530,6 +3597,46 @@ button.vos-verdict-title {
3530
3597
  z-index: 2;
3531
3598
  }
3532
3599
 
3600
+ .vos-threshold-bar-marker-label {
3601
+ position: absolute;
3602
+ top: -14px;
3603
+ left: 4px;
3604
+ font-size: 9px;
3605
+ font-weight: 600;
3606
+ color: var(--vos-muted);
3607
+ white-space: nowrap;
3608
+ }
3609
+
3610
+ /* Scale under the bar */
3611
+ .vos-threshold-bar-scale {
3612
+ display: flex;
3613
+ justify-content: space-between;
3614
+ font-size: 8px;
3615
+ color: var(--vos-faint);
3616
+ padding: 0 1px;
3617
+ }
3618
+
3619
+ .vos-threshold-bar-scale-mid {
3620
+ color: var(--vos-faint);
3621
+ }
3622
+
3623
+ /* Compact risk summary */
3624
+ .vos-threshold-bar-risk-summary {
3625
+ display: flex;
3626
+ align-items: baseline;
3627
+ gap: 8px;
3628
+ font-size: 11px;
3629
+ }
3630
+
3631
+ .vos-threshold-bar-risk-val {
3632
+ font-weight: 700;
3633
+ }
3634
+
3635
+ .vos-threshold-bar-risk-cap {
3636
+ color: var(--vos-muted);
3637
+ font-size: 10px;
3638
+ }
3639
+
3533
3640
  .vos-threshold-bar-hint {
3534
3641
  font-size: 11px;
3535
3642
  color: var(--vos-muted);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@validation-os/dashboard",
3
- "version": "0.16.1",
3
+ "version": "0.16.3",
4
4
  "description": "React dashboard components + hooks for validation-os, consuming the DataProvider seam.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -22,7 +22,7 @@
22
22
  "access": "public"
23
23
  },
24
24
  "dependencies": {
25
- "@validation-os/core": "0.16.1"
25
+ "@validation-os/core": "0.16.3"
26
26
  },
27
27
  "peerDependencies": {
28
28
  "react": ">=18",